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