@momentumcms/ui 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +7 -0
- package/fesm2022/momentumcms-ui.mjs +10216 -0
- package/fesm2022/momentumcms-ui.mjs.map +1 -0
- package/package.json +44 -0
- package/types/momentumcms-ui.d.ts +3284 -0
|
@@ -0,0 +1,3284 @@
|
|
|
1
|
+
import * as _angular_core from '@angular/core';
|
|
2
|
+
import { OnDestroy, TemplateRef, InjectionToken, ComponentRef, Type, OnInit, Signal, Provider } from '@angular/core';
|
|
3
|
+
import { ConnectedPosition, OverlayRef } from '@angular/cdk/overlay';
|
|
4
|
+
import * as i1 from '@angular/aria/menu';
|
|
5
|
+
import { Menu, MenuItem, MenuBar } from '@angular/aria/menu';
|
|
6
|
+
import * as rxjs from 'rxjs';
|
|
7
|
+
import * as _momentumcms_ui from '@momentumcms/ui';
|
|
8
|
+
import * as i1$1 from '@angular/aria/tabs';
|
|
9
|
+
import { TabPanel } from '@angular/aria/tabs';
|
|
10
|
+
import * as i1$2 from '@angular/aria/accordion';
|
|
11
|
+
import { AccordionTrigger as AccordionTrigger$1, AccordionPanel } from '@angular/aria/accordion';
|
|
12
|
+
import * as i1$3 from '@angular/aria/grid';
|
|
13
|
+
import * as i1$4 from '@angular/aria/listbox';
|
|
14
|
+
import * as i1$5 from '@angular/aria/toolbar';
|
|
15
|
+
import { Toolbar as Toolbar$1, ToolbarWidget as ToolbarWidget$1, ToolbarWidgetGroup as ToolbarWidgetGroup$1 } from '@angular/aria/toolbar';
|
|
16
|
+
import * as i1$6 from '@angular/aria/tree';
|
|
17
|
+
import { Tree as Tree$1, TreeItem as TreeItem$1, TreeItemGroup } from '@angular/aria/tree';
|
|
18
|
+
|
|
19
|
+
type BadgeVariant = 'default' | 'secondary' | 'destructive' | 'outline' | 'success' | 'warning';
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Badge component for status indicators, counts, and labels.
|
|
23
|
+
*
|
|
24
|
+
* Usage:
|
|
25
|
+
* ```html
|
|
26
|
+
* <mcms-badge>Default</mcms-badge>
|
|
27
|
+
* <mcms-badge variant="success">Active</mcms-badge>
|
|
28
|
+
* <mcms-badge variant="destructive">Error</mcms-badge>
|
|
29
|
+
* <mcms-badge variant="warning">Pending</mcms-badge>
|
|
30
|
+
* ```
|
|
31
|
+
*/
|
|
32
|
+
declare class Badge {
|
|
33
|
+
readonly variant: _angular_core.InputSignal<BadgeVariant>;
|
|
34
|
+
readonly class: _angular_core.InputSignal<string>;
|
|
35
|
+
/** Accessible label for screen reader override. */
|
|
36
|
+
readonly ariaLabel: _angular_core.InputSignal<string | undefined>;
|
|
37
|
+
readonly hostClass: _angular_core.Signal<string>;
|
|
38
|
+
readonly variantBg: _angular_core.Signal<string>;
|
|
39
|
+
readonly variantColor: _angular_core.Signal<string>;
|
|
40
|
+
readonly variantBorder: _angular_core.Signal<string>;
|
|
41
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<Badge, never>;
|
|
42
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<Badge, "mcms-badge", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Label component for form fields.
|
|
47
|
+
*
|
|
48
|
+
* Usage:
|
|
49
|
+
* ```html
|
|
50
|
+
* <mcms-label for="email" [required]="true">Email Address</mcms-label>
|
|
51
|
+
* <mcms-input id="email" />
|
|
52
|
+
* ```
|
|
53
|
+
*/
|
|
54
|
+
declare class Label {
|
|
55
|
+
readonly for: _angular_core.InputSignal<string | undefined>;
|
|
56
|
+
readonly required: _angular_core.InputSignal<boolean>;
|
|
57
|
+
readonly disabled: _angular_core.InputSignal<boolean>;
|
|
58
|
+
readonly class: _angular_core.InputSignal<string>;
|
|
59
|
+
private readonly baseClasses;
|
|
60
|
+
readonly hostClasses: _angular_core.Signal<string>;
|
|
61
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<Label, never>;
|
|
62
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<Label, "mcms-label", never, { "for": { "alias": "for"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
type ButtonVariant = 'primary' | 'secondary' | 'destructive' | 'outline' | 'ghost' | 'link';
|
|
66
|
+
type ButtonSize = 'sm' | 'md' | 'lg' | 'icon';
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Button component with multiple variants and sizes.
|
|
70
|
+
*
|
|
71
|
+
* Usage:
|
|
72
|
+
* ```html
|
|
73
|
+
* <button mcms-button>Default</button>
|
|
74
|
+
* <button mcms-button variant="destructive">Delete</button>
|
|
75
|
+
* <button mcms-button variant="outline" size="sm">Small</button>
|
|
76
|
+
* <a mcms-button [disabled]="true">Disabled Link</a>
|
|
77
|
+
* <button mcms-button [loading]="true">Saving...</button>
|
|
78
|
+
* <button mcms-button size="icon" ariaLabel="Settings"><svg>...</svg></button>
|
|
79
|
+
* ```
|
|
80
|
+
*/
|
|
81
|
+
declare class Button {
|
|
82
|
+
private readonly el;
|
|
83
|
+
/** Whether the host element is an anchor tag (determined once at construction). */
|
|
84
|
+
private readonly isAnchor;
|
|
85
|
+
readonly variant: _angular_core.InputSignal<ButtonVariant>;
|
|
86
|
+
readonly size: _angular_core.InputSignal<ButtonSize>;
|
|
87
|
+
readonly disabled: _angular_core.InputSignal<boolean>;
|
|
88
|
+
readonly loading: _angular_core.InputSignal<boolean>;
|
|
89
|
+
readonly ariaLabel: _angular_core.InputSignal<string | undefined>;
|
|
90
|
+
readonly class: _angular_core.InputSignal<string>;
|
|
91
|
+
constructor();
|
|
92
|
+
/** Whether the button is effectively disabled (disabled or loading). */
|
|
93
|
+
readonly isEffectivelyDisabled: _angular_core.Signal<boolean>;
|
|
94
|
+
/**
|
|
95
|
+
* Native disabled attribute — only applied to `<button>` elements.
|
|
96
|
+
* `<a>` elements don't support `disabled`; they use `aria-disabled` instead.
|
|
97
|
+
*/
|
|
98
|
+
readonly isNativeDisabled: _angular_core.Signal<true | null>;
|
|
99
|
+
readonly sizeHeight: _angular_core.Signal<"2.25rem" | "2.5rem" | "2.75rem">;
|
|
100
|
+
readonly sizePadding: _angular_core.Signal<"0 0.75rem" | "0.5rem 1rem" | "0 2rem" | "0">;
|
|
101
|
+
readonly sizeWidth: _angular_core.Signal<"2.5rem" | null>;
|
|
102
|
+
readonly variantBg: _angular_core.Signal<"hsl(var(--mcms-primary))" | "hsl(var(--mcms-secondary))" | "hsl(var(--mcms-destructive))" | "transparent" | "hsl(var(--mcms-background))">;
|
|
103
|
+
readonly variantColor: _angular_core.Signal<"hsl(var(--mcms-primary))" | "hsl(var(--mcms-primary-foreground))" | "hsl(var(--mcms-secondary-foreground))" | "hsl(var(--mcms-destructive-foreground))" | "hsl(var(--mcms-foreground))">;
|
|
104
|
+
readonly variantHoverBg: _angular_core.Signal<"transparent" | "hsl(var(--mcms-primary) / 0.9)" | "hsl(var(--mcms-secondary) / 0.8)" | "hsl(var(--mcms-destructive) / 0.9)" | "hsl(var(--mcms-accent))">;
|
|
105
|
+
readonly variantBorder: _angular_core.Signal<"transparent" | "hsl(var(--mcms-border))">;
|
|
106
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<Button, never>;
|
|
107
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<Button, "button[mcms-button], a[mcms-button]", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* Validation error from Signal Forms
|
|
112
|
+
*/
|
|
113
|
+
interface ValidationError {
|
|
114
|
+
kind: string;
|
|
115
|
+
message?: string;
|
|
116
|
+
[key: string]: unknown;
|
|
117
|
+
}
|
|
118
|
+
type InputType = 'text' | 'email' | 'password' | 'number' | 'tel' | 'url' | 'search';
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* Text input component compatible with Angular Signal Forms.
|
|
122
|
+
*
|
|
123
|
+
* Implements FormValueControl<string> interface for use with [formField] directive.
|
|
124
|
+
*
|
|
125
|
+
* Usage:
|
|
126
|
+
* ```html
|
|
127
|
+
* <mcms-input [formField]="myForm.email" type="email" placeholder="Enter email" />
|
|
128
|
+
* ```
|
|
129
|
+
*/
|
|
130
|
+
declare class Input {
|
|
131
|
+
/** Two-way bound value - Signal Forms binds to this automatically */
|
|
132
|
+
readonly value: _angular_core.ModelSignal<string>;
|
|
133
|
+
/** Disabled state - Signal Forms passes this from field.disabled() */
|
|
134
|
+
readonly disabled: _angular_core.InputSignal<boolean>;
|
|
135
|
+
/** Validation errors - Signal Forms passes this from field.errors() */
|
|
136
|
+
readonly errors: _angular_core.InputSignal<readonly ValidationError[]>;
|
|
137
|
+
/** Whether the field has been interacted with (set by [formField] directive) */
|
|
138
|
+
readonly touched: _angular_core.InputSignal<boolean>;
|
|
139
|
+
/** Whether the field is invalid (set by [formField] directive) */
|
|
140
|
+
readonly invalid: _angular_core.InputSignal<boolean>;
|
|
141
|
+
/** Whether the field is readonly (set by [formField] directive) */
|
|
142
|
+
readonly readonly: _angular_core.InputSignal<boolean>;
|
|
143
|
+
/** Whether the field is required (set by [formField] directive) */
|
|
144
|
+
readonly required: _angular_core.InputSignal<boolean>;
|
|
145
|
+
readonly type: _angular_core.InputSignal<InputType>;
|
|
146
|
+
readonly id: _angular_core.InputSignal<string>;
|
|
147
|
+
readonly name: _angular_core.InputSignal<string>;
|
|
148
|
+
readonly placeholder: _angular_core.InputSignal<string>;
|
|
149
|
+
readonly autocomplete: _angular_core.InputSignal<string | undefined>;
|
|
150
|
+
readonly describedBy: _angular_core.InputSignal<string | undefined>;
|
|
151
|
+
readonly min: _angular_core.InputSignal<number | undefined>;
|
|
152
|
+
readonly max: _angular_core.InputSignal<number | undefined>;
|
|
153
|
+
readonly step: _angular_core.InputSignal<number | undefined>;
|
|
154
|
+
/** Emitted when the input loses focus */
|
|
155
|
+
readonly blurred: _angular_core.OutputEmitterRef<void>;
|
|
156
|
+
readonly hasError: _angular_core.Signal<boolean>;
|
|
157
|
+
readonly ariaDescribedBy: _angular_core.Signal<string | null>;
|
|
158
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<Input, never>;
|
|
159
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<Input, "mcms-input", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "errors": { "alias": "errors"; "required": false; "isSignal": true; }; "touched": { "alias": "touched"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "autocomplete": { "alias": "autocomplete"; "required": false; "isSignal": true; }; "describedBy": { "alias": "describedBy"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "step": { "alias": "step"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "blurred": "blurred"; }, never, never, true, never>;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* Textarea component compatible with Angular Signal Forms.
|
|
164
|
+
*
|
|
165
|
+
* Implements FormValueControl<string> interface for use with [formField] directive.
|
|
166
|
+
*
|
|
167
|
+
* Usage:
|
|
168
|
+
* ```html
|
|
169
|
+
* <mcms-textarea [formField]="myForm.description" placeholder="Enter description" />
|
|
170
|
+
* ```
|
|
171
|
+
*/
|
|
172
|
+
declare class Textarea {
|
|
173
|
+
readonly value: _angular_core.ModelSignal<string>;
|
|
174
|
+
readonly disabled: _angular_core.InputSignal<boolean>;
|
|
175
|
+
readonly errors: _angular_core.InputSignal<readonly ValidationError[]>;
|
|
176
|
+
readonly touched: _angular_core.InputSignal<boolean>;
|
|
177
|
+
readonly invalid: _angular_core.InputSignal<boolean>;
|
|
178
|
+
readonly readonly: _angular_core.InputSignal<boolean>;
|
|
179
|
+
readonly required: _angular_core.InputSignal<boolean>;
|
|
180
|
+
readonly id: _angular_core.InputSignal<string>;
|
|
181
|
+
readonly name: _angular_core.InputSignal<string>;
|
|
182
|
+
readonly placeholder: _angular_core.InputSignal<string>;
|
|
183
|
+
readonly rows: _angular_core.InputSignal<number>;
|
|
184
|
+
readonly describedBy: _angular_core.InputSignal<string | undefined>;
|
|
185
|
+
/** Emitted when the textarea loses focus */
|
|
186
|
+
readonly blurred: _angular_core.OutputEmitterRef<void>;
|
|
187
|
+
readonly hasError: _angular_core.Signal<boolean>;
|
|
188
|
+
readonly ariaDescribedBy: _angular_core.Signal<string | null>;
|
|
189
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<Textarea, never>;
|
|
190
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<Textarea, "mcms-textarea", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "errors": { "alias": "errors"; "required": false; "isSignal": true; }; "touched": { "alias": "touched"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "rows": { "alias": "rows"; "required": false; "isSignal": true; }; "describedBy": { "alias": "describedBy"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "blurred": "blurred"; }, never, never, true, never>;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
/**
|
|
194
|
+
* Checkbox component compatible with Angular Signal Forms.
|
|
195
|
+
*
|
|
196
|
+
* Implements FormValueControl<boolean> interface for use with [formField] directive.
|
|
197
|
+
*
|
|
198
|
+
* Usage:
|
|
199
|
+
* ```html
|
|
200
|
+
* <mcms-checkbox [formField]="myForm.acceptTerms">Accept Terms</mcms-checkbox>
|
|
201
|
+
* ```
|
|
202
|
+
*/
|
|
203
|
+
declare class Checkbox {
|
|
204
|
+
readonly value: _angular_core.ModelSignal<boolean>;
|
|
205
|
+
readonly disabled: _angular_core.InputSignal<boolean>;
|
|
206
|
+
readonly errors: _angular_core.InputSignal<readonly ValidationError[]>;
|
|
207
|
+
readonly touched: _angular_core.InputSignal<boolean>;
|
|
208
|
+
readonly invalid: _angular_core.InputSignal<boolean>;
|
|
209
|
+
readonly readonly: _angular_core.InputSignal<boolean>;
|
|
210
|
+
readonly required: _angular_core.InputSignal<boolean>;
|
|
211
|
+
readonly id: _angular_core.InputSignal<string>;
|
|
212
|
+
readonly describedBy: _angular_core.InputSignal<string | undefined>;
|
|
213
|
+
/** Shows a horizontal dash instead of check mark (used for partial selections). */
|
|
214
|
+
readonly indeterminate: _angular_core.InputSignal<boolean>;
|
|
215
|
+
/** Accessible label for the checkbox button (for use without visible label). */
|
|
216
|
+
readonly ariaLabel: _angular_core.InputSignal<string | undefined>;
|
|
217
|
+
readonly hasError: _angular_core.Signal<boolean>;
|
|
218
|
+
readonly ariaDescribedBy: _angular_core.Signal<string | null>;
|
|
219
|
+
toggle(): void;
|
|
220
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<Checkbox, never>;
|
|
221
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<Checkbox, "mcms-checkbox", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "errors": { "alias": "errors"; "required": false; "isSignal": true; }; "touched": { "alias": "touched"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "describedBy": { "alias": "describedBy"; "required": false; "isSignal": true; }; "indeterminate": { "alias": "indeterminate"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, ["*"], true, never>;
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
/**
|
|
225
|
+
* Toggle switch component compatible with Angular Signal Forms.
|
|
226
|
+
*
|
|
227
|
+
* Implements FormValueControl<boolean> interface for use with [formField] directive.
|
|
228
|
+
*
|
|
229
|
+
* Usage:
|
|
230
|
+
* ```html
|
|
231
|
+
* <mcms-switch [formField]="myForm.enabled">Enable notifications</mcms-switch>
|
|
232
|
+
* ```
|
|
233
|
+
*/
|
|
234
|
+
declare class Switch {
|
|
235
|
+
readonly value: _angular_core.ModelSignal<boolean>;
|
|
236
|
+
readonly disabled: _angular_core.InputSignal<boolean>;
|
|
237
|
+
readonly errors: _angular_core.InputSignal<readonly ValidationError[]>;
|
|
238
|
+
readonly id: _angular_core.InputSignal<string>;
|
|
239
|
+
readonly describedBy: _angular_core.InputSignal<string | undefined>;
|
|
240
|
+
readonly hasLabel: _angular_core.InputSignal<boolean>;
|
|
241
|
+
readonly hasError: _angular_core.Signal<boolean>;
|
|
242
|
+
readonly ariaDescribedBy: _angular_core.Signal<string | null>;
|
|
243
|
+
toggle(): void;
|
|
244
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<Switch, never>;
|
|
245
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<Switch, "mcms-switch", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "errors": { "alias": "errors"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "describedBy": { "alias": "describedBy"; "required": false; "isSignal": true; }; "hasLabel": { "alias": "hasLabel"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, ["*"], true, never>;
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
interface SelectOption {
|
|
249
|
+
value: string;
|
|
250
|
+
label: string;
|
|
251
|
+
disabled?: boolean;
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
/**
|
|
255
|
+
* Select dropdown component compatible with Angular Signal Forms.
|
|
256
|
+
*
|
|
257
|
+
* Implements FormValueControl<string> interface for use with [formField] directive.
|
|
258
|
+
*
|
|
259
|
+
* Usage:
|
|
260
|
+
* ```html
|
|
261
|
+
* <mcms-select [formField]="myForm.status" [options]="statusOptions" placeholder="Select status" />
|
|
262
|
+
* ```
|
|
263
|
+
*/
|
|
264
|
+
declare class Select {
|
|
265
|
+
readonly value: _angular_core.ModelSignal<string>;
|
|
266
|
+
readonly disabled: _angular_core.InputSignal<boolean>;
|
|
267
|
+
readonly errors: _angular_core.InputSignal<readonly ValidationError[]>;
|
|
268
|
+
readonly touched: _angular_core.InputSignal<boolean>;
|
|
269
|
+
readonly invalid: _angular_core.InputSignal<boolean>;
|
|
270
|
+
readonly readonly: _angular_core.InputSignal<boolean>;
|
|
271
|
+
readonly required: _angular_core.InputSignal<boolean>;
|
|
272
|
+
/** Emitted when the select loses focus */
|
|
273
|
+
readonly blurred: _angular_core.OutputEmitterRef<void>;
|
|
274
|
+
readonly id: _angular_core.InputSignal<string>;
|
|
275
|
+
readonly name: _angular_core.InputSignal<string>;
|
|
276
|
+
readonly placeholder: _angular_core.InputSignal<string>;
|
|
277
|
+
readonly options: _angular_core.InputSignal<SelectOption[]>;
|
|
278
|
+
readonly describedBy: _angular_core.InputSignal<string | undefined>;
|
|
279
|
+
/** Accessible label for the select element. */
|
|
280
|
+
readonly ariaLabel: _angular_core.InputSignal<string | undefined>;
|
|
281
|
+
readonly hasError: _angular_core.Signal<boolean>;
|
|
282
|
+
readonly ariaDescribedBy: _angular_core.Signal<string | null>;
|
|
283
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<Select, never>;
|
|
284
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<Select, "mcms-select", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "errors": { "alias": "errors"; "required": false; "isSignal": true; }; "touched": { "alias": "touched"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "required": false; "isSignal": true; }; "describedBy": { "alias": "describedBy"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "blurred": "blurred"; }, never, never, true, never>;
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
interface RadioOption {
|
|
288
|
+
value: string;
|
|
289
|
+
label: string;
|
|
290
|
+
disabled?: boolean;
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
/**
|
|
294
|
+
* Radio group component compatible with Angular Signal Forms.
|
|
295
|
+
*
|
|
296
|
+
* Implements FormValueControl<string> interface for use with [formField] directive.
|
|
297
|
+
*
|
|
298
|
+
* Usage:
|
|
299
|
+
* ```html
|
|
300
|
+
* <mcms-radio-group [formField]="myForm.role" [options]="roleOptions" />
|
|
301
|
+
* ```
|
|
302
|
+
*/
|
|
303
|
+
declare class RadioGroup {
|
|
304
|
+
private readonly elementRef;
|
|
305
|
+
readonly value: _angular_core.ModelSignal<string>;
|
|
306
|
+
readonly disabled: _angular_core.InputSignal<boolean>;
|
|
307
|
+
readonly errors: _angular_core.InputSignal<readonly ValidationError[]>;
|
|
308
|
+
readonly id: _angular_core.InputSignal<string>;
|
|
309
|
+
readonly name: _angular_core.InputSignal<string>;
|
|
310
|
+
readonly options: _angular_core.InputSignal<RadioOption[]>;
|
|
311
|
+
readonly describedBy: _angular_core.InputSignal<string | undefined>;
|
|
312
|
+
readonly required: _angular_core.InputSignal<boolean>;
|
|
313
|
+
readonly hasError: _angular_core.Signal<boolean>;
|
|
314
|
+
readonly ariaDescribedBy: _angular_core.Signal<string | null>;
|
|
315
|
+
/** Determines which option value should receive tabindex="0" (roving tabindex). */
|
|
316
|
+
protected readonly focusableValue: _angular_core.Signal<string>;
|
|
317
|
+
selectOption(optionValue: string): void;
|
|
318
|
+
protected onKeydown(event: KeyboardEvent): void;
|
|
319
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<RadioGroup, never>;
|
|
320
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<RadioGroup, "mcms-radio-group", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "errors": { "alias": "errors"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "required": false; "isSignal": true; }; "describedBy": { "alias": "describedBy"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, never, true, never>;
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
/**
|
|
324
|
+
* Form field wrapper that combines label, input, and error display.
|
|
325
|
+
*
|
|
326
|
+
* Usage:
|
|
327
|
+
* ```html
|
|
328
|
+
* <mcms-form-field id="email" [required]="true" [errors]="loginForm.email().errors()">
|
|
329
|
+
* <span mcmsLabel>Email Address</span>
|
|
330
|
+
* <mcms-input [formField]="loginForm.email" />
|
|
331
|
+
* </mcms-form-field>
|
|
332
|
+
* ```
|
|
333
|
+
*/
|
|
334
|
+
declare class McmsFormField {
|
|
335
|
+
readonly id: _angular_core.InputSignal<string>;
|
|
336
|
+
readonly required: _angular_core.InputSignal<boolean>;
|
|
337
|
+
readonly disabled: _angular_core.InputSignal<boolean>;
|
|
338
|
+
readonly errors: _angular_core.InputSignal<readonly ValidationError[]>;
|
|
339
|
+
readonly hint: _angular_core.InputSignal<string | undefined>;
|
|
340
|
+
readonly hasLabel: _angular_core.InputSignal<boolean>;
|
|
341
|
+
readonly errorId: _angular_core.Signal<string>;
|
|
342
|
+
readonly showError: _angular_core.Signal<boolean>;
|
|
343
|
+
readonly errorMessage: _angular_core.Signal<string | null>;
|
|
344
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<McmsFormField, never>;
|
|
345
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<McmsFormField, "mcms-form-field", never, { "id": { "alias": "id"; "required": true; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "errors": { "alias": "errors"; "required": false; "isSignal": true; }; "hint": { "alias": "hint"; "required": false; "isSignal": true; }; "hasLabel": { "alias": "hasLabel"; "required": false; "isSignal": true; }; }, {}, never, ["[mcmsLabel]", "*"], true, never>;
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
/**
|
|
349
|
+
* Card container component.
|
|
350
|
+
*
|
|
351
|
+
* Usage:
|
|
352
|
+
* ```html
|
|
353
|
+
* <mcms-card>
|
|
354
|
+
* <mcms-card-header>
|
|
355
|
+
* <mcms-card-title>Title</mcms-card-title>
|
|
356
|
+
* <mcms-card-description>Description</mcms-card-description>
|
|
357
|
+
* </mcms-card-header>
|
|
358
|
+
* <mcms-card-content>Content here</mcms-card-content>
|
|
359
|
+
* <mcms-card-footer>Footer</mcms-card-footer>
|
|
360
|
+
* </mcms-card>
|
|
361
|
+
* ```
|
|
362
|
+
*/
|
|
363
|
+
declare class Card {
|
|
364
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<Card, never>;
|
|
365
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<Card, "mcms-card", never, {}, {}, never, ["*"], true, never>;
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
declare class CardHeader {
|
|
369
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<CardHeader, never>;
|
|
370
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<CardHeader, "mcms-card-header", never, {}, {}, never, ["*"], true, never>;
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
declare class CardTitle {
|
|
374
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<CardTitle, never>;
|
|
375
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<CardTitle, "mcms-card-title", never, {}, {}, never, ["*"], true, never>;
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
declare class CardDescription {
|
|
379
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<CardDescription, never>;
|
|
380
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<CardDescription, "mcms-card-description", never, {}, {}, never, ["*"], true, never>;
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
declare class CardContent {
|
|
384
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<CardContent, never>;
|
|
385
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<CardContent, "mcms-card-content", never, {}, {}, never, ["*"], true, never>;
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
declare class CardFooter {
|
|
389
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<CardFooter, never>;
|
|
390
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<CardFooter, "mcms-card-footer", never, {}, {}, never, ["*"], true, never>;
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
type AlertVariant = 'default' | 'destructive' | 'success' | 'warning' | 'info';
|
|
394
|
+
|
|
395
|
+
/**
|
|
396
|
+
* Alert component for displaying important messages.
|
|
397
|
+
*
|
|
398
|
+
* Usage:
|
|
399
|
+
* ```html
|
|
400
|
+
* <mcms-alert>
|
|
401
|
+
* <mcms-alert-title>Heads up!</mcms-alert-title>
|
|
402
|
+
* <mcms-alert-description>
|
|
403
|
+
* You can add components to your app using the cli.
|
|
404
|
+
* </mcms-alert-description>
|
|
405
|
+
* </mcms-alert>
|
|
406
|
+
*
|
|
407
|
+
* <mcms-alert variant="destructive">
|
|
408
|
+
* <mcms-alert-title>Error</mcms-alert-title>
|
|
409
|
+
* <mcms-alert-description>Something went wrong.</mcms-alert-description>
|
|
410
|
+
* </mcms-alert>
|
|
411
|
+
* ```
|
|
412
|
+
*/
|
|
413
|
+
declare class Alert {
|
|
414
|
+
readonly variant: _angular_core.InputSignal<AlertVariant>;
|
|
415
|
+
readonly class: _angular_core.InputSignal<string>;
|
|
416
|
+
readonly hostClass: _angular_core.Signal<string>;
|
|
417
|
+
readonly ariaLive: _angular_core.Signal<"assertive" | "polite">;
|
|
418
|
+
readonly variantBg: _angular_core.Signal<string>;
|
|
419
|
+
readonly variantBorder: _angular_core.Signal<string>;
|
|
420
|
+
readonly variantColor: _angular_core.Signal<string>;
|
|
421
|
+
readonly variantIconColor: _angular_core.Signal<string>;
|
|
422
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<Alert, never>;
|
|
423
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<Alert, "mcms-alert", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
/**
|
|
427
|
+
* Alert title component.
|
|
428
|
+
*
|
|
429
|
+
* Usage:
|
|
430
|
+
* ```html
|
|
431
|
+
* <mcms-alert-title>Important!</mcms-alert-title>
|
|
432
|
+
* ```
|
|
433
|
+
*/
|
|
434
|
+
declare class AlertTitle {
|
|
435
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AlertTitle, never>;
|
|
436
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AlertTitle, "mcms-alert-title", never, {}, {}, never, ["*"], true, never>;
|
|
437
|
+
}
|
|
438
|
+
|
|
439
|
+
/**
|
|
440
|
+
* Alert description component.
|
|
441
|
+
*
|
|
442
|
+
* Usage:
|
|
443
|
+
* ```html
|
|
444
|
+
* <mcms-alert-description>
|
|
445
|
+
* This is a detailed description of the alert.
|
|
446
|
+
* </mcms-alert-description>
|
|
447
|
+
* ```
|
|
448
|
+
*/
|
|
449
|
+
declare class AlertDescription {
|
|
450
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AlertDescription, never>;
|
|
451
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AlertDescription, "mcms-alert-description", never, {}, {}, never, ["*"], true, never>;
|
|
452
|
+
}
|
|
453
|
+
|
|
454
|
+
type TooltipPosition = 'top' | 'right' | 'bottom' | 'left';
|
|
455
|
+
declare const TOOLTIP_POSITION_MAP: Record<TooltipPosition, ConnectedPosition[]>;
|
|
456
|
+
|
|
457
|
+
/**
|
|
458
|
+
* Tooltip trigger directive.
|
|
459
|
+
*
|
|
460
|
+
* Apply this directive to any element to show a tooltip on hover/focus.
|
|
461
|
+
*
|
|
462
|
+
* Usage:
|
|
463
|
+
* ```html
|
|
464
|
+
* <button [mcmsTooltip]="'Click to save'">Save</button>
|
|
465
|
+
* <button [mcmsTooltip]="'Delete item'" tooltipPosition="right">Delete</button>
|
|
466
|
+
* ```
|
|
467
|
+
*/
|
|
468
|
+
declare class TooltipTrigger implements OnDestroy {
|
|
469
|
+
readonly mcmsTooltip: _angular_core.InputSignal<string>;
|
|
470
|
+
readonly tooltipPosition: _angular_core.InputSignal<TooltipPosition>;
|
|
471
|
+
readonly tooltipDelay: _angular_core.InputSignal<number>;
|
|
472
|
+
readonly tooltipDisabled: _angular_core.InputSignal<boolean>;
|
|
473
|
+
private readonly overlay;
|
|
474
|
+
private readonly elementRef;
|
|
475
|
+
private readonly viewContainerRef;
|
|
476
|
+
private readonly document;
|
|
477
|
+
private overlayRef;
|
|
478
|
+
private showTimeout;
|
|
479
|
+
private hideTimeout;
|
|
480
|
+
readonly isVisible: _angular_core.WritableSignal<boolean>;
|
|
481
|
+
readonly tooltipId: _angular_core.Signal<string | null>;
|
|
482
|
+
private readonly uniqueId;
|
|
483
|
+
private readonly disabledEffect;
|
|
484
|
+
onMouseEnter(): void;
|
|
485
|
+
onMouseLeave(): void;
|
|
486
|
+
onFocus(): void;
|
|
487
|
+
onBlur(): void;
|
|
488
|
+
ngOnDestroy(): void;
|
|
489
|
+
private scheduleShow;
|
|
490
|
+
private scheduleHide;
|
|
491
|
+
private cancelShow;
|
|
492
|
+
private cancelHide;
|
|
493
|
+
private show;
|
|
494
|
+
private hide;
|
|
495
|
+
private createOverlay;
|
|
496
|
+
private getPositionStrategy;
|
|
497
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<TooltipTrigger, never>;
|
|
498
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<TooltipTrigger, "[mcmsTooltip]", never, { "mcmsTooltip": { "alias": "mcmsTooltip"; "required": true; "isSignal": true; }; "tooltipPosition": { "alias": "tooltipPosition"; "required": false; "isSignal": true; }; "tooltipDelay": { "alias": "tooltipDelay"; "required": false; "isSignal": true; }; "tooltipDisabled": { "alias": "tooltipDisabled"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
499
|
+
}
|
|
500
|
+
|
|
501
|
+
/**
|
|
502
|
+
* Internal tooltip content component rendered via CDK portal.
|
|
503
|
+
*/
|
|
504
|
+
declare class TooltipContent {
|
|
505
|
+
readonly content: _angular_core.InputSignal<string>;
|
|
506
|
+
readonly id: _angular_core.InputSignal<string>;
|
|
507
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<TooltipContent, never>;
|
|
508
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<TooltipContent, "mcms-tooltip-content", never, { "content": { "alias": "content"; "required": true; "isSignal": true; }; "id": { "alias": "id"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
509
|
+
}
|
|
510
|
+
|
|
511
|
+
type PopoverSide = 'top' | 'right' | 'bottom' | 'left';
|
|
512
|
+
type PopoverAlign = 'start' | 'center' | 'end';
|
|
513
|
+
|
|
514
|
+
declare function getPopoverPositions(side: PopoverSide, align: PopoverAlign, offset: number): ConnectedPosition[];
|
|
515
|
+
|
|
516
|
+
/**
|
|
517
|
+
* Popover trigger directive.
|
|
518
|
+
*
|
|
519
|
+
* Usage:
|
|
520
|
+
* ```html
|
|
521
|
+
* <button [mcmsPopoverTrigger]="popoverContent">Open Popover</button>
|
|
522
|
+
*
|
|
523
|
+
* <ng-template #popoverContent>
|
|
524
|
+
* <mcms-popover-content>
|
|
525
|
+
* <p>Popover content here</p>
|
|
526
|
+
* </mcms-popover-content>
|
|
527
|
+
* </ng-template>
|
|
528
|
+
* ```
|
|
529
|
+
*/
|
|
530
|
+
declare class PopoverTrigger implements OnDestroy {
|
|
531
|
+
readonly mcmsPopoverTrigger: _angular_core.InputSignal<TemplateRef<unknown>>;
|
|
532
|
+
readonly popoverSide: _angular_core.InputSignal<PopoverSide>;
|
|
533
|
+
readonly popoverAlign: _angular_core.InputSignal<PopoverAlign>;
|
|
534
|
+
readonly popoverOffset: _angular_core.InputSignal<number>;
|
|
535
|
+
readonly popoverDisabled: _angular_core.InputSignal<boolean>;
|
|
536
|
+
readonly isOpen: _angular_core.WritableSignal<boolean>;
|
|
537
|
+
readonly opened: _angular_core.OutputEmitterRef<void>;
|
|
538
|
+
readonly closed: _angular_core.OutputEmitterRef<void>;
|
|
539
|
+
private readonly doc;
|
|
540
|
+
private readonly overlay;
|
|
541
|
+
private readonly elementRef;
|
|
542
|
+
private readonly viewContainerRef;
|
|
543
|
+
private overlayRef;
|
|
544
|
+
private readonly disabledEffect;
|
|
545
|
+
toggle(): void;
|
|
546
|
+
open(): void;
|
|
547
|
+
close(): void;
|
|
548
|
+
ngOnDestroy(): void;
|
|
549
|
+
private createOverlay;
|
|
550
|
+
private getPositionStrategy;
|
|
551
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<PopoverTrigger, never>;
|
|
552
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<PopoverTrigger, "[mcmsPopoverTrigger]", ["mcmsPopoverTrigger"], { "mcmsPopoverTrigger": { "alias": "mcmsPopoverTrigger"; "required": true; "isSignal": true; }; "popoverSide": { "alias": "popoverSide"; "required": false; "isSignal": true; }; "popoverAlign": { "alias": "popoverAlign"; "required": false; "isSignal": true; }; "popoverOffset": { "alias": "popoverOffset"; "required": false; "isSignal": true; }; "popoverDisabled": { "alias": "popoverDisabled"; "required": false; "isSignal": true; }; }, { "opened": "opened"; "closed": "closed"; }, never, never, true, never>;
|
|
553
|
+
}
|
|
554
|
+
|
|
555
|
+
/**
|
|
556
|
+
* Popover content container component.
|
|
557
|
+
*
|
|
558
|
+
* Usage:
|
|
559
|
+
* ```html
|
|
560
|
+
* <mcms-popover-content>
|
|
561
|
+
* <p>Content goes here</p>
|
|
562
|
+
* </mcms-popover-content>
|
|
563
|
+
* ```
|
|
564
|
+
*/
|
|
565
|
+
declare class PopoverContent {
|
|
566
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<PopoverContent, never>;
|
|
567
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<PopoverContent, "mcms-popover-content", never, {}, {}, never, ["*"], true, never>;
|
|
568
|
+
}
|
|
569
|
+
|
|
570
|
+
type DropdownMenuSide = 'top' | 'right' | 'bottom' | 'left';
|
|
571
|
+
type DropdownMenuAlign = 'start' | 'center' | 'end';
|
|
572
|
+
|
|
573
|
+
declare function getDropdownPositions(side: DropdownMenuSide, align: DropdownMenuAlign, offset: number): ConnectedPosition[];
|
|
574
|
+
|
|
575
|
+
/**
|
|
576
|
+
* Dropdown menu trigger directive.
|
|
577
|
+
*
|
|
578
|
+
* Usage:
|
|
579
|
+
* ```html
|
|
580
|
+
* <button [mcmsDropdownTrigger]="menuContent">Open Menu</button>
|
|
581
|
+
*
|
|
582
|
+
* <ng-template #menuContent>
|
|
583
|
+
* <mcms-dropdown-menu>
|
|
584
|
+
* <button mcms-dropdown-item>Item 1</button>
|
|
585
|
+
* <button mcms-dropdown-item>Item 2</button>
|
|
586
|
+
* </mcms-dropdown-menu>
|
|
587
|
+
* </ng-template>
|
|
588
|
+
* ```
|
|
589
|
+
*/
|
|
590
|
+
declare class DropdownTrigger implements OnDestroy {
|
|
591
|
+
readonly mcmsDropdownTrigger: _angular_core.InputSignal<TemplateRef<unknown>>;
|
|
592
|
+
readonly dropdownSide: _angular_core.InputSignal<DropdownMenuSide>;
|
|
593
|
+
readonly dropdownAlign: _angular_core.InputSignal<DropdownMenuAlign>;
|
|
594
|
+
readonly dropdownOffset: _angular_core.InputSignal<number>;
|
|
595
|
+
readonly dropdownDisabled: _angular_core.InputSignal<boolean>;
|
|
596
|
+
readonly isOpen: _angular_core.WritableSignal<boolean>;
|
|
597
|
+
readonly opened: _angular_core.OutputEmitterRef<void>;
|
|
598
|
+
readonly closed: _angular_core.OutputEmitterRef<void>;
|
|
599
|
+
private readonly overlay;
|
|
600
|
+
private readonly elementRef;
|
|
601
|
+
private readonly viewContainerRef;
|
|
602
|
+
private readonly document;
|
|
603
|
+
private overlayRef;
|
|
604
|
+
private readonly disabledEffect;
|
|
605
|
+
toggle(): void;
|
|
606
|
+
open(): void;
|
|
607
|
+
close(): void;
|
|
608
|
+
ngOnDestroy(): void;
|
|
609
|
+
private createOverlay;
|
|
610
|
+
private getPositionStrategy;
|
|
611
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DropdownTrigger, never>;
|
|
612
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<DropdownTrigger, "[mcmsDropdownTrigger]", ["mcmsDropdownTrigger"], { "mcmsDropdownTrigger": { "alias": "mcmsDropdownTrigger"; "required": true; "isSignal": true; }; "dropdownSide": { "alias": "dropdownSide"; "required": false; "isSignal": true; }; "dropdownAlign": { "alias": "dropdownAlign"; "required": false; "isSignal": true; }; "dropdownOffset": { "alias": "dropdownOffset"; "required": false; "isSignal": true; }; "dropdownDisabled": { "alias": "dropdownDisabled"; "required": false; "isSignal": true; }; }, { "opened": "opened"; "closed": "closed"; }, never, never, true, never>;
|
|
613
|
+
}
|
|
614
|
+
|
|
615
|
+
/**
|
|
616
|
+
* Dropdown menu container component.
|
|
617
|
+
*
|
|
618
|
+
* Uses @angular/aria/menu for keyboard navigation, typeahead search, and accessibility.
|
|
619
|
+
*
|
|
620
|
+
* Usage:
|
|
621
|
+
* ```html
|
|
622
|
+
* <mcms-dropdown-menu>
|
|
623
|
+
* <mcms-dropdown-label>Actions</mcms-dropdown-label>
|
|
624
|
+
* <button mcms-dropdown-item value="edit">Edit</button>
|
|
625
|
+
* <button mcms-dropdown-item value="duplicate">Duplicate</button>
|
|
626
|
+
* <mcms-dropdown-separator />
|
|
627
|
+
* <button mcms-dropdown-item value="delete">Delete</button>
|
|
628
|
+
* </mcms-dropdown-menu>
|
|
629
|
+
* ```
|
|
630
|
+
*/
|
|
631
|
+
declare class DropdownMenu {
|
|
632
|
+
protected readonly menu: Menu<any>;
|
|
633
|
+
/** Whether the menu is disabled */
|
|
634
|
+
readonly disabled: _angular_core.InputSignal<boolean>;
|
|
635
|
+
/** Whether navigation wraps around */
|
|
636
|
+
readonly wrap: _angular_core.InputSignal<boolean>;
|
|
637
|
+
/** Typeahead delay in milliseconds */
|
|
638
|
+
readonly typeaheadDelay: _angular_core.InputSignal<number>;
|
|
639
|
+
/** Emits when an item is selected */
|
|
640
|
+
readonly itemSelected: _angular_core.OutputEmitterRef<string>;
|
|
641
|
+
/** Additional CSS classes */
|
|
642
|
+
readonly class: _angular_core.InputSignal<string>;
|
|
643
|
+
protected readonly hostClasses: _angular_core.Signal<string>;
|
|
644
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DropdownMenu, never>;
|
|
645
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DropdownMenu, "mcms-dropdown-menu", never, { "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "wrap": { "alias": "wrap"; "required": false; "isSignal": true; }; "typeaheadDelay": { "alias": "typeaheadDelay"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; }, { "itemSelected": "itemSelected"; }, never, ["*"], true, [{ directive: typeof i1.Menu; inputs: { "disabled": "disabled"; "wrap": "wrap"; "typeaheadDelay": "typeaheadDelay"; }; outputs: {}; }]>;
|
|
646
|
+
}
|
|
647
|
+
|
|
648
|
+
/**
|
|
649
|
+
* Dropdown menu item component.
|
|
650
|
+
*
|
|
651
|
+
* Uses @angular/aria/menu MenuItem for keyboard navigation and accessibility.
|
|
652
|
+
*
|
|
653
|
+
* Usage:
|
|
654
|
+
* ```html
|
|
655
|
+
* <button mcms-dropdown-item value="edit">Edit</button>
|
|
656
|
+
* <button mcms-dropdown-item value="disabled" [disabled]="true">Disabled</button>
|
|
657
|
+
* <button mcms-dropdown-item value="search" shortcut="⌘K">Search</button>
|
|
658
|
+
* ```
|
|
659
|
+
*/
|
|
660
|
+
declare class DropdownMenuItem {
|
|
661
|
+
protected readonly menuItem: MenuItem<any>;
|
|
662
|
+
/** The value of the menu item (required for @angular/aria) */
|
|
663
|
+
readonly value: _angular_core.InputSignal<string>;
|
|
664
|
+
/** Whether the menu item is disabled */
|
|
665
|
+
readonly disabled: _angular_core.InputSignal<boolean>;
|
|
666
|
+
/** Keyboard shortcut display text */
|
|
667
|
+
readonly shortcut: _angular_core.InputSignal<string | undefined>;
|
|
668
|
+
/** Emits when the item is selected */
|
|
669
|
+
readonly selected: _angular_core.OutputEmitterRef<void>;
|
|
670
|
+
/** Additional CSS classes */
|
|
671
|
+
readonly class: _angular_core.InputSignal<string>;
|
|
672
|
+
protected readonly hostClasses: _angular_core.Signal<string>;
|
|
673
|
+
onClick(event: Event): void;
|
|
674
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DropdownMenuItem, never>;
|
|
675
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DropdownMenuItem, "button[mcms-dropdown-item], a[mcms-dropdown-item]", never, { "value": { "alias": "value"; "required": true; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "shortcut": { "alias": "shortcut"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; }, { "selected": "selected"; }, never, ["*"], true, [{ directive: typeof i1.MenuItem; inputs: { "value": "value"; "disabled": "disabled"; "searchTerm": "searchTerm"; }; outputs: {}; }]>;
|
|
676
|
+
}
|
|
677
|
+
|
|
678
|
+
/**
|
|
679
|
+
* Dropdown menu separator component.
|
|
680
|
+
*
|
|
681
|
+
* Usage:
|
|
682
|
+
* ```html
|
|
683
|
+
* <mcms-dropdown-separator />
|
|
684
|
+
* ```
|
|
685
|
+
*/
|
|
686
|
+
declare class DropdownSeparator {
|
|
687
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DropdownSeparator, never>;
|
|
688
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DropdownSeparator, "mcms-dropdown-separator", never, {}, {}, never, never, true, never>;
|
|
689
|
+
}
|
|
690
|
+
|
|
691
|
+
/**
|
|
692
|
+
* Dropdown menu label component.
|
|
693
|
+
*
|
|
694
|
+
* Usage:
|
|
695
|
+
* ```html
|
|
696
|
+
* <mcms-dropdown-label>Actions</mcms-dropdown-label>
|
|
697
|
+
* ```
|
|
698
|
+
*/
|
|
699
|
+
declare class DropdownLabel {
|
|
700
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DropdownLabel, never>;
|
|
701
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DropdownLabel, "mcms-dropdown-label", never, {}, {}, never, ["*"], true, never>;
|
|
702
|
+
}
|
|
703
|
+
|
|
704
|
+
/**
|
|
705
|
+
* Configuration options for opening a dialog.
|
|
706
|
+
*/
|
|
707
|
+
interface DialogConfig<D = unknown> {
|
|
708
|
+
/** Width of the dialog. Default: '28rem' */
|
|
709
|
+
width?: string;
|
|
710
|
+
/** Maximum width of the dialog. */
|
|
711
|
+
maxWidth?: string;
|
|
712
|
+
/** Minimum width of the dialog. */
|
|
713
|
+
minWidth?: string;
|
|
714
|
+
/** Whether clicking the backdrop closes the dialog. Default: true */
|
|
715
|
+
disableClose?: boolean;
|
|
716
|
+
/** Custom data to pass to the dialog component. */
|
|
717
|
+
data?: D;
|
|
718
|
+
/** Aria label for the dialog. */
|
|
719
|
+
ariaLabel?: string;
|
|
720
|
+
/** ID of the element that labels the dialog. */
|
|
721
|
+
ariaLabelledBy?: string;
|
|
722
|
+
/** ID of the element that describes the dialog. */
|
|
723
|
+
ariaDescribedBy?: string;
|
|
724
|
+
/** CSS class(es) to add to the overlay panel. */
|
|
725
|
+
panelClass?: string | string[];
|
|
726
|
+
}
|
|
727
|
+
|
|
728
|
+
/**
|
|
729
|
+
* Injection token for passing data to dialog components.
|
|
730
|
+
*/
|
|
731
|
+
declare const DIALOG_DATA: InjectionToken<unknown>;
|
|
732
|
+
|
|
733
|
+
/**
|
|
734
|
+
* Reference to an opened dialog.
|
|
735
|
+
* Use this to close the dialog or subscribe to its lifecycle events.
|
|
736
|
+
*/
|
|
737
|
+
declare class DialogRef<R = unknown> {
|
|
738
|
+
private readonly overlayRef;
|
|
739
|
+
private readonly _afterClosed;
|
|
740
|
+
private readonly _backdropClick;
|
|
741
|
+
/** Observable that emits when the dialog is closed. */
|
|
742
|
+
readonly afterClosed: rxjs.Observable<R | undefined>;
|
|
743
|
+
/** Observable that emits when the backdrop is clicked. */
|
|
744
|
+
readonly backdropClick: rxjs.Observable<void>;
|
|
745
|
+
/** The component instance inside the dialog. Set after creation. */
|
|
746
|
+
componentRef: ComponentRef<unknown> | null;
|
|
747
|
+
constructor(overlayRef: OverlayRef);
|
|
748
|
+
/**
|
|
749
|
+
* Close the dialog with an optional result.
|
|
750
|
+
*/
|
|
751
|
+
close(result?: R): void;
|
|
752
|
+
/**
|
|
753
|
+
* Update the dialog's width.
|
|
754
|
+
*/
|
|
755
|
+
updateSize(width?: string, height?: string): void;
|
|
756
|
+
}
|
|
757
|
+
|
|
758
|
+
/**
|
|
759
|
+
* Service for opening dialogs programmatically.
|
|
760
|
+
*
|
|
761
|
+
* Usage:
|
|
762
|
+
* ```typescript
|
|
763
|
+
* const dialogRef = this.dialog.open(MyDialogComponent, {
|
|
764
|
+
* data: { name: 'World' },
|
|
765
|
+
* width: '400px',
|
|
766
|
+
* });
|
|
767
|
+
*
|
|
768
|
+
* dialogRef.afterClosed.subscribe(result => {
|
|
769
|
+
* console.log('Dialog closed with:', result);
|
|
770
|
+
* });
|
|
771
|
+
* ```
|
|
772
|
+
*/
|
|
773
|
+
declare class DialogService {
|
|
774
|
+
private readonly overlay;
|
|
775
|
+
private readonly injector;
|
|
776
|
+
private readonly document;
|
|
777
|
+
private openDialogs;
|
|
778
|
+
private overlayStylesInjected;
|
|
779
|
+
/**
|
|
780
|
+
* Open a dialog with the specified component.
|
|
781
|
+
*/
|
|
782
|
+
open<T, D = unknown, R = unknown>(component: Type<T>, config?: DialogConfig<D>): DialogRef<R>;
|
|
783
|
+
/**
|
|
784
|
+
* Close all open dialogs.
|
|
785
|
+
*/
|
|
786
|
+
closeAll(): void;
|
|
787
|
+
/**
|
|
788
|
+
* Ensure CDK overlay positioning styles are present.
|
|
789
|
+
* CDK may not inject its styles in all build configurations (e.g. SSR, esbuild).
|
|
790
|
+
*/
|
|
791
|
+
private ensureOverlayStyles;
|
|
792
|
+
private getOverlayConfig;
|
|
793
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DialogService, never>;
|
|
794
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<DialogService>;
|
|
795
|
+
}
|
|
796
|
+
|
|
797
|
+
/**
|
|
798
|
+
* Dialog container component.
|
|
799
|
+
*
|
|
800
|
+
* Usage:
|
|
801
|
+
* ```html
|
|
802
|
+
* <mcms-dialog>
|
|
803
|
+
* <mcms-dialog-header>
|
|
804
|
+
* <mcms-dialog-title>Dialog Title</mcms-dialog-title>
|
|
805
|
+
* <mcms-dialog-description>Optional description</mcms-dialog-description>
|
|
806
|
+
* </mcms-dialog-header>
|
|
807
|
+
* <mcms-dialog-content>
|
|
808
|
+
* Content goes here
|
|
809
|
+
* </mcms-dialog-content>
|
|
810
|
+
* <mcms-dialog-footer>
|
|
811
|
+
* <button mcms-button variant="outline" mcmsDialogClose>Cancel</button>
|
|
812
|
+
* <button mcms-button [mcmsDialogClose]="true">Confirm</button>
|
|
813
|
+
* </mcms-dialog-footer>
|
|
814
|
+
* </mcms-dialog>
|
|
815
|
+
* ```
|
|
816
|
+
*/
|
|
817
|
+
declare class Dialog implements OnInit {
|
|
818
|
+
readonly class: _angular_core.InputSignal<string>;
|
|
819
|
+
readonly titleId: _angular_core.WritableSignal<string | null>;
|
|
820
|
+
readonly descriptionId: _angular_core.WritableSignal<string | null>;
|
|
821
|
+
readonly hostClass: _angular_core.Signal<string>;
|
|
822
|
+
private readonly document;
|
|
823
|
+
ngOnInit(): void;
|
|
824
|
+
registerTitle(id: string): void;
|
|
825
|
+
registerDescription(id: string): void;
|
|
826
|
+
private addBackdropStyles;
|
|
827
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<Dialog, never>;
|
|
828
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<Dialog, "mcms-dialog", never, { "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
829
|
+
}
|
|
830
|
+
|
|
831
|
+
/**
|
|
832
|
+
* Dialog header component.
|
|
833
|
+
*/
|
|
834
|
+
declare class DialogHeader {
|
|
835
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DialogHeader, never>;
|
|
836
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DialogHeader, "mcms-dialog-header", never, {}, {}, never, ["*"], true, never>;
|
|
837
|
+
}
|
|
838
|
+
|
|
839
|
+
/**
|
|
840
|
+
* Dialog title component.
|
|
841
|
+
*/
|
|
842
|
+
declare class DialogTitle implements OnInit {
|
|
843
|
+
readonly id: _angular_core.InputSignal<string>;
|
|
844
|
+
private readonly dialog;
|
|
845
|
+
ngOnInit(): void;
|
|
846
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DialogTitle, never>;
|
|
847
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DialogTitle, "mcms-dialog-title", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
848
|
+
}
|
|
849
|
+
|
|
850
|
+
/**
|
|
851
|
+
* Dialog description component.
|
|
852
|
+
*/
|
|
853
|
+
declare class DialogDescription implements OnInit {
|
|
854
|
+
readonly id: _angular_core.InputSignal<string>;
|
|
855
|
+
private readonly dialog;
|
|
856
|
+
ngOnInit(): void;
|
|
857
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DialogDescription, never>;
|
|
858
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DialogDescription, "mcms-dialog-description", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
859
|
+
}
|
|
860
|
+
|
|
861
|
+
/**
|
|
862
|
+
* Dialog content component.
|
|
863
|
+
*/
|
|
864
|
+
declare class DialogContent {
|
|
865
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DialogContent, never>;
|
|
866
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DialogContent, "mcms-dialog-content", never, {}, {}, never, ["*"], true, never>;
|
|
867
|
+
}
|
|
868
|
+
|
|
869
|
+
/**
|
|
870
|
+
* Dialog footer component.
|
|
871
|
+
*/
|
|
872
|
+
declare class DialogFooter {
|
|
873
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DialogFooter, never>;
|
|
874
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DialogFooter, "mcms-dialog-footer", never, {}, {}, never, ["*"], true, never>;
|
|
875
|
+
}
|
|
876
|
+
|
|
877
|
+
/**
|
|
878
|
+
* Directive to close a dialog when clicked.
|
|
879
|
+
*
|
|
880
|
+
* Usage:
|
|
881
|
+
* ```html
|
|
882
|
+
* <button mcmsDialogClose>Cancel</button>
|
|
883
|
+
* <button [mcmsDialogClose]="'confirmed'">Confirm</button>
|
|
884
|
+
* ```
|
|
885
|
+
*/
|
|
886
|
+
declare class DialogClose<R = unknown> {
|
|
887
|
+
/** Result to pass when closing the dialog. */
|
|
888
|
+
readonly mcmsDialogClose: _angular_core.InputSignal<R | undefined>;
|
|
889
|
+
private readonly dialogRef;
|
|
890
|
+
onClick(): void;
|
|
891
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DialogClose<any>, never>;
|
|
892
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<DialogClose<any>, "[mcmsDialogClose]", never, { "mcmsDialogClose": { "alias": "mcmsDialogClose"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
893
|
+
}
|
|
894
|
+
|
|
895
|
+
type ToastVariant = 'default' | 'destructive' | 'success' | 'warning';
|
|
896
|
+
type ToastPosition = 'top-right' | 'top-left' | 'top-center' | 'bottom-right' | 'bottom-left' | 'bottom-center';
|
|
897
|
+
/**
|
|
898
|
+
* Configuration options for a toast notification.
|
|
899
|
+
*/
|
|
900
|
+
interface ToastConfig {
|
|
901
|
+
/** Variant determines the visual style. Default: 'default' */
|
|
902
|
+
variant?: ToastVariant;
|
|
903
|
+
/** Duration in milliseconds. 0 = persistent. Default: 5000 */
|
|
904
|
+
duration?: number;
|
|
905
|
+
/** Optional action button. */
|
|
906
|
+
action?: {
|
|
907
|
+
label: string;
|
|
908
|
+
onClick: () => void;
|
|
909
|
+
};
|
|
910
|
+
/** Whether the toast can be dismissed manually. Default: true */
|
|
911
|
+
dismissible?: boolean;
|
|
912
|
+
}
|
|
913
|
+
/**
|
|
914
|
+
* Internal toast data structure.
|
|
915
|
+
*/
|
|
916
|
+
interface Toast {
|
|
917
|
+
id: string;
|
|
918
|
+
title: string;
|
|
919
|
+
description?: string;
|
|
920
|
+
variant: ToastVariant;
|
|
921
|
+
duration: number;
|
|
922
|
+
action?: ToastConfig['action'];
|
|
923
|
+
dismissible: boolean;
|
|
924
|
+
createdAt: number;
|
|
925
|
+
}
|
|
926
|
+
|
|
927
|
+
/**
|
|
928
|
+
* Service for showing toast notifications.
|
|
929
|
+
*
|
|
930
|
+
* Usage:
|
|
931
|
+
* ```typescript
|
|
932
|
+
* // In your component
|
|
933
|
+
* private toast = inject(ToastService);
|
|
934
|
+
*
|
|
935
|
+
* // Show a toast
|
|
936
|
+
* this.toast.show('Changes saved', 'Your changes have been saved successfully.');
|
|
937
|
+
*
|
|
938
|
+
* // Show with variant
|
|
939
|
+
* this.toast.success('Success!', 'Operation completed.');
|
|
940
|
+
* this.toast.error('Error', 'Something went wrong.');
|
|
941
|
+
* this.toast.warning('Warning', 'Please review your input.');
|
|
942
|
+
*
|
|
943
|
+
* // Show with action
|
|
944
|
+
* this.toast.show('File deleted', 'The file has been removed.', {
|
|
945
|
+
* action: {
|
|
946
|
+
* label: 'Undo',
|
|
947
|
+
* onClick: () => this.undoDelete(),
|
|
948
|
+
* },
|
|
949
|
+
* });
|
|
950
|
+
* ```
|
|
951
|
+
*
|
|
952
|
+
* Remember to add <mcms-toast-container /> to your app root.
|
|
953
|
+
*/
|
|
954
|
+
declare class ToastService {
|
|
955
|
+
private readonly document;
|
|
956
|
+
private readonly liveAnnouncer;
|
|
957
|
+
/** Current toast position. */
|
|
958
|
+
readonly position: _angular_core.WritableSignal<ToastPosition>;
|
|
959
|
+
/** Maximum number of visible toasts. Default: 5 */
|
|
960
|
+
readonly maxToasts: _angular_core.WritableSignal<number>;
|
|
961
|
+
/** Active toasts. */
|
|
962
|
+
readonly toasts: _angular_core.WritableSignal<Toast[]>;
|
|
963
|
+
/**
|
|
964
|
+
* Show a toast notification.
|
|
965
|
+
* @returns The toast ID for programmatic dismissal.
|
|
966
|
+
*/
|
|
967
|
+
show(title: string, description?: string, config?: ToastConfig): string;
|
|
968
|
+
/**
|
|
969
|
+
* Show a success toast.
|
|
970
|
+
*/
|
|
971
|
+
success(title: string, description?: string): string;
|
|
972
|
+
/**
|
|
973
|
+
* Show an error toast.
|
|
974
|
+
*/
|
|
975
|
+
error(title: string, description?: string): string;
|
|
976
|
+
/**
|
|
977
|
+
* Show a warning toast.
|
|
978
|
+
*/
|
|
979
|
+
warning(title: string, description?: string): string;
|
|
980
|
+
/**
|
|
981
|
+
* Dismiss a specific toast by ID.
|
|
982
|
+
*/
|
|
983
|
+
dismiss(id: string): void;
|
|
984
|
+
/**
|
|
985
|
+
* Dismiss all toasts.
|
|
986
|
+
*/
|
|
987
|
+
dismissAll(): void;
|
|
988
|
+
/**
|
|
989
|
+
* Set the toast position.
|
|
990
|
+
*/
|
|
991
|
+
setPosition(position: ToastPosition): void;
|
|
992
|
+
/**
|
|
993
|
+
* Set the maximum number of visible toasts.
|
|
994
|
+
*/
|
|
995
|
+
setMaxToasts(max: number): void;
|
|
996
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ToastService, never>;
|
|
997
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<ToastService>;
|
|
998
|
+
}
|
|
999
|
+
|
|
1000
|
+
/**
|
|
1001
|
+
* Individual toast component.
|
|
1002
|
+
*/
|
|
1003
|
+
declare class ToastComponent {
|
|
1004
|
+
readonly toast: _angular_core.InputSignal<Toast>;
|
|
1005
|
+
readonly dismissed: _angular_core.OutputEmitterRef<void>;
|
|
1006
|
+
readonly variantBg: _angular_core.Signal<string>;
|
|
1007
|
+
readonly variantBorder: _angular_core.Signal<string>;
|
|
1008
|
+
readonly variantColor: _angular_core.Signal<string>;
|
|
1009
|
+
dismiss(): void;
|
|
1010
|
+
onAction(): void;
|
|
1011
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ToastComponent, never>;
|
|
1012
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ToastComponent, "mcms-toast", never, { "toast": { "alias": "toast"; "required": true; "isSignal": true; }; }, { "dismissed": "dismissed"; }, never, never, true, never>;
|
|
1013
|
+
}
|
|
1014
|
+
|
|
1015
|
+
/**
|
|
1016
|
+
* Toast container component.
|
|
1017
|
+
* Add this to your app root to enable toast notifications.
|
|
1018
|
+
*
|
|
1019
|
+
* Usage:
|
|
1020
|
+
* ```html
|
|
1021
|
+
* <!-- In app.component.html -->
|
|
1022
|
+
* <router-outlet />
|
|
1023
|
+
* <mcms-toast-container />
|
|
1024
|
+
* ```
|
|
1025
|
+
*/
|
|
1026
|
+
declare class ToastContainer {
|
|
1027
|
+
private readonly toastService;
|
|
1028
|
+
readonly toasts: _angular_core.WritableSignal<_momentumcms_ui.Toast[]>;
|
|
1029
|
+
readonly position: _angular_core.WritableSignal<_momentumcms_ui.ToastPosition>;
|
|
1030
|
+
readonly hostClass: _angular_core.Signal<_momentumcms_ui.ToastPosition>;
|
|
1031
|
+
onDismiss(id: string): void;
|
|
1032
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ToastContainer, never>;
|
|
1033
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ToastContainer, "mcms-toast-container", never, {}, {}, never, never, true, never>;
|
|
1034
|
+
}
|
|
1035
|
+
|
|
1036
|
+
/**
|
|
1037
|
+
* Toast title component (optional, for custom content).
|
|
1038
|
+
*/
|
|
1039
|
+
declare class ToastTitle {
|
|
1040
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ToastTitle, never>;
|
|
1041
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ToastTitle, "mcms-toast-title", never, {}, {}, never, ["*"], true, never>;
|
|
1042
|
+
}
|
|
1043
|
+
|
|
1044
|
+
/**
|
|
1045
|
+
* Toast description component (optional, for custom content).
|
|
1046
|
+
*/
|
|
1047
|
+
declare class ToastDescription {
|
|
1048
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ToastDescription, never>;
|
|
1049
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ToastDescription, "mcms-toast-description", never, {}, {}, never, ["*"], true, never>;
|
|
1050
|
+
}
|
|
1051
|
+
|
|
1052
|
+
type ConfirmationIcon = 'warning' | 'danger' | 'info' | 'question';
|
|
1053
|
+
type ConfirmationVariant = 'default' | 'destructive';
|
|
1054
|
+
/**
|
|
1055
|
+
* Configuration for a confirmation dialog.
|
|
1056
|
+
*/
|
|
1057
|
+
interface ConfirmationConfig {
|
|
1058
|
+
/** Dialog title. */
|
|
1059
|
+
title: string;
|
|
1060
|
+
/** Optional description text. */
|
|
1061
|
+
description?: string;
|
|
1062
|
+
/** Text for the confirm button. Default: 'Confirm' */
|
|
1063
|
+
confirmText?: string;
|
|
1064
|
+
/** Text for the cancel button. Default: 'Cancel' */
|
|
1065
|
+
cancelText?: string;
|
|
1066
|
+
/** Button variant for the confirm button. Default: 'default' */
|
|
1067
|
+
variant?: ConfirmationVariant;
|
|
1068
|
+
/** Optional icon to show. */
|
|
1069
|
+
icon?: ConfirmationIcon;
|
|
1070
|
+
}
|
|
1071
|
+
|
|
1072
|
+
/**
|
|
1073
|
+
* Internal confirmation dialog component.
|
|
1074
|
+
*/
|
|
1075
|
+
declare class ConfirmationDialogComponent {
|
|
1076
|
+
readonly config: ConfirmationConfig;
|
|
1077
|
+
private readonly dialogRef;
|
|
1078
|
+
readonly confirmVariant: _angular_core.Signal<"destructive" | "primary">;
|
|
1079
|
+
readonly iconContainerClass: _angular_core.Signal<"flex items-center justify-center w-12 h-12 rounded-full mb-4 mx-auto" | "flex items-center justify-center w-12 h-12 rounded-full mb-4 mx-auto bg-warning/10 text-warning" | "flex items-center justify-center w-12 h-12 rounded-full mb-4 mx-auto bg-destructive/10 text-destructive" | "flex items-center justify-center w-12 h-12 rounded-full mb-4 mx-auto bg-info/10 text-info" | "flex items-center justify-center w-12 h-12 rounded-full mb-4 mx-auto bg-primary/10 text-primary">;
|
|
1080
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ConfirmationDialogComponent, never>;
|
|
1081
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ConfirmationDialogComponent, "mcms-confirmation-dialog", never, {}, {}, never, never, true, never>;
|
|
1082
|
+
}
|
|
1083
|
+
|
|
1084
|
+
/**
|
|
1085
|
+
* Service for showing confirmation dialogs.
|
|
1086
|
+
*
|
|
1087
|
+
* Usage:
|
|
1088
|
+
* ```typescript
|
|
1089
|
+
* // In your component
|
|
1090
|
+
* private confirmation = inject(ConfirmationService);
|
|
1091
|
+
*
|
|
1092
|
+
* async onDelete(): Promise<void> {
|
|
1093
|
+
* const confirmed = await this.confirmation.confirm({
|
|
1094
|
+
* title: 'Delete item?',
|
|
1095
|
+
* description: 'This action cannot be undone.',
|
|
1096
|
+
* confirmText: 'Delete',
|
|
1097
|
+
* variant: 'destructive',
|
|
1098
|
+
* });
|
|
1099
|
+
*
|
|
1100
|
+
* if (confirmed) {
|
|
1101
|
+
* // Proceed with deletion
|
|
1102
|
+
* }
|
|
1103
|
+
* }
|
|
1104
|
+
*
|
|
1105
|
+
* // Or use the convenience method
|
|
1106
|
+
* async onDeleteItem(): Promise<void> {
|
|
1107
|
+
* const confirmed = await this.confirmation.delete('this item');
|
|
1108
|
+
* if (confirmed) {
|
|
1109
|
+
* // Proceed
|
|
1110
|
+
* }
|
|
1111
|
+
* }
|
|
1112
|
+
* ```
|
|
1113
|
+
*/
|
|
1114
|
+
declare class ConfirmationService {
|
|
1115
|
+
private readonly dialog;
|
|
1116
|
+
/**
|
|
1117
|
+
* Show a confirmation dialog.
|
|
1118
|
+
* @returns Promise that resolves to true if confirmed, false if cancelled.
|
|
1119
|
+
*/
|
|
1120
|
+
confirm(config: ConfirmationConfig): Promise<boolean>;
|
|
1121
|
+
/**
|
|
1122
|
+
* Show a delete confirmation dialog.
|
|
1123
|
+
* @param itemName The name of the item being deleted.
|
|
1124
|
+
*/
|
|
1125
|
+
delete(itemName: string): Promise<boolean>;
|
|
1126
|
+
/**
|
|
1127
|
+
* Show a discard changes confirmation dialog.
|
|
1128
|
+
*/
|
|
1129
|
+
discardChanges(): Promise<boolean>;
|
|
1130
|
+
/**
|
|
1131
|
+
* Show a logout confirmation dialog.
|
|
1132
|
+
*/
|
|
1133
|
+
logout(): Promise<boolean>;
|
|
1134
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ConfirmationService, never>;
|
|
1135
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<ConfirmationService>;
|
|
1136
|
+
}
|
|
1137
|
+
|
|
1138
|
+
/**
|
|
1139
|
+
* A visual separator for dividing content.
|
|
1140
|
+
*
|
|
1141
|
+
* @example
|
|
1142
|
+
* ```html
|
|
1143
|
+
* <mcms-separator />
|
|
1144
|
+
* <mcms-separator orientation="vertical" />
|
|
1145
|
+
* <mcms-separator [decorative]="false" />
|
|
1146
|
+
* ```
|
|
1147
|
+
*/
|
|
1148
|
+
declare class Separator {
|
|
1149
|
+
/** Orientation of the separator. */
|
|
1150
|
+
readonly orientation: _angular_core.InputSignal<"horizontal" | "vertical">;
|
|
1151
|
+
/** Whether the separator is purely decorative (no semantic meaning). */
|
|
1152
|
+
readonly decorative: _angular_core.InputSignal<boolean>;
|
|
1153
|
+
/** Additional CSS classes. */
|
|
1154
|
+
readonly class: _angular_core.InputSignal<string>;
|
|
1155
|
+
readonly role: _angular_core.Signal<"separator" | "none">;
|
|
1156
|
+
readonly ariaOrientation: _angular_core.Signal<"horizontal" | "vertical" | undefined>;
|
|
1157
|
+
readonly hostClasses: _angular_core.Signal<string>;
|
|
1158
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<Separator, never>;
|
|
1159
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<Separator, "mcms-separator", never, { "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; "decorative": { "alias": "decorative"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
1160
|
+
}
|
|
1161
|
+
|
|
1162
|
+
type SpinnerSize = 'sm' | 'md' | 'lg';
|
|
1163
|
+
declare const SPINNER_SIZES: Record<SpinnerSize, {
|
|
1164
|
+
width: number;
|
|
1165
|
+
height: number;
|
|
1166
|
+
stroke: number;
|
|
1167
|
+
}>;
|
|
1168
|
+
|
|
1169
|
+
/**
|
|
1170
|
+
* A loading spinner indicator.
|
|
1171
|
+
*
|
|
1172
|
+
* @example
|
|
1173
|
+
* ```html
|
|
1174
|
+
* <mcms-spinner />
|
|
1175
|
+
* <mcms-spinner size="sm" />
|
|
1176
|
+
* <mcms-spinner size="lg" />
|
|
1177
|
+
* ```
|
|
1178
|
+
*/
|
|
1179
|
+
declare class Spinner {
|
|
1180
|
+
/** Size of the spinner. */
|
|
1181
|
+
readonly size: _angular_core.InputSignal<SpinnerSize>;
|
|
1182
|
+
/** Accessible label for screen readers. */
|
|
1183
|
+
readonly label: _angular_core.InputSignal<string>;
|
|
1184
|
+
/** Additional CSS classes. */
|
|
1185
|
+
readonly class: _angular_core.InputSignal<string>;
|
|
1186
|
+
readonly dimensions: _angular_core.Signal<{
|
|
1187
|
+
width: number;
|
|
1188
|
+
height: number;
|
|
1189
|
+
stroke: number;
|
|
1190
|
+
}>;
|
|
1191
|
+
readonly hostClasses: _angular_core.Signal<string>;
|
|
1192
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<Spinner, never>;
|
|
1193
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<Spinner, "mcms-spinner", never, { "size": { "alias": "size"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
1194
|
+
}
|
|
1195
|
+
|
|
1196
|
+
/**
|
|
1197
|
+
* A skeleton loading placeholder.
|
|
1198
|
+
*
|
|
1199
|
+
* @example
|
|
1200
|
+
* ```html
|
|
1201
|
+
* <mcms-skeleton class="h-4 w-[200px]" />
|
|
1202
|
+
* <mcms-skeleton class="h-12 w-12 rounded-full" />
|
|
1203
|
+
* <mcms-skeleton class="h-32 w-full" />
|
|
1204
|
+
* ```
|
|
1205
|
+
*/
|
|
1206
|
+
declare class Skeleton {
|
|
1207
|
+
/** Additional CSS classes for sizing and shape. */
|
|
1208
|
+
readonly class: _angular_core.InputSignal<string>;
|
|
1209
|
+
readonly hostClasses: _angular_core.Signal<string>;
|
|
1210
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<Skeleton, never>;
|
|
1211
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<Skeleton, "mcms-skeleton", never, { "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
1212
|
+
}
|
|
1213
|
+
|
|
1214
|
+
/**
|
|
1215
|
+
* A progress bar indicator.
|
|
1216
|
+
*
|
|
1217
|
+
* @example
|
|
1218
|
+
* ```html
|
|
1219
|
+
* <mcms-progress [value]="50" />
|
|
1220
|
+
* <mcms-progress [value]="75" [max]="100" />
|
|
1221
|
+
* <mcms-progress /> <!-- indeterminate -->
|
|
1222
|
+
* ```
|
|
1223
|
+
*/
|
|
1224
|
+
declare class Progress {
|
|
1225
|
+
/** Current progress value. Null for indeterminate state. */
|
|
1226
|
+
readonly value: _angular_core.InputSignal<number | null>;
|
|
1227
|
+
/** Maximum value. */
|
|
1228
|
+
readonly max: _angular_core.InputSignal<number>;
|
|
1229
|
+
/** Additional CSS classes. */
|
|
1230
|
+
readonly class: _angular_core.InputSignal<string>;
|
|
1231
|
+
readonly isIndeterminate: _angular_core.Signal<boolean>;
|
|
1232
|
+
readonly progressWidth: _angular_core.Signal<string>;
|
|
1233
|
+
readonly hostClasses: _angular_core.Signal<string>;
|
|
1234
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<Progress, never>;
|
|
1235
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<Progress, "mcms-progress", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
1236
|
+
}
|
|
1237
|
+
|
|
1238
|
+
/**
|
|
1239
|
+
* A container that maintains a specific aspect ratio.
|
|
1240
|
+
*
|
|
1241
|
+
* @example
|
|
1242
|
+
* ```html
|
|
1243
|
+
* <mcms-aspect-ratio [ratio]="16 / 9">
|
|
1244
|
+
* <img src="image.jpg" class="object-cover w-full h-full" />
|
|
1245
|
+
* </mcms-aspect-ratio>
|
|
1246
|
+
*
|
|
1247
|
+
* <mcms-aspect-ratio [ratio]="1">
|
|
1248
|
+
* <!-- Square content -->
|
|
1249
|
+
* </mcms-aspect-ratio>
|
|
1250
|
+
* ```
|
|
1251
|
+
*/
|
|
1252
|
+
declare class AspectRatio {
|
|
1253
|
+
/** Aspect ratio as width / height (e.g., 16/9, 4/3, 1). */
|
|
1254
|
+
readonly ratio: _angular_core.InputSignal<number>;
|
|
1255
|
+
/** Additional CSS classes. */
|
|
1256
|
+
readonly class: _angular_core.InputSignal<string>;
|
|
1257
|
+
readonly hostClasses: _angular_core.Signal<string>;
|
|
1258
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AspectRatio, never>;
|
|
1259
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AspectRatio, "mcms-aspect-ratio", never, { "ratio": { "alias": "ratio"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
1260
|
+
}
|
|
1261
|
+
|
|
1262
|
+
type AvatarSize = 'sm' | 'md' | 'lg';
|
|
1263
|
+
declare const AVATAR_SIZE_CLASSES: Record<AvatarSize, string>;
|
|
1264
|
+
|
|
1265
|
+
/**
|
|
1266
|
+
* Avatar container component.
|
|
1267
|
+
*
|
|
1268
|
+
* @example
|
|
1269
|
+
* ```html
|
|
1270
|
+
* <mcms-avatar>
|
|
1271
|
+
* <mcms-avatar-image src="user.jpg" alt="User" />
|
|
1272
|
+
* <mcms-avatar-fallback>JD</mcms-avatar-fallback>
|
|
1273
|
+
* </mcms-avatar>
|
|
1274
|
+
* ```
|
|
1275
|
+
*/
|
|
1276
|
+
declare class Avatar {
|
|
1277
|
+
/** Size of the avatar. */
|
|
1278
|
+
readonly size: _angular_core.InputSignal<AvatarSize>;
|
|
1279
|
+
/** Additional CSS classes. */
|
|
1280
|
+
readonly class: _angular_core.InputSignal<string>;
|
|
1281
|
+
/** Accessible label for the avatar. */
|
|
1282
|
+
readonly ariaLabel: _angular_core.InputSignal<string | undefined>;
|
|
1283
|
+
/** Internal state for image loading status. */
|
|
1284
|
+
readonly imageLoaded: _angular_core.WritableSignal<boolean>;
|
|
1285
|
+
/** Set image loaded state (called by AvatarImage). */
|
|
1286
|
+
setImageLoaded(loaded: boolean): void;
|
|
1287
|
+
readonly hostClasses: _angular_core.Signal<string>;
|
|
1288
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<Avatar, never>;
|
|
1289
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<Avatar, "mcms-avatar", never, { "size": { "alias": "size"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
1290
|
+
}
|
|
1291
|
+
|
|
1292
|
+
/**
|
|
1293
|
+
* Avatar image component.
|
|
1294
|
+
*
|
|
1295
|
+
* @example
|
|
1296
|
+
* ```html
|
|
1297
|
+
* <mcms-avatar>
|
|
1298
|
+
* <mcms-avatar-image src="user.jpg" alt="User name" />
|
|
1299
|
+
* <mcms-avatar-fallback>JD</mcms-avatar-fallback>
|
|
1300
|
+
* </mcms-avatar>
|
|
1301
|
+
* ```
|
|
1302
|
+
*/
|
|
1303
|
+
declare class AvatarImage {
|
|
1304
|
+
private readonly avatar;
|
|
1305
|
+
/** Image source URL. */
|
|
1306
|
+
readonly src: _angular_core.InputSignal<string>;
|
|
1307
|
+
/** Image alt text. */
|
|
1308
|
+
readonly alt: _angular_core.InputSignal<string>;
|
|
1309
|
+
/** Emitted when image fails to load. */
|
|
1310
|
+
readonly loadError: _angular_core.OutputEmitterRef<void>;
|
|
1311
|
+
readonly hostClasses: _angular_core.Signal<"block" | "hidden">;
|
|
1312
|
+
onLoad(): void;
|
|
1313
|
+
onError(): void;
|
|
1314
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AvatarImage, never>;
|
|
1315
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AvatarImage, "mcms-avatar-image", never, { "src": { "alias": "src"; "required": true; "isSignal": true; }; "alt": { "alias": "alt"; "required": false; "isSignal": true; }; }, { "loadError": "loadError"; }, never, never, true, never>;
|
|
1316
|
+
}
|
|
1317
|
+
|
|
1318
|
+
/**
|
|
1319
|
+
* Avatar fallback component shown when image fails to load.
|
|
1320
|
+
*
|
|
1321
|
+
* @example
|
|
1322
|
+
* ```html
|
|
1323
|
+
* <mcms-avatar>
|
|
1324
|
+
* <mcms-avatar-image src="user.jpg" alt="User" />
|
|
1325
|
+
* <mcms-avatar-fallback>JD</mcms-avatar-fallback>
|
|
1326
|
+
* </mcms-avatar>
|
|
1327
|
+
* ```
|
|
1328
|
+
*/
|
|
1329
|
+
declare class AvatarFallback {
|
|
1330
|
+
private readonly avatar;
|
|
1331
|
+
private readonly document;
|
|
1332
|
+
/** Delay in milliseconds before showing fallback. */
|
|
1333
|
+
readonly delayMs: _angular_core.InputSignal<number>;
|
|
1334
|
+
/** Additional CSS classes. */
|
|
1335
|
+
readonly class: _angular_core.InputSignal<string>;
|
|
1336
|
+
private readonly canRender;
|
|
1337
|
+
constructor();
|
|
1338
|
+
readonly hostClasses: _angular_core.Signal<string>;
|
|
1339
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AvatarFallback, never>;
|
|
1340
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AvatarFallback, "mcms-avatar-fallback", never, { "delayMs": { "alias": "delayMs"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
1341
|
+
}
|
|
1342
|
+
|
|
1343
|
+
/**
|
|
1344
|
+
* Breadcrumbs navigation container.
|
|
1345
|
+
*
|
|
1346
|
+
* @example
|
|
1347
|
+
* ```html
|
|
1348
|
+
* <mcms-breadcrumbs>
|
|
1349
|
+
* <mcms-breadcrumb-item href="/">Home</mcms-breadcrumb-item>
|
|
1350
|
+
* <mcms-breadcrumb-separator />
|
|
1351
|
+
* <mcms-breadcrumb-item href="/products">Products</mcms-breadcrumb-item>
|
|
1352
|
+
* <mcms-breadcrumb-separator />
|
|
1353
|
+
* <mcms-breadcrumb-item [current]="true">Details</mcms-breadcrumb-item>
|
|
1354
|
+
* </mcms-breadcrumbs>
|
|
1355
|
+
* ```
|
|
1356
|
+
*/
|
|
1357
|
+
declare class Breadcrumbs {
|
|
1358
|
+
/** Additional CSS classes. */
|
|
1359
|
+
readonly class: _angular_core.InputSignal<string>;
|
|
1360
|
+
readonly hostClasses: _angular_core.Signal<string>;
|
|
1361
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<Breadcrumbs, never>;
|
|
1362
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<Breadcrumbs, "mcms-breadcrumbs", never, { "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
1363
|
+
}
|
|
1364
|
+
|
|
1365
|
+
/**
|
|
1366
|
+
* Individual breadcrumb item.
|
|
1367
|
+
*
|
|
1368
|
+
* @example
|
|
1369
|
+
* ```html
|
|
1370
|
+
* <mcms-breadcrumb-item href="/products">Products</mcms-breadcrumb-item>
|
|
1371
|
+
* <mcms-breadcrumb-item [current]="true">Details</mcms-breadcrumb-item>
|
|
1372
|
+
* ```
|
|
1373
|
+
*/
|
|
1374
|
+
declare class BreadcrumbItem {
|
|
1375
|
+
/** Link href for navigation (uses routerLink for SPA navigation). */
|
|
1376
|
+
readonly href: _angular_core.InputSignal<string | undefined>;
|
|
1377
|
+
/** Whether this is the current/active page. */
|
|
1378
|
+
readonly current: _angular_core.InputSignal<boolean>;
|
|
1379
|
+
/** Additional CSS classes. */
|
|
1380
|
+
readonly class: _angular_core.InputSignal<string>;
|
|
1381
|
+
readonly hostClasses: _angular_core.Signal<string>;
|
|
1382
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<BreadcrumbItem, never>;
|
|
1383
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<BreadcrumbItem, "mcms-breadcrumb-item", never, { "href": { "alias": "href"; "required": false; "isSignal": true; }; "current": { "alias": "current"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
1384
|
+
}
|
|
1385
|
+
|
|
1386
|
+
/**
|
|
1387
|
+
* Breadcrumb separator between items.
|
|
1388
|
+
*
|
|
1389
|
+
* @example
|
|
1390
|
+
* ```html
|
|
1391
|
+
* <mcms-breadcrumb-separator />
|
|
1392
|
+
* <mcms-breadcrumb-separator>/</mcms-breadcrumb-separator>
|
|
1393
|
+
* ```
|
|
1394
|
+
*/
|
|
1395
|
+
declare class BreadcrumbSeparator {
|
|
1396
|
+
/** Additional CSS classes. */
|
|
1397
|
+
readonly class: _angular_core.InputSignal<string>;
|
|
1398
|
+
readonly hostClasses: _angular_core.Signal<string>;
|
|
1399
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<BreadcrumbSeparator, never>;
|
|
1400
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<BreadcrumbSeparator, "mcms-breadcrumb-separator", never, { "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
1401
|
+
}
|
|
1402
|
+
|
|
1403
|
+
/**
|
|
1404
|
+
* Sidebar item configuration for programmatic usage.
|
|
1405
|
+
*/
|
|
1406
|
+
interface SidebarNavItemConfig {
|
|
1407
|
+
/** Display label */
|
|
1408
|
+
label: string;
|
|
1409
|
+
/** Navigation URL */
|
|
1410
|
+
href?: string;
|
|
1411
|
+
/** Icon name or SVG */
|
|
1412
|
+
icon?: string;
|
|
1413
|
+
/** Badge content (text or number) */
|
|
1414
|
+
badge?: string | number;
|
|
1415
|
+
/** Whether the item is currently active */
|
|
1416
|
+
active?: boolean;
|
|
1417
|
+
/** Whether the item is disabled */
|
|
1418
|
+
disabled?: boolean;
|
|
1419
|
+
/** Child items for nested navigation */
|
|
1420
|
+
children?: SidebarNavItemConfig[];
|
|
1421
|
+
}
|
|
1422
|
+
/**
|
|
1423
|
+
* Sidebar section configuration for programmatic usage.
|
|
1424
|
+
*/
|
|
1425
|
+
interface SidebarSectionConfig {
|
|
1426
|
+
/** Unique identifier */
|
|
1427
|
+
id: string;
|
|
1428
|
+
/** Section title */
|
|
1429
|
+
title?: string;
|
|
1430
|
+
/** Whether the section can be collapsed */
|
|
1431
|
+
collapsible?: boolean;
|
|
1432
|
+
/** Whether the section is expanded by default */
|
|
1433
|
+
defaultExpanded?: boolean;
|
|
1434
|
+
/** Navigation items in this section */
|
|
1435
|
+
items: SidebarNavItemConfig[];
|
|
1436
|
+
}
|
|
1437
|
+
|
|
1438
|
+
/** Sidebar state representing current mode */
|
|
1439
|
+
type SidebarState = 'mobile-open' | 'mobile-closed' | 'collapsed' | 'expanded';
|
|
1440
|
+
/**
|
|
1441
|
+
* Service for managing sidebar state across the application.
|
|
1442
|
+
*
|
|
1443
|
+
* Uses CDK BreakpointObserver for responsive detection and provides
|
|
1444
|
+
* keyboard shortcuts (Cmd+B / Ctrl+B to toggle, Escape to close on mobile).
|
|
1445
|
+
*
|
|
1446
|
+
* @example
|
|
1447
|
+
* ```typescript
|
|
1448
|
+
* export class MyComponent {
|
|
1449
|
+
* private readonly sidebar = inject(SidebarService);
|
|
1450
|
+
*
|
|
1451
|
+
* toggleSidebar(): void {
|
|
1452
|
+
* this.sidebar.toggle();
|
|
1453
|
+
* }
|
|
1454
|
+
* }
|
|
1455
|
+
* ```
|
|
1456
|
+
*/
|
|
1457
|
+
declare class SidebarService {
|
|
1458
|
+
private readonly breakpointObserver;
|
|
1459
|
+
private readonly platformId;
|
|
1460
|
+
private readonly destroyRef;
|
|
1461
|
+
private readonly document;
|
|
1462
|
+
/** Whether the sidebar is open (mobile) - starts closed on mobile */
|
|
1463
|
+
readonly open: _angular_core.WritableSignal<boolean>;
|
|
1464
|
+
/** Whether the sidebar is collapsed (desktop) */
|
|
1465
|
+
readonly collapsed: _angular_core.WritableSignal<boolean>;
|
|
1466
|
+
/** Whether we're on a mobile viewport (<768px) */
|
|
1467
|
+
readonly isMobile: Signal<boolean>;
|
|
1468
|
+
/** Current sidebar state */
|
|
1469
|
+
readonly state: Signal<SidebarState>;
|
|
1470
|
+
/** Toggle sidebar - opens/closes on mobile, collapses/expands on desktop */
|
|
1471
|
+
toggle(): void;
|
|
1472
|
+
/** Set sidebar open state (for mobile drawer) */
|
|
1473
|
+
setOpen(open: boolean): void;
|
|
1474
|
+
/** Set sidebar collapsed state (for desktop) */
|
|
1475
|
+
setCollapsed(collapsed: boolean): void;
|
|
1476
|
+
/**
|
|
1477
|
+
* Setup keyboard shortcuts for sidebar control.
|
|
1478
|
+
* - Cmd+B (Mac) / Ctrl+B (Windows): Toggle sidebar
|
|
1479
|
+
* - Escape: Close mobile drawer
|
|
1480
|
+
*
|
|
1481
|
+
* Call this from your root component's ngOnInit.
|
|
1482
|
+
*/
|
|
1483
|
+
setupKeyboardShortcuts(): void;
|
|
1484
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SidebarService, never>;
|
|
1485
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<SidebarService>;
|
|
1486
|
+
}
|
|
1487
|
+
|
|
1488
|
+
/**
|
|
1489
|
+
* A responsive sidebar container component with slots for header, content, and footer.
|
|
1490
|
+
*
|
|
1491
|
+
* Features:
|
|
1492
|
+
* - Mobile: Renders as a drawer overlay that slides in from left
|
|
1493
|
+
* - Desktop: Renders as a static sidebar with optional collapsed state
|
|
1494
|
+
* - Uses CDK FocusTrap for accessibility on mobile drawer
|
|
1495
|
+
* - Integrates with SidebarService for app-wide state management
|
|
1496
|
+
*
|
|
1497
|
+
* @example
|
|
1498
|
+
* ```html
|
|
1499
|
+
* <mcms-sidebar>
|
|
1500
|
+
* <div mcmsSidebarHeader>
|
|
1501
|
+
* <h1>Logo</h1>
|
|
1502
|
+
* </div>
|
|
1503
|
+
* <div mcmsSidebarContent>
|
|
1504
|
+
* <mcms-sidebar-nav>
|
|
1505
|
+
* <mcms-sidebar-nav-item label="Dashboard" href="/dashboard" />
|
|
1506
|
+
* </mcms-sidebar-nav>
|
|
1507
|
+
* </div>
|
|
1508
|
+
* <div mcmsSidebarFooter>
|
|
1509
|
+
* <p>Footer content</p>
|
|
1510
|
+
* </div>
|
|
1511
|
+
* </mcms-sidebar>
|
|
1512
|
+
* ```
|
|
1513
|
+
*/
|
|
1514
|
+
declare class Sidebar {
|
|
1515
|
+
readonly sidebar: SidebarService;
|
|
1516
|
+
/** Width of the sidebar when expanded. */
|
|
1517
|
+
readonly width: _angular_core.InputSignal<string>;
|
|
1518
|
+
/** Width of the sidebar when collapsed. */
|
|
1519
|
+
readonly collapsedWidth: _angular_core.InputSignal<string>;
|
|
1520
|
+
/**
|
|
1521
|
+
* Whether the sidebar is collapsed.
|
|
1522
|
+
* This input syncs with SidebarService for backward compatibility.
|
|
1523
|
+
*/
|
|
1524
|
+
readonly collapsed: _angular_core.InputSignal<boolean>;
|
|
1525
|
+
/** Additional CSS classes. */
|
|
1526
|
+
readonly class: _angular_core.InputSignal<string>;
|
|
1527
|
+
constructor();
|
|
1528
|
+
/** Classes for mobile drawer */
|
|
1529
|
+
readonly mobileClasses: _angular_core.Signal<string>;
|
|
1530
|
+
/** Classes for desktop sidebar */
|
|
1531
|
+
readonly desktopClasses: _angular_core.Signal<string>;
|
|
1532
|
+
/** Width for desktop sidebar */
|
|
1533
|
+
readonly desktopWidth: _angular_core.Signal<string>;
|
|
1534
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<Sidebar, never>;
|
|
1535
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<Sidebar, "mcms-sidebar", never, { "width": { "alias": "width"; "required": false; "isSignal": true; }; "collapsedWidth": { "alias": "collapsedWidth"; "required": false; "isSignal": true; }; "collapsed": { "alias": "collapsed"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, ["[mcmsSidebarHeader]", "[mcmsSidebarContent]", "[mcmsSidebarFooter]", "*"], true, never>;
|
|
1536
|
+
}
|
|
1537
|
+
|
|
1538
|
+
/**
|
|
1539
|
+
* Header section of the sidebar, typically for branding/logo.
|
|
1540
|
+
*
|
|
1541
|
+
* @example
|
|
1542
|
+
* ```html
|
|
1543
|
+
* <mcms-sidebar-header>
|
|
1544
|
+
* <h1>My App</h1>
|
|
1545
|
+
* </mcms-sidebar-header>
|
|
1546
|
+
* ```
|
|
1547
|
+
*/
|
|
1548
|
+
declare class SidebarHeader {
|
|
1549
|
+
/** Additional CSS classes. */
|
|
1550
|
+
readonly class: _angular_core.InputSignal<string>;
|
|
1551
|
+
readonly hostClasses: _angular_core.Signal<string>;
|
|
1552
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SidebarHeader, never>;
|
|
1553
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<SidebarHeader, "mcms-sidebar-header", never, { "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
1554
|
+
}
|
|
1555
|
+
|
|
1556
|
+
/**
|
|
1557
|
+
* Main content area of the sidebar, typically for navigation items.
|
|
1558
|
+
* This section is scrollable when content overflows.
|
|
1559
|
+
*
|
|
1560
|
+
* @example
|
|
1561
|
+
* ```html
|
|
1562
|
+
* <mcms-sidebar-content>
|
|
1563
|
+
* <mcms-sidebar-nav>
|
|
1564
|
+
* <mcms-sidebar-nav-item label="Home" href="/" />
|
|
1565
|
+
* </mcms-sidebar-nav>
|
|
1566
|
+
* </mcms-sidebar-content>
|
|
1567
|
+
* ```
|
|
1568
|
+
*/
|
|
1569
|
+
declare class SidebarContent {
|
|
1570
|
+
/** Additional CSS classes. */
|
|
1571
|
+
readonly class: _angular_core.InputSignal<string>;
|
|
1572
|
+
readonly hostClasses: _angular_core.Signal<string>;
|
|
1573
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SidebarContent, never>;
|
|
1574
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<SidebarContent, "mcms-sidebar-content", never, { "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
1575
|
+
}
|
|
1576
|
+
|
|
1577
|
+
/**
|
|
1578
|
+
* Footer section of the sidebar, typically for user info or actions.
|
|
1579
|
+
*
|
|
1580
|
+
* @example
|
|
1581
|
+
* ```html
|
|
1582
|
+
* <mcms-sidebar-footer>
|
|
1583
|
+
* <div class="flex items-center gap-2">
|
|
1584
|
+
* <mcms-avatar>...</mcms-avatar>
|
|
1585
|
+
* <span>John Doe</span>
|
|
1586
|
+
* </div>
|
|
1587
|
+
* </mcms-sidebar-footer>
|
|
1588
|
+
* ```
|
|
1589
|
+
*/
|
|
1590
|
+
declare class SidebarFooter {
|
|
1591
|
+
/** Additional CSS classes. */
|
|
1592
|
+
readonly class: _angular_core.InputSignal<string>;
|
|
1593
|
+
readonly hostClasses: _angular_core.Signal<string>;
|
|
1594
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SidebarFooter, never>;
|
|
1595
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<SidebarFooter, "mcms-sidebar-footer", never, { "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
1596
|
+
}
|
|
1597
|
+
|
|
1598
|
+
/**
|
|
1599
|
+
* Container for sidebar navigation items.
|
|
1600
|
+
*
|
|
1601
|
+
* @example
|
|
1602
|
+
* ```html
|
|
1603
|
+
* <mcms-sidebar-nav>
|
|
1604
|
+
* <mcms-sidebar-nav-item label="Dashboard" href="/dashboard" />
|
|
1605
|
+
* <mcms-sidebar-section title="Settings">
|
|
1606
|
+
* <mcms-sidebar-nav-item label="Profile" href="/settings/profile" />
|
|
1607
|
+
* </mcms-sidebar-section>
|
|
1608
|
+
* </mcms-sidebar-nav>
|
|
1609
|
+
* ```
|
|
1610
|
+
*/
|
|
1611
|
+
declare class SidebarNav {
|
|
1612
|
+
/** Accessible label for the navigation. */
|
|
1613
|
+
readonly ariaLabel: _angular_core.InputSignal<string>;
|
|
1614
|
+
/** Additional CSS classes. */
|
|
1615
|
+
readonly class: _angular_core.InputSignal<string>;
|
|
1616
|
+
readonly hostClasses: _angular_core.Signal<string>;
|
|
1617
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SidebarNav, never>;
|
|
1618
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<SidebarNav, "mcms-sidebar-nav", never, { "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
1619
|
+
}
|
|
1620
|
+
|
|
1621
|
+
/**
|
|
1622
|
+
* A navigation item within the sidebar.
|
|
1623
|
+
*
|
|
1624
|
+
* @example
|
|
1625
|
+
* ```html
|
|
1626
|
+
* <mcms-sidebar-nav-item
|
|
1627
|
+
* label="Dashboard"
|
|
1628
|
+
* href="/dashboard"
|
|
1629
|
+
* icon="heroSquares2x2"
|
|
1630
|
+
* [active]="true"
|
|
1631
|
+
* />
|
|
1632
|
+
*
|
|
1633
|
+
* <mcms-sidebar-nav-item
|
|
1634
|
+
* label="Notifications"
|
|
1635
|
+
* href="/notifications"
|
|
1636
|
+
* icon="heroBell"
|
|
1637
|
+
* [badge]="5"
|
|
1638
|
+
* />
|
|
1639
|
+
* ```
|
|
1640
|
+
*/
|
|
1641
|
+
declare class SidebarNavItem {
|
|
1642
|
+
private readonly sidebar;
|
|
1643
|
+
/** Display label for the nav item. */
|
|
1644
|
+
readonly label: _angular_core.InputSignal<string>;
|
|
1645
|
+
/** Navigation URL. If not provided, renders as a button. */
|
|
1646
|
+
readonly href: _angular_core.InputSignal<string | undefined>;
|
|
1647
|
+
/** Icon name from ng-icons (e.g., 'heroSquares2x2', 'heroUsers'). */
|
|
1648
|
+
readonly icon: _angular_core.InputSignal<string | undefined>;
|
|
1649
|
+
/** Badge content to display. */
|
|
1650
|
+
readonly badge: _angular_core.InputSignal<string | number | undefined>;
|
|
1651
|
+
/** Whether this item is currently active. */
|
|
1652
|
+
readonly active: _angular_core.InputSignal<boolean>;
|
|
1653
|
+
/** Whether this item is disabled. */
|
|
1654
|
+
readonly disabled: _angular_core.InputSignal<boolean>;
|
|
1655
|
+
/** Whether to match the route exactly. */
|
|
1656
|
+
readonly exact: _angular_core.InputSignal<boolean>;
|
|
1657
|
+
/** Additional CSS classes. */
|
|
1658
|
+
readonly class: _angular_core.InputSignal<string>;
|
|
1659
|
+
/** Emitted when the item is clicked (for non-link items). */
|
|
1660
|
+
readonly clicked: _angular_core.OutputEmitterRef<void>;
|
|
1661
|
+
readonly hostClasses: _angular_core.Signal<string>;
|
|
1662
|
+
readonly linkClasses: _angular_core.Signal<string>;
|
|
1663
|
+
handleClick(): void;
|
|
1664
|
+
/** Close mobile drawer when navigating */
|
|
1665
|
+
handleNavigation(): void;
|
|
1666
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SidebarNavItem, never>;
|
|
1667
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<SidebarNavItem, "mcms-sidebar-nav-item", never, { "label": { "alias": "label"; "required": true; "isSignal": true; }; "href": { "alias": "href"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "badge": { "alias": "badge"; "required": false; "isSignal": true; }; "active": { "alias": "active"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "exact": { "alias": "exact"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; }, { "clicked": "clicked"; }, never, never, true, never>;
|
|
1668
|
+
}
|
|
1669
|
+
|
|
1670
|
+
/**
|
|
1671
|
+
* A collapsible section within the sidebar navigation.
|
|
1672
|
+
*
|
|
1673
|
+
* @example
|
|
1674
|
+
* ```html
|
|
1675
|
+
* <mcms-sidebar-section title="Settings" [collapsible]="true">
|
|
1676
|
+
* <mcms-sidebar-nav-item label="Profile" href="/settings/profile" />
|
|
1677
|
+
* <mcms-sidebar-nav-item label="Security" href="/settings/security" />
|
|
1678
|
+
* </mcms-sidebar-section>
|
|
1679
|
+
* ```
|
|
1680
|
+
*/
|
|
1681
|
+
declare class SidebarSection {
|
|
1682
|
+
/** Section title. */
|
|
1683
|
+
readonly title: _angular_core.InputSignal<string | undefined>;
|
|
1684
|
+
/** Whether the section can be collapsed. */
|
|
1685
|
+
readonly collapsible: _angular_core.InputSignal<boolean>;
|
|
1686
|
+
/** Whether the section is expanded (two-way binding). */
|
|
1687
|
+
readonly expanded: _angular_core.ModelSignal<boolean>;
|
|
1688
|
+
/** Emitted when the expanded state changes. */
|
|
1689
|
+
readonly expandedChange: _angular_core.OutputEmitterRef<boolean>;
|
|
1690
|
+
/** Additional CSS classes. */
|
|
1691
|
+
readonly class: _angular_core.InputSignal<string>;
|
|
1692
|
+
readonly hostClasses: _angular_core.Signal<string>;
|
|
1693
|
+
toggle(): void;
|
|
1694
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SidebarSection, never>;
|
|
1695
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<SidebarSection, "mcms-sidebar-section", never, { "title": { "alias": "title"; "required": false; "isSignal": true; }; "collapsible": { "alias": "collapsible"; "required": false; "isSignal": true; }; "expanded": { "alias": "expanded"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; }, { "expanded": "expandedChange"; "expandedChange": "expandedChange"; }, never, ["*"], true, never>;
|
|
1696
|
+
}
|
|
1697
|
+
|
|
1698
|
+
/**
|
|
1699
|
+
* A trigger button that toggles the sidebar open/closed state.
|
|
1700
|
+
*
|
|
1701
|
+
* Shows a hamburger menu icon when sidebar is closed, and an X icon when open (mobile only).
|
|
1702
|
+
* Automatically connects to the SidebarService for state management.
|
|
1703
|
+
*
|
|
1704
|
+
* @example
|
|
1705
|
+
* ```html
|
|
1706
|
+
* <!-- Basic usage -->
|
|
1707
|
+
* <mcms-sidebar-trigger />
|
|
1708
|
+
*
|
|
1709
|
+
* <!-- With custom classes -->
|
|
1710
|
+
* <mcms-sidebar-trigger class="text-foreground" />
|
|
1711
|
+
* ```
|
|
1712
|
+
*/
|
|
1713
|
+
declare class SidebarTrigger {
|
|
1714
|
+
readonly sidebar: SidebarService;
|
|
1715
|
+
/** Additional CSS classes. */
|
|
1716
|
+
readonly class: _angular_core.InputSignal<string>;
|
|
1717
|
+
/** Accessible label for the button. */
|
|
1718
|
+
readonly ariaLabel: _angular_core.Signal<"Close sidebar" | "Open sidebar">;
|
|
1719
|
+
/** Icon to display based on sidebar state. */
|
|
1720
|
+
readonly iconName: _angular_core.Signal<"heroXMark" | "heroBars3">;
|
|
1721
|
+
readonly hostClasses: _angular_core.Signal<string>;
|
|
1722
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SidebarTrigger, never>;
|
|
1723
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<SidebarTrigger, "mcms-sidebar-trigger", never, { "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
1724
|
+
}
|
|
1725
|
+
|
|
1726
|
+
type PaginationItem = number | 'ellipsis';
|
|
1727
|
+
/**
|
|
1728
|
+
* Generate pagination items with ellipsis for large page counts.
|
|
1729
|
+
*/
|
|
1730
|
+
declare function generatePaginationItems(currentPage: number, totalPages: number, siblingCount?: number): PaginationItem[];
|
|
1731
|
+
|
|
1732
|
+
/**
|
|
1733
|
+
* Pagination navigation component.
|
|
1734
|
+
*
|
|
1735
|
+
* @example
|
|
1736
|
+
* ```html
|
|
1737
|
+
* <mcms-pagination
|
|
1738
|
+
* [currentPage]="currentPage"
|
|
1739
|
+
* [totalPages]="totalPages"
|
|
1740
|
+
* (pageChange)="onPageChange($event)"
|
|
1741
|
+
* />
|
|
1742
|
+
* ```
|
|
1743
|
+
*/
|
|
1744
|
+
declare class Pagination {
|
|
1745
|
+
/** Current active page (1-indexed). */
|
|
1746
|
+
readonly currentPage: _angular_core.InputSignal<number>;
|
|
1747
|
+
/** Total number of pages. */
|
|
1748
|
+
readonly totalPages: _angular_core.InputSignal<number>;
|
|
1749
|
+
/** Number of siblings to show on each side of current page. */
|
|
1750
|
+
readonly siblingCount: _angular_core.InputSignal<number>;
|
|
1751
|
+
/** Additional CSS classes. */
|
|
1752
|
+
readonly class: _angular_core.InputSignal<string>;
|
|
1753
|
+
/** Emitted when page changes. */
|
|
1754
|
+
readonly pageChange: _angular_core.OutputEmitterRef<number>;
|
|
1755
|
+
readonly paginationItems: _angular_core.Signal<_momentumcms_ui.PaginationItem[]>;
|
|
1756
|
+
readonly hostClasses: _angular_core.Signal<string>;
|
|
1757
|
+
goToPage(page: number): void;
|
|
1758
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<Pagination, never>;
|
|
1759
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<Pagination, "mcms-pagination", never, { "currentPage": { "alias": "currentPage"; "required": true; "isSignal": true; }; "totalPages": { "alias": "totalPages"; "required": true; "isSignal": true; }; "siblingCount": { "alias": "siblingCount"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; }, { "pageChange": "pageChange"; }, never, never, true, never>;
|
|
1760
|
+
}
|
|
1761
|
+
|
|
1762
|
+
type TabsOrientation = 'horizontal' | 'vertical';
|
|
1763
|
+
type TabsSelectionMode = 'follow' | 'explicit';
|
|
1764
|
+
|
|
1765
|
+
/**
|
|
1766
|
+
* Tabs container component.
|
|
1767
|
+
*
|
|
1768
|
+
* @example
|
|
1769
|
+
* ```html
|
|
1770
|
+
* <mcms-tabs>
|
|
1771
|
+
* <mcms-tabs-list [(selectedTab)]="selectedTab">
|
|
1772
|
+
* <mcms-tabs-trigger value="tab1">Tab 1</mcms-tabs-trigger>
|
|
1773
|
+
* <mcms-tabs-trigger value="tab2">Tab 2</mcms-tabs-trigger>
|
|
1774
|
+
* </mcms-tabs-list>
|
|
1775
|
+
* <mcms-tabs-content value="tab1">Content 1</mcms-tabs-content>
|
|
1776
|
+
* <mcms-tabs-content value="tab2">Content 2</mcms-tabs-content>
|
|
1777
|
+
* </mcms-tabs>
|
|
1778
|
+
* ```
|
|
1779
|
+
*/
|
|
1780
|
+
declare class Tabs {
|
|
1781
|
+
/** Additional CSS classes. */
|
|
1782
|
+
readonly class: _angular_core.InputSignal<string>;
|
|
1783
|
+
readonly hostClasses: _angular_core.Signal<string>;
|
|
1784
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<Tabs, never>;
|
|
1785
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<Tabs, "mcms-tabs", never, { "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, [{ directive: typeof i1$1.Tabs; inputs: {}; outputs: {}; }]>;
|
|
1786
|
+
}
|
|
1787
|
+
|
|
1788
|
+
/**
|
|
1789
|
+
* Tabs list container for tab triggers.
|
|
1790
|
+
*
|
|
1791
|
+
* @example
|
|
1792
|
+
* ```html
|
|
1793
|
+
* <mcms-tabs-list [(selectedTab)]="selectedTab" orientation="horizontal">
|
|
1794
|
+
* <mcms-tabs-trigger value="tab1">Tab 1</mcms-tabs-trigger>
|
|
1795
|
+
* <mcms-tabs-trigger value="tab2">Tab 2</mcms-tabs-trigger>
|
|
1796
|
+
* </mcms-tabs-list>
|
|
1797
|
+
* ```
|
|
1798
|
+
*/
|
|
1799
|
+
declare class TabsList {
|
|
1800
|
+
/** Orientation of the tab list. */
|
|
1801
|
+
readonly orientation: _angular_core.InputSignal<TabsOrientation>;
|
|
1802
|
+
/** Selection mode: 'follow' auto-selects on focus, 'explicit' requires Enter/Space. */
|
|
1803
|
+
readonly selectionMode: _angular_core.InputSignal<TabsSelectionMode>;
|
|
1804
|
+
/** The currently selected tab value. */
|
|
1805
|
+
readonly selectedTab: _angular_core.ModelSignal<string | undefined>;
|
|
1806
|
+
/** Whether the tab list is disabled. */
|
|
1807
|
+
readonly disabled: _angular_core.InputSignal<boolean>;
|
|
1808
|
+
/** Whether navigation should wrap at edges. */
|
|
1809
|
+
readonly wrap: _angular_core.InputSignal<boolean>;
|
|
1810
|
+
/** Additional CSS classes. */
|
|
1811
|
+
readonly class: _angular_core.InputSignal<string>;
|
|
1812
|
+
readonly hostClasses: _angular_core.Signal<string>;
|
|
1813
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<TabsList, never>;
|
|
1814
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<TabsList, "mcms-tabs-list", never, { "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; "selectionMode": { "alias": "selectionMode"; "required": false; "isSignal": true; }; "selectedTab": { "alias": "selectedTab"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "wrap": { "alias": "wrap"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; }, { "selectedTab": "selectedTabChange"; }, never, ["*"], true, [{ directive: typeof i1$1.TabList; inputs: { "orientation": "orientation"; "selectionMode": "selectionMode"; "selectedTab": "selectedTab"; "disabled": "disabled"; "wrap": "wrap"; }; outputs: { "selectedTabChange": "selectedTabChange"; }; }]>;
|
|
1815
|
+
}
|
|
1816
|
+
|
|
1817
|
+
/**
|
|
1818
|
+
* Individual tab trigger button.
|
|
1819
|
+
*
|
|
1820
|
+
* @example
|
|
1821
|
+
* ```html
|
|
1822
|
+
* <mcms-tabs-trigger value="tab1">Tab 1</mcms-tabs-trigger>
|
|
1823
|
+
* <mcms-tabs-trigger value="tab2" [disabled]="true">Disabled Tab</mcms-tabs-trigger>
|
|
1824
|
+
* ```
|
|
1825
|
+
*/
|
|
1826
|
+
declare class TabsTrigger {
|
|
1827
|
+
private readonly tab;
|
|
1828
|
+
/** Unique value identifying this tab. */
|
|
1829
|
+
readonly value: _angular_core.InputSignal<string>;
|
|
1830
|
+
/** Whether the tab is disabled. */
|
|
1831
|
+
readonly disabled: _angular_core.InputSignal<boolean>;
|
|
1832
|
+
/** Additional CSS classes. */
|
|
1833
|
+
readonly class: _angular_core.InputSignal<string>;
|
|
1834
|
+
readonly hostClasses: _angular_core.Signal<string>;
|
|
1835
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<TabsTrigger, never>;
|
|
1836
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<TabsTrigger, "mcms-tabs-trigger", never, { "value": { "alias": "value"; "required": true; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, [{ directive: typeof i1$1.Tab; inputs: { "value": "value"; "disabled": "disabled"; }; outputs: {}; }]>;
|
|
1837
|
+
}
|
|
1838
|
+
|
|
1839
|
+
/**
|
|
1840
|
+
* Tab content panel.
|
|
1841
|
+
*
|
|
1842
|
+
* @example
|
|
1843
|
+
* ```html
|
|
1844
|
+
* <mcms-tabs-content value="tab1">
|
|
1845
|
+
* <p>Content for tab 1</p>
|
|
1846
|
+
* </mcms-tabs-content>
|
|
1847
|
+
* ```
|
|
1848
|
+
*/
|
|
1849
|
+
declare class TabsContent {
|
|
1850
|
+
readonly tabPanel: TabPanel;
|
|
1851
|
+
/** Unique value identifying this panel (must match a tab's value). */
|
|
1852
|
+
readonly value: _angular_core.InputSignal<string>;
|
|
1853
|
+
/** Additional CSS classes. */
|
|
1854
|
+
readonly class: _angular_core.InputSignal<string>;
|
|
1855
|
+
readonly hostClasses: _angular_core.Signal<string>;
|
|
1856
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<TabsContent, never>;
|
|
1857
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<TabsContent, "mcms-tabs-content", never, { "value": { "alias": "value"; "required": true; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, [{ directive: typeof i1$1.TabPanel; inputs: { "value": "value"; }; outputs: {}; }]>;
|
|
1858
|
+
}
|
|
1859
|
+
|
|
1860
|
+
/**
|
|
1861
|
+
* Type for accordion values.
|
|
1862
|
+
*/
|
|
1863
|
+
type AccordionValue = string | string[];
|
|
1864
|
+
|
|
1865
|
+
/**
|
|
1866
|
+
* Accordion root component that wraps accordion items.
|
|
1867
|
+
*
|
|
1868
|
+
* @example
|
|
1869
|
+
* ```html
|
|
1870
|
+
* <mcms-accordion>
|
|
1871
|
+
* <mcms-accordion-item>
|
|
1872
|
+
* <mcms-accordion-trigger panelId="item1">Section 1</mcms-accordion-trigger>
|
|
1873
|
+
* <mcms-accordion-content panelId="item1">
|
|
1874
|
+
* Content for section 1
|
|
1875
|
+
* </mcms-accordion-content>
|
|
1876
|
+
* </mcms-accordion-item>
|
|
1877
|
+
* </mcms-accordion>
|
|
1878
|
+
* ```
|
|
1879
|
+
*/
|
|
1880
|
+
declare class Accordion {
|
|
1881
|
+
/** Whether multiple items can be expanded at once. */
|
|
1882
|
+
readonly multiExpandable: _angular_core.InputSignal<boolean>;
|
|
1883
|
+
/** Whether the accordion is disabled. */
|
|
1884
|
+
readonly disabled: _angular_core.InputSignal<boolean>;
|
|
1885
|
+
/** Whether keyboard navigation should wrap. */
|
|
1886
|
+
readonly wrap: _angular_core.InputSignal<boolean>;
|
|
1887
|
+
/** Additional CSS classes. */
|
|
1888
|
+
readonly class: _angular_core.InputSignal<string>;
|
|
1889
|
+
readonly hostClasses: _angular_core.Signal<string>;
|
|
1890
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<Accordion, never>;
|
|
1891
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<Accordion, "mcms-accordion", never, { "multiExpandable": { "alias": "multiExpandable"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "wrap": { "alias": "wrap"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, [{ directive: typeof i1$2.AccordionGroup; inputs: { "disabled": "disabled"; "multiExpandable": "multiExpandable"; "wrap": "wrap"; }; outputs: {}; }]>;
|
|
1892
|
+
}
|
|
1893
|
+
|
|
1894
|
+
/**
|
|
1895
|
+
* Accordion item wrapper component.
|
|
1896
|
+
* Contains an accordion trigger and its corresponding content panel.
|
|
1897
|
+
*
|
|
1898
|
+
* @example
|
|
1899
|
+
* ```html
|
|
1900
|
+
* <mcms-accordion-item>
|
|
1901
|
+
* <mcms-accordion-trigger panelId="item1">Section Title</mcms-accordion-trigger>
|
|
1902
|
+
* <mcms-accordion-content panelId="item1">
|
|
1903
|
+
* <p>Section content goes here</p>
|
|
1904
|
+
* </mcms-accordion-content>
|
|
1905
|
+
* </mcms-accordion-item>
|
|
1906
|
+
* ```
|
|
1907
|
+
*/
|
|
1908
|
+
declare class AccordionItem {
|
|
1909
|
+
/** Additional CSS classes. */
|
|
1910
|
+
readonly class: _angular_core.InputSignal<string>;
|
|
1911
|
+
readonly hostClasses: _angular_core.Signal<string>;
|
|
1912
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AccordionItem, never>;
|
|
1913
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AccordionItem, "mcms-accordion-item", never, { "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
1914
|
+
}
|
|
1915
|
+
|
|
1916
|
+
/**
|
|
1917
|
+
* Accordion trigger button that toggles the visibility of its panel.
|
|
1918
|
+
*
|
|
1919
|
+
* @example
|
|
1920
|
+
* ```html
|
|
1921
|
+
* <mcms-accordion-trigger panelId="item1">
|
|
1922
|
+
* Section Title
|
|
1923
|
+
* </mcms-accordion-trigger>
|
|
1924
|
+
* ```
|
|
1925
|
+
*/
|
|
1926
|
+
declare class AccordionTrigger {
|
|
1927
|
+
readonly trigger: AccordionTrigger$1;
|
|
1928
|
+
/** Unique identifier to match with the corresponding panel. */
|
|
1929
|
+
readonly panelId: _angular_core.InputSignal<string>;
|
|
1930
|
+
/** Whether the trigger is disabled. */
|
|
1931
|
+
readonly disabled: _angular_core.InputSignal<boolean>;
|
|
1932
|
+
/** Whether the panel is expanded. */
|
|
1933
|
+
readonly expanded: _angular_core.ModelSignal<boolean>;
|
|
1934
|
+
/** Additional CSS classes. */
|
|
1935
|
+
readonly class: _angular_core.InputSignal<string>;
|
|
1936
|
+
readonly hostClasses: _angular_core.Signal<string>;
|
|
1937
|
+
readonly iconClasses: _angular_core.Signal<string>;
|
|
1938
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AccordionTrigger, never>;
|
|
1939
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AccordionTrigger, "mcms-accordion-trigger", never, { "panelId": { "alias": "panelId"; "required": true; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "expanded": { "alias": "expanded"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; }, { "expanded": "expandedChange"; }, never, ["*"], true, [{ directive: typeof i1$2.AccordionTrigger; inputs: { "panelId": "panelId"; "disabled": "disabled"; "expanded": "expanded"; }; outputs: { "expandedChange": "expandedChange"; }; }]>;
|
|
1940
|
+
}
|
|
1941
|
+
|
|
1942
|
+
/**
|
|
1943
|
+
* Accordion content panel that shows/hides based on trigger state.
|
|
1944
|
+
*
|
|
1945
|
+
* @example
|
|
1946
|
+
* ```html
|
|
1947
|
+
* <mcms-accordion-content panelId="item1">
|
|
1948
|
+
* <p>This content is shown when the accordion item is expanded.</p>
|
|
1949
|
+
* </mcms-accordion-content>
|
|
1950
|
+
* ```
|
|
1951
|
+
*/
|
|
1952
|
+
declare class AccordionContent {
|
|
1953
|
+
readonly panel: AccordionPanel;
|
|
1954
|
+
/** Unique identifier to match with the corresponding trigger. */
|
|
1955
|
+
readonly panelId: _angular_core.InputSignal<string>;
|
|
1956
|
+
/** Additional CSS classes. */
|
|
1957
|
+
readonly class: _angular_core.InputSignal<string>;
|
|
1958
|
+
readonly hostClasses: _angular_core.Signal<string>;
|
|
1959
|
+
readonly contentClasses: _angular_core.Signal<string>;
|
|
1960
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AccordionContent, never>;
|
|
1961
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AccordionContent, "mcms-accordion-content", never, { "panelId": { "alias": "panelId"; "required": true; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, [{ directive: typeof i1$2.AccordionPanel; inputs: { "panelId": "panelId"; }; outputs: {}; }]>;
|
|
1962
|
+
}
|
|
1963
|
+
|
|
1964
|
+
/**
|
|
1965
|
+
* Table focus mode for keyboard navigation.
|
|
1966
|
+
*/
|
|
1967
|
+
type TableFocusMode = 'roving' | 'activedescendant';
|
|
1968
|
+
/**
|
|
1969
|
+
* Table selection mode.
|
|
1970
|
+
*/
|
|
1971
|
+
type TableSelectionMode = 'follow' | 'explicit';
|
|
1972
|
+
/**
|
|
1973
|
+
* Table wrap behavior.
|
|
1974
|
+
*/
|
|
1975
|
+
type TableWrapMode = 'continuous' | 'loop' | 'nowrap';
|
|
1976
|
+
|
|
1977
|
+
/**
|
|
1978
|
+
* Table component with keyboard navigation and selection support.
|
|
1979
|
+
*
|
|
1980
|
+
* @example
|
|
1981
|
+
* ```html
|
|
1982
|
+
* <mcms-table>
|
|
1983
|
+
* <mcms-table-header>
|
|
1984
|
+
* <mcms-table-row>
|
|
1985
|
+
* <mcms-table-head>Name</mcms-table-head>
|
|
1986
|
+
* <mcms-table-head>Status</mcms-table-head>
|
|
1987
|
+
* </mcms-table-row>
|
|
1988
|
+
* </mcms-table-header>
|
|
1989
|
+
* <mcms-table-body>
|
|
1990
|
+
* <mcms-table-row>
|
|
1991
|
+
* <mcms-table-cell>John</mcms-table-cell>
|
|
1992
|
+
* <mcms-table-cell>Active</mcms-table-cell>
|
|
1993
|
+
* </mcms-table-row>
|
|
1994
|
+
* </mcms-table-body>
|
|
1995
|
+
* </mcms-table>
|
|
1996
|
+
* ```
|
|
1997
|
+
*/
|
|
1998
|
+
declare class Table {
|
|
1999
|
+
/** Whether selection is enabled. */
|
|
2000
|
+
readonly enableSelection: _angular_core.InputSignal<boolean>;
|
|
2001
|
+
/** Whether the table is disabled. */
|
|
2002
|
+
readonly disabled: _angular_core.InputSignal<boolean>;
|
|
2003
|
+
/** Focus mode for keyboard navigation. */
|
|
2004
|
+
readonly focusMode: _angular_core.InputSignal<TableFocusMode>;
|
|
2005
|
+
/** Row wrap behavior. */
|
|
2006
|
+
readonly rowWrap: _angular_core.InputSignal<TableWrapMode>;
|
|
2007
|
+
/** Column wrap behavior. */
|
|
2008
|
+
readonly colWrap: _angular_core.InputSignal<TableWrapMode>;
|
|
2009
|
+
/** Whether multiple cells can be selected. */
|
|
2010
|
+
readonly multi: _angular_core.InputSignal<boolean>;
|
|
2011
|
+
/** Selection mode. */
|
|
2012
|
+
readonly selectionMode: _angular_core.InputSignal<TableSelectionMode>;
|
|
2013
|
+
/** Whether range selection is enabled. */
|
|
2014
|
+
readonly enableRangeSelection: _angular_core.InputSignal<boolean>;
|
|
2015
|
+
/** Additional CSS classes for the wrapper. */
|
|
2016
|
+
readonly class: _angular_core.InputSignal<string>;
|
|
2017
|
+
readonly hostClasses: _angular_core.Signal<string>;
|
|
2018
|
+
readonly tableClasses: _angular_core.Signal<string>;
|
|
2019
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<Table, never>;
|
|
2020
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<Table, "mcms-table", never, { "enableSelection": { "alias": "enableSelection"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "focusMode": { "alias": "focusMode"; "required": false; "isSignal": true; }; "rowWrap": { "alias": "rowWrap"; "required": false; "isSignal": true; }; "colWrap": { "alias": "colWrap"; "required": false; "isSignal": true; }; "multi": { "alias": "multi"; "required": false; "isSignal": true; }; "selectionMode": { "alias": "selectionMode"; "required": false; "isSignal": true; }; "enableRangeSelection": { "alias": "enableRangeSelection"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, [{ directive: typeof i1$3.Grid; inputs: { "enableSelection": "enableSelection"; "disabled": "disabled"; "focusMode": "focusMode"; "rowWrap": "rowWrap"; "colWrap": "colWrap"; "multi": "multi"; "selectionMode": "selectionMode"; "enableRangeSelection": "enableRangeSelection"; }; outputs: {}; }]>;
|
|
2021
|
+
}
|
|
2022
|
+
|
|
2023
|
+
/**
|
|
2024
|
+
* Table header (thead) component.
|
|
2025
|
+
*
|
|
2026
|
+
* @example
|
|
2027
|
+
* ```html
|
|
2028
|
+
* <mcms-table-header>
|
|
2029
|
+
* <mcms-table-row>
|
|
2030
|
+
* <mcms-table-head>Column 1</mcms-table-head>
|
|
2031
|
+
* </mcms-table-row>
|
|
2032
|
+
* </mcms-table-header>
|
|
2033
|
+
* ```
|
|
2034
|
+
*/
|
|
2035
|
+
declare class TableHeader {
|
|
2036
|
+
/** Additional CSS classes. */
|
|
2037
|
+
readonly class: _angular_core.InputSignal<string>;
|
|
2038
|
+
readonly hostClasses: _angular_core.Signal<string>;
|
|
2039
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<TableHeader, never>;
|
|
2040
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<TableHeader, "mcms-table-header, thead[mcms-table-header]", never, { "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
2041
|
+
}
|
|
2042
|
+
|
|
2043
|
+
/**
|
|
2044
|
+
* Table body (tbody) component.
|
|
2045
|
+
*
|
|
2046
|
+
* @example
|
|
2047
|
+
* ```html
|
|
2048
|
+
* <mcms-table-body>
|
|
2049
|
+
* <mcms-table-row>
|
|
2050
|
+
* <mcms-table-cell>Cell content</mcms-table-cell>
|
|
2051
|
+
* </mcms-table-row>
|
|
2052
|
+
* </mcms-table-body>
|
|
2053
|
+
* ```
|
|
2054
|
+
*/
|
|
2055
|
+
declare class TableBody {
|
|
2056
|
+
/** Additional CSS classes. */
|
|
2057
|
+
readonly class: _angular_core.InputSignal<string>;
|
|
2058
|
+
readonly hostClasses: _angular_core.Signal<string>;
|
|
2059
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<TableBody, never>;
|
|
2060
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<TableBody, "mcms-table-body", never, { "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
2061
|
+
}
|
|
2062
|
+
|
|
2063
|
+
/**
|
|
2064
|
+
* Table row (tr) component with keyboard navigation support.
|
|
2065
|
+
*
|
|
2066
|
+
* @example
|
|
2067
|
+
* ```html
|
|
2068
|
+
* <mcms-table-row>
|
|
2069
|
+
* <mcms-table-cell>Cell 1</mcms-table-cell>
|
|
2070
|
+
* <mcms-table-cell>Cell 2</mcms-table-cell>
|
|
2071
|
+
* </mcms-table-row>
|
|
2072
|
+
* ```
|
|
2073
|
+
*/
|
|
2074
|
+
declare class TableRow {
|
|
2075
|
+
/** The row index within the grid. */
|
|
2076
|
+
readonly rowIndex: _angular_core.InputSignal<number | undefined>;
|
|
2077
|
+
/** Whether this row is selected. */
|
|
2078
|
+
readonly selected: _angular_core.InputSignal<boolean>;
|
|
2079
|
+
/** Additional CSS classes. */
|
|
2080
|
+
readonly class: _angular_core.InputSignal<string>;
|
|
2081
|
+
readonly hostClasses: _angular_core.Signal<string>;
|
|
2082
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<TableRow, never>;
|
|
2083
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<TableRow, "mcms-table-row", never, { "rowIndex": { "alias": "rowIndex"; "required": false; "isSignal": true; }; "selected": { "alias": "selected"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, [{ directive: typeof i1$3.GridRow; inputs: { "rowIndex": "rowIndex"; }; outputs: {}; }]>;
|
|
2084
|
+
}
|
|
2085
|
+
|
|
2086
|
+
/**
|
|
2087
|
+
* Table header cell (th) component.
|
|
2088
|
+
*
|
|
2089
|
+
* Usage: Provide role="columnheader" when using in table headers.
|
|
2090
|
+
*
|
|
2091
|
+
* @example
|
|
2092
|
+
* ```html
|
|
2093
|
+
* <mcms-table-head role="columnheader">Column Name</mcms-table-head>
|
|
2094
|
+
* ```
|
|
2095
|
+
*/
|
|
2096
|
+
declare class TableHead {
|
|
2097
|
+
/** Whether this column is disabled. */
|
|
2098
|
+
readonly disabled: _angular_core.InputSignal<boolean>;
|
|
2099
|
+
/** Number of columns to span. */
|
|
2100
|
+
readonly colSpan: _angular_core.InputSignal<number>;
|
|
2101
|
+
/** Number of rows to span. */
|
|
2102
|
+
readonly rowSpan: _angular_core.InputSignal<number>;
|
|
2103
|
+
/** Additional CSS classes. */
|
|
2104
|
+
readonly class: _angular_core.InputSignal<string>;
|
|
2105
|
+
readonly hostClasses: _angular_core.Signal<string>;
|
|
2106
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<TableHead, never>;
|
|
2107
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<TableHead, "mcms-table-head", never, { "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "colSpan": { "alias": "colSpan"; "required": false; "isSignal": true; }; "rowSpan": { "alias": "rowSpan"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, [{ directive: typeof i1$3.GridCell; inputs: { "disabled": "disabled"; "colSpan": "colSpan"; "rowSpan": "rowSpan"; }; outputs: {}; }]>;
|
|
2108
|
+
}
|
|
2109
|
+
|
|
2110
|
+
/**
|
|
2111
|
+
* Table data cell (td) component with selection support.
|
|
2112
|
+
*
|
|
2113
|
+
* @example
|
|
2114
|
+
* ```html
|
|
2115
|
+
* <mcms-table-cell>Cell content</mcms-table-cell>
|
|
2116
|
+
* ```
|
|
2117
|
+
*/
|
|
2118
|
+
declare class TableCell {
|
|
2119
|
+
/** Whether this cell is disabled. */
|
|
2120
|
+
readonly disabled: _angular_core.InputSignal<boolean>;
|
|
2121
|
+
/** Whether this cell is selected. */
|
|
2122
|
+
readonly selected: _angular_core.ModelSignal<boolean>;
|
|
2123
|
+
/** Number of columns to span. */
|
|
2124
|
+
readonly colSpan: _angular_core.InputSignal<number>;
|
|
2125
|
+
/** Number of rows to span. */
|
|
2126
|
+
readonly rowSpan: _angular_core.InputSignal<number>;
|
|
2127
|
+
/** Additional CSS classes. */
|
|
2128
|
+
readonly class: _angular_core.InputSignal<string>;
|
|
2129
|
+
readonly hostClasses: _angular_core.Signal<string>;
|
|
2130
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<TableCell, never>;
|
|
2131
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<TableCell, "mcms-table-cell", never, { "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "selected": { "alias": "selected"; "required": false; "isSignal": true; }; "colSpan": { "alias": "colSpan"; "required": false; "isSignal": true; }; "rowSpan": { "alias": "rowSpan"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; }, { "selected": "selectedChange"; }, never, ["*"], true, [{ directive: typeof i1$3.GridCell; inputs: { "disabled": "disabled"; "selected": "selected"; "colSpan": "colSpan"; "rowSpan": "rowSpan"; }; outputs: { "selectedChange": "selectedChange"; }; }]>;
|
|
2132
|
+
}
|
|
2133
|
+
|
|
2134
|
+
/**
|
|
2135
|
+
* Table caption component.
|
|
2136
|
+
*
|
|
2137
|
+
* @example
|
|
2138
|
+
* ```html
|
|
2139
|
+
* <mcms-table>
|
|
2140
|
+
* <mcms-table-caption>List of users</mcms-table-caption>
|
|
2141
|
+
* <!-- ... -->
|
|
2142
|
+
* </mcms-table>
|
|
2143
|
+
* ```
|
|
2144
|
+
*/
|
|
2145
|
+
declare class TableCaption {
|
|
2146
|
+
/** Additional CSS classes. */
|
|
2147
|
+
readonly class: _angular_core.InputSignal<string>;
|
|
2148
|
+
readonly hostClasses: _angular_core.Signal<string>;
|
|
2149
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<TableCaption, never>;
|
|
2150
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<TableCaption, "mcms-table-caption", never, { "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
2151
|
+
}
|
|
2152
|
+
|
|
2153
|
+
/**
|
|
2154
|
+
* Table footer (tfoot) component.
|
|
2155
|
+
*
|
|
2156
|
+
* @example
|
|
2157
|
+
* ```html
|
|
2158
|
+
* <mcms-table-footer>
|
|
2159
|
+
* <mcms-table-row>
|
|
2160
|
+
* <mcms-table-cell>Total</mcms-table-cell>
|
|
2161
|
+
* <mcms-table-cell>$1,000</mcms-table-cell>
|
|
2162
|
+
* </mcms-table-row>
|
|
2163
|
+
* </mcms-table-footer>
|
|
2164
|
+
* ```
|
|
2165
|
+
*/
|
|
2166
|
+
declare class TableFooter {
|
|
2167
|
+
/** Additional CSS classes. */
|
|
2168
|
+
readonly class: _angular_core.InputSignal<string>;
|
|
2169
|
+
readonly hostClasses: _angular_core.Signal<string>;
|
|
2170
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<TableFooter, never>;
|
|
2171
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<TableFooter, "mcms-table-footer", never, { "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
2172
|
+
}
|
|
2173
|
+
|
|
2174
|
+
/**
|
|
2175
|
+
* Empty state size variants
|
|
2176
|
+
*/
|
|
2177
|
+
type EmptyStateSize = 'sm' | 'md' | 'lg';
|
|
2178
|
+
|
|
2179
|
+
/**
|
|
2180
|
+
* Empty state component for displaying placeholder content when there is no data.
|
|
2181
|
+
*
|
|
2182
|
+
* @example
|
|
2183
|
+
* ```html
|
|
2184
|
+
* <mcms-empty-state title="No results found" description="Try adjusting your search criteria">
|
|
2185
|
+
* <svg mcms-empty-state-icon>...</svg>
|
|
2186
|
+
* <button mcms-empty-state-action mcms-button>Create New</button>
|
|
2187
|
+
* </mcms-empty-state>
|
|
2188
|
+
* ```
|
|
2189
|
+
*/
|
|
2190
|
+
declare class EmptyState {
|
|
2191
|
+
/** Title text to display */
|
|
2192
|
+
readonly title: _angular_core.InputSignal<string | undefined>;
|
|
2193
|
+
/** Description text to display */
|
|
2194
|
+
readonly description: _angular_core.InputSignal<string | undefined>;
|
|
2195
|
+
/** Size variant */
|
|
2196
|
+
readonly size: _angular_core.InputSignal<EmptyStateSize>;
|
|
2197
|
+
/** Additional CSS classes */
|
|
2198
|
+
readonly class: _angular_core.InputSignal<string>;
|
|
2199
|
+
protected readonly hostClasses: _angular_core.Signal<string>;
|
|
2200
|
+
protected readonly titleClasses: _angular_core.Signal<string>;
|
|
2201
|
+
protected readonly descriptionClasses: _angular_core.Signal<string>;
|
|
2202
|
+
private getPaddingClasses;
|
|
2203
|
+
private getTitleSizeClasses;
|
|
2204
|
+
private getDescriptionSizeClasses;
|
|
2205
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<EmptyState, never>;
|
|
2206
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<EmptyState, "mcms-empty-state", never, { "title": { "alias": "title"; "required": false; "isSignal": true; }; "description": { "alias": "description"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, ["[mcms-empty-state-icon]", "[mcms-empty-state-description]", "[mcms-empty-state-action]", "*"], true, never>;
|
|
2207
|
+
}
|
|
2208
|
+
|
|
2209
|
+
/**
|
|
2210
|
+
* Column definition for data table.
|
|
2211
|
+
*/
|
|
2212
|
+
interface DataTableColumn<T = unknown> {
|
|
2213
|
+
/** Field name from the data object */
|
|
2214
|
+
field: keyof T | string;
|
|
2215
|
+
/** Display header text */
|
|
2216
|
+
header: string;
|
|
2217
|
+
/** Whether the column is sortable */
|
|
2218
|
+
sortable?: boolean;
|
|
2219
|
+
/** Column width (CSS value) */
|
|
2220
|
+
width?: string;
|
|
2221
|
+
/** Minimum column width (CSS value) - prevents column collapse on narrow screens */
|
|
2222
|
+
minWidth?: string;
|
|
2223
|
+
/** Text alignment */
|
|
2224
|
+
align?: 'left' | 'center' | 'right';
|
|
2225
|
+
/** Custom render function for cell value */
|
|
2226
|
+
render?: (value: unknown, item: T) => string;
|
|
2227
|
+
/** Custom template for cell content */
|
|
2228
|
+
template?: TemplateRef<DataTableCellContext<T>>;
|
|
2229
|
+
}
|
|
2230
|
+
/**
|
|
2231
|
+
* Context provided to column templates.
|
|
2232
|
+
*/
|
|
2233
|
+
interface DataTableCellContext<T> {
|
|
2234
|
+
/** The cell value */
|
|
2235
|
+
$implicit: unknown;
|
|
2236
|
+
/** The full row item */
|
|
2237
|
+
item: T;
|
|
2238
|
+
/** The column definition */
|
|
2239
|
+
column: DataTableColumn<T>;
|
|
2240
|
+
/** Row index */
|
|
2241
|
+
index: number;
|
|
2242
|
+
}
|
|
2243
|
+
/**
|
|
2244
|
+
* Sort state for the data table.
|
|
2245
|
+
*/
|
|
2246
|
+
interface DataTableSort<T = unknown> {
|
|
2247
|
+
/** Field being sorted */
|
|
2248
|
+
field: keyof T | string;
|
|
2249
|
+
/** Sort direction */
|
|
2250
|
+
direction: 'asc' | 'desc';
|
|
2251
|
+
}
|
|
2252
|
+
/**
|
|
2253
|
+
* Row action definition.
|
|
2254
|
+
*/
|
|
2255
|
+
interface DataTableRowAction<T = unknown> {
|
|
2256
|
+
/** Action identifier */
|
|
2257
|
+
id: string;
|
|
2258
|
+
/** Display label */
|
|
2259
|
+
label: string;
|
|
2260
|
+
/** Optional icon */
|
|
2261
|
+
icon?: string;
|
|
2262
|
+
/** Action handler */
|
|
2263
|
+
handler?: (item: T) => void;
|
|
2264
|
+
/** Whether the action is visible for an item */
|
|
2265
|
+
visible?: (item: T) => boolean;
|
|
2266
|
+
/** Whether the action is disabled for an item */
|
|
2267
|
+
disabled?: (item: T) => boolean;
|
|
2268
|
+
/** Button variant */
|
|
2269
|
+
variant?: 'default' | 'destructive' | 'ghost';
|
|
2270
|
+
}
|
|
2271
|
+
/**
|
|
2272
|
+
* Event emitted when a row action is triggered.
|
|
2273
|
+
*/
|
|
2274
|
+
interface DataTableRowActionEvent<T> {
|
|
2275
|
+
/** The action that was triggered */
|
|
2276
|
+
action: DataTableRowAction<T>;
|
|
2277
|
+
/** The item the action was triggered on */
|
|
2278
|
+
item: T;
|
|
2279
|
+
}
|
|
2280
|
+
|
|
2281
|
+
/**
|
|
2282
|
+
* A feature-rich data table component with search, sorting, pagination, and selection.
|
|
2283
|
+
*
|
|
2284
|
+
* @example
|
|
2285
|
+
* ```html
|
|
2286
|
+
* <mcms-data-table
|
|
2287
|
+
* [data]="users"
|
|
2288
|
+
* [columns]="columns"
|
|
2289
|
+
* [searchable]="true"
|
|
2290
|
+
* [selectable]="true"
|
|
2291
|
+
* [paginated]="true"
|
|
2292
|
+
* (rowClick)="onRowClick($event)"
|
|
2293
|
+
* />
|
|
2294
|
+
* ```
|
|
2295
|
+
*/
|
|
2296
|
+
declare class DataTable<T = unknown> {
|
|
2297
|
+
readonly data: _angular_core.InputSignal<T[]>;
|
|
2298
|
+
readonly columns: _angular_core.InputSignal<DataTableColumn<T>[]>;
|
|
2299
|
+
readonly loading: _angular_core.InputSignal<boolean>;
|
|
2300
|
+
readonly searchable: _angular_core.InputSignal<boolean>;
|
|
2301
|
+
readonly searchPlaceholder: _angular_core.InputSignal<string>;
|
|
2302
|
+
readonly searchFields: _angular_core.InputSignal<(string | keyof T)[]>;
|
|
2303
|
+
readonly sortable: _angular_core.InputSignal<boolean>;
|
|
2304
|
+
readonly sort: _angular_core.ModelSignal<DataTableSort<T> | undefined>;
|
|
2305
|
+
readonly selectable: _angular_core.InputSignal<boolean>;
|
|
2306
|
+
readonly selectedItems: _angular_core.ModelSignal<T[]>;
|
|
2307
|
+
readonly paginated: _angular_core.InputSignal<boolean>;
|
|
2308
|
+
readonly pageSize: _angular_core.InputSignal<number>;
|
|
2309
|
+
readonly pageSizeOptions: _angular_core.InputSignal<number[]>;
|
|
2310
|
+
readonly currentPage: _angular_core.ModelSignal<number>;
|
|
2311
|
+
readonly totalItems: _angular_core.InputSignal<number | undefined>;
|
|
2312
|
+
readonly emptyTitle: _angular_core.InputSignal<string>;
|
|
2313
|
+
readonly emptyDescription: _angular_core.InputSignal<string>;
|
|
2314
|
+
readonly clickableRows: _angular_core.InputSignal<boolean>;
|
|
2315
|
+
readonly rowActions: _angular_core.InputSignal<DataTableRowAction<T>[]>;
|
|
2316
|
+
readonly trackByFn: _angular_core.InputSignal<(item: T) => unknown>;
|
|
2317
|
+
readonly class: _angular_core.InputSignal<string>;
|
|
2318
|
+
readonly searchChange: _angular_core.OutputEmitterRef<string>;
|
|
2319
|
+
readonly sortChange: _angular_core.OutputEmitterRef<DataTableSort<T> | undefined>;
|
|
2320
|
+
readonly selectionChange: _angular_core.OutputEmitterRef<T[]>;
|
|
2321
|
+
readonly pageChange: _angular_core.OutputEmitterRef<number>;
|
|
2322
|
+
readonly pageSizeChange: _angular_core.OutputEmitterRef<number>;
|
|
2323
|
+
readonly rowClick: _angular_core.OutputEmitterRef<T>;
|
|
2324
|
+
readonly rowAction: _angular_core.OutputEmitterRef<DataTableRowActionEvent<T>>;
|
|
2325
|
+
/** Search query (two-way bindable for parent control) */
|
|
2326
|
+
readonly searchQuery: _angular_core.ModelSignal<string>;
|
|
2327
|
+
readonly hasToolbarSlot = false;
|
|
2328
|
+
readonly skeletonRows: number[];
|
|
2329
|
+
readonly hostClasses: _angular_core.Signal<string>;
|
|
2330
|
+
readonly filteredData: _angular_core.Signal<T[]>;
|
|
2331
|
+
readonly sortedData: _angular_core.Signal<T[]>;
|
|
2332
|
+
readonly displayData: _angular_core.Signal<T[]>;
|
|
2333
|
+
readonly computedTotalItems: _angular_core.Signal<number>;
|
|
2334
|
+
readonly totalPages: _angular_core.Signal<number>;
|
|
2335
|
+
readonly paginationStart: _angular_core.Signal<number>;
|
|
2336
|
+
readonly paginationEnd: _angular_core.Signal<number>;
|
|
2337
|
+
readonly allSelected: _angular_core.Signal<boolean>;
|
|
2338
|
+
readonly someSelected: _angular_core.Signal<boolean>;
|
|
2339
|
+
constructor();
|
|
2340
|
+
getCellValue(item: T, field: keyof T | string): unknown;
|
|
2341
|
+
/**
|
|
2342
|
+
* Safely get a property from an object.
|
|
2343
|
+
* Uses type guard pattern to satisfy strict type checking.
|
|
2344
|
+
*/
|
|
2345
|
+
private getObjectProperty;
|
|
2346
|
+
/**
|
|
2347
|
+
* Type guard for Record<string, unknown>.
|
|
2348
|
+
*/
|
|
2349
|
+
private isRecord;
|
|
2350
|
+
renderCell(item: T, col: DataTableColumn<T>): string;
|
|
2351
|
+
onSearchChange(value: string): void;
|
|
2352
|
+
toggleSort(field: keyof T | string): void;
|
|
2353
|
+
toggleSelect(item: T): void;
|
|
2354
|
+
toggleSelectAll(): void;
|
|
2355
|
+
isSelected(item: T): boolean;
|
|
2356
|
+
onPageChanged(page: number): void;
|
|
2357
|
+
onRowClicked(item: T): void;
|
|
2358
|
+
getVisibleActions(item: T): DataTableRowAction<T>[];
|
|
2359
|
+
isActionDisabled(item: T, action: DataTableRowAction<T>): boolean;
|
|
2360
|
+
onActionClick(item: T, action: DataTableRowAction<T>): void;
|
|
2361
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DataTable<any>, never>;
|
|
2362
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DataTable<any>, "mcms-data-table", never, { "data": { "alias": "data"; "required": true; "isSignal": true; }; "columns": { "alias": "columns"; "required": true; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "searchable": { "alias": "searchable"; "required": false; "isSignal": true; }; "searchPlaceholder": { "alias": "searchPlaceholder"; "required": false; "isSignal": true; }; "searchFields": { "alias": "searchFields"; "required": false; "isSignal": true; }; "sortable": { "alias": "sortable"; "required": false; "isSignal": true; }; "sort": { "alias": "sort"; "required": false; "isSignal": true; }; "selectable": { "alias": "selectable"; "required": false; "isSignal": true; }; "selectedItems": { "alias": "selectedItems"; "required": false; "isSignal": true; }; "paginated": { "alias": "paginated"; "required": false; "isSignal": true; }; "pageSize": { "alias": "pageSize"; "required": false; "isSignal": true; }; "pageSizeOptions": { "alias": "pageSizeOptions"; "required": false; "isSignal": true; }; "currentPage": { "alias": "currentPage"; "required": false; "isSignal": true; }; "totalItems": { "alias": "totalItems"; "required": false; "isSignal": true; }; "emptyTitle": { "alias": "emptyTitle"; "required": false; "isSignal": true; }; "emptyDescription": { "alias": "emptyDescription"; "required": false; "isSignal": true; }; "clickableRows": { "alias": "clickableRows"; "required": false; "isSignal": true; }; "rowActions": { "alias": "rowActions"; "required": false; "isSignal": true; }; "trackByFn": { "alias": "trackByFn"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; "searchQuery": { "alias": "searchQuery"; "required": false; "isSignal": true; }; }, { "sort": "sortChange"; "selectedItems": "selectedItemsChange"; "currentPage": "currentPageChange"; "searchChange": "searchChange"; "sortChange": "sortChange"; "selectionChange": "selectionChange"; "pageChange": "pageChange"; "pageSizeChange": "pageSizeChange"; "rowClick": "rowClick"; "rowAction": "rowAction"; "searchQuery": "searchQueryChange"; }, never, ["[mcmsDataTableToolbar]", "[mcmsDataTableEmpty]"], true, never>;
|
|
2363
|
+
}
|
|
2364
|
+
|
|
2365
|
+
/**
|
|
2366
|
+
* Filter mode for the command component.
|
|
2367
|
+
* - manual: Consumer is responsible for filtering options
|
|
2368
|
+
* - auto-select: Automatically selects first matching option
|
|
2369
|
+
* - highlight: Highlights matching text without changing selection
|
|
2370
|
+
*/
|
|
2371
|
+
type CommandFilterMode = 'manual' | 'auto-select' | 'highlight';
|
|
2372
|
+
|
|
2373
|
+
/**
|
|
2374
|
+
* Command component for building command palettes, autocomplete, and searchable lists.
|
|
2375
|
+
*
|
|
2376
|
+
* @example
|
|
2377
|
+
* ```html
|
|
2378
|
+
* <mcms-command>
|
|
2379
|
+
* <mcms-command-input placeholder="Type a command or search..." />
|
|
2380
|
+
* <mcms-command-list>
|
|
2381
|
+
* <mcms-command-empty>No results found.</mcms-command-empty>
|
|
2382
|
+
* <mcms-command-group label="Suggestions">
|
|
2383
|
+
* <mcms-command-item value="calendar">Calendar</mcms-command-item>
|
|
2384
|
+
* <mcms-command-item value="search">Search</mcms-command-item>
|
|
2385
|
+
* </mcms-command-group>
|
|
2386
|
+
* </mcms-command-list>
|
|
2387
|
+
* </mcms-command>
|
|
2388
|
+
* ```
|
|
2389
|
+
*/
|
|
2390
|
+
declare class Command {
|
|
2391
|
+
/** Filter mode for search/filter behavior */
|
|
2392
|
+
readonly filterMode: _angular_core.InputSignal<CommandFilterMode>;
|
|
2393
|
+
/** Whether the command is disabled */
|
|
2394
|
+
readonly disabled: _angular_core.InputSignal<boolean>;
|
|
2395
|
+
/** Whether the command list is always expanded */
|
|
2396
|
+
readonly alwaysExpanded: _angular_core.InputSignal<boolean>;
|
|
2397
|
+
/** Additional CSS classes */
|
|
2398
|
+
readonly class: _angular_core.InputSignal<string>;
|
|
2399
|
+
protected readonly hostClasses: _angular_core.Signal<string>;
|
|
2400
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<Command, never>;
|
|
2401
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<Command, "mcms-command", never, { "filterMode": { "alias": "filterMode"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "alwaysExpanded": { "alias": "alwaysExpanded"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
2402
|
+
}
|
|
2403
|
+
|
|
2404
|
+
/**
|
|
2405
|
+
* Input element for the command component.
|
|
2406
|
+
* Provides search/filter functionality for the command list.
|
|
2407
|
+
*
|
|
2408
|
+
* @example
|
|
2409
|
+
* ```html
|
|
2410
|
+
* <mcms-command-input placeholder="Search..." [(value)]="searchValue" [autofocus]="true" />
|
|
2411
|
+
* ```
|
|
2412
|
+
*/
|
|
2413
|
+
declare class CommandInput {
|
|
2414
|
+
private readonly injector;
|
|
2415
|
+
private readonly inputEl;
|
|
2416
|
+
/** Placeholder text for the input */
|
|
2417
|
+
readonly placeholder: _angular_core.InputSignal<string>;
|
|
2418
|
+
/** Current value of the input */
|
|
2419
|
+
readonly value: _angular_core.ModelSignal<string>;
|
|
2420
|
+
/** Whether the input is disabled */
|
|
2421
|
+
readonly disabled: _angular_core.InputSignal<boolean>;
|
|
2422
|
+
/** Whether to autofocus the input on mount */
|
|
2423
|
+
readonly autofocus: _angular_core.InputSignal<boolean>;
|
|
2424
|
+
/** ID of the associated command list for aria-controls */
|
|
2425
|
+
readonly ariaControls: _angular_core.InputSignal<string>;
|
|
2426
|
+
/** Whether the associated list is expanded */
|
|
2427
|
+
readonly ariaExpanded: _angular_core.InputSignal<boolean>;
|
|
2428
|
+
/** Accessible label for the input */
|
|
2429
|
+
readonly ariaLabel: _angular_core.InputSignal<string>;
|
|
2430
|
+
/** Additional CSS classes */
|
|
2431
|
+
readonly class: _angular_core.InputSignal<string>;
|
|
2432
|
+
constructor();
|
|
2433
|
+
protected readonly hostClasses: _angular_core.Signal<string>;
|
|
2434
|
+
protected readonly inputClasses: _angular_core.Signal<string>;
|
|
2435
|
+
protected onInput(event: Event): void;
|
|
2436
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<CommandInput, never>;
|
|
2437
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<CommandInput, "mcms-command-input", never, { "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "autofocus": { "alias": "autofocus"; "required": false; "isSignal": true; }; "ariaControls": { "alias": "ariaControls"; "required": false; "isSignal": true; }; "ariaExpanded": { "alias": "ariaExpanded"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, never, true, never>;
|
|
2438
|
+
}
|
|
2439
|
+
|
|
2440
|
+
/**
|
|
2441
|
+
* Container for command items. Provides the scrollable list area.
|
|
2442
|
+
*
|
|
2443
|
+
* @example
|
|
2444
|
+
* ```html
|
|
2445
|
+
* <mcms-command-list>
|
|
2446
|
+
* <mcms-command-item value="item1">Item 1</mcms-command-item>
|
|
2447
|
+
* <mcms-command-item value="item2">Item 2</mcms-command-item>
|
|
2448
|
+
* </mcms-command-list>
|
|
2449
|
+
* ```
|
|
2450
|
+
*/
|
|
2451
|
+
declare class CommandList {
|
|
2452
|
+
/** Auto-generated unique ID for ARIA association with CommandInput. */
|
|
2453
|
+
readonly listId: string;
|
|
2454
|
+
/** Maximum height of the list */
|
|
2455
|
+
readonly maxHeight: _angular_core.InputSignal<string>;
|
|
2456
|
+
/** Additional CSS classes */
|
|
2457
|
+
readonly class: _angular_core.InputSignal<string>;
|
|
2458
|
+
protected readonly hostClasses: _angular_core.Signal<string>;
|
|
2459
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<CommandList, never>;
|
|
2460
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<CommandList, "mcms-command-list", never, { "maxHeight": { "alias": "maxHeight"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, [{ directive: typeof i1$4.Listbox; inputs: { "multi": "multi"; "wrap": "wrap"; "focusMode": "focusMode"; "selectionMode": "selectionMode"; "disabled": "disabled"; "values": "values"; }; outputs: { "valuesChange": "valuesChange"; }; }]>;
|
|
2461
|
+
}
|
|
2462
|
+
|
|
2463
|
+
/**
|
|
2464
|
+
* Displayed when there are no results in the command list.
|
|
2465
|
+
*
|
|
2466
|
+
* @example
|
|
2467
|
+
* ```html
|
|
2468
|
+
* <mcms-command-empty>No results found.</mcms-command-empty>
|
|
2469
|
+
* ```
|
|
2470
|
+
*/
|
|
2471
|
+
declare class CommandEmpty {
|
|
2472
|
+
/** Additional CSS classes */
|
|
2473
|
+
readonly class: _angular_core.InputSignal<string>;
|
|
2474
|
+
protected readonly hostClasses: _angular_core.Signal<string>;
|
|
2475
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<CommandEmpty, never>;
|
|
2476
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<CommandEmpty, "mcms-command-empty", never, { "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
2477
|
+
}
|
|
2478
|
+
|
|
2479
|
+
declare class CommandGroup {
|
|
2480
|
+
/** Auto-generated unique ID for the label element. */
|
|
2481
|
+
readonly labelId: string;
|
|
2482
|
+
/** Label for the group */
|
|
2483
|
+
readonly label: _angular_core.InputSignal<string | undefined>;
|
|
2484
|
+
/** Additional CSS classes */
|
|
2485
|
+
readonly class: _angular_core.InputSignal<string>;
|
|
2486
|
+
protected readonly hostClasses: _angular_core.Signal<string>;
|
|
2487
|
+
protected readonly labelClasses: _angular_core.Signal<string>;
|
|
2488
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<CommandGroup, never>;
|
|
2489
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<CommandGroup, "mcms-command-group", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
2490
|
+
}
|
|
2491
|
+
|
|
2492
|
+
/**
|
|
2493
|
+
* A selectable item in the command list.
|
|
2494
|
+
*
|
|
2495
|
+
* @example
|
|
2496
|
+
* ```html
|
|
2497
|
+
* <mcms-command-item value="settings" (itemSelect)="onSelect()">
|
|
2498
|
+
* <svg>...</svg>
|
|
2499
|
+
* Settings
|
|
2500
|
+
* <span class="ml-auto text-xs text-muted-foreground">⌘S</span>
|
|
2501
|
+
* </mcms-command-item>
|
|
2502
|
+
* ```
|
|
2503
|
+
*/
|
|
2504
|
+
declare class CommandItem {
|
|
2505
|
+
/** The value of the item */
|
|
2506
|
+
readonly value: _angular_core.InputSignal<string>;
|
|
2507
|
+
/** Text label for accessibility and typeahead search */
|
|
2508
|
+
readonly label: _angular_core.InputSignal<string | undefined>;
|
|
2509
|
+
/** Whether the item is disabled */
|
|
2510
|
+
readonly disabled: _angular_core.InputSignal<boolean>;
|
|
2511
|
+
/** Whether the item is selected */
|
|
2512
|
+
readonly selected: _angular_core.InputSignal<boolean>;
|
|
2513
|
+
/** Emits when the item is selected */
|
|
2514
|
+
readonly itemSelect: _angular_core.OutputEmitterRef<void>;
|
|
2515
|
+
/** Additional CSS classes */
|
|
2516
|
+
readonly class: _angular_core.InputSignal<string>;
|
|
2517
|
+
/** Whether the item is currently active (hovered/focused) */
|
|
2518
|
+
protected readonly active: _angular_core.WritableSignal<boolean>;
|
|
2519
|
+
protected readonly hostClasses: _angular_core.Signal<string>;
|
|
2520
|
+
protected onSelect(): void;
|
|
2521
|
+
protected onMouseEnter(): void;
|
|
2522
|
+
protected onMouseLeave(): void;
|
|
2523
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<CommandItem, never>;
|
|
2524
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<CommandItem, "mcms-command-item", never, { "value": { "alias": "value"; "required": true; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "selected": { "alias": "selected"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; }, { "itemSelect": "itemSelect"; }, never, ["*"], true, never>;
|
|
2525
|
+
}
|
|
2526
|
+
|
|
2527
|
+
/**
|
|
2528
|
+
* A visual separator between command groups or items.
|
|
2529
|
+
*
|
|
2530
|
+
* @example
|
|
2531
|
+
* ```html
|
|
2532
|
+
* <mcms-command-group label="Navigation">...</mcms-command-group>
|
|
2533
|
+
* <mcms-command-separator />
|
|
2534
|
+
* <mcms-command-group label="Settings">...</mcms-command-group>
|
|
2535
|
+
* ```
|
|
2536
|
+
*/
|
|
2537
|
+
declare class CommandSeparator {
|
|
2538
|
+
/** Additional CSS classes */
|
|
2539
|
+
readonly class: _angular_core.InputSignal<string>;
|
|
2540
|
+
protected readonly hostClasses: _angular_core.Signal<string>;
|
|
2541
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<CommandSeparator, never>;
|
|
2542
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<CommandSeparator, "mcms-command-separator", never, { "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
2543
|
+
}
|
|
2544
|
+
|
|
2545
|
+
/**
|
|
2546
|
+
* Toolbar orientation
|
|
2547
|
+
*/
|
|
2548
|
+
type ToolbarOrientation = 'horizontal' | 'vertical';
|
|
2549
|
+
|
|
2550
|
+
/**
|
|
2551
|
+
* Toolbar component for grouping related controls.
|
|
2552
|
+
*
|
|
2553
|
+
* Uses @angular/aria/toolbar for keyboard navigation (Arrow keys, Home/End).
|
|
2554
|
+
*
|
|
2555
|
+
* @example
|
|
2556
|
+
* ```html
|
|
2557
|
+
* <mcms-toolbar>
|
|
2558
|
+
* <button mcms-toolbar-widget value="bold">Bold</button>
|
|
2559
|
+
* <button mcms-toolbar-widget value="italic">Italic</button>
|
|
2560
|
+
* <mcms-toolbar-separator />
|
|
2561
|
+
* <button mcms-toolbar-widget value="link">Link</button>
|
|
2562
|
+
* </mcms-toolbar>
|
|
2563
|
+
* ```
|
|
2564
|
+
*/
|
|
2565
|
+
declare class Toolbar {
|
|
2566
|
+
protected readonly toolbar: Toolbar$1<any>;
|
|
2567
|
+
/** Toolbar orientation */
|
|
2568
|
+
readonly orientation: _angular_core.InputSignal<ToolbarOrientation>;
|
|
2569
|
+
/** Whether the toolbar is disabled */
|
|
2570
|
+
readonly disabled: _angular_core.InputSignal<boolean>;
|
|
2571
|
+
/** Whether navigation wraps around */
|
|
2572
|
+
readonly wrap: _angular_core.InputSignal<boolean>;
|
|
2573
|
+
/** Selected widget values */
|
|
2574
|
+
readonly values: _angular_core.ModelSignal<string[]>;
|
|
2575
|
+
/** Additional CSS classes */
|
|
2576
|
+
readonly class: _angular_core.InputSignal<string>;
|
|
2577
|
+
protected readonly hostClasses: _angular_core.Signal<string>;
|
|
2578
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<Toolbar, never>;
|
|
2579
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<Toolbar, "mcms-toolbar", never, { "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "wrap": { "alias": "wrap"; "required": false; "isSignal": true; }; "values": { "alias": "values"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; }, { "values": "valuesChange"; }, never, ["*"], true, [{ directive: typeof i1$5.Toolbar; inputs: { "orientation": "orientation"; "disabled": "disabled"; "wrap": "wrap"; "softDisabled": "softDisabled"; "values": "values"; }; outputs: { "valuesChange": "valuesChange"; }; }]>;
|
|
2580
|
+
}
|
|
2581
|
+
|
|
2582
|
+
/**
|
|
2583
|
+
* Interactive widget within a toolbar.
|
|
2584
|
+
*
|
|
2585
|
+
* @example
|
|
2586
|
+
* ```html
|
|
2587
|
+
* <button mcms-toolbar-widget value="bold" (click)="toggleBold()">
|
|
2588
|
+
* <svg>...</svg>
|
|
2589
|
+
* </button>
|
|
2590
|
+
* ```
|
|
2591
|
+
*/
|
|
2592
|
+
declare class ToolbarWidget {
|
|
2593
|
+
protected readonly widget: ToolbarWidget$1<any>;
|
|
2594
|
+
/** The value identifier for this widget */
|
|
2595
|
+
readonly value: _angular_core.InputSignal<string>;
|
|
2596
|
+
/** Whether the widget is disabled */
|
|
2597
|
+
readonly disabled: _angular_core.InputSignal<boolean>;
|
|
2598
|
+
/** Additional CSS classes */
|
|
2599
|
+
readonly class: _angular_core.InputSignal<string>;
|
|
2600
|
+
protected readonly hostClasses: _angular_core.Signal<string>;
|
|
2601
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ToolbarWidget, never>;
|
|
2602
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ToolbarWidget, "button[mcms-toolbar-widget]", never, { "value": { "alias": "value"; "required": true; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, [{ directive: typeof i1$5.ToolbarWidget; inputs: { "value": "value"; "disabled": "disabled"; }; outputs: {}; }]>;
|
|
2603
|
+
}
|
|
2604
|
+
|
|
2605
|
+
/**
|
|
2606
|
+
* Groups toolbar widgets for selection (like radio buttons).
|
|
2607
|
+
*
|
|
2608
|
+
* @example
|
|
2609
|
+
* ```html
|
|
2610
|
+
* <mcms-toolbar-widget-group [(value)]="alignment">
|
|
2611
|
+
* <button mcms-toolbar-widget value="left">Left</button>
|
|
2612
|
+
* <button mcms-toolbar-widget value="center">Center</button>
|
|
2613
|
+
* <button mcms-toolbar-widget value="right">Right</button>
|
|
2614
|
+
* </mcms-toolbar-widget-group>
|
|
2615
|
+
* ```
|
|
2616
|
+
*/
|
|
2617
|
+
declare class ToolbarWidgetGroup {
|
|
2618
|
+
protected readonly group: ToolbarWidgetGroup$1<any>;
|
|
2619
|
+
/** Whether the group is disabled */
|
|
2620
|
+
readonly disabled: _angular_core.InputSignal<boolean>;
|
|
2621
|
+
/** Whether multiple items can be selected */
|
|
2622
|
+
readonly multi: _angular_core.InputSignal<boolean>;
|
|
2623
|
+
/** Additional CSS classes */
|
|
2624
|
+
readonly class: _angular_core.InputSignal<string>;
|
|
2625
|
+
protected readonly hostClasses: _angular_core.Signal<string>;
|
|
2626
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ToolbarWidgetGroup, never>;
|
|
2627
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ToolbarWidgetGroup, "mcms-toolbar-widget-group", never, { "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "multi": { "alias": "multi"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, [{ directive: typeof i1$5.ToolbarWidgetGroup; inputs: { "disabled": "disabled"; "multi": "multi"; }; outputs: {}; }]>;
|
|
2628
|
+
}
|
|
2629
|
+
|
|
2630
|
+
/**
|
|
2631
|
+
* Visual separator between toolbar widgets.
|
|
2632
|
+
*
|
|
2633
|
+
* @example
|
|
2634
|
+
* ```html
|
|
2635
|
+
* <button mcms-toolbar-widget value="bold">Bold</button>
|
|
2636
|
+
* <mcms-toolbar-separator />
|
|
2637
|
+
* <button mcms-toolbar-widget value="link">Link</button>
|
|
2638
|
+
* ```
|
|
2639
|
+
*/
|
|
2640
|
+
declare class ToolbarSeparator {
|
|
2641
|
+
/** Additional CSS classes */
|
|
2642
|
+
readonly class: _angular_core.InputSignal<string>;
|
|
2643
|
+
protected readonly hostClasses: _angular_core.Signal<string>;
|
|
2644
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ToolbarSeparator, never>;
|
|
2645
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ToolbarSeparator, "mcms-toolbar-separator", never, { "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
2646
|
+
}
|
|
2647
|
+
|
|
2648
|
+
/**
|
|
2649
|
+
* Tree node data structure
|
|
2650
|
+
*/
|
|
2651
|
+
interface TreeNode {
|
|
2652
|
+
/** Unique identifier for the node */
|
|
2653
|
+
id: string;
|
|
2654
|
+
/** Display label */
|
|
2655
|
+
label: string;
|
|
2656
|
+
/** Optional icon identifier */
|
|
2657
|
+
icon?: string;
|
|
2658
|
+
/** Whether the node is disabled */
|
|
2659
|
+
disabled?: boolean;
|
|
2660
|
+
/** Whether the node is initially expanded */
|
|
2661
|
+
expanded?: boolean;
|
|
2662
|
+
/** Child nodes */
|
|
2663
|
+
children?: TreeNode[];
|
|
2664
|
+
}
|
|
2665
|
+
|
|
2666
|
+
/**
|
|
2667
|
+
* Tree component for displaying hierarchical data.
|
|
2668
|
+
*
|
|
2669
|
+
* Uses @angular/aria/tree for keyboard navigation (Arrow keys, Home/End, Enter/Space).
|
|
2670
|
+
*
|
|
2671
|
+
* @example
|
|
2672
|
+
* ```html
|
|
2673
|
+
* <mcms-tree [(value)]="selectedItems" [multi]="true">
|
|
2674
|
+
* <mcms-tree-item [parent]="tree" value="folder1" label="Documents">
|
|
2675
|
+
* <mcms-tree-item-group [ownedBy]="documentsItem">
|
|
2676
|
+
* <mcms-tree-item [parent]="documentsGroup" value="file1" label="File 1" />
|
|
2677
|
+
* </mcms-tree-item-group>
|
|
2678
|
+
* </mcms-tree-item>
|
|
2679
|
+
* </mcms-tree>
|
|
2680
|
+
* ```
|
|
2681
|
+
*/
|
|
2682
|
+
declare class Tree {
|
|
2683
|
+
readonly ariaTree: Tree$1<any>;
|
|
2684
|
+
/** Whether multiple items can be selected */
|
|
2685
|
+
readonly multi: _angular_core.InputSignal<boolean>;
|
|
2686
|
+
/** Selection mode: 'follow' (select on focus) or 'explicit' (require Enter/Space) */
|
|
2687
|
+
readonly selectionMode: _angular_core.InputSignal<"follow" | "explicit">;
|
|
2688
|
+
/** Whether the tree is disabled */
|
|
2689
|
+
readonly disabled: _angular_core.InputSignal<boolean>;
|
|
2690
|
+
/** Whether navigation wraps around */
|
|
2691
|
+
readonly wrap: _angular_core.InputSignal<boolean>;
|
|
2692
|
+
/** Selected item values */
|
|
2693
|
+
readonly values: _angular_core.ModelSignal<string[]>;
|
|
2694
|
+
/** Additional CSS classes */
|
|
2695
|
+
readonly class: _angular_core.InputSignal<string>;
|
|
2696
|
+
protected readonly hostClasses: _angular_core.Signal<string>;
|
|
2697
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<Tree, never>;
|
|
2698
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<Tree, "mcms-tree", ["mcmsTree"], { "multi": { "alias": "multi"; "required": false; "isSignal": true; }; "selectionMode": { "alias": "selectionMode"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "wrap": { "alias": "wrap"; "required": false; "isSignal": true; }; "values": { "alias": "values"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; }, { "values": "valuesChange"; }, never, ["*"], true, [{ directive: typeof i1$6.Tree; inputs: { "multi": "multi"; "selectionMode": "selectionMode"; "disabled": "disabled"; "wrap": "wrap"; "orientation": "orientation"; "values": "values"; }; outputs: { "valuesChange": "valuesChange"; }; }]>;
|
|
2699
|
+
}
|
|
2700
|
+
|
|
2701
|
+
/**
|
|
2702
|
+
* A single item/node in the tree.
|
|
2703
|
+
*
|
|
2704
|
+
* @example
|
|
2705
|
+
* ```html
|
|
2706
|
+
* <mcms-tree-item
|
|
2707
|
+
* #documentsItem="mcmsTreeItem"
|
|
2708
|
+
* [parent]="tree"
|
|
2709
|
+
* value="documents"
|
|
2710
|
+
* label="Documents"
|
|
2711
|
+
* >
|
|
2712
|
+
* Documents
|
|
2713
|
+
* <mcms-tree-item-group [ownedBy]="documentsItem">
|
|
2714
|
+
* ...children
|
|
2715
|
+
* </mcms-tree-item-group>
|
|
2716
|
+
* </mcms-tree-item>
|
|
2717
|
+
* ```
|
|
2718
|
+
*/
|
|
2719
|
+
declare class TreeItem {
|
|
2720
|
+
readonly treeItem: TreeItem$1<any>;
|
|
2721
|
+
/** The value identifier for this item */
|
|
2722
|
+
readonly value: _angular_core.InputSignal<string>;
|
|
2723
|
+
/** Parent tree or tree item group */
|
|
2724
|
+
readonly parent: _angular_core.InputSignal<Tree$1<string> | TreeItemGroup<string>>;
|
|
2725
|
+
/** Text label for accessibility and typeahead */
|
|
2726
|
+
readonly label: _angular_core.InputSignal<string | undefined>;
|
|
2727
|
+
/** Whether the item is disabled */
|
|
2728
|
+
readonly disabled: _angular_core.InputSignal<boolean>;
|
|
2729
|
+
/** Whether the item is expanded */
|
|
2730
|
+
readonly expanded: _angular_core.ModelSignal<boolean>;
|
|
2731
|
+
/** Whether the item is selectable */
|
|
2732
|
+
readonly selectable: _angular_core.InputSignal<boolean>;
|
|
2733
|
+
/** Whether this item has children (should have a tree-item-group) */
|
|
2734
|
+
readonly hasChildren: _angular_core.InputSignal<boolean>;
|
|
2735
|
+
/** Additional CSS classes */
|
|
2736
|
+
readonly class: _angular_core.InputSignal<string>;
|
|
2737
|
+
protected readonly hostClasses: _angular_core.Signal<string>;
|
|
2738
|
+
protected readonly contentClasses: _angular_core.Signal<string>;
|
|
2739
|
+
onClick(event: Event): void;
|
|
2740
|
+
toggleExpanded(event: Event): void;
|
|
2741
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<TreeItem, never>;
|
|
2742
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<TreeItem, "mcms-tree-item", ["mcmsTreeItem"], { "value": { "alias": "value"; "required": true; "isSignal": true; }; "parent": { "alias": "parent"; "required": true; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "expanded": { "alias": "expanded"; "required": false; "isSignal": true; }; "selectable": { "alias": "selectable"; "required": false; "isSignal": true; }; "hasChildren": { "alias": "hasChildren"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; }, { "expanded": "expandedChange"; }, never, ["*", "mcms-tree-item-group, [mcmsTreeItemGroup]"], true, [{ directive: typeof i1$6.TreeItem; inputs: { "value": "value"; "parent": "parent"; "disabled": "disabled"; "expanded": "expanded"; "label": "label"; "selectable": "selectable"; }; outputs: { "expandedChange": "expandedChange"; }; }]>;
|
|
2743
|
+
}
|
|
2744
|
+
|
|
2745
|
+
/**
|
|
2746
|
+
* Groups child tree items under a parent item.
|
|
2747
|
+
*
|
|
2748
|
+
* @example
|
|
2749
|
+
* ```html
|
|
2750
|
+
* <mcms-tree-item #parentItem [parent]="tree" value="folder" label="Folder" [hasChildren]="true">
|
|
2751
|
+
* Folder
|
|
2752
|
+
* <mcms-tree-item-group [ownedBy]="parentItem">
|
|
2753
|
+
* <mcms-tree-item [parent]="childGroup" value="file" label="File">File</mcms-tree-item>
|
|
2754
|
+
* </mcms-tree-item-group>
|
|
2755
|
+
* </mcms-tree-item>
|
|
2756
|
+
* ```
|
|
2757
|
+
*/
|
|
2758
|
+
declare class TreeItemGroupComponent {
|
|
2759
|
+
readonly group: TreeItemGroup<any>;
|
|
2760
|
+
/** The parent tree item that owns this group */
|
|
2761
|
+
readonly ownedBy: _angular_core.InputSignal<TreeItem$1<string>>;
|
|
2762
|
+
/** Additional CSS classes */
|
|
2763
|
+
readonly class: _angular_core.InputSignal<string>;
|
|
2764
|
+
protected readonly isExpanded: _angular_core.Signal<boolean>;
|
|
2765
|
+
protected readonly hostClasses: _angular_core.Signal<string>;
|
|
2766
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<TreeItemGroupComponent, never>;
|
|
2767
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<TreeItemGroupComponent, "mcms-tree-item-group", ["mcmsTreeItemGroup"], { "ownedBy": { "alias": "ownedBy"; "required": true; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, [{ directive: typeof i1$6.TreeItemGroup; inputs: { "ownedBy": "ownedBy"; }; outputs: {}; }]>;
|
|
2768
|
+
}
|
|
2769
|
+
|
|
2770
|
+
/**
|
|
2771
|
+
* Menubar orientation
|
|
2772
|
+
*/
|
|
2773
|
+
type MenubarOrientation = 'horizontal' | 'vertical';
|
|
2774
|
+
/**
|
|
2775
|
+
* Menubar item configuration
|
|
2776
|
+
*/
|
|
2777
|
+
interface MenubarItemConfig {
|
|
2778
|
+
/** Unique value identifier */
|
|
2779
|
+
value: string;
|
|
2780
|
+
/** Display label */
|
|
2781
|
+
label: string;
|
|
2782
|
+
/** Whether the item is disabled */
|
|
2783
|
+
disabled?: boolean;
|
|
2784
|
+
/** Keyboard shortcut hint */
|
|
2785
|
+
shortcut?: string;
|
|
2786
|
+
/** Icon identifier */
|
|
2787
|
+
icon?: string;
|
|
2788
|
+
/** Submenu items */
|
|
2789
|
+
children?: MenubarItemConfig[];
|
|
2790
|
+
}
|
|
2791
|
+
|
|
2792
|
+
/**
|
|
2793
|
+
* Application menu bar for File, Edit, View style menus.
|
|
2794
|
+
*
|
|
2795
|
+
* Uses @angular/aria/menu for keyboard navigation (Arrow keys, Enter/Space).
|
|
2796
|
+
*
|
|
2797
|
+
* @example
|
|
2798
|
+
* ```html
|
|
2799
|
+
* <mcms-menubar>
|
|
2800
|
+
* <mcms-menubar-item value="file" label="File" [submenu]="fileMenu">
|
|
2801
|
+
* <mcms-menubar-submenu #fileMenu>
|
|
2802
|
+
* <mcms-menubar-item value="new" label="New" shortcut="⌘N" />
|
|
2803
|
+
* <mcms-menubar-item value="open" label="Open" shortcut="⌘O" />
|
|
2804
|
+
* </mcms-menubar-submenu>
|
|
2805
|
+
* </mcms-menubar-item>
|
|
2806
|
+
* <mcms-menubar-item value="edit" label="Edit" [submenu]="editMenu">
|
|
2807
|
+
* ...
|
|
2808
|
+
* </mcms-menubar-item>
|
|
2809
|
+
* </mcms-menubar>
|
|
2810
|
+
* ```
|
|
2811
|
+
*/
|
|
2812
|
+
declare class Menubar {
|
|
2813
|
+
readonly menubar: MenuBar<any>;
|
|
2814
|
+
/** Whether the menubar is disabled */
|
|
2815
|
+
readonly disabled: _angular_core.InputSignal<boolean>;
|
|
2816
|
+
/** Whether navigation wraps around */
|
|
2817
|
+
readonly wrap: _angular_core.InputSignal<boolean>;
|
|
2818
|
+
/** Typeahead delay in milliseconds */
|
|
2819
|
+
readonly typeaheadDelay: _angular_core.InputSignal<number>;
|
|
2820
|
+
/** Selected values (for checkable menu items) */
|
|
2821
|
+
readonly values: _angular_core.ModelSignal<string[]>;
|
|
2822
|
+
/** Additional CSS classes */
|
|
2823
|
+
readonly class: _angular_core.InputSignal<string>;
|
|
2824
|
+
protected readonly hostClasses: _angular_core.Signal<string>;
|
|
2825
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<Menubar, never>;
|
|
2826
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<Menubar, "mcms-menubar", ["mcmsMenubar"], { "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "wrap": { "alias": "wrap"; "required": false; "isSignal": true; }; "typeaheadDelay": { "alias": "typeaheadDelay"; "required": false; "isSignal": true; }; "values": { "alias": "values"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; }, { "values": "valuesChange"; }, never, ["*"], true, [{ directive: typeof i1.MenuBar; inputs: { "disabled": "disabled"; "wrap": "wrap"; "typeaheadDelay": "typeaheadDelay"; "values": "values"; }; outputs: { "valuesChange": "valuesChange"; }; }]>;
|
|
2827
|
+
}
|
|
2828
|
+
|
|
2829
|
+
/**
|
|
2830
|
+
* A submenu dropdown for menubar items.
|
|
2831
|
+
*
|
|
2832
|
+
* @example
|
|
2833
|
+
* ```html
|
|
2834
|
+
* <mcms-menubar-submenu #fileMenu>
|
|
2835
|
+
* <mcms-menubar-submenu-item value="new" label="New" shortcut="⌘N" />
|
|
2836
|
+
* <mcms-menubar-submenu-item value="open" label="Open" shortcut="⌘O" />
|
|
2837
|
+
* <mcms-menubar-separator />
|
|
2838
|
+
* <mcms-menubar-submenu-item value="exit" label="Exit" />
|
|
2839
|
+
* </mcms-menubar-submenu>
|
|
2840
|
+
* ```
|
|
2841
|
+
*/
|
|
2842
|
+
declare class MenubarSubmenu {
|
|
2843
|
+
readonly menu: Menu<any>;
|
|
2844
|
+
readonly parent: _angular_core.ModelSignal<MenuItem<string> | undefined>;
|
|
2845
|
+
/** Whether the submenu is disabled */
|
|
2846
|
+
readonly disabled: _angular_core.InputSignal<boolean>;
|
|
2847
|
+
/** Whether navigation wraps around */
|
|
2848
|
+
readonly wrap: _angular_core.InputSignal<boolean>;
|
|
2849
|
+
/** Typeahead delay in milliseconds */
|
|
2850
|
+
readonly typeaheadDelay: _angular_core.InputSignal<number>;
|
|
2851
|
+
/** Additional CSS classes */
|
|
2852
|
+
readonly class: _angular_core.InputSignal<string>;
|
|
2853
|
+
protected readonly hostClasses: _angular_core.Signal<string>;
|
|
2854
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<MenubarSubmenu, never>;
|
|
2855
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<MenubarSubmenu, "mcms-menubar-submenu", ["mcmsMenubarSubmenu"], { "parent": { "alias": "parent"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "wrap": { "alias": "wrap"; "required": false; "isSignal": true; }; "typeaheadDelay": { "alias": "typeaheadDelay"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; }, { "parent": "parentChange"; }, never, ["*"], true, [{ directive: typeof i1.Menu; inputs: { "disabled": "disabled"; "wrap": "wrap"; "typeaheadDelay": "typeaheadDelay"; }; outputs: {}; }]>;
|
|
2856
|
+
}
|
|
2857
|
+
/**
|
|
2858
|
+
* A menu item inside a menubar submenu.
|
|
2859
|
+
*
|
|
2860
|
+
* @example
|
|
2861
|
+
* ```html
|
|
2862
|
+
* <mcms-menubar-submenu-item value="new" label="New" shortcut="⌘N" />
|
|
2863
|
+
* ```
|
|
2864
|
+
*/
|
|
2865
|
+
declare class MenubarSubmenuItem {
|
|
2866
|
+
readonly menuItem: MenuItem<string>;
|
|
2867
|
+
/** The unique value for this item */
|
|
2868
|
+
readonly value: _angular_core.InputSignal<string>;
|
|
2869
|
+
/** Display label */
|
|
2870
|
+
readonly label: _angular_core.InputSignal<string>;
|
|
2871
|
+
/** Whether the item is disabled */
|
|
2872
|
+
readonly disabled: _angular_core.InputSignal<boolean>;
|
|
2873
|
+
/** Keyboard shortcut hint */
|
|
2874
|
+
readonly shortcut: _angular_core.InputSignal<string | undefined>;
|
|
2875
|
+
/** Text used for typeahead search */
|
|
2876
|
+
readonly searchTerm: _angular_core.ModelSignal<string>;
|
|
2877
|
+
/** Reference to a nested submenu */
|
|
2878
|
+
readonly submenu: _angular_core.InputSignal<MenubarSubmenu | undefined>;
|
|
2879
|
+
/** Additional CSS classes */
|
|
2880
|
+
readonly class: _angular_core.InputSignal<string>;
|
|
2881
|
+
protected readonly hostClasses: _angular_core.Signal<string>;
|
|
2882
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<MenubarSubmenuItem, never>;
|
|
2883
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<MenubarSubmenuItem, "mcms-menubar-submenu-item", ["mcmsMenubarSubmenuItem"], { "value": { "alias": "value"; "required": true; "isSignal": true; }; "label": { "alias": "label"; "required": true; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "shortcut": { "alias": "shortcut"; "required": false; "isSignal": true; }; "searchTerm": { "alias": "searchTerm"; "required": false; "isSignal": true; }; "submenu": { "alias": "submenu"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; }, { "searchTerm": "searchTermChange"; }, never, ["[mcms-menubar-submenu-item-icon]", "*"], true, [{ directive: typeof i1.MenuItem; inputs: { "value": "value"; "disabled": "disabled"; "searchTerm": "searchTerm"; "submenu": "submenu"; }; outputs: {}; }]>;
|
|
2884
|
+
}
|
|
2885
|
+
/**
|
|
2886
|
+
* Separator line within a menubar submenu.
|
|
2887
|
+
*/
|
|
2888
|
+
declare class MenubarSeparator {
|
|
2889
|
+
/** Additional CSS classes */
|
|
2890
|
+
readonly class: _angular_core.InputSignal<string>;
|
|
2891
|
+
protected readonly hostClasses: _angular_core.Signal<string>;
|
|
2892
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<MenubarSeparator, never>;
|
|
2893
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<MenubarSeparator, "mcms-menubar-separator", never, { "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
2894
|
+
}
|
|
2895
|
+
|
|
2896
|
+
/**
|
|
2897
|
+
* A top-level item in the menubar.
|
|
2898
|
+
*
|
|
2899
|
+
* @example
|
|
2900
|
+
* ```html
|
|
2901
|
+
* <mcms-menubar-item value="file" label="File" [submenu]="fileMenu">
|
|
2902
|
+
* <mcms-menubar-submenu #fileMenu>
|
|
2903
|
+
* ...submenu content
|
|
2904
|
+
* </mcms-menubar-submenu>
|
|
2905
|
+
* </mcms-menubar-item>
|
|
2906
|
+
* ```
|
|
2907
|
+
*/
|
|
2908
|
+
declare class MenubarItem {
|
|
2909
|
+
readonly menuItem: MenuItem<string>;
|
|
2910
|
+
/** The unique value for this item */
|
|
2911
|
+
readonly value: _angular_core.InputSignal<string>;
|
|
2912
|
+
/** Display label */
|
|
2913
|
+
readonly label: _angular_core.InputSignal<string>;
|
|
2914
|
+
/** Whether the item is disabled */
|
|
2915
|
+
readonly disabled: _angular_core.InputSignal<boolean>;
|
|
2916
|
+
/** Text used for typeahead search */
|
|
2917
|
+
readonly searchTerm: _angular_core.ModelSignal<string>;
|
|
2918
|
+
/** Reference to the submenu component */
|
|
2919
|
+
readonly submenu: _angular_core.InputSignal<MenubarSubmenu | undefined>;
|
|
2920
|
+
/** Additional CSS classes */
|
|
2921
|
+
readonly class: _angular_core.InputSignal<string>;
|
|
2922
|
+
protected readonly hostClasses: _angular_core.Signal<string>;
|
|
2923
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<MenubarItem, never>;
|
|
2924
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<MenubarItem, "mcms-menubar-item", ["mcmsMenubarItem"], { "value": { "alias": "value"; "required": true; "isSignal": true; }; "label": { "alias": "label"; "required": true; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "searchTerm": { "alias": "searchTerm"; "required": false; "isSignal": true; }; "submenu": { "alias": "submenu"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; }, { "searchTerm": "searchTermChange"; }, never, ["[mcms-menubar-item-icon]", "*"], true, [{ directive: typeof i1.MenuItem; inputs: { "value": "value"; "disabled": "disabled"; "searchTerm": "searchTerm"; "submenu": "submenu"; }; outputs: {}; }]>;
|
|
2925
|
+
}
|
|
2926
|
+
|
|
2927
|
+
/**
|
|
2928
|
+
* A search input component with debounce support and clear functionality.
|
|
2929
|
+
*
|
|
2930
|
+
* @example
|
|
2931
|
+
* ```html
|
|
2932
|
+
* <mcms-search-input
|
|
2933
|
+
* placeholder="Search users..."
|
|
2934
|
+
* [debounce]="300"
|
|
2935
|
+
* (searchChange)="onSearch($event)"
|
|
2936
|
+
* />
|
|
2937
|
+
* ```
|
|
2938
|
+
*/
|
|
2939
|
+
declare class SearchInput {
|
|
2940
|
+
private readonly document;
|
|
2941
|
+
/** The current search value (two-way binding). */
|
|
2942
|
+
readonly value: _angular_core.ModelSignal<string>;
|
|
2943
|
+
/** Placeholder text. */
|
|
2944
|
+
readonly placeholder: _angular_core.InputSignal<string>;
|
|
2945
|
+
/** Debounce time in milliseconds before emitting search event. */
|
|
2946
|
+
readonly debounce: _angular_core.InputSignal<number>;
|
|
2947
|
+
/** Whether the input is disabled. */
|
|
2948
|
+
readonly disabled: _angular_core.InputSignal<boolean>;
|
|
2949
|
+
/** Accessible label for the search input. */
|
|
2950
|
+
readonly ariaLabel: _angular_core.InputSignal<string>;
|
|
2951
|
+
/** Additional CSS classes. */
|
|
2952
|
+
readonly class: _angular_core.InputSignal<string>;
|
|
2953
|
+
/** Emitted after debounce when search value changes. */
|
|
2954
|
+
readonly searchChange: _angular_core.OutputEmitterRef<string>;
|
|
2955
|
+
/** Emitted when the clear button is clicked. */
|
|
2956
|
+
readonly clear: _angular_core.OutputEmitterRef<void>;
|
|
2957
|
+
readonly hostClasses: _angular_core.Signal<string>;
|
|
2958
|
+
private debounceTimer;
|
|
2959
|
+
constructor();
|
|
2960
|
+
onClear(): void;
|
|
2961
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SearchInput, never>;
|
|
2962
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<SearchInput, "mcms-search-input", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "debounce": { "alias": "debounce"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "searchChange": "searchChange"; "clear": "clear"; }, never, never, true, never>;
|
|
2963
|
+
}
|
|
2964
|
+
|
|
2965
|
+
/**
|
|
2966
|
+
* Supported display types for FieldDisplay component.
|
|
2967
|
+
*/
|
|
2968
|
+
type FieldDisplayType = 'text' | 'number' | 'date' | 'datetime' | 'boolean' | 'badge' | 'link' | 'email' | 'list' | 'json' | 'html' | 'group' | 'array-table';
|
|
2969
|
+
/**
|
|
2970
|
+
* Badge variant mapping for field values.
|
|
2971
|
+
*/
|
|
2972
|
+
interface FieldDisplayBadgeConfig {
|
|
2973
|
+
/** Map of value to variant */
|
|
2974
|
+
variants?: Record<string, 'default' | 'secondary' | 'success' | 'warning' | 'destructive' | 'outline'>;
|
|
2975
|
+
/** Default variant if no match found */
|
|
2976
|
+
defaultVariant?: 'default' | 'secondary' | 'success' | 'warning' | 'destructive' | 'outline';
|
|
2977
|
+
}
|
|
2978
|
+
/**
|
|
2979
|
+
* Metadata about a sub-field for structured display types (group, array-table).
|
|
2980
|
+
*/
|
|
2981
|
+
interface FieldDisplayFieldMeta {
|
|
2982
|
+
/** Sub-field name (used to extract values from objects) */
|
|
2983
|
+
name: string;
|
|
2984
|
+
/** Display label for the sub-field */
|
|
2985
|
+
label?: string;
|
|
2986
|
+
/** Field type from core (text, number, checkbox, etc.) */
|
|
2987
|
+
type: string;
|
|
2988
|
+
}
|
|
2989
|
+
/**
|
|
2990
|
+
* Number format configuration for the display component.
|
|
2991
|
+
* Maps to Intl.NumberFormat options.
|
|
2992
|
+
*/
|
|
2993
|
+
interface FieldDisplayNumberFormat {
|
|
2994
|
+
/** Formatting style */
|
|
2995
|
+
style?: 'decimal' | 'currency' | 'percent';
|
|
2996
|
+
/** ISO 4217 currency code (e.g. 'USD') */
|
|
2997
|
+
currency?: string;
|
|
2998
|
+
/** BCP 47 locale tag (e.g. 'en-US') */
|
|
2999
|
+
locale?: string;
|
|
3000
|
+
/** Minimum fraction digits */
|
|
3001
|
+
minimumFractionDigits?: number;
|
|
3002
|
+
/** Maximum fraction digits */
|
|
3003
|
+
maximumFractionDigits?: number;
|
|
3004
|
+
}
|
|
3005
|
+
/**
|
|
3006
|
+
* Date format configuration for the display component.
|
|
3007
|
+
* Maps to Intl.DateTimeFormat options.
|
|
3008
|
+
*/
|
|
3009
|
+
interface FieldDisplayDateFormat {
|
|
3010
|
+
/** Preset format style */
|
|
3011
|
+
preset?: 'short' | 'medium' | 'long' | 'full';
|
|
3012
|
+
/** BCP 47 locale tag */
|
|
3013
|
+
locale?: string;
|
|
3014
|
+
/** Whether to include time */
|
|
3015
|
+
includeTime?: boolean;
|
|
3016
|
+
/** Time style when includeTime is true */
|
|
3017
|
+
timePreset?: 'short' | 'medium' | 'long' | 'full';
|
|
3018
|
+
}
|
|
3019
|
+
/**
|
|
3020
|
+
* Configuration options for FieldDisplay.
|
|
3021
|
+
*/
|
|
3022
|
+
interface FieldDisplayConfig {
|
|
3023
|
+
/** Label for the field */
|
|
3024
|
+
label?: string;
|
|
3025
|
+
/** Format string for dates (e.g., 'YYYY-MM-DD') */
|
|
3026
|
+
format?: string;
|
|
3027
|
+
/** Text to show when value is empty/null/undefined */
|
|
3028
|
+
emptyText?: string;
|
|
3029
|
+
/** Badge configuration for type='badge' */
|
|
3030
|
+
badgeConfig?: FieldDisplayBadgeConfig;
|
|
3031
|
+
/** Whether to open links in new tab (for link/email types) */
|
|
3032
|
+
openInNewTab?: boolean;
|
|
3033
|
+
/** Maximum items to show for list type before truncating */
|
|
3034
|
+
maxItems?: number;
|
|
3035
|
+
}
|
|
3036
|
+
|
|
3037
|
+
/**
|
|
3038
|
+
* A read-only display component for rendering values with type-aware formatting.
|
|
3039
|
+
*
|
|
3040
|
+
* @example
|
|
3041
|
+
* ```html
|
|
3042
|
+
* <mcms-field-display [value]="user.name" type="text" label="Name" />
|
|
3043
|
+
* <mcms-field-display [value]="user.createdAt" type="date" label="Created" />
|
|
3044
|
+
* <mcms-field-display [value]="user.status" type="badge" [badgeConfig]="statusConfig" />
|
|
3045
|
+
* <mcms-field-display [value]="product.price" type="number"
|
|
3046
|
+
* [numberFormat]="{ style: 'currency', currency: 'USD' }" label="Price" />
|
|
3047
|
+
* <mcms-field-display [value]="product.seo" type="group" [fieldMeta]="seoMeta" label="SEO" />
|
|
3048
|
+
* ```
|
|
3049
|
+
*/
|
|
3050
|
+
declare class FieldDisplay {
|
|
3051
|
+
/** The value to display. */
|
|
3052
|
+
readonly value: _angular_core.InputSignal<unknown>;
|
|
3053
|
+
/** The type of display formatting to use. */
|
|
3054
|
+
readonly type: _angular_core.InputSignal<FieldDisplayType>;
|
|
3055
|
+
/** Optional label shown above the value. */
|
|
3056
|
+
readonly label: _angular_core.InputSignal<string | undefined>;
|
|
3057
|
+
/** Format string for dates. */
|
|
3058
|
+
readonly format: _angular_core.InputSignal<string | undefined>;
|
|
3059
|
+
/** Text to show when value is empty/null/undefined. */
|
|
3060
|
+
readonly emptyText: _angular_core.InputSignal<string>;
|
|
3061
|
+
/** Badge configuration for type='badge'. */
|
|
3062
|
+
readonly badgeConfig: _angular_core.InputSignal<FieldDisplayBadgeConfig | undefined>;
|
|
3063
|
+
/** Whether to open links in new tab. */
|
|
3064
|
+
readonly openInNewTab: _angular_core.InputSignal<boolean>;
|
|
3065
|
+
/** Maximum items to show for list/array-table types. */
|
|
3066
|
+
readonly maxItems: _angular_core.InputSignal<number>;
|
|
3067
|
+
/** Additional CSS classes. */
|
|
3068
|
+
readonly class: _angular_core.InputSignal<string>;
|
|
3069
|
+
/** Sub-field metadata for 'group' and 'array-table' display types. */
|
|
3070
|
+
readonly fieldMeta: _angular_core.InputSignal<FieldDisplayFieldMeta[]>;
|
|
3071
|
+
/** Number format options (e.g. currency, percent). */
|
|
3072
|
+
readonly numberFormat: _angular_core.InputSignal<FieldDisplayNumberFormat | undefined>;
|
|
3073
|
+
/** Date format options (e.g. preset style, locale). */
|
|
3074
|
+
readonly dateFormat: _angular_core.InputSignal<FieldDisplayDateFormat | undefined>;
|
|
3075
|
+
readonly hostClasses: _angular_core.Signal<string>;
|
|
3076
|
+
readonly isEmpty: _angular_core.Signal<boolean>;
|
|
3077
|
+
readonly displayValue: _angular_core.Signal<string>;
|
|
3078
|
+
readonly stringValue: _angular_core.Signal<string>;
|
|
3079
|
+
readonly booleanValue: _angular_core.Signal<boolean>;
|
|
3080
|
+
readonly formattedNumber: _angular_core.Signal<string>;
|
|
3081
|
+
readonly formattedDate: _angular_core.Signal<string>;
|
|
3082
|
+
readonly formattedDateTime: _angular_core.Signal<string>;
|
|
3083
|
+
readonly formattedJson: _angular_core.Signal<string>;
|
|
3084
|
+
readonly badgeVariant: _angular_core.Signal<"default" | "secondary" | "destructive" | "outline" | "success" | "warning">;
|
|
3085
|
+
readonly listValue: _angular_core.Signal<unknown[]>;
|
|
3086
|
+
readonly displayList: _angular_core.Signal<unknown[]>;
|
|
3087
|
+
readonly hasMoreItems: _angular_core.Signal<boolean>;
|
|
3088
|
+
readonly remainingItems: _angular_core.Signal<number>;
|
|
3089
|
+
/** Extract a sub-field value from a group object. */
|
|
3090
|
+
getGroupFieldValue(fieldName: string): string;
|
|
3091
|
+
/** Extract a cell value from an array row. */
|
|
3092
|
+
getArrayCellValue(row: unknown, meta: FieldDisplayFieldMeta): string;
|
|
3093
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<FieldDisplay, never>;
|
|
3094
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<FieldDisplay, "mcms-field-display", never, { "value": { "alias": "value"; "required": true; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "format": { "alias": "format"; "required": false; "isSignal": true; }; "emptyText": { "alias": "emptyText"; "required": false; "isSignal": true; }; "badgeConfig": { "alias": "badgeConfig"; "required": false; "isSignal": true; }; "openInNewTab": { "alias": "openInNewTab"; "required": false; "isSignal": true; }; "maxItems": { "alias": "maxItems"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; "fieldMeta": { "alias": "fieldMeta"; "required": false; "isSignal": true; }; "numberFormat": { "alias": "numberFormat"; "required": false; "isSignal": true; }; "dateFormat": { "alias": "dateFormat"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
3095
|
+
}
|
|
3096
|
+
|
|
3097
|
+
/**
|
|
3098
|
+
* @deprecated Use `BlockAdminModeService` via `provideBlockAdminMode()` instead.
|
|
3099
|
+
* When provided and true, block renderer shows admin edit overlays on hover.
|
|
3100
|
+
*/
|
|
3101
|
+
declare const BLOCK_ADMIN_MODE: InjectionToken<boolean>;
|
|
3102
|
+
/** Registry mapping block type slugs to their renderer components. */
|
|
3103
|
+
declare const BLOCK_COMPONENT_REGISTRY: InjectionToken<Map<string, Type<unknown>>>;
|
|
3104
|
+
/** Optional fallback component rendered for unregistered block types. */
|
|
3105
|
+
declare const BLOCK_FALLBACK_COMPONENT: InjectionToken<Type<unknown>>;
|
|
3106
|
+
/**
|
|
3107
|
+
* Provide block components for the block renderer via DI.
|
|
3108
|
+
*
|
|
3109
|
+
* @example
|
|
3110
|
+
* ```typescript
|
|
3111
|
+
* providers: [
|
|
3112
|
+
* ...provideBlockComponents({
|
|
3113
|
+
* hero: HeroBlockComponent,
|
|
3114
|
+
* textBlock: TextBlockComponent,
|
|
3115
|
+
* feature: FeatureBlockComponent,
|
|
3116
|
+
* }),
|
|
3117
|
+
* ]
|
|
3118
|
+
* ```
|
|
3119
|
+
*/
|
|
3120
|
+
declare function provideBlockComponents(registry: Record<string, Type<unknown>>): Provider[];
|
|
3121
|
+
|
|
3122
|
+
/**
|
|
3123
|
+
* Block Admin Mode Service
|
|
3124
|
+
*
|
|
3125
|
+
* Runtime-togglable service controlling whether block admin mode is active.
|
|
3126
|
+
* When active, the BlockRendererComponent shows hover overlays with edit buttons.
|
|
3127
|
+
*
|
|
3128
|
+
* Unlike the deprecated BLOCK_ADMIN_MODE injection token (compile-time boolean),
|
|
3129
|
+
* this service can be toggled at runtime via query param, admin toolbar, or API.
|
|
3130
|
+
*
|
|
3131
|
+
* The `isAdmin` property can be replaced with a computed signal to derive admin
|
|
3132
|
+
* mode from an external reactive source (e.g., auth service).
|
|
3133
|
+
*/
|
|
3134
|
+
|
|
3135
|
+
declare class BlockAdminModeService {
|
|
3136
|
+
private readonly _isAdmin;
|
|
3137
|
+
/** Current admin mode state. Can be replaced with a computed for reactive sources. */
|
|
3138
|
+
isAdmin: Signal<boolean>;
|
|
3139
|
+
enable(): void;
|
|
3140
|
+
disable(): void;
|
|
3141
|
+
toggle(): void;
|
|
3142
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<BlockAdminModeService, never>;
|
|
3143
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<BlockAdminModeService>;
|
|
3144
|
+
}
|
|
3145
|
+
/**
|
|
3146
|
+
* Provide BlockAdminModeService with an initial value or reactive signal source.
|
|
3147
|
+
*
|
|
3148
|
+
* @param initialValue - Whether admin mode starts enabled.
|
|
3149
|
+
* Can be a boolean, a factory function (for SSR safety), or a Signal<boolean>
|
|
3150
|
+
* to reactively derive admin mode from an external source.
|
|
3151
|
+
*
|
|
3152
|
+
* @example
|
|
3153
|
+
* ```typescript
|
|
3154
|
+
* // Static value
|
|
3155
|
+
* providers: [...provideBlockAdminMode(true)]
|
|
3156
|
+
*
|
|
3157
|
+
* // Factory function
|
|
3158
|
+
* providers: [...provideBlockAdminMode(() => isInPreviewIframe())]
|
|
3159
|
+
*
|
|
3160
|
+
* // Reactive signal source
|
|
3161
|
+
* providers: [...provideBlockAdminMode(authService.isAdmin)]
|
|
3162
|
+
* ```
|
|
3163
|
+
*/
|
|
3164
|
+
declare function provideBlockAdminMode(initialValue?: boolean | (() => boolean) | Signal<boolean>): Provider[];
|
|
3165
|
+
|
|
3166
|
+
declare class BlockOutletComponent {
|
|
3167
|
+
private readonly vcr;
|
|
3168
|
+
private readonly registry;
|
|
3169
|
+
private readonly fallback;
|
|
3170
|
+
/** The block type slug used to look up the component in the registry. */
|
|
3171
|
+
readonly blockType: _angular_core.InputSignal<string>;
|
|
3172
|
+
/** The block data object passed to the instantiated component via setInput. */
|
|
3173
|
+
readonly blockData: _angular_core.InputSignal<Record<string, unknown>>;
|
|
3174
|
+
private componentRef;
|
|
3175
|
+
constructor();
|
|
3176
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<BlockOutletComponent, never>;
|
|
3177
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<BlockOutletComponent, "mcms-block-outlet", never, { "blockType": { "alias": "blockType"; "required": true; "isSignal": true; }; "blockData": { "alias": "blockData"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
3178
|
+
}
|
|
3179
|
+
|
|
3180
|
+
declare class BlockRendererComponent {
|
|
3181
|
+
/** Array of block data records to render. */
|
|
3182
|
+
readonly blocks: _angular_core.InputSignal<Record<string, unknown>[]>;
|
|
3183
|
+
/** Key used to read the block type from each record. Defaults to 'blockType'. */
|
|
3184
|
+
readonly typeField: _angular_core.InputSignal<string>;
|
|
3185
|
+
/** Emitted when an admin clicks the edit button on a block. Payload is the block index. */
|
|
3186
|
+
readonly editBlock: _angular_core.OutputEmitterRef<number>;
|
|
3187
|
+
/** Whether admin mode is active (shows edit overlays). Prefers service over deprecated token. */
|
|
3188
|
+
private readonly adminModeService;
|
|
3189
|
+
private readonly adminModeToken;
|
|
3190
|
+
readonly adminMode: _angular_core.Signal<boolean>;
|
|
3191
|
+
/** Extract the block type string from a block record. */
|
|
3192
|
+
getBlockType(block: Record<string, unknown>): string | null;
|
|
3193
|
+
/**
|
|
3194
|
+
* Read the `_analytics` group from block data and return a tracking descriptor.
|
|
3195
|
+
* Returns null if no tracking is configured (attribute won't be rendered).
|
|
3196
|
+
*/
|
|
3197
|
+
getBlockTrack(block: Record<string, unknown>): string | null;
|
|
3198
|
+
onEditBlock(index: number): void;
|
|
3199
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<BlockRendererComponent, never>;
|
|
3200
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<BlockRendererComponent, "mcms-block-renderer", never, { "blocks": { "alias": "blocks"; "required": false; "isSignal": true; }; "typeField": { "alias": "typeField"; "required": false; "isSignal": true; }; }, { "editBlock": "editBlock"; }, never, never, true, never>;
|
|
3201
|
+
}
|
|
3202
|
+
|
|
3203
|
+
interface KitchenSinkUser {
|
|
3204
|
+
id: number;
|
|
3205
|
+
name: string;
|
|
3206
|
+
email: string;
|
|
3207
|
+
role: string;
|
|
3208
|
+
status: string;
|
|
3209
|
+
}
|
|
3210
|
+
/**
|
|
3211
|
+
* Kitchen Sink page showcasing all UI components.
|
|
3212
|
+
*
|
|
3213
|
+
* @example
|
|
3214
|
+
* ```typescript
|
|
3215
|
+
* // In routing:
|
|
3216
|
+
* { path: 'kitchen-sink', loadComponent: () => import('@momentumcms/ui').then(m => m.KitchenSinkPage) }
|
|
3217
|
+
* ```
|
|
3218
|
+
*/
|
|
3219
|
+
declare class KitchenSinkPage {
|
|
3220
|
+
private readonly toastService;
|
|
3221
|
+
private readonly confirmationService;
|
|
3222
|
+
readonly currentPage: _angular_core.WritableSignal<number>;
|
|
3223
|
+
readonly commandPaletteOpen: _angular_core.WritableSignal<boolean>;
|
|
3224
|
+
readonly searchQuery: _angular_core.WritableSignal<string>;
|
|
3225
|
+
readonly activeIndex: _angular_core.WritableSignal<number>;
|
|
3226
|
+
readonly searchValue: _angular_core.WritableSignal<string>;
|
|
3227
|
+
readonly fieldDisplayJsonData: {
|
|
3228
|
+
theme: string;
|
|
3229
|
+
language: string;
|
|
3230
|
+
version: string;
|
|
3231
|
+
};
|
|
3232
|
+
readonly commandItems: {
|
|
3233
|
+
value: string;
|
|
3234
|
+
label: string;
|
|
3235
|
+
group: string;
|
|
3236
|
+
}[];
|
|
3237
|
+
readonly filteredSuggestions: _angular_core.Signal<{
|
|
3238
|
+
value: string;
|
|
3239
|
+
label: string;
|
|
3240
|
+
group: string;
|
|
3241
|
+
}[]>;
|
|
3242
|
+
readonly filteredSettings: _angular_core.Signal<{
|
|
3243
|
+
value: string;
|
|
3244
|
+
label: string;
|
|
3245
|
+
group: string;
|
|
3246
|
+
}[]>;
|
|
3247
|
+
readonly allFilteredItems: _angular_core.Signal<{
|
|
3248
|
+
value: string;
|
|
3249
|
+
label: string;
|
|
3250
|
+
group: string;
|
|
3251
|
+
}[]>;
|
|
3252
|
+
handleKeyboardShortcut(event: KeyboardEvent): void;
|
|
3253
|
+
handleCommandKeydown(event: KeyboardEvent): void;
|
|
3254
|
+
selectCommandItem(item: {
|
|
3255
|
+
value: string;
|
|
3256
|
+
label: string;
|
|
3257
|
+
}): void;
|
|
3258
|
+
openCommandPalette(): void;
|
|
3259
|
+
closeCommandPalette(): void;
|
|
3260
|
+
readonly selectOptions: {
|
|
3261
|
+
value: string;
|
|
3262
|
+
label: string;
|
|
3263
|
+
}[];
|
|
3264
|
+
readonly radioOptions: {
|
|
3265
|
+
value: string;
|
|
3266
|
+
label: string;
|
|
3267
|
+
}[];
|
|
3268
|
+
readonly tableData: KitchenSinkUser[];
|
|
3269
|
+
readonly tableColumns: DataTableColumn<KitchenSinkUser>[];
|
|
3270
|
+
readonly tableRowActions: DataTableRowAction<KitchenSinkUser>[];
|
|
3271
|
+
readonly selectedTableItems: _angular_core.WritableSignal<KitchenSinkUser[]>;
|
|
3272
|
+
onTableRowAction(event: {
|
|
3273
|
+
action: DataTableRowAction<KitchenSinkUser>;
|
|
3274
|
+
item: KitchenSinkUser;
|
|
3275
|
+
}): void;
|
|
3276
|
+
showToast(type: 'default' | 'success' | 'error' | 'warning'): void;
|
|
3277
|
+
openDialog(): void;
|
|
3278
|
+
showConfirmation(): void;
|
|
3279
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<KitchenSinkPage, never>;
|
|
3280
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<KitchenSinkPage, "mcms-kitchen-sink-page", never, {}, {}, never, never, true, never>;
|
|
3281
|
+
}
|
|
3282
|
+
|
|
3283
|
+
export { AVATAR_SIZE_CLASSES, Accordion, AccordionContent, AccordionItem, AccordionTrigger, Alert, AlertDescription, AlertTitle, AspectRatio, Avatar, AvatarFallback, AvatarImage, BLOCK_ADMIN_MODE, BLOCK_COMPONENT_REGISTRY, BLOCK_FALLBACK_COMPONENT, Badge, BlockAdminModeService, BlockOutletComponent, BlockRendererComponent, BreadcrumbItem, BreadcrumbSeparator, Breadcrumbs, Button, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Checkbox, Command, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, ConfirmationDialogComponent, ConfirmationService, DIALOG_DATA, DataTable, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogRef, DialogService, DialogTitle, DropdownLabel, DropdownMenu, DropdownMenuItem, DropdownSeparator, DropdownTrigger, EmptyState, FieldDisplay, Input, KitchenSinkPage, Label, McmsFormField, Menubar, MenubarItem, MenubarSeparator, MenubarSubmenu, MenubarSubmenuItem, Pagination, PopoverContent, PopoverTrigger, Progress, RadioGroup, SPINNER_SIZES, SearchInput, Select, Separator, Sidebar, SidebarContent, SidebarFooter, SidebarHeader, SidebarNav, SidebarNavItem, SidebarSection, SidebarService, SidebarTrigger, Skeleton, Spinner, Switch, TOOLTIP_POSITION_MAP, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, ToastComponent, ToastContainer, ToastDescription, ToastService, ToastTitle, Toolbar, ToolbarSeparator, ToolbarWidget, ToolbarWidgetGroup, TooltipContent, TooltipTrigger, Tree, TreeItem, TreeItemGroupComponent, generatePaginationItems, getDropdownPositions, getPopoverPositions, provideBlockAdminMode, provideBlockComponents };
|
|
3284
|
+
export type { AccordionValue, AlertVariant, AvatarSize, BadgeVariant, ButtonSize, ButtonVariant, CommandFilterMode, ConfirmationConfig, ConfirmationIcon, ConfirmationVariant, DataTableCellContext, DataTableColumn, DataTableRowAction, DataTableRowActionEvent, DataTableSort, DialogConfig, DropdownMenuAlign, DropdownMenuSide, EmptyStateSize, FieldDisplayBadgeConfig, FieldDisplayConfig, FieldDisplayDateFormat, FieldDisplayFieldMeta, FieldDisplayNumberFormat, FieldDisplayType, InputType, MenubarItemConfig, MenubarOrientation, PaginationItem, PopoverAlign, PopoverSide, RadioOption, SelectOption, SidebarNavItemConfig, SidebarSectionConfig, SidebarState, SpinnerSize, TableFocusMode, TableSelectionMode, TableWrapMode, TabsOrientation, TabsSelectionMode, Toast, ToastConfig, ToastPosition, ToastVariant, ToolbarOrientation, TooltipPosition, TreeNode, ValidationError };
|