@area8975/ui 0.2.2-dev.49 → 0.2.2-dev.50

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 (182) hide show
  1. package/README.md +3 -2
  2. package/fesm2022/area8975-ui-alert.mjs +113 -0
  3. package/fesm2022/area8975-ui-alert.mjs.map +1 -0
  4. package/fesm2022/area8975-ui-avatar.mjs +157 -0
  5. package/fesm2022/area8975-ui-avatar.mjs.map +1 -0
  6. package/fesm2022/area8975-ui-badge.mjs +116 -0
  7. package/fesm2022/area8975-ui-badge.mjs.map +1 -0
  8. package/fesm2022/area8975-ui-button.mjs +314 -0
  9. package/fesm2022/area8975-ui-button.mjs.map +1 -0
  10. package/fesm2022/area8975-ui-calendar.mjs +549 -0
  11. package/fesm2022/area8975-ui-calendar.mjs.map +1 -0
  12. package/fesm2022/area8975-ui-card-header.mjs +96 -0
  13. package/fesm2022/area8975-ui-card-header.mjs.map +1 -0
  14. package/fesm2022/area8975-ui-card.mjs +73 -0
  15. package/fesm2022/area8975-ui-card.mjs.map +1 -0
  16. package/fesm2022/area8975-ui-chart-palette.mjs +225 -0
  17. package/fesm2022/area8975-ui-chart-palette.mjs.map +1 -0
  18. package/fesm2022/area8975-ui-charts.mjs +2813 -0
  19. package/fesm2022/area8975-ui-charts.mjs.map +1 -0
  20. package/fesm2022/area8975-ui-checkbox.mjs +202 -0
  21. package/fesm2022/area8975-ui-checkbox.mjs.map +1 -0
  22. package/fesm2022/area8975-ui-colour.mjs +200 -0
  23. package/fesm2022/area8975-ui-colour.mjs.map +1 -0
  24. package/fesm2022/area8975-ui-container.mjs +40 -0
  25. package/fesm2022/area8975-ui-container.mjs.map +1 -0
  26. package/fesm2022/area8975-ui-counter.mjs +246 -0
  27. package/fesm2022/area8975-ui-counter.mjs.map +1 -0
  28. package/fesm2022/area8975-ui-date-range-picker.mjs +554 -0
  29. package/fesm2022/area8975-ui-date-range-picker.mjs.map +1 -0
  30. package/fesm2022/area8975-ui-datepicker.mjs +547 -0
  31. package/fesm2022/area8975-ui-datepicker.mjs.map +1 -0
  32. package/fesm2022/area8975-ui-disclosure.mjs +279 -0
  33. package/fesm2022/area8975-ui-disclosure.mjs.map +1 -0
  34. package/fesm2022/area8975-ui-drawer.mjs +106 -0
  35. package/fesm2022/area8975-ui-drawer.mjs.map +1 -0
  36. package/fesm2022/area8975-ui-dropdown-button.mjs +141 -0
  37. package/fesm2022/area8975-ui-dropdown-button.mjs.map +1 -0
  38. package/fesm2022/area8975-ui-dropdown-menu.mjs +96 -0
  39. package/fesm2022/area8975-ui-dropdown-menu.mjs.map +1 -0
  40. package/fesm2022/area8975-ui-dropdown.mjs +208 -0
  41. package/fesm2022/area8975-ui-dropdown.mjs.map +1 -0
  42. package/fesm2022/area8975-ui-dropzone.mjs +332 -0
  43. package/fesm2022/area8975-ui-dropzone.mjs.map +1 -0
  44. package/fesm2022/area8975-ui-field.mjs +191 -0
  45. package/fesm2022/area8975-ui-field.mjs.map +1 -0
  46. package/fesm2022/area8975-ui-file-input.mjs +340 -0
  47. package/fesm2022/area8975-ui-file-input.mjs.map +1 -0
  48. package/fesm2022/area8975-ui-file.mjs +47 -0
  49. package/fesm2022/area8975-ui-file.mjs.map +1 -0
  50. package/fesm2022/area8975-ui-format.mjs +70 -0
  51. package/fesm2022/area8975-ui-format.mjs.map +1 -0
  52. package/fesm2022/area8975-ui-input-addon.mjs +42 -0
  53. package/fesm2022/area8975-ui-input-addon.mjs.map +1 -0
  54. package/fesm2022/area8975-ui-input-group.mjs +86 -0
  55. package/fesm2022/area8975-ui-input-group.mjs.map +1 -0
  56. package/fesm2022/area8975-ui-input.mjs +682 -0
  57. package/fesm2022/area8975-ui-input.mjs.map +1 -0
  58. package/fesm2022/area8975-ui-kpi.mjs +167 -0
  59. package/fesm2022/area8975-ui-kpi.mjs.map +1 -0
  60. package/fesm2022/area8975-ui-layout.mjs +63 -0
  61. package/fesm2022/area8975-ui-layout.mjs.map +1 -0
  62. package/fesm2022/area8975-ui-loading.mjs +76 -0
  63. package/fesm2022/area8975-ui-loading.mjs.map +1 -0
  64. package/fesm2022/area8975-ui-modal-close-btn.mjs +89 -0
  65. package/fesm2022/area8975-ui-modal-close-btn.mjs.map +1 -0
  66. package/fesm2022/area8975-ui-modal.mjs +235 -0
  67. package/fesm2022/area8975-ui-modal.mjs.map +1 -0
  68. package/fesm2022/area8975-ui-money.mjs +230 -0
  69. package/fesm2022/area8975-ui-money.mjs.map +1 -0
  70. package/fesm2022/area8975-ui-overlay.mjs +317 -0
  71. package/fesm2022/area8975-ui-overlay.mjs.map +1 -0
  72. package/fesm2022/area8975-ui-pagination.mjs +152 -0
  73. package/fesm2022/area8975-ui-pagination.mjs.map +1 -0
  74. package/fesm2022/area8975-ui-private.mjs +63 -0
  75. package/fesm2022/area8975-ui-private.mjs.map +1 -0
  76. package/fesm2022/area8975-ui-progress.mjs +307 -0
  77. package/fesm2022/area8975-ui-progress.mjs.map +1 -0
  78. package/fesm2022/area8975-ui-radio.mjs +199 -0
  79. package/fesm2022/area8975-ui-radio.mjs.map +1 -0
  80. package/fesm2022/area8975-ui-rich-text-editor.mjs +778 -0
  81. package/fesm2022/area8975-ui-rich-text-editor.mjs.map +1 -0
  82. package/fesm2022/area8975-ui-search.mjs +266 -0
  83. package/fesm2022/area8975-ui-search.mjs.map +1 -0
  84. package/fesm2022/area8975-ui-segmented.mjs +118 -0
  85. package/fesm2022/area8975-ui-segmented.mjs.map +1 -0
  86. package/fesm2022/area8975-ui-select.mjs +926 -0
  87. package/fesm2022/area8975-ui-select.mjs.map +1 -0
  88. package/fesm2022/area8975-ui-sidebar-group.mjs +60 -0
  89. package/fesm2022/area8975-ui-sidebar-group.mjs.map +1 -0
  90. package/fesm2022/area8975-ui-sidebar-item.mjs +107 -0
  91. package/fesm2022/area8975-ui-sidebar-item.mjs.map +1 -0
  92. package/fesm2022/area8975-ui-sidebar.mjs +109 -0
  93. package/fesm2022/area8975-ui-sidebar.mjs.map +1 -0
  94. package/fesm2022/area8975-ui-skeleton.mjs +116 -0
  95. package/fesm2022/area8975-ui-skeleton.mjs.map +1 -0
  96. package/fesm2022/area8975-ui-stat.mjs +55 -0
  97. package/fesm2022/area8975-ui-stat.mjs.map +1 -0
  98. package/fesm2022/area8975-ui-switch.mjs +132 -0
  99. package/fesm2022/area8975-ui-switch.mjs.map +1 -0
  100. package/fesm2022/area8975-ui-tab.mjs +217 -0
  101. package/fesm2022/area8975-ui-tab.mjs.map +1 -0
  102. package/fesm2022/area8975-ui-table-filters.mjs +499 -0
  103. package/fesm2022/area8975-ui-table-filters.mjs.map +1 -0
  104. package/fesm2022/area8975-ui-table.mjs +1237 -0
  105. package/fesm2022/area8975-ui-table.mjs.map +1 -0
  106. package/fesm2022/area8975-ui-textarea.mjs +375 -0
  107. package/fesm2022/area8975-ui-textarea.mjs.map +1 -0
  108. package/fesm2022/area8975-ui-theme.mjs +246 -0
  109. package/fesm2022/area8975-ui-theme.mjs.map +1 -0
  110. package/fesm2022/area8975-ui-time-select.mjs +170 -0
  111. package/fesm2022/area8975-ui-time-select.mjs.map +1 -0
  112. package/fesm2022/area8975-ui-toast.mjs +269 -0
  113. package/fesm2022/area8975-ui-toast.mjs.map +1 -0
  114. package/fesm2022/area8975-ui-toaster.mjs +117 -0
  115. package/fesm2022/area8975-ui-toaster.mjs.map +1 -0
  116. package/fesm2022/area8975-ui-tooltip.mjs +196 -0
  117. package/fesm2022/area8975-ui-tooltip.mjs.map +1 -0
  118. package/fesm2022/area8975-ui-user-menu.mjs +186 -0
  119. package/fesm2022/area8975-ui-user-menu.mjs.map +1 -0
  120. package/fesm2022/area8975-ui.mjs +0 -16520
  121. package/package.json +237 -1
  122. package/types/area8975-ui-alert.d.ts +25 -0
  123. package/types/area8975-ui-avatar.d.ts +40 -0
  124. package/types/area8975-ui-badge.d.ts +31 -0
  125. package/types/area8975-ui-button.d.ts +129 -0
  126. package/types/area8975-ui-calendar.d.ts +177 -0
  127. package/types/area8975-ui-card-header.d.ts +28 -0
  128. package/types/area8975-ui-card.d.ts +18 -0
  129. package/types/area8975-ui-chart-palette.d.ts +176 -0
  130. package/types/area8975-ui-charts.d.ts +747 -0
  131. package/types/area8975-ui-checkbox.d.ts +61 -0
  132. package/types/area8975-ui-colour.d.ts +31 -0
  133. package/types/area8975-ui-container.d.ts +5 -0
  134. package/types/area8975-ui-counter.d.ts +43 -0
  135. package/types/area8975-ui-date-range-picker.d.ts +132 -0
  136. package/types/area8975-ui-datepicker.d.ts +124 -0
  137. package/types/area8975-ui-disclosure.d.ts +79 -0
  138. package/types/area8975-ui-drawer.d.ts +25 -0
  139. package/types/area8975-ui-dropdown-button.d.ts +32 -0
  140. package/types/area8975-ui-dropdown-menu.d.ts +25 -0
  141. package/types/area8975-ui-dropdown.d.ts +56 -0
  142. package/types/area8975-ui-dropzone.d.ts +96 -0
  143. package/types/area8975-ui-field.d.ts +72 -0
  144. package/types/area8975-ui-file-input.d.ts +72 -0
  145. package/types/area8975-ui-file.d.ts +21 -0
  146. package/types/area8975-ui-format.d.ts +37 -0
  147. package/types/area8975-ui-input-addon.d.ts +10 -0
  148. package/types/area8975-ui-input-group.d.ts +18 -0
  149. package/types/area8975-ui-input.d.ts +224 -0
  150. package/types/area8975-ui-kpi.d.ts +36 -0
  151. package/types/area8975-ui-layout.d.ts +7 -0
  152. package/types/area8975-ui-loading.d.ts +16 -0
  153. package/types/area8975-ui-modal-close-btn.d.ts +14 -0
  154. package/types/area8975-ui-modal.d.ts +45 -0
  155. package/types/area8975-ui-money.d.ts +77 -0
  156. package/types/area8975-ui-overlay.d.ts +75 -0
  157. package/types/area8975-ui-pagination.d.ts +27 -0
  158. package/types/area8975-ui-private.d.ts +20 -0
  159. package/types/area8975-ui-progress.d.ts +127 -0
  160. package/types/area8975-ui-radio.d.ts +61 -0
  161. package/types/area8975-ui-rich-text-editor.d.ts +165 -0
  162. package/types/area8975-ui-search.d.ts +56 -0
  163. package/types/area8975-ui-segmented.d.ts +41 -0
  164. package/types/area8975-ui-select.d.ts +293 -0
  165. package/types/area8975-ui-sidebar-group.d.ts +15 -0
  166. package/types/area8975-ui-sidebar-item.d.ts +20 -0
  167. package/types/area8975-ui-sidebar.d.ts +16 -0
  168. package/types/area8975-ui-skeleton.d.ts +35 -0
  169. package/types/area8975-ui-stat.d.ts +13 -0
  170. package/types/area8975-ui-switch.d.ts +32 -0
  171. package/types/area8975-ui-tab.d.ts +45 -0
  172. package/types/area8975-ui-table-filters.d.ts +138 -0
  173. package/types/area8975-ui-table.d.ts +371 -0
  174. package/types/area8975-ui-textarea.d.ts +126 -0
  175. package/types/area8975-ui-theme.d.ts +61 -0
  176. package/types/area8975-ui-time-select.d.ts +35 -0
  177. package/types/area8975-ui-toast.d.ts +78 -0
  178. package/types/area8975-ui-toaster.d.ts +23 -0
  179. package/types/area8975-ui-tooltip.d.ts +47 -0
  180. package/types/area8975-ui-user-menu.d.ts +39 -0
  181. package/types/area8975-ui.d.ts +1 -4546
  182. package/fesm2022/area8975-ui.mjs.map +0 -1
@@ -1,4546 +1 @@
1
- import * as i0 from "@angular/core";
2
- import { ElementRef, EnvironmentProviders, InjectionToken, OnDestroy, OnInit, Provider, Signal, TemplateRef, WritableSignal } from "@angular/core";
3
- import ApexCharts$1 from "apexcharts";
4
- import { ChainedCommands, Editor } from "@tiptap/core";
5
- import { Placement } from "@floating-ui/dom";
6
- import { Observable } from "rxjs";
7
- import { IconType } from "@ng-icons/core";
8
- /** One entry in a legend, the colour ties it to its marks. */
9
- export interface ChartLegendItem {
10
- name: string;
11
- colour: string;
12
- /** Shows the key as a dashed line, for series told apart by line style. */
13
- dashed?: boolean;
14
- /** Text to show instead of `name`. `name` still ties the item to its series. */
15
- label?: string;
16
- }
17
- /** Anything a legend can be linked to with `for`, every chart is one. */
18
- export interface ChartLegendSource {
19
- readonly legendItems: Signal<ChartLegendItem[]>;
20
- readonly legendNote: Signal<string>;
21
- /** Series switched off from the legend. */
22
- readonly hiddenSeries: WritableSignal<string[]>;
23
- /** The series the legend is pointing at, the others fade while it's set. */
24
- readonly emphasis: WritableSignal<string | null>;
25
- }
26
- /** Where a chart draws its own legend, `none` when one is linked elsewhere. */
27
- export type ChartLegendPosition = 'auto' | 'none';
28
- export type ChartOptions = ApexCharts$1.ApexOptions;
29
- /** One named set of values, one per category. */
30
- export interface ChartSeries {
31
- name: string;
32
- data: (number | null)[];
33
- /** Overrides the palette slot, keep it for when a series must match something else. */
34
- colour?: string;
35
- /** Draws the line dashed, e.g. to set projected figures apart from actual ones. Bars ignore it. */
36
- dashed?: boolean;
37
- }
38
- /** `fill` takes the host's height, which has to come from layout. */
39
- export type ChartHeight = number | 'fill';
40
- /** Turns a raw value into what the axis, tooltip and table show, e.g. money. */
41
- export type ChartValueFormatter = (value: number) => string;
42
- /** Inputs, privacy handling and legend wiring every chart shares, whatever it draws. */
43
- declare abstract class UiChartBase implements ChartLegendSource {
44
- protected readonly uiFormat: import("@area8975/ui").UiFormat;
45
- private readonly privacy;
46
- protected readonly dark: import("@angular/core").WritableSignal<boolean>;
47
- protected readonly ink: Signal<import("@area8975/ui").ChartInk>;
48
- /** Says what the chart shows, e.g. "Spending by month". */
49
- readonly ariaLabel: import("@angular/core").InputSignal<string>;
50
- readonly height: import("@angular/core").InputSignal<ChartHeight>;
51
- /** Used on the value axis, the tooltip and the table, e.g. to show money. */
52
- readonly valueFormatter: import("@angular/core").InputSignal<ChartValueFormatter>;
53
- /** Masks the values in privacy mode. Defaults to whether `valueFormatter` came from `injectMoneyFormatter`. */
54
- readonly sensitive: import("@angular/core").InputSignalWithTransform<boolean | undefined, unknown>;
55
- /** Heading for the category column in the data table. */
56
- readonly categoryLabel: import("@angular/core").InputSignal<string>;
57
- readonly loading: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
58
- readonly emptyText: import("@angular/core").InputSignal<string>;
59
- /** Shows the data table under the chart instead of only to screen readers. */
60
- readonly showTable: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
61
- /** Raw ApexCharts options merged over the defaults, for anything not covered here. */
62
- readonly options: import("@angular/core").InputSignal<ApexCharts.ApexOptions | null>;
63
- /** `none` leaves the legend out, for when a `ui-chart-legend` is linked with `for`. */
64
- readonly legend: import("@angular/core").InputSignal<ChartLegendPosition>;
65
- /** Series switched off in the legend. */
66
- readonly hiddenSeries: import("@angular/core").WritableSignal<string[]>;
67
- /** The series the legend is pointing at, the others fade while it's set. */
68
- readonly emphasis: import("@angular/core").WritableSignal<string | null>;
69
- abstract readonly legendItems: Signal<ChartLegendItem[]>;
70
- abstract readonly legendNote: Signal<string>;
71
- protected abstract readonly isEmpty: Signal<boolean>;
72
- private readonly money;
73
- protected readonly privacyMode: Signal<"visible" | "discreet" | "hidden">;
74
- protected readonly masked: Signal<boolean>;
75
- protected readonly concealed: Signal<boolean>;
76
- protected readonly displayFormatter: Signal<ChartValueFormatter>;
77
- protected readonly apexHeight: Signal<number | "100%">;
78
- protected formatValue(value: number | null | undefined): string;
79
- static ɵfac: i0.ɵɵFactoryDeclaration<UiChartBase, never>;
80
- static ɵdir: i0.ɵɵDirectiveDeclaration<UiChartBase, never, never, {
81
- "ariaLabel": {
82
- "alias": "ariaLabel";
83
- "required": true;
84
- "isSignal": true;
85
- };
86
- "height": {
87
- "alias": "height";
88
- "required": false;
89
- "isSignal": true;
90
- };
91
- "valueFormatter": {
92
- "alias": "valueFormatter";
93
- "required": false;
94
- "isSignal": true;
95
- };
96
- "sensitive": {
97
- "alias": "sensitive";
98
- "required": false;
99
- "isSignal": true;
100
- };
101
- "categoryLabel": {
102
- "alias": "categoryLabel";
103
- "required": false;
104
- "isSignal": true;
105
- };
106
- "loading": {
107
- "alias": "loading";
108
- "required": false;
109
- "isSignal": true;
110
- };
111
- "emptyText": {
112
- "alias": "emptyText";
113
- "required": false;
114
- "isSignal": true;
115
- };
116
- "showTable": {
117
- "alias": "showTable";
118
- "required": false;
119
- "isSignal": true;
120
- };
121
- "options": {
122
- "alias": "options";
123
- "required": false;
124
- "isSignal": true;
125
- };
126
- "legend": {
127
- "alias": "legend";
128
- "required": false;
129
- "isSignal": true;
130
- };
131
- }, {}, never, never, true, never>;
132
- }
133
- /**
134
- * Categorical colours for chart series, in a fixed order that was checked for
135
- * colour blindness (adjacent pairs stay apart for protan, deutan and tritan).
136
- * Keep the order, a series takes the next slot, never a generated colour.
137
- */
138
- export declare const CHART_PALETTE: readonly ["#2a78d6", "#eb6834", "#1baf7a", "#eda100", "#e87ba4", "#008300", "#4a3aa7", "#e34948"];
139
- /** Violet and green are lightened to keep 3:1 contrast on a dark card. */
140
- export declare const CHART_PALETTE_DARK: readonly ["#2a78d6", "#eb6834", "#1baf7a", "#eda100", "#e87ba4", "#2e9e2e", "#8a7cf0", "#e34948"];
141
- /** A colour someone picks for a thing, e.g. a category, that every chart then draws it in. */
142
- export interface ChartColour {
143
- /** Stable, safe to store. Never rename or reuse one. */
144
- readonly key: string;
145
- /** What to call it in a picker, and for screen readers. */
146
- readonly label: string;
147
- /** On a light card (`CHART_INK.surface`), at least 3:1. */
148
- readonly light: string;
149
- /** On a dark card (`CHART_INK_DARK.surface`), at least 3:1. */
150
- readonly dark: string;
151
- }
152
- /**
153
- * Every colour that can be picked, the automatic palette first. Too many to tell
154
- * apart by colour alone for everyone, so always show a label alongside.
155
- */
156
- export declare const CHART_COLOURS: readonly [{
157
- readonly key: "blue";
158
- readonly label: "Blue";
159
- readonly light: "#2a78d6";
160
- readonly dark: "#2a78d6";
161
- }, {
162
- readonly key: "orange";
163
- readonly label: "Orange";
164
- readonly light: "#eb6834";
165
- readonly dark: "#eb6834";
166
- }, {
167
- readonly key: "teal";
168
- readonly label: "Teal";
169
- readonly light: "#1baf7a";
170
- readonly dark: "#1baf7a";
171
- }, {
172
- readonly key: "amber";
173
- readonly label: "Amber";
174
- readonly light: "#eda100";
175
- readonly dark: "#eda100";
176
- }, {
177
- readonly key: "pink";
178
- readonly label: "Pink";
179
- readonly light: "#e87ba4";
180
- readonly dark: "#e87ba4";
181
- }, {
182
- readonly key: "green";
183
- readonly label: "Green";
184
- readonly light: "#008300";
185
- readonly dark: "#2e9e2e";
186
- }, {
187
- readonly key: "violet";
188
- readonly label: "Violet";
189
- readonly light: "#4a3aa7";
190
- readonly dark: "#8a7cf0";
191
- }, {
192
- readonly key: "red";
193
- readonly label: "Red";
194
- readonly light: "#e34948";
195
- readonly dark: "#e34948";
196
- }, {
197
- readonly key: "magenta";
198
- readonly label: "Magenta";
199
- readonly light: "#7e147e";
200
- readonly dark: "#ab46aa";
201
- }, {
202
- readonly key: "dark-yellow";
203
- readonly label: "Dark yellow";
204
- readonly light: "#a16d03";
205
- readonly dark: "#a16d03";
206
- }, {
207
- readonly key: "dark-cyan";
208
- readonly label: "Dark cyan";
209
- readonly light: "#046971";
210
- readonly dark: "#247b83";
211
- }, {
212
- readonly key: "mauve";
213
- readonly label: "Mauve";
214
- readonly light: "#693c5f";
215
- readonly dark: "#916185";
216
- }, {
217
- readonly key: "cyan";
218
- readonly label: "Cyan";
219
- readonly light: "#309fb3";
220
- readonly dark: "#309fb3";
221
- }, {
222
- readonly key: "light-purple";
223
- readonly label: "Light purple";
224
- readonly light: "#cb65e1";
225
- readonly dark: "#cb65e1";
226
- }, {
227
- readonly key: "lilac";
228
- readonly label: "Lilac";
229
- readonly light: "#ad87b6";
230
- readonly dark: "#ad87b6";
231
- }, {
232
- readonly key: "olive";
233
- readonly label: "Olive";
234
- readonly light: "#989401";
235
- readonly dark: "#989401";
236
- }, {
237
- readonly key: "dark-red";
238
- readonly label: "Dark red";
239
- readonly light: "#842e26";
240
- readonly dark: "#ae544a";
241
- }, {
242
- readonly key: "dark-green";
243
- readonly label: "Dark green";
244
- readonly light: "#406020";
245
- readonly dark: "#597b3a";
246
- }, {
247
- readonly key: "tan";
248
- readonly label: "Tan";
249
- readonly light: "#bd8a66";
250
- readonly dark: "#bd8a66";
251
- }, {
252
- readonly key: "purple";
253
- readonly label: "Purple";
254
- readonly light: "#7845ce";
255
- readonly dark: "#8452db";
256
- }, {
257
- readonly key: "deep-pink";
258
- readonly label: "Deep pink";
259
- readonly light: "#db4594";
260
- readonly dark: "#db4594";
261
- }, {
262
- readonly key: "grey-blue";
263
- readonly label: "Grey blue";
264
- readonly light: "#6f7db0";
265
- readonly dark: "#6f7db0";
266
- }];
267
- export type ChartColourKey = typeof CHART_COLOURS[number]['key'];
268
- /** The shade of a picked colour for the current theme. */
269
- export declare function pickedChartColour(key: ChartColourKey, dark?: boolean): string;
270
- /** Past eight series, fold the rest into "Other" instead of reusing a colour. */
271
- export declare const CHART_MAX_SERIES: 8;
272
- /** Lines can go to sixteen, the second eight reuse the colours dashed. */
273
- export declare const CHART_MAX_LINE_SERIES: number;
274
- /** Chart chrome, apex needs real colours so these can't be CSS variables. */
275
- export interface ChartInk {
276
- text: string;
277
- muted: string;
278
- grid: string;
279
- surface: string;
280
- context: string;
281
- }
282
- export declare const CHART_INK: ChartInk;
283
- export declare const CHART_INK_DARK: ChartInk;
284
- export declare function chartInk(dark: boolean): ChartInk;
285
- export interface ChartSeriesStyle {
286
- colour: string;
287
- dashed: boolean;
288
- }
289
- /** Past the eighth slot a series goes grey, reusing a colour would make two series look the same. */
290
- export declare function chartColour(index: number, dark?: boolean): string;
291
- /**
292
- * Colour plus line style for a slot. With `dashes` the ninth to sixteenth
293
- * slots reuse the colours as dashed lines, colour and dash together keep
294
- * them apart. Anything past that is grey.
295
- */
296
- export declare function chartSeriesStyle(index: number, dashes: boolean, dark?: boolean): ChartSeriesStyle;
297
- /**
298
- * Blends `colour` towards `towards`, keeping `strength` of the original: 1 leaves
299
- * it as it is, 0 gives `towards`. Apex can't parse color-mix(), so it's done
300
- * here. Both must be six digit hex, anything else gives null.
301
- */
302
- export declare function mixChartColours(colour: string, towards: string, strength: number): string | null;
303
- /**
304
- * Dark or light text, whichever reads better on a mark filled with `background`.
305
- * Judged by APCA, the contrast model drafted for WCAG 3: the WCAG 2 ratio
306
- * puts black text on saturated orange and red, where white reads far better.
307
- */
308
- export declare function chartLabelInk(background: string): string;
309
- /** Inputs every chart with categories along one axis and values up the other shares. */
310
- declare abstract class UiAxisChartBase extends UiChartBase {
311
- readonly series: import("@angular/core").InputSignal<ChartSeries[]>;
312
- readonly categories: import("@angular/core").InputSignal<string[]>;
313
- /**
314
- * Only these series get palette colours, the rest go grey so the few that
315
- * matter stand out. The way to show more series than there are colours.
316
- */
317
- readonly highlight: import("@angular/core").InputSignal<string[] | null>;
318
- readonly highlightKeepsColours: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
319
- /** Charts that draw lines can tell series apart by dashes too, bars can't. */
320
- protected readonly supportsDashes: boolean;
321
- protected readonly isEmpty: import("@angular/core").Signal<boolean>;
322
- protected readonly isMuted: import("@angular/core").Signal<boolean[]>;
323
- private readonly colourOrder;
324
- protected readonly styles: import("@angular/core").Signal<ChartSeriesStyle[]>;
325
- protected readonly colours: import("@angular/core").Signal<string[]>;
326
- protected readonly dashed: import("@angular/core").Signal<boolean[]>;
327
- /** Grey context series stay out of the legend, the note says how many there are. */
328
- readonly legendItems: import("@angular/core").Signal<ChartLegendItem[]>;
329
- readonly legendNote: import("@angular/core").Signal<string>;
330
- static ɵfac: i0.ɵɵFactoryDeclaration<UiAxisChartBase, never>;
331
- static ɵdir: i0.ɵɵDirectiveDeclaration<UiAxisChartBase, never, never, {
332
- "series": {
333
- "alias": "series";
334
- "required": true;
335
- "isSignal": true;
336
- };
337
- "categories": {
338
- "alias": "categories";
339
- "required": true;
340
- "isSignal": true;
341
- };
342
- "highlight": {
343
- "alias": "highlight";
344
- "required": false;
345
- "isSignal": true;
346
- };
347
- "highlightKeepsColours": {
348
- "alias": "highlightKeepsColours";
349
- "required": false;
350
- "isSignal": true;
351
- };
352
- }, {}, never, never, true, never>;
353
- }
354
- /**
355
- * Bars or columns for comparing amounts across categories. Several series
356
- * sit side by side, or on top of each other with `stacked`.
357
- */
358
- export declare class UiBarChartComponent extends UiAxisChartBase {
359
- readonly orientation: import("@angular/core").InputSignal<"vertical" | "horizontal">;
360
- readonly stacked: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
361
- /** Picks out one category, e.g. the month a page is showing, and fades the rest. */
362
- readonly highlightCategory: import("@angular/core").InputSignal<string | null>;
363
- protected readonly chartOptions: import("@angular/core").Signal<ApexCharts.ApexOptions>;
364
- static ɵfac: i0.ɵɵFactoryDeclaration<UiBarChartComponent, never>;
365
- static ɵcmp: i0.ɵɵComponentDeclaration<UiBarChartComponent, "ui-bar-chart", never, {
366
- "orientation": {
367
- "alias": "orientation";
368
- "required": false;
369
- "isSignal": true;
370
- };
371
- "stacked": {
372
- "alias": "stacked";
373
- "required": false;
374
- "isSignal": true;
375
- };
376
- "highlightCategory": {
377
- "alias": "highlightCategory";
378
- "required": false;
379
- "isSignal": true;
380
- };
381
- }, {}, never, never, true, never>;
382
- }
383
- /** vertical draws columns rising from the bottom, horizontal draws bars from the left. */
384
- export declare const BarChartOrientations: readonly ["vertical", "horizontal"];
385
- /** @see {@link BarChartOrientations} */
386
- export type BarChartOrientation = typeof BarChartOrientations[number];
387
- /**
388
- * Draws raw ApexCharts options. The typed charts (bar, line and so on) are
389
- * built on this, reach for it directly only when they can't do what you need.
390
- */
391
- export declare class UiChartComponent {
392
- readonly options: import("@angular/core").InputSignal<ApexCharts$1.ApexOptions>;
393
- /** What the chart shows, e.g. "Spending by month". Screen readers get this instead of the SVG. */
394
- readonly ariaLabel: import("@angular/core").InputSignal<string>;
395
- /** Series names to keep off the plot, e.g. switched off in the legend. */
396
- readonly hiddenSeries: import("@angular/core").InputSignal<string[]>;
397
- /** Fades every other series so this one stands out, e.g. while its legend item is hovered. */
398
- readonly emphasis: import("@angular/core").InputSignal<string | null>;
399
- private readonly canvas;
400
- private readonly chart;
401
- private destroyed;
402
- private drawnNames;
403
- private readonly host;
404
- private resizeObserver;
405
- constructor();
406
- private withOwnParentResizing;
407
- private redrawWhenResized;
408
- private isDrawnAtHostSize;
409
- private applyHidden;
410
- private applyEmphasis;
411
- private seriesNames;
412
- static ɵfac: i0.ɵɵFactoryDeclaration<UiChartComponent, never>;
413
- static ɵcmp: i0.ɵɵComponentDeclaration<UiChartComponent, "ui-chart", never, {
414
- "options": {
415
- "alias": "options";
416
- "required": true;
417
- "isSignal": true;
418
- };
419
- "ariaLabel": {
420
- "alias": "ariaLabel";
421
- "required": true;
422
- "isSignal": true;
423
- };
424
- "hiddenSeries": {
425
- "alias": "hiddenSeries";
426
- "required": false;
427
- "isSignal": true;
428
- };
429
- "emphasis": {
430
- "alias": "emphasis";
431
- "required": false;
432
- "isSignal": true;
433
- };
434
- }, {}, never, never, true, never>;
435
- }
436
- /** The loading, empty and data table states around a chart, shared by every chart type. */
437
- export declare class UiChartFrameComponent {
438
- /** ApexCharts options to draw, or null for a chart that draws itself as projected content. */
439
- readonly options: import("@angular/core").InputSignal<ApexCharts.ApexOptions | null>;
440
- readonly ariaLabel: import("@angular/core").InputSignal<string>;
441
- readonly categories: import("@angular/core").InputSignal<string[]>;
442
- readonly series: import("@angular/core").InputSignal<ChartSeries[]>;
443
- readonly legendItems: import("@angular/core").InputSignal<ChartLegendItem[]>;
444
- readonly legendNote: import("@angular/core").InputSignal<string>;
445
- readonly hiddenSeries: import("@angular/core").ModelSignal<string[]>;
446
- readonly valueFormatter: import("@angular/core").InputSignal<ChartValueFormatter>;
447
- readonly categoryLabel: import("@angular/core").InputSignal<string>;
448
- readonly height: import("@angular/core").InputSignal<ChartHeight>;
449
- readonly emptyText: import("@angular/core").InputSignal<string>;
450
- readonly loading: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
451
- readonly empty: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
452
- readonly showTable: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
453
- readonly masked: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
454
- readonly showLegend: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
455
- /** The series the legend is pointing at, the others fade while it's set. */
456
- readonly emphasis: import("@angular/core").ModelSignal<string | null>;
457
- protected readonly fill: import("@angular/core").Signal<boolean>;
458
- protected readonly fixedHeight: import("@angular/core").Signal<number | null>;
459
- static ɵfac: i0.ɵɵFactoryDeclaration<UiChartFrameComponent, never>;
460
- static ɵcmp: i0.ɵɵComponentDeclaration<UiChartFrameComponent, "ui-chart-frame", never, {
461
- "options": {
462
- "alias": "options";
463
- "required": true;
464
- "isSignal": true;
465
- };
466
- "ariaLabel": {
467
- "alias": "ariaLabel";
468
- "required": true;
469
- "isSignal": true;
470
- };
471
- "categories": {
472
- "alias": "categories";
473
- "required": true;
474
- "isSignal": true;
475
- };
476
- "series": {
477
- "alias": "series";
478
- "required": true;
479
- "isSignal": true;
480
- };
481
- "legendItems": {
482
- "alias": "legendItems";
483
- "required": true;
484
- "isSignal": true;
485
- };
486
- "legendNote": {
487
- "alias": "legendNote";
488
- "required": false;
489
- "isSignal": true;
490
- };
491
- "hiddenSeries": {
492
- "alias": "hiddenSeries";
493
- "required": false;
494
- "isSignal": true;
495
- };
496
- "valueFormatter": {
497
- "alias": "valueFormatter";
498
- "required": true;
499
- "isSignal": true;
500
- };
501
- "categoryLabel": {
502
- "alias": "categoryLabel";
503
- "required": true;
504
- "isSignal": true;
505
- };
506
- "height": {
507
- "alias": "height";
508
- "required": true;
509
- "isSignal": true;
510
- };
511
- "emptyText": {
512
- "alias": "emptyText";
513
- "required": true;
514
- "isSignal": true;
515
- };
516
- "loading": {
517
- "alias": "loading";
518
- "required": false;
519
- "isSignal": true;
520
- };
521
- "empty": {
522
- "alias": "empty";
523
- "required": false;
524
- "isSignal": true;
525
- };
526
- "showTable": {
527
- "alias": "showTable";
528
- "required": false;
529
- "isSignal": true;
530
- };
531
- "masked": {
532
- "alias": "masked";
533
- "required": false;
534
- "isSignal": true;
535
- };
536
- "showLegend": {
537
- "alias": "showLegend";
538
- "required": false;
539
- "isSignal": true;
540
- };
541
- "emphasis": {
542
- "alias": "emphasis";
543
- "required": false;
544
- "isSignal": true;
545
- };
546
- }, {
547
- "hiddenSeries": "hiddenSeriesChange";
548
- "emphasis": "emphasisChange";
549
- }, never, ["*"], true, never>;
550
- }
551
- /**
552
- * The numbers behind a chart as a table. Hidden visually by default so screen
553
- * readers still get the data, `visible` shows it for everyone.
554
- */
555
- export declare class UiChartTableComponent {
556
- readonly caption: import("@angular/core").InputSignal<string>;
557
- readonly categories: import("@angular/core").InputSignal<string[]>;
558
- readonly series: import("@angular/core").InputSignal<ChartSeries[]>;
559
- readonly valueFormatter: import("@angular/core").InputSignal<ChartValueFormatter>;
560
- readonly categoryLabel: import("@angular/core").InputSignal<string>;
561
- readonly visible: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
562
- /** Values are masks, screen readers hear "amount hidden" instead. */
563
- readonly masked: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
564
- protected isValue(value: number | null | undefined): value is number;
565
- protected format(value: number | null | undefined): string;
566
- static ɵfac: i0.ɵɵFactoryDeclaration<UiChartTableComponent, never>;
567
- static ɵcmp: i0.ɵɵComponentDeclaration<UiChartTableComponent, "ui-chart-table", never, {
568
- "caption": {
569
- "alias": "caption";
570
- "required": true;
571
- "isSignal": true;
572
- };
573
- "categories": {
574
- "alias": "categories";
575
- "required": true;
576
- "isSignal": true;
577
- };
578
- "series": {
579
- "alias": "series";
580
- "required": true;
581
- "isSignal": true;
582
- };
583
- "valueFormatter": {
584
- "alias": "valueFormatter";
585
- "required": true;
586
- "isSignal": true;
587
- };
588
- "categoryLabel": {
589
- "alias": "categoryLabel";
590
- "required": false;
591
- "isSignal": true;
592
- };
593
- "visible": {
594
- "alias": "visible";
595
- "required": false;
596
- "isSignal": true;
597
- };
598
- "masked": {
599
- "alias": "masked";
600
- "required": false;
601
- "isSignal": true;
602
- };
603
- }, {}, never, never, true, never>;
604
- }
605
- /**
606
- * A row of colour keys naming what each colour means. Link it to a chart
607
- * with `for`, or pass `items` to use it next to anything coloured by series.
608
- */
609
- export declare class UiChartLegendComponent {
610
- readonly items: import("@angular/core").InputSignal<ChartLegendItem[]>;
611
- /** Small text after the items, e.g. how many series aren't listed. */
612
- readonly note: import("@angular/core").InputSignal<string>;
613
- /** A chart to take items from and hide or fade series on, set its `legend` to `none`. */
614
- readonly for: import("@angular/core").InputSignal<ChartLegendSource | null>;
615
- /** Adjusts the linked chart's items, e.g. to relabel them. Keep each `name`. */
616
- readonly itemsWith: import("@angular/core").InputSignal<((items: ChartLegendItem[]) => ChartLegendItem[]) | null>;
617
- /** Names of items switched off, bound two-way when `toggleable`. */
618
- readonly hidden: import("@angular/core").ModelSignal<string[]>;
619
- /** Lets each item be clicked to hide or show its series. */
620
- readonly toggleable: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
621
- /** The item being hovered or focused, null when it leaves. Charts fade the other series. */
622
- readonly focusChange: import("@angular/core").OutputEmitterRef<string | null>;
623
- private readonly hovered;
624
- private readonly focused;
625
- private readonly pointedAt;
626
- protected readonly shownItems: import("@angular/core").Signal<ChartLegendItem[]>;
627
- protected readonly shownNote: import("@angular/core").Signal<string>;
628
- private readonly hiddenNames;
629
- protected readonly visibleCount: import("@angular/core").Signal<number>;
630
- constructor();
631
- protected hover(name: string | null): void;
632
- protected focus(name: string | null, event?: FocusEvent): void;
633
- protected isHidden(item: ChartLegendItem): boolean;
634
- protected isLocked(item: ChartLegendItem): boolean;
635
- protected toggle(item: ChartLegendItem): void;
636
- static ɵfac: i0.ɵɵFactoryDeclaration<UiChartLegendComponent, never>;
637
- static ɵcmp: i0.ɵɵComponentDeclaration<UiChartLegendComponent, "ui-chart-legend", never, {
638
- "items": {
639
- "alias": "items";
640
- "required": false;
641
- "isSignal": true;
642
- };
643
- "note": {
644
- "alias": "note";
645
- "required": false;
646
- "isSignal": true;
647
- };
648
- "for": {
649
- "alias": "for";
650
- "required": false;
651
- "isSignal": true;
652
- };
653
- "itemsWith": {
654
- "alias": "itemsWith";
655
- "required": false;
656
- "isSignal": true;
657
- };
658
- "hidden": {
659
- "alias": "hidden";
660
- "required": false;
661
- "isSignal": true;
662
- };
663
- "toggleable": {
664
- "alias": "toggleable";
665
- "required": false;
666
- "isSignal": true;
667
- };
668
- }, {
669
- "hidden": "hiddenChange";
670
- "focusChange": "focusChange";
671
- }, never, never, true, never>;
672
- }
673
- /**
674
- * Lines for showing how values change over something ordered, usually time.
675
- * Hovering anywhere shows every series at that point.
676
- */
677
- export declare class UiLineChartComponent extends UiAxisChartBase {
678
- protected readonly supportsDashes = true;
679
- readonly curve: import("@angular/core").InputSignal<"straight" | "smooth" | "stepline">;
680
- /** Draws a dot on every point, not just the hovered one. Handy with few points. */
681
- readonly showPoints: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
682
- /** Shades this category and everything after it as a forecast. */
683
- readonly projectedFrom: import("@angular/core").InputSignal<string | null>;
684
- readonly projectedLabel: import("@angular/core").InputSignal<string>;
685
- private readonly projectedAnnotations;
686
- protected readonly chartOptions: import("@angular/core").Signal<ApexCharts.ApexOptions>;
687
- private tooltipOrder;
688
- static ɵfac: i0.ɵɵFactoryDeclaration<UiLineChartComponent, never>;
689
- static ɵcmp: i0.ɵɵComponentDeclaration<UiLineChartComponent, "ui-line-chart", never, {
690
- "curve": {
691
- "alias": "curve";
692
- "required": false;
693
- "isSignal": true;
694
- };
695
- "showPoints": {
696
- "alias": "showPoints";
697
- "required": false;
698
- "isSignal": true;
699
- };
700
- "projectedFrom": {
701
- "alias": "projectedFrom";
702
- "required": false;
703
- "isSignal": true;
704
- };
705
- "projectedLabel": {
706
- "alias": "projectedLabel";
707
- "required": false;
708
- "isSignal": true;
709
- };
710
- }, {}, never, never, true, never>;
711
- }
712
- /** How points are joined, straight segments, a smooth curve, or steps. */
713
- export declare const LineChartCurves: readonly ["straight", "smooth", "stepline"];
714
- /** @see {@link LineChartCurves} */
715
- export type LineChartCurve = typeof LineChartCurves[number];
716
- /**
717
- * Slices for showing how a whole splits into parts. Each category is a
718
- * slice, only the first series is drawn. Best kept to a handful of slices,
719
- * fold the small ones into "Other".
720
- */
721
- export declare class UiPieChartComponent extends UiAxisChartBase {
722
- readonly variant: import("@angular/core").InputSignal<"pie" | "donut">;
723
- private readonly percentFormatter;
724
- /** Shown above the total in the middle of a donut. */
725
- readonly totalLabel: import("@angular/core").InputSignal<string>;
726
- /**
727
- * A colour per slice, lined up with `categories`, e.g. each category's own
728
- * colour. A slice without one takes its palette slot. Muted slices stay grey.
729
- */
730
- readonly sliceColours: import("@angular/core").InputSignal<(string | null | undefined)[]>;
731
- protected readonly values: import("@angular/core").Signal<(number | null)[]>;
732
- protected readonly isEmpty: import("@angular/core").Signal<boolean>;
733
- protected readonly isMuted: import("@angular/core").Signal<boolean[]>;
734
- protected readonly styles: import("@angular/core").Signal<ChartSeriesStyle[]>;
735
- readonly legendItems: import("@angular/core").Signal<{
736
- colour: string;
737
- dashed: boolean;
738
- name: string;
739
- }[]>;
740
- private readonly slices;
741
- protected readonly chartOptions: import("@angular/core").Signal<ApexCharts.ApexOptions>;
742
- static ɵfac: i0.ɵɵFactoryDeclaration<UiPieChartComponent, never>;
743
- static ɵcmp: i0.ɵɵComponentDeclaration<UiPieChartComponent, "ui-pie-chart", never, {
744
- "variant": {
745
- "alias": "variant";
746
- "required": false;
747
- "isSignal": true;
748
- };
749
- "totalLabel": {
750
- "alias": "totalLabel";
751
- "required": false;
752
- "isSignal": true;
753
- };
754
- "sliceColours": {
755
- "alias": "sliceColours";
756
- "required": false;
757
- "isSignal": true;
758
- };
759
- }, {}, never, never, true, never>;
760
- }
761
- /** pie fills the whole circle, donut leaves a hole with the total in it. */
762
- export declare const PieChartVariants: readonly ["pie", "donut"];
763
- /** @see {@link PieChartVariants} */
764
- export type PieChartVariant = typeof PieChartVariants[number];
765
- /** One block inside a group, sized by its value. */
766
- export interface TreemapItem {
767
- name: string;
768
- value: number;
769
- }
770
- /** A set of items drawn together in one colour, e.g. a category and who it went to. */
771
- export interface TreemapGroup {
772
- name: string;
773
- items: TreemapItem[];
774
- /** Overrides the palette slot, keep it for when a group must match something else. */
775
- colour?: string;
776
- }
777
- /** What `itemSelect` emits when a block is clicked. */
778
- export interface TreemapSelection {
779
- group: string;
780
- item: string;
781
- }
782
- declare const TREEMAP_GROUP_GAP = 8;
783
- declare const TREEMAP_BLOCK_GAP = 3;
784
- declare const TREEMAP_HEADER_HEIGHT = 24;
785
- interface TreemapRect {
786
- x: number;
787
- y: number;
788
- width: number;
789
- height: number;
790
- }
791
- /** One block as it's drawn, with the colours worked out. */
792
- interface TreemapBlock {
793
- group: string;
794
- item: string;
795
- value: number;
796
- fill: string;
797
- labelInk: string;
798
- }
799
- /** A group as it's drawn: only its items with something to show. */
800
- interface DrawnTreemapGroup {
801
- name: string;
802
- colour: string;
803
- total: number;
804
- blocks: TreemapBlock[];
805
- }
806
- /** How much of its label a block has room for. */
807
- type TreemapLabel = 'none' | 'name' | 'full';
808
- interface PlacedTreemapBlock extends TreemapBlock {
809
- rect: TreemapRect;
810
- label: TreemapLabel;
811
- }
812
- interface PlacedTreemapGroup extends DrawnTreemapGroup {
813
- rect: TreemapRect;
814
- hasHeader: boolean;
815
- placedBlocks: PlacedTreemapBlock[];
816
- }
817
- /** A group's own colour, or its palette slot, then grey once the palette runs out. */
818
- declare function treemapGroupColours(groups: TreemapGroup[], dark: boolean): string[];
819
- /**
820
- * The groups worth drawing: hidden ones and items of zero or less are left out,
821
- * then any group left with nothing.
822
- */
823
- declare function drawnTreemapGroups(groups: TreemapGroup[], colours: string[], hidden: string[], shades: boolean, ink: ChartInk): DrawnTreemapGroup[];
824
- /** Every block as one row of the data table, named "<group> – <item>". */
825
- declare function treemapTableRows(groups: TreemapGroup[]): {
826
- categories: string[];
827
- values: number[];
828
- };
829
- /**
830
- * Places each group in `bounds`, a header strip along its top when there's
831
- * room, and its blocks under that. Positions are relative to `bounds`, and
832
- * each block's are relative to its group.
833
- */
834
- declare function placeTreemapGroups(groups: DrawnTreemapGroup[], bounds: TreemapRect): PlacedTreemapGroup[];
835
- /**
836
- * Splits `bounds` into one rectangle per value, each sized by its share and
837
- * kept as close to square as the others allow (the squarified treemap of
838
- * Bruls, Huizing and van Wijk). Rectangles come back in the order of
839
- * `values`, with `gap` between neighbours but none at the edges.
840
- */
841
- declare function squarify(values: number[], bounds: TreemapRect, gap?: number): TreemapRect[];
842
- interface PointedBlock {
843
- group: PlacedTreemapGroup;
844
- block: PlacedTreemapBlock;
845
- x: number;
846
- y: number;
847
- }
848
- /**
849
- * Nested blocks sized by value, for showing how a whole splits into groups
850
- * and each group into items, e.g. spending by category and who it went to.
851
- * Past eight groups the palette runs out and the rest go grey, so give each
852
- * group a `colour` when there can be more.
853
- */
854
- export declare class UiTreemapChartComponent extends UiChartBase {
855
- readonly groups: import("@angular/core").InputSignal<TreemapGroup[]>;
856
- readonly height: import("@angular/core").InputSignal<ChartHeight>;
857
- /** Shades each group's items from its colour, biggest strongest, so they stay told apart. */
858
- readonly shades: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
859
- /** Makes each block a button that emits `itemSelect`. */
860
- readonly selectable: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
861
- /** Heading for the value column in the data table. */
862
- readonly valueLabel: import("@angular/core").InputSignal<string>;
863
- readonly itemSelect: import("@angular/core").OutputEmitterRef<TreemapSelection>;
864
- private readonly canvas;
865
- private readonly size;
866
- protected readonly pointed: import("@angular/core").WritableSignal<PointedBlock | null>;
867
- /** Set once the first layout is drawn, so blocks glide to new places after that but don't grow in from nothing. */
868
- protected readonly settled: import("@angular/core").WritableSignal<boolean>;
869
- private readonly percentFormatter;
870
- protected readonly fill: import("@angular/core").Signal<boolean>;
871
- protected readonly fixedHeight: import("@angular/core").Signal<number | null>;
872
- private readonly colours;
873
- private readonly drawnGroups;
874
- protected readonly placedGroups: import("@angular/core").Signal<PlacedTreemapGroup[]>;
875
- private readonly total;
876
- private readonly tableRows;
877
- protected readonly categories: import("@angular/core").Signal<string[]>;
878
- protected readonly series: import("@angular/core").Signal<ChartSeries[]>;
879
- protected readonly isEmpty: import("@angular/core").Signal<boolean>;
880
- readonly legendItems: import("@angular/core").Signal<ChartLegendItem[]>;
881
- readonly legendNote: import("@angular/core").Signal<string>;
882
- private readonly emphasised;
883
- protected readonly tooltipFooter: import("@angular/core").Signal<string>;
884
- protected readonly tooltipPosition: import("@angular/core").Signal<{
885
- left: number | null;
886
- right: number | null;
887
- top: number;
888
- } | null>;
889
- constructor();
890
- protected isFaded(group: PlacedTreemapGroup): boolean;
891
- protected point(event: PointerEvent, group: PlacedTreemapGroup, block: PlacedTreemapBlock): void;
892
- protected focus(group: PlacedTreemapGroup, block: PlacedTreemapBlock): void;
893
- protected select(block: PlacedTreemapBlock): void;
894
- protected accessibleName(block: PlacedTreemapBlock): string;
895
- private percent;
896
- static ɵfac: i0.ɵɵFactoryDeclaration<UiTreemapChartComponent, never>;
897
- static ɵcmp: i0.ɵɵComponentDeclaration<UiTreemapChartComponent, "ui-treemap-chart", never, {
898
- "groups": {
899
- "alias": "groups";
900
- "required": true;
901
- "isSignal": true;
902
- };
903
- "height": {
904
- "alias": "height";
905
- "required": false;
906
- "isSignal": true;
907
- };
908
- "shades": {
909
- "alias": "shades";
910
- "required": false;
911
- "isSignal": true;
912
- };
913
- "selectable": {
914
- "alias": "selectable";
915
- "required": false;
916
- "isSignal": true;
917
- };
918
- "valueLabel": {
919
- "alias": "valueLabel";
920
- "required": false;
921
- "isSignal": true;
922
- };
923
- }, {
924
- "itemSelect": "itemSelect";
925
- }, never, never, true, never>;
926
- }
927
- export interface UiFormat {
928
- /** ISO 4217 code, e.g. "GBP". */
929
- currency: string;
930
- /** BCP 47 tag, e.g. "en-GB". */
931
- locale: string;
932
- }
933
- export declare const UI_FORMAT_DEFAULTS: UiFormat;
934
- export declare const UI_FORMAT: InjectionToken<UiFormat>;
935
- export declare function provideUiFormat(format: Partial<UiFormat>): Provider;
936
- export interface MoneyFormatterParts {
937
- format: (value: number) => string;
938
- mask: string;
939
- }
940
- /** The unmasked formatter and mask behind a formatter from `injectMoneyFormatter`, null for any other function. */
941
- export declare function moneyFormatterParts(formatter: (value: number) => string): MoneyFormatterParts | null;
942
- /** Needs an injection context. Reads `UI_PRIVACY` on every call, so a template or computed calling it follows the mode. */
943
- export declare function injectMoneyFormatter(options?: Intl.NumberFormatOptions): (value: number) => string;
944
- export declare const UiPrivacies: readonly ["visible", "discreet", "hidden"];
945
- /** Discreet hides amounts but keeps their shape, hidden hides everything about them. */
946
- export type UiPrivacy = typeof UiPrivacies[number];
947
- export declare const UI_PRIVACY: InjectionToken<Signal<"visible" | "discreet" | "hidden">>;
948
- /** The factory runs in an injection context, so it can return a signal from an app service. */
949
- export declare function provideUiPrivacy(privacy: () => Signal<UiPrivacy>): Provider;
950
- /** The fixed mask for private text, e.g. a transaction's description. */
951
- export declare const PRIVATE_TEXT_MASK = "- - -";
952
- /** What screen readers hear in place of private text. */
953
- export declare const PRIVATE_TEXT_LABEL = "text hidden";
954
- export declare function maskMoney(currency: string, locale: string): string;
955
- export interface PrivateTextFormatter {
956
- /** The text, or `PRIVATE_TEXT_MASK`. For visible attributes like `title`. */
957
- (text: string | null | undefined): string;
958
- /** The text, or `PRIVATE_TEXT_LABEL`. For `aria-*`, so screen readers don't read out dashes. */
959
- label: (text: string | null | undefined) => string;
960
- }
961
- /** Needs an injection context. Reads `UI_PRIVACY` on every call, so a template or computed calling it follows the mode. */
962
- export declare function injectPrivateText(): PrivateTextFormatter;
963
- /** Native type values ui-input supports. File/checkbox/radio/range need their own components. */
964
- export declare const InputTypes: readonly ["text", "email", "tel", "url", "search", "password", "number", "date", "time", "datetime-local", "month", "week", "color"];
965
- /** @see {@link InputTypes} */
966
- export type InputType = typeof InputTypes[number];
967
- /** Native inputmode values, hinting at the virtual keyboard to show. */
968
- export declare const InputModes: readonly ["none", "text", "decimal", "numeric", "tel", "search", "email", "url"];
969
- /** @see {@link InputModes} */
970
- export type InputMode = typeof InputModes[number];
971
- /** true is valid, false is invalid, null is not yet validated. */
972
- export type InputValidation = boolean | null;
973
- /** Native aria-autocomplete values, for inputs that suggest as you type. */
974
- export declare const InputAriaAutocompletes: readonly ["none", "inline", "list", "both"];
975
- /** @see {@link InputAriaAutocompletes} */
976
- export type InputAriaAutocomplete = typeof InputAriaAutocompletes[number];
977
- /** Native aria-haspopup values, for inputs that open something. */
978
- export declare const InputAriaHasPopups: readonly ["listbox", "dialog", "grid", "menu", "tree"];
979
- /** @see {@link InputAriaHasPopups} */
980
- export type InputAriaHasPopup = typeof InputAriaHasPopups[number];
981
- export declare class UiCheckboxComponent {
982
- readonly value: import("@angular/core").ModelSignal<boolean>;
983
- readonly id: import("@angular/core").InputSignal<string>;
984
- readonly name: import("@angular/core").InputSignal<string>;
985
- readonly required: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
986
- readonly disabled: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
987
- readonly indeterminate: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
988
- /** true/false shows valid/invalid styling. null means not validated yet. */
989
- readonly validationState: import("@angular/core").ModelSignal<InputValidation>;
990
- readonly classes: import("@angular/core").InputSignal<string>;
991
- readonly generatedClasses: import("@angular/core").Signal<string>;
992
- toggle(): void;
993
- static ɵfac: i0.ɵɵFactoryDeclaration<UiCheckboxComponent, never>;
994
- static ɵcmp: i0.ɵɵComponentDeclaration<UiCheckboxComponent, "ui-checkbox", never, {
995
- "value": {
996
- "alias": "value";
997
- "required": true;
998
- "isSignal": true;
999
- };
1000
- "id": {
1001
- "alias": "id";
1002
- "required": false;
1003
- "isSignal": true;
1004
- };
1005
- "name": {
1006
- "alias": "name";
1007
- "required": false;
1008
- "isSignal": true;
1009
- };
1010
- "required": {
1011
- "alias": "required";
1012
- "required": false;
1013
- "isSignal": true;
1014
- };
1015
- "disabled": {
1016
- "alias": "disabled";
1017
- "required": false;
1018
- "isSignal": true;
1019
- };
1020
- "indeterminate": {
1021
- "alias": "indeterminate";
1022
- "required": false;
1023
- "isSignal": true;
1024
- };
1025
- "validationState": {
1026
- "alias": "validationState";
1027
- "required": false;
1028
- "isSignal": true;
1029
- };
1030
- "classes": {
1031
- "alias": "classes";
1032
- "required": false;
1033
- "isSignal": true;
1034
- };
1035
- }, {
1036
- "value": "valueChange";
1037
- "validationState": "validationStateChange";
1038
- }, never, never, true, never>;
1039
- }
1040
- /** Why a file was turned away by a file picker. */
1041
- export declare const FileRejectionReasons: readonly ["type", "size"];
1042
- /** @see {@link FileRejectionReasons} */
1043
- export type FileRejectionReason = typeof FileRejectionReasons[number];
1044
- export interface FileRejection {
1045
- file: File;
1046
- reason: FileRejectionReason;
1047
- }
1048
- export interface FileSelection {
1049
- accepted: File[];
1050
- rejected: FileRejection[];
1051
- }
1052
- export declare class UiDropzoneComponent {
1053
- readonly value: import("@angular/core").ModelSignal<File[]>;
1054
- readonly id: import("@angular/core").InputSignal<string>;
1055
- readonly accept: import("@angular/core").InputSignal<string>;
1056
- readonly multiple: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
1057
- readonly disabled: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
1058
- readonly ariaLabel: import("@angular/core").InputSignal<string>;
1059
- readonly describedBy: import("@angular/core").InputSignal<string>;
1060
- /** Max size per file in bytes. */
1061
- readonly maxSize: import("@angular/core").InputSignal<number | null>;
1062
- readonly title: import("@angular/core").InputSignal<string>;
1063
- readonly hint: import("@angular/core").InputSignal<string>;
1064
- readonly icon: import("@angular/core").InputSignal<keyof import("@ng-icons/core").NgIconNameMap>;
1065
- readonly rejected: import("@angular/core").OutputEmitterRef<FileRejection[]>;
1066
- private readonly picker;
1067
- private dragDepth;
1068
- protected readonly isDragging: import("@angular/core").WritableSignal<boolean>;
1069
- protected readonly hasRejection: import("@angular/core").WritableSignal<boolean>;
1070
- protected readonly displayTitle: import("@angular/core").Signal<string>;
1071
- protected readonly files: import("@angular/core").Signal<{
1072
- name: string;
1073
- size: string;
1074
- }[]>;
1075
- protected openPicker(): void;
1076
- protected handleKeydown(event: KeyboardEvent): void;
1077
- protected handlePick(event: Event): void;
1078
- protected handleDragEnter(event: DragEvent): void;
1079
- protected handleDragOver(event: DragEvent): void;
1080
- protected handleDragLeave(): void;
1081
- protected handleDrop(event: DragEvent): void;
1082
- protected clear(): void;
1083
- private addFiles;
1084
- static ɵfac: i0.ɵɵFactoryDeclaration<UiDropzoneComponent, never>;
1085
- static ɵcmp: i0.ɵɵComponentDeclaration<UiDropzoneComponent, "ui-dropzone", never, {
1086
- "value": {
1087
- "alias": "value";
1088
- "required": false;
1089
- "isSignal": true;
1090
- };
1091
- "id": {
1092
- "alias": "id";
1093
- "required": false;
1094
- "isSignal": true;
1095
- };
1096
- "accept": {
1097
- "alias": "accept";
1098
- "required": false;
1099
- "isSignal": true;
1100
- };
1101
- "multiple": {
1102
- "alias": "multiple";
1103
- "required": false;
1104
- "isSignal": true;
1105
- };
1106
- "disabled": {
1107
- "alias": "disabled";
1108
- "required": false;
1109
- "isSignal": true;
1110
- };
1111
- "ariaLabel": {
1112
- "alias": "ariaLabel";
1113
- "required": false;
1114
- "isSignal": true;
1115
- };
1116
- "describedBy": {
1117
- "alias": "describedBy";
1118
- "required": false;
1119
- "isSignal": true;
1120
- };
1121
- "maxSize": {
1122
- "alias": "maxSize";
1123
- "required": false;
1124
- "isSignal": true;
1125
- };
1126
- "title": {
1127
- "alias": "title";
1128
- "required": false;
1129
- "isSignal": true;
1130
- };
1131
- "hint": {
1132
- "alias": "hint";
1133
- "required": false;
1134
- "isSignal": true;
1135
- };
1136
- "icon": {
1137
- "alias": "icon";
1138
- "required": false;
1139
- "isSignal": true;
1140
- };
1141
- }, {
1142
- "value": "valueChange";
1143
- "rejected": "rejected";
1144
- }, never, never, true, never>;
1145
- }
1146
- export declare class UiFieldComponent {
1147
- readonly label: import("@angular/core").InputSignal<string>;
1148
- readonly hint: import("@angular/core").InputSignal<string>;
1149
- /**
1150
- * Shows a "*" marker next to the label.
1151
- */
1152
- readonly required: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
1153
- /**
1154
- * An error message, shown instead of `hint` when present.
1155
- */
1156
- readonly error: import("@angular/core").InputSignal<string>;
1157
- readonly for: import("@angular/core").InputSignal<string>;
1158
- readonly hintId: import("@angular/core").InputSignal<string>;
1159
- readonly errorId: import("@angular/core").InputSignal<string>;
1160
- /**
1161
- * The label's id, `${for}-label`. Controls that a `<label for>` can't
1162
- * reach (e.g. `ui-rich-text-editor`) point `aria-labelledby` at it.
1163
- */
1164
- readonly labelId: import("@angular/core").Signal<string>;
1165
- private readonly document;
1166
- protected get forAttr(): string | null;
1167
- protected get labelIdAttr(): string | null;
1168
- /**
1169
- * A label click is passed on to its control as a click, which opens a
1170
- * `ui-select` or `ui-datepicker` rather than just focusing it, and does
1171
- * nothing at all for controls a label can't target (a contenteditable,
1172
- * a `role="button"` div). So apart from checkboxes and radios, where the
1173
- * click is the point, the label just focuses its control.
1174
- */
1175
- protected onClick(event: MouseEvent): void;
1176
- protected get hintAttr(): string | null;
1177
- protected get errorAttr(): string | null;
1178
- static ɵfac: i0.ɵɵFactoryDeclaration<UiFieldComponent, never>;
1179
- static ɵcmp: i0.ɵɵComponentDeclaration<UiFieldComponent, "ui-field", never, {
1180
- "label": {
1181
- "alias": "label";
1182
- "required": false;
1183
- "isSignal": true;
1184
- };
1185
- "hint": {
1186
- "alias": "hint";
1187
- "required": false;
1188
- "isSignal": true;
1189
- };
1190
- "required": {
1191
- "alias": "required";
1192
- "required": false;
1193
- "isSignal": true;
1194
- };
1195
- "error": {
1196
- "alias": "error";
1197
- "required": false;
1198
- "isSignal": true;
1199
- };
1200
- "for": {
1201
- "alias": "for";
1202
- "required": false;
1203
- "isSignal": true;
1204
- };
1205
- "hintId": {
1206
- "alias": "hintId";
1207
- "required": false;
1208
- "isSignal": true;
1209
- };
1210
- "errorId": {
1211
- "alias": "errorId";
1212
- "required": false;
1213
- "isSignal": true;
1214
- };
1215
- }, {}, never, ["*"], true, never>;
1216
- }
1217
- export declare class UiInputComponent<ValueType = string> {
1218
- readonly value: import("@angular/core").ModelSignal<ValueType>;
1219
- readonly classes: import("@angular/core").InputSignal<string>;
1220
- readonly type: import("@angular/core").InputSignal<"number" | "search" | "time" | "color" | "text" | "email" | "tel" | "url" | "password" | "date" | "datetime-local" | "month" | "week">;
1221
- readonly id: import("@angular/core").InputSignal<string>;
1222
- readonly name: import("@angular/core").InputSignal<string>;
1223
- readonly placeholder: import("@angular/core").InputSignal<string>;
1224
- readonly autocomplete: import("@angular/core").InputSignal<string>;
1225
- readonly inputmode: import("@angular/core").InputSignal<"" | "none" | "decimal" | "search" | "text" | "numeric" | "email" | "tel" | "url">;
1226
- readonly required: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
1227
- readonly disabled: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
1228
- readonly readonly: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
1229
- /** true/false shows valid/invalid styling. null means not validated yet. */
1230
- readonly validationState: import("@angular/core").ModelSignal<InputValidation>;
1231
- readonly min: import("@angular/core").InputSignal<string | number>;
1232
- readonly max: import("@angular/core").InputSignal<string | number>;
1233
- readonly step: import("@angular/core").InputSignal<string | number>;
1234
- readonly pattern: import("@angular/core").InputSignal<string>;
1235
- readonly minlength: import("@angular/core").InputSignal<number | null>;
1236
- readonly maxlength: import("@angular/core").InputSignal<number | null>;
1237
- readonly autofocus: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
1238
- readonly spellcheck: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
1239
- /** With `type="password"`, adds a button to show and hide what's been typed. */
1240
- readonly revealable: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
1241
- readonly list: import("@angular/core").InputSignal<string>;
1242
- readonly ariaLabel: import("@angular/core").InputSignal<string>;
1243
- readonly describedBy: import("@angular/core").InputSignal<string>;
1244
- readonly inputRole: import("@angular/core").InputSignal<string>;
1245
- readonly ariaExpanded: import("@angular/core").InputSignal<boolean | null>;
1246
- readonly ariaControls: import("@angular/core").InputSignal<string>;
1247
- readonly ariaActiveDescendant: import("@angular/core").InputSignal<string | null>;
1248
- readonly ariaAutocomplete: import("@angular/core").InputSignal<"" | "none" | "inline" | "list" | "both">;
1249
- readonly ariaHasPopup: import("@angular/core").InputSignal<"" | "dialog" | "menu" | "listbox" | "grid" | "tree">;
1250
- readonly focused: import("@angular/core").OutputEmitterRef<FocusEvent>;
1251
- readonly blurred: import("@angular/core").OutputEmitterRef<FocusEvent>;
1252
- readonly leadingElement: import("@angular/core").Signal<TemplateRef<unknown> | undefined>;
1253
- readonly trailingElement: import("@angular/core").Signal<TemplateRef<unknown> | undefined>;
1254
- protected readonly revealed: import("@angular/core").WritableSignal<boolean>;
1255
- protected readonly canReveal: import("@angular/core").Signal<boolean>;
1256
- protected readonly shownType: import("@angular/core").Signal<"number" | "search" | "time" | "color" | "text" | "email" | "tel" | "url" | "password" | "date" | "datetime-local" | "month" | "week">;
1257
- readonly generatedClasses: import("@angular/core").Signal<string>;
1258
- protected handleInput(event: Event): void;
1259
- protected handleFocus(event: FocusEvent): void;
1260
- protected handleBlur(event: FocusEvent): void;
1261
- private parseValue;
1262
- static ɵfac: i0.ɵɵFactoryDeclaration<UiInputComponent<any>, never>;
1263
- static ɵcmp: i0.ɵɵComponentDeclaration<UiInputComponent<any>, "ui-input", never, {
1264
- "value": {
1265
- "alias": "value";
1266
- "required": true;
1267
- "isSignal": true;
1268
- };
1269
- "classes": {
1270
- "alias": "classes";
1271
- "required": false;
1272
- "isSignal": true;
1273
- };
1274
- "type": {
1275
- "alias": "type";
1276
- "required": false;
1277
- "isSignal": true;
1278
- };
1279
- "id": {
1280
- "alias": "id";
1281
- "required": false;
1282
- "isSignal": true;
1283
- };
1284
- "name": {
1285
- "alias": "name";
1286
- "required": false;
1287
- "isSignal": true;
1288
- };
1289
- "placeholder": {
1290
- "alias": "placeholder";
1291
- "required": false;
1292
- "isSignal": true;
1293
- };
1294
- "autocomplete": {
1295
- "alias": "autocomplete";
1296
- "required": false;
1297
- "isSignal": true;
1298
- };
1299
- "inputmode": {
1300
- "alias": "inputmode";
1301
- "required": false;
1302
- "isSignal": true;
1303
- };
1304
- "required": {
1305
- "alias": "required";
1306
- "required": false;
1307
- "isSignal": true;
1308
- };
1309
- "disabled": {
1310
- "alias": "disabled";
1311
- "required": false;
1312
- "isSignal": true;
1313
- };
1314
- "readonly": {
1315
- "alias": "readonly";
1316
- "required": false;
1317
- "isSignal": true;
1318
- };
1319
- "validationState": {
1320
- "alias": "validationState";
1321
- "required": false;
1322
- "isSignal": true;
1323
- };
1324
- "min": {
1325
- "alias": "min";
1326
- "required": false;
1327
- "isSignal": true;
1328
- };
1329
- "max": {
1330
- "alias": "max";
1331
- "required": false;
1332
- "isSignal": true;
1333
- };
1334
- "step": {
1335
- "alias": "step";
1336
- "required": false;
1337
- "isSignal": true;
1338
- };
1339
- "pattern": {
1340
- "alias": "pattern";
1341
- "required": false;
1342
- "isSignal": true;
1343
- };
1344
- "minlength": {
1345
- "alias": "minlength";
1346
- "required": false;
1347
- "isSignal": true;
1348
- };
1349
- "maxlength": {
1350
- "alias": "maxlength";
1351
- "required": false;
1352
- "isSignal": true;
1353
- };
1354
- "autofocus": {
1355
- "alias": "autofocus";
1356
- "required": false;
1357
- "isSignal": true;
1358
- };
1359
- "spellcheck": {
1360
- "alias": "spellcheck";
1361
- "required": false;
1362
- "isSignal": true;
1363
- };
1364
- "revealable": {
1365
- "alias": "revealable";
1366
- "required": false;
1367
- "isSignal": true;
1368
- };
1369
- "list": {
1370
- "alias": "list";
1371
- "required": false;
1372
- "isSignal": true;
1373
- };
1374
- "ariaLabel": {
1375
- "alias": "ariaLabel";
1376
- "required": false;
1377
- "isSignal": true;
1378
- };
1379
- "describedBy": {
1380
- "alias": "describedBy";
1381
- "required": false;
1382
- "isSignal": true;
1383
- };
1384
- "inputRole": {
1385
- "alias": "inputRole";
1386
- "required": false;
1387
- "isSignal": true;
1388
- };
1389
- "ariaExpanded": {
1390
- "alias": "ariaExpanded";
1391
- "required": false;
1392
- "isSignal": true;
1393
- };
1394
- "ariaControls": {
1395
- "alias": "ariaControls";
1396
- "required": false;
1397
- "isSignal": true;
1398
- };
1399
- "ariaActiveDescendant": {
1400
- "alias": "ariaActiveDescendant";
1401
- "required": false;
1402
- "isSignal": true;
1403
- };
1404
- "ariaAutocomplete": {
1405
- "alias": "ariaAutocomplete";
1406
- "required": false;
1407
- "isSignal": true;
1408
- };
1409
- "ariaHasPopup": {
1410
- "alias": "ariaHasPopup";
1411
- "required": false;
1412
- "isSignal": true;
1413
- };
1414
- }, {
1415
- "value": "valueChange";
1416
- "validationState": "validationStateChange";
1417
- "focused": "focused";
1418
- "blurred": "blurred";
1419
- }, ["leadingElement", "trailingElement"], never, true, never>;
1420
- }
1421
- /**
1422
- * A static and non-interactable text or symbol that can be combined with
1423
- * a `ui-input` inside of a `ui-input-group`. Example: this could represent
1424
- * a currency symbol or unit of measurement.
1425
- */
1426
- export declare class UiInputAddonComponent {
1427
- static ɵfac: i0.ɵɵFactoryDeclaration<UiInputAddonComponent, never>;
1428
- static ɵcmp: i0.ɵɵComponentDeclaration<UiInputAddonComponent, "ui-input-addon", never, {}, {}, never, ["*"], true, never>;
1429
- }
1430
- export declare class UiInputGroupComponent {
1431
- readonly inputs: import("@angular/core").Signal<readonly UiInputComponent<any>[]>;
1432
- /** true/false shows valid/invalid styling. null means not validated yet. */
1433
- readonly validationState: import("@angular/core").ModelSignal<InputValidation>;
1434
- constructor();
1435
- static ɵfac: i0.ɵɵFactoryDeclaration<UiInputGroupComponent, never>;
1436
- static ɵcmp: i0.ɵɵComponentDeclaration<UiInputGroupComponent, "ui-input-group", never, {
1437
- "validationState": {
1438
- "alias": "validationState";
1439
- "required": false;
1440
- "isSignal": true;
1441
- };
1442
- }, {
1443
- "validationState": "validationStateChange";
1444
- }, ["inputs"], ["*"], true, never>;
1445
- }
1446
- export declare class UiRadioComponent<ValueType = unknown> {
1447
- readonly value: import("@angular/core").ModelSignal<ValueType>;
1448
- readonly option: import("@angular/core").InputSignal<ValueType>;
1449
- readonly id: import("@angular/core").InputSignal<string>;
1450
- readonly name: import("@angular/core").InputSignal<string>;
1451
- readonly required: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
1452
- readonly disabled: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
1453
- /** true/false shows valid/invalid styling. null means not validated yet. */
1454
- readonly validationState: import("@angular/core").ModelSignal<InputValidation>;
1455
- readonly compareWith: import("@angular/core").InputSignal<(a: ValueType, b: ValueType) => boolean>;
1456
- readonly checked: import("@angular/core").Signal<boolean>;
1457
- select(): void;
1458
- static ɵfac: i0.ɵɵFactoryDeclaration<UiRadioComponent<any>, never>;
1459
- static ɵcmp: i0.ɵɵComponentDeclaration<UiRadioComponent<any>, "ui-radio", never, {
1460
- "value": {
1461
- "alias": "value";
1462
- "required": true;
1463
- "isSignal": true;
1464
- };
1465
- "option": {
1466
- "alias": "option";
1467
- "required": true;
1468
- "isSignal": true;
1469
- };
1470
- "id": {
1471
- "alias": "id";
1472
- "required": false;
1473
- "isSignal": true;
1474
- };
1475
- "name": {
1476
- "alias": "name";
1477
- "required": false;
1478
- "isSignal": true;
1479
- };
1480
- "required": {
1481
- "alias": "required";
1482
- "required": false;
1483
- "isSignal": true;
1484
- };
1485
- "disabled": {
1486
- "alias": "disabled";
1487
- "required": false;
1488
- "isSignal": true;
1489
- };
1490
- "validationState": {
1491
- "alias": "validationState";
1492
- "required": false;
1493
- "isSignal": true;
1494
- };
1495
- "compareWith": {
1496
- "alias": "compareWith";
1497
- "required": false;
1498
- "isSignal": true;
1499
- };
1500
- }, {
1501
- "value": "valueChange";
1502
- "validationState": "validationStateChange";
1503
- }, never, never, true, never>;
1504
- }
1505
- /**
1506
- * Every tool the editor's toolbar can show. Leaving a formatting tool out of
1507
- * `tools` also turns that formatting off - its shortcut stops working and
1508
- * pasted content loses it - so the value only ever holds what the toolbar offers.
1509
- * `undo` and `redo` only control the buttons; history and its shortcuts are always on.
1510
- */
1511
- export declare const RichTextTools: readonly ["bold", "italic", "underline", "strike", "code", "heading1", "heading2", "heading3", "bulletList", "orderedList", "blockquote", "codeBlock", "horizontalRule", "link", "undo", "redo"];
1512
- /** @see {@link RichTextTools} */
1513
- export type RichTextTool = typeof RichTextTools[number];
1514
- /** The toolbar's groups, in order, with a divider drawn between each. */
1515
- export declare const RichTextToolGroups: readonly (readonly RichTextTool[])[];
1516
- /** true is valid, false is invalid, null is not yet validated. */
1517
- export type RichTextEditorValidation = boolean | null;
1518
- interface ToolDefinition {
1519
- label: string;
1520
- icon: string;
1521
- /** Whether the tool is "on" at the cursor. Tools without it aren't toggles. */
1522
- active?: (editor: Editor) => boolean;
1523
- run: (chain: ChainedCommands) => ChainedCommands;
1524
- }
1525
- /**
1526
- * A WYSIWYG editor whose value is an HTML string, with a toolbar of formatting tools.
1527
- */
1528
- export declare class UiRichTextEditorComponent {
1529
- /** The content as HTML. An empty editor is `''`. */
1530
- readonly value: import("@angular/core").ModelSignal<string>;
1531
- readonly classes: import("@angular/core").InputSignal<string>;
1532
- /** Which toolbar tools to show, and so which formatting is allowed. @see {@link RichTextTools} */
1533
- readonly tools: import("@angular/core").InputSignal<readonly ("blockquote" | "code" | "link" | "strike" | "bold" | "italic" | "underline" | "heading1" | "heading2" | "heading3" | "bulletList" | "orderedList" | "codeBlock" | "horizontalRule" | "undo" | "redo")[]>;
1534
- readonly id: import("@angular/core").InputSignal<string>;
1535
- readonly placeholder: import("@angular/core").InputSignal<string>;
1536
- readonly required: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
1537
- readonly disabled: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
1538
- readonly readonly: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
1539
- /** true/false shows valid/invalid styling. null means not validated yet. */
1540
- readonly validationState: import("@angular/core").ModelSignal<RichTextEditorValidation>;
1541
- readonly spellcheck: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
1542
- readonly ariaLabel: import("@angular/core").InputSignal<string>;
1543
- readonly describedBy: import("@angular/core").InputSignal<string>;
1544
- /**
1545
- * Ids of the elements that name the editor. Defaults to the label of the
1546
- * `ui-field` it sits in, when that field's `for` is this editor's `id` -
1547
- * a `<label for>` can't name a contenteditable on its own.
1548
- */
1549
- readonly labelledBy: import("@angular/core").InputSignal<string>;
1550
- readonly focused: import("@angular/core").OutputEmitterRef<FocusEvent>;
1551
- readonly blurred: import("@angular/core").OutputEmitterRef<FocusEvent>;
1552
- private readonly injector;
1553
- private readonly field;
1554
- private readonly host;
1555
- private readonly content;
1556
- private readonly editor;
1557
- /** Bumped on every editor transaction, so toolbar state re-reads the editor. */
1558
- private readonly revision;
1559
- /** The HTML the editor last held, to tell our own updates from outside ones. */
1560
- private lastHtml;
1561
- protected readonly contentId: string;
1562
- protected readonly linkInputId: string;
1563
- protected readonly linkOpen: import("@angular/core").WritableSignal<boolean>;
1564
- protected readonly linkHref: import("@angular/core").WritableSignal<string>;
1565
- /** Index of the toolbar button that takes the toolbar's single tab stop. */
1566
- protected readonly focusIndex: import("@angular/core").WritableSignal<number>;
1567
- private readonly resolvedLabelledBy;
1568
- protected readonly editable: import("@angular/core").Signal<boolean>;
1569
- protected readonly toolGroups: import("@angular/core").Signal<("blockquote" | "code" | "link" | "strike" | "bold" | "italic" | "underline" | "heading1" | "heading2" | "heading3" | "bulletList" | "orderedList" | "codeBlock" | "horizontalRule" | "undo" | "redo")[][]>;
1570
- protected readonly flatTools: import("@angular/core").Signal<("blockquote" | "code" | "link" | "strike" | "bold" | "italic" | "underline" | "heading1" | "heading2" | "heading3" | "bulletList" | "orderedList" | "codeBlock" | "horizontalRule" | "undo" | "redo")[]>;
1571
- protected readonly showToolbar: import("@angular/core").Signal<boolean>;
1572
- /** Per tool: whether it's on at the cursor, and whether it can run right now. */
1573
- protected readonly toolState: import("@angular/core").Signal<Record<"blockquote" | "code" | "link" | "strike" | "bold" | "italic" | "underline" | "heading1" | "heading2" | "heading3" | "bulletList" | "orderedList" | "codeBlock" | "horizontalRule" | "undo" | "redo", {
1574
- active: boolean;
1575
- enabled: boolean;
1576
- }>>;
1577
- protected readonly generatedClasses: import("@angular/core").Signal<string>;
1578
- /** Attributes for the contenteditable element, which Tiptap renders. */
1579
- private readonly contentAttributes;
1580
- /** Each tool left out of `tools` switches its extension off. */
1581
- private readonly extensions;
1582
- constructor();
1583
- protected toolDefinition(tool: RichTextTool): ToolDefinition;
1584
- protected readonly runTool: (tool: RichTextTool) => void;
1585
- /** Arrow keys move between toolbar buttons, so the toolbar is one tab stop. */
1586
- protected readonly onToolbarKeydown: (event: KeyboardEvent) => void;
1587
- protected readonly openLink: () => void;
1588
- protected readonly applyLink: () => void;
1589
- protected readonly removeLink: () => void;
1590
- protected readonly closeLink: () => void;
1591
- protected readonly onLinkKeydown: (event: KeyboardEvent) => void;
1592
- private createEditor;
1593
- private htmlOf;
1594
- static ɵfac: i0.ɵɵFactoryDeclaration<UiRichTextEditorComponent, never>;
1595
- static ɵcmp: i0.ɵɵComponentDeclaration<UiRichTextEditorComponent, "ui-rich-text-editor", never, {
1596
- "value": {
1597
- "alias": "value";
1598
- "required": true;
1599
- "isSignal": true;
1600
- };
1601
- "classes": {
1602
- "alias": "classes";
1603
- "required": false;
1604
- "isSignal": true;
1605
- };
1606
- "tools": {
1607
- "alias": "tools";
1608
- "required": false;
1609
- "isSignal": true;
1610
- };
1611
- "id": {
1612
- "alias": "id";
1613
- "required": false;
1614
- "isSignal": true;
1615
- };
1616
- "placeholder": {
1617
- "alias": "placeholder";
1618
- "required": false;
1619
- "isSignal": true;
1620
- };
1621
- "required": {
1622
- "alias": "required";
1623
- "required": false;
1624
- "isSignal": true;
1625
- };
1626
- "disabled": {
1627
- "alias": "disabled";
1628
- "required": false;
1629
- "isSignal": true;
1630
- };
1631
- "readonly": {
1632
- "alias": "readonly";
1633
- "required": false;
1634
- "isSignal": true;
1635
- };
1636
- "validationState": {
1637
- "alias": "validationState";
1638
- "required": false;
1639
- "isSignal": true;
1640
- };
1641
- "spellcheck": {
1642
- "alias": "spellcheck";
1643
- "required": false;
1644
- "isSignal": true;
1645
- };
1646
- "ariaLabel": {
1647
- "alias": "ariaLabel";
1648
- "required": false;
1649
- "isSignal": true;
1650
- };
1651
- "describedBy": {
1652
- "alias": "describedBy";
1653
- "required": false;
1654
- "isSignal": true;
1655
- };
1656
- "labelledBy": {
1657
- "alias": "labelledBy";
1658
- "required": false;
1659
- "isSignal": true;
1660
- };
1661
- }, {
1662
- "value": "valueChange";
1663
- "validationState": "validationStateChange";
1664
- "focused": "focused";
1665
- "blurred": "blurred";
1666
- }, never, never, true, never>;
1667
- }
1668
- /** Defines if and when a `ui-overlay` should close when the user clicks. */
1669
- export type UiOverlayCloseBehaviour = 'none' | 'whenClickOutside' | 'whenClickAnywhere';
1670
- export interface UiOverlayOptions {
1671
- placement: Placement;
1672
- offset: number;
1673
- viewportPadding: number;
1674
- }
1675
- export interface UiOverlayStackEntry {
1676
- onDocumentClick: (event: MouseEvent) => void;
1677
- onKeyDown: (event: KeyboardEvent) => void;
1678
- }
1679
- export interface SelectDataSourceParameters {
1680
- query: string;
1681
- page: number;
1682
- size: number;
1683
- }
1684
- export interface SelectDataSourceContent<Model> {
1685
- items: Model[];
1686
- hasMore: boolean;
1687
- }
1688
- export interface SelectDataSource<Model> {
1689
- load(params: SelectDataSourceParameters): Observable<SelectDataSourceContent<Model>>;
1690
- }
1691
- export declare class SelectLocalDataSource<Model> implements SelectDataSource<Model> {
1692
- private readonly items;
1693
- private readonly search;
1694
- constructor(items: Model[], search: (item: Model, query: string) => boolean);
1695
- load(params: SelectDataSourceParameters): Observable<SelectDataSourceContent<Model>>;
1696
- }
1697
- export declare class SelectRemoteDataSource<Model> implements SelectDataSource<Model> {
1698
- private readonly fetch;
1699
- constructor(fetch: (params: SelectDataSourceParameters) => Observable<SelectDataSourceContent<Model>>);
1700
- load(params: SelectDataSourceParameters): Observable<SelectDataSourceContent<Model>>;
1701
- }
1702
- export type SearchMode = 'none' | 'inline' | 'dropdown';
1703
- /** How a multiple select shows its selection when closed. */
1704
- export declare const SelectMultipleDisplays: readonly ["text", "tags"];
1705
- /** @see {@link SelectMultipleDisplays} */
1706
- export type SelectMultipleDisplay = typeof SelectMultipleDisplays[number];
1707
- /** Context for a projected `#option` template. */
1708
- export interface SelectOptionContext<Model> {
1709
- $implicit: Model;
1710
- selected: boolean;
1711
- active: boolean;
1712
- }
1713
- /** Context for a projected `#trigger` template, single select only. */
1714
- export interface SelectTriggerContext<Model> {
1715
- $implicit: Model;
1716
- }
1717
- /** Context for a projected `#leading` template, inline search single select only. */
1718
- export interface SelectLeadingContext<Model> {
1719
- $implicit: Model;
1720
- }
1721
- /** One line in the open list. Groups are headings, the rest can be picked. */
1722
- export type SelectRow<Model> = {
1723
- kind: 'group';
1724
- id: string;
1725
- label: string;
1726
- } | {
1727
- kind: 'clear';
1728
- id: string;
1729
- index: number;
1730
- } | {
1731
- kind: 'create';
1732
- id: string;
1733
- index: number;
1734
- query: string;
1735
- } | {
1736
- kind: 'item';
1737
- id: string;
1738
- index: number;
1739
- item: Model;
1740
- label: string;
1741
- selected: boolean;
1742
- };
1743
- export declare class UiSelectComponent<Model = unknown> {
1744
- readonly isOpen: import("@angular/core").WritableSignal<boolean>;
1745
- readonly placement: import("@angular/core").InputSignal<Placement>;
1746
- readonly closeBehaviour: import("@angular/core").InputSignal<UiOverlayCloseBehaviour>;
1747
- readonly dataSource: import("@angular/core").InputSignal<SelectDataSource<Model>>;
1748
- readonly items: import("@angular/core").WritableSignal<Model[]>;
1749
- readonly placeholder: import("@angular/core").InputSignal<string>;
1750
- /** Goes on the trigger (or the inline search box), pass it to ui-field's `for`. */
1751
- readonly id: import("@angular/core").InputSignal<string>;
1752
- readonly describedBy: import("@angular/core").InputSignal<string>;
1753
- readonly pageSize: import("@angular/core").InputSignal<number>;
1754
- readonly searchMode: import("@angular/core").InputSignal<SearchMode>;
1755
- readonly disabled: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
1756
- readonly validationState: import("@angular/core").ModelSignal<InputValidation>;
1757
- readonly clearable: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
1758
- readonly clearLabel: import("@angular/core").InputSignal<string>;
1759
- /**
1760
- * Offers a "Create" row when a search matches nothing. Needs a
1761
- * searchMode, the parent handles `create` and adds the new item.
1762
- */
1763
- readonly creatable: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
1764
- readonly createLabel: import("@angular/core").InputSignal<(query: string) => string>;
1765
- /** Puts a heading above each run of items in the same group. Expects items sorted by group. */
1766
- readonly groupBy: import("@angular/core").InputSignal<((item: Model) => string | null) | null>;
1767
- /** Scrolls the selected option into view when the list opens. */
1768
- readonly scrollToSelected: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
1769
- /** Lets several items be picked, bound through `selectedItems`. */
1770
- readonly multiple: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
1771
- readonly multipleDisplay: import("@angular/core").InputSignal<"text" | "tags">;
1772
- /** In text display, swaps the list of names for a count past this many. 0 always counts. */
1773
- readonly counterAfter: import("@angular/core").InputSignal<number | null>;
1774
- readonly counterLabel: import("@angular/core").InputSignal<(count: number) => string>;
1775
- readonly compareWith: import("@angular/core").InputSignal<(a: Model, b: Model) => boolean>;
1776
- readonly displayWith: import("@angular/core").InputSignal<(item: Model) => string>;
1777
- readonly selectionChange: import("@angular/core").OutputEmitterRef<Model | null>;
1778
- /** Emits the search text when the "Create" row is picked. */
1779
- readonly create: import("@angular/core").OutputEmitterRef<string>;
1780
- readonly selectedItem: import("@angular/core").ModelSignal<Model | null>;
1781
- readonly selectedItems: import("@angular/core").ModelSignal<Model[]>;
1782
- readonly query: import("@angular/core").WritableSignal<string>;
1783
- readonly loading: import("@angular/core").WritableSignal<boolean>;
1784
- readonly hasMore: import("@angular/core").WritableSignal<boolean>;
1785
- readonly optionTemplate: import("@angular/core").Signal<TemplateRef<SelectOptionContext<Model>> | undefined>;
1786
- readonly triggerTemplate: import("@angular/core").Signal<TemplateRef<SelectTriggerContext<Model>> | undefined>;
1787
- /** With an inline search, shown before the chosen item's text, e.g. its colour. Single select only. */
1788
- readonly leadingTemplate: import("@angular/core").Signal<TemplateRef<SelectLeadingContext<Model>> | undefined>;
1789
- /** Index into the pickable rows, the one keyboard focus sits on. */
1790
- readonly activeIndex: import("@angular/core").WritableSignal<number>;
1791
- readonly listId: string;
1792
- readonly hasSelection: import("@angular/core").Signal<boolean>;
1793
- readonly triggerLabel: import("@angular/core").Signal<string>;
1794
- readonly isEmpty: import("@angular/core").Signal<boolean>;
1795
- /** Tags only replace the trigger text when there's no inline search box. */
1796
- readonly showTags: import("@angular/core").Signal<boolean>;
1797
- readonly showLeading: import("@angular/core").Signal<boolean>;
1798
- /** Typing replaces the chosen item's text, so its leading content sits out the search. */
1799
- readonly leadingHidden: import("@angular/core").Signal<boolean>;
1800
- /** The text to create from, or null when there's nothing to offer. */
1801
- readonly createQuery: import("@angular/core").Signal<string | null>;
1802
- readonly rows: import("@angular/core").Signal<SelectRow<Model>[]>;
1803
- private readonly pickable;
1804
- readonly activeId: import("@angular/core").Signal<string | null>;
1805
- private page;
1806
- private readonly load$;
1807
- private readonly host;
1808
- private readonly injector;
1809
- private readonly destroyRef;
1810
- private readonly cdr;
1811
- constructor();
1812
- private fetchPage;
1813
- private applyResult;
1814
- open(): void;
1815
- toggle(): void;
1816
- select(item: Model): void;
1817
- isSelected(item: Model): boolean;
1818
- toggleItem(item: Model): void;
1819
- removeItem(item: Model): void;
1820
- clear(): void;
1821
- onItemClick(item: Model): void;
1822
- onCreate(): void;
1823
- onKeydown(event: KeyboardEvent): void;
1824
- onFocusOut(event: FocusEvent): void;
1825
- setActive(index: number): void;
1826
- loadFirstPage(): void;
1827
- loadNextPage(): void;
1828
- onQueryChange(query: string): void;
1829
- onScroll(scrollContainer: HTMLElement): void;
1830
- private pickActive;
1831
- private moveActive;
1832
- private scrollActiveIntoView;
1833
- private focusTrigger;
1834
- private searchInput;
1835
- private rowId;
1836
- static ɵfac: i0.ɵɵFactoryDeclaration<UiSelectComponent<any>, never>;
1837
- static ɵcmp: i0.ɵɵComponentDeclaration<UiSelectComponent<any>, "ui-select", never, {
1838
- "placement": {
1839
- "alias": "placement";
1840
- "required": false;
1841
- "isSignal": true;
1842
- };
1843
- "closeBehaviour": {
1844
- "alias": "closeBehaviour";
1845
- "required": false;
1846
- "isSignal": true;
1847
- };
1848
- "dataSource": {
1849
- "alias": "dataSource";
1850
- "required": true;
1851
- "isSignal": true;
1852
- };
1853
- "placeholder": {
1854
- "alias": "placeholder";
1855
- "required": false;
1856
- "isSignal": true;
1857
- };
1858
- "id": {
1859
- "alias": "id";
1860
- "required": false;
1861
- "isSignal": true;
1862
- };
1863
- "describedBy": {
1864
- "alias": "describedBy";
1865
- "required": false;
1866
- "isSignal": true;
1867
- };
1868
- "pageSize": {
1869
- "alias": "pageSize";
1870
- "required": false;
1871
- "isSignal": true;
1872
- };
1873
- "searchMode": {
1874
- "alias": "searchMode";
1875
- "required": false;
1876
- "isSignal": true;
1877
- };
1878
- "disabled": {
1879
- "alias": "disabled";
1880
- "required": false;
1881
- "isSignal": true;
1882
- };
1883
- "validationState": {
1884
- "alias": "validationState";
1885
- "required": false;
1886
- "isSignal": true;
1887
- };
1888
- "clearable": {
1889
- "alias": "clearable";
1890
- "required": false;
1891
- "isSignal": true;
1892
- };
1893
- "clearLabel": {
1894
- "alias": "clearLabel";
1895
- "required": false;
1896
- "isSignal": true;
1897
- };
1898
- "creatable": {
1899
- "alias": "creatable";
1900
- "required": false;
1901
- "isSignal": true;
1902
- };
1903
- "createLabel": {
1904
- "alias": "createLabel";
1905
- "required": false;
1906
- "isSignal": true;
1907
- };
1908
- "groupBy": {
1909
- "alias": "groupBy";
1910
- "required": false;
1911
- "isSignal": true;
1912
- };
1913
- "scrollToSelected": {
1914
- "alias": "scrollToSelected";
1915
- "required": false;
1916
- "isSignal": true;
1917
- };
1918
- "multiple": {
1919
- "alias": "multiple";
1920
- "required": false;
1921
- "isSignal": true;
1922
- };
1923
- "multipleDisplay": {
1924
- "alias": "multipleDisplay";
1925
- "required": false;
1926
- "isSignal": true;
1927
- };
1928
- "counterAfter": {
1929
- "alias": "counterAfter";
1930
- "required": false;
1931
- "isSignal": true;
1932
- };
1933
- "counterLabel": {
1934
- "alias": "counterLabel";
1935
- "required": false;
1936
- "isSignal": true;
1937
- };
1938
- "compareWith": {
1939
- "alias": "compareWith";
1940
- "required": false;
1941
- "isSignal": true;
1942
- };
1943
- "displayWith": {
1944
- "alias": "displayWith";
1945
- "required": false;
1946
- "isSignal": true;
1947
- };
1948
- "selectedItem": {
1949
- "alias": "selectedItem";
1950
- "required": false;
1951
- "isSignal": true;
1952
- };
1953
- "selectedItems": {
1954
- "alias": "selectedItems";
1955
- "required": false;
1956
- "isSignal": true;
1957
- };
1958
- }, {
1959
- "validationState": "validationStateChange";
1960
- "selectionChange": "selectionChange";
1961
- "create": "create";
1962
- "selectedItem": "selectedItemChange";
1963
- "selectedItems": "selectedItemsChange";
1964
- }, ["optionTemplate", "triggerTemplate", "leadingTemplate"], never, true, never>;
1965
- }
1966
- /** Native resize values for the textarea element. */
1967
- export declare const TextareaResizeOptions: readonly ["none", "both", "horizontal", "vertical"];
1968
- /** @see {@link TextareaResizeOptions} */
1969
- export type TextareaResize = typeof TextareaResizeOptions[number];
1970
- /** true is valid, false is invalid, null is not yet validated. */
1971
- export type TextareaValidation = boolean | null;
1972
- export declare class UiTextareaComponent {
1973
- readonly value: import("@angular/core").ModelSignal<string>;
1974
- readonly classes: import("@angular/core").InputSignal<string>;
1975
- readonly id: import("@angular/core").InputSignal<string>;
1976
- readonly name: import("@angular/core").InputSignal<string>;
1977
- readonly placeholder: import("@angular/core").InputSignal<string>;
1978
- readonly rows: import("@angular/core").InputSignal<number>;
1979
- readonly resize: import("@angular/core").InputSignal<"none" | "vertical" | "horizontal" | "both">;
1980
- readonly required: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
1981
- readonly disabled: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
1982
- readonly readonly: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
1983
- /** true/false shows valid/invalid styling. null means not validated yet. */
1984
- readonly validationState: import("@angular/core").ModelSignal<TextareaValidation>;
1985
- readonly minlength: import("@angular/core").InputSignal<number | null>;
1986
- readonly maxlength: import("@angular/core").InputSignal<number | null>;
1987
- readonly autofocus: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
1988
- readonly spellcheck: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
1989
- readonly ariaLabel: import("@angular/core").InputSignal<string>;
1990
- readonly describedBy: import("@angular/core").InputSignal<string>;
1991
- readonly focused: import("@angular/core").OutputEmitterRef<FocusEvent>;
1992
- readonly blurred: import("@angular/core").OutputEmitterRef<FocusEvent>;
1993
- readonly generatedClasses: import("@angular/core").Signal<string>;
1994
- protected handleInput(event: Event): void;
1995
- protected handleFocus(event: FocusEvent): void;
1996
- protected handleBlur(event: FocusEvent): void;
1997
- static ɵfac: i0.ɵɵFactoryDeclaration<UiTextareaComponent, never>;
1998
- static ɵcmp: i0.ɵɵComponentDeclaration<UiTextareaComponent, "ui-textarea", never, {
1999
- "value": {
2000
- "alias": "value";
2001
- "required": true;
2002
- "isSignal": true;
2003
- };
2004
- "classes": {
2005
- "alias": "classes";
2006
- "required": false;
2007
- "isSignal": true;
2008
- };
2009
- "id": {
2010
- "alias": "id";
2011
- "required": false;
2012
- "isSignal": true;
2013
- };
2014
- "name": {
2015
- "alias": "name";
2016
- "required": false;
2017
- "isSignal": true;
2018
- };
2019
- "placeholder": {
2020
- "alias": "placeholder";
2021
- "required": false;
2022
- "isSignal": true;
2023
- };
2024
- "rows": {
2025
- "alias": "rows";
2026
- "required": false;
2027
- "isSignal": true;
2028
- };
2029
- "resize": {
2030
- "alias": "resize";
2031
- "required": false;
2032
- "isSignal": true;
2033
- };
2034
- "required": {
2035
- "alias": "required";
2036
- "required": false;
2037
- "isSignal": true;
2038
- };
2039
- "disabled": {
2040
- "alias": "disabled";
2041
- "required": false;
2042
- "isSignal": true;
2043
- };
2044
- "readonly": {
2045
- "alias": "readonly";
2046
- "required": false;
2047
- "isSignal": true;
2048
- };
2049
- "validationState": {
2050
- "alias": "validationState";
2051
- "required": false;
2052
- "isSignal": true;
2053
- };
2054
- "minlength": {
2055
- "alias": "minlength";
2056
- "required": false;
2057
- "isSignal": true;
2058
- };
2059
- "maxlength": {
2060
- "alias": "maxlength";
2061
- "required": false;
2062
- "isSignal": true;
2063
- };
2064
- "autofocus": {
2065
- "alias": "autofocus";
2066
- "required": false;
2067
- "isSignal": true;
2068
- };
2069
- "spellcheck": {
2070
- "alias": "spellcheck";
2071
- "required": false;
2072
- "isSignal": true;
2073
- };
2074
- "ariaLabel": {
2075
- "alias": "ariaLabel";
2076
- "required": false;
2077
- "isSignal": true;
2078
- };
2079
- "describedBy": {
2080
- "alias": "describedBy";
2081
- "required": false;
2082
- "isSignal": true;
2083
- };
2084
- }, {
2085
- "value": "valueChange";
2086
- "validationState": "validationStateChange";
2087
- "focused": "focused";
2088
- "blurred": "blurred";
2089
- }, never, never, true, never>;
2090
- }
2091
- export declare class UiAlertComponent {
2092
- readonly appearance: import("@angular/core").InputSignal<"soft" | "bordered">;
2093
- readonly intent: import("@angular/core").InputSignal<string>;
2094
- readonly icon: import("@angular/core").Signal<TemplateRef<unknown> | undefined>;
2095
- readonly generatedClasses: import("@angular/core").Signal<string>;
2096
- static ɵfac: i0.ɵɵFactoryDeclaration<UiAlertComponent, never>;
2097
- static ɵcmp: i0.ɵɵComponentDeclaration<UiAlertComponent, "ui-alert", never, {
2098
- "appearance": {
2099
- "alias": "appearance";
2100
- "required": false;
2101
- "isSignal": true;
2102
- };
2103
- "intent": {
2104
- "alias": "intent";
2105
- "required": false;
2106
- "isSignal": true;
2107
- };
2108
- }, {}, ["icon"], ["*"], true, never>;
2109
- }
2110
- export declare const AlertIntents: string[];
2111
- export declare const AlertAppearances: readonly ["soft", "bordered"];
2112
- export type AlertIntent = typeof AlertIntents[number];
2113
- export type AlertAppearance = typeof AlertAppearances[number];
2114
- export declare class UiAvatarComponent {
2115
- readonly name: import("@angular/core").InputSignal<string>;
2116
- readonly src: import("@angular/core").InputSignal<string | null>;
2117
- readonly size: import("@angular/core").InputSignal<"sm" | "md" | "lg" | "xl">;
2118
- /** Fill behind the initials, any CSS colour. The initials' ink is picked to read on six digit hex, anything else gets dark ink. */
2119
- readonly colour: import("@angular/core").InputSignal<string | null>;
2120
- private readonly failedSrc;
2121
- protected readonly showImage: import("@angular/core").Signal<boolean>;
2122
- protected readonly initials: import("@angular/core").Signal<string>;
2123
- protected readonly ink: import("@angular/core").Signal<string | null>;
2124
- readonly generatedClasses: import("@angular/core").Signal<string>;
2125
- protected imageFailed(): void;
2126
- static ɵfac: i0.ɵɵFactoryDeclaration<UiAvatarComponent, never>;
2127
- static ɵcmp: i0.ɵɵComponentDeclaration<UiAvatarComponent, "ui-avatar", never, {
2128
- "name": {
2129
- "alias": "name";
2130
- "required": true;
2131
- "isSignal": true;
2132
- };
2133
- "src": {
2134
- "alias": "src";
2135
- "required": false;
2136
- "isSignal": true;
2137
- };
2138
- "size": {
2139
- "alias": "size";
2140
- "required": false;
2141
- "isSignal": true;
2142
- };
2143
- "colour": {
2144
- "alias": "colour";
2145
- "required": false;
2146
- "isSignal": true;
2147
- };
2148
- }, {}, never, never, true, never>;
2149
- }
2150
- export declare const AvatarSizes: readonly ["sm", "md", "lg", "xl"];
2151
- /** @see {@link AvatarSizes} */
2152
- export type AvatarSize = typeof AvatarSizes[number];
2153
- export declare class UiBadgeComponent {
2154
- readonly appearance: import("@angular/core").InputSignal<"solid" | "outline" | "soft">;
2155
- readonly intent: import("@angular/core").InputSignal<"primary" | "secondary" | "success" | "warning" | "danger">;
2156
- readonly size: import("@angular/core").InputSignal<"sm" | "md" | "lg" | "xs">;
2157
- readonly generatedClasses: import("@angular/core").Signal<string>;
2158
- static ɵfac: i0.ɵɵFactoryDeclaration<UiBadgeComponent, never>;
2159
- static ɵcmp: i0.ɵɵComponentDeclaration<UiBadgeComponent, "ui-badge", never, {
2160
- "appearance": {
2161
- "alias": "appearance";
2162
- "required": false;
2163
- "isSignal": true;
2164
- };
2165
- "intent": {
2166
- "alias": "intent";
2167
- "required": false;
2168
- "isSignal": true;
2169
- };
2170
- "size": {
2171
- "alias": "size";
2172
- "required": false;
2173
- "isSignal": true;
2174
- };
2175
- }, {}, never, ["*"], true, never>;
2176
- }
2177
- export declare const BadgeIntents: readonly ["primary", "secondary", "success", "warning", "danger"];
2178
- export declare const BadgeAppearances: readonly ["solid", "outline", "soft"];
2179
- export declare const BadgeSizes: readonly ["xs", "sm", "md", "lg"];
2180
- export type BadgeIntent = typeof BadgeIntents[number];
2181
- export type BadgeAppearance = typeof BadgeAppearances[number];
2182
- export type BadgeSize = typeof BadgeSizes[number];
2183
- /**
2184
- * A general-purpose button.
2185
- */
2186
- export declare class UiButtonComponent {
2187
- readonly appearance: import("@angular/core").InputSignal<"none" | "link" | "solid" | "outline" | "ghost" | "white">;
2188
- readonly intent: import("@angular/core").InputSignal<"none" | "primary" | "secondary" | "success" | "warning" | "danger">;
2189
- readonly size: import("@angular/core").InputSignal<"sm" | "md" | "lg">;
2190
- readonly classes: import("@angular/core").InputSignal<string>;
2191
- readonly type: import("@angular/core").InputSignal<"button" | "submit" | "reset">;
2192
- readonly ariaLabel: import("@angular/core").InputSignal<string>;
2193
- readonly disabled: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
2194
- readonly loading: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
2195
- /**
2196
- * Whether the underlying `<button>` element should be disabled - true when
2197
- * `disabled` is set explicitly, or implicitly while `loading` is true.
2198
- */
2199
- readonly isDisabled: import("@angular/core").Signal<boolean>;
2200
- private readonly group;
2201
- /** In a segmented group the button matches a `ui-segmented` option instead of its own variant. */
2202
- private readonly segmented;
2203
- readonly generatedClasses: import("@angular/core").Signal<string>;
2204
- private readonly intentAndAppearanceClasses;
2205
- private readonly sizeClasses;
2206
- private readonly textClasses;
2207
- static ɵfac: i0.ɵɵFactoryDeclaration<UiButtonComponent, never>;
2208
- static ɵcmp: i0.ɵɵComponentDeclaration<UiButtonComponent, "ui-button", never, {
2209
- "appearance": {
2210
- "alias": "appearance";
2211
- "required": false;
2212
- "isSignal": true;
2213
- };
2214
- "intent": {
2215
- "alias": "intent";
2216
- "required": false;
2217
- "isSignal": true;
2218
- };
2219
- "size": {
2220
- "alias": "size";
2221
- "required": false;
2222
- "isSignal": true;
2223
- };
2224
- "classes": {
2225
- "alias": "classes";
2226
- "required": false;
2227
- "isSignal": true;
2228
- };
2229
- "type": {
2230
- "alias": "type";
2231
- "required": false;
2232
- "isSignal": true;
2233
- };
2234
- "ariaLabel": {
2235
- "alias": "ariaLabel";
2236
- "required": false;
2237
- "isSignal": true;
2238
- };
2239
- "disabled": {
2240
- "alias": "disabled";
2241
- "required": false;
2242
- "isSignal": true;
2243
- };
2244
- "loading": {
2245
- "alias": "loading";
2246
- "required": false;
2247
- "isSignal": true;
2248
- };
2249
- }, {}, never, ["*"], true, never>;
2250
- }
2251
- /**
2252
- * The semantic colour of a button. `"none"` opts out of intent/appearance
2253
- * styling entirely - see `UiButtonComponent.intent`.
2254
- */
2255
- export declare const ButtonIntents: readonly ["primary", "secondary", "success", "warning", "danger", "none"];
2256
- /**
2257
- * The visual treatment of a button (fill, outline, etc.), combined with its
2258
- * `intent` to select a variant class. `"none"` opts out of intent/appearance
2259
- * styling entirely - see `UiButtonComponent.appearance`.
2260
- */
2261
- export declare const ButtonAppearances: readonly ["solid", "outline", "ghost", "white", "link", "none"];
2262
- /** The size of a button, controlling its padding and typography scale. */
2263
- export declare const ButtonSizes: readonly ["sm", "md", "lg"];
2264
- /** The native `type` attribute a button can render with. */
2265
- export declare const ButtonTypes: readonly ["button", "submit", "reset"];
2266
- /** @see {@link ButtonIntents} */
2267
- export type ButtonIntent = typeof ButtonIntents[number];
2268
- /** @see {@link ButtonAppearances} */
2269
- export type ButtonAppearance = typeof ButtonAppearances[number];
2270
- /** @see {@link ButtonSizes} */
2271
- export type ButtonSize = typeof ButtonSizes[number];
2272
- /** @see {@link ButtonTypes} */
2273
- export type ButtonType = typeof ButtonTypes[number];
2274
- /**
2275
- * Buttons that belong together, joined edge to edge or in a segmented track.
2276
- *
2277
- * @example
2278
- * ```html
2279
- * <ui-button-group>
2280
- * <ui-button intent="secondary" appearance="white">First</ui-button>
2281
- * <ui-button intent="secondary" appearance="white">Second</ui-button>
2282
- * <ui-button intent="secondary" appearance="white">Last</ui-button>
2283
- * </ui-button-group>
2284
- * ```
2285
- */
2286
- export declare class UiButtonGroupComponent {
2287
- /** `segmented` matches `ui-segmented`, so the two can sit side by side. Buttons inside ignore their own appearance, intent and size. */
2288
- readonly appearance: import("@angular/core").InputSignal<"attached" | "segmented">;
2289
- readonly buttons: import("@angular/core").Signal<readonly UiButtonComponent[]>;
2290
- static ɵfac: i0.ɵɵFactoryDeclaration<UiButtonGroupComponent, never>;
2291
- static ɵcmp: i0.ɵɵComponentDeclaration<UiButtonGroupComponent, "ui-button-group", never, {
2292
- "appearance": {
2293
- "alias": "appearance";
2294
- "required": false;
2295
- "isSignal": true;
2296
- };
2297
- }, {}, ["buttons"], ["*"], true, never>;
2298
- }
2299
- /**
2300
- * How the buttons in a group are drawn. `"attached"` joins them edge to edge,
2301
- * `"segmented"` sits them in a track that matches `ui-segmented`.
2302
- */
2303
- export declare const ButtonGroupAppearances: readonly ["attached", "segmented"];
2304
- /** @see {@link ButtonGroupAppearances} */
2305
- export type ButtonGroupAppearance = typeof ButtonGroupAppearances[number];
2306
- /** Lets a button take its look from the group it's in. */
2307
- export declare const UI_BUTTON_GROUP: InjectionToken<{
2308
- appearance: Signal<ButtonGroupAppearance>;
2309
- }>;
2310
- /** Which day each calendar row starts on. 0 is Sunday, 1 is Monday. */
2311
- export declare const WeekStarts: readonly [0, 1];
2312
- /** @see {@link WeekStarts} */
2313
- export type WeekStart = typeof WeekStarts[number];
2314
- /** A date-only ISO string, e.g. "2026-09-29". */
2315
- export type IsoDate = string;
2316
- export interface CalendarDay {
2317
- iso: IsoDate;
2318
- day: number;
2319
- label: string;
2320
- isOutside: boolean;
2321
- isToday: boolean;
2322
- isSelected: boolean;
2323
- isDisabled: boolean;
2324
- isInRange: boolean;
2325
- isRangeStart: boolean;
2326
- isRangeEnd: boolean;
2327
- /** Extra classes from the calendar's `dayClass`. */
2328
- className: string;
2329
- }
2330
- /** The month a calendar shows, for loading what its days need. */
2331
- export interface CalendarView {
2332
- /** First of the month, e.g. "2026-11-01". */
2333
- month: IsoDate;
2334
- /** First and last day in the grid, including days from the months either side. */
2335
- start: IsoDate;
2336
- end: IsoDate;
2337
- }
2338
- export interface CalendarDayContext {
2339
- $implicit: IsoDate;
2340
- day: CalendarDay;
2341
- }
2342
- /** A local date and time ISO string, e.g. "2026-09-29T14:30". */
2343
- export type IsoDateTime = string;
2344
- /** Whether a calendar picks one date or a start and end. */
2345
- export declare const CalendarModes: readonly ["single", "range"];
2346
- /** @see {@link CalendarModes} */
2347
- export type CalendarMode = typeof CalendarModes[number];
2348
- export interface DateRange {
2349
- start: IsoDate | null;
2350
- end: IsoDate | null;
2351
- }
2352
- /**
2353
- * Draws each day's content in place of its number:
2354
- * `<ng-template uiCalendarDay let-date let-day="day">`.
2355
- */
2356
- export declare class UiCalendarDayDirective {
2357
- readonly template: TemplateRef<CalendarDayContext>;
2358
- static ɵfac: i0.ɵɵFactoryDeclaration<UiCalendarDayDirective, never>;
2359
- static ɵdir: i0.ɵɵDirectiveDeclaration<UiCalendarDayDirective, "ng-template[uiCalendarDay]", never, {}, {}, never, never, true, never>;
2360
- }
2361
- export declare class UiCalendarComponent {
2362
- private readonly host;
2363
- private readonly injector;
2364
- readonly mode: import("@angular/core").InputSignal<"single" | "range">;
2365
- /** The picked date in single mode. */
2366
- readonly value: import("@angular/core").ModelSignal<string | null>;
2367
- /** The picked start and end in range mode. */
2368
- readonly range: import("@angular/core").ModelSignal<DateRange>;
2369
- readonly min: import("@angular/core").InputSignal<string | null>;
2370
- readonly max: import("@angular/core").InputSignal<string | null>;
2371
- readonly isDateDisabled: import("@angular/core").InputSignal<(date: IsoDate) => boolean>;
2372
- readonly weekStart: import("@angular/core").InputSignal<0 | 1>;
2373
- readonly locale: import("@angular/core").InputSignal<string>;
2374
- /** Classes for a day, e.g. a tint. Signals it reads update the grid. */
2375
- readonly dayClass: import("@angular/core").InputSignal<(date: IsoDate) => string>;
2376
- /** Leaves picked days unmarked, for when a click does something other than pick. */
2377
- readonly hideSelection: import("@angular/core").InputSignal<boolean>;
2378
- /** Every click on an available day, even one that's already picked. */
2379
- readonly dayClick: import("@angular/core").OutputEmitterRef<string>;
2380
- /** The month in view, on first render and whenever it changes. */
2381
- readonly monthChange: import("@angular/core").OutputEmitterRef<CalendarView>;
2382
- protected readonly dayTemplate: import("@angular/core").Signal<UiCalendarDayDirective | undefined>;
2383
- protected readonly today: string;
2384
- private readonly anchorDate;
2385
- private readonly activeDate;
2386
- private readonly hoveredDate;
2387
- protected readonly viewMonth: import("@angular/core").WritableSignal<number>;
2388
- protected readonly viewYear: import("@angular/core").WritableSignal<number>;
2389
- protected readonly monthNames: import("@angular/core").Signal<string[]>;
2390
- protected readonly weekdays: import("@angular/core").Signal<string[]>;
2391
- protected readonly monthSource: import("@angular/core").Signal<SelectLocalDataSource<number>>;
2392
- protected readonly yearSource: import("@angular/core").Signal<SelectLocalDataSource<number>>;
2393
- protected readonly displayMonth: (month: number) => string;
2394
- protected readonly days: import("@angular/core").Signal<CalendarDay[]>;
2395
- private readonly view;
2396
- private readonly rangeBounds;
2397
- /** Only one day is tabbable, arrow keys move between the rest. */
2398
- protected readonly tabbableDate: import("@angular/core").Signal<string>;
2399
- protected readonly canGoBack: import("@angular/core").Signal<boolean>;
2400
- protected readonly canGoForward: import("@angular/core").Signal<boolean>;
2401
- constructor();
2402
- /** Moves focus onto the active day, e.g. when a datepicker opens. */
2403
- focusActiveDate(): void;
2404
- protected showMonth(offset: number): void;
2405
- protected select(day: CalendarDay): void;
2406
- protected preview(date: IsoDate | null): void;
2407
- protected handleKeydown(event: KeyboardEvent): void;
2408
- private keyTarget;
2409
- private isUnavailable;
2410
- static ɵfac: i0.ɵɵFactoryDeclaration<UiCalendarComponent, never>;
2411
- static ɵcmp: i0.ɵɵComponentDeclaration<UiCalendarComponent, "ui-calendar", never, {
2412
- "mode": {
2413
- "alias": "mode";
2414
- "required": false;
2415
- "isSignal": true;
2416
- };
2417
- "value": {
2418
- "alias": "value";
2419
- "required": false;
2420
- "isSignal": true;
2421
- };
2422
- "range": {
2423
- "alias": "range";
2424
- "required": false;
2425
- "isSignal": true;
2426
- };
2427
- "min": {
2428
- "alias": "min";
2429
- "required": false;
2430
- "isSignal": true;
2431
- };
2432
- "max": {
2433
- "alias": "max";
2434
- "required": false;
2435
- "isSignal": true;
2436
- };
2437
- "isDateDisabled": {
2438
- "alias": "isDateDisabled";
2439
- "required": false;
2440
- "isSignal": true;
2441
- };
2442
- "weekStart": {
2443
- "alias": "weekStart";
2444
- "required": false;
2445
- "isSignal": true;
2446
- };
2447
- "locale": {
2448
- "alias": "locale";
2449
- "required": false;
2450
- "isSignal": true;
2451
- };
2452
- "dayClass": {
2453
- "alias": "dayClass";
2454
- "required": false;
2455
- "isSignal": true;
2456
- };
2457
- "hideSelection": {
2458
- "alias": "hideSelection";
2459
- "required": false;
2460
- "isSignal": true;
2461
- };
2462
- }, {
2463
- "value": "valueChange";
2464
- "range": "rangeChange";
2465
- "dayClick": "dayClick";
2466
- "monthChange": "monthChange";
2467
- }, ["dayTemplate"], never, true, never>;
2468
- }
2469
- export declare class UiCardComponent {
2470
- readonly radius: import("@angular/core").InputSignal<"none" | "sm" | "md" | "lg" | "xl">;
2471
- readonly generatedClasses: import("@angular/core").Signal<string>;
2472
- static ɵfac: i0.ɵɵFactoryDeclaration<UiCardComponent, never>;
2473
- static ɵcmp: i0.ɵɵComponentDeclaration<UiCardComponent, "ui-card", never, {
2474
- "radius": {
2475
- "alias": "radius";
2476
- "required": false;
2477
- "isSignal": true;
2478
- };
2479
- }, {}, never, ["*"], true, never>;
2480
- }
2481
- /** The radius that a card can hold. Maps directly to tailwindcss' rounded classes. */
2482
- export declare const CardRadii: readonly ["none", "sm", "md", "lg", "xl"];
2483
- /** @see {@link CardRadii} */
2484
- export type CardRadius = typeof CardRadii[number];
2485
- export declare const radiusClasses: Record<CardRadius, string>;
2486
- export declare class UiCardHeaderComponent {
2487
- readonly heading: import("@angular/core").InputSignal<string>;
2488
- readonly subtitle: import("@angular/core").InputSignal<string>;
2489
- /** Pick the level that fits the page's outline, it doesn't change the look. */
2490
- readonly headingLevel: import("@angular/core").InputSignal<3 | 2 | 4>;
2491
- static ɵfac: i0.ɵɵFactoryDeclaration<UiCardHeaderComponent, never>;
2492
- static ɵcmp: i0.ɵɵComponentDeclaration<UiCardHeaderComponent, "ui-card-header", never, {
2493
- "heading": {
2494
- "alias": "heading";
2495
- "required": true;
2496
- "isSignal": true;
2497
- };
2498
- "subtitle": {
2499
- "alias": "subtitle";
2500
- "required": false;
2501
- "isSignal": true;
2502
- };
2503
- "headingLevel": {
2504
- "alias": "headingLevel";
2505
- "required": false;
2506
- "isSignal": true;
2507
- };
2508
- }, {}, never, ["*"], true, never>;
2509
- }
2510
- export declare const CardHeadingLevels: readonly [2, 3, 4];
2511
- /** @see {@link CardHeadingLevels} */
2512
- export type CardHeadingLevel = typeof CardHeadingLevels[number];
2513
- export declare class UiContainerComponent {
2514
- static ɵfac: i0.ɵɵFactoryDeclaration<UiContainerComponent, never>;
2515
- static ɵcmp: i0.ɵɵComponentDeclaration<UiContainerComponent, "ui-container", never, {}, {}, never, ["*"], true, never>;
2516
- }
2517
- /** The disclosure's content, only rendered while it's expanded. */
2518
- export declare class UiDisclosurePanelDirective {
2519
- readonly template: TemplateRef<any>;
2520
- static ɵfac: i0.ɵɵFactoryDeclaration<UiDisclosurePanelDirective, never>;
2521
- static ɵdir: i0.ɵɵDirectiveDeclaration<UiDisclosurePanelDirective, "ng-template[uiDisclosurePanel]", never, {}, {}, never, never, true, never>;
2522
- }
2523
- /**
2524
- * Shows and hides a panel of content from a `ui-disclosure-trigger` inside it.
2525
- * The content goes in an `<ng-template uiDisclosurePanel>`, rendered after
2526
- * everything else in the disclosure.
2527
- */
2528
- export declare class UiDisclosureComponent {
2529
- readonly expanded: import("@angular/core").ModelSignal<boolean>;
2530
- /** The panel's id, which the trigger's aria-controls points at. Generated when left out. */
2531
- readonly panelId: import("@angular/core").InputSignal<string>;
2532
- private readonly generatedId;
2533
- readonly regionId: import("@angular/core").Signal<string>;
2534
- protected readonly panel: import("@angular/core").Signal<UiDisclosurePanelDirective | undefined>;
2535
- readonly toggle: () => void;
2536
- readonly open: () => void;
2537
- readonly close: () => void;
2538
- static ɵfac: i0.ɵɵFactoryDeclaration<UiDisclosureComponent, never>;
2539
- static ɵcmp: i0.ɵɵComponentDeclaration<UiDisclosureComponent, "ui-disclosure", ["uiDisclosure"], {
2540
- "expanded": {
2541
- "alias": "expanded";
2542
- "required": false;
2543
- "isSignal": true;
2544
- };
2545
- "panelId": {
2546
- "alias": "panelId";
2547
- "required": false;
2548
- "isSignal": true;
2549
- };
2550
- }, {
2551
- "expanded": "expandedChange";
2552
- }, ["panel"], ["*"], true, never>;
2553
- }
2554
- /**
2555
- * How a disclosure trigger looks. `"section"` is a full-width header,
2556
- * `"row"` stretches the trigger over its row - see
2557
- * `UiDisclosureTriggerComponent.appearance`.
2558
- */
2559
- export declare const DisclosureTriggerAppearances: readonly ["section", "row"];
2560
- /** @see {@link DisclosureTriggerAppearances} */
2561
- export type DisclosureTriggerAppearance = typeof DisclosureTriggerAppearances[number];
2562
- /** A chevron that turns with the `ui-disclosure` it's in. Put it in the trigger, or anywhere in a row. */
2563
- export declare class UiDisclosureChevronComponent {
2564
- protected readonly disclosure: UiDisclosureComponent;
2565
- static ɵfac: i0.ɵɵFactoryDeclaration<UiDisclosureChevronComponent, never>;
2566
- static ɵcmp: i0.ɵɵComponentDeclaration<UiDisclosureChevronComponent, "ui-disclosure-chevron", never, {}, {}, never, never, true, never>;
2567
- }
2568
- /**
2569
- * The button that expands and collapses the `ui-disclosure` it's in.
2570
- *
2571
- * As a `"row"`, its hit area and focus ring cover the nearest positioned
2572
- * element around it, so make the row `relative`, otherwise it's the whole
2573
- * disclosure. Give other controls in the row `class="relative"` so they stay
2574
- * clickable above it.
2575
- */
2576
- export declare class UiDisclosureTriggerComponent {
2577
- protected readonly disclosure: UiDisclosureComponent;
2578
- readonly appearance: import("@angular/core").InputSignal<"section" | "row">;
2579
- readonly ariaLabel: import("@angular/core").InputSignal<string>;
2580
- static ɵfac: i0.ɵɵFactoryDeclaration<UiDisclosureTriggerComponent, never>;
2581
- static ɵcmp: i0.ɵɵComponentDeclaration<UiDisclosureTriggerComponent, "ui-disclosure-trigger", never, {
2582
- "appearance": {
2583
- "alias": "appearance";
2584
- "required": false;
2585
- "isSignal": true;
2586
- };
2587
- "ariaLabel": {
2588
- "alias": "ariaLabel";
2589
- "required": false;
2590
- "isSignal": true;
2591
- };
2592
- }, {}, never, ["*"], true, never>;
2593
- }
2594
- export declare class UiDrawerComponent {
2595
- readonly isOpen: import("@angular/core").WritableSignal<boolean>;
2596
- readonly enableBackdrop: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
2597
- readonly label: import("@angular/core").InputSignal<string>;
2598
- readonly subLabel: import("@angular/core").InputSignal<string>;
2599
- static ɵfac: i0.ɵɵFactoryDeclaration<UiDrawerComponent, never>;
2600
- static ɵcmp: i0.ɵɵComponentDeclaration<UiDrawerComponent, "ui-drawer", never, {
2601
- "enableBackdrop": {
2602
- "alias": "enableBackdrop";
2603
- "required": false;
2604
- "isSignal": true;
2605
- };
2606
- "label": {
2607
- "alias": "label";
2608
- "required": false;
2609
- "isSignal": true;
2610
- };
2611
- "subLabel": {
2612
- "alias": "subLabel";
2613
- "required": false;
2614
- "isSignal": true;
2615
- };
2616
- }, {}, never, ["[drawer-actions]", "*"], true, never>;
2617
- }
2618
- export declare class UiDropdownDirective {
2619
- readonly element: ElementRef<any>;
2620
- static ɵfac: i0.ɵɵFactoryDeclaration<UiDropdownDirective, never>;
2621
- static ɵdir: i0.ɵɵDirectiveDeclaration<UiDropdownDirective, "[uiDropdownContent]", never, {}, {}, never, never, true, never>;
2622
- }
2623
- export type DropdownMatchWidth = 'minWidth' | 'maxWidth' | 'both';
2624
- export declare class UiDropdownComponent {
2625
- protected readonly anchor: ElementRef<any>;
2626
- readonly content: import("@angular/core").Signal<UiDropdownDirective | undefined>;
2627
- readonly isOpen: import("@angular/core").InputSignal<WritableSignal<boolean>>;
2628
- readonly placement: import("@angular/core").InputSignal<Placement>;
2629
- readonly closeBehaviour: import("@angular/core").InputSignal<UiOverlayCloseBehaviour>;
2630
- readonly offset: import("@angular/core").InputSignal<number>;
2631
- readonly viewportPadding: import("@angular/core").InputSignal<number>;
2632
- /** Gives the floating content a min-width matching the dropdown's own width. */
2633
- readonly matchWidth: import("@angular/core").InputSignal<DropdownMatchWidth | null>;
2634
- readonly toggle: () => void;
2635
- readonly close: () => void;
2636
- readonly open: () => void;
2637
- static ɵfac: i0.ɵɵFactoryDeclaration<UiDropdownComponent, never>;
2638
- static ɵcmp: i0.ɵɵComponentDeclaration<UiDropdownComponent, "ui-dropdown", ["uiDropdown"], {
2639
- "isOpen": {
2640
- "alias": "isOpen";
2641
- "required": true;
2642
- "isSignal": true;
2643
- };
2644
- "placement": {
2645
- "alias": "placement";
2646
- "required": false;
2647
- "isSignal": true;
2648
- };
2649
- "closeBehaviour": {
2650
- "alias": "closeBehaviour";
2651
- "required": false;
2652
- "isSignal": true;
2653
- };
2654
- "offset": {
2655
- "alias": "offset";
2656
- "required": false;
2657
- "isSignal": true;
2658
- };
2659
- "viewportPadding": {
2660
- "alias": "viewportPadding";
2661
- "required": false;
2662
- "isSignal": true;
2663
- };
2664
- "matchWidth": {
2665
- "alias": "matchWidth";
2666
- "required": false;
2667
- "isSignal": true;
2668
- };
2669
- }, {}, ["content"], ["*"], true, never>;
2670
- }
2671
- export declare class UiKpiComponent {
2672
- readonly label: import("@angular/core").InputSignal<string>;
2673
- readonly value: import("@angular/core").InputSignal<string>;
2674
- readonly hint: import("@angular/core").InputSignal<string>;
2675
- readonly icon: import("@angular/core").InputSignal<keyof import("@ng-icons/core").NgIconNameMap | undefined>;
2676
- readonly iconPosition: import("@angular/core").InputSignal<"left" | "right">;
2677
- static ɵfac: i0.ɵɵFactoryDeclaration<UiKpiComponent, never>;
2678
- static ɵcmp: i0.ɵɵComponentDeclaration<UiKpiComponent, "ui-kpi", never, {
2679
- "label": {
2680
- "alias": "label";
2681
- "required": false;
2682
- "isSignal": true;
2683
- };
2684
- "value": {
2685
- "alias": "value";
2686
- "required": false;
2687
- "isSignal": true;
2688
- };
2689
- "hint": {
2690
- "alias": "hint";
2691
- "required": false;
2692
- "isSignal": true;
2693
- };
2694
- "icon": {
2695
- "alias": "icon";
2696
- "required": false;
2697
- "isSignal": true;
2698
- };
2699
- "iconPosition": {
2700
- "alias": "iconPosition";
2701
- "required": false;
2702
- "isSignal": true;
2703
- };
2704
- }, {}, never, ["[kpi-value]", "[kpi-badge]"], true, never>;
2705
- }
2706
- export declare class UiLoadingComponent {
2707
- readonly type: import("@angular/core").InputSignal<"spinner" | "throbber" | "pulse-ring" | "pulse-dot" | "wave" | "equaliser" | "terminal" | "blinking-caret" | "shimmer-text" | "loading-dots" | "bouncing-dots" | "fading-dots">;
2708
- protected readonly hasText: import("@angular/core").Signal<boolean>;
2709
- protected readonly throbberSpokes: number[];
2710
- static ɵfac: i0.ɵɵFactoryDeclaration<UiLoadingComponent, never>;
2711
- static ɵcmp: i0.ɵɵComponentDeclaration<UiLoadingComponent, "ui-loading", never, {
2712
- "type": {
2713
- "alias": "type";
2714
- "required": false;
2715
- "isSignal": true;
2716
- };
2717
- }, {}, never, never, true, never>;
2718
- }
2719
- export declare const UI_LOADING_TYPES: ["spinner", "throbber", "pulse-ring", "pulse-dot", "wave", "equaliser", "terminal", "blinking-caret", "shimmer-text", "loading-dots", "bouncing-dots", "fading-dots"];
2720
- export type UiLoadingType = typeof UI_LOADING_TYPES[number];
2721
- type ModalSize = 'sm' | 'md' | 'lg';
2722
- export declare class UiModalComponent {
2723
- readonly isOpen: import("@angular/core").ModelSignal<boolean>;
2724
- readonly closeBehaviour: import("@angular/core").InputSignal<UiOverlayCloseBehaviour>;
2725
- readonly title: import("@angular/core").InputSignal<string>;
2726
- readonly size: import("@angular/core").InputSignal<ModalSize>;
2727
- readonly classes: import("@angular/core").InputSignal<string>;
2728
- readonly headerElement: import("@angular/core").Signal<TemplateRef<unknown> | undefined>;
2729
- readonly footerElement: import("@angular/core").Signal<TemplateRef<unknown> | undefined>;
2730
- readonly panelElement: import("@angular/core").Signal<ElementRef<any> | undefined>;
2731
- readonly generatedClasses: import("@angular/core").Signal<string>;
2732
- static ɵfac: i0.ɵɵFactoryDeclaration<UiModalComponent, never>;
2733
- static ɵcmp: i0.ɵɵComponentDeclaration<UiModalComponent, "ui-modal", never, {
2734
- "isOpen": {
2735
- "alias": "isOpen";
2736
- "required": true;
2737
- "isSignal": true;
2738
- };
2739
- "closeBehaviour": {
2740
- "alias": "closeBehaviour";
2741
- "required": false;
2742
- "isSignal": true;
2743
- };
2744
- "title": {
2745
- "alias": "title";
2746
- "required": false;
2747
- "isSignal": true;
2748
- };
2749
- "size": {
2750
- "alias": "size";
2751
- "required": false;
2752
- "isSignal": true;
2753
- };
2754
- "classes": {
2755
- "alias": "classes";
2756
- "required": false;
2757
- "isSignal": true;
2758
- };
2759
- }, {
2760
- "isOpen": "isOpenChange";
2761
- }, ["headerElement", "footerElement"], ["*"], true, never>;
2762
- }
2763
- /**
2764
- * Formats a money value, e.g. -42.1 as "-£42.10".
2765
- */
2766
- export declare class UiMoneyComponent {
2767
- private readonly defaults;
2768
- private readonly privacy;
2769
- readonly value: import("@angular/core").InputSignal<number | null>;
2770
- /** Defaults to the currency from `provideUiFormat`. */
2771
- readonly currency: import("@angular/core").InputSignal<string>;
2772
- /** Defaults to the locale from `provideUiFormat`. */
2773
- readonly locale: import("@angular/core").InputSignal<string>;
2774
- readonly signDisplay: import("@angular/core").InputSignal<"auto" | "always" | "exceptZero" | "never">;
2775
- /** Green for money in, red for money out. */
2776
- readonly colourBySign: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
2777
- /** Rounds to whole units, e.g. "£2,235" for headline figures where pence are noise. */
2778
- readonly wholeUnits: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
2779
- /** Short form like "£12K", the full amount goes in the title. */
2780
- readonly compact: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
2781
- /** Shown when there's no value. */
2782
- readonly placeholder: import("@angular/core").InputSignal<string>;
2783
- private readonly amount;
2784
- protected readonly masked: import("@angular/core").Signal<boolean>;
2785
- protected readonly mask: import("@angular/core").Signal<string>;
2786
- protected readonly formatted: import("@angular/core").Signal<string>;
2787
- protected readonly title: import("@angular/core").Signal<string | null>;
2788
- readonly generatedClasses: import("@angular/core").Signal<string>;
2789
- private readonly signClass;
2790
- private format;
2791
- static ɵfac: i0.ɵɵFactoryDeclaration<UiMoneyComponent, never>;
2792
- static ɵcmp: i0.ɵɵComponentDeclaration<UiMoneyComponent, "ui-money", never, {
2793
- "value": {
2794
- "alias": "value";
2795
- "required": true;
2796
- "isSignal": true;
2797
- };
2798
- "currency": {
2799
- "alias": "currency";
2800
- "required": false;
2801
- "isSignal": true;
2802
- };
2803
- "locale": {
2804
- "alias": "locale";
2805
- "required": false;
2806
- "isSignal": true;
2807
- };
2808
- "signDisplay": {
2809
- "alias": "signDisplay";
2810
- "required": false;
2811
- "isSignal": true;
2812
- };
2813
- "colourBySign": {
2814
- "alias": "colourBySign";
2815
- "required": false;
2816
- "isSignal": true;
2817
- };
2818
- "wholeUnits": {
2819
- "alias": "wholeUnits";
2820
- "required": false;
2821
- "isSignal": true;
2822
- };
2823
- "compact": {
2824
- "alias": "compact";
2825
- "required": false;
2826
- "isSignal": true;
2827
- };
2828
- "placeholder": {
2829
- "alias": "placeholder";
2830
- "required": false;
2831
- "isSignal": true;
2832
- };
2833
- }, {}, never, never, true, never>;
2834
- }
2835
- /** Intl signDisplay values, controls when a + or - is shown. */
2836
- export declare const MoneySignDisplays: readonly ["auto", "always", "exceptZero", "never"];
2837
- /** @see {@link MoneySignDisplays} */
2838
- export type MoneySignDisplay = typeof MoneySignDisplays[number];
2839
- /** A page index, or a gap between page numbers. */
2840
- export type PaginationItem = number | 'ellipsis';
2841
- export declare class UiPaginationComponent {
2842
- readonly page: import("@angular/core").ModelSignal<number>;
2843
- readonly totalPages: import("@angular/core").InputSignal<number>;
2844
- readonly isFirstPage: import("@angular/core").Signal<boolean>;
2845
- readonly isLastPage: import("@angular/core").Signal<boolean>;
2846
- readonly items: import("@angular/core").Signal<PaginationItem[]>;
2847
- pageLabel(page: number): string;
2848
- goToPage(page: number): void;
2849
- static ɵfac: i0.ɵɵFactoryDeclaration<UiPaginationComponent, never>;
2850
- static ɵcmp: i0.ɵɵComponentDeclaration<UiPaginationComponent, "ui-pagination", never, {
2851
- "page": {
2852
- "alias": "page";
2853
- "required": false;
2854
- "isSignal": true;
2855
- };
2856
- "totalPages": {
2857
- "alias": "totalPages";
2858
- "required": true;
2859
- "isSignal": true;
2860
- };
2861
- }, {
2862
- "page": "pageChange";
2863
- }, never, never, true, never>;
2864
- }
2865
- /**
2866
- * Text that privacy mode masks, e.g. a transaction's description.
2867
- */
2868
- export declare class UiPrivateComponent {
2869
- private readonly privacy;
2870
- readonly text: import("@angular/core").InputSignal<string | null | undefined>;
2871
- protected readonly mask = "- - -";
2872
- protected readonly label = "text hidden";
2873
- protected readonly masked: import("@angular/core").Signal<boolean>;
2874
- readonly generatedClasses: import("@angular/core").Signal<string>;
2875
- static ɵfac: i0.ɵɵFactoryDeclaration<UiPrivateComponent, never>;
2876
- static ɵcmp: i0.ɵɵComponentDeclaration<UiPrivateComponent, "ui-private", never, {
2877
- "text": {
2878
- "alias": "text";
2879
- "required": true;
2880
- "isSignal": true;
2881
- };
2882
- }, {}, never, never, true, never>;
2883
- }
2884
- /** Same names as badges, so a status reads the same wherever it shows. */
2885
- export declare const ProgressIntents: readonly ["primary", "secondary", "success", "warning", "danger"];
2886
- /** @see {@link ProgressIntents} */
2887
- export type ProgressIntent = typeof ProgressIntents[number];
2888
- /** Track thickness, md matches Preline's default and xl fits a label inside. */
2889
- export declare const ProgressSizes: readonly ["sm", "md", "lg", "xl"];
2890
- /** @see {@link ProgressSizes} */
2891
- export type ProgressSize = typeof ProgressSizes[number];
2892
- /** Where the value label goes, if anywhere. */
2893
- export declare const ProgressLabelPositions: readonly ["none", "inside", "end", "top", "floating"];
2894
- /** @see {@link ProgressLabelPositions} */
2895
- export type ProgressLabelPosition = typeof ProgressLabelPositions[number];
2896
- /** rounded: both ends round, square: no rounding, straight: square track with a round fill. */
2897
- export declare const ProgressShapes: readonly ["rounded", "square", "straight"];
2898
- /** @see {@link ProgressShapes} */
2899
- export type ProgressShape = typeof ProgressShapes[number];
2900
- export declare const ProgressOrientations: readonly ["horizontal", "vertical"];
2901
- /** @see {@link ProgressOrientations} */
2902
- export type ProgressOrientation = typeof ProgressOrientations[number];
2903
- /** One part of a stacked bar, e.g. spending in one category. */
2904
- export interface ProgressSegment {
2905
- value: number;
2906
- intent?: ProgressIntent;
2907
- label?: string;
2908
- }
2909
- interface SegmentView {
2910
- percent: number;
2911
- intent: ProgressIntent;
2912
- label: string;
2913
- }
2914
- /**
2915
- * A progress bar. Leave `value` null for work of unknown length, a value over
2916
- * `max` fills the bar but the label still shows the real amount.
2917
- */
2918
- export declare class UiProgressComponent {
2919
- readonly value: import("@angular/core").InputSignal<number | null>;
2920
- readonly max: import("@angular/core").InputSignal<number>;
2921
- readonly intent: import("@angular/core").InputSignal<"primary" | "secondary" | "success" | "warning" | "danger">;
2922
- readonly size: import("@angular/core").InputSignal<"sm" | "md" | "lg" | "xl">;
2923
- readonly shape: import("@angular/core").InputSignal<"square" | "straight" | "rounded">;
2924
- readonly orientation: import("@angular/core").InputSignal<"vertical" | "horizontal">;
2925
- readonly title: import("@angular/core").InputSignal<string>;
2926
- readonly labelPosition: import("@angular/core").InputSignal<"none" | "end" | "top" | "floating" | "inside">;
2927
- readonly labelWith: import("@angular/core").InputSignal<(value: number, max: number) => string>;
2928
- /** Splits the bar into this many blocks. */
2929
- readonly steps: import("@angular/core").InputSignal<number | null>;
2930
- /** Several fills stacked in one track, each with its own colour. */
2931
- readonly segments: import("@angular/core").InputSignal<ProgressSegment[] | null>;
2932
- /** Needed when there's no visible title. */
2933
- readonly ariaLabel: import("@angular/core").InputSignal<string>;
2934
- protected readonly isIndeterminate: import("@angular/core").Signal<boolean>;
2935
- protected readonly total: import("@angular/core").Signal<number>;
2936
- /** 0 to 100, what the bar actually draws. */
2937
- protected readonly fillPercent: import("@angular/core").Signal<number>;
2938
- protected readonly label: import("@angular/core").Signal<string>;
2939
- protected readonly segmentViews: import("@angular/core").Signal<SegmentView[]>;
2940
- protected readonly stepStates: import("@angular/core").Signal<boolean[]>;
2941
- protected readonly floatingOffset: import("@angular/core").Signal<string>;
2942
- protected readonly isVertical: import("@angular/core").Signal<boolean>;
2943
- protected readonly rootClasses: import("@angular/core").Signal<string>;
2944
- protected fillClasses(intent: ProgressIntent): string;
2945
- private clampPercent;
2946
- static ɵfac: i0.ɵɵFactoryDeclaration<UiProgressComponent, never>;
2947
- static ɵcmp: i0.ɵɵComponentDeclaration<UiProgressComponent, "ui-progress", never, {
2948
- "value": {
2949
- "alias": "value";
2950
- "required": false;
2951
- "isSignal": true;
2952
- };
2953
- "max": {
2954
- "alias": "max";
2955
- "required": false;
2956
- "isSignal": true;
2957
- };
2958
- "intent": {
2959
- "alias": "intent";
2960
- "required": false;
2961
- "isSignal": true;
2962
- };
2963
- "size": {
2964
- "alias": "size";
2965
- "required": false;
2966
- "isSignal": true;
2967
- };
2968
- "shape": {
2969
- "alias": "shape";
2970
- "required": false;
2971
- "isSignal": true;
2972
- };
2973
- "orientation": {
2974
- "alias": "orientation";
2975
- "required": false;
2976
- "isSignal": true;
2977
- };
2978
- "title": {
2979
- "alias": "title";
2980
- "required": false;
2981
- "isSignal": true;
2982
- };
2983
- "labelPosition": {
2984
- "alias": "labelPosition";
2985
- "required": false;
2986
- "isSignal": true;
2987
- };
2988
- "labelWith": {
2989
- "alias": "labelWith";
2990
- "required": false;
2991
- "isSignal": true;
2992
- };
2993
- "steps": {
2994
- "alias": "steps";
2995
- "required": false;
2996
- "isSignal": true;
2997
- };
2998
- "segments": {
2999
- "alias": "segments";
3000
- "required": false;
3001
- "isSignal": true;
3002
- };
3003
- "ariaLabel": {
3004
- "alias": "ariaLabel";
3005
- "required": false;
3006
- "isSignal": true;
3007
- };
3008
- }, {}, never, never, true, never>;
3009
- }
3010
- export interface SegmentedOption<T> {
3011
- value: T;
3012
- label: string;
3013
- /** Read out instead of `label`, for when the label is abbreviated, e.g. "6M". */
3014
- ariaLabel?: string;
3015
- }
3016
- export declare class UiSegmentedComponent<T> {
3017
- readonly options: import("@angular/core").InputSignal<SegmentedOption<T>[]>;
3018
- readonly value: import("@angular/core").ModelSignal<T>;
3019
- /** What the options choose between, e.g. "How far back the charts go". */
3020
- readonly ariaLabel: import("@angular/core").InputSignal<string>;
3021
- /** Stretches to the container's width with the options sharing it evenly. */
3022
- readonly fill: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
3023
- protected readonly name: string;
3024
- static ɵfac: i0.ɵɵFactoryDeclaration<UiSegmentedComponent<any>, never>;
3025
- static ɵcmp: i0.ɵɵComponentDeclaration<UiSegmentedComponent<any>, "ui-segmented", never, {
3026
- "options": {
3027
- "alias": "options";
3028
- "required": true;
3029
- "isSignal": true;
3030
- };
3031
- "value": {
3032
- "alias": "value";
3033
- "required": true;
3034
- "isSignal": true;
3035
- };
3036
- "ariaLabel": {
3037
- "alias": "ariaLabel";
3038
- "required": true;
3039
- "isSignal": true;
3040
- };
3041
- "fill": {
3042
- "alias": "fill";
3043
- "required": false;
3044
- "isSignal": true;
3045
- };
3046
- }, {
3047
- "value": "valueChange";
3048
- }, never, never, true, never>;
3049
- }
3050
- /**
3051
- * A placeholder shown while content loads. Size it with classes on the
3052
- * element, e.g. `class="w-48"` for text or `class="size-12"` for a circle.
3053
- */
3054
- export declare class UiSkeletonComponent {
3055
- readonly shape: import("@angular/core").InputSignal<"text" | "circle" | "rect">;
3056
- readonly animated: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
3057
- /** Text only, stacks this many lines with a shorter last one. */
3058
- readonly lines: import("@angular/core").InputSignalWithTransform<number, unknown>;
3059
- protected readonly lineIndexes: import("@angular/core").Signal<number[]>;
3060
- readonly generatedClasses: import("@angular/core").Signal<string>;
3061
- static ɵfac: i0.ɵɵFactoryDeclaration<UiSkeletonComponent, never>;
3062
- static ɵcmp: i0.ɵɵComponentDeclaration<UiSkeletonComponent, "ui-skeleton", never, {
3063
- "shape": {
3064
- "alias": "shape";
3065
- "required": false;
3066
- "isSignal": true;
3067
- };
3068
- "animated": {
3069
- "alias": "animated";
3070
- "required": false;
3071
- "isSignal": true;
3072
- };
3073
- "lines": {
3074
- "alias": "lines";
3075
- "required": false;
3076
- "isSignal": true;
3077
- };
3078
- }, {}, never, never, true, never>;
3079
- }
3080
- /** What a skeleton stands in for, lines of text, an avatar or a block. */
3081
- export declare const SkeletonShapes: readonly ["text", "circle", "rect"];
3082
- /** @see {@link SkeletonShapes} */
3083
- export type SkeletonShape = typeof SkeletonShapes[number];
3084
- /** Each stat is its own `dl`, so wrap a row of them in a plain div. */
3085
- export declare class UiStatComponent {
3086
- readonly label: import("@angular/core").InputSignal<string>;
3087
- static ɵfac: i0.ɵɵFactoryDeclaration<UiStatComponent, never>;
3088
- static ɵcmp: i0.ɵɵComponentDeclaration<UiStatComponent, "ui-stat", never, {
3089
- "label": {
3090
- "alias": "label";
3091
- "required": true;
3092
- "isSignal": true;
3093
- };
3094
- }, {}, never, ["*", "[stat-change]", "[stat-note]"], true, never>;
3095
- }
3096
- export declare class UiTabDirective {
3097
- label: import("@angular/core").InputSignal<string>;
3098
- disabled: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
3099
- active: import("@angular/core").ModelSignal<boolean>;
3100
- static ɵfac: i0.ɵɵFactoryDeclaration<UiTabDirective, never>;
3101
- static ɵdir: i0.ɵɵDirectiveDeclaration<UiTabDirective, "[uiTab]", never, {
3102
- "label": {
3103
- "alias": "uiTab";
3104
- "required": true;
3105
- "isSignal": true;
3106
- };
3107
- "disabled": {
3108
- "alias": "disabled";
3109
- "required": false;
3110
- "isSignal": true;
3111
- };
3112
- "active": {
3113
- "alias": "active";
3114
- "required": false;
3115
- "isSignal": true;
3116
- };
3117
- }, {
3118
- "active": "activeChange";
3119
- }, never, never, true, never>;
3120
- }
3121
- export type TabButtonAppearance = 'solid' | 'underline';
3122
- export declare class UiTabComponent {
3123
- readonly tabs: import("@angular/core").Signal<readonly UiTabDirective[]>;
3124
- readonly selectedIndex: import("@angular/core").WritableSignal<number>;
3125
- readonly actions: import("@angular/core").Signal<TemplateRef<unknown> | undefined>;
3126
- readonly appearance: import("@angular/core").InputSignal<TabButtonAppearance>;
3127
- readonly generatedButtonClasses: import("@angular/core").Signal<string>;
3128
- constructor();
3129
- select(index: number): void;
3130
- static ɵfac: i0.ɵɵFactoryDeclaration<UiTabComponent, never>;
3131
- static ɵcmp: i0.ɵɵComponentDeclaration<UiTabComponent, "ui-tab", never, {
3132
- "appearance": {
3133
- "alias": "appearance";
3134
- "required": false;
3135
- "isSignal": true;
3136
- };
3137
- }, {}, ["tabs", "actions"], ["*"], true, never>;
3138
- }
3139
- export type TableSortDirection = 'asc' | 'desc';
3140
- export interface TableSortState {
3141
- columnId: string;
3142
- direction: TableSortDirection;
3143
- }
3144
- export type TableColumnDisplayType = 'text' | 'number' | 'currency' | 'date' | 'time' | 'icon';
3145
- export type TableColumnPin = 'left' | 'right';
3146
- export interface TableColumnFilterOption {
3147
- label: string;
3148
- value: unknown;
3149
- }
3150
- export interface TableColumn<Row> {
3151
- /** unique key, used for sorting/filtering/visibility/pinning/reordering */
3152
- id: string;
3153
- header: string;
3154
- /** the cell's value, used for sorting and filtering even when a `uiTableCell` template draws the cell */
3155
- accessor: (row: Row) => unknown;
3156
- /** how the cell value is formatted for display, defaults to plain text */
3157
- displayType?: TableColumnDisplayType;
3158
- /** ISO currency code, used when displayType is 'currency'. Defaults to the currency from `provideUiFormat`. */
3159
- currency?: string;
3160
- /**
3161
- * Masks the cell in privacy mode, e.g. a transaction's description. Currency cells are already masked, icon cells have no text.
3162
- * A `uiTableCell` template is replaced by the mask too.
3163
- */
3164
- sensitive?: boolean;
3165
- sortable?: boolean;
3166
- filterable?: boolean;
3167
- /** when set, the filter renders as a select instead of a free-text contains filter */
3168
- filterOptions?: TableColumnFilterOption[];
3169
- /** fix the column to one side of the scroll area, needs width to compute its offset */
3170
- pin?: TableColumnPin;
3171
- resizable?: boolean;
3172
- width?: number;
3173
- minWidth?: number;
3174
- /** false excludes the column from the drag-to-reorder behaviour */
3175
- reorderable?: boolean;
3176
- /** false excludes the column from the visibility toggle menu */
3177
- hideable?: boolean;
3178
- }
3179
- /** Context for a `uiTableCell` template. */
3180
- export interface TableCellContext<Row> {
3181
- $implicit: Row;
3182
- /** what the column's accessor gives for the row */
3183
- value: unknown;
3184
- }
3185
- export interface TableRowAction<Row> {
3186
- id: string;
3187
- label: string;
3188
- icon: string;
3189
- onClick: (row: Row) => void;
3190
- disabled?: (row: Row) => boolean;
3191
- }
3192
- export interface TableDataSourceParameters {
3193
- page: number;
3194
- /** 0 or less means "no limit", used when the table isn't paginated */
3195
- size: number;
3196
- query: string;
3197
- sort: TableSortState | null;
3198
- filters: Record<string, unknown>;
3199
- }
3200
- export interface TableDataSourceContent<Row> {
3201
- items: Row[];
3202
- total: number;
3203
- }
3204
- export interface TableDataSource<Row> {
3205
- load(params: TableDataSourceParameters): Observable<TableDataSourceContent<Row>>;
3206
- }
3207
- export interface TableLocalDataSourceOptions<Row> {
3208
- search?: (item: Row, query: string) => boolean;
3209
- sortValue?: (item: Row, columnId: string) => unknown;
3210
- filter?: (item: Row, filters: Record<string, unknown>) => boolean;
3211
- }
3212
- export declare class TableLocalDataSource<Row> implements TableDataSource<Row> {
3213
- private readonly items;
3214
- private readonly options;
3215
- constructor(items: Row[], options?: TableLocalDataSourceOptions<Row>);
3216
- load(params: TableDataSourceParameters): Observable<TableDataSourceContent<Row>>;
3217
- }
3218
- export declare class TableRemoteDataSource<Row> implements TableDataSource<Row> {
3219
- private readonly fetch;
3220
- constructor(fetch: (params: TableDataSourceParameters) => Observable<TableDataSourceContent<Row>>);
3221
- load(params: TableDataSourceParameters): Observable<TableDataSourceContent<Row>>;
3222
- }
3223
- interface ColumnDragPreview {
3224
- label: string;
3225
- x: number;
3226
- y: number;
3227
- width: number;
3228
- height: number;
3229
- }
3230
- export declare class UiTableComponent<Row = unknown> implements OnInit, OnDestroy {
3231
- readonly classes: import("@angular/core").InputSignal<string>;
3232
- /** Lets controls elsewhere on the page link to this table, e.g. `<ui-search [table]="'transactions'">`. */
3233
- readonly tableId: import("@angular/core").InputSignal<string | null>;
3234
- readonly columns: import("@angular/core").InputSignal<TableColumn<Row>[]>;
3235
- readonly dataSource: import("@angular/core").InputSignal<TableDataSource<Row>>;
3236
- readonly emptyMessage: import("@angular/core").InputSignal<string>;
3237
- readonly errorMessage: import("@angular/core").InputSignal<string>;
3238
- readonly rowId: import("@angular/core").InputSignal<(row: Row, index: number) => unknown>;
3239
- readonly selectable: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
3240
- readonly searchable: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
3241
- readonly searchPlaceholder: import("@angular/core").InputSignal<string>;
3242
- readonly paginated: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
3243
- readonly pageSize: import("@angular/core").InputSignal<number>;
3244
- readonly toggleableColumns: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
3245
- readonly reorderableColumns: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
3246
- readonly reorderableRows: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
3247
- readonly stickyHeader: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
3248
- /** Leaves out the header row, for rows that read on their own. A `uiTableBar` can still select every row. */
3249
- readonly headerless: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
3250
- private readonly bar;
3251
- protected readonly hasBar: import("@angular/core").Signal<boolean>;
3252
- /** Starts each run of rows with a heading row, e.g. a date. A row gets one whenever its heading differs from the row before it. */
3253
- readonly groupHeading: import("@angular/core").InputSignal<((row: Row) => string) | null>;
3254
- readonly actions: import("@angular/core").InputSignal<TableRowAction<Row>[]>;
3255
- readonly sort: import("@angular/core").ModelSignal<TableSortState | null>;
3256
- readonly selectedRowIds: import("@angular/core").ModelSignal<Set<unknown>>;
3257
- readonly selectionChange: import("@angular/core").OutputEmitterRef<Row[]>;
3258
- readonly rowsReordered: import("@angular/core").OutputEmitterRef<Row[]>;
3259
- readonly rows: import("@angular/core").WritableSignal<Row[]>;
3260
- readonly total: import("@angular/core").WritableSignal<number>;
3261
- readonly loading: import("@angular/core").WritableSignal<boolean>;
3262
- readonly error: import("@angular/core").WritableSignal<boolean>;
3263
- readonly query: import("@angular/core").WritableSignal<string>;
3264
- readonly filters: import("@angular/core").WritableSignal<Record<string, unknown>>;
3265
- protected readonly currentPage: import("@angular/core").WritableSignal<number>;
3266
- protected readonly hiddenColumnIds: import("@angular/core").WritableSignal<Set<string>>;
3267
- protected readonly columnOrderIds: import("@angular/core").WritableSignal<string[] | null>;
3268
- protected readonly columnWidths: import("@angular/core").WritableSignal<Record<string, number>>;
3269
- protected readonly columnMenuOpen: import("@angular/core").WritableSignal<boolean>;
3270
- protected readonly filterMenuOpen: import("@angular/core").WritableSignal<boolean>;
3271
- protected readonly draggedColumnId: import("@angular/core").WritableSignal<string | null>;
3272
- protected readonly dragOverColumnId: import("@angular/core").WritableSignal<string | null>;
3273
- protected readonly dragPreview: import("@angular/core").WritableSignal<ColumnDragPreview | null>;
3274
- protected readonly draggedRowIndex: import("@angular/core").WritableSignal<number | null>;
3275
- private readonly cellDirectives;
3276
- protected readonly cellTemplates: import("@angular/core").Signal<Map<string, TemplateRef<TableCellContext<unknown>>>>;
3277
- readonly isEmpty: import("@angular/core").Signal<boolean>;
3278
- readonly generatedClasses: import("@angular/core").Signal<string>;
3279
- protected readonly orderedColumns: import("@angular/core").Signal<TableColumn<Row>[]>;
3280
- protected readonly hideableColumns: import("@angular/core").Signal<TableColumn<Row>[]>;
3281
- protected readonly visibleColumns: import("@angular/core").Signal<TableColumn<Row>[]>;
3282
- protected readonly renderColumns: import("@angular/core").Signal<TableColumn<Row>[]>;
3283
- protected readonly filterableColumns: import("@angular/core").Signal<TableColumn<Row>[]>;
3284
- protected readonly hasFilterableColumns: import("@angular/core").Signal<boolean>;
3285
- protected readonly activeFilterCount: import("@angular/core").Signal<number>;
3286
- protected readonly hasActions: import("@angular/core").Signal<boolean>;
3287
- protected readonly columnSpan: import("@angular/core").Signal<number>;
3288
- /** Each row's heading, or null when it continues the run above it. */
3289
- protected readonly groupHeadings: import("@angular/core").Signal<(string | null)[]>;
3290
- private readonly hasSensitiveColumns;
3291
- protected readonly fixedWidth: import("@angular/core").Signal<number | null>;
3292
- protected readonly actionsColumnWidth: import("@angular/core").Signal<number>;
3293
- protected readonly totalPages: import("@angular/core").Signal<number>;
3294
- protected readonly resultsLabel: import("@angular/core").Signal<string>;
3295
- readonly allSelected: import("@angular/core").Signal<boolean>;
3296
- readonly someSelected: import("@angular/core").Signal<boolean>;
3297
- private readonly leftOffsets;
3298
- private readonly rightOffsets;
3299
- private readonly load$;
3300
- private readonly destroyRef;
3301
- private readonly cdr;
3302
- private readonly registry;
3303
- protected readonly uiFormat: import("@area8975/ui").UiFormat;
3304
- private readonly privateText;
3305
- protected readonly privacy: import("@angular/core").Signal<"visible" | "discreet" | "hidden">;
3306
- private loadedQuery;
3307
- private loadedFilters;
3308
- private loadedSort;
3309
- private resizeState;
3310
- private columnDragState;
3311
- private readonly filterDataSources;
3312
- constructor();
3313
- ngOnInit(): void;
3314
- ngOnDestroy(): void;
3315
- reload(): void;
3316
- protected cellValue(column: TableColumn<Row>, row: Row): unknown;
3317
- protected cellIconValue(column: TableColumn<Row>, row: Row): string;
3318
- protected moneyCellValue(column: TableColumn<Row>, row: Row): number | null;
3319
- protected formattedCellValue(column: TableColumn<Row>, row: Row): string;
3320
- protected onQueryChange(value: string): void;
3321
- protected filterValue(columnId: string): string;
3322
- protected onFilterInput(columnId: string, value: string): void;
3323
- protected filterDataSource(column: TableColumn<Row>): SelectDataSource<TableColumnFilterOption>;
3324
- protected selectedFilterOption(column: TableColumn<Row>): TableColumnFilterOption | null;
3325
- protected filterOptionLabel(option: TableColumnFilterOption): string;
3326
- protected readonly sensitiveFilterOptionLabel: (option: TableColumnFilterOption) => string;
3327
- protected onFilterSelect(columnId: string, option: TableColumnFilterOption | null): void;
3328
- protected clearFilters(): void;
3329
- protected toggleSort(column: TableColumn<Row>): void;
3330
- protected sortDirection(column: TableColumn<Row>): TableSortDirection | null;
3331
- protected goToPage(page: number): void;
3332
- protected isColumnVisible(column: TableColumn<Row>): boolean;
3333
- protected toggleColumnVisibility(column: TableColumn<Row>): void;
3334
- protected isRowSelected(row: Row, index: number): boolean;
3335
- protected toggleRow(row: Row, index: number): void;
3336
- toggleSelectAll(): void;
3337
- protected columnWidth(column: TableColumn<Row>): number;
3338
- protected isPinned(column: TableColumn<Row>): boolean;
3339
- protected leftOffset(column: TableColumn<Row>): number | null;
3340
- protected rightOffset(column: TableColumn<Row>): number | null;
3341
- protected startResize(event: PointerEvent, column: TableColumn<Row>): void;
3342
- protected canReorderRows(): boolean;
3343
- protected onColumnDragStart(event: PointerEvent, column: TableColumn<Row>): void;
3344
- protected onRowDragStart(event: DragEvent, index: number): void;
3345
- protected onRowDragOver(event: DragEvent): void;
3346
- protected onRowDrop(event: DragEvent, index: number): void;
3347
- private readonly onResizeMove;
3348
- private readonly onResizeEnd;
3349
- private readonly onColumnDragMove;
3350
- private readonly onColumnDragEnd;
3351
- private setFilter;
3352
- private resetAndReload;
3353
- private emitSelectionChange;
3354
- private fetch;
3355
- private applyResult;
3356
- static ɵfac: i0.ɵɵFactoryDeclaration<UiTableComponent<any>, never>;
3357
- static ɵcmp: i0.ɵɵComponentDeclaration<UiTableComponent<any>, "ui-table", never, {
3358
- "classes": {
3359
- "alias": "classes";
3360
- "required": false;
3361
- "isSignal": true;
3362
- };
3363
- "tableId": {
3364
- "alias": "tableId";
3365
- "required": false;
3366
- "isSignal": true;
3367
- };
3368
- "columns": {
3369
- "alias": "columns";
3370
- "required": true;
3371
- "isSignal": true;
3372
- };
3373
- "dataSource": {
3374
- "alias": "dataSource";
3375
- "required": true;
3376
- "isSignal": true;
3377
- };
3378
- "emptyMessage": {
3379
- "alias": "emptyMessage";
3380
- "required": false;
3381
- "isSignal": true;
3382
- };
3383
- "errorMessage": {
3384
- "alias": "errorMessage";
3385
- "required": false;
3386
- "isSignal": true;
3387
- };
3388
- "rowId": {
3389
- "alias": "rowId";
3390
- "required": false;
3391
- "isSignal": true;
3392
- };
3393
- "selectable": {
3394
- "alias": "selectable";
3395
- "required": false;
3396
- "isSignal": true;
3397
- };
3398
- "searchable": {
3399
- "alias": "searchable";
3400
- "required": false;
3401
- "isSignal": true;
3402
- };
3403
- "searchPlaceholder": {
3404
- "alias": "searchPlaceholder";
3405
- "required": false;
3406
- "isSignal": true;
3407
- };
3408
- "paginated": {
3409
- "alias": "paginated";
3410
- "required": false;
3411
- "isSignal": true;
3412
- };
3413
- "pageSize": {
3414
- "alias": "pageSize";
3415
- "required": false;
3416
- "isSignal": true;
3417
- };
3418
- "toggleableColumns": {
3419
- "alias": "toggleableColumns";
3420
- "required": false;
3421
- "isSignal": true;
3422
- };
3423
- "reorderableColumns": {
3424
- "alias": "reorderableColumns";
3425
- "required": false;
3426
- "isSignal": true;
3427
- };
3428
- "reorderableRows": {
3429
- "alias": "reorderableRows";
3430
- "required": false;
3431
- "isSignal": true;
3432
- };
3433
- "stickyHeader": {
3434
- "alias": "stickyHeader";
3435
- "required": false;
3436
- "isSignal": true;
3437
- };
3438
- "headerless": {
3439
- "alias": "headerless";
3440
- "required": false;
3441
- "isSignal": true;
3442
- };
3443
- "groupHeading": {
3444
- "alias": "groupHeading";
3445
- "required": false;
3446
- "isSignal": true;
3447
- };
3448
- "actions": {
3449
- "alias": "actions";
3450
- "required": false;
3451
- "isSignal": true;
3452
- };
3453
- "sort": {
3454
- "alias": "sort";
3455
- "required": false;
3456
- "isSignal": true;
3457
- };
3458
- "selectedRowIds": {
3459
- "alias": "selectedRowIds";
3460
- "required": false;
3461
- "isSignal": true;
3462
- };
3463
- }, {
3464
- "sort": "sortChange";
3465
- "selectedRowIds": "selectedRowIdsChange";
3466
- "selectionChange": "selectionChange";
3467
- "rowsReordered": "rowsReordered";
3468
- }, ["bar", "cellDirectives"], ["[uiTableBar]"], true, never>;
3469
- }
3470
- /**
3471
- * Draws a column's cells in place of its formatted value, matched by column id:
3472
- * `<ng-template uiTableCell="description" let-row>`. The accessor stays the cell's value.
3473
- */
3474
- export declare class UiTableCellDirective {
3475
- readonly columnId: import("@angular/core").InputSignal<string>;
3476
- readonly template: TemplateRef<TableCellContext<unknown>>;
3477
- static ɵfac: i0.ɵɵFactoryDeclaration<UiTableCellDirective, never>;
3478
- static ɵdir: i0.ɵɵDirectiveDeclaration<UiTableCellDirective, "ng-template[uiTableCell]", never, {
3479
- "columnId": {
3480
- "alias": "uiTableCell";
3481
- "required": true;
3482
- "isSignal": true;
3483
- };
3484
- }, {}, never, never, true, never>;
3485
- }
3486
- /**
3487
- * Content for a bar along the top of the table, e.g. a count and a sort control above a
3488
- * `headerless` list: `<div uiTableBar>`. With `selectable`, the bar also selects every row.
3489
- */
3490
- export declare class UiTableBarDirective {
3491
- static ɵfac: i0.ɵɵFactoryDeclaration<UiTableBarDirective, never>;
3492
- static ɵdir: i0.ɵɵDirectiveDeclaration<UiTableBarDirective, "[uiTableBar]", never, {}, {}, never, never, true, never>;
3493
- }
3494
- export interface UiLinkedTable {
3495
- readonly query: WritableSignal<string>;
3496
- readonly filters: WritableSignal<Record<string, unknown>>;
3497
- }
3498
- export declare class UiTableRegistry {
3499
- private readonly tables;
3500
- get(id: string): UiLinkedTable | null;
3501
- register(id: string, table: UiLinkedTable): void;
3502
- unregister(id: string, table: UiLinkedTable): void;
3503
- static ɵfac: i0.ɵɵFactoryDeclaration<UiTableRegistry, never>;
3504
- static ɵprov: i0.ɵɵInjectableDeclaration<any>;
3505
- }
3506
- export declare class UiToastComponent {
3507
- readonly intent: import("@angular/core").InputSignal<"success" | "warning" | "danger" | "info">;
3508
- readonly classes: import("@angular/core").InputSignal<string>;
3509
- readonly dismissable: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
3510
- /** ms before the toast dismisses itself, paused while hovered or focused. null never times out. */
3511
- readonly timeoutMs: import("@angular/core").InputSignal<number | null>;
3512
- readonly dismissed: import("@angular/core").OutputEmitterRef<void>;
3513
- protected readonly icon: import("@angular/core").Signal<IconType>;
3514
- protected readonly iconColour: import("@angular/core").Signal<string>;
3515
- protected readonly role: import("@angular/core").Signal<"alert" | "status">;
3516
- private hovered;
3517
- private focused;
3518
- private timer?;
3519
- private startedAt;
3520
- private remaining;
3521
- constructor();
3522
- protected setHovered(hovered: boolean): void;
3523
- protected setFocused(focused: boolean): void;
3524
- private updateTimer;
3525
- private startTimer;
3526
- private stopTimer;
3527
- static ɵfac: i0.ɵɵFactoryDeclaration<UiToastComponent, never>;
3528
- static ɵcmp: i0.ɵɵComponentDeclaration<UiToastComponent, "ui-toast", never, {
3529
- "intent": {
3530
- "alias": "intent";
3531
- "required": false;
3532
- "isSignal": true;
3533
- };
3534
- "classes": {
3535
- "alias": "classes";
3536
- "required": false;
3537
- "isSignal": true;
3538
- };
3539
- "dismissable": {
3540
- "alias": "dismissable";
3541
- "required": false;
3542
- "isSignal": true;
3543
- };
3544
- "timeoutMs": {
3545
- "alias": "timeoutMs";
3546
- "required": false;
3547
- "isSignal": true;
3548
- };
3549
- }, {
3550
- "dismissed": "dismissed";
3551
- }, never, ["*"], true, never>;
3552
- }
3553
- export declare const ToastIntents: readonly ["info", "success", "warning", "danger"];
3554
- export type ToastIntent = typeof ToastIntents[number];
3555
- /** What a toast template receives: `let-data` for the context, `let-dismiss="dismiss"` to close it. */
3556
- export interface ToastTemplateContext<ContextType = unknown> {
3557
- $implicit: ContextType;
3558
- dismiss: () => void;
3559
- }
3560
- export type ToastMessage<ContextType = unknown> = string | TemplateRef<ToastTemplateContext<ContextType>>;
3561
- export interface Toast {
3562
- id: number;
3563
- message: ToastMessage;
3564
- templateContext: ToastTemplateContext;
3565
- intent: ToastIntent;
3566
- dismissable: boolean;
3567
- timeoutMs?: number | null;
3568
- }
3569
- export type ToastOptions<ContextType = unknown> = Partial<Pick<Toast, 'intent' | 'dismissable' | 'timeoutMs'>> & {
3570
- context?: ContextType;
3571
- };
3572
- export declare class UiToastService {
3573
- private readonly _toasts;
3574
- private nextId;
3575
- readonly toasts: import("@angular/core").Signal<Toast[]>;
3576
- show<ContextType>(message: ToastMessage<ContextType>, options?: ToastOptions<ContextType>): number;
3577
- dismiss(id: number): void;
3578
- static ɵfac: i0.ɵɵFactoryDeclaration<UiToastService, never>;
3579
- static ɵprov: i0.ɵɵInjectableDeclaration<any>;
3580
- }
3581
- export declare class UiToasterComponent {
3582
- readonly position: import("@angular/core").InputSignal<"top-left" | "top-center" | "top-right" | "bottom-left" | "bottom-center" | "bottom-right">;
3583
- readonly timeoutMs: import("@angular/core").InputSignal<number | null>;
3584
- protected readonly toastService: UiToastService;
3585
- protected readonly positionClasses: import("@angular/core").Signal<string>;
3586
- static ɵfac: i0.ɵɵFactoryDeclaration<UiToasterComponent, never>;
3587
- static ɵcmp: i0.ɵɵComponentDeclaration<UiToasterComponent, "ui-toaster", never, {
3588
- "position": {
3589
- "alias": "position";
3590
- "required": false;
3591
- "isSignal": true;
3592
- };
3593
- "timeoutMs": {
3594
- "alias": "timeoutMs";
3595
- "required": false;
3596
- "isSignal": true;
3597
- };
3598
- }, {}, never, never, true, never>;
3599
- }
3600
- export declare const ToasterPositions: readonly ["top-left", "top-center", "top-right", "bottom-left", "bottom-center", "bottom-right"];
3601
- export type ToasterPosition = typeof ToasterPositions[number];
3602
- export type UiTooltipTrigger = 'hover' | 'focus' | 'click' | 'manual';
3603
- export declare class UiTooltipComponent {
3604
- protected readonly anchor: ElementRef<any>;
3605
- protected readonly content: import("@angular/core").Signal<ElementRef<any> | undefined>;
3606
- readonly text: import("@angular/core").InputSignal<string>;
3607
- readonly placement: import("@angular/core").InputSignal<Placement>;
3608
- readonly trigger: import("@angular/core").InputSignal<UiTooltipTrigger>;
3609
- readonly classes: import("@angular/core").InputSignal<string>;
3610
- readonly isOpen: import("@angular/core").InputSignal<WritableSignal<boolean>>;
3611
- protected readonly closeBehaviour: import("@angular/core").Signal<UiOverlayCloseBehaviour>;
3612
- protected readonly generatedClasses: import("@angular/core").Signal<string>;
3613
- protected onHover(isHovering: boolean): void;
3614
- protected onFocus(isFocused: boolean): void;
3615
- protected onClick(): void;
3616
- static ɵfac: i0.ɵɵFactoryDeclaration<UiTooltipComponent, never>;
3617
- static ɵcmp: i0.ɵɵComponentDeclaration<UiTooltipComponent, "ui-tooltip", ["uiTooltip"], {
3618
- "text": {
3619
- "alias": "text";
3620
- "required": true;
3621
- "isSignal": true;
3622
- };
3623
- "placement": {
3624
- "alias": "placement";
3625
- "required": false;
3626
- "isSignal": true;
3627
- };
3628
- "trigger": {
3629
- "alias": "trigger";
3630
- "required": false;
3631
- "isSignal": true;
3632
- };
3633
- "classes": {
3634
- "alias": "classes";
3635
- "required": false;
3636
- "isSignal": true;
3637
- };
3638
- "isOpen": {
3639
- "alias": "isOpen";
3640
- "required": false;
3641
- "isSignal": true;
3642
- };
3643
- }, {}, never, ["*"], true, never>;
3644
- }
3645
- export declare class UiLayoutComponent {
3646
- readonly sidebar: import("@angular/core").Signal<TemplateRef<unknown> | undefined>;
3647
- static ɵfac: i0.ɵɵFactoryDeclaration<UiLayoutComponent, never>;
3648
- static ɵcmp: i0.ɵɵComponentDeclaration<UiLayoutComponent, "ui-layout", never, {}, {}, ["sidebar"], ["*"], true, never>;
3649
- }
3650
- export declare class UiOverlayComponent implements UiOverlayStackEntry {
3651
- private readonly positioner;
3652
- private readonly stack;
3653
- readonly content: import("@angular/core").InputSignal<ElementRef<HTMLInputElement> | undefined>;
3654
- readonly anchor: import("@angular/core").InputSignal<ElementRef<HTMLElement> | undefined>;
3655
- readonly closeBehaviour: import("@angular/core").InputSignal<UiOverlayCloseBehaviour>;
3656
- readonly isOpen: import("@angular/core").InputSignal<WritableSignal<boolean>>;
3657
- readonly placement: import("@angular/core").InputSignal<Placement>;
3658
- readonly offset: import("@angular/core").InputSignal<number>;
3659
- readonly viewportPadding: import("@angular/core").InputSignal<number>;
3660
- /** Forces this element to match the width of its anchor element. */
3661
- readonly matchWidth: import("@angular/core").InputSignal<DropdownMatchWidth | null>;
3662
- constructor();
3663
- private readonly close;
3664
- readonly onDocumentClick: (event: MouseEvent) => void;
3665
- readonly onKeyDown: (event: KeyboardEvent) => void;
3666
- static ɵfac: i0.ɵɵFactoryDeclaration<UiOverlayComponent, never>;
3667
- static ɵcmp: i0.ɵɵComponentDeclaration<UiOverlayComponent, "ui-overlay", ["uiOverlay"], {
3668
- "content": {
3669
- "alias": "content";
3670
- "required": false;
3671
- "isSignal": true;
3672
- };
3673
- "anchor": {
3674
- "alias": "anchor";
3675
- "required": false;
3676
- "isSignal": true;
3677
- };
3678
- "closeBehaviour": {
3679
- "alias": "closeBehaviour";
3680
- "required": false;
3681
- "isSignal": true;
3682
- };
3683
- "isOpen": {
3684
- "alias": "isOpen";
3685
- "required": true;
3686
- "isSignal": true;
3687
- };
3688
- "placement": {
3689
- "alias": "placement";
3690
- "required": false;
3691
- "isSignal": true;
3692
- };
3693
- "offset": {
3694
- "alias": "offset";
3695
- "required": false;
3696
- "isSignal": true;
3697
- };
3698
- "viewportPadding": {
3699
- "alias": "viewportPadding";
3700
- "required": false;
3701
- "isSignal": true;
3702
- };
3703
- "matchWidth": {
3704
- "alias": "matchWidth";
3705
- "required": false;
3706
- "isSignal": true;
3707
- };
3708
- }, {}, never, ["*"], true, never>;
3709
- }
3710
- export declare class UiSidebarComponent {
3711
- readonly isOpen: import("@angular/core").ModelSignal<boolean>;
3712
- readonly isCollapsed: import("@angular/core").Signal<boolean>;
3713
- readonly toggle: () => void;
3714
- static ɵfac: i0.ɵɵFactoryDeclaration<UiSidebarComponent, never>;
3715
- static ɵcmp: i0.ɵɵComponentDeclaration<UiSidebarComponent, "ui-sidebar", ["uiSidebar"], {
3716
- "isOpen": {
3717
- "alias": "isOpen";
3718
- "required": false;
3719
- "isSignal": true;
3720
- };
3721
- }, {
3722
- "isOpen": "isOpenChange";
3723
- }, never, ["*", "[sidebar-footer]"], true, never>;
3724
- }
3725
- export declare class UiSidebarGroupComponent {
3726
- private readonly sidebar;
3727
- readonly label: import("@angular/core").InputSignal<string>;
3728
- protected readonly labelId: string;
3729
- readonly isCollapsed: import("@angular/core").Signal<boolean>;
3730
- static ɵfac: i0.ɵɵFactoryDeclaration<UiSidebarGroupComponent, never>;
3731
- static ɵcmp: i0.ɵɵComponentDeclaration<UiSidebarGroupComponent, "ui-sidebar-group", never, {
3732
- "label": {
3733
- "alias": "label";
3734
- "required": true;
3735
- "isSignal": true;
3736
- };
3737
- }, {}, never, ["*"], true, never>;
3738
- }
3739
- export declare class UiSidebarItemComponent {
3740
- private readonly sidebar;
3741
- readonly label: import("@angular/core").InputSignal<string>;
3742
- readonly icon: import("@angular/core").InputSignal<string>;
3743
- readonly isCollapsed: import("@angular/core").Signal<boolean>;
3744
- static ɵfac: i0.ɵɵFactoryDeclaration<UiSidebarItemComponent, never>;
3745
- static ɵcmp: i0.ɵɵComponentDeclaration<UiSidebarItemComponent, "ui-sidebar-item", never, {
3746
- "label": {
3747
- "alias": "label";
3748
- "required": true;
3749
- "isSignal": true;
3750
- };
3751
- "icon": {
3752
- "alias": "icon";
3753
- "required": false;
3754
- "isSignal": true;
3755
- };
3756
- }, {}, never, ["ui-badge"], true, never>;
3757
- }
3758
- export declare class UiColourComponent {
3759
- readonly value: import("@angular/core").ModelSignal<string>;
3760
- readonly id: import("@angular/core").InputSignal<string>;
3761
- readonly disabled: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
3762
- private readonly picker;
3763
- protected readonly isValid: import("@angular/core").Signal<boolean>;
3764
- protected readonly pickerValue: import("@angular/core").Signal<string>;
3765
- protected openPicker(): void;
3766
- protected handlePick(event: Event): void;
3767
- static ɵfac: i0.ɵɵFactoryDeclaration<UiColourComponent, never>;
3768
- static ɵcmp: i0.ɵɵComponentDeclaration<UiColourComponent, "ui-colour", never, {
3769
- "value": {
3770
- "alias": "value";
3771
- "required": false;
3772
- "isSignal": true;
3773
- };
3774
- "id": {
3775
- "alias": "id";
3776
- "required": false;
3777
- "isSignal": true;
3778
- };
3779
- "disabled": {
3780
- "alias": "disabled";
3781
- "required": false;
3782
- "isSignal": true;
3783
- };
3784
- }, {
3785
- "value": "valueChange";
3786
- }, never, never, true, never>;
3787
- }
3788
- export declare class UiCounterComponent {
3789
- readonly value: import("@angular/core").ModelSignal<number | null>;
3790
- readonly step: import("@angular/core").InputSignal<number>;
3791
- readonly max: import("@angular/core").InputSignal<number | undefined>;
3792
- readonly min: import("@angular/core").InputSignal<number | undefined>;
3793
- readonly placeholder: import("@angular/core").InputSignal<string>;
3794
- readonly leadingElement: import("@angular/core").Signal<TemplateRef<unknown> | undefined>;
3795
- readonly trailingElement: import("@angular/core").Signal<TemplateRef<unknown> | undefined>;
3796
- onStepUp(): void;
3797
- onStepDown(): void;
3798
- static ɵfac: i0.ɵɵFactoryDeclaration<UiCounterComponent, never>;
3799
- static ɵcmp: i0.ɵɵComponentDeclaration<UiCounterComponent, "ui-counter", never, {
3800
- "value": {
3801
- "alias": "value";
3802
- "required": false;
3803
- "isSignal": true;
3804
- };
3805
- "step": {
3806
- "alias": "step";
3807
- "required": false;
3808
- "isSignal": true;
3809
- };
3810
- "max": {
3811
- "alias": "max";
3812
- "required": false;
3813
- "isSignal": true;
3814
- };
3815
- "min": {
3816
- "alias": "min";
3817
- "required": false;
3818
- "isSignal": true;
3819
- };
3820
- "placeholder": {
3821
- "alias": "placeholder";
3822
- "required": false;
3823
- "isSignal": true;
3824
- };
3825
- }, {
3826
- "value": "valueChange";
3827
- }, ["leadingElement", "trailingElement"], never, true, never>;
3828
- }
3829
- /** A quick pick shown beside the calendar. The range is worked out when clicked. */
3830
- export interface DateRangePreset {
3831
- label: string;
3832
- range: () => DateRange;
3833
- }
3834
- export declare class UiDateRangePickerComponent {
3835
- private readonly host;
3836
- private readonly injector;
3837
- readonly value: import("@angular/core").ModelSignal<DateRange>;
3838
- readonly id: import("@angular/core").InputSignal<string>;
3839
- readonly placeholder: import("@angular/core").InputSignal<string>;
3840
- readonly disabled: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
3841
- readonly clearable: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
3842
- readonly validationState: import("@angular/core").InputSignal<InputValidation>;
3843
- readonly describedBy: import("@angular/core").InputSignal<string>;
3844
- readonly min: import("@angular/core").InputSignal<string | null>;
3845
- readonly max: import("@angular/core").InputSignal<string | null>;
3846
- readonly isDateDisabled: import("@angular/core").InputSignal<(date: IsoDate) => boolean>;
3847
- readonly weekStart: import("@angular/core").InputSignal<0 | 1>;
3848
- readonly locale: import("@angular/core").InputSignal<string>;
3849
- /** Intl options for the dates shown in the input. */
3850
- readonly format: import("@angular/core").InputSignal<Intl.DateTimeFormatOptions>;
3851
- /** Quick picks beside the calendar, see date-range-presets.ts for ready made ones. */
3852
- readonly presets: import("@angular/core").InputSignal<DateRangePreset[]>;
3853
- protected readonly isOpen: import("@angular/core").WritableSignal<boolean>;
3854
- private readonly calendar;
3855
- protected readonly hasValue: import("@angular/core").Signal<boolean>;
3856
- protected readonly presetRanges: import("@angular/core").Signal<DateRange[]>;
3857
- protected readonly activePreset: import("@angular/core").Signal<number>;
3858
- protected readonly display: import("@angular/core").Signal<string>;
3859
- protected toggle(): void;
3860
- protected handleInputKeydown(event: KeyboardEvent): void;
3861
- protected handleRange(range: DateRange): void;
3862
- protected choosePreset(preset: DateRangePreset): void;
3863
- protected handlePanelKeydown(event: KeyboardEvent): void;
3864
- protected clear(event: Event): void;
3865
- private clamp;
3866
- private focusInput;
3867
- static ɵfac: i0.ɵɵFactoryDeclaration<UiDateRangePickerComponent, never>;
3868
- static ɵcmp: i0.ɵɵComponentDeclaration<UiDateRangePickerComponent, "ui-date-range-picker", never, {
3869
- "value": {
3870
- "alias": "value";
3871
- "required": false;
3872
- "isSignal": true;
3873
- };
3874
- "id": {
3875
- "alias": "id";
3876
- "required": false;
3877
- "isSignal": true;
3878
- };
3879
- "placeholder": {
3880
- "alias": "placeholder";
3881
- "required": false;
3882
- "isSignal": true;
3883
- };
3884
- "disabled": {
3885
- "alias": "disabled";
3886
- "required": false;
3887
- "isSignal": true;
3888
- };
3889
- "clearable": {
3890
- "alias": "clearable";
3891
- "required": false;
3892
- "isSignal": true;
3893
- };
3894
- "validationState": {
3895
- "alias": "validationState";
3896
- "required": false;
3897
- "isSignal": true;
3898
- };
3899
- "describedBy": {
3900
- "alias": "describedBy";
3901
- "required": false;
3902
- "isSignal": true;
3903
- };
3904
- "min": {
3905
- "alias": "min";
3906
- "required": false;
3907
- "isSignal": true;
3908
- };
3909
- "max": {
3910
- "alias": "max";
3911
- "required": false;
3912
- "isSignal": true;
3913
- };
3914
- "isDateDisabled": {
3915
- "alias": "isDateDisabled";
3916
- "required": false;
3917
- "isSignal": true;
3918
- };
3919
- "weekStart": {
3920
- "alias": "weekStart";
3921
- "required": false;
3922
- "isSignal": true;
3923
- };
3924
- "locale": {
3925
- "alias": "locale";
3926
- "required": false;
3927
- "isSignal": true;
3928
- };
3929
- "format": {
3930
- "alias": "format";
3931
- "required": false;
3932
- "isSignal": true;
3933
- };
3934
- "presets": {
3935
- "alias": "presets";
3936
- "required": false;
3937
- "isSignal": true;
3938
- };
3939
- }, {
3940
- "value": "valueChange";
3941
- }, never, never, true, never>;
3942
- }
3943
- export declare function todayPreset(label?: string): DateRangePreset;
3944
- /** The last `days` days, counting today. */
3945
- export declare function lastDaysPreset(days: number, label?: string): DateRangePreset;
3946
- export declare function thisWeekPreset(weekStart?: WeekStart, label?: string): DateRangePreset;
3947
- /** A calendar month, 0 is this month, -1 is last month. */
3948
- export declare function monthPreset(offset?: number, label?: string): DateRangePreset;
3949
- /** A calendar year, 0 is this year, -1 is last year. */
3950
- export declare function yearPreset(offset?: number, label?: string): DateRangePreset;
3951
- /**
3952
- * A financial year starting on the given day, e.g. the UK tax year is
3953
- * `financialYearPreset(3, 6)` for 6 April. 0 is the current one, -1 the one before.
3954
- */
3955
- export declare function financialYearPreset(startMonth: number, startDay: number, offset?: number, label?: string): DateRangePreset;
3956
- /** A sensible starting set, pass your own list to change it. */
3957
- export declare function defaultDateRangePresets(weekStart?: WeekStart): DateRangePreset[];
3958
- export declare class UiDatepickerComponent {
3959
- private readonly host;
3960
- private readonly injector;
3961
- /** "2026-09-29", or "2026-09-29T14:30" when `withTime` is on. */
3962
- readonly value: import("@angular/core").ModelSignal<string | null>;
3963
- readonly id: import("@angular/core").InputSignal<string>;
3964
- readonly placeholder: import("@angular/core").InputSignal<string>;
3965
- readonly disabled: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
3966
- readonly clearable: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
3967
- readonly validationState: import("@angular/core").InputSignal<InputValidation>;
3968
- readonly describedBy: import("@angular/core").InputSignal<string>;
3969
- readonly min: import("@angular/core").InputSignal<string | null>;
3970
- readonly max: import("@angular/core").InputSignal<string | null>;
3971
- readonly isDateDisabled: import("@angular/core").InputSignal<(date: IsoDate) => boolean>;
3972
- readonly weekStart: import("@angular/core").InputSignal<0 | 1>;
3973
- readonly locale: import("@angular/core").InputSignal<string>;
3974
- readonly withTime: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
3975
- readonly minuteStep: import("@angular/core").InputSignal<number>;
3976
- /** Time used when a date is picked before a time has been chosen. */
3977
- readonly defaultTime: import("@angular/core").InputSignal<string>;
3978
- /** Intl options for the value shown in the input. */
3979
- readonly format: import("@angular/core").InputSignal<Intl.DateTimeFormatOptions | null>;
3980
- protected readonly isOpen: import("@angular/core").WritableSignal<boolean>;
3981
- private readonly calendar;
3982
- protected readonly datePart: import("@angular/core").Signal<string | null>;
3983
- protected readonly timePart: import("@angular/core").Signal<string>;
3984
- protected readonly display: import("@angular/core").Signal<string>;
3985
- protected toggle(): void;
3986
- protected handleInputKeydown(event: KeyboardEvent): void;
3987
- protected handlePick(date: IsoDate | null): void;
3988
- protected handleTime(time: string): void;
3989
- protected close(): void;
3990
- protected handlePanelKeydown(event: KeyboardEvent): void;
3991
- protected clear(event: Event): void;
3992
- private focusInput;
3993
- static ɵfac: i0.ɵɵFactoryDeclaration<UiDatepickerComponent, never>;
3994
- static ɵcmp: i0.ɵɵComponentDeclaration<UiDatepickerComponent, "ui-datepicker", never, {
3995
- "value": {
3996
- "alias": "value";
3997
- "required": false;
3998
- "isSignal": true;
3999
- };
4000
- "id": {
4001
- "alias": "id";
4002
- "required": false;
4003
- "isSignal": true;
4004
- };
4005
- "placeholder": {
4006
- "alias": "placeholder";
4007
- "required": false;
4008
- "isSignal": true;
4009
- };
4010
- "disabled": {
4011
- "alias": "disabled";
4012
- "required": false;
4013
- "isSignal": true;
4014
- };
4015
- "clearable": {
4016
- "alias": "clearable";
4017
- "required": false;
4018
- "isSignal": true;
4019
- };
4020
- "validationState": {
4021
- "alias": "validationState";
4022
- "required": false;
4023
- "isSignal": true;
4024
- };
4025
- "describedBy": {
4026
- "alias": "describedBy";
4027
- "required": false;
4028
- "isSignal": true;
4029
- };
4030
- "min": {
4031
- "alias": "min";
4032
- "required": false;
4033
- "isSignal": true;
4034
- };
4035
- "max": {
4036
- "alias": "max";
4037
- "required": false;
4038
- "isSignal": true;
4039
- };
4040
- "isDateDisabled": {
4041
- "alias": "isDateDisabled";
4042
- "required": false;
4043
- "isSignal": true;
4044
- };
4045
- "weekStart": {
4046
- "alias": "weekStart";
4047
- "required": false;
4048
- "isSignal": true;
4049
- };
4050
- "locale": {
4051
- "alias": "locale";
4052
- "required": false;
4053
- "isSignal": true;
4054
- };
4055
- "withTime": {
4056
- "alias": "withTime";
4057
- "required": false;
4058
- "isSignal": true;
4059
- };
4060
- "minuteStep": {
4061
- "alias": "minuteStep";
4062
- "required": false;
4063
- "isSignal": true;
4064
- };
4065
- "defaultTime": {
4066
- "alias": "defaultTime";
4067
- "required": false;
4068
- "isSignal": true;
4069
- };
4070
- "format": {
4071
- "alias": "format";
4072
- "required": false;
4073
- "isSignal": true;
4074
- };
4075
- }, {
4076
- "value": "valueChange";
4077
- }, never, never, true, never>;
4078
- }
4079
- export declare class UiDropdownButtonComponent {
4080
- readonly intent: import("@angular/core").InputSignal<"none" | "primary" | "secondary" | "success" | "warning" | "danger">;
4081
- readonly appearance: import("@angular/core").InputSignal<"none" | "link" | "solid" | "outline" | "ghost" | "white">;
4082
- readonly icon: import("@angular/core").InputSignal<string>;
4083
- readonly isOpen: import("@angular/core").ModelSignal<boolean>;
4084
- static ɵfac: i0.ɵɵFactoryDeclaration<UiDropdownButtonComponent, never>;
4085
- static ɵcmp: i0.ɵɵComponentDeclaration<UiDropdownButtonComponent, "ui-dropdown-button", never, {
4086
- "intent": {
4087
- "alias": "intent";
4088
- "required": false;
4089
- "isSignal": true;
4090
- };
4091
- "appearance": {
4092
- "alias": "appearance";
4093
- "required": false;
4094
- "isSignal": true;
4095
- };
4096
- "icon": {
4097
- "alias": "icon";
4098
- "required": false;
4099
- "isSignal": true;
4100
- };
4101
- "isOpen": {
4102
- "alias": "isOpen";
4103
- "required": true;
4104
- "isSignal": true;
4105
- };
4106
- }, {
4107
- "isOpen": "isOpenChange";
4108
- }, never, ["*"], true, never>;
4109
- }
4110
- export interface DropdownMenuButton {
4111
- label: string;
4112
- icon?: string;
4113
- onClick: () => void;
4114
- }
4115
- export interface DropdownMenuCategory {
4116
- label: string;
4117
- children: DropdownMenuButton[];
4118
- }
4119
- export interface DropdownMenuDivider {
4120
- divider: true;
4121
- }
4122
- export type DropdownMenuItem = DropdownMenuButton | DropdownMenuCategory | DropdownMenuDivider;
4123
- export declare class UiDropdownMenuComponent {
4124
- readonly items: import("@angular/core").InputSignal<DropdownMenuItem[]>;
4125
- static ɵfac: i0.ɵɵFactoryDeclaration<UiDropdownMenuComponent, never>;
4126
- static ɵcmp: i0.ɵɵComponentDeclaration<UiDropdownMenuComponent, "ui-dropdown-menu", never, {
4127
- "items": {
4128
- "alias": "items";
4129
- "required": true;
4130
- "isSignal": true;
4131
- };
4132
- }, {}, never, never, true, never>;
4133
- }
4134
- export declare class UiFileInputComponent {
4135
- readonly value: import("@angular/core").ModelSignal<File[]>;
4136
- readonly id: import("@angular/core").InputSignal<string>;
4137
- readonly accept: import("@angular/core").InputSignal<string>;
4138
- readonly multiple: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
4139
- readonly disabled: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
4140
- readonly describedBy: import("@angular/core").InputSignal<string>;
4141
- /** Max size per file in bytes. */
4142
- readonly maxSize: import("@angular/core").InputSignal<number | null>;
4143
- readonly placeholder: import("@angular/core").InputSignal<string>;
4144
- readonly buttonLabel: import("@angular/core").InputSignal<string>;
4145
- readonly rejected: import("@angular/core").OutputEmitterRef<FileRejection[]>;
4146
- private readonly picker;
4147
- protected readonly hasRejection: import("@angular/core").WritableSignal<boolean>;
4148
- protected readonly summary: import("@angular/core").Signal<string>;
4149
- protected openPicker(): void;
4150
- protected handlePick(event: Event): void;
4151
- protected clear(event: Event): void;
4152
- static ɵfac: i0.ɵɵFactoryDeclaration<UiFileInputComponent, never>;
4153
- static ɵcmp: i0.ɵɵComponentDeclaration<UiFileInputComponent, "ui-file-input", never, {
4154
- "value": {
4155
- "alias": "value";
4156
- "required": false;
4157
- "isSignal": true;
4158
- };
4159
- "id": {
4160
- "alias": "id";
4161
- "required": false;
4162
- "isSignal": true;
4163
- };
4164
- "accept": {
4165
- "alias": "accept";
4166
- "required": false;
4167
- "isSignal": true;
4168
- };
4169
- "multiple": {
4170
- "alias": "multiple";
4171
- "required": false;
4172
- "isSignal": true;
4173
- };
4174
- "disabled": {
4175
- "alias": "disabled";
4176
- "required": false;
4177
- "isSignal": true;
4178
- };
4179
- "describedBy": {
4180
- "alias": "describedBy";
4181
- "required": false;
4182
- "isSignal": true;
4183
- };
4184
- "maxSize": {
4185
- "alias": "maxSize";
4186
- "required": false;
4187
- "isSignal": true;
4188
- };
4189
- "placeholder": {
4190
- "alias": "placeholder";
4191
- "required": false;
4192
- "isSignal": true;
4193
- };
4194
- "buttonLabel": {
4195
- "alias": "buttonLabel";
4196
- "required": false;
4197
- "isSignal": true;
4198
- };
4199
- }, {
4200
- "value": "valueChange";
4201
- "rejected": "rejected";
4202
- }, never, never, true, never>;
4203
- }
4204
- export declare class UiSearchComponent {
4205
- private readonly host;
4206
- private readonly registry;
4207
- readonly value: import("@angular/core").ModelSignal<string>;
4208
- readonly placeholder: import("@angular/core").InputSignal<string>;
4209
- readonly ariaLabel: import("@angular/core").InputSignal<string>;
4210
- readonly disabled: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
4211
- /** How long typing has to pause before `searched` fires, in milliseconds. */
4212
- readonly debounce: import("@angular/core").InputSignalWithTransform<number, unknown>;
4213
- /** The `tableId` of a ui-table to search, it can render before or after this. */
4214
- readonly table: import("@angular/core").InputSignal<string | null>;
4215
- /** The value once typing pauses, for running a search. Clearing fires straight away. */
4216
- readonly searched: import("@angular/core").OutputEmitterRef<string>;
4217
- private readonly linked;
4218
- private timer;
4219
- constructor();
4220
- protected onInput(value: string): void;
4221
- protected clear(): void;
4222
- static ɵfac: i0.ɵɵFactoryDeclaration<UiSearchComponent, never>;
4223
- static ɵcmp: i0.ɵɵComponentDeclaration<UiSearchComponent, "ui-search", never, {
4224
- "value": {
4225
- "alias": "value";
4226
- "required": false;
4227
- "isSignal": true;
4228
- };
4229
- "placeholder": {
4230
- "alias": "placeholder";
4231
- "required": false;
4232
- "isSignal": true;
4233
- };
4234
- "ariaLabel": {
4235
- "alias": "ariaLabel";
4236
- "required": false;
4237
- "isSignal": true;
4238
- };
4239
- "disabled": {
4240
- "alias": "disabled";
4241
- "required": false;
4242
- "isSignal": true;
4243
- };
4244
- "debounce": {
4245
- "alias": "debounce";
4246
- "required": false;
4247
- "isSignal": true;
4248
- };
4249
- "table": {
4250
- "alias": "table";
4251
- "required": false;
4252
- "isSignal": true;
4253
- };
4254
- }, {
4255
- "value": "valueChange";
4256
- "searched": "searched";
4257
- }, never, never, true, never>;
4258
- }
4259
- export declare class UiSwitchComponent {
4260
- readonly value: import("@angular/core").ModelSignal<boolean>;
4261
- readonly id: import("@angular/core").InputSignal<string>;
4262
- readonly name: import("@angular/core").InputSignal<string>;
4263
- readonly disabled: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
4264
- static ɵfac: i0.ɵɵFactoryDeclaration<UiSwitchComponent, never>;
4265
- static ɵcmp: i0.ɵɵComponentDeclaration<UiSwitchComponent, "ui-switch", never, {
4266
- "value": {
4267
- "alias": "value";
4268
- "required": true;
4269
- "isSignal": true;
4270
- };
4271
- "id": {
4272
- "alias": "id";
4273
- "required": false;
4274
- "isSignal": true;
4275
- };
4276
- "name": {
4277
- "alias": "name";
4278
- "required": false;
4279
- "isSignal": true;
4280
- };
4281
- "disabled": {
4282
- "alias": "disabled";
4283
- "required": false;
4284
- "isSignal": true;
4285
- };
4286
- }, {
4287
- "value": "valueChange";
4288
- }, never, ["*"], true, never>;
4289
- }
4290
- export declare const TableFiltersBreakpoints: {
4291
- readonly sm: "40rem";
4292
- readonly md: "48rem";
4293
- readonly lg: "64rem";
4294
- readonly xl: "80rem";
4295
- readonly '2xl': "96rem";
4296
- };
4297
- /** @see {@link TableFiltersBreakpoints} */
4298
- export type TableFiltersBreakpoint = keyof typeof TableFiltersBreakpoints;
4299
- export interface TableFacetOption {
4300
- value: unknown;
4301
- label: string;
4302
- }
4303
- /** Writes the picked value, or an array when `multiple`, under `id`. */
4304
- export interface TableOptionsFacet {
4305
- id: string;
4306
- label: string;
4307
- kind: 'options';
4308
- options: TableFacetOption[];
4309
- multiple?: boolean;
4310
- /** Shows this many options, plus any picked, then a "Show N more" toggle. Leave out to show them all. */
4311
- visibleOptions?: number;
4312
- }
4313
- /** Writes `{ start, end }` ISO dates under `id`. */
4314
- export interface TableDateRangeFacet {
4315
- id: string;
4316
- label: string;
4317
- kind: 'dateRange';
4318
- /** Quick picks, see date-range-presets.ts for ready made ones. */
4319
- presets?: DateRangePreset[];
4320
- placeholder?: string;
4321
- min?: IsoDate | null;
4322
- max?: IsoDate | null;
4323
- }
4324
- /** Either end is null when it's open. */
4325
- export interface TableAmountRange {
4326
- min: number | null;
4327
- max: number | null;
4328
- }
4329
- export interface TableAmountRangePreset {
4330
- label: string;
4331
- range: TableAmountRange;
4332
- }
4333
- /** Writes `{ min, max }` under `id`, both ends included, with at least one of them set. */
4334
- export interface TableAmountRangeFacet {
4335
- id: string;
4336
- label: string;
4337
- kind: 'amountRange';
4338
- presets?: TableAmountRangePreset[];
4339
- /** Shown before each amount, such as a currency symbol. */
4340
- prefix?: string;
4341
- }
4342
- export type TableFacet = TableOptionsFacet | TableDateRangeFacet | TableAmountRangeFacet;
4343
- export type TableFacetDateRange = DateRange;
4344
- type Filters = Record<string, unknown>;
4345
- type RangeMode = 'any' | 'custom' | number;
4346
- type AmountEnd = keyof TableAmountRange;
4347
- export declare class UiTableFiltersComponent {
4348
- private readonly registry;
4349
- readonly facets: import("@angular/core").InputSignal<TableFacet[]>;
4350
- /** The `tableId` of a ui-table to filter, it can render before or after this. */
4351
- readonly table: import("@angular/core").InputSignal<string | null>;
4352
- readonly value: import("@angular/core").ModelSignal<Filters>;
4353
- /** Below this breakpoint the panel becomes a Filters button and a drawer. */
4354
- readonly collapseBelow: import("@angular/core").InputSignal<"sm" | "md" | "lg" | "xl" | "2xl">;
4355
- protected readonly idPrefix: string;
4356
- protected readonly anyRange: RangeMode;
4357
- protected readonly customRange: RangeMode;
4358
- private readonly customRanges;
4359
- private readonly amountDrafts;
4360
- private readonly expanded;
4361
- private readonly linked;
4362
- protected readonly appliedCount: import("@angular/core").Signal<number>;
4363
- protected readonly anyApplied: import("@angular/core").Signal<boolean>;
4364
- private readonly window;
4365
- protected readonly wide: import("@angular/core").WritableSignal<boolean>;
4366
- constructor();
4367
- protected groupName(facet: TableFacet): string;
4368
- protected choiceId(facet: TableFacet, choice: number | string): string;
4369
- protected picked(facet: TableOptionsFacet): unknown;
4370
- protected pick(facet: TableOptionsFacet, value: unknown): void;
4371
- protected isChecked(facet: TableOptionsFacet, option: TableFacetOption): boolean;
4372
- protected check(facet: TableOptionsFacet, option: TableFacetOption, checked: boolean): void;
4373
- protected isExpanded(facet: TableOptionsFacet): boolean;
4374
- protected isShown(facet: TableOptionsFacet, option: TableFacetOption, index: number): boolean;
4375
- /** How many options collapsing hides, 0 when there's nothing to toggle. */
4376
- protected hiddenCount(facet: TableOptionsFacet): number;
4377
- protected toggleExpanded(facet: TableOptionsFacet): void;
4378
- protected range(facet: TableDateRangeFacet): DateRange;
4379
- protected dateMode(facet: TableDateRangeFacet): RangeMode;
4380
- protected pickDate(facet: TableDateRangeFacet, mode: RangeMode): void;
4381
- protected setRange(facet: TableDateRangeFacet, range: DateRange): void;
4382
- protected amountRange(facet: TableAmountRangeFacet): TableAmountRange | undefined;
4383
- protected amountMode(facet: TableAmountRangeFacet): RangeMode;
4384
- protected pickAmount(facet: TableAmountRangeFacet, mode: RangeMode): void;
4385
- protected amountText(facet: TableAmountRangeFacet, end: AmountEnd): string;
4386
- protected typeAmount(facet: TableAmountRangeFacet, end: AmountEnd, text: string): void;
4387
- protected isAmountValid(facet: TableAmountRangeFacet, end: AmountEnd): boolean;
4388
- protected clearAll(): void;
4389
- private setCustom;
4390
- private forgetAmountDraft;
4391
- private isPastCutoff;
4392
- private isSelected;
4393
- private apply;
4394
- private write;
4395
- private currentFilters;
4396
- private ownFilters;
4397
- private withoutOwn;
4398
- private hasAny;
4399
- static ɵfac: i0.ɵɵFactoryDeclaration<UiTableFiltersComponent, never>;
4400
- static ɵcmp: i0.ɵɵComponentDeclaration<UiTableFiltersComponent, "ui-table-filters", never, {
4401
- "facets": {
4402
- "alias": "facets";
4403
- "required": true;
4404
- "isSignal": true;
4405
- };
4406
- "table": {
4407
- "alias": "table";
4408
- "required": false;
4409
- "isSignal": true;
4410
- };
4411
- "value": {
4412
- "alias": "value";
4413
- "required": false;
4414
- "isSignal": true;
4415
- };
4416
- "collapseBelow": {
4417
- "alias": "collapseBelow";
4418
- "required": false;
4419
- "isSignal": true;
4420
- };
4421
- }, {
4422
- "value": "valueChange";
4423
- }, never, never, true, never>;
4424
- }
4425
- export declare class UiTimeSelectComponent {
4426
- /** 24 hour "HH:mm" string. */
4427
- readonly value: import("@angular/core").ModelSignal<string>;
4428
- readonly minuteStep: import("@angular/core").InputSignal<number>;
4429
- readonly disabled: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
4430
- protected readonly hours: import("@angular/core").Signal<number>;
4431
- protected readonly minutes: import("@angular/core").Signal<number>;
4432
- protected readonly hourSource: SelectLocalDataSource<number>;
4433
- protected readonly minuteSource: import("@angular/core").Signal<SelectLocalDataSource<number>>;
4434
- protected readonly pad: (value: number) => string;
4435
- protected setHours(hours: number | null): void;
4436
- protected setMinutes(minutes: number | null): void;
4437
- static ɵfac: i0.ɵɵFactoryDeclaration<UiTimeSelectComponent, never>;
4438
- static ɵcmp: i0.ɵɵComponentDeclaration<UiTimeSelectComponent, "ui-time-select", never, {
4439
- "value": {
4440
- "alias": "value";
4441
- "required": false;
4442
- "isSignal": true;
4443
- };
4444
- "minuteStep": {
4445
- "alias": "minuteStep";
4446
- "required": false;
4447
- "isSignal": true;
4448
- };
4449
- "disabled": {
4450
- "alias": "disabled";
4451
- "required": false;
4452
- "isSignal": true;
4453
- };
4454
- }, {
4455
- "value": "valueChange";
4456
- }, never, never, true, never>;
4457
- }
4458
- /** Give the dropdown it sits in `closeBehaviour="whenClickOutside"`. */
4459
- export declare class UiUserMenuComponent {
4460
- private readonly dropdown;
4461
- readonly name: import("@angular/core").InputSignal<string>;
4462
- /** A second line under the name, e.g. an email address. */
4463
- readonly detail: import("@angular/core").InputSignal<string>;
4464
- readonly src: import("@angular/core").InputSignal<string | null>;
4465
- readonly items: import("@angular/core").InputSignal<DropdownMenuItem[]>;
4466
- protected readonly menuItems: import("@angular/core").Signal<DropdownMenuItem[]>;
4467
- protected isDivider(item: DropdownMenuItem): boolean;
4468
- protected group(item: DropdownMenuItem): DropdownMenuCategory | null;
4469
- protected button(item: DropdownMenuItem): DropdownMenuButton | null;
4470
- private closing;
4471
- static ɵfac: i0.ɵɵFactoryDeclaration<UiUserMenuComponent, never>;
4472
- static ɵcmp: i0.ɵɵComponentDeclaration<UiUserMenuComponent, "ui-user-menu", never, {
4473
- "name": {
4474
- "alias": "name";
4475
- "required": true;
4476
- "isSignal": true;
4477
- };
4478
- "detail": {
4479
- "alias": "detail";
4480
- "required": false;
4481
- "isSignal": true;
4482
- };
4483
- "src": {
4484
- "alias": "src";
4485
- "required": false;
4486
- "isSignal": true;
4487
- };
4488
- "items": {
4489
- "alias": "items";
4490
- "required": false;
4491
- "isSignal": true;
4492
- };
4493
- }, {}, never, ["*"], true, never>;
4494
- }
4495
- /** What the user picked, `system` follows the OS setting. */
4496
- export type UiThemePreference = 'system' | 'light' | 'dark';
4497
- export interface UiThemeConfig {
4498
- storageKey: string;
4499
- }
4500
- export declare const UI_THEME_CONFIG: InjectionToken<UiThemeConfig>;
4501
- /**
4502
- * Add this to `index.html`'s `<head>` so the stored theme applies before boot:
4503
- *
4504
- * ```html
4505
- * <script>
4506
- * try {
4507
- * const preference = localStorage.getItem('ui-theme') ?? 'system';
4508
- * const dark = preference === 'dark' ||
4509
- * (preference === 'system' && matchMedia('(prefers-color-scheme: dark)').matches);
4510
- * document.documentElement.classList.toggle('dark', dark);
4511
- * } catch {}
4512
- * </script>
4513
- * ```
4514
- */
4515
- export declare class UiThemeService {
4516
- private readonly document;
4517
- private readonly storageKey;
4518
- private readonly media;
4519
- readonly preference: import("@angular/core").WritableSignal<UiThemePreference>;
4520
- private readonly systemDark;
4521
- readonly isDark: import("@angular/core").Signal<boolean>;
4522
- constructor();
4523
- private stored;
4524
- static ɵfac: i0.ɵɵFactoryDeclaration<UiThemeService, never>;
4525
- static ɵprov: i0.ɵɵInjectableDeclaration<any>;
4526
- }
4527
- export declare function provideUiTheme(config?: Partial<UiThemeConfig>): EnvironmentProviders;
4528
- export declare class UiThemeSwitchComponent {
4529
- protected readonly theme: UiThemeService;
4530
- readonly ariaLabel: import("@angular/core").InputSignal<string>;
4531
- readonly fill: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
4532
- protected readonly options: SegmentedOption<UiThemePreference>[];
4533
- static ɵfac: i0.ɵɵFactoryDeclaration<UiThemeSwitchComponent, never>;
4534
- static ɵcmp: i0.ɵɵComponentDeclaration<UiThemeSwitchComponent, "ui-theme-switch", never, {
4535
- "ariaLabel": {
4536
- "alias": "ariaLabel";
4537
- "required": false;
4538
- "isSignal": true;
4539
- };
4540
- "fill": {
4541
- "alias": "fill";
4542
- "required": false;
4543
- "isSignal": true;
4544
- };
4545
- }, {}, never, never, true, never>;
4546
- }
1
+ export {}