@atelier-ui/angular 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.
@@ -0,0 +1,1278 @@
1
+ import * as _angular_core from '@angular/core';
2
+ import { InjectionToken, WritableSignal, Signal, OnInit, OnDestroy, ElementRef } from '@angular/core';
3
+ import { LlmButtonVariant, LlmButtonSize } from '@atelier-ui/spec';
4
+ import { FormValueControl, WithOptionalFieldTree, ValidationError, FormCheckboxControl } from '@angular/forms/signals';
5
+ import * as _atelier_ui_angular from '@atelier-ui/angular';
6
+ import * as i1 from '@angular/cdk/accordion';
7
+ import * as i1$1 from '@angular/cdk/menu';
8
+
9
+ /**
10
+ * Accessible button component with visual variants and sizes.
11
+ *
12
+ * Usage:
13
+ * ```html
14
+ * <llm-button variant="primary" size="md" (click)="save()">Save</llm-button>
15
+ * <llm-button variant="outline" [disabled]="true">Cancel</llm-button>
16
+ * <llm-button [loading]="isSaving">Saving…</llm-button>
17
+ * ```
18
+ */
19
+ declare class LlmButton {
20
+ /** Visual style of the button. */
21
+ readonly variant: _angular_core.InputSignal<LlmButtonVariant>;
22
+ /** Size of the button. */
23
+ readonly size: _angular_core.InputSignal<LlmButtonSize>;
24
+ /** Disables the button, preventing interaction. */
25
+ readonly disabled: _angular_core.InputSignal<boolean>;
26
+ /** Shows a loading spinner and disables interaction. */
27
+ readonly loading: _angular_core.InputSignal<boolean>;
28
+ protected readonly isDisabled: _angular_core.Signal<boolean>;
29
+ protected readonly hostClasses: _angular_core.Signal<string>;
30
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<LlmButton, never>;
31
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<LlmButton, "llm-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; }; }, {}, never, ["*"], true, never>;
32
+ }
33
+
34
+ /**
35
+ * Card container component supporting elevated, outlined, and flat visual variants.
36
+ * Compose with `llm-card-header`, `llm-card-content`, and `llm-card-footer` sub-components.
37
+ *
38
+ * Usage:
39
+ * ```html
40
+ * <llm-card variant="elevated" padding="md">
41
+ * <llm-card-header>Card Title</llm-card-header>
42
+ * <llm-card-content>Main content goes here.</llm-card-content>
43
+ * <llm-card-footer>
44
+ * <llm-button variant="primary">Save</llm-button>
45
+ * </llm-card-footer>
46
+ * </llm-card>
47
+ * ```
48
+ */
49
+ declare class LlmCard {
50
+ /** Visual style of the card. */
51
+ readonly variant: _angular_core.InputSignal<"elevated" | "outlined" | "flat">;
52
+ /** Internal padding of the card. */
53
+ readonly padding: _angular_core.InputSignal<"sm" | "md" | "lg" | "none">;
54
+ protected readonly hostClasses: _angular_core.Signal<string>;
55
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<LlmCard, never>;
56
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<LlmCard, "llm-card", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "padding": { "alias": "padding"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
57
+ }
58
+ /**
59
+ * Header slot for `llm-card`. Renders above the main content with a bottom separator.
60
+ *
61
+ * Usage:
62
+ * ```html
63
+ * <llm-card-header>Card Title</llm-card-header>
64
+ * ```
65
+ */
66
+ declare class LlmCardHeader {
67
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<LlmCardHeader, never>;
68
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<LlmCardHeader, "llm-card-header", never, {}, {}, never, ["*"], true, never>;
69
+ }
70
+ /**
71
+ * Content slot for `llm-card`. Primary content area of the card.
72
+ *
73
+ * Usage:
74
+ * ```html
75
+ * <llm-card-content>Body text here.</llm-card-content>
76
+ * ```
77
+ */
78
+ declare class LlmCardContent {
79
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<LlmCardContent, never>;
80
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<LlmCardContent, "llm-card-content", never, {}, {}, never, ["*"], true, never>;
81
+ }
82
+ /**
83
+ * Footer slot for `llm-card`. Renders below the main content, typically holds actions.
84
+ *
85
+ * Usage:
86
+ * ```html
87
+ * <llm-card-footer>
88
+ * <llm-button variant="primary">Save</llm-button>
89
+ * </llm-card-footer>
90
+ * ```
91
+ */
92
+ declare class LlmCardFooter {
93
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<LlmCardFooter, never>;
94
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<LlmCardFooter, "llm-card-footer", never, {}, {}, never, ["*"], true, never>;
95
+ }
96
+
97
+ /**
98
+ * Inline status badge for labeling items with semantic color variants.
99
+ *
100
+ * Usage:
101
+ * ```html
102
+ * <llm-badge variant="success">Active</llm-badge>
103
+ * <llm-badge variant="danger" size="sm">Error</llm-badge>
104
+ * <llm-badge variant="warning">Pending</llm-badge>
105
+ * ```
106
+ */
107
+ declare class LlmBadge {
108
+ /** Semantic color variant of the badge. */
109
+ readonly variant: _angular_core.InputSignal<"default" | "success" | "warning" | "danger" | "info">;
110
+ /** Size of the badge. */
111
+ readonly size: _angular_core.InputSignal<"sm" | "md">;
112
+ protected readonly hostClasses: _angular_core.Signal<string>;
113
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<LlmBadge, never>;
114
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<LlmBadge, "llm-badge", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
115
+ }
116
+
117
+ /**
118
+ * Accessible text input component for use with Angular Signal Forms.
119
+ *
120
+ * Usage:
121
+ * ```html
122
+ * <llm-input type="email" placeholder="you@example.com" [(value)]="email" />
123
+ * <llm-input [formField]="loginForm.email" placeholder="Email" />
124
+ * ```
125
+ */
126
+ declare class LlmInput implements FormValueControl<string> {
127
+ /** The current input value. Bound by [formField] directive. Supports [(value)] two-way binding. */
128
+ readonly value: _angular_core.ModelSignal<string>;
129
+ /** The type of input field. */
130
+ readonly type: _angular_core.InputSignal<"number" | "text" | "email" | "password" | "tel" | "url">;
131
+ /** Placeholder text shown when the input is empty. */
132
+ readonly placeholder: _angular_core.InputSignal<string>;
133
+ /** Whether the input is disabled. Bound by [formField] directive. */
134
+ readonly disabled: _angular_core.InputSignal<boolean>;
135
+ /** Whether the input is read-only. Bound by [formField] directive. */
136
+ readonly readonly: _angular_core.InputSignal<boolean>;
137
+ /** Whether the input has validation errors. Bound by [formField] directive. */
138
+ readonly invalid: _angular_core.InputSignal<boolean>;
139
+ /** Validation errors from the form system. Bound by [formField] directive. */
140
+ readonly errors: _angular_core.InputSignal<readonly WithOptionalFieldTree<ValidationError>[]>;
141
+ /** Whether the user has interacted with the input. Bound by [formField] directive. */
142
+ readonly touched: _angular_core.ModelSignal<boolean>;
143
+ /** Whether the input is required. Bound by [formField] directive. */
144
+ readonly required: _angular_core.InputSignal<boolean>;
145
+ /** The input's name attribute. Bound by [formField] directive. */
146
+ readonly name: _angular_core.InputSignal<string>;
147
+ /** @internal */
148
+ protected readonly errorId: string;
149
+ /** @internal */
150
+ protected readonly showErrors: _angular_core.Signal<boolean>;
151
+ /** @internal */
152
+ protected readonly hostClasses: _angular_core.Signal<string>;
153
+ /** @internal */
154
+ protected onInput(event: Event): void;
155
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<LlmInput, never>;
156
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<LlmInput, "llm-input", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "errors": { "alias": "errors"; "required": false; "isSignal": true; }; "touched": { "alias": "touched"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "touched": "touchedChange"; }, never, never, true, never>;
157
+ }
158
+
159
+ /**
160
+ * Accessible multiline text input component for use with Angular Signal Forms.
161
+ *
162
+ * Usage:
163
+ * ```html
164
+ * <llm-textarea placeholder="Enter a description" [(value)]="description" />
165
+ * <llm-textarea [formField]="form.bio" [rows]="4" />
166
+ * ```
167
+ */
168
+ declare class LlmTextarea implements FormValueControl<string> {
169
+ /** The current textarea value. Supports [(value)] two-way binding. */
170
+ readonly value: _angular_core.ModelSignal<string>;
171
+ /** Number of visible text rows. */
172
+ readonly rows: _angular_core.InputSignal<number>;
173
+ /** Placeholder text shown when the textarea is empty. */
174
+ readonly placeholder: _angular_core.InputSignal<string>;
175
+ /** Whether the textarea is disabled. Bound by [formField] directive. */
176
+ readonly disabled: _angular_core.InputSignal<boolean>;
177
+ /** Whether the textarea is read-only. Bound by [formField] directive. */
178
+ readonly readonly: _angular_core.InputSignal<boolean>;
179
+ /** Whether the textarea has validation errors. Bound by [formField] directive. */
180
+ readonly invalid: _angular_core.InputSignal<boolean>;
181
+ /** Validation errors from the form system. Bound by [formField] directive. */
182
+ readonly errors: _angular_core.InputSignal<readonly WithOptionalFieldTree<ValidationError>[]>;
183
+ /** Whether the user has interacted with the textarea. Bound by [formField] directive. */
184
+ readonly touched: _angular_core.ModelSignal<boolean>;
185
+ /** Whether the textarea is required. Bound by [formField] directive. */
186
+ readonly required: _angular_core.InputSignal<boolean>;
187
+ /** The textarea's name attribute. Bound by [formField] directive. */
188
+ readonly name: _angular_core.InputSignal<string>;
189
+ /** Whether to auto-resize the textarea height to fit its content. */
190
+ readonly autoResize: _angular_core.InputSignal<boolean>;
191
+ /** @internal */
192
+ protected readonly errorId: string;
193
+ /** @internal */
194
+ protected readonly showErrors: _angular_core.Signal<boolean>;
195
+ /** @internal */
196
+ protected readonly hostClasses: _angular_core.Signal<string>;
197
+ /** @internal */
198
+ protected onInput(event: Event): void;
199
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<LlmTextarea, never>;
200
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<LlmTextarea, "llm-textarea", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "rows": { "alias": "rows"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "errors": { "alias": "errors"; "required": false; "isSignal": true; }; "touched": { "alias": "touched"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "autoResize": { "alias": "autoResize"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "touched": "touchedChange"; }, never, never, true, never>;
201
+ }
202
+
203
+ /**
204
+ * Accessible checkbox component for use with Angular Signal Forms.
205
+ *
206
+ * Usage:
207
+ * ```html
208
+ * <llm-checkbox [(checked)]="accepted">I agree to the terms</llm-checkbox>
209
+ * <llm-checkbox [formField]="form.accepted">Accept</llm-checkbox>
210
+ * ```
211
+ */
212
+ declare class LlmCheckbox implements FormCheckboxControl {
213
+ /** The checked state. Bound by [formField] directive. Supports [(checked)] two-way binding. */
214
+ readonly checked: _angular_core.ModelSignal<boolean>;
215
+ /** Whether the user has interacted with the input. Bound by [formField] directive. */
216
+ readonly touched: _angular_core.ModelSignal<boolean>;
217
+ /** Tri-state indeterminate mode (e.g. "select all"). Set via DOM property. */
218
+ readonly indeterminate: _angular_core.InputSignal<boolean>;
219
+ /** Whether the checkbox is disabled. Bound by [formField] directive. */
220
+ readonly disabled: _angular_core.InputSignal<boolean>;
221
+ /** Whether the checkbox has validation errors. Bound by [formField] directive. */
222
+ readonly invalid: _angular_core.InputSignal<boolean>;
223
+ /** Whether the checkbox is required. Bound by [formField] directive. */
224
+ readonly required: _angular_core.InputSignal<boolean>;
225
+ /** The input's name attribute. Bound by [formField] directive. */
226
+ readonly name: _angular_core.InputSignal<string>;
227
+ /** Validation errors from the form system. Bound by [formField] directive. */
228
+ readonly errors: _angular_core.InputSignal<readonly WithOptionalFieldTree<ValidationError>[]>;
229
+ /** @internal */
230
+ protected readonly inputId: string;
231
+ /** @internal */
232
+ protected readonly errorId: string;
233
+ /** @internal */
234
+ private readonly nativeInput;
235
+ /** @internal */
236
+ protected readonly showErrors: _angular_core.Signal<boolean>;
237
+ /** @internal */
238
+ protected readonly hostClasses: _angular_core.Signal<string>;
239
+ constructor();
240
+ /** @internal */
241
+ protected onChange(event: Event): void;
242
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<LlmCheckbox, never>;
243
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<LlmCheckbox, "llm-checkbox", never, { "checked": { "alias": "checked"; "required": false; "isSignal": true; }; "touched": { "alias": "touched"; "required": false; "isSignal": true; }; "indeterminate": { "alias": "indeterminate"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "errors": { "alias": "errors"; "required": false; "isSignal": true; }; }, { "checked": "checkedChange"; "touched": "touchedChange"; }, never, ["*"], true, never>;
244
+ }
245
+
246
+ /** @internal — shape required by LlmRadioGroup's FocusKeyManager */
247
+ interface RadioItem {
248
+ focusInput(): void;
249
+ isDisabled(): boolean;
250
+ readonly radioValue: Signal<string>;
251
+ }
252
+ interface LlmRadioGroupContext {
253
+ readonly value: WritableSignal<string>;
254
+ readonly name: Signal<string>;
255
+ readonly disabled: Signal<boolean>;
256
+ select(v: string): void;
257
+ markTouched(): void;
258
+ registerItem(item: RadioItem): void;
259
+ unregisterItem(item: RadioItem): void;
260
+ }
261
+ declare const LLM_RADIO_GROUP: InjectionToken<LlmRadioGroupContext>;
262
+
263
+ /**
264
+ * Individual radio button. Must be placed inside an `llm-radio-group`.
265
+ *
266
+ * Usage:
267
+ * ```html
268
+ * <llm-radio-group [(value)]="selected" name="plan">
269
+ * <llm-radio radioValue="free">Free</llm-radio>
270
+ * <llm-radio radioValue="pro">Pro</llm-radio>
271
+ * </llm-radio-group>
272
+ * ```
273
+ */
274
+ declare class LlmRadio implements RadioItem, OnInit, OnDestroy {
275
+ /** The value this radio option represents within the group. */
276
+ readonly radioValue: _angular_core.InputSignal<string>;
277
+ /** Whether this specific radio is individually disabled (stacked with group disabled). */
278
+ readonly disabled: _angular_core.InputSignal<boolean>;
279
+ /** @internal */
280
+ private readonly group;
281
+ /** @internal */
282
+ private readonly el;
283
+ /** @internal */
284
+ protected readonly inputId: string;
285
+ /** @internal */
286
+ protected readonly isChecked: _angular_core.Signal<boolean>;
287
+ /** @internal */
288
+ readonly isDisabled: _angular_core.Signal<boolean>;
289
+ /** @internal */
290
+ protected readonly effectiveName: _angular_core.Signal<string>;
291
+ /** @internal */
292
+ protected readonly hostClasses: _angular_core.Signal<string>;
293
+ /** @internal — for FocusKeyManager */
294
+ focusInput(): void;
295
+ ngOnInit(): void;
296
+ ngOnDestroy(): void;
297
+ /** @internal */
298
+ protected onChange(): void;
299
+ /** @internal */
300
+ protected onBlur(): void;
301
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<LlmRadio, never>;
302
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<LlmRadio, "llm-radio", never, { "radioValue": { "alias": "radioValue"; "required": true; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
303
+ }
304
+
305
+ /**
306
+ * Container for a group of radio buttons. Manages keyboard navigation, shared name,
307
+ * and Signal Forms integration.
308
+ *
309
+ * Usage:
310
+ * ```html
311
+ * <llm-radio-group [(value)]="size" name="size">
312
+ * <llm-radio radioValue="sm">Small</llm-radio>
313
+ * <llm-radio radioValue="md">Medium</llm-radio>
314
+ * <llm-radio radioValue="lg">Large</llm-radio>
315
+ * </llm-radio-group>
316
+ *
317
+ * <!-- With Signal Forms -->
318
+ * <llm-radio-group [formField]="form.size">
319
+ * <llm-radio radioValue="sm">Small</llm-radio>
320
+ * </llm-radio-group>
321
+ * ```
322
+ */
323
+ declare class LlmRadioGroup implements FormValueControl<string>, LlmRadioGroupContext {
324
+ /** The selected value. Bound by [formField] directive. Supports [(value)] two-way binding. */
325
+ readonly value: _angular_core.ModelSignal<string>;
326
+ /** Whether the user has interacted. Bound by [formField] directive. */
327
+ readonly touched: _angular_core.ModelSignal<boolean>;
328
+ /** Whether the group is disabled. Bound by [formField] directive. */
329
+ readonly disabled: _angular_core.InputSignal<boolean>;
330
+ /** Whether the group has validation errors. Bound by [formField] directive. */
331
+ readonly invalid: _angular_core.InputSignal<boolean>;
332
+ /** Whether the group is required. Bound by [formField] directive. */
333
+ readonly required: _angular_core.InputSignal<boolean>;
334
+ /** Shared name attribute propagated to all child radio inputs. Bound by [formField] directive. */
335
+ readonly name: _angular_core.InputSignal<string>;
336
+ /** Validation errors from the form system. Bound by [formField] directive. */
337
+ readonly errors: _angular_core.InputSignal<readonly WithOptionalFieldTree<ValidationError>[]>;
338
+ /** @internal */
339
+ protected readonly errorId: string;
340
+ /** @internal */
341
+ private readonly items;
342
+ /** @internal */
343
+ protected readonly showErrors: _angular_core.Signal<boolean>;
344
+ /** @internal */
345
+ protected readonly hostClasses: _angular_core.Signal<string>;
346
+ /** @internal — called by LlmRadio on change */
347
+ select(v: string): void;
348
+ /** @internal — called by LlmRadio on blur */
349
+ markTouched(): void;
350
+ /** @internal — called by LlmRadio on init */
351
+ registerItem(item: RadioItem): void;
352
+ /** @internal — called by LlmRadio on destroy */
353
+ unregisterItem(item: RadioItem): void;
354
+ /** @internal */
355
+ protected onKeydown(event: KeyboardEvent): void;
356
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<LlmRadioGroup, never>;
357
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<LlmRadioGroup, "llm-radio-group", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "touched": { "alias": "touched"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "errors": { "alias": "errors"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "touched": "touchedChange"; }, never, ["*"], true, never>;
358
+ }
359
+
360
+ /**
361
+ * Accessible toggle (switch) component for use with Angular Signal Forms.
362
+ * Presents as a pill-shaped on/off slider instead of a checkbox box,
363
+ * but has identical boolean semantics and implements FormCheckboxControl.
364
+ *
365
+ * Usage:
366
+ * ```html
367
+ * <llm-toggle [(checked)]="enabled">Enable notifications</llm-toggle>
368
+ * <llm-toggle [formField]="form.enabled">Enable</llm-toggle>
369
+ * ```
370
+ */
371
+ declare class LlmToggle implements FormCheckboxControl {
372
+ /** The checked state. Bound by [formField] directive. Supports [(checked)] two-way binding. */
373
+ readonly checked: _angular_core.ModelSignal<boolean>;
374
+ /** Whether the user has interacted with the input. Bound by [formField] directive. */
375
+ readonly touched: _angular_core.ModelSignal<boolean>;
376
+ /** Whether the toggle is disabled. Bound by [formField] directive. */
377
+ readonly disabled: _angular_core.InputSignal<boolean>;
378
+ /** Whether the toggle has validation errors. Bound by [formField] directive. */
379
+ readonly invalid: _angular_core.InputSignal<boolean>;
380
+ /** Whether the toggle is required. Bound by [formField] directive. */
381
+ readonly required: _angular_core.InputSignal<boolean>;
382
+ /** The input's name attribute. Bound by [formField] directive. */
383
+ readonly name: _angular_core.InputSignal<string>;
384
+ /** Validation errors from the form system. Bound by [formField] directive. */
385
+ readonly errors: _angular_core.InputSignal<readonly WithOptionalFieldTree<ValidationError>[]>;
386
+ /** @internal */
387
+ protected readonly inputId: string;
388
+ /** @internal */
389
+ protected readonly errorId: string;
390
+ /** @internal */
391
+ protected readonly showErrors: _angular_core.Signal<boolean>;
392
+ /** @internal */
393
+ protected readonly hostClasses: _angular_core.Signal<string>;
394
+ /** @internal */
395
+ protected onChange(event: Event): void;
396
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<LlmToggle, never>;
397
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<LlmToggle, "llm-toggle", never, { "checked": { "alias": "checked"; "required": false; "isSignal": true; }; "touched": { "alias": "touched"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "errors": { "alias": "errors"; "required": false; "isSignal": true; }; }, { "checked": "checkedChange"; "touched": "touchedChange"; }, never, ["*"], true, never>;
398
+ }
399
+
400
+ /**
401
+ * Inline notification banner with semantic color variants and optional dismiss button.
402
+ *
403
+ * Usage:
404
+ * ```html
405
+ * <llm-alert variant="success">Your changes were saved.</llm-alert>
406
+ * <llm-alert variant="warning" [dismissible]="true" (dismissed)="onDismiss()">
407
+ * Your session expires soon.
408
+ * </llm-alert>
409
+ * ```
410
+ */
411
+ declare class LlmAlert {
412
+ /** Semantic color variant of the alert. */
413
+ readonly variant: _angular_core.InputSignal<"success" | "warning" | "danger" | "info">;
414
+ /** Whether to show a dismiss button. */
415
+ readonly dismissible: _angular_core.InputSignal<boolean>;
416
+ /** Emitted when the dismiss button is clicked. */
417
+ readonly dismissed: _angular_core.OutputEmitterRef<void>;
418
+ protected readonly hostClasses: _angular_core.Signal<string>;
419
+ /** @internal */
420
+ get isDismissible(): boolean;
421
+ /** @internal */
422
+ get hostClassesValue(): string;
423
+ /** @internal */
424
+ get ariaLive(): string;
425
+ protected dismiss(): void;
426
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<LlmAlert, never>;
427
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<LlmAlert, "llm-alert", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "dismissible": { "alias": "dismissible"; "required": false; "isSignal": true; }; }, { "dismissed": "dismissed"; }, never, ["*"], true, never>;
428
+ }
429
+
430
+ interface LlmSelectContext {
431
+ readonly value: WritableSignal<string>;
432
+ readonly disabled: Signal<boolean>;
433
+ readonly activeOptionId: WritableSignal<string | null>;
434
+ select(v: string): void;
435
+ markTouched(): void;
436
+ registerOption(id: string, value: string, labelText: string, disabled: boolean): void;
437
+ unregisterOption(id: string): void;
438
+ }
439
+ declare const LLM_SELECT: InjectionToken<LlmSelectContext>;
440
+
441
+ /**
442
+ * Accessible dropdown select component for use with Angular Signal Forms.
443
+ * Uses the native Popover API for the panel overlay.
444
+ *
445
+ * Usage:
446
+ * ```html
447
+ * <llm-select [(value)]="country" placeholder="Select a country">
448
+ * <llm-option optionValue="us">United States</llm-option>
449
+ * <llm-option optionValue="ca">Canada</llm-option>
450
+ * </llm-select>
451
+ *
452
+ * <!-- With Signal Forms -->
453
+ * <llm-select [formField]="form.country" placeholder="Select a country">
454
+ * <llm-option optionValue="us">United States</llm-option>
455
+ * </llm-select>
456
+ * ```
457
+ */
458
+ declare class LlmSelect implements FormValueControl<string>, LlmSelectContext {
459
+ /** The selected value. Bound by [formField] directive. Supports [(value)] two-way binding. */
460
+ readonly value: _angular_core.ModelSignal<string>;
461
+ /** Whether the user has interacted. Bound by [formField] directive. */
462
+ readonly touched: _angular_core.ModelSignal<boolean>;
463
+ /** Placeholder text shown when no option is selected. */
464
+ readonly placeholder: _angular_core.InputSignal<string>;
465
+ /** Whether the select is disabled. Bound by [formField] directive. */
466
+ readonly disabled: _angular_core.InputSignal<boolean>;
467
+ /** Whether the select has validation errors. Bound by [formField] directive. */
468
+ readonly invalid: _angular_core.InputSignal<boolean>;
469
+ /** Whether the select is required. Bound by [formField] directive. */
470
+ readonly required: _angular_core.InputSignal<boolean>;
471
+ /** The input's name attribute. Bound by [formField] directive. */
472
+ readonly name: _angular_core.InputSignal<string>;
473
+ /** Validation errors from the form system. Bound by [formField] directive. */
474
+ readonly errors: _angular_core.InputSignal<readonly WithOptionalFieldTree<ValidationError>[]>;
475
+ /** @internal */
476
+ readonly activeOptionId: _angular_core.WritableSignal<string | null>;
477
+ /** @internal */
478
+ protected readonly isOpen: _angular_core.WritableSignal<boolean>;
479
+ /** @internal */
480
+ protected readonly optionsList: _angular_core.WritableSignal<{
481
+ id: string;
482
+ value: string;
483
+ labelText: string;
484
+ disabled: boolean;
485
+ }[]>;
486
+ /** @internal */
487
+ protected readonly panelRef: _angular_core.Signal<ElementRef<HTMLElement> | undefined>;
488
+ /** @internal */
489
+ protected readonly triggerId: string;
490
+ /** @internal */
491
+ protected readonly panelId: string;
492
+ /** @internal */
493
+ protected readonly errorId: string;
494
+ /** @internal */
495
+ protected readonly selectedLabel: _angular_core.Signal<string>;
496
+ /** @internal */
497
+ protected readonly showErrors: _angular_core.Signal<boolean>;
498
+ /** @internal */
499
+ protected readonly hostClasses: _angular_core.Signal<string>;
500
+ /** @internal */
501
+ private keyManager;
502
+ private outsideClickHandler;
503
+ private readonly elementRef;
504
+ /** @internal — called by LlmOption on init */
505
+ registerOption(id: string, value: string, labelText: string, disabled: boolean): void;
506
+ /** @internal — called by LlmOption on destroy */
507
+ unregisterOption(id: string): void;
508
+ /** @internal — called by LlmOption on select */
509
+ select(v: string): void;
510
+ /** @internal — called by LlmOption on interaction */
511
+ markTouched(): void;
512
+ /** @internal */
513
+ protected onTriggerClick(): void;
514
+ /** @internal */
515
+ protected onTriggerBlur(): void;
516
+ /** @internal */
517
+ protected onPanelToggle(event: Event): void;
518
+ /** @internal */
519
+ protected onKeydown(event: KeyboardEvent): void;
520
+ private open;
521
+ private close;
522
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<LlmSelect, never>;
523
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<LlmSelect, "llm-select", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "touched": { "alias": "touched"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "errors": { "alias": "errors"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "touched": "touchedChange"; }, never, ["*"], true, never>;
524
+ }
525
+
526
+ /**
527
+ * Option item for use inside `<llm-select>`.
528
+ *
529
+ * Usage:
530
+ * ```html
531
+ * <llm-option optionValue="us">United States</llm-option>
532
+ * ```
533
+ */
534
+ declare class LlmOption implements OnInit, OnDestroy {
535
+ /** The value this option represents. Required. */
536
+ readonly optionValue: _angular_core.InputSignal<string>;
537
+ /** Whether this option is disabled. */
538
+ readonly disabled: _angular_core.InputSignal<boolean>;
539
+ /** @internal */
540
+ protected readonly optionId: string;
541
+ /** @internal */
542
+ private readonly context;
543
+ /** @internal */
544
+ private readonly elementRef;
545
+ /** @internal */
546
+ protected readonly isSelected: _angular_core.Signal<boolean>;
547
+ /** @internal */
548
+ protected readonly isActive: _angular_core.Signal<boolean>;
549
+ ngOnInit(): void;
550
+ ngOnDestroy(): void;
551
+ /** @internal */
552
+ protected onClick(): void;
553
+ /** @internal */
554
+ protected onMouseEnter(): void;
555
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<LlmOption, never>;
556
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<LlmOption, "llm-option", never, { "optionValue": { "alias": "optionValue"; "required": true; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
557
+ }
558
+
559
+ /**
560
+ * Accessible modal dialog using the native `<dialog>` element.
561
+ * Includes focus trap, Escape to close, backdrop click to close, and animation.
562
+ * Compose with `llm-dialog-header`, `llm-dialog-content`, and `llm-dialog-footer`.
563
+ *
564
+ * Usage:
565
+ * ```html
566
+ * <llm-dialog [(open)]="isOpen">
567
+ * <llm-dialog-header>Dialog Title</llm-dialog-header>
568
+ * <llm-dialog-content>Dialog body content.</llm-dialog-content>
569
+ * <llm-dialog-footer>
570
+ * <llm-button variant="primary" (click)="isOpen = false">Confirm</llm-button>
571
+ * </llm-dialog-footer>
572
+ * </llm-dialog>
573
+ * ```
574
+ */
575
+ declare class LlmDialog {
576
+ /** Whether the dialog is open. Supports two-way binding: [(open)]="isOpen". */
577
+ readonly open: _angular_core.ModelSignal<boolean>;
578
+ /** Whether clicking the backdrop closes the dialog. */
579
+ readonly closeOnBackdrop: _angular_core.InputSignal<boolean>;
580
+ /** Size of the dialog panel. */
581
+ readonly size: _angular_core.InputSignal<"sm" | "md" | "lg" | "xl" | "full">;
582
+ /** Accessible label for the dialog (use instead of aria-labelledby when no header is present). */
583
+ readonly ariaLabel: _angular_core.InputSignal<string>;
584
+ /** ID of the element that labels the dialog (defaults to the llm-dialog-header id). */
585
+ readonly ariaLabelledby: _angular_core.InputSignal<string>;
586
+ /** @internal — referenced by LlmDialogHeader via LLM_DIALOG token */
587
+ readonly headerId: string;
588
+ protected readonly dialogId: string;
589
+ protected readonly dialogRef: _angular_core.Signal<ElementRef<HTMLDialogElement> | undefined>;
590
+ private readonly triggerEl;
591
+ protected readonly panelClass: _angular_core.Signal<string>;
592
+ protected readonly hostClasses: _angular_core.Signal<"" | "is-open">;
593
+ constructor();
594
+ protected onCancel(event: Event): void;
595
+ protected onBackdropClick(event: MouseEvent): void;
596
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<LlmDialog, never>;
597
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<LlmDialog, "llm-dialog", never, { "open": { "alias": "open"; "required": false; "isSignal": true; }; "closeOnBackdrop": { "alias": "closeOnBackdrop"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "aria-label"; "required": false; "isSignal": true; }; "ariaLabelledby": { "alias": "aria-labelledby"; "required": false; "isSignal": true; }; }, { "open": "openChange"; }, never, ["*"], true, never>;
598
+ }
599
+ /**
600
+ * Header slot for `llm-dialog`. Renders above content with a bottom separator.
601
+ * Automatically receives the correct `id` for `aria-labelledby` association.
602
+ */
603
+ declare class LlmDialogHeader {
604
+ protected readonly context: _atelier_ui_angular.LlmDialogContext;
605
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<LlmDialogHeader, never>;
606
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<LlmDialogHeader, "llm-dialog-header", never, {}, {}, never, ["*"], true, never>;
607
+ }
608
+ /**
609
+ * Content slot for `llm-dialog`. Scrollable primary content area.
610
+ */
611
+ declare class LlmDialogContent {
612
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<LlmDialogContent, never>;
613
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<LlmDialogContent, "llm-dialog-content", never, {}, {}, never, ["*"], true, never>;
614
+ }
615
+ /**
616
+ * Footer slot for `llm-dialog`. Renders below content, typically holds action buttons.
617
+ */
618
+ declare class LlmDialogFooter {
619
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<LlmDialogFooter, never>;
620
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<LlmDialogFooter, "llm-dialog-footer", never, {}, {}, never, ["*"], true, never>;
621
+ }
622
+
623
+ interface LlmDialogContext {
624
+ headerId: string;
625
+ close: () => void;
626
+ }
627
+ declare const LLM_DIALOG: InjectionToken<LlmDialogContext>;
628
+
629
+ interface TabInfo {
630
+ id: string;
631
+ label: string;
632
+ disabled: boolean;
633
+ panelId: string;
634
+ tabId: string;
635
+ }
636
+ interface LlmTabGroupContext {
637
+ readonly selectedIndex: WritableSignal<number>;
638
+ readonly tabs: Signal<TabInfo[]>;
639
+ registerTab(info: TabInfo): void;
640
+ unregisterTab(id: string): void;
641
+ }
642
+ declare const LLM_TAB_GROUP: InjectionToken<LlmTabGroupContext>;
643
+
644
+ /**
645
+ * Accessible tabbed interface container. Renders a tab list and manages
646
+ * keyboard navigation with roving tabindex.
647
+ *
648
+ * Usage:
649
+ * ```html
650
+ * <llm-tab-group [(selectedIndex)]="activeTab">
651
+ * <llm-tab label="Account">Account settings here.</llm-tab>
652
+ * <llm-tab label="Notifications">Notification prefs here.</llm-tab>
653
+ * <llm-tab label="Billing" [disabled]="true">Billing info here.</llm-tab>
654
+ * </llm-tab-group>
655
+ * ```
656
+ */
657
+ declare class LlmTabGroup implements LlmTabGroupContext {
658
+ /** Index of the currently active tab. Supports two-way binding. */
659
+ readonly selectedIndex: _angular_core.ModelSignal<number>;
660
+ /** Visual variant. */
661
+ readonly variant: _angular_core.InputSignal<"default" | "pills">;
662
+ /** @internal */
663
+ readonly tabs: _angular_core.WritableSignal<TabInfo[]>;
664
+ /** @internal */
665
+ private readonly elementRef;
666
+ /** @internal */
667
+ protected readonly hostClasses: _angular_core.Signal<string>;
668
+ /** @internal — called by LlmTab on init */
669
+ registerTab(info: TabInfo): void;
670
+ /** @internal — called by LlmTab on destroy */
671
+ unregisterTab(id: string): void;
672
+ /** @internal */
673
+ protected selectTab(index: number): void;
674
+ /** @internal */
675
+ protected onTabKeydown(event: KeyboardEvent): void;
676
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<LlmTabGroup, never>;
677
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<LlmTabGroup, "llm-tab-group", never, { "selectedIndex": { "alias": "selectedIndex"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; }, { "selectedIndex": "selectedIndexChange"; }, never, ["*"], true, never>;
678
+ }
679
+ /**
680
+ * Individual tab definition. Place inside `<llm-tab-group>`.
681
+ *
682
+ * Usage:
683
+ * ```html
684
+ * <llm-tab label="Settings">Settings content here.</llm-tab>
685
+ * ```
686
+ */
687
+ declare class LlmTab implements OnInit, OnDestroy {
688
+ /** Text displayed on the tab button. Required. */
689
+ readonly label: _angular_core.InputSignal<string>;
690
+ /** Whether this tab is disabled. */
691
+ readonly disabled: _angular_core.InputSignal<boolean>;
692
+ /** @internal */
693
+ readonly tabId: string;
694
+ /** @internal */
695
+ readonly panelId: string;
696
+ /** @internal */
697
+ private readonly id;
698
+ /** @internal */
699
+ private readonly context;
700
+ /** @internal */
701
+ protected readonly isActive: _angular_core.Signal<boolean>;
702
+ ngOnInit(): void;
703
+ ngOnDestroy(): void;
704
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<LlmTab, never>;
705
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<LlmTab, "llm-tab", never, { "label": { "alias": "label"; "required": true; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
706
+ }
707
+
708
+ /** @internal — shape required by LlmAccordionGroup's FocusKeyManager */
709
+ interface AccordionItem {
710
+ readonly id: string;
711
+ focusTrigger(): void;
712
+ isItemDisabled(): boolean;
713
+ }
714
+ interface LlmAccordionGroupContext {
715
+ register(item: AccordionItem): void;
716
+ unregister(item: AccordionItem): void;
717
+ handleKeydown(event: KeyboardEvent, item: AccordionItem): void;
718
+ }
719
+ declare const LLM_ACCORDION_GROUP: InjectionToken<LlmAccordionGroupContext>;
720
+
721
+ /**
722
+ * Container that manages accordion items. Controls single vs multi expansion
723
+ * and provides keyboard navigation across items.
724
+ *
725
+ * Usage:
726
+ * ```html
727
+ * <llm-accordion-group [multi]="true" variant="separated">
728
+ * <llm-accordion-item [(expanded)]="open">
729
+ * <span llmAccordionHeader>Title</span>
730
+ * Body content here.
731
+ * </llm-accordion-item>
732
+ * </llm-accordion-group>
733
+ * ```
734
+ */
735
+ declare class LlmAccordionGroup implements LlmAccordionGroupContext {
736
+ /** Allow multiple items to be expanded simultaneously. */
737
+ readonly multi: _angular_core.InputSignal<boolean>;
738
+ /** Visual variant. */
739
+ readonly variant: _angular_core.InputSignal<"default" | "bordered" | "separated">;
740
+ /** @internal */
741
+ protected readonly hostClasses: _angular_core.Signal<string>;
742
+ /** @internal */
743
+ get hostClassesValue(): string;
744
+ /** @internal */
745
+ private readonly items;
746
+ register(item: AccordionItem): void;
747
+ unregister(item: AccordionItem): void;
748
+ handleKeydown(event: KeyboardEvent, item: AccordionItem): void;
749
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<LlmAccordionGroup, never>;
750
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<LlmAccordionGroup, "llm-accordion-group", never, { "multi": { "alias": "multi"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, [{ directive: typeof i1.CdkAccordion; inputs: { "multi": "multi"; }; outputs: {}; }]>;
751
+ }
752
+ /**
753
+ * Directive to mark the accordion header content.
754
+ */
755
+ declare class LlmAccordionHeader {
756
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<LlmAccordionHeader, never>;
757
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<LlmAccordionHeader, "[llmAccordionHeader]", never, {}, {}, never, never, true, never>;
758
+ }
759
+ /**
760
+ * Individual collapsible accordion item. Place inside `<llm-accordion-group>`.
761
+ *
762
+ * Usage:
763
+ * ```html
764
+ * <llm-accordion-item [(expanded)]="isOpen">
765
+ * <span llmAccordionHeader>Section Title</span>
766
+ * Section content goes here.
767
+ * </llm-accordion-item>
768
+ * ```
769
+ */
770
+ declare class LlmAccordionItem implements AccordionItem, OnInit, OnDestroy {
771
+ /** Whether this item is expanded. Supports two-way binding. */
772
+ readonly expanded: _angular_core.ModelSignal<boolean>;
773
+ /** Whether this item is disabled. */
774
+ readonly disabled: _angular_core.InputSignal<boolean>;
775
+ /** @internal */
776
+ readonly id: string;
777
+ /** @internal */
778
+ readonly triggerId: string;
779
+ /** @internal */
780
+ readonly panelId: string;
781
+ /** @internal */
782
+ private readonly group;
783
+ /** @internal */
784
+ private readonly cdkItem;
785
+ /** @internal */
786
+ private readonly el;
787
+ /** @internal */
788
+ protected readonly isExpanded: _angular_core.WritableSignal<boolean>;
789
+ /** @internal */
790
+ get isExpandedValue(): boolean;
791
+ /** @internal */
792
+ get isDisabled(): boolean;
793
+ /** @internal */
794
+ get ariaDisabled(): boolean | null;
795
+ constructor();
796
+ ngOnInit(): void;
797
+ ngOnDestroy(): void;
798
+ /** @internal — for FocusKeyManager */
799
+ focusTrigger(): void;
800
+ /** @internal — for FocusKeyManager */
801
+ isItemDisabled(): boolean;
802
+ /** @internal */
803
+ protected onToggle(): void;
804
+ /** @internal */
805
+ protected onKeydown(event: KeyboardEvent): void;
806
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<LlmAccordionItem, never>;
807
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<LlmAccordionItem, "llm-accordion-item", never, { "expanded": { "alias": "expanded"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, { "expanded": "expandedChange"; }, never, ["[llmAccordionHeader]", "*"], true, [{ directive: typeof i1.CdkAccordionItem; inputs: {}; outputs: {}; }]>;
808
+ }
809
+
810
+ /**
811
+ * Trigger directive that opens an `<llm-menu>` dropdown.
812
+ * Apply to any element (typically `<llm-button>`) to wire up click + keyboard open/close.
813
+ *
814
+ * Usage:
815
+ * ```html
816
+ * <llm-button [llmMenuTriggerFor]="myMenu">Open</llm-button>
817
+ * <ng-template #myMenu>
818
+ * <llm-menu>
819
+ * <llm-menu-item (triggered)="action()">Action</llm-menu-item>
820
+ * </llm-menu>
821
+ * </ng-template>
822
+ * ```
823
+ */
824
+ declare class LlmMenuTrigger {
825
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<LlmMenuTrigger, never>;
826
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<LlmMenuTrigger, "[llmMenuTriggerFor]", never, {}, {}, never, never, true, [{ directive: typeof i1$1.CdkMenuTrigger; inputs: { "cdkMenuTriggerFor": "llmMenuTriggerFor"; }; outputs: {}; }]>;
827
+ }
828
+ /**
829
+ * Accessible dropdown menu panel.
830
+ * Uses `@angular/cdk/menu` for keyboard navigation, focus management, and ARIA.
831
+ *
832
+ * Usage:
833
+ * ```html
834
+ * <llm-button [llmMenuTriggerFor]="actions">Actions</llm-button>
835
+ * <ng-template #actions>
836
+ * <llm-menu>
837
+ * <llm-menu-item (triggered)="onCopy()">Copy</llm-menu-item>
838
+ * <llm-menu-separator />
839
+ * <llm-menu-item [disabled]="true">Paste</llm-menu-item>
840
+ * </llm-menu>
841
+ * </ng-template>
842
+ * ```
843
+ */
844
+ declare class LlmMenu {
845
+ /** Visual variant. `compact` reduces font size and padding. */
846
+ readonly variant: _angular_core.InputSignal<"default" | "compact">;
847
+ /** @internal */
848
+ protected readonly hostClasses: _angular_core.Signal<string>;
849
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<LlmMenu, never>;
850
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<LlmMenu, "llm-menu", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, [{ directive: typeof i1$1.CdkMenu; inputs: {}; outputs: {}; }]>;
851
+ }
852
+ /**
853
+ * A single item inside an `<llm-menu>`.
854
+ * Supports keyboard navigation, disabled state, and nested submenus via `[llmMenuTriggerFor]`.
855
+ *
856
+ * Usage:
857
+ * ```html
858
+ * <llm-menu-item (triggered)="doSomething()">Label</llm-menu-item>
859
+ * <llm-menu-item [disabled]="true">Disabled</llm-menu-item>
860
+ * ```
861
+ */
862
+ declare class LlmMenuItem {
863
+ /** Whether this menu item is disabled. */
864
+ readonly disabled: _angular_core.InputSignal<boolean>;
865
+ /** @internal — detect if this item also triggers a submenu */
866
+ private readonly menuTrigger;
867
+ /** @internal */
868
+ protected readonly hasSubmenu: _angular_core.Signal<boolean>;
869
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<LlmMenuItem, never>;
870
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<LlmMenuItem, "llm-menu-item", never, { "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, [{ directive: typeof i1$1.CdkMenuItem; inputs: { "cdkMenuItemDisabled": "disabled"; }; outputs: { "cdkMenuItemTriggered": "triggered"; }; }]>;
871
+ }
872
+ /**
873
+ * Visual separator between groups of menu items.
874
+ *
875
+ * Usage:
876
+ * ```html
877
+ * <llm-menu-item>Copy</llm-menu-item>
878
+ * <llm-menu-separator />
879
+ * <llm-menu-item>Delete</llm-menu-item>
880
+ * ```
881
+ */
882
+ declare class LlmMenuSeparator {
883
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<LlmMenuSeparator, never>;
884
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<LlmMenuSeparator, "llm-menu-separator", never, {}, {}, never, never, true, never>;
885
+ }
886
+
887
+ /**
888
+ * Attribute directive that displays a text tooltip on hover or focus.
889
+ * Uses `@angular/cdk/overlay` for viewport-aware positioning.
890
+ *
891
+ * Usage:
892
+ * ```html
893
+ * <llm-button llmTooltip="Save your changes">Save</llm-button>
894
+ * <llm-button llmTooltip="Copy to clipboard" llmTooltipPosition="right">Copy</llm-button>
895
+ * ```
896
+ */
897
+ declare class LlmTooltip implements OnDestroy {
898
+ /** The tooltip text. */
899
+ readonly llmTooltip: _angular_core.InputSignal<string>;
900
+ /** Preferred tooltip placement. Falls back to the opposite side if clipped. */
901
+ readonly llmTooltipPosition: _angular_core.InputSignal<"above" | "below" | "left" | "right">;
902
+ /** Disable the tooltip without removing the directive. */
903
+ readonly llmTooltipDisabled: _angular_core.InputSignal<boolean>;
904
+ /** Delay in ms before the tooltip appears. */
905
+ readonly llmTooltipShowDelay: _angular_core.InputSignal<number>;
906
+ /** Delay in ms before the tooltip hides. */
907
+ readonly llmTooltipHideDelay: _angular_core.InputSignal<number>;
908
+ private readonly injector;
909
+ private readonly elementRef;
910
+ private overlayRef;
911
+ private showTimer;
912
+ private hideTimer;
913
+ /** @internal — links host aria-describedby to the tooltip element */
914
+ protected readonly activeTooltipId: _angular_core.WritableSignal<string | null>;
915
+ /** @internal */
916
+ protected show(): void;
917
+ /** @internal */
918
+ protected hide(): void;
919
+ ngOnDestroy(): void;
920
+ private attach;
921
+ private createOverlay;
922
+ private clearShowTimer;
923
+ private clearHideTimer;
924
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<LlmTooltip, never>;
925
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<LlmTooltip, "[llmTooltip]", never, { "llmTooltip": { "alias": "llmTooltip"; "required": true; "isSignal": true; }; "llmTooltipPosition": { "alias": "llmTooltipPosition"; "required": false; "isSignal": true; }; "llmTooltipDisabled": { "alias": "llmTooltipDisabled"; "required": false; "isSignal": true; }; "llmTooltipShowDelay": { "alias": "llmTooltipShowDelay"; "required": false; "isSignal": true; }; "llmTooltipHideDelay": { "alias": "llmTooltipHideDelay"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
926
+ }
927
+
928
+ /**
929
+ * Loading placeholder that mimics the shape of content while it loads.
930
+ *
931
+ * Usage:
932
+ * ```html
933
+ * <llm-skeleton />
934
+ * <llm-skeleton variant="circular" width="40px" />
935
+ * <llm-skeleton variant="rectangular" height="200px" />
936
+ * ```
937
+ */
938
+ declare class LlmSkeleton {
939
+ /** Shape variant of the skeleton placeholder. */
940
+ readonly variant: _angular_core.InputSignal<"text" | "circular" | "rectangular">;
941
+ /** CSS width of the skeleton. */
942
+ readonly width: _angular_core.InputSignal<string>;
943
+ /** CSS height — when empty, a sensible default is chosen per variant. */
944
+ readonly height: _angular_core.InputSignal<string>;
945
+ /** Whether the shimmer animation is active. */
946
+ readonly animated: _angular_core.InputSignal<boolean>;
947
+ protected readonly computedHeight: _angular_core.Signal<string>;
948
+ protected readonly hostClasses: _angular_core.Signal<string>;
949
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<LlmSkeleton, never>;
950
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<LlmSkeleton, "llm-skeleton", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "animated": { "alias": "animated"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
951
+ }
952
+
953
+ /** Variant types for toast notifications. */
954
+ type ToastVariant = 'default' | 'success' | 'warning' | 'danger' | 'info';
955
+ /** Options for creating a toast notification. */
956
+ interface ToastOptions {
957
+ variant?: ToastVariant;
958
+ /** Duration in ms before auto-dismiss. 0 = no auto-dismiss. Default 5000. */
959
+ duration?: number;
960
+ /** Whether the toast shows a dismiss button. Default true. */
961
+ dismissible?: boolean;
962
+ }
963
+ /** Internal data for a toast instance. */
964
+ interface ToastData {
965
+ id: string;
966
+ message: string;
967
+ variant: ToastVariant;
968
+ duration: number;
969
+ dismissible: boolean;
970
+ }
971
+ /**
972
+ * Service for showing transient toast notifications.
973
+ *
974
+ * Usage:
975
+ * ```typescript
976
+ * const toast = inject(LlmToastService);
977
+ * toast.show('Saved successfully', { variant: 'success' });
978
+ * ```
979
+ */
980
+ declare class LlmToastService {
981
+ readonly toasts: _angular_core.WritableSignal<ToastData[]>;
982
+ private readonly timers;
983
+ /**
984
+ * Show a toast notification.
985
+ * @returns The unique id of the toast, which can be used with `dismiss()`.
986
+ */
987
+ show(message: string, options?: ToastOptions): string;
988
+ /** Dismiss a single toast by id. */
989
+ dismiss(id: string): void;
990
+ /** Clear all active toasts. */
991
+ clear(): void;
992
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<LlmToastService, never>;
993
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<LlmToastService>;
994
+ }
995
+ /**
996
+ * Individual toast notification.
997
+ *
998
+ * Typically rendered by `llm-toast-container`, but can also be used standalone.
999
+ */
1000
+ declare class LlmToast {
1001
+ /** Semantic color variant. */
1002
+ readonly variant: _angular_core.InputSignal<ToastVariant>;
1003
+ /** Whether to show a dismiss button. */
1004
+ readonly dismissible: _angular_core.InputSignal<boolean>;
1005
+ /** The message to display. */
1006
+ readonly message: _angular_core.InputSignal<string>;
1007
+ /** Unique identifier for this toast. */
1008
+ readonly toastId: _angular_core.InputSignal<string>;
1009
+ /** Emitted when the toast is dismissed by the user. */
1010
+ readonly dismissed: _angular_core.OutputEmitterRef<string>;
1011
+ protected readonly hostClasses: _angular_core.Signal<string>;
1012
+ protected onDismiss(): void;
1013
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<LlmToast, never>;
1014
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<LlmToast, "llm-toast", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "dismissible": { "alias": "dismissible"; "required": false; "isSignal": true; }; "message": { "alias": "message"; "required": false; "isSignal": true; }; "toastId": { "alias": "toastId"; "required": false; "isSignal": true; }; }, { "dismissed": "dismissed"; }, never, never, true, never>;
1015
+ }
1016
+ /**
1017
+ * Container that renders the toast stack at a fixed viewport position.
1018
+ * Place once in your app root or layout component.
1019
+ *
1020
+ * Usage:
1021
+ * ```html
1022
+ * <llm-toast-container position="bottom-right" />
1023
+ * ```
1024
+ */
1025
+ declare class LlmToastContainer {
1026
+ protected readonly toastService: LlmToastService;
1027
+ private readonly destroyRef;
1028
+ /** Position of the toast stack on the viewport. */
1029
+ readonly position: _angular_core.InputSignal<"top-right" | "top-center" | "bottom-right" | "bottom-center">;
1030
+ protected readonly hostClasses: _angular_core.Signal<string>;
1031
+ constructor();
1032
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<LlmToastContainer, never>;
1033
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<LlmToastContainer, "llm-toast-container", never, { "position": { "alias": "position"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1034
+ }
1035
+
1036
+ /**
1037
+ * Displays a user avatar with image, initials, or icon fallback.
1038
+ *
1039
+ * Fallback order: image → initials (from `name`) → generic icon.
1040
+ *
1041
+ * Usage:
1042
+ * ```html
1043
+ * <llm-avatar src="https://example.com/photo.jpg" name="Jane Doe" />
1044
+ * <llm-avatar name="John Smith" size="lg" status="online" />
1045
+ * <llm-avatar size="sm" shape="square" />
1046
+ * ```
1047
+ */
1048
+ declare class LlmAvatar {
1049
+ /** Image URL. Falls back to initials or icon if empty or fails to load. */
1050
+ readonly src: _angular_core.InputSignal<string>;
1051
+ /** Alt text for the image (also used as aria-label). */
1052
+ readonly alt: _angular_core.InputSignal<string>;
1053
+ /** Full name used to generate initials fallback and default aria-label. */
1054
+ readonly name: _angular_core.InputSignal<string>;
1055
+ /** Size of the avatar. */
1056
+ readonly size: _angular_core.InputSignal<"sm" | "md" | "lg" | "xl" | "xs">;
1057
+ /** Shape of the avatar. */
1058
+ readonly shape: _angular_core.InputSignal<"circle" | "square">;
1059
+ /** Presence status indicator dot. Empty string hides the dot. */
1060
+ readonly status: _angular_core.InputSignal<"" | "online" | "offline" | "away" | "busy">;
1061
+ /** @internal — reset to true whenever src changes */
1062
+ protected readonly showImage: _angular_core.WritableSignal<boolean>;
1063
+ /** @internal */
1064
+ protected readonly initials: _angular_core.Signal<string>;
1065
+ /** @internal */
1066
+ protected readonly ariaLabel: _angular_core.Signal<string>;
1067
+ /** @internal */
1068
+ protected readonly hostClasses: _angular_core.Signal<string>;
1069
+ constructor();
1070
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<LlmAvatar, never>;
1071
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<LlmAvatar, "llm-avatar", never, { "src": { "alias": "src"; "required": false; "isSignal": true; }; "alt": { "alias": "alt"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "shape": { "alias": "shape"; "required": false; "isSignal": true; }; "status": { "alias": "status"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1072
+ }
1073
+ /**
1074
+ * Groups multiple avatars with overlap and an overflow count badge.
1075
+ *
1076
+ * Usage:
1077
+ * ```html
1078
+ * <llm-avatar-group [max]="3" size="md">
1079
+ * <llm-avatar name="Alice" />
1080
+ * <llm-avatar name="Bob" />
1081
+ * <llm-avatar name="Charlie" />
1082
+ * <llm-avatar name="Dave" />
1083
+ * </llm-avatar-group>
1084
+ * ```
1085
+ */
1086
+ declare class LlmAvatarGroup {
1087
+ /** Maximum visible avatars before showing an overflow count. */
1088
+ readonly max: _angular_core.InputSignal<number>;
1089
+ /** Size applied to the overflow badge (match the size used on child avatars). */
1090
+ readonly size: _angular_core.InputSignal<"sm" | "md" | "lg" | "xl" | "xs">;
1091
+ private readonly avatarEls;
1092
+ protected readonly overflowCount: _angular_core.Signal<number>;
1093
+ constructor();
1094
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<LlmAvatarGroup, never>;
1095
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<LlmAvatarGroup, "llm-avatar-group", never, { "max": { "alias": "max"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; }, {}, ["avatarEls"], ["*"], true, never>;
1096
+ }
1097
+
1098
+ /**
1099
+ * Progress bar with determinate and indeterminate states.
1100
+ *
1101
+ * Usage:
1102
+ * ```html
1103
+ * <llm-progress [value]="75" />
1104
+ * <llm-progress variant="success" [value]="100" />
1105
+ * <llm-progress [indeterminate]="true" />
1106
+ * ```
1107
+ */
1108
+ declare class LlmProgress {
1109
+ /** Current value of the progress bar. */
1110
+ readonly value: _angular_core.InputSignal<number>;
1111
+ /** Maximum value. */
1112
+ readonly max: _angular_core.InputSignal<number>;
1113
+ /** Semantic color variant. */
1114
+ readonly variant: _angular_core.InputSignal<"default" | "success" | "warning" | "danger">;
1115
+ /** Height size of the track. */
1116
+ readonly size: _angular_core.InputSignal<"sm" | "md" | "lg">;
1117
+ /** Shows an animated indeterminate state (loading). */
1118
+ readonly indeterminate: _angular_core.InputSignal<boolean>;
1119
+ protected readonly clampedValue: _angular_core.Signal<number>;
1120
+ protected readonly fillWidth: _angular_core.Signal<string>;
1121
+ protected readonly hostClasses: _angular_core.Signal<string>;
1122
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<LlmProgress, never>;
1123
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<LlmProgress, "llm-progress", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "indeterminate": { "alias": "indeterminate"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1124
+ }
1125
+
1126
+ /**
1127
+ * Accessible breadcrumb navigation. Wrap `llm-breadcrumb-item` elements inside.
1128
+ * The last item is automatically marked as the current page.
1129
+ *
1130
+ * Usage:
1131
+ * ```html
1132
+ * <llm-breadcrumbs>
1133
+ * <llm-breadcrumb-item href="/home">Home</llm-breadcrumb-item>
1134
+ * <llm-breadcrumb-item href="/products">Products</llm-breadcrumb-item>
1135
+ * <llm-breadcrumb-item>Widget X</llm-breadcrumb-item>
1136
+ * </llm-breadcrumbs>
1137
+ * ```
1138
+ */
1139
+ declare class LlmBreadcrumbs {
1140
+ private readonly _itemIds;
1141
+ private _nextId;
1142
+ /** @internal — used by LlmBreadcrumbItem via LLM_BREADCRUMBS token */
1143
+ readonly lastItemId: _angular_core.Signal<number>;
1144
+ /** @internal */
1145
+ registerItem(): number;
1146
+ /** @internal */
1147
+ unregisterItem(id: number): void;
1148
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<LlmBreadcrumbs, never>;
1149
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<LlmBreadcrumbs, "llm-breadcrumbs", never, {}, {}, never, ["*"], true, never>;
1150
+ }
1151
+ /**
1152
+ * A single breadcrumb step. The last item is automatically treated as
1153
+ * `aria-current="page"` and rendered as plain text (no link).
1154
+ */
1155
+ declare class LlmBreadcrumbItem implements OnInit, OnDestroy {
1156
+ /** Optional href for navigation. Ignored on the last (current) item. */
1157
+ readonly href: _angular_core.InputSignal<string>;
1158
+ private readonly context;
1159
+ private readonly myIndex;
1160
+ protected readonly isCurrent: _angular_core.Signal<boolean>;
1161
+ ngOnInit(): void;
1162
+ ngOnDestroy(): void;
1163
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<LlmBreadcrumbItem, never>;
1164
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<LlmBreadcrumbItem, "llm-breadcrumb-item", never, { "href": { "alias": "href"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
1165
+ }
1166
+
1167
+ interface LlmBreadcrumbsContext {
1168
+ registerItem(): number;
1169
+ unregisterItem(id: number): void;
1170
+ readonly lastItemId: Signal<number>;
1171
+ }
1172
+ declare const LLM_BREADCRUMBS: InjectionToken<LlmBreadcrumbsContext>;
1173
+
1174
+ type PageItem = {
1175
+ type: 'page';
1176
+ page: number;
1177
+ } | {
1178
+ type: 'ellipsis';
1179
+ key: string;
1180
+ };
1181
+ /**
1182
+ * Pagination control for navigating multi-page content.
1183
+ *
1184
+ * Usage:
1185
+ * ```html
1186
+ * <llm-pagination [(page)]="currentPage" [pageCount]="totalPages" />
1187
+ * ```
1188
+ */
1189
+ declare class LlmPagination {
1190
+ /** Current page (1-based). Supports two-way binding: [(page)]="currentPage". */
1191
+ readonly page: _angular_core.ModelSignal<number>;
1192
+ /** Total number of pages. */
1193
+ readonly pageCount: _angular_core.InputSignal<number>;
1194
+ /** Number of page buttons to show on each side of the current page. */
1195
+ readonly siblingCount: _angular_core.InputSignal<number>;
1196
+ /** Whether to show first/last page jump buttons. */
1197
+ readonly showFirstLast: _angular_core.InputSignal<boolean>;
1198
+ protected readonly pageItems: _angular_core.Signal<PageItem[]>;
1199
+ protected goTo(p: number): void;
1200
+ protected goPrev(): void;
1201
+ protected goNext(): void;
1202
+ protected goFirst(): void;
1203
+ protected goLast(): void;
1204
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<LlmPagination, never>;
1205
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<LlmPagination, "llm-pagination", never, { "page": { "alias": "page"; "required": false; "isSignal": true; }; "pageCount": { "alias": "pageCount"; "required": false; "isSignal": true; }; "siblingCount": { "alias": "siblingCount"; "required": false; "isSignal": true; }; "showFirstLast": { "alias": "showFirstLast"; "required": false; "isSignal": true; }; }, { "page": "pageChange"; }, never, never, true, never>;
1206
+ }
1207
+
1208
+ /**
1209
+ * Slide-in drawer panel using the native `<dialog>` element.
1210
+ * Supports left, right, top, and bottom positions with focus trap,
1211
+ * Escape to close, and backdrop click to close.
1212
+ * Compose with `llm-drawer-header`, `llm-drawer-content`, and `llm-drawer-footer`.
1213
+ *
1214
+ * Usage:
1215
+ * ```html
1216
+ * <llm-button (click)="isOpen = true">Open</llm-button>
1217
+ * <llm-drawer [(open)]="isOpen" position="right">
1218
+ * <llm-drawer-header>Settings</llm-drawer-header>
1219
+ * <llm-drawer-content>Content here.</llm-drawer-content>
1220
+ * <llm-drawer-footer>
1221
+ * <llm-button variant="primary" (click)="isOpen = false">Save</llm-button>
1222
+ * </llm-drawer-footer>
1223
+ * </llm-drawer>
1224
+ * ```
1225
+ */
1226
+ declare class LlmDrawer {
1227
+ /** Whether the drawer is open. Supports two-way binding: [(open)]="isOpen". */
1228
+ readonly open: _angular_core.ModelSignal<boolean>;
1229
+ /** Which edge the drawer slides in from. */
1230
+ readonly position: _angular_core.InputSignal<"top" | "bottom" | "left" | "right">;
1231
+ /** Width (for left/right) or height (for top/bottom) of the panel. */
1232
+ readonly size: _angular_core.InputSignal<"sm" | "md" | "lg" | "full">;
1233
+ /** Whether clicking the backdrop closes the drawer. */
1234
+ readonly closeOnBackdrop: _angular_core.InputSignal<boolean>;
1235
+ /** @internal — referenced by LlmDrawerHeader via LLM_DRAWER token */
1236
+ readonly headerId: string;
1237
+ protected readonly drawerId: string;
1238
+ protected readonly dialogRef: _angular_core.Signal<ElementRef<HTMLDialogElement> | undefined>;
1239
+ private readonly triggerEl;
1240
+ protected readonly hostClasses: _angular_core.Signal<string>;
1241
+ constructor();
1242
+ protected onCancel(event: Event): void;
1243
+ protected onBackdropClick(event: MouseEvent): void;
1244
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<LlmDrawer, never>;
1245
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<LlmDrawer, "llm-drawer", never, { "open": { "alias": "open"; "required": false; "isSignal": true; }; "position": { "alias": "position"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "closeOnBackdrop": { "alias": "closeOnBackdrop"; "required": false; "isSignal": true; }; }, { "open": "openChange"; }, never, ["*"], true, never>;
1246
+ }
1247
+ /**
1248
+ * Header slot for `llm-drawer`. Contains the title and a close button.
1249
+ * Automatically receives the correct `id` for `aria-labelledby` association.
1250
+ */
1251
+ declare class LlmDrawerHeader {
1252
+ protected readonly context: _atelier_ui_angular.LlmDrawerContext;
1253
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<LlmDrawerHeader, never>;
1254
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<LlmDrawerHeader, "llm-drawer-header", never, {}, {}, never, ["*"], true, never>;
1255
+ }
1256
+ /**
1257
+ * Content slot for `llm-drawer`. Scrollable primary content area.
1258
+ */
1259
+ declare class LlmDrawerContent {
1260
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<LlmDrawerContent, never>;
1261
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<LlmDrawerContent, "llm-drawer-content", never, {}, {}, never, ["*"], true, never>;
1262
+ }
1263
+ /**
1264
+ * Footer slot for `llm-drawer`. Renders at the bottom with action buttons.
1265
+ */
1266
+ declare class LlmDrawerFooter {
1267
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<LlmDrawerFooter, never>;
1268
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<LlmDrawerFooter, "llm-drawer-footer", never, {}, {}, never, ["*"], true, never>;
1269
+ }
1270
+
1271
+ interface LlmDrawerContext {
1272
+ headerId: string;
1273
+ close: () => void;
1274
+ }
1275
+ declare const LLM_DRAWER: InjectionToken<LlmDrawerContext>;
1276
+
1277
+ export { LLM_ACCORDION_GROUP, LLM_BREADCRUMBS, LLM_DIALOG, LLM_DRAWER, LLM_RADIO_GROUP, LLM_SELECT, LLM_TAB_GROUP, LlmAccordionGroup, LlmAccordionHeader, LlmAccordionItem, LlmAlert, LlmAvatar, LlmAvatarGroup, LlmBadge, LlmBreadcrumbItem, LlmBreadcrumbs, LlmButton, LlmCard, LlmCardContent, LlmCardFooter, LlmCardHeader, LlmCheckbox, LlmDialog, LlmDialogContent, LlmDialogFooter, LlmDialogHeader, LlmDrawer, LlmDrawerContent, LlmDrawerFooter, LlmDrawerHeader, LlmInput, LlmMenu, LlmMenuItem, LlmMenuSeparator, LlmMenuTrigger, LlmOption, LlmPagination, LlmProgress, LlmRadio, LlmRadioGroup, LlmSelect, LlmSkeleton, LlmTab, LlmTabGroup, LlmTextarea, LlmToast, LlmToastContainer, LlmToastService, LlmToggle, LlmTooltip };
1278
+ export type { LlmAccordionGroupContext, LlmBreadcrumbsContext, LlmDialogContext, LlmDrawerContext, LlmRadioGroupContext, LlmSelectContext, LlmTabGroupContext, PageItem, TabInfo, ToastData, ToastOptions };