@lesterarte/sefin-ui 0.0.1 → 0.0.3-dev.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.
@@ -0,0 +1,605 @@
1
+ import * as i0 from '@angular/core';
2
+ import { EventEmitter } from '@angular/core';
3
+ import { ControlValueAccessor } from '@angular/forms';
4
+
5
+ /**
6
+ * Color design tokens as TypeScript constants
7
+ * Based on Secretaría de Finanzas brand guidelines
8
+ * These values are the source of truth for all color tokens
9
+ */
10
+ declare const COLOR_TOKENS: {
11
+ readonly primary: {
12
+ readonly 50: "#e6f7fb";
13
+ readonly 100: "#b3e5f0";
14
+ readonly 200: "#80d3e5";
15
+ readonly 300: "#4dc1da";
16
+ readonly 400: "#2ab0cf";
17
+ readonly 500: "#55C3D8";
18
+ readonly 600: "#4aafc4";
19
+ readonly 700: "#3f9bb0";
20
+ readonly 800: "#34879c";
21
+ readonly 900: "#297388";
22
+ };
23
+ readonly secondary: {
24
+ readonly 50: "#f5f5f5";
25
+ readonly 100: "#e8e8e8";
26
+ readonly 200: "#cecece";
27
+ readonly 300: "#b5b5b5";
28
+ readonly 400: "#9b9b9b";
29
+ readonly 500: "#828282";
30
+ readonly 600: "#686868";
31
+ readonly 700: "#4f4f4f";
32
+ readonly 800: "#383838";
33
+ readonly 900: "#2a2a2a";
34
+ };
35
+ readonly neutral: {
36
+ readonly 50: "#ffffff";
37
+ readonly 100: "#f5f5f5";
38
+ readonly 200: "#cecece";
39
+ readonly 300: "#b5b5b5";
40
+ readonly 400: "#9b9b9b";
41
+ readonly 500: "#828282";
42
+ readonly 600: "#686868";
43
+ readonly 700: "#4f4f4f";
44
+ readonly 800: "#383838";
45
+ readonly 900: "#2a2a2a";
46
+ };
47
+ readonly success: {
48
+ readonly 50: "#e8f5e9";
49
+ readonly 100: "#c8e6c9";
50
+ readonly 200: "#a5d6a7";
51
+ readonly 300: "#81c784";
52
+ readonly 400: "#66bb6a";
53
+ readonly 500: "#4caf50";
54
+ readonly 600: "#43a047";
55
+ readonly 700: "#388e3c";
56
+ readonly 800: "#2e7d32";
57
+ readonly 900: "#1b5e20";
58
+ };
59
+ readonly warning: {
60
+ readonly 50: "#fff3e0";
61
+ readonly 100: "#ffe0b2";
62
+ readonly 200: "#ffcc80";
63
+ readonly 300: "#ffb74d";
64
+ readonly 400: "#ffa726";
65
+ readonly 500: "#ff9800";
66
+ readonly 600: "#fb8c00";
67
+ readonly 700: "#f57c00";
68
+ readonly 800: "#ef6c00";
69
+ readonly 900: "#e65100";
70
+ };
71
+ readonly error: {
72
+ readonly 50: "#ffebee";
73
+ readonly 100: "#ffcdd2";
74
+ readonly 200: "#ef9a9a";
75
+ readonly 300: "#e57373";
76
+ readonly 400: "#ef5350";
77
+ readonly 500: "#f44336";
78
+ readonly 600: "#e53935";
79
+ readonly 700: "#d32f2f";
80
+ readonly 800: "#c62828";
81
+ readonly 900: "#b71c1c";
82
+ };
83
+ readonly info: {
84
+ readonly 50: "#e0f2f1";
85
+ readonly 100: "#b2dfdb";
86
+ readonly 200: "#80cbc4";
87
+ readonly 300: "#4db6ac";
88
+ readonly 400: "#26a69a";
89
+ readonly 500: "#009688";
90
+ readonly 600: "#00897b";
91
+ readonly 700: "#00796b";
92
+ readonly 800: "#00695c";
93
+ readonly 900: "#004d40";
94
+ };
95
+ readonly brand: {
96
+ readonly darkGray: "#383838";
97
+ readonly lightGray: "#cecece";
98
+ readonly lightBlue: "#55C3D8";
99
+ readonly white: "#ffffff";
100
+ };
101
+ };
102
+ /**
103
+ * Color token names for CSS variable generation
104
+ */
105
+ type ColorTokenName = 'primary' | 'secondary' | 'neutral' | 'success' | 'warning' | 'error' | 'info' | 'brand';
106
+ type ColorShade = 50 | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900;
107
+
108
+ /**
109
+ * Spacing design tokens
110
+ * Based on 8px grid system
111
+ */
112
+ declare const SPACING_TOKENS: {
113
+ readonly xs: "4px";
114
+ readonly sm: "8px";
115
+ readonly md: "16px";
116
+ readonly lg: "24px";
117
+ readonly xl: "32px";
118
+ readonly '2xl': "48px";
119
+ readonly '3xl': "64px";
120
+ readonly '4xl': "96px";
121
+ readonly '5xl': "128px";
122
+ };
123
+ type SpacingToken = keyof typeof SPACING_TOKENS;
124
+
125
+ /**
126
+ * Typography design tokens
127
+ * Based on Secretaría de Finanzas brand guidelines - Pluto typeface
128
+ */
129
+ declare const TYPOGRAPHY_TOKENS: {
130
+ readonly fontFamily: {
131
+ readonly base: "'Pluto', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif";
132
+ readonly mono: "'Fira Code', 'Courier New', monospace";
133
+ };
134
+ readonly fontSize: {
135
+ readonly xs: "0.75rem";
136
+ readonly sm: "0.875rem";
137
+ readonly base: "1rem";
138
+ readonly lg: "1.125rem";
139
+ readonly xl: "1.25rem";
140
+ readonly '2xl': "1.5rem";
141
+ readonly '3xl': "1.875rem";
142
+ readonly '4xl': "2.25rem";
143
+ readonly '5xl': "3rem";
144
+ };
145
+ readonly fontWeight: {
146
+ readonly light: 300;
147
+ readonly normal: 400;
148
+ readonly medium: 500;
149
+ readonly semibold: 600;
150
+ readonly bold: 700;
151
+ };
152
+ readonly lineHeight: {
153
+ readonly tight: 1.25;
154
+ readonly normal: 1.5;
155
+ readonly relaxed: 1.75;
156
+ };
157
+ };
158
+ type TypographyToken = keyof typeof TYPOGRAPHY_TOKENS;
159
+
160
+ /**
161
+ * Border radius design tokens
162
+ */
163
+ declare const BORDER_RADIUS_TOKENS: {
164
+ readonly none: "0";
165
+ readonly sm: "4px";
166
+ readonly md: "8px";
167
+ readonly lg: "12px";
168
+ readonly xl: "16px";
169
+ readonly '2xl': "24px";
170
+ readonly full: "9999px";
171
+ };
172
+ type BorderRadiusToken = keyof typeof BORDER_RADIUS_TOKENS;
173
+
174
+ /**
175
+ * Shadow design tokens
176
+ */
177
+ declare const SHADOW_TOKENS: {
178
+ readonly none: "none";
179
+ readonly sm: "0 1px 2px 0 rgba(0, 0, 0, 0.05)";
180
+ readonly md: "0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)";
181
+ readonly lg: "0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)";
182
+ readonly xl: "0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04)";
183
+ readonly '2xl': "0 25px 50px -12px rgba(0, 0, 0, 0.25)";
184
+ };
185
+ type ShadowToken = keyof typeof SHADOW_TOKENS;
186
+
187
+ /**
188
+ * Design tokens index
189
+ * Central export for all design tokens
190
+ */
191
+
192
+ /**
193
+ * All design tokens combined
194
+ */
195
+ declare const DESIGN_TOKENS: {
196
+ colors: () => Promise<{
197
+ readonly primary: {
198
+ readonly 50: "#e6f7fb";
199
+ readonly 100: "#b3e5f0";
200
+ readonly 200: "#80d3e5";
201
+ readonly 300: "#4dc1da";
202
+ readonly 400: "#2ab0cf";
203
+ readonly 500: "#55C3D8";
204
+ readonly 600: "#4aafc4";
205
+ readonly 700: "#3f9bb0";
206
+ readonly 800: "#34879c";
207
+ readonly 900: "#297388";
208
+ };
209
+ readonly secondary: {
210
+ readonly 50: "#f5f5f5";
211
+ readonly 100: "#e8e8e8";
212
+ readonly 200: "#cecece";
213
+ readonly 300: "#b5b5b5";
214
+ readonly 400: "#9b9b9b";
215
+ readonly 500: "#828282";
216
+ readonly 600: "#686868";
217
+ readonly 700: "#4f4f4f";
218
+ readonly 800: "#383838";
219
+ readonly 900: "#2a2a2a";
220
+ };
221
+ readonly neutral: {
222
+ readonly 50: "#ffffff";
223
+ readonly 100: "#f5f5f5";
224
+ readonly 200: "#cecece";
225
+ readonly 300: "#b5b5b5";
226
+ readonly 400: "#9b9b9b";
227
+ readonly 500: "#828282";
228
+ readonly 600: "#686868";
229
+ readonly 700: "#4f4f4f";
230
+ readonly 800: "#383838";
231
+ readonly 900: "#2a2a2a";
232
+ };
233
+ readonly success: {
234
+ readonly 50: "#e8f5e9";
235
+ readonly 100: "#c8e6c9";
236
+ readonly 200: "#a5d6a7";
237
+ readonly 300: "#81c784";
238
+ readonly 400: "#66bb6a";
239
+ readonly 500: "#4caf50";
240
+ readonly 600: "#43a047";
241
+ readonly 700: "#388e3c";
242
+ readonly 800: "#2e7d32";
243
+ readonly 900: "#1b5e20";
244
+ };
245
+ readonly warning: {
246
+ readonly 50: "#fff3e0";
247
+ readonly 100: "#ffe0b2";
248
+ readonly 200: "#ffcc80";
249
+ readonly 300: "#ffb74d";
250
+ readonly 400: "#ffa726";
251
+ readonly 500: "#ff9800";
252
+ readonly 600: "#fb8c00";
253
+ readonly 700: "#f57c00";
254
+ readonly 800: "#ef6c00";
255
+ readonly 900: "#e65100";
256
+ };
257
+ readonly error: {
258
+ readonly 50: "#ffebee";
259
+ readonly 100: "#ffcdd2";
260
+ readonly 200: "#ef9a9a";
261
+ readonly 300: "#e57373";
262
+ readonly 400: "#ef5350";
263
+ readonly 500: "#f44336";
264
+ readonly 600: "#e53935";
265
+ readonly 700: "#d32f2f";
266
+ readonly 800: "#c62828";
267
+ readonly 900: "#b71c1c";
268
+ };
269
+ readonly info: {
270
+ readonly 50: "#e0f2f1";
271
+ readonly 100: "#b2dfdb";
272
+ readonly 200: "#80cbc4";
273
+ readonly 300: "#4db6ac";
274
+ readonly 400: "#26a69a";
275
+ readonly 500: "#009688";
276
+ readonly 600: "#00897b";
277
+ readonly 700: "#00796b";
278
+ readonly 800: "#00695c";
279
+ readonly 900: "#004d40";
280
+ };
281
+ readonly brand: {
282
+ readonly darkGray: "#383838";
283
+ readonly lightGray: "#cecece";
284
+ readonly lightBlue: "#55C3D8";
285
+ readonly white: "#ffffff";
286
+ };
287
+ }>;
288
+ spacing: () => Promise<{
289
+ readonly xs: "4px";
290
+ readonly sm: "8px";
291
+ readonly md: "16px";
292
+ readonly lg: "24px";
293
+ readonly xl: "32px";
294
+ readonly '2xl': "48px";
295
+ readonly '3xl': "64px";
296
+ readonly '4xl': "96px";
297
+ readonly '5xl': "128px";
298
+ }>;
299
+ typography: () => Promise<{
300
+ readonly fontFamily: {
301
+ readonly base: "'Pluto', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif";
302
+ readonly mono: "'Fira Code', 'Courier New', monospace";
303
+ };
304
+ readonly fontSize: {
305
+ readonly xs: "0.75rem";
306
+ readonly sm: "0.875rem";
307
+ readonly base: "1rem";
308
+ readonly lg: "1.125rem";
309
+ readonly xl: "1.25rem";
310
+ readonly '2xl': "1.5rem";
311
+ readonly '3xl': "1.875rem";
312
+ readonly '4xl': "2.25rem";
313
+ readonly '5xl': "3rem";
314
+ };
315
+ readonly fontWeight: {
316
+ readonly light: 300;
317
+ readonly normal: 400;
318
+ readonly medium: 500;
319
+ readonly semibold: 600;
320
+ readonly bold: 700;
321
+ };
322
+ readonly lineHeight: {
323
+ readonly tight: 1.25;
324
+ readonly normal: 1.5;
325
+ readonly relaxed: 1.75;
326
+ };
327
+ }>;
328
+ borderRadius: () => Promise<{
329
+ readonly none: "0";
330
+ readonly sm: "4px";
331
+ readonly md: "8px";
332
+ readonly lg: "12px";
333
+ readonly xl: "16px";
334
+ readonly '2xl': "24px";
335
+ readonly full: "9999px";
336
+ }>;
337
+ shadow: () => Promise<{
338
+ readonly none: "none";
339
+ readonly sm: "0 1px 2px 0 rgba(0, 0, 0, 0.05)";
340
+ readonly md: "0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)";
341
+ readonly lg: "0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)";
342
+ readonly xl: "0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04)";
343
+ readonly '2xl': "0 25px 50px -12px rgba(0, 0, 0, 0.25)";
344
+ }>;
345
+ };
346
+
347
+ /**
348
+ * Light theme configuration
349
+ * Based on Secretaría de Finanzas brand colors
350
+ */
351
+ declare const LIGHT_THEME: {
352
+ readonly name: "light";
353
+ readonly colors: {
354
+ readonly primary: "#55C3D8";
355
+ readonly 'primary-dark': "#3f9bb0";
356
+ readonly 'primary-light': "#4dc1da";
357
+ readonly secondary: "#383838";
358
+ readonly 'secondary-dark': "#2a2a2a";
359
+ readonly 'secondary-light': "#686868";
360
+ readonly background: "#ffffff";
361
+ readonly 'background-elevated': "#ffffff";
362
+ readonly surface: "#ffffff";
363
+ readonly 'surface-hover': "#cecece";
364
+ readonly text: "#383838";
365
+ readonly 'text-secondary': "#686868";
366
+ readonly 'text-disabled': "#9b9b9b";
367
+ readonly border: "#cecece";
368
+ readonly 'border-focus': "#55C3D8";
369
+ readonly success: "#4caf50";
370
+ readonly warning: "#ff9800";
371
+ readonly error: "#f44336";
372
+ readonly info: "#009688";
373
+ };
374
+ };
375
+
376
+ /**
377
+ * Dark theme configuration
378
+ * Based on Secretaría de Finanzas brand colors (inverted)
379
+ */
380
+ declare const DARK_THEME: {
381
+ readonly name: "dark";
382
+ readonly colors: {
383
+ readonly primary: "#55C3D8";
384
+ readonly 'primary-dark': "#4dc1da";
385
+ readonly 'primary-light': "#3f9bb0";
386
+ readonly secondary: "#cecece";
387
+ readonly 'secondary-dark': "#9b9b9b";
388
+ readonly 'secondary-light': "#cecece";
389
+ readonly background: "#383838";
390
+ readonly 'background-elevated': "#4f4f4f";
391
+ readonly surface: "#4f4f4f";
392
+ readonly 'surface-hover': "#686868";
393
+ readonly text: "#ffffff";
394
+ readonly 'text-secondary': "#cecece";
395
+ readonly 'text-disabled': "#828282";
396
+ readonly border: "#686868";
397
+ readonly 'border-focus': "#55C3D8";
398
+ readonly success: "#66bb6a";
399
+ readonly warning: "#ffa726";
400
+ readonly error: "#ef5350";
401
+ readonly info: "#26a69a";
402
+ };
403
+ };
404
+
405
+ /**
406
+ * Brand theme configuration
407
+ * Exact colors from Secretaría de Finanzas brand guidelines
408
+ */
409
+ declare const BRAND_THEME: {
410
+ readonly name: "brand";
411
+ readonly colors: {
412
+ readonly primary: "#55C3D8";
413
+ readonly 'primary-dark': "#3f9bb0";
414
+ readonly 'primary-light': "#4dc1da";
415
+ readonly secondary: "#383838";
416
+ readonly 'secondary-dark': "#2a2a2a";
417
+ readonly 'secondary-light': "#686868";
418
+ readonly background: "#ffffff";
419
+ readonly 'background-elevated': "#ffffff";
420
+ readonly surface: "#ffffff";
421
+ readonly 'surface-hover': "#cecece";
422
+ readonly text: "#383838";
423
+ readonly 'text-secondary': "#686868";
424
+ readonly 'text-disabled': "#9b9b9b";
425
+ readonly border: "#cecece";
426
+ readonly 'border-focus': "#55C3D8";
427
+ readonly success: "#4caf50";
428
+ readonly warning: "#ff9800";
429
+ readonly error: "#f44336";
430
+ readonly info: "#009688";
431
+ };
432
+ };
433
+
434
+ /**
435
+ * Themes index
436
+ */
437
+
438
+ type Theme = 'light' | 'dark' | 'brand';
439
+
440
+ /**
441
+ * Theme loader utility
442
+ * Generates CSS variables from design tokens
443
+ */
444
+ declare class ThemeLoader {
445
+ /**
446
+ * Load a theme and apply it to the document root
447
+ */
448
+ static loadTheme(themeName?: Theme): void;
449
+ /**
450
+ * Get theme configuration by name
451
+ */
452
+ private static getTheme;
453
+ /**
454
+ * Get all CSS variables as a string (useful for SSR or static generation)
455
+ */
456
+ static getThemeCSS(themeName?: Theme): string;
457
+ }
458
+
459
+ /**
460
+ * Shared types and interfaces
461
+ */
462
+ type ButtonVariant = 'primary' | 'secondary' | 'outline' | 'ghost' | 'danger';
463
+ type ButtonSize = 'sm' | 'md' | 'lg';
464
+ type InputSize = 'sm' | 'md' | 'lg';
465
+ type CardVariant = 'default' | 'elevated' | 'outlined';
466
+ interface BaseComponent {
467
+ disabled?: boolean;
468
+ class?: string;
469
+ }
470
+
471
+ declare class ButtonComponent {
472
+ variant: ButtonVariant;
473
+ size: ButtonSize;
474
+ disabled: boolean;
475
+ type: 'button' | 'submit' | 'reset';
476
+ class: string;
477
+ clicked: EventEmitter<MouseEvent>;
478
+ onClick(event: MouseEvent): void;
479
+ get buttonClasses(): string;
480
+ static ɵfac: i0.ɵɵFactoryDeclaration<ButtonComponent, never>;
481
+ static ɵcmp: i0.ɵɵComponentDeclaration<ButtonComponent, "sefin-button", never, { "variant": { "alias": "variant"; "required": false; }; "size": { "alias": "size"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "type": { "alias": "type"; "required": false; }; "class": { "alias": "class"; "required": false; }; }, { "clicked": "clicked"; }, never, ["*"], true, never>;
482
+ }
483
+
484
+ declare class IconComponent {
485
+ name: string;
486
+ size: 'sm' | 'md' | 'lg';
487
+ class: string;
488
+ get iconClasses(): string;
489
+ static ɵfac: i0.ɵɵFactoryDeclaration<IconComponent, never>;
490
+ static ɵcmp: i0.ɵɵComponentDeclaration<IconComponent, "sefin-icon", never, { "name": { "alias": "name"; "required": false; }; "size": { "alias": "size"; "required": false; }; "class": { "alias": "class"; "required": false; }; }, {}, never, ["*"], true, never>;
491
+ }
492
+
493
+ declare class InputComponent implements ControlValueAccessor {
494
+ type: 'text' | 'email' | 'password' | 'number' | 'tel' | 'url';
495
+ placeholder: string;
496
+ size: InputSize;
497
+ disabled: boolean;
498
+ required: boolean;
499
+ readonly: boolean;
500
+ class: string;
501
+ id: string;
502
+ blur: EventEmitter<FocusEvent>;
503
+ focus: EventEmitter<FocusEvent>;
504
+ value: string;
505
+ private onChange;
506
+ private onTouched;
507
+ onInput(event: Event): void;
508
+ onBlur(event: FocusEvent): void;
509
+ onFocus(event: FocusEvent): void;
510
+ writeValue(value: string): void;
511
+ registerOnChange(fn: (value: string) => void): void;
512
+ registerOnTouched(fn: () => void): void;
513
+ setDisabledState(isDisabled: boolean): void;
514
+ get inputClasses(): string;
515
+ static ɵfac: i0.ɵɵFactoryDeclaration<InputComponent, never>;
516
+ static ɵcmp: i0.ɵɵComponentDeclaration<InputComponent, "sefin-input", never, { "type": { "alias": "type"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "size": { "alias": "size"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "required": { "alias": "required"; "required": false; }; "readonly": { "alias": "readonly"; "required": false; }; "class": { "alias": "class"; "required": false; }; "id": { "alias": "id"; "required": false; }; }, { "blur": "blur"; "focus": "focus"; }, never, never, true, never>;
517
+ }
518
+
519
+ declare class FormFieldComponent {
520
+ label: string;
521
+ hint: string;
522
+ error: string;
523
+ required: boolean;
524
+ disabled: boolean;
525
+ inputId: string;
526
+ inputType: 'text' | 'email' | 'password' | 'number' | 'tel' | 'url';
527
+ placeholder: string;
528
+ size: 'sm' | 'md' | 'lg';
529
+ static ɵfac: i0.ɵɵFactoryDeclaration<FormFieldComponent, never>;
530
+ static ɵcmp: i0.ɵɵComponentDeclaration<FormFieldComponent, "sefin-form-field", never, { "label": { "alias": "label"; "required": false; }; "hint": { "alias": "hint"; "required": false; }; "error": { "alias": "error"; "required": false; }; "required": { "alias": "required"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "inputId": { "alias": "inputId"; "required": false; }; "inputType": { "alias": "inputType"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "size": { "alias": "size"; "required": false; }; }, {}, never, never, true, never>;
531
+ }
532
+
533
+ interface DropdownOption {
534
+ label: string;
535
+ value: any;
536
+ disabled?: boolean;
537
+ }
538
+ declare class DropdownComponent {
539
+ options: DropdownOption[];
540
+ placeholder: string;
541
+ disabled: boolean;
542
+ size: 'sm' | 'md' | 'lg';
543
+ selectionChange: EventEmitter<any>;
544
+ isOpen: boolean;
545
+ selectedOption: DropdownOption | null;
546
+ toggle(): void;
547
+ selectOption(option: DropdownOption): void;
548
+ get displayText(): string;
549
+ static ɵfac: i0.ɵɵFactoryDeclaration<DropdownComponent, never>;
550
+ static ɵcmp: i0.ɵɵComponentDeclaration<DropdownComponent, "sefin-dropdown", never, { "options": { "alias": "options"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "size": { "alias": "size"; "required": false; }; }, { "selectionChange": "selectionChange"; }, never, never, true, never>;
551
+ }
552
+
553
+ declare class CardComponent {
554
+ variant: CardVariant;
555
+ class: string;
556
+ get cardClasses(): string;
557
+ static ɵfac: i0.ɵɵFactoryDeclaration<CardComponent, never>;
558
+ static ɵcmp: i0.ɵɵComponentDeclaration<CardComponent, "sefin-card", never, { "variant": { "alias": "variant"; "required": false; }; "class": { "alias": "class"; "required": false; }; }, {}, never, ["*"], true, never>;
559
+ }
560
+
561
+ declare class HeaderComponent {
562
+ title: string;
563
+ logo: string;
564
+ showUserMenu: boolean;
565
+ userName: string;
566
+ logoClick: EventEmitter<void>;
567
+ menuClick: EventEmitter<void>;
568
+ userMenuClick: EventEmitter<void>;
569
+ static ɵfac: i0.ɵɵFactoryDeclaration<HeaderComponent, never>;
570
+ static ɵcmp: i0.ɵɵComponentDeclaration<HeaderComponent, "sefin-header", never, { "title": { "alias": "title"; "required": false; }; "logo": { "alias": "logo"; "required": false; }; "showUserMenu": { "alias": "showUserMenu"; "required": false; }; "userName": { "alias": "userName"; "required": false; }; }, { "logoClick": "logoClick"; "menuClick": "menuClick"; "userMenuClick": "userMenuClick"; }, never, never, true, never>;
571
+ }
572
+
573
+ interface LoginCredentials {
574
+ email: string;
575
+ password: string;
576
+ }
577
+ declare class LoginFormComponent {
578
+ email: string;
579
+ password: string;
580
+ error: string;
581
+ submit: EventEmitter<LoginCredentials>;
582
+ onSubmit(): void;
583
+ static ɵfac: i0.ɵɵFactoryDeclaration<LoginFormComponent, never>;
584
+ static ɵcmp: i0.ɵɵComponentDeclaration<LoginFormComponent, "sefin-login-form", never, {}, { "submit": "submit"; }, never, never, true, never>;
585
+ }
586
+
587
+ interface ToolbarAction {
588
+ label: string;
589
+ icon?: string;
590
+ variant?: 'primary' | 'secondary' | 'outline' | 'ghost' | 'danger';
591
+ action: () => void;
592
+ }
593
+ declare class ToolbarComponent {
594
+ title: string;
595
+ actions: ToolbarAction[];
596
+ actionClick: EventEmitter<ToolbarAction>;
597
+ onActionClick(action: ToolbarAction): void;
598
+ static ɵfac: i0.ɵɵFactoryDeclaration<ToolbarComponent, never>;
599
+ static ɵcmp: i0.ɵɵComponentDeclaration<ToolbarComponent, "sefin-toolbar", never, { "title": { "alias": "title"; "required": false; }; "actions": { "alias": "actions"; "required": false; }; }, { "actionClick": "actionClick"; }, never, never, true, never>;
600
+ }
601
+
602
+ declare const STYLES_PATH = "./styles/index.scss";
603
+
604
+ export { BORDER_RADIUS_TOKENS, BRAND_THEME, ButtonComponent, COLOR_TOKENS, CardComponent, DARK_THEME, DESIGN_TOKENS, DropdownComponent, FormFieldComponent, HeaderComponent, IconComponent, InputComponent, LIGHT_THEME, LoginFormComponent, SHADOW_TOKENS, SPACING_TOKENS, STYLES_PATH, TYPOGRAPHY_TOKENS, ThemeLoader, ToolbarComponent };
605
+ export type { BaseComponent, BorderRadiusToken, ButtonSize, ButtonVariant, CardVariant, ColorShade, ColorTokenName, DropdownOption, InputSize, LoginCredentials, ShadowToken, SpacingToken, Theme, ToolbarAction, TypographyToken };