@kinetixui/angular 0.24.0 → 0.25.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.
@@ -1 +1 @@
1
- {"version":3,"file":"kinetixui-angular.mjs","sources":["../../src/lib/types.ts","../../src/lib/button.ts","../../src/lib/primitives.ts","../../src/lib/toggles.ts","../../src/lib/display.ts","../../src/lib/forms.ts","../../src/lib/tabs.ts","../../src/public-api.ts","../../src/kinetixui-angular.ts"],"sourcesContent":["/**\n * The shared design contract, in Angular's type system.\n *\n * These unions are the same variant and size names the React, SwiftUI, Jetpack Compose and Flutter\n * implementations use. That is what \"parity\" means in KinetixUI: the contract and the tokens are shared, the\n * implementation is idiomatic per platform. Renaming one of these values is a cross-platform change, not an\n * Angular one.\n */\n\n/** Button fills. Capitalised to match the design source's own Variant property, as every other platform does. */\nexport type KxButtonVariant = 'Primary' | 'Secondary' | 'Outline' | 'Destructive' | 'Ghost' | 'Link';\nexport type KxButtonSize = 'sm' | 'md' | 'lg' | 'icon';\n/** Corner style — matches the design source's Corners property. */\nexport type KxCorners = 'sharp' | 'default' | 'pill';\n\nexport type KxBadgeVariant = 'default' | 'secondary' | 'outline' | 'destructive' | 'success' | 'warning';\nexport type KxAlertVariant = 'default' | 'destructive' | 'success' | 'warning' | 'info';\nexport type KxOrientation = 'horizontal' | 'vertical';\n\n/* ── display ────────────────────────────────────────────────────────────── */\n\nexport type KxSpinnerSize = 'sm' | 'md' | 'lg';\nexport type KxSpinnerVariant = 'default' | 'muted' | 'onColor';\nexport type KxTagVariant = 'default' | 'secondary' | 'destructive' | 'warning' | 'outline';\n/** Direction of change on a metric. `neutral` is \"measured, and flat\" — not \"unknown\". */\nexport type KxTrend = 'up' | 'down' | 'neutral';\nexport type KxEmptyMediaVariant = 'default' | 'icon';\n\n/* ── forms ──────────────────────────────────────────────────────────────── */\n\nexport type KxToggleVariant = 'default' | 'outline';\nexport type KxToggleSize = 'sm' | 'md' | 'lg';\n/** Tone of the text under a field. `error` is the only one that also sets `aria-invalid` on the control. */\nexport type KxFieldMessageVariant = 'error' | 'success' | 'warning' | 'info';\n","import { Directive, computed, input } from '@angular/core';\nimport type { KxButtonSize, KxButtonVariant, KxCorners } from './types';\n\n/**\n * KinetixUI button.\n *\n * <button kxButton>Save</button>\n * <button kxButton variant=\"Outline\" size=\"lg\">Cancel</button>\n * <a kxButton variant=\"Link\" href=\"/docs\">Docs</a>\n *\n * A directive on a real `<button>` or `<a>`, not a `<kx-button>` wrapper. That is the idiomatic Angular choice\n * and the accessible one: the element keeps its own role, its `type`, `disabled`, form submission, focus order\n * and the browser's own activation behaviour, so none of it has to be re-implemented with ARIA. §28 of the\n * house rules — native semantics before ARIA — is the reason, not convenience.\n *\n * A disabled anchor is not a thing in HTML, so the anchor form is disabled with `aria-disabled` plus the\n * stylesheet's `pointer-events: none`; callers should also drop `href`. The directive does not silently rewrite\n * an anchor into a button.\n */\n@Directive({\n selector: 'button[kxButton], a[kxButton]',\n host: {\n '[class]': 'classes()',\n // exposed for application CSS and tests; mirrors the data-variant attribute the React button sets\n '[attr.data-variant]': 'variant()',\n '[attr.data-size]': 'size()',\n },\n})\nexport class KxButton {\n readonly variant = input<KxButtonVariant>('Primary');\n readonly size = input<KxButtonSize>('md');\n readonly corners = input<KxCorners>('default');\n\n protected readonly classes = computed(() => {\n const out = ['kx-btn', `kx-btn--${this.variant().toLowerCase()}`, `kx-btn--${this.size()}`];\n // \"default\" corners means \"whatever the control radius token says\", so it adds no class\n if (this.corners() !== 'default') out.push(`kx-btn--${this.corners()}`);\n return out.join(' ');\n });\n}\n","import { ChangeDetectionStrategy, Component, Directive, computed, input } from '@angular/core';\nimport type { KxAlertVariant, KxBadgeVariant, KxOrientation } from './types';\n\n/**\n * The presentational primitives: badge, card family, label, input, separator, progress and alert.\n *\n * Each is either a directive on the element HTML already has for the job (label, input) or a component that\n * renders one (badge, card, alert). Nothing here invents a role the platform already provides.\n */\n\n/* ── badge ──────────────────────────────────────────────────────────────── */\n\n/**\n * <kx-badge>New</kx-badge>\n * <kx-badge variant=\"success\">Synced</kx-badge>\n *\n * Presentational by default. A badge that conveys a status change the user must be told about should be given\n * a live region by the caller — this does not guess, because a wrong `aria-live` is worse than none.\n */\n@Component({\n selector: 'kx-badge',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: '<ng-content />',\n host: { '[class]': '\"kx-badge kx-badge--\" + variant()' },\n})\nexport class KxBadge {\n readonly variant = input<KxBadgeVariant>('default');\n}\n\n/* ── card ───────────────────────────────────────────────────────────────── */\n\n@Component({\n selector: 'kx-card',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: '<ng-content />',\n host: { class: 'kx-card' },\n})\nexport class KxCard {}\n\n@Component({\n selector: 'kx-card-header',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: '<ng-content />',\n host: { class: 'kx-card-header' },\n})\nexport class KxCardHeader {}\n\n/**\n * A real heading, at a level the page chooses. `level` exists because a card's title is only an `<h3>` in the\n * example — in a page that already has an `<h3>` the right level is whatever keeps the document outline\n * correct, and a component that hard-codes one produces broken heading structure at scale.\n *\n * The level is carried by `role=\"heading\"` + `aria-level` on the host rather than by switching between `<h1>`\n * … `<h6>` tags. That is not a shortcut: `<ng-content>` projects its content exactly once, so a template with\n * a heading tag per branch silently renders an empty heading for every branch after the first. Between a real\n * tag that loses its text and an ARIA heading that keeps it, the accessible answer is the one with the text in\n * it — and `role=\"heading\"` with an explicit level is fully supported.\n */\n@Component({\n selector: 'kx-card-title',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: '<ng-content />',\n host: {\n class: 'kx-card-title',\n role: 'heading',\n '[attr.aria-level]': 'level()',\n },\n})\nexport class KxCardTitle {\n readonly level = input<1 | 2 | 3 | 4 | 5 | 6>(3);\n}\n\n@Component({\n selector: 'kx-card-description',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: '<p class=\"kx-card-description\"><ng-content /></p>',\n})\nexport class KxCardDescription {}\n\n@Component({\n selector: 'kx-card-content',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: '<ng-content />',\n host: { class: 'kx-card-content' },\n})\nexport class KxCardContent {}\n\n@Component({\n selector: 'kx-card-footer',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: '<ng-content />',\n host: { class: 'kx-card-footer' },\n})\nexport class KxCardFooter {}\n\n/* ── label ──────────────────────────────────────────────────────────────── */\n\n/**\n * <label kxLabel for=\"email\">Email</label>\n *\n * A directive on a real `<label>`, so `for`/`id` association and click-to-focus are the browser's, not ours.\n */\n@Directive({\n selector: 'label[kxLabel]',\n host: { class: 'kx-label' },\n})\nexport class KxLabel {}\n\n/* ── input ──────────────────────────────────────────────────────────────── */\n\n/**\n * <input kxInput type=\"email\" [(ngModel)]=\"email\" />\n *\n * A directive, so `type`, `required`, `disabled`, autofill, the browser's own validation and every Angular\n * forms directive keep working untouched. The error state is read from `aria-invalid`, which means the\n * semantics drive the styling rather than a parallel `invalid` input that could disagree with them.\n *\n * Multi-line fields are `kxTextarea`, not this: a textarea has its own minimum height and resize affordance,\n * and the React package splits them for the same reason.\n */\n@Directive({\n selector: 'input[kxInput]',\n host: { class: 'kx-input' },\n})\nexport class KxInput {}\n\n/* ── separator ──────────────────────────────────────────────────────────── */\n\n/**\n * <kx-separator />\n * <kx-separator orientation=\"vertical\" />\n *\n * Decorative by default and therefore hidden from assistive technology, which is what a rule between two\n * visually grouped things usually is. Set `[decorative]=\"false\"` to expose it as a real `separator`.\n */\n@Component({\n selector: 'kx-separator',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: '',\n host: {\n '[class]': '\"kx-separator kx-separator--\" + orientation()',\n '[attr.role]': 'decorative() ? \"none\" : \"separator\"',\n '[attr.aria-hidden]': 'decorative() ? \"true\" : null',\n '[attr.aria-orientation]': 'decorative() || orientation() === \"horizontal\" ? null : \"vertical\"',\n },\n})\nexport class KxSeparator {\n readonly orientation = input<KxOrientation>('horizontal');\n readonly decorative = input(true);\n}\n\n/* ── progress ───────────────────────────────────────────────────────────── */\n\n/**\n * <kx-progress [value]=\"62\" />\n * <kx-progress [value]=\"null\" /> <!-- indeterminate -->\n *\n * A real `progressbar`. `value` is null for indeterminate, which drops `aria-valuenow` — the correct way to\n * say \"in progress, amount unknown\", rather than reporting a fake 0.\n */\n@Component({\n selector: 'kx-progress',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: '<div class=\"kx-progress__bar\" [style.inline-size.%]=\"percent()\"></div>',\n host: {\n class: 'kx-progress',\n role: 'progressbar',\n '[attr.aria-valuenow]': 'value()',\n '[attr.aria-valuemin]': '0',\n '[attr.aria-valuemax]': 'max()',\n '[attr.aria-valuetext]': 'valueText()',\n },\n})\nexport class KxProgress {\n readonly value = input<number | null>(0);\n readonly max = input(100);\n /** Announced instead of the raw percentage when the number alone would not mean anything (\"3 of 7 files\"). */\n readonly valueText = input<string | null>(null);\n\n protected readonly percent = computed(() => {\n const v = this.value();\n if (v === null) return 100; // indeterminate: a full track, animated by CSS rather than a fake number\n return Math.max(0, Math.min(100, (v / this.max()) * 100));\n });\n}\n\n/* ── alert ──────────────────────────────────────────────────────────────── */\n\n/**\n * <kx-alert variant=\"destructive\">\n * <kx-alert-title>Payment failed</kx-alert-title>\n * <kx-alert-description>Your card was declined.</kx-alert-description>\n * </kx-alert>\n *\n * `role` defaults to `alert` only for the variants that carry urgency. A neutral informational panel announced\n * as an assertive live region interrupts a screen-reader user for no reason, so `default` and `info` render as\n * a plain region and the caller can opt in.\n */\n@Component({\n selector: 'kx-alert',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: '<ng-content />',\n host: {\n '[class]': '\"kx-alert kx-alert--\" + variant()',\n '[attr.role]': 'role()',\n },\n})\nexport class KxAlert {\n readonly variant = input<KxAlertVariant>('default');\n protected readonly role = computed(() => (this.variant() === 'destructive' || this.variant() === 'warning' ? 'alert' : 'note'));\n}\n\n@Component({\n selector: 'kx-alert-title',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: '<p class=\"kx-alert-title\"><ng-content /></p>',\n})\nexport class KxAlertTitle {}\n\n@Component({\n selector: 'kx-alert-description',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: '<p class=\"kx-alert-description\"><ng-content /></p>',\n})\nexport class KxAlertDescription {}\n","import { ChangeDetectionStrategy, Component, Directive, booleanAttribute, forwardRef, input, model, output, signal } from '@angular/core';\nimport { NG_VALUE_ACCESSOR, type ControlValueAccessor } from '@angular/forms';\nimport type { KxToggleSize, KxToggleVariant } from './types';\n\n/**\n * Per-element ids for the `<input>`/`<label>` pairs below. A module counter rather than a static on each\n * class: a static field cannot be read by an instance initialiser declared above it, and the id only has to\n * be unique within the document.\n */\nlet seq = 0;\nconst uid = () => ++seq;\n\n/**\n * Checkbox and Switch — the two binary controls, and the package's forms architecture in miniature.\n *\n * Both implement `ControlValueAccessor`, so they work with `[(ngModel)]`, `formControlName` and\n * `formControl` exactly like a native input, including `disabled` driven by the form model\n * (`setDisabledState`) rather than only by an attribute. Both also expose a plain `[(checked)]` model for\n * applications that are not using Angular forms; the two paths write through the same setter so they cannot\n * disagree.\n *\n * Both render a real `<button>` carrying the ARIA role rather than a visually-hidden `<input>`. A button is\n * already focusable, already activates on Space and Enter, and already reports `disabled` to assistive\n * technology — so the role is the only thing ARIA has to add. The trade-off is deliberate and worth stating:\n * a `<button role=\"checkbox\">` submits no value in a native (non-Angular) form post. Angular forms carry the\n * value in the form model, which is how these are meant to be used.\n */\n\n/**\n * Shared CVA plumbing: the parts that would otherwise be copied verbatim into both controls.\n *\n * `@Directive()` with no selector, not a plain class — `input()`, `model()` and `output()` are only legal on a\n * class Angular's compiler knows about, so an undecorated base would fail the build with NG8110.\n */\n@Directive()\nabstract class KxToggleBase implements ControlValueAccessor {\n readonly checked = model(false);\n readonly disabled = input(false, { transform: booleanAttribute });\n /**\n * Emits only on real user interaction. `checkedChange` (from the model) also fires when a form or a parent\n * writes the value in, which is usually not what a caller reacting to \"the user flipped this\" wants.\n */\n readonly toggled = output<boolean>();\n\n /** `disabled` can come from the input OR from the form model — either one disables the control. */\n protected readonly formDisabled = signal(false);\n protected isDisabled(): boolean {\n return this.disabled() || this.formDisabled();\n }\n\n private onChange: (value: boolean) => void = () => {};\n private onTouched: () => void = () => {};\n\n protected toggle(): void {\n if (this.isDisabled()) return;\n const next = !this.checked();\n this.checked.set(next);\n this.onChange(next);\n this.onTouched();\n this.toggled.emit(next);\n }\n\n writeValue(value: boolean): void {\n this.checked.set(!!value);\n }\n registerOnChange(fn: (value: boolean) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.formDisabled.set(isDisabled);\n }\n}\n\n/**\n * <kx-checkbox [(ngModel)]=\"remember\" />\n * <kx-checkbox [(checked)]=\"remember\" (toggled)=\"save($event)\" />\n *\n * `indeterminate` renders `aria-checked=\"mixed\"` — the tri-state a \"select all\" header needs. It is display\n * only: activating an indeterminate checkbox resolves it to checked, as it does everywhere else.\n */\n@Component({\n selector: 'kx-checkbox',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => KxCheckbox), multi: true }],\n template: `\n <button\n type=\"button\"\n role=\"checkbox\"\n class=\"kx-checkbox\"\n [attr.aria-checked]=\"indeterminate() ? 'mixed' : checked()\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-labelledby]=\"ariaLabelledby()\"\n [disabled]=\"isDisabled()\"\n (click)=\"toggle()\"\n >\n @if (checked() || indeterminate()) {\n <svg viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\n @if (indeterminate()) {\n <path d=\"M4 8h8\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" />\n } @else {\n <path d=\"M3.5 8.5l3 3 6-6\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n }\n </svg>\n }\n </button>\n `,\n})\nexport class KxCheckbox extends KxToggleBase {\n readonly indeterminate = input(false, { transform: booleanAttribute });\n /** One of these is required when no visible `<label for>` points at the control. */\n readonly ariaLabel = input<string | null>(null, { alias: 'aria-label' });\n readonly ariaLabelledby = input<string | null>(null, { alias: 'aria-labelledby' });\n}\n\n/**\n * <kx-switch [(ngModel)]=\"notifications\" aria-label=\"Notifications\" />\n *\n * `role=\"switch\"` rather than a checkbox: it reports \"on/off\" instead of \"checked\", which is what an\n * immediately-applied setting is.\n */\n@Component({\n selector: 'kx-switch',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => KxSwitch), multi: true }],\n template: `\n <button\n type=\"button\"\n role=\"switch\"\n class=\"kx-switch\"\n [attr.aria-checked]=\"checked()\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-labelledby]=\"ariaLabelledby()\"\n [disabled]=\"isDisabled()\"\n (click)=\"toggle()\"\n >\n <span class=\"kx-switch__thumb\"></span>\n </button>\n `,\n})\nexport class KxSwitch extends KxToggleBase {\n readonly ariaLabel = input<string | null>(null, { alias: 'aria-label' });\n readonly ariaLabelledby = input<string | null>(null, { alias: 'aria-labelledby' });\n}\n\n/* ── toggle ─────────────────────────────────────────────────────────────── */\n\n/**\n * <button kxToggle [(pressed)]=\"bold\" aria-label=\"Bold\">B</button>\n *\n * A directive on a real `<button>` that carries `aria-pressed` — the ARIA pattern for a two-state button,\n * and the one thing ARIA has to add to a button that already has focus, activation and disabled handling.\n */\n@Directive({\n selector: 'button[kxToggle]',\n host: {\n '[class]': '\"kx-toggle kx-toggle--\" + variant() + \" kx-toggle--\" + size()',\n '[attr.aria-pressed]': 'pressed()',\n '(click)': 'press()',\n },\n})\nexport class KxToggle {\n readonly pressed = model(false);\n readonly variant = input<KxToggleVariant>('default');\n readonly size = input<KxToggleSize>('md');\n readonly toggled = output<boolean>();\n\n protected press(): void {\n const next = !this.pressed();\n this.pressed.set(next);\n this.toggled.emit(next);\n }\n}\n\n/* ── toggle group ───────────────────────────────────────────────────────── */\n\n/**\n * <kx-toggle-group [(value)]=\"marks\" aria-label=\"Text style\">\n * <kx-toggle-group-item value=\"bold\">B</kx-toggle-group-item>\n * </kx-toggle-group>\n *\n * Multiple-select by default: each item is an independent `aria-pressed` button inside a `role=\"group\"`, so\n * every one is its own tab stop and its own announcement — which is what a formatting toolbar is.\n *\n * `type=\"single\"` is a different control, and is rendered as one: a `radiogroup` of real `<input\n * type=\"radio\">` elements, so arrow-key selection and the single tab stop come from the browser. Sharing a\n * template between the two would mean re-implementing radio behaviour with ARIA, which is exactly the\n * trade this package refuses elsewhere.\n */\n@Component({\n selector: 'kx-toggle-group',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: '<ng-content />',\n host: {\n class: 'kx-toggle-group',\n '[attr.role]': \"type() === 'single' ? 'radiogroup' : 'group'\",\n },\n})\nexport class KxToggleGroup {\n readonly type = input<'single' | 'multiple'>('multiple');\n /** A string for `single`, an array for `multiple`. */\n readonly value = model<string | string[] | null>(null);\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly name = input(`kx-toggle-group-${uid()}`);\n\n isOn(value: string): boolean {\n const v = this.value();\n return Array.isArray(v) ? v.includes(value) : v === value;\n }\n\n toggle(value: string): void {\n if (this.disabled()) return;\n if (this.type() === 'single') {\n this.value.set(this.value() === value ? null : value);\n return;\n }\n const current = Array.isArray(this.value()) ? (this.value() as string[]) : [];\n this.value.set(current.includes(value) ? current.filter((v) => v !== value) : [...current, value]);\n }\n}\n\n@Component({\n selector: 'kx-toggle-group-item',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n @if (group.type() === 'single') {\n <input\n type=\"radio\"\n class=\"kx-toggle-group__radio\"\n [id]=\"id()\"\n [name]=\"group.name()\"\n [value]=\"value()\"\n [checked]=\"group.isOn(value())\"\n [disabled]=\"disabled() || group.disabled()\"\n (change)=\"group.toggle(value())\"\n />\n <label class=\"kx-toggle kx-toggle--group\" [for]=\"id()\"><ng-content /></label>\n } @else {\n <button\n type=\"button\"\n class=\"kx-toggle kx-toggle--group\"\n [attr.aria-pressed]=\"group.isOn(value())\"\n [disabled]=\"disabled() || group.disabled()\"\n (click)=\"group.toggle(value())\"\n >\n <ng-content />\n </button>\n }\n `,\n host: { class: 'kx-toggle-group__item' },\n})\nexport class KxToggleGroupItem {\n readonly value = input.required<string>();\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly id = input(`kx-toggle-group-item-${uid()}`);\n\n constructor(protected readonly group: KxToggleGroup) {}\n}\n\n/* ── segmented control ──────────────────────────────────────────────────── */\n\n/**\n * <kx-segmented-control [(value)]=\"range\" aria-label=\"Range\">\n * <kx-segment value=\"7d\">7 days</kx-segment>\n * <kx-segment value=\"30d\">30 days</kx-segment>\n * </kx-segmented-control>\n *\n * A single-choice control shown as one connected track — iOS's segmented control, on the web. It is a real\n * `radiogroup` of real radio inputs for the same reason the radio group is: arrow keys, one tab stop and the\n * \"exactly one is chosen\" semantics are the browser's.\n *\n * Unlike a toggle group, a segment cannot be turned off by clicking it again: a segmented control with\n * nothing selected has no meaning.\n */\n@Component({\n selector: 'kx-segmented-control',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: '<ng-content />',\n host: { class: 'kx-segmented', role: 'radiogroup' },\n})\nexport class KxSegmentedControl {\n readonly value = model<string | null>(null);\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly name = input(`kx-segmented-${uid()}`);\n readonly selected = output<string>();\n\n select(next: string): void {\n if (this.disabled()) return;\n this.value.set(next);\n this.selected.emit(next);\n }\n}\n\n@Component({\n selector: 'kx-segment',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <input\n type=\"radio\"\n class=\"kx-segmented__radio\"\n [id]=\"id()\"\n [name]=\"control.name()\"\n [value]=\"value()\"\n [checked]=\"control.value() === value()\"\n [disabled]=\"disabled() || control.disabled()\"\n (change)=\"control.select(value())\"\n />\n <label class=\"kx-segmented__label\" [for]=\"id()\"><ng-content /></label>\n `,\n host: { class: 'kx-segmented__item' },\n})\nexport class KxSegment {\n readonly value = input.required<string>();\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly id = input(`kx-segment-${uid()}`);\n\n constructor(protected readonly control: KxSegmentedControl) {}\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n Directive,\n booleanAttribute,\n computed,\n contentChildren,\n effect,\n input,\n output,\n signal,\n} from '@angular/core';\nimport type { KxEmptyMediaVariant, KxSpinnerSize, KxSpinnerVariant, KxTagVariant, KxTrend } from './types';\n\n/**\n * The display primitives: avatar, aspect ratio, keyboard glyphs, skeleton, spinner, tag, quote, metric and the\n * empty-state family.\n *\n * Nothing here holds application state. Each is either a directive on the element HTML already has for the\n * job, or a component that renders that element — the same rule the rest of the package follows.\n */\n\n/* ── aspect ratio ───────────────────────────────────────────────────────── */\n\n/**\n * <kx-aspect-ratio [ratio]=\"16 / 9\"><img src=\"cover.jpg\" alt=\"\" /></kx-aspect-ratio>\n *\n * The CSS `aspect-ratio` property, which every target browser has had for years. There is no padding-top\n * percentage hack here and no ResizeObserver: the platform does this now, and a component that re-implemented\n * it would be slower and would fight the container.\n */\n@Component({\n selector: 'kx-aspect-ratio',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: '<ng-content />',\n host: {\n class: 'kx-aspect-ratio',\n // a custom property rather than `aspect-ratio` directly, so the ratio is an input to the stylesheet and\n // the rule that consumes it stays in CSS with the rest of the component's layout\n '[style.--kx-aspect-ratio]': 'ratio()',\n },\n})\nexport class KxAspectRatio {\n readonly ratio = input(1);\n}\n\n/* ── avatar ─────────────────────────────────────────────────────────────── */\n\n/**\n * <kx-avatar>\n * <img kxAvatarImage src=\"/ada.jpg\" alt=\"Ada Lovelace\" />\n * <kx-avatar-fallback>AL</kx-avatar-fallback>\n * </kx-avatar>\n *\n * The fallback shows until the image reports `load`, and comes back if it reports `error`. That is the whole\n * reason this is a component rather than a styled `<img>`: a broken avatar that leaves a blank circle is the\n * failure users actually hit, and `alt` text alone does not fill the space.\n *\n * The image carries the accessible name. The fallback initials are decorative — announcing \"AL\" as well would\n * read the person's name twice, so `aria-hidden` is set on it and the caller keeps `alt` meaningful.\n */\n@Component({\n selector: 'kx-avatar',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: '<ng-content />',\n host: {\n '[class]': 'classes()',\n },\n})\nexport class KxAvatar {\n /** Set by KxAvatarImage as the image loads or fails; the fallback reads it. */\n readonly imageLoaded = signal(false);\n /** Set by KxAvatarGroup on the avatars past its `max`. Not an input: the group owns it, not the caller. */\n readonly collapsed = signal(false);\n\n protected readonly classes = computed(() => (this.collapsed() ? 'kx-avatar kx-avatar--collapsed' : 'kx-avatar'));\n}\n\n/**\n * A directive on a real `<img>`, so `src`, `srcset`, `loading=\"lazy\"`, `alt` and the browser's own decoding\n * are untouched. It only reports load state up to the avatar and hides itself until then.\n */\n@Directive({\n selector: 'img[kxAvatarImage]',\n host: {\n class: 'kx-avatar__image',\n '[hidden]': '!avatar.imageLoaded()',\n '(load)': 'avatar.imageLoaded.set(true)',\n '(error)': 'avatar.imageLoaded.set(false)',\n },\n})\nexport class KxAvatarImage {\n constructor(protected readonly avatar: KxAvatar) {}\n}\n\n@Component({\n selector: 'kx-avatar-fallback',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: '<ng-content />',\n host: {\n class: 'kx-avatar__fallback',\n 'aria-hidden': 'true',\n '[hidden]': 'avatar.imageLoaded()',\n },\n})\nexport class KxAvatarFallback {\n constructor(protected readonly avatar: KxAvatar) {}\n}\n\n/**\n * <kx-avatar-group [max]=\"3\">\n * <kx-avatar>…</kx-avatar>\n * …\n * </kx-avatar-group>\n *\n * Stacked, overlapping avatars with a \"+N\" marker for the rest. The group counts its projected avatars with a\n * content query and tells the ones past `max` to collapse; it does not re-wrap or re-render them, because a\n * projected node can only be rendered where it was projected.\n *\n * The overflow marker is announced (\"and 4 more\") rather than left as the bare glyph, which reads as \"plus\n * four\" out of context.\n */\n@Component({\n selector: 'kx-avatar-group',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <ng-content />\n @if (overflow() > 0) {\n <span class=\"kx-avatar kx-avatar-group__overflow\">\n <span class=\"kx-avatar__fallback\" aria-hidden=\"true\">+{{ overflow() }}</span>\n <span class=\"kx-sr-only\">and {{ overflow() }} more</span>\n </span>\n }\n `,\n host: { class: 'kx-avatar-group' },\n})\nexport class KxAvatarGroup {\n /** Visible avatars before the rest fold into the marker. Null (the default) shows every one. */\n readonly max = input<number | null>(null);\n\n private readonly avatars = contentChildren(KxAvatar);\n\n protected readonly overflow = computed(() => {\n const max = this.max();\n return max === null ? 0 : Math.max(0, this.avatars().length - max);\n });\n\n constructor() {\n effect(() => {\n const max = this.max();\n this.avatars().forEach((avatar, i) => avatar.collapsed.set(max !== null && i >= max));\n });\n }\n}\n\n/* ── keyboard keys ──────────────────────────────────────────────────────── */\n\n/**\n * <kbd kxKbdGroup><kbd kxKbd>Ctrl</kbd><kbd kxKbd>K</kbd></kbd>\n *\n * Directives on real `<kbd>` elements. `<kbd>` already means \"keyboard input\" to assistive technology and to\n * every reader of the markup, so there is nothing for a wrapper component to add.\n */\n@Directive({ selector: 'kbd[kxKbd]', host: { class: 'kx-kbd' } })\nexport class KxKbd {}\n\n@Directive({ selector: 'kbd[kxKbdGroup]', host: { class: 'kx-kbd-group' } })\nexport class KxKbdGroup {}\n\n/* ── skeleton ───────────────────────────────────────────────────────────── */\n\n/**\n * <kx-skeleton style=\"block-size: 1rem; inline-size: 60%\" />\n *\n * A loading placeholder, sized by the caller because only the caller knows the shape of the content it stands\n * in for. Hidden from assistive technology: the meaningful announcement is the \"loading\" state on the region\n * that owns it, not a stack of grey rectangles.\n *\n * The shimmer is a CSS animation wrapped in `prefers-reduced-motion`, so it stops for users who ask it to.\n */\n@Component({\n selector: 'kx-skeleton',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: '',\n host: { class: 'kx-skeleton', 'aria-hidden': 'true' },\n})\nexport class KxSkeleton {}\n\n/* ── spinner ────────────────────────────────────────────────────────────── */\n\n/**\n * <kx-spinner />\n * <kx-spinner size=\"lg\" variant=\"muted\" label=\"Saving…\" />\n *\n * A `role=\"status\"` live region carrying its own label, so a screen reader is told that something is in\n * progress instead of being shown a spinning border it cannot perceive. The ring is a CSS border animation —\n * no icon dependency, and it degrades to a static ring under reduced motion rather than disappearing.\n */\n@Component({\n selector: 'kx-spinner',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: '<span class=\"kx-sr-only\">{{ label() }}</span>',\n host: {\n '[class]': '\"kx-spinner kx-spinner--\" + size() + \" kx-spinner--\" + variant()',\n role: 'status',\n },\n})\nexport class KxSpinner {\n readonly size = input<KxSpinnerSize>('md');\n readonly variant = input<KxSpinnerVariant>('default');\n readonly label = input('Loading…');\n}\n\n/* ── tag ────────────────────────────────────────────────────────────────── */\n\n/**\n * <kx-tag>Design</kx-tag>\n * <kx-tag variant=\"outline\" removable (removed)=\"drop('design')\">Design</kx-tag>\n *\n * A container-tinted chip, distinct from Badge (a solid pill). The dismiss button is opt-in and carries an\n * accessible name built from the tag's own text, so a list of them does not announce \"Remove, Remove,\n * Remove\" — `removeLabel` overrides it where the text is not the right name.\n */\n@Component({\n selector: 'kx-tag',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <span class=\"kx-tag__text\" #text><ng-content /></span>\n @if (removable()) {\n <button\n type=\"button\"\n class=\"kx-tag__remove\"\n [attr.aria-label]=\"removeLabel() ?? 'Remove ' + text.textContent?.trim()\"\n (click)=\"removed.emit()\"\n >\n <svg viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M4 4l8 8M12 4l-8 8\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" />\n </svg>\n </button>\n }\n `,\n host: { '[class]': '\"kx-tag kx-tag--\" + variant()' },\n})\nexport class KxTag {\n readonly variant = input<KxTagVariant>('default');\n readonly removable = input(false, { transform: booleanAttribute });\n readonly removeLabel = input<string | null>(null);\n readonly removed = output<void>();\n}\n\n/* ── quote ──────────────────────────────────────────────────────────────── */\n\n/**\n * <kx-quote author=\"Ada Lovelace\" authorTitle=\"Mathematician\">\n * The Analytical Engine weaves algebraic patterns.\n * </kx-quote>\n *\n * A real `<figure>` / `<blockquote>` / `<figcaption>`, which is the markup a quotation with an attribution\n * already has in HTML. The curly quotation marks are decorative punctuation and are hidden from assistive\n * technology — a screen reader announces a blockquote as one already.\n */\n@Component({\n selector: 'kx-quote',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <figure class=\"kx-quote\">\n <blockquote class=\"kx-quote__body\">\n <span aria-hidden=\"true\">&ldquo;</span><ng-content /><span aria-hidden=\"true\">&rdquo;</span>\n </blockquote>\n @if (author() || authorTitle()) {\n <figcaption class=\"kx-quote__caption\">\n <ng-content select=\"[kxQuoteAvatar]\" />\n <span>\n @if (author()) {\n <span class=\"kx-quote__author\">{{ author() }}</span>\n }\n @if (authorTitle()) {\n <span class=\"kx-quote__author-title\">{{ authorTitle() }}</span>\n }\n </span>\n </figcaption>\n }\n </figure>\n `,\n})\nexport class KxQuote {\n readonly author = input<string | null>(null);\n readonly authorTitle = input<string | null>(null);\n}\n\n/* ── metric ─────────────────────────────────────────────────────────────── */\n\n/**\n * <kx-metric label=\"Revenue\" value=\"$48,120\" trend=\"up\" change=\"+12.4%\" />\n *\n * A stat tile. The trend arrow is decorative — the direction is already in the `change` text, and an arrow\n * announced as \"up\" next to \"+12.4%\" is noise. Colour is not the only carrier of meaning here for the same\n * reason: the sign is in the text.\n */\n@Component({\n selector: 'kx-metric',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"kx-metric__head\">\n <p class=\"kx-metric__label\">{{ label() }}</p>\n <ng-content select=\"[kxMetricIcon]\" />\n </div>\n <div class=\"kx-metric__body\">\n <p class=\"kx-metric__value\">{{ value() }}</p>\n @if (trend()) {\n <span class=\"kx-metric__trend\" [attr.data-trend]=\"trend()\">\n <span aria-hidden=\"true\">{{ trend() === 'up' ? '▲' : trend() === 'down' ? '▼' : '—' }}</span>\n {{ change() }}\n </span>\n }\n </div>\n <ng-content select=\"[kxMetricChart]\" />\n `,\n host: { class: 'kx-metric' },\n})\nexport class KxMetric {\n readonly label = input.required<string>();\n readonly value = input.required<string>();\n readonly trend = input<KxTrend | null>(null);\n readonly change = input<string | null>(null);\n}\n\n/* ── empty state ────────────────────────────────────────────────────────── */\n\n/**\n * <kx-empty>\n * <kx-empty-header>\n * <kx-empty-media variant=\"icon\">…</kx-empty-media>\n * <kx-empty-title>No projects yet</kx-empty-title>\n * <kx-empty-description>Create one to get started.</kx-empty-description>\n * </kx-empty-header>\n * <kx-empty-content><button kxButton>New project</button></kx-empty-content>\n * </kx-empty>\n *\n * Composed rather than prop-driven, like Card, so it drops into whatever already has a border — a table cell,\n * a card, a bare section — without forcing its own.\n */\n@Component({\n selector: 'kx-empty',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: '<ng-content />',\n host: { class: 'kx-empty' },\n})\nexport class KxEmpty {}\n\n@Component({\n selector: 'kx-empty-header',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: '<ng-content />',\n host: { class: 'kx-empty__header' },\n})\nexport class KxEmptyHeader {}\n\n@Component({\n selector: 'kx-empty-media',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: '<ng-content />',\n host: { '[class]': '\"kx-empty__media kx-empty__media--\" + variant()', 'aria-hidden': 'true' },\n})\nexport class KxEmptyMedia {\n readonly variant = input<KxEmptyMediaVariant>('default');\n}\n\n@Component({\n selector: 'kx-empty-title',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: '<ng-content />',\n host: { class: 'kx-empty__title', role: 'heading', '[attr.aria-level]': 'level()' },\n})\nexport class KxEmptyTitle {\n readonly level = input<1 | 2 | 3 | 4 | 5 | 6>(3);\n}\n\n@Component({\n selector: 'kx-empty-description',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: '<ng-content />',\n host: { class: 'kx-empty__description' },\n})\nexport class KxEmptyDescription {}\n\n@Component({\n selector: 'kx-empty-content',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: '<ng-content />',\n host: { class: 'kx-empty__content' },\n})\nexport class KxEmptyContent {}\n","import {\n ChangeDetectionStrategy,\n Component,\n Directive,\n booleanAttribute,\n computed,\n forwardRef,\n input,\n model,\n output,\n signal,\n} from '@angular/core';\nimport { NG_VALUE_ACCESSOR, type ControlValueAccessor } from '@angular/forms';\nimport type { KxCorners, KxFieldMessageVariant } from './types';\n\n/**\n * Per-element ids for the `<input>`/`<label>` pairs below. A module counter rather than a static on each\n * class: a static field cannot be read by an instance initialiser declared above it, and the id only has to\n * be unique within the document.\n */\nlet seq = 0;\nconst uid = () => ++seq;\n\n/**\n * The form controls beyond checkbox and switch: textarea, native select, radio group, slider, number input,\n * password input, and the field wrapper that labels and describes any of them.\n *\n * The rule this file follows, and the reason it is short: where HTML already has the control, KinetixUI is a\n * directive on it. A `<input type=\"range\">` already has arrow-key stepping, Home/End, `aria-valuenow`, RTL\n * awareness and a form value. A `role=\"slider\"` div has none of that, and every re-implementation of it in\n * this industry has shipped with at least one of those missing. The same argument decides radio (a real\n * `<input type=\"radio\">` group gives roving focus and arrow-key selection for free) and number input.\n *\n * Every control that carries a value implements `ControlValueAccessor`, so `[(ngModel)]`, `formControl` and\n * `formControlName` all work, including `setDisabledState` from the form model.\n */\n\n/* ── shared CVA plumbing ────────────────────────────────────────────────── */\n\n/**\n * `@Directive()` with no selector rather than a plain class: `input()`, `model()` and `output()` are only\n * legal on a class the Angular compiler knows about, and an undecorated base fails the build with NG8110.\n */\n@Directive()\nabstract class KxValueBase<T> implements ControlValueAccessor {\n readonly disabled = input(false, { transform: booleanAttribute });\n protected readonly formDisabled = signal(false);\n protected isDisabled(): boolean {\n return this.disabled() || this.formDisabled();\n }\n\n protected onChange: (value: T) => void = () => {};\n protected onTouched: () => void = () => {};\n\n abstract writeValue(value: T): void;\n registerOnChange(fn: (value: T) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.formDisabled.set(isDisabled);\n }\n}\n\n/* ── textarea ───────────────────────────────────────────────────────────── */\n\n/**\n * <textarea kxTextarea rows=\"4\" [(ngModel)]=\"notes\"></textarea>\n *\n * A directive on a real `<textarea>`: `rows`, `maxlength`, `required`, the browser's own validation and every\n * Angular forms directive keep working untouched. Separate from `kxInput` because the two have different\n * metrics (a minimum height and a resize affordance), matching the React package's Input/Textarea split.\n *\n * The error state is read from `aria-invalid`, so the semantics drive the styling instead of a parallel\n * `invalid` input that could disagree with them.\n */\n@Directive({\n selector: 'textarea[kxTextarea]',\n host: {\n class: 'kx-textarea',\n '[style.resize]': \"resize() === 'none' ? 'none' : null\",\n },\n})\nexport class KxTextarea {\n /** `vertical` (the default) or `none`. Horizontal resize breaks the column it sits in, so it is not offered. */\n readonly resize = input<'vertical' | 'none'>('vertical');\n}\n\n/* ── native select ──────────────────────────────────────────────────────── */\n\n/**\n * <select kxNativeSelect [(ngModel)]=\"country\">\n * <option value=\"pt\">Portugal</option>\n * </select>\n *\n * A directive on the browser's own `<select>`, which on a phone opens the platform picker and on a desktop\n * opens the OS listbox. That is the whole point of it — where a designed listbox is wanted, that is a\n * different component. Nothing here re-implements the popup, so nothing here can get it wrong.\n */\n@Directive({\n selector: 'select[kxNativeSelect]',\n host: {\n '[class]': '\"kx-native-select kx-native-select--\" + corners()',\n },\n})\nexport class KxNativeSelect {\n readonly corners = input<KxCorners | 'rounded'>('default');\n}\n\n/* ── radio group ────────────────────────────────────────────────────────── */\n\n/**\n * <kx-radio-group name=\"plan\" [(ngModel)]=\"plan\" aria-label=\"Plan\">\n * <kx-radio value=\"free\">Free</kx-radio>\n * <kx-radio value=\"pro\">Pro</kx-radio>\n * </kx-radio-group>\n *\n * The radios are real `<input type=\"radio\">` elements sharing a `name`, so arrow-key selection, roving focus,\n * the \"one tab stop per group\" behaviour and the group's own form semantics are the browser's. An ARIA\n * re-implementation of a radio group has to rebuild all four, and usually rebuilds three.\n *\n * The group is the `ControlValueAccessor`; the radios read and write through it.\n */\n@Component({\n selector: 'kx-radio-group',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => KxRadioGroup), multi: true }],\n template: '<ng-content />',\n host: {\n class: 'kx-radio-group',\n role: 'radiogroup',\n '[attr.aria-orientation]': \"orientation() === 'horizontal' ? 'horizontal' : null\",\n },\n})\nexport class KxRadioGroup extends KxValueBase<string | null> {\n /** Shared `name` for the underlying inputs. Defaults to a per-instance name so two groups never merge. */\n readonly name = input(`kx-radio-${uid()}`);\n readonly value = model<string | null>(null);\n readonly orientation = input<'horizontal' | 'vertical'>('vertical');\n /** Emits only on user selection — `valueChange` also fires when a form writes the value in. */\n readonly selected = output<string>();\n\n /** Called by a child radio. Public because the radio is a separate component, not because callers should. */\n select(next: string): void {\n if (this.isDisabled()) return;\n this.value.set(next);\n this.onChange(next);\n this.onTouched();\n this.selected.emit(next);\n }\n\n groupDisabled(): boolean {\n return this.isDisabled();\n }\n\n /** A radio lost focus — mark the group touched so `ng-touched` and validation messages behave. */\n touch(): void {\n this.onTouched();\n }\n\n override writeValue(value: string | null): void {\n this.value.set(value ?? null);\n }\n}\n\n/**\n * <kx-radio value=\"pro\">Pro</kx-radio>\n *\n * Renders `<input type=\"radio\">` + `<label>`, associated by id, so the whole row is a click target and the\n * label is the accessible name without any `aria-label` guessing.\n */\n@Component({\n selector: 'kx-radio',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <input\n type=\"radio\"\n class=\"kx-radio__input\"\n [id]=\"id()\"\n [name]=\"group.name()\"\n [value]=\"value()\"\n [checked]=\"group.value() === value()\"\n [disabled]=\"disabled() || group.groupDisabled()\"\n (change)=\"group.select(value())\"\n (blur)=\"group.touch()\"\n />\n <label class=\"kx-radio__label\" [for]=\"id()\"><ng-content /></label>\n `,\n host: { class: 'kx-radio' },\n})\nexport class KxRadio {\n readonly value = input.required<string>();\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly id = input(`kx-radio-item-${uid()}`);\n\n constructor(protected readonly group: KxRadioGroup) {}\n}\n\n/* ── slider ─────────────────────────────────────────────────────────────── */\n\n/**\n * <kx-slider [(ngModel)]=\"volume\" [min]=\"0\" [max]=\"100\" [step]=\"5\" aria-label=\"Volume\" />\n *\n * A real `<input type=\"range\">`. Arrow keys, Page Up/Down, Home/End, `aria-valuenow`/`valuemin`/`valuemax`,\n * the RTL direction flip and touch dragging are all the browser's, and all of them are things hand-rolled\n * sliders routinely lose. The filled track is drawn with a CSS custom property set from the value, so the\n * visual follows the real control rather than the other way round.\n */\n@Component({\n selector: 'kx-slider',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => KxSlider), multi: true }],\n template: `\n <input\n type=\"range\"\n class=\"kx-slider__input\"\n [min]=\"min()\"\n [max]=\"max()\"\n [step]=\"step()\"\n [value]=\"value()\"\n [disabled]=\"isDisabled()\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-labelledby]=\"ariaLabelledby()\"\n [attr.aria-valuetext]=\"valueText()\"\n (input)=\"commit($any($event.target).valueAsNumber)\"\n (blur)=\"onTouched()\"\n />\n `,\n host: {\n class: 'kx-slider',\n '[style.--kx-slider-fill.%]': 'fill()',\n },\n})\nexport class KxSlider extends KxValueBase<number> {\n readonly value = model(0);\n readonly min = input(0);\n readonly max = input(100);\n readonly step = input(1);\n /** Announced instead of the raw number where the number alone means nothing (\"Medium\", \"3 of 7\"). */\n readonly valueText = input<string | null>(null);\n readonly ariaLabel = input<string | null>(null, { alias: 'aria-label' });\n readonly ariaLabelledby = input<string | null>(null, { alias: 'aria-labelledby' });\n readonly changed = output<number>();\n\n protected readonly fill = computed(() => {\n const span = this.max() - this.min();\n return span <= 0 ? 0 : ((this.value() - this.min()) / span) * 100;\n });\n\n protected commit(next: number): void {\n this.value.set(next);\n this.onChange(next);\n this.changed.emit(next);\n }\n\n override writeValue(value: number): void {\n this.value.set(Number.isFinite(value) ? value : this.min());\n }\n}\n\n/* ── number input ───────────────────────────────────────────────────────── */\n\n/**\n * <kx-number-input [(ngModel)]=\"quantity\" [min]=\"1\" [max]=\"99\" aria-label=\"Quantity\" />\n *\n * A real `<input type=\"number\">` with explicit step buttons beside it. The input keeps the numeric keypad on\n * touch, the browser's own arrow-key stepping and `valueAsNumber`; the buttons exist because the native\n * spinners are tiny, inconsistent between browsers, and in several of them not reachable by keyboard at all.\n *\n * The buttons are `aria-hidden` and `tabindex=\"-1\"`: they duplicate keyboard behaviour the input already has,\n * so exposing them adds two stops to the tab order that do nothing new.\n */\n@Component({\n selector: 'kx-number-input',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => KxNumberInput), multi: true }],\n template: `\n <button type=\"button\" class=\"kx-number-input__step\" tabindex=\"-1\" aria-hidden=\"true\" [disabled]=\"isDisabled()\" (click)=\"nudge(-1)\">−</button>\n <input\n type=\"number\"\n class=\"kx-number-input__input\"\n [min]=\"min()\"\n [max]=\"max()\"\n [step]=\"step()\"\n [value]=\"value()\"\n [disabled]=\"isDisabled()\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-labelledby]=\"ariaLabelledby()\"\n (input)=\"commit($any($event.target).valueAsNumber)\"\n (blur)=\"onTouched()\"\n />\n <button type=\"button\" class=\"kx-number-input__step\" tabindex=\"-1\" aria-hidden=\"true\" [disabled]=\"isDisabled()\" (click)=\"nudge(1)\">+</button>\n `,\n host: { class: 'kx-number-input' },\n})\nexport class KxNumberInput extends KxValueBase<number | null> {\n readonly value = model<number | null>(null);\n readonly min = input<number | null>(null);\n readonly max = input<number | null>(null);\n readonly step = input(1);\n readonly ariaLabel = input<string | null>(null, { alias: 'aria-label' });\n readonly ariaLabelledby = input<string | null>(null, { alias: 'aria-labelledby' });\n readonly changed = output<number | null>();\n\n protected nudge(direction: 1 | -1): void {\n this.commit((this.value() ?? 0) + direction * this.step());\n }\n\n protected commit(next: number): void {\n // an emptied field is null, not 0 — \"no answer\" and \"zero\" are different answers\n const value = Number.isFinite(next) ? this.clamp(next) : null;\n this.value.set(value);\n this.onChange(value);\n this.changed.emit(value);\n }\n\n private clamp(n: number): number {\n const min = this.min();\n const max = this.max();\n if (min !== null && n < min) return min;\n if (max !== null && n > max) return max;\n return n;\n }\n\n override writeValue(value: number | null): void {\n this.value.set(value ?? null);\n }\n}\n\n/* ── password input ─────────────────────────────────────────────────────── */\n\n/**\n * <kx-password-input [(ngModel)]=\"password\" aria-label=\"Password\" />\n *\n * A real password field with a reveal toggle. The toggle is a real `<button>` carrying `aria-pressed`, so its\n * state is announced; the field keeps `autocomplete=\"current-password\"` by default so password managers still\n * recognise it, and `[autocomplete]` switches it to `new-password` on a sign-up form.\n */\n@Component({\n selector: 'kx-password-input',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => KxPasswordInput), multi: true }],\n template: `\n <input\n class=\"kx-password-input__input\"\n [type]=\"revealed() ? 'text' : 'password'\"\n [value]=\"value()\"\n [disabled]=\"isDisabled()\"\n [attr.autocomplete]=\"autocomplete()\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-labelledby]=\"ariaLabelledby()\"\n (input)=\"commit($any($event.target).value)\"\n (blur)=\"onTouched()\"\n />\n <button\n type=\"button\"\n class=\"kx-password-input__reveal\"\n [attr.aria-pressed]=\"revealed()\"\n [attr.aria-label]=\"revealed() ? 'Hide password' : 'Show password'\"\n [disabled]=\"isDisabled()\"\n (click)=\"revealed.set(!revealed())\"\n >\n {{ revealed() ? 'Hide' : 'Show' }}\n </button>\n `,\n host: { class: 'kx-password-input' },\n})\nexport class KxPasswordInput extends KxValueBase<string> {\n readonly value = model('');\n readonly autocomplete = input<'current-password' | 'new-password'>('current-password');\n readonly ariaLabel = input<string | null>(null, { alias: 'aria-label' });\n readonly ariaLabelledby = input<string | null>(null, { alias: 'aria-labelledby' });\n\n protected readonly revealed = signal(false);\n\n protected commit(next: string): void {\n this.value.set(next);\n this.onChange(next);\n }\n\n override writeValue(value: string): void {\n this.value.set(value ?? '');\n }\n}\n\n/* ── field ──────────────────────────────────────────────────────────────── */\n\n/**\n * <kx-field>\n * <label kxFieldLabel for=\"email\">Email</label>\n * <input kxInput id=\"email\" aria-describedby=\"email-hint\" />\n * <p kxFieldDescription id=\"email-hint\">We only use this to sign you in.</p>\n * <kx-field-message variant=\"error\">Enter a valid address.</kx-field-message>\n * </kx-field>\n *\n * Layout and type for a labelled control, and nothing else. It deliberately does not generate ids or wire\n * `aria-describedby` for you: a wrapper that guesses those has to guess which of several descriptions is the\n * error, and gets it wrong on the form where it matters. The ids are the caller's, and they are three\n * characters each.\n *\n * An error message is a live region, so a validation message that appears after submit is announced rather\n * than silently rendered below the field.\n */\n@Component({\n selector: 'kx-field',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: '<ng-content />',\n host: { class: 'kx-field' },\n})\nexport class KxField {}\n\n@Directive({ selector: 'label[kxFieldLabel]', host: { class: 'kx-field__label kx-label' } })\nexport class KxFieldLabel {}\n\n@Directive({ selector: '[kxFieldDescription]', host: { class: 'kx-field__description' } })\nexport class KxFieldDescription {}\n\n@Component({\n selector: 'kx-field-message',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: '<ng-content />',\n host: {\n '[class]': '\"kx-field__message kx-field__message--\" + variant()',\n '[attr.role]': \"variant() === 'error' ? 'alert' : null\",\n },\n})\nexport class KxFieldMessage {\n readonly variant = input<KxFieldMessageVariant>('error');\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n Directive,\n ElementRef,\n contentChildren,\n inject,\n input,\n model,\n signal,\n} from '@angular/core';\n\n/**\n * Tabs — the package's first composite, and where the keyboard pattern is established.\n *\n * <kx-tabs [(value)]=\"tab\">\n * <kx-tab-list aria-label=\"Account\">\n * <button kxTab value=\"profile\">Profile</button>\n * <button kxTab value=\"billing\">Billing</button>\n * </kx-tab-list>\n * <kx-tab-panel value=\"profile\">…</kx-tab-panel>\n * <kx-tab-panel value=\"billing\">…</kx-tab-panel>\n * </kx-tabs>\n *\n * Follows the APG tabs pattern: one stop in the page tab order (roving tabindex), arrows move between tabs,\n * Home/End jump to the ends, and selection follows focus (automatic activation) because the panels here are\n * cheap to render. Arrow direction is resolved against the computed writing direction, so in an RTL document\n * ArrowLeft moves to the *next* tab — mirroring what the Compose port already tested for.\n *\n * Ids are generated once per tab so `aria-controls`/`aria-labelledby` can point at each other without the\n * caller having to invent and thread two ids per tab.\n */\n\nlet nextId = 0;\n\n@Directive({\n selector: 'button[kxTab]',\n host: {\n class: 'kx-tab',\n type: 'button',\n role: 'tab',\n '[id]': 'id',\n '[attr.aria-selected]': 'selected()',\n '[attr.aria-controls]': 'panelId',\n '[attr.tabindex]': 'selected() ? 0 : -1',\n '[disabled]': 'disabled()',\n '(click)': 'tabs.select(value())',\n '(keydown)': 'tabs.onKeydown($event)',\n },\n})\nexport class KxTab {\n readonly tabs = inject(KxTabs);\n readonly el = inject<ElementRef<HTMLButtonElement>>(ElementRef);\n readonly value = input.required<string>();\n readonly disabled = input(false);\n\n readonly id = `kx-tab-${nextId++}`;\n readonly panelId = `${this.id}-panel`;\n\n selected(): boolean {\n return this.tabs.value() === this.value();\n }\n}\n\n@Component({\n selector: 'kx-tab-list',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: '<ng-content />',\n host: { class: 'kx-tab-list', role: 'tablist' },\n})\nexport class KxTabList {}\n\n/**\n * The panel is focusable (`tabindex=\"0\"`) because after Tab moves out of the tab list the next stop must be\n * the panel itself — otherwise a keyboard user lands past the content the tab just revealed. Hidden panels are\n * removed from the DOM rather than merely hidden, so nothing inside them is reachable or announced.\n */\n@Component({\n selector: 'kx-tab-panel',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: '@if (active()) { <ng-content /> }',\n host: {\n class: 'kx-tab-panel',\n role: 'tabpanel',\n '[attr.tabindex]': 'active() ? 0 : null',\n '[attr.aria-labelledby]': 'labelledBy()',\n '[hidden]': '!active()',\n },\n})\nexport class KxTabPanel {\n private readonly tabs = inject(KxTabs);\n readonly value = input.required<string>();\n\n active(): boolean {\n return this.tabs.value() === this.value();\n }\n labelledBy(): string | null {\n return this.tabs.tabFor(this.value())?.id ?? null;\n }\n}\n\n@Component({\n selector: 'kx-tabs',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: '<ng-content />',\n host: { class: 'kx-tabs' },\n})\nexport class KxTabs {\n /** Two-way: `[(value)]` for a controlled tab strip, or leave it and let the first tab win. */\n readonly value = model<string>('');\n private readonly tabs = contentChildren(KxTab, { descendants: true });\n private readonly initialised = signal(false);\n\n tabFor(value: string): KxTab | undefined {\n return this.tabs().find((t) => t.value() === value);\n }\n\n select(value: string): void {\n this.value.set(value);\n }\n\n /** Falls back to the first enabled tab when nothing is selected, so an uncontrolled strip still works. */\n constructor() {\n queueMicrotask(() => {\n if (this.initialised()) return;\n this.initialised.set(true);\n if (!this.value()) {\n const first = this.tabs().find((t) => !t.disabled());\n if (first) this.value.set(first.value());\n }\n });\n }\n\n onKeydown(event: KeyboardEvent): void {\n const enabled = this.tabs().filter((t) => !t.disabled());\n if (enabled.length === 0) return;\n const current = enabled.findIndex((t) => t.value() === this.value());\n const rtl = this.isRtl();\n const forward = rtl ? 'ArrowLeft' : 'ArrowRight';\n const back = rtl ? 'ArrowRight' : 'ArrowLeft';\n\n let next: number | null = null;\n if (event.key === forward) next = (current + 1) % enabled.length;\n else if (event.key === back) next = (current - 1 + enabled.length) % enabled.length;\n else if (event.key === 'Home') next = 0;\n else if (event.key === 'End') next = enabled.length - 1;\n if (next === null) return;\n\n event.preventDefault();\n const target = enabled[next]!;\n this.select(target.value());\n target.el.nativeElement.focus();\n }\n\n private readonly el = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /**\n * The document's own direction, read at the moment of the keypress rather than taken as an input — an\n * application that flips `dir` at runtime keeps working with no extra wiring.\n *\n * The nearest `[dir]` ancestor is checked before the computed style. Computed direction is the more correct\n * answer when direction comes from CSS, but it is also the one a DOM implementation is free not to inherit,\n * so relying on it alone makes the behaviour depend on the environment rather than on the markup.\n */\n private isRtl(): boolean {\n const node = this.el.nativeElement;\n const explicit = node.closest('[dir]')?.getAttribute('dir')?.toLowerCase();\n if (explicit === 'rtl' || explicit === 'ltr') return explicit === 'rtl';\n return node.ownerDocument.defaultView?.getComputedStyle(node).direction === 'rtl';\n }\n}\n","/**\n * @kinetixui/angular — public API.\n *\n * This file is the package's contract, and `scripts/check-platform-source.mjs` reads it: a component may only\n * be declared as an Angular implementation in `components.manifest.json` if its symbol is exported here. That\n * is what stops the manifest, the website and the documentation from advertising an Angular component that\n * does not exist — the failure mode this package was created to end.\n *\n * Every export is a standalone directive or component: import the ones a template uses, nothing more. There is\n * no NgModule and no barrel module, so nothing is pulled in by association.\n */\nexport * from './lib/types';\nexport { KxButton } from './lib/button';\nexport {\n KxAlert,\n KxAlertDescription,\n KxAlertTitle,\n KxBadge,\n KxCard,\n KxCardContent,\n KxCardDescription,\n KxCardFooter,\n KxCardHeader,\n KxCardTitle,\n KxInput,\n KxLabel,\n KxProgress,\n KxSeparator,\n} from './lib/primitives';\nexport {\n KxCheckbox,\n KxSegment,\n KxSegmentedControl,\n KxSwitch,\n KxToggle,\n KxToggleGroup,\n KxToggleGroupItem,\n} from './lib/toggles';\nexport {\n KxAspectRatio,\n KxAvatar,\n KxAvatarFallback,\n KxAvatarGroup,\n KxAvatarImage,\n KxEmpty,\n KxEmptyContent,\n KxEmptyDescription,\n KxEmptyHeader,\n KxEmptyMedia,\n KxEmptyTitle,\n KxKbd,\n KxKbdGroup,\n KxMetric,\n KxQuote,\n KxSkeleton,\n KxSpinner,\n KxTag,\n} from './lib/display';\nexport {\n KxField,\n KxFieldDescription,\n KxFieldLabel,\n KxFieldMessage,\n KxNativeSelect,\n KxNumberInput,\n KxPasswordInput,\n KxRadio,\n KxRadioGroup,\n KxSlider,\n KxTextarea,\n} from './lib/forms';\nexport { KxTab, KxTabList, KxTabPanel, KxTabs } from './lib/tabs';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["seq","uid"],"mappings":"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"}
1
+ {"version":3,"file":"kinetixui-angular.mjs","sources":["../../src/lib/types.ts","../../src/lib/button.ts","../../src/lib/primitives.ts","../../src/lib/toggles.ts","../../src/lib/display.ts","../../src/lib/forms.ts","../../src/lib/input-group.ts","../../src/lib/input-otp.ts","../../src/lib/rating.ts","../../src/lib/tabs.ts","../../src/lib/content.ts","../../src/lib/disclosure.ts","../../src/lib/navigation.ts","../../src/lib/overlay.ts","../../src/lib/dialog.ts","../../src/lib/floating.ts","../../src/public-api.ts","../../src/kinetixui-angular.ts"],"sourcesContent":["/**\n * The shared design contract, in Angular's type system.\n *\n * These unions are the same variant and size names the React, SwiftUI, Jetpack Compose and Flutter\n * implementations use. That is what \"parity\" means in KinetixUI: the contract and the tokens are shared, the\n * implementation is idiomatic per platform. Renaming one of these values is a cross-platform change, not an\n * Angular one.\n */\n\n/** Button fills. Capitalised to match the design source's own Variant property, as every other platform does. */\nexport type KxButtonVariant = 'Primary' | 'Secondary' | 'Outline' | 'Destructive' | 'Ghost' | 'Link';\nexport type KxButtonSize = 'sm' | 'md' | 'lg' | 'icon';\n/** Corner style — matches the design source's Corners property. */\nexport type KxCorners = 'sharp' | 'default' | 'pill';\n\nexport type KxBadgeVariant = 'default' | 'secondary' | 'outline' | 'destructive' | 'success' | 'warning';\nexport type KxAlertVariant = 'default' | 'destructive' | 'success' | 'warning' | 'info';\nexport type KxOrientation = 'horizontal' | 'vertical';\n\n/* ── display ────────────────────────────────────────────────────────────── */\n\nexport type KxSpinnerSize = 'sm' | 'md' | 'lg';\nexport type KxSpinnerVariant = 'default' | 'muted' | 'onColor';\nexport type KxTagVariant = 'default' | 'secondary' | 'destructive' | 'warning' | 'outline';\n/** Direction of change on a metric. `neutral` is \"measured, and flat\" — not \"unknown\". */\nexport type KxTrend = 'up' | 'down' | 'neutral';\nexport type KxEmptyMediaVariant = 'default' | 'icon';\n\n/* ── forms ──────────────────────────────────────────────────────────────── */\n\nexport type KxToggleVariant = 'default' | 'outline';\nexport type KxToggleSize = 'sm' | 'md' | 'lg';\n/** Tone of the text under a field. `error` is the only one that also sets `aria-invalid` on the control. */\nexport type KxFieldMessageVariant = 'error' | 'success' | 'warning' | 'info';\n\n/* ── content ────────────────────────────────────────────────────────────── */\n\n/**\n * Intent for the two notice surfaces, Banner and Inform. The same five names the React implementation\n * uses, so a design decision made once reads the same on both platforms. `action` is not an intent in the\n * severity sense — it is the inverted, high-contrast promo treatment.\n */\nexport type KxInformVariant = 'information' | 'warning' | 'success' | 'error' | 'action';\n\n/** Floating action button fills. Capitalised to match the design source's Variant property, as Button does. */\nexport type KxFabVariant = 'Primary' | 'Secondary';\nexport type KxFabSize = 'default' | 'sm';\n\n/** `row` sets term and value side by side; `stacked` puts the value under a full-width term. */\nexport type KxDescriptionListLayout = 'row' | 'stacked';\n\n/** Named aspect ratios Image accepts, alongside any explicit number. */\nexport type KxImageRatio = '1:1' | '3:2' | '4:3' | '3:4' | '3:1' | '16:9';\n\n/** A marker tone on a Timeline item. */\nexport type KxTimelineStatus = 'default' | 'active' | 'success' | 'error';\n","import { Directive, computed, input } from '@angular/core';\nimport type { KxButtonSize, KxButtonVariant, KxCorners } from './types';\n\n/**\n * KinetixUI button.\n *\n * <button kxButton>Save</button>\n * <button kxButton variant=\"Outline\" size=\"lg\">Cancel</button>\n * <a kxButton variant=\"Link\" href=\"/docs\">Docs</a>\n *\n * A directive on a real `<button>` or `<a>`, not a `<kx-button>` wrapper. That is the idiomatic Angular choice\n * and the accessible one: the element keeps its own role, its `type`, `disabled`, form submission, focus order\n * and the browser's own activation behaviour, so none of it has to be re-implemented with ARIA. §28 of the\n * house rules — native semantics before ARIA — is the reason, not convenience.\n *\n * A disabled anchor is not a thing in HTML, so the anchor form is disabled with `aria-disabled` plus the\n * stylesheet's `pointer-events: none`; callers should also drop `href`. The directive does not silently rewrite\n * an anchor into a button.\n */\n@Directive({\n selector: 'button[kxButton], a[kxButton]',\n host: {\n '[class]': 'classes()',\n // exposed for application CSS and tests; mirrors the data-variant attribute the React button sets\n '[attr.data-variant]': 'variant()',\n '[attr.data-size]': 'size()',\n },\n})\nexport class KxButton {\n readonly variant = input<KxButtonVariant>('Primary');\n readonly size = input<KxButtonSize>('md');\n readonly corners = input<KxCorners>('default');\n\n protected readonly classes = computed(() => {\n const out = ['kx-btn', `kx-btn--${this.variant().toLowerCase()}`, `kx-btn--${this.size()}`];\n // \"default\" corners means \"whatever the control radius token says\", so it adds no class\n if (this.corners() !== 'default') out.push(`kx-btn--${this.corners()}`);\n return out.join(' ');\n });\n}\n","import { ChangeDetectionStrategy, Component, Directive, computed, input } from '@angular/core';\nimport type { KxAlertVariant, KxBadgeVariant, KxOrientation } from './types';\n\n/**\n * The presentational primitives: badge, card family, label, input, separator, progress and alert.\n *\n * Each is either a directive on the element HTML already has for the job (label, input) or a component that\n * renders one (badge, card, alert). Nothing here invents a role the platform already provides.\n */\n\n/* ── badge ──────────────────────────────────────────────────────────────── */\n\n/**\n * <kx-badge>New</kx-badge>\n * <kx-badge variant=\"success\">Synced</kx-badge>\n *\n * Presentational by default. A badge that conveys a status change the user must be told about should be given\n * a live region by the caller — this does not guess, because a wrong `aria-live` is worse than none.\n */\n@Component({\n selector: 'kx-badge',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: '<ng-content />',\n host: { '[class]': '\"kx-badge kx-badge--\" + variant()' },\n})\nexport class KxBadge {\n readonly variant = input<KxBadgeVariant>('default');\n}\n\n/* ── card ───────────────────────────────────────────────────────────────── */\n\n/**\n * <kx-card>…</kx-card> a static surface\n * <a kxCard href=\"/reports/q3\">…</a> a card that is a link\n * <button kxCard type=\"button\" [attr.aria-pressed]=\"on\">…</button> a card that is a toggle\n *\n * A raised surface (TOKENS.md, \"Surface model\"). `kx-card` is static: no hover, no pressed state, no pointer\n * cursor, because a surface that reacts to the pointer reads as clickable.\n *\n * Interaction is opt-in through the element, as in React (`<Card asChild>`): put `kxCard` on a real `<a href>`\n * or `<button>` and the card takes the interactive states — hover, pressed, focus and selected\n * (`aria-pressed=\"true\"` on a button, `aria-current` on a link). The states are keyed on the element being\n * interactive, so they cannot drift from what it does, and the element's own semantics (link, button, pressed,\n * current) are what assistive technology reads. One action per card: it must not contain other controls, and a\n * button card holds phrasing content only (no headings).\n */\n@Component({\n selector: 'kx-card, a[kxCard], button[kxCard]',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: '<ng-content />',\n host: { class: 'kx-card' },\n})\nexport class KxCard {}\n\n@Component({\n selector: 'kx-card-header',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: '<ng-content />',\n host: { class: 'kx-card-header' },\n})\nexport class KxCardHeader {}\n\n/**\n * A real heading, at a level the page chooses. `level` exists because a card's title is only an `<h3>` in the\n * example — in a page that already has an `<h3>` the right level is whatever keeps the document outline\n * correct, and a component that hard-codes one produces broken heading structure at scale.\n *\n * The level is carried by `role=\"heading\"` + `aria-level` on the host rather than by switching between `<h1>`\n * … `<h6>` tags. That is not a shortcut: `<ng-content>` projects its content exactly once, so a template with\n * a heading tag per branch silently renders an empty heading for every branch after the first. Between a real\n * tag that loses its text and an ARIA heading that keeps it, the accessible answer is the one with the text in\n * it — and `role=\"heading\"` with an explicit level is fully supported.\n */\n@Component({\n selector: 'kx-card-title',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: '<ng-content />',\n host: {\n class: 'kx-card-title',\n role: 'heading',\n '[attr.aria-level]': 'level()',\n },\n})\nexport class KxCardTitle {\n readonly level = input<1 | 2 | 3 | 4 | 5 | 6>(3);\n}\n\n@Component({\n selector: 'kx-card-description',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: '<p class=\"kx-card-description\"><ng-content /></p>',\n})\nexport class KxCardDescription {}\n\n@Component({\n selector: 'kx-card-content',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: '<ng-content />',\n host: { class: 'kx-card-content' },\n})\nexport class KxCardContent {}\n\n@Component({\n selector: 'kx-card-footer',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: '<ng-content />',\n host: { class: 'kx-card-footer' },\n})\nexport class KxCardFooter {}\n\n/* ── label ──────────────────────────────────────────────────────────────── */\n\n/**\n * <label kxLabel for=\"email\">Email</label>\n *\n * A directive on a real `<label>`, so `for`/`id` association and click-to-focus are the browser's, not ours.\n */\n@Directive({\n selector: 'label[kxLabel]',\n host: { class: 'kx-label' },\n})\nexport class KxLabel {}\n\n/* ── input ──────────────────────────────────────────────────────────────── */\n\n/**\n * <input kxInput type=\"email\" [(ngModel)]=\"email\" />\n *\n * A directive, so `type`, `required`, `disabled`, autofill, the browser's own validation and every Angular\n * forms directive keep working untouched. The error state is read from `aria-invalid`, which means the\n * semantics drive the styling rather than a parallel `invalid` input that could disagree with them.\n *\n * Multi-line fields are `kxTextarea`, not this: a textarea has its own minimum height and resize affordance,\n * and the React package splits them for the same reason.\n */\n@Directive({\n selector: 'input[kxInput]',\n host: { class: 'kx-input' },\n})\nexport class KxInput {}\n\n/* ── separator ──────────────────────────────────────────────────────────── */\n\n/**\n * <kx-separator />\n * <kx-separator orientation=\"vertical\" />\n *\n * Decorative by default and therefore hidden from assistive technology, which is what a rule between two\n * visually grouped things usually is. Set `[decorative]=\"false\"` to expose it as a real `separator`.\n */\n@Component({\n selector: 'kx-separator',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: '',\n host: {\n '[class]': '\"kx-separator kx-separator--\" + orientation()',\n '[attr.role]': 'decorative() ? \"none\" : \"separator\"',\n '[attr.aria-hidden]': 'decorative() ? \"true\" : null',\n '[attr.aria-orientation]': 'decorative() || orientation() === \"horizontal\" ? null : \"vertical\"',\n },\n})\nexport class KxSeparator {\n readonly orientation = input<KxOrientation>('horizontal');\n readonly decorative = input(true);\n}\n\n/* ── progress ───────────────────────────────────────────────────────────── */\n\n/**\n * <kx-progress [value]=\"62\" />\n * <kx-progress [value]=\"null\" /> <!-- indeterminate -->\n *\n * A real `progressbar`. `value` is null for indeterminate, which drops `aria-valuenow` — the correct way to\n * say \"in progress, amount unknown\", rather than reporting a fake 0.\n */\n@Component({\n selector: 'kx-progress',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: '<div class=\"kx-progress__bar\" [style.inline-size.%]=\"percent()\"></div>',\n host: {\n class: 'kx-progress',\n role: 'progressbar',\n '[attr.aria-valuenow]': 'value()',\n '[attr.aria-valuemin]': '0',\n '[attr.aria-valuemax]': 'max()',\n '[attr.aria-valuetext]': 'valueText()',\n },\n})\nexport class KxProgress {\n readonly value = input<number | null>(0);\n readonly max = input(100);\n /** Announced instead of the raw percentage when the number alone would not mean anything (\"3 of 7 files\"). */\n readonly valueText = input<string | null>(null);\n\n protected readonly percent = computed(() => {\n const v = this.value();\n if (v === null) return 100; // indeterminate: a full track, animated by CSS rather than a fake number\n return Math.max(0, Math.min(100, (v / this.max()) * 100));\n });\n}\n\n/* ── alert ──────────────────────────────────────────────────────────────── */\n\n/**\n * <kx-alert variant=\"destructive\">\n * <kx-alert-title>Payment failed</kx-alert-title>\n * <kx-alert-description>Your card was declined.</kx-alert-description>\n * </kx-alert>\n *\n * `role` defaults to `alert` only for the variants that carry urgency. A neutral informational panel announced\n * as an assertive live region interrupts a screen-reader user for no reason, so `default` and `info` render as\n * a plain region and the caller can opt in.\n */\n@Component({\n selector: 'kx-alert',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: '<ng-content />',\n host: {\n '[class]': '\"kx-alert kx-alert--\" + variant()',\n '[attr.role]': 'role()',\n },\n})\nexport class KxAlert {\n readonly variant = input<KxAlertVariant>('default');\n protected readonly role = computed(() => (this.variant() === 'destructive' || this.variant() === 'warning' ? 'alert' : 'note'));\n}\n\n@Component({\n selector: 'kx-alert-title',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: '<p class=\"kx-alert-title\"><ng-content /></p>',\n})\nexport class KxAlertTitle {}\n\n@Component({\n selector: 'kx-alert-description',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: '<p class=\"kx-alert-description\"><ng-content /></p>',\n})\nexport class KxAlertDescription {}\n","import { ChangeDetectionStrategy, Component, Directive, booleanAttribute, forwardRef, input, model, output, signal } from '@angular/core';\nimport { NG_VALUE_ACCESSOR, type ControlValueAccessor } from '@angular/forms';\nimport { NgTemplateOutlet } from '@angular/common';\nimport type { KxToggleSize, KxToggleVariant } from './types';\n\n/**\n * Per-element ids for the `<input>`/`<label>` pairs below. A module counter rather than a static on each\n * class: a static field cannot be read by an instance initialiser declared above it, and the id only has to\n * be unique within the document.\n */\nlet seq = 0;\nconst uid = () => ++seq;\n\n/**\n * Checkbox and Switch — the two binary controls, and the package's forms architecture in miniature.\n *\n * Both implement `ControlValueAccessor`, so they work with `[(ngModel)]`, `formControlName` and\n * `formControl` exactly like a native input, including `disabled` driven by the form model\n * (`setDisabledState`) rather than only by an attribute. Both also expose a plain `[(checked)]` model for\n * applications that are not using Angular forms; the two paths write through the same setter so they cannot\n * disagree.\n *\n * Both render a real `<button>` carrying the ARIA role rather than a visually-hidden `<input>`. A button is\n * already focusable, already activates on Space and Enter, and already reports `disabled` to assistive\n * technology — so the role is the only thing ARIA has to add. The trade-off is deliberate and worth stating:\n * a `<button role=\"checkbox\">` submits no value in a native (non-Angular) form post. Angular forms carry the\n * value in the form model, which is how these are meant to be used.\n */\n\n/**\n * Shared CVA plumbing: the parts that would otherwise be copied verbatim into both controls.\n *\n * `@Directive()` with no selector, not a plain class — `input()`, `model()` and `output()` are only legal on a\n * class Angular's compiler knows about, so an undecorated base would fail the build with NG8110.\n */\n@Directive()\nabstract class KxToggleBase implements ControlValueAccessor {\n readonly checked = model(false);\n readonly disabled = input(false, { transform: booleanAttribute });\n /**\n * Emits only on real user interaction. `checkedChange` (from the model) also fires when a form or a parent\n * writes the value in, which is usually not what a caller reacting to \"the user flipped this\" wants.\n */\n readonly toggled = output<boolean>();\n\n /** `disabled` can come from the input OR from the form model — either one disables the control. */\n protected readonly formDisabled = signal(false);\n protected isDisabled(): boolean {\n return this.disabled() || this.formDisabled();\n }\n\n private onChange: (value: boolean) => void = () => {};\n private onTouched: () => void = () => {};\n\n protected toggle(): void {\n if (this.isDisabled()) return;\n const next = !this.checked();\n this.checked.set(next);\n this.onChange(next);\n this.onTouched();\n this.toggled.emit(next);\n }\n\n writeValue(value: boolean): void {\n this.checked.set(!!value);\n }\n registerOnChange(fn: (value: boolean) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.formDisabled.set(isDisabled);\n }\n}\n\n/**\n * <kx-checkbox [(ngModel)]=\"remember\" />\n * <kx-checkbox [(checked)]=\"remember\" (toggled)=\"save($event)\" />\n *\n * `indeterminate` renders `aria-checked=\"mixed\"` — the tri-state a \"select all\" header needs. It is display\n * only: activating an indeterminate checkbox resolves it to checked, as it does everywhere else.\n */\n@Component({\n selector: 'kx-checkbox',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => KxCheckbox), multi: true }],\n template: `\n <button\n type=\"button\"\n role=\"checkbox\"\n class=\"kx-checkbox\"\n [attr.aria-checked]=\"indeterminate() ? 'mixed' : checked()\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-labelledby]=\"ariaLabelledby()\"\n [disabled]=\"isDisabled()\"\n (click)=\"toggle()\"\n >\n @if (checked() || indeterminate()) {\n <svg viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\n @if (indeterminate()) {\n <path d=\"M4 8h8\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" />\n } @else {\n <path d=\"M3.5 8.5l3 3 6-6\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n }\n </svg>\n }\n </button>\n `,\n})\nexport class KxCheckbox extends KxToggleBase {\n readonly indeterminate = input(false, { transform: booleanAttribute });\n /** One of these is required when no visible `<label for>` points at the control. */\n readonly ariaLabel = input<string | null>(null, { alias: 'aria-label' });\n readonly ariaLabelledby = input<string | null>(null, { alias: 'aria-labelledby' });\n}\n\n/**\n * <kx-switch [(ngModel)]=\"notifications\" aria-label=\"Notifications\" />\n *\n * `role=\"switch\"` rather than a checkbox: it reports \"on/off\" instead of \"checked\", which is what an\n * immediately-applied setting is.\n */\n@Component({\n selector: 'kx-switch',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => KxSwitch), multi: true }],\n template: `\n <button\n type=\"button\"\n role=\"switch\"\n class=\"kx-switch\"\n [attr.aria-checked]=\"checked()\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-labelledby]=\"ariaLabelledby()\"\n [disabled]=\"isDisabled()\"\n (click)=\"toggle()\"\n >\n <span class=\"kx-switch__thumb\"></span>\n </button>\n `,\n})\nexport class KxSwitch extends KxToggleBase {\n readonly ariaLabel = input<string | null>(null, { alias: 'aria-label' });\n readonly ariaLabelledby = input<string | null>(null, { alias: 'aria-labelledby' });\n}\n\n/* ── toggle ─────────────────────────────────────────────────────────────── */\n\n/**\n * <button kxToggle [(pressed)]=\"bold\" aria-label=\"Bold\">B</button>\n *\n * A directive on a real `<button>` that carries `aria-pressed` — the ARIA pattern for a two-state button,\n * and the one thing ARIA has to add to a button that already has focus, activation and disabled handling.\n */\n@Directive({\n selector: 'button[kxToggle]',\n host: {\n '[class]': '\"kx-toggle kx-toggle--\" + variant() + \" kx-toggle--\" + size()',\n '[attr.aria-pressed]': 'pressed()',\n '(click)': 'press()',\n },\n})\nexport class KxToggle {\n readonly pressed = model(false);\n readonly variant = input<KxToggleVariant>('default');\n readonly size = input<KxToggleSize>('md');\n readonly toggled = output<boolean>();\n\n protected press(): void {\n const next = !this.pressed();\n this.pressed.set(next);\n this.toggled.emit(next);\n }\n}\n\n/* ── toggle group ───────────────────────────────────────────────────────── */\n\n/**\n * <kx-toggle-group [(value)]=\"marks\" aria-label=\"Text style\">\n * <kx-toggle-group-item value=\"bold\">B</kx-toggle-group-item>\n * </kx-toggle-group>\n *\n * Multiple-select by default: each item is an independent `aria-pressed` button inside a `role=\"group\"`, so\n * every one is its own tab stop and its own announcement — which is what a formatting toolbar is.\n *\n * `type=\"single\"` is a different control, and is rendered as one: a `radiogroup` of real `<input\n * type=\"radio\">` elements, so arrow-key selection and the single tab stop come from the browser. Sharing a\n * template between the two would mean re-implementing radio behaviour with ARIA, which is exactly the\n * trade this package refuses elsewhere.\n */\n@Component({\n selector: 'kx-toggle-group',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: '<ng-content />',\n host: {\n class: 'kx-toggle-group',\n '[attr.role]': \"type() === 'single' ? 'radiogroup' : 'group'\",\n },\n})\nexport class KxToggleGroup {\n readonly type = input<'single' | 'multiple'>('multiple');\n /** A string for `single`, an array for `multiple`. */\n readonly value = model<string | string[] | null>(null);\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly name = input(`kx-toggle-group-${uid()}`);\n\n isOn(value: string): boolean {\n const v = this.value();\n return Array.isArray(v) ? v.includes(value) : v === value;\n }\n\n toggle(value: string): void {\n if (this.disabled()) return;\n if (this.type() === 'single') {\n this.value.set(this.value() === value ? null : value);\n return;\n }\n const current = Array.isArray(this.value()) ? (this.value() as string[]) : [];\n this.value.set(current.includes(value) ? current.filter((v) => v !== value) : [...current, value]);\n }\n}\n\n@Component({\n selector: 'kx-toggle-group-item',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n @if (group.type() === 'single') {\n <input\n type=\"radio\"\n class=\"kx-toggle-group__radio\"\n [id]=\"id()\"\n [name]=\"group.name()\"\n [value]=\"value()\"\n [checked]=\"group.isOn(value())\"\n [disabled]=\"disabled() || group.disabled()\"\n (change)=\"group.toggle(value())\"\n />\n <label class=\"kx-toggle kx-toggle--md kx-toggle--group\" [for]=\"id()\"><ng-container [ngTemplateOutlet]=\"content\" /></label>\n } @else {\n <button\n type=\"button\"\n class=\"kx-toggle kx-toggle--md kx-toggle--group\"\n [attr.aria-pressed]=\"group.isOn(value())\"\n [disabled]=\"disabled() || group.disabled()\"\n (click)=\"group.toggle(value())\"\n >\n <ng-container [ngTemplateOutlet]=\"content\" />\n </button>\n }\n <!-- One projection slot for both branches: Angular projects default content into a single <ng-content>,\n so a slot per branch left the single-mode label empty and its radio unnamed. -->\n <ng-template #content><ng-content /></ng-template>\n `,\n imports: [NgTemplateOutlet],\n host: { class: 'kx-toggle-group__item' },\n})\nexport class KxToggleGroupItem {\n readonly value = input.required<string>();\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly id = input(`kx-toggle-group-item-${uid()}`);\n\n constructor(protected readonly group: KxToggleGroup) {}\n}\n\n/* ── segmented control ──────────────────────────────────────────────────── */\n\n/**\n * <kx-segmented-control [(value)]=\"range\" aria-label=\"Range\">\n * <kx-segment value=\"7d\">7 days</kx-segment>\n * <kx-segment value=\"30d\">30 days</kx-segment>\n * </kx-segmented-control>\n *\n * A single-choice control shown as one connected track — iOS's segmented control, on the web. It is a real\n * `radiogroup` of real radio inputs for the same reason the radio group is: arrow keys, one tab stop and the\n * \"exactly one is chosen\" semantics are the browser's.\n *\n * Unlike a toggle group, a segment cannot be turned off by clicking it again: a segmented control with\n * nothing selected has no meaning.\n */\n@Component({\n selector: 'kx-segmented-control',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: '<ng-content />',\n host: { class: 'kx-segmented', role: 'radiogroup' },\n})\nexport class KxSegmentedControl {\n readonly value = model<string | null>(null);\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly name = input(`kx-segmented-${uid()}`);\n readonly selected = output<string>();\n\n select(next: string): void {\n if (this.disabled()) return;\n this.value.set(next);\n this.selected.emit(next);\n }\n}\n\n@Component({\n selector: 'kx-segment',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <input\n type=\"radio\"\n class=\"kx-segmented__radio\"\n [id]=\"id()\"\n [name]=\"control.name()\"\n [value]=\"value()\"\n [checked]=\"control.value() === value()\"\n [disabled]=\"disabled() || control.disabled()\"\n (change)=\"control.select(value())\"\n />\n <label class=\"kx-segmented__label\" [for]=\"id()\"><ng-content /></label>\n `,\n host: { class: 'kx-segmented__item' },\n})\nexport class KxSegment {\n readonly value = input.required<string>();\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly id = input(`kx-segment-${uid()}`);\n\n constructor(protected readonly control: KxSegmentedControl) {}\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n Directive,\n booleanAttribute,\n computed,\n contentChildren,\n effect,\n input,\n output,\n signal,\n} from '@angular/core';\nimport type { KxEmptyMediaVariant, KxSpinnerSize, KxSpinnerVariant, KxTagVariant, KxTrend } from './types';\n\n/**\n * The display primitives: avatar, aspect ratio, keyboard glyphs, skeleton, spinner, tag, quote, metric and the\n * empty-state family.\n *\n * Nothing here holds application state. Each is either a directive on the element HTML already has for the\n * job, or a component that renders that element — the same rule the rest of the package follows.\n */\n\n/* ── aspect ratio ───────────────────────────────────────────────────────── */\n\n/**\n * <kx-aspect-ratio [ratio]=\"16 / 9\"><img src=\"cover.jpg\" alt=\"\" /></kx-aspect-ratio>\n *\n * The CSS `aspect-ratio` property, which every target browser has had for years. There is no padding-top\n * percentage hack here and no ResizeObserver: the platform does this now, and a component that re-implemented\n * it would be slower and would fight the container.\n */\n@Component({\n selector: 'kx-aspect-ratio',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: '<ng-content />',\n host: {\n class: 'kx-aspect-ratio',\n // a custom property rather than `aspect-ratio` directly, so the ratio is an input to the stylesheet and\n // the rule that consumes it stays in CSS with the rest of the component's layout\n '[style.--kx-aspect-ratio]': 'ratio()',\n },\n})\nexport class KxAspectRatio {\n readonly ratio = input(1);\n}\n\n/* ── avatar ─────────────────────────────────────────────────────────────── */\n\n/**\n * <kx-avatar>\n * <img kxAvatarImage src=\"/ada.jpg\" alt=\"Ada Lovelace\" />\n * <kx-avatar-fallback>AL</kx-avatar-fallback>\n * </kx-avatar>\n *\n * The fallback shows until the image reports `load`, and comes back if it reports `error`. That is the whole\n * reason this is a component rather than a styled `<img>`: a broken avatar that leaves a blank circle is the\n * failure users actually hit, and `alt` text alone does not fill the space.\n *\n * The image carries the accessible name. The fallback initials are decorative — announcing \"AL\" as well would\n * read the person's name twice, so `aria-hidden` is set on it and the caller keeps `alt` meaningful.\n */\n@Component({\n selector: 'kx-avatar',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: '<ng-content />',\n host: {\n '[class]': 'classes()',\n },\n})\nexport class KxAvatar {\n /** Set by KxAvatarImage as the image loads or fails; the fallback reads it. */\n readonly imageLoaded = signal(false);\n /** Set by KxAvatarGroup on the avatars past its `max`. Not an input: the group owns it, not the caller. */\n readonly collapsed = signal(false);\n\n protected readonly classes = computed(() => (this.collapsed() ? 'kx-avatar kx-avatar--collapsed' : 'kx-avatar'));\n}\n\n/**\n * A directive on a real `<img>`, so `src`, `srcset`, `loading=\"lazy\"`, `alt` and the browser's own decoding\n * are untouched. It only reports load state up to the avatar and hides itself until then.\n */\n@Directive({\n selector: 'img[kxAvatarImage]',\n host: {\n class: 'kx-avatar__image',\n '[hidden]': '!avatar.imageLoaded()',\n '(load)': 'avatar.imageLoaded.set(true)',\n '(error)': 'avatar.imageLoaded.set(false)',\n },\n})\nexport class KxAvatarImage {\n constructor(protected readonly avatar: KxAvatar) {}\n}\n\n@Component({\n selector: 'kx-avatar-fallback',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: '<ng-content />',\n host: {\n class: 'kx-avatar__fallback',\n 'aria-hidden': 'true',\n '[hidden]': 'avatar.imageLoaded()',\n },\n})\nexport class KxAvatarFallback {\n constructor(protected readonly avatar: KxAvatar) {}\n}\n\n/**\n * <kx-avatar-group [max]=\"3\">\n * <kx-avatar>…</kx-avatar>\n * …\n * </kx-avatar-group>\n *\n * Stacked, overlapping avatars with a \"+N\" marker for the rest. The group counts its projected avatars with a\n * content query and tells the ones past `max` to collapse; it does not re-wrap or re-render them, because a\n * projected node can only be rendered where it was projected.\n *\n * The overflow marker is announced (\"and 4 more\") rather than left as the bare glyph, which reads as \"plus\n * four\" out of context.\n */\n@Component({\n selector: 'kx-avatar-group',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <ng-content />\n @if (overflow() > 0) {\n <span class=\"kx-avatar kx-avatar-group__overflow\">\n <span class=\"kx-avatar__fallback\" aria-hidden=\"true\">+{{ overflow() }}</span>\n <span class=\"kx-sr-only\">and {{ overflow() }} more</span>\n </span>\n }\n `,\n host: { class: 'kx-avatar-group' },\n})\nexport class KxAvatarGroup {\n /** Visible avatars before the rest fold into the marker. Null (the default) shows every one. */\n readonly max = input<number | null>(null);\n\n private readonly avatars = contentChildren(KxAvatar);\n\n protected readonly overflow = computed(() => {\n const max = this.max();\n return max === null ? 0 : Math.max(0, this.avatars().length - max);\n });\n\n constructor() {\n effect(() => {\n const max = this.max();\n this.avatars().forEach((avatar, i) => avatar.collapsed.set(max !== null && i >= max));\n });\n }\n}\n\n/* ── keyboard keys ──────────────────────────────────────────────────────── */\n\n/**\n * <kbd kxKbdGroup><kbd kxKbd>Ctrl</kbd><kbd kxKbd>K</kbd></kbd>\n *\n * Directives on real `<kbd>` elements. `<kbd>` already means \"keyboard input\" to assistive technology and to\n * every reader of the markup, so there is nothing for a wrapper component to add.\n */\n@Directive({ selector: 'kbd[kxKbd]', host: { class: 'kx-kbd' } })\nexport class KxKbd {}\n\n@Directive({ selector: 'kbd[kxKbdGroup]', host: { class: 'kx-kbd-group' } })\nexport class KxKbdGroup {}\n\n/* ── skeleton ───────────────────────────────────────────────────────────── */\n\n/**\n * <kx-skeleton style=\"block-size: 1rem; inline-size: 60%\" />\n *\n * A loading placeholder, sized by the caller because only the caller knows the shape of the content it stands\n * in for. Hidden from assistive technology: the meaningful announcement is the \"loading\" state on the region\n * that owns it, not a stack of grey rectangles.\n *\n * The shimmer is a CSS animation wrapped in `prefers-reduced-motion`, so it stops for users who ask it to.\n */\n@Component({\n selector: 'kx-skeleton',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: '',\n host: { class: 'kx-skeleton', 'aria-hidden': 'true' },\n})\nexport class KxSkeleton {}\n\n/* ── spinner ────────────────────────────────────────────────────────────── */\n\n/**\n * <kx-spinner />\n * <kx-spinner size=\"lg\" variant=\"muted\" label=\"Saving…\" />\n *\n * A `role=\"status\"` live region carrying its own label, so a screen reader is told that something is in\n * progress instead of being shown a spinning border it cannot perceive. The ring is a CSS border animation —\n * no icon dependency, and it degrades to a static ring under reduced motion rather than disappearing.\n */\n@Component({\n selector: 'kx-spinner',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: '<span class=\"kx-sr-only\">{{ label() }}</span>',\n host: {\n '[class]': '\"kx-spinner kx-spinner--\" + size() + \" kx-spinner--\" + variant()',\n role: 'status',\n },\n})\nexport class KxSpinner {\n readonly size = input<KxSpinnerSize>('md');\n readonly variant = input<KxSpinnerVariant>('default');\n readonly label = input('Loading…');\n}\n\n/* ── tag ────────────────────────────────────────────────────────────────── */\n\n/**\n * <kx-tag>Design</kx-tag>\n * <kx-tag variant=\"outline\" removable (removed)=\"drop('design')\">Design</kx-tag>\n *\n * A container-tinted chip, distinct from Badge (a solid pill). The dismiss button is opt-in and carries an\n * accessible name built from the tag's own text, so a list of them does not announce \"Remove, Remove,\n * Remove\" — `removeLabel` overrides it where the text is not the right name.\n */\n@Component({\n selector: 'kx-tag',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <span class=\"kx-tag__text\" #text><ng-content /></span>\n @if (removable()) {\n <button\n type=\"button\"\n class=\"kx-tag__remove\"\n [attr.aria-label]=\"removeLabel() ?? 'Remove ' + text.textContent?.trim()\"\n (click)=\"removed.emit()\"\n >\n <svg viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M4 4l8 8M12 4l-8 8\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" />\n </svg>\n </button>\n }\n `,\n host: { '[class]': '\"kx-tag kx-tag--\" + variant()' },\n})\nexport class KxTag {\n readonly variant = input<KxTagVariant>('default');\n readonly removable = input(false, { transform: booleanAttribute });\n readonly removeLabel = input<string | null>(null);\n readonly removed = output<void>();\n}\n\n/* ── quote ──────────────────────────────────────────────────────────────── */\n\n/**\n * <kx-quote author=\"Ada Lovelace\" authorTitle=\"Mathematician\">\n * The Analytical Engine weaves algebraic patterns.\n * </kx-quote>\n *\n * A real `<figure>` / `<blockquote>` / `<figcaption>`, which is the markup a quotation with an attribution\n * already has in HTML. The curly quotation marks are decorative punctuation and are hidden from assistive\n * technology — a screen reader announces a blockquote as one already.\n */\n@Component({\n selector: 'kx-quote',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <figure class=\"kx-quote\">\n <blockquote class=\"kx-quote__body\">\n <span aria-hidden=\"true\">&ldquo;</span><ng-content /><span aria-hidden=\"true\">&rdquo;</span>\n </blockquote>\n @if (author() || authorTitle()) {\n <figcaption class=\"kx-quote__caption\">\n <ng-content select=\"[kxQuoteAvatar]\" />\n <span>\n @if (author()) {\n <span class=\"kx-quote__author\">{{ author() }}</span>\n }\n @if (authorTitle()) {\n <span class=\"kx-quote__author-title\">{{ authorTitle() }}</span>\n }\n </span>\n </figcaption>\n }\n </figure>\n `,\n})\nexport class KxQuote {\n readonly author = input<string | null>(null);\n readonly authorTitle = input<string | null>(null);\n}\n\n/* ── metric ─────────────────────────────────────────────────────────────── */\n\n/**\n * <kx-metric label=\"Revenue\" value=\"$48,120\" trend=\"up\" change=\"+12.4%\" />\n *\n * A stat tile. The trend arrow is decorative — the direction is already in the `change` text, and an arrow\n * announced as \"up\" next to \"+12.4%\" is noise. Colour is not the only carrier of meaning here for the same\n * reason: the sign is in the text.\n */\n@Component({\n selector: 'kx-metric',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"kx-metric__head\">\n <p class=\"kx-metric__label\">{{ label() }}</p>\n <ng-content select=\"[kxMetricIcon]\" />\n </div>\n <div class=\"kx-metric__body\">\n <p class=\"kx-metric__value\">{{ value() }}</p>\n @if (trend()) {\n <span class=\"kx-metric__trend\" [attr.data-trend]=\"trend()\">\n <span aria-hidden=\"true\">{{ trend() === 'up' ? '▲' : trend() === 'down' ? '▼' : '—' }}</span>\n {{ change() }}\n </span>\n }\n </div>\n <ng-content select=\"[kxMetricChart]\" />\n `,\n host: { class: 'kx-metric' },\n})\nexport class KxMetric {\n readonly label = input.required<string>();\n readonly value = input.required<string>();\n readonly trend = input<KxTrend | null>(null);\n readonly change = input<string | null>(null);\n}\n\n/* ── empty state ────────────────────────────────────────────────────────── */\n\n/**\n * <kx-empty>\n * <kx-empty-header>\n * <kx-empty-media variant=\"icon\">…</kx-empty-media>\n * <kx-empty-title>No projects yet</kx-empty-title>\n * <kx-empty-description>Create one to get started.</kx-empty-description>\n * </kx-empty-header>\n * <kx-empty-content><button kxButton>New project</button></kx-empty-content>\n * </kx-empty>\n *\n * Composed rather than prop-driven, like Card, so it drops into whatever already has a border — a table cell,\n * a card, a bare section — without forcing its own.\n */\n@Component({\n selector: 'kx-empty',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: '<ng-content />',\n host: { class: 'kx-empty' },\n})\nexport class KxEmpty {}\n\n@Component({\n selector: 'kx-empty-header',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: '<ng-content />',\n host: { class: 'kx-empty__header' },\n})\nexport class KxEmptyHeader {}\n\n@Component({\n selector: 'kx-empty-media',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: '<ng-content />',\n host: { '[class]': '\"kx-empty__media kx-empty__media--\" + variant()', 'aria-hidden': 'true' },\n})\nexport class KxEmptyMedia {\n readonly variant = input<KxEmptyMediaVariant>('default');\n}\n\n@Component({\n selector: 'kx-empty-title',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: '<ng-content />',\n host: { class: 'kx-empty__title', role: 'heading', '[attr.aria-level]': 'level()' },\n})\nexport class KxEmptyTitle {\n readonly level = input<1 | 2 | 3 | 4 | 5 | 6>(3);\n}\n\n@Component({\n selector: 'kx-empty-description',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: '<ng-content />',\n host: { class: 'kx-empty__description' },\n})\nexport class KxEmptyDescription {}\n\n@Component({\n selector: 'kx-empty-content',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: '<ng-content />',\n host: { class: 'kx-empty__content' },\n})\nexport class KxEmptyContent {}\n","import {\n ChangeDetectionStrategy,\n Component,\n Directive,\n booleanAttribute,\n computed,\n forwardRef,\n input,\n model,\n output,\n signal,\n} from '@angular/core';\nimport { NG_VALUE_ACCESSOR, type ControlValueAccessor } from '@angular/forms';\nimport type { KxCorners, KxFieldMessageVariant } from './types';\n\n/**\n * Per-element ids for the `<input>`/`<label>` pairs below. A module counter rather than a static on each\n * class: a static field cannot be read by an instance initialiser declared above it, and the id only has to\n * be unique within the document.\n */\nlet seq = 0;\nconst uid = () => ++seq;\n\n/**\n * The form controls beyond checkbox and switch: textarea, native select, radio group, slider, number input,\n * password input, and the field wrapper that labels and describes any of them.\n *\n * The rule this file follows, and the reason it is short: where HTML already has the control, KinetixUI is a\n * directive on it. A `<input type=\"range\">` already has arrow-key stepping, Home/End, `aria-valuenow`, RTL\n * awareness and a form value. A `role=\"slider\"` div has none of that, and every re-implementation of it in\n * this industry has shipped with at least one of those missing. The same argument decides radio (a real\n * `<input type=\"radio\">` group gives roving focus and arrow-key selection for free) and number input.\n *\n * Every control that carries a value implements `ControlValueAccessor`, so `[(ngModel)]`, `formControl` and\n * `formControlName` all work, including `setDisabledState` from the form model.\n */\n\n/* ── shared CVA plumbing ────────────────────────────────────────────────── */\n\n/**\n * `@Directive()` with no selector rather than a plain class: `input()`, `model()` and `output()` are only\n * legal on a class the Angular compiler knows about, and an undecorated base fails the build with NG8110.\n */\n@Directive()\nexport abstract class KxValueBase<T> implements ControlValueAccessor {\n readonly disabled = input(false, { transform: booleanAttribute });\n protected readonly formDisabled = signal(false);\n protected isDisabled(): boolean {\n return this.disabled() || this.formDisabled();\n }\n\n protected onChange: (value: T) => void = () => {};\n protected onTouched: () => void = () => {};\n\n abstract writeValue(value: T): void;\n registerOnChange(fn: (value: T) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.formDisabled.set(isDisabled);\n }\n}\n\n/* ── textarea ───────────────────────────────────────────────────────────── */\n\n/**\n * <textarea kxTextarea rows=\"4\" [(ngModel)]=\"notes\"></textarea>\n *\n * A directive on a real `<textarea>`: `rows`, `maxlength`, `required`, the browser's own validation and every\n * Angular forms directive keep working untouched. Separate from `kxInput` because the two have different\n * metrics (a minimum height and a resize affordance), matching the React package's Input/Textarea split.\n *\n * The error state is read from `aria-invalid`, so the semantics drive the styling instead of a parallel\n * `invalid` input that could disagree with them.\n */\n@Directive({\n selector: 'textarea[kxTextarea]',\n host: {\n class: 'kx-textarea',\n '[style.resize]': \"resize() === 'none' ? 'none' : null\",\n },\n})\nexport class KxTextarea {\n /** `vertical` (the default) or `none`. Horizontal resize breaks the column it sits in, so it is not offered. */\n readonly resize = input<'vertical' | 'none'>('vertical');\n}\n\n/* ── native select ──────────────────────────────────────────────────────── */\n\n/**\n * <select kxNativeSelect [(ngModel)]=\"country\">\n * <option value=\"pt\">Portugal</option>\n * </select>\n *\n * A directive on the browser's own `<select>`, which on a phone opens the platform picker and on a desktop\n * opens the OS listbox. That is the whole point of it — where a designed listbox is wanted, that is a\n * different component. Nothing here re-implements the popup, so nothing here can get it wrong.\n */\n@Directive({\n selector: 'select[kxNativeSelect]',\n host: {\n '[class]': '\"kx-native-select kx-native-select--\" + corners()',\n },\n})\nexport class KxNativeSelect {\n readonly corners = input<KxCorners | 'rounded'>('default');\n}\n\n/* ── radio group ────────────────────────────────────────────────────────── */\n\n/**\n * <kx-radio-group name=\"plan\" [(ngModel)]=\"plan\" aria-label=\"Plan\">\n * <kx-radio value=\"free\">Free</kx-radio>\n * <kx-radio value=\"pro\">Pro</kx-radio>\n * </kx-radio-group>\n *\n * The radios are real `<input type=\"radio\">` elements sharing a `name`, so arrow-key selection, roving focus,\n * the \"one tab stop per group\" behaviour and the group's own form semantics are the browser's. An ARIA\n * re-implementation of a radio group has to rebuild all four, and usually rebuilds three.\n *\n * The group is the `ControlValueAccessor`; the radios read and write through it.\n */\n@Component({\n selector: 'kx-radio-group',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => KxRadioGroup), multi: true }],\n template: '<ng-content />',\n host: {\n class: 'kx-radio-group',\n role: 'radiogroup',\n '[attr.aria-orientation]': \"orientation() === 'horizontal' ? 'horizontal' : null\",\n },\n})\nexport class KxRadioGroup extends KxValueBase<string | null> {\n /** Shared `name` for the underlying inputs. Defaults to a per-instance name so two groups never merge. */\n readonly name = input(`kx-radio-${uid()}`);\n readonly value = model<string | null>(null);\n readonly orientation = input<'horizontal' | 'vertical'>('vertical');\n /** Emits only on user selection — `valueChange` also fires when a form writes the value in. */\n readonly selected = output<string>();\n\n /** Called by a child radio. Public because the radio is a separate component, not because callers should. */\n select(next: string): void {\n if (this.isDisabled()) return;\n this.value.set(next);\n this.onChange(next);\n this.onTouched();\n this.selected.emit(next);\n }\n\n groupDisabled(): boolean {\n return this.isDisabled();\n }\n\n /** A radio lost focus — mark the group touched so `ng-touched` and validation messages behave. */\n touch(): void {\n this.onTouched();\n }\n\n override writeValue(value: string | null): void {\n this.value.set(value ?? null);\n }\n}\n\n/**\n * <kx-radio value=\"pro\">Pro</kx-radio>\n *\n * Renders `<input type=\"radio\">` + `<label>`, associated by id, so the whole row is a click target and the\n * label is the accessible name without any `aria-label` guessing.\n */\n@Component({\n selector: 'kx-radio',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <input\n type=\"radio\"\n class=\"kx-radio__input\"\n [id]=\"id()\"\n [name]=\"group.name()\"\n [value]=\"value()\"\n [checked]=\"group.value() === value()\"\n [disabled]=\"disabled() || group.groupDisabled()\"\n (change)=\"group.select(value())\"\n (blur)=\"group.touch()\"\n />\n <label class=\"kx-radio__label\" [for]=\"id()\"><ng-content /></label>\n `,\n host: { class: 'kx-radio' },\n})\nexport class KxRadio {\n readonly value = input.required<string>();\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly id = input(`kx-radio-item-${uid()}`);\n\n constructor(protected readonly group: KxRadioGroup) {}\n}\n\n/* ── slider ─────────────────────────────────────────────────────────────── */\n\n/**\n * <kx-slider [(ngModel)]=\"volume\" [min]=\"0\" [max]=\"100\" [step]=\"5\" aria-label=\"Volume\" />\n *\n * A real `<input type=\"range\">`. Arrow keys, Page Up/Down, Home/End, `aria-valuenow`/`valuemin`/`valuemax`,\n * the RTL direction flip and touch dragging are all the browser's, and all of them are things hand-rolled\n * sliders routinely lose. The filled track is drawn with a CSS custom property set from the value, so the\n * visual follows the real control rather than the other way round.\n *\n * The track and its fill are elements behind the input rather than a gradient on the input's own track: a\n * gradient has no logical direction (`to right` stays right in RTL), so the fill grew from the wrong end in\n * an RTL page while the browser moved the thumb correctly. An element placed with `inset-inline-start`\n * follows the slider's own direction, nested or not (scripts/angular-browser.mjs, rtl).\n */\n@Component({\n selector: 'kx-slider',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => KxSlider), multi: true }],\n template: `\n <span class=\"kx-slider__track\" aria-hidden=\"true\"><span class=\"kx-slider__fill\"></span></span>\n <input\n type=\"range\"\n class=\"kx-slider__input\"\n [min]=\"min()\"\n [max]=\"max()\"\n [step]=\"step()\"\n [value]=\"value()\"\n [disabled]=\"isDisabled()\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-labelledby]=\"ariaLabelledby()\"\n [attr.aria-valuetext]=\"valueText()\"\n (input)=\"commit($any($event.target).valueAsNumber)\"\n (blur)=\"onTouched()\"\n />\n `,\n host: {\n class: 'kx-slider',\n '[style.--kx-slider-fill.%]': 'fill()',\n },\n})\nexport class KxSlider extends KxValueBase<number> {\n readonly value = model(0);\n readonly min = input(0);\n readonly max = input(100);\n readonly step = input(1);\n /** Announced instead of the raw number where the number alone means nothing (\"Medium\", \"3 of 7\"). */\n readonly valueText = input<string | null>(null);\n readonly ariaLabel = input<string | null>(null, { alias: 'aria-label' });\n readonly ariaLabelledby = input<string | null>(null, { alias: 'aria-labelledby' });\n readonly changed = output<number>();\n\n protected readonly fill = computed(() => {\n const span = this.max() - this.min();\n return span <= 0 ? 0 : ((this.value() - this.min()) / span) * 100;\n });\n\n protected commit(next: number): void {\n this.value.set(next);\n this.onChange(next);\n this.changed.emit(next);\n }\n\n override writeValue(value: number): void {\n this.value.set(Number.isFinite(value) ? value : this.min());\n }\n}\n\n/* ── number input ───────────────────────────────────────────────────────── */\n\n/**\n * <kx-number-input [(ngModel)]=\"quantity\" [min]=\"1\" [max]=\"99\" aria-label=\"Quantity\" />\n *\n * A real `<input type=\"number\">` with explicit step buttons beside it. The input keeps the numeric keypad on\n * touch, the browser's own arrow-key stepping and `valueAsNumber`; the buttons exist because the native\n * spinners are tiny, inconsistent between browsers, and in several of them not reachable by keyboard at all.\n *\n * The buttons are `aria-hidden` and `tabindex=\"-1\"`: they duplicate keyboard behaviour the input already has,\n * so exposing them adds two stops to the tab order that do nothing new.\n *\n * `readonly` keeps the value readable, focusable and submitted but unchangeable: the input is `readonly` (so the\n * browser's own arrow-key stepping stops too) and both steppers are disabled.\n */\n@Component({\n selector: 'kx-number-input',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => KxNumberInput), multi: true }],\n template: `\n <button type=\"button\" class=\"kx-number-input__step\" tabindex=\"-1\" aria-hidden=\"true\" [disabled]=\"isDisabled() || readonly()\" (click)=\"nudge(-1)\">−</button>\n <input\n type=\"number\"\n class=\"kx-number-input__input\"\n [min]=\"min()\"\n [max]=\"max()\"\n [step]=\"step()\"\n [value]=\"value()\"\n [disabled]=\"isDisabled()\"\n [readOnly]=\"readonly()\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-labelledby]=\"ariaLabelledby()\"\n [attr.aria-invalid]=\"ariaInvalid()\"\n [attr.aria-describedby]=\"ariaDescribedby()\"\n (input)=\"commit($any($event.target).valueAsNumber)\"\n (blur)=\"onTouched()\"\n />\n <button type=\"button\" class=\"kx-number-input__step\" tabindex=\"-1\" aria-hidden=\"true\" [disabled]=\"isDisabled() || readonly()\" (click)=\"nudge(1)\">+</button>\n `,\n host: { class: 'kx-number-input' },\n})\nexport class KxNumberInput extends KxValueBase<number | null> {\n readonly value = model<number | null>(null);\n readonly min = input<number | null>(null);\n readonly max = input<number | null>(null);\n readonly step = input(1);\n readonly readonly = input(false, { transform: booleanAttribute });\n readonly ariaLabel = input<string | null>(null, { alias: 'aria-label' });\n readonly ariaLabelledby = input<string | null>(null, { alias: 'aria-labelledby' });\n /** Forwarded to the inner input, which is what assistive technology reads and what the field's error state keys on. */\n readonly ariaInvalid = input<'true' | 'false' | null>(null, { alias: 'aria-invalid' });\n /** Forwarded to the inner input, so an error or hint is announced with the field. */\n readonly ariaDescribedby = input<string | null>(null, { alias: 'aria-describedby' });\n readonly changed = output<number | null>();\n\n protected nudge(direction: 1 | -1): void {\n if (this.readonly()) return;\n this.commit((this.value() ?? 0) + direction * this.step());\n }\n\n protected commit(next: number): void {\n // an emptied field is null, not 0 — \"no answer\" and \"zero\" are different answers\n const value = Number.isFinite(next) ? this.clamp(next) : null;\n this.value.set(value);\n this.onChange(value);\n this.changed.emit(value);\n }\n\n private clamp(n: number): number {\n const min = this.min();\n const max = this.max();\n if (min !== null && n < min) return min;\n if (max !== null && n > max) return max;\n return n;\n }\n\n override writeValue(value: number | null): void {\n this.value.set(value ?? null);\n }\n}\n\n/* ── password input ─────────────────────────────────────────────────────── */\n\n/**\n * <kx-password-input [(ngModel)]=\"password\" aria-label=\"Password\" />\n *\n * A real password field with a reveal toggle. The toggle is a real `<button>` carrying `aria-pressed`, so its\n * state is announced; the field keeps `autocomplete=\"current-password\"` by default so password managers still\n * recognise it, and `[autocomplete]` switches it to `new-password` on a sign-up form.\n */\n@Component({\n selector: 'kx-password-input',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => KxPasswordInput), multi: true }],\n template: `\n <input\n class=\"kx-password-input__input\"\n [type]=\"revealed() ? 'text' : 'password'\"\n [value]=\"value()\"\n [disabled]=\"isDisabled()\"\n [attr.autocomplete]=\"autocomplete()\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-labelledby]=\"ariaLabelledby()\"\n [attr.aria-invalid]=\"ariaInvalid()\"\n [attr.aria-describedby]=\"ariaDescribedby()\"\n (input)=\"commit($any($event.target).value)\"\n (blur)=\"onTouched()\"\n />\n <button\n type=\"button\"\n class=\"kx-password-input__reveal\"\n [attr.aria-pressed]=\"revealed()\"\n [attr.aria-label]=\"revealed() ? 'Hide password' : 'Show password'\"\n [disabled]=\"isDisabled()\"\n (click)=\"revealed.set(!revealed())\"\n >\n {{ revealed() ? 'Hide' : 'Show' }}\n </button>\n `,\n host: { class: 'kx-password-input' },\n})\nexport class KxPasswordInput extends KxValueBase<string> {\n readonly value = model('');\n readonly autocomplete = input<'current-password' | 'new-password'>('current-password');\n readonly ariaLabel = input<string | null>(null, { alias: 'aria-label' });\n readonly ariaLabelledby = input<string | null>(null, { alias: 'aria-labelledby' });\n /** Forwarded to the inner input, which is what assistive technology reads and what the field's error state keys on. */\n readonly ariaInvalid = input<'true' | 'false' | null>(null, { alias: 'aria-invalid' });\n /** Forwarded to the inner input, so an error or hint is announced with the field. */\n readonly ariaDescribedby = input<string | null>(null, { alias: 'aria-describedby' });\n\n protected readonly revealed = signal(false);\n\n protected commit(next: string): void {\n this.value.set(next);\n this.onChange(next);\n }\n\n override writeValue(value: string): void {\n this.value.set(value ?? '');\n }\n}\n\n/* ── field ──────────────────────────────────────────────────────────────── */\n\n/**\n * <kx-field>\n * <label kxFieldLabel for=\"email\">Email</label>\n * <input kxInput id=\"email\" aria-describedby=\"email-hint\" />\n * <p kxFieldDescription id=\"email-hint\">We only use this to sign you in.</p>\n * <kx-field-message variant=\"error\">Enter a valid address.</kx-field-message>\n * </kx-field>\n *\n * Layout and type for a labelled control, and nothing else. It deliberately does not generate ids or wire\n * `aria-describedby` for you: a wrapper that guesses those has to guess which of several descriptions is the\n * error, and gets it wrong on the form where it matters. The ids are the caller's, and they are three\n * characters each.\n *\n * An error message is a live region, so a validation message that appears after submit is announced rather\n * than silently rendered below the field.\n */\n@Component({\n selector: 'kx-field',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: '<ng-content />',\n host: { class: 'kx-field' },\n})\nexport class KxField {}\n\n@Directive({ selector: 'label[kxFieldLabel]', host: { class: 'kx-field__label kx-label' } })\nexport class KxFieldLabel {}\n\n@Directive({ selector: '[kxFieldDescription]', host: { class: 'kx-field__description' } })\nexport class KxFieldDescription {}\n\n@Component({\n selector: 'kx-field-message',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: '<ng-content />',\n host: {\n '[class]': '\"kx-field__message kx-field__message--\" + variant()',\n '[attr.role]': \"variant() === 'error' ? 'alert' : null\",\n },\n})\nexport class KxFieldMessage {\n readonly variant = input<KxFieldMessageVariant>('error');\n}\n","import { ChangeDetectionStrategy, Component, Directive, input } from '@angular/core';\n\n/* ── input group ────────────────────────────────────────────────────────── */\n\n/**\n * <kx-input-group>\n * <kx-input-group-text>https://</kx-input-group-text>\n * <input kxInputGroupInput aria-label=\"Website\" placeholder=\"kinetixui.com\" />\n * <button kxInputGroupButton>Copy</button>\n * </kx-input-group>\n *\n * One bordered field that hosts an input plus fixed add-ons (an icon, text, a button) on either side — React's\n * InputGroup. The input is a real `<input>` carrying `kxInputGroupInput`, so `ngModel`, `formControlName`,\n * `type`, `autocomplete`, `readonly` and the browser's validation all work on it untouched, and it is the only\n * thing in the group a label has to name.\n *\n * The shell follows the text-entry state contract (TOKENS.md, \"Composite fields\"): it is ONE field, and it reads\n * its edge, hover, focus, invalid, read-only and disabled states from the input inside it — `aria-invalid`,\n * `readonly` and `disabled` go on the input, where assistive technology reads them, and the shell follows. A\n * focused add-on button draws its own inset ring and leaves the shell at rest, so the ring says which part has\n * focus.\n */\n@Component({\n selector: 'kx-input-group',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: '<ng-content />',\n host: { class: 'kx-input-group' },\n})\nexport class KxInputGroup {}\n\n/** The group's input. Put it on a real `<input>`; every native and Angular forms attribute still applies. */\n@Directive({ selector: 'input[kxInputGroupInput]', host: { class: 'kx-input-group__input' } })\nexport class KxInputGroupInput {}\n\n/**\n * An icon or a cluster of add-ons at one end of the group. `align` is logical: `start` is the reading start,\n * so the add-on follows the page into right-to-left without a separate RTL rule.\n */\n@Component({\n selector: 'kx-input-group-addon',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: '<ng-content />',\n host: { '[class]': '\"kx-input-group__addon kx-input-group__addon--\" + align()' },\n})\nexport class KxInputGroupAddon {\n readonly align = input<'start' | 'end'>('start');\n}\n\n/** Fixed text beside the input — a protocol, a unit, a domain. Not announced as part of the input's value. */\n@Component({\n selector: 'kx-input-group-text',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: '<ng-content />',\n host: { class: 'kx-input-group__text' },\n})\nexport class KxInputGroupText {}\n\n/**\n * A real `<button>` inside the group, divided from the input by a quiet internal line. `type` defaults to\n * `button`, so a button in a group inside a `<form>` never submits it by accident.\n */\n@Directive({\n selector: 'button[kxInputGroupButton]',\n host: { class: 'kx-input-group__button', '[attr.type]': 'type()' },\n})\nexport class KxInputGroupButton {\n readonly type = input<'button' | 'submit' | 'reset'>('button');\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n computed,\n forwardRef,\n input,\n model,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { KxValueBase } from './forms';\n\n/* ── one-time code ──────────────────────────────────────────────────────── */\n\n/**\n * <kx-input-otp [(ngModel)]=\"code\" [length]=\"6\" [groups]=\"[3, 3]\" aria-label=\"Verification code\" />\n *\n * A one-time code field drawn as a row of cells — React's InputOTP. Underneath it is ONE real `<input>`,\n * laid transparently over the cells, which is what makes it work everywhere a code field has to:\n *\n * - `autocomplete=\"one-time-code\"`, so iOS and Android offer the code from the SMS, and a password manager\n * can fill it;\n * - a paste of the whole code lands in one go (characters the field does not accept are dropped);\n * - assistive technology meets a single labelled text field with a maximum length, not six unlabelled boxes —\n * the cells are `aria-hidden` decoration of the input's value;\n * - `inputmode=\"numeric\"` raises the number pad for a digits-only code.\n *\n * Editing happens at the end of the code: typing appends and Backspace removes the last character, and the\n * caret is held at the end so the highlighted cell is always the one the next character goes into (the\n * `data-active` cell, which carries the field's focus ring). `completed` fires once the code is full.\n *\n * The cells read the field's state from the input, as every composite field does (TOKENS.md, \"Composite fields\"):\n * `aria-invalid` on the component is forwarded to the input and turns every cell's edge destructive, and a\n * disabled field dims as one. The caret is a static bar rather than a blinking one, so there is no motion to\n * reduce.\n */\n@Component({\n selector: 'kx-input-otp',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => KxInputOtp), multi: true }],\n template: `\n <div class=\"kx-input-otp__cells\" aria-hidden=\"true\">\n @for (group of layout(); track $index; let g = $index) {\n @if (g > 0) {\n <span class=\"kx-input-otp__separator\"></span>\n }\n <span class=\"kx-input-otp__group\">\n @for (i of group; track i) {\n <span class=\"kx-input-otp__slot\" [attr.data-active]=\"active() === i ? '' : null\">\n {{ value()[i] ?? '' }}\n @if (active() === i && !value()[i]) {\n <span class=\"kx-input-otp__caret\"></span>\n }\n </span>\n }\n </span>\n }\n </div>\n <input\n #field\n class=\"kx-input-otp__input\"\n autocomplete=\"one-time-code\"\n spellcheck=\"false\"\n [attr.inputmode]=\"allow() === 'digits' ? 'numeric' : 'text'\"\n [attr.pattern]=\"allow() === 'digits' ? '[0-9]*' : null\"\n [attr.maxlength]=\"length()\"\n [value]=\"value()\"\n [disabled]=\"isDisabled()\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-labelledby]=\"ariaLabelledby()\"\n [attr.aria-invalid]=\"ariaInvalid()\"\n [attr.aria-describedby]=\"ariaDescribedby()\"\n (input)=\"commit($any($event.target))\"\n (focus)=\"focused.set(true); toEnd()\"\n (blur)=\"focused.set(false); onTouched()\"\n (click)=\"toEnd()\"\n (keyup)=\"toEnd()\"\n />\n `,\n host: { class: 'kx-input-otp' },\n})\nexport class KxInputOtp extends KxValueBase<string> {\n readonly value = model('');\n /** How many characters the code has. */\n readonly length = input(6);\n /** Cells per visual group, separated by a dash — `[3, 3]` draws 123–456. Defaults to one group. */\n readonly groups = input<readonly number[] | null>(null);\n /** Which characters the field accepts. Anything else, typed or pasted, is dropped. */\n readonly allow = input<'digits' | 'alphanumeric'>('digits');\n readonly ariaLabel = input<string | null>(null, { alias: 'aria-label' });\n readonly ariaLabelledby = input<string | null>(null, { alias: 'aria-labelledby' });\n /** Forwarded to the input, which is what assistive technology reads and what the cells' error state keys on. */\n readonly ariaInvalid = input<'true' | 'false' | null>(null, { alias: 'aria-invalid' });\n /** Forwarded to the input, so an error or hint is announced with the field. */\n readonly ariaDescribedby = input<string | null>(null, { alias: 'aria-describedby' });\n /** The full code, once every cell is filled. */\n readonly completed = output<string>();\n\n protected readonly focused = signal(false);\n private readonly field = viewChild.required<ElementRef<HTMLInputElement>>('field');\n\n /** Cell indices, split into the requested groups. A `groups` that does not add up to `length` is ignored. */\n protected readonly layout = computed(() => {\n const length = this.length();\n const groups = this.groups();\n const sizes = groups && groups.reduce((a, b) => a + b, 0) === length ? groups : [length];\n let next = 0;\n return sizes.map((size) => Array.from({ length: size }, () => next++));\n });\n\n /** The cell the next character goes into — the last one once the code is full — while the field has focus. */\n protected readonly active = computed(() => (this.focused() ? Math.min(this.value().length, this.length() - 1) : -1));\n\n /** What the field accepts: only allowed characters, at most `length` of them. */\n private clean(raw: string): string {\n const reject = this.allow() === 'digits' ? /[^0-9]/g : /[^0-9a-z]/gi;\n return raw.replace(reject, '').slice(0, this.length());\n }\n\n protected commit(el: HTMLInputElement): void {\n const next = this.clean(el.value);\n // write the cleaned value back, so a rejected character never shows in the field it was typed into\n if (el.value !== next) el.value = next;\n this.value.set(next);\n this.onChange(next);\n if (next.length === this.length()) this.completed.emit(next);\n }\n\n /** Keep the caret at the end, so the highlighted cell and the insertion point never disagree. */\n protected toEnd(): void {\n const el = this.field().nativeElement;\n const end = el.value.length;\n if (el.selectionStart !== end || el.selectionEnd !== end) el.setSelectionRange(end, end);\n }\n\n /** A value written by the form is held to the same rules as typing, so the field never holds more than its cells show. */\n override writeValue(value: string): void {\n this.value.set(this.clean(String(value ?? '')));\n }\n}\n","import { ChangeDetectionStrategy, Component, booleanAttribute, computed, forwardRef, input, model, output, signal } from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { KxValueBase } from './forms';\n\nlet nextRating = 0;\n\n/* ── rating ─────────────────────────────────────────────────────────────── */\n\n/**\n * <kx-rating [(ngModel)]=\"stars\" aria-label=\"Rate this article\" />\n * <kx-rating [value]=\"4\" readonly />\n *\n * A star rating. The interaction contract, defined before the implementation and asserted in a real browser\n * (scripts/angular-browser.mjs):\n *\n * semantics a `radiogroup` named by `aria-label` / `aria-labelledby` (\"Rating\" if neither is given), whose\n * stars are real `<input type=\"radio\">`s named \"1 star\" … \"5 stars\". One of N, chosen — which is\n * what a rating is, and what a screen reader already knows how to announce (\"3 stars, radio,\n * checked, 3 of 5\").\n * keyboard one tab stop: the chosen star, or the first when nothing is chosen yet. The arrow keys move\n * and choose (the browser's own radio behaviour, mirrored in RTL); Home and End choose the\n * lowest and highest. Space chooses the focused star.\n * pointer clicking a star chooses it; hovering previews the fill up to that star without changing the\n * value.\n * read-only `readonly` renders a static display — `role=\"img\"` named \"Rated 3 out of 5\", the stars hidden\n * from assistive technology, no tab stop — for a rating that is shown, not given.\n * disabled every radio is disabled; the group dims and does not answer the pointer.\n * direction the stars run from the inline start, so the first star is on the right in an RTL page.\n * motion none: a star's fill changes colour instantly.\n *\n * This differs from React's Rating, which renders `aria-pressed` buttons inside a `radiogroup` with no arrow-key\n * movement; the radios here are the closer fit to the role the group claims.\n */\n@Component({\n selector: 'kx-rating',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => KxRating), multi: true }],\n template: `\n @for (n of stars(); track n) {\n @if (readonly()) {\n <span class=\"kx-rating__item\">\n <svg class=\"kx-rating__star\" [class.kx-rating__star--on]=\"n <= value()\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <path [attr.d]=\"star\" />\n </svg>\n </span>\n } @else {\n <label class=\"kx-rating__item\" (pointerenter)=\"preview(n)\">\n <input\n type=\"radio\"\n class=\"kx-rating__radio\"\n [name]=\"name\"\n [value]=\"n\"\n [checked]=\"n === value()\"\n [disabled]=\"isDisabled()\"\n [attr.aria-label]=\"n === 1 ? '1 star' : n + ' stars'\"\n (change)=\"commit(n)\"\n (keydown)=\"onKey($event)\"\n (blur)=\"onTouched()\"\n />\n <svg class=\"kx-rating__star\" [class.kx-rating__star--on]=\"n <= shown()\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n <path [attr.d]=\"star\" />\n </svg>\n </label>\n }\n }\n `,\n host: {\n '[class]': '\"kx-rating kx-rating--\" + size()',\n '[attr.role]': \"readonly() ? 'img' : 'radiogroup'\",\n '[attr.aria-label]': \"readonly() ? 'Rated ' + value() + ' out of ' + max() : (ariaLabelledby() ? null : ariaLabel() ?? 'Rating')\",\n '[attr.aria-labelledby]': 'readonly() ? null : ariaLabelledby()',\n '[attr.aria-disabled]': 'isDisabled() ? true : null',\n '(pointerleave)': 'hovered.set(null)',\n },\n})\nexport class KxRating extends KxValueBase<number> {\n /** The chosen number of stars; 0 is \"not rated yet\". */\n readonly value = model(0);\n readonly max = input(5);\n readonly size = input<'sm' | 'md' | 'lg'>('md');\n readonly readonly = input(false, { transform: booleanAttribute });\n readonly ariaLabel = input<string | null>(null, { alias: 'aria-label' });\n readonly ariaLabelledby = input<string | null>(null, { alias: 'aria-labelledby' });\n readonly changed = output<number>();\n\n protected readonly name = `kx-rating-${nextRating++}`;\n protected readonly hovered = signal<number | null>(null);\n protected readonly stars = computed(() => Array.from({ length: this.max() }, (_, i) => i + 1));\n /** What the stars show: the hovered preview while the pointer is over one, otherwise the value. */\n protected readonly shown = computed(() => this.hovered() ?? this.value());\n /** A five-pointed star on a 24-unit grid. */\n protected readonly star = 'M12 2.5l2.94 5.96 6.56.95-4.75 4.63 1.12 6.54L12 17.5l-5.87 3.08 1.12-6.54L2.5 9.41l6.56-.95z';\n\n protected preview(n: number): void {\n if (!this.isDisabled()) this.hovered.set(n);\n }\n\n protected commit(n: number): void {\n this.value.set(n);\n this.onChange(n);\n this.changed.emit(n);\n }\n\n /** Home and End — the one piece of radio-group keyboard behaviour the browser does not provide. */\n protected onKey(event: KeyboardEvent): void {\n if (event.key !== 'Home' && event.key !== 'End') return;\n event.preventDefault();\n const n = event.key === 'Home' ? 1 : this.max();\n const group = (event.currentTarget as HTMLElement).closest('kx-rating');\n group?.querySelectorAll<HTMLInputElement>('input[type=radio]')[n - 1]?.focus();\n this.commit(n);\n }\n\n override writeValue(value: number): void {\n this.value.set(Number.isFinite(value) ? value : 0);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n Directive,\n ElementRef,\n contentChildren,\n inject,\n input,\n model,\n signal,\n} from '@angular/core';\n\n/**\n * Tabs — the package's first composite, and where the keyboard pattern is established.\n *\n * <kx-tabs [(value)]=\"tab\">\n * <kx-tab-list aria-label=\"Account\">\n * <button kxTab value=\"profile\">Profile</button>\n * <button kxTab value=\"billing\">Billing</button>\n * </kx-tab-list>\n * <kx-tab-panel value=\"profile\">…</kx-tab-panel>\n * <kx-tab-panel value=\"billing\">…</kx-tab-panel>\n * </kx-tabs>\n *\n * Follows the APG tabs pattern: one stop in the page tab order (roving tabindex), arrows move between tabs,\n * Home/End jump to the ends, and selection follows focus (automatic activation) because the panels here are\n * cheap to render. Arrow direction is resolved against the computed writing direction, so in an RTL document\n * ArrowLeft moves to the *next* tab — mirroring what the Compose port already tested for.\n *\n * Ids are generated once per tab so `aria-controls`/`aria-labelledby` can point at each other without the\n * caller having to invent and thread two ids per tab.\n */\n\nlet nextId = 0;\n\n@Directive({\n selector: 'button[kxTab]',\n host: {\n class: 'kx-tab',\n type: 'button',\n role: 'tab',\n '[id]': 'id',\n '[attr.aria-selected]': 'selected()',\n '[attr.aria-controls]': 'panelId',\n '[attr.tabindex]': 'selected() ? 0 : -1',\n '[disabled]': 'disabled()',\n '(click)': 'tabs.select(value())',\n '(keydown)': 'tabs.onKeydown($event)',\n },\n})\nexport class KxTab {\n readonly tabs = inject(KxTabs);\n readonly el = inject<ElementRef<HTMLButtonElement>>(ElementRef);\n readonly value = input.required<string>();\n readonly disabled = input(false);\n\n readonly id = `kx-tab-${nextId++}`;\n readonly panelId = `${this.id}-panel`;\n\n selected(): boolean {\n return this.tabs.value() === this.value();\n }\n}\n\n@Component({\n selector: 'kx-tab-list',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: '<ng-content />',\n host: { class: 'kx-tab-list', role: 'tablist' },\n})\nexport class KxTabList {}\n\n/**\n * The panel is focusable (`tabindex=\"0\"`) because after Tab moves out of the tab list the next stop must be\n * the panel itself — otherwise a keyboard user lands past the content the tab just revealed. Hidden panels are\n * removed from the DOM rather than merely hidden, so nothing inside them is reachable or announced.\n */\n@Component({\n selector: 'kx-tab-panel',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: '@if (active()) { <ng-content /> }',\n host: {\n class: 'kx-tab-panel',\n role: 'tabpanel',\n '[id]': 'panelId()',\n '[attr.tabindex]': 'active() ? 0 : null',\n '[attr.aria-labelledby]': 'labelledBy()',\n '[hidden]': '!active()',\n },\n})\nexport class KxTabPanel {\n private readonly tabs = inject(KxTabs);\n readonly value = input.required<string>();\n\n active(): boolean {\n return this.tabs.value() === this.value();\n }\n labelledBy(): string | null {\n return this.tabs.tabFor(this.value())?.id ?? null;\n }\n /**\n * The id its tab's `aria-controls` names. The tab always pointed here, but the panel never carried the id, so\n * every tab referenced an element that did not exist (axe `aria-valid-attr-value`, check:angular-browser).\n */\n panelId(): string | null {\n return this.tabs.tabFor(this.value())?.panelId ?? null;\n }\n}\n\n@Component({\n selector: 'kx-tabs',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: '<ng-content />',\n host: { class: 'kx-tabs' },\n})\nexport class KxTabs {\n /** Two-way: `[(value)]` for a controlled tab strip, or leave it and let the first tab win. */\n readonly value = model<string>('');\n private readonly tabs = contentChildren(KxTab, { descendants: true });\n private readonly initialised = signal(false);\n\n tabFor(value: string): KxTab | undefined {\n return this.tabs().find((t) => t.value() === value);\n }\n\n select(value: string): void {\n this.value.set(value);\n }\n\n /** Falls back to the first enabled tab when nothing is selected, so an uncontrolled strip still works. */\n constructor() {\n queueMicrotask(() => {\n if (this.initialised()) return;\n this.initialised.set(true);\n if (!this.value()) {\n const first = this.tabs().find((t) => !t.disabled());\n if (first) this.value.set(first.value());\n }\n });\n }\n\n onKeydown(event: KeyboardEvent): void {\n const enabled = this.tabs().filter((t) => !t.disabled());\n if (enabled.length === 0) return;\n const current = enabled.findIndex((t) => t.value() === this.value());\n const rtl = this.isRtl();\n const forward = rtl ? 'ArrowLeft' : 'ArrowRight';\n const back = rtl ? 'ArrowRight' : 'ArrowLeft';\n\n let next: number | null = null;\n if (event.key === forward) next = (current + 1) % enabled.length;\n else if (event.key === back) next = (current - 1 + enabled.length) % enabled.length;\n else if (event.key === 'Home') next = 0;\n else if (event.key === 'End') next = enabled.length - 1;\n if (next === null) return;\n\n event.preventDefault();\n const target = enabled[next]!;\n this.select(target.value());\n target.el.nativeElement.focus();\n }\n\n private readonly el = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /**\n * The document's own direction, read at the moment of the keypress rather than taken as an input — an\n * application that flips `dir` at runtime keeps working with no extra wiring.\n *\n * The nearest `[dir]` ancestor is checked before the computed style. Computed direction is the more correct\n * answer when direction comes from CSS, but it is also the one a DOM implementation is free not to inherit,\n * so relying on it alone makes the behaviour depend on the environment rather than on the markup.\n */\n private isRtl(): boolean {\n const node = this.el.nativeElement;\n const explicit = node.closest('[dir]')?.getAttribute('dir')?.toLowerCase();\n if (explicit === 'rtl' || explicit === 'ltr') return explicit === 'rtl';\n return node.ownerDocument.defaultView?.getComputedStyle(node).direction === 'rtl';\n }\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n Directive,\n ElementRef,\n TemplateRef,\n booleanAttribute,\n computed,\n contentChild,\n inject,\n input,\n linkedSignal,\n output,\n signal,\n} from '@angular/core';\nimport type {\n KxDescriptionListLayout,\n KxFabSize,\n KxFabVariant,\n KxImageRatio,\n KxInformVariant,\n KxOrientation,\n KxTimelineStatus,\n} from './types';\n\n/**\n * The content and layout wave: banner, button group, circular progress, code block, description list, FAB,\n * image, inform, list, marquee, page header and timeline.\n *\n * Two conventions this file follows, both inherited rather than invented:\n *\n * Icons arrive by projection, never by import, with one exception that matters: the dismiss button\n * carries a built-in glyph as `<ng-content>` fallback content. A projected slot that the caller leaves\n * empty is fine for a decorative leading icon and is not fine for a control — an empty button is a few\n * pixels of nothing, so the only people who could find it are the ones reading its `aria-label`. Project\n * `[kxDismissIcon]` to replace the default; leave it out and the control is still visible.\n * The React implementations reach for `lucide-react`, which is a\n * reasonable choice for a package that already depends on React's ecosystem. Adding an icon library to\n * `@kinetixui/angular` would make every consumer carry it to render a banner, so each surface here exposes a\n * slot and the application supplies whatever it already uses. Nothing is hard-coded and nothing is missing:\n * the surfaces that need a decorative glyph lay out correctly with or without one.\n *\n * Callbacks arrive as `output()`, never as object inputs. React passes `action={{ label, onClick }}`, which is\n * idiomatic there. In Angular the label is content and the click is an event, so a caller writes\n * `<button kxBannerAction (click)=\"…\">Retry</button>`. This is the \"equivalent capability, idiomatic\n * implementation\" rule in RTL.md and types.ts applied to event handling.\n */\n\n/* ── banner ─────────────────────────────────────────────────────────────── */\n\n/**\n * <kx-banner variant=\"warning\" sticky (dismiss)=\"hidden = true\">\n * <svg kxIcon …></svg>\n * Scheduled maintenance at 02:00 UTC.\n * <button kxBannerAction (click)=\"more()\">Details</button>\n * </kx-banner>\n *\n * A page-level, full-bleed notice: no radius and no width of its own, so it spans whatever contains it. That\n * is the whole distinction from Inform, which is a contained rounded card, and from a toast, which is\n * transient.\n *\n * `role=\"status\"` rather than `alert`. A banner is persistent and usually present on arrival, and an assertive\n * live region interrupts a screen-reader user mid-sentence to read something that is not urgent. A caller with\n * a genuinely urgent banner can set `role=\"alert\"` on the host, which wins over this default.\n */\n@Component({\n selector: 'kx-banner',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <ng-content select=\"[kxIcon]\" />\n <div class=\"kx-banner__body\">\n <span><ng-content /></span>\n <ng-content select=\"[kxBannerAction]\" />\n </div>\n @if (dismissible()) {\n <button type=\"button\" class=\"kx-banner__dismiss\" [attr.aria-label]=\"dismissLabel()\" (click)=\"dismiss.emit()\">\n <ng-content select=\"[kxDismissIcon]\">\n <svg class=\"kx-dismiss-glyph\" viewBox=\"0 0 14 14\" aria-hidden=\"true\" focusable=\"false\">\n <path d=\"M3 3l8 8M11 3l-8 8\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" />\n </svg>\n </ng-content>\n </button>\n }\n `,\n host: {\n role: 'status',\n '[class]': '\"kx-banner kx-banner--\" + variant() + (sticky() ? \" kx-banner--sticky\" : \"\")',\n },\n})\nexport class KxBanner {\n readonly variant = input<KxInformVariant>('information');\n readonly sticky = input(false, { transform: booleanAttribute });\n /** Renders the dismiss control. The banner does not hide itself — the caller owns that state. */\n readonly dismissible = input(false, { transform: booleanAttribute });\n /**\n * The dismiss button's accessible name. An input rather than a hard-coded \"Dismiss\" because this package\n * ships no translations, and a button whose only label is in the wrong language is worse than one the\n * application names itself.\n */\n readonly dismissLabel = input('Dismiss');\n readonly dismiss = output<void>();\n}\n\n/* ── button group ───────────────────────────────────────────────────────── */\n\n/**\n * <div kxButtonGroup>\n * <button kxButton variant=\"Outline\">Day</button>\n * <button kxButton variant=\"Outline\">Week</button>\n * </div>\n *\n * Joins adjacent controls into one cluster: inner corners squared, shared borders overlapped so they do not\n * double, and the focused child raised so its ring is not clipped by its neighbour.\n *\n * A directive on the caller's element, not a wrapper component, because the group contributes layout and\n * nothing else — the same reason `kxButton` is a directive on `<button>`. `role=\"group\"` is set, but no\n * roving tabindex: these are buttons, each is individually tabbable, and a toolbar's arrow-key navigation is\n * `kx-segmented-control`'s job. Pretending otherwise would break Tab for every existing caller.\n */\n@Directive({\n selector: '[kxButtonGroup]',\n host: {\n role: 'group',\n '[class]': '\"kx-button-group kx-button-group--\" + orientation()',\n '[attr.data-orientation]': 'orientation()',\n },\n})\nexport class KxButtonGroup {\n readonly orientation = input<KxOrientation>('horizontal');\n}\n\n/** A thin divider between segments, for fills with no shared border for the overlap trick to lean on. */\n@Component({\n selector: 'kx-button-group-separator',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: '',\n host: {\n role: 'separator',\n '[attr.aria-orientation]': 'orientation()',\n '[class]': '\"kx-button-group-separator kx-button-group-separator--\" + orientation()',\n },\n})\nexport class KxButtonGroupSeparator {\n readonly orientation = input<KxOrientation>('vertical');\n}\n\n/** A static, non-interactive segment — a unit, a prefix, a count. Not a button, so not focusable. */\n@Component({\n selector: 'kx-button-group-text',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: '<ng-content />',\n host: { class: 'kx-button-group-text' },\n})\nexport class KxButtonGroupText {}\n\n/* ── circular progress ──────────────────────────────────────────────────── */\n\n/**\n * <kx-circular-progress [value]=\"72\" showValue />\n * <kx-circular-progress /> <!-- indeterminate -->\n *\n * The ring is two SVG circles, the indicator revealed by `stroke-dashoffset`. `aria-valuenow` is omitted when\n * no value is given, which is how ARIA spells an indeterminate progressbar — a determinate bar reporting 0\n * says \"nothing has happened\", which is a different and usually wrong claim.\n */\n@Component({\n selector: 'kx-circular-progress',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <svg [attr.width]=\"size()\" [attr.height]=\"size()\" aria-hidden=\"true\" focusable=\"false\">\n <circle class=\"kx-circular-progress__track\" [attr.cx]=\"centre()\" [attr.cy]=\"centre()\" [attr.r]=\"radius()\" [attr.stroke-width]=\"strokeWidth()\" fill=\"none\" />\n <circle\n class=\"kx-circular-progress__indicator\"\n [attr.cx]=\"centre()\"\n [attr.cy]=\"centre()\"\n [attr.r]=\"radius()\"\n [attr.stroke-width]=\"strokeWidth()\"\n [attr.stroke-dasharray]=\"circumference()\"\n [attr.stroke-dashoffset]=\"offset()\"\n stroke-linecap=\"round\"\n fill=\"none\"\n />\n </svg>\n @if (showValue() && value() !== undefined) {\n <span class=\"kx-circular-progress__value\">{{ clamped() }}%</span>\n }\n `,\n host: {\n role: 'progressbar',\n class: 'kx-circular-progress',\n 'aria-valuemin': '0',\n 'aria-valuemax': '100',\n '[attr.aria-valuenow]': 'value() === undefined ? null : clamped()',\n '[style.width.px]': 'size()',\n '[style.height.px]': 'size()',\n },\n})\nexport class KxCircularProgress {\n /** 0–100. Left undefined for an indeterminate ring. */\n readonly value = input<number | undefined>(undefined);\n /** Diameter in px. A number, not a token, because a ring's size is a layout decision at the call site. */\n readonly size = input(48);\n readonly strokeWidth = input(4);\n readonly showValue = input(false, { transform: booleanAttribute });\n\n protected readonly clamped = computed(() => Math.max(0, Math.min(100, this.value() ?? 0)));\n protected readonly centre = computed(() => this.size() / 2);\n protected readonly radius = computed(() => (this.size() - this.strokeWidth()) / 2);\n protected readonly circumference = computed(() => 2 * Math.PI * this.radius());\n protected readonly offset = computed(() => {\n const c = this.circumference();\n // An indeterminate ring shows a quarter arc and is spun by CSS; a determinate one is filled to value.\n return this.value() === undefined ? c * 0.75 : c - (this.clamped() / 100) * c;\n });\n}\n\n/* ── code block ─────────────────────────────────────────────────────────── */\n\nexport interface KxCodeBlockFile {\n name: string;\n code: string;\n language?: string;\n}\n\n/**\n * <kx-code-block [code]=\"snippet\" filename=\"main.ts\" />\n * <kx-code-block [files]=\"[{ name: 'app.ts', code: a }, { name: 'app.html', code: b }]\" />\n *\n * Shows code and copies it. Deliberately does not highlight: syntax highlighting needs a grammar per language\n * and is a build-time concern, and a component that shipped one would force the choice on every consumer.\n * `<pre><code>` keeps the whitespace and lets the application bring Shiki or Prism if it wants colour.\n *\n * The file switcher is a real tablist with arrow-key navigation, because that is what a row of tabs is. The\n * copy button reports its result through `aria-live` rather than only swapping an icon, so the outcome is\n * available to someone who cannot see the tick.\n */\n@Component({\n selector: 'kx-code-block',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n @if (hasHeader()) {\n <div class=\"kx-code-block__header\">\n <div class=\"kx-code-block__tabs\" role=\"tablist\">\n @for (tab of tabs(); track tab.name; let i = $index) {\n <button\n type=\"button\"\n role=\"tab\"\n class=\"kx-code-block__tab\"\n [class.kx-code-block__tab--active]=\"i === active()\"\n [attr.aria-selected]=\"i === active()\"\n [attr.tabindex]=\"i === active() ? 0 : -1\"\n (click)=\"select(i)\"\n (keydown)=\"onTabKeydown($event, i)\"\n >\n {{ tab.name || 'code' }}\n </button>\n }\n </div>\n @if (!hideCopy()) {\n <button type=\"button\" class=\"kx-code-block__copy\" [attr.aria-label]=\"copyLabel()\" (click)=\"copy()\">\n <ng-content select=\"[kxCopyIcon]\">\n <svg class=\"kx-copy-glyph\" viewBox=\"0 0 16 16\" aria-hidden=\"true\" focusable=\"false\">\n <rect x=\"5.75\" y=\"5.75\" width=\"7.5\" height=\"7.5\" rx=\"1.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" />\n <path d=\"M10.25 5.75V4.25a1.5 1.5 0 0 0-1.5-1.5h-4.5a1.5 1.5 0 0 0-1.5 1.5v4.5a1.5 1.5 0 0 0 1.5 1.5h1.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" />\n </svg>\n </ng-content>\n </button>\n }\n </div>\n }\n <div class=\"kx-code-block__body\">\n @if (!hasHeader() && !hideCopy()) {\n <!-- With no filename and no tabs there is no header to put the copy button in, and the button is\n the component's whole reason for existing beyond a <pre>. It sits over the code instead. -->\n <button type=\"button\" class=\"kx-code-block__copy kx-code-block__copy--floating\" [attr.aria-label]=\"copyLabel()\" (click)=\"copy()\">\n <ng-content select=\"[kxCopyIcon]\">\n <svg class=\"kx-copy-glyph\" viewBox=\"0 0 16 16\" aria-hidden=\"true\" focusable=\"false\">\n <rect x=\"5.75\" y=\"5.75\" width=\"7.5\" height=\"7.5\" rx=\"1.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" />\n <path d=\"M10.25 5.75V4.25a1.5 1.5 0 0 0-1.5-1.5h-4.5a1.5 1.5 0 0 0-1.5 1.5v4.5a1.5 1.5 0 0 0 1.5 1.5h1.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" />\n </svg>\n </ng-content>\n </button>\n }\n <pre class=\"kx-code-block__pre\" tabindex=\"0\"><code>{{ current().code }}</code></pre>\n </div>\n <span class=\"kx-sr-only\" role=\"status\">{{ copied() ? copiedLabel() : '' }}</span>\n `,\n host: { class: 'kx-code-block' },\n})\nexport class KxCodeBlock {\n readonly code = input('');\n readonly language = input<string | undefined>(undefined);\n readonly filename = input<string | undefined>(undefined);\n readonly files = input<readonly KxCodeBlockFile[]>([]);\n readonly hideCopy = input(false, { transform: booleanAttribute });\n readonly copyLabel = input('Copy code');\n readonly copiedLabel = input('Copied');\n\n protected readonly active = signal(0);\n protected readonly copied = signal(false);\n\n protected readonly tabs = computed<readonly KxCodeBlockFile[]>(() =>\n this.files().length ? this.files() : [{ name: this.filename() ?? this.language() ?? '', code: this.code() }],\n );\n protected readonly current = computed(() => this.tabs()[this.active()] ?? this.tabs()[0]!);\n protected readonly hasHeader = computed(() => this.tabs().length > 1 || !!this.tabs()[0]?.name);\n\n protected select(i: number): void {\n this.active.set(i);\n }\n\n /** Home/End and the arrows, mirrored for direction: in an RTL page ArrowRight moves toward the start. */\n protected onTabKeydown(event: KeyboardEvent, i: number): void {\n const n = this.tabs().length;\n const rtl = getComputedStyle(event.currentTarget as Element).direction === 'rtl';\n const forward = rtl ? 'ArrowLeft' : 'ArrowRight';\n const back = rtl ? 'ArrowRight' : 'ArrowLeft';\n let next = i;\n if (event.key === forward) next = (i + 1) % n;\n else if (event.key === back) next = (i - 1 + n) % n;\n else if (event.key === 'Home') next = 0;\n else if (event.key === 'End') next = n - 1;\n else return;\n event.preventDefault();\n this.active.set(next);\n const tabs = (event.currentTarget as Element).parentElement?.querySelectorAll<HTMLElement>('[role=\"tab\"]');\n tabs?.[next]?.focus();\n }\n\n private readonly host = inject(ElementRef<HTMLElement>);\n\n protected async copy(): Promise<void> {\n // Reached through the host element's own document rather than the `navigator` global: this package is\n // rendered on the server too, and a bare global makes the bundle unusable outside a browser. The\n // publication-readiness gate checks exactly this, and caught it here.\n const clipboard = (this.host.nativeElement as HTMLElement).ownerDocument?.defaultView?.navigator?.clipboard;\n if (!clipboard) return;\n try {\n await clipboard.writeText(this.current().code);\n this.copied.set(true);\n setTimeout(() => this.copied.set(false), 1500);\n } catch {\n // No clipboard permission: the code is still selectable in the <pre>, which is why that element is\n // focusable. Swallowing this is deliberate — there is nothing useful to tell the user.\n }\n }\n}\n\n/* ── description list ───────────────────────────────────────────────────── */\n\n/**\n * <dl kxDescriptionList>\n * <kx-description-list-item term=\"Status\">Active</kx-description-list-item>\n * </dl>\n *\n * A directive on a real `<dl>`, and each item is a component with an ATTRIBUTE selector on a `<div>`, so the\n * rendered tree is `<dl><div><dt>…</dt><dd>…</dd></div></dl>`. That distinction is the whole point: a `dl`'s\n * content model allows `dt`/`dd` directly or wrapped in a `div`, and nothing else. An earlier spelling used a\n * `<kx-description-list-item>` element as the wrapper, which is neither — the grouping was invalid and the\n * term/description association was left to chance. The term is an input rather than a slot because a `<dt>`\n * takes text, and two projection slots in one item would let a caller put the value in the term position.\n */\n@Directive({\n selector: 'dl[kxDescriptionList]',\n host: { class: 'kx-description-list' },\n})\nexport class KxDescriptionList {}\n\n@Component({\n selector: 'div[kxDescriptionListItem]',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <dt class=\"kx-description-list__term\">{{ term() }}</dt>\n <dd class=\"kx-description-list__value\"><ng-content /></dd>\n `,\n host: { '[class]': '\"kx-description-list__item kx-description-list__item--\" + layout()' },\n})\nexport class KxDescriptionListItem {\n readonly term = input.required<string>();\n readonly layout = input<KxDescriptionListLayout>('row');\n}\n\n/* ── fab ────────────────────────────────────────────────────────────────── */\n\n/**\n * <button kxFab aria-label=\"New message\"><svg …></svg></button>\n * <button kxFab extended>New message</button>\n *\n * A directive on a real `<button>`: the element already has the activation behaviour, the disabled semantics\n * and the keyboard contract, and a component wrapping one would have to re-expose all three.\n *\n * An icon-only FAB has no text, so it needs `aria-label` from the caller. This does not supply a default —\n * \"Action\" is not a useful accessible name, and a wrong one is harder to notice than a missing one. The\n * `extended` form has a visible label and needs nothing.\n */\n@Directive({\n selector: 'button[kxFab]',\n host: {\n '[class]':\n '\"kx-fab kx-fab--\" + variant() + \" kx-fab--\" + size() + (extended() ? \" kx-fab--extended\" : \"\")',\n },\n})\nexport class KxFab {\n readonly variant = input<KxFabVariant>('Primary');\n readonly size = input<KxFabSize>('default');\n readonly extended = input(false, { transform: booleanAttribute });\n}\n\n/* ── image ──────────────────────────────────────────────────────────────── */\n\nconst RATIOS: Record<KxImageRatio, number> = {\n '1:1': 1,\n '3:2': 3 / 2,\n '4:3': 4 / 3,\n '3:4': 3 / 4,\n '3:1': 3,\n '16:9': 16 / 9,\n};\n\n/**\n * <kx-image src=\"cover.jpg\" alt=\"Harbour at dusk\" ratio=\"16:9\" />\n * <kx-image src=\"broken.png\" alt=\"\" ><svg kxImageFallback …></svg></kx-image>\n *\n * Holds the aspect ratio before the image arrives so the page does not reflow, fades it in once decoded, and\n * swaps to a fallback slot on error.\n *\n * `alt` is required, not optional with an empty default. An empty alt is the correct answer for a decorative\n * image and a silent failure for every other one, so the caller states which it is — `alt=\"\"` is still one\n * character to type, and now it is a decision rather than an omission.\n */\n@Component({\n selector: 'kx-image',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n @if (status() === 'error') {\n <div class=\"kx-image__fallback\"><ng-content select=\"[kxImageFallback]\" /></div>\n } @else {\n <img\n class=\"kx-image__img\"\n [class.kx-image__img--loaded]=\"status() === 'loaded'\"\n [attr.src]=\"src()\"\n [attr.alt]=\"alt()\"\n [attr.loading]=\"loading()\"\n [attr.decoding]=\"'async'\"\n (load)=\"status.set('loaded')\"\n (error)=\"status.set('error')\"\n />\n }\n `,\n host: {\n '[class]': '\"kx-image\" + (rounded() ? \" kx-image--rounded\" : \"\")',\n // A custom property rather than `aspect-ratio` directly, matching `kx-aspect-ratio`: the ratio is an\n // input to the stylesheet and the rule that consumes it stays in CSS with the rest of the layout.\n '[style.--kx-image-ratio]': 'ratioValue()',\n },\n})\nexport class KxImage {\n readonly src = input.required<string>();\n readonly alt = input.required<string>();\n readonly ratio = input<KxImageRatio | number>('1:1');\n readonly rounded = input(true, { transform: booleanAttribute });\n /** Native lazy loading. Defaults to `lazy`; pass `eager` for an image above the fold. */\n readonly loading = input<'lazy' | 'eager'>('lazy');\n\n /**\n * Reset to `loading` whenever `src` changes. A plain signal kept the old verdict: once a source had\n * failed, the fallback branch stayed rendered and a later, valid URL was never even requested — and a\n * previously loaded image kept its loaded styling while its replacement was still arriving.\n */\n protected readonly status = linkedSignal<string, 'loading' | 'loaded' | 'error'>({\n source: this.src,\n computation: () => 'loading',\n });\n protected readonly ratioValue = computed(() => {\n const r = this.ratio();\n return typeof r === 'number' ? r : (RATIOS[r] ?? 1);\n });\n}\n\n/* ── inform ─────────────────────────────────────────────────────────────── */\n\n/**\n * <kx-inform variant=\"success\">Your changes were saved.</kx-inform>\n *\n * The contained counterpart to Banner: rounded, in flow, sized by its container. Same intents and the same\n * `role=\"status\"` reasoning — persistent, not urgent, so polite rather than assertive.\n */\n@Component({\n selector: 'kx-inform',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <ng-content select=\"[kxIcon]\" />\n <div class=\"kx-inform__body\">\n <p class=\"kx-inform__message\"><ng-content /></p>\n <ng-content select=\"[kxInformAction]\" />\n </div>\n @if (dismissible()) {\n <button type=\"button\" class=\"kx-inform__dismiss\" [attr.aria-label]=\"dismissLabel()\" (click)=\"dismiss.emit()\">\n <ng-content select=\"[kxDismissIcon]\">\n <svg class=\"kx-dismiss-glyph\" viewBox=\"0 0 14 14\" aria-hidden=\"true\" focusable=\"false\">\n <path d=\"M3 3l8 8M11 3l-8 8\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" />\n </svg>\n </ng-content>\n </button>\n }\n `,\n host: {\n role: 'status',\n '[class]': '\"kx-inform kx-inform--\" + variant()',\n },\n})\nexport class KxInform {\n readonly variant = input<KxInformVariant>('information');\n readonly dismissible = input(false, { transform: booleanAttribute });\n readonly dismissLabel = input('Dismiss');\n readonly dismiss = output<void>();\n}\n\n/* ── list ───────────────────────────────────────────────────────────────── */\n\n/**\n * <ul kxList>\n * <li kxListItem title=\"Billing\" description=\"Invoices and receipts\" />\n * </ul>\n *\n * A directive on a real `<ul>`, and items on real `<li>`s, so the list semantics are the platform's rather\n * than three ARIA roles standing in for them. A pressable row puts a `<button>` inside the `<li>` instead of\n * giving the `<li>` itself `role=\"button\"`: a list's children must be list items, and an element cannot be\n * both. That also means the keyboard contract is the button's — Enter and Space, for free and correct.\n */\n@Directive({\n selector: 'ul[kxList], ol[kxList]',\n host: { class: 'kx-list' },\n})\nexport class KxList {}\n\n@Component({\n selector: 'li[kxListItem]',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [NgTemplateOutlet],\n template: `\n @if (pressable()) {\n <button type=\"button\" class=\"kx-list__row kx-list__row--pressable\" [disabled]=\"disabled()\" (click)=\"select.emit()\">\n <ng-container [ngTemplateOutlet]=\"row\" />\n </button>\n } @else {\n <div class=\"kx-list__row\" [attr.aria-disabled]=\"disabled() ? 'true' : null\">\n <ng-container [ngTemplateOutlet]=\"row\" />\n </div>\n }\n\n <ng-template #row>\n <span class=\"kx-list__leading\"><ng-content select=\"[kxListLeading]\" /></span>\n <span class=\"kx-list__text\">\n <span class=\"kx-list__title\">{{ title() }}</span>\n @if (description()) {\n <span class=\"kx-list__description\">{{ description() }}</span>\n }\n </span>\n <span class=\"kx-list__trailing\"><ng-content select=\"[kxListTrailing]\" /></span>\n </ng-template>\n `,\n host: { '[class]': '\"kx-list__item\" + (disabled() ? \" kx-list__item--disabled\" : \"\")' },\n})\nexport class KxListItem {\n readonly title = input.required<string>();\n readonly description = input<string | undefined>(undefined);\n readonly disabled = input(false, { transform: booleanAttribute });\n /** Set to render the row as a button. Without it the row is static text and not focusable. */\n readonly pressable = input(false, { transform: booleanAttribute });\n readonly select = output<void>();\n}\n\n/* ── marquee ────────────────────────────────────────────────────────────── */\n\n/**\n * <kx-marquee [durationSeconds]=\"24\" pauseOnHover>\n * <ng-template kxMarqueeContent>\n * <span>Shipping to 48 countries</span>\n * </ng-template>\n * </kx-marquee>\n *\n * Scrolls its content on a loop. A seamless loop needs the content rendered twice, and the content is the\n * caller's — so it arrives as a `<ng-template>` and this component renders it twice itself. Asking the caller\n * to paste their own markup twice would make the duplicate their problem and let the two copies drift.\n *\n * The second copy is `aria-hidden`, so assistive technology reads the row once instead of stuttering.\n *\n * Under `prefers-reduced-motion: reduce` the animation is removed in CSS and the row becomes an ordinary\n * horizontally scrollable strip — the content stays reachable, which is the part that matters. Continuous\n * motion is what WCAG 2.2.2 is about, and the reader's own setting is the control, so this exposes no\n * \"pause\" affordance that would only work for people who can see it move.\n */\n@Directive({ selector: '[kxMarqueeContent]' })\nexport class KxMarqueeContent {\n constructor(readonly template: TemplateRef<unknown>) {}\n}\n\n@Component({\n selector: 'kx-marquee',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [NgTemplateOutlet],\n template: `\n <div class=\"kx-marquee__track\" [style.animation-duration.s]=\"durationSeconds()\">\n <div class=\"kx-marquee__group\">\n <ng-container [ngTemplateOutlet]=\"content()?.template ?? null\" />\n </div>\n <div class=\"kx-marquee__group\" aria-hidden=\"true\">\n <ng-container [ngTemplateOutlet]=\"content()?.template ?? null\" />\n </div>\n </div>\n `,\n host: {\n '[class]': '\"kx-marquee\" + (pauseOnHover() ? \" kx-marquee--pause-on-hover\" : \"\")',\n },\n})\nexport class KxMarquee {\n /** Seconds for one full loop. Slower is calmer; this is a readability decision, not a style one. */\n readonly durationSeconds = input(20);\n readonly pauseOnHover = input(false, { transform: booleanAttribute });\n protected readonly content = contentChild(KxMarqueeContent);\n}\n\n/* ── page header ────────────────────────────────────────────────────────── */\n\n/**\n * <kx-page-header title=\"Billing\" description=\"Plan, invoices and payment method\" [level]=\"1\">\n * <nav kxPageHeaderBreadcrumb>…</nav>\n * <button kxButton kxPageHeaderActions>Upgrade</button>\n * </kx-page-header>\n *\n * `level` exists for the same reason `kx-card-title` has one: a page header is usually the `<h1>`, but a\n * component that hard-codes a heading level produces a broken document outline the moment it is used twice or\n * nested. The level is carried by `role=\"heading\"` + `aria-level`, because `<ng-content>` projects once and a\n * template with one heading tag per branch silently renders every branch after the first empty — the same\n * trade-off `primitives.ts` documents, resolved the same way.\n */\n@Component({\n selector: 'kx-page-header',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"kx-page-header__breadcrumb\"><ng-content select=\"[kxPageHeaderBreadcrumb]\" /></div>\n <div class=\"kx-page-header__main\">\n <div class=\"kx-page-header__titles\">\n <span class=\"kx-page-header__title\" role=\"heading\" [attr.aria-level]=\"level()\">{{ title() }}</span>\n @if (description()) {\n <p class=\"kx-page-header__description\">{{ description() }}</p>\n }\n </div>\n <div class=\"kx-page-header__actions\"><ng-content select=\"[kxPageHeaderActions]\" /></div>\n </div>\n <ng-content />\n `,\n host: { class: 'kx-page-header' },\n})\nexport class KxPageHeader {\n readonly title = input.required<string>();\n readonly description = input<string | undefined>(undefined);\n readonly level = input(1);\n}\n\n/* ── timeline ───────────────────────────────────────────────────────────── */\n\n/**\n * <ol kxTimeline>\n * <li kxTimelineItem title=\"Shipped\" description=\"14 March\" status=\"success\" />\n * </ol>\n *\n * An ordered list, because a timeline is ordered and the platform already says so — losing that to a stack of\n * `<div>`s would mean a screen reader no longer announces \"3 of 5\".\n *\n * `status` is carried by a class on a decorative marker plus text, never by colour alone: the item's state is\n * in `title`/`description`, which is what WCAG 1.4.1 asks for. The connecting line is drawn with logical\n * insets so it stays on the start edge in an RTL page.\n */\n@Directive({\n selector: 'ol[kxTimeline]',\n host: { class: 'kx-timeline' },\n})\nexport class KxTimeline {}\n\n@Component({\n selector: 'li[kxTimelineItem]',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <span class=\"kx-timeline__marker\" [class]=\"'kx-timeline__marker--' + status()\" aria-hidden=\"true\">\n <ng-content select=\"[kxTimelineIcon]\" />\n </span>\n <span class=\"kx-timeline__content\">\n <span class=\"kx-timeline__title\">{{ title() }}</span>\n @if (description()) {\n <span class=\"kx-timeline__description\">{{ description() }}</span>\n }\n <ng-content />\n </span>\n `,\n host: { class: 'kx-timeline__item' },\n})\nexport class KxTimelineItem {\n readonly title = input.required<string>();\n readonly description = input<string | undefined>(undefined);\n readonly status = input<KxTimelineStatus>('default');\n}\n\n","import {\n ChangeDetectionStrategy,\n Component,\n Directive,\n ElementRef,\n booleanAttribute,\n computed,\n contentChildren,\n forwardRef,\n inject,\n input,\n model,\n numberAttribute,\n viewChild,\n} from '@angular/core';\n\n/**\n * Disclosure: accordion and collapsible — one gesture, two shapes.\n *\n * ── The contract (written before the code) ─────────────────────────────────\n *\n * Trigger\n * - a real `<button type=\"button\">`, so Enter and Space activate it with no key handling of ours, and a\n * disabled trigger is a disabled button: out of the tab order and inert to the pointer\n * - `aria-expanded` says whether its content is shown; `aria-controls` names that content's `id`, which is\n * generated once per instance and always present in the DOM, open or closed, so the reference never points\n * at nothing\n * - activating it leaves focus on it — disclosure reveals content, it does not move the reader into it\n *\n * Content\n * - stays mounted while closed, under `visibility: hidden`: out of the accessibility tree and the tab order,\n * and still the element `aria-controls` names\n * - an accordion panel is a `region` labelled by its trigger (React/Radix do the same); a collapsible's\n * content takes no role, because it is usually a fragment of a larger surface, not a landmark-sized section\n *\n * Accordion, additionally (WAI-ARIA APG, \"Accordion\")\n * - each trigger sits in a heading at a level the page chooses (`headingLevel`, default 3), carried by\n * `role=\"heading\"` + `aria-level` for the same reason `kx-card-title` does: `<ng-content>` projects once\n * - `type=\"single\"` (default) or `type=\"multiple\"`, the two modes React's Accordion has\n * - `collapsible` lets the open item of a single accordion close again. Without it the open trigger reports\n * `aria-disabled=\"true\"`, as the APG asks of a panel that cannot be collapsed — it stays focusable, because\n * a reader must still be able to reach and read it\n * - every trigger is its own Tab stop; ArrowDown/ArrowUp move between triggers (wrapping) and Home/End jump to\n * the ends, skipping disabled ones. Arrow keys move focus only — they never open anything\n * - vertical only. The arrows are therefore the same in RTL: up and down do not mirror. A horizontal accordion\n * (React exposes `orientation`) is not offered: no product in this repository uses one, and it would bring\n * direction-dependent arrows with no consumer to prove them on\n *\n * ── Motion ─────────────────────────────────────────────────────────────────\n *\n * The content's block size animates from 0 to its natural size and back over `--duration-fast`, decelerating\n * on the way in (`--easing-enter`) and accelerating on the way out (`--easing-exit`) — the tokens React's\n * accordion and collapsible keyframes use. The mechanism is idiomatic to CSS rather than ported from Radix:\n * the host is a one-row grid whose track transitions from `0fr` to `1fr`. That needs no measured height\n * variable and no JavaScript, so it cannot fall out of step with content that changes while open.\n *\n * `visibility` rides along as a discrete transition: it turns visible at the start of an expansion and hidden\n * at the END of a collapse, so the content is seen shrinking rather than vanishing, and is unreachable once it\n * is gone.\n *\n * Under `prefers-reduced-motion: reduce` both transitions are `none` (styles.css). Angular renders the end state\n * directly — there is no animation-end event the component waits for, so nothing needs React's 0.01ms floor to\n * keep a lifecycle moving. The final state is identical: open is full height and visible, closed is zero and\n * hidden. `scripts/angular-browser.mjs` proves both, in both directions, in Chromium.\n *\n * The body clips with `overflow: clip` plus `overflow-clip-margin`, not `overflow: hidden`: the height has to\n * clip while it animates, but a focus ring on a link that sits flush with the content's edge must not be cut.\n */\n\nlet nextId = 0;\n/** One id stem per disclosure, so trigger and content can name each other without the caller inventing ids. */\nexport const disclosureId = (kind: string): string => `kx-${kind}-${nextId++}`;\n\n/* ── accordion ──────────────────────────────────────────────────────────── */\n\n/**\n * <kx-accordion type=\"single\" collapsible [(value)]=\"open\">\n * <kx-accordion-item value=\"shipping\">\n * <kx-accordion-trigger>Shipping</kx-accordion-trigger>\n * <kx-accordion-content>Orders leave the warehouse within two working days.</kx-accordion-content>\n * </kx-accordion-item>\n * </kx-accordion>\n *\n * `value` is the list of open items' values, in both modes — in `single` it holds at most one. One shape for\n * both modes keeps the two-way binding typed without a union the template would have to narrow.\n */\n@Component({\n selector: 'kx-accordion',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: '<ng-content />',\n host: {\n class: 'kx-accordion',\n '[attr.data-type]': 'type()',\n },\n})\nexport class KxAccordion {\n readonly type = input<'single' | 'multiple'>('single');\n /** In `single` mode, whether the open item may be closed again, leaving none open. */\n readonly collapsible = input(false, { transform: booleanAttribute });\n readonly disabled = input(false, { transform: booleanAttribute });\n /** The heading level each trigger sits in. */\n readonly headingLevel = input(3, { transform: numberAttribute });\n /** Two-way: the values of the open items. */\n readonly value = model<readonly string[]>([]);\n\n private readonly triggers = contentChildren(forwardRef(() => KxAccordionTrigger), { descendants: true });\n\n isOpen(item: string): boolean {\n return this.value().includes(item);\n }\n\n /** Whether activating this open item would do nothing — a single accordion that is not collapsible. */\n locked(item: string): boolean {\n return this.type() === 'single' && !this.collapsible() && this.isOpen(item);\n }\n\n toggle(item: string): void {\n if (this.locked(item)) return;\n const open = this.isOpen(item);\n if (this.type() === 'multiple') this.value.set(open ? this.value().filter((v) => v !== item) : [...this.value(), item]);\n else this.value.set(open ? [] : [item]);\n }\n\n /** APG accordion keys, on the triggers: focus moves, nothing opens. */\n onKeydown(event: KeyboardEvent, from: KxAccordionTrigger): void {\n // the query reaches into nested accordions too; only this accordion's own triggers are its siblings\n const enabled = this.triggers().filter((t) => t.item.accordion === this && !t.item.isDisabled());\n const at = enabled.indexOf(from);\n if (at === -1 || enabled.length === 0) return;\n let next: number | null = null;\n if (event.key === 'ArrowDown') next = (at + 1) % enabled.length;\n else if (event.key === 'ArrowUp') next = (at - 1 + enabled.length) % enabled.length;\n else if (event.key === 'Home') next = 0;\n else if (event.key === 'End') next = enabled.length - 1;\n if (next === null) return;\n event.preventDefault();\n enabled[next]!.focus();\n }\n}\n\n@Component({\n selector: 'kx-accordion-item',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: '<ng-content />',\n host: {\n class: 'kx-accordion__item',\n '[attr.data-state]': 'open() ? \"open\" : \"closed\"',\n '[attr.data-disabled]': 'isDisabled() ? \"\" : null',\n },\n})\nexport class KxAccordionItem {\n readonly accordion = inject(KxAccordion);\n readonly value = input.required<string>();\n readonly disabled = input(false, { transform: booleanAttribute });\n\n private readonly id = disclosureId('accordion');\n readonly triggerId = `${this.id}-trigger`;\n readonly contentId = `${this.id}-content`;\n\n readonly open = computed(() => this.accordion.isOpen(this.value()));\n readonly isDisabled = computed(() => this.disabled() || this.accordion.disabled());\n}\n\n/**\n * The heading and its button. The chevron is built in (as the dismiss glyph is in banner and inform): a\n * disclosure control whose only state cue is the caller remembering to add an icon is one nobody can see.\n * It points down and turns to point up when open. It does not mirror in RTL — down is down in both directions.\n */\n@Component({\n selector: 'kx-accordion-trigger',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <button\n #button\n type=\"button\"\n class=\"kx-accordion__trigger\"\n [id]=\"item.triggerId\"\n [attr.aria-expanded]=\"item.open()\"\n [attr.aria-controls]=\"item.contentId\"\n [attr.aria-disabled]=\"item.accordion.locked(item.value()) ? 'true' : null\"\n [disabled]=\"item.isDisabled()\"\n (click)=\"item.accordion.toggle(item.value())\"\n (keydown)=\"item.accordion.onKeydown($event, this)\"\n >\n <span class=\"kx-accordion__label\"><ng-content /></span>\n <svg class=\"kx-accordion__chevron\" viewBox=\"0 0 16 16\" aria-hidden=\"true\" focusable=\"false\">\n <path d=\"M4 6l4 4 4-4\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </button>\n `,\n host: {\n class: 'kx-accordion__heading',\n role: 'heading',\n '[attr.aria-level]': 'item.accordion.headingLevel()',\n },\n})\nexport class KxAccordionTrigger {\n readonly item = inject(KxAccordionItem);\n private readonly button = viewChild.required<ElementRef<HTMLButtonElement>>('button');\n\n focus(): void {\n this.button().nativeElement.focus();\n }\n}\n\n@Component({\n selector: 'kx-accordion-content',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: '<div class=\"kx-disclosure__body\"><div class=\"kx-accordion__inner\"><ng-content /></div></div>',\n host: {\n class: 'kx-disclosure kx-accordion__content',\n role: 'region',\n '[id]': 'item.contentId',\n '[attr.aria-labelledby]': 'item.triggerId',\n '[attr.data-state]': 'item.open() ? \"open\" : \"closed\"',\n },\n})\nexport class KxAccordionContent {\n readonly item = inject(KxAccordionItem);\n}\n\n/* ── collapsible ────────────────────────────────────────────────────────── */\n\n/**\n * <kx-collapsible [(open)]=\"showAdvanced\">\n * <button kxButton kxCollapsibleTrigger variant=\"Ghost\">Advanced settings</button>\n * <kx-collapsible-content>…</kx-collapsible-content>\n * </kx-collapsible>\n *\n * One trigger, one region. The trigger is a directive on the caller's own `<button>`, so it can be any button\n * the design calls for (a ghost `kxButton`, a link-styled one) and keeps every native behaviour.\n */\n@Component({\n selector: 'kx-collapsible',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: '<ng-content />',\n host: {\n class: 'kx-collapsible',\n '[attr.data-state]': 'open() ? \"open\" : \"closed\"',\n },\n})\nexport class KxCollapsible {\n /** Two-way: whether the content is shown. */\n readonly open = model(false);\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly contentId = `${disclosureId('collapsible')}-content`;\n\n toggle(): void {\n if (!this.disabled()) this.open.set(!this.open());\n }\n}\n\n@Directive({\n selector: 'button[kxCollapsibleTrigger]',\n host: {\n type: 'button',\n '[attr.aria-expanded]': 'collapsible.open()',\n '[attr.aria-controls]': 'collapsible.contentId',\n '[attr.data-state]': 'collapsible.open() ? \"open\" : \"closed\"',\n '[disabled]': 'collapsible.disabled()',\n '(click)': 'collapsible.toggle()',\n },\n})\nexport class KxCollapsibleTrigger {\n readonly collapsible = inject(KxCollapsible);\n}\n\n@Component({\n selector: 'kx-collapsible-content',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: '<div class=\"kx-disclosure__body\"><ng-content /></div>',\n host: {\n class: 'kx-disclosure kx-collapsible__content',\n '[id]': 'collapsible.contentId',\n '[attr.data-state]': 'collapsible.open() ? \"open\" : \"closed\"',\n },\n})\nexport class KxCollapsibleContent {\n readonly collapsible = inject(KxCollapsible);\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n Directive,\n ElementRef,\n booleanAttribute,\n inject,\n input,\n model,\n numberAttribute,\n output,\n viewChild,\n} from '@angular/core';\nimport { disclosureId } from './disclosure';\nimport type { KxOrientation } from './types';\n\n/**\n * Navigation: breadcrumb, pagination, table of contents, tab bar, stepper, navigation bar, app bar, footer.\n *\n * ── The shared contract (written before the code) ──────────────────────────\n *\n * Links stay links. A destination is an `<a href>` the caller writes, so middle-click, \"copy link\", the\n * router's own directives and the browser's link semantics all keep working. Where a destination can also be\n * an in-page action (a client-side pager, a tab bar that swaps views), the same directive also accepts a\n * `<button>`. Nothing here turns navigation into a generic button to make it easier to test.\n *\n * \"You are here\" is `aria-current`, set by one boolean input (`current` / `active`):\n * page breadcrumb's last crumb, pagination's page, an app-bar or tab-bar destination\n * location a table-of-contents entry (a position within the page, not a page)\n * step the stepper's current step\n * It is never conveyed by colour alone: the current item also carries a shape cue — an indicator bar, a\n * raised outlined surface or a weight change — measured by `check:navigation-visual`.\n *\n * Keyboard: every destination is one Tab stop and Enter follows it, which is what a list of links is. None of\n * these is a composite widget, so none takes arrow keys — a roving tabindex on a breadcrumb or a footer would\n * hide links from Tab and teach the reader a pattern nothing announces. (The arrow-key pattern is Tabs'.)\n *\n * Direction. Layout is logical throughout (inline-start/end, padding-inline), so every row runs from the\n * inline start of the direction its own element resolves to. Glyphs that point along the reading direction —\n * the breadcrumb separator, Previous / Next, Back — are the Unicode angle quotation marks ‹ ›, which the bidi\n * algorithm mirrors in a right-to-left run. That makes the glyph follow the EFFECTIVE direction of the element\n * it is in, including an LTR region inside an RTL page, with no rule keyed on a `[dir]` ancestor (wrong when\n * nested) and no `:dir()` (which some CSS pipelines lower to a guess — TOKENS.md, \"Switch direction\"). The\n * pixels are checked: `check:angular-browser`'s RTL pass reads which way each glyph actually points.\n */\n\n/* ── breadcrumb ─────────────────────────────────────────────────────────── */\n\n/**\n * <nav kxBreadcrumb>\n * <ol kxBreadcrumbList>\n * <li kxBreadcrumbItem><a kxBreadcrumbLink href=\"/\">Home</a></li>\n * <li kxBreadcrumbSeparator></li>\n * <li kxBreadcrumbItem><span kxBreadcrumbPage>Settings</span></li>\n * </ol>\n * </nav>\n *\n * The landmark is named \"Breadcrumb\" unless the caller names it (`label`). The current page is plain text with\n * `aria-current=\"page\"`, not a link to itself.\n */\n@Directive({\n selector: 'nav[kxBreadcrumb]',\n host: { class: 'kx-breadcrumb', '[attr.aria-label]': 'label()' },\n})\nexport class KxBreadcrumb {\n readonly label = input('Breadcrumb');\n}\n\n@Directive({ selector: 'ol[kxBreadcrumbList]', host: { class: 'kx-breadcrumb__list' } })\nexport class KxBreadcrumbList {}\n\n@Directive({ selector: 'li[kxBreadcrumbItem]', host: { class: 'kx-breadcrumb__item' } })\nexport class KxBreadcrumbItem {}\n\n@Directive({ selector: 'a[kxBreadcrumbLink]', host: { class: 'kx-breadcrumb__link' } })\nexport class KxBreadcrumbLink {}\n\n@Directive({\n selector: 'span[kxBreadcrumbPage]',\n host: { class: 'kx-breadcrumb__page', 'aria-current': 'page' },\n})\nexport class KxBreadcrumbPage {}\n\n/** Hidden from assistive technology: the list already says these are steps of a path. */\n@Component({\n selector: 'li[kxBreadcrumbSeparator]',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: '<ng-content>›</ng-content>',\n host: { class: 'kx-breadcrumb__separator', role: 'presentation', 'aria-hidden': 'true' },\n})\nexport class KxBreadcrumbSeparator {}\n\n/* ── shared: a destination that may be a link or a button ──────────────── */\n\n/**\n * A disabled `<button>` is `disabled`. A link has no disabled state, so a disabled link reports\n * `aria-disabled=\"true\"`, leaves the tab order, and swallows its click — it stays in the list, so the reader\n * still learns there is no previous page, rather than finding a gap.\n */\n@Directive()\nabstract class KxDestination {\n private readonly el = inject<ElementRef<HTMLAnchorElement | HTMLButtonElement>>(ElementRef);\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly isButton = this.el.nativeElement.tagName === 'BUTTON';\n\n onClick(event: Event): void {\n if (this.disabled() && !this.isButton) {\n event.preventDefault();\n event.stopImmediatePropagation();\n }\n }\n}\nconst DESTINATION_HOST = {\n '[attr.type]': 'isButton ? \"button\" : null',\n '[attr.disabled]': 'isButton && disabled() ? \"\" : null',\n '[attr.aria-disabled]': '!isButton && disabled() ? \"true\" : null',\n '[attr.tabindex]': '!isButton && disabled() ? -1 : null',\n '(click)': 'onClick($event)',\n};\n\n/* ── pagination ─────────────────────────────────────────────────────────── */\n\n/**\n * <nav kxPagination>\n * <ul kxPaginationContent>\n * <li kxPaginationItem><a kxPaginationPrevious href=\"?page=1\">Previous</a></li>\n * <li kxPaginationItem><a kxPaginationLink href=\"?page=1\">1</a></li>\n * <li kxPaginationItem><a kxPaginationLink href=\"?page=2\" current>2</a></li>\n * <li kxPaginationItem><kx-pagination-ellipsis /></li>\n * <li kxPaginationItem><a kxPaginationNext href=\"?page=3\">Next</a></li>\n * </ul>\n * </nav>\n *\n * The caller owns which page is current — the same division React's Pagination makes — because only the\n * application knows its routes. `<button>` works in place of every `<a>` for a pager that changes state\n * rather than the URL.\n */\n@Directive({\n selector: 'nav[kxPagination]',\n host: { class: 'kx-pagination', '[attr.aria-label]': 'label()' },\n})\nexport class KxPagination {\n readonly label = input('Pagination');\n}\n\n@Directive({ selector: 'ul[kxPaginationContent]', host: { class: 'kx-pagination__content' } })\nexport class KxPaginationContent {}\n\n@Directive({ selector: 'li[kxPaginationItem]', host: { class: 'kx-pagination__item' } })\nexport class KxPaginationItem {}\n\n@Directive({\n selector: 'a[kxPaginationLink], button[kxPaginationLink]',\n host: {\n ...DESTINATION_HOST,\n class: 'kx-pagination__link',\n '[attr.aria-current]': 'current() ? \"page\" : null',\n },\n})\nexport class KxPaginationLink extends KxDestination {\n readonly current = input(false, { transform: booleanAttribute });\n}\n\n/**\n * Previous and Next: the visible word is the accessible name (default \"Previous\" / \"Next\", replaceable by\n * projecting text, because this package ships no translations). The glyph is decorative and mirrors with the\n * reading direction.\n */\n@Component({\n selector: 'a[kxPaginationPrevious], button[kxPaginationPrevious]',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: '<span class=\"kx-pagination__glyph\" aria-hidden=\"true\">‹</span><span><ng-content>Previous</ng-content></span>',\n host: { ...DESTINATION_HOST, class: 'kx-pagination__link kx-pagination__step' },\n})\nexport class KxPaginationPrevious extends KxDestination {}\n\n@Component({\n selector: 'a[kxPaginationNext], button[kxPaginationNext]',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: '<span><ng-content>Next</ng-content></span><span class=\"kx-pagination__glyph\" aria-hidden=\"true\">›</span>',\n host: { ...DESTINATION_HOST, class: 'kx-pagination__link kx-pagination__step' },\n})\nexport class KxPaginationNext extends KxDestination {}\n\n/** A gap in the page range. Decorative: the numbers either side already say pages were skipped. */\n@Component({\n selector: 'kx-pagination-ellipsis',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: '…',\n host: { class: 'kx-pagination__ellipsis', 'aria-hidden': 'true' },\n})\nexport class KxPaginationEllipsis {}\n\n/* ── table of contents ──────────────────────────────────────────────────── */\n\nexport interface KxTocItem {\n /** The id of the heading this entry links to (`href=\"#id\"`). */\n id: string;\n label: string;\n /** Nesting depth, from 1. Each level indents from the inline start. */\n level?: number;\n}\n\n/**\n * <nav kxTableOfContents [items]=\"sections\" [(active)]=\"section\"></nav>\n *\n * In-page anchors, so they work with no JavaScript and with the browser's own scrolling. The entry for the\n * section being read carries `aria-current=\"location\"`; `active` is two-way so a click marks its entry at once,\n * and an application with a scroll-spy writes the same signal from its observer.\n */\n@Component({\n selector: 'nav[kxTableOfContents]',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <ul class=\"kx-toc__list\">\n @for (item of items(); track item.id) {\n <li class=\"kx-toc__item\">\n <a\n class=\"kx-toc__link\"\n [href]=\"'#' + item.id\"\n [attr.aria-current]=\"item.id === active() ? 'location' : null\"\n [style.--kx-toc-level]=\"(item.level ?? 1) - 1\"\n (click)=\"active.set(item.id)\"\n >{{ item.label }}</a\n >\n </li>\n }\n </ul>\n `,\n host: { class: 'kx-toc', '[attr.aria-label]': 'label()' },\n})\nexport class KxTableOfContents {\n readonly items = input.required<readonly KxTocItem[]>();\n readonly active = model<string | null>(null);\n readonly label = input('On this page');\n}\n\n/* ── tab bar ────────────────────────────────────────────────────────────── */\n\n/**\n * <nav kxTabBar aria-label=\"Primary\">\n * <a kxTabBarItem href=\"/home\" active><svg kxTabBarIcon …></svg>Home</a>\n * <a kxTabBarItem href=\"/inbox\" badge=\"3\"><svg kxTabBarIcon …></svg>Inbox</a>\n * </nav>\n *\n * A phone's bottom navigation: a row of destinations, each an icon over its label. The label is always\n * visible and is the accessible name; the icon is projected and decorative. The current destination is\n * `aria-current=\"page\"`, drawn with a full-strength label, an `--action` icon AND a pill behind it, so it does\n * not depend on hue (React's TabBar colours the label only).\n *\n * Not a `tablist`: these are destinations, not panels of one view, so they are links in a navigation landmark\n * and each is its own Tab stop.\n */\n@Directive({ selector: 'nav[kxTabBar]', host: { class: 'kx-tab-bar' } })\nexport class KxTabBar {}\n\n@Component({\n selector: 'a[kxTabBarItem], button[kxTabBarItem]',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <span class=\"kx-tab-bar__icon\">\n <ng-content select=\"[kxTabBarIcon]\" />\n @if (badge()) {\n <span class=\"kx-tab-bar__badge\" aria-hidden=\"true\">{{ badge() }}</span>\n }\n </span>\n <span class=\"kx-tab-bar__label\"\n ><ng-content />@if (badge()) {<span class=\"kx-sr-only\"> ({{ badge() }})</span>}</span\n >\n `,\n host: {\n ...DESTINATION_HOST,\n class: 'kx-tab-bar__item',\n '[attr.aria-current]': 'active() ? \"page\" : null',\n },\n})\nexport class KxTabBarItem extends KxDestination {\n readonly active = input(false, { transform: booleanAttribute });\n /**\n * A short count shown on the icon. The painted badge is hidden from assistive technology and the same text\n * follows the label, so the name reads \"Inbox (3)\" — label first — rather than \"3Inbox\", which is what a\n * badge drawn before the label contributes. The space sits inside the hidden text, so the name is the same\n * whether or not the caller's label carries whitespace of its own.\n */\n readonly badge = input<string | number | null>(null);\n}\n\n/* ── stepper ────────────────────────────────────────────────────────────── */\n\nexport interface KxStep {\n label: string;\n description?: string;\n}\n\n/**\n * <ol kxStepper [steps]=\"steps\" [current]=\"1\"></ol>\n *\n * Progress through a fixed sequence: an ordered list, so position and count are announced by the list itself.\n * Each step is complete, current or upcoming, derived from `current` (zero-based) against its index. Current is\n * `aria-current=\"step\"`. Complete steps also carry visually hidden text (`completedLabel`) — the check mark\n * that replaces their number is decorative, and without the text a screen reader would hear the label and\n * nothing else. Display only: a step is not a control (React's Stepper is not either).\n */\n@Component({\n selector: 'ol[kxStepper]',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n @for (step of steps(); track $index) {\n <li class=\"kx-stepper__step\" [attr.data-status]=\"status($index)\" [attr.aria-current]=\"$index === current() ? 'step' : null\">\n <span class=\"kx-stepper__track\" aria-hidden=\"true\">\n <span class=\"kx-stepper__marker\">\n @if (status($index) === 'complete') {\n <svg viewBox=\"0 0 16 16\" focusable=\"false\"><path d=\"M3.5 8.5l3 3 6-7\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" /></svg>\n } @else {\n {{ $index + 1 }}\n }\n </span>\n @if (!$last) {\n <span class=\"kx-stepper__connector\"></span>\n }\n </span>\n <span class=\"kx-stepper__text\">\n <span class=\"kx-stepper__label\">{{ step.label }}</span>\n @if (status($index) === 'complete') {\n <span class=\"kx-sr-only\">, {{ completedLabel() }}</span>\n }\n @if (step.description) {\n <span class=\"kx-stepper__description\">{{ step.description }}</span>\n }\n </span>\n </li>\n }\n `,\n host: {\n '[class]': '\"kx-stepper kx-stepper--\" + orientation()',\n '[attr.data-orientation]': 'orientation()',\n },\n})\nexport class KxStepper {\n readonly steps = input.required<readonly KxStep[]>();\n /** Zero-based index of the step in progress. */\n readonly current = input(0, { transform: numberAttribute });\n readonly orientation = input<KxOrientation>('horizontal');\n readonly completedLabel = input('completed');\n\n status(index: number): 'complete' | 'current' | 'upcoming' {\n const current = this.current();\n return index < current ? 'complete' : index === current ? 'current' : 'upcoming';\n }\n}\n\n/* ── navigation bar ─────────────────────────────────────────────────────── */\n\n/**\n * <header kxNavigationBar title=\"Inbox\" infoText=\"3 unread\" backButton (back)=\"location.back()\">\n * <button kxButton kxNavigationBarActions variant=\"Ghost\">Edit</button>\n * </header>\n *\n * A phone's top bar for one screen: an optional Back control, the screen's title (with optional info text) and\n * trailing actions. The title wraps rather than truncating: at 200% text a cut-off title is a title nobody can\n * read. `level` makes the title a heading when the bar is what names the screen.\n *\n * Back is a named button (`backLabel`, default \"Back\") whose glyph points toward the inline start.\n */\n@Component({\n selector: 'header[kxNavigationBar], div[kxNavigationBar]',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"kx-navigation-bar__leading\">\n <ng-content select=\"[kxNavigationBarLeading]\">\n @if (backButton()) {\n <button type=\"button\" class=\"kx-navigation-bar__back\" [attr.aria-label]=\"backLabel()\" (click)=\"back.emit()\">\n <span class=\"kx-navigation-bar__glyph\" aria-hidden=\"true\">‹</span>\n </button>\n }\n </ng-content>\n </div>\n <div class=\"kx-navigation-bar__titles\">\n <span class=\"kx-navigation-bar__title\" [attr.role]=\"level() ? 'heading' : null\" [attr.aria-level]=\"level()\">{{ title() }}</span>\n @if (infoText()) {\n <span class=\"kx-navigation-bar__info\">{{ infoText() }}</span>\n }\n </div>\n <div class=\"kx-navigation-bar__actions\"><ng-content select=\"[kxNavigationBarActions]\" /></div>\n `,\n host: { class: 'kx-navigation-bar' },\n})\nexport class KxNavigationBar {\n readonly title = input.required<string>();\n readonly infoText = input<string | null>(null);\n readonly backButton = input(false, { transform: booleanAttribute });\n readonly backLabel = input('Back');\n /** A heading level for the title, or none (the default) when the page names itself elsewhere. */\n readonly level = input<number | null>(null);\n readonly back = output<void>();\n}\n\n/* ── app bar ────────────────────────────────────────────────────────────── */\n\n/**\n * <header kxAppBar>\n * <a kxAppBarBrand href=\"/\">Acme</a>\n * <nav kxAppBarNav aria-label=\"Primary\">\n * <a kxAppBarLink href=\"/\" active>Overview</a>\n * <a kxAppBarLink href=\"/reports\">Reports</a>\n * </nav>\n * <div kxAppBarActions><button kxButton size=\"sm\">New</button></div>\n * </header>\n *\n * A web application's top bar. From 48rem up the navigation is a row between the brand and the actions. Below\n * it, the same `<nav>` — one element, not a copy — becomes a disclosure under the bar, opened by a Menu button\n * (`aria-expanded`, `aria-controls`). In DOM order the button comes straight before the panel it opens, so Tab\n * goes from the button into the links. The panel animates like accordion content (disclosure.ts), Escape\n * closes it and returns focus to the button, and following a link closes it.\n */\n@Component({\n selector: 'header[kxAppBar]',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <ng-content select=\"[kxAppBarBrand]\" />\n <button\n #toggle\n type=\"button\"\n class=\"kx-app-bar__toggle\"\n [attr.aria-expanded]=\"open()\"\n [attr.aria-controls]=\"navId\"\n [attr.aria-label]=\"menuLabel()\"\n (click)=\"open.set(!open())\"\n >\n <svg viewBox=\"0 0 16 16\" aria-hidden=\"true\" focusable=\"false\">\n @if (open()) {\n <path d=\"M4 4l8 8M12 4l-8 8\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" />\n } @else {\n <path d=\"M2.5 4.5h11M2.5 8h11M2.5 11.5h11\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" />\n }\n </svg>\n </button>\n <ng-content select=\"[kxAppBarNav]\" />\n <ng-content select=\"[kxAppBarActions]\" />\n <ng-content />\n `,\n host: {\n class: 'kx-app-bar',\n '[class.kx-app-bar--sticky]': 'sticky()',\n '[attr.data-state]': 'open() ? \"open\" : \"closed\"',\n '(keydown.escape)': 'close(true)',\n },\n})\nexport class KxAppBar {\n /** Two-way: whether the narrow-screen menu is open. Ignored from 48rem up, where the links are always shown. */\n readonly open = model(false);\n readonly sticky = input(true, { transform: booleanAttribute });\n /** The menu button's name. Its open/closed state is `aria-expanded`, so the name does not change with it. */\n readonly menuLabel = input('Menu');\n readonly navId = `${disclosureId('app-bar')}-nav`;\n private readonly toggle = viewChild.required<ElementRef<HTMLButtonElement>>('toggle');\n\n close(returnFocus = false): void {\n if (!this.open()) return;\n this.open.set(false);\n if (returnFocus) this.toggle().nativeElement.focus();\n }\n}\n\n@Directive({ selector: '[kxAppBarBrand]', host: { class: 'kx-app-bar__brand' } })\nexport class KxAppBarBrand {}\n\n@Component({\n selector: 'nav[kxAppBarNav]',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: '<div class=\"kx-disclosure__body\"><div class=\"kx-app-bar__links\"><ng-content /></div></div>',\n host: {\n class: 'kx-disclosure kx-app-bar__nav',\n '[id]': 'bar.navId',\n '[attr.data-state]': 'bar.open() ? \"open\" : \"closed\"',\n '(click)': 'onClick($event)',\n },\n})\nexport class KxAppBarNav {\n readonly bar = inject(KxAppBar);\n /** Following a link closes the narrow menu; the page it leads to should not open under a menu. */\n onClick(event: Event): void {\n if ((event.target as Element | null)?.closest('a[href], button')) this.bar.close();\n }\n}\n\n@Directive({\n selector: 'a[kxAppBarLink]',\n host: {\n class: 'kx-app-bar__link',\n '[attr.aria-current]': 'active() ? \"page\" : null',\n },\n})\nexport class KxAppBarLink {\n readonly active = input(false, { transform: booleanAttribute });\n}\n\n@Directive({ selector: '[kxAppBarActions]', host: { class: 'kx-app-bar__actions' } })\nexport class KxAppBarActions {}\n\n/* ── footer ─────────────────────────────────────────────────────────────── */\n\n/**\n * <footer kxFooter>\n * <div kxFooterColumns>\n * <kx-footer-column title=\"Product\">\n * <a kxFooterLink href=\"/pricing\">Pricing</a>\n * </kx-footer-column>\n * </div>\n * <div kxFooterBottom>© 2026 Acme</div>\n * </footer>\n *\n * The caller's own `<footer>`, so the `contentinfo` landmark is the browser's. Each column is a `group` named by\n * its title, so a screen reader announces \"Product, group\" on entry instead of a run of unrelated links.\n */\n@Directive({ selector: 'footer[kxFooter]', host: { class: 'kx-footer' } })\nexport class KxFooter {}\n\n@Directive({ selector: '[kxFooterColumns]', host: { class: 'kx-footer__columns' } })\nexport class KxFooterColumns {}\n\n@Component({\n selector: 'kx-footer-column',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <span class=\"kx-footer__title\" [id]=\"titleId\">{{ title() }}</span>\n <div class=\"kx-footer__links\"><ng-content /></div>\n `,\n host: { class: 'kx-footer__column', role: 'group', '[attr.aria-labelledby]': 'titleId' },\n})\nexport class KxFooterColumn {\n readonly title = input.required<string>();\n readonly titleId = `${disclosureId('footer')}-title`;\n}\n\n@Directive({ selector: 'a[kxFooterLink]', host: { class: 'kx-footer__link' } })\nexport class KxFooterLink {}\n\n@Directive({ selector: '[kxFooterBottom]', host: { class: 'kx-footer__bottom' } })\nexport class KxFooterBottom {}\n","import { DOCUMENT, Injectable, inject } from '@angular/core';\n\n/**\n * The overlay layer: one small set of primitives every floating or modal surface in this package stands on.\n * Nothing in this file is exported from `public-api.ts` — it is infrastructure the dialog family\n * (dialog.ts) and the floating family (floating.ts) share, and that Wave C2's menus and listboxes will\n * consume. Its contract is documented in TOKENS.md (\"Overlays\") and ANGULAR-GRADUATION.md.\n *\n * ── Rendering: the browser's top layer, not a portal ───────────────────────\n *\n * An overlay has to escape every clipping and stacking context its trigger lives in: an `overflow: hidden`\n * card, a transformed app shell, a sticky header with its own z-index. The usual answer is a portal that\n * moves the surface's DOM to the end of `<body>`. That costs Angular a great deal: the content leaves the\n * element injector it was declared under, inherits styles (and `dir`) from `<body>` instead of from where it\n * was written, and needs a host outlet and teardown of its own.\n *\n * The platform now has the answer built in. A modal surface is a real `<dialog>` opened with `showModal()`,\n * and a floating surface carries `popover=\"manual\"` and is shown with `showPopover()`. Both put the element\n * in the TOP LAYER: rendered above everything, positioned against the viewport, outside every ancestor's\n * overflow clip, transform and z-index — while staying exactly where the template declared it in the DOM.\n * So DI, change detection, CSS inheritance and the direction a nested `dir` region resolves to all keep\n * working with no code, and there is no z-index anywhere in this layer. Order in the top layer is the order\n * surfaces were shown, which is the stacking order this file's stack keeps.\n *\n * `showModal()` also makes everything outside the dialog inert: the background leaves the tab order and the\n * accessibility tree, which is the containment a modal needs, from the browser rather than from an\n * `aria-hidden` sweep over siblings.\n *\n * SSR: nothing here touches the DOM when a component is created. A server renders closed elements (`<dialog>`\n * without `open`, a `[popover]` that is not shown); every call below runs from a browser-only render hook or an\n * event handler.\n *\n * ── The stack ──────────────────────────────────────────────────────────────\n *\n * `KxOverlayStack` keeps open layers in the order they opened. It owns the three document listeners every\n * overlay needs — keydown, pointerdown and focusin — installed when the first layer opens and removed when\n * the last one closes, so a page with no open overlay has none of them.\n *\n * Escape goes to the TOPMOST layer only, and the keydown's default is prevented so a native\n * `<dialog>` underneath never also receives a close request for the same key press.\n * An Escape another component already handled (`defaultPrevented`) is left alone.\n * outside press walks down from the top: each layer the press is outside of is asked to close; it stops\n * at the first layer the press is inside, and after the first modal layer (nothing beneath a\n * modal can have been pressed). \"Inside\" is the layer's own DOM subtree plus its companions\n * (its trigger and anchor). A popover declared inside a dialog is inside that dialog's\n * subtree, so pressing the popover can never read as a press outside its dialog.\n * focus outside the same walk for focus, for the layers whose policy asks for it (non-modal surfaces).\n * nesting closing a layer first closes every open layer nested inside its subtree.\n * scroll lock the page's scrolling is held while at least one MODAL layer is open — derived from the\n * stack on every change, not counted up and down, so it cannot drift: an inner modal closing\n * leaves it locked while an outer one remains.\n *\n * Each layer applies its own policy when asked: an alert dialog declines to close on an outside press.\n */\n\n/** Why the stack is asking a layer to close. `parent` is not a request: the layer it is nested in is closing. */\nexport type KxDismissReason = 'escape' | 'outside' | 'focus-outside' | 'parent';\n\nexport interface KxLayer {\n readonly modal: boolean;\n /** Whether this layer closes when focus moves outside it (non-modal surfaces). */\n readonly closesOnFocusOutside: boolean;\n /** The surface element. Inside it is inside the layer. */\n surface(): HTMLElement | null;\n /** Elements outside the surface that belong to it — its trigger, its anchor. */\n companions(): readonly (Element | null | undefined)[];\n /** The stack asks the layer to close. The layer decides, by its own policy, whether it does. */\n request(reason: KxDismissReason): void;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class KxOverlayStack {\n private readonly doc = inject(DOCUMENT);\n private readonly layers: KxLayer[] = [];\n private listening = false;\n private locked: { overflow: string; gutter: string } | null = null;\n\n /** The open layers, bottom to top. Read-only; for the components that need their own parent. */\n get open(): readonly KxLayer[] {\n return this.layers;\n }\n\n add(layer: KxLayer): void {\n if (this.layers.includes(layer)) return;\n this.layers.push(layer);\n this.changed();\n }\n\n /** Remove a layer, first closing the layers nested in it. Safe to call for a layer that is not open. */\n remove(layer: KxLayer): void {\n const at = this.layers.indexOf(layer);\n if (at === -1) return;\n const surface = layer.surface();\n for (const above of this.layers.slice(at + 1).reverse()) {\n if (surface && this.nestedIn(above, surface)) {\n this.layers.splice(this.layers.indexOf(above), 1);\n above.request('parent');\n }\n }\n this.layers.splice(this.layers.indexOf(layer), 1);\n this.changed();\n }\n\n /** The nearest open layer whose subtree holds `layer` — the surface focus falls back to. */\n parentOf(layer: KxLayer): KxLayer | null {\n const surface = layer.surface();\n if (!surface) return null;\n for (const below of [...this.layers].reverse()) {\n if (below === layer) continue;\n const s = below.surface();\n if (s && s !== surface && s.contains(surface)) return below;\n }\n return null;\n }\n\n isTopmost(layer: KxLayer): boolean {\n return this.layers.at(-1) === layer;\n }\n\n private nestedIn(child: KxLayer, surface: HTMLElement): boolean {\n const s = child.surface();\n return !!s && (surface.contains(s) || child.companions().some((c) => !!c && surface.contains(c)));\n }\n\n private changed(): void {\n const view = this.doc.defaultView;\n if (!view) return;\n // listeners: present exactly while something is open\n if (this.layers.length && !this.listening) {\n this.doc.addEventListener('keydown', this.onKeydown);\n this.doc.addEventListener('pointerdown', this.onPointerdown, true);\n this.doc.addEventListener('focusin', this.onFocusin, true);\n this.listening = true;\n } else if (!this.layers.length && this.listening) {\n this.doc.removeEventListener('keydown', this.onKeydown);\n this.doc.removeEventListener('pointerdown', this.onPointerdown, true);\n this.doc.removeEventListener('focusin', this.onFocusin, true);\n this.listening = false;\n }\n // scroll: held while any modal layer is open\n const modal = this.layers.some((l) => l.modal);\n const html = this.doc.documentElement;\n if (modal && !this.locked) {\n this.locked = { overflow: html.style.overflow, gutter: html.style.scrollbarGutter };\n // Keep the scrollbar's space when the page had one, so locking does not slide the page sideways.\n if (view.innerWidth - html.clientWidth > 0) html.style.scrollbarGutter = 'stable';\n html.style.overflow = 'hidden';\n html.setAttribute('data-kx-scroll-locked', '');\n } else if (!modal && this.locked) {\n html.style.overflow = this.locked.overflow;\n html.style.scrollbarGutter = this.locked.gutter;\n html.removeAttribute('data-kx-scroll-locked');\n this.locked = null;\n }\n }\n\n private contains(layer: KxLayer, path: EventTarget[], event?: PointerEvent): boolean {\n if (layer.companions().some((c) => !!c && path.includes(c))) return true;\n const surface = layer.surface();\n if (!surface || !path.includes(surface)) return false;\n // A modal <dialog>'s ::backdrop is hit-tested as the dialog itself: a press on the backdrop arrives with\n // the dialog as its target and a point outside the dialog's box.\n if (event && event.target === surface) {\n const r = surface.getBoundingClientRect();\n return event.clientX >= r.left && event.clientX <= r.right && event.clientY >= r.top && event.clientY <= r.bottom;\n }\n return true;\n }\n\n private readonly onKeydown = (event: KeyboardEvent): void => {\n if (event.key !== 'Escape' || event.defaultPrevented || event.isComposing) return;\n const top = this.layers.at(-1);\n if (!top) return;\n // One Escape, one layer. Preventing the default also withholds the close request a native modal\n // <dialog> would otherwise act on, so the layer underneath cannot close on the same key press.\n event.preventDefault();\n top.request('escape');\n };\n\n private readonly onPointerdown = (event: PointerEvent): void => {\n const path = event.composedPath();\n for (const layer of [...this.layers].reverse()) {\n if (this.contains(layer, path, event)) return;\n layer.request('outside');\n if (layer.modal) return;\n }\n };\n\n private readonly onFocusin = (event: FocusEvent): void => {\n const path = event.composedPath();\n for (const layer of [...this.layers].reverse()) {\n if (layer.modal || this.contains(layer, path)) return;\n if (layer.closesOnFocusOutside) layer.request('focus-outside');\n }\n };\n}\n\n/* ── focus ──────────────────────────────────────────────────────────────── */\n\nconst FOCUSABLE =\n 'a[href], area[href], button, input:not([type=\"hidden\"]), select, textarea, iframe, audio[controls], video[controls], summary, [contenteditable]:not([contenteditable=\"false\"]), [tabindex]';\n\nfunction rendered(el: HTMLElement): boolean {\n const check = (el as HTMLElement & { checkVisibility?: (o?: object) => boolean }).checkVisibility;\n return check ? check.call(el, { visibilityProperty: true }) : el.getClientRects().length > 0;\n}\n\n/**\n * The elements Tab can reach inside `root`, in order. A radio group is one stop: its checked radio, or its\n * first when none is checked — the stop the browser itself would take.\n */\nexport function tabbables(root: HTMLElement): HTMLElement[] {\n const seenGroups = new Set<string>();\n const out: HTMLElement[] = [];\n const all = Array.from(root.querySelectorAll<HTMLElement>(FOCUSABLE));\n for (const el of all) {\n if (el.tabIndex < 0 || (el as HTMLButtonElement).disabled || el.closest('[inert]') || !rendered(el)) continue;\n if (el instanceof HTMLInputElement && el.type === 'radio' && el.name) {\n const key = `${el.form?.id ?? ''}|${el.name}`;\n if (seenGroups.has(key)) continue;\n const group = all.filter((r): r is HTMLInputElement => r instanceof HTMLInputElement && r.type === 'radio' && r.name === el.name);\n const stop = group.find((r) => r.checked) ?? group[0];\n if (stop !== el) continue;\n seenGroups.add(key);\n }\n out.push(el);\n }\n return out;\n}\n\n/**\n * Whether focus can be put back on `el`: still in the document, not disabled, not inert, rendered, and\n * focusable at all. Focus is never restored to an element that fails this — a removed trigger, or one a later\n * change disabled or hid.\n */\nexport function isFocusTarget(el: Element | null | undefined): el is HTMLElement {\n if (!(el instanceof HTMLElement) || !el.isConnected) return false;\n if (el === el.ownerDocument.body || (el as HTMLButtonElement).disabled || el.closest('[inert]')) return false;\n if (!el.matches(FOCUSABLE)) return false;\n return rendered(el);\n}\n\n/** The element that has focus, looking through shadow roots. */\nexport function activeElement(doc: Document): HTMLElement | null {\n let el = doc.activeElement;\n while (el?.shadowRoot?.activeElement) el = el.shadowRoot.activeElement;\n return el instanceof HTMLElement && el !== doc.body ? el : null;\n}\n\n/**\n * Keep Tab inside `root`: from the last stop Tab goes to the first, and from the first Shift+Tab goes to the\n * last. A modal `<dialog>` already makes everything outside it inert, but from its last stop the browser\n * moves focus out to its own chrome; this keeps the cycle inside the surface. Returns true when it moved focus.\n */\nexport function wrapTab(event: KeyboardEvent, root: HTMLElement): boolean {\n if (event.key !== 'Tab' || event.altKey || event.ctrlKey || event.metaKey) return false;\n const stops = tabbables(root);\n const active = activeElement(root.ownerDocument);\n if (!stops.length) {\n event.preventDefault();\n root.focus();\n return true;\n }\n const [first, last] = [stops[0]!, stops.at(-1)!];\n if (event.shiftKey && (active === first || active === root || !active || !root.contains(active))) {\n event.preventDefault();\n last.focus();\n return true;\n }\n if (!event.shiftKey && (active === last || !active || !root.contains(active))) {\n event.preventDefault();\n first.focus();\n return true;\n }\n return false;\n}\n\n/* ── positioning ────────────────────────────────────────────────────────── */\n\n/**\n * Where a floating surface goes, relative to the element it belongs to. The contract is deliberately small:\n *\n * side top | bottom | start | end — start and end are LOGICAL: they resolve to left or right by the\n * direction the anchor itself computes to, so a popover set to open \"toward the end\" opens to the\n * right in an LTR page and to the left in an RTL one (and in a nested region, by that region)\n * align start | center | end along the other axis, logical in the same way\n * offset the gap between anchor and surface, in px\n *\n * Collision handling, in order: FLIP to the opposite side when the chosen one lacks the room and the\n * opposite has more; SHIFT along the cross axis so the surface stays `padding` inside the viewport; and CAP\n * the surface's size to the room it has (`maxWidth`, `maxHeight`, published as CSS custom properties) so large\n * text or a phone-sized viewport makes it scroll inside itself rather than run off the screen.\n *\n * Pure: rects in, coordinates out. The DOM side (`autoPlace`) measures, calls this, writes the result.\n */\nexport type KxSide = 'top' | 'bottom' | 'start' | 'end';\nexport type KxAlign = 'start' | 'center' | 'end';\nexport type KxPhysicalSide = 'top' | 'bottom' | 'left' | 'right';\n\nexport interface KxBox {\n x: number;\n y: number;\n width: number;\n height: number;\n}\nexport interface KxPlacementInput {\n anchor: KxBox;\n floating: { width: number; height: number };\n viewport: { width: number; height: number };\n side: KxSide;\n align: KxAlign;\n offset: number;\n padding: number;\n rtl: boolean;\n}\nexport interface KxPlacement {\n x: number;\n y: number;\n /** The physical side the surface ended up on, after direction and collisions. */\n side: KxPhysicalSide;\n flipped: boolean;\n maxWidth: number;\n maxHeight: number;\n}\n\nconst OPPOSITE: Record<KxPhysicalSide, KxPhysicalSide> = { top: 'bottom', bottom: 'top', left: 'right', right: 'left' };\n\nexport function physicalSide(side: KxSide, rtl: boolean): KxPhysicalSide {\n if (side === 'start') return rtl ? 'right' : 'left';\n if (side === 'end') return rtl ? 'left' : 'right';\n return side;\n}\n\nexport function computePlacement(i: KxPlacementInput): KxPlacement {\n const { anchor: a, floating: f, viewport: v, offset, padding } = i;\n const room: Record<KxPhysicalSide, number> = {\n top: a.y - offset - padding,\n bottom: v.height - (a.y + a.height) - offset - padding,\n left: a.x - offset - padding,\n right: v.width - (a.x + a.width) - offset - padding,\n };\n const wanted = physicalSide(i.side, i.rtl);\n const vertical = (s: KxPhysicalSide) => s === 'top' || s === 'bottom';\n const need = vertical(wanted) ? f.height : f.width;\n let side = wanted;\n if (room[wanted] < need && room[OPPOSITE[wanted]] > room[wanted]) side = OPPOSITE[wanted];\n\n let x: number;\n let y: number;\n if (vertical(side)) {\n y = side === 'bottom' ? a.y + a.height + offset : a.y - offset - f.height;\n // logical alignment along the inline axis\n const startX = i.rtl ? a.x + a.width - f.width : a.x;\n const endX = i.rtl ? a.x : a.x + a.width - f.width;\n x = i.align === 'center' ? a.x + a.width / 2 - f.width / 2 : i.align === 'start' ? startX : endX;\n x = clamp(x, padding, v.width - padding - f.width);\n } else {\n x = side === 'right' ? a.x + a.width + offset : a.x - offset - f.width;\n y = i.align === 'center' ? a.y + a.height / 2 - f.height / 2 : i.align === 'start' ? a.y : a.y + a.height - f.height;\n y = clamp(y, padding, v.height - padding - f.height);\n }\n const maxWidth = Math.max(0, vertical(side) ? v.width - 2 * padding : room[side]);\n const maxHeight = Math.max(0, vertical(side) ? room[side] : v.height - 2 * padding);\n return { x, y, side, flipped: side !== wanted, maxWidth, maxHeight };\n}\n\n/** Clamp into [min, max]; when the range is empty (the surface is wider than the room), the start wins. */\nconst clamp = (n: number, min: number, max: number): number => Math.max(min, Math.min(n, max));\n\nexport interface KxAutoPlaceOptions {\n side: () => KxSide;\n align: () => KxAlign;\n offset: () => number;\n}\n\n/** Viewport inset kept clear around a floating surface. */\nexport const VIEWPORT_PADDING = 8;\n\n/**\n * Position `floating` against `anchor` now, and again whenever either could have moved: the window resizes,\n * anything scrolls (one capturing listener catches every scroll container), or either element changes size.\n * Returns the function that removes every listener and observer it added.\n */\nexport function autoPlace(anchor: HTMLElement, floating: HTMLElement, o: KxAutoPlaceOptions): () => void {\n const view = floating.ownerDocument.defaultView!;\n let frame = 0;\n const place = () => {\n frame = 0;\n if (!anchor.isConnected || !floating.isConnected) return;\n const viewport = { width: floating.ownerDocument.documentElement.clientWidth, height: view.innerHeight };\n const rtl = view.getComputedStyle(anchor).direction === 'rtl';\n const a = anchor.getBoundingClientRect();\n const input = (f: { width: number; height: number }): KxPlacementInput => ({\n anchor: { x: a.x, y: a.y, width: a.width, height: a.height },\n floating: f,\n viewport,\n side: o.side(),\n align: o.align(),\n offset: o.offset(),\n padding: VIEWPORT_PADDING,\n rtl,\n });\n // Two passes: the first publishes the room so the surface can size itself to it, the second places the\n // size it then has.\n const size = () => ({ width: floating.offsetWidth, height: floating.offsetHeight });\n const first = computePlacement(input(size()));\n write(floating, first);\n const final = computePlacement(input(size()));\n write(floating, final);\n };\n const schedule = () => {\n if (!frame) frame = view.requestAnimationFrame(place);\n };\n place();\n view.addEventListener('resize', schedule);\n floating.ownerDocument.addEventListener('scroll', schedule, true);\n // through the element's own window, never the global: the package must load where there is no browser\n const Observer = (view as Window & typeof globalThis).ResizeObserver;\n const observer = typeof Observer === 'function' ? new Observer(schedule) : null;\n observer?.observe(anchor);\n observer?.observe(floating);\n return () => {\n if (frame) view.cancelAnimationFrame(frame);\n view.removeEventListener('resize', schedule);\n floating.ownerDocument.removeEventListener('scroll', schedule, true);\n observer?.disconnect();\n };\n}\n\nfunction write(el: HTMLElement, p: KxPlacement): void {\n // Physical coordinates are the output of the computation above, not authored layout: the logical intent\n // (start, end) was resolved against the anchor's own direction before these numbers existed.\n el.style.setProperty('--kx-available-width', `${p.maxWidth}px`);\n el.style.setProperty('--kx-available-height', `${p.maxHeight}px`);\n el.style.left = `${p.x}px`;\n el.style.top = `${p.y}px`;\n el.setAttribute('data-placement', p.side);\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n DOCUMENT,\n DestroyRef,\n Directive,\n ElementRef,\n InjectionToken,\n type Signal,\n afterRenderEffect,\n booleanAttribute,\n computed,\n contentChild,\n contentChildren,\n forwardRef,\n inject,\n input,\n model,\n output,\n signal,\n untracked,\n} from '@angular/core';\nimport { KxButton } from './button';\nimport { disclosureId } from './disclosure';\nimport { KxOverlayStack, activeElement, isFocusTarget, tabbables, wrapTab, type KxDismissReason, type KxLayer } from './overlay';\n\n/**\n * The dialog family: dialog, alert dialog, sheet, drawer — and modal, which is a dialog with a fixed layout.\n *\n * ── The shared contract (written before the code) ──────────────────────────\n *\n * One root holds the state, two-way: `[(open)]`. Every surface in the family is a real `<dialog>` element the\n * caller writes, carrying the surface's directive (`<dialog kxDialogContent>`, `kxAlertDialogContent`,\n * `kxSheetContent`, `kxDrawerContent`), opened with `showModal()` — so it renders in the browser's top layer\n * above every stacking and clipping context, and everything outside it becomes inert. See overlay.ts.\n *\n * The parts are shared, as SwiftUI's port shares them: `kxDialogTrigger`, `kxDialogClose`, `kxDialogTitle`,\n * `kxDialogDescription`, `kx-dialog-header`, `kx-dialog-footer` work inside any member of the family.\n *\n * name the title (`kxDialogTitle`, a real heading the caller chooses the level of) labels the\n * surface through `aria-labelledby`; with no title, `label` names it. The description, when\n * there is one, is its `aria-describedby`\n * focus in an element marked `autofocus`; else the surface's own choice (an alert dialog's Cancel, a\n * drawer's panel); else the first Tab stop in the content; else the surface itself\n * focus held the page behind is inert (the browser's); Tab from the last stop goes to the first and\n * Shift+Tab from the first to the last (ours — the browser would leave for its own chrome)\n * focus back on close, to the element that had focus when it opened — only if that element is still a\n * valid focus target (connected, enabled, rendered, not inert). Else `returnFocus` if the\n * caller gave one; else the trigger; else the surface this one is nested in; else nowhere.\n * Focus is never sent to a removed or hidden element\n * dismissal Escape closes the topmost layer only; a press on the backdrop closes the surface (not an\n * alert dialog); `kxDialogClose` and the built-in close button close it; so does setting\n * `open` to false. Each path ends in the same place: closed, scroll released if no other\n * modal is open, focus returned\n * scroll the page does not scroll while any modal surface is open\n *\n * ── Motion ─────────────────────────────────────────────────────────────────\n *\n * Opening fades and settles the surface (opacity, scale) over `--duration-fast` with `--easing-enter`; a sheet\n * or drawer slides in from its edge over `--duration-slow`. Closing runs `--duration-instant` (`--duration-base`\n * for a sheet or drawer) with `--easing-exit`. The exit is visual only: `close()` has already taken the\n * surface out of the accessibility tree and released the page, and focus has already gone back, so what is\n * fading is a picture of a closed dialog — it does not take pointer events. Under reduced motion every\n * transition is `none` and the surface simply appears and disappears, in the same end states.\n *\n * Content stays mounted while closed: a closed `<dialog>` is not rendered, not focusable and not in the\n * accessibility tree. Wrap expensive content in `@if (open)` yourself when it should not exist while closed.\n */\n\nexport const KX_DIALOG = new InjectionToken<KxDialogRoot>('KxDialogRoot');\n\ntype IdSource = Signal<string | undefined> | null;\n\n/** The state every member of the family shares. */\n@Directive()\nexport abstract class KxDialogRoot {\n /** Two-way: whether the surface is open. */\n readonly open = model(false);\n /**\n * Where focus goes on close when the element that opened it is gone — say, a row the dialog just deleted.\n * Used only when the element focused before opening is no longer a valid focus target.\n */\n readonly returnFocus = input<HTMLElement | null>(null);\n\n private readonly base = disclosureId('dialog');\n /** Each part's own `id` input, static or bound, registered by the part as it is created. */\n readonly contentIdFrom = signal<IdSource>(null);\n readonly titleIdFrom = signal<IdSource>(null);\n readonly descriptionIdFrom = signal<IdSource>(null);\n /** Generated, unless the part has an `id` of its own (`id=\"…\"` or `[id]=\"…\"`) — then that one, as it changes. */\n readonly contentId = computed(() => this.contentIdFrom()?.() || `${this.base}-content`);\n readonly titleId = computed(() => this.titleIdFrom()?.() || `${this.base}-title`);\n readonly descriptionId = computed(() => this.descriptionIdFrom()?.() || `${this.base}-description`);\n /** The trigger, when there is one: a fallback focus target on close. */\n trigger: HTMLElement | null = null;\n\n show(): void {\n this.open.set(true);\n }\n close(): void {\n this.open.set(false);\n }\n}\n\nconst ROOT = { class: 'kx-overlay-root' };\n\n/**\n * <kx-dialog [(open)]=\"editing\">\n * <button kxButton kxDialogTrigger>Edit profile</button>\n * <dialog kxDialogContent>\n * <kx-dialog-header>\n * <h2 kxDialogTitle>Edit profile</h2>\n * <p kxDialogDescription>Changes are saved when you press Save.</p>\n * </kx-dialog-header>\n * …\n * <kx-dialog-footer>\n * <button kxButton variant=\"Outline\" kxDialogClose>Cancel</button>\n * <button kxButton (click)=\"save()\">Save</button>\n * </kx-dialog-footer>\n * </dialog>\n * </kx-dialog>\n */\n@Component({\n selector: 'kx-dialog',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: '<ng-content />',\n host: ROOT,\n providers: [{ provide: KX_DIALOG, useExisting: forwardRef(() => KxDialog) }],\n})\nexport class KxDialog extends KxDialogRoot {}\n\n/** An alert dialog: a decision that must be answered. See `kxAlertDialogContent`. */\n@Component({\n selector: 'kx-alert-dialog',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: '<ng-content />',\n host: ROOT,\n providers: [{ provide: KX_DIALOG, useExisting: forwardRef(() => KxAlertDialog) }],\n})\nexport class KxAlertDialog extends KxDialogRoot {}\n\n/** A sheet: a modal panel from one edge of the viewport. See `kxSheetContent`. */\n@Component({\n selector: 'kx-sheet',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: '<ng-content />',\n host: ROOT,\n providers: [{ provide: KX_DIALOG, useExisting: forwardRef(() => KxSheet) }],\n})\nexport class KxSheet extends KxDialogRoot {}\n\n/** A drawer: a modal panel from the bottom edge, with a grab handle. See `kxDrawerContent`. */\n@Component({\n selector: 'kx-drawer',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: '<ng-content />',\n host: ROOT,\n providers: [{ provide: KX_DIALOG, useExisting: forwardRef(() => KxDrawer) }],\n})\nexport class KxDrawer extends KxDialogRoot {}\n\n/* ── parts ──────────────────────────────────────────────────────────────── */\n\n/** Opens the surface. On the caller's own button, so it can be any button the design calls for. */\n@Directive({\n selector: 'button[kxDialogTrigger]',\n host: {\n type: 'button',\n 'aria-haspopup': 'dialog',\n '[attr.aria-expanded]': 'root.open()',\n '[attr.aria-controls]': 'root.contentId()',\n '(click)': 'root.show()',\n },\n})\nexport class KxDialogTrigger {\n readonly root = inject(KX_DIALOG);\n constructor() {\n const el = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n this.root.trigger = el;\n inject(DestroyRef).onDestroy(() => {\n if (this.root.trigger === el) this.root.trigger = null;\n });\n }\n}\n\n/** Closes the surface — Cancel, Done, a footer's dismiss. */\n@Directive({\n selector: 'button[kxDialogClose]',\n host: { type: 'button', '(click)': 'root.close()' },\n})\nexport class KxDialogClose {\n readonly root = inject(KX_DIALOG);\n}\n\n/**\n * The surface's name. Put it on a real heading at the level the page needs (`<h2 kxDialogTitle>` in most\n * applications: the dialog sits above the page's own `<h1>`).\n */\n@Directive({\n selector: '[kxDialogTitle]',\n host: { class: 'kx-dialog__title', '[id]': 'root.titleId()' },\n})\nexport class KxDialogTitle {\n readonly root = inject(KX_DIALOG);\n /** Your own id for the title, static or bound; the surface's `aria-labelledby` follows it. */\n readonly id = input<string | undefined>(undefined);\n constructor() {\n this.root.titleIdFrom.set(this.id);\n }\n}\n\n@Directive({\n selector: '[kxDialogDescription]',\n host: { class: 'kx-dialog__description', '[id]': 'root.descriptionId()' },\n})\nexport class KxDialogDescription {\n readonly root = inject(KX_DIALOG);\n /** Your own id for the description, static or bound; the surface's `aria-describedby` follows it. */\n readonly id = input<string | undefined>(undefined);\n constructor() {\n this.root.descriptionIdFrom.set(this.id);\n }\n}\n\n@Component({\n selector: 'kx-dialog-header',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: '<ng-content />',\n host: { class: 'kx-dialog__header' },\n})\nexport class KxDialogHeader {}\n\n/**\n * The actions row. In DOM order (Cancel before the confirming action, as the reader meets them), laid out\n * toward the inline end; in a narrow surface it stacks in that same order, so what is seen and what Tab\n * reaches never disagree.\n */\n@Component({\n selector: 'kx-dialog-footer',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: '<ng-content />',\n host: { class: 'kx-dialog__footer' },\n})\nexport class KxDialogFooter {}\n\n/* ── the modal surface ──────────────────────────────────────────────────── */\n\n/** What every modal surface in the family does; the members differ only in role, layout and two policies. */\n@Directive({\n host: {\n tabindex: '-1',\n '[id]': 'root.contentId()',\n '[attr.aria-labelledby]': 'hasTitle() ? root.titleId() : null',\n '[attr.aria-describedby]': 'hasDescription() ? root.descriptionId() : null',\n '[attr.aria-label]': 'hasTitle() ? null : label()',\n '[attr.data-state]': 'root.open() ? \"open\" : \"closed\"',\n '(cancel)': 'onCancel($event)',\n '(close)': 'onNativeClose()',\n '(keydown)': 'onKeydown($event)',\n },\n})\nexport abstract class KxModalSurface implements KxLayer {\n readonly root = inject(KX_DIALOG);\n protected readonly el = inject<ElementRef<HTMLDialogElement>>(ElementRef).nativeElement;\n private readonly stack = inject(KxOverlayStack);\n private readonly doc = inject(DOCUMENT);\n\n /** The accessible name when there is no `kxDialogTitle` inside. */\n readonly label = input<string | null>(null);\n /** Your own id for the surface, static or bound; the trigger's `aria-controls` follows it. */\n readonly id = input<string | undefined>(undefined);\n\n readonly modal = true;\n readonly closesOnFocusOutside = false;\n /** Whether a press on the backdrop closes it. An alert dialog's answer is no. */\n protected readonly closesOnOutside: boolean = true;\n\n private readonly titles = contentChildren(KxDialogTitle, { descendants: true });\n private readonly descriptions = contentChildren(KxDialogDescription, { descendants: true });\n protected readonly hasTitle = computed(() => this.titles().some((t) => t.root === this.root));\n protected readonly hasDescription = computed(() => this.descriptions().some((d) => d.root === this.root));\n\n private shown = false;\n private returnTo: HTMLElement | null = null;\n private parent: KxLayer | null = null;\n\n constructor() {\n this.root.contentIdFrom.set(this.id);\n afterRenderEffect({\n write: () => {\n const open = this.root.open();\n untracked(() => this.sync(open));\n },\n });\n inject(DestroyRef).onDestroy(() => {\n if (!this.shown) return;\n this.shown = false;\n this.stack.remove(this);\n this.restoreFocus();\n });\n }\n\n surface(): HTMLElement {\n return this.el;\n }\n companions(): readonly (Element | null)[] {\n return [];\n }\n request(reason: KxDismissReason): void {\n if (reason === 'outside' && !this.closesOnOutside) return;\n this.root.close();\n }\n\n /** The member's own first focus, when nothing in the content is marked `autofocus`. */\n protected initialFocus(): HTMLElement | null {\n return null;\n }\n\n private sync(open: boolean): void {\n const dialog = this.el;\n if (open && !this.shown) {\n this.shown = true;\n this.returnTo = activeElement(this.doc);\n if (typeof dialog.showModal === 'function') {\n if (!dialog.open) dialog.showModal();\n } else dialog.setAttribute('open', '');\n this.stack.add(this);\n this.parent = this.stack.parentOf(this);\n this.focusInitial();\n } else if (!open && this.shown) {\n this.shown = false;\n this.stack.remove(this);\n if (typeof dialog.close === 'function') {\n if (dialog.open) dialog.close();\n } else dialog.removeAttribute('open');\n this.restoreFocus();\n }\n }\n\n private own(el: Element): boolean {\n return el.closest('dialog') === this.el;\n }\n\n private focusInitial(): void {\n const marked = Array.from(this.el.querySelectorAll<HTMLElement>('[autofocus], [data-kx-autofocus]')).find((el) => this.own(el) && isFocusTarget(el));\n const first = tabbables(this.el).find((el) => this.own(el) && !el.classList.contains('kx-dialog__close'));\n const target = marked ?? this.initialFocus() ?? first ?? null;\n (target && isFocusTarget(target) ? target : this.el).focus();\n }\n\n private restoreFocus(): void {\n for (const candidate of [this.returnTo, this.root.returnFocus(), this.root.trigger, this.parent?.surface()]) {\n if (isFocusTarget(candidate)) {\n candidate.focus();\n break;\n }\n }\n this.returnTo = null;\n this.parent = null;\n }\n\n /**\n * A close request the stack did not see first (a platform back gesture): route it through the same policy\n * as Escape. Escape itself never arrives here — the stack consumes the key.\n */\n protected onCancel(event: Event): void {\n event.preventDefault();\n this.request('escape');\n }\n\n /** The browser closed the dialog by itself (a cancel it would not let us prevent): follow it. */\n protected onNativeClose(): void {\n if (this.shown) this.root.close();\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n if (event.key === 'Tab' && event.target instanceof Element && this.own(event.target)) wrapTab(event, this.el);\n }\n}\n\n/**\n * <dialog kxDialogContent [closeButton]=\"true\" closeLabel=\"Close\">…</dialog>\n *\n * A dialog: centred, `--radius-surface`, modal elevation. The built-in close button (an X, named by\n * `closeLabel`) comes LAST in the DOM and sits at the inline-end of the top edge, so Tab meets the content\n * first and the close control last — and the first focus lands in the content, not on the X.\n */\n@Component({\n selector: 'dialog[kxDialogContent]',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <ng-content />\n @if (closeButton()) {\n <button type=\"button\" class=\"kx-dialog__close\" [attr.aria-label]=\"closeLabel()\" (click)=\"root.close()\"><svg viewBox=\"0 0 16 16\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M4 4l8 8M12 4l-8 8\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" /></svg></button>\n }\n `,\n host: { class: 'kx-dialog' },\n})\nexport class KxDialogContent extends KxModalSurface {\n /** Whether to show the built-in close button. */\n readonly closeButton = input(true, { transform: booleanAttribute });\n readonly closeLabel = input('Close');\n}\n\n/**\n * Cancel and the confirming action of an alert dialog. Put them on your own buttons — usually\n * `<button kxButton variant=\"Outline\" kxAlertDialogCancel>` and\n * `<button kxButton variant=\"Destructive\" kxAlertDialogAction>` — in that order. Both close the dialog after\n * your own click handler has run.\n */\n@Directive({\n selector: 'button[kxAlertDialogCancel]',\n host: { type: 'button', '(click)': 'root.close()' },\n})\nexport class KxAlertDialogCancel {\n readonly root = inject(KX_DIALOG);\n readonly el = inject<ElementRef<HTMLButtonElement>>(ElementRef).nativeElement;\n}\n\n@Directive({\n selector: 'button[kxAlertDialogAction]',\n host: { type: 'button', '(click)': 'root.close()' },\n})\nexport class KxAlertDialogAction {\n readonly root = inject(KX_DIALOG);\n}\n\n/**\n * <kx-alert-dialog [(open)]=\"confirming\">\n * <button kxButton variant=\"Destructive\" kxDialogTrigger>Delete project</button>\n * <dialog kxAlertDialogContent>\n * <kx-dialog-header>\n * <h2 kxDialogTitle>Delete \"Atlas\"?</h2>\n * <p kxDialogDescription>Its 214 files are removed for everyone. This cannot be undone.</p>\n * </kx-dialog-header>\n * <kx-dialog-footer>\n * <button kxButton variant=\"Outline\" kxAlertDialogCancel>Cancel</button>\n * <button kxButton variant=\"Destructive\" kxAlertDialogAction (click)=\"delete()\">Delete project</button>\n * </kx-dialog-footer>\n * </dialog>\n * </kx-alert-dialog>\n *\n * A behaviour, not a style: `role=\"alertdialog\"`, so assistive technology announces it as an interruption that\n * needs an answer. Its defaults make an accidental confirmation harder, not easier:\n *\n * - first focus is Cancel, never the destructive action — Enter on arrival declines\n * - a press on the backdrop does nothing: a decision is not answered by clicking away\n * - Escape is Cancel (the WAI-ARIA alert dialog pattern allows it, and it is the safe answer)\n * - no X: the two buttons are the only ways to answer, and they say what they do\n */\n@Component({\n selector: 'dialog[kxAlertDialogContent]',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: '<ng-content />',\n host: { class: 'kx-dialog kx-dialog--alert', role: 'alertdialog' },\n})\nexport class KxAlertDialogContent extends KxModalSurface {\n protected override readonly closesOnOutside = false;\n private readonly cancel = contentChild(KxAlertDialogCancel, { descendants: true });\n protected override initialFocus(): HTMLElement | null {\n return this.cancel()?.el ?? null;\n }\n}\n\nexport type KxSheetSide = 'top' | 'bottom' | 'start' | 'end';\n\n/**\n * <kx-sheet [(open)]=\"filtersOpen\">\n * <button kxButton variant=\"Outline\" kxDialogTrigger>Filters</button>\n * <dialog kxSheetContent side=\"end\">…</dialog>\n * </kx-sheet>\n *\n * A modal panel against one edge of the viewport, full length along it. `start` and `end` are LOGICAL: an\n * `end` sheet is on the right in a left-to-right page and on the left in a right-to-left one, resolved by the\n * direction the sheet's own element computes to — so a sheet inside an RTL region of an LTR page opens from\n * that region's end. (React's Sheet names physical edges, `left` / `right`; this is a deliberate difference.)\n *\n * The panel is as wide as `--kx-sheet-size` (24rem) but never wider than the viewport less 3rem, so the page\n * behind stays visible — a reader can see where they are and that a press there closes the panel. It scrolls\n * inside itself, and keeps clear of a device's safe areas.\n */\n@Component({\n selector: 'dialog[kxSheetContent]',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <ng-content />\n @if (closeButton()) {\n <button type=\"button\" class=\"kx-dialog__close\" [attr.aria-label]=\"closeLabel()\" (click)=\"root.close()\"><svg viewBox=\"0 0 16 16\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M4 4l8 8M12 4l-8 8\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" /></svg></button>\n }\n `,\n host: { class: 'kx-dialog kx-sheet', '[attr.data-side]': 'side()' },\n})\nexport class KxSheetContent extends KxModalSurface {\n readonly side = input<KxSheetSide>('end');\n readonly closeButton = input(true, { transform: booleanAttribute });\n readonly closeLabel = input('Close');\n}\n\n/**\n * <kx-drawer [(open)]=\"sharing\">\n * <button kxButton kxDialogTrigger>Share</button>\n * <dialog kxDrawerContent>\n * <kx-dialog-header><h2 kxDialogTitle>Share</h2></kx-dialog-header>\n * …\n * <kx-dialog-footer><button kxButton variant=\"Outline\" kxDialogClose>Done</button></kx-dialog-footer>\n * </dialog>\n * </kx-drawer>\n *\n * KinetixUI's drawer is a bottom sheet with a grab handle and rounded top corners (React's is vaul's; the\n * SwiftUI and Compose ports make it their bottom sheet). First focus goes to the PANEL, not to a field inside\n * it, for the reason React's drawer gives: on a phone, focusing a text field on open raises the keyboard over\n * the drawer the reader has not yet seen. From the panel, the screen reader announces the drawer's title and\n * Tab walks its content in order. The handle is decorative: there is no drag-to-dismiss in this package (it\n * is not claimed); Escape, the backdrop and your own close control dismiss it.\n */\n@Component({\n selector: 'dialog[kxDrawerContent]',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: '<div class=\"kx-drawer__handle\" aria-hidden=\"true\"></div><ng-content />',\n host: { class: 'kx-dialog kx-sheet kx-drawer', 'data-side': 'bottom' },\n})\nexport class KxDrawerContent extends KxModalSurface {\n protected override initialFocus(): HTMLElement {\n return this.el;\n }\n}\n\n/* ── modal ──────────────────────────────────────────────────────────────── */\n\n/**\n * Info — one action (\"Got it\"). Confirmation, Warning — Cancel + a primary action. Destructive — Cancel + a\n * destructive action. The same four names React's Modal takes.\n */\nexport type KxModalType = 'Info' | 'Confirmation' | 'Warning' | 'Destructive';\n\nconst DEFAULT_ACTION: Record<KxModalType, string> = {\n Info: 'Got it',\n Confirmation: 'Confirm',\n Warning: 'Proceed',\n Destructive: 'Delete',\n};\n\n/**\n * <kx-modal type=\"Destructive\" title=\"Delete this view?\" description=\"Saved filters in it are lost.\"\n * [(open)]=\"confirming\" (action)=\"deleteView()\">\n * <button kxButton variant=\"Outline\" kxDialogTrigger>Delete view</button>\n * </kx-modal>\n *\n * Not a second primitive: React's Modal is a dialog with a fixed structure — a header with the title and a\n * close button, a divider, the description and any projected content, a divider, and an end-aligned footer\n * whose buttons follow `type`. This is the same composition on the same `kxDialogContent` surface, so it has\n * every behaviour of the dialog above and adds none of its own beyond its defaults:\n *\n * - first focus is Cancel when there is one (never the action), the action when it is alone (Info)\n * - `action` fires when the action is chosen; `cancel` when Cancel is. Escape, the backdrop and the close\n * button close it without either — `openChange` reports every close\n *\n * A decision that must be answered — nothing else on the screen may proceed until it is — is an alert dialog,\n * not a Destructive modal: the modal can still be dismissed by a backdrop press (as React's can).\n *\n * The trigger is projected (`kxDialogTrigger`); anything else projected goes in the body under the description.\n */\n@Component({\n selector: 'kx-modal',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [KxButton, KxDialogContent, KxDialogTitle, KxDialogDescription],\n providers: [{ provide: KX_DIALOG, useExisting: forwardRef(() => KxModal) }],\n template: `\n <ng-content select=\"[kxDialogTrigger]\" />\n <dialog kxDialogContent class=\"kx-modal\" [closeButton]=\"false\">\n <header class=\"kx-modal__header\">\n <h2 kxDialogTitle class=\"kx-modal__title\">{{ title() }}</h2>\n <button type=\"button\" class=\"kx-dialog__close kx-modal__close\" [attr.aria-label]=\"closeLabel()\" (click)=\"close()\"><svg viewBox=\"0 0 16 16\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M4 4l8 8M12 4l-8 8\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" /></svg></button>\n </header>\n <div class=\"kx-modal__body\">\n @if (description()) {\n <p kxDialogDescription>{{ description() }}</p>\n }\n <ng-content />\n </div>\n <footer class=\"kx-modal__footer\">\n @if (type() !== 'Info') {\n <button kxButton variant=\"Outline\" size=\"lg\" type=\"button\" data-kx-autofocus (click)=\"choose('cancel')\">{{ cancelLabel() }}</button>\n }\n <button\n kxButton\n [variant]=\"type() === 'Destructive' ? 'Destructive' : 'Primary'\"\n size=\"lg\"\n type=\"button\"\n [attr.data-kx-autofocus]=\"type() === 'Info' ? '' : null\"\n (click)=\"choose('action')\"\n >\n {{ actionLabel() ?? defaultAction() }}\n </button>\n </footer>\n </dialog>\n `,\n host: {\n ...ROOT,\n // `title` is this component's input, not the element's tooltip: drop the attribute a static\n // `title=\"…\"` would otherwise leave on the host, where it would show as a native tooltip.\n '[attr.title]': 'null',\n },\n})\nexport class KxModal extends KxDialogRoot {\n readonly type = input<KxModalType>('Info');\n readonly title = input.required<string>();\n readonly description = input<string | null>(null);\n /** Overrides the type's default action label. */\n readonly actionLabel = input<string | null>(null);\n readonly cancelLabel = input('Cancel');\n readonly closeLabel = input('Close');\n readonly action = output<void>();\n readonly cancel = output<void>();\n protected readonly defaultAction = computed(() => DEFAULT_ACTION[this.type()]);\n\n protected choose(what: 'action' | 'cancel'): void {\n if (what === 'action') this.action.emit();\n else this.cancel.emit();\n this.close();\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n DOCUMENT,\n DestroyRef,\n Directive,\n ElementRef,\n HostAttributeToken,\n type Signal,\n afterRenderEffect,\n computed,\n inject,\n input,\n model,\n numberAttribute,\n signal,\n untracked,\n} from '@angular/core';\nimport { disclosureId } from './disclosure';\nimport {\n KxOverlayStack,\n activeElement,\n autoPlace,\n isFocusTarget,\n tabbables,\n type KxAlign,\n type KxDismissReason,\n type KxLayer,\n type KxSide,\n} from './overlay';\n\n/**\n * The floating family: popover, tooltip, hover card — three surfaces that sit beside the element they belong\n * to, never modal, and are three different things:\n *\n * opened by is focus\n * popover pressing its trigger a non-modal dialog moves in; Tab out closes it\n * tooltip hover (after a delay), or the trigger's DESCRIPTION stays on the trigger\n * keyboard focus (`role=\"tooltip\"`)\n * hover card hover with intent, or a preview of where the stays on the trigger; Tab\n * keyboard focus trigger leads walks into its links\n *\n * A tooltip is not a tiny popover: it carries no controls, never takes focus, and what it says is already the\n * trigger's accessible description whether or not it is showing — so a touch user, who never hovers, still has\n * it read out. A hover card is not a tooltip: it is not a description (a card of profile details read as a\n * button's description would be noise) and it may hold links. Neither may be the only way to an action or a\n * piece of information the reader needs: a tooltip does not open on touch, and a hover card's trigger is a\n * link whose destination carries the same content.\n *\n * ── Shared ─────────────────────────────────────────────────────────────────\n *\n * Each surface is `popover=\"manual\"` and shown into the top layer (overlay.ts), placed by `autoPlace`: `side`\n * top | bottom | start | end (logical), `align` start | center | end, `offset` px; flipped, shifted and capped\n * to the room it has, and re-placed on scroll, resize and size changes. It is declared where it is used, so\n * inside a dialog it is inside that dialog — a press on it is never a press outside its dialog, and Escape\n * closes it first.\n *\n * Every surface answers Escape. Hover surfaces honour WCAG 1.4.13: dismissible (Escape, without moving the\n * pointer), hoverable (the pointer can travel from the trigger onto the surface: leaving the trigger starts a\n * short close delay that entering the surface cancels) and persistent (they stay while hovered or focused).\n *\n * Motion: a fade and a 4px settle away from the side it opens on, over `--duration-fast` in and\n * `--duration-instant` out (a tooltip `--duration-instant` both ways); `none` under reduced motion.\n */\n\n/** Why a floating surface closed — decides whether focus goes back to the trigger. */\ntype CloseReason = KxDismissReason | 'close' | 'blur' | 'pointer' | 'press' | 'programmatic';\n\n@Directive()\nexport abstract class KxFloatingRoot {\n /** Two-way: whether the surface is showing. */\n readonly open = model(false);\n private readonly generatedId = `${disclosureId('floating')}-content`;\n /** The content's own `id` input, static or bound, once the content exists. */\n readonly contentIdFrom = signal<Signal<string | undefined> | null>(null);\n /** Generated, unless the content has an `id` of its own (`id=\"…\"` or `[id]=\"…\"`) — then that one, as it changes. */\n readonly contentId = computed(() => this.contentIdFrom()?.() || this.generatedId);\n trigger: HTMLElement | null = null;\n anchor: HTMLElement | null = null;\n /** The last reason it closed for; `programmatic` when `open` was set from outside. */\n reason: CloseReason = 'programmatic';\n\n show(): void {\n this.open.set(true);\n }\n hide(reason: CloseReason = 'programmatic'): void {\n if (!this.open()) return;\n this.reason = reason;\n this.open.set(false);\n }\n}\n\n/** The surface's root, following the surface's own `id` input as the id every reference uses. */\nfunction adopt<T extends KxFloatingRoot>(root: T, id: Signal<string | undefined>): T {\n root.contentIdFrom.set(id);\n return root;\n}\n\n/** Where a floating surface goes, and the open/close lifecycle every member shares. */\n@Directive({\n host: {\n popover: 'manual',\n '[id]': 'root.contentId()',\n '[attr.data-state]': 'root.open() ? \"open\" : \"closed\"',\n },\n})\nexport abstract class KxFloatingSurface implements KxLayer {\n abstract readonly root: KxFloatingRoot;\n abstract readonly side: () => KxSide;\n /** Your own id for the surface, static or bound; the trigger's references follow it. Generated when absent. */\n readonly id = input<string | undefined>(undefined);\n /** Alignment along the trigger, logical. */\n readonly align = input<KxAlign>('center');\n /** The gap between the trigger and the surface, in px. */\n readonly offset = input(4, { transform: numberAttribute });\n\n protected readonly el = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n protected readonly doc = inject(DOCUMENT);\n private readonly stack = inject(KxOverlayStack);\n readonly modal = false;\n abstract readonly closesOnFocusOutside: boolean;\n\n private shown = false;\n private release: (() => void) | null = null;\n\n constructor() {\n afterRenderEffect({\n write: () => {\n const open = this.root.open();\n untracked(() => this.sync(open));\n },\n });\n inject(DestroyRef).onDestroy(() => {\n if (this.shown) this.teardown();\n });\n }\n\n surface(): HTMLElement {\n return this.el;\n }\n companions(): readonly (Element | null)[] {\n return [this.root.trigger, this.root.anchor];\n }\n request(reason: KxDismissReason): void {\n this.root.hide(reason);\n }\n\n protected afterShow(): void {}\n protected afterHide(_reason: CloseReason, _focusWasInside: boolean): void {}\n\n private sync(open: boolean): void {\n if (open && !this.shown) {\n this.shown = true;\n this.root.reason = 'programmatic';\n if (typeof this.el.showPopover === 'function' && !this.isShowing()) this.el.showPopover();\n else this.el.setAttribute('data-kx-shown', '');\n const anchor = this.root.anchor ?? this.root.trigger ?? this.el.parentElement;\n if (anchor) this.release = autoPlace(anchor, this.el, { side: () => this.side(), align: () => this.align(), offset: () => this.offset() });\n this.stack.add(this);\n this.afterShow();\n } else if (!open && this.shown) {\n const inside = this.el.contains(this.doc.activeElement);\n this.teardown();\n this.afterHide(this.root.reason, inside);\n this.root.reason = 'programmatic';\n }\n }\n\n private teardown(): void {\n this.shown = false;\n this.stack.remove(this);\n this.release?.();\n this.release = null;\n if (typeof this.el.hidePopover === 'function' && this.isShowing()) this.el.hidePopover();\n this.el.removeAttribute('data-kx-shown');\n }\n\n private isShowing(): boolean {\n try {\n return this.el.matches(':popover-open');\n } catch {\n return this.el.hasAttribute('data-kx-shown');\n }\n }\n}\n\n/* ── popover ────────────────────────────────────────────────────────────── */\n\n/**\n * <kx-popover [(open)]=\"filtersOpen\">\n * <button kxButton variant=\"Outline\" kxPopoverTrigger>Filters</button>\n * <kx-popover-content side=\"bottom\" align=\"start\" label=\"Filters\">…</kx-popover-content>\n * </kx-popover>\n *\n * A non-modal dialog beside its trigger. Pressing the trigger toggles it (`aria-expanded`, `aria-controls`,\n * `aria-haspopup=\"dialog\"`). On open, focus moves to the first `autofocus` element or Tab stop inside it, else\n * to the surface. Because the surface follows its trigger in the DOM, Tab order runs trigger → popover →\n * the rest of the page with no focus guards; when focus leaves both, the popover closes. Escape, a press\n * outside, `kxPopoverClose` and `[(open)]` close it. Escape and the close control return focus to the trigger;\n * a press elsewhere leaves focus where the reader put it.\n *\n * It is never modal and nothing behind it is made inert — content that must hold focus is a dialog.\n */\n@Component({\n selector: 'kx-popover',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: '<ng-content />',\n host: { class: 'kx-overlay-root' },\n})\nexport class KxPopover extends KxFloatingRoot {\n toggle(): void {\n if (this.open()) this.hide('close');\n else this.show();\n }\n}\n\n@Directive({\n selector: 'button[kxPopoverTrigger]',\n host: {\n type: 'button',\n 'aria-haspopup': 'dialog',\n '[attr.aria-expanded]': 'root.open()',\n '[attr.aria-controls]': 'root.contentId()',\n '[attr.data-state]': 'root.open() ? \"open\" : \"closed\"',\n '(click)': 'root.toggle()',\n },\n})\nexport class KxPopoverTrigger {\n readonly root = inject(KxPopover);\n constructor() {\n const el = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n this.root.trigger = el;\n inject(DestroyRef).onDestroy(() => {\n if (this.root.trigger === el) this.root.trigger = null;\n });\n }\n}\n\n/** Positions the popover against this element instead of the trigger. */\n@Directive({ selector: '[kxPopoverAnchor]' })\nexport class KxPopoverAnchor {\n constructor() {\n const root = inject(KxPopover);\n const el = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n root.anchor = el;\n inject(DestroyRef).onDestroy(() => {\n if (root.anchor === el) root.anchor = null;\n });\n }\n}\n\n/** Closes the popover and returns focus to its trigger. */\n@Directive({\n selector: 'button[kxPopoverClose]',\n host: { type: 'button', '(click)': 'root.hide(\"close\")' },\n})\nexport class KxPopoverClose {\n readonly root = inject(KxPopover);\n}\n\n@Component({\n selector: 'kx-popover-content',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: '<ng-content />',\n host: {\n class: 'kx-floating kx-popover',\n role: 'dialog',\n tabindex: '-1',\n '[attr.aria-labelledby]': 'labelledby()',\n // A dialog with no name is announced as just \"dialog\" (WCAG 4.1.2); React's Popover found the same and\n // falls back the same way. The fallback is the floor, not the goal — name it after what is inside.\n '[attr.aria-label]': 'labelledby() ? null : label()',\n },\n})\nexport class KxPopoverContent extends KxFloatingSurface {\n readonly root = adopt(inject(KxPopover), this.id);\n readonly side = input<KxSide>('bottom');\n readonly label = input('Popover');\n /** The id of an element inside that names the popover (a heading); preferred over `label`. */\n readonly labelledby = input<string | null>(null);\n readonly closesOnFocusOutside = true;\n\n protected override afterShow(): void {\n const marked = this.el.querySelector<HTMLElement>('[autofocus]');\n const target = (isFocusTarget(marked) ? marked : null) ?? tabbables(this.el)[0] ?? this.el;\n target.focus();\n }\n\n protected override afterHide(reason: CloseReason, focusWasInside: boolean): void {\n const lost = !activeElement(this.doc);\n if ((reason === 'escape' || reason === 'close' || reason === 'programmatic') && (focusWasInside || lost) && isFocusTarget(this.root.trigger)) {\n this.root.trigger.focus();\n }\n }\n}\n\n/* ── hover intent: tooltip and hover card ───────────────────────────────── */\n\n@Directive()\nexport abstract class KxHoverRoot extends KxFloatingRoot {\n /** ms the pointer rests on the trigger before the surface opens. Keyboard focus opens it at once. */\n abstract readonly openDelay: () => number;\n /** ms after the pointer leaves before the surface closes — the time it has to travel onto the surface. */\n abstract readonly closeDelay: () => number;\n /** Whether losing focus from the trigger closes it (tooltip), or focus may move into it (hover card). */\n protected abstract readonly closesOnBlur: boolean;\n\n private openTimer: ReturnType<typeof setTimeout> | undefined;\n private closeTimer: ReturnType<typeof setTimeout> | undefined;\n\n constructor() {\n super();\n inject(DestroyRef).onDestroy(() => this.clear());\n }\n\n private clear(): void {\n clearTimeout(this.openTimer);\n clearTimeout(this.closeTimer);\n this.openTimer = this.closeTimer = undefined;\n }\n\n /** The pointer reached the trigger. Touch has no hover: a tap is the trigger's own action. */\n enter(event: PointerEvent): void {\n if (event.pointerType === 'touch') return;\n clearTimeout(this.closeTimer);\n if (this.open() || this.openTimer) return;\n this.openTimer = setTimeout(() => {\n this.openTimer = undefined;\n this.show();\n }, this.openDelay());\n }\n /** The pointer left the trigger or the surface: close unless it arrives on the other in time. */\n leave(event: PointerEvent): void {\n if (event.pointerType === 'touch') return;\n clearTimeout(this.openTimer);\n this.openTimer = undefined;\n if (!this.open()) return;\n clearTimeout(this.closeTimer);\n this.closeTimer = setTimeout(() => {\n this.closeTimer = undefined;\n // Hover and keyboard focus are separate reasons to stay open: the pointer leaving does not take a\n // surface away from someone still on it with the keyboard (focus on the trigger, or on a link inside).\n if (!this.keyboardFocusWithin()) this.hide('pointer');\n }, this.closeDelay());\n }\n private keyboardFocusWithin(): boolean {\n const trigger = this.trigger;\n if (!trigger) return false;\n const doc = trigger.ownerDocument;\n const focused = activeElement(doc);\n if (!focused || !(trigger.contains(focused) || doc.getElementById(this.contentId())?.contains(focused))) return false;\n try {\n return focused.matches(':focus-visible');\n } catch {\n return true;\n }\n }\n /** The pointer is on the surface: stay. */\n hold(): void {\n clearTimeout(this.closeTimer);\n }\n /** Keyboard focus opens at once; focus from a press (not `:focus-visible`) does not. */\n focused(el: EventTarget | null): void {\n if (!(el instanceof Element)) return;\n let visible = false;\n try {\n visible = el.matches(':focus-visible');\n } catch {\n visible = true;\n }\n if (!visible) return;\n this.clear();\n this.show();\n }\n blurred(): void {\n if (this.closesOnBlur) {\n this.clear();\n this.hide('blur');\n }\n }\n /** Pressing the trigger acts on it; the surface gets out of the way. */\n pressed(): void {\n this.clear();\n this.hide('press');\n }\n}\n\nconst HOVER_TRIGGER = {\n '(pointerenter)': 'root.enter($event)',\n '(pointerleave)': 'root.leave($event)',\n '(focus)': 'root.focused($event.currentTarget)',\n '(blur)': 'root.blurred()',\n '(pointerdown)': 'root.pressed()',\n};\nconst HOVER_SURFACE = {\n '(pointerenter)': 'root.hold()',\n '(pointerleave)': 'root.leave($event)',\n};\n\nfunction registerTrigger(root: KxFloatingRoot): void {\n const el = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n root.trigger = el;\n inject(DestroyRef).onDestroy(() => {\n if (root.trigger === el) root.trigger = null;\n });\n}\n\n/* ── tooltip ────────────────────────────────────────────────────────────── */\n\n/**\n * <kx-tooltip>\n * <button kxButton variant=\"Ghost\" size=\"icon\" aria-label=\"Copy link\" kxTooltipTrigger>…</button>\n * <kx-tooltip-content>Copies a link anyone in the workspace can open</kx-tooltip-content>\n * </kx-tooltip>\n *\n * The content is the trigger's `aria-describedby` from the start — it stays in the DOM, hidden, while closed —\n * so the description is read on focus whether or not the tooltip is showing, and a touch user gets it too.\n * An icon-only trigger still needs its own name (`aria-label`): a description is not a name.\n *\n * Opens after `openDelay` (700ms, React's) of hover, or at once on keyboard focus. Closes on Escape, on\n * blur, on pressing the trigger, and `closeDelay` (100ms) after the pointer leaves both trigger and tooltip.\n * There is no group \"skip delay\" between neighbouring tooltips (React's provider has one).\n */\n@Component({\n selector: 'kx-tooltip',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: '<ng-content />',\n host: { class: 'kx-overlay-root' },\n})\nexport class KxTooltip extends KxHoverRoot {\n readonly openDelay = input(700, { transform: numberAttribute });\n readonly closeDelay = input(100, { transform: numberAttribute });\n protected readonly closesOnBlur = true;\n}\n\n@Directive({\n selector: '[kxTooltipTrigger]',\n host: { ...HOVER_TRIGGER, '[attr.aria-describedby]': 'describedby()' },\n})\nexport class KxTooltipTrigger {\n readonly root = inject(KxTooltip);\n private readonly own = inject(new HostAttributeToken('aria-describedby'), { optional: true });\n /** The caller's own description, if the element had one, and then the tooltip. */\n protected describedby(): string {\n return [this.own, this.root.contentId()].filter(Boolean).join(' ');\n }\n constructor() {\n registerTrigger(this.root);\n }\n}\n\n@Component({\n selector: 'kx-tooltip-content',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: '<ng-content />',\n host: { ...HOVER_SURFACE, class: 'kx-floating kx-tooltip', role: 'tooltip' },\n})\nexport class KxTooltipContent extends KxFloatingSurface {\n readonly root = adopt(inject(KxTooltip), this.id);\n readonly side = input<KxSide>('top');\n readonly closesOnFocusOutside = false;\n}\n\n/* ── hover card ─────────────────────────────────────────────────────────── */\n\n/**\n * <kx-hover-card>\n * <a kxHoverCardTrigger href=\"/people/ada\">Ada Lovelace</a>\n * <kx-hover-card-content>…</kx-hover-card-content>\n * </kx-hover-card>\n *\n * A preview of what the trigger — a link — leads to. Opens after `openDelay` (700ms) of hover, or at once on\n * keyboard focus, and waits `closeDelay` (300ms) after the pointer leaves, long enough to move onto the card\n * and use a link in it. Focus stays on the trigger; Tab goes from the trigger into the card's links (it\n * follows the trigger in the DOM), and the card closes when focus leaves both. Escape closes it.\n *\n * It is not a description and has no role: the destination page carries the same content, which is how a\n * touch user — who never sees the card — gets it.\n */\n@Component({\n selector: 'kx-hover-card',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: '<ng-content />',\n host: { class: 'kx-overlay-root' },\n})\nexport class KxHoverCard extends KxHoverRoot {\n readonly openDelay = input(700, { transform: numberAttribute });\n readonly closeDelay = input(300, { transform: numberAttribute });\n protected readonly closesOnBlur = false;\n}\n\n@Directive({\n selector: '[kxHoverCardTrigger]',\n host: HOVER_TRIGGER,\n})\nexport class KxHoverCardTrigger {\n readonly root = inject(KxHoverCard);\n constructor() {\n registerTrigger(this.root);\n }\n}\n\n@Component({\n selector: 'kx-hover-card-content',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: '<ng-content />',\n host: { ...HOVER_SURFACE, class: 'kx-floating kx-hover-card' },\n})\nexport class KxHoverCardContent extends KxFloatingSurface {\n readonly root = adopt(inject(KxHoverCard), this.id);\n readonly side = input<KxSide>('bottom');\n readonly closesOnFocusOutside = true;\n}\n","/**\n * @kinetixui/angular — public API.\n *\n * This file is the package's contract, and `scripts/check-platform-source.mjs` reads it: a component may only\n * be declared as an Angular implementation in `components.manifest.json` if its symbol is exported here. That\n * is what stops the manifest, the website and the documentation from advertising an Angular component that\n * does not exist — the failure mode this package was created to end.\n *\n * Every export is a standalone directive or component: import the ones a template uses, nothing more. There is\n * no NgModule and no barrel module, so nothing is pulled in by association.\n */\nexport * from './lib/types';\nexport { KxButton } from './lib/button';\nexport {\n KxAlert,\n KxAlertDescription,\n KxAlertTitle,\n KxBadge,\n KxCard,\n KxCardContent,\n KxCardDescription,\n KxCardFooter,\n KxCardHeader,\n KxCardTitle,\n KxInput,\n KxLabel,\n KxProgress,\n KxSeparator,\n} from './lib/primitives';\nexport {\n KxCheckbox,\n KxSegment,\n KxSegmentedControl,\n KxSwitch,\n KxToggle,\n KxToggleGroup,\n KxToggleGroupItem,\n} from './lib/toggles';\nexport {\n KxAspectRatio,\n KxAvatar,\n KxAvatarFallback,\n KxAvatarGroup,\n KxAvatarImage,\n KxEmpty,\n KxEmptyContent,\n KxEmptyDescription,\n KxEmptyHeader,\n KxEmptyMedia,\n KxEmptyTitle,\n KxKbd,\n KxKbdGroup,\n KxMetric,\n KxQuote,\n KxSkeleton,\n KxSpinner,\n KxTag,\n} from './lib/display';\nexport {\n KxField,\n KxFieldDescription,\n KxFieldLabel,\n KxFieldMessage,\n KxNativeSelect,\n KxNumberInput,\n KxPasswordInput,\n KxRadio,\n KxRadioGroup,\n KxSlider,\n KxTextarea,\n} from './lib/forms';\nexport { KxInputGroup, KxInputGroupAddon, KxInputGroupButton, KxInputGroupInput, KxInputGroupText } from './lib/input-group';\nexport { KxInputOtp } from './lib/input-otp';\nexport { KxRating } from './lib/rating';\nexport { KxTab, KxTabList, KxTabPanel, KxTabs } from './lib/tabs';\nexport type { KxCodeBlockFile } from './lib/content';\nexport {\n KxBanner,\n KxButtonGroup,\n KxButtonGroupSeparator,\n KxButtonGroupText,\n KxCircularProgress,\n KxCodeBlock,\n KxDescriptionList,\n KxDescriptionListItem,\n KxFab,\n KxImage,\n KxInform,\n KxList,\n KxListItem,\n KxMarquee,\n KxMarqueeContent,\n KxPageHeader,\n KxTimeline,\n KxTimelineItem,\n} from './lib/content';\nexport {\n KxAccordion,\n KxAccordionContent,\n KxAccordionItem,\n KxAccordionTrigger,\n KxCollapsible,\n KxCollapsibleContent,\n KxCollapsibleTrigger,\n} from './lib/disclosure';\nexport type { KxStep, KxTocItem } from './lib/navigation';\nexport {\n KxAppBar,\n KxAppBarActions,\n KxAppBarBrand,\n KxAppBarLink,\n KxAppBarNav,\n KxBreadcrumb,\n KxBreadcrumbItem,\n KxBreadcrumbLink,\n KxBreadcrumbList,\n KxBreadcrumbPage,\n KxBreadcrumbSeparator,\n KxFooter,\n KxFooterBottom,\n KxFooterColumn,\n KxFooterColumns,\n KxFooterLink,\n KxNavigationBar,\n KxPagination,\n KxPaginationContent,\n KxPaginationEllipsis,\n KxPaginationItem,\n KxPaginationLink,\n KxPaginationNext,\n KxPaginationPrevious,\n KxStepper,\n KxTabBar,\n KxTabBarItem,\n KxTableOfContents,\n} from './lib/navigation';\nexport type { KxModalType, KxSheetSide } from './lib/dialog';\nexport {\n KxAlertDialog,\n KxAlertDialogAction,\n KxAlertDialogCancel,\n KxAlertDialogContent,\n KxDialog,\n KxDialogClose,\n KxDialogContent,\n KxDialogDescription,\n KxDialogFooter,\n KxDialogHeader,\n KxDialogTitle,\n KxDialogTrigger,\n KxDrawer,\n KxDrawerContent,\n KxModal,\n KxSheet,\n KxSheetContent,\n} from './lib/dialog';\nexport type { KxAlign, KxSide } from './lib/overlay';\nexport {\n KxHoverCard,\n KxHoverCardContent,\n KxHoverCardTrigger,\n KxPopover,\n KxPopoverAnchor,\n KxPopoverClose,\n KxPopoverContent,\n KxPopoverTrigger,\n KxTooltip,\n KxTooltipContent,\n KxTooltipTrigger,\n} from './lib/floating';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["seq","uid","nextId"],"mappings":"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"}