@life-cockpit/angular-ui-kit 1.0.0
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/README.md +163 -0
- package/fesm2022/life-cockpit-angular-ui-kit.mjs +6842 -0
- package/fesm2022/life-cockpit-angular-ui-kit.mjs.map +1 -0
- package/package.json +42 -0
- package/src/assets/life-cockpit-emblem.svg +1740 -0
- package/src/assets/life-cockpit-logo.svg +1 -0
- package/src/assets/life-cockpit-logo_old.svg +59 -0
- package/types/life-cockpit-angular-ui-kit.d.ts +3621 -0
|
@@ -0,0 +1,3621 @@
|
|
|
1
|
+
import * as _angular_core from '@angular/core';
|
|
2
|
+
import { EventEmitter, ElementRef, OnInit, OnDestroy, AfterViewInit, QueryList, Signal, TemplateRef, AfterContentInit } from '@angular/core';
|
|
3
|
+
import { ControlValueAccessor } from '@angular/forms';
|
|
4
|
+
import { SafeHtml } from '@angular/platform-browser';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Do not edit directly, this file was auto-generated.
|
|
8
|
+
*/
|
|
9
|
+
declare const ColorPrimary50 = "#f0f8fa";
|
|
10
|
+
declare const ColorPrimary100 = "#e0f1f4";
|
|
11
|
+
declare const ColorPrimary200 = "#c1e3e9";
|
|
12
|
+
declare const ColorPrimary300 = "#a3d5df";
|
|
13
|
+
declare const ColorPrimary400 = "#84c7d4";
|
|
14
|
+
declare const ColorPrimary500 = "#208497";
|
|
15
|
+
declare const ColorPrimary600 = "#1a6a79";
|
|
16
|
+
declare const ColorPrimary700 = "#144f5b";
|
|
17
|
+
declare const ColorPrimary800 = "#0d353d";
|
|
18
|
+
declare const ColorPrimary900 = "#071a1f";
|
|
19
|
+
declare const ColorSecondary50 = "#f5f8f9";
|
|
20
|
+
declare const ColorSecondary100 = "#ebf1f3";
|
|
21
|
+
declare const ColorSecondary200 = "#d7e3e7";
|
|
22
|
+
declare const ColorSecondary300 = "#c3d5db";
|
|
23
|
+
declare const ColorSecondary400 = "#afc7cf";
|
|
24
|
+
declare const ColorSecondary500 = "#7097af";
|
|
25
|
+
declare const ColorSecondary600 = "#5a798c";
|
|
26
|
+
declare const ColorSecondary700 = "#435b69";
|
|
27
|
+
declare const ColorSecondary800 = "#2d3c46";
|
|
28
|
+
declare const ColorSecondary900 = "#161e23";
|
|
29
|
+
declare const ColorNeutral50 = "#f9fafb";
|
|
30
|
+
declare const ColorNeutral100 = "#f3f4f6";
|
|
31
|
+
declare const ColorNeutral200 = "#e5e7eb";
|
|
32
|
+
declare const ColorNeutral300 = "#d1d5db";
|
|
33
|
+
declare const ColorNeutral400 = "#9ca3af";
|
|
34
|
+
declare const ColorNeutral500 = "#6b7280";
|
|
35
|
+
declare const ColorNeutral600 = "#4b5563";
|
|
36
|
+
declare const ColorNeutral700 = "#374151";
|
|
37
|
+
declare const ColorNeutral800 = "#1f2937";
|
|
38
|
+
declare const ColorNeutral900 = "#111827";
|
|
39
|
+
declare const ColorSuccessDefault = "#8ea475";
|
|
40
|
+
declare const ColorSuccessLight = "#cdd6c2";
|
|
41
|
+
declare const ColorSuccessDark = "#5f7150";
|
|
42
|
+
declare const ColorErrorDefault = "#9d0e0e";
|
|
43
|
+
declare const ColorErrorLight = "#f7a1a1";
|
|
44
|
+
declare const ColorErrorDark = "#6b0909";
|
|
45
|
+
declare const ColorWarningDefault = "#e1a040";
|
|
46
|
+
declare const ColorWarningLight = "#f1d3a7";
|
|
47
|
+
declare const ColorWarningDark = "#9b6b2b";
|
|
48
|
+
declare const ColorInfoDefault = "#3b6588";
|
|
49
|
+
declare const ColorInfoLight = "#b8cee0";
|
|
50
|
+
declare const ColorInfoDark = "#27445c";
|
|
51
|
+
declare const ColorAccentOrange = "#df792e";
|
|
52
|
+
declare const ColorAccentPurple = "#866aa0";
|
|
53
|
+
declare const ColorAccentRed = "#9e3846";
|
|
54
|
+
declare const ColorAccentRust = "#c6592e";
|
|
55
|
+
declare const ColorAccentViolet = "#4e3f84";
|
|
56
|
+
declare const Spacing0 = "0";
|
|
57
|
+
declare const Spacing1 = "0.25rem";
|
|
58
|
+
declare const Spacing2 = "0.5rem";
|
|
59
|
+
declare const Spacing3 = "0.75rem";
|
|
60
|
+
declare const Spacing4 = "1rem";
|
|
61
|
+
declare const Spacing5 = "1.25rem";
|
|
62
|
+
declare const Spacing6 = "1.5rem";
|
|
63
|
+
declare const Spacing7 = "1.75rem";
|
|
64
|
+
declare const Spacing8 = "2rem";
|
|
65
|
+
declare const Spacing9 = "2.25rem";
|
|
66
|
+
declare const Spacing10 = "2.5rem";
|
|
67
|
+
declare const Spacing11 = "2.75rem";
|
|
68
|
+
declare const Spacing12 = "3rem";
|
|
69
|
+
declare const Spacing14 = "3.5rem";
|
|
70
|
+
declare const Spacing16 = "4rem";
|
|
71
|
+
declare const Spacing05 = "0.125rem";
|
|
72
|
+
declare const Spacing15 = "0.375rem";
|
|
73
|
+
declare const Spacing25 = "0.625rem";
|
|
74
|
+
declare const Spacing35 = "0.875rem";
|
|
75
|
+
declare const TypographyFontFamilyBase = "-apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif";
|
|
76
|
+
declare const TypographyFontFamilyMono = "'SF Mono', 'Monaco', 'Inconsolata', 'Fira Mono', 'Droid Sans Mono', 'Source Code Pro', monospace";
|
|
77
|
+
declare const TypographyFontSizeXs = "0.75rem";
|
|
78
|
+
declare const TypographyFontSizeSm = "0.875rem";
|
|
79
|
+
declare const TypographyFontSizeBase = "1rem";
|
|
80
|
+
declare const TypographyFontSizeLg = "1.125rem";
|
|
81
|
+
declare const TypographyFontSizeXl = "1.25rem";
|
|
82
|
+
declare const TypographyFontSize2xl = "1.5rem";
|
|
83
|
+
declare const TypographyFontSize3xl = "1.875rem";
|
|
84
|
+
declare const TypographyFontSize4xl = "2.25rem";
|
|
85
|
+
declare const TypographyFontSize5xl = "3rem";
|
|
86
|
+
declare const TypographyFontSize6xl = "3.75rem";
|
|
87
|
+
declare const TypographyFontWeightNormal = "400";
|
|
88
|
+
declare const TypographyFontWeightMedium = "500";
|
|
89
|
+
declare const TypographyFontWeightSemibold = "600";
|
|
90
|
+
declare const TypographyFontWeightBold = "700";
|
|
91
|
+
declare const TypographyLineHeightTight = "1.25";
|
|
92
|
+
declare const TypographyLineHeightNormal = "1.5";
|
|
93
|
+
declare const TypographyLineHeightRelaxed = "1.75";
|
|
94
|
+
declare const Elevation1 = "0 1px 2px 0 rgba(0, 0, 0, 0.05)";
|
|
95
|
+
declare const Elevation2 = "0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)";
|
|
96
|
+
declare const Elevation3 = "0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)";
|
|
97
|
+
declare const Elevation4 = "0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04)";
|
|
98
|
+
declare const BorderRadiusNone = "0";
|
|
99
|
+
declare const BorderRadiusSm = "0.25rem";
|
|
100
|
+
declare const BorderRadiusMd = "0.5rem";
|
|
101
|
+
declare const BorderRadiusLg = "0.75rem";
|
|
102
|
+
declare const BorderRadiusXl = "1rem";
|
|
103
|
+
declare const BorderRadius2xl = "1.5rem";
|
|
104
|
+
declare const BorderRadiusFull = "9999px";
|
|
105
|
+
declare const AnimationDurationFast = "150ms";
|
|
106
|
+
declare const AnimationEasingEaseIn = "ease-in";
|
|
107
|
+
declare const AnimationEasingEaseOut = "ease-out";
|
|
108
|
+
declare const AnimationEasingEaseInOut = "ease-in-out";
|
|
109
|
+
declare const SizeInteractiveXsHeight = "1.5rem";
|
|
110
|
+
declare const SizeInteractiveXsPadding = "0.25rem 0.5rem";
|
|
111
|
+
declare const SizeInteractiveXsFontSize = "0.75rem";
|
|
112
|
+
declare const SizeInteractiveSmHeight = "2rem";
|
|
113
|
+
declare const SizeInteractiveSmPadding = "0.375rem 0.75rem";
|
|
114
|
+
declare const SizeInteractiveSmFontSize = "0.875rem";
|
|
115
|
+
declare const SizeInteractiveMdHeight = "2.5rem";
|
|
116
|
+
declare const SizeInteractiveMdPadding = "0.5rem 1rem";
|
|
117
|
+
declare const SizeInteractiveMdFontSize = "1rem";
|
|
118
|
+
declare const SizeInteractiveLgHeight = "2.75rem";
|
|
119
|
+
declare const SizeInteractiveLgPadding = "0.625rem 1.25rem";
|
|
120
|
+
declare const SizeInteractiveLgFontSize = "1.125rem";
|
|
121
|
+
declare const SizeMinTouchWidth = "2.75rem";
|
|
122
|
+
declare const SizeMinTouchHeight = "2.75rem";
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* Theme Types
|
|
126
|
+
* Defines theme modes and configuration interfaces
|
|
127
|
+
*/
|
|
128
|
+
type ThemeMode = 'light' | 'dark';
|
|
129
|
+
interface ThemeConfig {
|
|
130
|
+
mode: ThemeMode;
|
|
131
|
+
autoDetect?: boolean;
|
|
132
|
+
}
|
|
133
|
+
interface ThemeState {
|
|
134
|
+
currentMode: ThemeMode;
|
|
135
|
+
prefersDark: boolean;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* Theme Service
|
|
140
|
+
* Currently only supports light theme (dark mode disabled)
|
|
141
|
+
*/
|
|
142
|
+
declare class ThemeService {
|
|
143
|
+
private readonly platformId;
|
|
144
|
+
private readonly isBrowser;
|
|
145
|
+
private readonly themeState;
|
|
146
|
+
readonly currentTheme: _angular_core.Signal<ThemeState>;
|
|
147
|
+
readonly isDark: _angular_core.WritableSignal<boolean>;
|
|
148
|
+
constructor();
|
|
149
|
+
/**
|
|
150
|
+
* Set the theme mode (currently only light is supported)
|
|
151
|
+
*/
|
|
152
|
+
setTheme(mode: ThemeMode): void;
|
|
153
|
+
/**
|
|
154
|
+
* Toggle theme (disabled - always light)
|
|
155
|
+
*/
|
|
156
|
+
toggleTheme(): void;
|
|
157
|
+
/**
|
|
158
|
+
* Reset to system preference (disabled - always light)
|
|
159
|
+
*/
|
|
160
|
+
useSystemPreference(): void;
|
|
161
|
+
/**
|
|
162
|
+
* Apply light theme to document
|
|
163
|
+
*/
|
|
164
|
+
private applyTheme;
|
|
165
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ThemeService, never>;
|
|
166
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<ThemeService>;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
/**
|
|
170
|
+
* NavigationItem interface for sidenav navigation
|
|
171
|
+
*
|
|
172
|
+
* Represents a navigation item with icon, label, route, and optional role requirement.
|
|
173
|
+
* Can also represent a section header (group) when `isSection` is true.
|
|
174
|
+
*/
|
|
175
|
+
interface NavigationItem {
|
|
176
|
+
/**
|
|
177
|
+
* Unique identifier for the navigation item
|
|
178
|
+
*/
|
|
179
|
+
id: string;
|
|
180
|
+
/**
|
|
181
|
+
* Icon name from lc-icons library (e.g., 'home', 'paint-brush')
|
|
182
|
+
*/
|
|
183
|
+
icon: string;
|
|
184
|
+
/**
|
|
185
|
+
* Display label for the navigation item
|
|
186
|
+
*/
|
|
187
|
+
label: string;
|
|
188
|
+
/**
|
|
189
|
+
* Angular route path (e.g., '/', '/trading')
|
|
190
|
+
*/
|
|
191
|
+
route: string;
|
|
192
|
+
/**
|
|
193
|
+
* Optional required Cognito role (e.g., 'LC.Trader')
|
|
194
|
+
* If specified, item only visible to users with this role
|
|
195
|
+
*/
|
|
196
|
+
requiredRole?: string;
|
|
197
|
+
/**
|
|
198
|
+
* Display order in sidebar (1 = first)
|
|
199
|
+
*/
|
|
200
|
+
displayOrder: number;
|
|
201
|
+
/**
|
|
202
|
+
* Optional nested navigation items for multi-level navigation
|
|
203
|
+
*/
|
|
204
|
+
children?: NavigationItem[];
|
|
205
|
+
/**
|
|
206
|
+
* When true, this item acts as a non-clickable section header/headline.
|
|
207
|
+
* Children are displayed beneath it with the label as a group title.
|
|
208
|
+
*/
|
|
209
|
+
isSection?: boolean;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
/**
|
|
213
|
+
* Accordion component for collapsible content sections.
|
|
214
|
+
*
|
|
215
|
+
* @example
|
|
216
|
+
* ```html
|
|
217
|
+
* <lc-accordion title="Section Title" [(expanded)]="isOpen">
|
|
218
|
+
* <p>Collapsible content here</p>
|
|
219
|
+
* </lc-accordion>
|
|
220
|
+
* ```
|
|
221
|
+
*/
|
|
222
|
+
declare class AccordionComponent {
|
|
223
|
+
/** Title displayed in the accordion header */
|
|
224
|
+
readonly title: _angular_core.InputSignal<string>;
|
|
225
|
+
/** Whether the accordion is expanded (two-way binding) */
|
|
226
|
+
readonly expanded: _angular_core.ModelSignal<boolean>;
|
|
227
|
+
/** Visual variant */
|
|
228
|
+
readonly variant: _angular_core.InputSignal<"outlined" | "flat">;
|
|
229
|
+
/** Size of the header */
|
|
230
|
+
readonly size: _angular_core.InputSignal<"sm" | "md" | "lg">;
|
|
231
|
+
/** Whether the accordion is disabled */
|
|
232
|
+
readonly disabled: _angular_core.InputSignal<boolean>;
|
|
233
|
+
/** Computed CSS classes */
|
|
234
|
+
protected accordionClasses: _angular_core.Signal<string>;
|
|
235
|
+
/** Toggle expanded state */
|
|
236
|
+
protected toggle(): void;
|
|
237
|
+
/** Handle keyboard events for accessibility */
|
|
238
|
+
protected onKeydown(event: KeyboardEvent): void;
|
|
239
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AccordionComponent, never>;
|
|
240
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AccordionComponent, "lc-accordion", never, { "title": { "alias": "title"; "required": true; "isSignal": true; }; "expanded": { "alias": "expanded"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, { "expanded": "expandedChange"; }, never, ["*"], true, never>;
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
type ButtonVariant = 'primary' | 'secondary' | 'outline' | 'ghost' | 'link' | 'danger' | 'warning' | 'info';
|
|
244
|
+
type ButtonSize = 'xs' | 'sm' | 'md' | 'lg';
|
|
245
|
+
type ButtonType = 'button' | 'submit' | 'reset';
|
|
246
|
+
declare class ButtonComponent {
|
|
247
|
+
variant: ButtonVariant;
|
|
248
|
+
size: ButtonSize;
|
|
249
|
+
disabled: boolean;
|
|
250
|
+
loading: boolean;
|
|
251
|
+
isLoading: boolean;
|
|
252
|
+
iconOnly: boolean;
|
|
253
|
+
fullWidth: boolean;
|
|
254
|
+
ariaLabel: string;
|
|
255
|
+
type: ButtonType;
|
|
256
|
+
readonly clicked: EventEmitter<void>;
|
|
257
|
+
readonly focused: EventEmitter<void>;
|
|
258
|
+
readonly blurred: EventEmitter<void>;
|
|
259
|
+
buttonElement: ElementRef<HTMLButtonElement>;
|
|
260
|
+
get isDisabled(): boolean;
|
|
261
|
+
handleClick(): void;
|
|
262
|
+
handleFocus(): void;
|
|
263
|
+
handleBlur(): void;
|
|
264
|
+
focus(): void;
|
|
265
|
+
blur(): void;
|
|
266
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ButtonComponent, never>;
|
|
267
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ButtonComponent, "lc-button", never, { "variant": { "alias": "variant"; "required": false; }; "size": { "alias": "size"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "loading": { "alias": "loading"; "required": false; }; "isLoading": { "alias": "isLoading"; "required": false; }; "iconOnly": { "alias": "iconOnly"; "required": false; }; "fullWidth": { "alias": "fullWidth"; "required": false; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; }; "type": { "alias": "type"; "required": false; }; }, { "clicked": "clicked"; "focused": "focused"; "blurred": "blurred"; }, never, ["[slot='icon-before']", "*", "[slot='icon-after']"], true, never>;
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
/**
|
|
271
|
+
* Card component for content grouping and hierarchy.
|
|
272
|
+
*
|
|
273
|
+
* @example
|
|
274
|
+
* ```html
|
|
275
|
+
* <lc-card title="Card Title" variant="elevated" padding="md">
|
|
276
|
+
* <p>Card body content</p>
|
|
277
|
+
* </lc-card>
|
|
278
|
+
* ```
|
|
279
|
+
*/
|
|
280
|
+
declare class CardComponent {
|
|
281
|
+
/**
|
|
282
|
+
* Optional title rendered as a styled header.
|
|
283
|
+
* For complex headers (e.g. title + action button), use content projection instead.
|
|
284
|
+
*/
|
|
285
|
+
title: _angular_core.InputSignal<string | undefined>;
|
|
286
|
+
/**
|
|
287
|
+
* Optional subtitle rendered below the title.
|
|
288
|
+
*/
|
|
289
|
+
subtitle: _angular_core.InputSignal<string | undefined>;
|
|
290
|
+
/**
|
|
291
|
+
* Visual variant of the card
|
|
292
|
+
* - elevated: Box shadow (default)
|
|
293
|
+
* - outlined: Border only
|
|
294
|
+
* - flat: No shadow or border
|
|
295
|
+
* @default 'elevated'
|
|
296
|
+
*/
|
|
297
|
+
variant: _angular_core.InputSignal<"outlined" | "flat" | "elevated">;
|
|
298
|
+
/**
|
|
299
|
+
* Padding inside the card
|
|
300
|
+
* @default 'md'
|
|
301
|
+
*/
|
|
302
|
+
padding: _angular_core.InputSignal<"xs" | "sm" | "md" | "lg" | "none">;
|
|
303
|
+
/**
|
|
304
|
+
* Whether the card is clickable (hover effects, cursor pointer)
|
|
305
|
+
* @default false
|
|
306
|
+
*/
|
|
307
|
+
clickable: _angular_core.InputSignal<boolean>;
|
|
308
|
+
/**
|
|
309
|
+
* Whether the card is selected (if clickable)
|
|
310
|
+
* @default false
|
|
311
|
+
*/
|
|
312
|
+
selected: _angular_core.InputSignal<boolean>;
|
|
313
|
+
/**
|
|
314
|
+
* Border radius size
|
|
315
|
+
* @default 'md'
|
|
316
|
+
*/
|
|
317
|
+
borderRadius: _angular_core.InputSignal<"sm" | "md" | "lg" | "none" | "full">;
|
|
318
|
+
/**
|
|
319
|
+
* ARIA label for accessibility
|
|
320
|
+
*/
|
|
321
|
+
ariaLabel: _angular_core.InputSignal<string | undefined>;
|
|
322
|
+
/**
|
|
323
|
+
* Emitted when card is clicked (if clickable)
|
|
324
|
+
*/
|
|
325
|
+
readonly cardClick: _angular_core.OutputEmitterRef<MouseEvent>;
|
|
326
|
+
/**
|
|
327
|
+
* Compute card CSS classes based on inputs
|
|
328
|
+
*/
|
|
329
|
+
protected cardClasses: _angular_core.Signal<string>;
|
|
330
|
+
/**
|
|
331
|
+
* Compute ARIA role based on clickable state
|
|
332
|
+
*/
|
|
333
|
+
protected role: _angular_core.Signal<"button" | "article">;
|
|
334
|
+
/**
|
|
335
|
+
* Handle card click events
|
|
336
|
+
*/
|
|
337
|
+
protected handleClick(event: MouseEvent): void;
|
|
338
|
+
/**
|
|
339
|
+
* Handle keyboard events for accessibility
|
|
340
|
+
*/
|
|
341
|
+
protected handleKeydown(event: KeyboardEvent): void;
|
|
342
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<CardComponent, never>;
|
|
343
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<CardComponent, "lc-card", never, { "title": { "alias": "title"; "required": false; "isSignal": true; }; "subtitle": { "alias": "subtitle"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "padding": { "alias": "padding"; "required": false; "isSignal": true; }; "clickable": { "alias": "clickable"; "required": false; "isSignal": true; }; "selected": { "alias": "selected"; "required": false; "isSignal": true; }; "borderRadius": { "alias": "borderRadius"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "cardClick": "cardClick"; }, never, ["[card-header]", "*", "[card-footer]"], true, never>;
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
type CheckboxSize = 'xs' | 'sm' | 'md' | 'lg';
|
|
347
|
+
declare class CheckboxComponent implements ControlValueAccessor {
|
|
348
|
+
readonly id: _angular_core.InputSignal<string>;
|
|
349
|
+
readonly label: _angular_core.InputSignal<string>;
|
|
350
|
+
readonly error: _angular_core.InputSignal<boolean>;
|
|
351
|
+
readonly errorMessage: _angular_core.InputSignal<string>;
|
|
352
|
+
readonly helpText: _angular_core.InputSignal<string>;
|
|
353
|
+
readonly size: _angular_core.InputSignal<CheckboxSize>;
|
|
354
|
+
readonly required: _angular_core.InputSignal<boolean>;
|
|
355
|
+
readonly ariaLabel: _angular_core.InputSignal<string>;
|
|
356
|
+
readonly ariaLabelledBy: _angular_core.InputSignal<string>;
|
|
357
|
+
readonly ariaDescribedBy: _angular_core.InputSignal<string>;
|
|
358
|
+
readonly checkedChange: _angular_core.OutputEmitterRef<boolean>;
|
|
359
|
+
readonly checked: _angular_core.WritableSignal<boolean>;
|
|
360
|
+
readonly disabled: _angular_core.WritableSignal<boolean>;
|
|
361
|
+
readonly indeterminate: _angular_core.WritableSignal<boolean>;
|
|
362
|
+
readonly computedChecked: _angular_core.Signal<boolean>;
|
|
363
|
+
readonly computedDisabled: _angular_core.Signal<boolean>;
|
|
364
|
+
readonly computedIndeterminate: _angular_core.Signal<boolean>;
|
|
365
|
+
readonly labelClasses: _angular_core.Signal<string>;
|
|
366
|
+
writeValue(value: boolean | null): void;
|
|
367
|
+
registerOnChange(fn: (value: boolean) => void): void;
|
|
368
|
+
registerOnTouched(fn: () => void): void;
|
|
369
|
+
setDisabledState(isDisabled: boolean): void;
|
|
370
|
+
handleChange(event: Event): void;
|
|
371
|
+
handleBlur(): void;
|
|
372
|
+
private onChange;
|
|
373
|
+
private onTouched;
|
|
374
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<CheckboxComponent, never>;
|
|
375
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<CheckboxComponent, "lc-checkbox", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "error": { "alias": "error"; "required": false; "isSignal": true; }; "errorMessage": { "alias": "errorMessage"; "required": false; "isSignal": true; }; "helpText": { "alias": "helpText"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "ariaLabelledBy": { "alias": "ariaLabelledBy"; "required": false; "isSignal": true; }; "ariaDescribedBy": { "alias": "ariaDescribedBy"; "required": false; "isSignal": true; }; }, { "checkedChange": "checkedChange"; }, never, never, true, never>;
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
type IconVariant = 'outline' | 'solid';
|
|
379
|
+
type IconSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
|
|
380
|
+
/**
|
|
381
|
+
* Icon component - Heroicons wrapper for displaying SVG icons
|
|
382
|
+
*
|
|
383
|
+
* Features:
|
|
384
|
+
* - Signal-based reactive API
|
|
385
|
+
* - Support for outline and solid variants
|
|
386
|
+
* - Multiple size options (xs, sm, md, lg, xl)
|
|
387
|
+
* - Custom color support (CSS colors, variables, Tailwind classes)
|
|
388
|
+
* - Accessibility attributes (ARIA labels, decorative icons)
|
|
389
|
+
* - Dynamic SVG loading from Heroicons
|
|
390
|
+
*
|
|
391
|
+
* @example
|
|
392
|
+
* ```html
|
|
393
|
+
* <!-- Basic usage -->
|
|
394
|
+
* <lc-icon name="user" />
|
|
395
|
+
*
|
|
396
|
+
* <!-- With variant and size -->
|
|
397
|
+
* <lc-icon name="check" variant="solid" size="lg" />
|
|
398
|
+
*
|
|
399
|
+
* <!-- With custom color -->
|
|
400
|
+
* <lc-icon name="arrow-right" color="#FF5733" />
|
|
401
|
+
*
|
|
402
|
+
* <!-- With Tailwind color -->
|
|
403
|
+
* <lc-icon name="star" color="text-primary-500" />
|
|
404
|
+
*
|
|
405
|
+
* <!-- With accessibility label -->
|
|
406
|
+
* <lc-icon name="user" ariaLabel="User profile" />
|
|
407
|
+
*
|
|
408
|
+
* <!-- Decorative icon (hidden from screen readers) -->
|
|
409
|
+
* <lc-icon name="sparkles" [decorative]="true" />
|
|
410
|
+
* ```
|
|
411
|
+
*/
|
|
412
|
+
declare class IconComponent {
|
|
413
|
+
private readonly sanitizer;
|
|
414
|
+
private readonly http;
|
|
415
|
+
/**
|
|
416
|
+
* Icon name from Heroicons library
|
|
417
|
+
* @example "user", "check", "arrow-right"
|
|
418
|
+
*/
|
|
419
|
+
readonly name: _angular_core.InputSignal<string>;
|
|
420
|
+
/**
|
|
421
|
+
* Icon variant (outline or solid)
|
|
422
|
+
* @default "outline"
|
|
423
|
+
*/
|
|
424
|
+
readonly variant: _angular_core.InputSignal<IconVariant>;
|
|
425
|
+
/**
|
|
426
|
+
* Icon size
|
|
427
|
+
* - xs: 16px
|
|
428
|
+
* - sm: 20px
|
|
429
|
+
* - md: 24px (default)
|
|
430
|
+
* - lg: 32px
|
|
431
|
+
* - xl: 40px
|
|
432
|
+
* @default "md"
|
|
433
|
+
*/
|
|
434
|
+
readonly size: _angular_core.InputSignal<IconSize>;
|
|
435
|
+
/**
|
|
436
|
+
* Icon color
|
|
437
|
+
* Can be:
|
|
438
|
+
* - CSS color: "#FF5733", "rgb(255, 87, 51)"
|
|
439
|
+
* - CSS variable: "var(--color-primary-500)"
|
|
440
|
+
* - Tailwind class: "text-primary-500"
|
|
441
|
+
* - "currentColor" (default - inherits from parent)
|
|
442
|
+
* @default "currentColor"
|
|
443
|
+
*/
|
|
444
|
+
readonly color: _angular_core.InputSignal<string>;
|
|
445
|
+
/**
|
|
446
|
+
* Accessible label for screen readers
|
|
447
|
+
* Required if icon has semantic meaning
|
|
448
|
+
*/
|
|
449
|
+
readonly ariaLabel: _angular_core.InputSignal<string | undefined>;
|
|
450
|
+
/**
|
|
451
|
+
* Whether icon is purely decorative (hidden from screen readers)
|
|
452
|
+
* @default false
|
|
453
|
+
*/
|
|
454
|
+
readonly decorative: _angular_core.InputSignal<boolean>;
|
|
455
|
+
/**
|
|
456
|
+
* SVG content loaded from Heroicons
|
|
457
|
+
* @internal
|
|
458
|
+
*/
|
|
459
|
+
readonly svgContent: _angular_core.WritableSignal<SafeHtml>;
|
|
460
|
+
/**
|
|
461
|
+
* Alias map for non-Heroicon names (e.g. Material Design names)
|
|
462
|
+
* Maps alternative names to their Heroicon equivalents
|
|
463
|
+
* @internal
|
|
464
|
+
*/
|
|
465
|
+
private readonly iconAliasMap;
|
|
466
|
+
/**
|
|
467
|
+
* Inline SVG map for common icons (fallback when HTTP loading not available)
|
|
468
|
+
* @internal
|
|
469
|
+
*/
|
|
470
|
+
private readonly inlineSvgMap;
|
|
471
|
+
/**
|
|
472
|
+
* Computed path to SVG file
|
|
473
|
+
* @internal
|
|
474
|
+
*/
|
|
475
|
+
readonly iconPath: _angular_core.Signal<string>;
|
|
476
|
+
/**
|
|
477
|
+
* Computed size in pixels
|
|
478
|
+
* @internal
|
|
479
|
+
*/
|
|
480
|
+
readonly sizeInPixels: _angular_core.Signal<string>;
|
|
481
|
+
/**
|
|
482
|
+
* Computed CSS classes
|
|
483
|
+
* @internal
|
|
484
|
+
*/
|
|
485
|
+
readonly computedClasses: _angular_core.Signal<string>;
|
|
486
|
+
/**
|
|
487
|
+
* Computed inline color style
|
|
488
|
+
* @internal
|
|
489
|
+
*/
|
|
490
|
+
readonly colorStyle: _angular_core.Signal<string>;
|
|
491
|
+
constructor();
|
|
492
|
+
/**
|
|
493
|
+
* Process SVG string to add size, color, and accessibility attributes
|
|
494
|
+
* @private
|
|
495
|
+
*/
|
|
496
|
+
private processSvgString;
|
|
497
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<IconComponent, never>;
|
|
498
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<IconComponent, "lc-icon", never, { "name": { "alias": "name"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "decorative": { "alias": "decorative"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
499
|
+
}
|
|
500
|
+
|
|
501
|
+
/**
|
|
502
|
+
* Logo Component
|
|
503
|
+
*
|
|
504
|
+
* Displays the Life-Cockpit logo or emblem.
|
|
505
|
+
*
|
|
506
|
+
* Usage:
|
|
507
|
+
* ```html
|
|
508
|
+
* <lc-logo variant="full" size="md"></lc-logo>
|
|
509
|
+
* <lc-logo variant="emblem" size="sm"></lc-logo>
|
|
510
|
+
* ```
|
|
511
|
+
*/
|
|
512
|
+
declare class LogoComponent {
|
|
513
|
+
/**
|
|
514
|
+
* Logo variant to display
|
|
515
|
+
* - 'full': Full logo with text
|
|
516
|
+
* - 'emblem': Just the emblem/icon
|
|
517
|
+
*/
|
|
518
|
+
variant: 'full' | 'emblem';
|
|
519
|
+
/**
|
|
520
|
+
* Size of the logo
|
|
521
|
+
* - 'xs': 24px height
|
|
522
|
+
* - 'sm': 32px height
|
|
523
|
+
* - 'md': 48px height (default)
|
|
524
|
+
* - 'lg': 64px height
|
|
525
|
+
* - 'xl': 96px height
|
|
526
|
+
*/
|
|
527
|
+
size: 'xs' | 'sm' | 'md' | 'lg' | 'xl';
|
|
528
|
+
/**
|
|
529
|
+
* Alt text for accessibility
|
|
530
|
+
*/
|
|
531
|
+
alt: string;
|
|
532
|
+
/**
|
|
533
|
+
* Makes the logo appear clickable
|
|
534
|
+
*/
|
|
535
|
+
clickable: boolean;
|
|
536
|
+
get logoSrc(): string;
|
|
537
|
+
get logoClasses(): string;
|
|
538
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<LogoComponent, never>;
|
|
539
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<LogoComponent, "lc-logo", never, { "variant": { "alias": "variant"; "required": false; }; "size": { "alias": "size"; "required": false; }; "alt": { "alias": "alt"; "required": false; }; "clickable": { "alias": "clickable"; "required": false; }; }, {}, never, never, true, never>;
|
|
540
|
+
}
|
|
541
|
+
|
|
542
|
+
interface MenuItem {
|
|
543
|
+
id: string;
|
|
544
|
+
label: string;
|
|
545
|
+
icon?: string;
|
|
546
|
+
iconSize?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';
|
|
547
|
+
href?: string;
|
|
548
|
+
target?: '_blank' | '_self' | '_parent' | '_top';
|
|
549
|
+
variant?: 'default' | 'danger';
|
|
550
|
+
dividerAfter?: boolean;
|
|
551
|
+
disabled?: boolean;
|
|
552
|
+
metadata?: {
|
|
553
|
+
subtitle?: string;
|
|
554
|
+
badge?: string;
|
|
555
|
+
};
|
|
556
|
+
}
|
|
557
|
+
/**
|
|
558
|
+
* Menu Component - Dropdown menu for navigation and actions
|
|
559
|
+
*
|
|
560
|
+
* Features:
|
|
561
|
+
* - Customizable menu items with icons
|
|
562
|
+
* - Support for links and buttons
|
|
563
|
+
* - Dividers between menu sections
|
|
564
|
+
* - Optional subtitle/metadata for items
|
|
565
|
+
* - Danger variant for destructive actions
|
|
566
|
+
* - Click outside to close
|
|
567
|
+
* - Keyboard navigation (Escape to close)
|
|
568
|
+
* - OnPush change detection for performance
|
|
569
|
+
*
|
|
570
|
+
* @example
|
|
571
|
+
* ```html
|
|
572
|
+
* <lc-menu
|
|
573
|
+
* [items]="menuItems"
|
|
574
|
+
* [isOpen]="isMenuOpen"
|
|
575
|
+
* (itemClick)="handleMenuClick($event)"
|
|
576
|
+
* (closed)="isMenuOpen = false"
|
|
577
|
+
* >
|
|
578
|
+
* <button trigger>Open Menu</button>
|
|
579
|
+
* <div header>User Profile</div>
|
|
580
|
+
* </lc-menu>
|
|
581
|
+
* ```
|
|
582
|
+
*/
|
|
583
|
+
declare class MenuComponent {
|
|
584
|
+
/**
|
|
585
|
+
* Menu items to display
|
|
586
|
+
*/
|
|
587
|
+
items: MenuItem[];
|
|
588
|
+
/**
|
|
589
|
+
* Whether the menu is open
|
|
590
|
+
*/
|
|
591
|
+
isOpen: boolean;
|
|
592
|
+
/**
|
|
593
|
+
* Menu position relative to trigger
|
|
594
|
+
* @default 'bottom-right'
|
|
595
|
+
*/
|
|
596
|
+
position: 'bottom-left' | 'bottom-right' | 'top-left' | 'top-right';
|
|
597
|
+
/**
|
|
598
|
+
* Minimum width of menu dropdown
|
|
599
|
+
* @default '220px'
|
|
600
|
+
*/
|
|
601
|
+
minWidth: string;
|
|
602
|
+
/**
|
|
603
|
+
* Emitted when a menu item is clicked
|
|
604
|
+
*/
|
|
605
|
+
readonly itemClick: EventEmitter<MenuItem>;
|
|
606
|
+
/**
|
|
607
|
+
* Emitted when the menu should be closed (e.g., click outside, Escape key)
|
|
608
|
+
*/
|
|
609
|
+
readonly closed: EventEmitter<void>;
|
|
610
|
+
private elementRef;
|
|
611
|
+
/**
|
|
612
|
+
* Handle menu item click
|
|
613
|
+
*/
|
|
614
|
+
onItemClick(item: MenuItem, event: Event): void;
|
|
615
|
+
/**
|
|
616
|
+
* Close the menu
|
|
617
|
+
*/
|
|
618
|
+
close(): void;
|
|
619
|
+
/**
|
|
620
|
+
* Handle click outside to close menu
|
|
621
|
+
*/
|
|
622
|
+
onDocumentClick(event: MouseEvent): void;
|
|
623
|
+
/**
|
|
624
|
+
* Handle Escape key to close menu
|
|
625
|
+
*/
|
|
626
|
+
onEscapeKey(): void;
|
|
627
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<MenuComponent, never>;
|
|
628
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<MenuComponent, "lc-menu", never, { "items": { "alias": "items"; "required": false; }; "isOpen": { "alias": "isOpen"; "required": false; }; "position": { "alias": "position"; "required": false; }; "minWidth": { "alias": "minWidth"; "required": false; }; }, { "itemClick": "itemClick"; "closed": "closed"; }, never, ["[trigger]", "[header]", "[footer]"], true, never>;
|
|
629
|
+
}
|
|
630
|
+
|
|
631
|
+
/**
|
|
632
|
+
* Text input component for form data entry.
|
|
633
|
+
*
|
|
634
|
+
* Implements ControlValueAccessor for seamless integration with Angular forms.
|
|
635
|
+
* Supports validation, icons, character count, and accessibility features.
|
|
636
|
+
*
|
|
637
|
+
* @example
|
|
638
|
+
* ```html
|
|
639
|
+
* <lc-input
|
|
640
|
+
* label="Email"
|
|
641
|
+
* type="email"
|
|
642
|
+
* placeholder="Enter your email"
|
|
643
|
+
* [(ngModel)]="email"
|
|
644
|
+
* [error]="emailError"
|
|
645
|
+
* ></lc-input>
|
|
646
|
+
* ```
|
|
647
|
+
*/
|
|
648
|
+
declare class InputComponent implements ControlValueAccessor {
|
|
649
|
+
/**
|
|
650
|
+
* Input label (displayed above input)
|
|
651
|
+
*/
|
|
652
|
+
readonly label: _angular_core.InputSignal<string | undefined>;
|
|
653
|
+
/**
|
|
654
|
+
* Placeholder text
|
|
655
|
+
* @default ''
|
|
656
|
+
*/
|
|
657
|
+
readonly placeholder: _angular_core.InputSignal<string>;
|
|
658
|
+
/**
|
|
659
|
+
* Input type
|
|
660
|
+
* @default 'text'
|
|
661
|
+
*/
|
|
662
|
+
readonly type: _angular_core.InputSignal<"number" | "text" | "email" | "password" | "tel" | "url">;
|
|
663
|
+
/**
|
|
664
|
+
* Size of the input
|
|
665
|
+
* @default 'md'
|
|
666
|
+
*/
|
|
667
|
+
readonly size: _angular_core.InputSignal<"xs" | "sm" | "md" | "lg">;
|
|
668
|
+
/**
|
|
669
|
+
* Whether the input is disabled
|
|
670
|
+
* @default false
|
|
671
|
+
*/
|
|
672
|
+
readonly disabled: _angular_core.InputSignal<boolean>;
|
|
673
|
+
/**
|
|
674
|
+
* Whether the input is read-only
|
|
675
|
+
* @default false
|
|
676
|
+
*/
|
|
677
|
+
readonly readonly: _angular_core.InputSignal<boolean>;
|
|
678
|
+
/**
|
|
679
|
+
* Whether the input is required
|
|
680
|
+
* @default false
|
|
681
|
+
*/
|
|
682
|
+
readonly required: _angular_core.InputSignal<boolean>;
|
|
683
|
+
/**
|
|
684
|
+
* Error message to display (if validation fails)
|
|
685
|
+
*/
|
|
686
|
+
readonly error: _angular_core.InputSignal<string | undefined>;
|
|
687
|
+
/**
|
|
688
|
+
* Helper text to display below input
|
|
689
|
+
*/
|
|
690
|
+
readonly helperText: _angular_core.InputSignal<string | undefined>;
|
|
691
|
+
/**
|
|
692
|
+
* Icon to display before input text (Heroicons name)
|
|
693
|
+
* @example 'envelope'
|
|
694
|
+
*/
|
|
695
|
+
readonly iconBefore: _angular_core.InputSignal<string | undefined>;
|
|
696
|
+
/**
|
|
697
|
+
* Icon to display after input text (Heroicons name)
|
|
698
|
+
* @example 'eye'
|
|
699
|
+
*/
|
|
700
|
+
readonly iconAfter: _angular_core.InputSignal<string | undefined>;
|
|
701
|
+
/**
|
|
702
|
+
* Maximum number of characters
|
|
703
|
+
*/
|
|
704
|
+
readonly maxLength: _angular_core.InputSignal<number | undefined>;
|
|
705
|
+
/**
|
|
706
|
+
* Whether to show character count
|
|
707
|
+
* @default false
|
|
708
|
+
*/
|
|
709
|
+
readonly showCharCount: _angular_core.InputSignal<boolean>;
|
|
710
|
+
/**
|
|
711
|
+
* ARIA label for accessibility
|
|
712
|
+
*/
|
|
713
|
+
readonly ariaLabel: _angular_core.InputSignal<string | undefined>;
|
|
714
|
+
/**
|
|
715
|
+
* Emitted when input value changes
|
|
716
|
+
*/
|
|
717
|
+
readonly valueChange: _angular_core.OutputEmitterRef<string>;
|
|
718
|
+
/**
|
|
719
|
+
* Emitted when input receives focus
|
|
720
|
+
*/
|
|
721
|
+
readonly focused: _angular_core.OutputEmitterRef<void>;
|
|
722
|
+
/**
|
|
723
|
+
* Emitted when input loses focus
|
|
724
|
+
*/
|
|
725
|
+
readonly blurred: _angular_core.OutputEmitterRef<void>;
|
|
726
|
+
/**
|
|
727
|
+
* Emitted when Enter key is pressed
|
|
728
|
+
*/
|
|
729
|
+
readonly enterPressed: _angular_core.OutputEmitterRef<void>;
|
|
730
|
+
readonly value: _angular_core.WritableSignal<string>;
|
|
731
|
+
readonly inputId: string;
|
|
732
|
+
private readonly inputElement;
|
|
733
|
+
private readonly _formDisabled;
|
|
734
|
+
private onChange;
|
|
735
|
+
private onTouched;
|
|
736
|
+
/**
|
|
737
|
+
* Computed disabled state from both input and form control
|
|
738
|
+
*/
|
|
739
|
+
protected get isDisabled(): boolean;
|
|
740
|
+
/**
|
|
741
|
+
* Gets current character count
|
|
742
|
+
*/
|
|
743
|
+
protected get charCount(): number;
|
|
744
|
+
/**
|
|
745
|
+
* Determines if error state should be shown
|
|
746
|
+
*/
|
|
747
|
+
protected get hasError(): boolean;
|
|
748
|
+
/**
|
|
749
|
+
* Programmatically focus the input
|
|
750
|
+
*/
|
|
751
|
+
focus(): void;
|
|
752
|
+
/**
|
|
753
|
+
* Programmatically select input text
|
|
754
|
+
*/
|
|
755
|
+
select(): void;
|
|
756
|
+
/**
|
|
757
|
+
* Clear the input value
|
|
758
|
+
*/
|
|
759
|
+
clear(): void;
|
|
760
|
+
writeValue(value: string): void;
|
|
761
|
+
registerOnChange(fn: (value: string) => void): void;
|
|
762
|
+
registerOnTouched(fn: () => void): void;
|
|
763
|
+
setDisabledState(isDisabled: boolean): void;
|
|
764
|
+
/**
|
|
765
|
+
* Handles input value changes
|
|
766
|
+
*/
|
|
767
|
+
protected onInput(event: Event): void;
|
|
768
|
+
/**
|
|
769
|
+
* Handles input focus
|
|
770
|
+
*/
|
|
771
|
+
protected onFocus(): void;
|
|
772
|
+
/**
|
|
773
|
+
* Handles input blur
|
|
774
|
+
*/
|
|
775
|
+
protected onBlur(): void;
|
|
776
|
+
/**
|
|
777
|
+
* Handles keydown events
|
|
778
|
+
*/
|
|
779
|
+
protected onKeydown(event: KeyboardEvent): void;
|
|
780
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<InputComponent, never>;
|
|
781
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<InputComponent, "lc-input", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "error": { "alias": "error"; "required": false; "isSignal": true; }; "helperText": { "alias": "helperText"; "required": false; "isSignal": true; }; "iconBefore": { "alias": "iconBefore"; "required": false; "isSignal": true; }; "iconAfter": { "alias": "iconAfter"; "required": false; "isSignal": true; }; "maxLength": { "alias": "maxLength"; "required": false; "isSignal": true; }; "showCharCount": { "alias": "showCharCount"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; "focused": "focused"; "blurred": "blurred"; "enterPressed": "enterPressed"; }, never, never, true, never>;
|
|
782
|
+
}
|
|
783
|
+
|
|
784
|
+
type RadioSize = 'xs' | 'sm' | 'md' | 'lg';
|
|
785
|
+
declare class RadioComponent implements ControlValueAccessor, OnInit, OnDestroy {
|
|
786
|
+
readonly id: _angular_core.InputSignal<string>;
|
|
787
|
+
readonly label: _angular_core.InputSignal<string>;
|
|
788
|
+
readonly value: _angular_core.InputSignal<string>;
|
|
789
|
+
readonly name: _angular_core.InputSignal<string>;
|
|
790
|
+
readonly error: _angular_core.InputSignal<boolean>;
|
|
791
|
+
readonly errorMessage: _angular_core.InputSignal<string>;
|
|
792
|
+
readonly helpText: _angular_core.InputSignal<string>;
|
|
793
|
+
readonly size: _angular_core.InputSignal<RadioSize>;
|
|
794
|
+
readonly required: _angular_core.InputSignal<boolean>;
|
|
795
|
+
readonly ariaLabel: _angular_core.InputSignal<string>;
|
|
796
|
+
readonly ariaLabelledBy: _angular_core.InputSignal<string>;
|
|
797
|
+
readonly ariaDescribedBy: _angular_core.InputSignal<string>;
|
|
798
|
+
readonly checkedChange: _angular_core.OutputEmitterRef<boolean>;
|
|
799
|
+
readonly valueChange: _angular_core.OutputEmitterRef<string>;
|
|
800
|
+
readonly checked: _angular_core.Signal<boolean>;
|
|
801
|
+
readonly disabled: _angular_core.WritableSignal<boolean>;
|
|
802
|
+
readonly computedChecked: _angular_core.Signal<boolean>;
|
|
803
|
+
readonly computedDisabled: _angular_core.Signal<boolean>;
|
|
804
|
+
readonly labelClasses: _angular_core.Signal<string>;
|
|
805
|
+
private readonly cdr;
|
|
806
|
+
private readonly ngControl;
|
|
807
|
+
private formValue;
|
|
808
|
+
private valueChangeSub?;
|
|
809
|
+
private onChange;
|
|
810
|
+
private onTouched;
|
|
811
|
+
constructor();
|
|
812
|
+
ngOnInit(): void;
|
|
813
|
+
ngOnDestroy(): void;
|
|
814
|
+
writeValue(value: string | null): void;
|
|
815
|
+
registerOnChange(fn: (value: string) => void): void;
|
|
816
|
+
registerOnTouched(fn: () => void): void;
|
|
817
|
+
setDisabledState(isDisabled: boolean): void;
|
|
818
|
+
handleChange(event: Event): void;
|
|
819
|
+
handleBlur(): void;
|
|
820
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<RadioComponent, never>;
|
|
821
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<RadioComponent, "lc-radio", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "error": { "alias": "error"; "required": false; "isSignal": true; }; "errorMessage": { "alias": "errorMessage"; "required": false; "isSignal": true; }; "helpText": { "alias": "helpText"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "ariaLabelledBy": { "alias": "ariaLabelledBy"; "required": false; "isSignal": true; }; "ariaDescribedBy": { "alias": "ariaDescribedBy"; "required": false; "isSignal": true; }; }, { "checkedChange": "checkedChange"; "valueChange": "valueChange"; }, never, never, true, never>;
|
|
822
|
+
}
|
|
823
|
+
|
|
824
|
+
/**
|
|
825
|
+
* Typography Component
|
|
826
|
+
*
|
|
827
|
+
* A flexible text component that provides consistent typography styling across the application.
|
|
828
|
+
* Supports semantic HTML elements (h1-h6, p, span), text alignment, color variants,
|
|
829
|
+
* font weights, text transforms, and line clamping.
|
|
830
|
+
*
|
|
831
|
+
* @example
|
|
832
|
+
* ```html
|
|
833
|
+
* <lc-typography variant="h1" align="center" color="primary">
|
|
834
|
+
* Main Heading
|
|
835
|
+
* </lc-typography>
|
|
836
|
+
*
|
|
837
|
+
* <lc-typography variant="body1" gutterBottom>
|
|
838
|
+
* Body text with bottom margin
|
|
839
|
+
* </lc-typography>
|
|
840
|
+
*
|
|
841
|
+
* <lc-typography variant="caption" color="secondary" lineClamp="2">
|
|
842
|
+
* This is a caption that will be truncated after 2 lines...
|
|
843
|
+
* </lc-typography>
|
|
844
|
+
* ```
|
|
845
|
+
*/
|
|
846
|
+
declare class TypographyComponent {
|
|
847
|
+
/**
|
|
848
|
+
* Typography variant determining the HTML element and default styles
|
|
849
|
+
* - h1-h6: Heading elements with corresponding sizes
|
|
850
|
+
* - body1: Default paragraph text (16px)
|
|
851
|
+
* - body2: Smaller body text (14px)
|
|
852
|
+
* - subtitle1: Larger subtitle (18px)
|
|
853
|
+
* - subtitle2: Smaller subtitle (14px)
|
|
854
|
+
* - caption: Small helper text (12px)
|
|
855
|
+
* - overline: Uppercase accent text (10px)
|
|
856
|
+
* @default 'body1'
|
|
857
|
+
*/
|
|
858
|
+
variant: _angular_core.InputSignal<"caption" | "h1" | "h2" | "h3" | "h4" | "h5" | "h6" | "body1" | "body2" | "subtitle1" | "subtitle2" | "overline">;
|
|
859
|
+
/**
|
|
860
|
+
* Text alignment
|
|
861
|
+
* @default 'left'
|
|
862
|
+
*/
|
|
863
|
+
align: _angular_core.InputSignal<"center" | "left" | "right" | "justify">;
|
|
864
|
+
/**
|
|
865
|
+
* Text color using semantic color tokens
|
|
866
|
+
* @default 'primary'
|
|
867
|
+
*/
|
|
868
|
+
color: _angular_core.InputSignal<"error" | "primary" | "secondary" | "warning" | "info" | "disabled" | "success">;
|
|
869
|
+
/**
|
|
870
|
+
* Font weight
|
|
871
|
+
* @default 'regular'
|
|
872
|
+
*/
|
|
873
|
+
weight: _angular_core.InputSignal<"regular" | "medium" | "semibold" | "bold">;
|
|
874
|
+
/**
|
|
875
|
+
* Text transform
|
|
876
|
+
* @default 'none'
|
|
877
|
+
*/
|
|
878
|
+
transform: _angular_core.InputSignal<"none" | "uppercase" | "lowercase" | "capitalize">;
|
|
879
|
+
/**
|
|
880
|
+
* Prevent text wrapping (applies ellipsis on overflow)
|
|
881
|
+
* @default false
|
|
882
|
+
*/
|
|
883
|
+
noWrap: _angular_core.InputSignal<boolean>;
|
|
884
|
+
/**
|
|
885
|
+
* Limit text to a specific number of lines (1-6)
|
|
886
|
+
* Uses CSS line-clamp for multi-line truncation
|
|
887
|
+
* @default undefined
|
|
888
|
+
*/
|
|
889
|
+
lineClamp: _angular_core.InputSignal<number | undefined>;
|
|
890
|
+
/**
|
|
891
|
+
* Add bottom margin (1rem) for spacing between elements
|
|
892
|
+
* @default false
|
|
893
|
+
*/
|
|
894
|
+
gutterBottom: _angular_core.InputSignal<boolean>;
|
|
895
|
+
/**
|
|
896
|
+
* Compute the HTML element tag based on variant
|
|
897
|
+
*/
|
|
898
|
+
readonly elementTag: _angular_core.Signal<string>;
|
|
899
|
+
/**
|
|
900
|
+
* Compute all CSS classes based on inputs
|
|
901
|
+
*/
|
|
902
|
+
readonly typographyClasses: _angular_core.Signal<string>;
|
|
903
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<TypographyComponent, never>;
|
|
904
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<TypographyComponent, "lc-typography", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "align": { "alias": "align"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; "weight": { "alias": "weight"; "required": false; "isSignal": true; }; "transform": { "alias": "transform"; "required": false; "isSignal": true; }; "noWrap": { "alias": "noWrap"; "required": false; "isSignal": true; }; "lineClamp": { "alias": "lineClamp"; "required": false; "isSignal": true; }; "gutterBottom": { "alias": "gutterBottom"; "required": false; "isSignal": true; }; }, {}, never, ["*", "*", "*", "*", "*", "*", "*", "*"], true, never>;
|
|
905
|
+
}
|
|
906
|
+
|
|
907
|
+
type DateValue = Date | string | null;
|
|
908
|
+
/**
|
|
909
|
+
* DatePicker component for date selection with calendar.
|
|
910
|
+
*
|
|
911
|
+
* @example
|
|
912
|
+
* ```html
|
|
913
|
+
* <lc-datepicker
|
|
914
|
+
* variant="outline"
|
|
915
|
+
* size="md"
|
|
916
|
+
* placeholder="Select a date"
|
|
917
|
+
* [(ngModel)]="selectedDate"
|
|
918
|
+
* ></lc-datepicker>
|
|
919
|
+
* ```
|
|
920
|
+
*/
|
|
921
|
+
declare class DatepickerComponent implements ControlValueAccessor {
|
|
922
|
+
datepickerInput: ElementRef;
|
|
923
|
+
/**
|
|
924
|
+
* Visual variant of the datepicker
|
|
925
|
+
*/
|
|
926
|
+
variant: 'outline' | 'filled';
|
|
927
|
+
/**
|
|
928
|
+
* Size of the datepicker
|
|
929
|
+
*/
|
|
930
|
+
size: 'xs' | 'sm' | 'md' | 'lg';
|
|
931
|
+
/**
|
|
932
|
+
* Whether the datepicker is disabled
|
|
933
|
+
*/
|
|
934
|
+
disabled: boolean;
|
|
935
|
+
/**
|
|
936
|
+
* Whether the datepicker is in error state
|
|
937
|
+
*/
|
|
938
|
+
error: boolean;
|
|
939
|
+
/**
|
|
940
|
+
* Whether the datepicker is required
|
|
941
|
+
*/
|
|
942
|
+
required: boolean;
|
|
943
|
+
/**
|
|
944
|
+
* Whether the datepicker is readonly
|
|
945
|
+
*/
|
|
946
|
+
readonly: boolean;
|
|
947
|
+
/**
|
|
948
|
+
* Placeholder text
|
|
949
|
+
*/
|
|
950
|
+
placeholder: string;
|
|
951
|
+
/**
|
|
952
|
+
* Helper text displayed below the datepicker
|
|
953
|
+
*/
|
|
954
|
+
helperText: string;
|
|
955
|
+
/**
|
|
956
|
+
* Error message displayed when error is true
|
|
957
|
+
*/
|
|
958
|
+
errorMessage: string;
|
|
959
|
+
/**
|
|
960
|
+
* ARIA label for accessibility
|
|
961
|
+
*/
|
|
962
|
+
ariaLabel: string | undefined;
|
|
963
|
+
/**
|
|
964
|
+
* Date format string (e.g., 'YYYY-MM-DD', 'MM/DD/YYYY')
|
|
965
|
+
*/
|
|
966
|
+
format: string;
|
|
967
|
+
/**
|
|
968
|
+
* Minimum selectable date
|
|
969
|
+
*/
|
|
970
|
+
minDate: Date | undefined;
|
|
971
|
+
/**
|
|
972
|
+
* Maximum selectable date
|
|
973
|
+
*/
|
|
974
|
+
maxDate: Date | undefined;
|
|
975
|
+
/**
|
|
976
|
+
* Array of disabled dates
|
|
977
|
+
*/
|
|
978
|
+
disabledDates: Date[];
|
|
979
|
+
/**
|
|
980
|
+
* Whether to disable weekends
|
|
981
|
+
*/
|
|
982
|
+
disableWeekends: boolean;
|
|
983
|
+
/**
|
|
984
|
+
* Emitted when date selection changes
|
|
985
|
+
*/
|
|
986
|
+
readonly dateChange: EventEmitter<Date | null>;
|
|
987
|
+
/**
|
|
988
|
+
* Emitted when calendar opens
|
|
989
|
+
*/
|
|
990
|
+
readonly opened: EventEmitter<void>;
|
|
991
|
+
/**
|
|
992
|
+
* Emitted when calendar closes
|
|
993
|
+
*/
|
|
994
|
+
readonly closed: EventEmitter<void>;
|
|
995
|
+
selectedDate: _angular_core.WritableSignal<Date | null>;
|
|
996
|
+
isOpen: _angular_core.WritableSignal<boolean>;
|
|
997
|
+
currentMonth: _angular_core.WritableSignal<number>;
|
|
998
|
+
currentYear: _angular_core.WritableSignal<number>;
|
|
999
|
+
inputValue: _angular_core.WritableSignal<string>;
|
|
1000
|
+
formattedDate: _angular_core.Signal<string>;
|
|
1001
|
+
weekDays: string[];
|
|
1002
|
+
monthNames: string[];
|
|
1003
|
+
currentMonthName: _angular_core.Signal<string>;
|
|
1004
|
+
private elementRef;
|
|
1005
|
+
private onChange;
|
|
1006
|
+
private onTouched;
|
|
1007
|
+
/**
|
|
1008
|
+
* Toggle calendar open/closed
|
|
1009
|
+
*/
|
|
1010
|
+
toggle(): void;
|
|
1011
|
+
/**
|
|
1012
|
+
* Open calendar
|
|
1013
|
+
*/
|
|
1014
|
+
open(): void;
|
|
1015
|
+
/**
|
|
1016
|
+
* Close calendar
|
|
1017
|
+
*/
|
|
1018
|
+
close(): void;
|
|
1019
|
+
/**
|
|
1020
|
+
* Select a date
|
|
1021
|
+
*/
|
|
1022
|
+
selectDate(date: Date): void;
|
|
1023
|
+
/**
|
|
1024
|
+
* Clear selected date
|
|
1025
|
+
*/
|
|
1026
|
+
clear(): void;
|
|
1027
|
+
/**
|
|
1028
|
+
* Check if a date is disabled
|
|
1029
|
+
*/
|
|
1030
|
+
isDateDisabled(date: Date): boolean;
|
|
1031
|
+
/**
|
|
1032
|
+
* Check if date is today
|
|
1033
|
+
*/
|
|
1034
|
+
isToday(date: Date): boolean;
|
|
1035
|
+
/**
|
|
1036
|
+
* Check if date is selected
|
|
1037
|
+
*/
|
|
1038
|
+
isSelectedDate(date: Date): boolean;
|
|
1039
|
+
/**
|
|
1040
|
+
* Generate calendar days for current month
|
|
1041
|
+
*/
|
|
1042
|
+
generateCalendarDays(): Date[];
|
|
1043
|
+
/**
|
|
1044
|
+
* Navigate to next month
|
|
1045
|
+
*/
|
|
1046
|
+
nextMonth(): void;
|
|
1047
|
+
/**
|
|
1048
|
+
* Navigate to previous month
|
|
1049
|
+
*/
|
|
1050
|
+
previousMonth(): void;
|
|
1051
|
+
/**
|
|
1052
|
+
* Navigate to today
|
|
1053
|
+
*/
|
|
1054
|
+
goToToday(): void;
|
|
1055
|
+
/**
|
|
1056
|
+
* Handle input change (manual date entry)
|
|
1057
|
+
*/
|
|
1058
|
+
onInputChange(value: string): void;
|
|
1059
|
+
/**
|
|
1060
|
+
* Handle keyboard navigation
|
|
1061
|
+
*/
|
|
1062
|
+
onKeyDown(event: KeyboardEvent): void;
|
|
1063
|
+
/**
|
|
1064
|
+
* Handle blur event
|
|
1065
|
+
*/
|
|
1066
|
+
onBlur(): void;
|
|
1067
|
+
/**
|
|
1068
|
+
* Handle click outside
|
|
1069
|
+
*/
|
|
1070
|
+
onClickOutside(): void;
|
|
1071
|
+
writeValue(value: DateValue): void;
|
|
1072
|
+
registerOnChange(fn: (value: Date | null) => void): void;
|
|
1073
|
+
registerOnTouched(fn: () => void): void;
|
|
1074
|
+
setDisabledState(isDisabled: boolean): void;
|
|
1075
|
+
/**
|
|
1076
|
+
* Get computed classes for the datepicker element
|
|
1077
|
+
*/
|
|
1078
|
+
get datepickerClasses(): string;
|
|
1079
|
+
/**
|
|
1080
|
+
* Check if date is in current month
|
|
1081
|
+
*/
|
|
1082
|
+
isCurrentMonth(date: Date): boolean;
|
|
1083
|
+
/**
|
|
1084
|
+
* Check if two dates are the same day
|
|
1085
|
+
*/
|
|
1086
|
+
private isSameDate;
|
|
1087
|
+
private formatDate;
|
|
1088
|
+
private parseDate;
|
|
1089
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DatepickerComponent, never>;
|
|
1090
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DatepickerComponent, "lc-datepicker", never, { "variant": { "alias": "variant"; "required": false; }; "size": { "alias": "size"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "error": { "alias": "error"; "required": false; }; "required": { "alias": "required"; "required": false; }; "readonly": { "alias": "readonly"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "helperText": { "alias": "helperText"; "required": false; }; "errorMessage": { "alias": "errorMessage"; "required": false; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; }; "format": { "alias": "format"; "required": false; }; "minDate": { "alias": "minDate"; "required": false; }; "maxDate": { "alias": "maxDate"; "required": false; }; "disabledDates": { "alias": "disabledDates"; "required": false; }; "disableWeekends": { "alias": "disableWeekends"; "required": false; }; }, { "dateChange": "dateChange"; "opened": "opened"; "closed": "closed"; }, never, never, true, never>;
|
|
1091
|
+
}
|
|
1092
|
+
|
|
1093
|
+
interface SelectOption {
|
|
1094
|
+
value: string | number;
|
|
1095
|
+
label: string;
|
|
1096
|
+
disabled?: boolean;
|
|
1097
|
+
}
|
|
1098
|
+
interface SelectOptionGroup {
|
|
1099
|
+
label: string;
|
|
1100
|
+
options: SelectOption[];
|
|
1101
|
+
}
|
|
1102
|
+
type SelectValue = string | number | string[] | number[] | null;
|
|
1103
|
+
/**
|
|
1104
|
+
* Select component for dropdown selection with single or multiple options.
|
|
1105
|
+
*
|
|
1106
|
+
* @example
|
|
1107
|
+
* ```html
|
|
1108
|
+
* <lc-select
|
|
1109
|
+
* [options]="options"
|
|
1110
|
+
* variant="outline"
|
|
1111
|
+
* size="md"
|
|
1112
|
+
* placeholder="Select an option"
|
|
1113
|
+
* [(ngModel)]="selectedValue"
|
|
1114
|
+
* ></lc-select>
|
|
1115
|
+
* ```
|
|
1116
|
+
*/
|
|
1117
|
+
declare class SelectComponent implements ControlValueAccessor {
|
|
1118
|
+
selectTrigger: ElementRef;
|
|
1119
|
+
/**
|
|
1120
|
+
* Visual variant of the select
|
|
1121
|
+
*/
|
|
1122
|
+
variant: 'outline' | 'filled';
|
|
1123
|
+
/**
|
|
1124
|
+
* Size of the select
|
|
1125
|
+
*/
|
|
1126
|
+
size: 'xs' | 'sm' | 'md' | 'lg';
|
|
1127
|
+
/**
|
|
1128
|
+
* Whether the select is disabled
|
|
1129
|
+
*/
|
|
1130
|
+
disabled: boolean;
|
|
1131
|
+
/**
|
|
1132
|
+
* Whether the select is in error state
|
|
1133
|
+
*/
|
|
1134
|
+
error: boolean;
|
|
1135
|
+
/**
|
|
1136
|
+
* Whether the select is required
|
|
1137
|
+
*/
|
|
1138
|
+
required: boolean;
|
|
1139
|
+
/**
|
|
1140
|
+
* Whether the select is in loading state
|
|
1141
|
+
*/
|
|
1142
|
+
loading: boolean;
|
|
1143
|
+
/**
|
|
1144
|
+
* Whether the select allows searching
|
|
1145
|
+
*/
|
|
1146
|
+
searchable: boolean;
|
|
1147
|
+
/**
|
|
1148
|
+
* Whether multiple options can be selected
|
|
1149
|
+
*/
|
|
1150
|
+
multiple: boolean;
|
|
1151
|
+
/**
|
|
1152
|
+
* Placeholder text when no option is selected
|
|
1153
|
+
*/
|
|
1154
|
+
placeholder: string;
|
|
1155
|
+
/**
|
|
1156
|
+
* Helper text displayed below the select
|
|
1157
|
+
*/
|
|
1158
|
+
helperText: string;
|
|
1159
|
+
/**
|
|
1160
|
+
* Error message displayed when error is true
|
|
1161
|
+
*/
|
|
1162
|
+
errorMessage: string;
|
|
1163
|
+
/**
|
|
1164
|
+
* ARIA label for accessibility
|
|
1165
|
+
*/
|
|
1166
|
+
ariaLabel: string | undefined;
|
|
1167
|
+
/**
|
|
1168
|
+
* Select options (flat list)
|
|
1169
|
+
*/
|
|
1170
|
+
get options(): SelectOption[] | SelectOptionGroup[];
|
|
1171
|
+
set options(v: SelectOption[] | SelectOptionGroup[]);
|
|
1172
|
+
private _options;
|
|
1173
|
+
/**
|
|
1174
|
+
* Emitted when selection changes
|
|
1175
|
+
*/
|
|
1176
|
+
readonly selectionChange: EventEmitter<SelectValue>;
|
|
1177
|
+
/**
|
|
1178
|
+
* Emitted when dropdown opens
|
|
1179
|
+
*/
|
|
1180
|
+
readonly opened: EventEmitter<void>;
|
|
1181
|
+
/**
|
|
1182
|
+
* Emitted when dropdown closes
|
|
1183
|
+
*/
|
|
1184
|
+
readonly closed: EventEmitter<void>;
|
|
1185
|
+
value: _angular_core.WritableSignal<SelectValue>;
|
|
1186
|
+
isOpen: _angular_core.WritableSignal<boolean>;
|
|
1187
|
+
searchQuery: _angular_core.WritableSignal<string>;
|
|
1188
|
+
highlightedIndex: _angular_core.WritableSignal<number>;
|
|
1189
|
+
selectedLabel: _angular_core.Signal<string>;
|
|
1190
|
+
displayValue: _angular_core.Signal<string>;
|
|
1191
|
+
filteredOptions: _angular_core.Signal<SelectOption[]>;
|
|
1192
|
+
private elementRef;
|
|
1193
|
+
private onChange;
|
|
1194
|
+
private onTouched;
|
|
1195
|
+
/**
|
|
1196
|
+
* Toggle dropdown open/closed
|
|
1197
|
+
*/
|
|
1198
|
+
toggle(): void;
|
|
1199
|
+
/**
|
|
1200
|
+
* Open dropdown
|
|
1201
|
+
*/
|
|
1202
|
+
open(): void;
|
|
1203
|
+
/**
|
|
1204
|
+
* Close dropdown
|
|
1205
|
+
*/
|
|
1206
|
+
close(): void;
|
|
1207
|
+
/**
|
|
1208
|
+
* Select an option
|
|
1209
|
+
*/
|
|
1210
|
+
selectOption(option: SelectOption): void;
|
|
1211
|
+
/**
|
|
1212
|
+
* Check if an option is selected
|
|
1213
|
+
*/
|
|
1214
|
+
isSelected(option: SelectOption): boolean;
|
|
1215
|
+
/**
|
|
1216
|
+
* Clear selection
|
|
1217
|
+
*/
|
|
1218
|
+
clear(): void;
|
|
1219
|
+
/**
|
|
1220
|
+
* Handle keyboard navigation
|
|
1221
|
+
*/
|
|
1222
|
+
onKeyDown(event: KeyboardEvent): void;
|
|
1223
|
+
/**
|
|
1224
|
+
* Handle blur event
|
|
1225
|
+
*/
|
|
1226
|
+
onBlur(): void;
|
|
1227
|
+
/**
|
|
1228
|
+
* Handle click outside
|
|
1229
|
+
*/
|
|
1230
|
+
onClickOutside(): void;
|
|
1231
|
+
writeValue(value: SelectValue): void;
|
|
1232
|
+
registerOnChange(fn: (value: SelectValue) => void): void;
|
|
1233
|
+
registerOnTouched(fn: () => void): void;
|
|
1234
|
+
setDisabledState(isDisabled: boolean): void;
|
|
1235
|
+
/**
|
|
1236
|
+
* Get computed classes for the select element
|
|
1237
|
+
*/
|
|
1238
|
+
get selectClasses(): string;
|
|
1239
|
+
private findOptionByValue;
|
|
1240
|
+
private flattenOptions;
|
|
1241
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SelectComponent, never>;
|
|
1242
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<SelectComponent, "lc-select", never, { "variant": { "alias": "variant"; "required": false; }; "size": { "alias": "size"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "error": { "alias": "error"; "required": false; }; "required": { "alias": "required"; "required": false; }; "loading": { "alias": "loading"; "required": false; }; "searchable": { "alias": "searchable"; "required": false; }; "multiple": { "alias": "multiple"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "helperText": { "alias": "helperText"; "required": false; }; "errorMessage": { "alias": "errorMessage"; "required": false; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; }; "options": { "alias": "options"; "required": false; }; }, { "selectionChange": "selectionChange"; "opened": "opened"; "closed": "closed"; }, never, never, true, never>;
|
|
1243
|
+
}
|
|
1244
|
+
|
|
1245
|
+
/**
|
|
1246
|
+
* Switch component for toggle functionality.
|
|
1247
|
+
*
|
|
1248
|
+
* @example
|
|
1249
|
+
* ```html
|
|
1250
|
+
* <lc-switch
|
|
1251
|
+
* variant="primary"
|
|
1252
|
+
* size="md"
|
|
1253
|
+
* label="Enable notifications"
|
|
1254
|
+
* [(ngModel)]="isEnabled"
|
|
1255
|
+
* ></lc-switch>
|
|
1256
|
+
* ```
|
|
1257
|
+
*/
|
|
1258
|
+
declare class SwitchComponent implements ControlValueAccessor {
|
|
1259
|
+
/**
|
|
1260
|
+
* Visual variant of the switch
|
|
1261
|
+
*/
|
|
1262
|
+
variant: 'primary' | 'secondary' | 'success' | 'warning' | 'danger';
|
|
1263
|
+
/**
|
|
1264
|
+
* Size of the switch
|
|
1265
|
+
*/
|
|
1266
|
+
size: 'sm' | 'md' | 'lg';
|
|
1267
|
+
/**
|
|
1268
|
+
* Whether the switch is checked
|
|
1269
|
+
*/
|
|
1270
|
+
checked: boolean;
|
|
1271
|
+
/**
|
|
1272
|
+
* Whether the switch is disabled
|
|
1273
|
+
*/
|
|
1274
|
+
disabled: boolean;
|
|
1275
|
+
/**
|
|
1276
|
+
* Whether the switch is required
|
|
1277
|
+
*/
|
|
1278
|
+
required: boolean;
|
|
1279
|
+
/**
|
|
1280
|
+
* Whether the switch is in loading state
|
|
1281
|
+
*/
|
|
1282
|
+
loading: boolean;
|
|
1283
|
+
/**
|
|
1284
|
+
* Label text
|
|
1285
|
+
*/
|
|
1286
|
+
label: string;
|
|
1287
|
+
/**
|
|
1288
|
+
* Label position relative to switch
|
|
1289
|
+
*/
|
|
1290
|
+
labelPosition: 'left' | 'right';
|
|
1291
|
+
/**
|
|
1292
|
+
* ARIA label for accessibility
|
|
1293
|
+
*/
|
|
1294
|
+
ariaLabel: string | undefined;
|
|
1295
|
+
/**
|
|
1296
|
+
* Emitted when checked state changes
|
|
1297
|
+
*/
|
|
1298
|
+
readonly checkedChange: EventEmitter<boolean>;
|
|
1299
|
+
private elementRef;
|
|
1300
|
+
private onChange;
|
|
1301
|
+
private onTouched;
|
|
1302
|
+
/**
|
|
1303
|
+
* Toggle the switch state
|
|
1304
|
+
*/
|
|
1305
|
+
toggle(): void;
|
|
1306
|
+
/**
|
|
1307
|
+
* Handle click event
|
|
1308
|
+
*/
|
|
1309
|
+
onClick(): void;
|
|
1310
|
+
/**
|
|
1311
|
+
* Handle keyboard navigation
|
|
1312
|
+
*/
|
|
1313
|
+
onKeyDown(event: KeyboardEvent): void;
|
|
1314
|
+
writeValue(value: boolean | null | undefined): void;
|
|
1315
|
+
registerOnChange(fn: (value: boolean) => void): void;
|
|
1316
|
+
registerOnTouched(fn: () => void): void;
|
|
1317
|
+
setDisabledState(isDisabled: boolean): void;
|
|
1318
|
+
/**
|
|
1319
|
+
* Get computed classes for the switch element
|
|
1320
|
+
*/
|
|
1321
|
+
get switchClasses(): string;
|
|
1322
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SwitchComponent, never>;
|
|
1323
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<SwitchComponent, "lc-switch", never, { "variant": { "alias": "variant"; "required": false; }; "size": { "alias": "size"; "required": false; }; "checked": { "alias": "checked"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "required": { "alias": "required"; "required": false; }; "loading": { "alias": "loading"; "required": false; }; "label": { "alias": "label"; "required": false; }; "labelPosition": { "alias": "labelPosition"; "required": false; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; }; }, { "checkedChange": "checkedChange"; }, never, never, true, never>;
|
|
1324
|
+
}
|
|
1325
|
+
|
|
1326
|
+
/**
|
|
1327
|
+
* Textarea component for multi-line text input.
|
|
1328
|
+
*
|
|
1329
|
+
* @example
|
|
1330
|
+
* ```html
|
|
1331
|
+
* <lc-textarea
|
|
1332
|
+
* variant="outline"
|
|
1333
|
+
* size="md"
|
|
1334
|
+
* placeholder="Enter your message"
|
|
1335
|
+
* [(ngModel)]="message"
|
|
1336
|
+
* ></lc-textarea>
|
|
1337
|
+
* ```
|
|
1338
|
+
*/
|
|
1339
|
+
declare class TextareaComponent implements ControlValueAccessor, AfterViewInit {
|
|
1340
|
+
private textareaElement;
|
|
1341
|
+
/**
|
|
1342
|
+
* Visual variant of the textarea
|
|
1343
|
+
*/
|
|
1344
|
+
variant: 'outline' | 'filled';
|
|
1345
|
+
/**
|
|
1346
|
+
* Size of the textarea
|
|
1347
|
+
*/
|
|
1348
|
+
size: 'xs' | 'sm' | 'md' | 'lg';
|
|
1349
|
+
/**
|
|
1350
|
+
* Whether the textarea is disabled
|
|
1351
|
+
*/
|
|
1352
|
+
disabled: boolean;
|
|
1353
|
+
/**
|
|
1354
|
+
* Whether the textarea is in error state
|
|
1355
|
+
*/
|
|
1356
|
+
error: boolean;
|
|
1357
|
+
/**
|
|
1358
|
+
* Whether the textarea is required
|
|
1359
|
+
*/
|
|
1360
|
+
required: boolean;
|
|
1361
|
+
/**
|
|
1362
|
+
* Whether the textarea is readonly
|
|
1363
|
+
*/
|
|
1364
|
+
readonly: boolean;
|
|
1365
|
+
/**
|
|
1366
|
+
* Placeholder text
|
|
1367
|
+
*/
|
|
1368
|
+
placeholder: string;
|
|
1369
|
+
/**
|
|
1370
|
+
* Label text displayed above the textarea
|
|
1371
|
+
*/
|
|
1372
|
+
label: string;
|
|
1373
|
+
/**
|
|
1374
|
+
* Helper text displayed below the textarea
|
|
1375
|
+
*/
|
|
1376
|
+
helperText: string;
|
|
1377
|
+
/**
|
|
1378
|
+
* Error message displayed when error is true
|
|
1379
|
+
*/
|
|
1380
|
+
errorMessage: string;
|
|
1381
|
+
/**
|
|
1382
|
+
* ARIA label for accessibility
|
|
1383
|
+
*/
|
|
1384
|
+
ariaLabel: string | undefined;
|
|
1385
|
+
/**
|
|
1386
|
+
* Number of visible text rows
|
|
1387
|
+
*/
|
|
1388
|
+
rows: number;
|
|
1389
|
+
/**
|
|
1390
|
+
* Maximum number of characters allowed
|
|
1391
|
+
*/
|
|
1392
|
+
maxLength: number | undefined;
|
|
1393
|
+
/**
|
|
1394
|
+
* Whether to show character count
|
|
1395
|
+
*/
|
|
1396
|
+
showCharacterCount: boolean;
|
|
1397
|
+
/**
|
|
1398
|
+
* Whether to automatically resize based on content
|
|
1399
|
+
*/
|
|
1400
|
+
autoResize: boolean;
|
|
1401
|
+
/**
|
|
1402
|
+
* Minimum number of rows for auto-resize
|
|
1403
|
+
*/
|
|
1404
|
+
minRows: number;
|
|
1405
|
+
/**
|
|
1406
|
+
* Maximum number of rows for auto-resize
|
|
1407
|
+
*/
|
|
1408
|
+
maxRows: number | undefined;
|
|
1409
|
+
/**
|
|
1410
|
+
* Emitted when value changes
|
|
1411
|
+
*/
|
|
1412
|
+
readonly valueChange: EventEmitter<string>;
|
|
1413
|
+
value: _angular_core.WritableSignal<string>;
|
|
1414
|
+
currentCharacterCount: _angular_core.Signal<number>;
|
|
1415
|
+
characterCountText: _angular_core.Signal<string>;
|
|
1416
|
+
isOverLimit: _angular_core.Signal<boolean>;
|
|
1417
|
+
private elementRef;
|
|
1418
|
+
private onChange;
|
|
1419
|
+
private onTouched;
|
|
1420
|
+
ngAfterViewInit(): void;
|
|
1421
|
+
/**
|
|
1422
|
+
* Handle input changes
|
|
1423
|
+
*/
|
|
1424
|
+
onInput(value: string): void;
|
|
1425
|
+
/**
|
|
1426
|
+
* Handle blur event
|
|
1427
|
+
*/
|
|
1428
|
+
onBlur(): void;
|
|
1429
|
+
writeValue(value: string | null | undefined): void;
|
|
1430
|
+
registerOnChange(fn: (value: string) => void): void;
|
|
1431
|
+
registerOnTouched(fn: () => void): void;
|
|
1432
|
+
setDisabledState(isDisabled: boolean): void;
|
|
1433
|
+
/**
|
|
1434
|
+
* Get computed classes for the textarea element
|
|
1435
|
+
*/
|
|
1436
|
+
get textareaClasses(): string;
|
|
1437
|
+
private adjustHeight;
|
|
1438
|
+
private calculateMinHeight;
|
|
1439
|
+
private calculateMaxHeight;
|
|
1440
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<TextareaComponent, never>;
|
|
1441
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<TextareaComponent, "lc-textarea", never, { "variant": { "alias": "variant"; "required": false; }; "size": { "alias": "size"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "error": { "alias": "error"; "required": false; }; "required": { "alias": "required"; "required": false; }; "readonly": { "alias": "readonly"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "label": { "alias": "label"; "required": false; }; "helperText": { "alias": "helperText"; "required": false; }; "errorMessage": { "alias": "errorMessage"; "required": false; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; }; "rows": { "alias": "rows"; "required": false; }; "maxLength": { "alias": "maxLength"; "required": false; }; "showCharacterCount": { "alias": "showCharacterCount"; "required": false; }; "autoResize": { "alias": "autoResize"; "required": false; }; "minRows": { "alias": "minRows"; "required": false; }; "maxRows": { "alias": "maxRows"; "required": false; }; }, { "valueChange": "valueChange"; }, never, never, true, never>;
|
|
1442
|
+
}
|
|
1443
|
+
|
|
1444
|
+
/**
|
|
1445
|
+
* Password Input Component with Show/Hide Toggle and Strength Meter
|
|
1446
|
+
*
|
|
1447
|
+
* Per research.md Decision 7: Password Strength Indicator
|
|
1448
|
+
*
|
|
1449
|
+
* Features:
|
|
1450
|
+
* - Show/Hide password toggle (eye icon)
|
|
1451
|
+
* - Real-time password strength indicator (Weak/Fair/Good/Strong)
|
|
1452
|
+
* - Visual strength meter bar with color coding
|
|
1453
|
+
* - Validation feedback (length, uppercase, lowercase, digit, symbol)
|
|
1454
|
+
* - Accessible ARIA attributes
|
|
1455
|
+
* - Reactive Forms ControlValueAccessor implementation
|
|
1456
|
+
*
|
|
1457
|
+
* Strength Criteria:
|
|
1458
|
+
* - Weak (0-25%): < 8 chars OR missing 3+ requirements
|
|
1459
|
+
* - Fair (26-50%): 8+ chars, missing 2 requirements
|
|
1460
|
+
* - Good (51-75%): 8+ chars, missing 1 requirement
|
|
1461
|
+
* - Strong (76-100%): 8+ chars, all requirements met
|
|
1462
|
+
*
|
|
1463
|
+
* Requirements (Cognito password policy):
|
|
1464
|
+
* - Minimum 8 characters
|
|
1465
|
+
* - At least one uppercase letter (A-Z)
|
|
1466
|
+
* - At least one lowercase letter (a-z)
|
|
1467
|
+
* - At least one digit (0-9)
|
|
1468
|
+
* - At least one symbol (!@#$%^&*()_+-=[]{}|;:,.<>?)
|
|
1469
|
+
*
|
|
1470
|
+
* Usage:
|
|
1471
|
+
* ```html
|
|
1472
|
+
* <lc-password-input
|
|
1473
|
+
* [formControl]="passwordControl"
|
|
1474
|
+
* label="Password"
|
|
1475
|
+
* placeholder="Enter your password"
|
|
1476
|
+
* [showStrengthMeter]="true"
|
|
1477
|
+
* ></lc-password-input>
|
|
1478
|
+
* ```
|
|
1479
|
+
*
|
|
1480
|
+
* User Story: US0 (User Registration)
|
|
1481
|
+
*/
|
|
1482
|
+
declare class PasswordInputComponent implements ControlValueAccessor {
|
|
1483
|
+
label: string;
|
|
1484
|
+
placeholder: string;
|
|
1485
|
+
showStrengthMeter: boolean;
|
|
1486
|
+
showRequirements: boolean;
|
|
1487
|
+
disabled: boolean;
|
|
1488
|
+
required: boolean;
|
|
1489
|
+
error?: string;
|
|
1490
|
+
readonly strengthChange: EventEmitter<PasswordStrength>;
|
|
1491
|
+
value: string;
|
|
1492
|
+
isPasswordVisible: boolean;
|
|
1493
|
+
strength: PasswordStrength;
|
|
1494
|
+
requirements: PasswordRequirement[];
|
|
1495
|
+
private onChange;
|
|
1496
|
+
private onTouched;
|
|
1497
|
+
private cdr;
|
|
1498
|
+
constructor();
|
|
1499
|
+
/**
|
|
1500
|
+
* ControlValueAccessor: Write value from form control
|
|
1501
|
+
*/
|
|
1502
|
+
writeValue(value: string): void;
|
|
1503
|
+
/**
|
|
1504
|
+
* ControlValueAccessor: Register onChange callback
|
|
1505
|
+
*/
|
|
1506
|
+
registerOnChange(fn: (value: string) => void): void;
|
|
1507
|
+
/**
|
|
1508
|
+
* ControlValueAccessor: Register onTouched callback
|
|
1509
|
+
*/
|
|
1510
|
+
registerOnTouched(fn: () => void): void;
|
|
1511
|
+
/**
|
|
1512
|
+
* ControlValueAccessor: Set disabled state
|
|
1513
|
+
*/
|
|
1514
|
+
setDisabledState(isDisabled: boolean): void;
|
|
1515
|
+
/**
|
|
1516
|
+
* Toggle password visibility
|
|
1517
|
+
*/
|
|
1518
|
+
togglePasswordVisibility(): void;
|
|
1519
|
+
/**
|
|
1520
|
+
* Handle input changes
|
|
1521
|
+
*/
|
|
1522
|
+
onInput(event: Event): void;
|
|
1523
|
+
/**
|
|
1524
|
+
* Handle blur event
|
|
1525
|
+
*/
|
|
1526
|
+
onBlur(): void;
|
|
1527
|
+
/**
|
|
1528
|
+
* Calculate password strength and update requirements
|
|
1529
|
+
*/
|
|
1530
|
+
private updateStrength;
|
|
1531
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<PasswordInputComponent, never>;
|
|
1532
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<PasswordInputComponent, "lc-password-input", never, { "label": { "alias": "label"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "showStrengthMeter": { "alias": "showStrengthMeter"; "required": false; }; "showRequirements": { "alias": "showRequirements"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "required": { "alias": "required"; "required": false; }; "error": { "alias": "error"; "required": false; }; }, { "strengthChange": "strengthChange"; }, never, never, true, never>;
|
|
1533
|
+
}
|
|
1534
|
+
/**
|
|
1535
|
+
* Password strength information
|
|
1536
|
+
*/
|
|
1537
|
+
interface PasswordStrength {
|
|
1538
|
+
score: number;
|
|
1539
|
+
level: 'Weak' | 'Fair' | 'Good' | 'Strong';
|
|
1540
|
+
percentage: number;
|
|
1541
|
+
}
|
|
1542
|
+
/**
|
|
1543
|
+
* Individual password requirement
|
|
1544
|
+
*/
|
|
1545
|
+
interface PasswordRequirement {
|
|
1546
|
+
label: string;
|
|
1547
|
+
met: boolean;
|
|
1548
|
+
icon: string;
|
|
1549
|
+
}
|
|
1550
|
+
|
|
1551
|
+
/**
|
|
1552
|
+
* Verification Code Input Component with 6 Separate Digit Inputs
|
|
1553
|
+
*
|
|
1554
|
+
* Per research.md Decision 8: Email Verification Code Format
|
|
1555
|
+
*
|
|
1556
|
+
* Features:
|
|
1557
|
+
* - 6 separate input fields (one digit each)
|
|
1558
|
+
* - Automatic focus advancement after entering digit
|
|
1559
|
+
* - Backspace moves to previous input
|
|
1560
|
+
* - Paste support (splits 6-digit code across inputs)
|
|
1561
|
+
* - Accessible ARIA attributes
|
|
1562
|
+
* - Reactive Forms ControlValueAccessor implementation
|
|
1563
|
+
* - Auto-submit on complete (optional)
|
|
1564
|
+
*
|
|
1565
|
+
* Usage:
|
|
1566
|
+
* ```html
|
|
1567
|
+
* <lc-verification-code-input
|
|
1568
|
+
* [formControl]="codeControl"
|
|
1569
|
+
* label="Verification Code"
|
|
1570
|
+
* [autoSubmit]="true"
|
|
1571
|
+
* (complete)="onCodeComplete($event)"
|
|
1572
|
+
* ></lc-verification-code-input>
|
|
1573
|
+
* ```
|
|
1574
|
+
*
|
|
1575
|
+
* Cognito Email Format:
|
|
1576
|
+
* - 6-digit numeric code (e.g., 123456)
|
|
1577
|
+
* - Sent via email with click-to-verify link (?code=XXX)
|
|
1578
|
+
* - Valid for 24 hours
|
|
1579
|
+
*
|
|
1580
|
+
* User Stories: US0 (Registration Email Verification), US2 (Password Reset)
|
|
1581
|
+
*/
|
|
1582
|
+
declare class VerificationCodeInputComponent implements ControlValueAccessor, AfterViewInit {
|
|
1583
|
+
label: string;
|
|
1584
|
+
length: number;
|
|
1585
|
+
disabled: boolean;
|
|
1586
|
+
required: boolean;
|
|
1587
|
+
error?: string;
|
|
1588
|
+
autoSubmit: boolean;
|
|
1589
|
+
readonly complete: EventEmitter<string>;
|
|
1590
|
+
digitInputs: QueryList<ElementRef<HTMLInputElement>>;
|
|
1591
|
+
digits: string[];
|
|
1592
|
+
private onChange;
|
|
1593
|
+
private onTouched;
|
|
1594
|
+
ngAfterViewInit(): void;
|
|
1595
|
+
/**
|
|
1596
|
+
* ControlValueAccessor: Write value from form control
|
|
1597
|
+
*/
|
|
1598
|
+
writeValue(value: string): void;
|
|
1599
|
+
/**
|
|
1600
|
+
* ControlValueAccessor: Register onChange callback
|
|
1601
|
+
*/
|
|
1602
|
+
registerOnChange(fn: (value: string) => void): void;
|
|
1603
|
+
/**
|
|
1604
|
+
* ControlValueAccessor: Register onTouched callback
|
|
1605
|
+
*/
|
|
1606
|
+
registerOnTouched(fn: () => void): void;
|
|
1607
|
+
/**
|
|
1608
|
+
* ControlValueAccessor: Set disabled state
|
|
1609
|
+
*/
|
|
1610
|
+
setDisabledState(isDisabled: boolean): void;
|
|
1611
|
+
/**
|
|
1612
|
+
* Handle digit input
|
|
1613
|
+
*/
|
|
1614
|
+
onDigitInput(event: Event, index: number): void;
|
|
1615
|
+
/**
|
|
1616
|
+
* Handle keydown events (backspace, arrow keys, paste)
|
|
1617
|
+
*/
|
|
1618
|
+
onKeyDown(event: KeyboardEvent, index: number): void;
|
|
1619
|
+
/**
|
|
1620
|
+
* Handle paste event (split 6-digit code across inputs)
|
|
1621
|
+
*/
|
|
1622
|
+
onPaste(event: ClipboardEvent): void;
|
|
1623
|
+
/**
|
|
1624
|
+
* Focus specific input by index
|
|
1625
|
+
*/
|
|
1626
|
+
private focusInput;
|
|
1627
|
+
/**
|
|
1628
|
+
* Check if all digits entered
|
|
1629
|
+
*/
|
|
1630
|
+
private isComplete;
|
|
1631
|
+
/**
|
|
1632
|
+
* Get complete verification code
|
|
1633
|
+
*/
|
|
1634
|
+
private getCode;
|
|
1635
|
+
/**
|
|
1636
|
+
* Update form control value
|
|
1637
|
+
*/
|
|
1638
|
+
private updateValue;
|
|
1639
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<VerificationCodeInputComponent, never>;
|
|
1640
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<VerificationCodeInputComponent, "lc-verification-code-input", never, { "label": { "alias": "label"; "required": false; }; "length": { "alias": "length"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "required": { "alias": "required"; "required": false; }; "error": { "alias": "error"; "required": false; }; "autoSubmit": { "alias": "autoSubmit"; "required": false; }; }, { "complete": "complete"; }, never, never, true, never>;
|
|
1641
|
+
}
|
|
1642
|
+
|
|
1643
|
+
/**
|
|
1644
|
+
* Email input component with RFC 5322 validation.
|
|
1645
|
+
*
|
|
1646
|
+
* Extends the base input component with email-specific validation
|
|
1647
|
+
* and provides visual feedback for valid/invalid email addresses.
|
|
1648
|
+
*
|
|
1649
|
+
* @example
|
|
1650
|
+
* ```html
|
|
1651
|
+
* <lc-email-input
|
|
1652
|
+
* label="Email Address"
|
|
1653
|
+
* placeholder="you@example.com"
|
|
1654
|
+
* [(ngModel)]="email"
|
|
1655
|
+
* [required]="true"
|
|
1656
|
+
* (validationChange)="handleValidation($event)"
|
|
1657
|
+
* ></lc-email-input>
|
|
1658
|
+
* ```
|
|
1659
|
+
*/
|
|
1660
|
+
declare class EmailInputComponent implements ControlValueAccessor {
|
|
1661
|
+
/**
|
|
1662
|
+
* Input label (displayed above input)
|
|
1663
|
+
* @default 'Email'
|
|
1664
|
+
*/
|
|
1665
|
+
readonly label: _angular_core.InputSignal<string>;
|
|
1666
|
+
/**
|
|
1667
|
+
* Placeholder text
|
|
1668
|
+
* @default 'you@example.com'
|
|
1669
|
+
*/
|
|
1670
|
+
readonly placeholder: _angular_core.InputSignal<string>;
|
|
1671
|
+
/**
|
|
1672
|
+
* Size of the input
|
|
1673
|
+
* @default 'md'
|
|
1674
|
+
*/
|
|
1675
|
+
readonly size: _angular_core.InputSignal<"xs" | "sm" | "md" | "lg">;
|
|
1676
|
+
/**
|
|
1677
|
+
* Whether the input is disabled
|
|
1678
|
+
* @default false
|
|
1679
|
+
*/
|
|
1680
|
+
readonly disabled: _angular_core.InputSignal<boolean>;
|
|
1681
|
+
/**
|
|
1682
|
+
* Whether the input is read-only
|
|
1683
|
+
* @default false
|
|
1684
|
+
*/
|
|
1685
|
+
readonly readonly: _angular_core.InputSignal<boolean>;
|
|
1686
|
+
/**
|
|
1687
|
+
* Whether the input is required
|
|
1688
|
+
* @default false
|
|
1689
|
+
*/
|
|
1690
|
+
readonly required: _angular_core.InputSignal<boolean>;
|
|
1691
|
+
/**
|
|
1692
|
+
* Custom error message (overrides validation error)
|
|
1693
|
+
*/
|
|
1694
|
+
readonly error: _angular_core.InputSignal<string | undefined>;
|
|
1695
|
+
/**
|
|
1696
|
+
* Helper text to display below input
|
|
1697
|
+
*/
|
|
1698
|
+
readonly helperText: _angular_core.InputSignal<string | undefined>;
|
|
1699
|
+
/**
|
|
1700
|
+
* Whether to show validation feedback immediately
|
|
1701
|
+
* @default false (validates on blur)
|
|
1702
|
+
*/
|
|
1703
|
+
readonly validateOnInput: _angular_core.InputSignal<boolean>;
|
|
1704
|
+
/**
|
|
1705
|
+
* ARIA label for accessibility
|
|
1706
|
+
*/
|
|
1707
|
+
readonly ariaLabel: _angular_core.InputSignal<string | undefined>;
|
|
1708
|
+
/**
|
|
1709
|
+
* Emitted when email value changes
|
|
1710
|
+
*/
|
|
1711
|
+
readonly valueChange: _angular_core.OutputEmitterRef<string>;
|
|
1712
|
+
/**
|
|
1713
|
+
* Emitted when validation state changes
|
|
1714
|
+
*/
|
|
1715
|
+
readonly validationChange: _angular_core.OutputEmitterRef<{
|
|
1716
|
+
valid: boolean;
|
|
1717
|
+
error?: string;
|
|
1718
|
+
}>;
|
|
1719
|
+
/**
|
|
1720
|
+
* Emitted when input receives focus
|
|
1721
|
+
*/
|
|
1722
|
+
readonly focused: _angular_core.OutputEmitterRef<void>;
|
|
1723
|
+
/**
|
|
1724
|
+
* Emitted when input loses focus
|
|
1725
|
+
*/
|
|
1726
|
+
readonly blurred: _angular_core.OutputEmitterRef<void>;
|
|
1727
|
+
/**
|
|
1728
|
+
* Emitted when Enter key is pressed
|
|
1729
|
+
*/
|
|
1730
|
+
readonly enterPressed: _angular_core.OutputEmitterRef<void>;
|
|
1731
|
+
readonly value: _angular_core.WritableSignal<string>;
|
|
1732
|
+
private readonly touched;
|
|
1733
|
+
private readonly _formDisabled;
|
|
1734
|
+
/**
|
|
1735
|
+
* RFC 5322 compliant email regex (simplified but robust)
|
|
1736
|
+
* Validates: local-part@domain
|
|
1737
|
+
* - Local part: alphanumeric, dots, hyphens, underscores, plus signs
|
|
1738
|
+
* - Domain: alphanumeric, dots, hyphens with valid TLD
|
|
1739
|
+
*/
|
|
1740
|
+
private readonly EMAIL_REGEX;
|
|
1741
|
+
private onChange;
|
|
1742
|
+
private onTouched;
|
|
1743
|
+
/**
|
|
1744
|
+
* Computed validation state
|
|
1745
|
+
*/
|
|
1746
|
+
protected readonly isValid: _angular_core.Signal<boolean>;
|
|
1747
|
+
/**
|
|
1748
|
+
* Computed error message
|
|
1749
|
+
*/
|
|
1750
|
+
protected readonly validationError: _angular_core.Signal<string | undefined>;
|
|
1751
|
+
/**
|
|
1752
|
+
* Computed disabled state
|
|
1753
|
+
*/
|
|
1754
|
+
protected get isDisabled(): boolean;
|
|
1755
|
+
constructor();
|
|
1756
|
+
writeValue(value: string): void;
|
|
1757
|
+
registerOnChange(fn: (value: string) => void): void;
|
|
1758
|
+
registerOnTouched(fn: () => void): void;
|
|
1759
|
+
setDisabledState(isDisabled: boolean): void;
|
|
1760
|
+
/**
|
|
1761
|
+
* Public method to trigger validation
|
|
1762
|
+
*/
|
|
1763
|
+
validate(): boolean;
|
|
1764
|
+
/**
|
|
1765
|
+
* Public method to reset validation state
|
|
1766
|
+
*/
|
|
1767
|
+
resetValidation(): void;
|
|
1768
|
+
/**
|
|
1769
|
+
* Handles value changes from base input
|
|
1770
|
+
*/
|
|
1771
|
+
protected onValueChange(newValue: string): void;
|
|
1772
|
+
/**
|
|
1773
|
+
* Handles focus events
|
|
1774
|
+
*/
|
|
1775
|
+
protected onFocus(): void;
|
|
1776
|
+
/**
|
|
1777
|
+
* Handles blur events
|
|
1778
|
+
*/
|
|
1779
|
+
protected onBlur(): void;
|
|
1780
|
+
/**
|
|
1781
|
+
* Handles Enter key press
|
|
1782
|
+
*/
|
|
1783
|
+
protected onEnterPressed(): void;
|
|
1784
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<EmailInputComponent, never>;
|
|
1785
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<EmailInputComponent, "lc-email-input", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "error": { "alias": "error"; "required": false; "isSignal": true; }; "helperText": { "alias": "helperText"; "required": false; "isSignal": true; }; "validateOnInput": { "alias": "validateOnInput"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; "validationChange": "validationChange"; "focused": "focused"; "blurred": "blurred"; "enterPressed": "enterPressed"; }, never, never, true, never>;
|
|
1786
|
+
}
|
|
1787
|
+
|
|
1788
|
+
type ContainerSize = 'sm' | 'md' | 'lg' | 'xl' | 'full';
|
|
1789
|
+
declare class ContainerComponent {
|
|
1790
|
+
size: _angular_core.InputSignal<ContainerSize>;
|
|
1791
|
+
noPadding: _angular_core.InputSignal<boolean>;
|
|
1792
|
+
paddingY: _angular_core.InputSignal<boolean>;
|
|
1793
|
+
get hostClasses(): string;
|
|
1794
|
+
classes: _angular_core.Signal<string>;
|
|
1795
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ContainerComponent, never>;
|
|
1796
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ContainerComponent, "lc-container", never, { "size": { "alias": "size"; "required": false; "isSignal": true; }; "noPadding": { "alias": "noPadding"; "required": false; "isSignal": true; }; "paddingY": { "alias": "paddingY"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
1797
|
+
}
|
|
1798
|
+
|
|
1799
|
+
type SectionSpacing = 'none' | 'sm' | 'md' | 'lg' | 'xl';
|
|
1800
|
+
type SectionBackground = 'none' | 'gray' | 'primary' | 'secondary';
|
|
1801
|
+
declare class SectionComponent {
|
|
1802
|
+
spacing: _angular_core.InputSignal<SectionSpacing>;
|
|
1803
|
+
background: _angular_core.InputSignal<SectionBackground>;
|
|
1804
|
+
noPaddingX: _angular_core.InputSignal<boolean>;
|
|
1805
|
+
noPaddingY: _angular_core.InputSignal<boolean>;
|
|
1806
|
+
get hostClasses(): string;
|
|
1807
|
+
classes: _angular_core.Signal<string>;
|
|
1808
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SectionComponent, never>;
|
|
1809
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<SectionComponent, "lc-section", never, { "spacing": { "alias": "spacing"; "required": false; "isSignal": true; }; "background": { "alias": "background"; "required": false; "isSignal": true; }; "noPaddingX": { "alias": "noPaddingX"; "required": false; "isSignal": true; }; "noPaddingY": { "alias": "noPaddingY"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
1810
|
+
}
|
|
1811
|
+
|
|
1812
|
+
type SpacerSize = 'auto' | 'xs' | 'sm' | 'md' | 'lg' | 'xl';
|
|
1813
|
+
declare class SpacerComponent {
|
|
1814
|
+
size: _angular_core.InputSignal<SpacerSize>;
|
|
1815
|
+
get hostClasses(): string;
|
|
1816
|
+
get ariaHidden(): string;
|
|
1817
|
+
get tabIndex(): number;
|
|
1818
|
+
classes: _angular_core.Signal<string>;
|
|
1819
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SpacerComponent, never>;
|
|
1820
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<SpacerComponent, "lc-spacer", never, { "size": { "alias": "size"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
1821
|
+
}
|
|
1822
|
+
|
|
1823
|
+
type StackDirection = 'vertical' | 'horizontal';
|
|
1824
|
+
type StackGap = 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'xl';
|
|
1825
|
+
type StackAlign = 'start' | 'center' | 'end' | 'stretch' | 'baseline';
|
|
1826
|
+
type StackJustify = 'start' | 'center' | 'end' | 'between' | 'around' | 'evenly';
|
|
1827
|
+
declare class StackComponent {
|
|
1828
|
+
direction: _angular_core.InputSignal<StackDirection>;
|
|
1829
|
+
gap: _angular_core.InputSignal<StackGap>;
|
|
1830
|
+
align: _angular_core.InputSignal<StackAlign>;
|
|
1831
|
+
justify: _angular_core.InputSignal<StackJustify>;
|
|
1832
|
+
wrap: _angular_core.InputSignal<boolean>;
|
|
1833
|
+
fullWidth: _angular_core.InputSignal<boolean>;
|
|
1834
|
+
get hostClasses(): string;
|
|
1835
|
+
classes: _angular_core.Signal<string>;
|
|
1836
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<StackComponent, never>;
|
|
1837
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<StackComponent, "lc-stack", never, { "direction": { "alias": "direction"; "required": false; "isSignal": true; }; "gap": { "alias": "gap"; "required": false; "isSignal": true; }; "align": { "alias": "align"; "required": false; "isSignal": true; }; "justify": { "alias": "justify"; "required": false; "isSignal": true; }; "wrap": { "alias": "wrap"; "required": false; "isSignal": true; }; "fullWidth": { "alias": "fullWidth"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
1838
|
+
}
|
|
1839
|
+
|
|
1840
|
+
type AlertVariant = 'success' | 'error' | 'warning' | 'info';
|
|
1841
|
+
/**
|
|
1842
|
+
* Alert component for inline notifications.
|
|
1843
|
+
*
|
|
1844
|
+
* @example
|
|
1845
|
+
* ```html
|
|
1846
|
+
* <lc-alert variant="success" title="Success!" [dismissible]="true">
|
|
1847
|
+
* Your changes have been saved.
|
|
1848
|
+
* </lc-alert>
|
|
1849
|
+
* ```
|
|
1850
|
+
*/
|
|
1851
|
+
declare class AlertComponent {
|
|
1852
|
+
/**
|
|
1853
|
+
* Visual variant of the alert
|
|
1854
|
+
* @default 'info'
|
|
1855
|
+
*/
|
|
1856
|
+
variant: _angular_core.InputSignal<AlertVariant>;
|
|
1857
|
+
/**
|
|
1858
|
+
* Alert title (optional)
|
|
1859
|
+
*/
|
|
1860
|
+
title: _angular_core.InputSignal<string | undefined>;
|
|
1861
|
+
/**
|
|
1862
|
+
* Alert message (alternative to content projection)
|
|
1863
|
+
*/
|
|
1864
|
+
message: _angular_core.InputSignal<string | undefined>;
|
|
1865
|
+
/**
|
|
1866
|
+
* Icon to display (defaults based on variant)
|
|
1867
|
+
*/
|
|
1868
|
+
icon: _angular_core.InputSignal<string | undefined>;
|
|
1869
|
+
/**
|
|
1870
|
+
* Whether to show icon
|
|
1871
|
+
* @default true
|
|
1872
|
+
*/
|
|
1873
|
+
showIcon: _angular_core.InputSignal<boolean>;
|
|
1874
|
+
/**
|
|
1875
|
+
* Whether the alert can be dismissed
|
|
1876
|
+
* @default false
|
|
1877
|
+
*/
|
|
1878
|
+
dismissible: _angular_core.InputSignal<boolean>;
|
|
1879
|
+
/**
|
|
1880
|
+
* ARIA label for accessibility
|
|
1881
|
+
*/
|
|
1882
|
+
ariaLabel: _angular_core.InputSignal<string | undefined>;
|
|
1883
|
+
/**
|
|
1884
|
+
* Emitted when alert is dismissed
|
|
1885
|
+
*/
|
|
1886
|
+
readonly dismissed: _angular_core.OutputEmitterRef<void>;
|
|
1887
|
+
/**
|
|
1888
|
+
* Internal visibility state
|
|
1889
|
+
*/
|
|
1890
|
+
protected visible: _angular_core.WritableSignal<boolean>;
|
|
1891
|
+
/**
|
|
1892
|
+
* Computed host classes
|
|
1893
|
+
*/
|
|
1894
|
+
protected hostClasses: _angular_core.Signal<string>;
|
|
1895
|
+
/**
|
|
1896
|
+
* Computed container classes
|
|
1897
|
+
*/
|
|
1898
|
+
protected containerClasses: _angular_core.Signal<string>;
|
|
1899
|
+
/**
|
|
1900
|
+
* Computed ARIA live region priority
|
|
1901
|
+
*/
|
|
1902
|
+
protected ariaLive: _angular_core.Signal<"assertive" | "polite">;
|
|
1903
|
+
/**
|
|
1904
|
+
* Computed default icon based on variant
|
|
1905
|
+
*/
|
|
1906
|
+
protected defaultIcon: _angular_core.Signal<string>;
|
|
1907
|
+
/**
|
|
1908
|
+
* Dismiss the alert
|
|
1909
|
+
*/
|
|
1910
|
+
dismiss(): void;
|
|
1911
|
+
/**
|
|
1912
|
+
* Handle close button click
|
|
1913
|
+
*/
|
|
1914
|
+
protected onCloseClick(event: Event): void;
|
|
1915
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AlertComponent, never>;
|
|
1916
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AlertComponent, "lc-alert", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "message": { "alias": "message"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "showIcon": { "alias": "showIcon"; "required": false; "isSignal": true; }; "dismissible": { "alias": "dismissible"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "dismissed": "dismissed"; }, never, ["*"], true, never>;
|
|
1917
|
+
}
|
|
1918
|
+
|
|
1919
|
+
/**
|
|
1920
|
+
* Error severity levels
|
|
1921
|
+
*/
|
|
1922
|
+
type ErrorSeverity = 'error' | 'warning' | 'info';
|
|
1923
|
+
/**
|
|
1924
|
+
* Error display component for authentication error messages.
|
|
1925
|
+
*
|
|
1926
|
+
* Automatically maps Cognito error codes to user-friendly messages
|
|
1927
|
+
* and displays them with appropriate severity styling.
|
|
1928
|
+
*
|
|
1929
|
+
* @example
|
|
1930
|
+
* ```html
|
|
1931
|
+
* <!-- Display Cognito error -->
|
|
1932
|
+
* <lc-error-display
|
|
1933
|
+
* [error]="cognitoError"
|
|
1934
|
+
* [dismissible]="true"
|
|
1935
|
+
* ></lc-error-display>
|
|
1936
|
+
*
|
|
1937
|
+
* <!-- Display custom error -->
|
|
1938
|
+
* <lc-error-display
|
|
1939
|
+
* message="Invalid credentials"
|
|
1940
|
+
* severity="error"
|
|
1941
|
+
* ></lc-error-display>
|
|
1942
|
+
* ```
|
|
1943
|
+
*/
|
|
1944
|
+
declare class ErrorDisplayComponent {
|
|
1945
|
+
/**
|
|
1946
|
+
* Error object (Cognito or generic Error)
|
|
1947
|
+
*/
|
|
1948
|
+
readonly error: _angular_core.InputSignal<Error | {
|
|
1949
|
+
code?: string;
|
|
1950
|
+
message?: string;
|
|
1951
|
+
} | null | undefined>;
|
|
1952
|
+
/**
|
|
1953
|
+
* Custom error message (overrides error.message)
|
|
1954
|
+
*/
|
|
1955
|
+
readonly message: _angular_core.InputSignal<string | undefined>;
|
|
1956
|
+
/**
|
|
1957
|
+
* Error severity level
|
|
1958
|
+
* @default 'error'
|
|
1959
|
+
*/
|
|
1960
|
+
readonly severity: _angular_core.InputSignal<ErrorSeverity>;
|
|
1961
|
+
/**
|
|
1962
|
+
* Title for the error display
|
|
1963
|
+
*/
|
|
1964
|
+
readonly title: _angular_core.InputSignal<string | undefined>;
|
|
1965
|
+
/**
|
|
1966
|
+
* Whether the error can be dismissed
|
|
1967
|
+
* @default true
|
|
1968
|
+
*/
|
|
1969
|
+
readonly dismissible: _angular_core.InputSignal<boolean>;
|
|
1970
|
+
/**
|
|
1971
|
+
* Whether to show icon
|
|
1972
|
+
* @default true
|
|
1973
|
+
*/
|
|
1974
|
+
readonly showIcon: _angular_core.InputSignal<boolean>;
|
|
1975
|
+
/**
|
|
1976
|
+
* Whether to automatically hide after a delay
|
|
1977
|
+
* @default false
|
|
1978
|
+
*/
|
|
1979
|
+
readonly autoDismiss: _angular_core.InputSignal<boolean>;
|
|
1980
|
+
/**
|
|
1981
|
+
* Auto-dismiss delay in milliseconds
|
|
1982
|
+
* @default 5000
|
|
1983
|
+
*/
|
|
1984
|
+
readonly autoDismissDelay: _angular_core.InputSignal<number>;
|
|
1985
|
+
/**
|
|
1986
|
+
* Internal visibility state
|
|
1987
|
+
*/
|
|
1988
|
+
protected readonly visible: _angular_core.WritableSignal<boolean>;
|
|
1989
|
+
/**
|
|
1990
|
+
* Computed error message
|
|
1991
|
+
*/
|
|
1992
|
+
protected readonly errorMessage: _angular_core.Signal<string | undefined>;
|
|
1993
|
+
/**
|
|
1994
|
+
* Computed alert variant based on severity
|
|
1995
|
+
*/
|
|
1996
|
+
protected readonly alertVariant: _angular_core.Signal<AlertVariant>;
|
|
1997
|
+
/**
|
|
1998
|
+
* Computed title for the error
|
|
1999
|
+
*/
|
|
2000
|
+
protected readonly errorTitle: _angular_core.Signal<string | undefined>;
|
|
2001
|
+
/**
|
|
2002
|
+
* Auto-dismiss timer
|
|
2003
|
+
*/
|
|
2004
|
+
private autoDismissTimer?;
|
|
2005
|
+
constructor();
|
|
2006
|
+
/**
|
|
2007
|
+
* Handle alert dismissed
|
|
2008
|
+
*/
|
|
2009
|
+
protected onDismissed(): void;
|
|
2010
|
+
/**
|
|
2011
|
+
* Clear auto-dismiss timer
|
|
2012
|
+
*/
|
|
2013
|
+
private clearAutoDismissTimer;
|
|
2014
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ErrorDisplayComponent, never>;
|
|
2015
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ErrorDisplayComponent, "lc-error-display", never, { "error": { "alias": "error"; "required": false; "isSignal": true; }; "message": { "alias": "message"; "required": false; "isSignal": true; }; "severity": { "alias": "severity"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "dismissible": { "alias": "dismissible"; "required": false; "isSignal": true; }; "showIcon": { "alias": "showIcon"; "required": false; "isSignal": true; }; "autoDismiss": { "alias": "autoDismiss"; "required": false; "isSignal": true; }; "autoDismissDelay": { "alias": "autoDismissDelay"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
2016
|
+
}
|
|
2017
|
+
|
|
2018
|
+
type ToastVariant = 'success' | 'error' | 'warning' | 'info';
|
|
2019
|
+
type ToastPosition = 'top-left' | 'top-center' | 'top-right' | 'bottom-left' | 'bottom-center' | 'bottom-right';
|
|
2020
|
+
interface ToastAction {
|
|
2021
|
+
label: string;
|
|
2022
|
+
onClick: () => void;
|
|
2023
|
+
}
|
|
2024
|
+
interface ToastConfig {
|
|
2025
|
+
message: string;
|
|
2026
|
+
variant?: ToastVariant;
|
|
2027
|
+
position?: ToastPosition;
|
|
2028
|
+
duration?: number;
|
|
2029
|
+
showCloseButton?: boolean;
|
|
2030
|
+
action?: ToastAction;
|
|
2031
|
+
}
|
|
2032
|
+
interface Toast extends Required<Omit<ToastConfig, 'action'>> {
|
|
2033
|
+
id: string;
|
|
2034
|
+
action?: ToastAction;
|
|
2035
|
+
}
|
|
2036
|
+
/**
|
|
2037
|
+
* Toast service for showing ephemeral notifications.
|
|
2038
|
+
*
|
|
2039
|
+
* @example
|
|
2040
|
+
* ```typescript
|
|
2041
|
+
* constructor(private toastService: ToastService) {}
|
|
2042
|
+
*
|
|
2043
|
+
* showSuccess() {
|
|
2044
|
+
* this.toastService.show({
|
|
2045
|
+
* message: 'Changes saved successfully!',
|
|
2046
|
+
* variant: 'success',
|
|
2047
|
+
* duration: 3000
|
|
2048
|
+
* });
|
|
2049
|
+
* }
|
|
2050
|
+
* ```
|
|
2051
|
+
*/
|
|
2052
|
+
declare class ToastService {
|
|
2053
|
+
/**
|
|
2054
|
+
* Public readonly signal for toasts
|
|
2055
|
+
*/
|
|
2056
|
+
readonly toasts: Signal<readonly Toast[]>;
|
|
2057
|
+
/**
|
|
2058
|
+
* Internal signal for toast list
|
|
2059
|
+
*/
|
|
2060
|
+
private readonly toastList;
|
|
2061
|
+
private readonly MAX_TOASTS;
|
|
2062
|
+
private toastIdCounter;
|
|
2063
|
+
private activeTimeouts;
|
|
2064
|
+
constructor();
|
|
2065
|
+
/**
|
|
2066
|
+
* Show a toast notification
|
|
2067
|
+
*/
|
|
2068
|
+
show(config: ToastConfig): string;
|
|
2069
|
+
/**
|
|
2070
|
+
* Close a specific toast
|
|
2071
|
+
*/
|
|
2072
|
+
close(id: string): void;
|
|
2073
|
+
/**
|
|
2074
|
+
* Close all toasts
|
|
2075
|
+
*/
|
|
2076
|
+
closeAll(): void;
|
|
2077
|
+
/**
|
|
2078
|
+
* Generate unique toast ID
|
|
2079
|
+
*/
|
|
2080
|
+
private generateId;
|
|
2081
|
+
/**
|
|
2082
|
+
* Remove a toast from the list
|
|
2083
|
+
*/
|
|
2084
|
+
private removeToast;
|
|
2085
|
+
/**
|
|
2086
|
+
* Clear timeout for a toast
|
|
2087
|
+
*/
|
|
2088
|
+
private clearTimeout;
|
|
2089
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ToastService, never>;
|
|
2090
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<ToastService>;
|
|
2091
|
+
}
|
|
2092
|
+
|
|
2093
|
+
/**
|
|
2094
|
+
* Toast component for displaying ephemeral notifications.
|
|
2095
|
+
* Typically used via ToastService, not directly.
|
|
2096
|
+
*
|
|
2097
|
+
* @example
|
|
2098
|
+
* ```typescript
|
|
2099
|
+
* // Use via service
|
|
2100
|
+
* constructor(private toastService: ToastService) {}
|
|
2101
|
+
*
|
|
2102
|
+
* showToast() {
|
|
2103
|
+
* this.toastService.show({
|
|
2104
|
+
* message: 'Success!',
|
|
2105
|
+
* variant: 'success'
|
|
2106
|
+
* });
|
|
2107
|
+
* }
|
|
2108
|
+
* ```
|
|
2109
|
+
*/
|
|
2110
|
+
declare class ToastComponent {
|
|
2111
|
+
/**
|
|
2112
|
+
* Toast data
|
|
2113
|
+
*/
|
|
2114
|
+
toast: _angular_core.InputSignal<Toast>;
|
|
2115
|
+
/**
|
|
2116
|
+
* Emitted when toast is closed
|
|
2117
|
+
*/
|
|
2118
|
+
readonly closed: _angular_core.OutputEmitterRef<string>;
|
|
2119
|
+
/**
|
|
2120
|
+
* Computed host classes
|
|
2121
|
+
*/
|
|
2122
|
+
protected hostClasses: _angular_core.Signal<string>;
|
|
2123
|
+
/**
|
|
2124
|
+
* Computed container classes
|
|
2125
|
+
*/
|
|
2126
|
+
protected containerClasses: _angular_core.Signal<string>;
|
|
2127
|
+
/**
|
|
2128
|
+
* Computed ARIA role
|
|
2129
|
+
*/
|
|
2130
|
+
protected ariaRole: _angular_core.Signal<"alert" | "status">;
|
|
2131
|
+
/**
|
|
2132
|
+
* Computed ARIA live region priority
|
|
2133
|
+
*/
|
|
2134
|
+
protected ariaLive: _angular_core.Signal<"assertive" | "polite">;
|
|
2135
|
+
/**
|
|
2136
|
+
* Computed default icon based on variant
|
|
2137
|
+
*/
|
|
2138
|
+
protected defaultIcon: _angular_core.Signal<string>;
|
|
2139
|
+
/**
|
|
2140
|
+
* Handle close button click
|
|
2141
|
+
*/
|
|
2142
|
+
protected onCloseClick(event: Event): void;
|
|
2143
|
+
/**
|
|
2144
|
+
* Handle action button click
|
|
2145
|
+
*/
|
|
2146
|
+
protected onActionClick(event: Event): void;
|
|
2147
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ToastComponent, never>;
|
|
2148
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ToastComponent, "lc-toast", never, { "toast": { "alias": "toast"; "required": true; "isSignal": true; }; }, { "closed": "closed"; }, never, never, true, never>;
|
|
2149
|
+
}
|
|
2150
|
+
|
|
2151
|
+
type ModalSize = 'sm' | 'md' | 'lg' | 'xl' | 'full';
|
|
2152
|
+
/**
|
|
2153
|
+
* Modal dialog component for focused user interactions.
|
|
2154
|
+
* Uses FocusTrap for accessibility.
|
|
2155
|
+
*
|
|
2156
|
+
* @example
|
|
2157
|
+
* ```html
|
|
2158
|
+
* <lc-modal [(open)]="isOpen" size="md" [closeOnBackdropClick]="true">
|
|
2159
|
+
* <div slot="header">
|
|
2160
|
+
* <h2>Modal Title</h2>
|
|
2161
|
+
* </div>
|
|
2162
|
+
* <div slot="body">
|
|
2163
|
+
* <p>Modal content goes here</p>
|
|
2164
|
+
* </div>
|
|
2165
|
+
* <div slot="footer">
|
|
2166
|
+
* <lc-button (click)="closeModal()">Close</lc-button>
|
|
2167
|
+
* </div>
|
|
2168
|
+
* </lc-modal>
|
|
2169
|
+
* ```
|
|
2170
|
+
*/
|
|
2171
|
+
declare class ModalComponent implements OnDestroy {
|
|
2172
|
+
modalContent?: ElementRef<HTMLElement>;
|
|
2173
|
+
/**
|
|
2174
|
+
* Whether the modal is open (input from parent)
|
|
2175
|
+
* @default false
|
|
2176
|
+
*/
|
|
2177
|
+
open: _angular_core.InputSignal<boolean>;
|
|
2178
|
+
/**
|
|
2179
|
+
* Modal size
|
|
2180
|
+
* @default 'md'
|
|
2181
|
+
*/
|
|
2182
|
+
size: _angular_core.InputSignal<ModalSize>;
|
|
2183
|
+
/**
|
|
2184
|
+
* Whether clicking backdrop closes modal
|
|
2185
|
+
* @default true
|
|
2186
|
+
*/
|
|
2187
|
+
closeOnBackdropClick: _angular_core.InputSignal<boolean>;
|
|
2188
|
+
/**
|
|
2189
|
+
* Whether pressing Escape closes modal
|
|
2190
|
+
* @default true
|
|
2191
|
+
*/
|
|
2192
|
+
closeOnEscape: _angular_core.InputSignal<boolean>;
|
|
2193
|
+
/**
|
|
2194
|
+
* Whether to show close button in header
|
|
2195
|
+
* @default true
|
|
2196
|
+
*/
|
|
2197
|
+
showCloseButton: _angular_core.InputSignal<boolean>;
|
|
2198
|
+
/**
|
|
2199
|
+
* ARIA label for accessibility
|
|
2200
|
+
*/
|
|
2201
|
+
ariaLabel: _angular_core.InputSignal<string | undefined>;
|
|
2202
|
+
/**
|
|
2203
|
+
* ARIA labelledby ID
|
|
2204
|
+
*/
|
|
2205
|
+
ariaLabelledBy: _angular_core.InputSignal<string | undefined>;
|
|
2206
|
+
/**
|
|
2207
|
+
* ARIA describedby ID
|
|
2208
|
+
*/
|
|
2209
|
+
ariaDescribedBy: _angular_core.InputSignal<string | undefined>;
|
|
2210
|
+
/**
|
|
2211
|
+
* Emitted when modal opens
|
|
2212
|
+
*/
|
|
2213
|
+
readonly modalOpened: _angular_core.OutputEmitterRef<void>;
|
|
2214
|
+
/**
|
|
2215
|
+
* Emitted when modal closes
|
|
2216
|
+
*/
|
|
2217
|
+
readonly modalClosed: _angular_core.OutputEmitterRef<void>;
|
|
2218
|
+
/**
|
|
2219
|
+
* Two-way binding for open state
|
|
2220
|
+
*/
|
|
2221
|
+
readonly openChange: _angular_core.OutputEmitterRef<boolean>;
|
|
2222
|
+
/**
|
|
2223
|
+
* Emitted when backdrop is clicked
|
|
2224
|
+
*/
|
|
2225
|
+
readonly backdropClicked: _angular_core.OutputEmitterRef<MouseEvent>;
|
|
2226
|
+
/**
|
|
2227
|
+
* Internal open state signal (protected for AOT)
|
|
2228
|
+
*/
|
|
2229
|
+
protected _open: _angular_core.WritableSignal<boolean>;
|
|
2230
|
+
/**
|
|
2231
|
+
* Computed modal classes
|
|
2232
|
+
*/
|
|
2233
|
+
protected modalClasses: _angular_core.Signal<string>;
|
|
2234
|
+
private readonly focusTrapFactory;
|
|
2235
|
+
private focusTrap?;
|
|
2236
|
+
private originalOverflow?;
|
|
2237
|
+
private escapeListener?;
|
|
2238
|
+
constructor();
|
|
2239
|
+
ngOnDestroy(): void;
|
|
2240
|
+
/**
|
|
2241
|
+
* Open the modal programmatically
|
|
2242
|
+
*/
|
|
2243
|
+
openModal(): void;
|
|
2244
|
+
/**
|
|
2245
|
+
* Close the modal programmatically
|
|
2246
|
+
*/
|
|
2247
|
+
closeModal(): void;
|
|
2248
|
+
/**
|
|
2249
|
+
* Handle backdrop click
|
|
2250
|
+
*/
|
|
2251
|
+
protected onBackdropClick(event: MouseEvent): void;
|
|
2252
|
+
/**
|
|
2253
|
+
* Handle close button click
|
|
2254
|
+
*/
|
|
2255
|
+
protected onCloseClick(event: Event): void;
|
|
2256
|
+
/**
|
|
2257
|
+
* Handle Escape key press
|
|
2258
|
+
*/
|
|
2259
|
+
private handleEscapeKey;
|
|
2260
|
+
/**
|
|
2261
|
+
* Show the modal
|
|
2262
|
+
*/
|
|
2263
|
+
private showModal;
|
|
2264
|
+
/**
|
|
2265
|
+
* Hide the modal
|
|
2266
|
+
*/
|
|
2267
|
+
private hideModal;
|
|
2268
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ModalComponent, never>;
|
|
2269
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ModalComponent, "lc-modal", never, { "open": { "alias": "open"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "closeOnBackdropClick": { "alias": "closeOnBackdropClick"; "required": false; "isSignal": true; }; "closeOnEscape": { "alias": "closeOnEscape"; "required": false; "isSignal": true; }; "showCloseButton": { "alias": "showCloseButton"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "ariaLabelledBy": { "alias": "ariaLabelledBy"; "required": false; "isSignal": true; }; "ariaDescribedBy": { "alias": "ariaDescribedBy"; "required": false; "isSignal": true; }; }, { "modalOpened": "modalOpened"; "modalClosed": "modalClosed"; "openChange": "openChange"; "backdropClicked": "backdropClicked"; }, never, ["[slot='header']", "[slot='body']", "*", "[slot='footer']"], true, never>;
|
|
2270
|
+
}
|
|
2271
|
+
|
|
2272
|
+
type TooltipPosition = 'top' | 'bottom' | 'left' | 'right';
|
|
2273
|
+
/**
|
|
2274
|
+
* Internal tooltip content component
|
|
2275
|
+
*/
|
|
2276
|
+
declare class TooltipContentComponent {
|
|
2277
|
+
content: string;
|
|
2278
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<TooltipContentComponent, never>;
|
|
2279
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<TooltipContentComponent, "lc-tooltip-content", never, {}, {}, never, never, true, never>;
|
|
2280
|
+
}
|
|
2281
|
+
/**
|
|
2282
|
+
* Tooltip directive for displaying contextual information.
|
|
2283
|
+
* Uses Angular CDK Overlay for positioning.
|
|
2284
|
+
*
|
|
2285
|
+
* @example
|
|
2286
|
+
* ```html
|
|
2287
|
+
* <button lcTooltip="Click me!" tooltipPosition="top">
|
|
2288
|
+
* Hover or focus
|
|
2289
|
+
* </button>
|
|
2290
|
+
* ```
|
|
2291
|
+
*/
|
|
2292
|
+
declare class TooltipDirective implements OnDestroy {
|
|
2293
|
+
/**
|
|
2294
|
+
* Tooltip content text
|
|
2295
|
+
*/
|
|
2296
|
+
lcTooltip: _angular_core.InputSignal<string>;
|
|
2297
|
+
/**
|
|
2298
|
+
* Tooltip position
|
|
2299
|
+
* @default 'top'
|
|
2300
|
+
*/
|
|
2301
|
+
tooltipPosition: _angular_core.InputSignal<TooltipPosition>;
|
|
2302
|
+
/**
|
|
2303
|
+
* Show delay in milliseconds
|
|
2304
|
+
* @default 0
|
|
2305
|
+
*/
|
|
2306
|
+
tooltipShowDelay: _angular_core.InputSignal<number>;
|
|
2307
|
+
/**
|
|
2308
|
+
* Hide delay in milliseconds
|
|
2309
|
+
* @default 0
|
|
2310
|
+
*/
|
|
2311
|
+
tooltipHideDelay: _angular_core.InputSignal<number>;
|
|
2312
|
+
/**
|
|
2313
|
+
* Whether tooltip is disabled
|
|
2314
|
+
* @default false
|
|
2315
|
+
*/
|
|
2316
|
+
tooltipDisabled: _angular_core.InputSignal<boolean>;
|
|
2317
|
+
private overlayRef?;
|
|
2318
|
+
private tooltipRef?;
|
|
2319
|
+
private showTimeout?;
|
|
2320
|
+
private hideTimeout?;
|
|
2321
|
+
private tooltipId?;
|
|
2322
|
+
private readonly elementRef;
|
|
2323
|
+
private readonly overlay;
|
|
2324
|
+
private readonly viewContainerRef;
|
|
2325
|
+
private readonly renderer;
|
|
2326
|
+
ngOnDestroy(): void;
|
|
2327
|
+
onMouseEnter(): void;
|
|
2328
|
+
onMouseLeave(): void;
|
|
2329
|
+
onFocus(): void;
|
|
2330
|
+
onBlur(): void;
|
|
2331
|
+
/**
|
|
2332
|
+
* Show tooltip programmatically
|
|
2333
|
+
*/
|
|
2334
|
+
show(): void;
|
|
2335
|
+
/**
|
|
2336
|
+
* Hide tooltip programmatically
|
|
2337
|
+
*/
|
|
2338
|
+
hide(): void;
|
|
2339
|
+
/**
|
|
2340
|
+
* Toggle tooltip visibility
|
|
2341
|
+
*/
|
|
2342
|
+
toggle(): void;
|
|
2343
|
+
private showWithDelay;
|
|
2344
|
+
private hideWithDelay;
|
|
2345
|
+
private createOverlay;
|
|
2346
|
+
private getPositions;
|
|
2347
|
+
private clearTimeouts;
|
|
2348
|
+
private cleanup;
|
|
2349
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<TooltipDirective, never>;
|
|
2350
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<TooltipDirective, "[lcTooltip]", never, { "lcTooltip": { "alias": "lcTooltip"; "required": true; "isSignal": true; }; "tooltipPosition": { "alias": "tooltipPosition"; "required": false; "isSignal": true; }; "tooltipShowDelay": { "alias": "tooltipShowDelay"; "required": false; "isSignal": true; }; "tooltipHideDelay": { "alias": "tooltipHideDelay"; "required": false; "isSignal": true; }; "tooltipDisabled": { "alias": "tooltipDisabled"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
2351
|
+
}
|
|
2352
|
+
|
|
2353
|
+
interface BreadcrumbItem {
|
|
2354
|
+
label: string;
|
|
2355
|
+
url?: string;
|
|
2356
|
+
}
|
|
2357
|
+
type BreadcrumbSize = 'sm' | 'md' | 'lg';
|
|
2358
|
+
declare class BreadcrumbsComponent {
|
|
2359
|
+
items: _angular_core.WritableSignal<BreadcrumbItem[]>;
|
|
2360
|
+
separator: _angular_core.WritableSignal<string>;
|
|
2361
|
+
maxItems: _angular_core.WritableSignal<number>;
|
|
2362
|
+
size: _angular_core.WritableSignal<BreadcrumbSize>;
|
|
2363
|
+
ariaLabel: _angular_core.WritableSignal<string>;
|
|
2364
|
+
breadcrumbClasses: _angular_core.Signal<string>;
|
|
2365
|
+
visibleItems: _angular_core.Signal<BreadcrumbItem[]>;
|
|
2366
|
+
set itemsInput(value: BreadcrumbItem[]);
|
|
2367
|
+
set separatorInput(value: string);
|
|
2368
|
+
set maxItemsInput(value: number);
|
|
2369
|
+
set sizeInput(value: BreadcrumbSize);
|
|
2370
|
+
set ariaLabelInput(value: string);
|
|
2371
|
+
isLastItem(index: number): boolean;
|
|
2372
|
+
isEllipsis(item: BreadcrumbItem): boolean;
|
|
2373
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<BreadcrumbsComponent, never>;
|
|
2374
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<BreadcrumbsComponent, "lc-breadcrumbs", never, { "itemsInput": { "alias": "itemsInput"; "required": false; }; "separatorInput": { "alias": "separatorInput"; "required": false; }; "maxItemsInput": { "alias": "maxItemsInput"; "required": false; }; "sizeInput": { "alias": "sizeInput"; "required": false; }; "ariaLabelInput": { "alias": "ariaLabelInput"; "required": false; }; }, {}, never, ["*"], true, never>;
|
|
2375
|
+
}
|
|
2376
|
+
|
|
2377
|
+
/**
|
|
2378
|
+
* AppHeaderComponent - Global application header for Life-Cockpit shell
|
|
2379
|
+
*
|
|
2380
|
+
* Features:
|
|
2381
|
+
* - Clickable logo for home navigation
|
|
2382
|
+
* - Optional title and subtitle display
|
|
2383
|
+
* - User profile dropdown with avatar, name, email, optional Profile link, and Logout
|
|
2384
|
+
* - Optional theme toggle button in header
|
|
2385
|
+
* - Hamburger menu toggle for mobile sidebar
|
|
2386
|
+
* - OnPush change detection for performance
|
|
2387
|
+
*
|
|
2388
|
+
* @example
|
|
2389
|
+
* ```html
|
|
2390
|
+
* <lc-header
|
|
2391
|
+
* [logo]="'/assets/logo.svg'"
|
|
2392
|
+
* [title]="'Life-Cockpit'"
|
|
2393
|
+
* [subtitle]="'User Profile'"
|
|
2394
|
+
* [userName]="'John Doe'"
|
|
2395
|
+
* [userEmail]="'user@example.com'"
|
|
2396
|
+
* [showHamburger]="true"
|
|
2397
|
+
* [showThemeButton]="true"
|
|
2398
|
+
* [showProfileMenuItem]="true"
|
|
2399
|
+
* (hamburgerClick)="toggleSidebar()"
|
|
2400
|
+
* (themeToggleClick)="toggleTheme()"
|
|
2401
|
+
* (profileClick)="navigateToProfile()"
|
|
2402
|
+
* (logoutClick)="handleLogout()"
|
|
2403
|
+
* />
|
|
2404
|
+
* ```
|
|
2405
|
+
*/
|
|
2406
|
+
declare class HeaderComponent {
|
|
2407
|
+
/**
|
|
2408
|
+
* Logo image source URL
|
|
2409
|
+
*/
|
|
2410
|
+
logo: string;
|
|
2411
|
+
/**
|
|
2412
|
+
* Optional title to display next to logo
|
|
2413
|
+
*/
|
|
2414
|
+
title: string;
|
|
2415
|
+
/**
|
|
2416
|
+
* Optional subtitle to display under title
|
|
2417
|
+
*/
|
|
2418
|
+
subtitle: string;
|
|
2419
|
+
/**
|
|
2420
|
+
* User email to display in profile dropdown
|
|
2421
|
+
*/
|
|
2422
|
+
userEmail: string;
|
|
2423
|
+
/**
|
|
2424
|
+
* User full name for avatar initials
|
|
2425
|
+
* @example 'John Doe'
|
|
2426
|
+
*/
|
|
2427
|
+
userName: string;
|
|
2428
|
+
/**
|
|
2429
|
+
* Whether to show hamburger menu icon (for mobile sidebar toggle)
|
|
2430
|
+
*/
|
|
2431
|
+
showHamburger: boolean;
|
|
2432
|
+
/**
|
|
2433
|
+
* Whether to show theme toggle button in header
|
|
2434
|
+
*/
|
|
2435
|
+
showThemeButton: boolean;
|
|
2436
|
+
/**
|
|
2437
|
+
* Whether to show the Profile menu item in the user dropdown
|
|
2438
|
+
* @default true
|
|
2439
|
+
*/
|
|
2440
|
+
showProfileMenuItem: boolean;
|
|
2441
|
+
/**
|
|
2442
|
+
* Emitted when hamburger menu icon is clicked
|
|
2443
|
+
*/
|
|
2444
|
+
readonly hamburgerClick: EventEmitter<void>;
|
|
2445
|
+
/**
|
|
2446
|
+
* Emitted when theme toggle is clicked
|
|
2447
|
+
*/
|
|
2448
|
+
readonly themeToggleClick: EventEmitter<void>;
|
|
2449
|
+
/**
|
|
2450
|
+
* Emitted when Logout is clicked in profile dropdown
|
|
2451
|
+
*/
|
|
2452
|
+
readonly logoutClick: EventEmitter<void>;
|
|
2453
|
+
/**
|
|
2454
|
+
* Emitted when Profile menu item is clicked
|
|
2455
|
+
*/
|
|
2456
|
+
readonly profileClick: EventEmitter<void>;
|
|
2457
|
+
protected readonly themeService: ThemeService;
|
|
2458
|
+
/**
|
|
2459
|
+
* Get menu items for profile dropdown
|
|
2460
|
+
*/
|
|
2461
|
+
protected readonly menuItems: _angular_core.Signal<MenuItem[]>;
|
|
2462
|
+
/**
|
|
2463
|
+
* Dropdown open state (using Angular signals)
|
|
2464
|
+
*/
|
|
2465
|
+
private readonly dropdownOpen;
|
|
2466
|
+
/**
|
|
2467
|
+
* Get dropdown open state
|
|
2468
|
+
*/
|
|
2469
|
+
isDropdownOpen(): boolean;
|
|
2470
|
+
/**
|
|
2471
|
+
* Toggle profile dropdown visibility
|
|
2472
|
+
*/
|
|
2473
|
+
toggleDropdown(): void;
|
|
2474
|
+
/**
|
|
2475
|
+
* Close profile dropdown
|
|
2476
|
+
*/
|
|
2477
|
+
closeDropdown(): void;
|
|
2478
|
+
/**
|
|
2479
|
+
* Handle hamburger click
|
|
2480
|
+
*/
|
|
2481
|
+
onHamburgerClick(): void;
|
|
2482
|
+
/**
|
|
2483
|
+
* Handle theme button click (separate button, not in menu)
|
|
2484
|
+
*/
|
|
2485
|
+
onThemeButtonClick(): void;
|
|
2486
|
+
/**
|
|
2487
|
+
* Handle logout click
|
|
2488
|
+
*/
|
|
2489
|
+
onLogoutClick(): void;
|
|
2490
|
+
/**
|
|
2491
|
+
* Handle profile click
|
|
2492
|
+
*/
|
|
2493
|
+
onProfileClick(): void;
|
|
2494
|
+
/**
|
|
2495
|
+
* Handle menu item click
|
|
2496
|
+
*/
|
|
2497
|
+
onMenuItemClick(item: MenuItem): void;
|
|
2498
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<HeaderComponent, never>;
|
|
2499
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<HeaderComponent, "lc-header", never, { "logo": { "alias": "logo"; "required": false; }; "title": { "alias": "title"; "required": false; }; "subtitle": { "alias": "subtitle"; "required": false; }; "userEmail": { "alias": "userEmail"; "required": false; }; "userName": { "alias": "userName"; "required": false; }; "showHamburger": { "alias": "showHamburger"; "required": false; }; "showThemeButton": { "alias": "showThemeButton"; "required": false; }; "showProfileMenuItem": { "alias": "showProfileMenuItem"; "required": false; }; }, { "hamburgerClick": "hamburgerClick"; "themeToggleClick": "themeToggleClick"; "logoutClick": "logoutClick"; "profileClick": "profileClick"; }, never, never, true, never>;
|
|
2500
|
+
}
|
|
2501
|
+
|
|
2502
|
+
type PaginationSize = 'sm' | 'md' | 'lg';
|
|
2503
|
+
/**
|
|
2504
|
+
* Pagination component for navigating through pages of content.
|
|
2505
|
+
*
|
|
2506
|
+
* Features:
|
|
2507
|
+
* - Configurable page size
|
|
2508
|
+
* - Previous/Next navigation
|
|
2509
|
+
* - Direct page number access
|
|
2510
|
+
* - Ellipsis for large page ranges
|
|
2511
|
+
* - Size variants (sm, md, lg)
|
|
2512
|
+
* - Accessible with ARIA attributes
|
|
2513
|
+
* - Optional item count display
|
|
2514
|
+
*
|
|
2515
|
+
* @example
|
|
2516
|
+
* ```html
|
|
2517
|
+
* <lc-pagination
|
|
2518
|
+
* [currentPageInput]="currentPage"
|
|
2519
|
+
* [totalItemsInput]="totalItems"
|
|
2520
|
+
* [pageSizeInput]="10"
|
|
2521
|
+
* (pageChange)="onPageChange($event)"
|
|
2522
|
+
* ></lc-pagination>
|
|
2523
|
+
* ```
|
|
2524
|
+
*/
|
|
2525
|
+
declare class PaginationComponent {
|
|
2526
|
+
currentPage: _angular_core.WritableSignal<number>;
|
|
2527
|
+
totalItems: _angular_core.WritableSignal<number>;
|
|
2528
|
+
pageSize: _angular_core.WritableSignal<number>;
|
|
2529
|
+
size: _angular_core.WritableSignal<PaginationSize>;
|
|
2530
|
+
maxVisiblePages: _angular_core.WritableSignal<number>;
|
|
2531
|
+
ariaLabel: _angular_core.WritableSignal<string>;
|
|
2532
|
+
showInfo: _angular_core.WritableSignal<boolean>;
|
|
2533
|
+
readonly pageChange: EventEmitter<number>;
|
|
2534
|
+
totalPages: _angular_core.Signal<number>;
|
|
2535
|
+
firstItemIndex: _angular_core.Signal<number>;
|
|
2536
|
+
lastItemIndex: _angular_core.Signal<number>;
|
|
2537
|
+
isFirstPage: _angular_core.Signal<boolean>;
|
|
2538
|
+
isLastPage: _angular_core.Signal<boolean>;
|
|
2539
|
+
paginationClasses: _angular_core.Signal<string>;
|
|
2540
|
+
/**
|
|
2541
|
+
* Calculate visible page numbers with ellipsis support
|
|
2542
|
+
* Returns an array where -1 represents an ellipsis
|
|
2543
|
+
*/
|
|
2544
|
+
visiblePages: _angular_core.Signal<number[]>;
|
|
2545
|
+
set currentPageInput(value: number);
|
|
2546
|
+
set totalItemsInput(value: number);
|
|
2547
|
+
set pageSizeInput(value: number);
|
|
2548
|
+
set sizeInput(value: PaginationSize);
|
|
2549
|
+
set maxVisiblePagesInput(value: number);
|
|
2550
|
+
set ariaLabelInput(value: string);
|
|
2551
|
+
set showInfoInput(value: boolean);
|
|
2552
|
+
goToPreviousPage(): void;
|
|
2553
|
+
goToNextPage(): void;
|
|
2554
|
+
goToPage(page: number): void;
|
|
2555
|
+
isCurrentPage(page: number): boolean;
|
|
2556
|
+
isEllipsis(page: number): boolean;
|
|
2557
|
+
shouldRender(): boolean;
|
|
2558
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<PaginationComponent, never>;
|
|
2559
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<PaginationComponent, "lc-pagination", never, { "currentPageInput": { "alias": "currentPageInput"; "required": false; }; "totalItemsInput": { "alias": "totalItemsInput"; "required": false; }; "pageSizeInput": { "alias": "pageSizeInput"; "required": false; }; "sizeInput": { "alias": "sizeInput"; "required": false; }; "maxVisiblePagesInput": { "alias": "maxVisiblePagesInput"; "required": false; }; "ariaLabelInput": { "alias": "ariaLabelInput"; "required": false; }; "showInfoInput": { "alias": "showInfoInput"; "required": false; }; }, { "pageChange": "pageChange"; }, never, never, true, never>;
|
|
2560
|
+
}
|
|
2561
|
+
|
|
2562
|
+
type SidenavPosition = 'left' | 'right';
|
|
2563
|
+
type SidenavMode = 'drawer' | 'docked';
|
|
2564
|
+
/**
|
|
2565
|
+
* Sidenav Component
|
|
2566
|
+
*
|
|
2567
|
+
* A navigation component that can work as either a drawer (overlay) or
|
|
2568
|
+
* a docked (persistent) sidebar. Supports section headlines, collapsible
|
|
2569
|
+
* groups, keyboard navigation, and accessibility features.
|
|
2570
|
+
*
|
|
2571
|
+
* @example Drawer mode (default — overlay that slides in)
|
|
2572
|
+
* ```html
|
|
2573
|
+
* <lc-sidenav
|
|
2574
|
+
* [isOpen]="isOpen"
|
|
2575
|
+
* mode="drawer"
|
|
2576
|
+
* (closed)="handleClose()">
|
|
2577
|
+
* </lc-sidenav>
|
|
2578
|
+
* ```
|
|
2579
|
+
*
|
|
2580
|
+
* @example Docked mode (persistent sidebar that stays open)
|
|
2581
|
+
* ```html
|
|
2582
|
+
* <lc-sidenav
|
|
2583
|
+
* [isOpen]="sidebarOpen"
|
|
2584
|
+
* mode="docked"
|
|
2585
|
+
* [items]="navItems"
|
|
2586
|
+
* (closed)="sidebarOpen = false">
|
|
2587
|
+
* </lc-sidenav>
|
|
2588
|
+
* ```
|
|
2589
|
+
*/
|
|
2590
|
+
declare class SidenavComponent {
|
|
2591
|
+
/** Whether the sidenav is open */
|
|
2592
|
+
isOpen: _angular_core.WritableSignal<boolean>;
|
|
2593
|
+
/** Display mode: 'drawer' (overlay) or 'docked' (persistent sidebar) */
|
|
2594
|
+
mode: _angular_core.WritableSignal<SidenavMode>;
|
|
2595
|
+
/** Position of the sidenav (left or right) */
|
|
2596
|
+
position: _angular_core.WritableSignal<SidenavPosition>;
|
|
2597
|
+
/** Width of the sidenav drawer */
|
|
2598
|
+
width: _angular_core.WritableSignal<string>;
|
|
2599
|
+
/** ARIA label for the sidenav */
|
|
2600
|
+
ariaLabel: _angular_core.WritableSignal<string>;
|
|
2601
|
+
/** Whether to show the overlay backdrop */
|
|
2602
|
+
hasOverlay: _angular_core.WritableSignal<boolean>;
|
|
2603
|
+
/** Navigation items to display */
|
|
2604
|
+
items: _angular_core.WritableSignal<NavigationItem[]>;
|
|
2605
|
+
/** Current active route for highlighting */
|
|
2606
|
+
activeRoute: _angular_core.WritableSignal<string>;
|
|
2607
|
+
/** Track which parent items are expanded */
|
|
2608
|
+
expandedItems: _angular_core.WritableSignal<Set<string>>;
|
|
2609
|
+
/**
|
|
2610
|
+
* Computed sorted navigation items by displayOrder
|
|
2611
|
+
*/
|
|
2612
|
+
sortedItems: _angular_core.Signal<NavigationItem[]>;
|
|
2613
|
+
/**
|
|
2614
|
+
* Input setter for isOpen
|
|
2615
|
+
*/
|
|
2616
|
+
set isOpenInput(value: boolean);
|
|
2617
|
+
/**
|
|
2618
|
+
* Input setter for mode
|
|
2619
|
+
*/
|
|
2620
|
+
set modeInput(value: SidenavMode);
|
|
2621
|
+
/**
|
|
2622
|
+
* Input setter for position
|
|
2623
|
+
*/
|
|
2624
|
+
set positionInput(value: SidenavPosition);
|
|
2625
|
+
/**
|
|
2626
|
+
* Input setter for width
|
|
2627
|
+
*/
|
|
2628
|
+
set widthInput(value: string);
|
|
2629
|
+
/**
|
|
2630
|
+
* Input setter for ariaLabel
|
|
2631
|
+
*/
|
|
2632
|
+
set ariaLabelInput(value: string);
|
|
2633
|
+
/**
|
|
2634
|
+
* Input setter for hasOverlay
|
|
2635
|
+
*/
|
|
2636
|
+
set hasOverlayInput(value: boolean);
|
|
2637
|
+
/**
|
|
2638
|
+
* Input setter for navigation items
|
|
2639
|
+
*/
|
|
2640
|
+
set itemsInput(value: NavigationItem[]);
|
|
2641
|
+
/**
|
|
2642
|
+
* Input setter for active route
|
|
2643
|
+
*/
|
|
2644
|
+
set activeRouteInput(value: string);
|
|
2645
|
+
/**
|
|
2646
|
+
* Event emitted when the sidenav should close
|
|
2647
|
+
*/
|
|
2648
|
+
readonly closed: EventEmitter<void>;
|
|
2649
|
+
/**
|
|
2650
|
+
* Event emitted when a navigation item is clicked
|
|
2651
|
+
*/
|
|
2652
|
+
readonly itemClicked: EventEmitter<NavigationItem>;
|
|
2653
|
+
/**
|
|
2654
|
+
* Computed CSS classes for the sidenav
|
|
2655
|
+
*/
|
|
2656
|
+
sidenavClasses: _angular_core.Signal<string>;
|
|
2657
|
+
/**
|
|
2658
|
+
* Computed inline styles for the sidenav
|
|
2659
|
+
*/
|
|
2660
|
+
sidenavStyles: _angular_core.Signal<{
|
|
2661
|
+
width: string;
|
|
2662
|
+
}>;
|
|
2663
|
+
/**
|
|
2664
|
+
* Handle close action
|
|
2665
|
+
*/
|
|
2666
|
+
handleClose(): void;
|
|
2667
|
+
/**
|
|
2668
|
+
* Handle navigation item click
|
|
2669
|
+
*/
|
|
2670
|
+
handleItemClick(item: NavigationItem): void;
|
|
2671
|
+
/**
|
|
2672
|
+
* Check if an item is active
|
|
2673
|
+
*/
|
|
2674
|
+
isItemActive(item: NavigationItem): boolean;
|
|
2675
|
+
/**
|
|
2676
|
+
* Check if a parent item has an active child
|
|
2677
|
+
*/
|
|
2678
|
+
hasActiveChild(item: NavigationItem): boolean;
|
|
2679
|
+
/**
|
|
2680
|
+
* Toggle expansion of a parent item
|
|
2681
|
+
*/
|
|
2682
|
+
toggleExpanded(item: NavigationItem): void;
|
|
2683
|
+
/**
|
|
2684
|
+
* Check if an item is expanded
|
|
2685
|
+
*/
|
|
2686
|
+
isExpanded(item: NavigationItem): boolean;
|
|
2687
|
+
/**
|
|
2688
|
+
* Handle keyboard navigation
|
|
2689
|
+
*/
|
|
2690
|
+
handleKeydown(event: KeyboardEvent): void;
|
|
2691
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SidenavComponent, never>;
|
|
2692
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<SidenavComponent, "lc-sidenav", never, { "isOpenInput": { "alias": "isOpenInput"; "required": false; }; "modeInput": { "alias": "modeInput"; "required": false; }; "positionInput": { "alias": "positionInput"; "required": false; }; "widthInput": { "alias": "widthInput"; "required": false; }; "ariaLabelInput": { "alias": "ariaLabelInput"; "required": false; }; "hasOverlayInput": { "alias": "hasOverlayInput"; "required": false; }; "itemsInput": { "alias": "itemsInput"; "required": false; }; "activeRouteInput": { "alias": "activeRouteInput"; "required": false; }; }, { "closed": "closed"; "itemClicked": "itemClicked"; }, never, ["*"], true, never>;
|
|
2693
|
+
}
|
|
2694
|
+
|
|
2695
|
+
type TabOrientation = 'horizontal' | 'vertical';
|
|
2696
|
+
/**
|
|
2697
|
+
* Individual tab component
|
|
2698
|
+
*/
|
|
2699
|
+
declare class TabComponent {
|
|
2700
|
+
/**
|
|
2701
|
+
* Tab label displayed in tab button
|
|
2702
|
+
*/
|
|
2703
|
+
label: string;
|
|
2704
|
+
/**
|
|
2705
|
+
* Whether the tab is disabled
|
|
2706
|
+
* @default false
|
|
2707
|
+
*/
|
|
2708
|
+
disabled: boolean;
|
|
2709
|
+
/**
|
|
2710
|
+
* Optional icon name (Heroicons)
|
|
2711
|
+
*/
|
|
2712
|
+
icon?: string;
|
|
2713
|
+
/**
|
|
2714
|
+
* Unique ID for accessibility
|
|
2715
|
+
*/
|
|
2716
|
+
readonly id: string;
|
|
2717
|
+
/**
|
|
2718
|
+
* Unique ID for the panel
|
|
2719
|
+
*/
|
|
2720
|
+
readonly panelId: string;
|
|
2721
|
+
/**
|
|
2722
|
+
* Template reference for tab content
|
|
2723
|
+
*/
|
|
2724
|
+
template: TemplateRef<unknown>;
|
|
2725
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<TabComponent, never>;
|
|
2726
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<TabComponent, "lc-tab", never, { "label": { "alias": "label"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "icon": { "alias": "icon"; "required": false; }; }, {}, never, ["*"], true, never>;
|
|
2727
|
+
}
|
|
2728
|
+
/**
|
|
2729
|
+
* Tabs component for organizing content into switchable views.
|
|
2730
|
+
*
|
|
2731
|
+
* @example
|
|
2732
|
+
* ```html
|
|
2733
|
+
* <lc-tabs>
|
|
2734
|
+
* <lc-tab label="Account">Account settings</lc-tab>
|
|
2735
|
+
* <lc-tab label="Privacy">Privacy settings</lc-tab>
|
|
2736
|
+
* <lc-tab label="Security">Security settings</lc-tab>
|
|
2737
|
+
* </lc-tabs>
|
|
2738
|
+
* ```
|
|
2739
|
+
*/
|
|
2740
|
+
declare class TabsComponent implements AfterContentInit {
|
|
2741
|
+
/**
|
|
2742
|
+
* Orientation input property
|
|
2743
|
+
* @default 'horizontal'
|
|
2744
|
+
*/
|
|
2745
|
+
set orientation(value: TabOrientation);
|
|
2746
|
+
get orientation(): TabOrientation;
|
|
2747
|
+
/**
|
|
2748
|
+
* Currently selected tab index
|
|
2749
|
+
* @default 0
|
|
2750
|
+
*/
|
|
2751
|
+
readonly selectedIndex: _angular_core.WritableSignal<number>;
|
|
2752
|
+
/**
|
|
2753
|
+
* Emitted when selected tab changes
|
|
2754
|
+
*/
|
|
2755
|
+
readonly selectedIndexChange: EventEmitter<number>;
|
|
2756
|
+
/**
|
|
2757
|
+
* Tab components
|
|
2758
|
+
*/
|
|
2759
|
+
tabs: QueryList<TabComponent>;
|
|
2760
|
+
/**
|
|
2761
|
+
* Tab list for template access
|
|
2762
|
+
*/
|
|
2763
|
+
readonly tabList: _angular_core.Signal<TabComponent[]>;
|
|
2764
|
+
/**
|
|
2765
|
+
* CSS classes for tab list
|
|
2766
|
+
*/
|
|
2767
|
+
readonly tabListClasses: _angular_core.Signal<{
|
|
2768
|
+
'lc-tabs__list': boolean;
|
|
2769
|
+
'lc-tabs--horizontal': boolean;
|
|
2770
|
+
'lc-tabs--vertical': boolean;
|
|
2771
|
+
}>;
|
|
2772
|
+
/**
|
|
2773
|
+
* Orientation of tabs (internal signal)
|
|
2774
|
+
* @default 'horizontal'
|
|
2775
|
+
*/
|
|
2776
|
+
private readonly _orientation;
|
|
2777
|
+
/**
|
|
2778
|
+
* Track tab registration
|
|
2779
|
+
*/
|
|
2780
|
+
private registeredTabs;
|
|
2781
|
+
/**
|
|
2782
|
+
* Set selected index input
|
|
2783
|
+
*/
|
|
2784
|
+
set selectedIndexInput(value: number);
|
|
2785
|
+
constructor();
|
|
2786
|
+
ngAfterContentInit(): void;
|
|
2787
|
+
/**
|
|
2788
|
+
* Register a tab
|
|
2789
|
+
*/
|
|
2790
|
+
registerTab(tab: {
|
|
2791
|
+
label: string;
|
|
2792
|
+
disabled: boolean;
|
|
2793
|
+
}): void;
|
|
2794
|
+
/**
|
|
2795
|
+
* Select a tab by index
|
|
2796
|
+
*/
|
|
2797
|
+
selectTab(index: number): void;
|
|
2798
|
+
/**
|
|
2799
|
+
* Check if tab is selected
|
|
2800
|
+
*/
|
|
2801
|
+
isSelected(index: number): boolean;
|
|
2802
|
+
/**
|
|
2803
|
+
* Handle keyboard navigation
|
|
2804
|
+
*/
|
|
2805
|
+
handleKeyDown(event: KeyboardEvent): void;
|
|
2806
|
+
/**
|
|
2807
|
+
* Get tabindex for tab button
|
|
2808
|
+
*/
|
|
2809
|
+
getTabIndex(index: number): number;
|
|
2810
|
+
/**
|
|
2811
|
+
* Get next enabled tab index (with wrapping)
|
|
2812
|
+
*/
|
|
2813
|
+
private getNextEnabledTab;
|
|
2814
|
+
/**
|
|
2815
|
+
* Get previous enabled tab index (with wrapping)
|
|
2816
|
+
*/
|
|
2817
|
+
private getPreviousEnabledTab;
|
|
2818
|
+
/**
|
|
2819
|
+
* Get first enabled tab index
|
|
2820
|
+
*/
|
|
2821
|
+
private getFirstEnabledTab;
|
|
2822
|
+
/**
|
|
2823
|
+
* Get last enabled tab index
|
|
2824
|
+
*/
|
|
2825
|
+
private getLastEnabledTab;
|
|
2826
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<TabsComponent, never>;
|
|
2827
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<TabsComponent, "lc-tabs", never, { "orientation": { "alias": "orientation"; "required": false; }; "selectedIndexInput": { "alias": "selectedIndexInput"; "required": false; }; }, { "selectedIndexChange": "selectedIndexChange"; }, ["tabs"], never, true, never>;
|
|
2828
|
+
}
|
|
2829
|
+
|
|
2830
|
+
type AvatarSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
|
|
2831
|
+
type AvatarStatus = 'online' | 'offline' | 'away' | 'busy';
|
|
2832
|
+
/**
|
|
2833
|
+
* Avatar Component
|
|
2834
|
+
*
|
|
2835
|
+
* A circular user representation component displaying images or initials.
|
|
2836
|
+
* Supports status indicators and multiple sizes.
|
|
2837
|
+
*
|
|
2838
|
+
* @example
|
|
2839
|
+
* ```html
|
|
2840
|
+
* <!-- With image -->
|
|
2841
|
+
* <lc-avatar src="https://example.com/avatar.jpg" alt="John Doe" />
|
|
2842
|
+
*
|
|
2843
|
+
* <!-- With initials -->
|
|
2844
|
+
* <lc-avatar name="John Doe" />
|
|
2845
|
+
*
|
|
2846
|
+
* <!-- With status indicator -->
|
|
2847
|
+
* <lc-avatar name="Jane Smith" status="online" size="lg" />
|
|
2848
|
+
* ```
|
|
2849
|
+
*/
|
|
2850
|
+
declare class AvatarComponent {
|
|
2851
|
+
/** Image source URL */
|
|
2852
|
+
src: _angular_core.InputSignal<string | undefined>;
|
|
2853
|
+
/** Alt text for the image */
|
|
2854
|
+
alt: _angular_core.InputSignal<string | undefined>;
|
|
2855
|
+
/** Full name for generating initials */
|
|
2856
|
+
name: _angular_core.InputSignal<string | undefined>;
|
|
2857
|
+
/** Size of the avatar */
|
|
2858
|
+
size: _angular_core.InputSignal<AvatarSize>;
|
|
2859
|
+
/** Status indicator */
|
|
2860
|
+
status: _angular_core.InputSignal<AvatarStatus | undefined>;
|
|
2861
|
+
/**
|
|
2862
|
+
* Computed initials from name
|
|
2863
|
+
*/
|
|
2864
|
+
initials: _angular_core.Signal<string>;
|
|
2865
|
+
/**
|
|
2866
|
+
* Computed CSS classes for the avatar
|
|
2867
|
+
*/
|
|
2868
|
+
avatarClasses: _angular_core.Signal<string>;
|
|
2869
|
+
/**
|
|
2870
|
+
* Get aria-label for accessibility
|
|
2871
|
+
*/
|
|
2872
|
+
ariaLabel: _angular_core.Signal<string>;
|
|
2873
|
+
/**
|
|
2874
|
+
* Check if image should be displayed
|
|
2875
|
+
*/
|
|
2876
|
+
showImage: _angular_core.Signal<boolean | "" | undefined>;
|
|
2877
|
+
/** Track if image failed to load */
|
|
2878
|
+
protected imageError: _angular_core.WritableSignal<boolean>;
|
|
2879
|
+
/**
|
|
2880
|
+
* Handle image load error
|
|
2881
|
+
*/
|
|
2882
|
+
onImageError(): void;
|
|
2883
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AvatarComponent, never>;
|
|
2884
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AvatarComponent, "lc-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; }; "status": { "alias": "status"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
2885
|
+
}
|
|
2886
|
+
|
|
2887
|
+
type BadgeVariant = 'default' | 'primary' | 'success' | 'warning' | 'error' | 'info';
|
|
2888
|
+
type BadgeSize = 'xs' | 'sm' | 'md' | 'lg';
|
|
2889
|
+
/**
|
|
2890
|
+
* Badge Component
|
|
2891
|
+
*
|
|
2892
|
+
* A small count and labeling component used to display status, notifications, or counts.
|
|
2893
|
+
*
|
|
2894
|
+
* @example
|
|
2895
|
+
* ```html
|
|
2896
|
+
* <lc-badge variant="primary" size="md">New</lc-badge>
|
|
2897
|
+
* <lc-badge variant="error" size="sm" [rounded]="true">5</lc-badge>
|
|
2898
|
+
* ```
|
|
2899
|
+
*/
|
|
2900
|
+
declare class BadgeComponent {
|
|
2901
|
+
/** Visual variant of the badge */
|
|
2902
|
+
variant: _angular_core.InputSignal<BadgeVariant>;
|
|
2903
|
+
/** Size of the badge */
|
|
2904
|
+
size: _angular_core.InputSignal<BadgeSize>;
|
|
2905
|
+
/** Whether the badge has fully rounded corners (pill shape) */
|
|
2906
|
+
rounded: _angular_core.InputSignal<boolean>;
|
|
2907
|
+
/**
|
|
2908
|
+
* Computed CSS classes for the badge
|
|
2909
|
+
*/
|
|
2910
|
+
badgeClasses: _angular_core.Signal<string>;
|
|
2911
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<BadgeComponent, never>;
|
|
2912
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<BadgeComponent, "lc-badge", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "rounded": { "alias": "rounded"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
2913
|
+
}
|
|
2914
|
+
|
|
2915
|
+
type TrendDirection = 'up' | 'down' | 'flat';
|
|
2916
|
+
/**
|
|
2917
|
+
* MetricCard Component
|
|
2918
|
+
*
|
|
2919
|
+
* Displays a single KPI value with label, trend arrow, and optional icon.
|
|
2920
|
+
* Built on top of `lc-card` (outlined variant) for consistent card styling.
|
|
2921
|
+
*
|
|
2922
|
+
* @example
|
|
2923
|
+
* ```html
|
|
2924
|
+
* <lc-metric-card
|
|
2925
|
+
* label="Portfolio Equity"
|
|
2926
|
+
* value="$125,430"
|
|
2927
|
+
* trend="up"
|
|
2928
|
+
* trendValue="+2.4%"
|
|
2929
|
+
* icon="arrow-trending-up"
|
|
2930
|
+
* ></lc-metric-card>
|
|
2931
|
+
* ```
|
|
2932
|
+
*/
|
|
2933
|
+
declare class MetricCardComponent {
|
|
2934
|
+
/** Label displayed above the value */
|
|
2935
|
+
label: _angular_core.InputSignal<string>;
|
|
2936
|
+
/** Formatted value to display */
|
|
2937
|
+
value: _angular_core.InputSignal<string>;
|
|
2938
|
+
/** Trend direction for arrow indicator */
|
|
2939
|
+
trend: _angular_core.InputSignal<TrendDirection>;
|
|
2940
|
+
/** Formatted trend value (e.g., "+2.4%") */
|
|
2941
|
+
trendValue: _angular_core.InputSignal<string>;
|
|
2942
|
+
/** Optional Heroicon name */
|
|
2943
|
+
icon: _angular_core.InputSignal<string>;
|
|
2944
|
+
/** Trend arrow character */
|
|
2945
|
+
trendArrow: _angular_core.Signal<"↑" | "↓" | "→">;
|
|
2946
|
+
/** Tailwind classes for trend color */
|
|
2947
|
+
trendClasses: _angular_core.Signal<"text-green-600 dark:text-green-400" | "text-red-600 dark:text-red-400" | "text-gray-500 dark:text-gray-400">;
|
|
2948
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<MetricCardComponent, never>;
|
|
2949
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<MetricCardComponent, "lc-metric-card", never, { "label": { "alias": "label"; "required": true; "isSignal": true; }; "value": { "alias": "value"; "required": true; "isSignal": true; }; "trend": { "alias": "trend"; "required": false; "isSignal": true; }; "trendValue": { "alias": "trendValue"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
2950
|
+
}
|
|
2951
|
+
|
|
2952
|
+
interface ToggleOption {
|
|
2953
|
+
readonly value: string;
|
|
2954
|
+
readonly label: string;
|
|
2955
|
+
readonly disabled?: boolean;
|
|
2956
|
+
}
|
|
2957
|
+
/**
|
|
2958
|
+
* ToggleGroup Component
|
|
2959
|
+
*
|
|
2960
|
+
* Binary or multi-option toggle with active state styling.
|
|
2961
|
+
* Uses Tailwind classes with dark mode support.
|
|
2962
|
+
*
|
|
2963
|
+
* @example
|
|
2964
|
+
* ```html
|
|
2965
|
+
* <lc-toggle-group
|
|
2966
|
+
* [options]="[{value:'1D',label:'1D'},{value:'1h',label:'1H'}]"
|
|
2967
|
+
* [(selected)]="interval"
|
|
2968
|
+
* ></lc-toggle-group>
|
|
2969
|
+
* ```
|
|
2970
|
+
*/
|
|
2971
|
+
declare class ToggleGroupComponent {
|
|
2972
|
+
/** Available toggle options */
|
|
2973
|
+
options: _angular_core.InputSignal<readonly ToggleOption[]>;
|
|
2974
|
+
/** Currently selected value (two-way binding) */
|
|
2975
|
+
selected: _angular_core.ModelSignal<string>;
|
|
2976
|
+
/** Size variant */
|
|
2977
|
+
size: _angular_core.InputSignal<"sm" | "md" | "lg">;
|
|
2978
|
+
/** Emitted when selection changes */
|
|
2979
|
+
selectionChange: _angular_core.OutputEmitterRef<string>;
|
|
2980
|
+
/** Computed size class */
|
|
2981
|
+
sizeClass: _angular_core.Signal<string>;
|
|
2982
|
+
/** Select an option */
|
|
2983
|
+
select(option: ToggleOption): void;
|
|
2984
|
+
/** Check if an option is active */
|
|
2985
|
+
isActive(option: ToggleOption): boolean;
|
|
2986
|
+
/** Get button classes */
|
|
2987
|
+
getButtonClasses(option: ToggleOption): string;
|
|
2988
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ToggleGroupComponent, never>;
|
|
2989
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ToggleGroupComponent, "lc-toggle-group", never, { "options": { "alias": "options"; "required": true; "isSignal": true; }; "selected": { "alias": "selected"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; }, { "selected": "selectedChange"; "selectionChange": "selectionChange"; }, never, never, true, never>;
|
|
2990
|
+
}
|
|
2991
|
+
|
|
2992
|
+
/**
|
|
2993
|
+
* Directive for providing a custom template to render each list item.
|
|
2994
|
+
*
|
|
2995
|
+
* @example
|
|
2996
|
+
* ```html
|
|
2997
|
+
* <lc-list [items]="runs()" (itemClick)="onRunClick($event)">
|
|
2998
|
+
* <ng-template lcListItem let-item>
|
|
2999
|
+
* <lc-badge [variant]="getStatusVariant(item.status)">{{ item.status }}</lc-badge>
|
|
3000
|
+
* <span>{{ item.symbol }}</span>
|
|
3001
|
+
* <span class="text-sm text-neutral-500">{{ item.date }}</span>
|
|
3002
|
+
* </ng-template>
|
|
3003
|
+
* </lc-list>
|
|
3004
|
+
* ```
|
|
3005
|
+
*/
|
|
3006
|
+
declare class ListItemTemplateDirective {
|
|
3007
|
+
readonly template: TemplateRef<any>;
|
|
3008
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ListItemTemplateDirective, never>;
|
|
3009
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ListItemTemplateDirective, "[lcListItem]", never, {}, {}, never, never, true, never>;
|
|
3010
|
+
}
|
|
3011
|
+
|
|
3012
|
+
/**
|
|
3013
|
+
* List orientation type
|
|
3014
|
+
*/
|
|
3015
|
+
type ListOrientation = 'vertical' | 'horizontal';
|
|
3016
|
+
/**
|
|
3017
|
+
* List visual variant
|
|
3018
|
+
* - default: flat rows (original)
|
|
3019
|
+
* - card: each item rendered as a mini-card with border, radius and shadow on hover
|
|
3020
|
+
*/
|
|
3021
|
+
type ListVariant = 'default' | 'card';
|
|
3022
|
+
/**
|
|
3023
|
+
* List item interface
|
|
3024
|
+
*/
|
|
3025
|
+
interface ListItem {
|
|
3026
|
+
/** Item label text */
|
|
3027
|
+
label: string;
|
|
3028
|
+
/** Optional icon identifier */
|
|
3029
|
+
icon?: string;
|
|
3030
|
+
/** Optional action label */
|
|
3031
|
+
action?: string;
|
|
3032
|
+
/** Item identifier */
|
|
3033
|
+
id?: string;
|
|
3034
|
+
/** Whether the item is disabled */
|
|
3035
|
+
disabled?: boolean;
|
|
3036
|
+
/** Any additional data */
|
|
3037
|
+
[key: string]: any;
|
|
3038
|
+
}
|
|
3039
|
+
/**
|
|
3040
|
+
* List Component
|
|
3041
|
+
*
|
|
3042
|
+
* A flexible list component that supports vertical/horizontal layouts,
|
|
3043
|
+
* icons, actions, and dividers.
|
|
3044
|
+
*
|
|
3045
|
+
* @example
|
|
3046
|
+
* ```html
|
|
3047
|
+
* <lc-list
|
|
3048
|
+
* [items]="listItems"
|
|
3049
|
+
* orientation="vertical"
|
|
3050
|
+
* [showDividers]="true"
|
|
3051
|
+
* (itemClick)="handleItemClick($event)"
|
|
3052
|
+
* (actionClick)="handleActionClick($event)"
|
|
3053
|
+
* />
|
|
3054
|
+
* ```
|
|
3055
|
+
*/
|
|
3056
|
+
declare class ListComponent {
|
|
3057
|
+
/** Custom item template provided via lcListItem directive */
|
|
3058
|
+
itemTemplate?: ListItemTemplateDirective;
|
|
3059
|
+
/** Array of list items to display */
|
|
3060
|
+
items: _angular_core.InputSignal<ListItem[]>;
|
|
3061
|
+
/** Orientation of the list */
|
|
3062
|
+
orientation: _angular_core.InputSignal<ListOrientation>;
|
|
3063
|
+
/** Visual variant */
|
|
3064
|
+
variant: _angular_core.InputSignal<ListVariant>;
|
|
3065
|
+
/** Whether to show dividers between items */
|
|
3066
|
+
showDividers: _angular_core.InputSignal<boolean>;
|
|
3067
|
+
/** Event emitted when an item is clicked */
|
|
3068
|
+
readonly itemClick: _angular_core.OutputEmitterRef<ListItem>;
|
|
3069
|
+
/** Event emitted when an action button is clicked */
|
|
3070
|
+
readonly actionClick: _angular_core.OutputEmitterRef<ListItem>;
|
|
3071
|
+
/**
|
|
3072
|
+
* Computed CSS classes for the list
|
|
3073
|
+
*/
|
|
3074
|
+
listClasses: _angular_core.Signal<string>;
|
|
3075
|
+
/**
|
|
3076
|
+
* Get CSS classes for a list item
|
|
3077
|
+
*/
|
|
3078
|
+
getItemClasses(item: ListItem): string;
|
|
3079
|
+
/**
|
|
3080
|
+
* Handle item click
|
|
3081
|
+
*/
|
|
3082
|
+
onItemClick(item: ListItem): void;
|
|
3083
|
+
/**
|
|
3084
|
+
* Handle action button click
|
|
3085
|
+
*/
|
|
3086
|
+
onActionClick(item: ListItem): void;
|
|
3087
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ListComponent, never>;
|
|
3088
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ListComponent, "lc-list", never, { "items": { "alias": "items"; "required": false; "isSignal": true; }; "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "showDividers": { "alias": "showDividers"; "required": false; "isSignal": true; }; }, { "itemClick": "itemClick"; "actionClick": "actionClick"; }, ["itemTemplate"], never, true, never>;
|
|
3089
|
+
}
|
|
3090
|
+
|
|
3091
|
+
type ChipVariant = 'default' | 'primary' | 'success' | 'warning' | 'error' | 'info';
|
|
3092
|
+
type ChipSize = 'sm' | 'md' | 'lg';
|
|
3093
|
+
/**
|
|
3094
|
+
* Chip Component
|
|
3095
|
+
*
|
|
3096
|
+
* A pill-shaped removable tag component for displaying selections, filters, or tags.
|
|
3097
|
+
* Supports icons, color variants, and optional delete functionality.
|
|
3098
|
+
*
|
|
3099
|
+
* @example
|
|
3100
|
+
* ```html
|
|
3101
|
+
* <lc-chip variant="primary" size="md" [removable]="true" (remove)="handleRemove()">
|
|
3102
|
+
* <span lcChipIcon>🏷️</span>
|
|
3103
|
+
* Tag Name
|
|
3104
|
+
* </lc-chip>
|
|
3105
|
+
* ```
|
|
3106
|
+
*/
|
|
3107
|
+
declare class ChipComponent {
|
|
3108
|
+
/** Visual variant of the chip */
|
|
3109
|
+
variant: _angular_core.InputSignal<ChipVariant>;
|
|
3110
|
+
/** Size of the chip */
|
|
3111
|
+
size: _angular_core.InputSignal<ChipSize>;
|
|
3112
|
+
/** Icon name from Heroicons */
|
|
3113
|
+
icon: _angular_core.InputSignal<string | undefined>;
|
|
3114
|
+
/** Whether the chip can be removed */
|
|
3115
|
+
removable: _angular_core.InputSignal<boolean>;
|
|
3116
|
+
/** Whether the chip is disabled */
|
|
3117
|
+
disabled: _angular_core.InputSignal<boolean>;
|
|
3118
|
+
/** Emitted when the chip is removed */
|
|
3119
|
+
readonly remove: _angular_core.OutputEmitterRef<void>;
|
|
3120
|
+
/**
|
|
3121
|
+
* Computed CSS classes for the chip
|
|
3122
|
+
*/
|
|
3123
|
+
chipClasses: _angular_core.Signal<string>;
|
|
3124
|
+
/**
|
|
3125
|
+
* Handle remove button click
|
|
3126
|
+
*/
|
|
3127
|
+
onRemove(event: Event): void;
|
|
3128
|
+
/**
|
|
3129
|
+
* Handle keyboard navigation
|
|
3130
|
+
*/
|
|
3131
|
+
onKeydown(event: KeyboardEvent): void;
|
|
3132
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ChipComponent, never>;
|
|
3133
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ChipComponent, "lc-chip", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "removable": { "alias": "removable"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, { "remove": "remove"; }, never, ["*"], true, never>;
|
|
3134
|
+
}
|
|
3135
|
+
|
|
3136
|
+
/**
|
|
3137
|
+
* Directive for defining custom cell templates in the Table component.
|
|
3138
|
+
*
|
|
3139
|
+
* @example
|
|
3140
|
+
* ```html
|
|
3141
|
+
* <lc-table [columns]="columns" [data]="data">
|
|
3142
|
+
* <ng-template lcTableCell="status" let-row>
|
|
3143
|
+
* <lc-badge [variant]="row.status">{{ row.status }}</lc-badge>
|
|
3144
|
+
* </ng-template>
|
|
3145
|
+
* </lc-table>
|
|
3146
|
+
* ```
|
|
3147
|
+
*/
|
|
3148
|
+
declare class TableCellDirective {
|
|
3149
|
+
/** The column key this template applies to */
|
|
3150
|
+
columnKey: string;
|
|
3151
|
+
template: TemplateRef<any>;
|
|
3152
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<TableCellDirective, never>;
|
|
3153
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<TableCellDirective, "[lcTableCell]", never, { "columnKey": { "alias": "lcTableCell"; "required": false; }; }, {}, never, never, true, never>;
|
|
3154
|
+
}
|
|
3155
|
+
|
|
3156
|
+
interface TableColumn {
|
|
3157
|
+
key: string;
|
|
3158
|
+
label: string;
|
|
3159
|
+
sortable?: boolean;
|
|
3160
|
+
width?: string;
|
|
3161
|
+
/** Optional CSS class(es) applied to both th and td cells */
|
|
3162
|
+
cssClass?: string;
|
|
3163
|
+
/** Optional tooltip shown on hover over the column header */
|
|
3164
|
+
tooltip?: string;
|
|
3165
|
+
}
|
|
3166
|
+
interface SortEvent {
|
|
3167
|
+
column: string;
|
|
3168
|
+
direction: 'asc' | 'desc';
|
|
3169
|
+
}
|
|
3170
|
+
type TableVariant = 'default' | 'striped' | 'bordered';
|
|
3171
|
+
type TableSize = 'sm' | 'md' | 'lg';
|
|
3172
|
+
/**
|
|
3173
|
+
* Table Component
|
|
3174
|
+
*
|
|
3175
|
+
* A flexible, accessible data table component with sorting, variants, and responsive behavior.
|
|
3176
|
+
*
|
|
3177
|
+
* @example
|
|
3178
|
+
* ```html
|
|
3179
|
+
* <lc-table
|
|
3180
|
+
* [columns]="columns"
|
|
3181
|
+
* [data]="data"
|
|
3182
|
+
* variant="striped"
|
|
3183
|
+
* [hoverable]="true"
|
|
3184
|
+
* (sort)="onSort($event)">
|
|
3185
|
+
* </lc-table>
|
|
3186
|
+
*
|
|
3187
|
+
* <!-- With custom cell templates -->
|
|
3188
|
+
* <lc-table [columns]="columns" [data]="data">
|
|
3189
|
+
* <ng-template lcTableCell="status" let-row>
|
|
3190
|
+
* <lc-badge [variant]="row.status">{{ row.status }}</lc-badge>
|
|
3191
|
+
* </ng-template>
|
|
3192
|
+
* </lc-table>
|
|
3193
|
+
* ```
|
|
3194
|
+
*/
|
|
3195
|
+
declare class TableComponent {
|
|
3196
|
+
/** Custom cell templates */
|
|
3197
|
+
cellTemplates: QueryList<TableCellDirective>;
|
|
3198
|
+
/** Array of column definitions */
|
|
3199
|
+
columns: _angular_core.InputSignal<TableColumn[]>;
|
|
3200
|
+
/** Array of data objects to display */
|
|
3201
|
+
data: _angular_core.InputSignal<Record<string, unknown>[]>;
|
|
3202
|
+
/** Visual variant of the table */
|
|
3203
|
+
variant: _angular_core.InputSignal<TableVariant>;
|
|
3204
|
+
/** Size of the table */
|
|
3205
|
+
size: _angular_core.InputSignal<TableSize>;
|
|
3206
|
+
/** Whether rows should highlight on hover */
|
|
3207
|
+
hoverable: _angular_core.InputSignal<boolean>;
|
|
3208
|
+
/** Whether table should be responsive (horizontal scroll on mobile) */
|
|
3209
|
+
responsive: _angular_core.InputSignal<boolean>;
|
|
3210
|
+
/** Text shown when data is empty */
|
|
3211
|
+
emptyText: _angular_core.InputSignal<string>;
|
|
3212
|
+
/** Emitted when a sortable column header is clicked */
|
|
3213
|
+
readonly sort: _angular_core.OutputEmitterRef<SortEvent>;
|
|
3214
|
+
/** Emitted when a row is clicked */
|
|
3215
|
+
readonly rowClick: _angular_core.OutputEmitterRef<Record<string, unknown>>;
|
|
3216
|
+
/**
|
|
3217
|
+
* Computed CSS classes for the table element
|
|
3218
|
+
*/
|
|
3219
|
+
tableClasses: _angular_core.Signal<string>;
|
|
3220
|
+
/**
|
|
3221
|
+
* Computed CSS classes for the wrapper element
|
|
3222
|
+
*/
|
|
3223
|
+
wrapperClasses: _angular_core.Signal<string>;
|
|
3224
|
+
/** Current sort state */
|
|
3225
|
+
protected currentSort: _angular_core.WritableSignal<{
|
|
3226
|
+
column: string;
|
|
3227
|
+
direction: "asc" | "desc";
|
|
3228
|
+
} | null>;
|
|
3229
|
+
/**
|
|
3230
|
+
* Handle click on a sortable column header
|
|
3231
|
+
*/
|
|
3232
|
+
handleSort(columnKey: string): void;
|
|
3233
|
+
/**
|
|
3234
|
+
* Get sort state for a column
|
|
3235
|
+
*/
|
|
3236
|
+
getSortState(columnKey: string): 'asc' | 'desc' | null;
|
|
3237
|
+
/**
|
|
3238
|
+
* Get aria-sort attribute value for a column
|
|
3239
|
+
*/
|
|
3240
|
+
getAriaSort(columnKey: string): string | null;
|
|
3241
|
+
/**
|
|
3242
|
+
* Get CSS classes for a header cell
|
|
3243
|
+
*/
|
|
3244
|
+
getHeaderClasses(column: TableColumn): string;
|
|
3245
|
+
/**
|
|
3246
|
+
* Get value from data object by column key
|
|
3247
|
+
*/
|
|
3248
|
+
getCellValue(row: Record<string, unknown>, columnKey: string): unknown;
|
|
3249
|
+
/**
|
|
3250
|
+
* Get custom template for a column if it exists
|
|
3251
|
+
*/
|
|
3252
|
+
getCellTemplate(columnKey: string): TableCellDirective | undefined;
|
|
3253
|
+
/**
|
|
3254
|
+
* Check if a column has a custom template
|
|
3255
|
+
*/
|
|
3256
|
+
hasCustomTemplate(columnKey: string): boolean;
|
|
3257
|
+
/**
|
|
3258
|
+
* Handle row click
|
|
3259
|
+
*/
|
|
3260
|
+
onRowClick(row: Record<string, unknown>): void;
|
|
3261
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<TableComponent, never>;
|
|
3262
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<TableComponent, "lc-table", never, { "columns": { "alias": "columns"; "required": false; "isSignal": true; }; "data": { "alias": "data"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "hoverable": { "alias": "hoverable"; "required": false; "isSignal": true; }; "responsive": { "alias": "responsive"; "required": false; "isSignal": true; }; "emptyText": { "alias": "emptyText"; "required": false; "isSignal": true; }; }, { "sort": "sort"; "rowClick": "rowClick"; }, ["cellTemplates"], never, true, never>;
|
|
3263
|
+
}
|
|
3264
|
+
|
|
3265
|
+
/**
|
|
3266
|
+
* Field Group component for displaying label-value pairs in a consistent format.
|
|
3267
|
+
* Useful for read-only data displays like profile pages, detail views, etc.
|
|
3268
|
+
*
|
|
3269
|
+
* @example Basic usage
|
|
3270
|
+
* ```html
|
|
3271
|
+
* <lc-field-group label="Email" value="user@example.com"></lc-field-group>
|
|
3272
|
+
* ```
|
|
3273
|
+
*
|
|
3274
|
+
* @example With icon
|
|
3275
|
+
* ```html
|
|
3276
|
+
* <lc-field-group
|
|
3277
|
+
* label="Language"
|
|
3278
|
+
* value="English (US)"
|
|
3279
|
+
* icon="globe-alt">
|
|
3280
|
+
* </lc-field-group>
|
|
3281
|
+
* ```
|
|
3282
|
+
*
|
|
3283
|
+
* @example With custom content via projection
|
|
3284
|
+
* ```html
|
|
3285
|
+
* <lc-field-group label="Status" icon="check-circle">
|
|
3286
|
+
* <span class="status-badge">Active</span>
|
|
3287
|
+
* </lc-field-group>
|
|
3288
|
+
* ```
|
|
3289
|
+
*/
|
|
3290
|
+
declare class FieldGroupComponent {
|
|
3291
|
+
/**
|
|
3292
|
+
* Label text displayed above the value
|
|
3293
|
+
*/
|
|
3294
|
+
label: _angular_core.InputSignal<string>;
|
|
3295
|
+
/**
|
|
3296
|
+
* Value text to display (optional if using content projection)
|
|
3297
|
+
*/
|
|
3298
|
+
value: _angular_core.InputSignal<string | undefined>;
|
|
3299
|
+
/**
|
|
3300
|
+
* Optional icon name from Heroicons
|
|
3301
|
+
*/
|
|
3302
|
+
icon: _angular_core.InputSignal<string | undefined>;
|
|
3303
|
+
/**
|
|
3304
|
+
* Icon size
|
|
3305
|
+
* @default 'sm'
|
|
3306
|
+
*/
|
|
3307
|
+
iconSize: _angular_core.InputSignal<"xs" | "sm" | "md">;
|
|
3308
|
+
/**
|
|
3309
|
+
* Use compact styling with less padding
|
|
3310
|
+
* @default false
|
|
3311
|
+
*/
|
|
3312
|
+
compact: _angular_core.InputSignal<boolean>;
|
|
3313
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<FieldGroupComponent, never>;
|
|
3314
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<FieldGroupComponent, "lc-field-group", never, { "label": { "alias": "label"; "required": true; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "iconSize": { "alias": "iconSize"; "required": false; "isSignal": true; }; "compact": { "alias": "compact"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
3315
|
+
}
|
|
3316
|
+
|
|
3317
|
+
interface StepperStep {
|
|
3318
|
+
readonly label: string;
|
|
3319
|
+
readonly description?: string;
|
|
3320
|
+
readonly optional?: boolean;
|
|
3321
|
+
}
|
|
3322
|
+
type StepState = 'pending' | 'active' | 'completed';
|
|
3323
|
+
/**
|
|
3324
|
+
* Stepper Component
|
|
3325
|
+
*
|
|
3326
|
+
* Step-by-step wizard with numbered steps, active/completed/pending states.
|
|
3327
|
+
* Emits events when user navigates between steps.
|
|
3328
|
+
*
|
|
3329
|
+
* @example
|
|
3330
|
+
* ```html
|
|
3331
|
+
* <lc-stepper
|
|
3332
|
+
* [steps]="steps"
|
|
3333
|
+
* [(activeStep)]="currentStep"
|
|
3334
|
+
* (stepChange)="onStep($event)"
|
|
3335
|
+
* >
|
|
3336
|
+
* @if (currentStep === 0) {
|
|
3337
|
+
* <div class="step-content">Step 1 content</div>
|
|
3338
|
+
* }
|
|
3339
|
+
* @if (currentStep === 1) {
|
|
3340
|
+
* <div class="step-content">Step 2 content</div>
|
|
3341
|
+
* }
|
|
3342
|
+
* </lc-stepper>
|
|
3343
|
+
* ```
|
|
3344
|
+
*/
|
|
3345
|
+
declare class StepperComponent {
|
|
3346
|
+
/** Step definitions */
|
|
3347
|
+
steps: _angular_core.InputSignal<readonly StepperStep[]>;
|
|
3348
|
+
/** Active step index (0-based, two-way binding) */
|
|
3349
|
+
activeStep: _angular_core.ModelSignal<number>;
|
|
3350
|
+
/** Whether completed steps can be clicked to navigate back */
|
|
3351
|
+
linear: _angular_core.InputSignal<boolean>;
|
|
3352
|
+
/** Orientation */
|
|
3353
|
+
orientation: _angular_core.InputSignal<"vertical" | "horizontal">;
|
|
3354
|
+
/** Emitted when active step changes */
|
|
3355
|
+
stepChange: _angular_core.OutputEmitterRef<number>;
|
|
3356
|
+
/** Computed total step count */
|
|
3357
|
+
totalSteps: _angular_core.Signal<number>;
|
|
3358
|
+
/** Whether we're on the first step */
|
|
3359
|
+
isFirstStep: _angular_core.Signal<boolean>;
|
|
3360
|
+
/** Whether we're on the last step */
|
|
3361
|
+
isLastStep: _angular_core.Signal<boolean>;
|
|
3362
|
+
/** Get the state of a step */
|
|
3363
|
+
getStepState(index: number): StepState;
|
|
3364
|
+
/** Navigate to a specific step (only if completed or next) */
|
|
3365
|
+
goToStep(index: number): void;
|
|
3366
|
+
/** Go to next step */
|
|
3367
|
+
next(): void;
|
|
3368
|
+
/** Go to previous step */
|
|
3369
|
+
previous(): void;
|
|
3370
|
+
/** Get CSS classes for step indicator */
|
|
3371
|
+
getStepClasses(index: number): string;
|
|
3372
|
+
/** Get CSS classes for connector line */
|
|
3373
|
+
getConnectorClasses(index: number): string;
|
|
3374
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<StepperComponent, never>;
|
|
3375
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<StepperComponent, "lc-stepper", never, { "steps": { "alias": "steps"; "required": true; "isSignal": true; }; "activeStep": { "alias": "activeStep"; "required": false; "isSignal": true; }; "linear": { "alias": "linear"; "required": false; "isSignal": true; }; "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; }, { "activeStep": "activeStepChange"; "stepChange": "stepChange"; }, never, ["*"], true, never>;
|
|
3376
|
+
}
|
|
3377
|
+
|
|
3378
|
+
/**
|
|
3379
|
+
* Configuration for a single filter in the FilterBar.
|
|
3380
|
+
*/
|
|
3381
|
+
interface FilterConfig {
|
|
3382
|
+
/** Unique key for this filter */
|
|
3383
|
+
readonly key: string;
|
|
3384
|
+
/** Display label */
|
|
3385
|
+
readonly label: string;
|
|
3386
|
+
/** Filter type */
|
|
3387
|
+
readonly type: 'select' | 'toggle' | 'search';
|
|
3388
|
+
/** Available options for select/toggle types */
|
|
3389
|
+
readonly options?: readonly FilterOption[];
|
|
3390
|
+
/** Placeholder text (for search type) */
|
|
3391
|
+
readonly placeholder?: string;
|
|
3392
|
+
}
|
|
3393
|
+
interface FilterOption {
|
|
3394
|
+
readonly value: string;
|
|
3395
|
+
readonly label: string;
|
|
3396
|
+
readonly disabled?: boolean;
|
|
3397
|
+
}
|
|
3398
|
+
interface FilterValues {
|
|
3399
|
+
[key: string]: string;
|
|
3400
|
+
}
|
|
3401
|
+
/**
|
|
3402
|
+
* FilterBar Component
|
|
3403
|
+
*
|
|
3404
|
+
* Composable filter bar that combines selects, toggle groups, and search
|
|
3405
|
+
* in a responsive horizontal layout. Ideal for list pages.
|
|
3406
|
+
*
|
|
3407
|
+
* @example
|
|
3408
|
+
* ```html
|
|
3409
|
+
* <lc-filter-bar
|
|
3410
|
+
* [filters]="filterConfig"
|
|
3411
|
+
* [values]="currentFilters"
|
|
3412
|
+
* (valuesChange)="onFilterChange($event)"
|
|
3413
|
+
* ></lc-filter-bar>
|
|
3414
|
+
* ```
|
|
3415
|
+
*/
|
|
3416
|
+
declare class FilterBarComponent {
|
|
3417
|
+
/** Filter configurations */
|
|
3418
|
+
filters: _angular_core.InputSignal<readonly FilterConfig[]>;
|
|
3419
|
+
/** Current filter values (two-way bindable) */
|
|
3420
|
+
values: _angular_core.InputSignal<FilterValues>;
|
|
3421
|
+
/** Size variant */
|
|
3422
|
+
size: _angular_core.InputSignal<"sm" | "md">;
|
|
3423
|
+
/** Emitted when any filter value changes */
|
|
3424
|
+
valuesChange: _angular_core.OutputEmitterRef<FilterValues>;
|
|
3425
|
+
/** Computed size class */
|
|
3426
|
+
sizeClass: _angular_core.Signal<string>;
|
|
3427
|
+
/** Get the current value for a filter key */
|
|
3428
|
+
getValue(key: string): string;
|
|
3429
|
+
/** Handle select / toggle change */
|
|
3430
|
+
onFilterChange(key: string, value: string): void;
|
|
3431
|
+
/** Handle search input */
|
|
3432
|
+
onSearchInput(key: string, event: Event): void;
|
|
3433
|
+
/** Check if a toggle option is active */
|
|
3434
|
+
isToggleActive(key: string, optionValue: string): boolean;
|
|
3435
|
+
/** Get toggle button classes */
|
|
3436
|
+
getToggleClasses(key: string, option: FilterOption): string;
|
|
3437
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<FilterBarComponent, never>;
|
|
3438
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<FilterBarComponent, "lc-filter-bar", never, { "filters": { "alias": "filters"; "required": true; "isSignal": true; }; "values": { "alias": "values"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; }, { "valuesChange": "valuesChange"; }, never, never, true, never>;
|
|
3439
|
+
}
|
|
3440
|
+
|
|
3441
|
+
type SpinnerSize = 'sm' | 'md' | 'lg';
|
|
3442
|
+
/**
|
|
3443
|
+
* Spinner component for loading states.
|
|
3444
|
+
*
|
|
3445
|
+
* Displays a spinning indicator with an optional message.
|
|
3446
|
+
* Supports three sizes and respects the design-system color tokens.
|
|
3447
|
+
*
|
|
3448
|
+
* @example
|
|
3449
|
+
* ```html
|
|
3450
|
+
* <!-- Simple spinner -->
|
|
3451
|
+
* <lc-spinner />
|
|
3452
|
+
*
|
|
3453
|
+
* <!-- With message -->
|
|
3454
|
+
* <lc-spinner message="Loading data..." />
|
|
3455
|
+
*
|
|
3456
|
+
* <!-- Large spinner -->
|
|
3457
|
+
* <lc-spinner size="lg" message="Loading dashboard..." />
|
|
3458
|
+
* ```
|
|
3459
|
+
*/
|
|
3460
|
+
declare class SpinnerComponent {
|
|
3461
|
+
/**
|
|
3462
|
+
* Size of the spinner
|
|
3463
|
+
* @default 'md'
|
|
3464
|
+
*/
|
|
3465
|
+
readonly size: _angular_core.InputSignal<SpinnerSize>;
|
|
3466
|
+
/**
|
|
3467
|
+
* Optional loading message displayed below the spinner
|
|
3468
|
+
*/
|
|
3469
|
+
readonly message: _angular_core.InputSignal<string | undefined>;
|
|
3470
|
+
protected readonly hostClasses: _angular_core.Signal<string>;
|
|
3471
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SpinnerComponent, never>;
|
|
3472
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<SpinnerComponent, "lc-spinner", never, { "size": { "alias": "size"; "required": false; "isSignal": true; }; "message": { "alias": "message"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
3473
|
+
}
|
|
3474
|
+
|
|
3475
|
+
type SkeletonVariant = 'line' | 'circle' | 'rect';
|
|
3476
|
+
/**
|
|
3477
|
+
* Skeleton loader component for placeholder loading states.
|
|
3478
|
+
*
|
|
3479
|
+
* Renders a shimmer-animated placeholder block. Use multiple instances
|
|
3480
|
+
* to compose loading skeletons that match your page layout.
|
|
3481
|
+
*
|
|
3482
|
+
* @example
|
|
3483
|
+
* ```html
|
|
3484
|
+
* <!-- Text line (default) -->
|
|
3485
|
+
* <lc-skeleton />
|
|
3486
|
+
*
|
|
3487
|
+
* <!-- Custom width/height -->
|
|
3488
|
+
* <lc-skeleton width="200px" height="1.75rem" />
|
|
3489
|
+
*
|
|
3490
|
+
* <!-- Circle avatar placeholder -->
|
|
3491
|
+
* <lc-skeleton variant="circle" width="40px" height="40px" />
|
|
3492
|
+
*
|
|
3493
|
+
* <!-- Full-width rectangle (e.g. chart area) -->
|
|
3494
|
+
* <lc-skeleton variant="rect" width="100%" height="400px" borderRadius="0.5rem" />
|
|
3495
|
+
* ```
|
|
3496
|
+
*/
|
|
3497
|
+
declare class SkeletonComponent {
|
|
3498
|
+
/** Shape variant. */
|
|
3499
|
+
readonly variant: _angular_core.InputSignal<SkeletonVariant>;
|
|
3500
|
+
/** Width (CSS value). Defaults to '100%' for line/rect, '40px' for circle. */
|
|
3501
|
+
readonly width: _angular_core.InputSignal<string | undefined>;
|
|
3502
|
+
/** Height (CSS value). Defaults to '0.875rem' for line, '40px' for circle, '100px' for rect. */
|
|
3503
|
+
readonly height: _angular_core.InputSignal<string | undefined>;
|
|
3504
|
+
/** Border radius override (CSS value). */
|
|
3505
|
+
readonly borderRadius: _angular_core.InputSignal<string | undefined>;
|
|
3506
|
+
protected readonly variantClass: _angular_core.Signal<string>;
|
|
3507
|
+
protected readonly styles: _angular_core.Signal<{
|
|
3508
|
+
width: string;
|
|
3509
|
+
height: string;
|
|
3510
|
+
'border-radius': string;
|
|
3511
|
+
}>;
|
|
3512
|
+
get hostWidth(): string;
|
|
3513
|
+
get hostFlexShrink(): string;
|
|
3514
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SkeletonComponent, never>;
|
|
3515
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<SkeletonComponent, "lc-skeleton", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "borderRadius": { "alias": "borderRadius"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
3516
|
+
}
|
|
3517
|
+
|
|
3518
|
+
type EmptyStateSize = 'sm' | 'md' | 'lg';
|
|
3519
|
+
/**
|
|
3520
|
+
* Empty-state component for "no data" placeholders.
|
|
3521
|
+
*
|
|
3522
|
+
* Supports a compact inline mode (inside cards) and a larger page-level mode.
|
|
3523
|
+
* An optional icon, heading, description, and projected action slot are supported.
|
|
3524
|
+
*
|
|
3525
|
+
* @example
|
|
3526
|
+
* ```html
|
|
3527
|
+
* <!-- Inline / card-level (sm) -->
|
|
3528
|
+
* <lc-empty-state
|
|
3529
|
+
* size="sm"
|
|
3530
|
+
* message="No signals generated for this asset yet." />
|
|
3531
|
+
*
|
|
3532
|
+
* <!-- Page-level with icon + action -->
|
|
3533
|
+
* <lc-empty-state
|
|
3534
|
+
* icon="chart-bar"
|
|
3535
|
+
* heading="No Paper Trading Portfolios"
|
|
3536
|
+
* message="Portfolios are created automatically when strategies are promoted."
|
|
3537
|
+
* >
|
|
3538
|
+
* <lc-button variant="primary">Get Started</lc-button>
|
|
3539
|
+
* </lc-empty-state>
|
|
3540
|
+
* ```
|
|
3541
|
+
*/
|
|
3542
|
+
declare class EmptyStateComponent {
|
|
3543
|
+
/**
|
|
3544
|
+
* Size variant
|
|
3545
|
+
* - `sm`: compact inline (inside cards), no padding
|
|
3546
|
+
* - `md`: standard centered block (default)
|
|
3547
|
+
* - `lg`: large page-level with extra padding
|
|
3548
|
+
* @default 'md'
|
|
3549
|
+
*/
|
|
3550
|
+
readonly size: _angular_core.InputSignal<EmptyStateSize>;
|
|
3551
|
+
/**
|
|
3552
|
+
* Heroicon name to display above the heading
|
|
3553
|
+
*/
|
|
3554
|
+
readonly icon: _angular_core.InputSignal<string | undefined>;
|
|
3555
|
+
/**
|
|
3556
|
+
* Bold heading text
|
|
3557
|
+
*/
|
|
3558
|
+
readonly heading: _angular_core.InputSignal<string | undefined>;
|
|
3559
|
+
/**
|
|
3560
|
+
* Description text
|
|
3561
|
+
*/
|
|
3562
|
+
readonly message: _angular_core.InputSignal<string | undefined>;
|
|
3563
|
+
protected readonly hostClasses: _angular_core.Signal<string>;
|
|
3564
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<EmptyStateComponent, never>;
|
|
3565
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<EmptyStateComponent, "lc-empty-state", never, { "size": { "alias": "size"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "heading": { "alias": "heading"; "required": false; "isSignal": true; }; "message": { "alias": "message"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
3566
|
+
}
|
|
3567
|
+
|
|
3568
|
+
type DrawerPosition = 'left' | 'right';
|
|
3569
|
+
type DrawerSize = 'sm' | 'md' | 'lg' | 'xl';
|
|
3570
|
+
/**
|
|
3571
|
+
* Drawer Component — a slide-out overlay panel for supplementary content.
|
|
3572
|
+
*
|
|
3573
|
+
* Unlike the Sidenav (which renders navigation items), the Drawer
|
|
3574
|
+
* accepts arbitrary projected content via `<ng-content>`, making it
|
|
3575
|
+
* ideal for settings panels, filters, detail views, etc.
|
|
3576
|
+
*
|
|
3577
|
+
* @example
|
|
3578
|
+
* ```html
|
|
3579
|
+
* <lc-drawer [open]="showPanel" position="right" size="md"
|
|
3580
|
+
* heading="Settings" (closed)="showPanel = false">
|
|
3581
|
+
* <p>Any content goes here</p>
|
|
3582
|
+
* </lc-drawer>
|
|
3583
|
+
* ```
|
|
3584
|
+
*/
|
|
3585
|
+
declare class DrawerComponent {
|
|
3586
|
+
/** Whether the drawer is open. */
|
|
3587
|
+
readonly open: _angular_core.InputSignal<boolean>;
|
|
3588
|
+
/** Slide-in direction. */
|
|
3589
|
+
readonly position: _angular_core.InputSignal<DrawerPosition>;
|
|
3590
|
+
/** Predefined width (sm=320, md=400, lg=520, xl=640). */
|
|
3591
|
+
readonly size: _angular_core.InputSignal<DrawerSize>;
|
|
3592
|
+
/** Optional heading shown in the drawer header. */
|
|
3593
|
+
readonly heading: _angular_core.InputSignal<string>;
|
|
3594
|
+
/** Whether the overlay backdrop is shown. */
|
|
3595
|
+
readonly hasOverlay: _angular_core.InputSignal<boolean>;
|
|
3596
|
+
/** Whether clicking the overlay closes the drawer. */
|
|
3597
|
+
readonly closeOnOverlayClick: _angular_core.InputSignal<boolean>;
|
|
3598
|
+
/** Whether pressing Escape closes the drawer. */
|
|
3599
|
+
readonly closeOnEscape: _angular_core.InputSignal<boolean>;
|
|
3600
|
+
/** ARIA label for assistive technology. */
|
|
3601
|
+
readonly ariaLabel: _angular_core.InputSignal<string>;
|
|
3602
|
+
/** Emitted when the drawer should close. */
|
|
3603
|
+
readonly closed: _angular_core.OutputEmitterRef<void>;
|
|
3604
|
+
/** Internal visibility — drives the animation lifecycle. */
|
|
3605
|
+
protected _visible: _angular_core.WritableSignal<boolean>;
|
|
3606
|
+
protected _animating: _angular_core.WritableSignal<boolean>;
|
|
3607
|
+
constructor();
|
|
3608
|
+
/** Width token → CSS. */
|
|
3609
|
+
protected get widthValue(): string;
|
|
3610
|
+
protected get panelClasses(): string;
|
|
3611
|
+
/** Handle backdrop click. */
|
|
3612
|
+
protected onOverlayClick(): void;
|
|
3613
|
+
/** Handle close action. */
|
|
3614
|
+
protected close(): void;
|
|
3615
|
+
protected onKeydown(event: KeyboardEvent): void;
|
|
3616
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DrawerComponent, never>;
|
|
3617
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DrawerComponent, "lc-drawer", never, { "open": { "alias": "open"; "required": false; "isSignal": true; }; "position": { "alias": "position"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "heading": { "alias": "heading"; "required": false; "isSignal": true; }; "hasOverlay": { "alias": "hasOverlay"; "required": false; "isSignal": true; }; "closeOnOverlayClick": { "alias": "closeOnOverlayClick"; "required": false; "isSignal": true; }; "closeOnEscape": { "alias": "closeOnEscape"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "closed": "closed"; }, never, ["*"], true, never>;
|
|
3618
|
+
}
|
|
3619
|
+
|
|
3620
|
+
export { AccordionComponent, AlertComponent, AnimationDurationFast, AnimationEasingEaseIn, AnimationEasingEaseInOut, AnimationEasingEaseOut, AvatarComponent, BadgeComponent, BorderRadius2xl, BorderRadiusFull, BorderRadiusLg, BorderRadiusMd, BorderRadiusNone, BorderRadiusSm, BorderRadiusXl, BreadcrumbsComponent, ButtonComponent, CardComponent, CheckboxComponent, ChipComponent, ColorAccentOrange, ColorAccentPurple, ColorAccentRed, ColorAccentRust, ColorAccentViolet, ColorErrorDark, ColorErrorDefault, ColorErrorLight, ColorInfoDark, ColorInfoDefault, ColorInfoLight, ColorNeutral100, ColorNeutral200, ColorNeutral300, ColorNeutral400, ColorNeutral50, ColorNeutral500, ColorNeutral600, ColorNeutral700, ColorNeutral800, ColorNeutral900, ColorPrimary100, ColorPrimary200, ColorPrimary300, ColorPrimary400, ColorPrimary50, ColorPrimary500, ColorPrimary600, ColorPrimary700, ColorPrimary800, ColorPrimary900, ColorSecondary100, ColorSecondary200, ColorSecondary300, ColorSecondary400, ColorSecondary50, ColorSecondary500, ColorSecondary600, ColorSecondary700, ColorSecondary800, ColorSecondary900, ColorSuccessDark, ColorSuccessDefault, ColorSuccessLight, ColorWarningDark, ColorWarningDefault, ColorWarningLight, ContainerComponent, DatepickerComponent, DrawerComponent, Elevation1, Elevation2, Elevation3, Elevation4, EmailInputComponent, EmptyStateComponent, ErrorDisplayComponent, FieldGroupComponent, FilterBarComponent, HeaderComponent, IconComponent, InputComponent, ListComponent, ListItemTemplateDirective, LogoComponent, MenuComponent, MetricCardComponent, ModalComponent, PaginationComponent, PasswordInputComponent, RadioComponent, SectionComponent, SelectComponent, SidenavComponent, SizeInteractiveLgFontSize, SizeInteractiveLgHeight, SizeInteractiveLgPadding, SizeInteractiveMdFontSize, SizeInteractiveMdHeight, SizeInteractiveMdPadding, SizeInteractiveSmFontSize, SizeInteractiveSmHeight, SizeInteractiveSmPadding, SizeInteractiveXsFontSize, SizeInteractiveXsHeight, SizeInteractiveXsPadding, SizeMinTouchHeight, SizeMinTouchWidth, SkeletonComponent, SpacerComponent, Spacing0, Spacing05, Spacing1, Spacing10, Spacing11, Spacing12, Spacing14, Spacing15, Spacing16, Spacing2, Spacing25, Spacing3, Spacing35, Spacing4, Spacing5, Spacing6, Spacing7, Spacing8, Spacing9, SpinnerComponent, StackComponent, StepperComponent, SwitchComponent, TabComponent, TableCellDirective, TableComponent, TabsComponent, TextareaComponent, ThemeService, ToastComponent, ToastService, ToggleGroupComponent, TooltipContentComponent, TooltipDirective, TypographyComponent, TypographyFontFamilyBase, TypographyFontFamilyMono, TypographyFontSize2xl, TypographyFontSize3xl, TypographyFontSize4xl, TypographyFontSize5xl, TypographyFontSize6xl, TypographyFontSizeBase, TypographyFontSizeLg, TypographyFontSizeSm, TypographyFontSizeXl, TypographyFontSizeXs, TypographyFontWeightBold, TypographyFontWeightMedium, TypographyFontWeightNormal, TypographyFontWeightSemibold, TypographyLineHeightNormal, TypographyLineHeightRelaxed, TypographyLineHeightTight, VerificationCodeInputComponent };
|
|
3621
|
+
export type { AlertVariant, AvatarSize, AvatarStatus, BadgeSize, BadgeVariant, BreadcrumbItem, BreadcrumbSize, ButtonSize, ButtonType, ButtonVariant, CheckboxSize, ChipSize, ChipVariant, ContainerSize, DateValue, DrawerPosition, DrawerSize, EmptyStateSize, ErrorSeverity, FilterConfig, FilterOption, FilterValues, IconSize, IconVariant, ListItem, ListOrientation, ListVariant, MenuItem, ModalSize, NavigationItem, PaginationSize, PasswordRequirement, PasswordStrength, RadioSize, SectionBackground, SectionSpacing, SelectOption, SelectOptionGroup, SelectValue, SidenavMode, SidenavPosition, SkeletonVariant, SortEvent, SpacerSize, SpinnerSize, StackAlign, StackDirection, StackGap, StackJustify, StepState, StepperStep, TabOrientation, TableColumn, TableSize, TableVariant, ThemeConfig, ThemeMode, ThemeState, Toast, ToastAction, ToastConfig, ToastPosition, ToastVariant, ToggleOption, TooltipPosition, TrendDirection };
|