@joanroucoux/cairn-ui 0.8.2 → 0.9.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 (124) hide show
  1. package/CHANGELOG.md +114 -0
  2. package/fesm2022/joanroucoux-cairn-ui-action-bar.mjs +57 -53
  3. package/fesm2022/joanroucoux-cairn-ui-action-bar.mjs.map +1 -1
  4. package/fesm2022/joanroucoux-cairn-ui-alert.mjs +155 -47
  5. package/fesm2022/joanroucoux-cairn-ui-alert.mjs.map +1 -1
  6. package/fesm2022/joanroucoux-cairn-ui-amount.mjs +220 -110
  7. package/fesm2022/joanroucoux-cairn-ui-amount.mjs.map +1 -1
  8. package/fesm2022/joanroucoux-cairn-ui-async.mjs +392 -216
  9. package/fesm2022/joanroucoux-cairn-ui-async.mjs.map +1 -1
  10. package/fesm2022/joanroucoux-cairn-ui-avatar.mjs +145 -68
  11. package/fesm2022/joanroucoux-cairn-ui-avatar.mjs.map +1 -1
  12. package/fesm2022/joanroucoux-cairn-ui-back-link.mjs +87 -47
  13. package/fesm2022/joanroucoux-cairn-ui-back-link.mjs.map +1 -1
  14. package/fesm2022/joanroucoux-cairn-ui-badge.mjs +83 -43
  15. package/fesm2022/joanroucoux-cairn-ui-badge.mjs.map +1 -1
  16. package/fesm2022/joanroucoux-cairn-ui-button.mjs +184 -104
  17. package/fesm2022/joanroucoux-cairn-ui-button.mjs.map +1 -1
  18. package/fesm2022/joanroucoux-cairn-ui-card.mjs +232 -137
  19. package/fesm2022/joanroucoux-cairn-ui-card.mjs.map +1 -1
  20. package/fesm2022/joanroucoux-cairn-ui-choice-chips.mjs +298 -102
  21. package/fesm2022/joanroucoux-cairn-ui-choice-chips.mjs.map +1 -1
  22. package/fesm2022/joanroucoux-cairn-ui-control.mjs +4 -17
  23. package/fesm2022/joanroucoux-cairn-ui-control.mjs.map +1 -1
  24. package/fesm2022/joanroucoux-cairn-ui-delta.mjs +150 -83
  25. package/fesm2022/joanroucoux-cairn-ui-delta.mjs.map +1 -1
  26. package/fesm2022/joanroucoux-cairn-ui-dialog.mjs +508 -471
  27. package/fesm2022/joanroucoux-cairn-ui-dialog.mjs.map +1 -1
  28. package/fesm2022/joanroucoux-cairn-ui-donut.mjs +255 -157
  29. package/fesm2022/joanroucoux-cairn-ui-donut.mjs.map +1 -1
  30. package/fesm2022/joanroucoux-cairn-ui-drawer.mjs +303 -0
  31. package/fesm2022/joanroucoux-cairn-ui-drawer.mjs.map +1 -0
  32. package/fesm2022/joanroucoux-cairn-ui-empty.mjs +76 -35
  33. package/fesm2022/joanroucoux-cairn-ui-empty.mjs.map +1 -1
  34. package/fesm2022/joanroucoux-cairn-ui-external-link.mjs +40 -31
  35. package/fesm2022/joanroucoux-cairn-ui-external-link.mjs.map +1 -1
  36. package/fesm2022/joanroucoux-cairn-ui-fact.mjs +188 -79
  37. package/fesm2022/joanroucoux-cairn-ui-fact.mjs.map +1 -1
  38. package/fesm2022/joanroucoux-cairn-ui-field.mjs +309 -173
  39. package/fesm2022/joanroucoux-cairn-ui-field.mjs.map +1 -1
  40. package/fesm2022/joanroucoux-cairn-ui-filter-chips.mjs +165 -87
  41. package/fesm2022/joanroucoux-cairn-ui-filter-chips.mjs.map +1 -1
  42. package/fesm2022/joanroucoux-cairn-ui-group-header.mjs +269 -0
  43. package/fesm2022/joanroucoux-cairn-ui-group-header.mjs.map +1 -0
  44. package/fesm2022/joanroucoux-cairn-ui-input.mjs +205 -85
  45. package/fesm2022/joanroucoux-cairn-ui-input.mjs.map +1 -1
  46. package/fesm2022/joanroucoux-cairn-ui-line-chart.mjs +838 -512
  47. package/fesm2022/joanroucoux-cairn-ui-line-chart.mjs.map +1 -1
  48. package/fesm2022/joanroucoux-cairn-ui-menu.mjs +401 -225
  49. package/fesm2022/joanroucoux-cairn-ui-menu.mjs.map +1 -1
  50. package/fesm2022/joanroucoux-cairn-ui-meter.mjs +143 -57
  51. package/fesm2022/joanroucoux-cairn-ui-meter.mjs.map +1 -1
  52. package/fesm2022/joanroucoux-cairn-ui-motion.mjs +367 -399
  53. package/fesm2022/joanroucoux-cairn-ui-motion.mjs.map +1 -1
  54. package/fesm2022/joanroucoux-cairn-ui-nav-item.mjs +73 -44
  55. package/fesm2022/joanroucoux-cairn-ui-nav-item.mjs.map +1 -1
  56. package/fesm2022/joanroucoux-cairn-ui-result-group.mjs +191 -0
  57. package/fesm2022/joanroucoux-cairn-ui-result-group.mjs.map +1 -0
  58. package/fesm2022/joanroucoux-cairn-ui-row.mjs +408 -146
  59. package/fesm2022/joanroucoux-cairn-ui-row.mjs.map +1 -1
  60. package/fesm2022/joanroucoux-cairn-ui-segmented.mjs +183 -81
  61. package/fesm2022/joanroucoux-cairn-ui-segmented.mjs.map +1 -1
  62. package/fesm2022/joanroucoux-cairn-ui-select-pill.mjs +270 -0
  63. package/fesm2022/joanroucoux-cairn-ui-select-pill.mjs.map +1 -0
  64. package/fesm2022/joanroucoux-cairn-ui-select.mjs +121 -67
  65. package/fesm2022/joanroucoux-cairn-ui-select.mjs.map +1 -1
  66. package/fesm2022/joanroucoux-cairn-ui-skeleton.mjs +129 -51
  67. package/fesm2022/joanroucoux-cairn-ui-skeleton.mjs.map +1 -1
  68. package/fesm2022/joanroucoux-cairn-ui-stale-link.mjs +80 -39
  69. package/fesm2022/joanroucoux-cairn-ui-stale-link.mjs.map +1 -1
  70. package/fesm2022/joanroucoux-cairn-ui-stat.mjs +85 -55
  71. package/fesm2022/joanroucoux-cairn-ui-stat.mjs.map +1 -1
  72. package/fesm2022/joanroucoux-cairn-ui-switch.mjs +48 -35
  73. package/fesm2022/joanroucoux-cairn-ui-switch.mjs.map +1 -1
  74. package/fesm2022/joanroucoux-cairn-ui-tab-bar.mjs +113 -69
  75. package/fesm2022/joanroucoux-cairn-ui-tab-bar.mjs.map +1 -1
  76. package/fesm2022/joanroucoux-cairn-ui-table.mjs +1036 -310
  77. package/fesm2022/joanroucoux-cairn-ui-table.mjs.map +1 -1
  78. package/fesm2022/joanroucoux-cairn-ui-toast.mjs +240 -127
  79. package/fesm2022/joanroucoux-cairn-ui-toast.mjs.map +1 -1
  80. package/fesm2022/joanroucoux-cairn-ui.mjs +0 -4
  81. package/package.json +17 -1
  82. package/styles/motion.css +1 -13
  83. package/styles/tokens.css +35 -64
  84. package/types/joanroucoux-cairn-ui-action-bar.d.ts +9 -14
  85. package/types/joanroucoux-cairn-ui-alert.d.ts +29 -15
  86. package/types/joanroucoux-cairn-ui-amount.d.ts +64 -32
  87. package/types/joanroucoux-cairn-ui-async.d.ts +85 -38
  88. package/types/joanroucoux-cairn-ui-avatar.d.ts +34 -22
  89. package/types/joanroucoux-cairn-ui-back-link.d.ts +20 -15
  90. package/types/joanroucoux-cairn-ui-badge.d.ts +22 -14
  91. package/types/joanroucoux-cairn-ui-button.d.ts +36 -18
  92. package/types/joanroucoux-cairn-ui-card.d.ts +48 -23
  93. package/types/joanroucoux-cairn-ui-choice-chips.d.ts +91 -35
  94. package/types/joanroucoux-cairn-ui-control.d.ts +9 -18
  95. package/types/joanroucoux-cairn-ui-delta.d.ts +46 -24
  96. package/types/joanroucoux-cairn-ui-dialog.d.ts +124 -57
  97. package/types/joanroucoux-cairn-ui-donut.d.ts +83 -46
  98. package/types/joanroucoux-cairn-ui-drawer.d.ts +73 -0
  99. package/types/joanroucoux-cairn-ui-empty.d.ts +20 -13
  100. package/types/joanroucoux-cairn-ui-external-link.d.ts +6 -10
  101. package/types/joanroucoux-cairn-ui-fact.d.ts +49 -25
  102. package/types/joanroucoux-cairn-ui-field.d.ts +72 -49
  103. package/types/joanroucoux-cairn-ui-filter-chips.d.ts +35 -20
  104. package/types/joanroucoux-cairn-ui-group-header.d.ts +58 -0
  105. package/types/joanroucoux-cairn-ui-input.d.ts +59 -37
  106. package/types/joanroucoux-cairn-ui-line-chart.d.ts +199 -89
  107. package/types/joanroucoux-cairn-ui-menu.d.ts +81 -44
  108. package/types/joanroucoux-cairn-ui-meter.d.ts +44 -22
  109. package/types/joanroucoux-cairn-ui-motion.d.ts +61 -75
  110. package/types/joanroucoux-cairn-ui-nav-item.d.ts +15 -13
  111. package/types/joanroucoux-cairn-ui-result-group.d.ts +52 -0
  112. package/types/joanroucoux-cairn-ui-row.d.ts +92 -37
  113. package/types/joanroucoux-cairn-ui-segmented.d.ts +51 -27
  114. package/types/joanroucoux-cairn-ui-select-pill.d.ts +59 -0
  115. package/types/joanroucoux-cairn-ui-select.d.ts +28 -18
  116. package/types/joanroucoux-cairn-ui-skeleton.d.ts +35 -18
  117. package/types/joanroucoux-cairn-ui-stale-link.d.ts +23 -16
  118. package/types/joanroucoux-cairn-ui-stat.d.ts +26 -21
  119. package/types/joanroucoux-cairn-ui-switch.d.ts +7 -11
  120. package/types/joanroucoux-cairn-ui-tab-bar.d.ts +20 -17
  121. package/types/joanroucoux-cairn-ui-table.d.ts +251 -89
  122. package/types/joanroucoux-cairn-ui-toast.d.ts +46 -36
  123. package/types/joanroucoux-cairn-ui.d.ts +1 -2
  124. package/fesm2022/joanroucoux-cairn-ui.mjs.map +0 -1
@@ -1,139 +1,301 @@
1
- import * as _angular_core from '@angular/core';
2
-
1
+ import * as i0 from "@angular/core";
3
2
  /** Breakpoints a secondary column can be held back until. */
4
- declare const CELL_BREAKPOINTS: readonly ["md", "lg"];
3
+ export declare const CELL_BREAKPOINTS: readonly ["md", "lg"];
5
4
  type CellBreakpoint = (typeof CELL_BREAKPOINTS)[number];
6
5
  /** Body row heights. */
7
- declare const TABLE_ROWS: readonly ["48", "52", "60"];
6
+ export declare const TABLE_ROWS: readonly ["48", "52", "60"];
8
7
  type TableRow = (typeof TABLE_ROWS)[number];
9
8
  /**
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.
9
+ * Styled native table. `row` sets the height of every body row, `rule` draws or drops the hairline
10
+ * under the header, `spaced` leaves a gap between the header and the first row.
13
11
  *
14
12
  * @example
15
13
  * <table uiTable row="60" [rule]="false">
16
14
  */
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>;
15
+ export declare class UiTable {
16
+ readonly row: import("@angular/core").InputSignal<"48" | "52" | "60">;
17
+ readonly rule: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
18
+ readonly spaced: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
19
+ protected readonly classes: import("@angular/core").Signal<string>;
20
+ constructor();
21
+ static ɵfac: i0.ɵɵFactoryDeclaration<UiTable, never>;
22
+ static ɵdir: i0.ɵɵDirectiveDeclaration<UiTable, "table[uiTable]", never, {
23
+ "row": {
24
+ "alias": "row";
25
+ "required": false;
26
+ "isSignal": true;
27
+ };
28
+ "rule": {
29
+ "alias": "rule";
30
+ "required": false;
31
+ "isSignal": true;
32
+ };
33
+ "spaced": {
34
+ "alias": "spaced";
35
+ "required": false;
36
+ "isSignal": true;
37
+ };
38
+ }, {}, never, never, true, never>;
25
39
  }
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>;
40
+ /**
41
+ * Body of one group of rows. `collapsed` hides every `tr[uiTr]` but the group row with `hidden`: the rows
42
+ * stay in the DOM, so a `uiFlipList` around the table sees no item added or removed and slides
43
+ * nothing. A plain `tr` without `uiTr` is not hidden.
44
+ *
45
+ * @example
46
+ * <tbody uiGroup [collapsed]="!open()">
47
+ */
48
+ export declare class UiGroup {
49
+ readonly collapsed: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
50
+ static ɵfac: i0.ɵɵFactoryDeclaration<UiGroup, never>;
51
+ static ɵdir: i0.ɵɵDirectiveDeclaration<UiGroup, "tbody[uiGroup]", never, {
52
+ "collapsed": {
53
+ "alias": "collapsed";
54
+ "required": false;
55
+ "isSignal": true;
56
+ };
57
+ }, {}, never, never, true, never>;
30
58
  }
31
59
  /**
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.
60
+ * Body or group row. `selected` takes the soft fill, `interactive` (a row that opens something) also
61
+ * presses to it. `group` marks the row that holds a group band: it has no hover state.
36
62
  *
37
63
  * @example
38
64
  * <tr uiTr [selected]="open">...
39
65
  * <tr uiTr group><td ui-group-cell name="Brokerage">...
40
66
  */
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>;
67
+ export declare class UiTr {
68
+ protected readonly body: UiGroup | null;
69
+ readonly group: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
70
+ readonly selected: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
71
+ readonly interactive: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
72
+ protected readonly classes: import("@angular/core").Signal<string>;
73
+ static ɵfac: i0.ɵɵFactoryDeclaration<UiTr, never>;
74
+ static ɵdir: i0.ɵɵDirectiveDeclaration<UiTr, "tr[uiTr]", never, {
75
+ "group": {
76
+ "alias": "group";
77
+ "required": false;
78
+ "isSignal": true;
79
+ };
80
+ "selected": {
81
+ "alias": "selected";
82
+ "required": false;
83
+ "isSignal": true;
84
+ };
85
+ "interactive": {
86
+ "alias": "interactive";
87
+ "required": false;
88
+ "isSignal": true;
89
+ };
90
+ }, {}, never, never, true, never>;
48
91
  }
49
92
  /**
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.
93
+ * Column header. `numeric` right-aligns, `secondary` (or `from`) hides the column below a
94
+ * breakpoint, `primary` makes it the column that absorbs the free width, `tall` is a 40px header,
95
+ * `width` fixes the column width.
53
96
  *
54
97
  * @example
55
98
  * <th uiTh numeric secondary width="108px">Quantity</th>
56
99
  */
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>;
100
+ export declare class UiTh {
101
+ readonly width: import("@angular/core").InputSignal<string | null>;
102
+ readonly numeric: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
103
+ readonly primary: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
104
+ readonly secondary: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
105
+ readonly tall: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
106
+ readonly from: import("@angular/core").InputSignal<"md" | "lg" | null>;
107
+ protected readonly classes: import("@angular/core").Signal<string>;
108
+ static ɵfac: i0.ɵɵFactoryDeclaration<UiTh, never>;
109
+ static ɵdir: i0.ɵɵDirectiveDeclaration<UiTh, "th[uiTh]", never, {
110
+ "width": {
111
+ "alias": "width";
112
+ "required": false;
113
+ "isSignal": true;
114
+ };
115
+ "numeric": {
116
+ "alias": "numeric";
117
+ "required": false;
118
+ "isSignal": true;
119
+ };
120
+ "primary": {
121
+ "alias": "primary";
122
+ "required": false;
123
+ "isSignal": true;
124
+ };
125
+ "secondary": {
126
+ "alias": "secondary";
127
+ "required": false;
128
+ "isSignal": true;
129
+ };
130
+ "tall": {
131
+ "alias": "tall";
132
+ "required": false;
133
+ "isSignal": true;
134
+ };
135
+ "from": {
136
+ "alias": "from";
137
+ "required": false;
138
+ "isSignal": true;
139
+ };
140
+ }, {}, never, never, true, never>;
67
141
  }
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>;
142
+ /** Body cell. Same inputs as `UiTh` bar `tall` and `width`, which must be set on both to match. */
143
+ export declare class UiTd {
144
+ readonly numeric: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
145
+ readonly primary: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
146
+ readonly secondary: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
147
+ readonly from: import("@angular/core").InputSignal<"md" | "lg" | null>;
148
+ protected readonly classes: import("@angular/core").Signal<string>;
149
+ static ɵfac: i0.ɵɵFactoryDeclaration<UiTd, never>;
150
+ static ɵdir: i0.ɵɵDirectiveDeclaration<UiTd, "td[uiTd]", never, {
151
+ "numeric": {
152
+ "alias": "numeric";
153
+ "required": false;
154
+ "isSignal": true;
155
+ };
156
+ "primary": {
157
+ "alias": "primary";
158
+ "required": false;
159
+ "isSignal": true;
160
+ };
161
+ "secondary": {
162
+ "alias": "secondary";
163
+ "required": false;
164
+ "isSignal": true;
165
+ };
166
+ "from": {
167
+ "alias": "from";
168
+ "required": false;
169
+ "isSignal": true;
170
+ };
171
+ }, {}, never, never, true, never>;
77
172
  }
78
173
  /** Group band sizes. */
79
- declare const GROUP_SIZES: readonly ["md", "lg"];
174
+ export declare const GROUP_SIZES: readonly ["md", "lg"];
80
175
  type GroupSize = (typeof GROUP_SIZES)[number];
81
176
  /**
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`.
177
+ * The band that opens a group of rows: name, meta beside it, the projected total on the right.
178
+ * Spans the whole row through `colspan`.
179
+ *
180
+ * With `collapsible` the band is a button inside the heading, with a chevron that turns when the
181
+ * group is folded. `expanded` is a model: the page keeps the fold memory and sets `collapsed` on the
182
+ * `tbody[uiGroup]`. `toggleDisabled` keeps the button focusable and announced, but a click changes
183
+ * nothing (a filter holds the group open). `controls` is the id of the group it folds.
84
184
  *
85
185
  * @example
86
186
  * <tr uiTr group><td ui-group-cell colspan="4" name="Brokerage" meta="Savings plan">...total...</td></tr>
187
+ * <tr uiTr group><td ui-group-cell collapsible [(expanded)]="open" controls="brokerage" colspan="4" name="Brokerage">...</td></tr>
87
188
  */
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>;
189
+ export declare class UiGroupCell {
190
+ readonly name: import("@angular/core").InputSignal<string>;
191
+ readonly meta: import("@angular/core").InputSignal<string | undefined>;
192
+ readonly size: import("@angular/core").InputSignal<"md" | "lg">;
193
+ readonly collapsible: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
194
+ readonly expanded: import("@angular/core").ModelSignal<boolean>;
195
+ readonly toggleDisabled: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
196
+ readonly controls: import("@angular/core").InputSignal<string | undefined>;
197
+ protected readonly hostClasses: import("@angular/core").Signal<string>;
198
+ protected toggle(): void;
199
+ static ɵfac: i0.ɵɵFactoryDeclaration<UiGroupCell, never>;
200
+ static ɵcmp: i0.ɵɵComponentDeclaration<UiGroupCell, "td[ui-group-cell]", never, {
201
+ "name": {
202
+ "alias": "name";
203
+ "required": true;
204
+ "isSignal": true;
205
+ };
206
+ "meta": {
207
+ "alias": "meta";
208
+ "required": false;
209
+ "isSignal": true;
210
+ };
211
+ "size": {
212
+ "alias": "size";
213
+ "required": false;
214
+ "isSignal": true;
215
+ };
216
+ "collapsible": {
217
+ "alias": "collapsible";
218
+ "required": false;
219
+ "isSignal": true;
220
+ };
221
+ "expanded": {
222
+ "alias": "expanded";
223
+ "required": false;
224
+ "isSignal": true;
225
+ };
226
+ "toggleDisabled": {
227
+ "alias": "toggleDisabled";
228
+ "required": false;
229
+ "isSignal": true;
230
+ };
231
+ "controls": {
232
+ "alias": "controls";
233
+ "required": false;
234
+ "isSignal": true;
235
+ };
236
+ }, {
237
+ "expanded": "expandedChange";
238
+ }, never, ["*"], true, never>;
95
239
  }
96
240
  /**
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.
241
+ * Makes a link or button the way into its row: by default it stretches over the whole row, so the
242
+ * row is one target. With `[stretch]="false"` only the name is the target. `current` marks the open
243
+ * line. Other controls in the row need `uiRowAction` to stay clickable.
101
244
  *
102
245
  * @example
103
246
  * <td uiTd primary><a uiRowLink href="/lines/42">Ferrari</a></td>
104
247
  * <td uiTd primary><a uiRowLink [stretch]="false" href="/accounts/3">Brokerage</a></td>
105
248
  */
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>;
249
+ export declare class UiRowLink {
250
+ readonly stretch: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
251
+ readonly current: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
252
+ protected readonly classes: import("@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)">;
253
+ static ɵfac: i0.ɵɵFactoryDeclaration<UiRowLink, never>;
254
+ static ɵdir: i0.ɵɵDirectiveDeclaration<UiRowLink, "a[uiRowLink], button[uiRowLink]", never, {
255
+ "stretch": {
256
+ "alias": "stretch";
257
+ "required": false;
258
+ "isSignal": true;
259
+ };
260
+ "current": {
261
+ "alias": "current";
262
+ "required": false;
263
+ "isSignal": true;
264
+ };
265
+ }, {}, never, never, true, never>;
112
266
  }
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>;
267
+ /** A control in another cell of a stretched-link row: keeps it clickable above the row-wide link. */
268
+ export declare class UiRowAction {
269
+ static ɵfac: i0.ɵɵFactoryDeclaration<UiRowAction, never>;
270
+ static ɵdir: i0.ɵɵDirectiveDeclaration<UiRowAction, "[uiRowAction]", never, {}, {}, never, never, true, never>;
117
271
  }
118
272
  /** Tones of a subtitle: subtle (default), `--stale` at 500, or the color of the cell. */
119
- declare const SUB_TONES: readonly ["subtle", "stale", "inherit"];
273
+ export declare const SUB_TONES: readonly ["subtle", "stale", "inherit"];
120
274
  type SubTone = (typeof SUB_TONES)[number];
121
275
  /**
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.
276
+ * A second line under a cell's main text. `narrow` shows it only under 1024px, for the data held
277
+ * back by `secondary` columns.
125
278
  *
126
279
  * @example
127
280
  * <span uiCellSub narrow>10 × 421.26 € · cost 388.10 €</span>
128
281
  * <span uiCellSub tone="stale">Quote of 24/09</span>
129
282
  */
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>;
283
+ export declare class UiCellSub {
284
+ readonly narrow: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
285
+ readonly tone: import("@angular/core").InputSignal<"subtle" | "stale" | "inherit">;
286
+ protected readonly classes: import("@angular/core").Signal<string>;
287
+ static ɵfac: i0.ɵɵFactoryDeclaration<UiCellSub, never>;
288
+ static ɵdir: i0.ɵɵDirectiveDeclaration<UiCellSub, "[uiCellSub]", never, {
289
+ "narrow": {
290
+ "alias": "narrow";
291
+ "required": false;
292
+ "isSignal": true;
293
+ };
294
+ "tone": {
295
+ "alias": "tone";
296
+ "required": false;
297
+ "isSignal": true;
298
+ };
299
+ }, {}, never, never, true, never>;
136
300
  }
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 };
301
+ export type { CellBreakpoint, GroupSize, SubTone, TableRow };
@@ -1,51 +1,61 @@
1
- import * as i0 from '@angular/core';
2
-
1
+ import * as i0 from "@angular/core";
3
2
  type Toast = {
4
- readonly id: number;
5
- readonly text: string;
3
+ readonly id: number;
4
+ readonly text: string;
5
+ readonly kind: 'success';
6
+ } | {
7
+ readonly id: number;
8
+ readonly text: string;
9
+ readonly kind: 'error';
10
+ readonly closeLabel: string;
6
11
  };
7
12
  /**
8
- * One-slot confirmation message queue read by `ui-toaster`.
13
+ * One-slot message queue read by `ui-toaster`: a confirmation that times out, or an error that stays until closed.
9
14
  *
10
15
  * @example
11
16
  * inject(UiToasts).show('Achat enregistré');
17
+ * inject(UiToasts).showError("Échec de l'import");
12
18
  */
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>;
19
+ export declare class UiToasts {
20
+ private readonly current;
21
+ private sequence;
22
+ readonly toast: import("@angular/core").Signal<Toast | null>;
23
+ show(message: string): void;
24
+ showError(message: string, closeLabel?: string): void;
25
+ dismiss(): void;
26
+ static ɵfac: i0.ɵɵFactoryDeclaration<UiToasts, never>;
27
+ static ɵprov: i0.ɵɵInjectableDeclaration<any>;
21
28
  }
22
-
23
29
  /**
24
- * Confirmation message shown by `UiToasts.show`: one at a time, no action, gone after `--toast-duration`.
30
+ * Message shown by `UiToasts`: one at a time, no action. A confirmation (`show`) is gone after `--toast-duration`;
31
+ * an error (`showError`) stays until its cross is clicked. Centred at the bottom of the content area: from `64rem`
32
+ * between `--sidebar-width` (0 when unset) and the right edge.
25
33
  * Place it once in the app shell.
26
34
  *
27
35
  * @example
28
36
  * <ui-toaster />
29
37
  */
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>;
38
+ export declare class UiToaster {
39
+ protected readonly toasts: UiToasts;
40
+ protected readonly toastClasses = "pointer-events-auto flex min-h-11 min-w-[min(280px,calc(100vw-2rem))] max-w-[min(400px,calc(100vw-2rem))] items-center gap-2.5 rounded-container bg-(--primary) px-4 py-3 text-label font-medium text-(--primary-foreground) shadow-[0_8px_24px_rgb(0_0_0/0.16)] transition-[opacity,translate] duration-(--duration-base) ease-out starting:opacity-0 starting:translate-y-2 motion-reduce:starting:translate-y-0";
41
+ protected readonly closeClasses = "relative grid size-7 flex-none cursor-pointer place-items-center -my-1 -mr-2 rounded-[calc(var(--radius-control)-2px)] text-(--primary-foreground) outline-none hover:bg-[rgb(127_127_127/0.2)] focus-visible:outline-2 focus-visible:outline-offset-[-2px] focus-visible:outline-(--primary-foreground) after:absolute after:-inset-2 pointer-fine:after:-inset-1";
42
+ private readonly host;
43
+ private readonly hovered;
44
+ private popoverShown;
45
+ private readonly focused;
46
+ private lastId;
47
+ private raisedId;
48
+ private remaining;
49
+ private startedAt;
50
+ private timer;
51
+ constructor();
52
+ protected setHovered(value: boolean): void;
53
+ protected setFocused(value: boolean): void;
54
+ private raise;
55
+ private resume;
56
+ private pause;
57
+ private stop;
58
+ static ɵfac: i0.ɵɵFactoryDeclaration<UiToaster, never>;
59
+ static ɵcmp: i0.ɵɵComponentDeclaration<UiToaster, "ui-toaster", never, {}, {}, never, never, true, never>;
48
60
  }
49
-
50
- export { UiToaster, UiToasts };
51
- export type { Toast };
61
+ export type { Toast };
@@ -1,2 +1 @@
1
-
2
- export { };
1
+ export {}
@@ -1 +0,0 @@
1
- {"version":3,"file":"joanroucoux-cairn-ui.mjs","sources":["../../../projects/ui/src/joanroucoux-cairn-ui.ts"],"sourcesContent":["/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"AAAA;;AAEG"}