@skra/ui 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (160) hide show
  1. package/LICENSE +201 -0
  2. package/NOTICE +7 -0
  3. package/README.md +39 -0
  4. package/consumer-guide/README.md +84 -0
  5. package/consumer-guide/accessible-names.md +80 -0
  6. package/consumer-guide/forms-and-binding.md +149 -0
  7. package/consumer-guide/layout.md +86 -0
  8. package/consumer-guide/overlays.md +100 -0
  9. package/consumer-guide/setup-and-gotchas.md +103 -0
  10. package/consumer-guide/theming-and-encapsulation.md +115 -0
  11. package/consumer-guide/wrapping-patterns.md +90 -0
  12. package/fesm2022/skra-ui-accordion.mjs +333 -0
  13. package/fesm2022/skra-ui-accordion.mjs.map +1 -0
  14. package/fesm2022/skra-ui-alert.mjs +110 -0
  15. package/fesm2022/skra-ui-alert.mjs.map +1 -0
  16. package/fesm2022/skra-ui-avatar.mjs +83 -0
  17. package/fesm2022/skra-ui-avatar.mjs.map +1 -0
  18. package/fesm2022/skra-ui-badge.mjs +91 -0
  19. package/fesm2022/skra-ui-badge.mjs.map +1 -0
  20. package/fesm2022/skra-ui-button.mjs +67 -0
  21. package/fesm2022/skra-ui-button.mjs.map +1 -0
  22. package/fesm2022/skra-ui-checkbox.mjs +98 -0
  23. package/fesm2022/skra-ui-checkbox.mjs.map +1 -0
  24. package/fesm2022/skra-ui-chip.mjs +82 -0
  25. package/fesm2022/skra-ui-chip.mjs.map +1 -0
  26. package/fesm2022/skra-ui-combobox.mjs +335 -0
  27. package/fesm2022/skra-ui-combobox.mjs.map +1 -0
  28. package/fesm2022/skra-ui-core.mjs +529 -0
  29. package/fesm2022/skra-ui-core.mjs.map +1 -0
  30. package/fesm2022/skra-ui-counter.mjs +53 -0
  31. package/fesm2022/skra-ui-counter.mjs.map +1 -0
  32. package/fesm2022/skra-ui-datepicker.mjs +867 -0
  33. package/fesm2022/skra-ui-datepicker.mjs.map +1 -0
  34. package/fesm2022/skra-ui-dialog.mjs +133 -0
  35. package/fesm2022/skra-ui-dialog.mjs.map +1 -0
  36. package/fesm2022/skra-ui-field.mjs +293 -0
  37. package/fesm2022/skra-ui-field.mjs.map +1 -0
  38. package/fesm2022/skra-ui-icon.mjs +54 -0
  39. package/fesm2022/skra-ui-icon.mjs.map +1 -0
  40. package/fesm2022/skra-ui-input.mjs +42 -0
  41. package/fesm2022/skra-ui-input.mjs.map +1 -0
  42. package/fesm2022/skra-ui-kbd.mjs +44 -0
  43. package/fesm2022/skra-ui-kbd.mjs.map +1 -0
  44. package/fesm2022/skra-ui-layout.mjs +119 -0
  45. package/fesm2022/skra-ui-layout.mjs.map +1 -0
  46. package/fesm2022/skra-ui-link.mjs +29 -0
  47. package/fesm2022/skra-ui-link.mjs.map +1 -0
  48. package/fesm2022/skra-ui-loading-indicator.mjs +24 -0
  49. package/fesm2022/skra-ui-loading-indicator.mjs.map +1 -0
  50. package/fesm2022/skra-ui-menu.mjs +334 -0
  51. package/fesm2022/skra-ui-menu.mjs.map +1 -0
  52. package/fesm2022/skra-ui-multi-select.mjs +179 -0
  53. package/fesm2022/skra-ui-multi-select.mjs.map +1 -0
  54. package/fesm2022/skra-ui-native-select.mjs +123 -0
  55. package/fesm2022/skra-ui-native-select.mjs.map +1 -0
  56. package/fesm2022/skra-ui-popover.mjs +158 -0
  57. package/fesm2022/skra-ui-popover.mjs.map +1 -0
  58. package/fesm2022/skra-ui-progress.mjs +57 -0
  59. package/fesm2022/skra-ui-progress.mjs.map +1 -0
  60. package/fesm2022/skra-ui-radio.mjs +92 -0
  61. package/fesm2022/skra-ui-radio.mjs.map +1 -0
  62. package/fesm2022/skra-ui-rating-display.mjs +81 -0
  63. package/fesm2022/skra-ui-rating-display.mjs.map +1 -0
  64. package/fesm2022/skra-ui-select.mjs +151 -0
  65. package/fesm2022/skra-ui-select.mjs.map +1 -0
  66. package/fesm2022/skra-ui-skeleton.mjs +65 -0
  67. package/fesm2022/skra-ui-skeleton.mjs.map +1 -0
  68. package/fesm2022/skra-ui-star-rating.mjs +110 -0
  69. package/fesm2022/skra-ui-star-rating.mjs.map +1 -0
  70. package/fesm2022/skra-ui-status-dot.mjs +61 -0
  71. package/fesm2022/skra-ui-status-dot.mjs.map +1 -0
  72. package/fesm2022/skra-ui-switch.mjs +94 -0
  73. package/fesm2022/skra-ui-switch.mjs.map +1 -0
  74. package/fesm2022/skra-ui-tabs.mjs +356 -0
  75. package/fesm2022/skra-ui-tabs.mjs.map +1 -0
  76. package/fesm2022/skra-ui-textarea.mjs +81 -0
  77. package/fesm2022/skra-ui-textarea.mjs.map +1 -0
  78. package/fesm2022/skra-ui-toast.mjs +208 -0
  79. package/fesm2022/skra-ui-toast.mjs.map +1 -0
  80. package/fesm2022/skra-ui-tooltip.mjs +252 -0
  81. package/fesm2022/skra-ui-tooltip.mjs.map +1 -0
  82. package/fesm2022/skra-ui-typography.mjs +35 -0
  83. package/fesm2022/skra-ui-typography.mjs.map +1 -0
  84. package/fesm2022/skra-ui.mjs +4 -0
  85. package/fesm2022/skra-ui.mjs.map +1 -0
  86. package/package.json +175 -0
  87. package/types/skra-ui-accordion.d.ts +196 -0
  88. package/types/skra-ui-accordion.d.ts.map +1 -0
  89. package/types/skra-ui-alert.d.ts +81 -0
  90. package/types/skra-ui-alert.d.ts.map +1 -0
  91. package/types/skra-ui-avatar.d.ts +71 -0
  92. package/types/skra-ui-avatar.d.ts.map +1 -0
  93. package/types/skra-ui-badge.d.ts +73 -0
  94. package/types/skra-ui-badge.d.ts.map +1 -0
  95. package/types/skra-ui-button.d.ts +45 -0
  96. package/types/skra-ui-button.d.ts.map +1 -0
  97. package/types/skra-ui-checkbox.d.ts +52 -0
  98. package/types/skra-ui-checkbox.d.ts.map +1 -0
  99. package/types/skra-ui-chip.d.ts +60 -0
  100. package/types/skra-ui-chip.d.ts.map +1 -0
  101. package/types/skra-ui-combobox.d.ts +95 -0
  102. package/types/skra-ui-combobox.d.ts.map +1 -0
  103. package/types/skra-ui-core.d.ts +314 -0
  104. package/types/skra-ui-core.d.ts.map +1 -0
  105. package/types/skra-ui-counter.d.ts +33 -0
  106. package/types/skra-ui-counter.d.ts.map +1 -0
  107. package/types/skra-ui-datepicker.d.ts +164 -0
  108. package/types/skra-ui-datepicker.d.ts.map +1 -0
  109. package/types/skra-ui-dialog.d.ts +59 -0
  110. package/types/skra-ui-dialog.d.ts.map +1 -0
  111. package/types/skra-ui-field.d.ts +181 -0
  112. package/types/skra-ui-field.d.ts.map +1 -0
  113. package/types/skra-ui-icon.d.ts +38 -0
  114. package/types/skra-ui-icon.d.ts.map +1 -0
  115. package/types/skra-ui-input.d.ts +22 -0
  116. package/types/skra-ui-input.d.ts.map +1 -0
  117. package/types/skra-ui-kbd.d.ts +33 -0
  118. package/types/skra-ui-kbd.d.ts.map +1 -0
  119. package/types/skra-ui-layout.d.ts +86 -0
  120. package/types/skra-ui-layout.d.ts.map +1 -0
  121. package/types/skra-ui-link.d.ts +20 -0
  122. package/types/skra-ui-link.d.ts.map +1 -0
  123. package/types/skra-ui-loading-indicator.d.ts +9 -0
  124. package/types/skra-ui-loading-indicator.d.ts.map +1 -0
  125. package/types/skra-ui-menu.d.ts +116 -0
  126. package/types/skra-ui-menu.d.ts.map +1 -0
  127. package/types/skra-ui-multi-select.d.ts +47 -0
  128. package/types/skra-ui-multi-select.d.ts.map +1 -0
  129. package/types/skra-ui-native-select.d.ts +74 -0
  130. package/types/skra-ui-native-select.d.ts.map +1 -0
  131. package/types/skra-ui-popover.d.ts +57 -0
  132. package/types/skra-ui-popover.d.ts.map +1 -0
  133. package/types/skra-ui-progress.d.ts +41 -0
  134. package/types/skra-ui-progress.d.ts.map +1 -0
  135. package/types/skra-ui-radio.d.ts +54 -0
  136. package/types/skra-ui-radio.d.ts.map +1 -0
  137. package/types/skra-ui-rating-display.d.ts +56 -0
  138. package/types/skra-ui-rating-display.d.ts.map +1 -0
  139. package/types/skra-ui-select.d.ts +43 -0
  140. package/types/skra-ui-select.d.ts.map +1 -0
  141. package/types/skra-ui-skeleton.d.ts +42 -0
  142. package/types/skra-ui-skeleton.d.ts.map +1 -0
  143. package/types/skra-ui-star-rating.d.ts +71 -0
  144. package/types/skra-ui-star-rating.d.ts.map +1 -0
  145. package/types/skra-ui-status-dot.d.ts +62 -0
  146. package/types/skra-ui-status-dot.d.ts.map +1 -0
  147. package/types/skra-ui-switch.d.ts +54 -0
  148. package/types/skra-ui-switch.d.ts.map +1 -0
  149. package/types/skra-ui-tabs.d.ts +191 -0
  150. package/types/skra-ui-tabs.d.ts.map +1 -0
  151. package/types/skra-ui-textarea.d.ts +55 -0
  152. package/types/skra-ui-textarea.d.ts.map +1 -0
  153. package/types/skra-ui-toast.d.ts +140 -0
  154. package/types/skra-ui-toast.d.ts.map +1 -0
  155. package/types/skra-ui-tooltip.d.ts +90 -0
  156. package/types/skra-ui-tooltip.d.ts.map +1 -0
  157. package/types/skra-ui-typography.d.ts +17 -0
  158. package/types/skra-ui-typography.d.ts.map +1 -0
  159. package/types/skra-ui.d.ts +3 -0
  160. package/types/skra-ui.d.ts.map +1 -0
@@ -0,0 +1,47 @@
1
+ import * as _skra_ui_core from '@skra/ui/core';
2
+ import { _SkraSelectBase, SkraListboxKeyboardItem } from '@skra/ui/core';
3
+ export { SkraOption, SkraOptionDetail, SkraOptionLeading, SkraSelectTrigger } from '@skra/ui/core';
4
+ import * as _angular_core from '@angular/core';
5
+
6
+ /**
7
+ * SkraMultiSelect — a custom MULTI-select listbox: the WAI-ARIA APG multi-selectable listbox combobox.
8
+ * The multi-cardinality sibling of `skra-select` over the shared `_SkraSelectBase` (**ADR 0046** —
9
+ * cardinality split: a separate component with an HONEST `readonly T[]` value contract, NOT a `multiple`
10
+ * flag). The trigger (`role="combobox"`) opens a top-layer listbox panel (`popover="auto"`, ADR 0044,
11
+ * `aria-multiselectable="true"`) of the SAME projected `skra-option` children — reused verbatim; the
12
+ * option swaps its indicator to a checkbox via the `SkraListboxPanel.multiple` hint.
13
+ *
14
+ * - **Value (ADR 037):** `value = input<readonly T[]>([])` + `valueChange = output<readonly T[]>()` —
15
+ * consumer-owned, no `@angular/forms`. Selection is membership (`compareWith` per element).
16
+ * - **Toggle (ADR 0046):** picking an option toggles its membership and KEEPS THE PANEL OPEN (the one
17
+ * behavioural divergence from single-select, which closes).
18
+ * - **Trigger summary (ADR 0045 / 033):** comma-joined `getLabel()` of selected options — the VALUE
19
+ * display, never the accessible name. Count-style / chips → the opt-in `[skraSelectTrigger]` recipe.
20
+ *
21
+ * Full contract: adr/specs/component-multi-select-spec.md.
22
+ */
23
+ declare class SkraMultiSelect<T = unknown> extends _SkraSelectBase<T> {
24
+ /** Consumer-owned ARRAY value channel (ADR 037) — default `[]` (never undefined). */
25
+ readonly value: _angular_core.InputSignal<readonly T[]>;
26
+ /** Fires ONLY on user toggle — emits a NEW array; never on a programmatic `value()` change (ADR 037). */
27
+ readonly valueChange: _angular_core.OutputEmitterRef<readonly T[]>;
28
+ /** Cardinality hint (ADR 0046) — multi-select (drives the option checkbox indicator + aria-multiselectable). */
29
+ readonly multiple = true;
30
+ /** The options whose value is a member of `value()` — feeds the trigger summary + seed. */
31
+ protected readonly selectedOptions: _angular_core.Signal<_skra_ui_core.SkraOption<any>[]>;
32
+ /** Comma-joined identity labels of the selected options (value display, ADR 0045 — language-neutral). */
33
+ protected readonly summary: _angular_core.Signal<string>;
34
+ protected readonly triggerContext: _angular_core.Signal<{
35
+ $implicit: readonly T[];
36
+ options: _skra_ui_core.SkraOption<any>[];
37
+ }>;
38
+ constructor();
39
+ isSelected(value: unknown): boolean;
40
+ selectValue(value: unknown): void;
41
+ protected activeSeedItem(): SkraListboxKeyboardItem | null;
42
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SkraMultiSelect<any>, never>;
43
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SkraMultiSelect<any>, "skra-multi-select", ["skraMultiSelect"], { "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; }, never, ["*"], true, never>;
44
+ }
45
+
46
+ export { SkraMultiSelect };
47
+ //# sourceMappingURL=skra-ui-multi-select.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skra-ui-multi-select.d.ts","sources":["../../../../libs/ui/multi-select/src/lib/multi-select/multi-select.ts"],"mappings":";;;;;AAmBA;;;;;;;;;;;;;;;;AAgBG;AACH,cAyDa,eAAe,sBAAsB,eAAe;;oBAEjD,aAAA,CAAA,WAAA;;0BAEM,aAAA,CAAA,gBAAA;;;;AAKpB,wCAAkC,aAAA,CAAA,MAAA,CAAA,aAAA,CAAA,UAAA;;AAKlC,gCAA0B,aAAA,CAAA,MAAA;uCAMO,aAAA,CAAA,MAAA;;;AAG7B;;AA0BJ;AAIA;AASA,gCAA4B,uBAAuB;oDA9DxC,eAAe;sDAAf,eAAe;AAiE3B;;;;","names":[]}
@@ -0,0 +1,74 @@
1
+ import { SkraFieldContext } from '@skra/ui/field';
2
+ import * as i0 from '@angular/core';
3
+
4
+ /**
5
+ * Wires a native `<select>` inside `<skra-field>` to SkraFieldContext (ADR 013).
6
+ * Tier 1 Foundations primitive — **single-select only**: a dropdown, or a
7
+ * single-select scrolling listbox via the native `[size]` attribute.
8
+ *
9
+ * Native `[multiple]` is deliberately NOT supported (the directive rejects it,
10
+ * see below). Native `<select multiple>` UX is not production-grade and cannot
11
+ * be fixed at the native-`<select>` tier: selection requires modifier keys or
12
+ * drag, the plain-click-toggle affordance exists only for a bare `<select
13
+ * multiple>` in some engines (and breaks with an explicit `[size]`), and the
14
+ * option markers are UA-drawn / unstylable cross-browser. Multi-select — chip
15
+ * display, search, custom option templates, and a styleable per-row checkbox —
16
+ * is wholly a Tier 2 `skra-select` (CDK listbox) concern per
17
+ * `adr/specs/0039-select-directive-spec.md` §1.1 / §4.1.
18
+ *
19
+ * <skra-field>
20
+ * <label skraLabelFor>Country</label>
21
+ * <select skraSelect [value]="country()" (change)="country.set($any($event.target).value)">
22
+ * <option value="pl">Poland</option>
23
+ * <option value="de">Germany</option>
24
+ * </select>
25
+ * </skra-field>
26
+ *
27
+ * Native `<select>` is the only web-platform widget whose dropdown renders in
28
+ * the OS / browser top-layer, above modal `<dialog>`, above Shadow DOM
29
+ * boundaries, above z-index stacking contexts. By staying native at Tier 1 we
30
+ * inherit that for free — Tier 2 custom listbox will solve the same problem
31
+ * via CDK overlay + Top Layer API.
32
+ *
33
+ * Value channel stays consumer-owned per ADR 037: bind via native `[value]` +
34
+ * `(change)`, Reactive Forms `formControlName`, Signal Forms `[formField]`,
35
+ * or `[(ngModel)]` — all work orthogonally.
36
+ *
37
+ * `readonly` is ARIA-only because HTML spec does not apply native `[readonly]`
38
+ * to `<select>` (same gotcha as `<input type="checkbox|radio">`). Unlike a text
39
+ * input, though, a native `<select>` is an *uncontrolled* widget: if the listbox
40
+ * opens and the user picks an option, the displayed value changes regardless of
41
+ * the consumer's binding — so "consumer prevents change" cannot actually hold a
42
+ * native select readonly. The directive therefore enforces readonly behaviourally
43
+ * (blocks the picker from opening / the value from changing — see
44
+ * `blockWhenReadonly` / `blockKeyWhenReadonly`), mirroring the imperative
45
+ * `el.disabled` enforcement below. Both states are made non-interactive; only
46
+ * readonly stays focusable + un-greyed and presents as the bare value. This is
47
+ * interaction integrity for the control's own state — NOT a value channel, so the
48
+ * ADR 037 no-`@angular/forms` / no-CVA boundary is untouched.
49
+ */
50
+ declare class SkraNativeSelect {
51
+ private readonly el;
52
+ readonly context: SkraFieldContext;
53
+ constructor();
54
+ /**
55
+ * Readonly: suppress the pointer affordance that opens the native listbox.
56
+ * `preventDefault` on `mousedown` stops the picker from opening (and, on a
57
+ * native select, focus-on-click — Tab focus still works, which is the right
58
+ * trade-off for a value-display control).
59
+ */
60
+ protected blockWhenReadonly(event: Event): void;
61
+ /**
62
+ * Readonly: suppress every keyboard affordance that opens or mutates the
63
+ * select, while letting Tab through for focus traversal. Space / Enter /
64
+ * Alt+ArrowDown open the listbox; bare Arrows + first-letter typeahead change
65
+ * the value inline without opening it — all are value-changing on a native
66
+ * select, so all are blocked in readonly.
67
+ */
68
+ protected blockKeyWhenReadonly(event: KeyboardEvent): void;
69
+ static ɵfac: i0.ɵɵFactoryDeclaration<SkraNativeSelect, never>;
70
+ static ɵcmp: i0.ɵɵComponentDeclaration<SkraNativeSelect, "select[skraSelect]", never, {}, {}, never, ["*"], true, never>;
71
+ }
72
+
73
+ export { SkraNativeSelect };
74
+ //# sourceMappingURL=skra-ui-native-select.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skra-ui-native-select.d.ts","sources":["../../../../libs/ui/native-select/src/lib/select/select.ts"],"mappings":";;;AAWA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6CG;AACH,cAwBa,gBAAgB;AAC3B;sBACgB,gBAAA;;AA2BhB;;;;;AAKG;AACH,uCAAmC,KAAK;AAIxC;;;;;;AAMG;AACH,0CAAsC,aAAa;yCA9CxC,gBAAgB;2CAAhB,gBAAgB;AAmD5B;;;;","names":[]}
@@ -0,0 +1,57 @@
1
+ import * as i0 from '@angular/core';
2
+ import { SkraPlacement } from '@skra/ui/core';
3
+ export { SkraPlacement } from '@skra/ui/core';
4
+
5
+ /**
6
+ * SkraPopover — a NON-MODAL, anchored panel of arbitrary (interactive) content, rendered in the
7
+ * browser TOP LAYER via the native Popover API (`popover="auto"`), per ADR 0044. It is the middle
8
+ * ground between Tooltip (supplementary, non-interactive, hover/focus) and the page-blocking modal
9
+ * Dialog.
10
+ *
11
+ * SHAPE (scope 2026-06-06): a Component on the PANEL with projected content — NOT a directive on the
12
+ * trigger + `TemplateRef`. The trigger is the consumer's own button linked by the native
13
+ * `popovertarget` attribute (zero Forge trigger API); toggle, light-dismiss (pointer-outside),
14
+ * Escape and invocation-order stacking are ALL platform-owned (contrast Tooltip's `popover="manual"`,
15
+ * which hand-wires Escape). The consumer MUST give `<skra-popover>` an `id` so `popovertarget` can
16
+ * reference it.
17
+ *
18
+ * <button skraButton popovertarget="user-menu">Account</button>
19
+ * <skra-popover id="user-menu"> …interactive content… </skra-popover>
20
+ *
21
+ * Forge owns only: the token-driven surface (see `popover.scss`), positioning via `SkraPositioner`
22
+ * (geometry-only inline; ADR 0044 §3 rules 4–5), and the disclosure ARIA on the trigger
23
+ * (`aria-expanded` / `aria-controls`). Focus is NOT trapped and NOT force-moved (non-modal — ADR 0044
24
+ * §3 rule 8); reachability + focus-return are native to the Popover API. Panel naming is the
25
+ * consumer's `aria-labelledby` → projected heading (ADR 033 container carve-out — no `ariaLabel`
26
+ * input). A right-click context menu is NOT a Popover concern (→ `skra-menu` + recipe; SRP + WCAG).
27
+ *
28
+ * Full contract: adr/specs/component-popover-spec.md.
29
+ */
30
+ declare class SkraPopover {
31
+ /** Placement intent; `flip`/`shift` adjust at runtime. */
32
+ readonly placement: i0.InputSignal<SkraPlacement>;
33
+ private readonly host;
34
+ private readonly renderer;
35
+ /** The consumer's `[popovertarget]` button, resolved once (lazily-idempotent via `resolved`). */
36
+ private trigger;
37
+ private resolved;
38
+ private positioner?;
39
+ constructor();
40
+ private readonly onToggleNative;
41
+ private onOpen;
42
+ private onClose;
43
+ /**
44
+ * Resolve the `[popovertarget]` trigger and establish the disclosure ARIA on it (sanctioned a11y
45
+ * wiring, ADR 013-style — not style mutation). Idempotent: runs at most once. Returns the trigger
46
+ * (or null for an orphan popover, dev-warned once).
47
+ */
48
+ private ensureTrigger;
49
+ /** Read a length comp token (px/rem) off the host computed style for the positioner. */
50
+ private cssLenPx;
51
+ private teardown;
52
+ static ɵfac: i0.ɵɵFactoryDeclaration<SkraPopover, never>;
53
+ static ɵcmp: i0.ɵɵComponentDeclaration<SkraPopover, "skra-popover", ["skraPopover"], { "placement": { "alias": "placement"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
54
+ }
55
+
56
+ export { SkraPopover };
57
+ //# sourceMappingURL=skra-ui-popover.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skra-ui-popover.d.ts","sources":["../../../../libs/ui/popover/src/lib/popover/popover.ts"],"mappings":";;;;AAoBA;;;;;;;;;;;;;;;;;;;;;;;;AAwBG;AACH,cAkBa,WAAW;;wBAEJA,EAAA,CAAA,WAAA,CAAA,aAAA;AAElB;AACA;;;;;;AAqBA;AAKA;AAoBA;AAQA;;;;AAIG;AACH;;AAyCA;AAaA;yCAtHW,WAAW;2CAAX,WAAW;AA8HvB;;;;","names":["_angular_core"]}
@@ -0,0 +1,41 @@
1
+ import * as _angular_core from '@angular/core';
2
+
3
+ /**
4
+ * `progress[skraProgress]` — a determinate, horizontal task-completion bar (Wave 2,
5
+ * `libs/ui/indicators`). Shows the known progress of a finite task (file upload, wizard
6
+ * "step 3 of 5", import job) as a fill from 0 → `value` / `max`.
7
+ *
8
+ * SRP-distinct from `[skraLoadingIndicator]` (ADR 028): that primitive is the
9
+ * *indeterminate* "host is busy" spinner injected into another component's `loading()`
10
+ * slot; SkraProgress is the *determinate* "task is N% complete" standalone bar. The two
11
+ * are complementary — see `adr/specs/component-progress-spec.md` § SRP boundary.
12
+ *
13
+ * **Why a Component on the native `<progress>` host** (ADR 040), not a `<div role="progressbar">`:
14
+ * 1. ADR 021 (CSP): the fill width is a continuous `value/max` length. A custom element would
15
+ * force `[style.--progress-value]` (forbidden) or a class/`data-*`-per-percent hack. Native
16
+ * `<progress value max>` lets the BROWSER compute the fill width on its
17
+ * `::-webkit-progress-value` / `::-moz-progress-bar` pseudo — zero author inline-style.
18
+ * 2. Free a11y: the native host carries `role="progressbar"` + `aria-valuenow`/`-valuemin`/
19
+ * `-valuemax` with no author ARIA (native-attr-first, boundary #9).
20
+ *
21
+ * Non-interactive: `<progress>` is non-focusable, so the State Surface is all-N/A (no
22
+ * `disabled`/`loading`/`severity` in MVP — those are deferred / belong to other atoms).
23
+ *
24
+ * Naming (ADR 033): the consumer associates a `<label for>` / `aria-labelledby` (passed through
25
+ * to the host). No `SkraFieldContext` injection (a progress bar is a read-only display, not a
26
+ * form field); no `ariaLabel` input.
27
+ *
28
+ * `value`/`max` are plain consumer-driven inputs (ADR 037 — agnostic; wire the source from any
29
+ * signal/form strategy). Native `<progress>` clamps `value` to `[0, max]`, so no author clamp.
30
+ */
31
+ declare class SkraProgress {
32
+ /** Current completion, reflected to the native `value` attribute (native clamps to [0, max]). */
33
+ readonly value: _angular_core.InputSignal<number>;
34
+ /** Upper bound, reflected to the native `max` attribute. Drives native `aria-valuemax`. */
35
+ readonly max: _angular_core.InputSignal<number>;
36
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SkraProgress, never>;
37
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SkraProgress, "progress[skraProgress]", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
38
+ }
39
+
40
+ export { SkraProgress };
41
+ //# sourceMappingURL=skra-ui-progress.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skra-ui-progress.d.ts","sources":["../../../../libs/ui/progress/src/lib/progress/progress.ts"],"mappings":";;AAOA;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2BG;AACH,cAgBa,YAAY;;oBAET,aAAA,CAAA,WAAA;;kBAGF,aAAA,CAAA,WAAA;oDALD,YAAY;sDAAZ,YAAY;AAMxB;;;;","names":[]}
@@ -0,0 +1,54 @@
1
+ import { SkraFieldContext } from '@skra/ui/field';
2
+ import * as i0 from '@angular/core';
3
+
4
+ /**
5
+ * Wires a native `<input type="radio">` to SkraFieldContext when inside
6
+ * `<skra-field>`, or stands alone with no cascade. Per ADR 039/040, Forge ships
7
+ * no `<skra-radio>` / `<skra-radio-group>` wrappers — this is a Component-on-
8
+ * the-native-host (`<input>` is void → `template: ''`, ADR 040 §2) carrying its
9
+ * own `radio.scss` via Emulated encapsulation. Radios are
10
+ * grouped via native `<fieldset skraFieldset>` + `<legend skraLegend>`,
11
+ * coordination happens through the shared `name` attribute (HTML-native), and
12
+ * one-of-N value selection is consumer-owned per ADR 037.
13
+ *
14
+ * <fieldset skraFieldset>
15
+ * <legend skraLegend>Choose plan</legend>
16
+ * <skra-field>
17
+ * <input type="radio" skraRadio name="plan" value="free"
18
+ * [checked]="plan() === 'free'" (change)="plan.set('free')" />
19
+ * <label skraLabelFor>Free</label>
20
+ * </skra-field>
21
+ * <skra-field>
22
+ * <input type="radio" skraRadio name="plan" value="pro"
23
+ * [checked]="plan() === 'pro'" (change)="plan.set('pro')" />
24
+ * <label skraLabelFor>Pro</label>
25
+ * </skra-field>
26
+ * </fieldset>
27
+ *
28
+ * Toggle state (`checked`) is NOT reflected as `data-skra-*` — slice CSS uses
29
+ * the native `:checked` pseudo-class. Browser handles `aria-checked` natively.
30
+ */
31
+ declare class SkraRadio {
32
+ private readonly el;
33
+ readonly context: SkraFieldContext | null;
34
+ constructor();
35
+ /**
36
+ * Readonly enforcement — native radio has no `[readonly]`, so without this the
37
+ * `aria-readonly` we announce would be a lie (the user could still change the
38
+ * selection). `preventDefault` on `click` blocks the selection change from both
39
+ * pointer and Space/Enter (keyboard activation dispatches a click on form
40
+ * controls). Mirrors the `<select skraSelect>` readonly guard.
41
+ */
42
+ protected blockWhenReadonly(event: Event): void;
43
+ /**
44
+ * Arrow keys move selection between radios in a `name` group WITHOUT a click,
45
+ * so they need a separate guard. Block every key except `Tab` (focus traversal)
46
+ * when readonly.
47
+ */
48
+ protected blockKeyWhenReadonly(event: KeyboardEvent): void;
49
+ static ɵfac: i0.ɵɵFactoryDeclaration<SkraRadio, never>;
50
+ static ɵcmp: i0.ɵɵComponentDeclaration<SkraRadio, "input[type=\"radio\"][skraRadio]", never, {}, {}, never, never, true, never>;
51
+ }
52
+
53
+ export { SkraRadio };
54
+ //# sourceMappingURL=skra-ui-radio.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skra-ui-radio.d.ts","sources":["../../../../libs/ui/radio/src/lib/radio/radio.ts"],"mappings":";;;AAUA;;;;;;;;;;;;;;;;;;;;;;;;;;AA0BG;AACH,cAqBa,SAAS;AACpB;sBACgB,gBAAA;;AAehB;;;;;;AAMG;AACH,uCAAmC,KAAK;AAIxC;;;;AAIG;AACH,0CAAsC,aAAa;yCAjCxC,SAAS;2CAAT,SAAS;AAsCrB;;;;","names":[]}
@@ -0,0 +1,56 @@
1
+ import * as _angular_core from '@angular/core';
2
+
3
+ type RatingDisplaySize = 'sm' | 'md' | 'lg';
4
+ /**
5
+ * `<skra-rating-display>` — a static, non-interactive **fractional** rating display
6
+ * ("4.3 out of 5 stars"). The read-only counterpart to `skra-star-rating` (the
7
+ * interactive whole-star INPUT in `libs/ui/forms`); a SEPARATE atom by atom-granularity
8
+ * (opposite a11y contract `role="img"` vs `radiogroup`; float vs int; no interaction).
9
+ * Third resident of `libs/ui/data-display`, beside Avatar + StatusDot. See
10
+ * `adr/specs/component-rating-display-spec.md`.
11
+ *
12
+ * **Element, not a decorated native (ADR 012):** there is no native rating element, like
13
+ * StatusDot/Avatar. NOT a Web Component (ADR 000).
14
+ *
15
+ * **Value consumer-owned (ADR 037):** `value` is a plain `input<number>()` (float). The atom
16
+ * owns no value, no `ControlValueAccessor`, no `@angular/forms`.
17
+ *
18
+ * **Fractional fill is CSP-clean (ADR 021):** the fill is QUANTIZED to a `data-skra-fill`
19
+ * bucket reflected on the host (`{0,5,…,100}`); the SCSS maps each bucket to the fill-overlay
20
+ * width. Zero `[style.--var]`, zero inline style — a bounded value is quantizable, so no
21
+ * geometry exception is taken. State Surface all-N/A (non-focusable display; Badge/StatusDot
22
+ * precedent).
23
+ *
24
+ * **Accessible name (ADR 033 Path 3 — the StatusDot/Avatar contract):** the host carries NO
25
+ * default ARIA. The consumer declares semantics:
26
+ * - decorative (Mode A, beside a visible value like "4.3") → `aria-hidden="true"`;
27
+ * - meaningful (Mode B, the stars are the sole carrier) → `role="img"` + `aria-label`
28
+ * TOGETHER (e.g. `aria-label="Rated 4.3 out of 5"`).
29
+ * The inner star glyphs are always decorative. NO `ariaLabel` input (boundary #8) — the label
30
+ * is consumer-owned + localizable (the agnostic doctrine; Forge does not hard-code "out of N").
31
+ *
32
+ * **Look is skin-owned:** glyph colours + sizes come from the shared family surface
33
+ * (`comp/star-rating.json`). NO `intent`/`emphasis`/`color`/`variant` look-inputs.
34
+ */
35
+ declare class SkraRatingDisplay {
36
+ /** The rating to display — FLOAT (e.g. 4.3). Consumer-owned (ADR 037); clamped to [0, max]. */
37
+ readonly value: _angular_core.InputSignal<number>;
38
+ /** Number of stars (semantic count). */
39
+ readonly max: _angular_core.InputSignal<number>;
40
+ /** ADR 035 size axis — the only variant axis. */
41
+ readonly size: _angular_core.InputSignal<RatingDisplaySize>;
42
+ /** Star slots [1..max] — both layers render the same count. */
43
+ readonly stars: _angular_core.Signal<number[]>;
44
+ /**
45
+ * Fill percentage quantized to 5% buckets (`{0,5,…,100}`) — reflected as `data-skra-fill`,
46
+ * mapped to the overlay width by the SCSS. 4.3/5 → 86% → bucket 85 (visually exact-enough).
47
+ * A bounded, quantizable value is exactly what ADR 021 reflection is for — no style exception.
48
+ */
49
+ readonly fillBucket: _angular_core.Signal<number>;
50
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SkraRatingDisplay, never>;
51
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SkraRatingDisplay, "skra-rating-display", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
52
+ }
53
+
54
+ export { SkraRatingDisplay };
55
+ export type { RatingDisplaySize };
56
+ //# sourceMappingURL=skra-ui-rating-display.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skra-ui-rating-display.d.ts","sources":["../../../../libs/ui/rating-display/src/lib/rating-display/rating-display.ts"],"mappings":";;AAQM,KAAM,iBAAiB;AAE7B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BG;AACH,cAca,iBAAiB;;oBAEd,aAAA,CAAA,WAAA;;kBAEF,aAAA,CAAA,WAAA;;mBAEC,aAAA,CAAA,WAAA,CAAA,iBAAA;;oBAGC,aAAA,CAAA,MAAA;AAKd;;;;AAIG;yBACgB,aAAA,CAAA,MAAA;oDAnBR,iBAAiB;sDAAjB,iBAAiB;AA0B7B;;;;","names":[]}
@@ -0,0 +1,43 @@
1
+ import * as _skra_ui_core from '@skra/ui/core';
2
+ import { _SkraSelectBase, SkraListboxKeyboardItem } from '@skra/ui/core';
3
+ export { SkraOption, SkraOptionDetail, SkraOptionLeading, SkraSelectTrigger } from '@skra/ui/core';
4
+ import * as _angular_core from '@angular/core';
5
+
6
+ /**
7
+ * SkraSelect — a custom single-select listbox: the WAI-ARIA APG **Select-Only Combobox** pattern. A
8
+ * value-display **trigger** (`role="combobox"`) opens a top-layer **listbox** panel (Popover API,
9
+ * `popover="auto"`, ADR 0044) of projected `skra-option` children. The thin single-select concrete
10
+ * over `_SkraSelectBase` (ADR 0046 — cardinality split): it adds the honest `value: T` channel + the
11
+ * replace-and-close selection model; everything else (overlay/keyboard/field substrate) lives in the
12
+ * shared base, shared verbatim with `skra-multi-select`.
13
+ *
14
+ * - **Value (ADR 037):** `value` is a consumer-owned `input<T>()` + `valueChange` output — NO
15
+ * `@angular/forms`, no CVA. Selection is signal-derived; equality is a strategy seam (`Object.is`
16
+ * default + opt-in `compareWith`).
17
+ * - **Trigger content (ADR 0045):** default = the selected option's `getLabel()` text (emoji/glyph
18
+ * leading free); rich non-text triggers opt in via `<ng-template skraSelectTrigger>`.
19
+ *
20
+ * Full contract: adr/specs/component-select-spec.md.
21
+ */
22
+ declare class SkraSelect<T = unknown> extends _SkraSelectBase<T> {
23
+ /** Consumer-owned value channel (ADR 037). */
24
+ readonly value: _angular_core.InputSignal<T | undefined>;
25
+ /** Fires ONLY on user selection — never on a programmatic `value()` change (ADR 037). */
26
+ readonly valueChange: _angular_core.OutputEmitterRef<T>;
27
+ /** Cardinality hint (ADR 0046) — single-select. */
28
+ readonly multiple = false;
29
+ /** The option whose value matches `value()` (ADR 037 selection model) — feeds the trigger. */
30
+ protected readonly selectedOption: _angular_core.Signal<_skra_ui_core.SkraOption<any> | null>;
31
+ protected readonly triggerContext: _angular_core.Signal<{
32
+ $implicit: T | undefined;
33
+ option: _skra_ui_core.SkraOption<any> | null;
34
+ }>;
35
+ isSelected(value: unknown): boolean;
36
+ selectValue(value: unknown): void;
37
+ protected activeSeedItem(): SkraListboxKeyboardItem | null;
38
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SkraSelect<any>, never>;
39
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SkraSelect<any>, "skra-select", ["skraSelect"], { "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; }, never, ["*"], true, never>;
40
+ }
41
+
42
+ export { SkraSelect };
43
+ //# sourceMappingURL=skra-ui-select.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skra-ui-select.d.ts","sources":["../../../../libs/ui/select/src/lib/select/select.ts"],"mappings":";;;;;AAgBA;;;;;;;;;;;;;;;AAeG;AACH,cAwDa,UAAU,sBAAsB,eAAe;;oBAE5C,aAAA,CAAA,WAAA;;0BAEM,aAAA,CAAA,gBAAA;;;;AAKpB,uCAAiC,aAAA,CAAA,MAAA,CAAA,aAAA,CAAA,UAAA;uCAIA,aAAA,CAAA,MAAA;;;AAG7B;AAGJ;AAKA;AAKA,gCAA4B,uBAAuB;oDA7BxC,UAAU;sDAAV,UAAU;AAgCtB;;;;","names":[]}
@@ -0,0 +1,42 @@
1
+ import * as _angular_core from '@angular/core';
2
+
3
+ type SkraSkeletonShape = 'text' | 'block' | 'circle';
4
+ /**
5
+ * `<skra-skeleton>` — a decorative content placeholder (Wave 2, `libs/ui/indicators`).
6
+ * Occupies the place of not-yet-loaded content with an animated, layout-shaped placeholder so
7
+ * the layout does not shift on load (CLS) and the user perceives that content is coming.
8
+ *
9
+ * Third resident of the loading family, with a distinct SRP: `[skraLoadingIndicator]` (ADR 028)
10
+ * is the *indeterminate* "host is busy" spinner; `SkraProgress` is the *determinate* "task is
11
+ * N% complete" bar; **SkraSkeleton is the *content placeholder*** ("the content hasn't arrived —
12
+ * here is its shape"). See `adr/specs/component-skeleton-spec.md` § SRP boundary.
13
+ *
14
+ * **A custom element, NOT a Component-on-native-host** (ADR 040): a skeleton has no semantic
15
+ * native equivalent and is purely presentational, so it follows the custom-element atom model
16
+ * (Badge/Chip/Alert precedent). The host is a layout container that renders its own inner
17
+ * `.skra-skeleton__bar` element(s) — which is why a void-host directive was rejected: the
18
+ * multi-line `text` shape needs internal structure.
19
+ *
20
+ * **Decorative a11y (ADR 033):** the host is `aria-hidden="true"` — a skeleton conveys no
21
+ * information to assistive tech (the decorative-icon exemption). The "loading" announcement
22
+ * belongs to the consumer's content **container** (`aria-busy="true"`), never to the skeleton.
23
+ *
24
+ * **Sizing is container/`em`-driven (ADR 021 — the CSP reason there are no `width`/`height`
25
+ * inputs):** `text` line bars are `em`-relative (they inherit the surrounding font-size) at full
26
+ * container width; `block`/`circle` fill a host the **consumer** sizes (e.g. via `[skraBox]`).
27
+ * The host therefore never carries an inline `style`. State Surface all-N/A (non-interactive).
28
+ */
29
+ declare class SkraSkeleton {
30
+ /** The kind of content faked — selects placeholder geometry, never colour/theme (not a look-input). */
31
+ readonly shape: _angular_core.InputSignal<SkraSkeletonShape>;
32
+ /** `text` only — number of line bars (multi-line paragraph). Ignored for `block`/`circle`. */
33
+ readonly lines: _angular_core.InputSignal<number>;
34
+ /** The bars to render: `lines` bars for text (≥1), a single bar for block/circle. */
35
+ protected readonly bars: _angular_core.Signal<number[]>;
36
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SkraSkeleton, never>;
37
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SkraSkeleton, "skra-skeleton", never, { "shape": { "alias": "shape"; "required": false; "isSignal": true; }; "lines": { "alias": "lines"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
38
+ }
39
+
40
+ export { SkraSkeleton };
41
+ export type { SkraSkeletonShape };
42
+ //# sourceMappingURL=skra-ui-skeleton.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skra-ui-skeleton.d.ts","sources":["../../../../libs/ui/skeleton/src/lib/skeleton/skeleton.ts"],"mappings":";;AAQM,KAAM,iBAAiB;AAE7B;;;;;;;;;;;;;;;;;;;;;;;;AAwBG;AACH,cAkBa,YAAY;;oBAET,aAAA,CAAA,WAAA,CAAA,iBAAA;;oBAGA,aAAA,CAAA,WAAA;;AAGd,6BAAuB,aAAA,CAAA,MAAA;oDARZ,YAAY;sDAAZ,YAAY;AAaxB;;;;","names":[]}
@@ -0,0 +1,71 @@
1
+ import * as _angular_core from '@angular/core';
2
+ import { SkraFieldContext } from '@skra/ui/field';
3
+
4
+ type StarRatingSize = 'sm' | 'md' | 'lg';
5
+ /**
6
+ * `<skra-star-rating>` — a whole-star rating **input**. An APG Rating composite
7
+ * (`role="radiogroup"`) rendered as stars: internally N `(input[type=radio] + label)`
8
+ * pairs sharing one `name`, where the label IS the star glyph (inline SVG) and the
9
+ * input is sr-only but focusable.
10
+ *
11
+ * Governed by the **ADR 039 §7 note (2026-06-24)**: a composite widget MAY render
12
+ * internal native radios — this is NOT the §3.3-forbidden `<skra-radio-group>` —
13
+ * because (1) value is consumer-owned (`[value]` / `(valueChange)`, controlled-only
14
+ * per ADR 037, the Tabs `[selected]` precedent — no internal value-of-record signal),
15
+ * (2) there is no `SkraRadioGroupContext`, (3) it is a distinct APG composite (like
16
+ * `skra-select`), not a generic radio-group wrapper. Custom element justified per
17
+ * ADR 012 — there is no native single host for a rating.
18
+ *
19
+ * <skra-field [hasError]="!form.rating()">
20
+ * <label skraLabelFor>Rate your experience</label>
21
+ * <skra-star-rating [value]="form.rating()" (valueChange)="form.rating.set($event)" />
22
+ * <skra-error>Please pick a rating</skra-error>
23
+ * </skra-field>
24
+ *
25
+ * Keyboard is the **native radio group** (arrows move + select, wrap, single tab stop)
26
+ * — ZERO CDK. The fill + hover-preview are **pure CSS** (`:checked`/`:hover` sibling
27
+ * combinators) — CSP-clean (ADR 021), no `[style.--var]`, no TS for the preview. The
28
+ * committed `aria-checked` is the only thing AT observes; hover-preview is visual-only.
29
+ *
30
+ * Optional `SkraFieldContext` (ADR 013): the radiogroup is named via `aria-labelledby`
31
+ * → the field label (`SkraFieldContext.labelId`, since a radiogroup is not labelable by
32
+ * `for`/`id`); `disabled`/`required`/`readonly`/`invalid`/`describedby` cascade. Value is
33
+ * NEVER in the context (ADR 037). The `readonly` state shows a committed whole-star rating
34
+ * without allowing change ("show my 4★").
35
+ *
36
+ * Whole-star only (half-step input deferred). Fractional aggregate display ("4.3★") is the
37
+ * separate `skra-rating-display` atom (`libs/ui/data-display`).
38
+ */
39
+ declare class SkraStarRating {
40
+ private readonly idGen;
41
+ readonly context: SkraFieldContext | null;
42
+ /** Committed rating; 0 (or out of [1,max]) = unrated. Consumer-owned, controlled (ADR 037). */
43
+ readonly value: _angular_core.InputSignal<number>;
44
+ /** Number of stars. Semantic count, not a look-input. */
45
+ readonly max: _angular_core.InputSignal<number>;
46
+ /** ADR 035 size axis — the only variant axis. */
47
+ readonly size: _angular_core.InputSignal<StarRatingSize>;
48
+ /** Fires on USER selection only (never on programmatic [value] changes). */
49
+ readonly valueChange: _angular_core.OutputEmitterRef<number>;
50
+ private readonly fallbackName;
51
+ /** Unique radio-group name so multiple ratings on a page don't merge. */
52
+ readonly groupName: _angular_core.Signal<string>;
53
+ readonly isDisabled: _angular_core.Signal<boolean>;
54
+ readonly isReadonly: _angular_core.Signal<boolean>;
55
+ /**
56
+ * Star values HIGH→LOW (`[max, …, 1]`) so the CSS sibling combinator
57
+ * `input:checked ~ label` fills the checked star and every lower one. The visual
58
+ * order is restored left-to-right via `flex-direction: row-reverse` in the SCSS.
59
+ */
60
+ readonly stars: _angular_core.Signal<number[]>;
61
+ protected starLabel(star: number): string;
62
+ protected onSelect(star: number): void;
63
+ protected blockWhenReadonly(event: Event): void;
64
+ protected blockKeyWhenReadonly(event: KeyboardEvent): void;
65
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SkraStarRating, never>;
66
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SkraStarRating, "skra-star-rating", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; }, never, never, true, never>;
67
+ }
68
+
69
+ export { SkraStarRating };
70
+ export type { StarRatingSize };
71
+ //# sourceMappingURL=skra-ui-star-rating.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skra-ui-star-rating.d.ts","sources":["../../../../libs/ui/star-rating/src/lib/star-rating/star-rating.ts"],"mappings":";;;AAYM,KAAM,cAAc;AAE1B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiCG;AACH,cAwBa,cAAc;AACzB;sBACgB,gBAAA;;oBAGF,aAAA,CAAA,WAAA;;kBAEF,aAAA,CAAA,WAAA;;mBAEC,aAAA,CAAA,WAAA,CAAA,cAAA;;0BAEO,aAAA,CAAA,gBAAA;AAEpB;;wBAEkB,aAAA,CAAA,MAAA;yBAIC,aAAA,CAAA,MAAA;yBACA,aAAA,CAAA,MAAA;AAEnB;;;;AAIG;oBACW,aAAA,CAAA,MAAA;AAKd;AAIA;AAMA,uCAAmC,KAAK;AAIxC,0CAAsC,aAAa;oDA9CxC,cAAc;sDAAd,cAAc;AAiD1B;;;;","names":[]}
@@ -0,0 +1,62 @@
1
+ import * as _angular_core from '@angular/core';
2
+
3
+ /**
4
+ * StatusDotIntent — the Variant Surface Intent axis (ADR 035 §3.1, the status palette subset).
5
+ * Drops the action intents `primary`/`secondary` (those belong to interactive surfaces, not a
6
+ * status glyph). Closed enum; extension requires an ADR 035 amendment.
7
+ */
8
+ type StatusDotIntent = 'neutral' | 'info' | 'success' | 'warning' | 'danger';
9
+ /**
10
+ * StatusDotSize — the Variant Surface Size axis (ADR 035 §3.1, downward subset `sm|md|lg`).
11
+ * `xs`/`xl` are reserved (ADR 035 §3.2) and NOT in MVP — adding them later is purely additive.
12
+ * Unlike content-width Badge (which has no size — its size is its text), the dot has NO content,
13
+ * so size is a genuine free variable the consumer needs (corner-of-`lg`-avatar vs inline-in-text).
14
+ */
15
+ type StatusDotSize = 'sm' | 'md' | 'lg';
16
+ /**
17
+ * `<skra-status-dot>` — a bare, small, non-interactive status/presence indicator (a coloured dot)
18
+ * composed beside other content: an avatar corner (online/away/busy/offline), or beside a label.
19
+ * Second resident of `libs/ui/data-display`, sibling to `<skra-avatar>` (whose corner presence-dot
20
+ * it provides). See `adr/specs/component-status-dot-spec.md`.
21
+ *
22
+ * **Element, not a decorated native (ADR 012):** there is no native `<dot>`, and a bare `<span>`
23
+ * carries no semantics and forces a colour literal. NOT a Web Component (ADR 000).
24
+ *
25
+ * **No content (the SRP line vs `skra-badge`):** the dot IS the glyph — no slots, no projected
26
+ * content, no label/count. Meaning is carried by ADJACENT text the consumer owns. The defining
27
+ * value-add over a hand-rolled span is the semantic `intent`→token-colour mapping (no hex — ADR
28
+ * 002/023) + the size axis that tracks the avatar.
29
+ *
30
+ * **Non-interactive (Avatar/Badge precedent):** no focusable node, no widget role, no keyboard, no
31
+ * outputs → State Surface all-N/A. A clickable status = `button[skraButton]` composition, not a
32
+ * variant.
33
+ *
34
+ * **Accessible name (ADR 033 Path 3 — graphic host, the SkraIcon/Avatar contract):** the host
35
+ * carries NO default ARIA. The consumer declares semantics explicitly, exactly as for
36
+ * `<skra-icon>`/`<skra-avatar>`:
37
+ * - decorative (Mode A, the ~90% case — dot beside visible/sr-only status text) → `aria-hidden="true"`;
38
+ * - meaningful (Mode B — the dot is the SOLE status carrier) → **`role="img"` + `aria-label`/
39
+ * `aria-labelledby` TOGETHER**. `role="img"` is REQUIRED: `aria-label` on the roleless host is
40
+ * ARIA-prohibited (axe `aria-prohibited-attr`, the Avatar Mode-B fix) and conveys no name.
41
+ * WCAG 1.4.1 (colour-independence) cannot be enforced by the atom — the adjacent text is the
42
+ * consumer's; the `InlineStatus`/`A11yCheck` stories carry the editorial contract. NO `ariaLabel`
43
+ * input (ADR 033 boundary #8).
44
+ *
45
+ * **Look is skin-owned:** circle-vs-square is the `radius` comp token (brutal's `radius.full: 0`
46
+ * ships a square dot automatically). The fill is the semantic `intent`→`sys.color.<intent>.base`
47
+ * (recolour at the sys level, not a per-dot token — skin philosophy); NO `emphasis` (always filled),
48
+ * NO `live` (a dot has no text to announce — the consumer's adjacent live text does), NO
49
+ * `color`/`variant`/`shape` look-inputs.
50
+ */
51
+ declare class SkraStatusDot {
52
+ /** Variant Surface Intent axis (ADR 035) — the fill colour (status palette subset). */
53
+ readonly intent: _angular_core.InputSignal<StatusDotIntent>;
54
+ /** Variant Surface Size axis (ADR 035) — the dot's (colored core) diameter. */
55
+ readonly size: _angular_core.InputSignal<StatusDotSize>;
56
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SkraStatusDot, never>;
57
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SkraStatusDot, "skra-status-dot", never, { "intent": { "alias": "intent"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
58
+ }
59
+
60
+ export { SkraStatusDot };
61
+ export type { StatusDotIntent, StatusDotSize };
62
+ //# sourceMappingURL=skra-ui-status-dot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skra-ui-status-dot.d.ts","sources":["../../../../libs/ui/status-dot/src/lib/status-dot/status-dot.ts"],"mappings":";;AAOA;;;;AAIG;AACG,KAAM,eAAe;AAO3B;;;;;AAKG;AACG,KAAM,aAAa;AAEzB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkCG;AACH,cAaa,aAAa;;qBAET,aAAA,CAAA,WAAA,CAAA,eAAA;;mBAGF,aAAA,CAAA,WAAA,CAAA,aAAA;oDALF,aAAa;sDAAb,aAAa;AAMzB;;;;","names":[]}