@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
@@ -0,0 +1,41 @@
1
+ import * as i0 from "@angular/core";
2
+ export interface SegmentedOption<T> {
3
+ value: T;
4
+ label: string;
5
+ /** Read out instead of `label`, for when the label is abbreviated, e.g. "6M". */
6
+ ariaLabel?: string;
7
+ }
8
+ export declare class UiSegmentedComponent<T> {
9
+ readonly options: import("@angular/core").InputSignal<SegmentedOption<T>[]>;
10
+ readonly value: import("@angular/core").ModelSignal<T>;
11
+ /** What the options choose between, e.g. "How far back the charts go". */
12
+ readonly ariaLabel: import("@angular/core").InputSignal<string>;
13
+ /** Stretches to the container's width with the options sharing it evenly. */
14
+ readonly fill: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
15
+ protected readonly name: string;
16
+ static ɵfac: i0.ɵɵFactoryDeclaration<UiSegmentedComponent<any>, never>;
17
+ static ɵcmp: i0.ɵɵComponentDeclaration<UiSegmentedComponent<any>, "ui-segmented", never, {
18
+ "options": {
19
+ "alias": "options";
20
+ "required": true;
21
+ "isSignal": true;
22
+ };
23
+ "value": {
24
+ "alias": "value";
25
+ "required": true;
26
+ "isSignal": true;
27
+ };
28
+ "ariaLabel": {
29
+ "alias": "ariaLabel";
30
+ "required": true;
31
+ "isSignal": true;
32
+ };
33
+ "fill": {
34
+ "alias": "fill";
35
+ "required": false;
36
+ "isSignal": true;
37
+ };
38
+ }, {
39
+ "value": "valueChange";
40
+ }, never, never, true, never>;
41
+ }
@@ -0,0 +1,293 @@
1
+ import * as i0 from "@angular/core";
2
+ import { TemplateRef } from "@angular/core";
3
+ import { InputValidation } from "@area8975/ui/input";
4
+ import { UiOverlayCloseBehaviour } from "@area8975/ui/overlay";
5
+ import { Placement } from "@floating-ui/dom";
6
+ import { Observable } from "rxjs";
7
+ export interface SelectDataSourceParameters {
8
+ query: string;
9
+ page: number;
10
+ size: number;
11
+ }
12
+ export interface SelectDataSourceContent<Model> {
13
+ items: Model[];
14
+ hasMore: boolean;
15
+ }
16
+ export interface SelectDataSource<Model> {
17
+ load(params: SelectDataSourceParameters): Observable<SelectDataSourceContent<Model>>;
18
+ }
19
+ export declare class SelectLocalDataSource<Model> implements SelectDataSource<Model> {
20
+ private readonly items;
21
+ private readonly search;
22
+ constructor(items: Model[], search: (item: Model, query: string) => boolean);
23
+ load(params: SelectDataSourceParameters): Observable<SelectDataSourceContent<Model>>;
24
+ }
25
+ export declare class SelectRemoteDataSource<Model> implements SelectDataSource<Model> {
26
+ private readonly fetch;
27
+ constructor(fetch: (params: SelectDataSourceParameters) => Observable<SelectDataSourceContent<Model>>);
28
+ load(params: SelectDataSourceParameters): Observable<SelectDataSourceContent<Model>>;
29
+ }
30
+ export type SearchMode = 'none' | 'inline' | 'dropdown';
31
+ /** How a multiple select shows its selection when closed. */
32
+ export declare const SelectMultipleDisplays: readonly ["text", "tags"];
33
+ /** @see {@link SelectMultipleDisplays} */
34
+ export type SelectMultipleDisplay = typeof SelectMultipleDisplays[number];
35
+ /** Context for a projected `#option` template. */
36
+ export interface SelectOptionContext<Model> {
37
+ $implicit: Model;
38
+ selected: boolean;
39
+ active: boolean;
40
+ }
41
+ /** Context for a projected `#trigger` template, single select only. */
42
+ export interface SelectTriggerContext<Model> {
43
+ $implicit: Model;
44
+ }
45
+ /** Context for a projected `#leading` template, inline search single select only. */
46
+ export interface SelectLeadingContext<Model> {
47
+ $implicit: Model;
48
+ }
49
+ /** One line in the open list. Groups are headings, the rest can be picked. */
50
+ export type SelectRow<Model> = {
51
+ kind: 'group';
52
+ id: string;
53
+ label: string;
54
+ } | {
55
+ kind: 'clear';
56
+ id: string;
57
+ index: number;
58
+ } | {
59
+ kind: 'create';
60
+ id: string;
61
+ index: number;
62
+ query: string;
63
+ } | {
64
+ kind: 'item';
65
+ id: string;
66
+ index: number;
67
+ item: Model;
68
+ label: string;
69
+ selected: boolean;
70
+ };
71
+ export declare class UiSelectComponent<Model = unknown> {
72
+ readonly isOpen: import("@angular/core").WritableSignal<boolean>;
73
+ readonly placement: import("@angular/core").InputSignal<Placement>;
74
+ readonly closeBehaviour: import("@angular/core").InputSignal<UiOverlayCloseBehaviour>;
75
+ readonly dataSource: import("@angular/core").InputSignal<SelectDataSource<Model>>;
76
+ readonly items: import("@angular/core").WritableSignal<Model[]>;
77
+ readonly placeholder: import("@angular/core").InputSignal<string>;
78
+ /** Goes on the trigger (or the inline search box), pass it to ui-field's `for`. */
79
+ readonly id: import("@angular/core").InputSignal<string>;
80
+ readonly describedBy: import("@angular/core").InputSignal<string>;
81
+ readonly pageSize: import("@angular/core").InputSignal<number>;
82
+ readonly searchMode: import("@angular/core").InputSignal<SearchMode>;
83
+ readonly disabled: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
84
+ readonly validationState: import("@angular/core").ModelSignal<InputValidation>;
85
+ readonly clearable: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
86
+ readonly clearLabel: import("@angular/core").InputSignal<string>;
87
+ /**
88
+ * Offers a "Create" row when a search matches nothing. Needs a
89
+ * searchMode, the parent handles `create` and adds the new item.
90
+ */
91
+ readonly creatable: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
92
+ readonly createLabel: import("@angular/core").InputSignal<(query: string) => string>;
93
+ /** Puts a heading above each run of items in the same group. Expects items sorted by group. */
94
+ readonly groupBy: import("@angular/core").InputSignal<((item: Model) => string | null) | null>;
95
+ /** Scrolls the selected option into view when the list opens. */
96
+ readonly scrollToSelected: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
97
+ /** Lets several items be picked, bound through `selectedItems`. */
98
+ readonly multiple: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
99
+ readonly multipleDisplay: import("@angular/core").InputSignal<"text" | "tags">;
100
+ /** In text display, swaps the list of names for a count past this many. 0 always counts. */
101
+ readonly counterAfter: import("@angular/core").InputSignal<number | null>;
102
+ readonly counterLabel: import("@angular/core").InputSignal<(count: number) => string>;
103
+ readonly compareWith: import("@angular/core").InputSignal<(a: Model, b: Model) => boolean>;
104
+ readonly displayWith: import("@angular/core").InputSignal<(item: Model) => string>;
105
+ readonly selectionChange: import("@angular/core").OutputEmitterRef<Model | null>;
106
+ /** Emits the search text when the "Create" row is picked. */
107
+ readonly create: import("@angular/core").OutputEmitterRef<string>;
108
+ readonly selectedItem: import("@angular/core").ModelSignal<Model | null>;
109
+ readonly selectedItems: import("@angular/core").ModelSignal<Model[]>;
110
+ readonly query: import("@angular/core").WritableSignal<string>;
111
+ readonly loading: import("@angular/core").WritableSignal<boolean>;
112
+ readonly hasMore: import("@angular/core").WritableSignal<boolean>;
113
+ readonly optionTemplate: import("@angular/core").Signal<TemplateRef<SelectOptionContext<Model>> | undefined>;
114
+ readonly triggerTemplate: import("@angular/core").Signal<TemplateRef<SelectTriggerContext<Model>> | undefined>;
115
+ /** With an inline search, shown before the chosen item's text, e.g. its colour. Single select only. */
116
+ readonly leadingTemplate: import("@angular/core").Signal<TemplateRef<SelectLeadingContext<Model>> | undefined>;
117
+ /** Index into the pickable rows, the one keyboard focus sits on. */
118
+ readonly activeIndex: import("@angular/core").WritableSignal<number>;
119
+ readonly listId: string;
120
+ readonly hasSelection: import("@angular/core").Signal<boolean>;
121
+ readonly triggerLabel: import("@angular/core").Signal<string>;
122
+ readonly isEmpty: import("@angular/core").Signal<boolean>;
123
+ /** Tags only replace the trigger text when there's no inline search box. */
124
+ readonly showTags: import("@angular/core").Signal<boolean>;
125
+ readonly showLeading: import("@angular/core").Signal<boolean>;
126
+ /** Typing replaces the chosen item's text, so its leading content sits out the search. */
127
+ readonly leadingHidden: import("@angular/core").Signal<boolean>;
128
+ /** The text to create from, or null when there's nothing to offer. */
129
+ readonly createQuery: import("@angular/core").Signal<string | null>;
130
+ readonly rows: import("@angular/core").Signal<SelectRow<Model>[]>;
131
+ private readonly pickable;
132
+ readonly activeId: import("@angular/core").Signal<string | null>;
133
+ private page;
134
+ private readonly load$;
135
+ private readonly host;
136
+ private readonly injector;
137
+ private readonly destroyRef;
138
+ private readonly cdr;
139
+ constructor();
140
+ private fetchPage;
141
+ private applyResult;
142
+ open(): void;
143
+ toggle(): void;
144
+ select(item: Model): void;
145
+ isSelected(item: Model): boolean;
146
+ toggleItem(item: Model): void;
147
+ removeItem(item: Model): void;
148
+ clear(): void;
149
+ onItemClick(item: Model): void;
150
+ onCreate(): void;
151
+ onKeydown(event: KeyboardEvent): void;
152
+ onFocusOut(event: FocusEvent): void;
153
+ setActive(index: number): void;
154
+ loadFirstPage(): void;
155
+ loadNextPage(): void;
156
+ onQueryChange(query: string): void;
157
+ onScroll(scrollContainer: HTMLElement): void;
158
+ private pickActive;
159
+ private moveActive;
160
+ private scrollActiveIntoView;
161
+ private focusTrigger;
162
+ private searchInput;
163
+ private rowId;
164
+ static ɵfac: i0.ɵɵFactoryDeclaration<UiSelectComponent<any>, never>;
165
+ static ɵcmp: i0.ɵɵComponentDeclaration<UiSelectComponent<any>, "ui-select", never, {
166
+ "placement": {
167
+ "alias": "placement";
168
+ "required": false;
169
+ "isSignal": true;
170
+ };
171
+ "closeBehaviour": {
172
+ "alias": "closeBehaviour";
173
+ "required": false;
174
+ "isSignal": true;
175
+ };
176
+ "dataSource": {
177
+ "alias": "dataSource";
178
+ "required": true;
179
+ "isSignal": true;
180
+ };
181
+ "placeholder": {
182
+ "alias": "placeholder";
183
+ "required": false;
184
+ "isSignal": true;
185
+ };
186
+ "id": {
187
+ "alias": "id";
188
+ "required": false;
189
+ "isSignal": true;
190
+ };
191
+ "describedBy": {
192
+ "alias": "describedBy";
193
+ "required": false;
194
+ "isSignal": true;
195
+ };
196
+ "pageSize": {
197
+ "alias": "pageSize";
198
+ "required": false;
199
+ "isSignal": true;
200
+ };
201
+ "searchMode": {
202
+ "alias": "searchMode";
203
+ "required": false;
204
+ "isSignal": true;
205
+ };
206
+ "disabled": {
207
+ "alias": "disabled";
208
+ "required": false;
209
+ "isSignal": true;
210
+ };
211
+ "validationState": {
212
+ "alias": "validationState";
213
+ "required": false;
214
+ "isSignal": true;
215
+ };
216
+ "clearable": {
217
+ "alias": "clearable";
218
+ "required": false;
219
+ "isSignal": true;
220
+ };
221
+ "clearLabel": {
222
+ "alias": "clearLabel";
223
+ "required": false;
224
+ "isSignal": true;
225
+ };
226
+ "creatable": {
227
+ "alias": "creatable";
228
+ "required": false;
229
+ "isSignal": true;
230
+ };
231
+ "createLabel": {
232
+ "alias": "createLabel";
233
+ "required": false;
234
+ "isSignal": true;
235
+ };
236
+ "groupBy": {
237
+ "alias": "groupBy";
238
+ "required": false;
239
+ "isSignal": true;
240
+ };
241
+ "scrollToSelected": {
242
+ "alias": "scrollToSelected";
243
+ "required": false;
244
+ "isSignal": true;
245
+ };
246
+ "multiple": {
247
+ "alias": "multiple";
248
+ "required": false;
249
+ "isSignal": true;
250
+ };
251
+ "multipleDisplay": {
252
+ "alias": "multipleDisplay";
253
+ "required": false;
254
+ "isSignal": true;
255
+ };
256
+ "counterAfter": {
257
+ "alias": "counterAfter";
258
+ "required": false;
259
+ "isSignal": true;
260
+ };
261
+ "counterLabel": {
262
+ "alias": "counterLabel";
263
+ "required": false;
264
+ "isSignal": true;
265
+ };
266
+ "compareWith": {
267
+ "alias": "compareWith";
268
+ "required": false;
269
+ "isSignal": true;
270
+ };
271
+ "displayWith": {
272
+ "alias": "displayWith";
273
+ "required": false;
274
+ "isSignal": true;
275
+ };
276
+ "selectedItem": {
277
+ "alias": "selectedItem";
278
+ "required": false;
279
+ "isSignal": true;
280
+ };
281
+ "selectedItems": {
282
+ "alias": "selectedItems";
283
+ "required": false;
284
+ "isSignal": true;
285
+ };
286
+ }, {
287
+ "validationState": "validationStateChange";
288
+ "selectionChange": "selectionChange";
289
+ "create": "create";
290
+ "selectedItem": "selectedItemChange";
291
+ "selectedItems": "selectedItemsChange";
292
+ }, ["optionTemplate", "triggerTemplate", "leadingTemplate"], never, true, never>;
293
+ }
@@ -0,0 +1,15 @@
1
+ import * as i0 from "@angular/core";
2
+ export declare class UiSidebarGroupComponent {
3
+ private readonly sidebar;
4
+ readonly label: import("@angular/core").InputSignal<string>;
5
+ protected readonly labelId: string;
6
+ readonly isCollapsed: import("@angular/core").Signal<boolean>;
7
+ static ɵfac: i0.ɵɵFactoryDeclaration<UiSidebarGroupComponent, never>;
8
+ static ɵcmp: i0.ɵɵComponentDeclaration<UiSidebarGroupComponent, "ui-sidebar-group", never, {
9
+ "label": {
10
+ "alias": "label";
11
+ "required": true;
12
+ "isSignal": true;
13
+ };
14
+ }, {}, never, ["*"], true, never>;
15
+ }
@@ -0,0 +1,20 @@
1
+ import * as i0 from "@angular/core";
2
+ export declare class UiSidebarItemComponent {
3
+ private readonly sidebar;
4
+ readonly label: import("@angular/core").InputSignal<string>;
5
+ readonly icon: import("@angular/core").InputSignal<string>;
6
+ readonly isCollapsed: import("@angular/core").Signal<boolean>;
7
+ static ɵfac: i0.ɵɵFactoryDeclaration<UiSidebarItemComponent, never>;
8
+ static ɵcmp: i0.ɵɵComponentDeclaration<UiSidebarItemComponent, "ui-sidebar-item", never, {
9
+ "label": {
10
+ "alias": "label";
11
+ "required": true;
12
+ "isSignal": true;
13
+ };
14
+ "icon": {
15
+ "alias": "icon";
16
+ "required": false;
17
+ "isSignal": true;
18
+ };
19
+ }, {}, never, ["ui-badge"], true, never>;
20
+ }
@@ -0,0 +1,16 @@
1
+ import * as i0 from "@angular/core";
2
+ export declare class UiSidebarComponent {
3
+ readonly isOpen: import("@angular/core").ModelSignal<boolean>;
4
+ readonly isCollapsed: import("@angular/core").Signal<boolean>;
5
+ readonly toggle: () => void;
6
+ static ɵfac: i0.ɵɵFactoryDeclaration<UiSidebarComponent, never>;
7
+ static ɵcmp: i0.ɵɵComponentDeclaration<UiSidebarComponent, "ui-sidebar", ["uiSidebar"], {
8
+ "isOpen": {
9
+ "alias": "isOpen";
10
+ "required": false;
11
+ "isSignal": true;
12
+ };
13
+ }, {
14
+ "isOpen": "isOpenChange";
15
+ }, never, ["*", "[sidebar-footer]"], true, never>;
16
+ }
@@ -0,0 +1,35 @@
1
+ import * as i0 from "@angular/core";
2
+ /**
3
+ * A placeholder shown while content loads. Size it with classes on the
4
+ * element, e.g. `class="w-48"` for text or `class="size-12"` for a circle.
5
+ */
6
+ export declare class UiSkeletonComponent {
7
+ readonly shape: import("@angular/core").InputSignal<"text" | "circle" | "rect">;
8
+ readonly animated: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
9
+ /** Text only, stacks this many lines with a shorter last one. */
10
+ readonly lines: import("@angular/core").InputSignalWithTransform<number, unknown>;
11
+ protected readonly lineIndexes: import("@angular/core").Signal<number[]>;
12
+ readonly generatedClasses: import("@angular/core").Signal<string>;
13
+ static ɵfac: i0.ɵɵFactoryDeclaration<UiSkeletonComponent, never>;
14
+ static ɵcmp: i0.ɵɵComponentDeclaration<UiSkeletonComponent, "ui-skeleton", never, {
15
+ "shape": {
16
+ "alias": "shape";
17
+ "required": false;
18
+ "isSignal": true;
19
+ };
20
+ "animated": {
21
+ "alias": "animated";
22
+ "required": false;
23
+ "isSignal": true;
24
+ };
25
+ "lines": {
26
+ "alias": "lines";
27
+ "required": false;
28
+ "isSignal": true;
29
+ };
30
+ }, {}, never, never, true, never>;
31
+ }
32
+ /** What a skeleton stands in for, lines of text, an avatar or a block. */
33
+ export declare const SkeletonShapes: readonly ["text", "circle", "rect"];
34
+ /** @see {@link SkeletonShapes} */
35
+ export type SkeletonShape = typeof SkeletonShapes[number];
@@ -0,0 +1,13 @@
1
+ import * as i0 from "@angular/core";
2
+ /** Each stat is its own `dl`, so wrap a row of them in a plain div. */
3
+ export declare class UiStatComponent {
4
+ readonly label: import("@angular/core").InputSignal<string>;
5
+ static ɵfac: i0.ɵɵFactoryDeclaration<UiStatComponent, never>;
6
+ static ɵcmp: i0.ɵɵComponentDeclaration<UiStatComponent, "ui-stat", never, {
7
+ "label": {
8
+ "alias": "label";
9
+ "required": true;
10
+ "isSignal": true;
11
+ };
12
+ }, {}, never, ["*", "[stat-change]", "[stat-note]"], true, never>;
13
+ }
@@ -0,0 +1,32 @@
1
+ import * as i0 from "@angular/core";
2
+ export declare class UiSwitchComponent {
3
+ readonly value: import("@angular/core").ModelSignal<boolean>;
4
+ readonly id: import("@angular/core").InputSignal<string>;
5
+ readonly name: import("@angular/core").InputSignal<string>;
6
+ readonly disabled: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
7
+ static ɵfac: i0.ɵɵFactoryDeclaration<UiSwitchComponent, never>;
8
+ static ɵcmp: i0.ɵɵComponentDeclaration<UiSwitchComponent, "ui-switch", never, {
9
+ "value": {
10
+ "alias": "value";
11
+ "required": true;
12
+ "isSignal": true;
13
+ };
14
+ "id": {
15
+ "alias": "id";
16
+ "required": false;
17
+ "isSignal": true;
18
+ };
19
+ "name": {
20
+ "alias": "name";
21
+ "required": false;
22
+ "isSignal": true;
23
+ };
24
+ "disabled": {
25
+ "alias": "disabled";
26
+ "required": false;
27
+ "isSignal": true;
28
+ };
29
+ }, {
30
+ "value": "valueChange";
31
+ }, never, ["*"], true, never>;
32
+ }
@@ -0,0 +1,45 @@
1
+ import * as i0 from "@angular/core";
2
+ import { TemplateRef } from "@angular/core";
3
+ export declare class UiTabDirective {
4
+ label: import("@angular/core").InputSignal<string>;
5
+ disabled: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
6
+ active: import("@angular/core").ModelSignal<boolean>;
7
+ static ɵfac: i0.ɵɵFactoryDeclaration<UiTabDirective, never>;
8
+ static ɵdir: i0.ɵɵDirectiveDeclaration<UiTabDirective, "[uiTab]", never, {
9
+ "label": {
10
+ "alias": "uiTab";
11
+ "required": true;
12
+ "isSignal": true;
13
+ };
14
+ "disabled": {
15
+ "alias": "disabled";
16
+ "required": false;
17
+ "isSignal": true;
18
+ };
19
+ "active": {
20
+ "alias": "active";
21
+ "required": false;
22
+ "isSignal": true;
23
+ };
24
+ }, {
25
+ "active": "activeChange";
26
+ }, never, never, true, never>;
27
+ }
28
+ export type TabButtonAppearance = 'solid' | 'underline';
29
+ export declare class UiTabComponent {
30
+ readonly tabs: import("@angular/core").Signal<readonly UiTabDirective[]>;
31
+ readonly selectedIndex: import("@angular/core").WritableSignal<number>;
32
+ readonly actions: import("@angular/core").Signal<TemplateRef<unknown> | undefined>;
33
+ readonly appearance: import("@angular/core").InputSignal<TabButtonAppearance>;
34
+ readonly generatedButtonClasses: import("@angular/core").Signal<string>;
35
+ constructor();
36
+ select(index: number): void;
37
+ static ɵfac: i0.ɵɵFactoryDeclaration<UiTabComponent, never>;
38
+ static ɵcmp: i0.ɵɵComponentDeclaration<UiTabComponent, "ui-tab", never, {
39
+ "appearance": {
40
+ "alias": "appearance";
41
+ "required": false;
42
+ "isSignal": true;
43
+ };
44
+ }, {}, ["tabs", "actions"], ["*"], true, never>;
45
+ }
@@ -0,0 +1,138 @@
1
+ import { DateRange, IsoDate } from "@area8975/ui/calendar";
2
+ import { DateRangePreset } from "@area8975/ui/date-range-picker";
3
+ import * as i0 from "@angular/core";
4
+ export declare const TableFiltersBreakpoints: {
5
+ readonly sm: "40rem";
6
+ readonly md: "48rem";
7
+ readonly lg: "64rem";
8
+ readonly xl: "80rem";
9
+ readonly '2xl': "96rem";
10
+ };
11
+ /** @see {@link TableFiltersBreakpoints} */
12
+ export type TableFiltersBreakpoint = keyof typeof TableFiltersBreakpoints;
13
+ export interface TableFacetOption {
14
+ value: unknown;
15
+ label: string;
16
+ }
17
+ /** Writes the picked value, or an array when `multiple`, under `id`. */
18
+ export interface TableOptionsFacet {
19
+ id: string;
20
+ label: string;
21
+ kind: 'options';
22
+ options: TableFacetOption[];
23
+ multiple?: boolean;
24
+ /** Shows this many options, plus any picked, then a "Show N more" toggle. Leave out to show them all. */
25
+ visibleOptions?: number;
26
+ }
27
+ /** Writes `{ start, end }` ISO dates under `id`. */
28
+ export interface TableDateRangeFacet {
29
+ id: string;
30
+ label: string;
31
+ kind: 'dateRange';
32
+ /** Quick picks, see date-range-presets.ts for ready made ones. */
33
+ presets?: DateRangePreset[];
34
+ placeholder?: string;
35
+ min?: IsoDate | null;
36
+ max?: IsoDate | null;
37
+ }
38
+ /** Either end is null when it's open. */
39
+ export interface TableAmountRange {
40
+ min: number | null;
41
+ max: number | null;
42
+ }
43
+ export interface TableAmountRangePreset {
44
+ label: string;
45
+ range: TableAmountRange;
46
+ }
47
+ /** Writes `{ min, max }` under `id`, both ends included, with at least one of them set. */
48
+ export interface TableAmountRangeFacet {
49
+ id: string;
50
+ label: string;
51
+ kind: 'amountRange';
52
+ presets?: TableAmountRangePreset[];
53
+ /** Shown before each amount, such as a currency symbol. */
54
+ prefix?: string;
55
+ }
56
+ export type TableFacet = TableOptionsFacet | TableDateRangeFacet | TableAmountRangeFacet;
57
+ export type TableFacetDateRange = DateRange;
58
+ type Filters = Record<string, unknown>;
59
+ type RangeMode = 'any' | 'custom' | number;
60
+ type AmountEnd = keyof TableAmountRange;
61
+ export declare class UiTableFiltersComponent {
62
+ private readonly registry;
63
+ readonly facets: import("@angular/core").InputSignal<TableFacet[]>;
64
+ /** The `tableId` of a ui-table to filter, it can render before or after this. */
65
+ readonly table: import("@angular/core").InputSignal<string | null>;
66
+ readonly value: import("@angular/core").ModelSignal<Filters>;
67
+ /** Below this breakpoint the panel becomes a Filters button and a drawer. */
68
+ readonly collapseBelow: import("@angular/core").InputSignal<"sm" | "md" | "lg" | "xl" | "2xl">;
69
+ protected readonly idPrefix: string;
70
+ protected readonly anyRange: RangeMode;
71
+ protected readonly customRange: RangeMode;
72
+ private readonly customRanges;
73
+ private readonly amountDrafts;
74
+ private readonly expanded;
75
+ private readonly linked;
76
+ protected readonly appliedCount: import("@angular/core").Signal<number>;
77
+ protected readonly anyApplied: import("@angular/core").Signal<boolean>;
78
+ private readonly window;
79
+ protected readonly wide: import("@angular/core").WritableSignal<boolean>;
80
+ constructor();
81
+ protected groupName(facet: TableFacet): string;
82
+ protected choiceId(facet: TableFacet, choice: number | string): string;
83
+ protected picked(facet: TableOptionsFacet): unknown;
84
+ protected pick(facet: TableOptionsFacet, value: unknown): void;
85
+ protected isChecked(facet: TableOptionsFacet, option: TableFacetOption): boolean;
86
+ protected check(facet: TableOptionsFacet, option: TableFacetOption, checked: boolean): void;
87
+ protected isExpanded(facet: TableOptionsFacet): boolean;
88
+ protected isShown(facet: TableOptionsFacet, option: TableFacetOption, index: number): boolean;
89
+ /** How many options collapsing hides, 0 when there's nothing to toggle. */
90
+ protected hiddenCount(facet: TableOptionsFacet): number;
91
+ protected toggleExpanded(facet: TableOptionsFacet): void;
92
+ protected range(facet: TableDateRangeFacet): DateRange;
93
+ protected dateMode(facet: TableDateRangeFacet): RangeMode;
94
+ protected pickDate(facet: TableDateRangeFacet, mode: RangeMode): void;
95
+ protected setRange(facet: TableDateRangeFacet, range: DateRange): void;
96
+ protected amountRange(facet: TableAmountRangeFacet): TableAmountRange | undefined;
97
+ protected amountMode(facet: TableAmountRangeFacet): RangeMode;
98
+ protected pickAmount(facet: TableAmountRangeFacet, mode: RangeMode): void;
99
+ protected amountText(facet: TableAmountRangeFacet, end: AmountEnd): string;
100
+ protected typeAmount(facet: TableAmountRangeFacet, end: AmountEnd, text: string): void;
101
+ protected isAmountValid(facet: TableAmountRangeFacet, end: AmountEnd): boolean;
102
+ protected clearAll(): void;
103
+ private setCustom;
104
+ private forgetAmountDraft;
105
+ private isPastCutoff;
106
+ private isSelected;
107
+ private apply;
108
+ private write;
109
+ private currentFilters;
110
+ private ownFilters;
111
+ private withoutOwn;
112
+ private hasAny;
113
+ static ɵfac: i0.ɵɵFactoryDeclaration<UiTableFiltersComponent, never>;
114
+ static ɵcmp: i0.ɵɵComponentDeclaration<UiTableFiltersComponent, "ui-table-filters", never, {
115
+ "facets": {
116
+ "alias": "facets";
117
+ "required": true;
118
+ "isSignal": true;
119
+ };
120
+ "table": {
121
+ "alias": "table";
122
+ "required": false;
123
+ "isSignal": true;
124
+ };
125
+ "value": {
126
+ "alias": "value";
127
+ "required": false;
128
+ "isSignal": true;
129
+ };
130
+ "collapseBelow": {
131
+ "alias": "collapseBelow";
132
+ "required": false;
133
+ "isSignal": true;
134
+ };
135
+ }, {
136
+ "value": "valueChange";
137
+ }, never, never, true, never>;
138
+ }