@life-cockpit/angular-ui-kit 1.0.3 → 1.1.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.
@@ -1,7 +1,7 @@
1
1
  import * as _angular_core from '@angular/core';
2
- import { EventEmitter, ElementRef, OnInit, OnDestroy, AfterViewInit, QueryList, Signal, TemplateRef, AfterContentInit } from '@angular/core';
2
+ import { EventEmitter, ElementRef, OnInit, OnDestroy, AfterViewInit, QueryList, Signal, TemplateRef, AfterContentInit, AfterViewChecked } from '@angular/core';
3
3
  import { ControlValueAccessor } from '@angular/forms';
4
- import { SafeHtml } from '@angular/platform-browser';
4
+ import { SafeHtml, DomSanitizer, SafeResourceUrl } from '@angular/platform-browser';
5
5
 
6
6
  /**
7
7
  * Do not edit directly, this file was auto-generated.
@@ -212,6 +212,13 @@ interface NavigationItem {
212
212
  /**
213
213
  * Accordion component for collapsible content sections.
214
214
  *
215
+ * Features:
216
+ * - Expandable/collapsible content panels
217
+ * - Two-way binding for expanded state
218
+ * - Animated expand/collapse transitions
219
+ * - Content projection for custom body content
220
+ * - Accessible with keyboard support
221
+ *
215
222
  * @example
216
223
  * ```html
217
224
  * <lc-accordion title="Section Title" [(expanded)]="isOpen">
@@ -268,7 +275,14 @@ declare class ButtonComponent {
268
275
  }
269
276
 
270
277
  /**
271
- * Card component for content grouping and hierarchy.
278
+ * Card component for content grouping and visual hierarchy.
279
+ *
280
+ * Features:
281
+ * - Variant styles (elevated, outlined, filled)
282
+ * - Configurable padding (none, sm, md, lg)
283
+ * - Border radius options (none, sm, md, lg, xl)
284
+ * - Optional title display
285
+ * - Content projection for flexible body content
272
286
  *
273
287
  * @example
274
288
  * ```html
@@ -384,7 +398,7 @@ type IconSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
384
398
  * - Signal-based reactive API
385
399
  * - Support for outline and solid variants
386
400
  * - Multiple size options (xs, sm, md, lg, xl)
387
- * - Custom color support (CSS colors, variables, Tailwind classes)
401
+ * - Custom color support (CSS colors, variables)
388
402
  * - Accessibility attributes (ARIA labels, decorative icons)
389
403
  * - Dynamic SVG loading from Heroicons
390
404
  *
@@ -399,8 +413,8 @@ type IconSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
399
413
  * <!-- With custom color -->
400
414
  * <lc-icon name="arrow-right" color="#FF5733" />
401
415
  *
402
- * <!-- With Tailwind color -->
403
- * <lc-icon name="star" color="text-primary-500" />
416
+ * <!-- With CSS variable color -->
417
+ * <lc-icon name="star" color="var(--color-primary-500)" />
404
418
  *
405
419
  * <!-- With accessibility label -->
406
420
  * <lc-icon name="user" ariaLabel="User profile" />
@@ -437,7 +451,6 @@ declare class IconComponent {
437
451
  * Can be:
438
452
  * - CSS color: "#FF5733", "rgb(255, 87, 51)"
439
453
  * - CSS variable: "var(--color-primary-500)"
440
- * - Tailwind class: "text-primary-500"
441
454
  * - "currentColor" (default - inherits from parent)
442
455
  * @default "currentColor"
443
456
  */
@@ -499,11 +512,15 @@ declare class IconComponent {
499
512
  }
500
513
 
501
514
  /**
502
- * Logo Component
515
+ * Logo component for displaying the Life-Cockpit brand identity.
503
516
  *
504
- * Displays the Life-Cockpit logo or emblem.
517
+ * Features:
518
+ * - Full logo and emblem-only variants
519
+ * - Multiple size options (sm, md, lg)
520
+ * - SVG-based for crisp rendering at any resolution
521
+ * - Dark mode compatible
505
522
  *
506
- * Usage:
523
+ * @example
507
524
  * ```html
508
525
  * <lc-logo variant="full" size="md"></lc-logo>
509
526
  * <lc-logo variant="emblem" size="sm"></lc-logo>
@@ -629,20 +646,21 @@ declare class MenuComponent {
629
646
  }
630
647
 
631
648
  /**
632
- * Text input component for form data entry.
649
+ * Input component for single-line text form data entry.
633
650
  *
634
- * Implements ControlValueAccessor for seamless integration with Angular forms.
635
- * Supports validation, icons, character count, and accessibility features.
651
+ * Features:
652
+ * - Type variants (text, email, password, number, tel, url)
653
+ * - Size presets (xs, sm, md, lg)
654
+ * - Leading and trailing icon support
655
+ * - Character count display with maxLength
656
+ * - Validation error message display
657
+ * - Helper text support
658
+ * - Disabled and readonly states
659
+ * - ControlValueAccessor integration for reactive forms
636
660
  *
637
661
  * @example
638
662
  * ```html
639
- * <lc-input
640
- * label="Email"
641
- * type="email"
642
- * placeholder="Enter your email"
643
- * [(ngModel)]="email"
644
- * [error]="emailError"
645
- * ></lc-input>
663
+ * <lc-input label="Email" type="email" placeholder="Enter email" [(ngModel)]="email" />
646
664
  * ```
647
665
  */
648
666
  declare class InputComponent implements ControlValueAccessor {
@@ -822,25 +840,22 @@ declare class RadioComponent implements ControlValueAccessor, OnInit, OnDestroy
822
840
  }
823
841
 
824
842
  /**
825
- * Typography Component
843
+ * Typography component for consistent text styling.
826
844
  *
827
- * A flexible text component that provides consistent typography styling across the application.
828
- * Supports semantic HTML elements (h1-h6, p, span), text alignment, color variants,
829
- * font weights, text transforms, and line clamping.
845
+ * Features:
846
+ * - Semantic variants (h1h6, body1, body2, caption, overline)
847
+ * - Automatic HTML element mapping per variant
848
+ * - Text alignment options (left, center, right, justify)
849
+ * - Color variants (primary, secondary, success, warning, error, info)
850
+ * - Font weight overrides (regular, medium, semibold, bold)
851
+ * - Text transform (uppercase, lowercase, capitalize)
852
+ * - Line clamping for text truncation
853
+ * - Gutter bottom margin option
830
854
  *
831
855
  * @example
832
856
  * ```html
833
- * <lc-typography variant="h1" align="center" color="primary">
834
- * Main Heading
835
- * </lc-typography>
836
- *
837
- * <lc-typography variant="body1" gutterBottom>
838
- * Body text with bottom margin
839
- * </lc-typography>
840
- *
841
- * <lc-typography variant="caption" color="secondary" lineClamp="2">
842
- * This is a caption that will be truncated after 2 lines...
843
- * </lc-typography>
857
+ * <lc-typography variant="h1" color="primary">Heading</lc-typography>
858
+ * <lc-typography variant="body1" [lineClamp]="2">Truncated text...</lc-typography>
844
859
  * ```
845
860
  */
846
861
  declare class TypographyComponent {
@@ -906,16 +921,21 @@ declare class TypographyComponent {
906
921
 
907
922
  type DateValue = Date | string | null;
908
923
  /**
909
- * DatePicker component for date selection with calendar.
924
+ * Datepicker component for date selection with calendar overlay.
925
+ *
926
+ * Features:
927
+ * - Calendar popup with month and year navigation
928
+ * - Min/max date constraints
929
+ * - Disabled specific dates and weekends
930
+ * - Configurable date format string
931
+ * - Variant styles (outline, filled)
932
+ * - Size presets (xs, sm, md, lg)
933
+ * - Disabled and readonly states
934
+ * - ControlValueAccessor integration for reactive forms
910
935
  *
911
936
  * @example
912
937
  * ```html
913
- * <lc-datepicker
914
- * variant="outline"
915
- * size="md"
916
- * placeholder="Select a date"
917
- * [(ngModel)]="selectedDate"
918
- * ></lc-datepicker>
938
+ * <lc-datepicker placeholder="Select date" [(ngModel)]="selectedDate" />
919
939
  * ```
920
940
  */
921
941
  declare class DatepickerComponent implements ControlValueAccessor {
@@ -1101,17 +1121,22 @@ interface SelectOptionGroup {
1101
1121
  }
1102
1122
  type SelectValue = string | number | string[] | number[] | null;
1103
1123
  /**
1104
- * Select component for dropdown selection with single or multiple options.
1124
+ * Select component for dropdown option selection.
1125
+ *
1126
+ * Features:
1127
+ * - Single and multiple selection modes
1128
+ * - Searchable/filterable option list
1129
+ * - Option groups with headers
1130
+ * - Loading state indicator
1131
+ * - Variant styles (outline, filled)
1132
+ * - Size presets (xs, sm, md, lg)
1133
+ * - Keyboard navigation support
1134
+ * - CDK overlay positioning
1135
+ * - ControlValueAccessor integration for reactive forms
1105
1136
  *
1106
1137
  * @example
1107
1138
  * ```html
1108
- * <lc-select
1109
- * [options]="options"
1110
- * variant="outline"
1111
- * size="md"
1112
- * placeholder="Select an option"
1113
- * [(ngModel)]="selectedValue"
1114
- * ></lc-select>
1139
+ * <lc-select [options]="options" placeholder="Choose" [(ngModel)]="selected" />
1115
1140
  * ```
1116
1141
  */
1117
1142
  declare class SelectComponent implements ControlValueAccessor {
@@ -1243,16 +1268,20 @@ declare class SelectComponent implements ControlValueAccessor {
1243
1268
  }
1244
1269
 
1245
1270
  /**
1246
- * Switch component for toggle functionality.
1271
+ * Switch component for boolean toggle functionality.
1272
+ *
1273
+ * Features:
1274
+ * - Color variants (primary, secondary, success, warning, danger)
1275
+ * - Size options (sm, md, lg)
1276
+ * - Loading state with spinner
1277
+ * - Configurable label positioning (left/right)
1278
+ * - Keyboard toggle support
1279
+ * - Disabled and required states
1280
+ * - ControlValueAccessor integration for reactive forms
1247
1281
  *
1248
1282
  * @example
1249
1283
  * ```html
1250
- * <lc-switch
1251
- * variant="primary"
1252
- * size="md"
1253
- * label="Enable notifications"
1254
- * [(ngModel)]="isEnabled"
1255
- * ></lc-switch>
1284
+ * <lc-switch label="Enable notifications" [(ngModel)]="isEnabled" />
1256
1285
  * ```
1257
1286
  */
1258
1287
  declare class SwitchComponent implements ControlValueAccessor {
@@ -1326,14 +1355,18 @@ declare class SwitchComponent implements ControlValueAccessor {
1326
1355
  /**
1327
1356
  * Textarea component for multi-line text input.
1328
1357
  *
1358
+ * Features:
1359
+ * - Variant styles (outline, filled)
1360
+ * - Size presets (xs, sm, md, lg)
1361
+ * - Auto-resize with configurable min/max rows
1362
+ * - Character count display with maxLength
1363
+ * - Validation error message and helper text
1364
+ * - Disabled and readonly states
1365
+ * - ControlValueAccessor integration for reactive forms
1366
+ *
1329
1367
  * @example
1330
1368
  * ```html
1331
- * <lc-textarea
1332
- * variant="outline"
1333
- * size="md"
1334
- * placeholder="Enter your message"
1335
- * [(ngModel)]="message"
1336
- * ></lc-textarea>
1369
+ * <lc-textarea placeholder="Enter message" [autoResize]="true" [(ngModel)]="message" />
1337
1370
  * ```
1338
1371
  */
1339
1372
  declare class TextareaComponent implements ControlValueAccessor, AfterViewInit {
@@ -1641,20 +1674,20 @@ declare class VerificationCodeInputComponent implements ControlValueAccessor, Af
1641
1674
  }
1642
1675
 
1643
1676
  /**
1644
- * Email input component with RFC 5322 validation.
1677
+ * Email input component with built-in RFC 5322 validation.
1645
1678
  *
1646
- * Extends the base input component with email-specific validation
1647
- * and provides visual feedback for valid/invalid email addresses.
1679
+ * Features:
1680
+ * - RFC 5322 regex email format validation
1681
+ * - Real-time validation feedback on input
1682
+ * - Valid/invalid visual indicators
1683
+ * - Size presets (xs, sm, md, lg)
1684
+ * - Helper text and error message display
1685
+ * - Disabled and readonly states
1686
+ * - ControlValueAccessor integration for reactive forms
1648
1687
  *
1649
1688
  * @example
1650
1689
  * ```html
1651
- * <lc-email-input
1652
- * label="Email Address"
1653
- * placeholder="you@example.com"
1654
- * [(ngModel)]="email"
1655
- * [required]="true"
1656
- * (validationChange)="handleValidation($event)"
1657
- * ></lc-email-input>
1690
+ * <lc-email-input label="Email" placeholder="you@example.com" [(ngModel)]="email" />
1658
1691
  * ```
1659
1692
  */
1660
1693
  declare class EmailInputComponent implements ControlValueAccessor {
@@ -1785,6 +1818,355 @@ declare class EmailInputComponent implements ControlValueAccessor {
1785
1818
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<EmailInputComponent, "lc-email-input", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "error": { "alias": "error"; "required": false; "isSignal": true; }; "helperText": { "alias": "helperText"; "required": false; "isSignal": true; }; "validateOnInput": { "alias": "validateOnInput"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; "validationChange": "validationChange"; "focused": "focused"; "blurred": "blurred"; "enterPressed": "enterPressed"; }, never, never, true, never>;
1786
1819
  }
1787
1820
 
1821
+ type HeroColor = 'primary' | 'secondary' | 'neutral' | 'success' | 'info' | 'warning' | 'accent-orange' | 'accent-purple' | 'accent-violet';
1822
+ type HeroSize = 'sm' | 'md' | 'lg';
1823
+ /**
1824
+ * Hero component for prominent page headers with gradient backgrounds.
1825
+ *
1826
+ * Features:
1827
+ * - Color gradient variants (primary, secondary, success, warning, error, neutral)
1828
+ * - Size options (sm, md, lg)
1829
+ * - Optional label text above the title
1830
+ * - Configurable border radius
1831
+ * - Content projection for body and footer sections
1832
+ * - Footer slot for metadata, stats, or CTAs
1833
+ *
1834
+ * @example
1835
+ * ```html
1836
+ * <lc-hero label="MY APP" title="Welcome" color="primary">
1837
+ * <p>Description text</p>
1838
+ * <div hero-footer>Status: Active</div>
1839
+ * </lc-hero>
1840
+ * ```
1841
+ */
1842
+ declare class HeroComponent {
1843
+ /**
1844
+ * Small uppercase label displayed above the title.
1845
+ */
1846
+ label: _angular_core.InputSignal<string | undefined>;
1847
+ /**
1848
+ * Main headline text.
1849
+ */
1850
+ title: _angular_core.InputSignal<string>;
1851
+ /**
1852
+ * Color theme for the gradient background.
1853
+ * @default 'primary'
1854
+ */
1855
+ color: _angular_core.InputSignal<HeroColor>;
1856
+ /**
1857
+ * Size variant controlling padding and font sizes.
1858
+ * @default 'md'
1859
+ */
1860
+ size: _angular_core.InputSignal<HeroSize>;
1861
+ /**
1862
+ * Border radius of the hero container.
1863
+ * @default 'lg'
1864
+ */
1865
+ borderRadius: _angular_core.InputSignal<"sm" | "md" | "lg" | "none">;
1866
+ protected heroClasses: _angular_core.Signal<string>;
1867
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<HeroComponent, never>;
1868
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<HeroComponent, "lc-hero", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": true; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "borderRadius": { "alias": "borderRadius"; "required": false; "isSignal": true; }; }, {}, never, ["*", "[hero-footer]"], true, never>;
1869
+ }
1870
+
1871
+ type ProgressBarColor = 'primary' | 'secondary' | 'success' | 'warning' | 'error' | 'info';
1872
+ type ProgressBarSize = 'xs' | 'sm' | 'md' | 'lg';
1873
+ type ProgressBarVariant = 'linear' | 'circular';
1874
+ /**
1875
+ * Progress bar component for displaying completion status.
1876
+ *
1877
+ * Features:
1878
+ * - Linear and circular progress variants
1879
+ * - Color theme options (primary, secondary, success, warning, error)
1880
+ * - Multiple size presets (xs, sm, md, lg)
1881
+ * - Animated value transitions
1882
+ * - Accessible with ARIA progressbar role
1883
+ *
1884
+ * @example
1885
+ * ```html
1886
+ * <lc-progress-bar [value]="75" color="primary" size="md"></lc-progress-bar>
1887
+ * <lc-progress-bar [value]="50" variant="circular" color="success"></lc-progress-bar>
1888
+ * ```
1889
+ */
1890
+ declare class ProgressBarComponent {
1891
+ /**
1892
+ * Progress value between 0 and 100.
1893
+ * @default 0
1894
+ */
1895
+ value: _angular_core.InputSignal<number>;
1896
+ /**
1897
+ * Color theme.
1898
+ * @default 'primary'
1899
+ */
1900
+ color: _angular_core.InputSignal<ProgressBarColor>;
1901
+ /**
1902
+ * Height/thickness of the bar.
1903
+ * @default 'md'
1904
+ */
1905
+ size: _angular_core.InputSignal<ProgressBarSize>;
1906
+ /**
1907
+ * Visual variant.
1908
+ * @default 'linear'
1909
+ */
1910
+ variant: _angular_core.InputSignal<ProgressBarVariant>;
1911
+ /**
1912
+ * Whether to show the percentage label.
1913
+ * @default false
1914
+ */
1915
+ showLabel: _angular_core.InputSignal<boolean>;
1916
+ /**
1917
+ * Whether the progress is indeterminate (animated, no fixed value).
1918
+ * @default false
1919
+ */
1920
+ indeterminate: _angular_core.InputSignal<boolean>;
1921
+ /**
1922
+ * Accessible label for screen readers.
1923
+ */
1924
+ ariaLabel: _angular_core.InputSignal<string>;
1925
+ protected clampedValue: _angular_core.Signal<number>;
1926
+ protected barClasses: _angular_core.Signal<string>;
1927
+ protected readonly circleRadius = 40;
1928
+ protected readonly circleCircumference: number;
1929
+ protected strokeDashoffset: _angular_core.Signal<number>;
1930
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ProgressBarComponent, never>;
1931
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ProgressBarComponent, "lc-progress-bar", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "showLabel": { "alias": "showLabel"; "required": false; "isSignal": true; }; "indeterminate": { "alias": "indeterminate"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1932
+ }
1933
+
1934
+ type DividerOrientation = 'horizontal' | 'vertical';
1935
+ type DividerVariant = 'solid' | 'dashed' | 'dotted';
1936
+ type DividerSpacing = 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'xl';
1937
+ /**
1938
+ * Divider component for visual separation of content.
1939
+ *
1940
+ * Features:
1941
+ * - Horizontal and vertical orientations
1942
+ * - Line style variants (solid, dashed, dotted)
1943
+ * - Configurable spacing (none, sm, md, lg)
1944
+ * - Optional centered text label
1945
+ * - Dark mode support
1946
+ *
1947
+ * @example
1948
+ * ```html
1949
+ * <lc-divider></lc-divider>
1950
+ * <lc-divider orientation="vertical" variant="dashed"></lc-divider>
1951
+ * <lc-divider spacing="lg">OR</lc-divider>
1952
+ * ```
1953
+ */
1954
+ declare class DividerComponent {
1955
+ /**
1956
+ * Orientation of the divider line.
1957
+ * @default 'horizontal'
1958
+ */
1959
+ orientation: _angular_core.InputSignal<DividerOrientation>;
1960
+ /**
1961
+ * Line style.
1962
+ * @default 'solid'
1963
+ */
1964
+ variant: _angular_core.InputSignal<DividerVariant>;
1965
+ /**
1966
+ * Spacing (margin) around the divider.
1967
+ * @default 'md'
1968
+ */
1969
+ spacing: _angular_core.InputSignal<DividerSpacing>;
1970
+ /**
1971
+ * Optional inline text label (e.g. "OR", "Section").
1972
+ */
1973
+ label: _angular_core.InputSignal<string | undefined>;
1974
+ protected dividerClasses: _angular_core.Signal<string>;
1975
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DividerComponent, never>;
1976
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DividerComponent, "lc-divider", never, { "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "spacing": { "alias": "spacing"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1977
+ }
1978
+
1979
+ type SearchInputSize = 'sm' | 'md' | 'lg';
1980
+ /**
1981
+ * Search input component with integrated search functionality.
1982
+ *
1983
+ * Features:
1984
+ * - Built-in search icon
1985
+ * - Clear button for resetting input
1986
+ * - RxJS-based configurable debounce
1987
+ * - Multiple size variants (sm, md, lg)
1988
+ * - Disabled state support
1989
+ * - Submit event on Enter key
1990
+ *
1991
+ * @example
1992
+ * ```html
1993
+ * <lc-search-input
1994
+ * placeholder="Search..."
1995
+ * [debounceMs]="300"
1996
+ * (searchChange)="onSearch($event)"
1997
+ * ></lc-search-input>
1998
+ * ```
1999
+ */
2000
+ declare class SearchInputComponent implements OnInit, OnDestroy {
2001
+ /**
2002
+ * Placeholder text.
2003
+ * @default 'Search…'
2004
+ */
2005
+ placeholder: _angular_core.InputSignal<string>;
2006
+ /**
2007
+ * Size variant.
2008
+ * @default 'md'
2009
+ */
2010
+ size: _angular_core.InputSignal<SearchInputSize>;
2011
+ /**
2012
+ * Debounce delay in milliseconds. 0 means no debounce.
2013
+ * @default 300
2014
+ */
2015
+ debounceMs: _angular_core.InputSignal<number>;
2016
+ /**
2017
+ * Whether the search input is disabled.
2018
+ * @default false
2019
+ */
2020
+ disabled: _angular_core.InputSignal<boolean>;
2021
+ /**
2022
+ * Emitted when the search value changes (debounced).
2023
+ */
2024
+ readonly searchChange: _angular_core.OutputEmitterRef<string>;
2025
+ /**
2026
+ * Emitted when the user presses Enter.
2027
+ */
2028
+ readonly searchSubmit: _angular_core.OutputEmitterRef<string>;
2029
+ protected value: _angular_core.WritableSignal<string>;
2030
+ protected readonly inputRef: _angular_core.Signal<ElementRef<HTMLInputElement> | undefined>;
2031
+ protected wrapperClasses: _angular_core.Signal<string>;
2032
+ private readonly input$;
2033
+ private readonly destroy$;
2034
+ ngOnInit(): void;
2035
+ ngOnDestroy(): void;
2036
+ protected onInput(event: Event): void;
2037
+ protected onKeydown(event: KeyboardEvent): void;
2038
+ protected clear(): void;
2039
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SearchInputComponent, never>;
2040
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SearchInputComponent, "lc-search-input", never, { "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "debounceMs": { "alias": "debounceMs"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, { "searchChange": "searchChange"; "searchSubmit": "searchSubmit"; }, never, never, true, never>;
2041
+ }
2042
+
2043
+ interface FileUploadFile {
2044
+ file: File;
2045
+ name: string;
2046
+ size: number;
2047
+ type: string;
2048
+ }
2049
+ /**
2050
+ * File upload / dropzone component with drag & drop support.
2051
+ *
2052
+ * @example
2053
+ * ```html
2054
+ * <lc-file-upload
2055
+ * accept=".pdf,.png,.jpg"
2056
+ * [multiple]="true"
2057
+ * [maxSizeBytes]="5242880"
2058
+ * (filesSelected)="onFiles($event)"
2059
+ * ></lc-file-upload>
2060
+ * ```
2061
+ */
2062
+ declare class FileUploadComponent {
2063
+ /**
2064
+ * Accepted file types (e.g. ".pdf,.jpg,image/*").
2065
+ */
2066
+ accept: _angular_core.InputSignal<string>;
2067
+ /**
2068
+ * Allow multiple files.
2069
+ * @default false
2070
+ */
2071
+ multiple: _angular_core.InputSignal<boolean>;
2072
+ /**
2073
+ * Maximum file size in bytes. 0 for unlimited.
2074
+ * @default 0
2075
+ */
2076
+ maxSizeBytes: _angular_core.InputSignal<number>;
2077
+ /**
2078
+ * Whether the dropzone is disabled.
2079
+ * @default false
2080
+ */
2081
+ disabled: _angular_core.InputSignal<boolean>;
2082
+ /**
2083
+ * Hint text shown in the dropzone.
2084
+ * @default 'Drag & drop files here, or click to browse'
2085
+ */
2086
+ hint: _angular_core.InputSignal<string>;
2087
+ /**
2088
+ * Emitted with selected files after validation.
2089
+ */
2090
+ readonly filesSelected: _angular_core.OutputEmitterRef<FileUploadFile[]>;
2091
+ /**
2092
+ * Emitted when a file is rejected (too large or wrong type).
2093
+ */
2094
+ readonly fileRejected: _angular_core.OutputEmitterRef<{
2095
+ file: File;
2096
+ reason: string;
2097
+ }>;
2098
+ protected isDragOver: _angular_core.WritableSignal<boolean>;
2099
+ protected selectedFiles: _angular_core.WritableSignal<FileUploadFile[]>;
2100
+ protected readonly fileInputRef: _angular_core.Signal<ElementRef<HTMLInputElement> | undefined>;
2101
+ protected dropzoneClasses: _angular_core.Signal<string>;
2102
+ protected onDragOver(event: DragEvent): void;
2103
+ protected onDragLeave(event: DragEvent): void;
2104
+ protected onDrop(event: DragEvent): void;
2105
+ protected onFileChange(event: Event): void;
2106
+ protected openFilePicker(): void;
2107
+ protected removeFile(index: number): void;
2108
+ protected formatSize(bytes: number): string;
2109
+ private processFiles;
2110
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<FileUploadComponent, never>;
2111
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<FileUploadComponent, "lc-file-upload", never, { "accept": { "alias": "accept"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "maxSizeBytes": { "alias": "maxSizeBytes"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "hint": { "alias": "hint"; "required": false; "isSignal": true; }; }, { "filesSelected": "filesSelected"; "fileRejected": "fileRejected"; }, never, never, true, never>;
2112
+ }
2113
+
2114
+ type PopoverPosition = 'top' | 'bottom' | 'left' | 'right';
2115
+ type PopoverTrigger = 'click' | 'hover';
2116
+ /**
2117
+ * Popover component for displaying rich floating content.
2118
+ *
2119
+ * Features:
2120
+ * - Position options (top, bottom, left, right)
2121
+ * - Click or hover trigger modes
2122
+ * - Optional arrow indicator
2123
+ * - Click-outside to close
2124
+ * - Open state change event
2125
+ * - Content projection for trigger and body
2126
+ *
2127
+ * @example
2128
+ * ```html
2129
+ * <lc-popover position="bottom" trigger="click">
2130
+ * <button popover-trigger>Open</button>
2131
+ * <div popover-content>Rich content here</div>
2132
+ * </lc-popover>
2133
+ * ```
2134
+ */
2135
+ declare class PopoverComponent implements OnDestroy {
2136
+ /**
2137
+ * Position relative to the trigger element.
2138
+ * @default 'bottom'
2139
+ */
2140
+ position: _angular_core.InputSignal<PopoverPosition>;
2141
+ /**
2142
+ * How the popover is triggered.
2143
+ * @default 'click'
2144
+ */
2145
+ trigger: _angular_core.InputSignal<PopoverTrigger>;
2146
+ /**
2147
+ * Whether to show an arrow pointing at the trigger.
2148
+ * @default true
2149
+ */
2150
+ showArrow: _angular_core.InputSignal<boolean>;
2151
+ /**
2152
+ * Emitted when the popover opens or closes.
2153
+ */
2154
+ readonly openChange: _angular_core.OutputEmitterRef<boolean>;
2155
+ protected isOpen: _angular_core.WritableSignal<boolean>;
2156
+ protected panelClasses: _angular_core.Signal<string>;
2157
+ private readonly elementRef;
2158
+ onDocumentClick(event: MouseEvent): void;
2159
+ onEscape(): void;
2160
+ ngOnDestroy(): void;
2161
+ protected toggle(): void;
2162
+ protected open(): void;
2163
+ protected close(): void;
2164
+ protected onMouseEnter(): void;
2165
+ protected onMouseLeave(): void;
2166
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<PopoverComponent, never>;
2167
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<PopoverComponent, "lc-popover", never, { "position": { "alias": "position"; "required": false; "isSignal": true; }; "trigger": { "alias": "trigger"; "required": false; "isSignal": true; }; "showArrow": { "alias": "showArrow"; "required": false; "isSignal": true; }; }, { "openChange": "openChange"; }, never, ["[popover-trigger]", "[popover-content]"], true, never>;
2168
+ }
2169
+
1788
2170
  type ContainerSize = 'sm' | 'md' | 'lg' | 'xl' | 'full';
1789
2171
  declare class ContainerComponent {
1790
2172
  size: _angular_core.InputSignal<ContainerSize>;
@@ -1841,6 +2223,14 @@ type AlertVariant = 'success' | 'error' | 'warning' | 'info';
1841
2223
  /**
1842
2224
  * Alert component for inline notifications.
1843
2225
  *
2226
+ * Features:
2227
+ * - Semantic variants (success, warning, error, info)
2228
+ * - Optional title and icon display
2229
+ * - Auto-mapped variant icons
2230
+ * - Dismissible with close button
2231
+ * - Content projection for custom body
2232
+ * - Accessible with ARIA alert role
2233
+ *
1844
2234
  * @example
1845
2235
  * ```html
1846
2236
  * <lc-alert variant="success" title="Success!" [dismissible]="true">
@@ -1921,24 +2311,19 @@ declare class AlertComponent {
1921
2311
  */
1922
2312
  type ErrorSeverity = 'error' | 'warning' | 'info';
1923
2313
  /**
1924
- * Error display component for authentication error messages.
2314
+ * Error display component for authentication and application error messages.
1925
2315
  *
1926
- * Automatically maps Cognito error codes to user-friendly messages
1927
- * and displays them with appropriate severity styling.
2316
+ * Features:
2317
+ * - Automatic Cognito error code mapping to user-friendly messages
2318
+ * - Severity levels (error, warning, info)
2319
+ * - Custom error message override
2320
+ * - Dismissible with close button
2321
+ * - Accepts Error objects or custom error shapes
1928
2322
  *
1929
2323
  * @example
1930
2324
  * ```html
1931
- * <!-- Display Cognito error -->
1932
- * <lc-error-display
1933
- * [error]="cognitoError"
1934
- * [dismissible]="true"
1935
- * ></lc-error-display>
1936
- *
1937
- * <!-- Display custom error -->
1938
- * <lc-error-display
1939
- * message="Invalid credentials"
1940
- * severity="error"
1941
- * ></lc-error-display>
2325
+ * <lc-error-display [error]="cognitoError" [dismissible]="true" />
2326
+ * <lc-error-display message="Invalid credentials" severity="error" />
1942
2327
  * ```
1943
2328
  */
1944
2329
  declare class ErrorDisplayComponent {
@@ -2091,20 +2476,19 @@ declare class ToastService {
2091
2476
  }
2092
2477
 
2093
2478
  /**
2094
- * Toast component for displaying ephemeral notifications.
2095
- * Typically used via ToastService, not directly.
2479
+ * Toast component for displaying ephemeral notification messages.
2480
+ *
2481
+ * Features:
2482
+ * - Semantic variants (success, warning, error, info)
2483
+ * - Auto-dismiss with configurable duration
2484
+ * - Manual dismiss with close button
2485
+ * - Icon display per variant
2486
+ * - Stacked toast positioning via ToastService
2487
+ * - Animated enter/exit transitions
2096
2488
  *
2097
2489
  * @example
2098
2490
  * ```typescript
2099
- * // Use via service
2100
- * constructor(private toastService: ToastService) {}
2101
- *
2102
- * showToast() {
2103
- * this.toastService.show({
2104
- * message: 'Success!',
2105
- * variant: 'success'
2106
- * });
2107
- * }
2491
+ * this.toastService.show({ message: 'Saved!', variant: 'success' });
2108
2492
  * ```
2109
2493
  */
2110
2494
  declare class ToastComponent {
@@ -2151,20 +2535,22 @@ declare class ToastComponent {
2151
2535
  type ModalSize = 'sm' | 'md' | 'lg' | 'xl' | 'full';
2152
2536
  /**
2153
2537
  * Modal dialog component for focused user interactions.
2154
- * Uses FocusTrap for accessibility.
2538
+ *
2539
+ * Features:
2540
+ * - Size presets (sm, md, lg, xl, full)
2541
+ * - Focus trap for keyboard accessibility
2542
+ * - Backdrop click and Escape key to close
2543
+ * - Two-way open binding
2544
+ * - Header, body, and footer content slots
2545
+ * - Optional close button
2546
+ * - Accessible with ARIA dialog role
2155
2547
  *
2156
2548
  * @example
2157
2549
  * ```html
2158
2550
  * <lc-modal [(open)]="isOpen" size="md" [closeOnBackdropClick]="true">
2159
- * <div slot="header">
2160
- * <h2>Modal Title</h2>
2161
- * </div>
2162
- * <div slot="body">
2163
- * <p>Modal content goes here</p>
2164
- * </div>
2165
- * <div slot="footer">
2166
- * <lc-button (click)="closeModal()">Close</lc-button>
2167
- * </div>
2551
+ * <div slot="header"><h2>Title</h2></div>
2552
+ * <div slot="body">Content</div>
2553
+ * <div slot="footer"><lc-button (click)="close()">Close</lc-button></div>
2168
2554
  * </lc-modal>
2169
2555
  * ```
2170
2556
  */
@@ -2562,29 +2948,22 @@ declare class PaginationComponent {
2562
2948
  type SidenavPosition = 'left' | 'right';
2563
2949
  type SidenavMode = 'drawer' | 'docked';
2564
2950
  /**
2565
- * Sidenav Component
2566
- *
2567
- * A navigation component that can work as either a drawer (overlay) or
2568
- * a docked (persistent) sidebar. Supports section headlines, collapsible
2569
- * groups, keyboard navigation, and accessibility features.
2951
+ * Sidenav component for application navigation sidebar.
2570
2952
  *
2571
- * @example Drawer mode (default — overlay that slides in)
2572
- * ```html
2573
- * <lc-sidenav
2574
- * [isOpen]="isOpen"
2575
- * mode="drawer"
2576
- * (closed)="handleClose()">
2577
- * </lc-sidenav>
2578
- * ```
2953
+ * Features:
2954
+ * - Drawer (overlay) and docked (persistent) modes
2955
+ * - Hierarchical navigation with collapsible groups
2956
+ * - Section headlines for item grouping
2957
+ * - Active route highlighting
2958
+ * - Keyboard navigation support
2959
+ * - Configurable width and position (left/right)
2960
+ * - Optional backdrop overlay
2961
+ * - Accessible with ARIA navigation role
2579
2962
  *
2580
- * @example Docked mode (persistent sidebar that stays open)
2963
+ * @example
2581
2964
  * ```html
2582
- * <lc-sidenav
2583
- * [isOpen]="sidebarOpen"
2584
- * mode="docked"
2585
- * [items]="navItems"
2586
- * (closed)="sidebarOpen = false">
2587
- * </lc-sidenav>
2965
+ * <lc-sidenav [isOpen]="isOpen" mode="docked" [items]="navItems"
2966
+ * (closed)="isOpen = false" (itemClicked)="navigate($event)" />
2588
2967
  * ```
2589
2968
  */
2590
2969
  declare class SidenavComponent {
@@ -2728,6 +3107,13 @@ declare class TabComponent {
2728
3107
  /**
2729
3108
  * Tabs component for organizing content into switchable views.
2730
3109
  *
3110
+ * Features:
3111
+ * - Dynamic tab registration via content projection
3112
+ * - Active tab tracking with two-way binding
3113
+ * - Accessible with ARIA tablist/tab/tabpanel roles
3114
+ * - Keyboard navigation between tabs
3115
+ * - Lazy content rendering per tab
3116
+ *
2731
3117
  * @example
2732
3118
  * ```html
2733
3119
  * <lc-tabs>
@@ -2830,21 +3216,19 @@ declare class TabsComponent implements AfterContentInit {
2830
3216
  type AvatarSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
2831
3217
  type AvatarStatus = 'online' | 'offline' | 'away' | 'busy';
2832
3218
  /**
2833
- * Avatar Component
3219
+ * Avatar component for circular user representation.
2834
3220
  *
2835
- * A circular user representation component displaying images or initials.
2836
- * Supports status indicators and multiple sizes.
3221
+ * Features:
3222
+ * - Image display with fallback to initials
3223
+ * - Auto-generated initials from user name
3224
+ * - Status indicator (online, offline, busy, away)
3225
+ * - Multiple size variants (xs, sm, md, lg, xl)
3226
+ * - Accessible with alt text support
2837
3227
  *
2838
3228
  * @example
2839
3229
  * ```html
2840
- * <!-- With image -->
2841
3230
  * <lc-avatar src="https://example.com/avatar.jpg" alt="John Doe" />
2842
- *
2843
- * <!-- With initials -->
2844
- * <lc-avatar name="John Doe" />
2845
- *
2846
- * <!-- With status indicator -->
2847
- * <lc-avatar name="Jane Smith" status="online" size="lg" />
3231
+ * <lc-avatar name="John Doe" status="online" size="lg" />
2848
3232
  * ```
2849
3233
  */
2850
3234
  declare class AvatarComponent {
@@ -2887,9 +3271,13 @@ declare class AvatarComponent {
2887
3271
  type BadgeVariant = 'default' | 'primary' | 'success' | 'warning' | 'error' | 'info';
2888
3272
  type BadgeSize = 'xs' | 'sm' | 'md' | 'lg';
2889
3273
  /**
2890
- * Badge Component
3274
+ * Badge component for displaying status, notifications, or counts.
2891
3275
  *
2892
- * A small count and labeling component used to display status, notifications, or counts.
3276
+ * Features:
3277
+ * - Semantic color variants (primary, secondary, success, warning, error, info, neutral)
3278
+ * - Multiple size options (xs, sm, md, lg)
3279
+ * - Pill-shaped rounded mode
3280
+ * - Content projection for labels or count values
2893
3281
  *
2894
3282
  * @example
2895
3283
  * ```html
@@ -2912,60 +3300,28 @@ declare class BadgeComponent {
2912
3300
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<BadgeComponent, "lc-badge", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "rounded": { "alias": "rounded"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
2913
3301
  }
2914
3302
 
2915
- type TrendDirection = 'up' | 'down' | 'flat';
2916
- /**
2917
- * MetricCard Component
2918
- *
2919
- * Displays a single KPI value with label, trend arrow, and optional icon.
2920
- * Built on top of `lc-card` (outlined variant) for consistent card styling.
2921
- *
2922
- * @example
2923
- * ```html
2924
- * <lc-metric-card
2925
- * label="Portfolio Equity"
2926
- * value="$125,430"
2927
- * trend="up"
2928
- * trendValue="+2.4%"
2929
- * icon="arrow-trending-up"
2930
- * ></lc-metric-card>
2931
- * ```
2932
- */
2933
- declare class MetricCardComponent {
2934
- /** Label displayed above the value */
2935
- label: _angular_core.InputSignal<string>;
2936
- /** Formatted value to display */
2937
- value: _angular_core.InputSignal<string>;
2938
- /** Trend direction for arrow indicator */
2939
- trend: _angular_core.InputSignal<TrendDirection>;
2940
- /** Formatted trend value (e.g., "+2.4%") */
2941
- trendValue: _angular_core.InputSignal<string>;
2942
- /** Optional Heroicon name */
2943
- icon: _angular_core.InputSignal<string>;
2944
- /** Trend arrow character */
2945
- trendArrow: _angular_core.Signal<"↑" | "↓" | "→">;
2946
- /** Tailwind classes for trend color */
2947
- trendClasses: _angular_core.Signal<"text-green-600 dark:text-green-400" | "text-red-600 dark:text-red-400" | "text-gray-500 dark:text-gray-400">;
2948
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<MetricCardComponent, never>;
2949
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<MetricCardComponent, "lc-metric-card", never, { "label": { "alias": "label"; "required": true; "isSignal": true; }; "value": { "alias": "value"; "required": true; "isSignal": true; }; "trend": { "alias": "trend"; "required": false; "isSignal": true; }; "trendValue": { "alias": "trendValue"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
2950
- }
2951
-
2952
3303
  interface ToggleOption {
2953
3304
  readonly value: string;
2954
3305
  readonly label: string;
2955
3306
  readonly disabled?: boolean;
2956
3307
  }
2957
3308
  /**
2958
- * ToggleGroup Component
3309
+ * Toggle group component for single-option selection from a set.
2959
3310
  *
2960
- * Binary or multi-option toggle with active state styling.
2961
- * Uses Tailwind classes with dark mode support.
3311
+ * Features:
3312
+ * - Multiple segmented toggle buttons
3313
+ * - Active state highlighting
3314
+ * - Size variants (sm, md, lg)
3315
+ * - Two-way selected value binding
3316
+ * - Per-option disabled state
3317
+ * - Dark mode support via CSS custom properties
2962
3318
  *
2963
3319
  * @example
2964
3320
  * ```html
2965
3321
  * <lc-toggle-group
2966
- * [options]="[{value:'1D',label:'1D'},{value:'1h',label:'1H'}]"
3322
+ * [options]="[{value:'1D',label:'1D'},{value:'1W',label:'1W'}]"
2967
3323
  * [(selected)]="interval"
2968
- * ></lc-toggle-group>
3324
+ * />
2969
3325
  * ```
2970
3326
  */
2971
3327
  declare class ToggleGroupComponent {
@@ -3037,10 +3393,15 @@ interface ListItem {
3037
3393
  [key: string]: any;
3038
3394
  }
3039
3395
  /**
3040
- * List Component
3396
+ * List component for displaying structured item collections.
3041
3397
  *
3042
- * A flexible list component that supports vertical/horizontal layouts,
3043
- * icons, actions, and dividers.
3398
+ * Features:
3399
+ * - Vertical and horizontal layout orientations
3400
+ * - Variant styles (default, bordered, card)
3401
+ * - Optional dividers between items
3402
+ * - Icon and avatar support per item
3403
+ * - Action buttons with click events
3404
+ * - Accessible with ARIA list role
3044
3405
  *
3045
3406
  * @example
3046
3407
  * ```html
@@ -3049,7 +3410,6 @@ interface ListItem {
3049
3410
  * orientation="vertical"
3050
3411
  * [showDividers]="true"
3051
3412
  * (itemClick)="handleItemClick($event)"
3052
- * (actionClick)="handleActionClick($event)"
3053
3413
  * />
3054
3414
  * ```
3055
3415
  */
@@ -3091,15 +3451,18 @@ declare class ListComponent {
3091
3451
  type ChipVariant = 'default' | 'primary' | 'success' | 'warning' | 'error' | 'info';
3092
3452
  type ChipSize = 'sm' | 'md' | 'lg';
3093
3453
  /**
3094
- * Chip Component
3454
+ * Chip component for displaying tags, filters, or selections.
3095
3455
  *
3096
- * A pill-shaped removable tag component for displaying selections, filters, or tags.
3097
- * Supports icons, color variants, and optional delete functionality.
3456
+ * Features:
3457
+ * - Color variants (primary, secondary, success, warning, error, info, neutral)
3458
+ * - Multiple size options (sm, md, lg)
3459
+ * - Optional leading icon
3460
+ * - Removable with close button and remove event
3461
+ * - Disabled state support
3098
3462
  *
3099
3463
  * @example
3100
3464
  * ```html
3101
- * <lc-chip variant="primary" size="md" [removable]="true" (remove)="handleRemove()">
3102
- * <span lcChipIcon>🏷️</span>
3465
+ * <lc-chip variant="primary" [removable]="true" (remove)="onRemove()">
3103
3466
  * Tag Name
3104
3467
  * </lc-chip>
3105
3468
  * ```
@@ -3157,39 +3520,52 @@ interface TableColumn {
3157
3520
  key: string;
3158
3521
  label: string;
3159
3522
  sortable?: boolean;
3523
+ filterable?: boolean;
3524
+ editable?: boolean;
3160
3525
  width?: string;
3161
3526
  /** Optional CSS class(es) applied to both th and td cells */
3162
3527
  cssClass?: string;
3163
3528
  /** Optional tooltip shown on hover over the column header */
3164
3529
  tooltip?: string;
3530
+ /** Input type for inline editing (default: text) */
3531
+ editType?: 'text' | 'number' | 'select';
3532
+ /** Options for select edit type */
3533
+ editOptions?: string[];
3165
3534
  }
3166
3535
  interface SortEvent {
3167
3536
  column: string;
3168
3537
  direction: 'asc' | 'desc';
3169
3538
  }
3539
+ interface CellEditEvent {
3540
+ row: Record<string, unknown>;
3541
+ column: string;
3542
+ oldValue: unknown;
3543
+ newValue: unknown;
3544
+ rowIndex: number;
3545
+ }
3546
+ interface SelectionChangeEvent {
3547
+ selected: Record<string, unknown>[];
3548
+ allSelected: boolean;
3549
+ }
3170
3550
  type TableVariant = 'default' | 'striped' | 'bordered';
3171
3551
  type TableSize = 'sm' | 'md' | 'lg';
3172
3552
  /**
3173
- * Table Component
3553
+ * Table component for displaying structured data in rows and columns.
3174
3554
  *
3175
- * A flexible, accessible data table component with sorting, variants, and responsive behavior.
3555
+ * Features:
3556
+ * - Column-based sorting with sort direction indicators
3557
+ * - Variant styles (default, striped, bordered)
3558
+ * - Size presets (sm, md, lg)
3559
+ * - Hoverable row highlighting
3560
+ * - Custom cell templates via content projection
3561
+ * - Responsive horizontal scrolling
3562
+ * - Empty state text for no data
3563
+ * - Accessible with proper table semantics
3176
3564
  *
3177
3565
  * @example
3178
3566
  * ```html
3179
- * <lc-table
3180
- * [columns]="columns"
3181
- * [data]="data"
3182
- * variant="striped"
3183
- * [hoverable]="true"
3184
- * (sort)="onSort($event)">
3185
- * </lc-table>
3186
- *
3187
- * <!-- With custom cell templates -->
3188
- * <lc-table [columns]="columns" [data]="data">
3189
- * <ng-template lcTableCell="status" let-row>
3190
- * <lc-badge [variant]="row.status">{{ row.status }}</lc-badge>
3191
- * </ng-template>
3192
- * </lc-table>
3567
+ * <lc-table [columns]="columns" [data]="data" variant="striped" [hoverable]="true"
3568
+ * (sort)="onSort($event)" (rowClick)="onRowClick($event)" />
3193
3569
  * ```
3194
3570
  */
3195
3571
  declare class TableComponent {
@@ -3209,82 +3585,107 @@ declare class TableComponent {
3209
3585
  responsive: _angular_core.InputSignal<boolean>;
3210
3586
  /** Text shown when data is empty */
3211
3587
  emptyText: _angular_core.InputSignal<string>;
3588
+ /** Enable pagination */
3589
+ paginate: _angular_core.InputSignal<boolean>;
3590
+ /** Rows per page */
3591
+ pageSize: _angular_core.InputSignal<number>;
3592
+ /** Available page size options */
3593
+ pageSizeOptions: _angular_core.InputSignal<number[]>;
3594
+ /** Enable row selection checkboxes */
3595
+ selectable: _angular_core.InputSignal<boolean>;
3596
+ /** Enable per-column text filters */
3597
+ filterable: _angular_core.InputSignal<boolean>;
3598
+ /** Enable inline cell editing on double-click */
3599
+ editable: _angular_core.InputSignal<boolean>;
3212
3600
  /** Emitted when a sortable column header is clicked */
3213
3601
  readonly sort: _angular_core.OutputEmitterRef<SortEvent>;
3214
3602
  /** Emitted when a row is clicked */
3215
3603
  readonly rowClick: _angular_core.OutputEmitterRef<Record<string, unknown>>;
3216
- /**
3217
- * Computed CSS classes for the table element
3218
- */
3219
- tableClasses: _angular_core.Signal<string>;
3220
- /**
3221
- * Computed CSS classes for the wrapper element
3222
- */
3223
- wrapperClasses: _angular_core.Signal<string>;
3224
- /** Current sort state */
3604
+ /** Emitted when a cell is edited */
3605
+ readonly cellEdit: _angular_core.OutputEmitterRef<CellEditEvent>;
3606
+ /** Emitted when row selection changes */
3607
+ readonly selectionChange: _angular_core.OutputEmitterRef<SelectionChangeEvent>;
3225
3608
  protected currentSort: _angular_core.WritableSignal<{
3226
3609
  column: string;
3227
3610
  direction: "asc" | "desc";
3228
3611
  } | null>;
3612
+ protected currentPage: _angular_core.WritableSignal<number>;
3613
+ protected internalPageSize: _angular_core.WritableSignal<number>;
3614
+ protected selectedRows: _angular_core.WritableSignal<Set<number>>;
3615
+ protected columnFilters: _angular_core.WritableSignal<Record<string, string>>;
3616
+ protected editingCell: _angular_core.WritableSignal<{
3617
+ rowIndex: number;
3618
+ column: string;
3619
+ } | null>;
3620
+ protected editValue: _angular_core.WritableSignal<string>;
3229
3621
  /**
3230
- * Handle click on a sortable column header
3622
+ * Filtered data (applies column filters)
3231
3623
  */
3232
- handleSort(columnKey: string): void;
3624
+ protected readonly filteredData: _angular_core.Signal<Record<string, unknown>[]>;
3233
3625
  /**
3234
- * Get sort state for a column
3626
+ * Sorted data
3235
3627
  */
3236
- getSortState(columnKey: string): 'asc' | 'desc' | null;
3628
+ protected readonly sortedData: _angular_core.Signal<Record<string, unknown>[]>;
3237
3629
  /**
3238
- * Get aria-sort attribute value for a column
3630
+ * Paginated data (or all if pagination disabled)
3239
3631
  */
3240
- getAriaSort(columnKey: string): string | null;
3632
+ protected readonly displayData: _angular_core.Signal<Record<string, unknown>[]>;
3633
+ /** Total pages */
3634
+ protected readonly totalPages: _angular_core.Signal<number>;
3635
+ /** Total filtered row count */
3636
+ protected readonly totalRows: _angular_core.Signal<number>;
3637
+ /** Whether all visible rows are selected */
3638
+ protected readonly allSelected: _angular_core.Signal<boolean>;
3241
3639
  /**
3242
- * Get CSS classes for a header cell
3640
+ * Computed CSS classes for the table element
3243
3641
  */
3244
- getHeaderClasses(column: TableColumn): string;
3642
+ tableClasses: _angular_core.Signal<string>;
3245
3643
  /**
3246
- * Get value from data object by column key
3644
+ * Computed CSS classes for the wrapper element
3247
3645
  */
3646
+ wrapperClasses: _angular_core.Signal<string>;
3647
+ handleSort(columnKey: string): void;
3648
+ getSortState(columnKey: string): 'asc' | 'desc' | null;
3649
+ getAriaSort(columnKey: string): string | null;
3650
+ getHeaderClasses(column: TableColumn): string;
3248
3651
  getCellValue(row: Record<string, unknown>, columnKey: string): unknown;
3249
- /**
3250
- * Get custom template for a column if it exists
3251
- */
3252
3652
  getCellTemplate(columnKey: string): TableCellDirective | undefined;
3253
- /**
3254
- * Check if a column has a custom template
3255
- */
3256
3653
  hasCustomTemplate(columnKey: string): boolean;
3257
- /**
3258
- * Handle row click
3259
- */
3260
3654
  onRowClick(row: Record<string, unknown>): void;
3655
+ protected goToPage(page: number): void;
3656
+ protected onPageSizeChange(event: Event): void;
3657
+ protected get paginationStart(): number;
3658
+ protected get paginationEnd(): number;
3659
+ protected toggleSelectAll(): void;
3660
+ protected toggleRowSelect(relativeIndex: number): void;
3661
+ protected isRowSelected(relativeIndex: number): boolean;
3662
+ private getAbsoluteIndex;
3663
+ private emitSelectionChange;
3664
+ protected onFilterChange(columnKey: string, event: Event): void;
3665
+ protected getFilterValue(columnKey: string): string;
3666
+ protected startEdit(rowIndex: number, column: string, currentValue: unknown): void;
3667
+ protected isEditing(rowIndex: number, column: string): boolean;
3668
+ protected commitEdit(rowIndex: number, column: string): void;
3669
+ protected cancelEdit(): void;
3670
+ protected onEditKeydown(event: KeyboardEvent, rowIndex: number, column: string): void;
3261
3671
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TableComponent, never>;
3262
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TableComponent, "lc-table", never, { "columns": { "alias": "columns"; "required": false; "isSignal": true; }; "data": { "alias": "data"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "hoverable": { "alias": "hoverable"; "required": false; "isSignal": true; }; "responsive": { "alias": "responsive"; "required": false; "isSignal": true; }; "emptyText": { "alias": "emptyText"; "required": false; "isSignal": true; }; }, { "sort": "sort"; "rowClick": "rowClick"; }, ["cellTemplates"], never, true, never>;
3672
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TableComponent, "lc-table", never, { "columns": { "alias": "columns"; "required": false; "isSignal": true; }; "data": { "alias": "data"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "hoverable": { "alias": "hoverable"; "required": false; "isSignal": true; }; "responsive": { "alias": "responsive"; "required": false; "isSignal": true; }; "emptyText": { "alias": "emptyText"; "required": false; "isSignal": true; }; "paginate": { "alias": "paginate"; "required": false; "isSignal": true; }; "pageSize": { "alias": "pageSize"; "required": false; "isSignal": true; }; "pageSizeOptions": { "alias": "pageSizeOptions"; "required": false; "isSignal": true; }; "selectable": { "alias": "selectable"; "required": false; "isSignal": true; }; "filterable": { "alias": "filterable"; "required": false; "isSignal": true; }; "editable": { "alias": "editable"; "required": false; "isSignal": true; }; }, { "sort": "sort"; "rowClick": "rowClick"; "cellEdit": "cellEdit"; "selectionChange": "selectionChange"; }, ["cellTemplates"], never, true, never>;
3263
3673
  }
3264
3674
 
3265
3675
  /**
3266
- * Field Group component for displaying label-value pairs in a consistent format.
3267
- * Useful for read-only data displays like profile pages, detail views, etc.
3676
+ * Field group component for displaying label-value pairs.
3268
3677
  *
3269
- * @example Basic usage
3270
- * ```html
3271
- * <lc-field-group label="Email" value="user@example.com"></lc-field-group>
3272
- * ```
3273
- *
3274
- * @example With icon
3275
- * ```html
3276
- * <lc-field-group
3277
- * label="Language"
3278
- * value="English (US)"
3279
- * icon="globe-alt">
3280
- * </lc-field-group>
3281
- * ```
3678
+ * Features:
3679
+ * - Consistent label-value layout for read-only data
3680
+ * - Optional leading icon from Heroicons
3681
+ * - Compact mode for dense layouts
3682
+ * - Content projection for custom value rendering
3683
+ * - Configurable icon size (xs, sm, md)
3282
3684
  *
3283
- * @example With custom content via projection
3685
+ * @example
3284
3686
  * ```html
3285
- * <lc-field-group label="Status" icon="check-circle">
3286
- * <span class="status-badge">Active</span>
3287
- * </lc-field-group>
3687
+ * <lc-field-group label="Email" value="user@example.com" />
3688
+ * <lc-field-group label="Language" value="English" icon="globe-alt" />
3288
3689
  * ```
3289
3690
  */
3290
3691
  declare class FieldGroupComponent {
@@ -3321,24 +3722,21 @@ interface StepperStep {
3321
3722
  }
3322
3723
  type StepState = 'pending' | 'active' | 'completed';
3323
3724
  /**
3324
- * Stepper Component
3725
+ * Stepper component for multi-step wizard workflows.
3325
3726
  *
3326
- * Step-by-step wizard with numbered steps, active/completed/pending states.
3327
- * Emits events when user navigates between steps.
3727
+ * Features:
3728
+ * - Horizontal and vertical orientations
3729
+ * - Active, completed, and pending step states
3730
+ * - Numbered step indicators with checkmark on completion
3731
+ * - Optional step descriptions and "optional" labels
3732
+ * - Linear mode restricting navigation to sequential steps
3733
+ * - Two-way active step binding
3734
+ * - Content projection for step body
3328
3735
  *
3329
3736
  * @example
3330
3737
  * ```html
3331
- * <lc-stepper
3332
- * [steps]="steps"
3333
- * [(activeStep)]="currentStep"
3334
- * (stepChange)="onStep($event)"
3335
- * >
3336
- * @if (currentStep === 0) {
3337
- * <div class="step-content">Step 1 content</div>
3338
- * }
3339
- * @if (currentStep === 1) {
3340
- * <div class="step-content">Step 2 content</div>
3341
- * }
3738
+ * <lc-stepper [steps]="steps" [(activeStep)]="currentStep">
3739
+ * <div>Step content here</div>
3342
3740
  * </lc-stepper>
3343
3741
  * ```
3344
3742
  */
@@ -3350,7 +3748,7 @@ declare class StepperComponent {
3350
3748
  /** Whether completed steps can be clicked to navigate back */
3351
3749
  linear: _angular_core.InputSignal<boolean>;
3352
3750
  /** Orientation */
3353
- orientation: _angular_core.InputSignal<"vertical" | "horizontal">;
3751
+ orientation: _angular_core.InputSignal<"horizontal" | "vertical">;
3354
3752
  /** Emitted when active step changes */
3355
3753
  stepChange: _angular_core.OutputEmitterRef<number>;
3356
3754
  /** Computed total step count */
@@ -3399,10 +3797,15 @@ interface FilterValues {
3399
3797
  [key: string]: string;
3400
3798
  }
3401
3799
  /**
3402
- * FilterBar Component
3800
+ * Filter bar component for composable data filtering.
3403
3801
  *
3404
- * Composable filter bar that combines selects, toggle groups, and search
3405
- * in a responsive horizontal layout. Ideal for list pages.
3802
+ * Features:
3803
+ * - Select dropdowns, toggle groups, and search inputs
3804
+ * - Declarative filter configuration via FilterConfig array
3805
+ * - Two-way filter values binding
3806
+ * - Responsive horizontal flex layout
3807
+ * - Size variants (sm, md)
3808
+ * - Dark mode support
3406
3809
  *
3407
3810
  * @example
3408
3811
  * ```html
@@ -3410,7 +3813,7 @@ interface FilterValues {
3410
3813
  * [filters]="filterConfig"
3411
3814
  * [values]="currentFilters"
3412
3815
  * (valuesChange)="onFilterChange($event)"
3413
- * ></lc-filter-bar>
3816
+ * />
3414
3817
  * ```
3415
3818
  */
3416
3819
  declare class FilterBarComponent {
@@ -3440,21 +3843,19 @@ declare class FilterBarComponent {
3440
3843
 
3441
3844
  type SpinnerSize = 'sm' | 'md' | 'lg';
3442
3845
  /**
3443
- * Spinner component for loading states.
3846
+ * Spinner component for loading state indication.
3444
3847
  *
3445
- * Displays a spinning indicator with an optional message.
3446
- * Supports three sizes and respects the design-system color tokens.
3848
+ * Features:
3849
+ * - Animated spinning indicator
3850
+ * - Size variants (sm, md, lg)
3851
+ * - Optional message text below spinner
3852
+ * - Design system color token integration
3853
+ * - Accessible with ARIA status role
3447
3854
  *
3448
3855
  * @example
3449
3856
  * ```html
3450
- * <!-- Simple spinner -->
3451
3857
  * <lc-spinner />
3452
- *
3453
- * <!-- With message -->
3454
- * <lc-spinner message="Loading data..." />
3455
- *
3456
- * <!-- Large spinner -->
3457
- * <lc-spinner size="lg" message="Loading dashboard..." />
3858
+ * <lc-spinner size="lg" message="Loading data..." />
3458
3859
  * ```
3459
3860
  */
3460
3861
  declare class SpinnerComponent {
@@ -3476,22 +3877,18 @@ type SkeletonVariant = 'line' | 'circle' | 'rect';
3476
3877
  /**
3477
3878
  * Skeleton loader component for placeholder loading states.
3478
3879
  *
3479
- * Renders a shimmer-animated placeholder block. Use multiple instances
3480
- * to compose loading skeletons that match your page layout.
3880
+ * Features:
3881
+ * - Variant shapes (text, rect, circle)
3882
+ * - Shimmer animation effect
3883
+ * - Custom width, height, and border radius
3884
+ * - Composable for building complex loading layouts
3885
+ * - Dark mode compatible
3481
3886
  *
3482
3887
  * @example
3483
3888
  * ```html
3484
- * <!-- Text line (default) -->
3485
3889
  * <lc-skeleton />
3486
- *
3487
- * <!-- Custom width/height -->
3488
- * <lc-skeleton width="200px" height="1.75rem" />
3489
- *
3490
- * <!-- Circle avatar placeholder -->
3491
3890
  * <lc-skeleton variant="circle" width="40px" height="40px" />
3492
- *
3493
- * <!-- Full-width rectangle (e.g. chart area) -->
3494
- * <lc-skeleton variant="rect" width="100%" height="400px" borderRadius="0.5rem" />
3891
+ * <lc-skeleton variant="rect" width="100%" height="400px" />
3495
3892
  * ```
3496
3893
  */
3497
3894
  declare class SkeletonComponent {
@@ -3517,24 +3914,21 @@ declare class SkeletonComponent {
3517
3914
 
3518
3915
  type EmptyStateSize = 'sm' | 'md' | 'lg';
3519
3916
  /**
3520
- * Empty-state component for "no data" placeholders.
3917
+ * Empty state component for "no data" placeholder displays.
3521
3918
  *
3522
- * Supports a compact inline mode (inside cards) and a larger page-level mode.
3523
- * An optional icon, heading, description, and projected action slot are supported.
3919
+ * Features:
3920
+ * - Compact (sm) and page-level (md, lg) size modes
3921
+ * - Optional icon from Heroicons library
3922
+ * - Heading and description text
3923
+ * - Action slot for projected CTA buttons
3924
+ * - Centered layout with visual hierarchy
3524
3925
  *
3525
3926
  * @example
3526
3927
  * ```html
3527
- * <!-- Inline / card-level (sm) -->
3528
- * <lc-empty-state
3529
- * size="sm"
3530
- * message="No signals generated for this asset yet." />
3531
- *
3532
- * <!-- Page-level with icon + action -->
3533
3928
  * <lc-empty-state
3534
3929
  * icon="chart-bar"
3535
- * heading="No Paper Trading Portfolios"
3536
- * message="Portfolios are created automatically when strategies are promoted."
3537
- * >
3930
+ * heading="No Data"
3931
+ * message="No items found.">
3538
3932
  * <lc-button variant="primary">Get Started</lc-button>
3539
3933
  * </lc-empty-state>
3540
3934
  * ```
@@ -3568,11 +3962,16 @@ declare class EmptyStateComponent {
3568
3962
  type DrawerPosition = 'left' | 'right';
3569
3963
  type DrawerSize = 'sm' | 'md' | 'lg' | 'xl';
3570
3964
  /**
3571
- * Drawer Component a slide-out overlay panel for supplementary content.
3965
+ * Drawer component for slide-out overlay panels.
3572
3966
  *
3573
- * Unlike the Sidenav (which renders navigation items), the Drawer
3574
- * accepts arbitrary projected content via `<ng-content>`, making it
3575
- * ideal for settings panels, filters, detail views, etc.
3967
+ * Features:
3968
+ * - Slide-in from left, right, top, or bottom
3969
+ * - Size presets (sm, md, lg, xl, full)
3970
+ * - Optional backdrop overlay with click-to-close
3971
+ * - Close on Escape key support
3972
+ * - Heading text display
3973
+ * - Content projection for arbitrary body content
3974
+ * - Accessible with ARIA dialog role
3576
3975
  *
3577
3976
  * @example
3578
3977
  * ```html
@@ -3617,5 +4016,1914 @@ declare class DrawerComponent {
3617
4016
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<DrawerComponent, "lc-drawer", never, { "open": { "alias": "open"; "required": false; "isSignal": true; }; "position": { "alias": "position"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "heading": { "alias": "heading"; "required": false; "isSignal": true; }; "hasOverlay": { "alias": "hasOverlay"; "required": false; "isSignal": true; }; "closeOnOverlayClick": { "alias": "closeOnOverlayClick"; "required": false; "isSignal": true; }; "closeOnEscape": { "alias": "closeOnEscape"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "closed": "closed"; }, never, ["*"], true, never>;
3618
4017
  }
3619
4018
 
3620
- export { AccordionComponent, AlertComponent, AnimationDurationFast, AnimationEasingEaseIn, AnimationEasingEaseInOut, AnimationEasingEaseOut, AvatarComponent, BadgeComponent, BorderRadius2xl, BorderRadiusFull, BorderRadiusLg, BorderRadiusMd, BorderRadiusNone, BorderRadiusSm, BorderRadiusXl, BreadcrumbsComponent, ButtonComponent, CardComponent, CheckboxComponent, ChipComponent, ColorAccentOrange, ColorAccentPurple, ColorAccentRed, ColorAccentRust, ColorAccentViolet, ColorErrorDark, ColorErrorDefault, ColorErrorLight, ColorInfoDark, ColorInfoDefault, ColorInfoLight, ColorNeutral100, ColorNeutral200, ColorNeutral300, ColorNeutral400, ColorNeutral50, ColorNeutral500, ColorNeutral600, ColorNeutral700, ColorNeutral800, ColorNeutral900, ColorPrimary100, ColorPrimary200, ColorPrimary300, ColorPrimary400, ColorPrimary50, ColorPrimary500, ColorPrimary600, ColorPrimary700, ColorPrimary800, ColorPrimary900, ColorSecondary100, ColorSecondary200, ColorSecondary300, ColorSecondary400, ColorSecondary50, ColorSecondary500, ColorSecondary600, ColorSecondary700, ColorSecondary800, ColorSecondary900, ColorSuccessDark, ColorSuccessDefault, ColorSuccessLight, ColorWarningDark, ColorWarningDefault, ColorWarningLight, ContainerComponent, DatepickerComponent, DrawerComponent, Elevation1, Elevation2, Elevation3, Elevation4, EmailInputComponent, EmptyStateComponent, ErrorDisplayComponent, FieldGroupComponent, FilterBarComponent, HeaderComponent, IconComponent, InputComponent, ListComponent, ListItemTemplateDirective, LogoComponent, MenuComponent, MetricCardComponent, ModalComponent, PaginationComponent, PasswordInputComponent, RadioComponent, SectionComponent, SelectComponent, SidenavComponent, SizeInteractiveLgFontSize, SizeInteractiveLgHeight, SizeInteractiveLgPadding, SizeInteractiveMdFontSize, SizeInteractiveMdHeight, SizeInteractiveMdPadding, SizeInteractiveSmFontSize, SizeInteractiveSmHeight, SizeInteractiveSmPadding, SizeInteractiveXsFontSize, SizeInteractiveXsHeight, SizeInteractiveXsPadding, SizeMinTouchHeight, SizeMinTouchWidth, SkeletonComponent, SpacerComponent, Spacing0, Spacing05, Spacing1, Spacing10, Spacing11, Spacing12, Spacing14, Spacing15, Spacing16, Spacing2, Spacing25, Spacing3, Spacing35, Spacing4, Spacing5, Spacing6, Spacing7, Spacing8, Spacing9, SpinnerComponent, StackComponent, StepperComponent, SwitchComponent, TabComponent, TableCellDirective, TableComponent, TabsComponent, TextareaComponent, ThemeService, ToastComponent, ToastService, ToggleGroupComponent, TooltipContentComponent, TooltipDirective, TypographyComponent, TypographyFontFamilyBase, TypographyFontFamilyMono, TypographyFontSize2xl, TypographyFontSize3xl, TypographyFontSize4xl, TypographyFontSize5xl, TypographyFontSize6xl, TypographyFontSizeBase, TypographyFontSizeLg, TypographyFontSizeSm, TypographyFontSizeXl, TypographyFontSizeXs, TypographyFontWeightBold, TypographyFontWeightMedium, TypographyFontWeightNormal, TypographyFontWeightSemibold, TypographyLineHeightNormal, TypographyLineHeightRelaxed, TypographyLineHeightTight, VerificationCodeInputComponent };
3621
- export type { AlertVariant, AvatarSize, AvatarStatus, BadgeSize, BadgeVariant, BreadcrumbItem, BreadcrumbSize, ButtonSize, ButtonType, ButtonVariant, CheckboxSize, ChipSize, ChipVariant, ContainerSize, DateValue, DrawerPosition, DrawerSize, EmptyStateSize, ErrorSeverity, FilterConfig, FilterOption, FilterValues, IconSize, IconVariant, ListItem, ListOrientation, ListVariant, MenuItem, ModalSize, NavigationItem, PaginationSize, PasswordRequirement, PasswordStrength, RadioSize, SectionBackground, SectionSpacing, SelectOption, SelectOptionGroup, SelectValue, SidenavMode, SidenavPosition, SkeletonVariant, SortEvent, SpacerSize, SpinnerSize, StackAlign, StackDirection, StackGap, StackJustify, StepState, StepperStep, TabOrientation, TableColumn, TableSize, TableVariant, ThemeConfig, ThemeMode, ThemeState, Toast, ToastAction, ToastConfig, ToastPosition, ToastVariant, ToggleOption, TooltipPosition, TrendDirection };
4019
+ interface TimelineItem {
4020
+ /** Title of the event */
4021
+ title: string;
4022
+ /** Optional description */
4023
+ description?: string;
4024
+ /** Optional timestamp string */
4025
+ timestamp?: string;
4026
+ /** Optional icon name (heroicon) */
4027
+ icon?: string;
4028
+ /** Optional color for the dot/icon */
4029
+ color?: 'primary' | 'secondary' | 'success' | 'warning' | 'error' | 'info' | 'neutral';
4030
+ }
4031
+ type TimelineOrientation = 'vertical' | 'horizontal';
4032
+ /**
4033
+ * Timeline component for chronological event display.
4034
+ *
4035
+ * Features:
4036
+ * - Vertical timeline with connecting line
4037
+ * - Semantic status colors per event (info, success, warning, error)
4038
+ * - Date and description display per item
4039
+ * - Icon support for timeline markers
4040
+ * - Dark mode support
4041
+ *
4042
+ * @example
4043
+ * ```html
4044
+ * <lc-timeline [items]="events"></lc-timeline>
4045
+ * ```
4046
+ */
4047
+ declare class TimelineComponent {
4048
+ /**
4049
+ * List of timeline events.
4050
+ */
4051
+ items: _angular_core.InputSignal<TimelineItem[]>;
4052
+ /**
4053
+ * Layout orientation.
4054
+ * @default 'vertical'
4055
+ */
4056
+ orientation: _angular_core.InputSignal<TimelineOrientation>;
4057
+ /**
4058
+ * Compact mode reduces spacing.
4059
+ * @default false
4060
+ */
4061
+ compact: _angular_core.InputSignal<boolean>;
4062
+ protected timelineClasses: _angular_core.Signal<string>;
4063
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<TimelineComponent, never>;
4064
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TimelineComponent, "lc-timeline", never, { "items": { "alias": "items"; "required": true; "isSignal": true; }; "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; "compact": { "alias": "compact"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
4065
+ }
4066
+
4067
+ interface AvatarGroupItem {
4068
+ /** Image source URL */
4069
+ src?: string;
4070
+ /** Alt text */
4071
+ alt?: string;
4072
+ /** Full name for initials fallback */
4073
+ name?: string;
4074
+ }
4075
+ declare class AvatarGroupComponent {
4076
+ /** List of avatars to show */
4077
+ avatars: _angular_core.InputSignal<AvatarGroupItem[]>;
4078
+ /** Avatar size */
4079
+ size: _angular_core.InputSignal<AvatarSize>;
4080
+ /** Maximum visible avatars before showing overflow count */
4081
+ max: _angular_core.InputSignal<number>;
4082
+ protected visibleAvatars: _angular_core.Signal<AvatarGroupItem[]>;
4083
+ protected overflowCount: _angular_core.Signal<number>;
4084
+ protected groupClasses: _angular_core.Signal<string>;
4085
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AvatarGroupComponent, never>;
4086
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AvatarGroupComponent, "lc-avatar-group", never, { "avatars": { "alias": "avatars"; "required": true; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
4087
+ }
4088
+
4089
+ declare class SliderComponent implements ControlValueAccessor {
4090
+ /** Minimum value */
4091
+ min: _angular_core.InputSignal<number>;
4092
+ /** Maximum value */
4093
+ max: _angular_core.InputSignal<number>;
4094
+ /** Step increment */
4095
+ step: _angular_core.InputSignal<number>;
4096
+ /** Label text */
4097
+ label: _angular_core.InputSignal<string | undefined>;
4098
+ /** Whether to show the current value */
4099
+ showValue: _angular_core.InputSignal<boolean>;
4100
+ /** Disabled state */
4101
+ disabled: _angular_core.InputSignal<boolean>;
4102
+ /** Emits the current value on change */
4103
+ valueChange: _angular_core.OutputEmitterRef<number>;
4104
+ /** Internal value */
4105
+ protected value: _angular_core.WritableSignal<number>;
4106
+ /** Internal disabled state — merged from input + CVA */
4107
+ protected isDisabled: _angular_core.WritableSignal<boolean>;
4108
+ /** Percentage for fill track */
4109
+ protected fillPercentage: _angular_core.Signal<number>;
4110
+ protected sliderClasses: _angular_core.Signal<string>;
4111
+ private onChange;
4112
+ private onTouched;
4113
+ onInput(event: Event): void;
4114
+ onBlur(): void;
4115
+ writeValue(val: number): void;
4116
+ registerOnChange(fn: (val: number) => void): void;
4117
+ registerOnTouched(fn: () => void): void;
4118
+ setDisabledState(isDisabled: boolean): void;
4119
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SliderComponent, never>;
4120
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SliderComponent, "lc-slider", never, { "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "step": { "alias": "step"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "showValue": { "alias": "showValue"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; }, never, never, true, never>;
4121
+ }
4122
+
4123
+ declare class NumberInputComponent implements ControlValueAccessor {
4124
+ /** Minimum value */
4125
+ min: _angular_core.InputSignal<number | undefined>;
4126
+ /** Maximum value */
4127
+ max: _angular_core.InputSignal<number | undefined>;
4128
+ /** Step increment */
4129
+ step: _angular_core.InputSignal<number>;
4130
+ /** Label text */
4131
+ label: _angular_core.InputSignal<string | undefined>;
4132
+ /** Placeholder */
4133
+ placeholder: _angular_core.InputSignal<string>;
4134
+ /** Disabled state */
4135
+ disabled: _angular_core.InputSignal<boolean>;
4136
+ /** Emits value on change */
4137
+ valueChange: _angular_core.OutputEmitterRef<number>;
4138
+ protected value: _angular_core.WritableSignal<number | null>;
4139
+ protected isDisabled: _angular_core.WritableSignal<boolean>;
4140
+ protected containerClasses: _angular_core.Signal<string>;
4141
+ protected canDecrement: _angular_core.Signal<boolean>;
4142
+ protected canIncrement: _angular_core.Signal<boolean>;
4143
+ private onChange;
4144
+ private onTouched;
4145
+ decrement(): void;
4146
+ increment(): void;
4147
+ onInput(event: Event): void;
4148
+ onBlur(): void;
4149
+ private setValue;
4150
+ writeValue(val: number | null): void;
4151
+ registerOnChange(fn: (val: number | null) => void): void;
4152
+ registerOnTouched(fn: () => void): void;
4153
+ setDisabledState(isDisabled: boolean): void;
4154
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<NumberInputComponent, never>;
4155
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<NumberInputComponent, "lc-number-input", never, { "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "step": { "alias": "step"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; }, never, never, true, never>;
4156
+ }
4157
+
4158
+ type CalloutVariant = 'info' | 'success' | 'warning' | 'error' | 'neutral';
4159
+ declare class CalloutComponent {
4160
+ /** Visual variant */
4161
+ variant: _angular_core.InputSignal<CalloutVariant>;
4162
+ /** Title text (optional) */
4163
+ title: _angular_core.InputSignal<string | undefined>;
4164
+ /** Whether the callout can be dismissed */
4165
+ dismissible: _angular_core.InputSignal<boolean>;
4166
+ /** Emits when dismiss button is clicked */
4167
+ dismissed: _angular_core.OutputEmitterRef<void>;
4168
+ protected visible: _angular_core.WritableSignal<boolean>;
4169
+ protected calloutClasses: _angular_core.Signal<string>;
4170
+ protected iconName: _angular_core.Signal<string>;
4171
+ dismiss(): void;
4172
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<CalloutComponent, never>;
4173
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<CalloutComponent, "lc-callout", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "dismissible": { "alias": "dismissible"; "required": false; "isSignal": true; }; }, { "dismissed": "dismissed"; }, never, ["*"], true, never>;
4174
+ }
4175
+
4176
+ type RatingSize = 'sm' | 'md' | 'lg';
4177
+ declare class RatingComponent implements ControlValueAccessor {
4178
+ /** Maximum number of stars */
4179
+ max: _angular_core.InputSignal<number>;
4180
+ /** Size variant */
4181
+ size: _angular_core.InputSignal<RatingSize>;
4182
+ /** Whether the rating is read-only */
4183
+ readonly: _angular_core.InputSignal<boolean>;
4184
+ /** Whether the rating is disabled */
4185
+ disabled: _angular_core.InputSignal<boolean>;
4186
+ /** Whether to allow half-star ratings */
4187
+ allowHalf: _angular_core.InputSignal<boolean>;
4188
+ /** Label text */
4189
+ label: _angular_core.InputSignal<string | undefined>;
4190
+ /** Whether to show the numeric value */
4191
+ showValue: _angular_core.InputSignal<boolean>;
4192
+ /** Emits the selected rating */
4193
+ ratingChange: _angular_core.OutputEmitterRef<number>;
4194
+ protected value: _angular_core.WritableSignal<number>;
4195
+ protected hoveredValue: _angular_core.WritableSignal<number>;
4196
+ protected isDisabled: _angular_core.WritableSignal<boolean>;
4197
+ protected stars: _angular_core.Signal<number[]>;
4198
+ protected ratingClasses: _angular_core.Signal<string>;
4199
+ protected getStarState(star: number): 'full' | 'half' | 'empty';
4200
+ protected getStarIcon(star: number): string;
4201
+ protected isStarFilled(star: number): boolean;
4202
+ protected isStarHalf(star: number): boolean;
4203
+ protected onStarClick(star: number): void;
4204
+ protected onStarHover(star: number): void;
4205
+ protected onMouseLeave(): void;
4206
+ private onChange;
4207
+ private onTouched;
4208
+ writeValue(val: number): void;
4209
+ registerOnChange(fn: (val: number) => void): void;
4210
+ registerOnTouched(fn: () => void): void;
4211
+ setDisabledState(isDisabled: boolean): void;
4212
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<RatingComponent, never>;
4213
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<RatingComponent, "lc-rating", never, { "max": { "alias": "max"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "allowHalf": { "alias": "allowHalf"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "showValue": { "alias": "showValue"; "required": false; "isSignal": true; }; }, { "ratingChange": "ratingChange"; }, never, never, true, never>;
4214
+ }
4215
+
4216
+ declare class ColorPickerComponent implements ControlValueAccessor {
4217
+ /** Label text */
4218
+ label: _angular_core.InputSignal<string | undefined>;
4219
+ /** Predefined color swatches */
4220
+ swatches: _angular_core.InputSignal<string[]>;
4221
+ /** Whether to show the hex input field */
4222
+ showInput: _angular_core.InputSignal<boolean>;
4223
+ /** Whether the picker is disabled */
4224
+ disabled: _angular_core.InputSignal<boolean>;
4225
+ /** Emits the selected color hex value */
4226
+ colorChange: _angular_core.OutputEmitterRef<string>;
4227
+ protected value: _angular_core.WritableSignal<string>;
4228
+ protected isDisabled: _angular_core.WritableSignal<boolean>;
4229
+ protected pickerClasses: _angular_core.Signal<string>;
4230
+ private onChange;
4231
+ private onTouched;
4232
+ protected selectSwatch(color: string): void;
4233
+ protected onNativeInput(event: Event): void;
4234
+ protected onHexInput(event: Event): void;
4235
+ protected onBlur(): void;
4236
+ private setValue;
4237
+ writeValue(val: string): void;
4238
+ registerOnChange(fn: (val: string) => void): void;
4239
+ registerOnTouched(fn: () => void): void;
4240
+ setDisabledState(isDisabled: boolean): void;
4241
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ColorPickerComponent, never>;
4242
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ColorPickerComponent, "lc-color-picker", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "swatches": { "alias": "swatches"; "required": false; "isSignal": true; }; "showInput": { "alias": "showInput"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, { "colorChange": "colorChange"; }, never, never, true, never>;
4243
+ }
4244
+
4245
+ type CodeBlockLanguage = 'typescript' | 'javascript' | 'html' | 'css' | 'scss' | 'json' | 'bash' | 'python' | 'java' | 'text';
4246
+ declare class CodeBlockComponent {
4247
+ private sanitizer;
4248
+ /** Code content to display */
4249
+ code: _angular_core.InputSignal<string>;
4250
+ /** Language label */
4251
+ language: _angular_core.InputSignal<CodeBlockLanguage>;
4252
+ /** Optional filename to display */
4253
+ filename: _angular_core.InputSignal<string | undefined>;
4254
+ /** Whether to show line numbers */
4255
+ showLineNumbers: _angular_core.InputSignal<boolean>;
4256
+ /** Whether to show copy button */
4257
+ showCopy: _angular_core.InputSignal<boolean>;
4258
+ /** Whether the code block has a header bar */
4259
+ showHeader: _angular_core.InputSignal<boolean>;
4260
+ protected copied: _angular_core.WritableSignal<boolean>;
4261
+ constructor(sanitizer: DomSanitizer);
4262
+ protected highlightedLines: _angular_core.Signal<SafeHtml[]>;
4263
+ protected lineNumbers: _angular_core.Signal<number[]>;
4264
+ protected headerLabel: _angular_core.Signal<string>;
4265
+ protected codeClasses: _angular_core.Signal<string>;
4266
+ protected copyToClipboard(): Promise<void>;
4267
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<CodeBlockComponent, never>;
4268
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<CodeBlockComponent, "lc-code-block", never, { "code": { "alias": "code"; "required": true; "isSignal": true; }; "language": { "alias": "language"; "required": false; "isSignal": true; }; "filename": { "alias": "filename"; "required": false; "isSignal": true; }; "showLineNumbers": { "alias": "showLineNumbers"; "required": false; "isSignal": true; }; "showCopy": { "alias": "showCopy"; "required": false; "isSignal": true; }; "showHeader": { "alias": "showHeader"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
4269
+ }
4270
+
4271
+ interface FooterLink {
4272
+ /** Display label */
4273
+ label: string;
4274
+ /** URL or route */
4275
+ href: string;
4276
+ /** Whether it opens in a new tab */
4277
+ external?: boolean;
4278
+ }
4279
+ interface FooterSection {
4280
+ /** Section heading */
4281
+ title: string;
4282
+ /** Links in this section */
4283
+ links: FooterLink[];
4284
+ }
4285
+ type FooterVariant = 'default' | 'primary' | 'dark' | 'neutral';
4286
+ declare class FooterComponent {
4287
+ /** Footer navigation sections */
4288
+ sections: _angular_core.InputSignal<FooterSection[]>;
4289
+ /** Copyright text */
4290
+ copyright: _angular_core.InputSignal<string | undefined>;
4291
+ /** Whether to show a top border */
4292
+ showBorder: _angular_core.InputSignal<boolean>;
4293
+ /** Compact layout (single row) */
4294
+ compact: _angular_core.InputSignal<boolean>;
4295
+ /** Color variant */
4296
+ variant: _angular_core.InputSignal<FooterVariant>;
4297
+ protected footerClasses: _angular_core.Signal<string>;
4298
+ protected currentYear: number;
4299
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<FooterComponent, never>;
4300
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<FooterComponent, "lc-footer", never, { "sections": { "alias": "sections"; "required": false; "isSignal": true; }; "copyright": { "alias": "copyright"; "required": false; "isSignal": true; }; "showBorder": { "alias": "showBorder"; "required": false; "isSignal": true; }; "compact": { "alias": "compact"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
4301
+ }
4302
+
4303
+ type SparklineColor = 'primary' | 'secondary' | 'success' | 'warning' | 'error' | 'info';
4304
+ type SparklineCurve = 'linear' | 'smooth';
4305
+ declare class SparklineComponent {
4306
+ /** Data points to plot. */
4307
+ data: _angular_core.InputSignal<number[]>;
4308
+ /** Stroke color theme. */
4309
+ color: _angular_core.InputSignal<SparklineColor>;
4310
+ /** Width of the SVG in pixels. */
4311
+ width: _angular_core.InputSignal<number>;
4312
+ /** Height of the SVG in pixels. */
4313
+ height: _angular_core.InputSignal<number>;
4314
+ /** Stroke width in pixels. */
4315
+ strokeWidth: _angular_core.InputSignal<number>;
4316
+ /** Show a filled area under the line. */
4317
+ filled: _angular_core.InputSignal<boolean>;
4318
+ /** Curve interpolation mode. */
4319
+ curve: _angular_core.InputSignal<SparklineCurve>;
4320
+ /** Show a dot on the last data point. */
4321
+ showEndDot: _angular_core.InputSignal<boolean>;
4322
+ protected readonly colorVar: _angular_core.Signal<string>;
4323
+ protected readonly fillColorVar: _angular_core.Signal<string>;
4324
+ protected readonly pathD: _angular_core.Signal<string>;
4325
+ protected readonly areaD: _angular_core.Signal<string>;
4326
+ protected readonly endDot: _angular_core.Signal<{
4327
+ cx: number;
4328
+ cy: number;
4329
+ r: number;
4330
+ } | null>;
4331
+ protected readonly viewBox: _angular_core.Signal<string>;
4332
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SparklineComponent, never>;
4333
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SparklineComponent, "lc-sparkline", never, { "data": { "alias": "data"; "required": true; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "strokeWidth": { "alias": "strokeWidth"; "required": false; "isSignal": true; }; "filled": { "alias": "filled"; "required": false; "isSignal": true; }; "curve": { "alias": "curve"; "required": false; "isSignal": true; }; "showEndDot": { "alias": "showEndDot"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
4334
+ }
4335
+
4336
+ type StatTrendDirection = 'up' | 'down' | 'neutral';
4337
+ declare class StatTrendComponent {
4338
+ /** Main KPI label. */
4339
+ label: _angular_core.InputSignal<string>;
4340
+ /** Main KPI value to display. */
4341
+ value: _angular_core.InputSignal<string>;
4342
+ /** Change value text, e.g. "+12%" or "-3.5%". */
4343
+ change: _angular_core.InputSignal<string>;
4344
+ /** Trend direction for color coding. Auto-detected from change if not set. */
4345
+ direction: _angular_core.InputSignal<StatTrendDirection | undefined>;
4346
+ /** Sparkline data points. If empty, no sparkline is shown. */
4347
+ sparklineData: _angular_core.InputSignal<number[]>;
4348
+ /** Color of the sparkline. Auto-matched to trend direction if not set. */
4349
+ sparklineColor: _angular_core.InputSignal<SparklineColor | undefined>;
4350
+ /** Optional icon name (Heroicon). */
4351
+ icon: _angular_core.InputSignal<string>;
4352
+ protected readonly resolvedDirection: _angular_core.Signal<StatTrendDirection>;
4353
+ protected readonly trendColorClass: _angular_core.Signal<string>;
4354
+ protected readonly resolvedSparklineColor: _angular_core.Signal<SparklineColor>;
4355
+ protected readonly trendIcon: _angular_core.Signal<string>;
4356
+ protected readonly hasSparkline: _angular_core.Signal<boolean>;
4357
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<StatTrendComponent, never>;
4358
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<StatTrendComponent, "lc-stat-trend", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": true; "isSignal": true; }; "change": { "alias": "change"; "required": false; "isSignal": true; }; "direction": { "alias": "direction"; "required": false; "isSignal": true; }; "sparklineData": { "alias": "sparklineData"; "required": false; "isSignal": true; }; "sparklineColor": { "alias": "sparklineColor"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
4359
+ }
4360
+
4361
+ interface DonutSegment {
4362
+ value: number;
4363
+ label?: string;
4364
+ color?: string;
4365
+ }
4366
+ type DonutChartSize = 'sm' | 'md' | 'lg';
4367
+ declare class DonutChartComponent {
4368
+ /** Segments to render. */
4369
+ segments: _angular_core.InputSignal<DonutSegment[]>;
4370
+ /** Size preset. */
4371
+ size: _angular_core.InputSignal<DonutChartSize>;
4372
+ /** Thickness of the donut ring (0-1 ratio of radius). */
4373
+ thickness: _angular_core.InputSignal<number>;
4374
+ /** Show the center label area. */
4375
+ showCenter: _angular_core.InputSignal<boolean>;
4376
+ /** Center label text. */
4377
+ centerLabel: _angular_core.InputSignal<string>;
4378
+ /** Center value text (large number). */
4379
+ centerValue: _angular_core.InputSignal<string>;
4380
+ /** Show legend below the chart. */
4381
+ showLegend: _angular_core.InputSignal<boolean>;
4382
+ protected readonly sizeMap: Record<DonutChartSize, number>;
4383
+ protected readonly svgSize: _angular_core.Signal<number>;
4384
+ protected readonly viewBox: _angular_core.Signal<string>;
4385
+ protected readonly center: _angular_core.Signal<number>;
4386
+ protected readonly outerRadius: _angular_core.Signal<number>;
4387
+ protected readonly innerRadius: _angular_core.Signal<number>;
4388
+ protected readonly arcs: _angular_core.Signal<{
4389
+ d: string;
4390
+ color: string;
4391
+ label: string;
4392
+ value: number;
4393
+ percentage: number;
4394
+ }[]>;
4395
+ protected readonly legendItems: _angular_core.Signal<{
4396
+ color: string;
4397
+ label: string;
4398
+ value: number;
4399
+ percentage: number;
4400
+ }[]>;
4401
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DonutChartComponent, never>;
4402
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DonutChartComponent, "lc-donut-chart", never, { "segments": { "alias": "segments"; "required": true; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "thickness": { "alias": "thickness"; "required": false; "isSignal": true; }; "showCenter": { "alias": "showCenter"; "required": false; "isSignal": true; }; "centerLabel": { "alias": "centerLabel"; "required": false; "isSignal": true; }; "centerValue": { "alias": "centerValue"; "required": false; "isSignal": true; }; "showLegend": { "alias": "showLegend"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
4403
+ }
4404
+
4405
+ interface BarChartItem {
4406
+ value: number;
4407
+ label?: string;
4408
+ color?: string;
4409
+ }
4410
+ type BarChartOrientation = 'vertical' | 'horizontal';
4411
+ declare class BarChartComponent {
4412
+ /** Data items. */
4413
+ data: _angular_core.InputSignal<BarChartItem[]>;
4414
+ /** Chart width in pixels. */
4415
+ width: _angular_core.InputSignal<number>;
4416
+ /** Chart height in pixels. */
4417
+ height: _angular_core.InputSignal<number>;
4418
+ /** Bar orientation. */
4419
+ orientation: _angular_core.InputSignal<BarChartOrientation>;
4420
+ /** Show value labels on bars. */
4421
+ showValues: _angular_core.InputSignal<boolean>;
4422
+ /** Show axis labels. */
4423
+ showLabels: _angular_core.InputSignal<boolean>;
4424
+ /** Show grid lines. */
4425
+ showGrid: _angular_core.InputSignal<boolean>;
4426
+ /** Gap between bars as ratio (0-1). */
4427
+ barGap: _angular_core.InputSignal<number>;
4428
+ /** Use a single color for all bars. */
4429
+ color: _angular_core.InputSignal<string>;
4430
+ private readonly PADDING_LEFT;
4431
+ private readonly PADDING_RIGHT;
4432
+ private readonly PADDING_TOP;
4433
+ private readonly PADDING_BOTTOM;
4434
+ protected readonly viewBox: _angular_core.Signal<string>;
4435
+ protected readonly maxValue: _angular_core.Signal<number>;
4436
+ protected readonly gridLines: _angular_core.Signal<{
4437
+ y: number;
4438
+ label: string;
4439
+ }[]>;
4440
+ protected readonly bars: _angular_core.Signal<{
4441
+ x: number;
4442
+ y: number;
4443
+ width: number;
4444
+ height: number;
4445
+ color: string;
4446
+ label: string;
4447
+ value: number;
4448
+ labelX: number;
4449
+ labelY: number;
4450
+ valueX: number;
4451
+ valueY: number;
4452
+ }[]>;
4453
+ protected readonly isVertical: _angular_core.Signal<boolean>;
4454
+ protected readonly axisLine: _angular_core.Signal<{
4455
+ x1: number;
4456
+ y1: number;
4457
+ x2: number;
4458
+ y2: number;
4459
+ bx1: number;
4460
+ by1: number;
4461
+ bx2: number;
4462
+ by2: number;
4463
+ }>;
4464
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<BarChartComponent, never>;
4465
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<BarChartComponent, "lc-bar-chart", never, { "data": { "alias": "data"; "required": true; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; "showValues": { "alias": "showValues"; "required": false; "isSignal": true; }; "showLabels": { "alias": "showLabels"; "required": false; "isSignal": true; }; "showGrid": { "alias": "showGrid"; "required": false; "isSignal": true; }; "barGap": { "alias": "barGap"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
4466
+ }
4467
+
4468
+ interface LineChartSeries {
4469
+ label: string;
4470
+ data: number[];
4471
+ color?: string;
4472
+ }
4473
+ declare class LineChartComponent {
4474
+ /** One or more data series. */
4475
+ series: _angular_core.InputSignal<LineChartSeries[]>;
4476
+ /** X-axis labels. */
4477
+ labels: _angular_core.InputSignal<string[]>;
4478
+ /** Chart width in pixels. */
4479
+ width: _angular_core.InputSignal<number>;
4480
+ /** Chart height in pixels. */
4481
+ height: _angular_core.InputSignal<number>;
4482
+ /** Stroke width for lines. */
4483
+ strokeWidth: _angular_core.InputSignal<number>;
4484
+ /** Show dots at data points. */
4485
+ showDots: _angular_core.InputSignal<boolean>;
4486
+ /** Show grid lines. */
4487
+ showGrid: _angular_core.InputSignal<boolean>;
4488
+ /** Show X-axis labels. */
4489
+ showXLabels: _angular_core.InputSignal<boolean>;
4490
+ /** Show Y-axis labels. */
4491
+ showYLabels: _angular_core.InputSignal<boolean>;
4492
+ /** Show area fill under lines. */
4493
+ filled: _angular_core.InputSignal<boolean>;
4494
+ /** Show legend. */
4495
+ showLegend: _angular_core.InputSignal<boolean>;
4496
+ /** Use smooth curves. */
4497
+ smooth: _angular_core.InputSignal<boolean>;
4498
+ private readonly PL;
4499
+ private readonly PR;
4500
+ private readonly PT;
4501
+ private readonly PB;
4502
+ protected readonly viewBox: _angular_core.Signal<string>;
4503
+ protected readonly allValues: _angular_core.Signal<number[]>;
4504
+ protected readonly minValue: _angular_core.Signal<number>;
4505
+ protected readonly maxValue: _angular_core.Signal<number>;
4506
+ protected readonly maxDataLength: _angular_core.Signal<number>;
4507
+ protected readonly plotArea: _angular_core.Signal<{
4508
+ x: number;
4509
+ y: number;
4510
+ w: number;
4511
+ h: number;
4512
+ }>;
4513
+ protected readonly gridLines: _angular_core.Signal<{
4514
+ y: number;
4515
+ label: string;
4516
+ }[]>;
4517
+ protected readonly xLabels: _angular_core.Signal<{
4518
+ x: number;
4519
+ y: number;
4520
+ label: string;
4521
+ }[]>;
4522
+ protected readonly renderedSeries: _angular_core.Signal<{
4523
+ label: string;
4524
+ color: string;
4525
+ pathD: string;
4526
+ areaD: string;
4527
+ points: {
4528
+ x: number;
4529
+ y: number;
4530
+ }[];
4531
+ }[]>;
4532
+ protected readonly axisLine: _angular_core.Signal<{
4533
+ vx1: number;
4534
+ vy1: number;
4535
+ vx2: number;
4536
+ vy2: number;
4537
+ hx1: number;
4538
+ hy1: number;
4539
+ hx2: number;
4540
+ hy2: number;
4541
+ }>;
4542
+ protected readonly legendItems: _angular_core.Signal<{
4543
+ label: string;
4544
+ color: string;
4545
+ }[]>;
4546
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<LineChartComponent, never>;
4547
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<LineChartComponent, "lc-line-chart", never, { "series": { "alias": "series"; "required": true; "isSignal": true; }; "labels": { "alias": "labels"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "strokeWidth": { "alias": "strokeWidth"; "required": false; "isSignal": true; }; "showDots": { "alias": "showDots"; "required": false; "isSignal": true; }; "showGrid": { "alias": "showGrid"; "required": false; "isSignal": true; }; "showXLabels": { "alias": "showXLabels"; "required": false; "isSignal": true; }; "showYLabels": { "alias": "showYLabels"; "required": false; "isSignal": true; }; "filled": { "alias": "filled"; "required": false; "isSignal": true; }; "showLegend": { "alias": "showLegend"; "required": false; "isSignal": true; }; "smooth": { "alias": "smooth"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
4548
+ }
4549
+
4550
+ type GaugeColor = 'primary' | 'secondary' | 'success' | 'warning' | 'error' | 'info';
4551
+ type GaugeSize = 'sm' | 'md' | 'lg';
4552
+ declare class GaugeComponent {
4553
+ /** Value between 0 and max. */
4554
+ value: _angular_core.InputSignal<number>;
4555
+ /** Maximum value. */
4556
+ max: _angular_core.InputSignal<number>;
4557
+ /** Color theme. */
4558
+ color: _angular_core.InputSignal<GaugeColor>;
4559
+ /** Size preset. */
4560
+ size: _angular_core.InputSignal<GaugeSize>;
4561
+ /** Label text below the value. */
4562
+ label: _angular_core.InputSignal<string>;
4563
+ /** Value suffix (e.g. '%', '°C'). */
4564
+ suffix: _angular_core.InputSignal<string>;
4565
+ /** Show the value in the center. */
4566
+ showValue: _angular_core.InputSignal<boolean>;
4567
+ private readonly SIZE_MAP;
4568
+ protected readonly svgSize: _angular_core.Signal<number>;
4569
+ protected readonly svgHeight: _angular_core.Signal<number>;
4570
+ protected readonly viewBox: _angular_core.Signal<string>;
4571
+ protected readonly cx: _angular_core.Signal<number>;
4572
+ protected readonly cy: _angular_core.Signal<number>;
4573
+ protected readonly radius: _angular_core.Signal<number>;
4574
+ protected readonly strokeW: _angular_core.Signal<number>;
4575
+ protected readonly fraction: _angular_core.Signal<number>;
4576
+ protected readonly trackD: _angular_core.Signal<string>;
4577
+ protected readonly valueD: _angular_core.Signal<string>;
4578
+ protected readonly displayValue: _angular_core.Signal<string>;
4579
+ protected readonly valueFontSize: _angular_core.Signal<string>;
4580
+ protected readonly labelFontSize: _angular_core.Signal<string>;
4581
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<GaugeComponent, never>;
4582
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<GaugeComponent, "lc-gauge", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "suffix": { "alias": "suffix"; "required": false; "isSignal": true; }; "showValue": { "alias": "showValue"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
4583
+ }
4584
+
4585
+ interface StackedBarCategory {
4586
+ label: string;
4587
+ values: number[];
4588
+ }
4589
+ interface StackedBarLegend {
4590
+ label: string;
4591
+ color?: string;
4592
+ }
4593
+ type StackedBarOrientation = 'vertical' | 'horizontal';
4594
+ declare class StackedBarChartComponent {
4595
+ /** Categories with stacked values. */
4596
+ categories: _angular_core.InputSignal<StackedBarCategory[]>;
4597
+ /** Legend items mapping to each value index. */
4598
+ legends: _angular_core.InputSignal<StackedBarLegend[]>;
4599
+ width: _angular_core.InputSignal<number>;
4600
+ height: _angular_core.InputSignal<number>;
4601
+ orientation: _angular_core.InputSignal<StackedBarOrientation>;
4602
+ showLabels: _angular_core.InputSignal<boolean>;
4603
+ showValues: _angular_core.InputSignal<boolean>;
4604
+ showLegend: _angular_core.InputSignal<boolean>;
4605
+ showGrid: _angular_core.InputSignal<boolean>;
4606
+ barGap: _angular_core.InputSignal<number>;
4607
+ private readonly PL;
4608
+ private readonly PR;
4609
+ private readonly PT;
4610
+ private readonly PB;
4611
+ protected readonly viewBox: _angular_core.Signal<string>;
4612
+ protected readonly maxTotal: _angular_core.Signal<number>;
4613
+ protected readonly gridLines: _angular_core.Signal<{
4614
+ y: number;
4615
+ label: string;
4616
+ }[]>;
4617
+ protected readonly stacks: _angular_core.Signal<{
4618
+ label: string;
4619
+ segments: {
4620
+ color: string;
4621
+ value: number;
4622
+ x: number;
4623
+ y: number;
4624
+ w: number;
4625
+ h: number;
4626
+ }[];
4627
+ labelPos: {
4628
+ x: number;
4629
+ y: number;
4630
+ };
4631
+ total: number;
4632
+ }[]>;
4633
+ protected readonly legendItems: _angular_core.Signal<{
4634
+ label: string;
4635
+ color: string;
4636
+ }[]>;
4637
+ protected readonly isVertical: _angular_core.Signal<boolean>;
4638
+ protected readonly axisLine: _angular_core.Signal<{
4639
+ vx1: number;
4640
+ vy1: number;
4641
+ vx2: number;
4642
+ vy2: number;
4643
+ hx1: number;
4644
+ hy1: number;
4645
+ hx2: number;
4646
+ hy2: number;
4647
+ }>;
4648
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<StackedBarChartComponent, never>;
4649
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<StackedBarChartComponent, "lc-stacked-bar-chart", never, { "categories": { "alias": "categories"; "required": true; "isSignal": true; }; "legends": { "alias": "legends"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; "showLabels": { "alias": "showLabels"; "required": false; "isSignal": true; }; "showValues": { "alias": "showValues"; "required": false; "isSignal": true; }; "showLegend": { "alias": "showLegend"; "required": false; "isSignal": true; }; "showGrid": { "alias": "showGrid"; "required": false; "isSignal": true; }; "barGap": { "alias": "barGap"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
4650
+ }
4651
+
4652
+ interface AreaChartSeries {
4653
+ label: string;
4654
+ data: number[];
4655
+ color?: string;
4656
+ }
4657
+ declare class AreaChartComponent {
4658
+ series: _angular_core.InputSignal<AreaChartSeries[]>;
4659
+ labels: _angular_core.InputSignal<string[]>;
4660
+ width: _angular_core.InputSignal<number>;
4661
+ height: _angular_core.InputSignal<number>;
4662
+ strokeWidth: _angular_core.InputSignal<number>;
4663
+ showDots: _angular_core.InputSignal<boolean>;
4664
+ showGrid: _angular_core.InputSignal<boolean>;
4665
+ showXLabels: _angular_core.InputSignal<boolean>;
4666
+ showYLabels: _angular_core.InputSignal<boolean>;
4667
+ showLegend: _angular_core.InputSignal<boolean>;
4668
+ smooth: _angular_core.InputSignal<boolean>;
4669
+ /** Opacity for the filled area (0–1). */
4670
+ fillOpacity: _angular_core.InputSignal<number>;
4671
+ /** Stack areas on top of each other. */
4672
+ stacked: _angular_core.InputSignal<boolean>;
4673
+ private readonly PL;
4674
+ private readonly PR;
4675
+ private readonly PT;
4676
+ private readonly PB;
4677
+ protected readonly viewBox: _angular_core.Signal<string>;
4678
+ protected readonly plotArea: _angular_core.Signal<{
4679
+ x: number;
4680
+ y: number;
4681
+ w: number;
4682
+ h: number;
4683
+ }>;
4684
+ protected readonly computedSeries: _angular_core.Signal<{
4685
+ computedData: number[];
4686
+ prevData: number[] | null;
4687
+ label: string;
4688
+ data: number[];
4689
+ color?: string;
4690
+ }[]>;
4691
+ protected readonly minValue: _angular_core.Signal<number>;
4692
+ protected readonly maxValue: _angular_core.Signal<number>;
4693
+ protected readonly gridLines: _angular_core.Signal<{
4694
+ y: number;
4695
+ label: string;
4696
+ }[]>;
4697
+ protected readonly xLabelItems: _angular_core.Signal<{
4698
+ x: number;
4699
+ y: number;
4700
+ label: string;
4701
+ }[]>;
4702
+ private toPoints;
4703
+ private buildPath;
4704
+ protected readonly renderedSeries: _angular_core.Signal<{
4705
+ label: string;
4706
+ color: string;
4707
+ lineD: string;
4708
+ areaD: string;
4709
+ points: {
4710
+ x: number;
4711
+ y: number;
4712
+ }[];
4713
+ }[]>;
4714
+ protected readonly axisLine: _angular_core.Signal<{
4715
+ vx1: number;
4716
+ vy1: number;
4717
+ vx2: number;
4718
+ vy2: number;
4719
+ hx1: number;
4720
+ hy1: number;
4721
+ hx2: number;
4722
+ hy2: number;
4723
+ }>;
4724
+ protected readonly legendItems: _angular_core.Signal<{
4725
+ label: string;
4726
+ color: string;
4727
+ }[]>;
4728
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AreaChartComponent, never>;
4729
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AreaChartComponent, "lc-area-chart", never, { "series": { "alias": "series"; "required": true; "isSignal": true; }; "labels": { "alias": "labels"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "strokeWidth": { "alias": "strokeWidth"; "required": false; "isSignal": true; }; "showDots": { "alias": "showDots"; "required": false; "isSignal": true; }; "showGrid": { "alias": "showGrid"; "required": false; "isSignal": true; }; "showXLabels": { "alias": "showXLabels"; "required": false; "isSignal": true; }; "showYLabels": { "alias": "showYLabels"; "required": false; "isSignal": true; }; "showLegend": { "alias": "showLegend"; "required": false; "isSignal": true; }; "smooth": { "alias": "smooth"; "required": false; "isSignal": true; }; "fillOpacity": { "alias": "fillOpacity"; "required": false; "isSignal": true; }; "stacked": { "alias": "stacked"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
4730
+ }
4731
+
4732
+ interface HeatmapCell {
4733
+ row: number;
4734
+ col: number;
4735
+ value: number;
4736
+ }
4737
+ declare class HeatmapComponent {
4738
+ /** 2D data: array of rows, each row an array of values. */
4739
+ data: _angular_core.InputSignal<number[][]>;
4740
+ /** Row labels (Y axis). */
4741
+ rowLabels: _angular_core.InputSignal<string[]>;
4742
+ /** Column labels (X axis). */
4743
+ colLabels: _angular_core.InputSignal<string[]>;
4744
+ /** Cell size in pixels. */
4745
+ cellSize: _angular_core.InputSignal<number>;
4746
+ /** Gap between cells in pixels. */
4747
+ cellGap: _angular_core.InputSignal<number>;
4748
+ /** Low-value color. */
4749
+ colorMin: _angular_core.InputSignal<string>;
4750
+ /** High-value color. */
4751
+ colorMax: _angular_core.InputSignal<string>;
4752
+ /** Show values inside cells. */
4753
+ showValues: _angular_core.InputSignal<boolean>;
4754
+ /** Corner radius of cells. */
4755
+ cellRadius: _angular_core.InputSignal<number>;
4756
+ private readonly LABEL_W;
4757
+ private readonly LABEL_H;
4758
+ protected readonly minVal: _angular_core.Signal<number>;
4759
+ protected readonly maxVal: _angular_core.Signal<number>;
4760
+ protected readonly rows: _angular_core.Signal<number>;
4761
+ protected readonly cols: _angular_core.Signal<number>;
4762
+ protected readonly svgWidth: _angular_core.Signal<number>;
4763
+ protected readonly svgHeight: _angular_core.Signal<number>;
4764
+ protected readonly viewBox: _angular_core.Signal<string>;
4765
+ protected readonly offsetX: _angular_core.Signal<0 | 60>;
4766
+ protected readonly offsetY: _angular_core.Signal<0 | 20>;
4767
+ protected readonly cells: _angular_core.Signal<{
4768
+ x: number;
4769
+ y: number;
4770
+ w: number;
4771
+ h: number;
4772
+ value: number;
4773
+ opacity: number;
4774
+ }[]>;
4775
+ protected readonly rowLabelItems: _angular_core.Signal<{
4776
+ x: number;
4777
+ y: number;
4778
+ label: string;
4779
+ }[]>;
4780
+ protected readonly colLabelItems: _angular_core.Signal<{
4781
+ x: number;
4782
+ y: number;
4783
+ label: string;
4784
+ }[]>;
4785
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<HeatmapComponent, never>;
4786
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<HeatmapComponent, "lc-heatmap", never, { "data": { "alias": "data"; "required": true; "isSignal": true; }; "rowLabels": { "alias": "rowLabels"; "required": false; "isSignal": true; }; "colLabels": { "alias": "colLabels"; "required": false; "isSignal": true; }; "cellSize": { "alias": "cellSize"; "required": false; "isSignal": true; }; "cellGap": { "alias": "cellGap"; "required": false; "isSignal": true; }; "colorMin": { "alias": "colorMin"; "required": false; "isSignal": true; }; "colorMax": { "alias": "colorMax"; "required": false; "isSignal": true; }; "showValues": { "alias": "showValues"; "required": false; "isSignal": true; }; "cellRadius": { "alias": "cellRadius"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
4787
+ }
4788
+
4789
+ interface PieSegment {
4790
+ value: number;
4791
+ label?: string;
4792
+ color?: string;
4793
+ }
4794
+ type PieChartSize = 'sm' | 'md' | 'lg';
4795
+ declare class PieChartComponent {
4796
+ segments: _angular_core.InputSignal<PieSegment[]>;
4797
+ size: _angular_core.InputSignal<PieChartSize>;
4798
+ showLegend: _angular_core.InputSignal<boolean>;
4799
+ private readonly SIZE_MAP;
4800
+ protected readonly svgSize: _angular_core.Signal<number>;
4801
+ protected readonly viewBox: _angular_core.Signal<string>;
4802
+ protected readonly center: _angular_core.Signal<number>;
4803
+ protected readonly radius: _angular_core.Signal<number>;
4804
+ protected readonly arcs: _angular_core.Signal<{
4805
+ d: string;
4806
+ color: string;
4807
+ label: string;
4808
+ percentage: number;
4809
+ }[]>;
4810
+ protected readonly legendItems: _angular_core.Signal<{
4811
+ color: string;
4812
+ label: string;
4813
+ percentage: number;
4814
+ }[]>;
4815
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<PieChartComponent, never>;
4816
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<PieChartComponent, "lc-pie-chart", never, { "segments": { "alias": "segments"; "required": true; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "showLegend": { "alias": "showLegend"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
4817
+ }
4818
+
4819
+ interface RadarChartSeries {
4820
+ label: string;
4821
+ data: number[];
4822
+ color?: string;
4823
+ }
4824
+ declare class RadarChartComponent {
4825
+ series: _angular_core.InputSignal<RadarChartSeries[]>;
4826
+ /** Axis labels. */
4827
+ axes: _angular_core.InputSignal<string[]>;
4828
+ /** Max value for each axis. */
4829
+ max: _angular_core.InputSignal<number>;
4830
+ /** SVG size in pixels. */
4831
+ size: _angular_core.InputSignal<number>;
4832
+ /** Number of concentric grid rings. */
4833
+ rings: _angular_core.InputSignal<number>;
4834
+ /** Show axis labels. */
4835
+ showLabels: _angular_core.InputSignal<boolean>;
4836
+ /** Fill opacity for series polygons. */
4837
+ fillOpacity: _angular_core.InputSignal<number>;
4838
+ /** Show legend. */
4839
+ showLegend: _angular_core.InputSignal<boolean>;
4840
+ protected readonly viewBox: _angular_core.Signal<string>;
4841
+ protected readonly center: _angular_core.Signal<number>;
4842
+ protected readonly radius: _angular_core.Signal<number>;
4843
+ protected readonly axisCount: _angular_core.Signal<number>;
4844
+ protected readonly gridRings: _angular_core.Signal<string[]>;
4845
+ protected readonly axisLines: _angular_core.Signal<{
4846
+ x2: number;
4847
+ y2: number;
4848
+ }[]>;
4849
+ protected readonly labelItems: _angular_core.Signal<{
4850
+ x: number;
4851
+ y: number;
4852
+ label: string;
4853
+ anchor: string;
4854
+ }[]>;
4855
+ protected readonly seriesPolygons: _angular_core.Signal<{
4856
+ points: string;
4857
+ colorIndex: number;
4858
+ customColor: string | null;
4859
+ label: string;
4860
+ }[]>;
4861
+ protected readonly legendItems: _angular_core.Signal<{
4862
+ label: string;
4863
+ colorIndex: number;
4864
+ customColor: string | null;
4865
+ }[]>;
4866
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<RadarChartComponent, never>;
4867
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<RadarChartComponent, "lc-radar-chart", never, { "series": { "alias": "series"; "required": true; "isSignal": true; }; "axes": { "alias": "axes"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "rings": { "alias": "rings"; "required": false; "isSignal": true; }; "showLabels": { "alias": "showLabels"; "required": false; "isSignal": true; }; "fillOpacity": { "alias": "fillOpacity"; "required": false; "isSignal": true; }; "showLegend": { "alias": "showLegend"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
4868
+ }
4869
+
4870
+ type ProgressRingColor = 'primary' | 'secondary' | 'success' | 'warning' | 'error' | 'info';
4871
+ type ProgressRingSize = 'xs' | 'sm' | 'md' | 'lg';
4872
+ declare class ProgressRingComponent {
4873
+ /** Value between 0 and 100. */
4874
+ value: _angular_core.InputSignal<number>;
4875
+ /** Color theme. */
4876
+ color: _angular_core.InputSignal<ProgressRingColor>;
4877
+ /** Size preset. */
4878
+ size: _angular_core.InputSignal<ProgressRingSize>;
4879
+ /** Show percentage text in center. */
4880
+ showValue: _angular_core.InputSignal<boolean>;
4881
+ private readonly SIZE_MAP;
4882
+ private readonly STROKE_MAP;
4883
+ protected readonly svgSize: _angular_core.Signal<number>;
4884
+ protected readonly strokeW: _angular_core.Signal<number>;
4885
+ protected readonly viewBox: _angular_core.Signal<string>;
4886
+ protected readonly center: _angular_core.Signal<number>;
4887
+ protected readonly radius: _angular_core.Signal<number>;
4888
+ protected readonly circumference: _angular_core.Signal<number>;
4889
+ protected readonly dashOffset: _angular_core.Signal<number>;
4890
+ protected readonly fontSize: _angular_core.Signal<string>;
4891
+ protected readonly displayValue: _angular_core.Signal<string>;
4892
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ProgressRingComponent, never>;
4893
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ProgressRingComponent, "lc-progress-ring", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "showValue": { "alias": "showValue"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
4894
+ }
4895
+
4896
+ interface WaterfallItem {
4897
+ label: string;
4898
+ value: number;
4899
+ /** 'total' renders from 0 to value instead of incremental. */
4900
+ type?: 'increase' | 'decrease' | 'total';
4901
+ }
4902
+ declare class WaterfallChartComponent {
4903
+ data: _angular_core.InputSignal<WaterfallItem[]>;
4904
+ width: _angular_core.InputSignal<number>;
4905
+ height: _angular_core.InputSignal<number>;
4906
+ showValues: _angular_core.InputSignal<boolean>;
4907
+ showGrid: _angular_core.InputSignal<boolean>;
4908
+ showConnectors: _angular_core.InputSignal<boolean>;
4909
+ increaseColor: _angular_core.InputSignal<string>;
4910
+ decreaseColor: _angular_core.InputSignal<string>;
4911
+ totalColor: _angular_core.InputSignal<string>;
4912
+ barGap: _angular_core.InputSignal<number>;
4913
+ private readonly PL;
4914
+ private readonly PR;
4915
+ private readonly PT;
4916
+ private readonly PB;
4917
+ protected readonly viewBox: _angular_core.Signal<string>;
4918
+ protected readonly computedBars: _angular_core.Signal<{
4919
+ bars: {
4920
+ x: number;
4921
+ y: number;
4922
+ width: number;
4923
+ height: number;
4924
+ color: string;
4925
+ label: string;
4926
+ value: number;
4927
+ labelX: number;
4928
+ labelY: number;
4929
+ valueY: number;
4930
+ endVal: number;
4931
+ }[];
4932
+ connectors: {
4933
+ x1: number;
4934
+ x2: number;
4935
+ y: number;
4936
+ }[];
4937
+ gridLines: {
4938
+ y: number;
4939
+ label: string;
4940
+ }[];
4941
+ }>;
4942
+ protected readonly axisLine: _angular_core.Signal<{
4943
+ vx1: number;
4944
+ vy1: number;
4945
+ vx2: number;
4946
+ vy2: number;
4947
+ hx1: number;
4948
+ hy1: number;
4949
+ hx2: number;
4950
+ hy2: number;
4951
+ }>;
4952
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<WaterfallChartComponent, never>;
4953
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<WaterfallChartComponent, "lc-waterfall-chart", never, { "data": { "alias": "data"; "required": true; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "showValues": { "alias": "showValues"; "required": false; "isSignal": true; }; "showGrid": { "alias": "showGrid"; "required": false; "isSignal": true; }; "showConnectors": { "alias": "showConnectors"; "required": false; "isSignal": true; }; "increaseColor": { "alias": "increaseColor"; "required": false; "isSignal": true; }; "decreaseColor": { "alias": "decreaseColor"; "required": false; "isSignal": true; }; "totalColor": { "alias": "totalColor"; "required": false; "isSignal": true; }; "barGap": { "alias": "barGap"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
4954
+ }
4955
+
4956
+ type CalendarView = 'day' | 'week' | 'month';
4957
+ interface CalendarEvent {
4958
+ id: string;
4959
+ title: string;
4960
+ start: Date | string;
4961
+ end: Date | string;
4962
+ color?: 'primary' | 'secondary' | 'success' | 'warning' | 'error' | 'info';
4963
+ allDay?: boolean;
4964
+ }
4965
+ interface DayCell {
4966
+ date: Date;
4967
+ isToday: boolean;
4968
+ isCurrentMonth: boolean;
4969
+ events: CalendarEvent[];
4970
+ }
4971
+ interface HourSlot {
4972
+ hour: number;
4973
+ label: string;
4974
+ }
4975
+ declare class CalendarComponent {
4976
+ /** Current view mode. */
4977
+ view: _angular_core.InputSignal<CalendarView>;
4978
+ /** Events to display. */
4979
+ events: _angular_core.InputSignal<CalendarEvent[]>;
4980
+ /** First day of week (0=Sunday, 1=Monday). */
4981
+ firstDayOfWeek: _angular_core.InputSignal<number>;
4982
+ /** Locale for date formatting. */
4983
+ locale: _angular_core.InputSignal<string>;
4984
+ /** Start hour for day/week view. */
4985
+ startHour: _angular_core.InputSignal<number>;
4986
+ /** End hour for day/week view. */
4987
+ endHour: _angular_core.InputSignal<number>;
4988
+ /** Emits when an event is clicked. */
4989
+ eventClick: _angular_core.OutputEmitterRef<CalendarEvent>;
4990
+ /** Emits when a date cell is clicked. */
4991
+ dateClick: _angular_core.OutputEmitterRef<Date>;
4992
+ /** Emits when the view changes. */
4993
+ viewChange: _angular_core.OutputEmitterRef<CalendarView>;
4994
+ protected readonly currentDate: _angular_core.WritableSignal<Date>;
4995
+ protected readonly headerTitle: _angular_core.Signal<string>;
4996
+ protected readonly weekDayNames: _angular_core.Signal<string[]>;
4997
+ protected readonly monthGrid: _angular_core.Signal<DayCell[][]>;
4998
+ protected readonly hourSlots: _angular_core.Signal<HourSlot[]>;
4999
+ protected readonly weekDays: _angular_core.Signal<{
5000
+ date: Date;
5001
+ label: string;
5002
+ isToday: boolean;
5003
+ events: {
5004
+ start: Date;
5005
+ end: Date;
5006
+ id: string;
5007
+ title: string;
5008
+ color?: "primary" | "secondary" | "success" | "warning" | "error" | "info";
5009
+ allDay?: boolean;
5010
+ }[];
5011
+ }[]>;
5012
+ protected readonly dayEvents: _angular_core.Signal<{
5013
+ start: Date;
5014
+ end: Date;
5015
+ id: string;
5016
+ title: string;
5017
+ color?: "primary" | "secondary" | "success" | "warning" | "error" | "info";
5018
+ allDay?: boolean;
5019
+ }[]>;
5020
+ private readonly normalizedEvents;
5021
+ protected navigatePrev(): void;
5022
+ protected navigateNext(): void;
5023
+ protected navigateToday(): void;
5024
+ protected setView(v: CalendarView): void;
5025
+ protected onEventClick(event: CalendarEvent, e: MouseEvent): void;
5026
+ protected onDateClick(date: Date): void;
5027
+ protected eventTop(event: CalendarEvent): number;
5028
+ protected eventHeight(event: CalendarEvent): number;
5029
+ private navigate;
5030
+ private weekStart;
5031
+ private isSameDay;
5032
+ private isEventOnDate;
5033
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<CalendarComponent, never>;
5034
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<CalendarComponent, "lc-calendar", never, { "view": { "alias": "view"; "required": false; "isSignal": true; }; "events": { "alias": "events"; "required": false; "isSignal": true; }; "firstDayOfWeek": { "alias": "firstDayOfWeek"; "required": false; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; "startHour": { "alias": "startHour"; "required": false; "isSignal": true; }; "endHour": { "alias": "endHour"; "required": false; "isSignal": true; }; }, { "eventClick": "eventClick"; "dateClick": "dateClick"; "viewChange": "viewChange"; }, never, never, true, never>;
5035
+ }
5036
+
5037
+ interface GanttDependency {
5038
+ from: string;
5039
+ to: string;
5040
+ }
5041
+ interface GanttTask {
5042
+ id: string;
5043
+ title: string;
5044
+ start: Date | string;
5045
+ end: Date | string;
5046
+ progress?: number;
5047
+ color?: 'primary' | 'secondary' | 'success' | 'warning' | 'error' | 'info';
5048
+ group?: string;
5049
+ }
5050
+ interface NormalizedTask {
5051
+ id: string;
5052
+ title: string;
5053
+ start: Date;
5054
+ end: Date;
5055
+ progress: number;
5056
+ color: string;
5057
+ group: string;
5058
+ }
5059
+ interface BarLayout {
5060
+ task: NormalizedTask;
5061
+ left: number;
5062
+ width: number;
5063
+ top: number;
5064
+ progress: number;
5065
+ colorClass: string;
5066
+ }
5067
+ interface DepLine {
5068
+ x1: number;
5069
+ y1: number;
5070
+ x2: number;
5071
+ y2: number;
5072
+ }
5073
+ declare class GanttChartComponent {
5074
+ /** Tasks to display. */
5075
+ tasks: _angular_core.InputSignal<GanttTask[]>;
5076
+ /** Dependency links between tasks. */
5077
+ dependencies: _angular_core.InputSignal<GanttDependency[]>;
5078
+ /** Row height in px. */
5079
+ rowHeight: _angular_core.InputSignal<number>;
5080
+ /** Width of the label column in px. */
5081
+ labelWidth: _angular_core.InputSignal<number>;
5082
+ /** Column width per day in px. */
5083
+ dayWidth: _angular_core.InputSignal<number>;
5084
+ /** Show today marker. */
5085
+ showToday: _angular_core.InputSignal<boolean>;
5086
+ /** Emits when a task bar is clicked. */
5087
+ taskClick: _angular_core.OutputEmitterRef<GanttTask>;
5088
+ private readonly normalizedTasks;
5089
+ protected readonly timelineStart: _angular_core.Signal<Date>;
5090
+ protected readonly timelineEnd: _angular_core.Signal<Date>;
5091
+ protected readonly totalDays: _angular_core.Signal<number>;
5092
+ protected readonly timelineWidth: _angular_core.Signal<number>;
5093
+ protected readonly dayColumns: _angular_core.Signal<{
5094
+ date: Date;
5095
+ left: number;
5096
+ label: number;
5097
+ isWeekend: boolean;
5098
+ monthLabel: string | null;
5099
+ }[]>;
5100
+ protected readonly monthHeaders: _angular_core.Signal<{
5101
+ label: string;
5102
+ left: number;
5103
+ width: number;
5104
+ }[]>;
5105
+ protected readonly bars: _angular_core.Signal<BarLayout[]>;
5106
+ protected readonly depLines: _angular_core.Signal<DepLine[]>;
5107
+ protected readonly todayLeft: _angular_core.Signal<number>;
5108
+ protected readonly gridHeight: _angular_core.Signal<number>;
5109
+ protected onTaskClick(task: NormalizedTask): void;
5110
+ private startOfDay;
5111
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<GanttChartComponent, never>;
5112
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<GanttChartComponent, "lc-gantt-chart", never, { "tasks": { "alias": "tasks"; "required": true; "isSignal": true; }; "dependencies": { "alias": "dependencies"; "required": false; "isSignal": true; }; "rowHeight": { "alias": "rowHeight"; "required": false; "isSignal": true; }; "labelWidth": { "alias": "labelWidth"; "required": false; "isSignal": true; }; "dayWidth": { "alias": "dayWidth"; "required": false; "isSignal": true; }; "showToday": { "alias": "showToday"; "required": false; "isSignal": true; }; }, { "taskClick": "taskClick"; }, never, never, true, never>;
5113
+ }
5114
+
5115
+ type ChatMessageRole = 'user' | 'agent' | 'system';
5116
+ interface ChatMessage {
5117
+ id: string;
5118
+ role: ChatMessageRole;
5119
+ content: string;
5120
+ timestamp?: Date | string;
5121
+ avatar?: string;
5122
+ name?: string;
5123
+ streaming?: boolean;
5124
+ }
5125
+ interface ChatSendEvent {
5126
+ content: string;
5127
+ }
5128
+ declare class ChatComponent implements AfterViewChecked {
5129
+ /** Messages to display. */
5130
+ messages: _angular_core.InputSignal<ChatMessage[]>;
5131
+ /** Placeholder text for the input. */
5132
+ placeholder: _angular_core.InputSignal<string>;
5133
+ /** Title displayed in the header. */
5134
+ title: _angular_core.InputSignal<string>;
5135
+ /** Whether the agent is currently streaming / typing. */
5136
+ isStreaming: _angular_core.InputSignal<boolean>;
5137
+ /** Show the header bar. */
5138
+ showHeader: _angular_core.InputSignal<boolean>;
5139
+ /** Disable the input. */
5140
+ disabled: _angular_core.InputSignal<boolean>;
5141
+ /** Show avatars next to messages. */
5142
+ showAvatars: _angular_core.InputSignal<boolean>;
5143
+ /** Show timestamps. */
5144
+ showTimestamps: _angular_core.InputSignal<boolean>;
5145
+ /** Emits when user sends a message. */
5146
+ messageSend: _angular_core.OutputEmitterRef<ChatSendEvent>;
5147
+ protected readonly inputValue: _angular_core.WritableSignal<string>;
5148
+ private shouldScroll;
5149
+ private scrollContainer;
5150
+ protected readonly formattedMessages: _angular_core.Signal<{
5151
+ timestamp: Date | undefined;
5152
+ id: string;
5153
+ role: ChatMessageRole;
5154
+ content: string;
5155
+ avatar?: string;
5156
+ name?: string;
5157
+ streaming?: boolean;
5158
+ }[]>;
5159
+ ngAfterViewChecked(): void;
5160
+ protected onInput(event: Event): void;
5161
+ protected onKeydown(event: KeyboardEvent): void;
5162
+ protected send(): void;
5163
+ protected formatTime(date: Date | undefined): string;
5164
+ protected trackById(_: number, msg: ChatMessage): string;
5165
+ private scrollToBottom;
5166
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ChatComponent, never>;
5167
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ChatComponent, "lc-chat", never, { "messages": { "alias": "messages"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "isStreaming": { "alias": "isStreaming"; "required": false; "isSignal": true; }; "showHeader": { "alias": "showHeader"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "showAvatars": { "alias": "showAvatars"; "required": false; "isSignal": true; }; "showTimestamps": { "alias": "showTimestamps"; "required": false; "isSignal": true; }; }, { "messageSend": "messageSend"; }, never, never, true, never>;
5168
+ }
5169
+
5170
+ type DocumentType = 'pdf' | 'markdown' | 'image' | 'text' | 'code' | 'auto';
5171
+ /**
5172
+ * Document viewer component for previewing various file types.
5173
+ *
5174
+ * Features:
5175
+ * - Auto-detects file type from URL extension or explicit type input
5176
+ * - PDF rendering via browser-native iframe viewer
5177
+ * - Markdown parsing and rendering with full formatting support
5178
+ * - Image display with zoom controls (25% – 500%)
5179
+ * - Code display using the built-in code block component
5180
+ * - Plain text display
5181
+ * - Toolbar with filename, type badge, zoom, download, and fullscreen
5182
+ * - Loading and error states
5183
+ * - Dark/light theme support
5184
+ *
5185
+ * @example
5186
+ * ```html
5187
+ * <lc-document-viewer src="https://example.com/report.pdf" />
5188
+ * <lc-document-viewer [content]="markdownString" type="markdown" filename="README.md" />
5189
+ * <lc-document-viewer src="/assets/diagram.png" />
5190
+ * ```
5191
+ */
5192
+ declare class DocumentViewerComponent implements OnInit, OnDestroy {
5193
+ /** URL of the document to display (for PDF, images, or remote files) */
5194
+ readonly src: _angular_core.InputSignal<string>;
5195
+ /** Direct content string (for markdown, text, or code — takes precedence over src for content-based types) */
5196
+ readonly content: _angular_core.InputSignal<string>;
5197
+ /** File type — set to 'auto' to detect from URL extension */
5198
+ readonly type: _angular_core.InputSignal<DocumentType>;
5199
+ /** Display name shown in the toolbar */
5200
+ readonly filename: _angular_core.InputSignal<string>;
5201
+ /** Code language for syntax highlighting (when type is 'code') */
5202
+ readonly language: _angular_core.InputSignal<CodeBlockLanguage>;
5203
+ /** Whether to display the toolbar */
5204
+ readonly showToolbar: _angular_core.InputSignal<boolean>;
5205
+ /** Whether to show the download button in the toolbar */
5206
+ readonly showDownload: _angular_core.InputSignal<boolean>;
5207
+ /** Height of the viewer container */
5208
+ readonly height: _angular_core.InputSignal<string>;
5209
+ protected loading: _angular_core.WritableSignal<boolean>;
5210
+ protected error: _angular_core.WritableSignal<string | null>;
5211
+ protected fetchedContent: _angular_core.WritableSignal<string>;
5212
+ protected zoom: _angular_core.WritableSignal<number>;
5213
+ protected isFullscreen: _angular_core.WritableSignal<boolean>;
5214
+ private readonly sanitizer;
5215
+ private readonly elementRef;
5216
+ private fullscreenHandler;
5217
+ /** Resolved document type from input or URL extension */
5218
+ protected resolvedType: _angular_core.Signal<DocumentType | "unknown">;
5219
+ /** Display name for the toolbar */
5220
+ protected displayName: _angular_core.Signal<string>;
5221
+ /** Icon name for the document type */
5222
+ protected typeIcon: _angular_core.Signal<string>;
5223
+ /** Type label for the toolbar badge */
5224
+ protected typeLabel: _angular_core.Signal<string>;
5225
+ /** Resolved code language */
5226
+ protected resolvedLanguage: _angular_core.Signal<CodeBlockLanguage>;
5227
+ /** Sanitized src URL for iframe/img embedding */
5228
+ protected safeSrc: _angular_core.Signal<SafeResourceUrl>;
5229
+ /** Effective content: direct content input or fetched content */
5230
+ protected effectiveContent: _angular_core.Signal<string>;
5231
+ /** Rendered markdown HTML */
5232
+ protected renderedMarkdown: _angular_core.Signal<SafeHtml>;
5233
+ /** Image transform style for zoom */
5234
+ protected imageTransform: _angular_core.Signal<string>;
5235
+ /** Whether zoom controls should be shown */
5236
+ protected showZoom: _angular_core.Signal<boolean>;
5237
+ ngOnInit(): void;
5238
+ ngOnDestroy(): void;
5239
+ protected zoomIn(): void;
5240
+ protected zoomOut(): void;
5241
+ protected resetZoom(): void;
5242
+ protected download(): void;
5243
+ protected toggleFullscreen(): void;
5244
+ protected onIframeLoad(): void;
5245
+ protected onImageLoad(): void;
5246
+ protected onImageError(): void;
5247
+ private extractExtension;
5248
+ private fetchContent;
5249
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DocumentViewerComponent, never>;
5250
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DocumentViewerComponent, "lc-document-viewer", never, { "src": { "alias": "src"; "required": false; "isSignal": true; }; "content": { "alias": "content"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "filename": { "alias": "filename"; "required": false; "isSignal": true; }; "language": { "alias": "language"; "required": false; "isSignal": true; }; "showToolbar": { "alias": "showToolbar"; "required": false; "isSignal": true; }; "showDownload": { "alias": "showDownload"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
5251
+ }
5252
+
5253
+ type GalleryLayout = 'grid' | 'masonry';
5254
+ type GallerySize = 'sm' | 'md' | 'lg';
5255
+ interface GalleryItem {
5256
+ /** Image source URL */
5257
+ src: string;
5258
+ /** Thumbnail URL (falls back to src if not provided) */
5259
+ thumbnail?: string;
5260
+ /** Alt text for accessibility */
5261
+ alt?: string;
5262
+ /** Optional caption displayed below the image */
5263
+ caption?: string;
5264
+ /** Optional category for filtering */
5265
+ category?: string;
5266
+ }
5267
+ /**
5268
+ * Gallery component for displaying image collections with lightbox.
5269
+ *
5270
+ * Features:
5271
+ * - Grid and masonry layout modes
5272
+ * - Responsive column count via size presets (sm, md, lg thumbnails)
5273
+ * - Configurable custom column count
5274
+ * - Lightbox overlay with navigation (prev/next)
5275
+ * - Keyboard navigation (Arrow keys, Escape)
5276
+ * - Optional captions and category filtering
5277
+ * - Lazy loading with placeholder shimmer
5278
+ * - Zoom control in lightbox
5279
+ * - Download button in lightbox
5280
+ * - Dark/light theme support
5281
+ *
5282
+ * @example
5283
+ * ```html
5284
+ * <lc-gallery
5285
+ * [items]="images"
5286
+ * layout="grid"
5287
+ * size="md"
5288
+ * [showCaptions]="true" />
5289
+ * ```
5290
+ */
5291
+ declare class GalleryComponent implements OnDestroy {
5292
+ /** Array of gallery items to display */
5293
+ readonly items: _angular_core.InputSignal<GalleryItem[]>;
5294
+ /** Layout mode */
5295
+ readonly layout: _angular_core.InputSignal<GalleryLayout>;
5296
+ /** Thumbnail size preset — controls column count (sm=4col, md=3col, lg=2col) */
5297
+ readonly size: _angular_core.InputSignal<GallerySize>;
5298
+ /** Custom column count (overrides size preset) */
5299
+ readonly columns: _angular_core.InputSignal<number | null>;
5300
+ /** Whether to show captions below thumbnails */
5301
+ readonly showCaptions: _angular_core.InputSignal<boolean>;
5302
+ /** Whether clicking a thumbnail opens the lightbox */
5303
+ readonly enableLightbox: _angular_core.InputSignal<boolean>;
5304
+ /** Gap between items in pixels */
5305
+ readonly gap: _angular_core.InputSignal<number>;
5306
+ /** Aspect ratio for grid items (ignored in masonry mode) */
5307
+ readonly aspectRatio: _angular_core.InputSignal<string>;
5308
+ /** Emitted when lightbox opens with item index */
5309
+ readonly lightboxOpen: _angular_core.OutputEmitterRef<number>;
5310
+ /** Emitted when lightbox closes */
5311
+ readonly lightboxClose: _angular_core.OutputEmitterRef<void>;
5312
+ protected lightboxIndex: _angular_core.WritableSignal<number | null>;
5313
+ protected lightboxZoom: _angular_core.WritableSignal<number>;
5314
+ protected loadedImages: _angular_core.WritableSignal<Set<number>>;
5315
+ protected activeFilter: _angular_core.WritableSignal<string | null>;
5316
+ protected gridColumns: _angular_core.Signal<number>;
5317
+ protected gridStyle: _angular_core.Signal<{
5318
+ 'column-count': string;
5319
+ 'column-gap': string;
5320
+ display?: undefined;
5321
+ 'grid-template-columns'?: undefined;
5322
+ gap?: undefined;
5323
+ } | {
5324
+ display: string;
5325
+ 'grid-template-columns': string;
5326
+ gap: string;
5327
+ 'column-count'?: undefined;
5328
+ 'column-gap'?: undefined;
5329
+ }>;
5330
+ protected itemStyle: _angular_core.Signal<{
5331
+ 'aspect-ratio'?: undefined;
5332
+ } | {
5333
+ 'aspect-ratio': string;
5334
+ }>;
5335
+ protected categories: _angular_core.Signal<string[]>;
5336
+ protected filteredItems: _angular_core.Signal<GalleryItem[]>;
5337
+ protected showFilters: _angular_core.Signal<boolean>;
5338
+ protected lightboxItem: _angular_core.Signal<GalleryItem | null>;
5339
+ protected lightboxCounter: _angular_core.Signal<string>;
5340
+ protected lightboxTransform: _angular_core.Signal<string>;
5341
+ protected canGoPrev: _angular_core.Signal<boolean>;
5342
+ protected canGoNext: _angular_core.Signal<boolean>;
5343
+ ngOnDestroy(): void;
5344
+ protected openLightbox(index: number): void;
5345
+ protected closeLightbox(): void;
5346
+ protected goToPrev(): void;
5347
+ protected goToNext(): void;
5348
+ protected zoomIn(): void;
5349
+ protected zoomOut(): void;
5350
+ protected resetZoom(): void;
5351
+ protected downloadCurrent(): void;
5352
+ protected setFilter(category: string | null): void;
5353
+ protected onImageLoad(index: number): void;
5354
+ protected isLoaded(index: number): boolean;
5355
+ protected getThumbnail(item: GalleryItem): string;
5356
+ protected trackByIndex(index: number): number;
5357
+ protected onKeydown(event: KeyboardEvent): void;
5358
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<GalleryComponent, never>;
5359
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<GalleryComponent, "lc-gallery", never, { "items": { "alias": "items"; "required": true; "isSignal": true; }; "layout": { "alias": "layout"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "columns": { "alias": "columns"; "required": false; "isSignal": true; }; "showCaptions": { "alias": "showCaptions"; "required": false; "isSignal": true; }; "enableLightbox": { "alias": "enableLightbox"; "required": false; "isSignal": true; }; "gap": { "alias": "gap"; "required": false; "isSignal": true; }; "aspectRatio": { "alias": "aspectRatio"; "required": false; "isSignal": true; }; }, { "lightboxOpen": "lightboxOpen"; "lightboxClose": "lightboxClose"; }, never, never, true, never>;
5360
+ }
5361
+
5362
+ type DependencyNodeStatus = 'default' | 'active' | 'success' | 'warning' | 'error' | 'muted';
5363
+ type DependencyDirection = 'horizontal' | 'vertical';
5364
+ type DependencyRelation = 'depends' | 'blocks' | 'references' | 'requires' | 'extends' | 'implements' | 'uses';
5365
+ interface DependencyEdgeDef {
5366
+ /** Target node id */
5367
+ id: string;
5368
+ /** Relationship type */
5369
+ relation?: DependencyRelation;
5370
+ }
5371
+ interface DependencyNode {
5372
+ /** Unique identifier */
5373
+ id: string;
5374
+ /** Display label */
5375
+ label: string;
5376
+ /** Optional description */
5377
+ description?: string;
5378
+ /** Optional icon name */
5379
+ icon?: string;
5380
+ /** Visual status / color */
5381
+ status?: DependencyNodeStatus;
5382
+ /** Child nodes: items this node is required for (right / bottom side) */
5383
+ children?: DependencyNode[];
5384
+ /** Dependencies: items this node depends on (shown as cross-reference edges) */
5385
+ dependsOn?: DependencyEdgeDef[];
5386
+ }
5387
+ interface LayoutNode {
5388
+ id: string;
5389
+ label: string;
5390
+ description?: string;
5391
+ icon?: string;
5392
+ status: DependencyNodeStatus;
5393
+ x: number;
5394
+ y: number;
5395
+ width: number;
5396
+ height: number;
5397
+ depth: number;
5398
+ parentId: string | null;
5399
+ incomingCount: number;
5400
+ outgoingCount: number;
5401
+ }
5402
+ interface LayoutEdge {
5403
+ id: string;
5404
+ path: string;
5405
+ sourceId: string;
5406
+ targetId: string;
5407
+ relation?: DependencyRelation;
5408
+ labelX: number;
5409
+ labelY: number;
5410
+ color: string;
5411
+ dashed: boolean;
5412
+ isCrossRef: boolean;
5413
+ }
5414
+ /**
5415
+ * Dependency viewer component for visualizing hierarchical and cross-cutting relationships.
5416
+ *
5417
+ * Features:
5418
+ * - Horizontal (left-to-right) and vertical (top-to-bottom) layout directions
5419
+ * - Bidirectional dependencies: children (right/down) and dependsOn (cross-references)
5420
+ * - Relationship types: depends, blocks, references, requires, extends, implements, uses
5421
+ * - Edge labels showing relationship type
5422
+ * - Dashed vs solid edges per relationship category
5423
+ * - Color-coded edges per relationship type
5424
+ * - Node status colors (default, active, success, warning, error, muted)
5425
+ * - Pan and zoom controls with mouse wheel support
5426
+ * - Collapsible sub-trees
5427
+ * - Interactive node selection with detail panel
5428
+ * - Legend showing active relationship types
5429
+ * - SVG arrowhead markers on cross-reference edges
5430
+ * - Dark/light theme support
5431
+ *
5432
+ * @example
5433
+ * ```html
5434
+ * <lc-dependency-viewer [root]="specTree" direction="horizontal" />
5435
+ * ```
5436
+ */
5437
+ declare class DependencyViewerComponent {
5438
+ readonly root: _angular_core.InputSignal<DependencyNode>;
5439
+ readonly direction: _angular_core.InputSignal<DependencyDirection>;
5440
+ readonly height: _angular_core.InputSignal<string>;
5441
+ readonly showToolbar: _angular_core.InputSignal<boolean>;
5442
+ readonly showEdgeLabels: _angular_core.InputSignal<boolean>;
5443
+ readonly edgeWidth: _angular_core.InputSignal<number>;
5444
+ protected zoom: _angular_core.WritableSignal<number>;
5445
+ protected panX: _angular_core.WritableSignal<number>;
5446
+ protected panY: _angular_core.WritableSignal<number>;
5447
+ protected selectedNodeId: _angular_core.WritableSignal<string | null>;
5448
+ protected collapsedIds: _angular_core.WritableSignal<Set<string>>;
5449
+ private isPanning;
5450
+ private lastMouseX;
5451
+ private lastMouseY;
5452
+ protected effectiveRoot: _angular_core.Signal<DependencyNode>;
5453
+ private allOriginalNodes;
5454
+ protected layout: _angular_core.Signal<{
5455
+ nodes: LayoutNode[];
5456
+ edges: LayoutEdge[];
5457
+ width: number;
5458
+ height: number;
5459
+ }>;
5460
+ protected svgWidth: _angular_core.Signal<number>;
5461
+ protected svgHeight: _angular_core.Signal<number>;
5462
+ protected viewBox: _angular_core.Signal<string>;
5463
+ protected transform: _angular_core.Signal<string>;
5464
+ protected selectedNode: _angular_core.Signal<LayoutNode | null>;
5465
+ protected selectedDependsOn: _angular_core.Signal<DependencyEdgeDef[]>;
5466
+ protected legendItems: _angular_core.Signal<{
5467
+ relation: DependencyRelation;
5468
+ label: string;
5469
+ color: string;
5470
+ dashed: boolean;
5471
+ }[]>;
5472
+ protected hasChildren(nodeId: string): boolean;
5473
+ protected isCollapsed(nodeId: string): boolean;
5474
+ protected getRelationLabel(relation: DependencyRelation): string;
5475
+ private pruneCollapsed;
5476
+ private findOriginalNode;
5477
+ protected selectNode(id: string, event: Event): void;
5478
+ protected toggleCollapse(id: string, event: Event): void;
5479
+ protected deselectNode(): void;
5480
+ protected zoomIn(): void;
5481
+ protected zoomOut(): void;
5482
+ protected resetZoom(): void;
5483
+ protected onMouseDown(event: MouseEvent): void;
5484
+ protected onMouseMove(event: MouseEvent): void;
5485
+ protected onMouseUp(): void;
5486
+ protected onWheel(event: WheelEvent): void;
5487
+ protected getNodeBg(status: DependencyNodeStatus): string;
5488
+ protected getNodeBorder(status: DependencyNodeStatus): string;
5489
+ protected getNodeText(status: DependencyNodeStatus): string;
5490
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DependencyViewerComponent, never>;
5491
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DependencyViewerComponent, "lc-dependency-viewer", never, { "root": { "alias": "root"; "required": true; "isSignal": true; }; "direction": { "alias": "direction"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "showToolbar": { "alias": "showToolbar"; "required": false; "isSignal": true; }; "showEdgeLabels": { "alias": "showEdgeLabels"; "required": false; "isSignal": true; }; "edgeWidth": { "alias": "edgeWidth"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
5492
+ }
5493
+
5494
+ interface ScatterPoint {
5495
+ x: number;
5496
+ y: number;
5497
+ label?: string;
5498
+ size?: number;
5499
+ }
5500
+ interface ScatterSeries {
5501
+ label: string;
5502
+ data: ScatterPoint[];
5503
+ color?: string;
5504
+ }
5505
+ declare class ScatterPlotComponent {
5506
+ readonly series: _angular_core.InputSignal<ScatterSeries[]>;
5507
+ readonly width: _angular_core.InputSignal<number>;
5508
+ readonly height: _angular_core.InputSignal<number>;
5509
+ readonly showGrid: _angular_core.InputSignal<boolean>;
5510
+ readonly showXLabels: _angular_core.InputSignal<boolean>;
5511
+ readonly showYLabels: _angular_core.InputSignal<boolean>;
5512
+ readonly showLegend: _angular_core.InputSignal<boolean>;
5513
+ readonly showTooltip: _angular_core.InputSignal<boolean>;
5514
+ readonly dotRadius: _angular_core.InputSignal<number>;
5515
+ readonly xAxisLabel: _angular_core.InputSignal<string>;
5516
+ readonly yAxisLabel: _angular_core.InputSignal<string>;
5517
+ readonly pointClick: _angular_core.OutputEmitterRef<{
5518
+ series: string;
5519
+ point: ScatterPoint;
5520
+ }>;
5521
+ protected hoveredPoint: _angular_core.WritableSignal<{
5522
+ x: number;
5523
+ y: number;
5524
+ label: string;
5525
+ sx: number;
5526
+ sy: number;
5527
+ } | null>;
5528
+ private readonly PL;
5529
+ private readonly PR;
5530
+ private readonly PT;
5531
+ private readonly PB;
5532
+ protected readonly viewBox: _angular_core.Signal<string>;
5533
+ private readonly allPoints;
5534
+ private readonly xExtent;
5535
+ private readonly yExtent;
5536
+ protected readonly plotArea: _angular_core.Signal<{
5537
+ x: number;
5538
+ y: number;
5539
+ w: number;
5540
+ h: number;
5541
+ }>;
5542
+ protected readonly gridLinesX: _angular_core.Signal<{
5543
+ x: number;
5544
+ label: number;
5545
+ }[]>;
5546
+ protected readonly gridLinesY: _angular_core.Signal<{
5547
+ y: number;
5548
+ label: number;
5549
+ }[]>;
5550
+ protected readonly renderedSeries: _angular_core.Signal<{
5551
+ label: string;
5552
+ color: string;
5553
+ points: {
5554
+ cx: number;
5555
+ cy: number;
5556
+ r: number;
5557
+ label: string;
5558
+ orig: ScatterPoint;
5559
+ }[];
5560
+ }[]>;
5561
+ protected readonly legendItems: _angular_core.Signal<{
5562
+ label: string;
5563
+ color: string;
5564
+ }[]>;
5565
+ protected readonly axisLine: _angular_core.Signal<{
5566
+ vx1: number;
5567
+ vy1: number;
5568
+ vx2: number;
5569
+ vy2: number;
5570
+ hx1: number;
5571
+ hy1: number;
5572
+ hx2: number;
5573
+ hy2: number;
5574
+ }>;
5575
+ protected onDotEnter(cx: number, cy: number, label: string): void;
5576
+ protected onDotLeave(): void;
5577
+ protected onDotClick(seriesLabel: string, point: ScatterPoint): void;
5578
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ScatterPlotComponent, never>;
5579
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ScatterPlotComponent, "lc-scatter-plot", never, { "series": { "alias": "series"; "required": true; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "showGrid": { "alias": "showGrid"; "required": false; "isSignal": true; }; "showXLabels": { "alias": "showXLabels"; "required": false; "isSignal": true; }; "showYLabels": { "alias": "showYLabels"; "required": false; "isSignal": true; }; "showLegend": { "alias": "showLegend"; "required": false; "isSignal": true; }; "showTooltip": { "alias": "showTooltip"; "required": false; "isSignal": true; }; "dotRadius": { "alias": "dotRadius"; "required": false; "isSignal": true; }; "xAxisLabel": { "alias": "xAxisLabel"; "required": false; "isSignal": true; }; "yAxisLabel": { "alias": "yAxisLabel"; "required": false; "isSignal": true; }; }, { "pointClick": "pointClick"; }, never, never, true, never>;
5580
+ }
5581
+
5582
+ interface FunnelStep {
5583
+ label: string;
5584
+ value: number;
5585
+ color?: string;
5586
+ }
5587
+ declare class FunnelChartComponent {
5588
+ readonly steps: _angular_core.InputSignal<FunnelStep[]>;
5589
+ readonly width: _angular_core.InputSignal<number>;
5590
+ readonly height: _angular_core.InputSignal<number>;
5591
+ readonly showLabels: _angular_core.InputSignal<boolean>;
5592
+ readonly showValues: _angular_core.InputSignal<boolean>;
5593
+ readonly showPercentage: _angular_core.InputSignal<boolean>;
5594
+ readonly orientation: _angular_core.InputSignal<"horizontal" | "vertical">;
5595
+ protected readonly viewBox: _angular_core.Signal<string>;
5596
+ protected readonly renderedSteps: _angular_core.Signal<{
5597
+ path: string;
5598
+ color: string;
5599
+ label: string;
5600
+ value: number;
5601
+ pct: number;
5602
+ labelX: number;
5603
+ labelY: number;
5604
+ }[]>;
5605
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<FunnelChartComponent, never>;
5606
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<FunnelChartComponent, "lc-funnel-chart", never, { "steps": { "alias": "steps"; "required": true; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "showLabels": { "alias": "showLabels"; "required": false; "isSignal": true; }; "showValues": { "alias": "showValues"; "required": false; "isSignal": true; }; "showPercentage": { "alias": "showPercentage"; "required": false; "isSignal": true; }; "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
5607
+ }
5608
+
5609
+ declare class TagInputComponent implements ControlValueAccessor {
5610
+ readonly placeholder: _angular_core.InputSignal<string>;
5611
+ readonly maxTags: _angular_core.InputSignal<number>;
5612
+ readonly allowDuplicates: _angular_core.InputSignal<boolean>;
5613
+ readonly removable: _angular_core.InputSignal<boolean>;
5614
+ readonly disabled: _angular_core.InputSignal<boolean>;
5615
+ readonly separator: _angular_core.InputSignal<"enter" | "comma" | "both">;
5616
+ readonly suggestions: _angular_core.InputSignal<string[]>;
5617
+ readonly label: _angular_core.InputSignal<string>;
5618
+ readonly tagAdded: _angular_core.OutputEmitterRef<string>;
5619
+ readonly tagRemoved: _angular_core.OutputEmitterRef<string>;
5620
+ protected tags: _angular_core.WritableSignal<string[]>;
5621
+ protected inputValue: _angular_core.WritableSignal<string>;
5622
+ protected focused: _angular_core.WritableSignal<boolean>;
5623
+ protected readonly inputEl: _angular_core.Signal<ElementRef<HTMLInputElement> | undefined>;
5624
+ protected readonly filteredSuggestions: _angular_core.Signal<string[]>;
5625
+ protected readonly canAdd: _angular_core.Signal<boolean>;
5626
+ private onChange;
5627
+ private onTouched;
5628
+ writeValue(value: string[] | null): void;
5629
+ registerOnChange(fn: (val: string[]) => void): void;
5630
+ registerOnTouched(fn: () => void): void;
5631
+ protected addTag(value: string): void;
5632
+ protected removeTag(index: number): void;
5633
+ protected onKeydown(event: KeyboardEvent): void;
5634
+ protected onInput(event: Event): void;
5635
+ protected onFocus(): void;
5636
+ protected onBlur(): void;
5637
+ protected selectSuggestion(value: string): void;
5638
+ protected focusInput(): void;
5639
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<TagInputComponent, never>;
5640
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TagInputComponent, "lc-tag-input", never, { "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "maxTags": { "alias": "maxTags"; "required": false; "isSignal": true; }; "allowDuplicates": { "alias": "allowDuplicates"; "required": false; "isSignal": true; }; "removable": { "alias": "removable"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "separator": { "alias": "separator"; "required": false; "isSignal": true; }; "suggestions": { "alias": "suggestions"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; }, { "tagAdded": "tagAdded"; "tagRemoved": "tagRemoved"; }, never, never, true, never>;
5641
+ }
5642
+
5643
+ interface DateRange {
5644
+ start: Date | null;
5645
+ end: Date | null;
5646
+ }
5647
+ declare class DateRangePickerComponent implements ControlValueAccessor {
5648
+ readonly label: _angular_core.InputSignal<string>;
5649
+ readonly placeholder: _angular_core.InputSignal<string>;
5650
+ readonly disabled: _angular_core.InputSignal<boolean>;
5651
+ readonly minDate: _angular_core.InputSignal<Date | null>;
5652
+ readonly maxDate: _angular_core.InputSignal<Date | null>;
5653
+ readonly rangeChange: _angular_core.OutputEmitterRef<DateRange>;
5654
+ protected isOpen: _angular_core.WritableSignal<boolean>;
5655
+ protected range: _angular_core.WritableSignal<DateRange>;
5656
+ protected selecting: _angular_core.WritableSignal<"start" | "end">;
5657
+ protected hoveredDate: _angular_core.WritableSignal<Date | null>;
5658
+ protected viewingMonth: _angular_core.WritableSignal<Date>;
5659
+ private onChange;
5660
+ private onTouched;
5661
+ protected readonly displayValue: _angular_core.Signal<string>;
5662
+ protected readonly monthLabel: _angular_core.Signal<string>;
5663
+ protected readonly weekdays: string[];
5664
+ protected readonly calendarDays: _angular_core.Signal<{
5665
+ date: Date;
5666
+ inMonth: boolean;
5667
+ disabled: boolean;
5668
+ }[]>;
5669
+ writeValue(value: DateRange | null): void;
5670
+ registerOnChange(fn: (val: DateRange) => void): void;
5671
+ registerOnTouched(fn: () => void): void;
5672
+ protected toggle(): void;
5673
+ protected close(): void;
5674
+ protected prevMonth(): void;
5675
+ protected nextMonth(): void;
5676
+ protected selectDate(date: Date): void;
5677
+ protected onDayHover(date: Date): void;
5678
+ protected isStart(date: Date): boolean;
5679
+ protected isEnd(date: Date): boolean;
5680
+ protected isInRange(date: Date): boolean;
5681
+ protected isToday(date: Date): boolean;
5682
+ protected clearRange(event: Event): void;
5683
+ private isDateDisabled;
5684
+ private sameDay;
5685
+ private emitRange;
5686
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DateRangePickerComponent, never>;
5687
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DateRangePickerComponent, "lc-date-range-picker", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "minDate": { "alias": "minDate"; "required": false; "isSignal": true; }; "maxDate": { "alias": "maxDate"; "required": false; "isSignal": true; }; }, { "rangeChange": "rangeChange"; }, never, never, true, never>;
5688
+ }
5689
+
5690
+ type DiffViewMode = 'side-by-side' | 'inline';
5691
+ interface DiffLine {
5692
+ type: 'unchanged' | 'added' | 'removed';
5693
+ leftNum: number | null;
5694
+ rightNum: number | null;
5695
+ content: string;
5696
+ }
5697
+ declare class DiffViewerComponent {
5698
+ readonly oldText: _angular_core.InputSignal<string>;
5699
+ readonly newText: _angular_core.InputSignal<string>;
5700
+ readonly oldLabel: _angular_core.InputSignal<string>;
5701
+ readonly newLabel: _angular_core.InputSignal<string>;
5702
+ readonly mode: _angular_core.InputSignal<DiffViewMode>;
5703
+ readonly showLineNumbers: _angular_core.InputSignal<boolean>;
5704
+ readonly contextLines: _angular_core.InputSignal<number>;
5705
+ protected readonly diffLines: _angular_core.Signal<DiffLine[]>;
5706
+ protected readonly filteredLines: _angular_core.Signal<DiffLine[]>;
5707
+ protected readonly sideBySide: _angular_core.Signal<{
5708
+ left: {
5709
+ num: number | null;
5710
+ content: string;
5711
+ type: string;
5712
+ }[];
5713
+ right: {
5714
+ num: number | null;
5715
+ content: string;
5716
+ type: string;
5717
+ }[];
5718
+ }>;
5719
+ protected readonly stats: _angular_core.Signal<{
5720
+ additions: number;
5721
+ deletions: number;
5722
+ }>;
5723
+ private computeDiff;
5724
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<DiffViewerComponent, never>;
5725
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DiffViewerComponent, "lc-diff-viewer", never, { "oldText": { "alias": "oldText"; "required": true; "isSignal": true; }; "newText": { "alias": "newText"; "required": true; "isSignal": true; }; "oldLabel": { "alias": "oldLabel"; "required": false; "isSignal": true; }; "newLabel": { "alias": "newLabel"; "required": false; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "showLineNumbers": { "alias": "showLineNumbers"; "required": false; "isSignal": true; }; "contextLines": { "alias": "contextLines"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
5726
+ }
5727
+
5728
+ interface KanbanCard {
5729
+ id: string;
5730
+ title: string;
5731
+ description?: string;
5732
+ labels?: KanbanLabel[];
5733
+ assignee?: string;
5734
+ priority?: 'low' | 'medium' | 'high' | 'critical';
5735
+ }
5736
+ interface KanbanLabel {
5737
+ text: string;
5738
+ color?: string;
5739
+ }
5740
+ interface KanbanColumn {
5741
+ id: string;
5742
+ title: string;
5743
+ cards: KanbanCard[];
5744
+ color?: string;
5745
+ limit?: number;
5746
+ }
5747
+ interface KanbanMoveEvent {
5748
+ cardId: string;
5749
+ fromColumnId: string;
5750
+ toColumnId: string;
5751
+ toIndex: number;
5752
+ }
5753
+ declare class KanbanBoardComponent {
5754
+ readonly columns: _angular_core.InputSignal<KanbanColumn[]>;
5755
+ readonly showCardCount: _angular_core.InputSignal<boolean>;
5756
+ readonly showWipLimit: _angular_core.InputSignal<boolean>;
5757
+ readonly readonly: _angular_core.InputSignal<boolean>;
5758
+ readonly cardMoved: _angular_core.OutputEmitterRef<KanbanMoveEvent>;
5759
+ readonly cardClick: _angular_core.OutputEmitterRef<{
5760
+ card: KanbanCard;
5761
+ columnId: string;
5762
+ }>;
5763
+ protected internalColumns: _angular_core.WritableSignal<KanbanColumn[]>;
5764
+ protected draggedCard: _angular_core.WritableSignal<{
5765
+ card: KanbanCard;
5766
+ columnId: string;
5767
+ } | null>;
5768
+ protected dropTargetColumn: _angular_core.WritableSignal<string | null>;
5769
+ protected dropTargetIndex: _angular_core.WritableSignal<number>;
5770
+ protected readonly displayColumns: _angular_core.Signal<KanbanColumn[]>;
5771
+ protected isOverLimit(col: KanbanColumn): boolean;
5772
+ protected getPriorityIcon(priority?: string): string;
5773
+ protected getPriorityColor(priority?: string): string;
5774
+ protected onDragStart(event: DragEvent, card: KanbanCard, columnId: string): void;
5775
+ protected onDragOver(event: DragEvent, columnId: string, index: number): void;
5776
+ protected onDragOverColumn(event: DragEvent, columnId: string): void;
5777
+ protected onDragLeave(): void;
5778
+ protected onDrop(event: DragEvent, toColumnId: string, toIndex?: number): void;
5779
+ protected onDragEnd(): void;
5780
+ protected onCardClick(card: KanbanCard, columnId: string): void;
5781
+ protected trackColumn(_: number, col: KanbanColumn): string;
5782
+ protected trackCard(_: number, card: KanbanCard): string;
5783
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<KanbanBoardComponent, never>;
5784
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<KanbanBoardComponent, "lc-kanban-board", never, { "columns": { "alias": "columns"; "required": true; "isSignal": true; }; "showCardCount": { "alias": "showCardCount"; "required": false; "isSignal": true; }; "showWipLimit": { "alias": "showWipLimit"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; }, { "cardMoved": "cardMoved"; "cardClick": "cardClick"; }, never, never, true, never>;
5785
+ }
5786
+
5787
+ type NotificationType = 'info' | 'success' | 'warning' | 'error';
5788
+ type NotificationPriority = 'low' | 'normal' | 'high' | 'urgent';
5789
+ interface Notification {
5790
+ id: string;
5791
+ title: string;
5792
+ message?: string;
5793
+ type?: NotificationType;
5794
+ priority?: NotificationPriority;
5795
+ timestamp: Date;
5796
+ read?: boolean;
5797
+ icon?: string;
5798
+ category?: string;
5799
+ actionLabel?: string;
5800
+ actionUrl?: string;
5801
+ }
5802
+ declare class NotificationCenterComponent {
5803
+ readonly notifications: _angular_core.InputSignal<Notification[]>;
5804
+ readonly title: _angular_core.InputSignal<string>;
5805
+ readonly showFilter: _angular_core.InputSignal<boolean>;
5806
+ readonly showTimestamp: _angular_core.InputSignal<boolean>;
5807
+ readonly showPriority: _angular_core.InputSignal<boolean>;
5808
+ readonly emptyMessage: _angular_core.InputSignal<string>;
5809
+ readonly maxHeight: _angular_core.InputSignal<string>;
5810
+ readonly groupByCategory: _angular_core.InputSignal<boolean>;
5811
+ readonly notificationClick: _angular_core.OutputEmitterRef<Notification>;
5812
+ readonly notificationDismiss: _angular_core.OutputEmitterRef<string>;
5813
+ readonly notificationAction: _angular_core.OutputEmitterRef<Notification>;
5814
+ readonly markAllRead: _angular_core.OutputEmitterRef<void>;
5815
+ readonly clearAll: _angular_core.OutputEmitterRef<void>;
5816
+ protected activeFilter: _angular_core.WritableSignal<"all" | NotificationType>;
5817
+ protected searchQuery: _angular_core.WritableSignal<string>;
5818
+ protected readonly unreadCount: _angular_core.Signal<number>;
5819
+ protected readonly filteredNotifications: _angular_core.Signal<Notification[]>;
5820
+ protected readonly groupedNotifications: _angular_core.Signal<{
5821
+ category: string;
5822
+ items: Notification[];
5823
+ }[] | null>;
5824
+ protected readonly filterCounts: _angular_core.Signal<{
5825
+ all: number;
5826
+ info: number;
5827
+ success: number;
5828
+ warning: number;
5829
+ error: number;
5830
+ }>;
5831
+ protected readonly hasNotifications: _angular_core.Signal<boolean>;
5832
+ protected getTypeIcon(type?: NotificationType): string;
5833
+ protected getPriorityLabel(priority?: NotificationPriority): string;
5834
+ protected formatTime(date: Date): string;
5835
+ protected setFilter(filter: NotificationType | 'all'): void;
5836
+ protected onSearch(event: Event): void;
5837
+ protected onClick(notification: Notification): void;
5838
+ protected onDismiss(id: string, event: Event): void;
5839
+ protected onAction(notification: Notification, event: Event): void;
5840
+ protected onMarkAllRead(): void;
5841
+ protected onClearAll(): void;
5842
+ private priorityWeight;
5843
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<NotificationCenterComponent, never>;
5844
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<NotificationCenterComponent, "lc-notification-center", never, { "notifications": { "alias": "notifications"; "required": true; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "showFilter": { "alias": "showFilter"; "required": false; "isSignal": true; }; "showTimestamp": { "alias": "showTimestamp"; "required": false; "isSignal": true; }; "showPriority": { "alias": "showPriority"; "required": false; "isSignal": true; }; "emptyMessage": { "alias": "emptyMessage"; "required": false; "isSignal": true; }; "maxHeight": { "alias": "maxHeight"; "required": false; "isSignal": true; }; "groupByCategory": { "alias": "groupByCategory"; "required": false; "isSignal": true; }; }, { "notificationClick": "notificationClick"; "notificationDismiss": "notificationDismiss"; "notificationAction": "notificationAction"; "markAllRead": "markAllRead"; "clearAll": "clearAll"; }, never, never, true, never>;
5845
+ }
5846
+
5847
+ type RichTextEditorMode = 'rich' | 'markdown' | 'split';
5848
+ type ToolbarAction = 'bold' | 'italic' | 'underline' | 'strikethrough' | 'h1' | 'h2' | 'h3' | 'ul' | 'ol' | 'blockquote' | 'code' | 'codeblock' | 'link' | 'image' | 'hr';
5849
+ interface ToolbarConfig {
5850
+ actions: ToolbarAction[];
5851
+ }
5852
+ /**
5853
+ * Rich Text Editor with Markdown support.
5854
+ *
5855
+ * Supports three modes:
5856
+ * - `rich`: WYSIWYG editing with toolbar
5857
+ * - `markdown`: Raw markdown editing with syntax highlighting
5858
+ * - `split`: Side-by-side markdown and preview
5859
+ *
5860
+ * Implements ControlValueAccessor for reactive form integration.
5861
+ * The value is always stored as Markdown.
5862
+ *
5863
+ * @example
5864
+ * ```html
5865
+ * <lc-rich-text-editor
5866
+ * [(ngModel)]="content"
5867
+ * mode="split"
5868
+ * placeholder="Write something..." />
5869
+ * ```
5870
+ */
5871
+ declare class RichTextEditorComponent implements ControlValueAccessor, AfterViewInit, OnDestroy {
5872
+ /** Editor mode */
5873
+ mode: _angular_core.InputSignal<RichTextEditorMode>;
5874
+ /** Placeholder text */
5875
+ placeholder: _angular_core.InputSignal<string>;
5876
+ /** Minimum height in px */
5877
+ minHeight: _angular_core.InputSignal<number>;
5878
+ /** Maximum height in px (0 = unlimited) */
5879
+ maxHeight: _angular_core.InputSignal<number>;
5880
+ /** Whether the editor is disabled */
5881
+ disabled: _angular_core.InputSignal<boolean>;
5882
+ /** Whether the editor is readonly */
5883
+ readonly: _angular_core.InputSignal<boolean>;
5884
+ /** Toolbar configuration */
5885
+ toolbar: _angular_core.InputSignal<ToolbarConfig>;
5886
+ /** Whether to show word count */
5887
+ showWordCount: _angular_core.InputSignal<boolean>;
5888
+ /** Emitted on every content change */
5889
+ readonly contentChange: _angular_core.OutputEmitterRef<string>;
5890
+ editorArea: ElementRef<HTMLTextAreaElement>;
5891
+ richArea: ElementRef<HTMLDivElement>;
5892
+ /** Internal markdown value */
5893
+ protected markdown: _angular_core.WritableSignal<string>;
5894
+ /** Current active mode (can be toggled by user) */
5895
+ protected activeMode: _angular_core.WritableSignal<RichTextEditorMode>;
5896
+ /** Word count */
5897
+ protected wordCount: _angular_core.Signal<number>;
5898
+ /** Character count */
5899
+ protected charCount: _angular_core.Signal<number>;
5900
+ /** Rendered HTML from markdown */
5901
+ protected renderedHtml: _angular_core.Signal<string>;
5902
+ private onChange;
5903
+ private onTouched;
5904
+ ngAfterViewInit(): void;
5905
+ ngOnDestroy(): void;
5906
+ writeValue(value: string): void;
5907
+ registerOnChange(fn: (value: string) => void): void;
5908
+ registerOnTouched(fn: () => void): void;
5909
+ setDisabledState(isDisabled: boolean): void;
5910
+ protected switchMode(mode: RichTextEditorMode): void;
5911
+ protected onToolbarAction(action: ToolbarAction): void;
5912
+ private execRichCommand;
5913
+ private insertMarkdownSyntax;
5914
+ protected onMarkdownInput(event: Event): void;
5915
+ protected onRichInput(): void;
5916
+ protected onBlur(): void;
5917
+ private syncFromRich;
5918
+ private emitChange;
5919
+ private getSelection;
5920
+ protected getActionLabel(action: ToolbarAction): string;
5921
+ protected getActionTitle(action: ToolbarAction): string;
5922
+ protected markdownToHtml(md: string): string;
5923
+ private htmlToMarkdown;
5924
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<RichTextEditorComponent, never>;
5925
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<RichTextEditorComponent, "lc-rich-text-editor", never, { "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "minHeight": { "alias": "minHeight"; "required": false; "isSignal": true; }; "maxHeight": { "alias": "maxHeight"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "toolbar": { "alias": "toolbar"; "required": false; "isSignal": true; }; "showWordCount": { "alias": "showWordCount"; "required": false; "isSignal": true; }; }, { "contentChange": "contentChange"; }, never, never, true, never>;
5926
+ }
5927
+
5928
+ export { AccordionComponent, AlertComponent, AnimationDurationFast, AnimationEasingEaseIn, AnimationEasingEaseInOut, AnimationEasingEaseOut, AreaChartComponent, AvatarComponent, AvatarGroupComponent, BadgeComponent, BarChartComponent, BorderRadius2xl, BorderRadiusFull, BorderRadiusLg, BorderRadiusMd, BorderRadiusNone, BorderRadiusSm, BorderRadiusXl, BreadcrumbsComponent, ButtonComponent, CalendarComponent, CalloutComponent, CardComponent, ChatComponent, CheckboxComponent, ChipComponent, CodeBlockComponent, ColorAccentOrange, ColorAccentPurple, ColorAccentRed, ColorAccentRust, ColorAccentViolet, ColorErrorDark, ColorErrorDefault, ColorErrorLight, ColorInfoDark, ColorInfoDefault, ColorInfoLight, ColorNeutral100, ColorNeutral200, ColorNeutral300, ColorNeutral400, ColorNeutral50, ColorNeutral500, ColorNeutral600, ColorNeutral700, ColorNeutral800, ColorNeutral900, ColorPickerComponent, ColorPrimary100, ColorPrimary200, ColorPrimary300, ColorPrimary400, ColorPrimary50, ColorPrimary500, ColorPrimary600, ColorPrimary700, ColorPrimary800, ColorPrimary900, ColorSecondary100, ColorSecondary200, ColorSecondary300, ColorSecondary400, ColorSecondary50, ColorSecondary500, ColorSecondary600, ColorSecondary700, ColorSecondary800, ColorSecondary900, ColorSuccessDark, ColorSuccessDefault, ColorSuccessLight, ColorWarningDark, ColorWarningDefault, ColorWarningLight, ContainerComponent, DateRangePickerComponent, DatepickerComponent, DependencyViewerComponent, DiffViewerComponent, DividerComponent, DocumentViewerComponent, DonutChartComponent, DrawerComponent, Elevation1, Elevation2, Elevation3, Elevation4, EmailInputComponent, EmptyStateComponent, ErrorDisplayComponent, FieldGroupComponent, FileUploadComponent, FilterBarComponent, FooterComponent, FunnelChartComponent, GalleryComponent, GanttChartComponent, GaugeComponent, HeaderComponent, HeatmapComponent, HeroComponent, IconComponent, InputComponent, KanbanBoardComponent, LineChartComponent, ListComponent, ListItemTemplateDirective, LogoComponent, MenuComponent, ModalComponent, NotificationCenterComponent, NumberInputComponent, PaginationComponent, PasswordInputComponent, PieChartComponent, PopoverComponent, ProgressBarComponent, ProgressRingComponent, RadarChartComponent, RadioComponent, RatingComponent, RichTextEditorComponent, ScatterPlotComponent, SearchInputComponent, SectionComponent, SelectComponent, SidenavComponent, SizeInteractiveLgFontSize, SizeInteractiveLgHeight, SizeInteractiveLgPadding, SizeInteractiveMdFontSize, SizeInteractiveMdHeight, SizeInteractiveMdPadding, SizeInteractiveSmFontSize, SizeInteractiveSmHeight, SizeInteractiveSmPadding, SizeInteractiveXsFontSize, SizeInteractiveXsHeight, SizeInteractiveXsPadding, SizeMinTouchHeight, SizeMinTouchWidth, SkeletonComponent, SliderComponent, SpacerComponent, Spacing0, Spacing05, Spacing1, Spacing10, Spacing11, Spacing12, Spacing14, Spacing15, Spacing16, Spacing2, Spacing25, Spacing3, Spacing35, Spacing4, Spacing5, Spacing6, Spacing7, Spacing8, Spacing9, SparklineComponent, SpinnerComponent, StackComponent, StackedBarChartComponent, StatTrendComponent, StepperComponent, SwitchComponent, TabComponent, TableCellDirective, TableComponent, TabsComponent, TagInputComponent, TextareaComponent, ThemeService, TimelineComponent, ToastComponent, ToastService, ToggleGroupComponent, TooltipContentComponent, TooltipDirective, TypographyComponent, TypographyFontFamilyBase, TypographyFontFamilyMono, TypographyFontSize2xl, TypographyFontSize3xl, TypographyFontSize4xl, TypographyFontSize5xl, TypographyFontSize6xl, TypographyFontSizeBase, TypographyFontSizeLg, TypographyFontSizeSm, TypographyFontSizeXl, TypographyFontSizeXs, TypographyFontWeightBold, TypographyFontWeightMedium, TypographyFontWeightNormal, TypographyFontWeightSemibold, TypographyLineHeightNormal, TypographyLineHeightRelaxed, TypographyLineHeightTight, VerificationCodeInputComponent, WaterfallChartComponent };
5929
+ export type { AlertVariant, AreaChartSeries, AvatarGroupItem, AvatarSize, AvatarStatus, BadgeSize, BadgeVariant, BarChartItem, BarChartOrientation, BreadcrumbItem, BreadcrumbSize, ButtonSize, ButtonType, ButtonVariant, CalendarEvent, CalendarView, CalloutVariant, CellEditEvent, ChatMessage, ChatMessageRole, ChatSendEvent, CheckboxSize, ChipSize, ChipVariant, CodeBlockLanguage, ContainerSize, DateRange, DateValue, DependencyDirection, DependencyEdgeDef, DependencyNode, DependencyNodeStatus, DependencyRelation, DiffViewMode, DividerOrientation, DividerSpacing, DividerVariant, DocumentType, DonutChartSize, DonutSegment, DrawerPosition, DrawerSize, EmptyStateSize, ErrorSeverity, FileUploadFile, FilterConfig, FilterOption, FilterValues, FooterLink, FooterSection, FooterVariant, FunnelStep, GalleryItem, GalleryLayout, GallerySize, GanttDependency, GanttTask, GaugeColor, GaugeSize, HeatmapCell, HeroColor, HeroSize, IconSize, IconVariant, KanbanCard, KanbanColumn, KanbanLabel, KanbanMoveEvent, LineChartSeries, ListItem, ListOrientation, ListVariant, MenuItem, ModalSize, NavigationItem, Notification, NotificationPriority, NotificationType, PaginationSize, PasswordRequirement, PasswordStrength, PieChartSize, PieSegment, PopoverPosition, PopoverTrigger, ProgressBarColor, ProgressBarSize, ProgressBarVariant, ProgressRingColor, ProgressRingSize, RadarChartSeries, RadioSize, RatingSize, RichTextEditorMode, ScatterPoint, ScatterSeries, SearchInputSize, SectionBackground, SectionSpacing, SelectOption, SelectOptionGroup, SelectValue, SelectionChangeEvent, SidenavMode, SidenavPosition, SkeletonVariant, SortEvent, SpacerSize, SparklineColor, SparklineCurve, SpinnerSize, StackAlign, StackDirection, StackGap, StackJustify, StackedBarCategory, StackedBarLegend, StackedBarOrientation, StatTrendDirection, StepState, StepperStep, TabOrientation, TableColumn, TableSize, TableVariant, ThemeConfig, ThemeMode, ThemeState, TimelineItem, TimelineOrientation, Toast, ToastAction, ToastConfig, ToastPosition, ToastVariant, ToggleOption, ToolbarAction, ToolbarConfig, TooltipPosition, WaterfallItem };