@joanroucoux/cairn-ui 0.7.2 → 0.8.1

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 +72 -0
  2. package/README.md +67 -0
  3. package/fesm2022/joanroucoux-cairn-ui-action-bar.mjs +54 -0
  4. package/fesm2022/joanroucoux-cairn-ui-action-bar.mjs.map +1 -0
  5. package/fesm2022/joanroucoux-cairn-ui-alert.mjs +129 -0
  6. package/fesm2022/joanroucoux-cairn-ui-alert.mjs.map +1 -0
  7. package/fesm2022/joanroucoux-cairn-ui-amount.mjs +114 -0
  8. package/fesm2022/joanroucoux-cairn-ui-amount.mjs.map +1 -0
  9. package/fesm2022/joanroucoux-cairn-ui-async.mjs +282 -0
  10. package/fesm2022/joanroucoux-cairn-ui-async.mjs.map +1 -0
  11. package/fesm2022/joanroucoux-cairn-ui-avatar.mjs +71 -0
  12. package/fesm2022/joanroucoux-cairn-ui-avatar.mjs.map +1 -0
  13. package/fesm2022/joanroucoux-cairn-ui-back-link.mjs +79 -0
  14. package/fesm2022/joanroucoux-cairn-ui-back-link.mjs.map +1 -0
  15. package/fesm2022/joanroucoux-cairn-ui-badge.mjs +48 -0
  16. package/fesm2022/joanroucoux-cairn-ui-badge.mjs.map +1 -0
  17. package/fesm2022/joanroucoux-cairn-ui-button.mjs +128 -0
  18. package/fesm2022/joanroucoux-cairn-ui-button.mjs.map +1 -0
  19. package/fesm2022/joanroucoux-cairn-ui-card.mjs +146 -0
  20. package/fesm2022/joanroucoux-cairn-ui-card.mjs.map +1 -0
  21. package/fesm2022/joanroucoux-cairn-ui-choice-chips.mjs +172 -0
  22. package/fesm2022/joanroucoux-cairn-ui-choice-chips.mjs.map +1 -0
  23. package/fesm2022/joanroucoux-cairn-ui-control.mjs +18 -0
  24. package/fesm2022/joanroucoux-cairn-ui-control.mjs.map +1 -0
  25. package/fesm2022/joanroucoux-cairn-ui-delta.mjs +103 -0
  26. package/fesm2022/joanroucoux-cairn-ui-delta.mjs.map +1 -0
  27. package/fesm2022/joanroucoux-cairn-ui-dialog.mjs +626 -0
  28. package/fesm2022/joanroucoux-cairn-ui-dialog.mjs.map +1 -0
  29. package/fesm2022/joanroucoux-cairn-ui-donut.mjs +347 -0
  30. package/fesm2022/joanroucoux-cairn-ui-donut.mjs.map +1 -0
  31. package/fesm2022/joanroucoux-cairn-ui-empty.mjs +47 -0
  32. package/fesm2022/joanroucoux-cairn-ui-empty.mjs.map +1 -0
  33. package/fesm2022/joanroucoux-cairn-ui-external-link.mjs +65 -0
  34. package/fesm2022/joanroucoux-cairn-ui-external-link.mjs.map +1 -0
  35. package/fesm2022/joanroucoux-cairn-ui-fact.mjs +99 -0
  36. package/fesm2022/joanroucoux-cairn-ui-fact.mjs.map +1 -0
  37. package/fesm2022/joanroucoux-cairn-ui-field.mjs +232 -0
  38. package/fesm2022/joanroucoux-cairn-ui-field.mjs.map +1 -0
  39. package/fesm2022/joanroucoux-cairn-ui-filter-chips.mjs +89 -0
  40. package/fesm2022/joanroucoux-cairn-ui-filter-chips.mjs.map +1 -0
  41. package/fesm2022/joanroucoux-cairn-ui-input.mjs +90 -0
  42. package/fesm2022/joanroucoux-cairn-ui-input.mjs.map +1 -0
  43. package/fesm2022/joanroucoux-cairn-ui-line-chart.mjs +844 -0
  44. package/fesm2022/joanroucoux-cairn-ui-line-chart.mjs.map +1 -0
  45. package/fesm2022/joanroucoux-cairn-ui-menu.mjs +241 -0
  46. package/fesm2022/joanroucoux-cairn-ui-menu.mjs.map +1 -0
  47. package/fesm2022/joanroucoux-cairn-ui-meter.mjs +86 -0
  48. package/fesm2022/joanroucoux-cairn-ui-meter.mjs.map +1 -0
  49. package/fesm2022/joanroucoux-cairn-ui-motion.mjs +415 -0
  50. package/fesm2022/joanroucoux-cairn-ui-motion.mjs.map +1 -0
  51. package/fesm2022/joanroucoux-cairn-ui-nav-item.mjs +45 -0
  52. package/fesm2022/joanroucoux-cairn-ui-nav-item.mjs.map +1 -0
  53. package/fesm2022/joanroucoux-cairn-ui-row.mjs +164 -0
  54. package/fesm2022/joanroucoux-cairn-ui-row.mjs.map +1 -0
  55. package/fesm2022/joanroucoux-cairn-ui-segmented.mjs +165 -0
  56. package/fesm2022/joanroucoux-cairn-ui-segmented.mjs.map +1 -0
  57. package/fesm2022/joanroucoux-cairn-ui-select.mjs +69 -0
  58. package/fesm2022/joanroucoux-cairn-ui-select.mjs.map +1 -0
  59. package/fesm2022/joanroucoux-cairn-ui-skeleton.mjs +91 -0
  60. package/fesm2022/joanroucoux-cairn-ui-skeleton.mjs.map +1 -0
  61. package/fesm2022/joanroucoux-cairn-ui-stale-link.mjs +43 -0
  62. package/fesm2022/joanroucoux-cairn-ui-stale-link.mjs.map +1 -0
  63. package/fesm2022/joanroucoux-cairn-ui-stat.mjs +96 -0
  64. package/fesm2022/joanroucoux-cairn-ui-stat.mjs.map +1 -0
  65. package/fesm2022/joanroucoux-cairn-ui-switch.mjs +37 -0
  66. package/fesm2022/joanroucoux-cairn-ui-switch.mjs.map +1 -0
  67. package/fesm2022/joanroucoux-cairn-ui-tab-bar.mjs +75 -0
  68. package/fesm2022/joanroucoux-cairn-ui-tab-bar.mjs.map +1 -0
  69. package/fesm2022/joanroucoux-cairn-ui-table.mjs +321 -0
  70. package/fesm2022/joanroucoux-cairn-ui-table.mjs.map +1 -0
  71. package/fesm2022/joanroucoux-cairn-ui-toast.mjs +153 -0
  72. package/fesm2022/joanroucoux-cairn-ui-toast.mjs.map +1 -0
  73. package/fesm2022/joanroucoux-cairn-ui.mjs +0 -5462
  74. package/fesm2022/joanroucoux-cairn-ui.mjs.map +1 -1
  75. package/package.json +141 -1
  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 -1440
@@ -1,1441 +1,2 @@
1
- import * as _angular_core from '@angular/core';
2
- import { InjectionToken, Signal, ElementRef } from '@angular/core';
3
1
 
4
- /**
5
- * Bar of actions fixed above the tab bar on iPhone: the primary actions of a detail screen, within
6
- * thumb reach. It sits `--tab-bar-height` (52px plus the safe area) above the bottom edge, so it clears `ui-tab-bar`, and
7
- * it is hidden from `64rem`, where the same actions live in the page itself. Its children share the
8
- * width equally. While it is on the page it publishes its height as `--action-bar-height` on the
9
- * root element, which `ui-toaster` adds to its offset so a confirmation never covers the actions.
10
- *
11
- * @example
12
- * <ui-action-bar>
13
- * <button ui-button variant="outline" size="tall">Sell</button>
14
- * <button ui-button size="tall">Buy</button>
15
- * </ui-action-bar>
16
- */
17
- declare class UiActionBar {
18
- constructor();
19
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiActionBar, never>;
20
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<UiActionBar, "ui-action-bar", never, {}, {}, never, ["*"], true, never>;
21
- }
22
-
23
- declare const ALERT_VARIANTS: readonly ["error", "warning"];
24
- type AlertVariant = (typeof ALERT_VARIANTS)[number];
25
- /**
26
- * Inline message explaining a failure or a consequence: an icon, an optional heading and a text.
27
- * It fades in when it appears; set `[fadeIn]="false"` on an alert that is part of the page as it
28
- * opens (an error state after a load), which shows without motion.
29
- *
30
- * @example
31
- * <ui-alert heading="Sign-in failed">Try again.</ui-alert>
32
- */
33
- declare class UiAlert {
34
- readonly variant: _angular_core.InputSignal<"error" | "warning">;
35
- readonly heading: _angular_core.InputSignal<string | undefined>;
36
- readonly fadeIn: _angular_core.InputSignalWithTransform<boolean, unknown>;
37
- protected readonly classes: _angular_core.Signal<string>;
38
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiAlert, never>;
39
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<UiAlert, "ui-alert", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "heading": { "alias": "heading"; "required": false; "isSignal": true; }; "fadeIn": { "alias": "fadeIn"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
40
- }
41
-
42
- /** App-wide "amounts are hidden" state. Defaults to never masked; the app overrides it. */
43
- declare const UI_AMOUNT_MASKED: InjectionToken<Signal<boolean>>;
44
- /** Available figure styles. `AmountNumeric` is derived from this tuple. */
45
- declare const AMOUNT_NUMERICS: readonly ["tabular", "proportional"];
46
- type AmountNumeric = (typeof AMOUNT_NUMERICS)[number];
47
- /** Available masking behaviors. `AmountMasking` is derived from this tuple. */
48
- declare const AMOUNT_MASKINGS: readonly ["dots", "hide"];
49
- type AmountMasking = (typeof AMOUNT_MASKINGS)[number];
50
- /**
51
- * A number or an amount of money, formatted for the locale and masked when the app hides amounts.
52
- *
53
- * @example
54
- * <ui-amount [value]="total" currency="EUR" numeric="proportional" />
55
- * <ui-amount [value]="dayChange" currency="EUR" signed whenMasked="hide" />
56
- */
57
- declare class UiAmount {
58
- #private;
59
- readonly value: _angular_core.InputSignal<number | null | undefined>;
60
- readonly currency: _angular_core.InputSignal<string | undefined>;
61
- readonly locale: _angular_core.InputSignal<string>;
62
- readonly signed: _angular_core.InputSignalWithTransform<boolean, unknown>;
63
- readonly fractionDigits: _angular_core.InputSignal<number>;
64
- readonly numeric: _angular_core.InputSignal<"tabular" | "proportional">;
65
- readonly whenMasked: _angular_core.InputSignal<"dots" | "hide">;
66
- protected readonly hidden: Signal<boolean>;
67
- protected readonly text: Signal<string>;
68
- protected readonly classes: Signal<string>;
69
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiAmount, never>;
70
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<UiAmount, "ui-amount", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "currency": { "alias": "currency"; "required": false; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; "signed": { "alias": "signed"; "required": false; "isSignal": true; }; "fractionDigits": { "alias": "fractionDigits"; "required": false; "isSignal": true; }; "numeric": { "alias": "numeric"; "required": false; "isSignal": true; }; "whenMasked": { "alias": "whenMasked"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
71
- }
72
-
73
- type AmountFormatOptions = {
74
- locale: string;
75
- currency?: string;
76
- signed?: boolean;
77
- fractionDigits?: number;
78
- };
79
- /** Formats a number or an amount for the locale, with a missing value as an em dash and masking behind four bullets. */
80
- declare function formatAmount(value: number | null | undefined, options: AmountFormatOptions, masked?: boolean): string;
81
-
82
- /** Available async block states. `AsyncState` is derived from this tuple. */
83
- declare const ASYNC_STATES: readonly ["loading", "error", "empty", "ready"];
84
- type AsyncState = (typeof ASYNC_STATES)[number];
85
- /** Looks of the error block. `AsyncVariant` is derived from this tuple. */
86
- declare const ASYNC_VARIANTS: readonly ["elevated", "plain", "emphasis", "inline"];
87
- type AsyncVariant = (typeof ASYNC_VARIANTS)[number];
88
- /** Alignments of the error block; `auto` is centred from 64rem. `AsyncAlign` is derived from this tuple. */
89
- declare const ASYNC_ALIGNS: readonly ["start", "center", "auto"];
90
- type AsyncAlign = (typeof ASYNC_ALIGNS)[number];
91
- /**
92
- * The three states of a block that depends on a service call, next to the ready content.
93
- *
94
- * @example
95
- * <ui-async [state]="totalState()" errorTitle="Total could not be loaded" errorMessage="The server did not answer." retryLabel="Retry" (retry)="reload()">
96
- * <span asyncLoading><ui-skeleton shape="figure" /></span>
97
- * <span asyncEmpty>Add a holding to see your total.</span>
98
- * <span>{{ total() }}</span>
99
- * </ui-async>
100
- */
101
- declare class UiAsync {
102
- #private;
103
- readonly state: _angular_core.InputSignal<"error" | "loading" | "empty" | "ready">;
104
- readonly errorTitle: _angular_core.InputSignal<string | undefined>;
105
- readonly errorMessage: _angular_core.InputSignal<string | undefined>;
106
- readonly retryLabel: _angular_core.InputSignal<string | undefined>;
107
- readonly variant: _angular_core.InputSignal<"elevated" | "plain" | "emphasis" | "inline">;
108
- readonly align: _angular_core.InputSignal<"start" | "center" | "auto">;
109
- readonly card: _angular_core.InputSignalWithTransform<boolean, unknown>;
110
- readonly fill: _angular_core.InputSignalWithTransform<boolean, unknown>;
111
- readonly retry: _angular_core.OutputEmitterRef<void>;
112
- protected readonly shown: _angular_core.Signal<"error" | "loading" | "empty" | "ready" | null>;
113
- protected readonly filling: _angular_core.Signal<boolean>;
114
- protected readonly iconSize: _angular_core.Signal<16 | 18>;
115
- protected readonly boxClasses: _angular_core.Signal<string>;
116
- protected readonly titleClasses: _angular_core.Signal<string>;
117
- protected readonly messageClasses: _angular_core.Signal<string>;
118
- protected readonly retryButtonClasses: _angular_core.Signal<string>;
119
- constructor();
120
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiAsync, never>;
121
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<UiAsync, "ui-async", never, { "state": { "alias": "state"; "required": true; "isSignal": true; }; "errorTitle": { "alias": "errorTitle"; "required": false; "isSignal": true; }; "errorMessage": { "alias": "errorMessage"; "required": false; "isSignal": true; }; "retryLabel": { "alias": "retryLabel"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "align": { "alias": "align"; "required": false; "isSignal": true; }; "card": { "alias": "card"; "required": false; "isSignal": true; }; "fill": { "alias": "fill"; "required": false; "isSignal": true; }; }, { "retry": "retry"; }, never, ["[asyncLoading]", "[asyncEmpty]", "*"], true, never>;
122
- }
123
-
124
- /**
125
- * Turns the live state of a call into the state to draw: `loading` only appears once the call has
126
- * lasted 150 ms and, once shown, stays at least 400 ms, so a fast call never flashes a skeleton and a
127
- * slow one never blinks. Until then the previous state stays on screen (a reload keeps its content);
128
- * `null` means nothing to draw yet, for a first load still under 150 ms. Call it in an injection context.
129
- *
130
- * @example
131
- * protected readonly shown = delayedState(this.state);
132
- */
133
- declare function delayedState(source: Signal<AsyncState>): Signal<AsyncState | null>;
134
-
135
- /** Available avatar sizes. `AvatarSize` is derived from this tuple. */
136
- declare const AVATAR_SIZES: readonly ["sm", "md", "lg", "auto"];
137
- type AvatarSize = (typeof AVATAR_SIZES)[number];
138
- /**
139
- * Initials in a disc, standing in for a person. Single-user application: there is exactly one.
140
- *
141
- * @example
142
- * <ui-avatar initials="JR" label="My account" />
143
- */
144
- declare class UiAvatar {
145
- readonly initials: _angular_core.InputSignal<string>;
146
- readonly label: _angular_core.InputSignal<string>;
147
- readonly size: _angular_core.InputSignal<"auto" | "sm" | "md" | "lg">;
148
- protected readonly classes: _angular_core.Signal<string>;
149
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiAvatar, never>;
150
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<UiAvatar, "ui-avatar", never, { "initials": { "alias": "initials"; "required": true; "isSignal": true; }; "label": { "alias": "label"; "required": true; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
151
- }
152
- /**
153
- * Round hit area around a `ui-avatar` that links somewhere: 44px on touch, 40px from 64rem, with a
154
- * glow on hover and the press scale. On the current page (`aria-current="page"`, which `routerLinkActive`
155
- * sets through `ariaCurrentWhenActive`) it holds a soft halo, drawn at once when the route changes. The avatar
156
- * itself keeps its own size.
157
- *
158
- * @example
159
- * <a uiAvatarLink routerLink="/profile"><ui-avatar initials="JR" label="Profile" size="auto" /></a>
160
- */
161
- declare class UiAvatarLink {
162
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiAvatarLink, never>;
163
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<UiAvatarLink, "a[uiAvatarLink], button[uiAvatarLink]", never, {}, {}, never, never, true, never>;
164
- }
165
-
166
- /** Available back link sizes. `BackLinkSize` is derived from this tuple. */
167
- declare const BACK_LINK_SIZES: readonly ["md", "sm", "header"];
168
- type BackLinkSize = (typeof BACK_LINK_SIZES)[number];
169
- /**
170
- * Link back to the parent screen: a chevron and the name of the destination.
171
- *
172
- * @example
173
- * <a ui-back-link routerLink="/accounts">Accounts</a>
174
- */
175
- declare class UiBackLink {
176
- readonly size: _angular_core.InputSignal<"sm" | "md" | "header">;
177
- protected readonly chevron: _angular_core.Signal<number>;
178
- protected readonly classes: _angular_core.Signal<string>;
179
- constructor();
180
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiBackLink, never>;
181
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<UiBackLink, "a[ui-back-link]", never, { "size": { "alias": "size"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
182
- }
183
-
184
- /** Available badge variants. `BadgeVariant` is derived from this tuple. */
185
- declare const BADGE_VARIANTS: readonly ["neutral", "outline"];
186
- type BadgeVariant = (typeof BADGE_VARIANTS)[number];
187
- declare const BADGE_SIZES: readonly ["md", "sm"];
188
- type BadgeSize = (typeof BADGE_SIZES)[number];
189
- /**
190
- * Small status descriptor for counts, states or labels, such as an instrument's asset class.
191
- *
192
- * @example
193
- * <ui-badge>ETF</ui-badge>
194
- */
195
- declare class UiBadge {
196
- readonly variant: _angular_core.InputSignal<"neutral" | "outline">;
197
- readonly size: _angular_core.InputSignal<"sm" | "md">;
198
- protected readonly classes: _angular_core.Signal<string>;
199
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiBadge, never>;
200
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<UiBadge, "ui-badge", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
201
- }
202
-
203
- /** Available button variants. `ButtonVariant` is derived from this tuple. */
204
- declare const BUTTON_VARIANTS: readonly ["primary", "outline", "ghost", "destructive", "quiet", "quiet-destructive", "outline-destructive", "quiet-glow", "tonal"];
205
- type ButtonVariant = (typeof BUTTON_VARIANTS)[number];
206
- /** Available button sizes. */
207
- declare const BUTTON_SIZES: readonly ["compact", "slim", "xs", "sm", "md", "lg", "xl", "xxl", "tall", "block", "icon", "icon-sm"];
208
- type ButtonSize = (typeof BUTTON_SIZES)[number];
209
- /**
210
- * Styled native button or anchor, applied as an attribute so the host keeps every native behavior.
211
- *
212
- * @example
213
- * <button ui-button variant="destructive">Delete</button>
214
- * <button ui-button size="icon" variant="ghost" aria-label="More actions">...</button>
215
- */
216
- declare class UiButton {
217
- readonly variant: _angular_core.InputSignal<"outline" | "primary" | "ghost" | "destructive" | "quiet" | "quiet-destructive" | "outline-destructive" | "quiet-glow" | "tonal">;
218
- readonly size: _angular_core.InputSignal<"compact" | "sm" | "md" | "lg" | "slim" | "xs" | "xl" | "xxl" | "tall" | "block" | "icon" | "icon-sm">;
219
- readonly loading: _angular_core.InputSignalWithTransform<boolean, unknown>;
220
- readonly busy: _angular_core.InputSignalWithTransform<boolean, unknown>;
221
- protected readonly inactive: _angular_core.Signal<boolean>;
222
- protected readonly classes: _angular_core.Signal<string>;
223
- constructor();
224
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiButton, never>;
225
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<UiButton, "button[ui-button], a[ui-button]", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "busy": { "alias": "busy"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
226
- }
227
-
228
- /** Available card variants. `CardVariant` is derived from this tuple. */
229
- declare const CARD_VARIANTS: readonly ["default", "elevated", "inset"];
230
- type CardVariant = (typeof CARD_VARIANTS)[number];
231
- /** Available card paddings. `CardPadding` is derived from this tuple. */
232
- declare const CARD_PADDINGS: readonly ["none", "xs", "sm", "md", "list", "rows", "recap", "panel"];
233
- type CardPadding = (typeof CARD_PADDINGS)[number];
234
- /** Where the card surface (fill, border, radius) and its padding apply. `CardSurface` is derived from this tuple. */
235
- declare const CARD_SURFACES: readonly ["always", "lg", "max-lg"];
236
- type CardSurface = (typeof CARD_SURFACES)[number];
237
- /**
238
- * Surface that groups related content: a summary block, a table, a side panel. `surface` limits the
239
- * fill, border, radius and padding to one side of `64rem`, for a block that is a card on a desktop and
240
- * plain on an iPhone, or the reverse. `variant="inset"` is the `--background` box that sits inside a
241
- * card or a dialog: a picked title, a results list, a recap, an empty-state panel.
242
- *
243
- * @example
244
- * <ui-card variant="elevated" padding="sm">Total</ui-card>
245
- * <ui-card variant="inset" border="hairline" padding="xs">Results</ui-card>
246
- * <ui-card padding="none" clip>Table that touches the edges, clipped to the corners</ui-card>
247
- * <ui-card surface="max-lg">Card on an iPhone, plain on a desktop</ui-card>
248
- */
249
- declare class UiCard {
250
- readonly variant: _angular_core.InputSignal<"elevated" | "default" | "inset">;
251
- readonly padding: _angular_core.InputSignal<"sm" | "md" | "xs" | "none" | "list" | "rows" | "recap" | "panel">;
252
- readonly surface: _angular_core.InputSignal<"lg" | "always" | "max-lg">;
253
- readonly border: _angular_core.InputSignal<"auto" | "none" | "border" | "hairline">;
254
- readonly clip: _angular_core.InputSignalWithTransform<boolean, unknown>;
255
- protected readonly classes: _angular_core.Signal<string>;
256
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiCard, never>;
257
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<UiCard, "ui-card", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "padding": { "alias": "padding"; "required": false; "isSignal": true; }; "surface": { "alias": "surface"; "required": false; "isSignal": true; }; "border": { "alias": "border"; "required": false; "isSignal": true; }; "clip": { "alias": "clip"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
258
- }
259
-
260
- /**
261
- * The part of a validation error this library reads. Angular's own `ValidationError` satisfies it,
262
- * which is how a Signal Forms error reaches a field without this package depending on
263
- * `@angular/forms`.
264
- */
265
- type UiControlError = {
266
- readonly message?: string;
267
- };
268
- /** What a styled control offers the field wrapped around it. */
269
- type UiControl = {
270
- readonly errors: Signal<readonly UiControlError[]>;
271
- readonly touched: Signal<boolean>;
272
- };
273
-
274
- type ChoiceChipOption = {
275
- value: string;
276
- label: string;
277
- };
278
- /**
279
- * Exclusive choice among a handful of named options, shown as wrapping pills: an account envelope,
280
- * a category, a frequency. Binds to Signal Forms with `[formField]`.
281
- *
282
- * @example
283
- * <ui-choice-chips label="Envelope" [options]="envelopes" [(value)]="envelope" />
284
- *
285
- * @example
286
- * <ui-choice-chips label="Envelope" [options]="envelopes" [formField]="form.envelope" />
287
- */
288
- declare class UiChoiceChips implements UiControl {
289
- #private;
290
- readonly options: _angular_core.InputSignal<ChoiceChipOption[]>;
291
- readonly value: _angular_core.ModelSignal<string>;
292
- readonly label: _angular_core.InputSignal<string | undefined>;
293
- readonly ariaLabel: _angular_core.InputSignal<string | undefined>;
294
- readonly ariaLabelledby: _angular_core.InputSignal<string | undefined>;
295
- readonly surface: _angular_core.InputSignal<"background" | "card">;
296
- readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
297
- readonly errors: _angular_core.InputSignal<readonly UiControlError[]>;
298
- readonly invalid: _angular_core.InputSignalWithTransform<boolean, unknown>;
299
- readonly required: _angular_core.InputSignalWithTransform<boolean, unknown>;
300
- readonly touched: _angular_core.InputSignal<boolean>;
301
- readonly touch: _angular_core.OutputEmitterRef<void>;
302
- protected readonly labelId: string;
303
- protected readonly radios: _angular_core.Signal<readonly ElementRef<HTMLButtonElement>[]>;
304
- protected readonly labelledBy: _angular_core.Signal<string | null>;
305
- protected chipClasses(optionValue: string): string;
306
- protected tabIndexFor(optionValue: string): number;
307
- protected select(optionValue: string): void;
308
- protected onFocusOut(event: FocusEvent): void;
309
- protected onKeydown(event: KeyboardEvent, index: number): void;
310
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiChoiceChips, never>;
311
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<UiChoiceChips, "ui-choice-chips", never, { "options": { "alias": "options"; "required": true; "isSignal": true; }; "value": { "alias": "value"; "required": true; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "ariaLabelledby": { "alias": "ariaLabelledby"; "required": false; "isSignal": true; }; "surface": { "alias": "surface"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "errors": { "alias": "errors"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "touched": { "alias": "touched"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "touch": "touch"; }, never, never, true, never>;
312
- }
313
-
314
- /** Available delta emphases. `DeltaEmphasis` is derived from this tuple. */
315
- declare const DELTA_EMPHASES: readonly ["text", "pill"];
316
- type DeltaEmphasis = (typeof DELTA_EMPHASES)[number];
317
- /** Type sizes. `DeltaSize` is derived from this tuple. */
318
- declare const DELTA_SIZES: readonly ["label", "inherit"];
319
- type DeltaSize = (typeof DELTA_SIZES)[number];
320
- /** Font weights. `DeltaWeight` is derived from this tuple. */
321
- declare const DELTA_WEIGHTS: readonly ["medium", "regular"];
322
- type DeltaWeight = (typeof DELTA_WEIGHTS)[number];
323
- type Sign = 'positive' | 'negative' | 'neutral' | 'unknown';
324
- /**
325
- * Signed amount whose sign carries meaning: a gain, a loss, or an unknown.
326
- *
327
- * A null value is not a zero: a holding with no cost basis exists, and showing 0 would falsely
328
- * claim a known gain of zero. Color never carries the sign on its own: the projected text must
329
- * already contain a + or a minus sign.
330
- *
331
- * @example
332
- * <ui-delta [value]="holding.dayChangeEur" unknownLabel="Not available">
333
- * {{ holding.dayChangeEur | signedMoney }}
334
- * </ui-delta>
335
- */
336
- declare class UiDelta {
337
- readonly value: _angular_core.InputSignal<number | null | undefined>;
338
- readonly unknownLabel: _angular_core.InputSignal<string>;
339
- readonly emphasis: _angular_core.InputSignal<"text" | "pill">;
340
- readonly size: _angular_core.InputSignal<"label" | "inherit">;
341
- readonly weight: _angular_core.InputSignal<"medium" | "regular">;
342
- protected readonly sign: _angular_core.Signal<Sign>;
343
- protected readonly classes: _angular_core.Signal<string>;
344
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiDelta, never>;
345
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<UiDelta, "ui-delta", never, { "value": { "alias": "value"; "required": true; "isSignal": true; }; "unknownLabel": { "alias": "unknownLabel"; "required": true; "isSignal": true; }; "emphasis": { "alias": "emphasis"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "weight": { "alias": "weight"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
346
- }
347
-
348
- /** Named dialog widths; any other CSS length is accepted as is. `DialogWidth` is derived from this tuple. */
349
- declare const DIALOG_WIDTHS: readonly ["md", "lg"];
350
- type DialogWidth = (typeof DIALOG_WIDTHS)[number];
351
- /** Spacing presets. `DialogLayout` is derived from this tuple. */
352
- declare const DIALOG_LAYOUTS: readonly ["trade", "form", "list", "confirm"];
353
- type DialogLayout = (typeof DIALOG_LAYOUTS)[number];
354
- type LayoutClasses = {
355
- dialog: string;
356
- header: string;
357
- title: string;
358
- cross: string;
359
- icon: string;
360
- handle: string;
361
- body: string;
362
- footer: string;
363
- };
364
- /** What started a close, as `closed` reports it. `DialogCloseReason` is derived from this tuple. */
365
- declare const DIALOG_CLOSE_REASONS: readonly ["escape", "backdrop", "cross", "drag", "programmatic"];
366
- type DialogCloseReason = (typeof DIALOG_CLOSE_REASONS)[number];
367
- /**
368
- * Modal dialog on the native <dialog>: a bottom sheet under `64rem`, centered above it.
369
- *
370
- * `busy` keeps it open while its action runs: Escape, a click on the backdrop and a drag of the sheet do
371
- * nothing and the cross is disabled. The owner disables its own buttons and still closes it through `open`.
372
- *
373
- * @example
374
- * <ui-dialog heading="Buy" description="Ferrari" closeLabel="Close" width="528px" [open]="buying()" (dismissed)="buying.set(false)">
375
- * <p>Body</p>
376
- * <button dialogActions ui-button variant="outline" class="max-lg:hidden" (click)="buying.set(false)">Cancel</button>
377
- * <button dialogActions ui-button>Buy 40 shares</button>
378
- * </ui-dialog>
379
- */
380
- declare class UiDialog {
381
- #private;
382
- readonly heading: _angular_core.InputSignal<string>;
383
- readonly description: _angular_core.InputSignal<string | undefined>;
384
- readonly closeLabel: _angular_core.InputSignal<string | undefined>;
385
- readonly layout: _angular_core.InputSignal<"list" | "form" | "trade" | "confirm">;
386
- readonly truncateDescription: _angular_core.InputSignalWithTransform<boolean, unknown>;
387
- readonly width: _angular_core.InputSignal<"md" | "lg" | (string & {})>;
388
- readonly open: _angular_core.InputSignalWithTransform<boolean, unknown>;
389
- readonly busy: _angular_core.InputSignalWithTransform<boolean, unknown>;
390
- readonly dismissed: _angular_core.OutputEmitterRef<void>;
391
- readonly closed: _angular_core.OutputEmitterRef<"drag" | "escape" | "backdrop" | "cross" | "programmatic">;
392
- protected readonly headingId: string;
393
- protected readonly descriptionId: string;
394
- protected readonly bodyId: string;
395
- protected readonly scrollable: _angular_core.WritableSignal<boolean>;
396
- protected readonly describedBy: _angular_core.Signal<string | null>;
397
- protected readonly widthValue: _angular_core.Signal<string>;
398
- protected readonly spec: _angular_core.Signal<LayoutClasses>;
399
- protected readonly headerClasses: _angular_core.Signal<string>;
400
- protected readonly titleClasses: _angular_core.Signal<string>;
401
- protected readonly crossClasses: _angular_core.Signal<string>;
402
- protected readonly iconClasses: _angular_core.Signal<string>;
403
- protected readonly footerClasses: _angular_core.Signal<string>;
404
- protected readonly classes: _angular_core.Signal<string>;
405
- constructor();
406
- protected close(reason: DialogCloseReason): void;
407
- protected onCancel(event: Event): void;
408
- protected onKeydown(event: KeyboardEvent): void;
409
- protected onPointerDown(event: MouseEvent): void;
410
- protected onClick(event: MouseEvent): void;
411
- protected onNativeClose(): void;
412
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiDialog, never>;
413
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<UiDialog, "ui-dialog", never, { "heading": { "alias": "heading"; "required": true; "isSignal": true; }; "description": { "alias": "description"; "required": false; "isSignal": true; }; "closeLabel": { "alias": "closeLabel"; "required": false; "isSignal": true; }; "layout": { "alias": "layout"; "required": false; "isSignal": true; }; "truncateDescription": { "alias": "truncateDescription"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "open": { "alias": "open"; "required": false; "isSignal": true; }; "busy": { "alias": "busy"; "required": false; "isSignal": true; }; }, { "dismissed": "dismissed"; "closed": "closed"; }, never, ["*", "[dialogActions]"], true, never>;
414
- }
415
-
416
- type DonutSlice = {
417
- id: string;
418
- label: string;
419
- value: number;
420
- sublabel?: string;
421
- };
422
- type Ramp = 1 | 2 | 3 | 4 | 5 | 6;
423
- type RankedSlice = DonutSlice & {
424
- share: number;
425
- ramp: Ramp;
426
- members: string[];
427
- };
428
-
429
- type PositionedSlice = RankedSlice & {
430
- dash: string;
431
- offset: string;
432
- };
433
-
434
- /**
435
- * A ring chart with a legend: slices rank from largest to smallest on a grey ramp, and hovering,
436
- * focusing or activating a legend row highlights its slice and centres it in the ring.
437
- *
438
- * @example
439
- * <ui-donut [slices]="byAssetClass()" label="Par classe d'actif" othersLabel="Autres" [valueFormat]="formatEur" [shareFormat]="formatShare" (sliceSelect)="goToHoldings($event)" />
440
- */
441
- declare class UiDonut {
442
- readonly slices: _angular_core.InputSignal<DonutSlice[]>;
443
- readonly label: _angular_core.InputSignal<string>;
444
- readonly othersLabel: _angular_core.InputSignal<string>;
445
- readonly valueFormat: _angular_core.InputSignal<(value: number) => string>;
446
- readonly shareFormat: _angular_core.InputSignal<(share: number) => string>;
447
- readonly legendHref: _angular_core.InputSignal<((id: string) => string | null) | undefined>;
448
- readonly sliceSelect: _angular_core.OutputEmitterRef<string>;
449
- protected readonly activeId: _angular_core.WritableSignal<string | null>;
450
- protected readonly ranked: _angular_core.Signal<RankedSlice[]>;
451
- protected readonly positioned: _angular_core.Signal<PositionedSlice[]>;
452
- protected readonly active: _angular_core.Signal<RankedSlice | null>;
453
- protected readonly ariaLabel: _angular_core.Signal<string>;
454
- protected readonly radius = 78;
455
- protected readonly ringWidth = 30;
456
- protected strokeColor(slice: RankedSlice): string;
457
- protected sliceClasses(slice: RankedSlice): string;
458
- protected dotClasses(slice: RankedSlice): string;
459
- protected rowClasses(slice: RankedSlice): string;
460
- protected subLabel(slice: RankedSlice): string;
461
- protected isActive(slice: RankedSlice): boolean;
462
- protected highlight(id: string): void;
463
- protected clearHighlight(id: string): void;
464
- protected hrefFor(id: string): string | null;
465
- protected follow(event: MouseEvent, slice: RankedSlice): void;
466
- protected select(slice: RankedSlice): void;
467
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiDonut, never>;
468
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<UiDonut, "ui-donut", never, { "slices": { "alias": "slices"; "required": true; "isSignal": true; }; "label": { "alias": "label"; "required": true; "isSignal": true; }; "othersLabel": { "alias": "othersLabel"; "required": true; "isSignal": true; }; "valueFormat": { "alias": "valueFormat"; "required": false; "isSignal": true; }; "shareFormat": { "alias": "shareFormat"; "required": false; "isSignal": true; }; "legendHref": { "alias": "legendHref"; "required": false; "isSignal": true; }; }, { "sliceSelect": "sliceSelect"; }, never, never, true, never>;
469
- }
470
-
471
- /**
472
- * Centred empty state: a title, a hint and an action slot, such as a catalogue search that matches
473
- * nothing. The padding is 24px, 48px from 64rem.
474
- *
475
- * @example
476
- * <ui-empty heading="Aucun instrument ne correspond à « zzz »" hint="La recherche porte sur le nom et l'ISIN.">
477
- * <button ui-button variant="outline" size="md" type="button">Ajouter une ligne</button>
478
- * </ui-empty>
479
- */
480
- declare class UiEmpty {
481
- readonly heading: _angular_core.InputSignal<string>;
482
- readonly hint: _angular_core.InputSignal<string>;
483
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiEmpty, never>;
484
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<UiEmpty, "ui-empty", never, { "heading": { "alias": "heading"; "required": true; "isSignal": true; }; "hint": { "alias": "hint"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
485
- }
486
-
487
- /**
488
- * Link to another site: the label followed by an external-link icon. A 44px target on touch,
489
- * an underline on hover with a mouse.
490
- *
491
- * @example
492
- * <a ui-external-link href="https://example.com" target="_blank" rel="noopener">Page on example.com</a>
493
- */
494
- declare class UiExternalLink {
495
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiExternalLink, never>;
496
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<UiExternalLink, "a[ui-external-link]", never, {}, {}, never, ["*"], true, never>;
497
- }
498
-
499
- /** Available fact row sizes. `FactSize` is derived from this tuple. */
500
- declare const FACT_SIZES: readonly ["md", "sm", "auto", "recap"];
501
- type FactSize = (typeof FACT_SIZES)[number];
502
- /** Colour of the line under a fact value. `stale` flags an out-of-date figure. */
503
- declare const FACT_SUB_TONES: readonly ["subtle", "stale"];
504
- type FactSubTone = (typeof FACT_SUB_TONES)[number];
505
- /**
506
- * The list that holds `div[ui-fact]` rows, as a native description list.
507
- *
508
- * @example
509
- * <dl uiFacts>
510
- * <div ui-fact label="Quantity">500</div>
511
- * <div ui-fact label="Price" sub="24/09 · Yahoo">28,64 €</div>
512
- * </dl>
513
- */
514
- declare class UiFacts {
515
- readonly ruled: _angular_core.InputSignalWithTransform<boolean, unknown>;
516
- protected readonly classes: _angular_core.Signal<"m-0 flex flex-col shadow-[inset_0_1px_0_var(--hairline)]" | "m-0 flex flex-col">;
517
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiFacts, never>;
518
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<UiFacts, "dl[uiFacts]", never, { "ruled": { "alias": "ruled"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
519
- }
520
- /**
521
- * One fact of a `dl[uiFacts]`: a label on the left, its value on the right, an optional sub-line
522
- * under the value, and a hairline above every row but the first at the `md` size (the `sm` desktop list is separated by space only). The projected content is the value.
523
- *
524
- * @example
525
- * <div ui-fact label="Price" sub="24/09 · Yahoo" subTone="stale">28,64 €</div>
526
- */
527
- declare class UiFact {
528
- readonly label: _angular_core.InputSignal<string>;
529
- readonly sub: _angular_core.InputSignal<string | undefined>;
530
- readonly subTone: _angular_core.InputSignal<"subtle" | "stale">;
531
- readonly size: _angular_core.InputSignal<"auto" | "sm" | "md" | "recap">;
532
- protected readonly classes: _angular_core.Signal<string>;
533
- protected readonly valueClasses: _angular_core.Signal<string>;
534
- protected readonly subClasses: _angular_core.Signal<string>;
535
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiFact, never>;
536
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<UiFact, "div[ui-fact]", never, { "label": { "alias": "label"; "required": true; "isSignal": true; }; "sub": { "alias": "sub"; "required": false; "isSignal": true; }; "subTone": { "alias": "subTone"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
537
- }
538
-
539
- /**
540
- * Marks an element, typically an 18px svg icon, as the leading content of a `ui-field`: it sits
541
- * inside the control's left edge and the control's text is inset to clear it. Decorative, so hidden
542
- * from assistive technologies.
543
- *
544
- * @example
545
- * <ui-field label="Search" labelHidden>
546
- * <svg uiFieldLeading width="18" height="18" viewBox="0 0 24 24">...</svg>
547
- * <input uiInput type="search" />
548
- * </ui-field>
549
- */
550
- declare class UiFieldLeading {
551
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiFieldLeading, never>;
552
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<UiFieldLeading, "[uiFieldLeading]", never, {}, {}, never, never, true, never>;
553
- }
554
- /**
555
- * Marks an element, typically an icon button, as the trailing action of a `ui-field`: it sits on the
556
- * control's right edge, square to the control's height, and the control's text is padded to clear it.
557
- *
558
- * @example
559
- * <ui-field label="Password">
560
- * <input uiInput type="password" size="xl" />
561
- * <button uiFieldTrailing type="button" aria-label="Show the password" [attr.aria-pressed]="shown()">...</button>
562
- * </ui-field>
563
- *
564
- * A toggle such as this one should carry `aria-pressed`. The slot shares the right edge with `unit`:
565
- * set one or the other, not both.
566
- */
567
- declare class UiFieldTrailing {
568
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiFieldTrailing, never>;
569
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<UiFieldTrailing, "[uiFieldTrailing]", never, {}, {}, never, never, true, never>;
570
- }
571
- /**
572
- * Label, control, hint and error as one unit. The control stays a plain native element:
573
- * the field finds it in its own projected content and wires the ARIA attributes onto it.
574
- *
575
- * The message comes from the caller's `error`, or, where none is set, from the projected control's
576
- * own validation state once it is touched.
577
- *
578
- * @example
579
- * <ui-field label="Quantity" hint="Leave empty if unknown">
580
- * <input uiInput type="number" [formField]="form.quantity" />
581
- * </ui-field>
582
- *
583
- * @example
584
- * <ui-field label="ISIN or name" [error]="blank() ? 'Enter an ISIN' : undefined">
585
- * <input uiInput type="search" />
586
- * </ui-field>
587
- *
588
- * @example
589
- * <ui-field label="Search holdings" labelHidden>
590
- * <input uiInput type="search" placeholder="Instrument or account" />
591
- * </ui-field>
592
- */
593
- declare class UiField {
594
- #private;
595
- readonly label: _angular_core.InputSignal<string>;
596
- readonly labelHidden: _angular_core.InputSignalWithTransform<boolean, unknown>;
597
- readonly hint: _angular_core.InputSignal<string | undefined>;
598
- readonly error: _angular_core.InputSignal<string | undefined>;
599
- readonly unit: _angular_core.InputSignal<string | undefined>;
600
- readonly optional: _angular_core.InputSignal<string | undefined>;
601
- readonly invalid: _angular_core.InputSignalWithTransform<boolean, unknown>;
602
- protected readonly hintId: string;
603
- protected readonly errorId: string;
604
- protected readonly control: _angular_core.Signal<UiControl | undefined>;
605
- protected readonly leading: _angular_core.Signal<UiFieldLeading | undefined>;
606
- protected readonly trailing: _angular_core.Signal<UiFieldTrailing | undefined>;
607
- protected readonly rowClasses: _angular_core.Signal<string>;
608
- protected readonly labelClasses: _angular_core.Signal<"sr-only" | "text-label leading-[17px] font-medium text-(--muted-foreground)">;
609
- /**
610
- * The caller's own `error` wins: it is the only way to report something the control does not
611
- * know about, such as a search box refusing an empty query.
612
- */
613
- protected readonly message: _angular_core.Signal<string | undefined>;
614
- constructor();
615
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiField, never>;
616
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<UiField, "ui-field", never, { "label": { "alias": "label"; "required": true; "isSignal": true; }; "labelHidden": { "alias": "labelHidden"; "required": false; "isSignal": true; }; "hint": { "alias": "hint"; "required": false; "isSignal": true; }; "error": { "alias": "error"; "required": false; "isSignal": true; }; "unit": { "alias": "unit"; "required": false; "isSignal": true; }; "optional": { "alias": "optional"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; }, {}, ["control", "leading", "trailing"], ["[uiFieldLeading]", "*", "[uiFieldTrailing]"], true, never>;
617
- }
618
-
619
- type FilterChipOption = {
620
- value: string;
621
- label: string;
622
- count?: number | string | null;
623
- };
624
- /**
625
- * A row of single-choice filter pills, each with an optional count, that narrows a list in place:
626
- * an asset class, a status. On touch it scrolls on one line, bleeding to the screen edges; with a
627
- * fine pointer it wraps.
628
- *
629
- * @example
630
- * <ui-filter-chips ariaLabel="Filter by class" [options]="classes()" [(value)]="selectedClass" />
631
- */
632
- declare class UiFilterChips {
633
- readonly options: _angular_core.InputSignal<FilterChipOption[]>;
634
- readonly value: _angular_core.ModelSignal<string>;
635
- readonly ariaLabel: _angular_core.InputSignal<string>;
636
- protected readonly chipClasses = "flex-none flex h-11 items-center rounded-pill border-0 bg-transparent p-0 font-[inherit] cursor-pointer transition-transform duration-(--duration-press) ease-out active:scale-(--press-scale) focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-(--ring) pointer-fine:h-8 pointer-fine:focus-visible:outline-offset-2";
637
- protected pillClasses(optionValue: string): string;
638
- protected countClasses(optionValue: string): string;
639
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiFilterChips, never>;
640
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<UiFilterChips, "ui-filter-chips", never, { "options": { "alias": "options"; "required": true; "isSignal": true; }; "value": { "alias": "value"; "required": true; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": true; "isSignal": true; }; }, { "value": "valueChange"; }, never, never, true, never>;
641
- }
642
-
643
- /** Available control sizes. `md` is the 44/40px touch target; `lg` and `xl` are the 48px sheet and sign-in fields. */
644
- declare const CONTROL_SIZES: readonly ["sm", "md", "lg", "xl"];
645
- type ControlSize = (typeof CONTROL_SIZES)[number];
646
- declare const CONTROL_SURFACES: readonly ["background", "card"];
647
- type ControlSurface = (typeof CONTROL_SURFACES)[number];
648
- /**
649
- * Styled native text input. A directive (not a wrapper component) so the host
650
- * stays a plain <input>: every forms flavor (ngModel, reactive, signal forms)
651
- * and every native attribute keep working without any plumbing.
652
- *
653
- * Declares the `errors` and `touched` inputs Angular's `[formField]` fills, so a `ui-field` around
654
- * it can show the message without any binding here.
655
- *
656
- * @example
657
- * <input uiInput type="email" placeholder="you@example.com" />
658
- */
659
- declare class UiInput implements UiControl {
660
- readonly size: _angular_core.InputSignal<"sm" | "md" | "lg" | "xl">;
661
- readonly surface: _angular_core.InputSignal<"background" | "card">;
662
- readonly errors: _angular_core.InputSignal<readonly UiControlError[]>;
663
- readonly touched: _angular_core.InputSignal<boolean>;
664
- protected readonly classes: _angular_core.Signal<string>;
665
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiInput, never>;
666
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<UiInput, "input[uiInput]", never, { "size": { "alias": "size"; "required": false; "isSignal": true; }; "surface": { "alias": "surface"; "required": false; "isSignal": true; }; "errors": { "alias": "errors"; "required": false; "isSignal": true; }; "touched": { "alias": "touched"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
667
- }
668
- /**
669
- * Styled native textarea. Lives beside the input because it shares every one of its
670
- * classes; it takes no size, since a textarea grows from a floor instead of sitting
671
- * at a fixed height.
672
- *
673
- * Declares the `errors` and `touched` inputs Angular's `[formField]` fills, so a `ui-field` around
674
- * it can show the message without any binding here.
675
- *
676
- * @example
677
- * <textarea uiTextarea maxlength="280"></textarea>
678
- */
679
- declare class UiTextarea implements UiControl {
680
- readonly errors: _angular_core.InputSignal<readonly UiControlError[]>;
681
- readonly touched: _angular_core.InputSignal<boolean>;
682
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiTextarea, never>;
683
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<UiTextarea, "textarea[uiTextarea]", never, { "errors": { "alias": "errors"; "required": false; "isSignal": true; }; "touched": { "alias": "touched"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
684
- }
685
-
686
- type ChartPoint = {
687
- t: number;
688
- v: number;
689
- };
690
- type PlottedPoint = ChartPoint & {
691
- x: number;
692
- y: number;
693
- };
694
- type ChartGeometry = {
695
- line: string;
696
- end: {
697
- x: number;
698
- y: number;
699
- };
700
- start: {
701
- y: number;
702
- };
703
- points: PlottedPoint[];
704
- plotBottom: number;
705
- plotTop: number;
706
- };
707
-
708
- type TickLabel = {
709
- text: string;
710
- classes: string;
711
- };
712
-
713
- declare const TOOLTIP_SIZES: readonly ["compact", "large"];
714
- type TooltipSize = (typeof TOOLTIP_SIZES)[number];
715
- type AxisTicks = 3 | 5 | 'auto';
716
-
717
- type PlotRef = ElementRef<SVGSVGElement>;
718
- type LineRef = ElementRef<SVGPathElement>;
719
- type EndRef = ElementRef<SVGCircleElement>;
720
- /**
721
- * Value over time: a monotone curve with a dashed line at the starting value and a tooltip.
722
- *
723
- * Axis labels are never repeated: a tick whose `axisFormat` text equals the previous drawn label is
724
- * not rendered. The first tick always is, so only the last edge label can drop. With `axisTicks="3"`
725
- * only the first, middle and last ticks count; with `auto` every tick counts from `sm` up and the
726
- * three core ticks below it. Tick positions are unchanged.
727
- *
728
- * A new series interpolates from the drawn curve, fading the start label and the dashed line. With
729
- * `rangeKey` bound, only a series that comes with a new key does so: a new series under the same key
730
- * (a reload after a buy) is drawn at once, with no fade. The key may change before its series arrives.
731
- *
732
- * @example
733
- * <ui-line-chart [points]="points" label="Net worth over one month" startLabel="Since" [valueFormat]="formatEur" />
734
- */
735
- declare class UiLineChart {
736
- #private;
737
- readonly points: _angular_core.InputSignal<ChartPoint[]>;
738
- readonly label: _angular_core.InputSignal<string>;
739
- readonly valueFormat: _angular_core.InputSignal<(value: number) => string>;
740
- readonly tooltipFormat: _angular_core.InputSignal<((point: ChartPoint) => string) | undefined>;
741
- readonly deltaFormat: _angular_core.InputSignal<(delta: number) => string>;
742
- readonly timeFormat: _angular_core.InputSignal<(time: number) => string>;
743
- readonly axisFormat: _angular_core.InputSignal<(time: number) => string>;
744
- readonly startLabel: _angular_core.InputSignal<string>;
745
- readonly timeColumnLabel: _angular_core.InputSignal<string>;
746
- readonly valueColumnLabel: _angular_core.InputSignal<string>;
747
- readonly sparkline: _angular_core.InputSignalWithTransform<boolean, unknown>;
748
- readonly tooltip: _angular_core.InputSignal<"compact" | "auto" | "large">;
749
- readonly tooltipDelta: _angular_core.InputSignalWithTransform<boolean, unknown>;
750
- readonly axisGap: _angular_core.InputSignal<number | "auto">;
751
- readonly axisTicks: _angular_core.InputSignalWithTransform<AxisTicks, string | 3 | 5>;
752
- readonly rangeKey: _angular_core.InputSignal<string | null>;
753
- protected readonly svgRef: _angular_core.Signal<PlotRef>;
754
- protected readonly lineRef: _angular_core.Signal<LineRef | undefined>;
755
- protected readonly endRef: _angular_core.Signal<EndRef | undefined>;
756
- protected readonly activeIndex: _angular_core.WritableSignal<number | null>;
757
- protected readonly held: _angular_core.WritableSignal<ChartGeometry | null>;
758
- protected readonly measuredSize: _angular_core.WritableSignal<{
759
- width: number;
760
- height: number;
761
- } | null>;
762
- protected readonly effectiveWidth: _angular_core.Signal<number>;
763
- protected readonly effectiveHeight: _angular_core.Signal<number>;
764
- protected readonly plotHeight: _angular_core.Signal<number>;
765
- protected readonly tooltipStyle: (point: PlottedPoint) => string;
766
- protected readonly tooltipClasses: _angular_core.Signal<{
767
- box: string;
768
- value: string;
769
- delta: string;
770
- }>;
771
- protected readonly geometry: _angular_core.Signal<ChartGeometry | null>;
772
- protected readonly shown: _angular_core.Signal<ChartGeometry | null>;
773
- protected readonly startFade: _angular_core.Signal<"opacity-0 duration-(--duration-exit)" | "duration-(--duration-fast)">;
774
- protected readonly ticks: _angular_core.Signal<PlottedPoint[]>;
775
- protected readonly tickTexts: _angular_core.Signal<(TickLabel | null)[]>;
776
- protected readonly active: _angular_core.Signal<PlottedPoint | null>;
777
- protected readonly startLabelInfo: _angular_core.Signal<{
778
- label: string;
779
- placement: {
780
- y: number;
781
- x: number;
782
- anchor: "start" | "end";
783
- };
784
- } | null>;
785
- constructor();
786
- protected deltaFor(point: PlottedPoint): number;
787
- protected deltaClasses(point: PlottedPoint): string;
788
- protected onPointerMove(event: PointerEvent): void;
789
- protected onPointerLeave(): void;
790
- protected onKeydown(event: KeyboardEvent): void;
791
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiLineChart, never>;
792
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<UiLineChart, "ui-line-chart", never, { "points": { "alias": "points"; "required": true; "isSignal": true; }; "label": { "alias": "label"; "required": true; "isSignal": true; }; "valueFormat": { "alias": "valueFormat"; "required": false; "isSignal": true; }; "tooltipFormat": { "alias": "tooltipFormat"; "required": false; "isSignal": true; }; "deltaFormat": { "alias": "deltaFormat"; "required": false; "isSignal": true; }; "timeFormat": { "alias": "timeFormat"; "required": false; "isSignal": true; }; "axisFormat": { "alias": "axisFormat"; "required": false; "isSignal": true; }; "startLabel": { "alias": "startLabel"; "required": false; "isSignal": true; }; "timeColumnLabel": { "alias": "timeColumnLabel"; "required": false; "isSignal": true; }; "valueColumnLabel": { "alias": "valueColumnLabel"; "required": false; "isSignal": true; }; "sparkline": { "alias": "sparkline"; "required": false; "isSignal": true; }; "tooltip": { "alias": "tooltip"; "required": false; "isSignal": true; }; "tooltipDelta": { "alias": "tooltipDelta"; "required": false; "isSignal": true; }; "axisGap": { "alias": "axisGap"; "required": false; "isSignal": true; }; "axisTicks": { "alias": "axisTicks"; "required": false; "isSignal": true; }; "rangeKey": { "alias": "rangeKey"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
793
- }
794
-
795
- /**
796
- * One action of a `ui-menu`; `destructive` paints it in `--negative`.
797
- *
798
- * @example
799
- * <button uiMenuItem destructive (click)="remove()">Delete the line</button>
800
- */
801
- declare class UiMenuItem {
802
- #private;
803
- readonly destructive: _angular_core.InputSignalWithTransform<boolean, unknown>;
804
- protected readonly classes: _angular_core.Signal<string>;
805
- focus(): void;
806
- hasFocus(): boolean;
807
- protected onClick(): void;
808
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiMenuItem, never>;
809
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<UiMenuItem, "button[uiMenuItem]", never, { "destructive": { "alias": "destructive"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
810
- }
811
- /**
812
- * Secondary actions menu, opened from its trigger through the native Popover API. With `sheet`, below
813
- * 64rem it opens as a bottom action sheet above the tab bar instead of beside its trigger, and
814
- * `heading` names what the actions apply to. `width` fixes the outer popover width in pixels (the sheet
815
- * always spans the screen below 64rem); without it the menu fits its content.
816
- *
817
- * @example
818
- * <button ui-button size="icon" aria-label="More" [uiMenuTrigger]="menu">...</button>
819
- * <ui-menu #menu label="Line actions">
820
- * <button uiMenuItem (click)="edit()">Edit</button>
821
- * <button uiMenuItem destructive (click)="remove()">Delete the line</button>
822
- * </ui-menu>
823
- */
824
- declare class UiMenu {
825
- #private;
826
- readonly label: _angular_core.InputSignal<string>;
827
- readonly sheet: _angular_core.InputSignalWithTransform<boolean, unknown>;
828
- readonly heading: _angular_core.InputSignal<string | undefined>;
829
- readonly width: _angular_core.InputSignalWithTransform<number | undefined, unknown>;
830
- readonly menuId: string;
831
- readonly isOpen: _angular_core.WritableSignal<boolean>;
832
- protected readonly hasWidth: _angular_core.Signal<boolean>;
833
- protected readonly widthVar: _angular_core.Signal<string | null>;
834
- protected readonly classes: _angular_core.Signal<string>;
835
- protected readonly items: _angular_core.Signal<readonly UiMenuItem[]>;
836
- open(trigger: HTMLElement): void;
837
- close(): void;
838
- protected onToggle(event: Event): void;
839
- protected onKeydown(event: KeyboardEvent): void;
840
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiMenu, never>;
841
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<UiMenu, "ui-menu", never, { "label": { "alias": "label"; "required": true; "isSignal": true; }; "sheet": { "alias": "sheet"; "required": false; "isSignal": true; }; "heading": { "alias": "heading"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; }, {}, ["items"], ["*"], true, never>;
842
- }
843
- /**
844
- * Opens a `ui-menu` from a trigger element and wires `aria-haspopup`, `aria-expanded` and
845
- * `aria-controls` on it.
846
- *
847
- * @example
848
- * <button ui-button size="icon" aria-label="More" [uiMenuTrigger]="menu">...</button>
849
- */
850
- declare class UiMenuTrigger {
851
- #private;
852
- readonly uiMenuTrigger: _angular_core.InputSignal<UiMenu>;
853
- protected toggle(): void;
854
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiMenuTrigger, never>;
855
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<UiMenuTrigger, "[uiMenuTrigger]", never, { "uiMenuTrigger": { "alias": "uiMenuTrigger"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
856
- }
857
-
858
- /** Track thicknesses. `MeterSize` is derived from this tuple. */
859
- declare const METER_SIZES: readonly ["md", "sm"];
860
- type MeterSize = (typeof METER_SIZES)[number];
861
- /** Ramp step used to paint the fill. `MeterTone` is derived from this tuple. */
862
- declare const METER_TONES: readonly [1, 2, 3, 4, 5, 6];
863
- type MeterTone = (typeof METER_TONES)[number];
864
- /**
865
- * Proportion of a whole, drawn as a single bar. One bar per category, never a stacked
866
- * strip: without hue to separate segments, length has to do the work alone.
867
- *
868
- * @example
869
- * <ui-meter [value]="0.463" label="Funds" valueText="46.3% - 128,656.00 EUR" [tone]="1" />
870
- */
871
- declare class UiMeter {
872
- readonly value: _angular_core.InputSignal<number>;
873
- readonly label: _angular_core.InputSignal<string>;
874
- readonly valueText: _angular_core.InputSignal<string>;
875
- readonly tone: _angular_core.InputSignal<2 | 3 | 1 | 4 | 6 | 5>;
876
- readonly size: _angular_core.InputSignal<"sm" | "md">;
877
- protected readonly trackClasses: _angular_core.Signal<string>;
878
- protected readonly percent: _angular_core.Signal<number>;
879
- protected readonly fillClasses: _angular_core.Signal<string>;
880
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiMeter, never>;
881
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<UiMeter, "ui-meter", never, { "value": { "alias": "value"; "required": true; "isSignal": true; }; "label": { "alias": "label"; "required": true; "isSignal": true; }; "valueText": { "alias": "valueText"; "required": true; "isSignal": true; }; "tone": { "alias": "tone"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
882
- }
883
-
884
- /**
885
- * Slides the items of a list into place when one is removed or inserted (FLIP): it measures every item
886
- * before and after the change, from the top of the list itself, then animates the shift in `translateY`
887
- * over `--duration-base` `--ease-out`. Pair it with `animate.leave="ui-leave-fade"` on the item so it fades
888
- * out first. Nothing moves under `prefers-reduced-motion`: the list closes up at once.
889
- *
890
- * By default the items are the direct children of the list. Mark them with `uiFlipItem` instead when they
891
- * sit deeper, for instance a page of several groups: put `uiFlipList` on the element around every group and
892
- * `uiFlipItem` on each group heading and row, so a removal also slides the groups below. An item may sit
893
- * inside another item (a row inside a card): it then moves by its own share and its card carries the rest.
894
- * Only an item added or removed starts a slide; a change inside an item does not. Positions leave out the
895
- * translate of any animation running inside the list (a slide in progress, an enter fade-up).
896
- *
897
- * @example
898
- * <ul uiFlipList>
899
- * @for (key of keys(); track key.id) {
900
- * <li uiListRow animate.leave="ui-leave-fade">...</li>
901
- * }
902
- * </ul>
903
- *
904
- * <table uiTable uiFlipList>
905
- * @for (group of groups(); track group.id) {
906
- * <tbody>
907
- * <tr uiTr group uiFlipItem>...</tr>
908
- * @for (row of group.rows; track row.id) {
909
- * <tr uiTr uiFlipItem animate.leave="ui-leave-fade">...</tr>
910
- * }
911
- * </tbody>
912
- * }
913
- * </table>
914
- */
915
- declare class UiFlipList {
916
- private readonly host;
917
- private readonly reduced;
918
- private readonly mutations;
919
- private readonly resizes;
920
- private readonly running;
921
- private readonly watched;
922
- private readonly items;
923
- private tops;
924
- private shifts;
925
- constructor();
926
- private tracked;
927
- private measure;
928
- private onChange;
929
- private parentItem;
930
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiFlipList, never>;
931
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<UiFlipList, "[uiFlipList]", never, {}, {}, never, never, true, never>;
932
- }
933
- /**
934
- * Marks an element as an item of the nearest `uiFlipList`, at any depth: a group heading, a row inside a
935
- * group, a card. Once one item is marked, the list follows its marked items only.
936
- *
937
- * @example
938
- * <tr uiTr uiFlipItem animate.leave="ui-leave-fade">...</tr>
939
- */
940
- declare class UiFlipItem {
941
- constructor();
942
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiFlipItem, never>;
943
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<UiFlipItem, "[uiFlipItem]", never, {}, {}, never, never, true, never>;
944
- }
945
-
946
- /**
947
- * Draws the eye to an element that just changed: scrolls it into view when it is off screen, holds the
948
- * `--soft` fill for 200 ms, then fades back to the element's own background over `--duration-highlight`.
949
- * Each new non-null token plays once, so pass a fresh value per event (an object or a counter), not a
950
- * boolean. A non-null token already present at first render plays on arrival. On a `tr` it paints the
951
- * cells, on a `td[ui-group-cell]` the band, anywhere else the host. Under `prefers-reduced-motion` the
952
- * scroll is instant and the fade lasts 600 ms.
953
- *
954
- * It starts on the next frame and, when the element is still playing a finite animation of its own (an
955
- * `animate.enter` fade on a new row), once that animation has finished, waiting no longer than
956
- * `--duration-base`: the element fades in, then lights up. Both can sit on the same element.
957
- *
958
- * Give the element `scroll-margin-top` and `scroll-margin-bottom` equal to what is pinned above and
959
- * below it (header, tab bar, action bar): a row under them counts as off screen and is scrolled out.
960
- * For an arrival on a page opened at the element, scroll to it at once first (`scrollIntoView` in
961
- * `afterNextRender`) and set the token afterwards: a token present at first render scrolls smoothly
962
- * from where the page is.
963
- *
964
- * @example
965
- * <a ui-row [uiHighlight]="changed() === holding.id ? token() : null" routerLink="/holdings/1">...</a>
966
- */
967
- declare class UiHighlight {
968
- readonly uiHighlight: _angular_core.InputSignal<unknown>;
969
- private readonly host;
970
- private readonly reduced;
971
- private cancel;
972
- constructor();
973
- private play;
974
- private isVisible;
975
- private flash;
976
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiHighlight, never>;
977
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<UiHighlight, "[uiHighlight]", never, { "uiHighlight": { "alias": "uiHighlight"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
978
- }
979
-
980
- /**
981
- * A signal that follows the user's `prefers-reduced-motion` preference live.
982
- * Call it in an injection context; the listener is removed with that context.
983
- *
984
- * @example
985
- * protected readonly reduced = injectReducedMotion();
986
- */
987
- declare function injectReducedMotion(): Signal<boolean>;
988
-
989
- /**
990
- * Holds the transitions of the host and of everything inside it until two frames after its first
991
- * render, through the `data-ui-settling` attribute and the matching rule of `styles/motion.css`.
992
- * A route's elements are created a tick before their classes are bound; a layout read in between
993
- * would otherwise turn the bound fill, colour or switch track into a transition on page open. Call it
994
- * in an injection context. A host whose view is never refreshed (a detached change detector) keeps the
995
- * attribute, and with it no transition.
996
- *
997
- * @example
998
- * constructor() {
999
- * holdTransitionsUntilRendered();
1000
- * }
1001
- */
1002
- declare function holdTransitionsUntilRendered(): void;
1003
-
1004
- /**
1005
- * One destination of the sidebar navigation (Portfolio, Holdings, Allocation, Accounts). The active
1006
- * fill and text colour switch at once on navigation; only the hover fill fades.
1007
- *
1008
- * @example
1009
- * <a ui-nav-item [active]="url === '/'" routerLink="/">
1010
- * <lucide-icon navIcon name="house" />
1011
- * Portfolio
1012
- * </a>
1013
- */
1014
- declare class UiNavItem {
1015
- readonly active: _angular_core.InputSignalWithTransform<boolean, unknown>;
1016
- protected readonly classes: _angular_core.Signal<string>;
1017
- constructor();
1018
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiNavItem, never>;
1019
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<UiNavItem, "a[ui-nav-item]", never, { "active": { "alias": "active"; "required": false; "isSignal": true; }; }, {}, never, ["[navIcon]", "*"], true, never>;
1020
- }
1021
-
1022
- declare const ROW_SIZES: readonly ["md", "lg", "xl", "card", "dense"];
1023
- type RowSize = (typeof ROW_SIZES)[number];
1024
- declare const ROW_PADDINGS: readonly ["md", "sm", "none"];
1025
- type RowPadding = (typeof ROW_PADDINGS)[number];
1026
- declare const ROW_GAPS: readonly ["default", "sm"];
1027
- type RowGap = (typeof ROW_GAPS)[number];
1028
- /**
1029
- * Clickable row of a list: a holding, an account, a search result.
1030
- *
1031
- * @example
1032
- * <a ui-row [selected]="holding.id === openId()" [routerLink]="['/holdings', holding.id]">
1033
- * {{ holding.name }}
1034
- * </a>
1035
- */
1036
- declare class UiRow {
1037
- readonly selected: _angular_core.InputSignalWithTransform<boolean, unknown>;
1038
- readonly busy: _angular_core.InputSignalWithTransform<boolean, unknown>;
1039
- readonly unavailable: _angular_core.InputSignalWithTransform<boolean, unknown>;
1040
- readonly size: _angular_core.InputSignal<"md" | "lg" | "xl" | "card" | "dense">;
1041
- readonly padding: _angular_core.InputSignal<"sm" | "md" | "none">;
1042
- readonly gap: _angular_core.InputSignal<"sm" | "default">;
1043
- protected readonly classes: _angular_core.Signal<string>;
1044
- constructor();
1045
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiRow, never>;
1046
- 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>;
1047
- }
1048
- /**
1049
- * Lays out a `ui-row` with a trailing action beside it, such as a "more" icon button: the row takes
1050
- * the room the action leaves and the action keeps its own size.
1051
- *
1052
- * @example
1053
- * <div uiRowItem>
1054
- * <a ui-row size="xl" padding="sm" routerLink="/accounts/1">...</a>
1055
- * <button ui-button variant="quiet" size="icon-sm" aria-label="Account actions">...</button>
1056
- * </div>
1057
- */
1058
- declare class UiRowItem {
1059
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiRowItem, never>;
1060
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<UiRowItem, "[uiRowItem]", never, {}, {}, never, never, true, never>;
1061
- }
1062
- /**
1063
- * Non-interactive row of a list, separated from the next by a hairline: a passkey with its delete
1064
- * button, a device, a setting. It is a 72px row (68px from 64rem) with a 12px gap; put it on an
1065
- * `li` or a `div`. Use `ui-row` instead when the whole row is a link or an action.
1066
- *
1067
- * @example
1068
- * <ul>
1069
- * <li uiListRow>
1070
- * <span class="flex-1">MacBook Air</span>
1071
- * <button ui-button variant="quiet-destructive" size="icon-sm" aria-label="Delete MacBook Air">...</button>
1072
- * </li>
1073
- * </ul>
1074
- */
1075
- declare class UiListRow {
1076
- readonly ruled: _angular_core.InputSignalWithTransform<boolean, unknown>;
1077
- 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">;
1078
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiListRow, never>;
1079
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<UiListRow, "[uiListRow]", never, { "ruled": { "alias": "ruled"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1080
- }
1081
- /**
1082
- * The 36px filled tile that leads a row: an icon on a muted square with the control radius. Put it on
1083
- * a `span` as the first child of a `ui-row` or a `uiListRow`.
1084
- *
1085
- * @example
1086
- * <a ui-row size="xl" padding="sm" href="/export">
1087
- * <span uiRowTile><svg lucideDownload [size]="18" /></span>
1088
- * Export
1089
- * </a>
1090
- */
1091
- declare class UiRowTile {
1092
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiRowTile, never>;
1093
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<UiRowTile, "[uiRowTile]", never, {}, {}, never, never, true, never>;
1094
- }
1095
-
1096
- type SegmentedOption = {
1097
- value: string;
1098
- label: string;
1099
- };
1100
- declare const SEGMENTED_SIZES: readonly ["md", "sm"];
1101
- type SegmentedSize = (typeof SEGMENTED_SIZES)[number];
1102
- /**
1103
- * Exclusive choice within a small, known set: a time range, a unit, a mode. The selected option's
1104
- * background is a single thumb that slides under it in `transform`, instead of being redrawn.
1105
- *
1106
- * @example
1107
- * <ui-segmented [options]="ranges" label="Time range" [(value)]="range" />
1108
- */
1109
- declare class UiSegmented {
1110
- readonly options: _angular_core.InputSignal<SegmentedOption[]>;
1111
- readonly label: _angular_core.InputSignal<string>;
1112
- readonly showLabel: _angular_core.InputSignalWithTransform<boolean, unknown>;
1113
- protected readonly labelId: string;
1114
- readonly value: _angular_core.ModelSignal<string>;
1115
- readonly size: _angular_core.InputSignal<"sm" | "md">;
1116
- protected readonly radios: _angular_core.Signal<readonly ElementRef<HTMLButtonElement>[]>;
1117
- protected readonly thumbIndex: _angular_core.Signal<number>;
1118
- constructor();
1119
- protected optionClasses(optionValue: string): string;
1120
- protected tabIndexFor(optionValue: string): number;
1121
- protected select(optionValue: string): void;
1122
- protected onKeydown(event: KeyboardEvent): void;
1123
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiSegmented, never>;
1124
- 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>;
1125
- }
1126
-
1127
- /**
1128
- * Styled native select, drop-down list included where the browser allows it. It stays a native
1129
- * `<select>`: keyboard, typeahead and semantics come from the platform, not from a rebuilt listbox.
1130
- *
1131
- * Declares the `errors` and `touched` inputs Angular's `[formField]` fills, so a `ui-field` around
1132
- * it can show the message without any binding here.
1133
- *
1134
- * @example
1135
- * <select uiSelect><option value="pea">PEA</option></select>
1136
- */
1137
- declare class UiSelect implements UiControl {
1138
- readonly size: _angular_core.InputSignal<"sm" | "md" | "lg" | "xl">;
1139
- readonly errors: _angular_core.InputSignal<readonly UiControlError[]>;
1140
- readonly touched: _angular_core.InputSignal<boolean>;
1141
- protected readonly classes: _angular_core.Signal<string>;
1142
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiSelect, never>;
1143
- 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>;
1144
- }
1145
-
1146
- /** Available skeleton shapes. `SkeletonShape` is derived from this tuple. */
1147
- declare const SKELETON_SHAPES: readonly ["text", "figure", "row", "chart", "ring", "dot"];
1148
- type SkeletonShape = (typeof SKELETON_SHAPES)[number];
1149
- /**
1150
- * Decorative, pulsing placeholder for content that is still loading, at the shape of the content
1151
- * it stands in for.
1152
- *
1153
- * @example
1154
- * <ui-skeleton shape="figure" />
1155
- * <ui-skeleton [lines]="3" />
1156
- */
1157
- declare class UiSkeleton {
1158
- readonly shape: _angular_core.InputSignal<"text" | "figure" | "row" | "chart" | "ring" | "dot">;
1159
- readonly lines: _angular_core.InputSignal<number>;
1160
- readonly height: _angular_core.InputSignal<number>;
1161
- readonly size: _angular_core.InputSignal<number>;
1162
- protected readonly animation = "cairn-pulse var(--pulse-duration) var(--ease-out) infinite alternate";
1163
- protected readonly bars: _angular_core.Signal<("62%" | "100%")[]>;
1164
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiSkeleton, never>;
1165
- 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>;
1166
- }
1167
-
1168
- /** Available stale link sizes. `StaleLinkSize` is derived from this tuple. */
1169
- declare const STALE_LINK_SIZES: readonly ["caption", "label"];
1170
- type StaleLinkSize = (typeof STALE_LINK_SIZES)[number];
1171
- /**
1172
- * Link in the stale tone, for a caption about data that is late or left out of a total, such as
1173
- * "1 ligne sans cours, non comptée". Weight 500, underlined on hover, with an optional trailing
1174
- * chevron. `size` is `caption` (12/17, the default) or `label` (14/20, the dashboard total's
1175
- * "1 cours en retard").
1176
- *
1177
- * @example
1178
- * <a uiStaleLink chevron size="label" routerLink="/holdings">1 cours en retard</a>
1179
- */
1180
- declare class UiStaleLink {
1181
- readonly chevron: _angular_core.InputSignalWithTransform<boolean, unknown>;
1182
- readonly size: _angular_core.InputSignal<"label" | "caption">;
1183
- protected readonly classes: _angular_core.Signal<string>;
1184
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiStaleLink, never>;
1185
- 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>;
1186
- }
1187
-
1188
- /** Available stat sizes. `StatSize` is derived from this tuple. */
1189
- declare const STAT_SIZES: readonly ["hero", "tile"];
1190
- type StatSize = (typeof STAT_SIZES)[number];
1191
- /**
1192
- * Label, figure and a named period of change, at two sizes: a `hero` for a screen's single
1193
- * headline number, or a smaller `tile` repeated in a grid. The figure itself, its delta and its
1194
- * caption are all projected, so the component carries no formatting and no currency of its own.
1195
- *
1196
- * The `hero` size never sets `tabular-nums` on the figure: a lone headline number reads better
1197
- * with its digits at their natural width, unlike a column of aligned figures.
1198
- *
1199
- * @example
1200
- * <ui-stat label="Net worth" size="hero">
1201
- * <span uiStatValue>128,656 EUR</span>
1202
- * <ui-delta uiStatDelta [value]="dayChange()" unknownLabel="Not available">+316.54 EUR</ui-delta>
1203
- * <span uiStatCaption>today</span>
1204
- * </ui-stat>
1205
- */
1206
- declare class UiStat {
1207
- readonly label: _angular_core.InputSignal<string>;
1208
- readonly size: _angular_core.InputSignal<"hero" | "tile">;
1209
- protected readonly labelClasses: _angular_core.Signal<string>;
1210
- protected readonly stackClasses: _angular_core.Signal<string>;
1211
- protected readonly valueClasses: _angular_core.Signal<string>;
1212
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiStat, never>;
1213
- 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>;
1214
- }
1215
-
1216
- /**
1217
- * Native checkbox styled as an iOS-style switch, exposed to assistive technology as `role="switch"`.
1218
- * 51 by 31 on touch, 40 by 24 with a mouse.
1219
- *
1220
- * @example
1221
- * <input type="checkbox" uiSwitch [checked]="hidden()" (change)="toggle()" aria-label="Hide amounts" />
1222
- */
1223
- declare class UiSwitch {
1224
- 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";
1225
- constructor();
1226
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiSwitch, never>;
1227
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<UiSwitch, "input[type=checkbox][uiSwitch]", never, {}, {}, never, never, true, never>;
1228
- }
1229
-
1230
- /**
1231
- * Bottom navigation bar for iPhone: 52px of tabs plus the home indicator's safe area. While it is on the
1232
- * page it publishes that height as `--tab-bar-height` on the root element, which `ui-action-bar` and
1233
- * `ui-toaster` sit above; use it rather than restating 52px for anything that must clear the bar.
1234
- *
1235
- * @example
1236
- * <nav ui-tab-bar>
1237
- * <a ui-tab [active]="url === '/'" routerLink="/"><lucide-icon tabIcon name="house" />Portfolio</a>
1238
- * </nav>
1239
- */
1240
- declare class UiTabBar {
1241
- constructor();
1242
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiTabBar, never>;
1243
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<UiTabBar, "nav[ui-tab-bar]", never, {}, {}, never, ["*"], true, never>;
1244
- }
1245
- /**
1246
- * One destination of `ui-tab-bar`.
1247
- *
1248
- * @example
1249
- * <a ui-tab active routerLink="/"><lucide-icon tabIcon name="house" />Portfolio</a>
1250
- */
1251
- declare class UiTab {
1252
- readonly active: _angular_core.InputSignalWithTransform<boolean, unknown>;
1253
- protected readonly classes: _angular_core.Signal<string>;
1254
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiTab, never>;
1255
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<UiTab, "a[ui-tab]", never, { "active": { "alias": "active"; "required": false; "isSignal": true; }; }, {}, never, ["[tabIcon]", "*"], true, never>;
1256
- }
1257
-
1258
- type Toast = {
1259
- readonly id: number;
1260
- readonly text: string;
1261
- };
1262
- /**
1263
- * One-slot confirmation message queue read by `ui-toaster`.
1264
- *
1265
- * @example
1266
- * inject(UiToasts).show('Achat enregistré');
1267
- */
1268
- declare class UiToasts {
1269
- private readonly current;
1270
- private sequence;
1271
- readonly toast: _angular_core.Signal<Toast | null>;
1272
- show(message: string): void;
1273
- dismiss(): void;
1274
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiToasts, never>;
1275
- static ɵprov: _angular_core.ɵɵInjectableDeclaration<any>;
1276
- }
1277
-
1278
- /**
1279
- * Confirmation message shown by `UiToasts.show`: one at a time, no action, gone after `--toast-duration`.
1280
- * Place it once in the app shell.
1281
- *
1282
- * @example
1283
- * <ui-toaster />
1284
- */
1285
- declare class UiToaster {
1286
- protected readonly toasts: UiToasts;
1287
- 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";
1288
- private readonly host;
1289
- private readonly hovered;
1290
- private readonly focused;
1291
- private lastId;
1292
- private remaining;
1293
- private startedAt;
1294
- private timer;
1295
- constructor();
1296
- protected setHovered(value: boolean): void;
1297
- protected setFocused(value: boolean): void;
1298
- private resume;
1299
- private pause;
1300
- private stop;
1301
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiToaster, never>;
1302
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<UiToaster, "ui-toaster", never, {}, {}, never, never, true, never>;
1303
- }
1304
-
1305
- /** Breakpoints a secondary column can be held back until. */
1306
- declare const CELL_BREAKPOINTS: readonly ["md", "lg"];
1307
- type CellBreakpoint = (typeof CELL_BREAKPOINTS)[number];
1308
- /** Body row heights. */
1309
- declare const TABLE_ROWS: readonly ["48", "52", "60"];
1310
- type TableRow = (typeof TABLE_ROWS)[number];
1311
- /**
1312
- * Styled native table. The rows and cells stay plain <tr> and <td>. `row` sets the height of every
1313
- * body row, `rule` draws or drops the hairline under the header, `spaced` leaves 4px between the
1314
- * header and the first row.
1315
- *
1316
- * @example
1317
- * <table uiTable row="60" [rule]="false">
1318
- */
1319
- declare class UiTable {
1320
- readonly row: _angular_core.InputSignal<"48" | "52" | "60">;
1321
- readonly rule: _angular_core.InputSignalWithTransform<boolean, unknown>;
1322
- readonly spaced: _angular_core.InputSignalWithTransform<boolean, unknown>;
1323
- protected readonly classes: _angular_core.Signal<string>;
1324
- constructor();
1325
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiTable, never>;
1326
- 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>;
1327
- }
1328
- /** Body of one group of rows: leaves a 4px tail after its last row. */
1329
- declare class UiGroup {
1330
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiGroup, never>;
1331
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<UiGroup, "tbody[uiGroup]", never, {}, {}, never, never, true, never>;
1332
- }
1333
- /**
1334
- * Body or group row. An ordinary row glows on hover and takes the soft fill when `selected`; an
1335
- * `interactive` row (one that opens something) also presses to the soft fill. A row with no action keeps a
1336
- * plain name: `<td uiTd primary class="truncate font-medium">`.
1337
- * `group` marks the row that holds a group band: it carries no hover state.
1338
- *
1339
- * @example
1340
- * <tr uiTr [selected]="open">...
1341
- * <tr uiTr group><td ui-group-cell name="Brokerage">...
1342
- */
1343
- declare class UiTr {
1344
- readonly group: _angular_core.InputSignalWithTransform<boolean, unknown>;
1345
- readonly selected: _angular_core.InputSignalWithTransform<boolean, unknown>;
1346
- readonly interactive: _angular_core.InputSignalWithTransform<boolean, unknown>;
1347
- protected readonly classes: _angular_core.Signal<string>;
1348
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiTr, never>;
1349
- 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>;
1350
- }
1351
- /**
1352
- * Column header, centred in its 36px. `numeric` right-aligns and lines the digits up; `secondary`
1353
- * (or `from`) holds a column back until the viewport is wide enough for it; `primary` makes it
1354
- * the column that absorbs the free width and truncates; `tall` is a 40px header; `width` fixes the column width and keeps it from shrinking.
1355
- *
1356
- * @example
1357
- * <th uiTh numeric secondary width="108px">Quantity</th>
1358
- */
1359
- declare class UiTh {
1360
- readonly width: _angular_core.InputSignal<string | null>;
1361
- readonly numeric: _angular_core.InputSignalWithTransform<boolean, unknown>;
1362
- readonly primary: _angular_core.InputSignalWithTransform<boolean, unknown>;
1363
- readonly secondary: _angular_core.InputSignalWithTransform<boolean, unknown>;
1364
- readonly tall: _angular_core.InputSignalWithTransform<boolean, unknown>;
1365
- readonly from: _angular_core.InputSignal<"md" | "lg" | null>;
1366
- protected readonly classes: _angular_core.Signal<string>;
1367
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiTh, never>;
1368
- 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>;
1369
- }
1370
- /** Body cell. Same inputs as `UiTh` (bar `tall` and `width`), and they must be set on both to match. */
1371
- declare class UiTd {
1372
- readonly numeric: _angular_core.InputSignalWithTransform<boolean, unknown>;
1373
- readonly primary: _angular_core.InputSignalWithTransform<boolean, unknown>;
1374
- readonly secondary: _angular_core.InputSignalWithTransform<boolean, unknown>;
1375
- readonly from: _angular_core.InputSignal<"md" | "lg" | null>;
1376
- protected readonly classes: _angular_core.Signal<string>;
1377
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiTd, never>;
1378
- 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>;
1379
- }
1380
- /** Group band sizes. */
1381
- declare const GROUP_SIZES: readonly ["md", "lg"];
1382
- type GroupSize = (typeof GROUP_SIZES)[number];
1383
- /**
1384
- * The band that opens a group of rows: name in 600 (a heading), meta beside it, the projected
1385
- * total pinned to the right. Spans the whole row through `colspan`.
1386
- *
1387
- * @example
1388
- * <tr uiTr group><td ui-group-cell colspan="4" name="Brokerage" meta="Savings plan">...total...</td></tr>
1389
- */
1390
- declare class UiGroupCell {
1391
- readonly name: _angular_core.InputSignal<string>;
1392
- readonly meta: _angular_core.InputSignal<string | undefined>;
1393
- readonly size: _angular_core.InputSignal<"md" | "lg">;
1394
- protected readonly hostClasses: _angular_core.Signal<string>;
1395
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiGroupCell, never>;
1396
- 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>;
1397
- }
1398
- /**
1399
- * Makes a link or button the way into its row. By default an invisible layer stretches over the
1400
- * whole row, so the row is one target for the pointer, the keyboard and a screen reader, and its
1401
- * focus ring wraps the row. With `[stretch]="false"` only the name is the
1402
- * target: it underlines on hover and takes its own ring. `current` marks the open line.
1403
- *
1404
- * @example
1405
- * <td uiTd primary><a uiRowLink href="/lines/42">Ferrari</a></td>
1406
- * <td uiTd primary><a uiRowLink [stretch]="false" href="/accounts/3">Brokerage</a></td>
1407
- */
1408
- declare class UiRowLink {
1409
- readonly stretch: _angular_core.InputSignalWithTransform<boolean, unknown>;
1410
- readonly current: _angular_core.InputSignalWithTransform<boolean, unknown>;
1411
- 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)">;
1412
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiRowLink, never>;
1413
- 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>;
1414
- }
1415
- /** A control in another cell of a stretched-link row: lifts it above the layer that covers the row. */
1416
- declare class UiRowAction {
1417
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiRowAction, never>;
1418
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<UiRowAction, "[uiRowAction]", never, {}, {}, never, never, true, never>;
1419
- }
1420
- /** Tones of a subtitle: subtle (default), `--stale` at 500, or the color of the cell. */
1421
- declare const SUB_TONES: readonly ["subtle", "stale", "inherit"];
1422
- type SubTone = (typeof SUB_TONES)[number];
1423
- /**
1424
- * A second line under a cell's main text. `narrow` shows it only under 1024px, where it carries
1425
- * the quantity, average cost and quote that were held back. Its amounts go through `ui-amount`
1426
- * so they mask.
1427
- *
1428
- * @example
1429
- * <span uiCellSub narrow>10 × 421.26 € · cost 388.10 €</span>
1430
- * <span uiCellSub tone="stale">Quote of 24/09</span>
1431
- */
1432
- declare class UiCellSub {
1433
- readonly narrow: _angular_core.InputSignalWithTransform<boolean, unknown>;
1434
- readonly tone: _angular_core.InputSignal<"inherit" | "subtle" | "stale">;
1435
- protected readonly classes: _angular_core.Signal<string>;
1436
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiCellSub, never>;
1437
- 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>;
1438
- }
1439
-
1440
- export { ALERT_VARIANTS, AMOUNT_MASKINGS, AMOUNT_NUMERICS, ASYNC_ALIGNS, ASYNC_STATES, ASYNC_VARIANTS, AVATAR_SIZES, BACK_LINK_SIZES, BADGE_SIZES, BADGE_VARIANTS, BUTTON_SIZES, BUTTON_VARIANTS, CARD_PADDINGS, CARD_SURFACES, CARD_VARIANTS, CELL_BREAKPOINTS, CONTROL_SIZES, CONTROL_SURFACES, DELTA_EMPHASES, DELTA_SIZES, DELTA_WEIGHTS, DIALOG_CLOSE_REASONS, DIALOG_LAYOUTS, DIALOG_WIDTHS, FACT_SIZES, FACT_SUB_TONES, GROUP_SIZES, METER_SIZES, METER_TONES, ROW_GAPS, ROW_PADDINGS, ROW_SIZES, SEGMENTED_SIZES, SKELETON_SHAPES, STALE_LINK_SIZES, STAT_SIZES, SUB_TONES, TABLE_ROWS, UI_AMOUNT_MASKED, UiActionBar, UiAlert, UiAmount, UiAsync, UiAvatar, UiAvatarLink, UiBackLink, UiBadge, UiButton, UiCard, UiCellSub, UiChoiceChips, UiDelta, UiDialog, UiDonut, UiEmpty, UiExternalLink, UiFact, UiFacts, UiField, UiFieldLeading, UiFieldTrailing, UiFilterChips, UiFlipItem, UiFlipList, UiGroup, UiGroupCell, UiHighlight, UiInput, UiLineChart, UiListRow, UiMenu, UiMenuItem, UiMenuTrigger, UiMeter, UiNavItem, UiRow, UiRowAction, UiRowItem, UiRowLink, UiRowTile, UiSegmented, UiSelect, UiSkeleton, UiStaleLink, UiStat, UiSwitch, UiTab, UiTabBar, UiTable, UiTd, UiTextarea, UiTh, UiToaster, UiToasts, UiTr, delayedState, formatAmount, holdTransitionsUntilRendered, injectReducedMotion };
1441
- export type { AlertVariant, AmountFormatOptions, AmountMasking, AmountNumeric, AsyncAlign, AsyncState, AsyncVariant, AvatarSize, AxisTicks, BackLinkSize, BadgeSize, BadgeVariant, ButtonSize, ButtonVariant, CardPadding, CardSurface, CardVariant, CellBreakpoint, ChartPoint, ChoiceChipOption, ControlSize, ControlSurface, DeltaEmphasis, DeltaSize, DeltaWeight, DialogCloseReason, DialogLayout, DialogWidth, DonutSlice, FactSize, FactSubTone, FilterChipOption, GroupSize, MeterSize, MeterTone, RowGap, RowPadding, RowSize, SegmentedOption, SegmentedSize, SkeletonShape, StaleLinkSize, StatSize, SubTone, TableRow, Toast, TooltipSize, UiControlError };
2
+ export { };