@joanroucoux/cairn-ui 0.7.1 → 0.8.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 (111) hide show
  1. package/CHANGELOG.md +96 -0
  2. package/fesm2022/joanroucoux-cairn-ui-action-bar.mjs +54 -0
  3. package/fesm2022/joanroucoux-cairn-ui-action-bar.mjs.map +1 -0
  4. package/fesm2022/joanroucoux-cairn-ui-alert.mjs +129 -0
  5. package/fesm2022/joanroucoux-cairn-ui-alert.mjs.map +1 -0
  6. package/fesm2022/joanroucoux-cairn-ui-amount.mjs +114 -0
  7. package/fesm2022/joanroucoux-cairn-ui-amount.mjs.map +1 -0
  8. package/fesm2022/joanroucoux-cairn-ui-async.mjs +282 -0
  9. package/fesm2022/joanroucoux-cairn-ui-async.mjs.map +1 -0
  10. package/fesm2022/joanroucoux-cairn-ui-avatar.mjs +71 -0
  11. package/fesm2022/joanroucoux-cairn-ui-avatar.mjs.map +1 -0
  12. package/fesm2022/joanroucoux-cairn-ui-back-link.mjs +79 -0
  13. package/fesm2022/joanroucoux-cairn-ui-back-link.mjs.map +1 -0
  14. package/fesm2022/joanroucoux-cairn-ui-badge.mjs +48 -0
  15. package/fesm2022/joanroucoux-cairn-ui-badge.mjs.map +1 -0
  16. package/fesm2022/joanroucoux-cairn-ui-button.mjs +128 -0
  17. package/fesm2022/joanroucoux-cairn-ui-button.mjs.map +1 -0
  18. package/fesm2022/joanroucoux-cairn-ui-card.mjs +146 -0
  19. package/fesm2022/joanroucoux-cairn-ui-card.mjs.map +1 -0
  20. package/fesm2022/joanroucoux-cairn-ui-choice-chips.mjs +172 -0
  21. package/fesm2022/joanroucoux-cairn-ui-choice-chips.mjs.map +1 -0
  22. package/fesm2022/joanroucoux-cairn-ui-control.mjs +18 -0
  23. package/fesm2022/joanroucoux-cairn-ui-control.mjs.map +1 -0
  24. package/fesm2022/joanroucoux-cairn-ui-delta.mjs +103 -0
  25. package/fesm2022/joanroucoux-cairn-ui-delta.mjs.map +1 -0
  26. package/fesm2022/joanroucoux-cairn-ui-dialog.mjs +626 -0
  27. package/fesm2022/joanroucoux-cairn-ui-dialog.mjs.map +1 -0
  28. package/fesm2022/joanroucoux-cairn-ui-donut.mjs +347 -0
  29. package/fesm2022/joanroucoux-cairn-ui-donut.mjs.map +1 -0
  30. package/fesm2022/joanroucoux-cairn-ui-empty.mjs +47 -0
  31. package/fesm2022/joanroucoux-cairn-ui-empty.mjs.map +1 -0
  32. package/fesm2022/joanroucoux-cairn-ui-external-link.mjs +65 -0
  33. package/fesm2022/joanroucoux-cairn-ui-external-link.mjs.map +1 -0
  34. package/fesm2022/joanroucoux-cairn-ui-fact.mjs +99 -0
  35. package/fesm2022/joanroucoux-cairn-ui-fact.mjs.map +1 -0
  36. package/fesm2022/joanroucoux-cairn-ui-field.mjs +232 -0
  37. package/fesm2022/joanroucoux-cairn-ui-field.mjs.map +1 -0
  38. package/fesm2022/joanroucoux-cairn-ui-filter-chips.mjs +89 -0
  39. package/fesm2022/joanroucoux-cairn-ui-filter-chips.mjs.map +1 -0
  40. package/fesm2022/joanroucoux-cairn-ui-input.mjs +90 -0
  41. package/fesm2022/joanroucoux-cairn-ui-input.mjs.map +1 -0
  42. package/fesm2022/joanroucoux-cairn-ui-line-chart.mjs +844 -0
  43. package/fesm2022/joanroucoux-cairn-ui-line-chart.mjs.map +1 -0
  44. package/fesm2022/joanroucoux-cairn-ui-menu.mjs +241 -0
  45. package/fesm2022/joanroucoux-cairn-ui-menu.mjs.map +1 -0
  46. package/fesm2022/joanroucoux-cairn-ui-meter.mjs +86 -0
  47. package/fesm2022/joanroucoux-cairn-ui-meter.mjs.map +1 -0
  48. package/fesm2022/joanroucoux-cairn-ui-motion.mjs +415 -0
  49. package/fesm2022/joanroucoux-cairn-ui-motion.mjs.map +1 -0
  50. package/fesm2022/joanroucoux-cairn-ui-nav-item.mjs +45 -0
  51. package/fesm2022/joanroucoux-cairn-ui-nav-item.mjs.map +1 -0
  52. package/fesm2022/joanroucoux-cairn-ui-row.mjs +164 -0
  53. package/fesm2022/joanroucoux-cairn-ui-row.mjs.map +1 -0
  54. package/fesm2022/joanroucoux-cairn-ui-segmented.mjs +165 -0
  55. package/fesm2022/joanroucoux-cairn-ui-segmented.mjs.map +1 -0
  56. package/fesm2022/joanroucoux-cairn-ui-select.mjs +69 -0
  57. package/fesm2022/joanroucoux-cairn-ui-select.mjs.map +1 -0
  58. package/fesm2022/joanroucoux-cairn-ui-skeleton.mjs +91 -0
  59. package/fesm2022/joanroucoux-cairn-ui-skeleton.mjs.map +1 -0
  60. package/fesm2022/joanroucoux-cairn-ui-stale-link.mjs +43 -0
  61. package/fesm2022/joanroucoux-cairn-ui-stale-link.mjs.map +1 -0
  62. package/fesm2022/joanroucoux-cairn-ui-stat.mjs +96 -0
  63. package/fesm2022/joanroucoux-cairn-ui-stat.mjs.map +1 -0
  64. package/fesm2022/joanroucoux-cairn-ui-switch.mjs +37 -0
  65. package/fesm2022/joanroucoux-cairn-ui-switch.mjs.map +1 -0
  66. package/fesm2022/joanroucoux-cairn-ui-tab-bar.mjs +75 -0
  67. package/fesm2022/joanroucoux-cairn-ui-tab-bar.mjs.map +1 -0
  68. package/fesm2022/joanroucoux-cairn-ui-table.mjs +321 -0
  69. package/fesm2022/joanroucoux-cairn-ui-table.mjs.map +1 -0
  70. package/fesm2022/joanroucoux-cairn-ui-toast.mjs +153 -0
  71. package/fesm2022/joanroucoux-cairn-ui-toast.mjs.map +1 -0
  72. package/fesm2022/joanroucoux-cairn-ui.mjs +0 -5386
  73. package/fesm2022/joanroucoux-cairn-ui.mjs.map +1 -1
  74. package/package.json +141 -1
  75. package/styles/motion.css +9 -0
  76. package/types/joanroucoux-cairn-ui-action-bar.d.ts +22 -0
  77. package/types/joanroucoux-cairn-ui-alert.d.ts +23 -0
  78. package/types/joanroucoux-cairn-ui-amount.d.ts +45 -0
  79. package/types/joanroucoux-cairn-ui-async.d.ts +58 -0
  80. package/types/joanroucoux-cairn-ui-avatar.d.ts +35 -0
  81. package/types/joanroucoux-cairn-ui-back-link.d.ts +22 -0
  82. package/types/joanroucoux-cairn-ui-badge.d.ts +23 -0
  83. package/types/joanroucoux-cairn-ui-button.d.ts +29 -0
  84. package/types/joanroucoux-cairn-ui-card.d.ts +36 -0
  85. package/types/joanroucoux-cairn-ui-choice-chips.d.ts +46 -0
  86. package/types/joanroucoux-cairn-ui-control.d.ts +27 -0
  87. package/types/joanroucoux-cairn-ui-delta.d.ts +38 -0
  88. package/types/joanroucoux-cairn-ui-dialog.d.ts +72 -0
  89. package/types/joanroucoux-cairn-ui-donut.d.ts +59 -0
  90. package/types/joanroucoux-cairn-ui-empty.d.ts +19 -0
  91. package/types/joanroucoux-cairn-ui-external-link.d.ts +15 -0
  92. package/types/joanroucoux-cairn-ui-fact.d.ts +44 -0
  93. package/types/joanroucoux-cairn-ui-field.d.ts +84 -0
  94. package/types/joanroucoux-cairn-ui-filter-chips.d.ts +28 -0
  95. package/types/joanroucoux-cairn-ui-input.d.ts +51 -0
  96. package/types/joanroucoux-cairn-ui-line-chart.d.ts +114 -0
  97. package/types/joanroucoux-cairn-ui-menu.d.ts +66 -0
  98. package/types/joanroucoux-cairn-ui-meter.d.ts +30 -0
  99. package/types/joanroucoux-cairn-ui-motion.d.ts +124 -0
  100. package/types/joanroucoux-cairn-ui-nav-item.d.ts +21 -0
  101. package/types/joanroucoux-cairn-ui-row.d.ts +78 -0
  102. package/types/joanroucoux-cairn-ui-segmented.d.ts +36 -0
  103. package/types/joanroucoux-cairn-ui-select.d.ts +23 -0
  104. package/types/joanroucoux-cairn-ui-skeleton.d.ts +26 -0
  105. package/types/joanroucoux-cairn-ui-stale-link.d.ts +24 -0
  106. package/types/joanroucoux-cairn-ui-stat.d.ts +32 -0
  107. package/types/joanroucoux-cairn-ui-switch.d.ts +17 -0
  108. package/types/joanroucoux-cairn-ui-tab-bar.d.ts +31 -0
  109. package/types/joanroucoux-cairn-ui-table.d.ts +139 -0
  110. package/types/joanroucoux-cairn-ui-toast.d.ts +51 -0
  111. package/types/joanroucoux-cairn-ui.d.ts +1 -1407
@@ -0,0 +1,124 @@
1
+ import * as i0 from '@angular/core';
2
+ import { Signal } from '@angular/core';
3
+
4
+ /**
5
+ * Slides the items of a list into place when one is removed or inserted (FLIP): it measures every item
6
+ * before and after the change, from the top of the list itself, then animates the shift in `translateY`
7
+ * over `--duration-base` `--ease-out`. Pair it with `animate.leave="ui-leave-fade"` on the item so it fades
8
+ * out first. Nothing moves under `prefers-reduced-motion`: the list closes up at once.
9
+ *
10
+ * By default the items are the direct children of the list. Mark them with `uiFlipItem` instead when they
11
+ * sit deeper, for instance a page of several groups: put `uiFlipList` on the element around every group and
12
+ * `uiFlipItem` on each group heading and row, so a removal also slides the groups below. An item may sit
13
+ * inside another item (a row inside a card): it then moves by its own share and its card carries the rest.
14
+ * Only an item added or removed starts a slide; a change inside an item does not. Positions leave out the
15
+ * translate of any animation running inside the list (a slide in progress, an enter fade-up).
16
+ *
17
+ * @example
18
+ * <ul uiFlipList>
19
+ * @for (key of keys(); track key.id) {
20
+ * <li uiListRow animate.leave="ui-leave-fade">...</li>
21
+ * }
22
+ * </ul>
23
+ *
24
+ * <table uiTable uiFlipList>
25
+ * @for (group of groups(); track group.id) {
26
+ * <tbody>
27
+ * <tr uiTr group uiFlipItem>...</tr>
28
+ * @for (row of group.rows; track row.id) {
29
+ * <tr uiTr uiFlipItem animate.leave="ui-leave-fade">...</tr>
30
+ * }
31
+ * </tbody>
32
+ * }
33
+ * </table>
34
+ */
35
+ declare class UiFlipList {
36
+ private readonly host;
37
+ private readonly reduced;
38
+ private readonly mutations;
39
+ private readonly resizes;
40
+ private readonly running;
41
+ private readonly watched;
42
+ private readonly items;
43
+ private tops;
44
+ private shifts;
45
+ constructor();
46
+ private tracked;
47
+ private measure;
48
+ private onChange;
49
+ private parentItem;
50
+ static ɵfac: i0.ɵɵFactoryDeclaration<UiFlipList, never>;
51
+ static ɵdir: i0.ɵɵDirectiveDeclaration<UiFlipList, "[uiFlipList]", never, {}, {}, never, never, true, never>;
52
+ }
53
+ /**
54
+ * Marks an element as an item of the nearest `uiFlipList`, at any depth: a group heading, a row inside a
55
+ * group, a card. Once one item is marked, the list follows its marked items only.
56
+ *
57
+ * @example
58
+ * <tr uiTr uiFlipItem animate.leave="ui-leave-fade">...</tr>
59
+ */
60
+ declare class UiFlipItem {
61
+ constructor();
62
+ static ɵfac: i0.ɵɵFactoryDeclaration<UiFlipItem, never>;
63
+ static ɵdir: i0.ɵɵDirectiveDeclaration<UiFlipItem, "[uiFlipItem]", never, {}, {}, never, never, true, never>;
64
+ }
65
+
66
+ /**
67
+ * Draws the eye to an element that just changed: scrolls it into view when it is off screen, holds the
68
+ * `--soft` fill for 200 ms, then fades back to the element's own background over `--duration-highlight`.
69
+ * Each new non-null token plays once, so pass a fresh value per event (an object or a counter), not a
70
+ * boolean. A non-null token already present at first render plays on arrival. On a `tr` it paints the
71
+ * cells, on a `td[ui-group-cell]` the band, anywhere else the host. Under `prefers-reduced-motion` the
72
+ * scroll is instant and the fade lasts 600 ms.
73
+ *
74
+ * It starts on the next frame and, when the element is still playing a finite animation of its own (an
75
+ * `animate.enter` fade on a new row), once that animation has finished, waiting no longer than
76
+ * `--duration-base`: the element fades in, then lights up. Both can sit on the same element.
77
+ *
78
+ * Give the element `scroll-margin-top` and `scroll-margin-bottom` equal to what is pinned above and
79
+ * below it (header, tab bar, action bar): a row under them counts as off screen and is scrolled out.
80
+ * For an arrival on a page opened at the element, scroll to it at once first (`scrollIntoView` in
81
+ * `afterNextRender`) and set the token afterwards: a token present at first render scrolls smoothly
82
+ * from where the page is.
83
+ *
84
+ * @example
85
+ * <a ui-row [uiHighlight]="changed() === holding.id ? token() : null" routerLink="/holdings/1">...</a>
86
+ */
87
+ declare class UiHighlight {
88
+ readonly uiHighlight: i0.InputSignal<unknown>;
89
+ private readonly host;
90
+ private readonly reduced;
91
+ private cancel;
92
+ constructor();
93
+ private play;
94
+ private isVisible;
95
+ private flash;
96
+ static ɵfac: i0.ɵɵFactoryDeclaration<UiHighlight, never>;
97
+ static ɵdir: i0.ɵɵDirectiveDeclaration<UiHighlight, "[uiHighlight]", never, { "uiHighlight": { "alias": "uiHighlight"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
98
+ }
99
+
100
+ /**
101
+ * A signal that follows the user's `prefers-reduced-motion` preference live.
102
+ * Call it in an injection context; the listener is removed with that context.
103
+ *
104
+ * @example
105
+ * protected readonly reduced = injectReducedMotion();
106
+ */
107
+ declare function injectReducedMotion(): Signal<boolean>;
108
+
109
+ /**
110
+ * Holds the transitions of the host and of everything inside it until two frames after its first
111
+ * render, through the `data-ui-settling` attribute and the matching rule of `styles/motion.css`.
112
+ * A route's elements are created a tick before their classes are bound; a layout read in between
113
+ * would otherwise turn the bound fill, colour or switch track into a transition on page open. Call it
114
+ * in an injection context. A host whose view is never refreshed (a detached change detector) keeps the
115
+ * attribute, and with it no transition.
116
+ *
117
+ * @example
118
+ * constructor() {
119
+ * holdTransitionsUntilRendered();
120
+ * }
121
+ */
122
+ declare function holdTransitionsUntilRendered(): void;
123
+
124
+ export { UiFlipItem, UiFlipList, UiHighlight, holdTransitionsUntilRendered, injectReducedMotion };
@@ -0,0 +1,21 @@
1
+ import * as _angular_core from '@angular/core';
2
+
3
+ /**
4
+ * One destination of the sidebar navigation (Portfolio, Holdings, Allocation, Accounts). The active
5
+ * fill and text colour switch at once on navigation; only the hover fill fades.
6
+ *
7
+ * @example
8
+ * <a ui-nav-item [active]="url === '/'" routerLink="/">
9
+ * <lucide-icon navIcon name="house" />
10
+ * Portfolio
11
+ * </a>
12
+ */
13
+ declare class UiNavItem {
14
+ readonly active: _angular_core.InputSignalWithTransform<boolean, unknown>;
15
+ protected readonly classes: _angular_core.Signal<string>;
16
+ constructor();
17
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiNavItem, never>;
18
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UiNavItem, "a[ui-nav-item]", never, { "active": { "alias": "active"; "required": false; "isSignal": true; }; }, {}, never, ["[navIcon]", "*"], true, never>;
19
+ }
20
+
21
+ export { UiNavItem };
@@ -0,0 +1,78 @@
1
+ import * as _angular_core from '@angular/core';
2
+
3
+ declare const ROW_SIZES: readonly ["md", "lg", "xl", "card", "dense"];
4
+ type RowSize = (typeof ROW_SIZES)[number];
5
+ declare const ROW_PADDINGS: readonly ["md", "sm", "none"];
6
+ type RowPadding = (typeof ROW_PADDINGS)[number];
7
+ declare const ROW_GAPS: readonly ["default", "sm"];
8
+ type RowGap = (typeof ROW_GAPS)[number];
9
+ /**
10
+ * Clickable row of a list: a holding, an account, a search result.
11
+ *
12
+ * @example
13
+ * <a ui-row [selected]="holding.id === openId()" [routerLink]="['/holdings', holding.id]">
14
+ * {{ holding.name }}
15
+ * </a>
16
+ */
17
+ declare class UiRow {
18
+ readonly selected: _angular_core.InputSignalWithTransform<boolean, unknown>;
19
+ readonly busy: _angular_core.InputSignalWithTransform<boolean, unknown>;
20
+ readonly unavailable: _angular_core.InputSignalWithTransform<boolean, unknown>;
21
+ readonly size: _angular_core.InputSignal<"md" | "lg" | "xl" | "card" | "dense">;
22
+ readonly padding: _angular_core.InputSignal<"md" | "sm" | "none">;
23
+ readonly gap: _angular_core.InputSignal<"sm" | "default">;
24
+ protected readonly classes: _angular_core.Signal<string>;
25
+ constructor();
26
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiRow, never>;
27
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UiRow, "a[ui-row], button[ui-row]", never, { "selected": { "alias": "selected"; "required": false; "isSignal": true; }; "busy": { "alias": "busy"; "required": false; "isSignal": true; }; "unavailable": { "alias": "unavailable"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "padding": { "alias": "padding"; "required": false; "isSignal": true; }; "gap": { "alias": "gap"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
28
+ }
29
+ /**
30
+ * Lays out a `ui-row` with a trailing action beside it, such as a "more" icon button: the row takes
31
+ * the room the action leaves and the action keeps its own size.
32
+ *
33
+ * @example
34
+ * <div uiRowItem>
35
+ * <a ui-row size="xl" padding="sm" routerLink="/accounts/1">...</a>
36
+ * <button ui-button variant="quiet" size="icon-sm" aria-label="Account actions">...</button>
37
+ * </div>
38
+ */
39
+ declare class UiRowItem {
40
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiRowItem, never>;
41
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<UiRowItem, "[uiRowItem]", never, {}, {}, never, never, true, never>;
42
+ }
43
+ /**
44
+ * Non-interactive row of a list, separated from the next by a hairline: a passkey with its delete
45
+ * button, a device, a setting. It is a 72px row (68px from 64rem) with a 12px gap; put it on an
46
+ * `li` or a `div`. Use `ui-row` instead when the whole row is a link or an action.
47
+ *
48
+ * @example
49
+ * <ul>
50
+ * <li uiListRow>
51
+ * <span class="flex-1">MacBook Air</span>
52
+ * <button ui-button variant="quiet-destructive" size="icon-sm" aria-label="Delete MacBook Air">...</button>
53
+ * </li>
54
+ * </ul>
55
+ */
56
+ declare class UiListRow {
57
+ readonly ruled: _angular_core.InputSignalWithTransform<boolean, unknown>;
58
+ protected readonly classes: _angular_core.Signal<"flex min-h-18 items-center gap-3 py-1.5 lg:min-h-17 shadow-[inset_0_-1px_0_var(--hairline)]" | "flex min-h-18 items-center gap-3 py-1.5 lg:min-h-17">;
59
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiListRow, never>;
60
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<UiListRow, "[uiListRow]", never, { "ruled": { "alias": "ruled"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
61
+ }
62
+ /**
63
+ * The 36px filled tile that leads a row: an icon on a muted square with the control radius. Put it on
64
+ * a `span` as the first child of a `ui-row` or a `uiListRow`.
65
+ *
66
+ * @example
67
+ * <a ui-row size="xl" padding="sm" href="/export">
68
+ * <span uiRowTile><svg lucideDownload [size]="18" /></span>
69
+ * Export
70
+ * </a>
71
+ */
72
+ declare class UiRowTile {
73
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiRowTile, never>;
74
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<UiRowTile, "[uiRowTile]", never, {}, {}, never, never, true, never>;
75
+ }
76
+
77
+ export { ROW_GAPS, ROW_PADDINGS, ROW_SIZES, UiListRow, UiRow, UiRowItem, UiRowTile };
78
+ export type { RowGap, RowPadding, RowSize };
@@ -0,0 +1,36 @@
1
+ import * as _angular_core from '@angular/core';
2
+ import { ElementRef } from '@angular/core';
3
+
4
+ type SegmentedOption = {
5
+ value: string;
6
+ label: string;
7
+ };
8
+ declare const SEGMENTED_SIZES: readonly ["md", "sm"];
9
+ type SegmentedSize = (typeof SEGMENTED_SIZES)[number];
10
+ /**
11
+ * Exclusive choice within a small, known set: a time range, a unit, a mode. The selected option's
12
+ * background is a single thumb that slides under it in `transform`, instead of being redrawn.
13
+ *
14
+ * @example
15
+ * <ui-segmented [options]="ranges" label="Time range" [(value)]="range" />
16
+ */
17
+ declare class UiSegmented {
18
+ readonly options: _angular_core.InputSignal<SegmentedOption[]>;
19
+ readonly label: _angular_core.InputSignal<string>;
20
+ readonly showLabel: _angular_core.InputSignalWithTransform<boolean, unknown>;
21
+ protected readonly labelId: string;
22
+ readonly value: _angular_core.ModelSignal<string>;
23
+ readonly size: _angular_core.InputSignal<"md" | "sm">;
24
+ protected readonly radios: _angular_core.Signal<readonly ElementRef<HTMLButtonElement>[]>;
25
+ protected readonly thumbIndex: _angular_core.Signal<number>;
26
+ constructor();
27
+ protected optionClasses(optionValue: string): string;
28
+ protected tabIndexFor(optionValue: string): number;
29
+ protected select(optionValue: string): void;
30
+ protected onKeydown(event: KeyboardEvent): void;
31
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiSegmented, never>;
32
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UiSegmented, "ui-segmented", never, { "options": { "alias": "options"; "required": true; "isSignal": true; }; "label": { "alias": "label"; "required": true; "isSignal": true; }; "showLabel": { "alias": "showLabel"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": true; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, never, true, never>;
33
+ }
34
+
35
+ export { SEGMENTED_SIZES, UiSegmented };
36
+ export type { SegmentedOption, SegmentedSize };
@@ -0,0 +1,23 @@
1
+ import * as _angular_core from '@angular/core';
2
+ import { UiControl, UiControlError } from '@joanroucoux/cairn-ui/control';
3
+
4
+ /**
5
+ * Styled native select, drop-down list included where the browser allows it. It stays a native
6
+ * `<select>`: keyboard, typeahead and semantics come from the platform, not from a rebuilt listbox.
7
+ *
8
+ * Declares the `errors` and `touched` inputs Angular's `[formField]` fills, so a `ui-field` around
9
+ * it can show the message without any binding here.
10
+ *
11
+ * @example
12
+ * <select uiSelect><option value="pea">PEA</option></select>
13
+ */
14
+ declare class UiSelect implements UiControl {
15
+ readonly size: _angular_core.InputSignal<"sm" | "md" | "lg" | "xl">;
16
+ readonly errors: _angular_core.InputSignal<readonly UiControlError[]>;
17
+ readonly touched: _angular_core.InputSignal<boolean>;
18
+ protected readonly classes: _angular_core.Signal<string>;
19
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiSelect, never>;
20
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<UiSelect, "select[uiSelect]", never, { "size": { "alias": "size"; "required": false; "isSignal": true; }; "errors": { "alias": "errors"; "required": false; "isSignal": true; }; "touched": { "alias": "touched"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
21
+ }
22
+
23
+ export { UiSelect };
@@ -0,0 +1,26 @@
1
+ import * as _angular_core from '@angular/core';
2
+
3
+ /** Available skeleton shapes. `SkeletonShape` is derived from this tuple. */
4
+ declare const SKELETON_SHAPES: readonly ["text", "figure", "row", "chart", "ring", "dot"];
5
+ type SkeletonShape = (typeof SKELETON_SHAPES)[number];
6
+ /**
7
+ * Decorative, pulsing placeholder for content that is still loading, at the shape of the content
8
+ * it stands in for.
9
+ *
10
+ * @example
11
+ * <ui-skeleton shape="figure" />
12
+ * <ui-skeleton [lines]="3" />
13
+ */
14
+ declare class UiSkeleton {
15
+ readonly shape: _angular_core.InputSignal<"text" | "figure" | "row" | "chart" | "ring" | "dot">;
16
+ readonly lines: _angular_core.InputSignal<number>;
17
+ readonly height: _angular_core.InputSignal<number>;
18
+ readonly size: _angular_core.InputSignal<number>;
19
+ protected readonly animation = "cairn-pulse var(--pulse-duration) var(--ease-out) infinite alternate";
20
+ protected readonly bars: _angular_core.Signal<("62%" | "100%")[]>;
21
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiSkeleton, never>;
22
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UiSkeleton, "ui-skeleton", never, { "shape": { "alias": "shape"; "required": false; "isSignal": true; }; "lines": { "alias": "lines"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
23
+ }
24
+
25
+ export { SKELETON_SHAPES, UiSkeleton };
26
+ export type { SkeletonShape };
@@ -0,0 +1,24 @@
1
+ import * as _angular_core from '@angular/core';
2
+
3
+ /** Available stale link sizes. `StaleLinkSize` is derived from this tuple. */
4
+ declare const STALE_LINK_SIZES: readonly ["caption", "label"];
5
+ type StaleLinkSize = (typeof STALE_LINK_SIZES)[number];
6
+ /**
7
+ * Link in the stale tone, for a caption about data that is late or left out of a total, such as
8
+ * "1 ligne sans cours, non comptée". Weight 500, underlined on hover, with an optional trailing
9
+ * chevron. `size` is `caption` (12/17, the default) or `label` (14/20, the dashboard total's
10
+ * "1 cours en retard").
11
+ *
12
+ * @example
13
+ * <a uiStaleLink chevron size="label" routerLink="/holdings">1 cours en retard</a>
14
+ */
15
+ declare class UiStaleLink {
16
+ readonly chevron: _angular_core.InputSignalWithTransform<boolean, unknown>;
17
+ readonly size: _angular_core.InputSignal<"caption" | "label">;
18
+ protected readonly classes: _angular_core.Signal<string>;
19
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiStaleLink, never>;
20
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<UiStaleLink, "a[uiStaleLink]", never, { "chevron": { "alias": "chevron"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
21
+ }
22
+
23
+ export { STALE_LINK_SIZES, UiStaleLink };
24
+ export type { StaleLinkSize };
@@ -0,0 +1,32 @@
1
+ import * as _angular_core from '@angular/core';
2
+
3
+ /** Available stat sizes. `StatSize` is derived from this tuple. */
4
+ declare const STAT_SIZES: readonly ["hero", "tile"];
5
+ type StatSize = (typeof STAT_SIZES)[number];
6
+ /**
7
+ * Label, figure and a named period of change, at two sizes: a `hero` for a screen's single
8
+ * headline number, or a smaller `tile` repeated in a grid. The figure itself, its delta and its
9
+ * caption are all projected, so the component carries no formatting and no currency of its own.
10
+ *
11
+ * The `hero` size never sets `tabular-nums` on the figure: a lone headline number reads better
12
+ * with its digits at their natural width, unlike a column of aligned figures.
13
+ *
14
+ * @example
15
+ * <ui-stat label="Net worth" size="hero">
16
+ * <span uiStatValue>128,656 EUR</span>
17
+ * <ui-delta uiStatDelta [value]="dayChange()" unknownLabel="Not available">+316.54 EUR</ui-delta>
18
+ * <span uiStatCaption>today</span>
19
+ * </ui-stat>
20
+ */
21
+ declare class UiStat {
22
+ readonly label: _angular_core.InputSignal<string>;
23
+ readonly size: _angular_core.InputSignal<"hero" | "tile">;
24
+ protected readonly labelClasses: _angular_core.Signal<string>;
25
+ protected readonly stackClasses: _angular_core.Signal<string>;
26
+ protected readonly valueClasses: _angular_core.Signal<string>;
27
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiStat, never>;
28
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UiStat, "ui-stat", never, { "label": { "alias": "label"; "required": true; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; }, {}, never, ["[uiStatValue]", "[uiStatDelta]", "[uiStatCaption]", "[uiStatAside]"], true, never>;
29
+ }
30
+
31
+ export { STAT_SIZES, UiStat };
32
+ export type { StatSize };
@@ -0,0 +1,17 @@
1
+ import * as i0 from '@angular/core';
2
+
3
+ /**
4
+ * Native checkbox styled as an iOS-style switch, exposed to assistive technology as `role="switch"`.
5
+ * 51 by 31 on touch, 40 by 24 with a mouse.
6
+ *
7
+ * @example
8
+ * <input type="checkbox" uiSwitch [checked]="hidden()" (change)="toggle()" aria-label="Hide amounts" />
9
+ */
10
+ declare class UiSwitch {
11
+ protected readonly classes = "relative shrink-0 w-[51px] h-[31px] pointer-fine:w-10 pointer-fine:h-6 appearance-none cursor-pointer rounded-pill bg-(--muted) checked:bg-(--primary) transition-[background-color] duration-(--duration-fast) ease-out disabled:pointer-events-none disabled:opacity-40 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-(--ring) before:absolute before:inset-x-0 before:top-1/2 before:-translate-y-1/2 before:h-(--row-min) before:content-[''] after:absolute after:top-0.5 after:left-0.5 after:size-[27px] pointer-fine:after:size-5 after:rounded-pill after:bg-(--card) after:shadow-[0_1px_3px_rgb(0_0_0/0.2)] after:transition-transform after:duration-(--duration-fast) after:ease-out after:content-[''] checked:after:translate-x-[20px] pointer-fine:checked:after:translate-x-4";
12
+ constructor();
13
+ static ɵfac: i0.ɵɵFactoryDeclaration<UiSwitch, never>;
14
+ static ɵdir: i0.ɵɵDirectiveDeclaration<UiSwitch, "input[type=checkbox][uiSwitch]", never, {}, {}, never, never, true, never>;
15
+ }
16
+
17
+ export { UiSwitch };
@@ -0,0 +1,31 @@
1
+ import * as i0 from '@angular/core';
2
+
3
+ /**
4
+ * Bottom navigation bar for iPhone: 52px of tabs plus the home indicator's safe area. While it is on the
5
+ * page it publishes that height as `--tab-bar-height` on the root element, which `ui-action-bar` and
6
+ * `ui-toaster` sit above; use it rather than restating 52px for anything that must clear the bar.
7
+ *
8
+ * @example
9
+ * <nav ui-tab-bar>
10
+ * <a ui-tab [active]="url === '/'" routerLink="/"><lucide-icon tabIcon name="house" />Portfolio</a>
11
+ * </nav>
12
+ */
13
+ declare class UiTabBar {
14
+ constructor();
15
+ static ɵfac: i0.ɵɵFactoryDeclaration<UiTabBar, never>;
16
+ static ɵcmp: i0.ɵɵComponentDeclaration<UiTabBar, "nav[ui-tab-bar]", never, {}, {}, never, ["*"], true, never>;
17
+ }
18
+ /**
19
+ * One destination of `ui-tab-bar`.
20
+ *
21
+ * @example
22
+ * <a ui-tab active routerLink="/"><lucide-icon tabIcon name="house" />Portfolio</a>
23
+ */
24
+ declare class UiTab {
25
+ readonly active: i0.InputSignalWithTransform<boolean, unknown>;
26
+ protected readonly classes: i0.Signal<string>;
27
+ static ɵfac: i0.ɵɵFactoryDeclaration<UiTab, never>;
28
+ static ɵcmp: i0.ɵɵComponentDeclaration<UiTab, "a[ui-tab]", never, { "active": { "alias": "active"; "required": false; "isSignal": true; }; }, {}, never, ["[tabIcon]", "*"], true, never>;
29
+ }
30
+
31
+ export { UiTab, UiTabBar };
@@ -0,0 +1,139 @@
1
+ import * as _angular_core from '@angular/core';
2
+
3
+ /** Breakpoints a secondary column can be held back until. */
4
+ declare const CELL_BREAKPOINTS: readonly ["md", "lg"];
5
+ type CellBreakpoint = (typeof CELL_BREAKPOINTS)[number];
6
+ /** Body row heights. */
7
+ declare const TABLE_ROWS: readonly ["48", "52", "60"];
8
+ type TableRow = (typeof TABLE_ROWS)[number];
9
+ /**
10
+ * Styled native table. The rows and cells stay plain <tr> and <td>. `row` sets the height of every
11
+ * body row, `rule` draws or drops the hairline under the header, `spaced` leaves 4px between the
12
+ * header and the first row.
13
+ *
14
+ * @example
15
+ * <table uiTable row="60" [rule]="false">
16
+ */
17
+ declare class UiTable {
18
+ readonly row: _angular_core.InputSignal<"48" | "52" | "60">;
19
+ readonly rule: _angular_core.InputSignalWithTransform<boolean, unknown>;
20
+ readonly spaced: _angular_core.InputSignalWithTransform<boolean, unknown>;
21
+ protected readonly classes: _angular_core.Signal<string>;
22
+ constructor();
23
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiTable, never>;
24
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<UiTable, "table[uiTable]", never, { "row": { "alias": "row"; "required": false; "isSignal": true; }; "rule": { "alias": "rule"; "required": false; "isSignal": true; }; "spaced": { "alias": "spaced"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
25
+ }
26
+ /** Body of one group of rows: leaves a 4px tail after its last row. */
27
+ declare class UiGroup {
28
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiGroup, never>;
29
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<UiGroup, "tbody[uiGroup]", never, {}, {}, never, never, true, never>;
30
+ }
31
+ /**
32
+ * Body or group row. An ordinary row glows on hover and takes the soft fill when `selected`; an
33
+ * `interactive` row (one that opens something) also presses to the soft fill. A row with no action keeps a
34
+ * plain name: `<td uiTd primary class="truncate font-medium">`.
35
+ * `group` marks the row that holds a group band: it carries no hover state.
36
+ *
37
+ * @example
38
+ * <tr uiTr [selected]="open">...
39
+ * <tr uiTr group><td ui-group-cell name="Brokerage">...
40
+ */
41
+ declare class UiTr {
42
+ readonly group: _angular_core.InputSignalWithTransform<boolean, unknown>;
43
+ readonly selected: _angular_core.InputSignalWithTransform<boolean, unknown>;
44
+ readonly interactive: _angular_core.InputSignalWithTransform<boolean, unknown>;
45
+ protected readonly classes: _angular_core.Signal<string>;
46
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiTr, never>;
47
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<UiTr, "tr[uiTr]", never, { "group": { "alias": "group"; "required": false; "isSignal": true; }; "selected": { "alias": "selected"; "required": false; "isSignal": true; }; "interactive": { "alias": "interactive"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
48
+ }
49
+ /**
50
+ * Column header, centred in its 36px. `numeric` right-aligns and lines the digits up; `secondary`
51
+ * (or `from`) holds a column back until the viewport is wide enough for it; `primary` makes it
52
+ * the column that absorbs the free width and truncates; `tall` is a 40px header; `width` fixes the column width and keeps it from shrinking.
53
+ *
54
+ * @example
55
+ * <th uiTh numeric secondary width="108px">Quantity</th>
56
+ */
57
+ declare class UiTh {
58
+ readonly width: _angular_core.InputSignal<string | null>;
59
+ readonly numeric: _angular_core.InputSignalWithTransform<boolean, unknown>;
60
+ readonly primary: _angular_core.InputSignalWithTransform<boolean, unknown>;
61
+ readonly secondary: _angular_core.InputSignalWithTransform<boolean, unknown>;
62
+ readonly tall: _angular_core.InputSignalWithTransform<boolean, unknown>;
63
+ readonly from: _angular_core.InputSignal<"md" | "lg" | null>;
64
+ protected readonly classes: _angular_core.Signal<string>;
65
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiTh, never>;
66
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<UiTh, "th[uiTh]", never, { "width": { "alias": "width"; "required": false; "isSignal": true; }; "numeric": { "alias": "numeric"; "required": false; "isSignal": true; }; "primary": { "alias": "primary"; "required": false; "isSignal": true; }; "secondary": { "alias": "secondary"; "required": false; "isSignal": true; }; "tall": { "alias": "tall"; "required": false; "isSignal": true; }; "from": { "alias": "from"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
67
+ }
68
+ /** Body cell. Same inputs as `UiTh` (bar `tall` and `width`), and they must be set on both to match. */
69
+ declare class UiTd {
70
+ readonly numeric: _angular_core.InputSignalWithTransform<boolean, unknown>;
71
+ readonly primary: _angular_core.InputSignalWithTransform<boolean, unknown>;
72
+ readonly secondary: _angular_core.InputSignalWithTransform<boolean, unknown>;
73
+ readonly from: _angular_core.InputSignal<"md" | "lg" | null>;
74
+ protected readonly classes: _angular_core.Signal<string>;
75
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiTd, never>;
76
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<UiTd, "td[uiTd]", never, { "numeric": { "alias": "numeric"; "required": false; "isSignal": true; }; "primary": { "alias": "primary"; "required": false; "isSignal": true; }; "secondary": { "alias": "secondary"; "required": false; "isSignal": true; }; "from": { "alias": "from"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
77
+ }
78
+ /** Group band sizes. */
79
+ declare const GROUP_SIZES: readonly ["md", "lg"];
80
+ type GroupSize = (typeof GROUP_SIZES)[number];
81
+ /**
82
+ * The band that opens a group of rows: name in 600 (a heading), meta beside it, the projected
83
+ * total pinned to the right. Spans the whole row through `colspan`.
84
+ *
85
+ * @example
86
+ * <tr uiTr group><td ui-group-cell colspan="4" name="Brokerage" meta="Savings plan">...total...</td></tr>
87
+ */
88
+ declare class UiGroupCell {
89
+ readonly name: _angular_core.InputSignal<string>;
90
+ readonly meta: _angular_core.InputSignal<string | undefined>;
91
+ readonly size: _angular_core.InputSignal<"md" | "lg">;
92
+ protected readonly hostClasses: _angular_core.Signal<string>;
93
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiGroupCell, never>;
94
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<UiGroupCell, "td[ui-group-cell]", never, { "name": { "alias": "name"; "required": true; "isSignal": true; }; "meta": { "alias": "meta"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
95
+ }
96
+ /**
97
+ * Makes a link or button the way into its row. By default an invisible layer stretches over the
98
+ * whole row, so the row is one target for the pointer, the keyboard and a screen reader, and its
99
+ * focus ring wraps the row. With `[stretch]="false"` only the name is the
100
+ * target: it underlines on hover and takes its own ring. `current` marks the open line.
101
+ *
102
+ * @example
103
+ * <td uiTd primary><a uiRowLink href="/lines/42">Ferrari</a></td>
104
+ * <td uiTd primary><a uiRowLink [stretch]="false" href="/accounts/3">Brokerage</a></td>
105
+ */
106
+ declare class UiRowLink {
107
+ readonly stretch: _angular_core.InputSignalWithTransform<boolean, unknown>;
108
+ readonly current: _angular_core.InputSignalWithTransform<boolean, unknown>;
109
+ protected readonly classes: _angular_core.Signal<"block max-w-full truncate rounded-control text-left font-medium outline-none after:absolute after:inset-0 after:rounded-control after:content-[\"\"] focus-visible:after:outline-2 focus-visible:after:-outline-offset-2 focus-visible:after:outline-(--ring)" | "block max-w-full truncate rounded-sm text-left font-medium underline-offset-[3px] outline-none hover:underline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-(--ring)">;
110
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiRowLink, never>;
111
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<UiRowLink, "a[uiRowLink], button[uiRowLink]", never, { "stretch": { "alias": "stretch"; "required": false; "isSignal": true; }; "current": { "alias": "current"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
112
+ }
113
+ /** A control in another cell of a stretched-link row: lifts it above the layer that covers the row. */
114
+ declare class UiRowAction {
115
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiRowAction, never>;
116
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<UiRowAction, "[uiRowAction]", never, {}, {}, never, never, true, never>;
117
+ }
118
+ /** Tones of a subtitle: subtle (default), `--stale` at 500, or the color of the cell. */
119
+ declare const SUB_TONES: readonly ["subtle", "stale", "inherit"];
120
+ type SubTone = (typeof SUB_TONES)[number];
121
+ /**
122
+ * A second line under a cell's main text. `narrow` shows it only under 1024px, where it carries
123
+ * the quantity, average cost and quote that were held back. Its amounts go through `ui-amount`
124
+ * so they mask.
125
+ *
126
+ * @example
127
+ * <span uiCellSub narrow>10 × 421.26 € · cost 388.10 €</span>
128
+ * <span uiCellSub tone="stale">Quote of 24/09</span>
129
+ */
130
+ declare class UiCellSub {
131
+ readonly narrow: _angular_core.InputSignalWithTransform<boolean, unknown>;
132
+ readonly tone: _angular_core.InputSignal<"subtle" | "stale" | "inherit">;
133
+ protected readonly classes: _angular_core.Signal<string>;
134
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiCellSub, never>;
135
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<UiCellSub, "[uiCellSub]", never, { "narrow": { "alias": "narrow"; "required": false; "isSignal": true; }; "tone": { "alias": "tone"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
136
+ }
137
+
138
+ export { CELL_BREAKPOINTS, GROUP_SIZES, SUB_TONES, TABLE_ROWS, UiCellSub, UiGroup, UiGroupCell, UiRowAction, UiRowLink, UiTable, UiTd, UiTh, UiTr };
139
+ export type { CellBreakpoint, GroupSize, SubTone, TableRow };
@@ -0,0 +1,51 @@
1
+ import * as i0 from '@angular/core';
2
+
3
+ type Toast = {
4
+ readonly id: number;
5
+ readonly text: string;
6
+ };
7
+ /**
8
+ * One-slot confirmation message queue read by `ui-toaster`.
9
+ *
10
+ * @example
11
+ * inject(UiToasts).show('Achat enregistré');
12
+ */
13
+ declare class UiToasts {
14
+ private readonly current;
15
+ private sequence;
16
+ readonly toast: i0.Signal<Toast | null>;
17
+ show(message: string): void;
18
+ dismiss(): void;
19
+ static ɵfac: i0.ɵɵFactoryDeclaration<UiToasts, never>;
20
+ static ɵprov: i0.ɵɵInjectableDeclaration<any>;
21
+ }
22
+
23
+ /**
24
+ * Confirmation message shown by `UiToasts.show`: one at a time, no action, gone after `--toast-duration`.
25
+ * Place it once in the app shell.
26
+ *
27
+ * @example
28
+ * <ui-toaster />
29
+ */
30
+ declare class UiToaster {
31
+ protected readonly toasts: UiToasts;
32
+ protected readonly toastClasses = "pointer-events-auto max-w-[min(28rem,calc(100vw-2rem))] rounded-container bg-(--elevated) px-4 py-3 text-label text-(--foreground) shadow-[0_8px_24px_rgb(0_0_0/0.16),inset_0_0_0_1px_var(--border)] transition-[opacity,translate] duration-(--duration-base) ease-out starting:opacity-0 starting:translate-y-2 motion-reduce:starting:translate-y-0";
33
+ private readonly host;
34
+ private readonly hovered;
35
+ private readonly focused;
36
+ private lastId;
37
+ private remaining;
38
+ private startedAt;
39
+ private timer;
40
+ constructor();
41
+ protected setHovered(value: boolean): void;
42
+ protected setFocused(value: boolean): void;
43
+ private resume;
44
+ private pause;
45
+ private stop;
46
+ static ɵfac: i0.ɵɵFactoryDeclaration<UiToaster, never>;
47
+ static ɵcmp: i0.ɵɵComponentDeclaration<UiToaster, "ui-toaster", never, {}, {}, never, never, true, never>;
48
+ }
49
+
50
+ export { UiToaster, UiToasts };
51
+ export type { Toast };