@lumaui/angular 0.1.4 → 0.2.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/fesm2022/lumaui-angular.mjs +2557 -27
- package/fesm2022/lumaui-angular.mjs.map +1 -1
- package/package.json +3 -3
- package/types/lumaui-angular.d.ts +1210 -20
|
@@ -1,18 +1,29 @@
|
|
|
1
1
|
import * as _angular_core from '@angular/core';
|
|
2
|
-
import {
|
|
2
|
+
import { InjectionToken, Signal, OnDestroy, WritableSignal, ElementRef, OnInit, AfterViewInit } from '@angular/core';
|
|
3
|
+
import { ButtonVariant, ButtonSize, CardVariant, CardTitleSize, CardDescriptionSize, AccordionItemVariant, AccordionTitleSize, TooltipPosition, TabsStyle, ToastPosition as ToastPosition$1, ToastVariant as ToastVariant$1 } from '@lumaui/core';
|
|
4
|
+
export { ToastCloseVariants, ToastContainerVariants, ToastIconVariants, ToastItemVariants, ToastState } from '@lumaui/core';
|
|
5
|
+
import * as _lumaui_angular from '@lumaui/angular';
|
|
6
|
+
import { Observable } from 'rxjs';
|
|
3
7
|
|
|
4
|
-
declare class
|
|
8
|
+
declare class LmButtonDirective {
|
|
5
9
|
lmVariant: _angular_core.InputSignal<ButtonVariant>;
|
|
6
10
|
lmSize: _angular_core.InputSignal<ButtonSize>;
|
|
7
11
|
lmDisabled: _angular_core.InputSignal<boolean>;
|
|
8
12
|
lmType: _angular_core.InputSignal<"button" | "submit" | "reset">;
|
|
9
13
|
classes: _angular_core.Signal<string>;
|
|
10
14
|
get hostClasses(): string;
|
|
11
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<
|
|
12
|
-
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<
|
|
15
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<LmButtonDirective, never>;
|
|
16
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<LmButtonDirective, "button[lumaButton], a[lumaButton]", never, { "lmVariant": { "alias": "lmVariant"; "required": false; "isSignal": true; }; "lmSize": { "alias": "lmSize"; "required": false; "isSignal": true; }; "lmDisabled": { "alias": "lmDisabled"; "required": false; "isSignal": true; }; "lmType": { "alias": "lmType"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
13
17
|
}
|
|
14
18
|
|
|
15
|
-
declare class
|
|
19
|
+
declare class LmBadgeDirective {
|
|
20
|
+
classes: _angular_core.Signal<string>;
|
|
21
|
+
get hostClasses(): string;
|
|
22
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<LmBadgeDirective, never>;
|
|
23
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<LmBadgeDirective, "[lumaBadge]", never, {}, {}, never, never, true, never>;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
declare class LmCardComponent {
|
|
16
27
|
/**
|
|
17
28
|
* Card visual style variant
|
|
18
29
|
* - default: Gradient border wrapper style (default)
|
|
@@ -23,32 +34,1211 @@ declare class CardComponent {
|
|
|
23
34
|
lmVariant: _angular_core.InputSignal<CardVariant>;
|
|
24
35
|
wrapperClasses: _angular_core.Signal<string>;
|
|
25
36
|
contentClasses: _angular_core.Signal<string>;
|
|
26
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<
|
|
27
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<
|
|
37
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<LmCardComponent, never>;
|
|
38
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<LmCardComponent, "luma-card", never, { "lmVariant": { "alias": "lmVariant"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
28
39
|
}
|
|
29
40
|
|
|
30
|
-
declare class
|
|
41
|
+
declare class LmCardTitleDirective {
|
|
31
42
|
lmSize: _angular_core.InputSignal<CardTitleSize>;
|
|
32
43
|
classes: _angular_core.Signal<string>;
|
|
33
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<
|
|
34
|
-
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<
|
|
44
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<LmCardTitleDirective, never>;
|
|
45
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<LmCardTitleDirective, "[lumaCardTitle]", never, { "lmSize": { "alias": "lmSize"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
35
46
|
}
|
|
36
47
|
|
|
37
|
-
declare class
|
|
48
|
+
declare class LmCardDescriptionDirective {
|
|
38
49
|
lmSize: _angular_core.InputSignal<CardDescriptionSize>;
|
|
39
50
|
classes: _angular_core.Signal<string>;
|
|
40
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<
|
|
41
|
-
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<
|
|
51
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<LmCardDescriptionDirective, never>;
|
|
52
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<LmCardDescriptionDirective, "[lumaCardDescription]", never, { "lmSize": { "alias": "lmSize"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
declare class LmCardHeaderDirective {
|
|
56
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<LmCardHeaderDirective, never>;
|
|
57
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<LmCardHeaderDirective, "[lumaCardHeader]", never, {}, {}, never, never, true, never>;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
declare class LmCardContentDirective {
|
|
61
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<LmCardContentDirective, never>;
|
|
62
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<LmCardContentDirective, "[lumaCardContent]", never, {}, {}, never, never, true, never>;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* AccordionGroupComponent
|
|
67
|
+
*
|
|
68
|
+
* Optional wrapper component that coordinates multiple accordion items.
|
|
69
|
+
* Supports controlled pattern for implementing business logic like:
|
|
70
|
+
* - Single item open at a time
|
|
71
|
+
* - Multiple items open
|
|
72
|
+
* - Always keep first/last item open
|
|
73
|
+
* - Maximum number of open items
|
|
74
|
+
*
|
|
75
|
+
* @example Controlled single mode
|
|
76
|
+
* ```html
|
|
77
|
+
* <luma-accordion-group [lmValue]="activeItem()" (lmValueChange)="activeItem.set($event)">
|
|
78
|
+
* <luma-accordion-item lmId="item-1">...</luma-accordion-item>
|
|
79
|
+
* <luma-accordion-item lmId="item-2">...</luma-accordion-item>
|
|
80
|
+
* </luma-accordion-group>
|
|
81
|
+
* ```
|
|
82
|
+
*
|
|
83
|
+
* @example Controlled multiple mode
|
|
84
|
+
* ```html
|
|
85
|
+
* <luma-accordion-group [lmValue]="activeItems()" (lmValueChange)="activeItems.set($event)">
|
|
86
|
+
* <luma-accordion-item lmId="item-1">...</luma-accordion-item>
|
|
87
|
+
* <luma-accordion-item lmId="item-2">...</luma-accordion-item>
|
|
88
|
+
* </luma-accordion-group>
|
|
89
|
+
* ```
|
|
90
|
+
*/
|
|
91
|
+
declare class LmAccordionGroupComponent {
|
|
92
|
+
/**
|
|
93
|
+
* Controlled value for which items are open
|
|
94
|
+
* - null: uncontrolled mode (each item manages its own state)
|
|
95
|
+
* - string: single item mode (ID of open item)
|
|
96
|
+
* - string[]: multiple items mode (IDs of open items)
|
|
97
|
+
*/
|
|
98
|
+
lmValue: _angular_core.InputSignal<string | string[] | null>;
|
|
99
|
+
/**
|
|
100
|
+
* Emitted when an item is toggled
|
|
101
|
+
* Returns the new value (string for single mode, string[] for multiple)
|
|
102
|
+
*/
|
|
103
|
+
lmValueChange: _angular_core.OutputEmitterRef<string | string[]>;
|
|
104
|
+
/**
|
|
105
|
+
* Force single mode even when lmValue is an array
|
|
106
|
+
* When true, only one item can be open at a time
|
|
107
|
+
*/
|
|
108
|
+
lmSingle: _angular_core.InputSignal<boolean>;
|
|
109
|
+
/**
|
|
110
|
+
* Toggle an item by its ID
|
|
111
|
+
* Called by child AccordionItemComponent when toggled
|
|
112
|
+
*/
|
|
113
|
+
toggleItem(itemId: string): void;
|
|
114
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<LmAccordionGroupComponent, never>;
|
|
115
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<LmAccordionGroupComponent, "luma-accordion-group", never, { "lmValue": { "alias": "lmValue"; "required": false; "isSignal": true; }; "lmSingle": { "alias": "lmSingle"; "required": false; "isSignal": true; }; }, { "lmValueChange": "lmValueChange"; }, never, ["*"], true, never>;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* Interface for accordion item state that child directives can access
|
|
120
|
+
*/
|
|
121
|
+
interface AccordionItemBase {
|
|
122
|
+
/** Whether the accordion item is currently open */
|
|
123
|
+
isOpen: Signal<boolean>;
|
|
124
|
+
/** Whether the accordion item is disabled */
|
|
125
|
+
lmDisabled: Signal<boolean>;
|
|
126
|
+
/** Toggle the accordion open/closed state */
|
|
127
|
+
toggle(): void;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Injection token for accordion item
|
|
131
|
+
* Allows child directives to access parent accordion item state
|
|
132
|
+
*/
|
|
133
|
+
declare const ACCORDION_ITEM: InjectionToken<AccordionItemBase>;
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* AccordionItemComponent
|
|
137
|
+
*
|
|
138
|
+
* Wrapper component that contains the trigger and content.
|
|
139
|
+
* Can be used standalone or within an AccordionGroupComponent.
|
|
140
|
+
*
|
|
141
|
+
* @example Standalone usage
|
|
142
|
+
* ```html
|
|
143
|
+
* <luma-accordion-item>
|
|
144
|
+
* <button lumaAccordionTrigger>
|
|
145
|
+
* <span lumaAccordionTitle>Title</span>
|
|
146
|
+
* <svg lumaAccordionIcon>...</svg>
|
|
147
|
+
* </button>
|
|
148
|
+
* <div lumaAccordionContent>Content here...</div>
|
|
149
|
+
* </luma-accordion-item>
|
|
150
|
+
* ```
|
|
151
|
+
*
|
|
152
|
+
* @example With variants
|
|
153
|
+
* ```html
|
|
154
|
+
* <luma-accordion-item lmVariant="filled">
|
|
155
|
+
* ...
|
|
156
|
+
* </luma-accordion-item>
|
|
157
|
+
* ```
|
|
158
|
+
*/
|
|
159
|
+
declare class LmAccordionItemComponent implements AccordionItemBase {
|
|
160
|
+
private group;
|
|
161
|
+
private el;
|
|
162
|
+
private renderer;
|
|
163
|
+
private previousClasses;
|
|
164
|
+
constructor();
|
|
165
|
+
/**
|
|
166
|
+
* Unique identifier for this item (required when using AccordionGroup)
|
|
167
|
+
*/
|
|
168
|
+
lmId: _angular_core.InputSignal<string>;
|
|
169
|
+
/**
|
|
170
|
+
* Visual style variant
|
|
171
|
+
* - default: Standard with border
|
|
172
|
+
* - bordered: FAQ-style stacked items
|
|
173
|
+
* - filled: Solid background (unified trigger/content)
|
|
174
|
+
*/
|
|
175
|
+
lmVariant: _angular_core.InputSignal<AccordionItemVariant>;
|
|
176
|
+
/**
|
|
177
|
+
* Initial/controlled open state (for standalone usage)
|
|
178
|
+
*/
|
|
179
|
+
lmOpen: _angular_core.InputSignal<boolean>;
|
|
180
|
+
/**
|
|
181
|
+
* Whether the accordion item is disabled
|
|
182
|
+
*/
|
|
183
|
+
lmDisabled: _angular_core.InputSignal<boolean>;
|
|
184
|
+
/**
|
|
185
|
+
* Emitted when the open state changes
|
|
186
|
+
* Useful for tracking/analytics
|
|
187
|
+
*/
|
|
188
|
+
lmOpenChange: _angular_core.OutputEmitterRef<boolean>;
|
|
189
|
+
private _isOpen;
|
|
190
|
+
/**
|
|
191
|
+
* Computed open state
|
|
192
|
+
* Priority: group controlled > lmOpen input > internal state
|
|
193
|
+
*/
|
|
194
|
+
isOpen: _angular_core.Signal<boolean>;
|
|
195
|
+
wrapperClasses: _angular_core.Signal<string>;
|
|
196
|
+
contentWrapperClasses: _angular_core.Signal<string>;
|
|
197
|
+
/**
|
|
198
|
+
* Toggle the accordion open/closed state
|
|
199
|
+
*/
|
|
200
|
+
toggle(): void;
|
|
201
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<LmAccordionItemComponent, never>;
|
|
202
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<LmAccordionItemComponent, "luma-accordion-item", never, { "lmId": { "alias": "lmId"; "required": false; "isSignal": true; }; "lmVariant": { "alias": "lmVariant"; "required": false; "isSignal": true; }; "lmOpen": { "alias": "lmOpen"; "required": false; "isSignal": true; }; "lmDisabled": { "alias": "lmDisabled"; "required": false; "isSignal": true; }; }, { "lmOpenChange": "lmOpenChange"; }, never, ["[lumaAccordionTrigger]", "[lumaAccordionContent]"], true, never>;
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
/**
|
|
206
|
+
* AccordionTriggerDirective
|
|
207
|
+
*
|
|
208
|
+
* Applied to a div element to make it the clickable trigger for the accordion.
|
|
209
|
+
* Uses div instead of button for maximum layout flexibility.
|
|
210
|
+
* Handles ARIA attributes and keyboard navigation automatically.
|
|
211
|
+
*
|
|
212
|
+
* @example Basic usage
|
|
213
|
+
* ```html
|
|
214
|
+
* <div lumaAccordionTrigger>
|
|
215
|
+
* <span lumaAccordionTitle>Title</span>
|
|
216
|
+
* <span lumaAccordionIcon>
|
|
217
|
+
* <svg>...</svg>
|
|
218
|
+
* </span>
|
|
219
|
+
* </div>
|
|
220
|
+
* ```
|
|
221
|
+
*
|
|
222
|
+
* @example Custom layout
|
|
223
|
+
* ```html
|
|
224
|
+
* <div lumaAccordionTrigger class="grid grid-cols-[auto_1fr_auto] gap-4">
|
|
225
|
+
* <svg class="w-6 h-6">...</svg>
|
|
226
|
+
* <div>
|
|
227
|
+
* <span lumaAccordionTitle>Title</span>
|
|
228
|
+
* <p class="text-sm">Description</p>
|
|
229
|
+
* </div>
|
|
230
|
+
* <span lumaAccordionIcon>
|
|
231
|
+
* <svg>...</svg>
|
|
232
|
+
* </span>
|
|
233
|
+
* </div>
|
|
234
|
+
* ```
|
|
235
|
+
*/
|
|
236
|
+
declare class LmAccordionTriggerDirective {
|
|
237
|
+
protected item: _lumaui_angular.AccordionItemBase;
|
|
238
|
+
private id;
|
|
239
|
+
triggerId: string;
|
|
240
|
+
contentId: string;
|
|
241
|
+
classes: _angular_core.Signal<string>;
|
|
242
|
+
onClick(event: Event): void;
|
|
243
|
+
onKeydown(event: KeyboardEvent): void;
|
|
244
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<LmAccordionTriggerDirective, never>;
|
|
245
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<LmAccordionTriggerDirective, "div[lumaAccordionTrigger]", never, {}, {}, never, never, true, never>;
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
/**
|
|
249
|
+
* AccordionTitleDirective
|
|
250
|
+
*
|
|
251
|
+
* Applies typography styles to the accordion title.
|
|
252
|
+
* Supports size variants for different visual hierarchies.
|
|
253
|
+
*
|
|
254
|
+
* @example Basic usage
|
|
255
|
+
* ```html
|
|
256
|
+
* <span lumaAccordionTitle>What is Luma UI?</span>
|
|
257
|
+
* ```
|
|
258
|
+
*
|
|
259
|
+
* @example With size variant
|
|
260
|
+
* ```html
|
|
261
|
+
* <span lumaAccordionTitle lmSize="lg">Large Title</span>
|
|
262
|
+
* ```
|
|
263
|
+
*/
|
|
264
|
+
declare class LmAccordionTitleDirective {
|
|
265
|
+
/**
|
|
266
|
+
* Size variant for the title
|
|
267
|
+
* - sm: Small text for compact UIs
|
|
268
|
+
* - md: Default size (base text)
|
|
269
|
+
* - lg: Large text for emphasis
|
|
270
|
+
*/
|
|
271
|
+
lmSize: _angular_core.InputSignal<AccordionTitleSize>;
|
|
272
|
+
classes: _angular_core.Signal<string>;
|
|
273
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<LmAccordionTitleDirective, never>;
|
|
274
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<LmAccordionTitleDirective, "[lumaAccordionTitle]", never, { "lmSize": { "alias": "lmSize"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
/**
|
|
278
|
+
* AccordionIconDirective
|
|
279
|
+
*
|
|
280
|
+
* Applies rotation animation to the accordion icon (typically a chevron).
|
|
281
|
+
* Must be placed on a wrapper element (span or div), not directly on the SVG.
|
|
282
|
+
* Automatically rotates based on the open state of the parent accordion item.
|
|
283
|
+
*
|
|
284
|
+
* @example With span wrapper (recommended)
|
|
285
|
+
* ```html
|
|
286
|
+
* <span lumaAccordionIcon>
|
|
287
|
+
* <svg viewBox="0 0 24 24" class="w-4 h-4">
|
|
288
|
+
* <path stroke="currentColor" stroke-width="2" d="M19 9l-7 7-7-7" />
|
|
289
|
+
* </svg>
|
|
290
|
+
* </span>
|
|
291
|
+
* ```
|
|
292
|
+
*
|
|
293
|
+
* @example With div wrapper
|
|
294
|
+
* ```html
|
|
295
|
+
* <div lumaAccordionIcon>
|
|
296
|
+
* <my-chevron-icon></my-chevron-icon>
|
|
297
|
+
* </div>
|
|
298
|
+
* ```
|
|
299
|
+
*
|
|
300
|
+
* @example Customize rotation via CSS variable
|
|
301
|
+
* ```html
|
|
302
|
+
* <span lumaAccordionIcon style="--luma-accordion-icon-rotation: 90deg">
|
|
303
|
+
* <svg>...</svg>
|
|
304
|
+
* </span>
|
|
305
|
+
* ```
|
|
306
|
+
*/
|
|
307
|
+
declare class LmAccordionIconDirective {
|
|
308
|
+
protected item: _lumaui_angular.AccordionItemBase;
|
|
309
|
+
classes: _angular_core.Signal<string>;
|
|
310
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<LmAccordionIconDirective, never>;
|
|
311
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<LmAccordionIconDirective, "span[lumaAccordionIcon], div[lumaAccordionIcon]", never, {}, {}, never, never, true, never>;
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
/**
|
|
315
|
+
* AccordionContentDirective
|
|
316
|
+
*
|
|
317
|
+
* Applied to the content area of the accordion.
|
|
318
|
+
* Handles visibility, ARIA attributes, and fade animation.
|
|
319
|
+
*
|
|
320
|
+
* @example Basic usage
|
|
321
|
+
* ```html
|
|
322
|
+
* <div lumaAccordionContent>
|
|
323
|
+
* <p>Your content here...</p>
|
|
324
|
+
* </div>
|
|
325
|
+
* ```
|
|
326
|
+
*/
|
|
327
|
+
declare class LmAccordionContentDirective {
|
|
328
|
+
protected item: _lumaui_angular.AccordionItemBase;
|
|
329
|
+
protected trigger: LmAccordionTriggerDirective | null;
|
|
330
|
+
private id;
|
|
331
|
+
contentId: string;
|
|
332
|
+
triggerId: _angular_core.Signal<string | null>;
|
|
333
|
+
classes: _angular_core.Signal<string>;
|
|
334
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<LmAccordionContentDirective, never>;
|
|
335
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<LmAccordionContentDirective, "[lumaAccordionContent]", never, {}, {}, never, never, true, never>;
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
declare class LmTooltipDirective implements OnDestroy {
|
|
339
|
+
private el;
|
|
340
|
+
private renderer;
|
|
341
|
+
private platformId;
|
|
342
|
+
lumaTooltip: _angular_core.InputSignal<string>;
|
|
343
|
+
lmPosition: _angular_core.InputSignal<TooltipPosition>;
|
|
344
|
+
lmHtml: _angular_core.InputSignal<boolean>;
|
|
345
|
+
lmTrigger: _angular_core.InputSignal<"click" | "hover" | "focus">;
|
|
346
|
+
lmDelay: _angular_core.InputSignal<number>;
|
|
347
|
+
isVisible: _angular_core.WritableSignal<boolean>;
|
|
348
|
+
actualPosition: _angular_core.WritableSignal<TooltipPosition>;
|
|
349
|
+
tooltipId: string;
|
|
350
|
+
private tooltipElement;
|
|
351
|
+
private showTimeout;
|
|
352
|
+
classes: _angular_core.Signal<string>;
|
|
353
|
+
constructor();
|
|
354
|
+
private ensureTooltipElement;
|
|
355
|
+
private updateContent;
|
|
356
|
+
private updateClasses;
|
|
357
|
+
private isTouchDevice;
|
|
358
|
+
private getFlippedPosition;
|
|
359
|
+
onMouseEnter(): void;
|
|
360
|
+
onMouseLeave(): void;
|
|
361
|
+
onClick(): void;
|
|
362
|
+
onFocus(): void;
|
|
363
|
+
onBlur(): void;
|
|
364
|
+
onEscape(): void;
|
|
365
|
+
onDocumentClick(event: Event): void;
|
|
366
|
+
onDocumentTouch(event: TouchEvent): void;
|
|
367
|
+
show(): void;
|
|
368
|
+
hide(): void;
|
|
369
|
+
toggle(): void;
|
|
370
|
+
ngOnDestroy(): void;
|
|
371
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<LmTooltipDirective, never>;
|
|
372
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<LmTooltipDirective, "[lumaTooltip]", never, { "lumaTooltip": { "alias": "lumaTooltip"; "required": true; "isSignal": true; }; "lmPosition": { "alias": "lmPosition"; "required": false; "isSignal": true; }; "lmHtml": { "alias": "lmHtml"; "required": false; "isSignal": true; }; "lmTrigger": { "alias": "lmTrigger"; "required": false; "isSignal": true; }; "lmDelay": { "alias": "lmDelay"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
interface TabsGroupBase {
|
|
376
|
+
/** Currently selected tab value */
|
|
377
|
+
value: WritableSignal<string | null>;
|
|
378
|
+
/** Visual style of the tabs (underline, background, pill) */
|
|
379
|
+
lmVariant: Signal<TabsStyle>;
|
|
380
|
+
/** Whether to lazy load panel content */
|
|
381
|
+
lmLazy: Signal<boolean>;
|
|
382
|
+
/** Select a tab by value */
|
|
383
|
+
select(value: string): void;
|
|
384
|
+
/** Register a trigger element */
|
|
385
|
+
registerTrigger(value: string, element: HTMLElement): void;
|
|
386
|
+
/** Unregister a trigger element */
|
|
387
|
+
unregisterTrigger(value: string): void;
|
|
388
|
+
/** Get all registered triggers */
|
|
389
|
+
getTriggers(): Map<string, HTMLElement>;
|
|
390
|
+
/** Focus next trigger (for keyboard navigation) */
|
|
391
|
+
focusNextTrigger(): void;
|
|
392
|
+
/** Focus previous trigger (for keyboard navigation) */
|
|
393
|
+
focusPreviousTrigger(): void;
|
|
394
|
+
/** Focus first trigger */
|
|
395
|
+
focusFirstTrigger(): void;
|
|
396
|
+
/** Focus last trigger */
|
|
397
|
+
focusLastTrigger(): void;
|
|
398
|
+
}
|
|
399
|
+
interface TabsListBase {
|
|
400
|
+
/** Reference to the native element */
|
|
401
|
+
elementRef: {
|
|
402
|
+
nativeElement: HTMLElement;
|
|
403
|
+
};
|
|
404
|
+
/** Get the currently active trigger element */
|
|
405
|
+
getActiveTrigger(): HTMLElement | null;
|
|
406
|
+
}
|
|
407
|
+
/**
|
|
408
|
+
* Injection token for tabs group
|
|
409
|
+
* Allows child components to access parent tabs state
|
|
410
|
+
*/
|
|
411
|
+
declare const TABS_GROUP: InjectionToken<TabsGroupBase>;
|
|
412
|
+
/**
|
|
413
|
+
* Injection token for tabs list
|
|
414
|
+
* Allows indicator to access trigger positions
|
|
415
|
+
*/
|
|
416
|
+
declare const TABS_LIST: InjectionToken<TabsListBase>;
|
|
417
|
+
|
|
418
|
+
/**
|
|
419
|
+
* Tabs container component
|
|
420
|
+
*
|
|
421
|
+
* Manages tab selection state, keyboard navigation, and provides context
|
|
422
|
+
* to child components (TabsList, TabsTrigger, TabsPanel).
|
|
423
|
+
*
|
|
424
|
+
* @example
|
|
425
|
+
* ```html
|
|
426
|
+
* <luma-tabs [lmValue]="selectedTab()" (lmValueChange)="onSelect($event)">
|
|
427
|
+
* <div lumaTabsList>
|
|
428
|
+
* <button lumaTabsTrigger="tab-1">Tab 1</button>
|
|
429
|
+
* <button lumaTabsTrigger="tab-2">Tab 2</button>
|
|
430
|
+
* </div>
|
|
431
|
+
* <div lumaTabsPanel="tab-1">Content 1</div>
|
|
432
|
+
* <div lumaTabsPanel="tab-2">Content 2</div>
|
|
433
|
+
* </luma-tabs>
|
|
434
|
+
* ```
|
|
435
|
+
*/
|
|
436
|
+
declare class LmTabsComponent implements TabsGroupBase {
|
|
437
|
+
/** Controlled value - currently selected tab */
|
|
438
|
+
lmValue: _angular_core.InputSignal<string | null>;
|
|
439
|
+
/** Default value for uncontrolled mode */
|
|
440
|
+
lmDefaultValue: _angular_core.InputSignal<string>;
|
|
441
|
+
/** Visual style: underline, background, or pill */
|
|
442
|
+
lmVariant: _angular_core.InputSignal<TabsStyle>;
|
|
443
|
+
/** Whether to lazy load panel content */
|
|
444
|
+
lmLazy: _angular_core.InputSignal<boolean>;
|
|
445
|
+
/** Emits when selected tab changes */
|
|
446
|
+
lmValueChange: _angular_core.OutputEmitterRef<string>;
|
|
447
|
+
/** Internal state for the selected value */
|
|
448
|
+
value: _angular_core.WritableSignal<string | null>;
|
|
449
|
+
/** Map of registered triggers for keyboard navigation */
|
|
450
|
+
private triggers;
|
|
451
|
+
/** Ordered list of trigger values for navigation */
|
|
452
|
+
private triggerOrder;
|
|
453
|
+
constructor();
|
|
454
|
+
/**
|
|
455
|
+
* Select a tab by value
|
|
456
|
+
*/
|
|
457
|
+
select(tabValue: string): void;
|
|
458
|
+
/**
|
|
459
|
+
* Register a trigger element for keyboard navigation
|
|
460
|
+
*/
|
|
461
|
+
registerTrigger(tabValue: string, element: HTMLElement): void;
|
|
462
|
+
/**
|
|
463
|
+
* Unregister a trigger element
|
|
464
|
+
*/
|
|
465
|
+
unregisterTrigger(tabValue: string): void;
|
|
466
|
+
/**
|
|
467
|
+
* Get all registered triggers
|
|
468
|
+
*/
|
|
469
|
+
getTriggers(): Map<string, HTMLElement>;
|
|
470
|
+
/**
|
|
471
|
+
* Focus next trigger in the list
|
|
472
|
+
*/
|
|
473
|
+
focusNextTrigger(): void;
|
|
474
|
+
/**
|
|
475
|
+
* Focus previous trigger in the list
|
|
476
|
+
*/
|
|
477
|
+
focusPreviousTrigger(): void;
|
|
478
|
+
/**
|
|
479
|
+
* Focus first trigger
|
|
480
|
+
*/
|
|
481
|
+
focusFirstTrigger(): void;
|
|
482
|
+
/**
|
|
483
|
+
* Focus last trigger
|
|
484
|
+
*/
|
|
485
|
+
focusLastTrigger(): void;
|
|
486
|
+
private getCurrentTriggerIndex;
|
|
487
|
+
private focusTriggerAtIndex;
|
|
488
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<LmTabsComponent, never>;
|
|
489
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<LmTabsComponent, "luma-tabs", never, { "lmValue": { "alias": "lmValue"; "required": false; "isSignal": true; }; "lmDefaultValue": { "alias": "lmDefaultValue"; "required": false; "isSignal": true; }; "lmVariant": { "alias": "lmVariant"; "required": false; "isSignal": true; }; "lmLazy": { "alias": "lmLazy"; "required": false; "isSignal": true; }; }, { "lmValueChange": "lmValueChange"; }, never, ["*"], true, never>;
|
|
490
|
+
}
|
|
491
|
+
|
|
492
|
+
/**
|
|
493
|
+
* Tabs list directive
|
|
494
|
+
*
|
|
495
|
+
* Container for tab triggers with role="tablist".
|
|
496
|
+
* Provides context for the indicator component.
|
|
497
|
+
*
|
|
498
|
+
* @example
|
|
499
|
+
* ```html
|
|
500
|
+
* <div lumaTabsList>
|
|
501
|
+
* <button lumaTabsTrigger="tab-1">Tab 1</button>
|
|
502
|
+
* <button lumaTabsTrigger="tab-2">Tab 2</button>
|
|
503
|
+
* </div>
|
|
504
|
+
* ```
|
|
505
|
+
*/
|
|
506
|
+
declare class LmTabsListDirective implements TabsListBase {
|
|
507
|
+
readonly elementRef: ElementRef<any>;
|
|
508
|
+
protected readonly tabsGroup: _lumaui_angular.TabsGroupBase;
|
|
509
|
+
/** Whether horizontal scrolling is enabled */
|
|
510
|
+
lmScrollable: boolean;
|
|
511
|
+
classes: _angular_core.Signal<string>;
|
|
512
|
+
/**
|
|
513
|
+
* Get the currently active trigger element
|
|
514
|
+
*/
|
|
515
|
+
getActiveTrigger(): HTMLElement | null;
|
|
516
|
+
/**
|
|
517
|
+
* Handle mouse wheel for horizontal scroll
|
|
518
|
+
*/
|
|
519
|
+
onWheel(event: WheelEvent): void;
|
|
520
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<LmTabsListDirective, never>;
|
|
521
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<LmTabsListDirective, "[lumaTabsList]", never, {}, {}, never, never, true, never>;
|
|
522
|
+
}
|
|
523
|
+
|
|
524
|
+
/**
|
|
525
|
+
* Tabs trigger directive
|
|
526
|
+
*
|
|
527
|
+
* Individual tab button with role="tab" and keyboard navigation support.
|
|
528
|
+
* Follows WAI-ARIA tabs pattern with roving tabindex.
|
|
529
|
+
*
|
|
530
|
+
* @example
|
|
531
|
+
* ```html
|
|
532
|
+
* <button lumaTabsTrigger="tab-1">Tab 1</button>
|
|
533
|
+
* ```
|
|
534
|
+
*/
|
|
535
|
+
declare class LmTabsTriggerDirective implements OnInit, OnDestroy {
|
|
536
|
+
private readonly el;
|
|
537
|
+
private readonly tabsGroup;
|
|
538
|
+
/** Tab value identifier */
|
|
539
|
+
lumaTabsTrigger: _angular_core.InputSignal<string>;
|
|
540
|
+
/** Whether this trigger is disabled */
|
|
541
|
+
lmDisabled: _angular_core.InputSignal<boolean>;
|
|
542
|
+
/** Computed: whether this tab is selected */
|
|
543
|
+
isSelected: _angular_core.Signal<boolean>;
|
|
544
|
+
/** Computed: ID for the trigger element */
|
|
545
|
+
triggerId: _angular_core.Signal<string>;
|
|
546
|
+
/** Computed: ID for the corresponding panel */
|
|
547
|
+
panelId: _angular_core.Signal<string>;
|
|
548
|
+
/** Computed: CSS classes from CVA */
|
|
549
|
+
classes: _angular_core.Signal<string>;
|
|
550
|
+
ngOnInit(): void;
|
|
551
|
+
ngOnDestroy(): void;
|
|
552
|
+
onClick(): void;
|
|
553
|
+
onKeydown(event: KeyboardEvent): void;
|
|
554
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<LmTabsTriggerDirective, never>;
|
|
555
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<LmTabsTriggerDirective, "[lumaTabsTrigger]", never, { "lumaTabsTrigger": { "alias": "lumaTabsTrigger"; "required": true; "isSignal": true; }; "lmDisabled": { "alias": "lmDisabled"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
556
|
+
}
|
|
557
|
+
|
|
558
|
+
/**
|
|
559
|
+
* Tabs panel directive
|
|
560
|
+
*
|
|
561
|
+
* Content panel with role="tabpanel" and lazy loading support.
|
|
562
|
+
* When lazy loading is enabled, content is only rendered after
|
|
563
|
+
* the tab has been selected at least once, then cached.
|
|
564
|
+
*
|
|
565
|
+
* @example
|
|
566
|
+
* ```html
|
|
567
|
+
* <div lumaTabsPanel="tab-1">Content 1</div>
|
|
568
|
+
*
|
|
569
|
+
* <!-- With lazy loading (default when lmLazy=true on parent) -->
|
|
570
|
+
* <ng-template lumaTabsPanel="tab-1">
|
|
571
|
+
* <expensive-component />
|
|
572
|
+
* </ng-template>
|
|
573
|
+
* ```
|
|
574
|
+
*/
|
|
575
|
+
declare class LmTabsPanelDirective {
|
|
576
|
+
private readonly tabsGroup;
|
|
577
|
+
private readonly templateRef;
|
|
578
|
+
private readonly viewContainer;
|
|
579
|
+
/** Panel value identifier */
|
|
580
|
+
lumaTabsPanel: _angular_core.InputSignal<string>;
|
|
581
|
+
/** Track if panel has ever been selected (for lazy loading cache) */
|
|
582
|
+
private hasBeenSelected;
|
|
583
|
+
/** Computed: whether this panel is currently selected */
|
|
584
|
+
isSelected: _angular_core.Signal<boolean>;
|
|
585
|
+
/** Computed: whether this panel should be visible/rendered */
|
|
586
|
+
isVisible: _angular_core.Signal<boolean>;
|
|
587
|
+
/** Computed: whether content should be rendered (for lazy loading) */
|
|
588
|
+
shouldRender: _angular_core.Signal<boolean>;
|
|
589
|
+
/** Computed: ID for the panel element */
|
|
590
|
+
panelId: _angular_core.Signal<string>;
|
|
591
|
+
/** Computed: ID for the corresponding trigger */
|
|
592
|
+
triggerId: _angular_core.Signal<string>;
|
|
593
|
+
/** Computed: CSS classes from CVA */
|
|
594
|
+
classes: _angular_core.Signal<string>;
|
|
595
|
+
constructor();
|
|
596
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<LmTabsPanelDirective, never>;
|
|
597
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<LmTabsPanelDirective, "[lumaTabsPanel]", never, { "lumaTabsPanel": { "alias": "lumaTabsPanel"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
598
|
+
}
|
|
599
|
+
|
|
600
|
+
/**
|
|
601
|
+
* Tabs indicator component
|
|
602
|
+
*
|
|
603
|
+
* Animated indicator that slides between tabs for the underline style.
|
|
604
|
+
* Uses CSS transform for smooth, GPU-accelerated animation.
|
|
605
|
+
*
|
|
606
|
+
* @example
|
|
607
|
+
* ```html
|
|
608
|
+
* <div lumaTabsList>
|
|
609
|
+
* <button lumaTabsTrigger="tab-1">Tab 1</button>
|
|
610
|
+
* <button lumaTabsTrigger="tab-2">Tab 2</button>
|
|
611
|
+
* <luma-tabs-indicator />
|
|
612
|
+
* </div>
|
|
613
|
+
* ```
|
|
614
|
+
*/
|
|
615
|
+
declare class LmTabsIndicatorComponent implements AfterViewInit, OnDestroy {
|
|
616
|
+
private readonly platformId;
|
|
617
|
+
private readonly tabsGroup;
|
|
618
|
+
private readonly tabsList;
|
|
619
|
+
/** Indicator width in pixels */
|
|
620
|
+
indicatorWidth: _angular_core.WritableSignal<number>;
|
|
621
|
+
/** Indicator X or Y position */
|
|
622
|
+
private indicatorPosition;
|
|
623
|
+
/** Resize observer for recalculating position */
|
|
624
|
+
private resizeObserver;
|
|
625
|
+
/** Computed: CSS classes from CVA */
|
|
626
|
+
classes: _angular_core.Signal<string>;
|
|
627
|
+
/** Computed: CSS transform for positioning */
|
|
628
|
+
indicatorTransform: _angular_core.Signal<string>;
|
|
629
|
+
constructor();
|
|
630
|
+
ngAfterViewInit(): void;
|
|
631
|
+
ngOnDestroy(): void;
|
|
632
|
+
private updateIndicatorPosition;
|
|
633
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<LmTabsIndicatorComponent, never>;
|
|
634
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<LmTabsIndicatorComponent, "luma-tabs-indicator", never, {}, {}, never, never, true, never>;
|
|
635
|
+
}
|
|
636
|
+
|
|
637
|
+
/**
|
|
638
|
+
* Modal size variants
|
|
639
|
+
*/
|
|
640
|
+
type ModalSize = 'sm' | 'md' | 'lg' | 'xl' | 'full';
|
|
641
|
+
/**
|
|
642
|
+
* Interface for modal context that child components/directives can access
|
|
643
|
+
*/
|
|
644
|
+
interface ModalContext {
|
|
645
|
+
/** Whether the modal is currently open */
|
|
646
|
+
isOpen: Signal<boolean>;
|
|
647
|
+
/** Open the modal */
|
|
648
|
+
open: () => void;
|
|
649
|
+
/** Close the modal */
|
|
650
|
+
close: () => void;
|
|
651
|
+
/** Modal size variant */
|
|
652
|
+
size: Signal<ModalSize>;
|
|
653
|
+
/** Whether to close on overlay click */
|
|
654
|
+
closeOnOverlay: Signal<boolean>;
|
|
655
|
+
/** Whether to close on Escape key */
|
|
656
|
+
closeOnEscape: Signal<boolean>;
|
|
657
|
+
/** Unique ID for accessibility */
|
|
658
|
+
modalId: string;
|
|
659
|
+
}
|
|
660
|
+
/**
|
|
661
|
+
* Injection token for modal context
|
|
662
|
+
* Allows child components to access parent modal state
|
|
663
|
+
*/
|
|
664
|
+
declare const MODAL_CONTEXT: InjectionToken<ModalContext>;
|
|
665
|
+
|
|
666
|
+
/**
|
|
667
|
+
* Modal container component
|
|
668
|
+
*
|
|
669
|
+
* Manages modal open/close state, escape key handling, and provides context
|
|
670
|
+
* to child components (ModalOverlay, ModalContainer, etc.).
|
|
671
|
+
*
|
|
672
|
+
* Supports both controlled and uncontrolled modes:
|
|
673
|
+
* - Controlled: Use [lmOpen] and (lmOpenChange)
|
|
674
|
+
* - Uncontrolled: Use [lmDefaultOpen] and access via template reference
|
|
675
|
+
*
|
|
676
|
+
* @example
|
|
677
|
+
* ```html
|
|
678
|
+
* <!-- Controlled mode -->
|
|
679
|
+
* <luma-modal [lmOpen]="isOpen()" (lmOpenChange)="isOpen.set($event)">
|
|
680
|
+
* <luma-modal-overlay>
|
|
681
|
+
* <luma-modal-container>
|
|
682
|
+
* <div lumaModalHeader>
|
|
683
|
+
* <h2 lumaModalTitle>Title</h2>
|
|
684
|
+
* <luma-modal-close />
|
|
685
|
+
* </div>
|
|
686
|
+
* <div lumaModalContent>Content</div>
|
|
687
|
+
* <div lumaModalFooter>
|
|
688
|
+
* <button lumaButton (click)="isOpen.set(false)">Close</button>
|
|
689
|
+
* </div>
|
|
690
|
+
* </luma-modal-container>
|
|
691
|
+
* </luma-modal-overlay>
|
|
692
|
+
* </luma-modal>
|
|
693
|
+
*
|
|
694
|
+
* <!-- Uncontrolled mode -->
|
|
695
|
+
* <luma-modal #modal [lmDefaultOpen]="false">
|
|
696
|
+
* ...
|
|
697
|
+
* </luma-modal>
|
|
698
|
+
* <button (click)="modal.open()">Open</button>
|
|
699
|
+
* ```
|
|
700
|
+
*/
|
|
701
|
+
declare class LmModalComponent implements ModalContext, OnDestroy {
|
|
702
|
+
private readonly platformId;
|
|
703
|
+
private readonly document;
|
|
704
|
+
/** Controlled open state (null = uncontrolled mode) */
|
|
705
|
+
lmOpen: _angular_core.InputSignal<boolean | null>;
|
|
706
|
+
/** Default open state for uncontrolled mode */
|
|
707
|
+
lmDefaultOpen: _angular_core.InputSignal<boolean>;
|
|
708
|
+
/** Size variant */
|
|
709
|
+
lmSize: _angular_core.InputSignal<ModalSize>;
|
|
710
|
+
/** Close when clicking the overlay */
|
|
711
|
+
lmCloseOnOverlay: _angular_core.InputSignal<boolean>;
|
|
712
|
+
/** Close when pressing Escape key */
|
|
713
|
+
lmCloseOnEscape: _angular_core.InputSignal<boolean>;
|
|
714
|
+
/** Emits when open state changes */
|
|
715
|
+
lmOpenChange: _angular_core.OutputEmitterRef<boolean>;
|
|
716
|
+
/** Internal open state for uncontrolled mode */
|
|
717
|
+
private internalOpen;
|
|
718
|
+
/** Unique modal ID for accessibility */
|
|
719
|
+
readonly modalId: string;
|
|
720
|
+
/** Previously focused element for focus restoration */
|
|
721
|
+
private previouslyFocused;
|
|
722
|
+
/** Escape key handler */
|
|
723
|
+
private escapeHandler;
|
|
724
|
+
/** Computed: current open state (controlled or uncontrolled) */
|
|
725
|
+
isOpen: _angular_core.Signal<boolean>;
|
|
726
|
+
/** Computed: size signal for context */
|
|
727
|
+
size: _angular_core.Signal<ModalSize>;
|
|
728
|
+
/** Computed: closeOnOverlay signal for context */
|
|
729
|
+
closeOnOverlay: _angular_core.Signal<boolean>;
|
|
730
|
+
/** Computed: closeOnEscape signal for context */
|
|
731
|
+
closeOnEscape: _angular_core.Signal<boolean>;
|
|
732
|
+
constructor();
|
|
733
|
+
ngOnDestroy(): void;
|
|
734
|
+
/**
|
|
735
|
+
* Open the modal
|
|
736
|
+
*/
|
|
737
|
+
open(): void;
|
|
738
|
+
/**
|
|
739
|
+
* Close the modal
|
|
740
|
+
*/
|
|
741
|
+
close(): void;
|
|
742
|
+
private storeFocus;
|
|
743
|
+
private restoreFocus;
|
|
744
|
+
private lockBodyScroll;
|
|
745
|
+
private unlockBodyScroll;
|
|
746
|
+
private registerEscapeHandler;
|
|
747
|
+
private unregisterEscapeHandler;
|
|
748
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<LmModalComponent, never>;
|
|
749
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<LmModalComponent, "luma-modal", never, { "lmOpen": { "alias": "lmOpen"; "required": false; "isSignal": true; }; "lmDefaultOpen": { "alias": "lmDefaultOpen"; "required": false; "isSignal": true; }; "lmSize": { "alias": "lmSize"; "required": false; "isSignal": true; }; "lmCloseOnOverlay": { "alias": "lmCloseOnOverlay"; "required": false; "isSignal": true; }; "lmCloseOnEscape": { "alias": "lmCloseOnEscape"; "required": false; "isSignal": true; }; }, { "lmOpenChange": "lmOpenChange"; }, never, ["*"], true, never>;
|
|
750
|
+
}
|
|
751
|
+
|
|
752
|
+
/**
|
|
753
|
+
* Modal overlay component (backdrop)
|
|
754
|
+
*
|
|
755
|
+
* Provides a semi-transparent backdrop behind the modal.
|
|
756
|
+
* Handles click-to-close when enabled on the parent modal.
|
|
757
|
+
*
|
|
758
|
+
* @example
|
|
759
|
+
* ```html
|
|
760
|
+
* <luma-modal [lmOpen]="isOpen()">
|
|
761
|
+
* <luma-modal-overlay>
|
|
762
|
+
* <luma-modal-container>...</luma-modal-container>
|
|
763
|
+
* </luma-modal-overlay>
|
|
764
|
+
* </luma-modal>
|
|
765
|
+
* ```
|
|
766
|
+
*/
|
|
767
|
+
declare class LmModalOverlayComponent {
|
|
768
|
+
private readonly modal;
|
|
769
|
+
/** Computed classes from CVA */
|
|
770
|
+
classes: _angular_core.Signal<string>;
|
|
771
|
+
/**
|
|
772
|
+
* Handle click on overlay (not on children)
|
|
773
|
+
*/
|
|
774
|
+
onOverlayClick(event: MouseEvent): void;
|
|
775
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<LmModalOverlayComponent, never>;
|
|
776
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<LmModalOverlayComponent, "luma-modal-overlay", never, {}, {}, never, ["*"], true, never>;
|
|
777
|
+
}
|
|
778
|
+
|
|
779
|
+
/**
|
|
780
|
+
* Modal container component (dialog box)
|
|
781
|
+
*
|
|
782
|
+
* Contains the modal content and handles:
|
|
783
|
+
* - ARIA attributes for accessibility
|
|
784
|
+
* - Focus trap when modal is open
|
|
785
|
+
* - Size variants
|
|
786
|
+
*
|
|
787
|
+
* @example
|
|
788
|
+
* ```html
|
|
789
|
+
* <luma-modal-overlay>
|
|
790
|
+
* <luma-modal-container>
|
|
791
|
+
* <div lumaModalHeader>...</div>
|
|
792
|
+
* <div lumaModalContent>...</div>
|
|
793
|
+
* <div lumaModalFooter>...</div>
|
|
794
|
+
* </luma-modal-container>
|
|
795
|
+
* </luma-modal-overlay>
|
|
796
|
+
* ```
|
|
797
|
+
*/
|
|
798
|
+
declare class LmModalContainerComponent implements AfterViewInit, OnDestroy {
|
|
799
|
+
readonly modal: _lumaui_angular.ModalContext;
|
|
800
|
+
private readonly elementRef;
|
|
801
|
+
private readonly platformId;
|
|
802
|
+
/** Focus trap keydown handler */
|
|
803
|
+
private focusTrapHandler;
|
|
804
|
+
/** ID for aria-labelledby */
|
|
805
|
+
titleId: _angular_core.Signal<string>;
|
|
806
|
+
/** Computed classes from CVA */
|
|
807
|
+
classes: _angular_core.Signal<string>;
|
|
808
|
+
constructor();
|
|
809
|
+
ngAfterViewInit(): void;
|
|
810
|
+
ngOnDestroy(): void;
|
|
811
|
+
/**
|
|
812
|
+
* Get all focusable elements within the modal
|
|
813
|
+
*/
|
|
814
|
+
private getFocusableElements;
|
|
815
|
+
/**
|
|
816
|
+
* Focus the first focusable element
|
|
817
|
+
*/
|
|
818
|
+
private focusFirstElement;
|
|
819
|
+
/**
|
|
820
|
+
* Setup focus trap to keep focus within modal
|
|
821
|
+
*/
|
|
822
|
+
private setupFocusTrap;
|
|
823
|
+
/**
|
|
824
|
+
* Remove focus trap handler
|
|
825
|
+
*/
|
|
826
|
+
private removeFocusTrap;
|
|
827
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<LmModalContainerComponent, never>;
|
|
828
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<LmModalContainerComponent, "luma-modal-container", never, {}, {}, never, ["*"], true, never>;
|
|
829
|
+
}
|
|
830
|
+
|
|
831
|
+
/**
|
|
832
|
+
* Modal header directive
|
|
833
|
+
*
|
|
834
|
+
* Container for modal title and close button.
|
|
835
|
+
* Provides consistent padding and border styling.
|
|
836
|
+
*
|
|
837
|
+
* @example
|
|
838
|
+
* ```html
|
|
839
|
+
* <div lumaModalHeader>
|
|
840
|
+
* <h2 lumaModalTitle>Modal Title</h2>
|
|
841
|
+
* <luma-modal-close />
|
|
842
|
+
* </div>
|
|
843
|
+
* ```
|
|
844
|
+
*/
|
|
845
|
+
declare class LmModalHeaderDirective {
|
|
846
|
+
/** Computed classes from CVA */
|
|
847
|
+
classes: _angular_core.Signal<string>;
|
|
848
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<LmModalHeaderDirective, never>;
|
|
849
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<LmModalHeaderDirective, "[lumaModalHeader]", never, {}, {}, never, never, true, never>;
|
|
850
|
+
}
|
|
851
|
+
|
|
852
|
+
/**
|
|
853
|
+
* Modal title directive
|
|
854
|
+
*
|
|
855
|
+
* Provides consistent typography for modal titles.
|
|
856
|
+
* Automatically links to aria-labelledby on the modal container.
|
|
857
|
+
*
|
|
858
|
+
* @example
|
|
859
|
+
* ```html
|
|
860
|
+
* <h2 lumaModalTitle>Modal Title</h2>
|
|
861
|
+
* <h2 lumaModalTitle lmSize="lg">Large Title</h2>
|
|
862
|
+
* ```
|
|
863
|
+
*/
|
|
864
|
+
declare class LmModalTitleDirective {
|
|
865
|
+
private readonly modal;
|
|
866
|
+
/** Title size variant */
|
|
867
|
+
lmSize: _angular_core.InputSignal<"sm" | "md" | "lg">;
|
|
868
|
+
/** ID for aria-labelledby connection */
|
|
869
|
+
titleId: _angular_core.Signal<string>;
|
|
870
|
+
/** Computed classes from CVA */
|
|
871
|
+
classes: _angular_core.Signal<string>;
|
|
872
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<LmModalTitleDirective, never>;
|
|
873
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<LmModalTitleDirective, "[lumaModalTitle]", never, { "lmSize": { "alias": "lmSize"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
874
|
+
}
|
|
875
|
+
|
|
876
|
+
/**
|
|
877
|
+
* Modal content directive
|
|
878
|
+
*
|
|
879
|
+
* Container for the main modal content.
|
|
880
|
+
* Supports scrolling when content exceeds available space.
|
|
881
|
+
*
|
|
882
|
+
* @example
|
|
883
|
+
* ```html
|
|
884
|
+
* <div lumaModalContent>
|
|
885
|
+
* Content that doesn't scroll
|
|
886
|
+
* </div>
|
|
887
|
+
*
|
|
888
|
+
* <div lumaModalContent [lmScrollable]="true">
|
|
889
|
+
* Long content that scrolls...
|
|
890
|
+
* </div>
|
|
891
|
+
* ```
|
|
892
|
+
*/
|
|
893
|
+
declare class LmModalContentDirective {
|
|
894
|
+
/** Enable scroll when content overflows */
|
|
895
|
+
lmScrollable: _angular_core.InputSignal<boolean>;
|
|
896
|
+
/** Computed classes from CVA */
|
|
897
|
+
classes: _angular_core.Signal<string>;
|
|
898
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<LmModalContentDirective, never>;
|
|
899
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<LmModalContentDirective, "[lumaModalContent]", never, { "lmScrollable": { "alias": "lmScrollable"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
900
|
+
}
|
|
901
|
+
|
|
902
|
+
/**
|
|
903
|
+
* Modal footer directive
|
|
904
|
+
*
|
|
905
|
+
* Container for modal actions (buttons, etc.).
|
|
906
|
+
* Provides consistent padding and flexible alignment.
|
|
907
|
+
*
|
|
908
|
+
* @example
|
|
909
|
+
* ```html
|
|
910
|
+
* <div lumaModalFooter>
|
|
911
|
+
* <button lumaButton lmVariant="ghost">Cancel</button>
|
|
912
|
+
* <button lumaButton>Confirm</button>
|
|
913
|
+
* </div>
|
|
914
|
+
*
|
|
915
|
+
* <div lumaModalFooter lmAlign="between">
|
|
916
|
+
* <span>Left content</span>
|
|
917
|
+
* <button lumaButton>Action</button>
|
|
918
|
+
* </div>
|
|
919
|
+
* ```
|
|
920
|
+
*/
|
|
921
|
+
declare class LmModalFooterDirective {
|
|
922
|
+
/** Alignment of footer content */
|
|
923
|
+
lmAlign: _angular_core.InputSignal<"start" | "center" | "end" | "between">;
|
|
924
|
+
/** Computed classes from CVA */
|
|
925
|
+
classes: _angular_core.Signal<string>;
|
|
926
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<LmModalFooterDirective, never>;
|
|
927
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<LmModalFooterDirective, "[lumaModalFooter]", never, { "lmAlign": { "alias": "lmAlign"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
928
|
+
}
|
|
929
|
+
|
|
930
|
+
/**
|
|
931
|
+
* Modal close button component
|
|
932
|
+
*
|
|
933
|
+
* Provides a styled close button with an X icon.
|
|
934
|
+
* Can be customized with different content via ng-content.
|
|
935
|
+
*
|
|
936
|
+
* @example
|
|
937
|
+
* ```html
|
|
938
|
+
* <!-- Default X icon -->
|
|
939
|
+
* <luma-modal-close />
|
|
940
|
+
*
|
|
941
|
+
* <!-- Custom aria label -->
|
|
942
|
+
* <luma-modal-close lmAriaLabel="Fechar modal" />
|
|
943
|
+
*
|
|
944
|
+
* <!-- Custom icon -->
|
|
945
|
+
* <luma-modal-close>
|
|
946
|
+
* <svg>...</svg>
|
|
947
|
+
* </luma-modal-close>
|
|
948
|
+
* ```
|
|
949
|
+
*/
|
|
950
|
+
declare class LmModalCloseComponent {
|
|
951
|
+
readonly modal: _lumaui_angular.ModalContext;
|
|
952
|
+
/** Accessible label for the close button */
|
|
953
|
+
lmAriaLabel: _angular_core.InputSignal<string>;
|
|
954
|
+
/** Computed aria label */
|
|
955
|
+
ariaLabel: _angular_core.Signal<string>;
|
|
956
|
+
/** Computed classes from CVA */
|
|
957
|
+
classes: _angular_core.Signal<string>;
|
|
958
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<LmModalCloseComponent, never>;
|
|
959
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<LmModalCloseComponent, "luma-modal-close", never, { "lmAriaLabel": { "alias": "lmAriaLabel"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
960
|
+
}
|
|
961
|
+
|
|
962
|
+
/**
|
|
963
|
+
* Toast variant types
|
|
964
|
+
*/
|
|
965
|
+
type ToastVariant = 'info' | 'success' | 'warning' | 'error';
|
|
966
|
+
/**
|
|
967
|
+
* Toast position options
|
|
968
|
+
*/
|
|
969
|
+
type ToastPosition = 'top-left' | 'top-center' | 'top-right' | 'bottom-left' | 'bottom-center' | 'bottom-right';
|
|
970
|
+
/**
|
|
971
|
+
* Toast configuration options passed to ToastService.show()
|
|
972
|
+
*/
|
|
973
|
+
interface ToastOptions {
|
|
974
|
+
/** Toast message (required) */
|
|
975
|
+
message: string;
|
|
976
|
+
/** Optional title */
|
|
977
|
+
title?: string;
|
|
978
|
+
/** Visual variant */
|
|
979
|
+
variant?: ToastVariant;
|
|
980
|
+
/** Screen position */
|
|
981
|
+
position?: ToastPosition;
|
|
982
|
+
/** Auto-close duration in milliseconds (0 = no auto-close) */
|
|
983
|
+
duration?: number;
|
|
984
|
+
/** Show close button */
|
|
985
|
+
dismissible?: boolean;
|
|
986
|
+
/** Pause timer on hover */
|
|
987
|
+
pauseOnHover?: boolean;
|
|
988
|
+
/** ARIA role override */
|
|
989
|
+
role?: 'alert' | 'status';
|
|
990
|
+
}
|
|
991
|
+
/**
|
|
992
|
+
* Internal toast representation with all required fields
|
|
993
|
+
*/
|
|
994
|
+
interface Toast extends Required<Omit<ToastOptions, 'role'>> {
|
|
995
|
+
/** Unique identifier */
|
|
996
|
+
id: string;
|
|
997
|
+
/** Creation timestamp */
|
|
998
|
+
createdAt: number;
|
|
999
|
+
/** Whether toast is currently animating out */
|
|
1000
|
+
isExiting: boolean;
|
|
1001
|
+
/** ARIA role */
|
|
1002
|
+
role: 'alert' | 'status';
|
|
1003
|
+
}
|
|
1004
|
+
/**
|
|
1005
|
+
* Toast reference for programmatic control
|
|
1006
|
+
*/
|
|
1007
|
+
interface ToastRef {
|
|
1008
|
+
/** Unique toast ID */
|
|
1009
|
+
readonly id: string;
|
|
1010
|
+
/** Dismiss this toast */
|
|
1011
|
+
dismiss(): void;
|
|
1012
|
+
/** Observable that emits when dismissed */
|
|
1013
|
+
readonly afterDismissed: Observable<void>;
|
|
1014
|
+
}
|
|
1015
|
+
/**
|
|
1016
|
+
* Global toast configuration
|
|
1017
|
+
*/
|
|
1018
|
+
interface ToastConfig {
|
|
1019
|
+
/** Default position */
|
|
1020
|
+
position: ToastPosition;
|
|
1021
|
+
/** Default duration in milliseconds */
|
|
1022
|
+
duration: number;
|
|
1023
|
+
/** Default dismissible state */
|
|
1024
|
+
dismissible: boolean;
|
|
1025
|
+
/** Maximum visible toasts */
|
|
1026
|
+
maxVisible: number;
|
|
1027
|
+
/** Pause on hover by default */
|
|
1028
|
+
pauseOnHover: boolean;
|
|
1029
|
+
}
|
|
1030
|
+
/**
|
|
1031
|
+
* Default toast configuration
|
|
1032
|
+
*/
|
|
1033
|
+
declare const DEFAULT_TOAST_CONFIG: ToastConfig;
|
|
1034
|
+
/**
|
|
1035
|
+
* Injection token for global toast configuration
|
|
1036
|
+
*/
|
|
1037
|
+
declare const TOAST_CONFIG: InjectionToken<ToastConfig>;
|
|
1038
|
+
/**
|
|
1039
|
+
* Provider function for custom toast configuration
|
|
1040
|
+
*/
|
|
1041
|
+
declare function provideToastConfig(config: Partial<ToastConfig>): {
|
|
1042
|
+
provide: InjectionToken<ToastConfig>;
|
|
1043
|
+
useValue: {
|
|
1044
|
+
position: ToastPosition;
|
|
1045
|
+
duration: number;
|
|
1046
|
+
dismissible: boolean;
|
|
1047
|
+
maxVisible: number;
|
|
1048
|
+
pauseOnHover: boolean;
|
|
1049
|
+
};
|
|
1050
|
+
};
|
|
1051
|
+
|
|
1052
|
+
/**
|
|
1053
|
+
* ToastService
|
|
1054
|
+
*
|
|
1055
|
+
* Injectable service for showing toast notifications programmatically.
|
|
1056
|
+
* Provides convenience methods for info, success, warning, and error toasts.
|
|
1057
|
+
*
|
|
1058
|
+
* @example
|
|
1059
|
+
* ```typescript
|
|
1060
|
+
* private toast = inject(ToastService);
|
|
1061
|
+
*
|
|
1062
|
+
* showSuccess() {
|
|
1063
|
+
* this.toast.success('Changes saved successfully!');
|
|
1064
|
+
* }
|
|
1065
|
+
*
|
|
1066
|
+
* showError() {
|
|
1067
|
+
* this.toast.error('Failed to save', {
|
|
1068
|
+
* title: 'Error',
|
|
1069
|
+
* duration: 0
|
|
1070
|
+
* });
|
|
1071
|
+
* }
|
|
1072
|
+
* ```
|
|
1073
|
+
*/
|
|
1074
|
+
declare class LmToastService implements OnDestroy {
|
|
1075
|
+
private readonly config;
|
|
1076
|
+
private readonly appRef;
|
|
1077
|
+
private readonly injector;
|
|
1078
|
+
private readonly document;
|
|
1079
|
+
private readonly platformId;
|
|
1080
|
+
private readonly liveAnnouncer;
|
|
1081
|
+
private readonly _toasts;
|
|
1082
|
+
private containerRef;
|
|
1083
|
+
private nextId;
|
|
1084
|
+
private readonly toastRefs;
|
|
1085
|
+
/** Observable list of current toasts */
|
|
1086
|
+
readonly toasts: _angular_core.Signal<Toast[]>;
|
|
1087
|
+
ngOnDestroy(): void;
|
|
1088
|
+
/**
|
|
1089
|
+
* Show a toast notification
|
|
1090
|
+
* @param options - Toast configuration options
|
|
1091
|
+
* @returns ToastRef for programmatic control
|
|
1092
|
+
*/
|
|
1093
|
+
show(options: ToastOptions): ToastRef;
|
|
1094
|
+
/**
|
|
1095
|
+
* Show info toast
|
|
1096
|
+
* @param message - Toast message
|
|
1097
|
+
* @param options - Additional options
|
|
1098
|
+
*/
|
|
1099
|
+
info(message: string, options?: Partial<ToastOptions>): ToastRef;
|
|
1100
|
+
/**
|
|
1101
|
+
* Show success toast
|
|
1102
|
+
* @param message - Toast message
|
|
1103
|
+
* @param options - Additional options
|
|
1104
|
+
*/
|
|
1105
|
+
success(message: string, options?: Partial<ToastOptions>): ToastRef;
|
|
1106
|
+
/**
|
|
1107
|
+
* Show warning toast
|
|
1108
|
+
* @param message - Toast message
|
|
1109
|
+
* @param options - Additional options
|
|
1110
|
+
*/
|
|
1111
|
+
warning(message: string, options?: Partial<ToastOptions>): ToastRef;
|
|
1112
|
+
/**
|
|
1113
|
+
* Show error toast
|
|
1114
|
+
* @param message - Toast message
|
|
1115
|
+
* @param options - Additional options
|
|
1116
|
+
*/
|
|
1117
|
+
error(message: string, options?: Partial<ToastOptions>): ToastRef;
|
|
1118
|
+
/**
|
|
1119
|
+
* Dismiss a specific toast
|
|
1120
|
+
* @param id - Toast ID to dismiss
|
|
1121
|
+
*/
|
|
1122
|
+
dismiss(id: string): void;
|
|
1123
|
+
/**
|
|
1124
|
+
* Dismiss all toasts
|
|
1125
|
+
*/
|
|
1126
|
+
dismissAll(): void;
|
|
1127
|
+
/**
|
|
1128
|
+
* Ensure toast container exists in DOM
|
|
1129
|
+
*/
|
|
1130
|
+
private ensureContainer;
|
|
1131
|
+
/**
|
|
1132
|
+
* Remove container from DOM
|
|
1133
|
+
*/
|
|
1134
|
+
private destroyContainer;
|
|
1135
|
+
/**
|
|
1136
|
+
* Announce toast to screen readers
|
|
1137
|
+
*/
|
|
1138
|
+
private announceToast;
|
|
1139
|
+
/**
|
|
1140
|
+
* Get announcement prefix for variant
|
|
1141
|
+
*/
|
|
1142
|
+
private getVariantPrefix;
|
|
1143
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<LmToastService, never>;
|
|
1144
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<LmToastService>;
|
|
1145
|
+
}
|
|
1146
|
+
|
|
1147
|
+
/**
|
|
1148
|
+
* ToastContainerComponent
|
|
1149
|
+
*
|
|
1150
|
+
* Fixed-position container that renders all active toasts.
|
|
1151
|
+
* Supports all 6 positions simultaneously by grouping toasts by their position.
|
|
1152
|
+
*
|
|
1153
|
+
* @internal This component is created programmatically by ToastService
|
|
1154
|
+
*/
|
|
1155
|
+
declare class LmToastContainerComponent {
|
|
1156
|
+
/** Toasts signal passed from ToastService */
|
|
1157
|
+
_toasts: Signal<Toast[]>;
|
|
1158
|
+
/** Dismiss callback passed from ToastService */
|
|
1159
|
+
_onDismiss: (id: string) => void;
|
|
1160
|
+
/** Group toasts by their position */
|
|
1161
|
+
protected readonly toastsByPosition: Signal<Record<ToastPosition$1, Toast[]>>;
|
|
1162
|
+
/** Get CSS classes for a specific position */
|
|
1163
|
+
protected getPositionClasses(position: ToastPosition$1): string;
|
|
1164
|
+
/** Handle dismiss event from toast item */
|
|
1165
|
+
protected onDismiss(id: string): void;
|
|
1166
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<LmToastContainerComponent, never>;
|
|
1167
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<LmToastContainerComponent, "luma-toast-container", never, {}, {}, never, never, true, never>;
|
|
42
1168
|
}
|
|
43
1169
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
1170
|
+
/**
|
|
1171
|
+
* ToastItemComponent
|
|
1172
|
+
*
|
|
1173
|
+
* Individual toast notification with timer and icon.
|
|
1174
|
+
*
|
|
1175
|
+
* @internal Created by ToastContainerComponent
|
|
1176
|
+
*/
|
|
1177
|
+
declare class LmToastItemComponent implements OnInit, OnDestroy {
|
|
1178
|
+
/** Toast data */
|
|
1179
|
+
toast: _angular_core.InputSignal<Toast>;
|
|
1180
|
+
/** Emits when toast should be dismissed */
|
|
1181
|
+
dismiss: _angular_core.OutputEmitterRef<string>;
|
|
1182
|
+
/** Timer subscription */
|
|
1183
|
+
private timerSubscription;
|
|
1184
|
+
/** Remaining time in ms */
|
|
1185
|
+
private remainingTime;
|
|
1186
|
+
/** Whether timer is paused */
|
|
1187
|
+
private isPaused;
|
|
1188
|
+
/** Animation state */
|
|
1189
|
+
private animationState;
|
|
1190
|
+
/** Item CSS classes */
|
|
1191
|
+
protected readonly itemClasses: _angular_core.Signal<string>;
|
|
1192
|
+
/** Icon CSS classes */
|
|
1193
|
+
protected readonly iconClasses: _angular_core.Signal<string>;
|
|
1194
|
+
/** Content CSS classes */
|
|
1195
|
+
protected readonly contentClasses: _angular_core.Signal<string>;
|
|
1196
|
+
/** Title CSS classes */
|
|
1197
|
+
protected readonly titleClasses: _angular_core.Signal<string>;
|
|
1198
|
+
/** Message CSS classes */
|
|
1199
|
+
protected readonly messageClasses: _angular_core.Signal<string>;
|
|
1200
|
+
/** Whether toast has interactive elements */
|
|
1201
|
+
protected readonly hasInteractiveElements: _angular_core.Signal<boolean>;
|
|
1202
|
+
ngOnInit(): void;
|
|
1203
|
+
ngOnDestroy(): void;
|
|
1204
|
+
/** Start auto-close timer */
|
|
1205
|
+
private startTimer;
|
|
1206
|
+
/** Stop timer */
|
|
1207
|
+
private stopTimer;
|
|
1208
|
+
/** Dismiss this toast */
|
|
1209
|
+
private dismissToast;
|
|
1210
|
+
/** Handle close button click */
|
|
1211
|
+
protected onClose(): void;
|
|
1212
|
+
/** Pause timer on mouse enter */
|
|
1213
|
+
protected onMouseEnter(): void;
|
|
1214
|
+
/** Resume timer on mouse leave */
|
|
1215
|
+
protected onMouseLeave(): void;
|
|
1216
|
+
/** Pause timer on focus */
|
|
1217
|
+
protected onFocus(): void;
|
|
1218
|
+
/** Resume timer on blur */
|
|
1219
|
+
protected onBlur(): void;
|
|
1220
|
+
/** Dismiss on Escape key */
|
|
1221
|
+
protected onEscapeKey(): void;
|
|
1222
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<LmToastItemComponent, never>;
|
|
1223
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<LmToastItemComponent, "luma-toast-item", never, { "toast": { "alias": "toast"; "required": true; "isSignal": true; }; }, { "dismiss": "dismiss"; }, never, never, true, never>;
|
|
47
1224
|
}
|
|
48
1225
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
1226
|
+
/**
|
|
1227
|
+
* ToastCloseComponent
|
|
1228
|
+
*
|
|
1229
|
+
* Close button for toast notifications.
|
|
1230
|
+
* Styled according to the toast variant.
|
|
1231
|
+
*
|
|
1232
|
+
* @internal Used by ToastItemComponent
|
|
1233
|
+
*/
|
|
1234
|
+
declare class LmToastCloseComponent {
|
|
1235
|
+
/** Toast variant for styling */
|
|
1236
|
+
lmVariant: _angular_core.InputSignal<ToastVariant$1>;
|
|
1237
|
+
/** CSS classes */
|
|
1238
|
+
protected readonly classes: _angular_core.Signal<string>;
|
|
1239
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<LmToastCloseComponent, never>;
|
|
1240
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<LmToastCloseComponent, "luma-toast-close", never, { "lmVariant": { "alias": "lmVariant"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
52
1241
|
}
|
|
53
1242
|
|
|
54
|
-
export {
|
|
1243
|
+
export { ACCORDION_ITEM, DEFAULT_TOAST_CONFIG, LmAccordionContentDirective, LmAccordionGroupComponent, LmAccordionIconDirective, LmAccordionItemComponent, LmAccordionTitleDirective, LmAccordionTriggerDirective, LmBadgeDirective, LmButtonDirective, LmCardComponent, LmCardContentDirective, LmCardDescriptionDirective, LmCardHeaderDirective, LmCardTitleDirective, LmModalCloseComponent, LmModalComponent, LmModalContainerComponent, LmModalContentDirective, LmModalFooterDirective, LmModalHeaderDirective, LmModalOverlayComponent, LmModalTitleDirective, LmTabsComponent, LmTabsIndicatorComponent, LmTabsListDirective, LmTabsPanelDirective, LmTabsTriggerDirective, LmToastCloseComponent, LmToastContainerComponent, LmToastItemComponent, LmToastService, LmTooltipDirective, MODAL_CONTEXT, TABS_GROUP, TABS_LIST, TOAST_CONFIG, provideToastConfig };
|
|
1244
|
+
export type { AccordionItemBase, ModalContext, ModalSize, TabsGroupBase, TabsListBase, Toast, ToastConfig, ToastOptions, ToastPosition, ToastRef, ToastVariant };
|