@edmicro/olkit 1.0.5 → 1.0.10

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.
@@ -1,40 +1,78 @@
1
1
  import * as _angular_core from '@angular/core';
2
- import { OnDestroy, ElementRef, QueryList, TemplateRef } from '@angular/core';
2
+ import { OnInit, OnDestroy, ElementRef, QueryList, TemplateRef } from '@angular/core';
3
3
  import { ControlValueAccessor } from '@angular/forms';
4
4
  import * as _edmicro_olkit from '@edmicro/olkit';
5
5
  import { SafeHtml } from '@angular/platform-browser';
6
6
  import { Observable } from 'rxjs';
7
7
 
8
- declare class AccordionItemComponent {
9
- readonly itemId: _angular_core.InputSignal<string>;
8
+ declare class OlAccordionItemComponent {
9
+ private readonly parentAccordion;
10
10
  readonly title: _angular_core.InputSignal<string>;
11
+ readonly disabled: _angular_core.InputSignal<boolean>;
12
+ readonly itemId: _angular_core.InputSignal<string>;
11
13
  readonly isOpen: _angular_core.ModelSignal<boolean>;
12
14
  readonly opened: _angular_core.OutputEmitterRef<void>;
13
15
  readonly closed: _angular_core.OutputEmitterRef<void>;
14
- private readonly parentAccordion;
16
+ readonly isSeparated: _angular_core.Signal<boolean>;
17
+ readonly isFlush: _angular_core.Signal<boolean>;
18
+ readonly headerId: _angular_core.Signal<string>;
19
+ readonly contentId: _angular_core.Signal<string>;
20
+ readonly headerClasses: _angular_core.Signal<string>;
21
+ readonly chevronClasses: _angular_core.Signal<string>;
22
+ readonly contentClasses: _angular_core.Signal<string>;
23
+ readonly bodyClasses: _angular_core.Signal<"px-0 pt-1 pb-4 text-base text-gray-600 dark:text-gray-300 leading-relaxed" | "border-t border-gray-200 dark:border-slate-700 px-5 py-4 text-base text-gray-600 dark:text-gray-300 bg-white dark:bg-slate-900 leading-relaxed">;
24
+ toggle(): void;
15
25
  open(): void;
16
26
  close(): void;
17
- toggle(): void;
18
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AccordionItemComponent, never>;
19
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AccordionItemComponent, "ol-accordion-item", never, { "itemId": { "alias": "itemId"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "isOpen": { "alias": "isOpen"; "required": false; "isSignal": true; }; }, { "isOpen": "isOpenChange"; "opened": "opened"; "closed": "closed"; }, never, ["[icon]", "*"], true, never>;
27
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<OlAccordionItemComponent, never>;
28
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<OlAccordionItemComponent, "ol-accordion-item", never, { "title": { "alias": "title"; "required": true; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "itemId": { "alias": "itemId"; "required": false; "isSignal": true; }; "isOpen": { "alias": "isOpen"; "required": false; "isSignal": true; }; }, { "isOpen": "isOpenChange"; "opened": "opened"; "closed": "closed"; }, never, ["*"], true, never>;
20
29
  }
21
30
 
22
- declare class AccordionComponent {
23
- readonly flush: _angular_core.InputSignal<boolean>;
24
- readonly alwaysOpen: _angular_core.InputSignal<boolean>;
25
- readonly items: _angular_core.Signal<readonly AccordionItemComponent[]>;
31
+ type AccordionVariant = 'bordered' | 'flush' | 'separated';
32
+ declare class OlAccordionComponent {
33
+ readonly multiple: _angular_core.InputSignal<boolean>;
34
+ readonly variant: _angular_core.InputSignal<AccordionVariant>;
35
+ readonly items: _angular_core.Signal<readonly OlAccordionItemComponent[]>;
36
+ readonly accordionClasses: _angular_core.Signal<"border border-gray-200 dark:border-slate-700 rounded-xl overflow-hidden bg-white dark:bg-slate-900 shadow-2xs divide-y divide-gray-200 dark:divide-slate-700" | "border-b border-gray-200 dark:border-slate-700 divide-y divide-gray-200 dark:divide-slate-700 bg-transparent" | "space-y-3">;
37
+ handleItemOpened(openedItem: OlAccordionItemComponent): void;
26
38
  /**
27
- * Xử lý khi một item con được mở ra
39
+ * Keyboard navigation
28
40
  */
29
- handleItemToggle(activeItem: AccordionItemComponent): void;
30
- getItem(indexOrId: number | string): AccordionItemComponent | undefined;
41
+ handleKeyboard(event: KeyboardEvent): void;
42
+ getItem(indexOrId: number | string): OlAccordionItemComponent | undefined;
31
43
  open(indexOrId: number | string): void;
32
44
  close(indexOrId: number | string): void;
33
45
  toggle(indexOrId: number | string): void;
34
46
  openAll(): void;
35
47
  closeAll(): void;
36
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AccordionComponent, never>;
37
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<AccordionComponent, "ol-accordion", never, { "flush": { "alias": "flush"; "required": false; "isSignal": true; }; "alwaysOpen": { "alias": "alwaysOpen"; "required": false; "isSignal": true; }; }, {}, ["items"], ["*"], true, never>;
48
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<OlAccordionComponent, never>;
49
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<OlAccordionComponent, "ol-accordion", never, { "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; }, {}, ["items"], ["*"], true, never>;
50
+ }
51
+
52
+ type AlertType = 'info' | 'success' | 'warning' | 'danger' | 'neutral';
53
+ type AlertVariant$1 = 'subtle' | 'solid' | 'bordered' | 'accent-left';
54
+ type AlertRounded = 'none' | 'sm' | 'md' | 'lg' | 'xl' | 'full';
55
+ declare class OlAlertComponent {
56
+ readonly type: _angular_core.InputSignal<AlertType>;
57
+ readonly variant: _angular_core.InputSignal<AlertVariant$1>;
58
+ readonly title: _angular_core.InputSignal<string>;
59
+ readonly icon: _angular_core.InputSignal<string | boolean>;
60
+ readonly dismissible: _angular_core.InputSignal<boolean>;
61
+ readonly rounded: _angular_core.InputSignal<AlertRounded>;
62
+ readonly onDismiss: _angular_core.OutputEmitterRef<void>;
63
+ readonly visible: _angular_core.WritableSignal<boolean>;
64
+ readonly showIcon: _angular_core.Signal<boolean>;
65
+ readonly iconName: _angular_core.Signal<string>;
66
+ readonly alertClasses: _angular_core.Signal<string>;
67
+ readonly iconClasses: _angular_core.Signal<string>;
68
+ readonly closeButtonClasses: _angular_core.Signal<"ms-auto -mx-1.5 -my-1.5 rounded-lg p-1.5 inline-flex items-center justify-center shrink-0 transition-colors focus:outline-none focus:ring-2 text-white/80 hover:text-white hover:bg-white/20 focus:ring-white/50" | "ms-auto -mx-1.5 -my-1.5 rounded-lg p-1.5 inline-flex items-center justify-center shrink-0 transition-colors focus:outline-none focus:ring-2 text-emerald-600 hover:bg-emerald-100 focus:ring-emerald-200 dark:text-emerald-400 dark:hover:bg-emerald-900/30 dark:focus:ring-emerald-800" | "ms-auto -mx-1.5 -my-1.5 rounded-lg p-1.5 inline-flex items-center justify-center shrink-0 transition-colors focus:outline-none focus:ring-2 text-amber-600 hover:bg-amber-100 focus:ring-amber-200 dark:text-amber-400 dark:hover:bg-amber-900/30 dark:focus:ring-amber-800" | "ms-auto -mx-1.5 -my-1.5 rounded-lg p-1.5 inline-flex items-center justify-center shrink-0 transition-colors focus:outline-none focus:ring-2 text-rose-600 hover:bg-rose-100 focus:ring-rose-200 dark:text-rose-400 dark:hover:bg-rose-900/30 dark:focus:ring-rose-800" | "ms-auto -mx-1.5 -my-1.5 rounded-lg p-1.5 inline-flex items-center justify-center shrink-0 transition-colors focus:outline-none focus:ring-2 text-brand-600 hover:bg-brand-100 focus:ring-brand-200 dark:text-brand-400 dark:hover:bg-brand-900/30 dark:focus:ring-brand-800" | "ms-auto -mx-1.5 -my-1.5 rounded-lg p-1.5 inline-flex items-center justify-center shrink-0 transition-colors focus:outline-none focus:ring-2 text-gray-600 hover:bg-gray-100 focus:ring-gray-200 dark:text-gray-400 dark:hover:bg-slate-700 dark:focus:ring-slate-600">;
69
+ private applyColorClasses;
70
+ private applySubtleColors;
71
+ private applySolidColors;
72
+ private applyBorderedColors;
73
+ dismiss(): void;
74
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<OlAlertComponent, never>;
75
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<OlAlertComponent, "ol-alert", never, { "type": { "alias": "type"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "dismissible": { "alias": "dismissible"; "required": false; "isSignal": true; }; "rounded": { "alias": "rounded"; "required": false; "isSignal": true; }; }, { "onDismiss": "onDismiss"; }, never, ["*", "[alertActions]"], true, never>;
38
76
  }
39
77
 
40
78
  type AlertColor = 'info' | 'danger' | 'success' | 'warning' | 'dark';
@@ -121,12 +159,56 @@ declare class BadgeComponent {
121
159
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<BadgeComponent, "ol-badge", never, { "theme": { "alias": "theme"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "shape": { "alias": "shape"; "required": false; "isSignal": true; }; "rounded": { "alias": "rounded"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "dot": { "alias": "dot"; "required": false; "isSignal": true; }; "leftIcon": { "alias": "leftIcon"; "required": false; "isSignal": true; }; "rightIcon": { "alias": "rightIcon"; "required": false; "isSignal": true; }; "avatar": { "alias": "avatar"; "required": false; "isSignal": true; }; "avatarText": { "alias": "avatarText"; "required": false; "isSignal": true; }; "secondaryText": { "alias": "secondaryText"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "removable": { "alias": "removable"; "required": false; "isSignal": true; }; "href": { "alias": "href"; "required": false; "isSignal": true; }; }, { "dismiss": "dismiss"; }, never, ["*"], true, never>;
122
160
  }
123
161
 
124
- declare class BannerComponent {
125
- readonly position: _angular_core.InputSignal<"bottom" | "top">;
126
- readonly dismissed: _angular_core.OutputEmitterRef<void>;
162
+ type BannerVariant = 'brand' | 'gradient' | 'warning' | 'dark' | 'subtle';
163
+ type BannerPosition = 'top-fixed' | 'top-sticky' | 'inline' | 'bottom-floating';
164
+ /**
165
+ * Banner Component - Full-width announcement component
166
+ *
167
+ * @example
168
+ * ```html
169
+ * <ol-banner>
170
+ * Ôn Luyện ra mắt kho học liệu số mới cho giáo viên
171
+ * </ol-banner>
172
+ *
173
+ * <ol-banner
174
+ * variant="gradient"
175
+ * [showBadge]="true"
176
+ * badgeText="Mới"
177
+ * icon="bullhorn">
178
+ * Tính năng AI chấm bài tự động đã có mặt!
179
+ * </ol-banner>
180
+ *
181
+ * <ol-banner
182
+ * variant="warning"
183
+ * position="bottom-floating"
184
+ * storageKey="maintenance-2024-09"
185
+ * (onDismiss)="handleDismiss()">
186
+ * <span>Hệ thống sẽ bảo trì vào 20:00 tối nay</span>
187
+ * <button bannerCta class="btn btn-sm btn-warning">
188
+ * Gia hạn ngay
189
+ * </button>
190
+ * </ol-banner>
191
+ * ```
192
+ */
193
+ declare class OlBannerComponent implements OnInit {
194
+ readonly variant: _angular_core.InputSignal<BannerVariant>;
195
+ readonly position: _angular_core.InputSignal<BannerPosition>;
196
+ readonly storageKey: _angular_core.InputSignal<string>;
197
+ readonly dismissible: _angular_core.InputSignal<boolean>;
198
+ readonly showBadge: _angular_core.InputSignal<boolean>;
199
+ readonly badgeText: _angular_core.InputSignal<string>;
200
+ readonly icon: _angular_core.InputSignal<string>;
201
+ readonly onDismiss: _angular_core.OutputEmitterRef<void>;
202
+ readonly visible: _angular_core.WritableSignal<boolean>;
203
+ readonly bannerClasses: _angular_core.Signal<string>;
204
+ readonly badgeClasses: _angular_core.Signal<string>;
205
+ readonly dismissButtonClasses: _angular_core.Signal<"text-amber-600 hover:bg-amber-100 dark:text-amber-200 dark:hover:bg-amber-900/40" | "text-gray-500 hover:bg-gray-200 dark:text-slate-400 dark:hover:bg-slate-700" | "text-white/70 hover:bg-white/10 hover:text-white">;
206
+ ngOnInit(): void;
127
207
  dismiss(): void;
128
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<BannerComponent, never>;
129
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<BannerComponent, "ol-banner", never, { "position": { "alias": "position"; "required": false; "isSignal": true; }; }, { "dismissed": "dismissed"; }, never, ["*"], true, never>;
208
+ private getStoredDismissState;
209
+ private setStoredDismissState;
210
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<OlBannerComponent, never>;
211
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<OlBannerComponent, "ol-banner", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "position": { "alias": "position"; "required": false; "isSignal": true; }; "storageKey": { "alias": "storageKey"; "required": false; "isSignal": true; }; "dismissible": { "alias": "dismissible"; "required": false; "isSignal": true; }; "showBadge": { "alias": "showBadge"; "required": false; "isSignal": true; }; "badgeText": { "alias": "badgeText"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; }, { "onDismiss": "onDismiss"; }, never, ["*", "[bannerCta]"], true, never>;
130
212
  }
131
213
 
132
214
  type BreadcrumbVariant = 'default' | 'background' | 'with-dropdown' | 'with-group-buttons' | 'only-buttons' | 'with-badge';
@@ -342,7 +424,7 @@ declare class DatepickerStateService {
342
424
  };
343
425
  clear(): void;
344
426
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DatepickerStateService, never>;
345
- static ɵprov: _angular_core.ɵɵInjectableDeclaration<DatepickerStateService>;
427
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<any>;
346
428
  }
347
429
 
348
430
  declare class DatepickerComponent implements ControlValueAccessor {
@@ -365,10 +447,14 @@ declare class DatepickerComponent implements ControlValueAccessor {
365
447
  readonly size: _angular_core.InputSignal<DatepickerSize>;
366
448
  readonly clearable: _angular_core.InputSignal<boolean>;
367
449
  readonly dateChange: _angular_core.OutputEmitterRef<Date | null>;
450
+ readonly timestampChange: _angular_core.OutputEmitterRef<number | null>;
451
+ readonly isoChange: _angular_core.OutputEmitterRef<string | null>;
452
+ readonly formattedChange: _angular_core.OutputEmitterRef<string>;
368
453
  readonly isOpen: _angular_core.WritableSignal<boolean>;
369
454
  readonly inputValue: _angular_core.WritableSignal<string>;
370
455
  private onChange;
371
456
  private onTouched;
457
+ private emitAllChanges;
372
458
  constructor();
373
459
  readonly inputSizeClasses: _angular_core.Signal<"py-2 px-3 ps-9 text-xs rounded-lg" | "py-3.5 px-4 ps-11 text-base rounded-xl" | "py-2.5 px-3.5 ps-10 text-sm rounded-xl">;
374
460
  readonly iconSizeClasses: _angular_core.Signal<"w-3.5 h-3.5 text-gray-500 inset-s-3" | "w-5 h-5 text-gray-500 inset-s-3.5" | "w-4 h-4 text-gray-500 inset-s-3.5">;
@@ -385,7 +471,7 @@ declare class DatepickerComponent implements ControlValueAccessor {
385
471
  onDocumentClick(event: MouseEvent): void;
386
472
  onEscape(): void;
387
473
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DatepickerComponent, never>;
388
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<DatepickerComponent, "ol-datepicker", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "helperText": { "alias": "helperText"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "format": { "alias": "format"; "required": false; "isSignal": true; }; "minDate": { "alias": "minDate"; "required": false; "isSignal": true; }; "maxDate": { "alias": "maxDate"; "required": false; "isSignal": true; }; "daysDisabled": { "alias": "daysDisabled"; "required": false; "isSignal": true; }; "datesDisabled": { "alias": "datesDisabled"; "required": false; "isSignal": true; }; "datesEnabled": { "alias": "datesEnabled"; "required": false; "isSignal": true; }; "showFooter": { "alias": "showFooter"; "required": false; "isSignal": true; }; "inline": { "alias": "inline"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "dateChange": "dateChange"; }, never, never, true, never>;
474
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DatepickerComponent, "ol-datepicker", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "helperText": { "alias": "helperText"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "format": { "alias": "format"; "required": false; "isSignal": true; }; "minDate": { "alias": "minDate"; "required": false; "isSignal": true; }; "maxDate": { "alias": "maxDate"; "required": false; "isSignal": true; }; "daysDisabled": { "alias": "daysDisabled"; "required": false; "isSignal": true; }; "datesDisabled": { "alias": "datesDisabled"; "required": false; "isSignal": true; }; "datesEnabled": { "alias": "datesEnabled"; "required": false; "isSignal": true; }; "showFooter": { "alias": "showFooter"; "required": false; "isSignal": true; }; "inline": { "alias": "inline"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "dateChange": "dateChange"; "timestampChange": "timestampChange"; "isoChange": "isoChange"; "formattedChange": "formattedChange"; }, never, never, true, never>;
389
475
  }
390
476
 
391
477
  declare class DateRangePickerComponent implements ControlValueAccessor {
@@ -429,6 +515,8 @@ declare class DateRangePickerComponent implements ControlValueAccessor {
429
515
  togglePopup(event?: MouseEvent): void;
430
516
  closePopup(): void;
431
517
  onValueSelected(val: Date | [Date | null, Date | null]): void;
518
+ onPopupApply(): void;
519
+ onPopupCancel(): void;
432
520
  onPopupClear(): void;
433
521
  onStartInputChange(val: string): void;
434
522
  onEndInputChange(val: string): void;
@@ -497,10 +585,17 @@ declare class DatepickerFooterComponent {
497
585
  readonly state: DatepickerStateService;
498
586
  readonly clearClick: _angular_core.OutputEmitterRef<void>;
499
587
  readonly todayClick: _angular_core.OutputEmitterRef<void>;
588
+ readonly applyClick: _angular_core.OutputEmitterRef<void>;
589
+ readonly cancelClick: _angular_core.OutputEmitterRef<void>;
590
+ readonly isRangeMode: _angular_core.Signal<boolean>;
591
+ readonly rangeSummaryText: _angular_core.Signal<string>;
592
+ readonly canApply: _angular_core.Signal<boolean>;
500
593
  onClear(): void;
501
594
  onToday(): void;
595
+ onApply(): void;
596
+ onCancel(): void;
502
597
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DatepickerFooterComponent, never>;
503
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<DatepickerFooterComponent, "ol-datepicker-footer", never, {}, { "clearClick": "clearClick"; "todayClick": "todayClick"; }, never, never, true, never>;
598
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DatepickerFooterComponent, "ol-datepicker-footer", never, {}, { "clearClick": "clearClick"; "todayClick": "todayClick"; "applyClick": "applyClick"; "cancelClick": "cancelClick"; }, never, never, true, never>;
504
599
  }
505
600
 
506
601
  declare class DatepickerPopupComponent {
@@ -510,12 +605,16 @@ declare class DatepickerPopupComponent {
510
605
  readonly presets: _angular_core.InputSignal<DatepickerPreset[]>;
511
606
  readonly valueChange: _angular_core.OutputEmitterRef<Date | [Date | null, Date | null]>;
512
607
  readonly clearClick: _angular_core.OutputEmitterRef<void>;
608
+ readonly applyClick: _angular_core.OutputEmitterRef<void>;
609
+ readonly cancelClick: _angular_core.OutputEmitterRef<void>;
513
610
  onDaySelected(date: Date): void;
514
611
  onFooterToday(): void;
515
612
  onFooterClear(): void;
613
+ onFooterApply(): void;
614
+ onFooterCancel(): void;
516
615
  applyPreset(preset: DatepickerPreset): void;
517
616
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DatepickerPopupComponent, never>;
518
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<DatepickerPopupComponent, "ol-datepicker-popup", never, { "showFooter": { "alias": "showFooter"; "required": false; "isSignal": true; }; "dualMonth": { "alias": "dualMonth"; "required": false; "isSignal": true; }; "presets": { "alias": "presets"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; "clearClick": "clearClick"; }, never, never, true, never>;
617
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DatepickerPopupComponent, "ol-datepicker-popup", never, { "showFooter": { "alias": "showFooter"; "required": false; "isSignal": true; }; "dualMonth": { "alias": "dualMonth"; "required": false; "isSignal": true; }; "presets": { "alias": "presets"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; "clearClick": "clearClick"; "applyClick": "applyClick"; "cancelClick": "cancelClick"; }, never, never, true, never>;
519
618
  }
520
619
 
521
620
  declare const WEEKDAYS_SHORT_VI: string[];
@@ -951,6 +1050,12 @@ declare class RichTextEditorComponent {
951
1050
  type TimepickerFormat = '24h' | '12h';
952
1051
  type TimepickerSize = 'sm' | 'md' | 'lg';
953
1052
  type TimepickerState = 'default' | 'error' | 'success';
1053
+ interface TimeObject {
1054
+ hour: number;
1055
+ minute: number;
1056
+ period?: 'AM' | 'PM';
1057
+ formatted: string;
1058
+ }
954
1059
  declare class TimepickerComponent implements ControlValueAccessor {
955
1060
  private readonly elementRef;
956
1061
  readonly value: _angular_core.ModelSignal<string>;
@@ -968,6 +1073,9 @@ declare class TimepickerComponent implements ControlValueAccessor {
968
1073
  readonly id: _angular_core.InputSignal<string>;
969
1074
  readonly minuteStep: _angular_core.InputSignal<number>;
970
1075
  readonly showPresets: _angular_core.InputSignal<boolean>;
1076
+ readonly addonType: _angular_core.InputSignal<"none" | "left" | "right">;
1077
+ readonly addonText: _angular_core.InputSignal<string>;
1078
+ readonly addonIcon: _angular_core.InputSignal<string>;
971
1079
  private readonly generatedId;
972
1080
  protected readonly inputId: _angular_core.Signal<string>;
973
1081
  readonly isOpen: _angular_core.WritableSignal<boolean>;
@@ -978,11 +1086,19 @@ declare class TimepickerComponent implements ControlValueAccessor {
978
1086
  readonly hours24: number[];
979
1087
  readonly hours12: number[];
980
1088
  readonly minutes: number[];
1089
+ readonly hourContainerRef: _angular_core.Signal<ElementRef<HTMLElement> | undefined>;
1090
+ readonly minuteContainerRef: _angular_core.Signal<ElementRef<HTMLElement> | undefined>;
1091
+ readonly timeChange: _angular_core.OutputEmitterRef<string>;
1092
+ readonly timestampChange: _angular_core.OutputEmitterRef<number | null>;
1093
+ readonly isoChange: _angular_core.OutputEmitterRef<string | null>;
1094
+ readonly timeObjectChange: _angular_core.OutputEmitterRef<TimeObject | null>;
981
1095
  private onChange;
982
1096
  private onTouched;
1097
+ private emitAllChanges;
983
1098
  constructor(elementRef: ElementRef);
984
1099
  onDocumentClick(event: MouseEvent): void;
985
1100
  toggleDropdown(): void;
1101
+ private scrollToSelected;
986
1102
  private parseCurrentValue;
987
1103
  selectHour(h: number): void;
988
1104
  selectMinute(m: number): void;
@@ -998,7 +1114,7 @@ declare class TimepickerComponent implements ControlValueAccessor {
998
1114
  registerOnTouched(fn: any): void;
999
1115
  setDisabledState?(isDisabled: boolean): void;
1000
1116
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TimepickerComponent, never>;
1001
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TimepickerComponent, "ol-timepicker", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "format": { "alias": "format"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "state": { "alias": "state"; "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; }; "showAsterisk": { "alias": "showAsterisk"; "required": false; "isSignal": true; }; "helperText": { "alias": "helperText"; "required": false; "isSignal": true; }; "errorText": { "alias": "errorText"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "minuteStep": { "alias": "minuteStep"; "required": false; "isSignal": true; }; "showPresets": { "alias": "showPresets"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, never, true, never>;
1117
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TimepickerComponent, "ol-timepicker", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "format": { "alias": "format"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "state": { "alias": "state"; "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; }; "showAsterisk": { "alias": "showAsterisk"; "required": false; "isSignal": true; }; "helperText": { "alias": "helperText"; "required": false; "isSignal": true; }; "errorText": { "alias": "errorText"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "minuteStep": { "alias": "minuteStep"; "required": false; "isSignal": true; }; "showPresets": { "alias": "showPresets"; "required": false; "isSignal": true; }; "addonType": { "alias": "addonType"; "required": false; "isSignal": true; }; "addonText": { "alias": "addonText"; "required": false; "isSignal": true; }; "addonIcon": { "alias": "addonIcon"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "timeChange": "timeChange"; "timestampChange": "timestampChange"; "isoChange": "isoChange"; "timeObjectChange": "timeObjectChange"; }, never, never, true, never>;
1002
1118
  }
1003
1119
 
1004
1120
  type AutocompleteSize = 'sm' | 'md' | 'lg';
@@ -1276,25 +1392,216 @@ declare class SidebarSubmenuComponent {
1276
1392
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SidebarSubmenuComponent, "ol-sidebar-submenu", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "badge": { "alias": "badge"; "required": false; "isSignal": true; }; "badgeTheme": { "alias": "badgeTheme"; "required": false; "isSignal": true; }; "isOpen": { "alias": "isOpen"; "required": false; "isSignal": true; }; "active": { "alias": "active"; "required": false; "isSignal": true; }; }, { "isOpen": "isOpenChange"; }, never, ["*"], true, never>;
1277
1393
  }
1278
1394
 
1279
- declare class SkeletonComponent {
1280
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<SkeletonComponent, never>;
1281
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<SkeletonComponent, "ol-skeleton", never, {}, {}, never, never, true, never>;
1395
+ /**
1396
+ * OlSkeleton - Loading placeholder component
1397
+ *
1398
+ * Hiển thị skeleton loader cho content đang tải với nhiều variants và animations
1399
+ *
1400
+ * @example
1401
+ * // Text skeleton
1402
+ * <ol-skeleton type="text" />
1403
+ *
1404
+ * // Avatar skeleton
1405
+ * <ol-skeleton type="avatar" rounded="full" />
1406
+ *
1407
+ * // Card skeleton
1408
+ * <ol-skeleton type="card" height="200px" />
1409
+ *
1410
+ * // Multiple text lines
1411
+ * @for (i of [1,2,3,4]; track i) {
1412
+ * <ol-skeleton type="text" [width]="i === 4 ? '60%' : '100%'" />
1413
+ * }
1414
+ */
1415
+ declare class OlSkeletonComponent {
1416
+ /**
1417
+ * Loại skeleton
1418
+ * - text: Thanh ngang cho text line
1419
+ * - avatar: Hình tròn cho avatar
1420
+ * - card: Khối chữ nhật cho card
1421
+ * - button: Nhỏ hơn cho button
1422
+ * - image: Tỷ lệ 16:9 hoặc 4:3
1423
+ * - custom: Tùy chỉnh width/height
1424
+ */
1425
+ type: _angular_core.InputSignal<"image" | "custom" | "avatar" | "button" | "text" | "card">;
1426
+ /**
1427
+ * Chiều rộng của skeleton
1428
+ * Mặc định: 100% (hoặc theo preset của type)
1429
+ */
1430
+ width: _angular_core.InputSignal<string | undefined>;
1431
+ /**
1432
+ * Chiều cao của skeleton
1433
+ * Mặc định: theo preset của type
1434
+ */
1435
+ height: _angular_core.InputSignal<string | undefined>;
1436
+ /**
1437
+ * Bo tròn góc
1438
+ * - none: rounded-none
1439
+ * - sm: rounded-sm
1440
+ * - md: rounded-md (default)
1441
+ * - lg: rounded-lg
1442
+ * - xl: rounded-xl
1443
+ * - full: rounded-full (cho avatar)
1444
+ */
1445
+ rounded: _angular_core.InputSignal<"sm" | "md" | "lg" | "xl" | "none" | "full">;
1446
+ /**
1447
+ * Loại animation
1448
+ * - pulse: Nhấp nháy opacity (default)
1449
+ * - wave: Gradient di chuyển ngang
1450
+ * - none: Static không animation
1451
+ */
1452
+ animation: _angular_core.InputSignal<"none" | "pulse" | "wave">;
1453
+ /**
1454
+ * Aspect ratio cho image type
1455
+ * - 16/9: Landscape (default)
1456
+ * - 4/3: Standard
1457
+ */
1458
+ aspectRatio: _angular_core.InputSignal<"16/9" | "4/3">;
1459
+ /**
1460
+ * Computed classes cho skeleton
1461
+ */
1462
+ skeletonClasses: _angular_core.Signal<string>;
1463
+ /**
1464
+ * Computed styles cho skeleton
1465
+ */
1466
+ skeletonStyles: _angular_core.Signal<Record<string, string>>;
1467
+ /**
1468
+ * Get rounded class based on type and input
1469
+ */
1470
+ private getRoundedClass;
1471
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<OlSkeletonComponent, never>;
1472
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<OlSkeletonComponent, "ol-skeleton", never, { "type": { "alias": "type"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "rounded": { "alias": "rounded"; "required": false; "isSignal": true; }; "animation": { "alias": "animation"; "required": false; "isSignal": true; }; "aspectRatio": { "alias": "aspectRatio"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1282
1473
  }
1283
1474
 
1284
- declare class SpeedDialComponent {
1285
- readonly isOpen: _angular_core.ModelSignal<boolean>;
1475
+ type SpeedDialDirection = 'top' | 'bottom' | 'left' | 'right';
1476
+ type SpeedDialType = 'default' | 'rounded' | 'menu';
1477
+ type SpeedDialTrigger = 'click' | 'hover';
1478
+ type SpeedDialColor = 'brand' | 'neutral' | 'success' | 'danger' | 'warning';
1479
+ interface SpeedDialAction {
1480
+ id?: string;
1481
+ label: string;
1482
+ icon?: string;
1483
+ svgPath?: string;
1484
+ tooltip?: string;
1485
+ disabled?: boolean;
1486
+ class?: string;
1487
+ onClick?: () => void;
1488
+ }
1489
+
1490
+ declare class OlSpeedDialComponent {
1491
+ private readonly elementRef;
1492
+ direction: _angular_core.InputSignal<SpeedDialDirection>;
1493
+ type: _angular_core.InputSignal<SpeedDialType>;
1494
+ trigger: _angular_core.InputSignal<SpeedDialTrigger>;
1495
+ color: _angular_core.InputSignal<SpeedDialColor>;
1496
+ icon: _angular_core.InputSignal<string>;
1497
+ ariaLabel: _angular_core.InputSignal<string>;
1498
+ tooltip: _angular_core.InputSignal<string | undefined>;
1499
+ disabled: _angular_core.InputSignal<boolean>;
1500
+ backdrop: _angular_core.InputSignal<boolean>;
1501
+ closeOnClickOutside: _angular_core.InputSignal<boolean>;
1502
+ closeOnEscape: _angular_core.InputSignal<boolean>;
1503
+ actions: _angular_core.InputSignal<SpeedDialAction[]>;
1504
+ customClass: _angular_core.InputSignal<string>;
1505
+ isOpen: _angular_core.ModelSignal<boolean>;
1506
+ onOpen: _angular_core.OutputEmitterRef<void>;
1507
+ onClose: _angular_core.OutputEmitterRef<void>;
1508
+ actionClick: _angular_core.OutputEmitterRef<SpeedDialAction>;
1509
+ private hoverTimeout?;
1510
+ containerClasses: _angular_core.Signal<string>;
1511
+ itemsContainerClasses: _angular_core.Signal<string>;
1512
+ triggerButtonClasses: _angular_core.Signal<string>;
1513
+ tooltipPositionForItems: _angular_core.Signal<"left" | "top">;
1286
1514
  toggle(): void;
1287
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<SpeedDialComponent, never>;
1288
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<SpeedDialComponent, "ol-speed-dial", never, { "isOpen": { "alias": "isOpen"; "required": false; "isSignal": true; }; }, { "isOpen": "isOpenChange"; }, never, ["*"], true, never>;
1515
+ open(): void;
1516
+ close(): void;
1517
+ handleAction(action: SpeedDialAction, event: MouseEvent): void;
1518
+ onMouseEnter(): void;
1519
+ onMouseLeave(): void;
1520
+ onBackdropMouseEnter(): void;
1521
+ onDocumentClick(event: MouseEvent): void;
1522
+ onEscape(): void;
1523
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<OlSpeedDialComponent, never>;
1524
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<OlSpeedDialComponent, "ol-speed-dial", never, { "direction": { "alias": "direction"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "trigger": { "alias": "trigger"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "tooltip": { "alias": "tooltip"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "backdrop": { "alias": "backdrop"; "required": false; "isSignal": true; }; "closeOnClickOutside": { "alias": "closeOnClickOutside"; "required": false; "isSignal": true; }; "closeOnEscape": { "alias": "closeOnEscape"; "required": false; "isSignal": true; }; "actions": { "alias": "actions"; "required": false; "isSignal": true; }; "customClass": { "alias": "class"; "required": false; "isSignal": true; }; "isOpen": { "alias": "isOpen"; "required": false; "isSignal": true; }; }, { "isOpen": "isOpenChange"; "onOpen": "onOpen"; "onClose": "onClose"; "actionClick": "actionClick"; }, never, ["*"], true, never>;
1525
+ }
1526
+
1527
+ declare class OlSpeedDialItemComponent {
1528
+ label: _angular_core.InputSignal<string>;
1529
+ icon: _angular_core.InputSignal<string | undefined>;
1530
+ tooltip: _angular_core.InputSignal<string | undefined>;
1531
+ tooltipPosition: _angular_core.InputSignal<"left" | "right" | "top" | "bottom">;
1532
+ disabled: _angular_core.InputSignal<boolean>;
1533
+ type: _angular_core.InputSignal<SpeedDialType>;
1534
+ customClass: _angular_core.InputSignal<string>;
1535
+ onClick: _angular_core.OutputEmitterRef<MouseEvent>;
1536
+ handleClick(event: MouseEvent): void;
1537
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<OlSpeedDialItemComponent, never>;
1538
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<OlSpeedDialItemComponent, "ol-speed-dial-item", never, { "label": { "alias": "label"; "required": true; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "tooltip": { "alias": "tooltip"; "required": false; "isSignal": true; }; "tooltipPosition": { "alias": "tooltipPosition"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "customClass": { "alias": "class"; "required": false; "isSignal": true; }; }, { "onClick": "onClick"; }, never, ["*"], true, never>;
1289
1539
  }
1290
1540
 
1291
- type SpinnerSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
1292
- type SpinnerColor = 'blue' | 'gray' | 'green' | 'red' | 'yellow' | 'pink' | 'purple';
1293
- declare class SpinnerComponent {
1294
- readonly size: _angular_core.InputSignal<SpinnerSize>;
1295
- readonly color: _angular_core.InputSignal<SpinnerColor>;
1296
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<SpinnerComponent, never>;
1297
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<SpinnerComponent, "ol-spinner", never, { "size": { "alias": "size"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1541
+ /**
1542
+ * OlSpinner - Loading spinner component
1543
+ *
1544
+ * Hiển thị loading indicator với nhiều variants và sizes
1545
+ *
1546
+ * @example
1547
+ * // Circle spinner (default)
1548
+ * <ol-spinner />
1549
+ *
1550
+ * // Dots spinner
1551
+ * <ol-spinner variant="dots" size="lg" color="brand" />
1552
+ *
1553
+ * // Pulse spinner
1554
+ * <ol-spinner variant="pulse" size="xl" color="success" />
1555
+ */
1556
+ declare class OlSpinnerComponent {
1557
+ /**
1558
+ * Variant của spinner
1559
+ * - circle: Vòng tròn xoay với viền khuyết (default)
1560
+ * - dots: 3 chấm tròn nhấp nhô
1561
+ * - pulse: Hình tròn nhấp nháy scale
1562
+ */
1563
+ variant: _angular_core.InputSignal<"circle" | "pulse" | "dots">;
1564
+ /**
1565
+ * Kích thước spinner
1566
+ * - xs: 12px (w-3 h-3)
1567
+ * - sm: 16px (w-4 h-4)
1568
+ * - md: 24px (w-6 h-6) - default
1569
+ * - lg: 36px (w-9 h-9)
1570
+ * - xl: 48px (w-12 h-12)
1571
+ */
1572
+ size: _angular_core.InputSignal<"xs" | "sm" | "md" | "lg" | "xl">;
1573
+ /**
1574
+ * Màu sắc của spinner
1575
+ * - brand: border-brand-600 (default)
1576
+ * - white: border-white
1577
+ * - success: border-emerald-600
1578
+ * - warning: border-amber-500
1579
+ * - danger: border-rose-600
1580
+ * - gray: border-gray-400
1581
+ */
1582
+ color: _angular_core.InputSignal<"brand" | "danger" | "success" | "warning" | "white" | "gray">;
1583
+ /**
1584
+ * Aria label cho accessibility
1585
+ */
1586
+ ariaLabel: _angular_core.InputSignal<string>;
1587
+ /**
1588
+ * Computed classes cho spinner container
1589
+ */
1590
+ spinnerClasses: _angular_core.Signal<string>;
1591
+ /**
1592
+ * Computed classes cho size
1593
+ */
1594
+ sizeClasses: _angular_core.Signal<"w-4 h-4" | "w-6 h-6" | "w-12 h-12" | "w-3 h-3" | "w-9 h-9">;
1595
+ /**
1596
+ * Computed classes cho dots
1597
+ */
1598
+ dotClasses: _angular_core.Signal<string>;
1599
+ /**
1600
+ * Computed classes cho pulse
1601
+ */
1602
+ pulseClasses: _angular_core.Signal<string>;
1603
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<OlSpinnerComponent, never>;
1604
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<OlSpinnerComponent, "ol-spinner", never, { "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; }; }, {}, never, never, true, never>;
1298
1605
  }
1299
1606
 
1300
1607
  declare class TableComponent {
@@ -1383,6 +1690,76 @@ declare class ToastComponent implements OnDestroy {
1383
1690
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<ToastComponent, "ol-toast", never, { "type": { "alias": "type"; "required": false; "isSignal": true; }; "dismissible": { "alias": "dismissible"; "required": false; "isSignal": true; }; "duration": { "alias": "duration"; "required": false; "isSignal": true; }; "isVisible": { "alias": "isVisible"; "required": false; "isSignal": true; }; }, { "isVisible": "isVisibleChange"; "closed": "closed"; }, never, ["*"], true, never>;
1384
1691
  }
1385
1692
 
1693
+ interface ToastConfig {
1694
+ id?: string;
1695
+ type?: 'success' | 'danger' | 'warning' | 'info' | 'neutral';
1696
+ title?: string;
1697
+ message: string;
1698
+ duration?: number;
1699
+ position?: ToastPosition;
1700
+ actionLabel?: string;
1701
+ onAction?: () => void;
1702
+ showProgress?: boolean;
1703
+ avatar?: string;
1704
+ icon?: string | boolean;
1705
+ dismissible?: boolean;
1706
+ }
1707
+ type ToastPosition = 'top-right' | 'top-left' | 'top-center' | 'bottom-right' | 'bottom-left' | 'bottom-center';
1708
+ interface Toast extends ToastConfig {
1709
+ id: string;
1710
+ createdAt: number;
1711
+ }
1712
+
1713
+ declare class OlToastService {
1714
+ private toasts;
1715
+ private maxToasts;
1716
+ private defaultDuration;
1717
+ readonly toasts$: _angular_core.Signal<Toast[]>;
1718
+ show(config: ToastConfig): string;
1719
+ success(message: string, config?: Partial<ToastConfig>): string;
1720
+ error(message: string, config?: Partial<ToastConfig>): string;
1721
+ warning(message: string, config?: Partial<ToastConfig>): string;
1722
+ info(message: string, config?: Partial<ToastConfig>): string;
1723
+ dismiss(id: string): void;
1724
+ clear(position?: ToastPosition): void;
1725
+ private addToast;
1726
+ private scheduleAutoDismiss;
1727
+ private generateId;
1728
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<OlToastService, never>;
1729
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<any>;
1730
+ }
1731
+
1732
+ declare class OlToastComponent implements OnInit, OnDestroy {
1733
+ config: _angular_core.InputSignal<Toast>;
1734
+ dismiss: _angular_core.OutputEmitterRef<void>;
1735
+ progress: _angular_core.WritableSignal<number>;
1736
+ private progressInterval?;
1737
+ private isPaused;
1738
+ toastClasses: _angular_core.Signal<string>;
1739
+ showIcon: _angular_core.Signal<boolean>;
1740
+ iconName: _angular_core.Signal<string>;
1741
+ iconClasses: _angular_core.Signal<string>;
1742
+ progressBarClasses: _angular_core.Signal<string>;
1743
+ ngOnInit(): void;
1744
+ ngOnDestroy(): void;
1745
+ onMouseEnter(): void;
1746
+ onMouseLeave(): void;
1747
+ handleDismiss(): void;
1748
+ handleAction(): void;
1749
+ private startProgress;
1750
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<OlToastComponent, never>;
1751
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<OlToastComponent, "ol-toast", never, { "config": { "alias": "config"; "required": true; "isSignal": true; }; }, { "dismiss": "dismiss"; }, never, never, true, never>;
1752
+ }
1753
+
1754
+ declare class OlToastContainerComponent {
1755
+ toastService: OlToastService;
1756
+ positions: ToastPosition[];
1757
+ getToastsByPosition(position: ToastPosition): _edmicro_olkit.Toast[];
1758
+ getContainerClasses(position: ToastPosition): string;
1759
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<OlToastContainerComponent, never>;
1760
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<OlToastContainerComponent, "ol-toast-container", never, {}, {}, never, never, true, never>;
1761
+ }
1762
+
1386
1763
  type TooltipPlacement = 'top' | 'bottom' | 'left' | 'right';
1387
1764
  type TooltipTrigger = 'hover' | 'click';
1388
1765
  type TooltipTheme = 'dark' | 'light';
@@ -1406,6 +1783,120 @@ declare class TooltipComponent {
1406
1783
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<TooltipComponent, "ol-tooltip", never, { "content": { "alias": "content"; "required": false; "isSignal": true; }; "placement": { "alias": "placement"; "required": false; "isSignal": true; }; "trigger": { "alias": "trigger"; "required": false; "isSignal": true; }; "theme": { "alias": "theme"; "required": false; "isSignal": true; }; }, { "opened": "opened"; "closed": "closed"; }, never, ["*"], true, never>;
1407
1784
  }
1408
1785
 
1786
+ /**
1787
+ * Tooltip Directive
1788
+ * Provides accessible tooltips with Floating UI positioning
1789
+ *
1790
+ * @example
1791
+ * ```html
1792
+ * <button olTooltip="Lưu câu hỏi">
1793
+ * <ol-icon name="save" />
1794
+ * </button>
1795
+ *
1796
+ * <span olTooltip="Điểm cao nhất" tooltipPosition="bottom">9.5/10</span>
1797
+ *
1798
+ * <div olTooltip="Thông tin" tooltipTheme="light">Hover me</div>
1799
+ * ```
1800
+ */
1801
+ declare class OlTooltipDirective implements OnDestroy {
1802
+ private readonly elementRef;
1803
+ private readonly renderer;
1804
+ private readonly appRef;
1805
+ private readonly injector;
1806
+ private readonly positioningService;
1807
+ /** Tooltip content */
1808
+ olTooltip: _angular_core.InputSignal<string>;
1809
+ /** Tooltip position */
1810
+ tooltipPosition: _angular_core.InputSignal<"left" | "right" | "top" | "bottom">;
1811
+ /** Tooltip theme */
1812
+ tooltipTheme: _angular_core.InputSignal<"brand" | "dark" | "light">;
1813
+ /** Delay before showing tooltip (ms) */
1814
+ tooltipDelay: _angular_core.InputSignal<number>;
1815
+ /** Disable tooltip */
1816
+ tooltipDisabled: _angular_core.InputSignal<boolean>;
1817
+ /** Show arrow */
1818
+ tooltipArrow: _angular_core.InputSignal<boolean>;
1819
+ private showTimeout?;
1820
+ private hideTimeout?;
1821
+ private touchTimeout?;
1822
+ private tooltipComponent?;
1823
+ private tooltipElement?;
1824
+ private cleanupAutoUpdate?;
1825
+ private tooltipId;
1826
+ private mouseEnterListener?;
1827
+ private mouseLeaveListener?;
1828
+ private focusListener?;
1829
+ private blurListener?;
1830
+ private touchStartListener?;
1831
+ private touchEndListener?;
1832
+ constructor();
1833
+ ngOnDestroy(): void;
1834
+ /**
1835
+ * Setup event listeners for tooltip triggers
1836
+ */
1837
+ private setupListeners;
1838
+ /**
1839
+ * Remove event listeners
1840
+ */
1841
+ private removeListeners;
1842
+ /**
1843
+ * Schedule tooltip show with delay
1844
+ */
1845
+ private scheduleShow;
1846
+ /**
1847
+ * Schedule tooltip hide with delay
1848
+ */
1849
+ private scheduleHide;
1850
+ /**
1851
+ * Show tooltip
1852
+ */
1853
+ private show;
1854
+ /**
1855
+ * Hide tooltip
1856
+ */
1857
+ private hide;
1858
+ /**
1859
+ * Destroy tooltip component
1860
+ */
1861
+ private destroyTooltip;
1862
+ /**
1863
+ * Position tooltip using Floating UI
1864
+ */
1865
+ private positionTooltip;
1866
+ /**
1867
+ * Cleanup all resources
1868
+ */
1869
+ private cleanup;
1870
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<OlTooltipDirective, never>;
1871
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<OlTooltipDirective, "[olTooltip]", never, { "olTooltip": { "alias": "olTooltip"; "required": true; "isSignal": true; }; "tooltipPosition": { "alias": "tooltipPosition"; "required": false; "isSignal": true; }; "tooltipTheme": { "alias": "tooltipTheme"; "required": false; "isSignal": true; }; "tooltipDelay": { "alias": "tooltipDelay"; "required": false; "isSignal": true; }; "tooltipDisabled": { "alias": "tooltipDisabled"; "required": false; "isSignal": true; }; "tooltipArrow": { "alias": "tooltipArrow"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1872
+ }
1873
+
1874
+ /**
1875
+ * Internal Tooltip Component
1876
+ * Renders the actual tooltip content with theme and arrow support
1877
+ * Used internally by OlTooltipDirective
1878
+ */
1879
+ declare class OlTooltipComponent {
1880
+ /** Tooltip content text */
1881
+ content: _angular_core.InputSignal<string>;
1882
+ /** Theme variant */
1883
+ theme: _angular_core.InputSignal<"brand" | "dark" | "light">;
1884
+ /** Tooltip ID for ARIA */
1885
+ tooltipId: _angular_core.InputSignal<string>;
1886
+ /** Show arrow */
1887
+ arrow: _angular_core.InputSignal<boolean>;
1888
+ /**
1889
+ * Computed tooltip classes based on theme
1890
+ */
1891
+ tooltipClasses: _angular_core.Signal<string>;
1892
+ /**
1893
+ * Computed arrow classes based on theme
1894
+ */
1895
+ arrowClasses: _angular_core.Signal<string>;
1896
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<OlTooltipComponent, never>;
1897
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<OlTooltipComponent, "ol-tooltip-internal", never, { "content": { "alias": "content"; "required": true; "isSignal": true; }; "theme": { "alias": "theme"; "required": false; "isSignal": true; }; "tooltipId": { "alias": "tooltipId"; "required": false; "isSignal": true; }; "arrow": { "alias": "arrow"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1898
+ }
1899
+
1409
1900
  type IconSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | '3xl' | number;
1410
1901
  type IconColor = 'current' | 'brand' | 'primary' | 'secondary' | 'success' | 'danger' | 'warning' | 'white' | 'muted' | string;
1411
1902
  type IconVariant = 'linear' | 'bold' | 'line-duotone' | 'file-type' | 'brand' | 'custom' | string;
@@ -1452,7 +1943,8 @@ declare class OlIconService {
1452
1943
  */
1453
1944
  private loadManifest;
1454
1945
  /**
1455
- * Lấy SVG SafeHtml tức thì đồng bộ 0ms từ In-Memory Pre-bundled Registry
1946
+ * Lấy SVG SafeHtml tức thì đồng bộ 0ms từ In-Memory Pre-bundled Registry (OL_ICONS)
1947
+ * Tất cả icons được lưu trong OL_ICONS (icons.data.ts) - nguồn dữ liệu duy nhất, hỗ trợ tree-shaking.
1456
1948
  */
1457
1949
  getIconSync(name: string, variant?: string): SafeHtml | null;
1458
1950
  /**
@@ -1460,13 +1952,17 @@ declare class OlIconService {
1460
1952
  */
1461
1953
  getIcon(name: string, variant?: string): Observable<SafeHtml | null>;
1462
1954
  private fetchIconSvg;
1463
- private readonly builtinSvgMap;
1955
+ /**
1956
+ * Alias map: ánh xạ tên icon thay thế sang tên chuẩn trong OL_ICONS.
1957
+ * Các icons trong builtinSvgMap cũ đã được hợp nhất trực tiếp vào OL_ICONS (icons.data.ts)
1958
+ * để chuẩn hoá về một nguồn dữ liệu duy nhất, hỗ trợ tree-shaking.
1959
+ */
1464
1960
  private readonly aliasMap;
1465
1961
  private getCandidateUrls;
1466
1962
  private normalizeKey;
1467
1963
  private cleanSvg;
1468
1964
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<OlIconService, never>;
1469
- static ɵprov: _angular_core.ɵɵInjectableDeclaration<OlIconService>;
1965
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<any>;
1470
1966
  }
1471
1967
 
1472
1968
  /**
@@ -1503,7 +1999,7 @@ declare class BottomNavComponent {
1503
1999
  readonly bordered: _angular_core.InputSignal<boolean>;
1504
2000
  readonly shadow: _angular_core.InputSignal<boolean>;
1505
2001
  readonly safeArea: _angular_core.InputSignal<boolean>;
1506
- readonly position: _angular_core.InputSignal<"relative" | "fixed">;
2002
+ readonly position: _angular_core.InputSignal<"fixed" | "relative">;
1507
2003
  readonly navClasses: _angular_core.Signal<string>;
1508
2004
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<BottomNavComponent, never>;
1509
2005
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<BottomNavComponent, "ol-bottom-nav", never, { "bordered": { "alias": "bordered"; "required": false; "isSignal": true; }; "shadow": { "alias": "shadow"; "required": false; "isSignal": true; }; "safeArea": { "alias": "safeArea"; "required": false; "isSignal": true; }; "position": { "alias": "position"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
@@ -1568,6 +2064,493 @@ declare class StepperComponent {
1568
2064
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<StepperComponent, "ol-stepper", never, { "currentStep": { "alias": "currentStep"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; "breakpoint": { "alias": "breakpoint"; "required": false; "isSignal": true; }; "linear": { "alias": "linear"; "required": false; "isSignal": true; }; "clickable": { "alias": "clickable"; "required": false; "isSignal": true; }; }, { "currentStep": "currentStepChange"; "stepChange": "stepChange"; }, ["steps"], ["*"], true, never>;
1569
2065
  }
1570
2066
 
1571
- export { AccordionComponent, AccordionItemComponent, AlertComponent, AutocompleteComponent, AvatarComponent, AvatarGroupComponent, BadgeComponent, BannerComponent, BottomNavComponent, BottomNavItemComponent, BreadcrumbComponent, BreadcrumbItemComponent, ButtonComponent, ButtonGroupComponent, CardComponent, CarouselComponent, CarouselSlideComponent, CheckboxComponent, ClipboardComponent, CollapseComponent, DateRangePickerComponent, DatepickerComponent, DatepickerDirective, DatepickerFooterComponent, DatepickerHeaderComponent, DatepickerPopupComponent, DatepickerStateService, DayViewComponent, DownloadAppButtonComponent, DrawerComponent, DropdownComponent, DropdownItemComponent, FileInputComponent, FloatingLabelComponent, FooterComponent, IconComponent, IconShapeComponent, InputComponent, InputCounterComponent, KbdComponent, ListGroupComponent, ListGroupItemComponent, MONTHS_FULL_EN, MONTHS_FULL_VI, MONTHS_SHORT_VI, ModalComponent, MonthViewComponent, NavDropdownComponent, NavbarComponent, NavbarItemComponent, OL_ICONS, OlIconService, OtpInputComponent, PaginationComponent, PopoverComponent, ProgressComponent, RadioComponent, RangeComponent, RatingComponent, RichTextEditorComponent, SelectComponent, SidebarComponent, SidebarGroupComponent, SidebarItemComponent, SidebarSubmenuComponent, SkeletonComponent, SpeedDialComponent, SpinnerComponent, StepItemComponent, StepperComponent, TabItemComponent, TableComponent, TabsComponent, TagInputComponent, TextareaComponent, TimelineComponent, TimelineItemComponent, TimepickerComponent, ToastComponent, ToggleComponent, TooltipComponent, WEEKDAYS_SHORT_EN, WEEKDAYS_SHORT_VI, YearViewComponent, cloneDate, endOfDay, formatDate, generateMonthMatrix, generateMonthsMatrix, generateYearsMatrix, isBetween, isDateDisabled, isSameDay, isSameMonth, isSameYear, isToday, parseDate, startOfDay };
1572
- export type { AlertColor, AlertVariant, AppDevice, AppTheme, AutocompleteOption, AutocompleteSize, AutocompleteState, AvatarShape, AvatarSize, AvatarStatus, BadgeShape, BadgeSize, BadgeTheme, BadgeType, BreadcrumbItemStatus, BreadcrumbSeparator, BreadcrumbVariant, ButtonColor, ButtonGroupColor, ButtonGroupOrientation, ButtonGroupSize, ButtonSize, CardPadding, CardRadius, CardShadow, CardVariant, CheckboxSize, DateCustomClass, DateRange, DatepickerPreset, DatepickerSelectionMode, DatepickerSize, DatepickerViewMode, DayCell, DrawerPlacement, DropdownAutoClose, DropdownPlacement, DropdownTrigger, FileInputSize, FloatingLabelSize, FloatingLabelState, FloatingLabelVariant, IconColor, IconDefinition, IconManifestEntry, IconShapeColor, IconShapeSize, IconShapeType, IconSize, IconVariant, InputCounterSize, InputSize, InputState, ModalPlacement, ModalSize, MonthCell, PaginationType, PaginationVariant, PopoverPlacement, ProgressColor, ProgressSize, RadioSize, SelectOption, SelectSize, SelectState, SpinnerColor, SpinnerSize, StepState, StepperBreakpoint, StepperOrientation, StepperVariant, TabsSize, TabsVariant, TextareaState, TimepickerFormat, TimepickerSize, TimepickerState, ToastType, ToggleColor, ToggleSize, TooltipPlacement, TooltipTheme, TooltipTrigger, YearCell };
2067
+ interface OlTreeNode {
2068
+ id: string;
2069
+ label: string;
2070
+ icon?: string;
2071
+ count?: number;
2072
+ badge?: string;
2073
+ badgeTheme?: 'brand' | 'green' | 'yellow' | 'red' | 'gray';
2074
+ children?: OlTreeNode[];
2075
+ expanded?: boolean;
2076
+ selected?: boolean;
2077
+ disabled?: boolean;
2078
+ data?: any;
2079
+ }
2080
+
2081
+ declare class TreeComponent {
2082
+ readonly nodes: _angular_core.ModelSignal<OlTreeNode[]>;
2083
+ readonly checkable: _angular_core.InputSignal<boolean>;
2084
+ readonly selectionMode: _angular_core.InputSignal<"single" | "multiple">;
2085
+ readonly bordered: _angular_core.InputSignal<boolean>;
2086
+ readonly toggleIcon: _angular_core.InputSignal<"plus-minus" | "chevron">;
2087
+ readonly nodeSelect: _angular_core.OutputEmitterRef<OlTreeNode>;
2088
+ readonly nodeCheck: _angular_core.OutputEmitterRef<{
2089
+ node: OlTreeNode;
2090
+ checked: boolean;
2091
+ }>;
2092
+ handleNodeClick(node: OlTreeNode): void;
2093
+ handleNodeCheck(event: {
2094
+ node: OlTreeNode;
2095
+ checked: boolean;
2096
+ }): void;
2097
+ handleToggleExpand(node: OlTreeNode): void;
2098
+ private updateNodeCheckCascade;
2099
+ private updateNodeExpanded;
2100
+ private setAllDescendantsSelected;
2101
+ private setSelectedNodeSingle;
2102
+ private cloneTree;
2103
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<TreeComponent, never>;
2104
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TreeComponent, "ol-tree", never, { "nodes": { "alias": "nodes"; "required": false; "isSignal": true; }; "checkable": { "alias": "checkable"; "required": false; "isSignal": true; }; "selectionMode": { "alias": "selectionMode"; "required": false; "isSignal": true; }; "bordered": { "alias": "bordered"; "required": false; "isSignal": true; }; "toggleIcon": { "alias": "toggleIcon"; "required": false; "isSignal": true; }; }, { "nodes": "nodesChange"; "nodeSelect": "nodeSelect"; "nodeCheck": "nodeCheck"; }, never, never, true, never>;
2105
+ }
2106
+
2107
+ declare class TreeNodeComponent {
2108
+ readonly node: _angular_core.InputSignal<OlTreeNode>;
2109
+ readonly checkable: _angular_core.InputSignal<boolean>;
2110
+ readonly selectionMode: _angular_core.InputSignal<"single" | "multiple">;
2111
+ readonly toggleIcon: _angular_core.InputSignal<"plus-minus" | "chevron">;
2112
+ readonly level: _angular_core.InputSignal<number>;
2113
+ readonly nodeClick: _angular_core.OutputEmitterRef<OlTreeNode>;
2114
+ readonly nodeCheck: _angular_core.OutputEmitterRef<{
2115
+ node: OlTreeNode;
2116
+ checked: boolean;
2117
+ }>;
2118
+ readonly toggleExpand: _angular_core.OutputEmitterRef<OlTreeNode>;
2119
+ handleToggle(event: MouseEvent): void;
2120
+ handleClick(): void;
2121
+ handleCheck(event: Event): void;
2122
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<TreeNodeComponent, never>;
2123
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TreeNodeComponent, "ol-tree-node", never, { "node": { "alias": "node"; "required": true; "isSignal": true; }; "checkable": { "alias": "checkable"; "required": false; "isSignal": true; }; "selectionMode": { "alias": "selectionMode"; "required": false; "isSignal": true; }; "toggleIcon": { "alias": "toggleIcon"; "required": false; "isSignal": true; }; "level": { "alias": "level"; "required": false; "isSignal": true; }; }, { "nodeClick": "nodeClick"; "nodeCheck": "nodeCheck"; "toggleExpand": "toggleExpand"; }, never, never, true, never>;
2124
+ }
2125
+
2126
+ type ChartType = 'line' | 'smooth-line' | 'area' | 'smooth-area' | 'step-line' | 'bar' | 'stacked-bar' | 'horizontal-bar' | 'stacked-horizontal-bar' | 'diverging-bar' | 'pie' | 'donut' | 'rose' | 'radar' | 'gauge' | 'radial' | 'scatter' | 'heatmap' | 'boxplot';
2127
+ /** Cấu hình chuỗi dữ liệu (Dành cho Line, Bar, Stacked Bar, Area, Radar) */
2128
+ interface ChartSeries {
2129
+ /** Tên chuỗi hiển thị trên Legend và Tooltip */
2130
+ name: string;
2131
+ /** Mảng giá trị tương ứng từng danh mục (categories) */
2132
+ data: number[];
2133
+ /** Màu sắc đặc trưng cho chuỗi (mã HEX, HSL hoặc tên biến CSS) */
2134
+ color?: string;
2135
+ /** Độ dày nét vẽ cho biểu đồ đường (mặc định 2.5) */
2136
+ strokeWidth?: number;
2137
+ /** Nét đứt (ví dụ: '4 4') */
2138
+ strokeDasharray?: string;
2139
+ }
2140
+ /** Cấu hình phân đoạn điểm dữ liệu (Dành cho Pie, Donut, Rose, Gauge) */
2141
+ interface ChartDataPoint {
2142
+ /** Nhãn mô tả phân đoạn */
2143
+ label: string;
2144
+ /** Giá trị số của phân đoạn */
2145
+ value: number;
2146
+ /** Màu sắc phân đoạn (nếu không cung cấp sẽ lấy theo bảng màu mặc định) */
2147
+ color?: string;
2148
+ /** Chú thích bổ sung hiển thị trên tooltip hoặc legend */
2149
+ subLabel?: string;
2150
+ }
2151
+ /** Cấu hình trục đánh giá đa chiều cho biểu đồ Radar */
2152
+ interface RadarIndicator {
2153
+ /** Tên tiêu chí đánh giá (ví dụ: 'Tư duy logic', 'Tính toán nhanh') */
2154
+ name: string;
2155
+ /** Giá trị tối đa của thang điểm (mặc định: 100) */
2156
+ max?: number;
2157
+ }
2158
+ /** Điểm dữ liệu toạ độ cho biểu đồ phân tán Scatter */
2159
+ interface ScatterDataPoint {
2160
+ /** Toạ độ trục hoành (X) */
2161
+ x: number;
2162
+ /** Toạ độ trục tung (Y) */
2163
+ y: number;
2164
+ /** Kích thước điểm tròn (mặc định 6) */
2165
+ size?: number;
2166
+ /** Nhãn tên của đối tượng dữ liệu */
2167
+ label?: string;
2168
+ /** Màu sắc riêng của điểm */
2169
+ color?: string;
2170
+ }
2171
+ /** Chuỗi dữ liệu phân tán */
2172
+ interface ScatterSeries {
2173
+ /** Tên nhóm phân tán */
2174
+ name: string;
2175
+ /** Danh sách các điểm toạ độ */
2176
+ data: ScatterDataPoint[];
2177
+ /** Màu mặc định của nhóm */
2178
+ color?: string;
2179
+ }
2180
+ /** Dữ liệu bản đồ nhiệt Heatmap theo ma trận 2 chiều */
2181
+ interface HeatmapData {
2182
+ /** Danh sách nhãn cột (Trục X: ví dụ thứ trong tuần T2 -> CN) */
2183
+ xLabels: string[];
2184
+ /** Danh sách nhãn hàng (Trục Y: ví dụ khung giờ 08:00, 12:00, 18:00...) */
2185
+ yLabels: string[];
2186
+ /** Ma trận giá trị [hàng][cột] tương ứng yLabels x xLabels */
2187
+ matrix: number[][];
2188
+ /** Giá trị nhỏ nhất thang đo nhiệt (mặc định: 0) */
2189
+ min?: number;
2190
+ /** Giá trị lớn nhất thang đo nhiệt (mặc định: tự động tính) */
2191
+ max?: number;
2192
+ /** Đơn vị đo hiển thị khi hover tooltip (ví dụ: 'lượt', 'câu', 'phút') */
2193
+ unit?: string;
2194
+ }
2195
+ /** Điểm dữ liệu biểu đồ hộp Boxplot (Thống kê phân vị điểm số) */
2196
+ interface BoxplotDataPoint {
2197
+ /** Nhãn nhóm (ví dụ: 'Lớp 12A1', 'Đề số 01') */
2198
+ label: string;
2199
+ /** Giá trị nhỏ nhất */
2200
+ min: number;
2201
+ /** Tứ phân vị thứ nhất (Q1 - 25%) */
2202
+ q1: number;
2203
+ /** Trung vị (Median - 50%) */
2204
+ median: number;
2205
+ /** Tứ phân vị thứ ba (Q3 - 75%) */
2206
+ q3: number;
2207
+ /** Giá trị lớn nhất */
2208
+ max: number;
2209
+ /** Các điểm ngoại lai (nếu có) */
2210
+ outliers?: number[];
2211
+ /** Màu sắc biểu diễn hộp */
2212
+ color?: string;
2213
+ }
2214
+
2215
+ declare class ChartComponent {
2216
+ /** Chủng loại biểu đồ */
2217
+ readonly type: _angular_core.InputSignal<ChartType>;
2218
+ /** Tiêu đề chính */
2219
+ readonly title: _angular_core.InputSignal<string>;
2220
+ /** Tiêu đề phụ / mô tả */
2221
+ readonly subtitle: _angular_core.InputSignal<string>;
2222
+ /** Danh sách nhãn phân loại trục hoành */
2223
+ readonly categories: _angular_core.InputSignal<string[]>;
2224
+ /** Chuỗi dữ liệu số (Line, Bar, Stacked, Area, Radar) */
2225
+ readonly series: _angular_core.InputSignal<ChartSeries[]>;
2226
+ /** Dữ liệu phân đoạn (Pie, Donut, Rose) */
2227
+ readonly dataPoints: _angular_core.InputSignal<ChartDataPoint[]>;
2228
+ /** Chỉ số đa chiều (Radar) */
2229
+ readonly indicators: _angular_core.InputSignal<RadarIndicator[]>;
2230
+ /** Chuỗi dữ liệu phân tán (Scatter) */
2231
+ readonly scatterSeries: _angular_core.InputSignal<ScatterSeries[]>;
2232
+ /** Ma trận nhiệt độ dữ liệu (Heatmap) */
2233
+ readonly heatmapData: _angular_core.InputSignal<HeatmapData | null>;
2234
+ /** Dữ liệu biểu đồ hộp (Boxplot) */
2235
+ readonly boxplotData: _angular_core.InputSignal<BoxplotDataPoint[]>;
2236
+ /** Giá trị đo lường tiến độ (Gauge / Radial) */
2237
+ readonly value: _angular_core.InputSignal<number>;
2238
+ /** Giá trị tối đa (Gauge / Radial) */
2239
+ readonly max: _angular_core.InputSignal<number>;
2240
+ /** Chiều cao khung biểu đồ (px) */
2241
+ readonly height: _angular_core.InputSignal<number>;
2242
+ /** Hiển thị chú thích bảng màu (Legend) */
2243
+ readonly showLegend: _angular_core.InputSignal<boolean>;
2244
+ /** Hiển thị đường gióng toạ độ (Grid) */
2245
+ readonly showGrid: _angular_core.InputSignal<boolean>;
2246
+ /** Tiêu đề nhãn trục hoành (X-Axis) - ví dụ: "Thời gian", "Tháng", "Số phút" */
2247
+ readonly xAxisTitle: _angular_core.InputSignal<string>;
2248
+ /** Tiêu đề nhãn trục tung (Y-Axis) - ví dụ: "Điểm số", "Số lượng (câu)", "Tỷ lệ (%)" */
2249
+ readonly yAxisTitle: _angular_core.InputSignal<string>;
2250
+ /** Đơn vị hiển thị sau số liệu */
2251
+ readonly unit: _angular_core.InputSignal<string>;
2252
+ readonly defaultPalette: string[];
2253
+ readonly activeTooltip: _angular_core.WritableSignal<{
2254
+ x: number;
2255
+ y: number;
2256
+ title: string;
2257
+ items: {
2258
+ label: string;
2259
+ value: string | number;
2260
+ color?: string;
2261
+ }[];
2262
+ } | null>;
2263
+ readonly hiddenItems: _angular_core.WritableSignal<Set<string>>;
2264
+ toggleLegendItem(name: string): void;
2265
+ isItemHidden(name: string): boolean;
2266
+ readonly seriesLegendList: _angular_core.Signal<{
2267
+ name: string;
2268
+ color: string;
2269
+ hidden: boolean;
2270
+ }[]>;
2271
+ readonly radarLegendList: _angular_core.Signal<{
2272
+ name: string;
2273
+ color: string;
2274
+ hidden: boolean;
2275
+ }[]>;
2276
+ readonly scatterLegendList: _angular_core.Signal<{
2277
+ name: string;
2278
+ color: string;
2279
+ hidden: boolean;
2280
+ }[]>;
2281
+ readonly yAxisMin: _angular_core.Signal<number>;
2282
+ readonly yAxisMax: _angular_core.Signal<number>;
2283
+ readonly yGridSteps: _angular_core.Signal<number[]>;
2284
+ readonly svgWidth = 560;
2285
+ readonly svgHeight = 230;
2286
+ readonly padding: {
2287
+ top: number;
2288
+ right: number;
2289
+ bottom: number;
2290
+ left: number;
2291
+ };
2292
+ readonly innerWidth: _angular_core.Signal<number>;
2293
+ readonly innerHeight: _angular_core.Signal<number>;
2294
+ readonly linePaths: _angular_core.Signal<{
2295
+ name: string;
2296
+ color: string;
2297
+ strokeWidth: number;
2298
+ strokeDasharray: string | undefined;
2299
+ linePathD: string;
2300
+ areaPathD: string;
2301
+ points: {
2302
+ x: number;
2303
+ y: number;
2304
+ value: number;
2305
+ category: string;
2306
+ }[];
2307
+ }[]>;
2308
+ private getSmoothSvgPath;
2309
+ readonly columnsComputed: _angular_core.Signal<{
2310
+ categories: {
2311
+ label: string;
2312
+ displayLabel: string;
2313
+ centerX: number;
2314
+ }[];
2315
+ bars: {
2316
+ categoryIndex: number;
2317
+ seriesIndex: number;
2318
+ name: string;
2319
+ value: number;
2320
+ x: number;
2321
+ y: number;
2322
+ width: number;
2323
+ height: number;
2324
+ color: string;
2325
+ }[];
2326
+ }>;
2327
+ readonly stackedColumnsComputed: _angular_core.Signal<{
2328
+ categories: {
2329
+ label: string;
2330
+ displayLabel: string;
2331
+ centerX: number;
2332
+ }[];
2333
+ segments: {
2334
+ categoryIndex: number;
2335
+ seriesIndex: number;
2336
+ name: string;
2337
+ value: number;
2338
+ x: number;
2339
+ y: number;
2340
+ width: number;
2341
+ height: number;
2342
+ color: string;
2343
+ }[];
2344
+ }>;
2345
+ readonly totalDonutValue: _angular_core.Signal<number>;
2346
+ readonly donutSegments: _angular_core.Signal<{
2347
+ label: string;
2348
+ value: number;
2349
+ percentage: number;
2350
+ color: string;
2351
+ strokeDasharray: string;
2352
+ strokeDashoffset: number;
2353
+ }[]>;
2354
+ readonly pieSlices: _angular_core.Signal<{
2355
+ label: string;
2356
+ value: number;
2357
+ percentage: number;
2358
+ color: string;
2359
+ pathD: string;
2360
+ }[]>;
2361
+ readonly pieBreakdownItems: _angular_core.Signal<{
2362
+ label: string;
2363
+ value: number;
2364
+ percentage: number;
2365
+ color: string;
2366
+ hidden: boolean;
2367
+ }[]>;
2368
+ readonly gaugePercentage: _angular_core.Signal<number>;
2369
+ readonly gaugeOffset: _angular_core.Signal<number>;
2370
+ readonly radialOffset: _angular_core.Signal<number>;
2371
+ readonly radarIndicatorsList: _angular_core.Signal<RadarIndicator[]>;
2372
+ readonly radarGridRings: _angular_core.Signal<string[]>;
2373
+ readonly radarAxes: _angular_core.Signal<{
2374
+ name: string;
2375
+ x1: number;
2376
+ y1: number;
2377
+ x2: number;
2378
+ y2: number;
2379
+ labelX: number;
2380
+ labelY: number;
2381
+ anchor: string;
2382
+ }[]>;
2383
+ readonly radarSeriesPolygons: _angular_core.Signal<{
2384
+ name: string;
2385
+ color: string;
2386
+ points: {
2387
+ x: number;
2388
+ y: number;
2389
+ value: number;
2390
+ name: string;
2391
+ }[];
2392
+ polygonStr: string;
2393
+ }[]>;
2394
+ readonly scatterDataComputed: _angular_core.Signal<{
2395
+ seriesList: {
2396
+ name: string;
2397
+ color: string;
2398
+ points: {
2399
+ cx: number;
2400
+ cy: number;
2401
+ r: number;
2402
+ color: string;
2403
+ x: number;
2404
+ y: number;
2405
+ size?: number;
2406
+ label?: string;
2407
+ }[];
2408
+ }[];
2409
+ xMin: number;
2410
+ xMax: number;
2411
+ yMin: number;
2412
+ yMax: number;
2413
+ xTicks: {
2414
+ val: number;
2415
+ x: number;
2416
+ }[];
2417
+ yTicks: {
2418
+ val: number;
2419
+ y: number;
2420
+ }[];
2421
+ }>;
2422
+ readonly heatmapComputed: _angular_core.Signal<{
2423
+ xLabels: string[];
2424
+ yLabels: string[];
2425
+ unit: string;
2426
+ cells: {
2427
+ row: number;
2428
+ col: number;
2429
+ yLabel: string;
2430
+ xLabel: string;
2431
+ value: number;
2432
+ ratio: number;
2433
+ opacity: number;
2434
+ }[];
2435
+ } | null>;
2436
+ readonly boxplotComputed: _angular_core.Signal<{
2437
+ label: string;
2438
+ color: string;
2439
+ centerX: number;
2440
+ boxX: number;
2441
+ boxWidth: number;
2442
+ yMin: number;
2443
+ yQ1: number;
2444
+ yMedian: number;
2445
+ yQ3: number;
2446
+ yMax: number;
2447
+ raw: BoxplotDataPoint;
2448
+ }[]>;
2449
+ readonly horizontalBarsComputed: _angular_core.Signal<({
2450
+ category: string;
2451
+ total: number;
2452
+ segments: {
2453
+ name: string;
2454
+ value: number;
2455
+ widthPct: number;
2456
+ leftPct: number;
2457
+ color: string;
2458
+ }[];
2459
+ isStacked: boolean;
2460
+ items?: undefined;
2461
+ zeroPct?: undefined;
2462
+ isDiverging?: undefined;
2463
+ isGrouped?: undefined;
2464
+ } | {
2465
+ category: string;
2466
+ items: {
2467
+ name: string;
2468
+ value: number;
2469
+ widthPct: number;
2470
+ leftPct: number;
2471
+ color: string;
2472
+ }[];
2473
+ zeroPct: number;
2474
+ isDiverging: boolean;
2475
+ total?: undefined;
2476
+ segments?: undefined;
2477
+ isStacked?: undefined;
2478
+ isGrouped?: undefined;
2479
+ } | {
2480
+ category: string;
2481
+ items: {
2482
+ name: string;
2483
+ value: number;
2484
+ widthPct: number;
2485
+ color: string;
2486
+ }[];
2487
+ isGrouped: boolean;
2488
+ total?: undefined;
2489
+ segments?: undefined;
2490
+ isStacked?: undefined;
2491
+ zeroPct?: undefined;
2492
+ isDiverging?: undefined;
2493
+ })[]>;
2494
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ChartComponent, never>;
2495
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ChartComponent, "ol-chart", never, { "type": { "alias": "type"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "subtitle": { "alias": "subtitle"; "required": false; "isSignal": true; }; "categories": { "alias": "categories"; "required": false; "isSignal": true; }; "series": { "alias": "series"; "required": false; "isSignal": true; }; "dataPoints": { "alias": "dataPoints"; "required": false; "isSignal": true; }; "indicators": { "alias": "indicators"; "required": false; "isSignal": true; }; "scatterSeries": { "alias": "scatterSeries"; "required": false; "isSignal": true; }; "heatmapData": { "alias": "heatmapData"; "required": false; "isSignal": true; }; "boxplotData": { "alias": "boxplotData"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "showLegend": { "alias": "showLegend"; "required": false; "isSignal": true; }; "showGrid": { "alias": "showGrid"; "required": false; "isSignal": true; }; "xAxisTitle": { "alias": "xAxisTitle"; "required": false; "isSignal": true; }; "yAxisTitle": { "alias": "yAxisTitle"; "required": false; "isSignal": true; }; "unit": { "alias": "unit"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
2496
+ }
2497
+
2498
+ type ChatSender = 'user' | 'bot' | 'other';
2499
+ declare class ChatBubbleComponent {
2500
+ readonly sender: _angular_core.InputSignal<ChatSender>;
2501
+ readonly senderName: _angular_core.InputSignal<string>;
2502
+ readonly time: _angular_core.InputSignal<string>;
2503
+ readonly avatar: _angular_core.InputSignal<string>;
2504
+ readonly avatarText: _angular_core.InputSignal<string>;
2505
+ readonly status: _angular_core.InputSignal<"sending" | "sent" | "read" | "delivered">;
2506
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ChatBubbleComponent, never>;
2507
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ChatBubbleComponent, "ol-chat-bubble", never, { "sender": { "alias": "sender"; "required": false; "isSignal": true; }; "senderName": { "alias": "senderName"; "required": false; "isSignal": true; }; "time": { "alias": "time"; "required": false; "isSignal": true; }; "avatar": { "alias": "avatar"; "required": false; "isSignal": true; }; "avatarText": { "alias": "avatarText"; "required": false; "isSignal": true; }; "status": { "alias": "status"; "required": false; "isSignal": true; }; }, {}, never, ["*", "*", "*"], true, never>;
2508
+ }
2509
+
2510
+ declare class ChatContainerComponent {
2511
+ readonly title: _angular_core.InputSignal<string>;
2512
+ readonly status: _angular_core.InputSignal<string>;
2513
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ChatContainerComponent, never>;
2514
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ChatContainerComponent, "ol-chat-container", never, { "title": { "alias": "title"; "required": false; "isSignal": true; }; "status": { "alias": "status"; "required": false; "isSignal": true; }; }, {}, never, ["[slot=header-actions]", "*", "[slot=footer]"], true, never>;
2515
+ }
2516
+
2517
+ type DeviceType = 'browser' | 'iphone' | 'tablet';
2518
+ declare class DeviceMockupComponent {
2519
+ readonly device: _angular_core.InputSignal<DeviceType>;
2520
+ readonly url: _angular_core.InputSignal<string>;
2521
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DeviceMockupComponent, never>;
2522
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DeviceMockupComponent, "ol-device-mockup", never, { "device": { "alias": "device"; "required": false; "isSignal": true; }; "url": { "alias": "url"; "required": false; "isSignal": true; }; }, {}, never, ["*", "*", "*"], true, never>;
2523
+ }
2524
+
2525
+ declare class GalleryComponent {
2526
+ readonly cols: _angular_core.InputSignal<2 | 3 | 4 | 5>;
2527
+ readonly gap: _angular_core.InputSignal<"sm" | "md" | "lg">;
2528
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<GalleryComponent, never>;
2529
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<GalleryComponent, "ol-gallery", never, { "cols": { "alias": "cols"; "required": false; "isSignal": true; }; "gap": { "alias": "gap"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
2530
+ }
2531
+
2532
+ declare class GalleryItemComponent {
2533
+ readonly src: _angular_core.InputSignal<string>;
2534
+ readonly alt: _angular_core.InputSignal<string>;
2535
+ readonly title: _angular_core.InputSignal<string>;
2536
+ readonly subtitle: _angular_core.InputSignal<string>;
2537
+ readonly ratio: _angular_core.InputSignal<"video" | "square" | "auto" | "portrait">;
2538
+ readonly itemClick: _angular_core.OutputEmitterRef<void>;
2539
+ handleClick(): void;
2540
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<GalleryItemComponent, never>;
2541
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<GalleryItemComponent, "ol-gallery-item", never, { "src": { "alias": "src"; "required": true; "isSignal": true; }; "alt": { "alias": "alt"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "subtitle": { "alias": "subtitle"; "required": false; "isSignal": true; }; "ratio": { "alias": "ratio"; "required": false; "isSignal": true; }; }, { "itemClick": "itemClick"; }, never, never, true, never>;
2542
+ }
2543
+
2544
+ type JumbotronVariant = 'brand' | 'dark' | 'gradient' | 'light';
2545
+ declare class JumbotronComponent {
2546
+ readonly title: _angular_core.InputSignal<string>;
2547
+ readonly subtitle: _angular_core.InputSignal<string>;
2548
+ readonly badgeText: _angular_core.InputSignal<string>;
2549
+ readonly variant: _angular_core.InputSignal<JumbotronVariant>;
2550
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<JumbotronComponent, never>;
2551
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<JumbotronComponent, "ol-jumbotron", never, { "title": { "alias": "title"; "required": false; "isSignal": true; }; "subtitle": { "alias": "subtitle"; "required": false; "isSignal": true; }; "badgeText": { "alias": "badgeText"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; }, {}, never, ["[slot=badge-icon]", "[slot=actions]", "*"], true, never>;
2552
+ }
2553
+
2554
+ export { AlertComponent, AutocompleteComponent, AvatarComponent, AvatarGroupComponent, BadgeComponent, BottomNavComponent, BottomNavItemComponent, BreadcrumbComponent, BreadcrumbItemComponent, ButtonComponent, ButtonGroupComponent, CardComponent, CarouselComponent, CarouselSlideComponent, ChartComponent, ChatBubbleComponent, ChatContainerComponent, CheckboxComponent, ClipboardComponent, CollapseComponent, DateRangePickerComponent, DatepickerComponent, DatepickerDirective, DatepickerFooterComponent, DatepickerHeaderComponent, DatepickerPopupComponent, DatepickerStateService, DayViewComponent, DeviceMockupComponent, DownloadAppButtonComponent, DrawerComponent, DropdownComponent, DropdownItemComponent, FileInputComponent, FloatingLabelComponent, FooterComponent, GalleryComponent, GalleryItemComponent, IconComponent, IconShapeComponent, InputComponent, InputCounterComponent, JumbotronComponent, KbdComponent, ListGroupComponent, ListGroupItemComponent, MONTHS_FULL_EN, MONTHS_FULL_VI, MONTHS_SHORT_VI, ModalComponent, MonthViewComponent, NavDropdownComponent, NavbarComponent, NavbarItemComponent, OL_ICONS, OlAccordionComponent, OlAccordionItemComponent, OlAlertComponent, OlBannerComponent, OlIconService, OlSkeletonComponent, OlSpeedDialComponent, OlSpeedDialItemComponent, OlSpinnerComponent, OlToastComponent, OlToastContainerComponent, OlToastService, OlTooltipComponent, OlTooltipDirective, OtpInputComponent, PaginationComponent, PopoverComponent, ProgressComponent, RadioComponent, RangeComponent, RatingComponent, RichTextEditorComponent, SelectComponent, SidebarComponent, SidebarGroupComponent, SidebarItemComponent, SidebarSubmenuComponent, StepItemComponent, StepperComponent, TabItemComponent, TableComponent, TabsComponent, TagInputComponent, TextareaComponent, TimelineComponent, TimelineItemComponent, TimepickerComponent, ToastComponent, ToggleComponent, TooltipComponent, TreeComponent, TreeNodeComponent, WEEKDAYS_SHORT_EN, WEEKDAYS_SHORT_VI, YearViewComponent, cloneDate, endOfDay, formatDate, generateMonthMatrix, generateMonthsMatrix, generateYearsMatrix, isBetween, isDateDisabled, isSameDay, isSameMonth, isSameYear, isToday, parseDate, startOfDay };
2555
+ export type { AccordionVariant, AlertColor, AlertRounded, AlertType, AlertVariant$1 as AlertVariant, AppDevice, AppTheme, AutocompleteOption, AutocompleteSize, AutocompleteState, AvatarShape, AvatarSize, AvatarStatus, BadgeShape, BadgeSize, BadgeTheme, BadgeType, BannerPosition, BannerVariant, BoxplotDataPoint, BreadcrumbItemStatus, BreadcrumbSeparator, BreadcrumbVariant, ButtonColor, ButtonGroupColor, ButtonGroupOrientation, ButtonGroupSize, ButtonSize, CardPadding, CardRadius, CardShadow, CardVariant, ChartDataPoint, ChartSeries, ChartType, ChatSender, CheckboxSize, DateCustomClass, DateRange, DatepickerPreset, DatepickerSelectionMode, DatepickerSize, DatepickerViewMode, DayCell, DeviceType, DrawerPlacement, DropdownAutoClose, DropdownPlacement, DropdownTrigger, FileInputSize, FloatingLabelSize, FloatingLabelState, FloatingLabelVariant, HeatmapData, IconColor, IconDefinition, IconManifestEntry, IconShapeColor, IconShapeSize, IconShapeType, IconSize, IconVariant, InputCounterSize, InputSize, InputState, JumbotronVariant, ModalPlacement, ModalSize, MonthCell, OlTreeNode, PaginationType, PaginationVariant, PopoverPlacement, ProgressColor, ProgressSize, RadarIndicator, RadioSize, ScatterDataPoint, ScatterSeries, SelectOption, SelectSize, SelectState, SpeedDialAction, SpeedDialColor, SpeedDialDirection, SpeedDialTrigger, SpeedDialType, StepState, StepperBreakpoint, StepperOrientation, StepperVariant, TabsSize, TabsVariant, TextareaState, TimeObject, TimepickerFormat, TimepickerSize, TimepickerState, Toast, ToastConfig, ToastPosition, ToastType, ToggleColor, ToggleSize, TooltipPlacement, TooltipTheme, TooltipTrigger, YearCell };
1573
2556
  //# sourceMappingURL=edmicro-olkit.d.ts.map