@joanroucoux/cairn-ui 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1,5 +1,69 @@
|
|
|
1
1
|
import * as _angular_core from '@angular/core';
|
|
2
|
-
import { Signal, ElementRef } from '@angular/core';
|
|
2
|
+
import { InjectionToken, Signal, ElementRef } from '@angular/core';
|
|
3
|
+
|
|
4
|
+
/** App-wide "amounts are hidden" state. Defaults to never masked; the app overrides it. */
|
|
5
|
+
declare const UI_AMOUNT_MASKED: InjectionToken<Signal<boolean>>;
|
|
6
|
+
/** Available figure styles. `AmountNumeric` is derived from this tuple. */
|
|
7
|
+
declare const AMOUNT_NUMERICS: readonly ["tabular", "proportional"];
|
|
8
|
+
type AmountNumeric = (typeof AMOUNT_NUMERICS)[number];
|
|
9
|
+
/** Available masking behaviors. `AmountMasking` is derived from this tuple. */
|
|
10
|
+
declare const AMOUNT_MASKINGS: readonly ["dots", "hide"];
|
|
11
|
+
type AmountMasking = (typeof AMOUNT_MASKINGS)[number];
|
|
12
|
+
/**
|
|
13
|
+
* A number or an amount of money, formatted for the locale and masked when the app hides amounts.
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* <ui-amount [value]="total" currency="EUR" numeric="proportional" />
|
|
17
|
+
* <ui-amount [value]="dayChange" currency="EUR" signed whenMasked="hide" />
|
|
18
|
+
*/
|
|
19
|
+
declare class UiAmount {
|
|
20
|
+
#private;
|
|
21
|
+
readonly value: _angular_core.InputSignal<number | null | undefined>;
|
|
22
|
+
readonly currency: _angular_core.InputSignal<string | undefined>;
|
|
23
|
+
readonly locale: _angular_core.InputSignal<string>;
|
|
24
|
+
readonly signed: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
25
|
+
readonly fractionDigits: _angular_core.InputSignal<number>;
|
|
26
|
+
readonly numeric: _angular_core.InputSignal<"tabular" | "proportional">;
|
|
27
|
+
readonly whenMasked: _angular_core.InputSignal<"dots" | "hide">;
|
|
28
|
+
protected readonly hidden: Signal<boolean>;
|
|
29
|
+
protected readonly text: Signal<string>;
|
|
30
|
+
protected readonly classes: Signal<string>;
|
|
31
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiAmount, never>;
|
|
32
|
+
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>;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
type AmountFormatOptions = {
|
|
36
|
+
locale: string;
|
|
37
|
+
currency?: string;
|
|
38
|
+
signed?: boolean;
|
|
39
|
+
fractionDigits?: number;
|
|
40
|
+
};
|
|
41
|
+
/** Formats a number or an amount for the locale, with a missing value as an em dash and masking behind four bullets. */
|
|
42
|
+
declare function formatAmount(value: number | null | undefined, options: AmountFormatOptions, masked?: boolean): string;
|
|
43
|
+
|
|
44
|
+
/** Available async block states. `AsyncState` is derived from this tuple. */
|
|
45
|
+
declare const ASYNC_STATES: readonly ["loading", "error", "empty", "ready"];
|
|
46
|
+
type AsyncState = (typeof ASYNC_STATES)[number];
|
|
47
|
+
/**
|
|
48
|
+
* The three states of a block that depends on a service call, next to the ready content.
|
|
49
|
+
*
|
|
50
|
+
* @example
|
|
51
|
+
* <ui-async [state]="totalState()" errorTitle="Total could not be loaded" errorMessage="The server did not answer." retryLabel="Retry" (retry)="reload()">
|
|
52
|
+
* <span asyncLoading><ui-skeleton shape="figure" /></span>
|
|
53
|
+
* <span asyncEmpty>Add a holding to see your total.</span>
|
|
54
|
+
* <span>{{ total() }}</span>
|
|
55
|
+
* </ui-async>
|
|
56
|
+
*/
|
|
57
|
+
declare class UiAsync {
|
|
58
|
+
readonly state: _angular_core.InputSignal<"loading" | "error" | "empty" | "ready">;
|
|
59
|
+
readonly errorTitle: _angular_core.InputSignal<string | undefined>;
|
|
60
|
+
readonly errorMessage: _angular_core.InputSignal<string | undefined>;
|
|
61
|
+
readonly retryLabel: _angular_core.InputSignal<string | undefined>;
|
|
62
|
+
readonly retry: _angular_core.OutputEmitterRef<void>;
|
|
63
|
+
protected readonly retryButtonClasses = "mt-2 relative inline-flex items-center justify-center gap-2 rounded-control font-medium whitespace-nowrap cursor-pointer select-none touch-manipulation transition-[transform,background-color,opacity] duration-(--duration-press) ease-out active:scale-(--press-scale) focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-(--ring) min-h-(--row-min) px-4 text-label bg-(--card) text-(--foreground) shadow-[inset_0_0_0_1px_var(--border)] hover:bg-(--glow)";
|
|
64
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiAsync, never>;
|
|
65
|
+
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; }; }, { "retry": "retry"; }, never, ["[asyncLoading]", "[asyncEmpty]", "*"], true, never>;
|
|
66
|
+
}
|
|
3
67
|
|
|
4
68
|
/** Available avatar sizes. `AvatarSize` is derived from this tuple. */
|
|
5
69
|
declare const AVATAR_SIZES: readonly ["sm", "md"];
|
|
@@ -29,7 +93,7 @@ type BadgeVariant = (typeof BADGE_VARIANTS)[number];
|
|
|
29
93
|
* <ui-badge>ETF</ui-badge>
|
|
30
94
|
*/
|
|
31
95
|
declare class UiBadge {
|
|
32
|
-
readonly variant: _angular_core.InputSignal<"
|
|
96
|
+
readonly variant: _angular_core.InputSignal<"neutral" | "outline">;
|
|
33
97
|
protected readonly classes: _angular_core.Signal<string>;
|
|
34
98
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiBadge, never>;
|
|
35
99
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<UiBadge, "ui-badge", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
@@ -42,23 +106,14 @@ type ButtonVariant = (typeof BUTTON_VARIANTS)[number];
|
|
|
42
106
|
declare const BUTTON_SIZES: readonly ["md", "lg", "xl", "icon"];
|
|
43
107
|
type ButtonSize = (typeof BUTTON_SIZES)[number];
|
|
44
108
|
/**
|
|
45
|
-
* Styled native button
|
|
46
|
-
* button behavior (type, disabled, form submission, accessibility) for free.
|
|
47
|
-
*
|
|
48
|
-
* Also applies to an anchor, for the one case where the action really is a navigation:
|
|
49
|
-
* a download the browser has to perform itself.
|
|
50
|
-
*
|
|
51
|
-
* `size="icon"` has no visible text: give it an `aria-label`.
|
|
52
|
-
*
|
|
53
|
-
* A `loading` button shows a spinner before its label and swallows clicks, so a slow first
|
|
54
|
-
* response cannot turn into a double submission.
|
|
109
|
+
* Styled native button or anchor, applied as an attribute so the host keeps every native behavior.
|
|
55
110
|
*
|
|
56
111
|
* @example
|
|
57
112
|
* <button ui-button variant="destructive">Delete</button>
|
|
58
113
|
* <button ui-button size="icon" variant="ghost" aria-label="More actions">...</button>
|
|
59
114
|
*/
|
|
60
115
|
declare class UiButton {
|
|
61
|
-
readonly variant: _angular_core.InputSignal<"
|
|
116
|
+
readonly variant: _angular_core.InputSignal<"outline" | "primary" | "ghost" | "destructive">;
|
|
62
117
|
readonly size: _angular_core.InputSignal<"md" | "lg" | "xl" | "icon">;
|
|
63
118
|
readonly loading: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
64
119
|
protected readonly classes: _angular_core.Signal<string>;
|
|
@@ -131,8 +186,8 @@ declare class UiDelta {
|
|
|
131
186
|
declare const DIALOG_WIDTHS: readonly ["md", "lg"];
|
|
132
187
|
type DialogWidth = (typeof DIALOG_WIDTHS)[number];
|
|
133
188
|
/**
|
|
134
|
-
* Modal dialog on the native <dialog>:
|
|
135
|
-
*
|
|
189
|
+
* Modal dialog on the native <dialog>: a sheet rising from the bottom under `64rem`, centered
|
|
190
|
+
* above it. Two projection slots - the body, and [dialogActions] for the footer.
|
|
136
191
|
*
|
|
137
192
|
* @example
|
|
138
193
|
* <ui-dialog heading="Delete this holding?" [open]="confirming()" (dismissed)="confirming.set(false)">
|
|
@@ -145,7 +200,7 @@ declare class UiDialog {
|
|
|
145
200
|
readonly heading: _angular_core.InputSignal<string>;
|
|
146
201
|
readonly description: _angular_core.InputSignal<string | undefined>;
|
|
147
202
|
readonly width: _angular_core.InputSignal<"md" | "lg">;
|
|
148
|
-
readonly open: _angular_core.
|
|
203
|
+
readonly open: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
149
204
|
readonly dismissed: _angular_core.OutputEmitterRef<void>;
|
|
150
205
|
protected readonly headingId: string;
|
|
151
206
|
protected readonly descriptionId: string;
|
|
@@ -184,7 +239,6 @@ declare class UiField {
|
|
|
184
239
|
readonly labelHidden: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
185
240
|
readonly hint: _angular_core.InputSignal<string | undefined>;
|
|
186
241
|
readonly error: _angular_core.InputSignal<string | undefined>;
|
|
187
|
-
/** Unit shown inside the control's right edge, such as `EUR` or `parts`. Not part of the control's value. */
|
|
188
242
|
readonly unit: _angular_core.InputSignal<string | undefined>;
|
|
189
243
|
protected readonly hintId: string;
|
|
190
244
|
protected readonly errorId: string;
|
|
@@ -240,6 +294,61 @@ declare class UiTextarea implements UiControl {
|
|
|
240
294
|
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>;
|
|
241
295
|
}
|
|
242
296
|
|
|
297
|
+
/**
|
|
298
|
+
* One action of a `ui-menu`; `destructive` paints it in `--negative`.
|
|
299
|
+
*
|
|
300
|
+
* @example
|
|
301
|
+
* <button uiMenuItem destructive (click)="remove()">Delete the line</button>
|
|
302
|
+
*/
|
|
303
|
+
declare class UiMenuItem {
|
|
304
|
+
#private;
|
|
305
|
+
readonly destructive: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
306
|
+
protected readonly classes: _angular_core.Signal<string>;
|
|
307
|
+
focus(): void;
|
|
308
|
+
hasFocus(): boolean;
|
|
309
|
+
protected onClick(): void;
|
|
310
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiMenuItem, never>;
|
|
311
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<UiMenuItem, "button[uiMenuItem]", never, { "destructive": { "alias": "destructive"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
312
|
+
}
|
|
313
|
+
/**
|
|
314
|
+
* Secondary actions menu, opened from its trigger through the native Popover API.
|
|
315
|
+
*
|
|
316
|
+
* @example
|
|
317
|
+
* <button ui-button size="icon" aria-label="More" [uiMenuTrigger]="menu">...</button>
|
|
318
|
+
* <ui-menu #menu label="Line actions">
|
|
319
|
+
* <button uiMenuItem (click)="edit()">Edit</button>
|
|
320
|
+
* <button uiMenuItem destructive (click)="remove()">Delete the line</button>
|
|
321
|
+
* </ui-menu>
|
|
322
|
+
*/
|
|
323
|
+
declare class UiMenu {
|
|
324
|
+
#private;
|
|
325
|
+
readonly label: _angular_core.InputSignal<string>;
|
|
326
|
+
readonly menuId: string;
|
|
327
|
+
readonly isOpen: _angular_core.WritableSignal<boolean>;
|
|
328
|
+
protected readonly classes = "m-0 min-w-44 p-1 rounded-container bg-(--elevated) shadow-[0_8px_24px_rgb(0_0_0/0.16)] text-(--foreground) transition-[opacity,transform,overlay,display] transition-discrete duration-(--duration-fast) ease-out starting:open:opacity-0 starting:open:scale-(--enter-scale) opacity-0 scale-(--enter-scale) open:opacity-100 open:scale-100";
|
|
329
|
+
protected readonly items: _angular_core.Signal<readonly UiMenuItem[]>;
|
|
330
|
+
open(trigger: HTMLElement): void;
|
|
331
|
+
close(): void;
|
|
332
|
+
protected onToggle(event: Event): void;
|
|
333
|
+
protected onKeydown(event: KeyboardEvent): void;
|
|
334
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiMenu, never>;
|
|
335
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<UiMenu, "ui-menu", never, { "label": { "alias": "label"; "required": true; "isSignal": true; }; }, {}, ["items"], ["*"], true, never>;
|
|
336
|
+
}
|
|
337
|
+
/**
|
|
338
|
+
* Opens a `ui-menu` from a trigger element and wires `aria-haspopup`, `aria-expanded` and
|
|
339
|
+
* `aria-controls` on it.
|
|
340
|
+
*
|
|
341
|
+
* @example
|
|
342
|
+
* <button ui-button size="icon" aria-label="More" [uiMenuTrigger]="menu">...</button>
|
|
343
|
+
*/
|
|
344
|
+
declare class UiMenuTrigger {
|
|
345
|
+
#private;
|
|
346
|
+
readonly uiMenuTrigger: _angular_core.InputSignal<UiMenu>;
|
|
347
|
+
protected toggle(): void;
|
|
348
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiMenuTrigger, never>;
|
|
349
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<UiMenuTrigger, "[uiMenuTrigger]", never, { "uiMenuTrigger": { "alias": "uiMenuTrigger"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
350
|
+
}
|
|
351
|
+
|
|
243
352
|
/** Ramp step used to paint the fill. `MeterTone` is derived from this tuple. */
|
|
244
353
|
declare const METER_TONES: readonly [1, 2, 3, 4, 5, 6];
|
|
245
354
|
type MeterTone = (typeof METER_TONES)[number];
|
|
@@ -254,13 +363,44 @@ declare class UiMeter {
|
|
|
254
363
|
readonly value: _angular_core.InputSignal<number>;
|
|
255
364
|
readonly label: _angular_core.InputSignal<string>;
|
|
256
365
|
readonly valueText: _angular_core.InputSignal<string>;
|
|
257
|
-
readonly tone: _angular_core.InputSignal<
|
|
366
|
+
readonly tone: _angular_core.InputSignal<2 | 1 | 3 | 4 | 5 | 6>;
|
|
258
367
|
protected readonly percent: _angular_core.Signal<number>;
|
|
259
368
|
protected readonly fillClasses: _angular_core.Signal<string>;
|
|
260
369
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiMeter, never>;
|
|
261
370
|
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; }; }, {}, never, never, true, never>;
|
|
262
371
|
}
|
|
263
372
|
|
|
373
|
+
/**
|
|
374
|
+
* One destination of the sidebar navigation (Portfolio, Holdings, Allocation, Accounts).
|
|
375
|
+
*
|
|
376
|
+
* @example
|
|
377
|
+
* <a ui-nav-item [active]="url === '/'" routerLink="/">
|
|
378
|
+
* <lucide-icon navIcon name="house" />
|
|
379
|
+
* Portfolio
|
|
380
|
+
* </a>
|
|
381
|
+
*/
|
|
382
|
+
declare class UiNavItem {
|
|
383
|
+
readonly active: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
384
|
+
protected readonly classes: _angular_core.Signal<string>;
|
|
385
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiNavItem, never>;
|
|
386
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<UiNavItem, "a[ui-nav-item]", never, { "active": { "alias": "active"; "required": false; "isSignal": true; }; }, {}, never, ["[navIcon]", "*"], true, never>;
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
/**
|
|
390
|
+
* Clickable row of a list: a holding, an envelope, an account.
|
|
391
|
+
*
|
|
392
|
+
* @example
|
|
393
|
+
* <a ui-row [selected]="holding.id === openId()" [routerLink]="['/holdings', holding.id]">
|
|
394
|
+
* {{ holding.name }}
|
|
395
|
+
* </a>
|
|
396
|
+
*/
|
|
397
|
+
declare class UiRow {
|
|
398
|
+
readonly selected: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
399
|
+
protected readonly classes: _angular_core.Signal<string>;
|
|
400
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiRow, never>;
|
|
401
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<UiRow, "a[ui-row], button[ui-row]", never, { "selected": { "alias": "selected"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
402
|
+
}
|
|
403
|
+
|
|
264
404
|
type SegmentedOption = {
|
|
265
405
|
value: string;
|
|
266
406
|
label: string;
|
|
@@ -306,19 +446,15 @@ declare class UiSelect implements UiControl {
|
|
|
306
446
|
}
|
|
307
447
|
|
|
308
448
|
/**
|
|
309
|
-
* Decorative placeholder for content that is still loading, at the shape of the content
|
|
310
|
-
* in for.
|
|
311
|
-
* `role="status"` sentence.
|
|
312
|
-
*
|
|
313
|
-
* Pulses opacity from 1 to 0.45 and back over `--pulse-duration`, which `tokens.css` sets to `0ms`
|
|
314
|
-
* under `prefers-reduced-motion: reduce`: the pulse stops there with no branching in this component.
|
|
449
|
+
* Decorative, pulsing placeholder for content that is still loading, at the shape of the content
|
|
450
|
+
* it stands in for.
|
|
315
451
|
*
|
|
316
452
|
* @example
|
|
317
453
|
* <ui-skeleton shape="figure" />
|
|
318
454
|
* <ui-skeleton [lines]="3" />
|
|
319
455
|
*/
|
|
320
456
|
declare class UiSkeleton {
|
|
321
|
-
readonly shape: _angular_core.InputSignal<"
|
|
457
|
+
readonly shape: _angular_core.InputSignal<"figure" | "text" | "row" | "chart" | "ring">;
|
|
322
458
|
readonly lines: _angular_core.InputSignal<number>;
|
|
323
459
|
readonly height: _angular_core.InputSignal<number>;
|
|
324
460
|
protected readonly animation = "cairn-pulse var(--pulse-duration) var(--ease-out) infinite alternate";
|
|
@@ -354,6 +490,18 @@ declare class UiStat {
|
|
|
354
490
|
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>;
|
|
355
491
|
}
|
|
356
492
|
|
|
493
|
+
/**
|
|
494
|
+
* Native checkbox styled as an iOS-style switch, exposed to assistive technology as `role="switch"`.
|
|
495
|
+
*
|
|
496
|
+
* @example
|
|
497
|
+
* <input type="checkbox" uiSwitch [checked]="hidden()" (change)="toggle()" aria-label="Hide amounts" />
|
|
498
|
+
*/
|
|
499
|
+
declare class UiSwitch {
|
|
500
|
+
protected readonly classes = "relative shrink-0 w-[51px] h-[31px] appearance-none cursor-pointer rounded-pill bg-(--muted) checked:bg-(--primary) transition-colors 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] 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]";
|
|
501
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiSwitch, never>;
|
|
502
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<UiSwitch, "input[type=checkbox][uiSwitch]", never, {}, {}, never, never, true, never>;
|
|
503
|
+
}
|
|
504
|
+
|
|
357
505
|
/** Breakpoints a secondary column can be held back until. */
|
|
358
506
|
declare const CELL_BREAKPOINTS: readonly ["md", "lg"];
|
|
359
507
|
type CellBreakpoint = (typeof CELL_BREAKPOINTS)[number];
|
|
@@ -399,5 +547,30 @@ declare class UiTd {
|
|
|
399
547
|
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<UiTd, "td[uiTd]", never, { "numeric": { "alias": "numeric"; "required": false; "isSignal": true; }; "from": { "alias": "from"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
400
548
|
}
|
|
401
549
|
|
|
402
|
-
|
|
403
|
-
|
|
550
|
+
/**
|
|
551
|
+
* Bottom navigation bar for iPhone: 52px of tabs plus the home indicator's safe area.
|
|
552
|
+
*
|
|
553
|
+
* @example
|
|
554
|
+
* <nav ui-tab-bar>
|
|
555
|
+
* <a ui-tab [active]="url === '/'" routerLink="/"><lucide-icon tabIcon name="house" />Portfolio</a>
|
|
556
|
+
* </nav>
|
|
557
|
+
*/
|
|
558
|
+
declare class UiTabBar {
|
|
559
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiTabBar, never>;
|
|
560
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<UiTabBar, "nav[ui-tab-bar]", never, {}, {}, never, ["*"], true, never>;
|
|
561
|
+
}
|
|
562
|
+
/**
|
|
563
|
+
* One destination of `ui-tab-bar`.
|
|
564
|
+
*
|
|
565
|
+
* @example
|
|
566
|
+
* <a ui-tab active routerLink="/"><lucide-icon tabIcon name="house" />Portfolio</a>
|
|
567
|
+
*/
|
|
568
|
+
declare class UiTab {
|
|
569
|
+
readonly active: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
570
|
+
protected readonly classes: _angular_core.Signal<string>;
|
|
571
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiTab, never>;
|
|
572
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<UiTab, "a[ui-tab]", never, { "active": { "alias": "active"; "required": false; "isSignal": true; }; }, {}, never, ["[tabIcon]", "*"], true, never>;
|
|
573
|
+
}
|
|
574
|
+
|
|
575
|
+
export { AMOUNT_MASKINGS, AMOUNT_NUMERICS, ASYNC_STATES, AVATAR_SIZES, BADGE_VARIANTS, BUTTON_SIZES, BUTTON_VARIANTS, CARD_PADDINGS, CARD_VARIANTS, CELL_BREAKPOINTS, CONTROL_SIZES, DELTA_EMPHASES, DIALOG_WIDTHS, METER_TONES, STAT_SIZES, UI_AMOUNT_MASKED, UiAmount, UiAsync, UiAvatar, UiBadge, UiButton, UiCard, UiDelta, UiDialog, UiField, UiInput, UiMenu, UiMenuItem, UiMenuTrigger, UiMeter, UiNavItem, UiRow, UiSegmented, UiSelect, UiSkeleton, UiStat, UiSwitch, UiTab, UiTabBar, UiTable, UiTd, UiTextarea, UiTh, UiTr, formatAmount };
|
|
576
|
+
export type { AmountFormatOptions, AmountMasking, AmountNumeric, AsyncState, AvatarSize, BadgeVariant, ButtonSize, ButtonVariant, CardPadding, CardVariant, CellBreakpoint, ControlSize, DeltaEmphasis, DialogWidth, MeterTone, SegmentedOption, StatSize, UiControlError };
|