@quinnjr/ngx-tailwindcss 1.0.1 → 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.
@@ -150,7 +150,7 @@ declare function withTwConfig(config: Partial<TwConfig>): Provider;
150
150
  * @example
151
151
  * ```typescript
152
152
  * // In app.config.ts
153
- * import { provideTwTheme, createTheme } from '@pegasus-heavy/ngx-tailwindcss';
153
+ * import { provideTwTheme, createTheme } from '@quinnjr/ngx-tailwindcss';
154
154
  *
155
155
  * const customTheme = createTheme({
156
156
  * colors: {
@@ -298,7 +298,7 @@ declare const THEME_CSS_CLASSES: {
298
298
  readonly bgSurface: "bg-[var(--tw-color-surface)]";
299
299
  readonly bgSurfaceAlt: "bg-[var(--tw-color-surface-alt)]";
300
300
  readonly bgBackground: "bg-[var(--tw-color-background)]";
301
- readonly textPrimary: "text-[var(--tw-color-text)]";
301
+ readonly textPrimary: "text-[var(--tw-color-text-primary)]";
302
302
  readonly textSecondary: "text-[var(--tw-color-text-secondary)]";
303
303
  readonly textMuted: "text-[var(--tw-color-text-muted)]";
304
304
  readonly textInverse: "text-[var(--tw-color-text-inverse)]";
@@ -406,7 +406,7 @@ declare class TwThemeService {
406
406
  * @example
407
407
  * ```typescript
408
408
  * // In app.config.ts
409
- * import { provideTwTheme, createTheme } from '@pegasus-heavy/ngx-tailwindcss';
409
+ * import { provideTwTheme, createTheme } from '@quinnjr/ngx-tailwindcss';
410
410
  *
411
411
  * const myTheme = createTheme({
412
412
  * colors: {
@@ -854,6 +854,8 @@ type TooltipPosition = 'top' | 'bottom' | 'left' | 'right';
854
854
  declare class TwTooltipDirective implements OnDestroy, OnChanges {
855
855
  private readonly el;
856
856
  private readonly renderer;
857
+ private readonly platformId;
858
+ private readonly tooltipId;
857
859
  /** The tooltip text content */
858
860
  content: string;
859
861
  /** Position of the tooltip relative to the host element */
@@ -873,6 +875,8 @@ declare class TwTooltipDirective implements OnDestroy, OnChanges {
873
875
  private hideTimeout;
874
876
  private isVisible;
875
877
  ngOnChanges(changes: SimpleChanges): void;
878
+ private readonly escapeHandler;
879
+ private readonly repositionHandler;
876
880
  show(): void;
877
881
  hide(): void;
878
882
  private createTooltip;
@@ -910,6 +914,7 @@ declare class TwTooltipDirective implements OnDestroy, OnChanges {
910
914
  declare class TwClickOutsideDirective implements OnInit, OnDestroy {
911
915
  private readonly el;
912
916
  private readonly ngZone;
917
+ private readonly platformId;
913
918
  /** Event emitted when a click occurs outside the element */
914
919
  clickOutside: EventEmitter<MouseEvent>;
915
920
  /** Whether the click outside detection is enabled */
@@ -949,9 +954,10 @@ declare class TwClickOutsideDirective implements OnInit, OnDestroy {
949
954
  * </div>
950
955
  * ```
951
956
  */
952
- declare class TwFocusTrapDirective implements OnInit, AfterViewInit, OnDestroy {
957
+ declare class TwFocusTrapDirective implements OnInit, AfterViewInit, OnChanges, OnDestroy {
953
958
  private readonly el;
954
959
  private readonly ngZone;
960
+ private readonly platformId;
955
961
  /** Whether the focus trap is active */
956
962
  enabled: boolean;
957
963
  /** Whether to auto-focus the first focusable element when the trap is initialized */
@@ -962,10 +968,19 @@ declare class TwFocusTrapDirective implements OnInit, AfterViewInit, OnDestroy {
962
968
  focusTrapInitialFocus: string;
963
969
  private keydownHandler;
964
970
  private previouslyFocusedElement;
971
+ private viewInitialized;
965
972
  ngOnInit(): void;
966
973
  ngAfterViewInit(): void;
974
+ ngOnChanges(changes: SimpleChanges): void;
975
+ private activateTrap;
976
+ private deactivateTrap;
967
977
  private setupTrap;
968
- private getFocusableElements;
978
+ private isFocusVisible;
979
+ /**
980
+ * Find only the first and last visible focusable elements, short-circuiting
981
+ * from both ends to avoid forcing a reflow for every candidate on each Tab.
982
+ */
983
+ private getFocusBoundaries;
969
984
  private focusInitial;
970
985
  /** Manually focus the first focusable element */
971
986
  focusFirst(): void;
@@ -1045,8 +1060,9 @@ declare class TwVariantDirective implements OnChanges {
1045
1060
  * <input [twAutoFocus]="shouldFocus" />
1046
1061
  * ```
1047
1062
  */
1048
- declare class TwAutoFocusDirective implements AfterViewInit {
1063
+ declare class TwAutoFocusDirective implements AfterViewInit, OnChanges {
1049
1064
  private readonly el;
1065
+ private viewInitialized;
1050
1066
  constructor();
1051
1067
  /** Whether auto-focus is enabled */
1052
1068
  autoFocusEnabled: boolean;
@@ -1057,6 +1073,8 @@ declare class TwAutoFocusDirective implements AfterViewInit {
1057
1073
  /** Whether to scroll element into view */
1058
1074
  autoFocusScroll: boolean;
1059
1075
  ngAfterViewInit(): void;
1076
+ ngOnChanges(changes: SimpleChanges): void;
1077
+ private scheduleFocus;
1060
1078
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TwAutoFocusDirective, never>;
1061
1079
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<TwAutoFocusDirective, "[twAutoFocus]", never, { "autoFocusEnabled": { "alias": "twAutoFocus"; "required": false; }; "autoFocusDelay": { "alias": "autoFocusDelay"; "required": false; }; "autoFocusSelect": { "alias": "autoFocusSelect"; "required": false; }; "autoFocusScroll": { "alias": "autoFocusScroll"; "required": false; }; }, {}, never, never, true, never>;
1062
1080
  static ngAcceptInputType_autoFocusEnabled: unknown;
@@ -1081,10 +1099,11 @@ interface InViewEvent {
1081
1099
  * <div twInView [inViewOnce]="true" (enterView)="loadOnce()">Load once when visible</div>
1082
1100
  * ```
1083
1101
  */
1084
- declare class TwInViewDirective implements OnInit, OnDestroy {
1102
+ declare class TwInViewDirective implements OnInit, OnChanges, OnDestroy {
1085
1103
  private readonly el;
1086
1104
  constructor();
1087
1105
  private observer;
1106
+ private initialized;
1088
1107
  /** Root margin for intersection observer (CSS margin syntax) */
1089
1108
  inViewRootMargin: string;
1090
1109
  /** Threshold(s) for triggering - 0 to 1, or array of values */
@@ -1100,6 +1119,9 @@ declare class TwInViewDirective implements OnInit, OnDestroy {
1100
1119
  /** Emits when element leaves the viewport */
1101
1120
  leaveView: EventEmitter<InViewEvent>;
1102
1121
  ngOnInit(): void;
1122
+ ngOnChanges(changes: SimpleChanges): void;
1123
+ private setupObserver;
1124
+ private disconnectObserver;
1103
1125
  ngOnDestroy(): void;
1104
1126
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TwInViewDirective, never>;
1105
1127
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<TwInViewDirective, "[twInView]", never, { "inViewRootMargin": { "alias": "inViewRootMargin"; "required": false; }; "inViewThreshold": { "alias": "inViewThreshold"; "required": false; }; "inViewOnce": { "alias": "inViewOnce"; "required": false; }; "inViewDisabled": { "alias": "inViewDisabled"; "required": false; }; }, { "inView": "inView"; "enterView": "enterView"; "leaveView": "leaveView"; }, never, never, true, never>;
@@ -1130,6 +1152,7 @@ declare class TwLongPressDirective implements OnInit, OnDestroy {
1130
1152
  private startTime;
1131
1153
  private startX;
1132
1154
  private startY;
1155
+ private longPressFired;
1133
1156
  /** Duration in ms to trigger long press (default: 500ms) */
1134
1157
  longPressDuration: number;
1135
1158
  /** Maximum movement allowed during press (default: 10px) */
@@ -1160,7 +1183,8 @@ declare class TwLongPressDirective implements OnInit, OnDestroy {
1160
1183
  }
1161
1184
 
1162
1185
  /**
1163
- * Directive to debounce click events, preventing accidental double-clicks
1186
+ * Directive to prevent accidental double-clicks: the first click emits
1187
+ * immediately and any further clicks within the interval are ignored
1164
1188
  *
1165
1189
  * @example
1166
1190
  * ```html
@@ -1171,7 +1195,7 @@ declare class TwLongPressDirective implements OnInit, OnDestroy {
1171
1195
  declare class TwDebounceClickDirective implements OnInit, OnDestroy {
1172
1196
  private readonly clicks;
1173
1197
  private subscription;
1174
- /** Debounce time in milliseconds (default: 300ms) */
1198
+ /** Interval in milliseconds during which repeat clicks are ignored (default: 300ms) */
1175
1199
  debounceTime: number;
1176
1200
  /** Disable debouncing */
1177
1201
  debounceDisabled: boolean;
@@ -1235,6 +1259,8 @@ interface KeyboardShortcutEvent {
1235
1259
  declare class TwKeyboardShortcutDirective implements OnInit, OnDestroy {
1236
1260
  private readonly ngZone;
1237
1261
  private readonly platformId;
1262
+ private readonly el;
1263
+ private listenTarget;
1238
1264
  constructor();
1239
1265
  /** Keyboard shortcut string (e.g., "ctrl+s", "ctrl+shift+p", "escape") */
1240
1266
  twKeyboardShortcut: string;
@@ -1331,13 +1357,14 @@ interface ResizeEvent {
1331
1357
  * <div twResizeObserver [resizeDebounce]="100" (resize)="onResize($event)">Debounced resize</div>
1332
1358
  * ```
1333
1359
  */
1334
- declare class TwResizeObserverDirective implements OnInit, OnDestroy {
1360
+ declare class TwResizeObserverDirective implements OnInit, OnChanges, OnDestroy {
1335
1361
  private readonly el;
1336
1362
  private readonly ngZone;
1337
1363
  constructor();
1338
1364
  private observer;
1339
1365
  private readonly resizeSubject;
1340
1366
  private subscription;
1367
+ private initialized;
1341
1368
  /** Debounce time in milliseconds (default: 0 = no debounce) */
1342
1369
  resizeDebounce: number;
1343
1370
  /** Disable the observer */
@@ -1345,6 +1372,9 @@ declare class TwResizeObserverDirective implements OnInit, OnDestroy {
1345
1372
  /** Emits when element size changes */
1346
1373
  resize: EventEmitter<ResizeEvent>;
1347
1374
  ngOnInit(): void;
1375
+ ngOnChanges(changes: SimpleChanges): void;
1376
+ private setupObserver;
1377
+ private teardownObserver;
1348
1378
  ngOnDestroy(): void;
1349
1379
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TwResizeObserverDirective, never>;
1350
1380
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<TwResizeObserverDirective, "[twResizeObserver]", never, { "resizeDebounce": { "alias": "resizeDebounce"; "required": false; }; "resizeDisabled": { "alias": "resizeDisabled"; "required": false; }; }, { "resize": "resize"; }, never, never, true, never>;
@@ -1371,6 +1401,7 @@ declare class TwLazyImageDirective implements OnInit, OnDestroy {
1371
1401
  private readonly renderer;
1372
1402
  constructor();
1373
1403
  private observer;
1404
+ private removeNativeListeners;
1374
1405
  /** The image source to lazy load */
1375
1406
  twLazyImage: string;
1376
1407
  /** Placeholder image to show before loading */
@@ -1389,6 +1420,8 @@ declare class TwLazyImageDirective implements OnInit, OnDestroy {
1389
1420
  lazyLoaded: EventEmitter<LazyImageEvent>;
1390
1421
  ngOnInit(): void;
1391
1422
  private loadImage;
1423
+ private loadImageNatively;
1424
+ private applyLoadedClasses;
1392
1425
  ngOnDestroy(): void;
1393
1426
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TwLazyImageDirective, never>;
1394
1427
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<TwLazyImageDirective, "img[twLazyImage]", never, { "twLazyImage": { "alias": "twLazyImage"; "required": true; }; "lazyPlaceholder": { "alias": "lazyPlaceholder"; "required": false; }; "lazyLoadingClass": { "alias": "lazyLoadingClass"; "required": false; }; "lazyLoadedClass": { "alias": "lazyLoadedClass"; "required": false; }; "lazyRootMargin": { "alias": "lazyRootMargin"; "required": false; }; "lazyDisabled": { "alias": "lazyDisabled"; "required": false; }; "lazyNative": { "alias": "lazyNative"; "required": false; }; }, { "lazyLoaded": "lazyLoaded"; }, never, never, true, never>;
@@ -1407,6 +1440,7 @@ declare class TwLazyImageDirective implements OnInit, OnDestroy {
1407
1440
  * ```
1408
1441
  */
1409
1442
  declare class TwScrollToDirective {
1443
+ private readonly platformId;
1410
1444
  /** Target selector or element ID */
1411
1445
  twScrollTo: string;
1412
1446
  /** Offset from the top in pixels (useful for fixed headers) */
@@ -1424,7 +1458,8 @@ declare class TwScrollToDirective {
1424
1458
  static ngAcceptInputType_scrollDisabled: unknown;
1425
1459
  }
1426
1460
  /**
1427
- * Directive to mark scroll target sections for scroll spy
1461
+ * Directive that exposes the section's viewport position (via `getPosition()`)
1462
+ * for a caller-implemented scroll spy
1428
1463
  *
1429
1464
  * @example
1430
1465
  * ```html
@@ -1522,8 +1557,9 @@ declare class TwTrapScrollDirective implements OnInit, OnDestroy {
1522
1557
  */
1523
1558
  declare class TwSrOnlyDirective {
1524
1559
  set twSrOnly(value: boolean);
1525
- focusable: boolean;
1560
+ set focusable(value: boolean);
1526
1561
  private readonly _enabled;
1562
+ private readonly _focusable;
1527
1563
  protected srOnlyClasses: _angular_core.Signal<"" | "sr-only focus:not-sr-only focus:absolute focus:z-50 focus:p-2 focus:bg-white focus:text-slate-900 focus:border focus:border-slate-300 focus:rounded" | "sr-only">;
1528
1564
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TwSrOnlyDirective, never>;
1529
1565
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<TwSrOnlyDirective, "[twSrOnly]", never, { "twSrOnly": { "alias": "twSrOnly"; "required": false; }; "focusable": { "alias": "focusable"; "required": false; }; }, {}, never, never, true, never>;
@@ -1533,12 +1569,11 @@ declare class TwSrOnlyDirective {
1533
1569
  /**
1534
1570
  * Directive to announce content changes to screen readers.
1535
1571
  */
1536
- declare class TwAnnounceDirective implements OnDestroy {
1572
+ declare class TwAnnounceDirective {
1537
1573
  private readonly ariaService;
1538
1574
  private previousMessage;
1539
1575
  set twAnnounce(message: string);
1540
1576
  announceAssertive: boolean;
1541
- ngOnDestroy(): void;
1542
1577
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TwAnnounceDirective, never>;
1543
1578
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<TwAnnounceDirective, "[twAnnounce]", never, { "twAnnounce": { "alias": "twAnnounce"; "required": false; }; "announceAssertive": { "alias": "announceAssertive"; "required": false; }; }, {}, never, never, true, never>;
1544
1579
  static ngAcceptInputType_announceAssertive: unknown;
@@ -1592,6 +1627,8 @@ declare class TwAriaPressedDirective {
1592
1627
  declare class TwAriaDisabledDirective {
1593
1628
  private readonly elementRef;
1594
1629
  private readonly renderer;
1630
+ private originalTabindex;
1631
+ private isDisabled;
1595
1632
  set twAriaDisabled(value: boolean);
1596
1633
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TwAriaDisabledDirective, never>;
1597
1634
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<TwAriaDisabledDirective, "[twAriaDisabled]", never, { "twAriaDisabled": { "alias": "twAriaDisabled"; "required": false; }; }, {}, never, never, true, never>;
@@ -1798,6 +1835,8 @@ declare class TwButtonComponent {
1798
1835
  focus(): void;
1799
1836
  /** Programmatically blur the button */
1800
1837
  blur(): void;
1838
+ /** Keyboard activation (Enter/Space) for the role="button" host element */
1839
+ protected onHostKeydown(event: KeyboardEvent): void;
1801
1840
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TwButtonComponent, never>;
1802
1841
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwButtonComponent, "tw-button", never, { "variant": { "alias": "variant"; "required": false; }; "size": { "alias": "size"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "loading": { "alias": "loading"; "required": false; }; "fullWidth": { "alias": "fullWidth"; "required": false; }; "iconOnly": { "alias": "iconOnly"; "required": false; }; "ripple": { "alias": "ripple"; "required": false; }; "rippleColor": { "alias": "rippleColor"; "required": false; }; "classOverride": { "alias": "classOverride"; "required": false; }; "classReplace": { "alias": "classReplace"; "required": false; }; }, {}, never, ["[twButtonIcon], [slot=icon]", "*", "[twButtonIconEnd], [slot=icon-end]"], true, [{ directive: typeof TwRippleDirective; inputs: {}; outputs: {}; }]>;
1803
1842
  static ngAcceptInputType_disabled: unknown;
@@ -1827,6 +1866,7 @@ declare class TwLabelDirective {
1827
1866
  class: string;
1828
1867
  required: boolean;
1829
1868
  get hostClass(): string;
1869
+ get ariaRequired(): 'true' | null;
1830
1870
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TwLabelDirective, never>;
1831
1871
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<TwLabelDirective, "tw-label, [twLabel]", never, { "class": { "alias": "class"; "required": false; }; "required": { "alias": "required"; "required": false; }; }, {}, never, never, true, never>;
1832
1872
  static ngAcceptInputType_required: unknown;
@@ -1889,59 +1929,61 @@ declare class TwInputComponent implements ControlValueAccessor {
1889
1929
  private readonly elementRef;
1890
1930
  inputElement: ElementRef<HTMLInputElement>;
1891
1931
  /** Input type */
1892
- type: string;
1932
+ readonly type: _angular_core.InputSignal<string>;
1893
1933
  /** Visual variant */
1894
- variant: InputVariant;
1934
+ readonly variant: _angular_core.InputSignal<InputVariant>;
1895
1935
  /** Size of the input */
1896
- size: InputSize;
1936
+ readonly size: _angular_core.InputSignal<InputSize>;
1897
1937
  /** Label text */
1898
- label: string;
1938
+ readonly label: _angular_core.InputSignal<string>;
1899
1939
  /** Placeholder text */
1900
- placeholder: string;
1940
+ readonly placeholder: _angular_core.InputSignal<string>;
1901
1941
  /** Hint/helper text */
1902
- hint: string;
1942
+ readonly hint: _angular_core.InputSignal<string>;
1903
1943
  /** Error message */
1904
- error: string;
1944
+ readonly error: _angular_core.InputSignal<string>;
1905
1945
  /** Whether the field is disabled */
1906
- disabled: boolean;
1946
+ readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
1907
1947
  /** Whether the field is readonly */
1908
- readonly: boolean;
1948
+ readonly readonly: _angular_core.InputSignalWithTransform<boolean, unknown>;
1909
1949
  /** Whether the field is required */
1910
- required: boolean;
1950
+ readonly required: _angular_core.InputSignalWithTransform<boolean, unknown>;
1911
1951
  /** Whether to show a clear button */
1912
- clearable: boolean;
1952
+ readonly clearable: _angular_core.InputSignalWithTransform<boolean, unknown>;
1913
1953
  /** Unique ID for the input (auto-generated if not provided) */
1914
- inputId: string;
1954
+ readonly inputId: _angular_core.InputSignal<string>;
1915
1955
  /** Autocomplete attribute */
1916
- autocomplete: string;
1956
+ readonly autocomplete: _angular_core.InputSignal<string>;
1917
1957
  /** Input mode for virtual keyboards */
1918
- inputmode: string;
1958
+ readonly inputmode: _angular_core.InputSignal<string>;
1919
1959
  /** Validation pattern */
1920
- pattern: string;
1960
+ readonly pattern: _angular_core.InputSignal<string>;
1921
1961
  /** Minimum value (for number/date inputs) */
1922
- min: string;
1962
+ readonly min: _angular_core.InputSignal<string>;
1923
1963
  /** Maximum value (for number/date inputs) */
1924
- max: string;
1964
+ readonly max: _angular_core.InputSignal<string>;
1925
1965
  /** Minimum length */
1926
- minlength: number | null;
1966
+ readonly minlength: _angular_core.InputSignal<number | null>;
1927
1967
  /** Maximum length */
1928
- maxlength: number | null;
1968
+ readonly maxlength: _angular_core.InputSignal<number | null>;
1929
1969
  /** Step value (for number inputs) */
1930
- step: string;
1970
+ readonly step: _angular_core.InputSignal<string>;
1931
1971
  /** IDs of elements that describe this input */
1932
- describedBy: string;
1972
+ readonly describedBy: _angular_core.InputSignal<string>;
1933
1973
  /** Additional classes to merge */
1934
- classOverride: string;
1974
+ readonly classOverride: _angular_core.InputSignal<string>;
1935
1975
  /** Focus event */
1936
- onFocus: EventEmitter<FocusEvent>;
1976
+ readonly onFocus: _angular_core.OutputEmitterRef<FocusEvent>;
1937
1977
  /** Clear event */
1938
- onClear: EventEmitter<void>;
1939
- protected value: string;
1978
+ readonly onClear: _angular_core.OutputEmitterRef<void>;
1979
+ protected readonly value: _angular_core.WritableSignal<string>;
1980
+ protected readonly _disabled: _angular_core.WritableSignal<boolean>;
1940
1981
  private onChange;
1941
1982
  private onTouched;
1942
- get hasError(): boolean;
1943
- protected wrapperClasses: _angular_core.Signal<string>;
1944
- protected computedClasses: _angular_core.Signal<string>;
1983
+ constructor();
1984
+ protected readonly hasError: _angular_core.Signal<boolean>;
1985
+ protected readonly wrapperClasses: _angular_core.Signal<string>;
1986
+ protected readonly computedClasses: _angular_core.Signal<string>;
1945
1987
  writeValue(value: string): void;
1946
1988
  registerOnChange(fn: (value: string) => void): void;
1947
1989
  registerOnTouched(fn: () => void): void;
@@ -1954,39 +1996,38 @@ declare class TwInputComponent implements ControlValueAccessor {
1954
1996
  /** Select all text in the input */
1955
1997
  select(): void;
1956
1998
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TwInputComponent, never>;
1957
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwInputComponent, "tw-input", never, { "type": { "alias": "type"; "required": false; }; "variant": { "alias": "variant"; "required": false; }; "size": { "alias": "size"; "required": false; }; "label": { "alias": "label"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "hint": { "alias": "hint"; "required": false; }; "error": { "alias": "error"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "readonly": { "alias": "readonly"; "required": false; }; "required": { "alias": "required"; "required": false; }; "clearable": { "alias": "clearable"; "required": false; }; "inputId": { "alias": "inputId"; "required": false; }; "autocomplete": { "alias": "autocomplete"; "required": false; }; "inputmode": { "alias": "inputmode"; "required": false; }; "pattern": { "alias": "pattern"; "required": false; }; "min": { "alias": "min"; "required": false; }; "max": { "alias": "max"; "required": false; }; "minlength": { "alias": "minlength"; "required": false; }; "maxlength": { "alias": "maxlength"; "required": false; }; "step": { "alias": "step"; "required": false; }; "describedBy": { "alias": "describedBy"; "required": false; }; "classOverride": { "alias": "classOverride"; "required": false; }; }, { "onFocus": "onFocus"; "onClear": "onClear"; }, never, ["[twInputPrefix]", "[twInputSuffix]", "tw-hint, [twHint], tw-error, [twError]"], true, never>;
1958
- static ngAcceptInputType_disabled: unknown;
1959
- static ngAcceptInputType_readonly: unknown;
1960
- static ngAcceptInputType_required: unknown;
1961
- static ngAcceptInputType_clearable: unknown;
1999
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwInputComponent, "tw-input", never, { "type": { "alias": "type"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "hint": { "alias": "hint"; "required": false; "isSignal": true; }; "error": { "alias": "error"; "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; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "inputId": { "alias": "inputId"; "required": false; "isSignal": true; }; "autocomplete": { "alias": "autocomplete"; "required": false; "isSignal": true; }; "inputmode": { "alias": "inputmode"; "required": false; "isSignal": true; }; "pattern": { "alias": "pattern"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "minlength": { "alias": "minlength"; "required": false; "isSignal": true; }; "maxlength": { "alias": "maxlength"; "required": false; "isSignal": true; }; "step": { "alias": "step"; "required": false; "isSignal": true; }; "describedBy": { "alias": "describedBy"; "required": false; "isSignal": true; }; "classOverride": { "alias": "classOverride"; "required": false; "isSignal": true; }; }, { "onFocus": "onFocus"; "onClear": "onClear"; }, never, ["[twInputPrefix]", "[twInputSuffix]", "tw-hint, [twHint], tw-error, [twError]"], true, never>;
1962
2000
  }
1963
2001
  /**
1964
- * Textarea component with the same API as tw-input
2002
+ * Textarea component with a subset of the tw-input API
2003
+ * (no type/clearable/pattern/min/max/step/prefix/suffix)
1965
2004
  */
1966
2005
  declare class TwTextareaComponent implements ControlValueAccessor {
1967
2006
  private readonly twClass;
1968
2007
  textareaElement: ElementRef<HTMLTextAreaElement>;
1969
- variant: InputVariant;
1970
- size: InputSize;
1971
- label: string;
1972
- placeholder: string;
1973
- hint: string;
1974
- error: string;
1975
- disabled: boolean;
1976
- readonly: boolean;
1977
- required: boolean;
1978
- showCount: boolean;
1979
- inputId: string;
1980
- rows: number;
1981
- minlength: number | null;
1982
- maxlength: number | null;
1983
- classOverride: string;
1984
- autoResize: boolean;
1985
- protected value: string;
2008
+ readonly variant: _angular_core.InputSignal<InputVariant>;
2009
+ readonly size: _angular_core.InputSignal<InputSize>;
2010
+ readonly label: _angular_core.InputSignal<string>;
2011
+ readonly placeholder: _angular_core.InputSignal<string>;
2012
+ readonly hint: _angular_core.InputSignal<string>;
2013
+ readonly error: _angular_core.InputSignal<string>;
2014
+ readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
2015
+ readonly readonly: _angular_core.InputSignalWithTransform<boolean, unknown>;
2016
+ readonly required: _angular_core.InputSignalWithTransform<boolean, unknown>;
2017
+ readonly showCount: _angular_core.InputSignalWithTransform<boolean, unknown>;
2018
+ readonly inputId: _angular_core.InputSignal<string>;
2019
+ readonly rows: _angular_core.InputSignal<number>;
2020
+ readonly minlength: _angular_core.InputSignal<number | null>;
2021
+ readonly maxlength: _angular_core.InputSignal<number | null>;
2022
+ readonly classOverride: _angular_core.InputSignal<string>;
2023
+ readonly autoResize: _angular_core.InputSignalWithTransform<boolean, unknown>;
2024
+ protected readonly value: _angular_core.WritableSignal<string>;
2025
+ protected readonly _disabled: _angular_core.WritableSignal<boolean>;
1986
2026
  private onChange;
1987
2027
  private onTouched;
1988
- get hasError(): boolean;
1989
- protected computedClasses: _angular_core.Signal<string>;
2028
+ constructor();
2029
+ protected readonly hasError: _angular_core.Signal<boolean>;
2030
+ protected readonly computedClasses: _angular_core.Signal<string>;
1990
2031
  writeValue(value: string): void;
1991
2032
  registerOnChange(fn: (value: string) => void): void;
1992
2033
  registerOnTouched(fn: () => void): void;
@@ -1996,12 +2037,7 @@ declare class TwTextareaComponent implements ControlValueAccessor {
1996
2037
  private adjustHeight;
1997
2038
  focus(): void;
1998
2039
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TwTextareaComponent, never>;
1999
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwTextareaComponent, "tw-textarea", never, { "variant": { "alias": "variant"; "required": false; }; "size": { "alias": "size"; "required": false; }; "label": { "alias": "label"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "hint": { "alias": "hint"; "required": false; }; "error": { "alias": "error"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "readonly": { "alias": "readonly"; "required": false; }; "required": { "alias": "required"; "required": false; }; "showCount": { "alias": "showCount"; "required": false; }; "inputId": { "alias": "inputId"; "required": false; }; "rows": { "alias": "rows"; "required": false; }; "minlength": { "alias": "minlength"; "required": false; }; "maxlength": { "alias": "maxlength"; "required": false; }; "classOverride": { "alias": "classOverride"; "required": false; }; "autoResize": { "alias": "autoResize"; "required": false; }; }, {}, never, never, true, never>;
2000
- static ngAcceptInputType_disabled: unknown;
2001
- static ngAcceptInputType_readonly: unknown;
2002
- static ngAcceptInputType_required: unknown;
2003
- static ngAcceptInputType_showCount: unknown;
2004
- static ngAcceptInputType_autoResize: unknown;
2040
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwTextareaComponent, "tw-textarea", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "hint": { "alias": "hint"; "required": false; "isSignal": true; }; "error": { "alias": "error"; "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; }; "showCount": { "alias": "showCount"; "required": false; "isSignal": true; }; "inputId": { "alias": "inputId"; "required": false; "isSignal": true; }; "rows": { "alias": "rows"; "required": false; "isSignal": true; }; "minlength": { "alias": "minlength"; "required": false; "isSignal": true; }; "maxlength": { "alias": "maxlength"; "required": false; "isSignal": true; }; "classOverride": { "alias": "classOverride"; "required": false; "isSignal": true; }; "autoResize": { "alias": "autoResize"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
2005
2041
  }
2006
2042
 
2007
2043
  declare const TW_INPUT_COMPONENTS: readonly [typeof TwInputComponent, typeof TwTextareaComponent, typeof TwLabelDirective, typeof TwHintDirective, typeof TwErrorDirective, typeof TwInputAffixDirective];
@@ -2034,16 +2070,18 @@ declare class TwCheckboxComponent implements ControlValueAccessor {
2034
2070
  value: any;
2035
2071
  }>;
2036
2072
  protected readonly checked: _angular_core.WritableSignal<boolean>;
2073
+ /** Disabled state set through the forms API (setDisabledState) */
2037
2074
  private readonly _disabled;
2075
+ /** Effective disabled state: the `disabled` input OR the forms API state */
2076
+ protected readonly isDisabled: _angular_core.Signal<boolean>;
2038
2077
  private onChangeFn;
2039
2078
  private onTouchedFn;
2040
- constructor();
2041
2079
  protected readonly labelContainerClasses: _angular_core.Signal<string>;
2042
2080
  protected readonly checkboxClasses: _angular_core.Signal<string>;
2043
2081
  protected readonly labelTextClasses: _angular_core.Signal<string>;
2044
2082
  onCheckboxChange(event: Event): void;
2045
2083
  onInputBlur(event: FocusEvent): void;
2046
- writeValue(value: boolean): void;
2084
+ writeValue(value: boolean | null | undefined): void;
2047
2085
  registerOnChange(fn: (value: boolean) => void): void;
2048
2086
  registerOnTouched(fn: () => void): void;
2049
2087
  setDisabledState(isDisabled: boolean): void;
@@ -2132,6 +2170,8 @@ declare class TwRadioGroupComponent implements ControlValueAccessor, AfterConten
2132
2170
  protected isDisabled: _angular_core.Signal<boolean>;
2133
2171
  protected groupClasses: _angular_core.Signal<string>;
2134
2172
  constructor();
2173
+ /** Marks the control as touched when focus leaves any radio in the group. */
2174
+ onFocusOut(): void;
2135
2175
  ngAfterContentInit(): void;
2136
2176
  private updateRadioButtons;
2137
2177
  private updateRadioButtonsSelection;
@@ -2158,13 +2198,14 @@ declare class TwSwitchComponent implements ControlValueAccessor {
2158
2198
  private readonly twClass;
2159
2199
  readonly variant: _angular_core.InputSignal<SwitchVariant>;
2160
2200
  readonly size: _angular_core.InputSignal<SwitchSize>;
2161
- readonly disabled: _angular_core.InputSignalWithTransform<boolean, string | boolean>;
2201
+ readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
2162
2202
  readonly labelPosition: _angular_core.InputSignal<"left" | "right">;
2163
2203
  readonly classOverride: _angular_core.InputSignal<string>;
2164
2204
  readonly onChange: _angular_core.OutputEmitterRef<boolean>;
2165
2205
  protected readonly checked: _angular_core.WritableSignal<boolean>;
2166
- protected readonly hasLabel = true;
2167
2206
  private readonly _disabled;
2207
+ /** Disabled either via the input or via the forms API (setDisabledState). */
2208
+ protected readonly isDisabled: _angular_core.Signal<boolean>;
2168
2209
  private onChangeFn;
2169
2210
  private onTouchedFn;
2170
2211
  protected readonly containerClasses: _angular_core.Signal<string>;
@@ -2172,7 +2213,7 @@ declare class TwSwitchComponent implements ControlValueAccessor {
2172
2213
  protected readonly thumbClasses: _angular_core.Signal<string>;
2173
2214
  protected readonly labelClasses: _angular_core.Signal<string>;
2174
2215
  toggle(): void;
2175
- writeValue(value: boolean): void;
2216
+ writeValue(value: boolean | null | undefined): void;
2176
2217
  registerOnChange(fn: (value: boolean) => void): void;
2177
2218
  registerOnTouched(fn: () => void): void;
2178
2219
  setDisabledState(isDisabled: boolean): void;
@@ -2203,11 +2244,11 @@ type SelectAppendTo = 'body' | 'self';
2203
2244
  * <tw-select [options]="options" appendTo="body"></tw-select>
2204
2245
  * ```
2205
2246
  */
2206
- declare class TwSelectComponent implements ControlValueAccessor, OnDestroy, AfterViewInit {
2247
+ declare class TwSelectComponent implements ControlValueAccessor, OnDestroy {
2207
2248
  private readonly twClass;
2208
2249
  private readonly elementRef;
2209
- private readonly document;
2210
2250
  private readonly platformId;
2251
+ private readonly ngZone;
2211
2252
  triggerButton: ElementRef<HTMLButtonElement>;
2212
2253
  /** Options to display (flat list) */
2213
2254
  readonly options: _angular_core.InputSignal<SelectOption[]>;
@@ -2242,9 +2283,12 @@ declare class TwSelectComponent implements ControlValueAccessor, OnDestroy, Afte
2242
2283
  /** Additional classes */
2243
2284
  readonly classOverride: _angular_core.InputSignal<string>;
2244
2285
  /**
2245
- * Where to append the dropdown
2246
- * - 'body': Appends dropdown to document body (avoids overflow clipping)
2247
- * - 'self': Keeps dropdown within the component (default)
2286
+ * How the dropdown layer is positioned
2287
+ * - 'body': Renders the dropdown as a fixed-position layer so it escapes
2288
+ * `overflow` clipping from scrollable ancestors (default). Note that an
2289
+ * ancestor with a `transform` or `filter` creates a new containing block
2290
+ * and can offset the layer.
2291
+ * - 'self': Renders the dropdown absolutely positioned within the component
2248
2292
  */
2249
2293
  readonly appendTo: _angular_core.InputSignal<SelectAppendTo>;
2250
2294
  /** Change event */
@@ -2259,16 +2303,18 @@ declare class TwSelectComponent implements ControlValueAccessor, OnDestroy, Afte
2259
2303
  left: number;
2260
2304
  width: number;
2261
2305
  } | null>;
2306
+ /** Index of the keyboard-active option within filteredOptions() */
2307
+ protected activeIndex: _angular_core.WritableSignal<number>;
2262
2308
  private readonly _disabled;
2309
+ protected readonly listboxId: string;
2263
2310
  private onChangeFn;
2264
2311
  private onTouchedFn;
2265
- private portalContainer;
2266
- private scrollListener;
2267
- private resizeListener;
2312
+ private positionListener;
2268
2313
  protected isDisabled: _angular_core.Signal<boolean>;
2269
2314
  protected allOptions: _angular_core.Signal<SelectOption[]>;
2270
2315
  protected selectedOption: _angular_core.Signal<SelectOption | null>;
2271
2316
  protected filteredOptions: _angular_core.Signal<SelectOption[]>;
2317
+ protected activeDescendantId: _angular_core.Signal<string | null>;
2272
2318
  protected filteredGroups: _angular_core.Signal<SelectGroup[]>;
2273
2319
  protected containerClasses: _angular_core.Signal<string>;
2274
2320
  protected labelClasses: _angular_core.Signal<string>;
@@ -2285,8 +2331,7 @@ declare class TwSelectComponent implements ControlValueAccessor, OnDestroy, Afte
2285
2331
  left?: undefined;
2286
2332
  width?: undefined;
2287
2333
  }>;
2288
- protected optionClasses(option: SelectOption): string;
2289
- ngAfterViewInit(): void;
2334
+ protected optionClasses(option: SelectOption, isActive?: boolean): string;
2290
2335
  ngOnDestroy(): void;
2291
2336
  isSelected(option: SelectOption): boolean;
2292
2337
  toggleDropdown(): void;
@@ -2294,12 +2339,12 @@ declare class TwSelectComponent implements ControlValueAccessor, OnDestroy, Afte
2294
2339
  onFilterInput(event: Event): void;
2295
2340
  onKeydown(event: KeyboardEvent): void;
2296
2341
  onDocumentClick(event: MouseEvent): void;
2342
+ private openDropdown;
2343
+ private closeDropdown;
2344
+ private moveActiveIndex;
2297
2345
  private updateDropdownPosition;
2298
- private setupScrollListener;
2299
- private removeScrollListener;
2300
- private setupResizeListener;
2301
- private removeResizeListener;
2302
- private removePortal;
2346
+ private attachPositionListeners;
2347
+ private detachPositionListeners;
2303
2348
  writeValue(value: any): void;
2304
2349
  registerOnChange(fn: (value: any) => void): void;
2305
2350
  registerOnTouched(fn: () => void): void;
@@ -2336,36 +2381,37 @@ type MultiSelectAppendTo = 'body' | 'self';
2336
2381
  */
2337
2382
  declare class TwMultiSelectComponent implements ControlValueAccessor, OnDestroy, AfterViewInit {
2338
2383
  triggerButton: ElementRef<HTMLButtonElement>;
2384
+ filterInput?: ElementRef<HTMLInputElement>;
2339
2385
  /** Options to display (flat list) */
2340
- options: MultiSelectOption[];
2386
+ readonly options: _angular_core.InputSignal<MultiSelectOption[]>;
2341
2387
  /** Grouped options to display */
2342
- groups: MultiSelectGroup[];
2388
+ readonly groups: _angular_core.InputSignal<MultiSelectGroup[]>;
2343
2389
  /** Placeholder text */
2344
- placeholder: string;
2390
+ readonly placeholder: _angular_core.InputSignal<string>;
2345
2391
  /** Label text */
2346
- label: string;
2392
+ readonly label: _angular_core.InputSignal<string>;
2347
2393
  /** Enable search/filter */
2348
- filter: boolean;
2394
+ readonly filter: _angular_core.InputSignalWithTransform<boolean, unknown>;
2349
2395
  /** Size variant */
2350
- size: MultiSelectSize;
2396
+ readonly size: _angular_core.InputSignal<MultiSelectSize>;
2351
2397
  /** Visual variant */
2352
- variant: MultiSelectVariant;
2398
+ readonly variant: _angular_core.InputSignal<MultiSelectVariant>;
2353
2399
  /** Where to append dropdown */
2354
- appendTo: MultiSelectAppendTo;
2400
+ readonly appendTo: _angular_core.InputSignal<MultiSelectAppendTo>;
2355
2401
  /** Disabled state */
2356
- disabled: boolean;
2402
+ readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
2357
2403
  /** Show checkboxes */
2358
- showCheckbox: boolean;
2404
+ readonly showCheckbox: _angular_core.InputSignalWithTransform<boolean, unknown>;
2359
2405
  /** Show select all option */
2360
- showSelectAll: boolean;
2406
+ readonly showSelectAll: _angular_core.InputSignalWithTransform<boolean, unknown>;
2361
2407
  /** Maximum number of selections allowed (0 = unlimited) */
2362
- maxSelections: number;
2408
+ readonly maxSelections: _angular_core.InputSignal<number>;
2363
2409
  /** Custom class for dropdown */
2364
- dropdownClass: string;
2410
+ readonly dropdownClass: _angular_core.InputSignal<string>;
2365
2411
  /** Custom class for trigger button */
2366
- triggerClass: string;
2412
+ readonly triggerClass: _angular_core.InputSignal<string>;
2367
2413
  /** Selection change event */
2368
- selectionChange: EventEmitter<unknown[]>;
2414
+ readonly selectionChange: _angular_core.OutputEmitterRef<unknown[]>;
2369
2415
  protected readonly twClass: TwClassService;
2370
2416
  protected readonly elementRef: ElementRef<any>;
2371
2417
  protected readonly document: Document;
@@ -2378,15 +2424,33 @@ declare class TwMultiSelectComponent implements ControlValueAccessor, OnDestroy,
2378
2424
  left: number;
2379
2425
  width: number;
2380
2426
  } | null>;
2427
+ protected readonly _disabled: _angular_core.WritableSignal<boolean>;
2428
+ protected activeIndex: _angular_core.WritableSignal<number>;
2429
+ protected readonly listboxId: string;
2381
2430
  private onChangeFn;
2382
2431
  private onTouchedFn;
2383
2432
  private clickListener;
2384
2433
  private resizeListener;
2434
+ private scrollListener;
2435
+ constructor();
2385
2436
  protected allOptions: _angular_core.Signal<MultiSelectOption[]>;
2437
+ protected enabledOptions: _angular_core.Signal<MultiSelectOption[]>;
2438
+ /**
2439
+ * The number of enabled options a "Select All" can effectively reach,
2440
+ * capped by maxSelections when set.
2441
+ */
2442
+ protected selectAllTarget: _angular_core.Signal<number>;
2443
+ /** Select All cannot select everything when maxSelections is lower than the option count */
2444
+ protected selectAllLimited: _angular_core.Signal<boolean>;
2445
+ /** Number of currently selected enabled options (ignores disabled pre-selected values) */
2446
+ protected selectedEnabledCount: _angular_core.Signal<number>;
2386
2447
  protected selectedOptions: _angular_core.Signal<MultiSelectOption[]>;
2387
2448
  protected displayText: _angular_core.Signal<string>;
2388
2449
  protected filteredGroups: _angular_core.Signal<MultiSelectGroup[]>;
2389
2450
  protected filteredOptions: _angular_core.Signal<MultiSelectOption[]>;
2451
+ /** Currently visible options in display order (flattened across groups) */
2452
+ protected visibleOptions: _angular_core.Signal<MultiSelectOption[]>;
2453
+ protected activeOptionId: _angular_core.Signal<string | null>;
2390
2454
  protected triggerClasses: _angular_core.Signal<string>;
2391
2455
  protected dropdownClasses: _angular_core.Signal<string>;
2392
2456
  ngAfterViewInit(): void;
@@ -2397,23 +2461,24 @@ declare class TwMultiSelectComponent implements ControlValueAccessor, OnDestroy,
2397
2461
  setDisabledState(isDisabled: boolean): void;
2398
2462
  toggleDropdown(): void;
2399
2463
  openDropdown(): void;
2400
- closeDropdown(): void;
2464
+ closeDropdown(returnFocus?: boolean): void;
2401
2465
  toggleOption(option: MultiSelectOption): void;
2402
2466
  toggleSelectAll(): void;
2403
2467
  isSelected(option: MultiSelectOption): boolean;
2404
2468
  isAllSelected(): boolean;
2405
2469
  isSomeSelected(): boolean;
2470
+ protected isActive(option: MultiSelectOption): boolean;
2471
+ protected optionId(option: MultiSelectOption): string | null;
2406
2472
  clearAll(): void;
2407
2473
  protected onFilterInput(event: Event): void;
2474
+ protected onKeydown(event: KeyboardEvent): void;
2475
+ private moveActiveIndex;
2476
+ private setActiveToEdge;
2408
2477
  protected onEscapePress(): void;
2409
2478
  private onDocumentClick;
2410
2479
  private updateDropdownPosition;
2411
2480
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TwMultiSelectComponent, never>;
2412
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwMultiSelectComponent, "tw-multiselect", never, { "options": { "alias": "options"; "required": false; }; "groups": { "alias": "groups"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "label": { "alias": "label"; "required": false; }; "filter": { "alias": "filter"; "required": false; }; "size": { "alias": "size"; "required": false; }; "variant": { "alias": "variant"; "required": false; }; "appendTo": { "alias": "appendTo"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "showCheckbox": { "alias": "showCheckbox"; "required": false; }; "showSelectAll": { "alias": "showSelectAll"; "required": false; }; "maxSelections": { "alias": "maxSelections"; "required": false; }; "dropdownClass": { "alias": "dropdownClass"; "required": false; }; "triggerClass": { "alias": "triggerClass"; "required": false; }; }, { "selectionChange": "selectionChange"; }, never, never, true, never>;
2413
- static ngAcceptInputType_filter: unknown;
2414
- static ngAcceptInputType_disabled: unknown;
2415
- static ngAcceptInputType_showCheckbox: unknown;
2416
- static ngAcceptInputType_showSelectAll: unknown;
2481
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwMultiSelectComponent, "tw-multiselect", never, { "options": { "alias": "options"; "required": false; "isSignal": true; }; "groups": { "alias": "groups"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "filter": { "alias": "filter"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "appendTo": { "alias": "appendTo"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "showCheckbox": { "alias": "showCheckbox"; "required": false; "isSignal": true; }; "showSelectAll": { "alias": "showSelectAll"; "required": false; "isSignal": true; }; "maxSelections": { "alias": "maxSelections"; "required": false; "isSignal": true; }; "dropdownClass": { "alias": "dropdownClass"; "required": false; "isSignal": true; }; "triggerClass": { "alias": "triggerClass"; "required": false; "isSignal": true; }; }, { "selectionChange": "selectionChange"; }, never, never, true, never>;
2417
2482
  }
2418
2483
 
2419
2484
  type SliderVariant = 'primary' | 'secondary' | 'success' | 'warning' | 'danger';
@@ -2455,6 +2520,8 @@ declare class TwSliderComponent implements ControlValueAccessor {
2455
2520
  readonly showValueBubble: _angular_core.InputSignalWithTransform<boolean, unknown>;
2456
2521
  /** Format function for display value */
2457
2522
  readonly valueFormat: _angular_core.InputSignal<(value: number) => string>;
2523
+ /** ID applied to the range input and referenced by the label */
2524
+ readonly inputId: _angular_core.InputSignal<string>;
2458
2525
  /** Additional classes */
2459
2526
  readonly classOverride: _angular_core.InputSignal<string>;
2460
2527
  /** Change event (fires on mouseup/touchend) */
@@ -2491,7 +2558,7 @@ declare class TwSliderComponent implements ControlValueAccessor {
2491
2558
  registerOnTouched(fn: () => void): void;
2492
2559
  setDisabledState(isDisabled: boolean): void;
2493
2560
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TwSliderComponent, never>;
2494
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwSliderComponent, "tw-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; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "showValue": { "alias": "showValue"; "required": false; "isSignal": true; }; "showMinMax": { "alias": "showMinMax"; "required": false; "isSignal": true; }; "showTicks": { "alias": "showTicks"; "required": false; "isSignal": true; }; "tickCount": { "alias": "tickCount"; "required": false; "isSignal": true; }; "showValueBubble": { "alias": "showValueBubble"; "required": false; "isSignal": true; }; "valueFormat": { "alias": "valueFormat"; "required": false; "isSignal": true; }; "classOverride": { "alias": "classOverride"; "required": false; "isSignal": true; }; }, { "onChange": "onChange"; "onInput": "onInput"; "onFocus": "onFocus"; "onBlur": "onBlur"; }, never, never, true, never>;
2561
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwSliderComponent, "tw-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; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "showValue": { "alias": "showValue"; "required": false; "isSignal": true; }; "showMinMax": { "alias": "showMinMax"; "required": false; "isSignal": true; }; "showTicks": { "alias": "showTicks"; "required": false; "isSignal": true; }; "tickCount": { "alias": "tickCount"; "required": false; "isSignal": true; }; "showValueBubble": { "alias": "showValueBubble"; "required": false; "isSignal": true; }; "valueFormat": { "alias": "valueFormat"; "required": false; "isSignal": true; }; "inputId": { "alias": "inputId"; "required": false; "isSignal": true; }; "classOverride": { "alias": "classOverride"; "required": false; "isSignal": true; }; }, { "onChange": "onChange"; "onInput": "onInput"; "onFocus": "onFocus"; "onBlur": "onBlur"; }, never, never, true, never>;
2495
2562
  }
2496
2563
 
2497
2564
  type RatingVariant = 'primary' | 'warning' | 'danger';
@@ -2503,7 +2570,7 @@ type RatingSize = 'sm' | 'md' | 'lg' | 'xl';
2503
2570
  * ```html
2504
2571
  * <tw-rating [(ngModel)]="rating"></tw-rating>
2505
2572
  * <tw-rating [stars]="10" [allowHalf]="true" variant="warning"></tw-rating>
2506
- * <tw-rating [readonly]="true" [value]="4.5"></tw-rating>
2573
+ * <tw-rating [readonly]="true" [(ngModel)]="rating"></tw-rating>
2507
2574
  * ```
2508
2575
  */
2509
2576
  declare class TwRatingComponent implements ControlValueAccessor {
@@ -2542,11 +2609,15 @@ declare class TwRatingComponent implements ControlValueAccessor {
2542
2609
  protected hoverValue: _angular_core.WritableSignal<number | null>;
2543
2610
  protected starsArray: _angular_core.Signal<number[]>;
2544
2611
  protected containerClasses: _angular_core.Signal<string>;
2545
- getFilledStars(index: number): number;
2612
+ /** Value currently displayed: the hovered value while hovering, otherwise the selected value */
2613
+ protected currentValue: _angular_core.Signal<number>;
2614
+ /** Index of the star that participates in the roving tabindex */
2615
+ protected activeStarIndex: _angular_core.Signal<number>;
2546
2616
  protected starClasses(index: number): string;
2547
2617
  protected iconClasses(): string;
2548
2618
  protected valueClasses(): string;
2549
- onStarClick(index: number): void;
2619
+ onStarClick(index: number, event?: MouseEvent): void;
2620
+ onStarKeydown(event: KeyboardEvent): void;
2550
2621
  onStarHover(index: number): void;
2551
2622
  onStarLeave(): void;
2552
2623
  onInputBlur(event: FocusEvent): void;
@@ -2615,6 +2686,8 @@ declare class TwChipsComponent {
2615
2686
  readonly allowAdd: _angular_core.InputSignalWithTransform<boolean, unknown>;
2616
2687
  readonly field: _angular_core.InputSignal<string>;
2617
2688
  readonly classOverride: _angular_core.InputSignal<string>;
2689
+ /** Accessible name for the text input used to add chips */
2690
+ readonly ariaLabel: _angular_core.InputSignal<string>;
2618
2691
  readonly valuesChange: _angular_core.OutputEmitterRef<any[]>;
2619
2692
  readonly onAdd: _angular_core.OutputEmitterRef<any>;
2620
2693
  readonly onRemove: _angular_core.OutputEmitterRef<{
@@ -2628,7 +2701,7 @@ declare class TwChipsComponent {
2628
2701
  onAddChip(event: Event): void;
2629
2702
  onBackspace(event: Event): void;
2630
2703
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TwChipsComponent, never>;
2631
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwChipsComponent, "tw-chips", never, { "values": { "alias": "values"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "chipStyle": { "alias": "chipStyle"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "allowAdd": { "alias": "allowAdd"; "required": false; "isSignal": true; }; "field": { "alias": "field"; "required": false; "isSignal": true; }; "classOverride": { "alias": "classOverride"; "required": false; "isSignal": true; }; }, { "valuesChange": "valuesChange"; "onAdd": "onAdd"; "onRemove": "onRemove"; }, never, never, true, never>;
2704
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwChipsComponent, "tw-chips", never, { "values": { "alias": "values"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "chipStyle": { "alias": "chipStyle"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "allowAdd": { "alias": "allowAdd"; "required": false; "isSignal": true; }; "field": { "alias": "field"; "required": false; "isSignal": true; }; "classOverride": { "alias": "classOverride"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "valuesChange": "valuesChange"; "onAdd": "onAdd"; "onRemove": "onRemove"; }, never, never, true, never>;
2632
2705
  }
2633
2706
 
2634
2707
  type CardVariant = 'elevated' | 'outlined' | 'filled' | 'ghost';
@@ -2637,62 +2710,62 @@ type CardVariant = 'elevated' | 'outlined' | 'filled' | 'ghost';
2637
2710
  */
2638
2711
  declare class TwCardHeaderDirective {
2639
2712
  private readonly twClass;
2640
- class: string;
2641
- get hostClass(): string;
2713
+ readonly class: _angular_core.InputSignal<string>;
2714
+ protected readonly hostClass: _angular_core.Signal<string>;
2642
2715
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TwCardHeaderDirective, never>;
2643
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<TwCardHeaderDirective, "tw-card-header, [twCardHeader]", never, { "class": { "alias": "class"; "required": false; }; }, {}, never, never, true, never>;
2716
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<TwCardHeaderDirective, "tw-card-header, [twCardHeader]", never, { "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
2644
2717
  }
2645
2718
  /**
2646
2719
  * Card title directive
2647
2720
  */
2648
2721
  declare class TwCardTitleDirective {
2649
2722
  private readonly twClass;
2650
- class: string;
2651
- get hostClass(): string;
2723
+ readonly class: _angular_core.InputSignal<string>;
2724
+ protected readonly hostClass: _angular_core.Signal<string>;
2652
2725
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TwCardTitleDirective, never>;
2653
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<TwCardTitleDirective, "tw-card-title, [twCardTitle]", never, { "class": { "alias": "class"; "required": false; }; }, {}, never, never, true, never>;
2726
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<TwCardTitleDirective, "tw-card-title, [twCardTitle]", never, { "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
2654
2727
  }
2655
2728
  /**
2656
2729
  * Card subtitle directive
2657
2730
  */
2658
2731
  declare class TwCardSubtitleDirective {
2659
2732
  private readonly twClass;
2660
- class: string;
2661
- get hostClass(): string;
2733
+ readonly class: _angular_core.InputSignal<string>;
2734
+ protected readonly hostClass: _angular_core.Signal<string>;
2662
2735
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TwCardSubtitleDirective, never>;
2663
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<TwCardSubtitleDirective, "tw-card-subtitle, [twCardSubtitle]", never, { "class": { "alias": "class"; "required": false; }; }, {}, never, never, true, never>;
2736
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<TwCardSubtitleDirective, "tw-card-subtitle, [twCardSubtitle]", never, { "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
2664
2737
  }
2665
2738
  /**
2666
2739
  * Card body/content directive
2667
2740
  */
2668
2741
  declare class TwCardBodyDirective {
2669
2742
  private readonly twClass;
2670
- class: string;
2671
- get hostClass(): string;
2743
+ readonly class: _angular_core.InputSignal<string>;
2744
+ protected readonly hostClass: _angular_core.Signal<string>;
2672
2745
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TwCardBodyDirective, never>;
2673
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<TwCardBodyDirective, "tw-card-body, [twCardBody]", never, { "class": { "alias": "class"; "required": false; }; }, {}, never, never, true, never>;
2746
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<TwCardBodyDirective, "tw-card-body, [twCardBody]", never, { "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
2674
2747
  }
2675
2748
  /**
2676
2749
  * Card footer directive
2677
2750
  */
2678
2751
  declare class TwCardFooterDirective {
2679
2752
  private readonly twClass;
2680
- class: string;
2681
- get hostClass(): string;
2753
+ readonly class: _angular_core.InputSignal<string>;
2754
+ protected readonly hostClass: _angular_core.Signal<string>;
2682
2755
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TwCardFooterDirective, never>;
2683
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<TwCardFooterDirective, "tw-card-footer, [twCardFooter]", never, { "class": { "alias": "class"; "required": false; }; }, {}, never, never, true, never>;
2756
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<TwCardFooterDirective, "tw-card-footer, [twCardFooter]", never, { "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
2684
2757
  }
2685
2758
  /**
2686
2759
  * Card media/image container directive
2687
2760
  */
2688
2761
  declare class TwCardMediaDirective {
2689
2762
  private readonly twClass;
2690
- class: string;
2763
+ readonly class: _angular_core.InputSignal<string>;
2691
2764
  /** Position of the media (top for header image, full for background) */
2692
- position: 'top' | 'bottom' | 'full';
2693
- get hostClass(): string;
2765
+ readonly position: _angular_core.InputSignal<"top" | "bottom" | "full">;
2766
+ protected readonly hostClass: _angular_core.Signal<string>;
2694
2767
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TwCardMediaDirective, never>;
2695
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<TwCardMediaDirective, "tw-card-media, [twCardMedia]", never, { "class": { "alias": "class"; "required": false; }; "position": { "alias": "position"; "required": false; }; }, {}, never, never, true, never>;
2768
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<TwCardMediaDirective, "tw-card-media, [twCardMedia]", never, { "class": { "alias": "class"; "required": false; "isSignal": true; }; "position": { "alias": "position"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
2696
2769
  }
2697
2770
  /**
2698
2771
  * Highly customizable card component with Tailwind CSS styling
@@ -2724,51 +2797,64 @@ declare class TwCardMediaDirective {
2724
2797
  */
2725
2798
  declare class TwCardComponent {
2726
2799
  private readonly twClass;
2800
+ private readonly elementRef;
2727
2801
  /** Visual variant of the card */
2728
- variant: CardVariant;
2802
+ readonly variant: _angular_core.InputSignal<CardVariant>;
2729
2803
  /** Whether the card should have hover effects */
2730
- hoverable: boolean;
2804
+ readonly hoverable: _angular_core.InputSignalWithTransform<boolean, unknown>;
2731
2805
  /** Whether the card is clickable (adds cursor and focus styles) */
2732
- clickable: boolean;
2806
+ readonly clickable: _angular_core.InputSignalWithTransform<boolean, unknown>;
2733
2807
  /** Whether to add padding to the card (use false when using card-body) */
2734
- padded: boolean;
2808
+ readonly padded: _angular_core.InputSignalWithTransform<boolean, unknown>;
2735
2809
  /** Additional classes to merge with base styles */
2736
- classOverride: string;
2810
+ readonly classOverride: _angular_core.InputSignal<string>;
2737
2811
  /** Complete class override (replaces all default classes) */
2738
- classReplace: string;
2812
+ readonly classReplace: _angular_core.InputSignal<string>;
2739
2813
  protected computedClasses: _angular_core.Signal<string>;
2814
+ protected onKeydown(event: KeyboardEvent): void;
2740
2815
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TwCardComponent, never>;
2741
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwCardComponent, "tw-card", never, { "variant": { "alias": "variant"; "required": false; }; "hoverable": { "alias": "hoverable"; "required": false; }; "clickable": { "alias": "clickable"; "required": false; }; "padded": { "alias": "padded"; "required": false; }; "classOverride": { "alias": "classOverride"; "required": false; }; "classReplace": { "alias": "classReplace"; "required": false; }; }, {}, never, ["*"], true, never>;
2742
- static ngAcceptInputType_hoverable: unknown;
2743
- static ngAcceptInputType_clickable: unknown;
2744
- static ngAcceptInputType_padded: unknown;
2816
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwCardComponent, "tw-card", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "hoverable": { "alias": "hoverable"; "required": false; "isSignal": true; }; "clickable": { "alias": "clickable"; "required": false; "isSignal": true; }; "padded": { "alias": "padded"; "required": false; "isSignal": true; }; "classOverride": { "alias": "classOverride"; "required": false; "isSignal": true; }; "classReplace": { "alias": "classReplace"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
2745
2817
  }
2746
2818
  /**
2747
2819
  * Horizontal card layout component
2748
2820
  */
2749
2821
  declare class TwCardHorizontalComponent {
2750
2822
  private readonly twClass;
2751
- variant: CardVariant;
2752
- classOverride: string;
2823
+ readonly variant: _angular_core.InputSignal<CardVariant>;
2824
+ readonly classOverride: _angular_core.InputSignal<string>;
2753
2825
  protected computedClasses: _angular_core.Signal<string>;
2754
2826
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TwCardHorizontalComponent, never>;
2755
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwCardHorizontalComponent, "tw-card-horizontal", never, { "variant": { "alias": "variant"; "required": false; }; "classOverride": { "alias": "classOverride"; "required": false; }; }, {}, never, ["tw-card-media, [twCardMedia]", "*"], true, never>;
2827
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwCardHorizontalComponent, "tw-card-horizontal", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "classOverride": { "alias": "classOverride"; "required": false; "isSignal": true; }; }, {}, never, ["tw-card-media, [twCardMedia]", "*"], true, never>;
2756
2828
  }
2757
2829
 
2758
2830
  declare const TW_CARD_COMPONENTS: readonly [typeof TwCardComponent, typeof TwCardHorizontalComponent, typeof TwCardHeaderDirective, typeof TwCardTitleDirective, typeof TwCardSubtitleDirective, typeof TwCardBodyDirective, typeof TwCardFooterDirective, typeof TwCardMediaDirective];
2759
2831
 
2832
+ type AccordionVariant = 'default' | 'bordered' | 'separated';
2833
+ /**
2834
+ * Marks projected content as the custom header of an accordion item,
2835
+ * replacing the plain-text `itemTitle`.
2836
+ */
2837
+ declare class TwAccordionHeaderDirective {
2838
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<TwAccordionHeaderDirective, never>;
2839
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<TwAccordionHeaderDirective, "[twAccordionHeader]", never, {}, {}, never, never, true, never>;
2840
+ }
2760
2841
  declare class TwAccordionItemComponent {
2761
2842
  set itemTitle(value: string);
2762
2843
  set open(value: boolean);
2763
2844
  set itemDisabled(value: boolean);
2764
2845
  set value(value: string);
2765
- variant: 'default' | 'bordered' | 'separated';
2846
+ set variant(value: AccordionVariant);
2766
2847
  openChange: EventEmitter<boolean>;
2848
+ protected headerContent?: TwAccordionHeaderDirective;
2767
2849
  protected _title: _angular_core.WritableSignal<string>;
2768
2850
  protected _open: _angular_core.WritableSignal<boolean>;
2769
2851
  protected _disabled: _angular_core.WritableSignal<boolean>;
2770
2852
  protected _value: _angular_core.WritableSignal<string>;
2771
- hasHeaderContent: boolean;
2853
+ protected _variant: _angular_core.WritableSignal<AccordionVariant>;
2854
+ protected readonly itemId: string;
2855
+ protected readonly headerId: string;
2856
+ protected readonly panelId: string;
2857
+ get hasHeaderContent(): boolean;
2772
2858
  protected itemTitleValue: _angular_core.Signal<string>;
2773
2859
  protected isOpen: _angular_core.Signal<boolean>;
2774
2860
  protected isDisabled: _angular_core.Signal<boolean>;
@@ -2780,17 +2866,22 @@ declare class TwAccordionItemComponent {
2780
2866
  protected iconClasses: _angular_core.Signal<string>;
2781
2867
  protected contentClasses: _angular_core.Signal<string>;
2782
2868
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TwAccordionItemComponent, never>;
2783
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwAccordionItemComponent, "tw-accordion-item", never, { "itemTitle": { "alias": "itemTitle"; "required": false; }; "open": { "alias": "open"; "required": false; }; "itemDisabled": { "alias": "itemDisabled"; "required": false; }; "value": { "alias": "value"; "required": false; }; "variant": { "alias": "variant"; "required": false; }; }, { "openChange": "openChange"; }, never, ["[twAccordionHeader]", "*"], true, never>;
2869
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwAccordionItemComponent, "tw-accordion-item", never, { "itemTitle": { "alias": "itemTitle"; "required": false; }; "open": { "alias": "open"; "required": false; }; "itemDisabled": { "alias": "itemDisabled"; "required": false; }; "value": { "alias": "value"; "required": false; }; "variant": { "alias": "variant"; "required": false; }; }, { "openChange": "openChange"; }, ["headerContent"], ["[twAccordionHeader]", "*"], true, never>;
2784
2870
  }
2785
2871
  declare class TwAccordionComponent implements AfterContentInit {
2786
2872
  set allowMultiple(value: boolean);
2787
- set variant(value: 'default' | 'bordered' | 'separated');
2873
+ set variant(value: AccordionVariant);
2788
2874
  set defaultValue(value: string | string[]);
2789
2875
  items: QueryList<TwAccordionItemComponent>;
2790
2876
  protected _allowMultiple: _angular_core.WritableSignal<boolean>;
2791
- protected _variant: _angular_core.WritableSignal<"default" | "bordered" | "separated">;
2877
+ protected _variant: _angular_core.WritableSignal<AccordionVariant>;
2792
2878
  protected _defaultValue: _angular_core.WritableSignal<string | string[]>;
2879
+ private readonly destroyRef;
2880
+ private readonly initializedItems;
2881
+ private itemSubscriptions;
2882
+ constructor();
2793
2883
  ngAfterContentInit(): void;
2884
+ private wireItems;
2794
2885
  protected accordionClasses: _angular_core.Signal<string>;
2795
2886
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TwAccordionComponent, never>;
2796
2887
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwAccordionComponent, "tw-accordion", never, { "allowMultiple": { "alias": "allowMultiple"; "required": false; }; "variant": { "alias": "variant"; "required": false; }; "defaultValue": { "alias": "defaultValue"; "required": false; }; }, {}, ["items"], ["*"], true, never>;
@@ -2805,26 +2896,29 @@ type TabsOrientation = 'horizontal' | 'vertical';
2805
2896
  declare class TwTabPanelComponent {
2806
2897
  private readonly twClass;
2807
2898
  /** Unique identifier for this tab */
2808
- value: string;
2899
+ readonly value: _angular_core.InputSignal<string>;
2809
2900
  /** Label for the tab (if not using template) */
2810
- label: string;
2901
+ readonly label: _angular_core.InputSignal<string>;
2811
2902
  /** Whether the tab is disabled */
2812
- disabled: boolean;
2903
+ readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
2813
2904
  /** Icon to show before the label */
2814
- icon: string;
2815
- /** Whether to lazy load the content */
2816
- lazy: boolean;
2905
+ readonly icon: _angular_core.InputSignal<string>;
2906
+ /** Whether to lazy load the content (rendered on first activation, then kept) */
2907
+ readonly lazy: _angular_core.InputSignalWithTransform<boolean, unknown>;
2817
2908
  /** Additional panel classes */
2818
- panelClass: string;
2819
- /** Whether this panel is active */
2820
- active: boolean;
2821
- /** ID of the tab that labels this panel */
2822
- labelledBy: string;
2909
+ readonly panelClass: _angular_core.InputSignal<string>;
2910
+ /** Whether this panel is active (managed by the parent tabs component) */
2911
+ readonly active: _angular_core.WritableSignal<boolean>;
2912
+ /** ID of the tab that labels this panel (managed by the parent tabs component) */
2913
+ readonly labelledBy: _angular_core.WritableSignal<string>;
2914
+ /** Whether activation should animate (synced from the parent tabs component) */
2915
+ readonly animated: _angular_core.WritableSignal<boolean>;
2916
+ /** Once a lazy panel has been activated its content stays rendered (hidden via [hidden]) */
2917
+ protected readonly hasBeenActive: _angular_core.WritableSignal<boolean>;
2918
+ private readonly trackActivation;
2823
2919
  protected computedClasses: _angular_core.Signal<string>;
2824
2920
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TwTabPanelComponent, never>;
2825
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwTabPanelComponent, "tw-tab-panel", never, { "value": { "alias": "value"; "required": false; }; "label": { "alias": "label"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "icon": { "alias": "icon"; "required": false; }; "lazy": { "alias": "lazy"; "required": false; }; "panelClass": { "alias": "panelClass"; "required": false; }; }, {}, never, ["*"], true, never>;
2826
- static ngAcceptInputType_disabled: unknown;
2827
- static ngAcceptInputType_lazy: unknown;
2921
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwTabPanelComponent, "tw-tab-panel", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "lazy": { "alias": "lazy"; "required": false; "isSignal": true; }; "panelClass": { "alias": "panelClass"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
2828
2922
  }
2829
2923
  /**
2830
2924
  * Tabs component for organizing content into switchable panels
@@ -2847,22 +2941,23 @@ declare class TwTabPanelComponent {
2847
2941
  declare class TwTabsComponent implements AfterContentInit {
2848
2942
  private readonly twClass;
2849
2943
  tabPanels: QueryList<TwTabPanelComponent>;
2944
+ private readonly tabButtons;
2850
2945
  /** Currently active tab value */
2851
2946
  value: string;
2852
2947
  /** Visual variant */
2853
- variant: TabsVariant;
2948
+ readonly variant: _angular_core.InputSignal<TabsVariant>;
2854
2949
  /** Size of the tabs */
2855
- size: TabsSize;
2950
+ readonly size: _angular_core.InputSignal<TabsSize>;
2856
2951
  /** Orientation of the tabs */
2857
- orientation: TabsOrientation;
2952
+ readonly orientation: _angular_core.InputSignal<TabsOrientation>;
2858
2953
  /** Whether the tab list should be full width */
2859
- fullWidth: boolean;
2954
+ readonly fullWidth: _angular_core.InputSignalWithTransform<boolean, unknown>;
2860
2955
  /** Whether to animate panel transitions */
2861
- animated: boolean;
2956
+ readonly animated: _angular_core.InputSignalWithTransform<boolean, unknown>;
2862
2957
  /** Additional tab list classes */
2863
- tabListClass: string;
2958
+ readonly tabListClass: _angular_core.InputSignal<string>;
2864
2959
  /** Additional panels container classes */
2865
- panelsClass: string;
2960
+ readonly panelsClass: _angular_core.InputSignal<string>;
2866
2961
  /** Value change event */
2867
2962
  valueChange: EventEmitter<string>;
2868
2963
  /** Tab change event with previous and current values */
@@ -2883,9 +2978,7 @@ declare class TwTabsComponent implements AfterContentInit {
2883
2978
  /** Get the currently active panel */
2884
2979
  getActivePanel(): TwTabPanelComponent | undefined;
2885
2980
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TwTabsComponent, never>;
2886
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwTabsComponent, "tw-tabs", never, { "value": { "alias": "value"; "required": false; }; "variant": { "alias": "variant"; "required": false; }; "size": { "alias": "size"; "required": false; }; "orientation": { "alias": "orientation"; "required": false; }; "fullWidth": { "alias": "fullWidth"; "required": false; }; "animated": { "alias": "animated"; "required": false; }; "tabListClass": { "alias": "tabListClass"; "required": false; }; "panelsClass": { "alias": "panelsClass"; "required": false; }; }, { "valueChange": "valueChange"; "tabChange": "tabChange"; }, ["tabPanels"], ["*"], true, never>;
2887
- static ngAcceptInputType_fullWidth: unknown;
2888
- static ngAcceptInputType_animated: unknown;
2981
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwTabsComponent, "tw-tabs", never, { "value": { "alias": "value"; "required": false; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; "fullWidth": { "alias": "fullWidth"; "required": false; "isSignal": true; }; "animated": { "alias": "animated"; "required": false; "isSignal": true; }; "tabListClass": { "alias": "tabListClass"; "required": false; "isSignal": true; }; "panelsClass": { "alias": "panelsClass"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; "tabChange": "tabChange"; }, ["tabPanels"], ["*"], true, never>;
2889
2982
  }
2890
2983
 
2891
2984
  declare const TW_TABS_COMPONENTS: readonly [typeof TwTabsComponent, typeof TwTabPanelComponent];
@@ -2935,20 +3028,19 @@ type ContainerSize = 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 'full' | 'prose';
2935
3028
  declare class TwContainerComponent {
2936
3029
  private readonly twClass;
2937
3030
  /** Maximum width of the container */
2938
- size: ContainerSize;
3031
+ readonly size: _angular_core.InputSignal<ContainerSize>;
2939
3032
  /** Whether to center the container horizontally */
2940
- centered: boolean;
3033
+ readonly centered: _angular_core.InputSignalWithTransform<boolean, unknown>;
2941
3034
  /** Horizontal padding */
2942
- padding: 'none' | 'sm' | 'md' | 'lg';
3035
+ readonly padding: _angular_core.InputSignal<"none" | "sm" | "md" | "lg">;
2943
3036
  /**
2944
3037
  * Additional CSS classes. Signal input so a bound `[class]` survives Angular's
2945
3038
  * special class-binding handling and re-renders the inner element on change.
2946
3039
  */
2947
3040
  readonly class: _angular_core.InputSignal<string>;
2948
- constructor(twClass: TwClassService);
2949
- protected containerClasses(): string;
3041
+ protected readonly containerClasses: _angular_core.Signal<string>;
2950
3042
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TwContainerComponent, never>;
2951
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwContainerComponent, "tw-container", never, { "size": { "alias": "size"; "required": false; }; "centered": { "alias": "centered"; "required": false; }; "padding": { "alias": "padding"; "required": false; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
3043
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwContainerComponent, "tw-container", never, { "size": { "alias": "size"; "required": false; "isSignal": true; }; "centered": { "alias": "centered"; "required": false; "isSignal": true; }; "padding": { "alias": "padding"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
2952
3044
  }
2953
3045
 
2954
3046
  type StackDirection = 'vertical' | 'horizontal' | 'vertical-reverse' | 'horizontal-reverse';
@@ -2977,52 +3069,49 @@ type StackJustify = 'start' | 'center' | 'end' | 'between' | 'around' | 'evenly'
2977
3069
  declare class TwStackComponent {
2978
3070
  private readonly twClass;
2979
3071
  /** Direction of the stack */
2980
- direction: StackDirection;
3072
+ readonly direction: _angular_core.InputSignal<StackDirection>;
2981
3073
  /** Spacing between items */
2982
- spacing: StackSpacing;
3074
+ readonly spacing: _angular_core.InputSignal<StackSpacing>;
2983
3075
  /** Alignment of items (perpendicular to direction) */
2984
- align: StackAlign;
3076
+ readonly align: _angular_core.InputSignal<StackAlign>;
2985
3077
  /** Justification of items (along direction) */
2986
- justify: StackJustify;
3078
+ readonly justify: _angular_core.InputSignal<StackJustify>;
2987
3079
  /** Whether items should wrap */
2988
- wrap: boolean;
3080
+ readonly wrap: _angular_core.InputSignal<boolean>;
2989
3081
  /** Whether to take full width */
2990
- fullWidth: boolean;
3082
+ readonly fullWidth: _angular_core.InputSignal<boolean>;
2991
3083
  /** Additional CSS classes */
2992
- class: string;
2993
- constructor(twClass: TwClassService);
2994
- protected stackClasses(): string;
3084
+ readonly class: _angular_core.InputSignal<string>;
3085
+ protected readonly stackClasses: _angular_core.Signal<string>;
2995
3086
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TwStackComponent, never>;
2996
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwStackComponent, "tw-stack", never, { "direction": { "alias": "direction"; "required": false; }; "spacing": { "alias": "spacing"; "required": false; }; "align": { "alias": "align"; "required": false; }; "justify": { "alias": "justify"; "required": false; }; "wrap": { "alias": "wrap"; "required": false; }; "fullWidth": { "alias": "fullWidth"; "required": false; }; "class": { "alias": "class"; "required": false; }; }, {}, never, ["*"], true, never>;
3087
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwStackComponent, "tw-stack", never, { "direction": { "alias": "direction"; "required": false; "isSignal": true; }; "spacing": { "alias": "spacing"; "required": false; "isSignal": true; }; "align": { "alias": "align"; "required": false; "isSignal": true; }; "justify": { "alias": "justify"; "required": false; "isSignal": true; }; "wrap": { "alias": "wrap"; "required": false; "isSignal": true; }; "fullWidth": { "alias": "fullWidth"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
2997
3088
  }
2998
3089
  /**
2999
3090
  * VStack component - shorthand for vertical Stack
3000
3091
  */
3001
3092
  declare class TwVStackComponent {
3002
3093
  private readonly twClass;
3003
- spacing: StackSpacing;
3004
- align: StackAlign;
3005
- justify: StackJustify;
3006
- class: string;
3007
- constructor(twClass: TwClassService);
3008
- protected stackClasses(): string;
3094
+ readonly spacing: _angular_core.InputSignal<StackSpacing>;
3095
+ readonly align: _angular_core.InputSignal<StackAlign>;
3096
+ readonly justify: _angular_core.InputSignal<StackJustify>;
3097
+ readonly class: _angular_core.InputSignal<string>;
3098
+ protected readonly stackClasses: _angular_core.Signal<string>;
3009
3099
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TwVStackComponent, never>;
3010
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwVStackComponent, "tw-vstack", never, { "spacing": { "alias": "spacing"; "required": false; }; "align": { "alias": "align"; "required": false; }; "justify": { "alias": "justify"; "required": false; }; "class": { "alias": "class"; "required": false; }; }, {}, never, ["*"], true, never>;
3100
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwVStackComponent, "tw-vstack", never, { "spacing": { "alias": "spacing"; "required": false; "isSignal": true; }; "align": { "alias": "align"; "required": false; "isSignal": true; }; "justify": { "alias": "justify"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
3011
3101
  }
3012
3102
  /**
3013
3103
  * HStack component - shorthand for horizontal Stack
3014
3104
  */
3015
3105
  declare class TwHStackComponent {
3016
3106
  private readonly twClass;
3017
- spacing: StackSpacing;
3018
- align: StackAlign;
3019
- justify: StackJustify;
3020
- wrap: boolean;
3021
- class: string;
3022
- constructor(twClass: TwClassService);
3023
- protected stackClasses(): string;
3107
+ readonly spacing: _angular_core.InputSignal<StackSpacing>;
3108
+ readonly align: _angular_core.InputSignal<StackAlign>;
3109
+ readonly justify: _angular_core.InputSignal<StackJustify>;
3110
+ readonly wrap: _angular_core.InputSignal<boolean>;
3111
+ readonly class: _angular_core.InputSignal<string>;
3112
+ protected readonly stackClasses: _angular_core.Signal<string>;
3024
3113
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TwHStackComponent, never>;
3025
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwHStackComponent, "tw-hstack", never, { "spacing": { "alias": "spacing"; "required": false; }; "align": { "alias": "align"; "required": false; }; "justify": { "alias": "justify"; "required": false; }; "wrap": { "alias": "wrap"; "required": false; }; "class": { "alias": "class"; "required": false; }; }, {}, never, ["*"], true, never>;
3114
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwHStackComponent, "tw-hstack", never, { "spacing": { "alias": "spacing"; "required": false; "isSignal": true; }; "align": { "alias": "align"; "required": false; "isSignal": true; }; "justify": { "alias": "justify"; "required": false; "isSignal": true; }; "wrap": { "alias": "wrap"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
3026
3115
  }
3027
3116
 
3028
3117
  type GridCols = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 'none' | 'auto';
@@ -3051,30 +3140,29 @@ type GridGap = 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';
3051
3140
  declare class TwGridComponent {
3052
3141
  private readonly twClass;
3053
3142
  /** Number of columns (base) */
3054
- cols: GridCols;
3143
+ readonly cols: _angular_core.InputSignal<GridCols>;
3055
3144
  /** Number of columns at sm breakpoint */
3056
- colsSm?: GridCols;
3145
+ readonly colsSm: _angular_core.InputSignal<GridCols | undefined>;
3057
3146
  /** Number of columns at md breakpoint */
3058
- colsMd?: GridCols;
3147
+ readonly colsMd: _angular_core.InputSignal<GridCols | undefined>;
3059
3148
  /** Number of columns at lg breakpoint */
3060
- colsLg?: GridCols;
3149
+ readonly colsLg: _angular_core.InputSignal<GridCols | undefined>;
3061
3150
  /** Number of columns at xl breakpoint */
3062
- colsXl?: GridCols;
3151
+ readonly colsXl: _angular_core.InputSignal<GridCols | undefined>;
3063
3152
  /** Gap between items */
3064
- gap: GridGap;
3153
+ readonly gap: _angular_core.InputSignal<GridGap>;
3065
3154
  /** Row gap (if different from column gap) */
3066
- rowGap?: GridGap;
3155
+ readonly rowGap: _angular_core.InputSignal<GridGap | undefined>;
3067
3156
  /** Column gap (if different from row gap) */
3068
- colGap?: GridGap;
3157
+ readonly colGap: _angular_core.InputSignal<GridGap | undefined>;
3069
3158
  /**
3070
3159
  * Additional CSS classes. Signal input so a bound `[class]` survives Angular's
3071
3160
  * special class-binding handling and re-renders the inner element on change.
3072
3161
  */
3073
3162
  readonly class: _angular_core.InputSignal<string>;
3074
- constructor(twClass: TwClassService);
3075
- protected gridClasses(): string;
3163
+ protected readonly gridClasses: _angular_core.Signal<string>;
3076
3164
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TwGridComponent, never>;
3077
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwGridComponent, "tw-grid", never, { "cols": { "alias": "cols"; "required": false; }; "colsSm": { "alias": "colsSm"; "required": false; }; "colsMd": { "alias": "colsMd"; "required": false; }; "colsLg": { "alias": "colsLg"; "required": false; }; "colsXl": { "alias": "colsXl"; "required": false; }; "gap": { "alias": "gap"; "required": false; }; "rowGap": { "alias": "rowGap"; "required": false; }; "colGap": { "alias": "colGap"; "required": false; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
3165
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwGridComponent, "tw-grid", never, { "cols": { "alias": "cols"; "required": false; "isSignal": true; }; "colsSm": { "alias": "colsSm"; "required": false; "isSignal": true; }; "colsMd": { "alias": "colsMd"; "required": false; "isSignal": true; }; "colsLg": { "alias": "colsLg"; "required": false; "isSignal": true; }; "colsXl": { "alias": "colsXl"; "required": false; "isSignal": true; }; "gap": { "alias": "gap"; "required": false; "isSignal": true; }; "rowGap": { "alias": "rowGap"; "required": false; "isSignal": true; }; "colGap": { "alias": "colGap"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
3078
3166
  }
3079
3167
  /**
3080
3168
  * SimpleGrid component for auto-fit grid layouts with minimum column width.
@@ -3091,19 +3179,18 @@ declare class TwGridComponent {
3091
3179
  declare class TwSimpleGridComponent {
3092
3180
  private readonly twClass;
3093
3181
  /** Minimum width of each child (e.g., '200px', '15rem') */
3094
- minChildWidth: string;
3182
+ readonly minChildWidth: _angular_core.InputSignal<string>;
3095
3183
  /** Gap between items */
3096
- gap: GridGap;
3184
+ readonly gap: _angular_core.InputSignal<GridGap>;
3097
3185
  /**
3098
3186
  * Additional CSS classes. Signal input so a bound `[class]` survives Angular's
3099
3187
  * special class-binding handling and re-renders the inner element on change.
3100
3188
  */
3101
3189
  readonly class: _angular_core.InputSignal<string>;
3102
- constructor(twClass: TwClassService);
3103
- protected gridClasses(): string;
3104
- protected gridTemplateColumns(): string;
3190
+ protected readonly gridClasses: _angular_core.Signal<string>;
3191
+ protected readonly gridTemplateColumns: _angular_core.Signal<string>;
3105
3192
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TwSimpleGridComponent, never>;
3106
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwSimpleGridComponent, "tw-simple-grid", never, { "minChildWidth": { "alias": "minChildWidth"; "required": false; }; "gap": { "alias": "gap"; "required": false; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
3193
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwSimpleGridComponent, "tw-simple-grid", never, { "minChildWidth": { "alias": "minChildWidth"; "required": false; "isSignal": true; }; "gap": { "alias": "gap"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
3107
3194
  }
3108
3195
 
3109
3196
  type AspectRatioPreset = 'square' | 'video' | 'portrait' | 'wide' | 'ultrawide' | 'custom';
@@ -3126,16 +3213,15 @@ type AspectRatioPreset = 'square' | 'video' | 'portrait' | 'wide' | 'ultrawide'
3126
3213
  declare class TwAspectRatioComponent {
3127
3214
  private readonly twClass;
3128
3215
  /** Preset aspect ratio */
3129
- ratio: AspectRatioPreset;
3216
+ readonly ratio: _angular_core.InputSignal<AspectRatioPreset>;
3130
3217
  /** Custom ratio value (e.g., 16/9 or 1.777) - used when ratio is 'custom' */
3131
- customRatio?: number;
3218
+ readonly customRatio: _angular_core.InputSignal<number | undefined>;
3132
3219
  /** Additional CSS classes */
3133
- class: string;
3134
- constructor(twClass: TwClassService);
3135
- protected containerClasses(): string;
3136
- protected computedRatio(): string | null;
3220
+ readonly class: _angular_core.InputSignal<string>;
3221
+ protected readonly containerClasses: _angular_core.Signal<string>;
3222
+ protected readonly computedRatio: _angular_core.Signal<string | null>;
3137
3223
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TwAspectRatioComponent, never>;
3138
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwAspectRatioComponent, "tw-aspect-ratio", never, { "ratio": { "alias": "ratio"; "required": false; }; "customRatio": { "alias": "customRatio"; "required": false; }; "class": { "alias": "class"; "required": false; }; }, {}, never, ["*"], true, never>;
3224
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwAspectRatioComponent, "tw-aspect-ratio", never, { "ratio": { "alias": "ratio"; "required": false; "isSignal": true; }; "customRatio": { "alias": "customRatio"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
3139
3225
  }
3140
3226
 
3141
3227
  /**
@@ -3157,17 +3243,16 @@ declare class TwAspectRatioComponent {
3157
3243
  declare class TwCenterComponent {
3158
3244
  private readonly twClass;
3159
3245
  /** Use inline-flex instead of flex */
3160
- inline: boolean;
3161
- /** Center only horizontally */
3162
- horizontal: boolean;
3163
- /** Center only vertically */
3164
- vertical: boolean;
3246
+ readonly inline: _angular_core.InputSignalWithTransform<boolean, unknown>;
3247
+ /** Apply horizontal centering (justify-center); combines with `vertical` */
3248
+ readonly horizontal: _angular_core.InputSignalWithTransform<boolean, unknown>;
3249
+ /** Apply vertical centering (items-center); combines with `horizontal` */
3250
+ readonly vertical: _angular_core.InputSignalWithTransform<boolean, unknown>;
3165
3251
  /** Additional CSS classes */
3166
- class: string;
3167
- constructor(twClass: TwClassService);
3168
- protected centerClasses(): string;
3252
+ readonly class: _angular_core.InputSignal<string>;
3253
+ protected readonly centerClasses: _angular_core.Signal<string>;
3169
3254
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TwCenterComponent, never>;
3170
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwCenterComponent, "tw-center", never, { "inline": { "alias": "inline"; "required": false; }; "horizontal": { "alias": "horizontal"; "required": false; }; "vertical": { "alias": "vertical"; "required": false; }; "class": { "alias": "class"; "required": false; }; }, {}, never, ["*"], true, never>;
3255
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwCenterComponent, "tw-center", never, { "inline": { "alias": "inline"; "required": false; "isSignal": true; }; "horizontal": { "alias": "horizontal"; "required": false; "isSignal": true; }; "vertical": { "alias": "vertical"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
3171
3256
  }
3172
3257
  /**
3173
3258
  * Square component for creating square-shaped containers.
@@ -3183,15 +3268,14 @@ declare class TwCenterComponent {
3183
3268
  declare class TwSquareComponent {
3184
3269
  private readonly twClass;
3185
3270
  /** Size of the square (e.g., '64px', '4rem') */
3186
- size: string;
3271
+ readonly size: _angular_core.InputSignal<string>;
3187
3272
  /** Whether to center the content */
3188
- centerContent: boolean;
3273
+ readonly centerContent: _angular_core.InputSignalWithTransform<boolean, unknown>;
3189
3274
  /** Additional CSS classes */
3190
- class: string;
3191
- constructor(twClass: TwClassService);
3192
- protected squareClasses(): string;
3275
+ readonly class: _angular_core.InputSignal<string>;
3276
+ protected readonly squareClasses: _angular_core.Signal<string>;
3193
3277
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TwSquareComponent, never>;
3194
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwSquareComponent, "tw-square", never, { "size": { "alias": "size"; "required": false; }; "centerContent": { "alias": "centerContent"; "required": false; }; "class": { "alias": "class"; "required": false; }; }, {}, never, ["*"], true, never>;
3278
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwSquareComponent, "tw-square", never, { "size": { "alias": "size"; "required": false; "isSignal": true; }; "centerContent": { "alias": "centerContent"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
3195
3279
  }
3196
3280
  /**
3197
3281
  * Circle component for creating circular containers.
@@ -3206,15 +3290,14 @@ declare class TwSquareComponent {
3206
3290
  declare class TwCircleComponent {
3207
3291
  private readonly twClass;
3208
3292
  /** Size of the circle (e.g., '64px', '4rem') */
3209
- size: string;
3293
+ readonly size: _angular_core.InputSignal<string>;
3210
3294
  /** Whether to center the content */
3211
- centerContent: boolean;
3295
+ readonly centerContent: _angular_core.InputSignalWithTransform<boolean, unknown>;
3212
3296
  /** Additional CSS classes */
3213
- class: string;
3214
- constructor(twClass: TwClassService);
3215
- protected circleClasses(): string;
3297
+ readonly class: _angular_core.InputSignal<string>;
3298
+ protected readonly circleClasses: _angular_core.Signal<string>;
3216
3299
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TwCircleComponent, never>;
3217
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwCircleComponent, "tw-circle", never, { "size": { "alias": "size"; "required": false; }; "centerContent": { "alias": "centerContent"; "required": false; }; "class": { "alias": "class"; "required": false; }; }, {}, never, ["*"], true, never>;
3300
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwCircleComponent, "tw-circle", never, { "size": { "alias": "size"; "required": false; "isSignal": true; }; "centerContent": { "alias": "centerContent"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
3218
3301
  }
3219
3302
 
3220
3303
  type SpacerSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | '3xl' | 'auto';
@@ -3238,18 +3321,17 @@ type SpacerSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | '3xl' | 'auto';
3238
3321
  declare class TwSpacerComponent {
3239
3322
  private readonly twClass;
3240
3323
  /** Direction of the space */
3241
- axis: 'horizontal' | 'vertical';
3324
+ readonly axis: _angular_core.InputSignal<"horizontal" | "vertical">;
3242
3325
  /** Size of the space (or 'auto' for flexible space in flex containers) */
3243
- size: SpacerSize;
3326
+ readonly size: _angular_core.InputSignal<SpacerSize>;
3244
3327
  /**
3245
3328
  * Additional CSS classes. Signal input so a bound `[class]` survives Angular's
3246
3329
  * special class-binding handling and re-renders the inner element on change.
3247
3330
  */
3248
3331
  readonly class: _angular_core.InputSignal<string>;
3249
- constructor(twClass: TwClassService);
3250
- protected spacerClasses(): string;
3332
+ protected spacerClasses: _angular_core.Signal<string>;
3251
3333
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TwSpacerComponent, never>;
3252
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwSpacerComponent, "tw-spacer", never, { "axis": { "alias": "axis"; "required": false; }; "size": { "alias": "size"; "required": false; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
3334
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwSpacerComponent, "tw-spacer", never, { "axis": { "alias": "axis"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
3253
3335
  }
3254
3336
  /**
3255
3337
  * Wrap component for wrapping flex items with consistent spacing.
@@ -3266,20 +3348,19 @@ declare class TwSpacerComponent {
3266
3348
  declare class TwWrapComponent {
3267
3349
  private readonly twClass;
3268
3350
  /** Spacing between items */
3269
- spacing: SpacerSize;
3351
+ readonly spacing: _angular_core.InputSignal<SpacerSize>;
3270
3352
  /** Alignment of items */
3271
- align: 'start' | 'center' | 'end';
3353
+ readonly align: _angular_core.InputSignal<"center" | "end" | "start">;
3272
3354
  /** Justification of items */
3273
- justify: 'start' | 'center' | 'end' | 'between' | 'around' | 'evenly';
3355
+ readonly justify: _angular_core.InputSignal<"center" | "end" | "start" | "between" | "around" | "evenly">;
3274
3356
  /**
3275
3357
  * Additional CSS classes. Signal input so a bound `[class]` survives Angular's
3276
3358
  * special class-binding handling and re-renders the inner element on change.
3277
3359
  */
3278
3360
  readonly class: _angular_core.InputSignal<string>;
3279
- constructor(twClass: TwClassService);
3280
- protected wrapClasses(): string;
3361
+ protected wrapClasses: _angular_core.Signal<string>;
3281
3362
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TwWrapComponent, never>;
3282
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwWrapComponent, "tw-wrap", never, { "spacing": { "alias": "spacing"; "required": false; }; "align": { "alias": "align"; "required": false; }; "justify": { "alias": "justify"; "required": false; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
3363
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwWrapComponent, "tw-wrap", never, { "spacing": { "alias": "spacing"; "required": false; "isSignal": true; }; "align": { "alias": "align"; "required": false; "isSignal": true; }; "justify": { "alias": "justify"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
3283
3364
  }
3284
3365
 
3285
3366
  type SplitterDirection = 'horizontal' | 'vertical';
@@ -3287,18 +3368,22 @@ type SplitterGutterSize = 'sm' | 'md' | 'lg';
3287
3368
  /**
3288
3369
  * Splitter component for creating resizable split pane layouts.
3289
3370
  *
3371
+ * Mark the two panes with the `twSplitterPaneStart` and `twSplitterPaneEnd`
3372
+ * attributes. Content marked with the plain `twSplitterPane` attribute (or a
3373
+ * `tw-splitter-pane` element) is projected into the first pane.
3374
+ *
3290
3375
  * @example
3291
3376
  * ```html
3292
3377
  * <!-- Horizontal split -->
3293
3378
  * <tw-splitter direction="horizontal" [initialSizes]="[30, 70]">
3294
- * <div twSplitterPane>Left Panel</div>
3295
- * <div twSplitterPane>Right Panel</div>
3379
+ * <div twSplitterPaneStart>Left Panel</div>
3380
+ * <div twSplitterPaneEnd>Right Panel</div>
3296
3381
  * </tw-splitter>
3297
3382
  *
3298
3383
  * <!-- Vertical split with min sizes -->
3299
3384
  * <tw-splitter direction="vertical" [minSizes]="[100, 200]">
3300
- * <div twSplitterPane>Top Panel</div>
3301
- * <div twSplitterPane>Bottom Panel</div>
3385
+ * <div twSplitterPaneStart>Top Panel</div>
3386
+ * <div twSplitterPaneEnd>Bottom Panel</div>
3302
3387
  * </tw-splitter>
3303
3388
  * ```
3304
3389
  */
@@ -3307,19 +3392,19 @@ declare class TwSplitterComponent implements AfterViewInit, OnDestroy {
3307
3392
  containerRef: ElementRef<HTMLElement>;
3308
3393
  gutterRef: ElementRef<HTMLElement>;
3309
3394
  /** Direction of the split */
3310
- direction: SplitterDirection;
3395
+ readonly direction: _angular_core.InputSignal<SplitterDirection>;
3311
3396
  /** Initial sizes as percentages (should sum to 100) */
3312
- initialSizes: [number, number];
3397
+ readonly initialSizes: _angular_core.InputSignal<[number, number]>;
3313
3398
  /** Minimum sizes in pixels for each pane */
3314
- minSizes: [number, number];
3399
+ readonly minSizes: _angular_core.InputSignal<[number, number]>;
3315
3400
  /** Size of the gutter */
3316
- gutterSize: SplitterGutterSize;
3401
+ readonly gutterSize: _angular_core.InputSignal<SplitterGutterSize>;
3317
3402
  /** Whether the splitter is disabled */
3318
- disabled: boolean;
3403
+ readonly disabled: _angular_core.InputSignal<boolean>;
3319
3404
  /** Whether to show visual gutter */
3320
- showGutter: boolean;
3405
+ readonly showGutter: _angular_core.InputSignal<boolean>;
3321
3406
  /** Additional CSS classes */
3322
- class: string;
3407
+ readonly class: _angular_core.InputSignal<string>;
3323
3408
  /** Emits when sizes change */
3324
3409
  sizesChange: EventEmitter<[number, number]>;
3325
3410
  /** Emits when dragging starts */
@@ -3335,15 +3420,17 @@ declare class TwSplitterComponent implements AfterViewInit, OnDestroy {
3335
3420
  private readonly mouseUpHandler;
3336
3421
  private readonly touchMoveHandler;
3337
3422
  private readonly touchEndHandler;
3338
- constructor(twClass: TwClassService);
3339
3423
  ngAfterViewInit(): void;
3340
3424
  ngOnDestroy(): void;
3341
- protected containerClasses(): string;
3342
- protected paneClasses(index: number): string;
3343
- protected gutterClasses(): string;
3344
- protected gutterHandleClasses(): string;
3425
+ protected readonly containerClasses: _angular_core.Signal<string>;
3426
+ protected readonly paneClasses: _angular_core.Signal<string>;
3427
+ protected readonly gutterClasses: _angular_core.Signal<string>;
3428
+ protected readonly gutterHandleClasses: _angular_core.Signal<string>;
3429
+ protected readonly gutterAriaValueNow: _angular_core.Signal<number>;
3345
3430
  protected onGutterMouseDown(event: MouseEvent): void;
3346
3431
  protected onGutterTouchStart(event: TouchEvent): void;
3432
+ protected onGutterKeydown(event: KeyboardEvent): void;
3433
+ private resizeByPercent;
3347
3434
  private startDrag;
3348
3435
  private onMouseMove;
3349
3436
  private onTouchMove;
@@ -3357,14 +3444,14 @@ declare class TwSplitterComponent implements AfterViewInit, OnDestroy {
3357
3444
  /** Reset to initial sizes */
3358
3445
  reset(): void;
3359
3446
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TwSplitterComponent, never>;
3360
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwSplitterComponent, "tw-splitter", never, { "direction": { "alias": "direction"; "required": false; }; "initialSizes": { "alias": "initialSizes"; "required": false; }; "minSizes": { "alias": "minSizes"; "required": false; }; "gutterSize": { "alias": "gutterSize"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "showGutter": { "alias": "showGutter"; "required": false; }; "class": { "alias": "class"; "required": false; }; }, { "sizesChange": "sizesChange"; "dragStart": "dragStart"; "dragEnd": "dragEnd"; }, never, ["[twSplitterPane]:first-of-type, tw-splitter-pane:first-of-type", "[twSplitterPane]:last-of-type, tw-splitter-pane:last-of-type"], true, never>;
3447
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwSplitterComponent, "tw-splitter", never, { "direction": { "alias": "direction"; "required": false; "isSignal": true; }; "initialSizes": { "alias": "initialSizes"; "required": false; "isSignal": true; }; "minSizes": { "alias": "minSizes"; "required": false; "isSignal": true; }; "gutterSize": { "alias": "gutterSize"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "showGutter": { "alias": "showGutter"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; }, { "sizesChange": "sizesChange"; "dragStart": "dragStart"; "dragEnd": "dragEnd"; }, never, ["[twSplitterPaneStart], [twSplitterPane], tw-splitter-pane", "[twSplitterPaneEnd]"], true, never>;
3361
3448
  }
3362
3449
  /**
3363
3450
  * Directive to mark elements as splitter panes
3364
3451
  */
3365
3452
  declare class TwSplitterPaneComponent {
3366
3453
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TwSplitterPaneComponent, never>;
3367
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwSplitterPaneComponent, "tw-splitter-pane, [twSplitterPane]", never, {}, {}, never, ["*"], true, never>;
3454
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwSplitterPaneComponent, "tw-splitter-pane, [twSplitterPane], [twSplitterPaneStart], [twSplitterPaneEnd]", never, {}, {}, never, ["*"], true, never>;
3368
3455
  }
3369
3456
 
3370
3457
  type StickyPosition = 'top' | 'bottom' | 'left' | 'right';
@@ -3393,22 +3480,21 @@ type StickyOffset = 'none' | 'xs' | 'sm' | 'md' | 'lg' | 'xl';
3393
3480
  declare class TwStickyComponent {
3394
3481
  private readonly twClass;
3395
3482
  /** Which edge to stick to */
3396
- position: StickyPosition;
3483
+ readonly position: _angular_core.InputSignal<StickyPosition>;
3397
3484
  /** Offset from the edge */
3398
- offset: StickyOffset;
3485
+ readonly offset: _angular_core.InputSignal<StickyOffset>;
3399
3486
  /** Custom offset value (e.g., '60px', '4rem') */
3400
- customOffset?: string;
3487
+ readonly customOffset: _angular_core.InputSignal<string | undefined>;
3401
3488
  /** Z-index for stacking */
3402
- zIndex: number;
3489
+ readonly zIndex: _angular_core.InputSignal<number>;
3403
3490
  /** Whether sticky is disabled */
3404
- disabled: boolean;
3491
+ readonly disabled: _angular_core.InputSignal<boolean>;
3405
3492
  /** Additional CSS classes */
3406
- class: string;
3407
- constructor(twClass: TwClassService);
3408
- protected stickyClasses(): string;
3409
- protected stickyStyles(): Record<string, string>;
3493
+ readonly class: _angular_core.InputSignal<string>;
3494
+ protected readonly stickyClasses: _angular_core.Signal<string>;
3495
+ protected readonly stickyStyles: _angular_core.Signal<Record<string, string>>;
3410
3496
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TwStickyComponent, never>;
3411
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwStickyComponent, "tw-sticky", never, { "position": { "alias": "position"; "required": false; }; "offset": { "alias": "offset"; "required": false; }; "customOffset": { "alias": "customOffset"; "required": false; }; "zIndex": { "alias": "zIndex"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "class": { "alias": "class"; "required": false; }; }, {}, never, ["*"], true, never>;
3497
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwStickyComponent, "tw-sticky", never, { "position": { "alias": "position"; "required": false; "isSignal": true; }; "offset": { "alias": "offset"; "required": false; "isSignal": true; }; "customOffset": { "alias": "customOffset"; "required": false; "isSignal": true; }; "zIndex": { "alias": "zIndex"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
3412
3498
  }
3413
3499
 
3414
3500
  type ScrollAreaDirection = 'vertical' | 'horizontal' | 'both';
@@ -3439,27 +3525,26 @@ declare class TwScrollAreaComponent {
3439
3525
  private readonly twClass;
3440
3526
  scrollContainerRef: ElementRef<HTMLElement>;
3441
3527
  /** Scroll direction */
3442
- direction: ScrollAreaDirection;
3528
+ readonly direction: _angular_core.InputSignal<ScrollAreaDirection>;
3443
3529
  /** Scrollbar visibility */
3444
- scrollbar: ScrollAreaScrollbar;
3530
+ readonly scrollbar: _angular_core.InputSignal<ScrollAreaScrollbar>;
3445
3531
  /** Fixed height */
3446
- height?: string;
3532
+ readonly height: _angular_core.InputSignal<string | undefined>;
3447
3533
  /** Maximum height */
3448
- maxHeight?: string;
3534
+ readonly maxHeight: _angular_core.InputSignal<string | undefined>;
3449
3535
  /** Fixed width */
3450
- width?: string;
3536
+ readonly width: _angular_core.InputSignal<string | undefined>;
3451
3537
  /** Maximum width */
3452
- maxWidth?: string;
3538
+ readonly maxWidth: _angular_core.InputSignal<string | undefined>;
3453
3539
  /** Whether to use thin scrollbar */
3454
- thin: boolean;
3540
+ readonly thin: _angular_core.InputSignalWithTransform<boolean, unknown>;
3455
3541
  /** Whether to use dark mode scrollbar */
3456
- dark: boolean;
3542
+ readonly dark: _angular_core.InputSignalWithTransform<boolean, unknown>;
3457
3543
  /** Whether to enable smooth scrolling */
3458
- smooth: boolean;
3544
+ readonly smooth: _angular_core.InputSignalWithTransform<boolean, unknown>;
3459
3545
  /** Additional CSS classes */
3460
- class: string;
3461
- constructor(twClass: TwClassService);
3462
- protected scrollAreaClasses(): string;
3546
+ readonly class: _angular_core.InputSignal<string>;
3547
+ protected scrollAreaClasses: _angular_core.Signal<string>;
3463
3548
  /** Scroll to a specific position */
3464
3549
  scrollTo(options: ScrollToOptions): void;
3465
3550
  /** Scroll to top */
@@ -3471,7 +3556,7 @@ declare class TwScrollAreaComponent {
3471
3556
  /** Scroll to right */
3472
3557
  scrollToRight(smooth?: boolean): void;
3473
3558
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TwScrollAreaComponent, never>;
3474
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwScrollAreaComponent, "tw-scroll-area", never, { "direction": { "alias": "direction"; "required": false; }; "scrollbar": { "alias": "scrollbar"; "required": false; }; "height": { "alias": "height"; "required": false; }; "maxHeight": { "alias": "maxHeight"; "required": false; }; "width": { "alias": "width"; "required": false; }; "maxWidth": { "alias": "maxWidth"; "required": false; }; "thin": { "alias": "thin"; "required": false; }; "dark": { "alias": "dark"; "required": false; }; "smooth": { "alias": "smooth"; "required": false; }; "class": { "alias": "class"; "required": false; }; }, {}, never, ["*"], true, never>;
3559
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwScrollAreaComponent, "tw-scroll-area", never, { "direction": { "alias": "direction"; "required": false; "isSignal": true; }; "scrollbar": { "alias": "scrollbar"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "maxHeight": { "alias": "maxHeight"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "maxWidth": { "alias": "maxWidth"; "required": false; "isSignal": true; }; "thin": { "alias": "thin"; "required": false; "isSignal": true; }; "dark": { "alias": "dark"; "required": false; "isSignal": true; }; "smooth": { "alias": "smooth"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
3475
3560
  }
3476
3561
 
3477
3562
  type ColumnsCount = 1 | 2 | 3 | 4 | 5 | 6 | 'auto';
@@ -3503,32 +3588,31 @@ type ColumnsRule = 'none' | 'solid' | 'dashed' | 'dotted';
3503
3588
  declare class TwColumnsComponent {
3504
3589
  private readonly twClass;
3505
3590
  /** Number of columns (base) */
3506
- count: ColumnsCount;
3591
+ readonly count: _angular_core.InputSignal<ColumnsCount>;
3507
3592
  /** Number of columns at sm breakpoint */
3508
- countSm?: ColumnsCount;
3593
+ readonly countSm: _angular_core.InputSignal<ColumnsCount | undefined>;
3509
3594
  /** Number of columns at md breakpoint */
3510
- countMd?: ColumnsCount;
3595
+ readonly countMd: _angular_core.InputSignal<ColumnsCount | undefined>;
3511
3596
  /** Number of columns at lg breakpoint */
3512
- countLg?: ColumnsCount;
3597
+ readonly countLg: _angular_core.InputSignal<ColumnsCount | undefined>;
3513
3598
  /** Number of columns at xl breakpoint */
3514
- countXl?: ColumnsCount;
3599
+ readonly countXl: _angular_core.InputSignal<ColumnsCount | undefined>;
3515
3600
  /** Gap between columns */
3516
- gap: ColumnsGap;
3601
+ readonly gap: _angular_core.InputSignal<ColumnsGap>;
3517
3602
  /** Column rule style */
3518
- rule: ColumnsRule;
3519
- /** Column rule color (Tailwind color, e.g., 'slate-300') */
3520
- ruleColor: string;
3603
+ readonly rule: _angular_core.InputSignal<ColumnsRule>;
3604
+ /** Column rule color (Tailwind color token, e.g. 'slate-300', or any CSS color) */
3605
+ readonly ruleColor: _angular_core.InputSignal<string>;
3521
3606
  /** Column rule width in pixels */
3522
- ruleWidth: number;
3607
+ readonly ruleWidth: _angular_core.InputSignalWithTransform<number, unknown>;
3523
3608
  /** Whether children should not break across columns */
3524
- avoidBreak: boolean;
3609
+ readonly avoidBreak: _angular_core.InputSignalWithTransform<boolean, unknown>;
3525
3610
  /** Additional CSS classes */
3526
- class: string;
3527
- constructor(twClass: TwClassService);
3528
- protected columnsClasses(): string;
3529
- protected columnsStyles(): Record<string, string>;
3611
+ readonly class: _angular_core.InputSignal<string>;
3612
+ protected readonly columnsClasses: _angular_core.Signal<string>;
3613
+ protected readonly columnsStyles: _angular_core.Signal<Record<string, string>>;
3530
3614
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TwColumnsComponent, never>;
3531
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwColumnsComponent, "tw-columns", never, { "count": { "alias": "count"; "required": false; }; "countSm": { "alias": "countSm"; "required": false; }; "countMd": { "alias": "countMd"; "required": false; }; "countLg": { "alias": "countLg"; "required": false; }; "countXl": { "alias": "countXl"; "required": false; }; "gap": { "alias": "gap"; "required": false; }; "rule": { "alias": "rule"; "required": false; }; "ruleColor": { "alias": "ruleColor"; "required": false; }; "ruleWidth": { "alias": "ruleWidth"; "required": false; }; "avoidBreak": { "alias": "avoidBreak"; "required": false; }; "class": { "alias": "class"; "required": false; }; }, {}, never, ["*"], true, never>;
3615
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwColumnsComponent, "tw-columns", never, { "count": { "alias": "count"; "required": false; "isSignal": true; }; "countSm": { "alias": "countSm"; "required": false; "isSignal": true; }; "countMd": { "alias": "countMd"; "required": false; "isSignal": true; }; "countLg": { "alias": "countLg"; "required": false; "isSignal": true; }; "countXl": { "alias": "countXl"; "required": false; "isSignal": true; }; "gap": { "alias": "gap"; "required": false; "isSignal": true; }; "rule": { "alias": "rule"; "required": false; "isSignal": true; }; "ruleColor": { "alias": "ruleColor"; "required": false; "isSignal": true; }; "ruleWidth": { "alias": "ruleWidth"; "required": false; "isSignal": true; }; "avoidBreak": { "alias": "avoidBreak"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
3532
3616
  }
3533
3617
 
3534
3618
  type BleedDirection = 'horizontal' | 'left' | 'right' | 'all';
@@ -3562,20 +3646,19 @@ type BleedAmount = 'sm' | 'md' | 'lg' | 'xl' | 'full';
3562
3646
  declare class TwBleedComponent {
3563
3647
  private readonly twClass;
3564
3648
  /** Direction of the bleed */
3565
- direction: BleedDirection;
3649
+ readonly direction: _angular_core.InputSignal<BleedDirection>;
3566
3650
  /** Amount of bleed */
3567
- amount: BleedAmount;
3568
- /** Custom bleed amount (e.g., '2rem', '32px') */
3569
- customAmount?: string;
3651
+ readonly amount: _angular_core.InputSignal<BleedAmount>;
3652
+ /** Custom bleed amount (e.g., '2rem', '32px'); takes precedence over `amount` */
3653
+ readonly customAmount: _angular_core.InputSignal<string | undefined>;
3570
3654
  /** Whether to preserve the same visual spacing inside */
3571
- preservePadding: boolean;
3655
+ readonly preservePadding: _angular_core.InputSignalWithTransform<boolean, unknown>;
3572
3656
  /** Additional CSS classes */
3573
- class: string;
3574
- constructor(twClass: TwClassService);
3575
- protected bleedClasses(): string;
3576
- protected bleedStyles(): Record<string, string>;
3657
+ readonly class: _angular_core.InputSignal<string>;
3658
+ protected readonly bleedClasses: _angular_core.Signal<string>;
3659
+ protected readonly bleedStyles: _angular_core.Signal<Record<string, string>>;
3577
3660
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TwBleedComponent, never>;
3578
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwBleedComponent, "tw-bleed", never, { "direction": { "alias": "direction"; "required": false; }; "amount": { "alias": "amount"; "required": false; }; "customAmount": { "alias": "customAmount"; "required": false; }; "preservePadding": { "alias": "preservePadding"; "required": false; }; "class": { "alias": "class"; "required": false; }; }, {}, never, ["*"], true, never>;
3661
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwBleedComponent, "tw-bleed", never, { "direction": { "alias": "direction"; "required": false; "isSignal": true; }; "amount": { "alias": "amount"; "required": false; "isSignal": true; }; "customAmount": { "alias": "customAmount"; "required": false; "isSignal": true; }; "preservePadding": { "alias": "preservePadding"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
3579
3662
  }
3580
3663
 
3581
3664
  type OverlayBlur = 'none' | 'sm' | 'md' | 'lg';
@@ -3601,36 +3684,41 @@ type OverlayOpacity = 'light' | 'medium' | 'dark' | 'solid';
3601
3684
  * </tw-overlay>
3602
3685
  * ```
3603
3686
  */
3604
- declare class TwOverlayComponent {
3687
+ declare class TwOverlayComponent implements OnDestroy {
3605
3688
  private readonly twClass;
3689
+ private readonly document;
3690
+ private readonly platformId;
3606
3691
  /** Whether the overlay is visible */
3607
- visible: boolean;
3692
+ readonly visible: _angular_core.InputSignal<boolean>;
3608
3693
  /** Whether clicking the overlay closes it */
3609
- closeOnClick: boolean;
3694
+ readonly closeOnClick: _angular_core.InputSignal<boolean>;
3610
3695
  /** Whether pressing Escape closes the overlay */
3611
- closeOnEscape: boolean;
3696
+ readonly closeOnEscape: _angular_core.InputSignal<boolean>;
3612
3697
  /** Blur intensity */
3613
- blur: OverlayBlur;
3698
+ readonly blur: _angular_core.InputSignal<OverlayBlur>;
3614
3699
  /** Opacity level */
3615
- opacity: OverlayOpacity;
3700
+ readonly opacity: _angular_core.InputSignal<OverlayOpacity>;
3616
3701
  /** Whether to center content */
3617
- centered: boolean;
3702
+ readonly centered: _angular_core.InputSignal<boolean>;
3618
3703
  /** Whether to lock body scroll when visible */
3619
- lockScroll: boolean;
3704
+ readonly lockScroll: _angular_core.InputSignal<boolean>;
3620
3705
  /** Whether to animate transitions */
3621
- animate: boolean;
3706
+ readonly animate: _angular_core.InputSignal<boolean>;
3622
3707
  /** Z-index of the overlay */
3623
- zIndex: number;
3708
+ readonly zIndex: _angular_core.InputSignal<number>;
3624
3709
  /** Additional CSS classes */
3625
- class: string;
3710
+ readonly class: _angular_core.InputSignal<string>;
3626
3711
  /** Emits when overlay should close */
3627
- close: EventEmitter<void>;
3628
- constructor(twClass: TwClassService);
3712
+ readonly close: _angular_core.OutputEmitterRef<void>;
3713
+ private previousOverflow;
3714
+ private scrollLocked;
3715
+ constructor();
3716
+ ngOnDestroy(): void;
3629
3717
  onEscapeKey(): void;
3630
- protected overlayClasses(): string;
3718
+ protected readonly overlayClasses: _angular_core.Signal<string>;
3631
3719
  protected onOverlayClick(event: MouseEvent): void;
3632
3720
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TwOverlayComponent, never>;
3633
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwOverlayComponent, "tw-overlay", never, { "visible": { "alias": "visible"; "required": false; }; "closeOnClick": { "alias": "closeOnClick"; "required": false; }; "closeOnEscape": { "alias": "closeOnEscape"; "required": false; }; "blur": { "alias": "blur"; "required": false; }; "opacity": { "alias": "opacity"; "required": false; }; "centered": { "alias": "centered"; "required": false; }; "lockScroll": { "alias": "lockScroll"; "required": false; }; "animate": { "alias": "animate"; "required": false; }; "zIndex": { "alias": "zIndex"; "required": false; }; "class": { "alias": "class"; "required": false; }; }, { "close": "close"; }, never, ["*"], true, never>;
3721
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwOverlayComponent, "tw-overlay", never, { "visible": { "alias": "visible"; "required": false; "isSignal": true; }; "closeOnClick": { "alias": "closeOnClick"; "required": false; "isSignal": true; }; "closeOnEscape": { "alias": "closeOnEscape"; "required": false; "isSignal": true; }; "blur": { "alias": "blur"; "required": false; "isSignal": true; }; "opacity": { "alias": "opacity"; "required": false; "isSignal": true; }; "centered": { "alias": "centered"; "required": false; "isSignal": true; }; "lockScroll": { "alias": "lockScroll"; "required": false; "isSignal": true; }; "animate": { "alias": "animate"; "required": false; "isSignal": true; }; "zIndex": { "alias": "zIndex"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; }, { "close": "close"; }, never, ["*"], true, never>;
3634
3722
  }
3635
3723
 
3636
3724
  type BadgeVariant = 'primary' | 'secondary' | 'success' | 'warning' | 'danger' | 'info' | 'neutral';
@@ -3714,6 +3802,8 @@ declare class TwAvatarComponent {
3714
3802
  protected _badge: _angular_core.WritableSignal<string>;
3715
3803
  protected _color: _angular_core.WritableSignal<string>;
3716
3804
  protected _imageError: _angular_core.WritableSignal<boolean>;
3805
+ /** Internal: set by TwAvatarGroupComponent to hide avatars beyond its `max` */
3806
+ readonly hiddenInGroup: _angular_core.WritableSignal<boolean>;
3717
3807
  protected srcVal: _angular_core.Signal<string>;
3718
3808
  protected altVal: _angular_core.Signal<string>;
3719
3809
  protected initialsVal: _angular_core.Signal<string>;
@@ -3728,21 +3818,27 @@ declare class TwAvatarComponent {
3728
3818
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TwAvatarComponent, never>;
3729
3819
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwAvatarComponent, "tw-avatar", never, { "src": { "alias": "src"; "required": false; }; "alt": { "alias": "alt"; "required": false; }; "initials": { "alias": "initials"; "required": false; }; "size": { "alias": "size"; "required": false; }; "variant": { "alias": "variant"; "required": false; }; "status": { "alias": "status"; "required": false; }; "badge": { "alias": "badge"; "required": false; }; "color": { "alias": "color"; "required": false; }; }, {}, never, never, true, never>;
3730
3820
  }
3731
- declare class TwAvatarGroupComponent {
3821
+ declare class TwAvatarGroupComponent implements AfterContentInit {
3732
3822
  set max(val: number);
3733
3823
  set total(val: number);
3734
3824
  set size(val: AvatarSize);
3735
3825
  set spacing(val: 'tight' | 'normal' | 'loose');
3826
+ protected avatars: QueryList<TwAvatarComponent>;
3736
3827
  protected _max: _angular_core.WritableSignal<number>;
3737
3828
  protected _total: _angular_core.WritableSignal<number>;
3738
3829
  protected _size: _angular_core.WritableSignal<AvatarSize>;
3739
3830
  protected _spacing: _angular_core.WritableSignal<"tight" | "normal" | "loose">;
3831
+ private readonly destroyRef;
3832
+ constructor();
3833
+ ngAfterContentInit(): void;
3834
+ /** Propagates the group size to each avatar and hides avatars beyond `max` */
3835
+ private applyToAvatars;
3740
3836
  protected maxVal: _angular_core.Signal<number>;
3741
3837
  protected overflowVal: _angular_core.Signal<number>;
3742
3838
  protected groupClasses: _angular_core.Signal<string>;
3743
3839
  protected overflowClasses: _angular_core.Signal<string>;
3744
3840
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TwAvatarGroupComponent, never>;
3745
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwAvatarGroupComponent, "tw-avatar-group", never, { "max": { "alias": "max"; "required": false; }; "total": { "alias": "total"; "required": false; }; "size": { "alias": "size"; "required": false; }; "spacing": { "alias": "spacing"; "required": false; }; }, {}, never, ["*"], true, never>;
3841
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwAvatarGroupComponent, "tw-avatar-group", never, { "max": { "alias": "max"; "required": false; }; "total": { "alias": "total"; "required": false; }; "size": { "alias": "size"; "required": false; }; "spacing": { "alias": "spacing"; "required": false; }; }, {}, ["avatars"], ["*"], true, never>;
3746
3842
  }
3747
3843
 
3748
3844
  interface TableColumn {
@@ -3757,26 +3853,40 @@ type TableSize = 'sm' | 'md' | 'lg';
3757
3853
  type TableVariant = 'default' | 'striped' | 'bordered';
3758
3854
  /**
3759
3855
  * Table/DataTable component with Tailwind CSS styling
3856
+ *
3857
+ * Header and per-row action slots are provided as named templates:
3858
+ *
3859
+ * @example
3860
+ * ```html
3861
+ * <tw-table [data]="rows" [columns]="cols">
3862
+ * <ng-template #twTableActions>
3863
+ * <button>Export</button>
3864
+ * </ng-template>
3865
+ * <ng-template #twRowActions let-row>
3866
+ * <button (click)="edit(row)">Edit</button>
3867
+ * </ng-template>
3868
+ * </tw-table>
3869
+ * ```
3760
3870
  */
3761
3871
  declare class TwTableComponent {
3762
3872
  private readonly twClass;
3763
- data: any[];
3764
- columns: TableColumn[];
3765
- title: string;
3766
- size: TableSize;
3767
- variant: TableVariant;
3768
- selectable: boolean;
3769
- selectionMode: 'single' | 'multiple';
3770
- showGlobalFilter: boolean;
3771
- filterPlaceholder: string;
3772
- paginator: boolean;
3773
- rows: number;
3774
- rowsPerPageOptions: number[];
3775
- emptyMessage: string;
3776
- hoverable: boolean;
3777
- responsive: boolean;
3778
- trackByFn: (item: any) => any;
3779
- classOverride: string;
3873
+ readonly data: _angular_core.InputSignal<any[]>;
3874
+ readonly columns: _angular_core.InputSignal<TableColumn[]>;
3875
+ readonly title: _angular_core.InputSignal<string>;
3876
+ readonly size: _angular_core.InputSignal<TableSize>;
3877
+ readonly variant: _angular_core.InputSignal<TableVariant>;
3878
+ readonly selectable: _angular_core.InputSignalWithTransform<boolean, unknown>;
3879
+ readonly selectionMode: _angular_core.InputSignal<"single" | "multiple">;
3880
+ readonly showGlobalFilter: _angular_core.InputSignalWithTransform<boolean, unknown>;
3881
+ readonly filterPlaceholder: _angular_core.InputSignal<string>;
3882
+ readonly paginator: _angular_core.InputSignalWithTransform<boolean, unknown>;
3883
+ readonly rows: _angular_core.InputSignalWithTransform<number, unknown>;
3884
+ readonly rowsPerPageOptions: _angular_core.InputSignal<number[]>;
3885
+ readonly emptyMessage: _angular_core.InputSignal<string>;
3886
+ readonly hoverable: _angular_core.InputSignalWithTransform<boolean, unknown>;
3887
+ readonly responsive: _angular_core.InputSignalWithTransform<boolean, unknown>;
3888
+ readonly trackByFn: _angular_core.InputSignal<(item: any) => any>;
3889
+ readonly classOverride: _angular_core.InputSignal<string>;
3780
3890
  selectionChange: EventEmitter<any[]>;
3781
3891
  rowClick: EventEmitter<any>;
3782
3892
  sortChange: EventEmitter<{
@@ -3787,16 +3897,19 @@ declare class TwTableComponent {
3787
3897
  page: number;
3788
3898
  rows: number;
3789
3899
  }>;
3790
- headerActionsTemplate: TemplateRef<any>;
3791
- rowActionsTemplate: TemplateRef<any>;
3900
+ readonly headerActionsTemplate: _angular_core.Signal<TemplateRef<any> | undefined>;
3901
+ readonly rowActionsTemplate: _angular_core.Signal<TemplateRef<any> | undefined>;
3792
3902
  protected globalFilter: _angular_core.WritableSignal<string>;
3793
3903
  protected sortField: _angular_core.WritableSignal<string>;
3794
3904
  protected sortOrder: _angular_core.WritableSignal<1 | -1>;
3795
3905
  protected currentPage: _angular_core.WritableSignal<number>;
3796
- protected selection: _angular_core.WritableSignal<any[]>;
3797
- protected get hasHeaderActions(): boolean;
3798
- protected get hasRowActions(): boolean;
3799
- protected get totalColumns(): number;
3906
+ /** Current page size; follows the `rows` input until changed via the rows-per-page select. */
3907
+ protected pageSize: _angular_core.WritableSignal<number>;
3908
+ /** Selection is held as a Set internally for O(1) lookups; emitted as an array. */
3909
+ protected selection: _angular_core.WritableSignal<ReadonlySet<any>>;
3910
+ protected readonly hasHeaderActions: _angular_core.Signal<boolean>;
3911
+ protected readonly hasRowActions: _angular_core.Signal<boolean>;
3912
+ protected readonly totalColumns: _angular_core.Signal<number>;
3800
3913
  protected filteredData: _angular_core.Signal<any[]>;
3801
3914
  protected totalRecords: _angular_core.Signal<number>;
3802
3915
  protected totalPages: _angular_core.Signal<number>;
@@ -3810,15 +3923,21 @@ declare class TwTableComponent {
3810
3923
  protected tableWrapperClasses: _angular_core.Signal<"" | "overflow-x-auto">;
3811
3924
  protected tableClasses: _angular_core.Signal<string>;
3812
3925
  protected theadClasses: _angular_core.Signal<string>;
3813
- protected thClasses(col: TableColumn): string;
3814
3926
  protected tbodyClasses: _angular_core.Signal<string>;
3815
- protected trClasses(row: any, isOdd: boolean): string;
3927
+ /** Per-column th/td class map, recomputed only when columns/size/variant change. */
3928
+ private readonly columnClassMap;
3929
+ protected thClasses(col: TableColumn): string;
3816
3930
  protected tdClasses(col: TableColumn): string;
3931
+ /** Row class matrix memoized per selected/odd combination. */
3932
+ private readonly rowClassMatrix;
3933
+ protected trClasses(row: any, isOdd: boolean): string;
3817
3934
  protected pageButtonClasses(page: number): string;
3935
+ protected ariaSort(col: TableColumn): 'ascending' | 'descending' | 'none' | null;
3818
3936
  getFieldValue(obj: any, field: string): any;
3819
3937
  onGlobalFilterChange(event: Event): void;
3820
3938
  onSort(col: TableColumn): void;
3821
3939
  goToPage(page: number): void;
3940
+ onRowsPerPageChange(event: Event): void;
3822
3941
  isSelected(row: any): boolean;
3823
3942
  toggleSelection(row: any): void;
3824
3943
  toggleSelectAll(): void;
@@ -3826,50 +3945,48 @@ declare class TwTableComponent {
3826
3945
  clearSelection(): void;
3827
3946
  reset(): void;
3828
3947
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TwTableComponent, never>;
3829
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwTableComponent, "tw-table", never, { "data": { "alias": "data"; "required": false; }; "columns": { "alias": "columns"; "required": false; }; "title": { "alias": "title"; "required": false; }; "size": { "alias": "size"; "required": false; }; "variant": { "alias": "variant"; "required": false; }; "selectable": { "alias": "selectable"; "required": false; }; "selectionMode": { "alias": "selectionMode"; "required": false; }; "showGlobalFilter": { "alias": "showGlobalFilter"; "required": false; }; "filterPlaceholder": { "alias": "filterPlaceholder"; "required": false; }; "paginator": { "alias": "paginator"; "required": false; }; "rows": { "alias": "rows"; "required": false; }; "rowsPerPageOptions": { "alias": "rowsPerPageOptions"; "required": false; }; "emptyMessage": { "alias": "emptyMessage"; "required": false; }; "hoverable": { "alias": "hoverable"; "required": false; }; "responsive": { "alias": "responsive"; "required": false; }; "trackByFn": { "alias": "trackByFn"; "required": false; }; "classOverride": { "alias": "classOverride"; "required": false; }; }, { "selectionChange": "selectionChange"; "rowClick": "rowClick"; "sortChange": "sortChange"; "pageChange": "pageChange"; }, ["headerActionsTemplate", "rowActionsTemplate"], ["[twTableActions]", "[twRowActions]"], true, never>;
3830
- static ngAcceptInputType_selectable: unknown;
3831
- static ngAcceptInputType_showGlobalFilter: unknown;
3832
- static ngAcceptInputType_paginator: unknown;
3833
- static ngAcceptInputType_rows: unknown;
3834
- static ngAcceptInputType_hoverable: unknown;
3835
- static ngAcceptInputType_responsive: unknown;
3948
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwTableComponent, "tw-table", never, { "data": { "alias": "data"; "required": false; "isSignal": true; }; "columns": { "alias": "columns"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "selectable": { "alias": "selectable"; "required": false; "isSignal": true; }; "selectionMode": { "alias": "selectionMode"; "required": false; "isSignal": true; }; "showGlobalFilter": { "alias": "showGlobalFilter"; "required": false; "isSignal": true; }; "filterPlaceholder": { "alias": "filterPlaceholder"; "required": false; "isSignal": true; }; "paginator": { "alias": "paginator"; "required": false; "isSignal": true; }; "rows": { "alias": "rows"; "required": false; "isSignal": true; }; "rowsPerPageOptions": { "alias": "rowsPerPageOptions"; "required": false; "isSignal": true; }; "emptyMessage": { "alias": "emptyMessage"; "required": false; "isSignal": true; }; "hoverable": { "alias": "hoverable"; "required": false; "isSignal": true; }; "responsive": { "alias": "responsive"; "required": false; "isSignal": true; }; "trackByFn": { "alias": "trackByFn"; "required": false; "isSignal": true; }; "classOverride": { "alias": "classOverride"; "required": false; "isSignal": true; }; }, { "selectionChange": "selectionChange"; "rowClick": "rowClick"; "sortChange": "sortChange"; "pageChange": "pageChange"; }, ["headerActionsTemplate", "rowActionsTemplate"], ["[twTableActions]"], true, never>;
3836
3949
  }
3837
3950
 
3838
3951
  declare class TwDatatablesComponent {
3839
- data: unknown[];
3840
- columns: TableColumn[];
3841
- title: string;
3842
- subtitle?: string;
3843
- description?: string;
3844
- tableSize: TableSize;
3845
- tableVariant: TableVariant;
3846
- selectable: boolean;
3847
- selectionMode: 'single' | 'multiple';
3848
- showGlobalFilter: boolean;
3849
- paginator: boolean;
3850
- rows: number;
3851
- hoverable: boolean;
3852
- responsive: boolean;
3853
- emptyMessage: string;
3854
- classOverride: string;
3855
- containerClass: string;
3856
- toolbarClass: string;
3857
- selectionChange: EventEmitter<unknown[]>;
3858
- rowClick: EventEmitter<unknown>;
3859
- sortChange: EventEmitter<{
3952
+ readonly data: _angular_core.InputSignal<unknown[]>;
3953
+ /**
3954
+ * Column definitions forwarded to the underlying tw-table.
3955
+ * Columns are sortable by default; set `sortable: false` on a column to disable sorting for it.
3956
+ */
3957
+ readonly columns: _angular_core.InputSignal<TableColumn[]>;
3958
+ readonly title: _angular_core.InputSignal<string>;
3959
+ readonly subtitle: _angular_core.InputSignal<string | undefined>;
3960
+ readonly description: _angular_core.InputSignal<string | undefined>;
3961
+ readonly tableSize: _angular_core.InputSignal<TableSize>;
3962
+ readonly tableVariant: _angular_core.InputSignal<TableVariant>;
3963
+ readonly selectable: _angular_core.InputSignal<boolean>;
3964
+ readonly selectionMode: _angular_core.InputSignal<"single" | "multiple">;
3965
+ readonly showGlobalFilter: _angular_core.InputSignal<boolean>;
3966
+ readonly paginator: _angular_core.InputSignal<boolean>;
3967
+ readonly rows: _angular_core.InputSignal<number>;
3968
+ readonly hoverable: _angular_core.InputSignal<boolean>;
3969
+ readonly responsive: _angular_core.InputSignal<boolean>;
3970
+ readonly emptyMessage: _angular_core.InputSignal<string>;
3971
+ readonly classOverride: _angular_core.InputSignal<string>;
3972
+ readonly containerClass: _angular_core.InputSignal<string>;
3973
+ readonly toolbarClass: _angular_core.InputSignal<string>;
3974
+ readonly selectionChange: _angular_core.OutputEmitterRef<unknown[]>;
3975
+ readonly rowClick: _angular_core.OutputEmitterRef<unknown>;
3976
+ readonly sortChange: _angular_core.OutputEmitterRef<{
3860
3977
  field: string;
3861
3978
  order: number;
3862
3979
  }>;
3863
- pageChange: EventEmitter<{
3980
+ readonly pageChange: _angular_core.OutputEmitterRef<{
3864
3981
  page: number;
3865
3982
  rows: number;
3866
3983
  }>;
3867
3984
  protected readonly baseContainerClass = "bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-700 rounded-2xl shadow-sm p-6 space-y-6";
3868
3985
  protected readonly baseToolbarClass = "flex items-center gap-2 flex-wrap";
3869
- protected get containerClassList(): string;
3870
- protected get toolbarClassList(): string;
3986
+ protected readonly containerClassList: _angular_core.Signal<string>;
3987
+ protected readonly toolbarClassList: _angular_core.Signal<string>;
3871
3988
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TwDatatablesComponent, never>;
3872
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwDatatablesComponent, "tw-datatables", never, { "data": { "alias": "data"; "required": false; }; "columns": { "alias": "columns"; "required": false; }; "title": { "alias": "title"; "required": false; }; "subtitle": { "alias": "subtitle"; "required": false; }; "description": { "alias": "description"; "required": false; }; "tableSize": { "alias": "tableSize"; "required": false; }; "tableVariant": { "alias": "tableVariant"; "required": false; }; "selectable": { "alias": "selectable"; "required": false; }; "selectionMode": { "alias": "selectionMode"; "required": false; }; "showGlobalFilter": { "alias": "showGlobalFilter"; "required": false; }; "paginator": { "alias": "paginator"; "required": false; }; "rows": { "alias": "rows"; "required": false; }; "hoverable": { "alias": "hoverable"; "required": false; }; "responsive": { "alias": "responsive"; "required": false; }; "emptyMessage": { "alias": "emptyMessage"; "required": false; }; "classOverride": { "alias": "classOverride"; "required": false; }; "containerClass": { "alias": "containerClass"; "required": false; }; "toolbarClass": { "alias": "toolbarClass"; "required": false; }; }, { "selectionChange": "selectionChange"; "rowClick": "rowClick"; "sortChange": "sortChange"; "pageChange": "pageChange"; }, never, ["[twDatatablesActions]"], true, never>;
3989
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwDatatablesComponent, "tw-datatables", never, { "data": { "alias": "data"; "required": false; "isSignal": true; }; "columns": { "alias": "columns"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "subtitle": { "alias": "subtitle"; "required": false; "isSignal": true; }; "description": { "alias": "description"; "required": false; "isSignal": true; }; "tableSize": { "alias": "tableSize"; "required": false; "isSignal": true; }; "tableVariant": { "alias": "tableVariant"; "required": false; "isSignal": true; }; "selectable": { "alias": "selectable"; "required": false; "isSignal": true; }; "selectionMode": { "alias": "selectionMode"; "required": false; "isSignal": true; }; "showGlobalFilter": { "alias": "showGlobalFilter"; "required": false; "isSignal": true; }; "paginator": { "alias": "paginator"; "required": false; "isSignal": true; }; "rows": { "alias": "rows"; "required": false; "isSignal": true; }; "hoverable": { "alias": "hoverable"; "required": false; "isSignal": true; }; "responsive": { "alias": "responsive"; "required": false; "isSignal": true; }; "emptyMessage": { "alias": "emptyMessage"; "required": false; "isSignal": true; }; "classOverride": { "alias": "classOverride"; "required": false; "isSignal": true; }; "containerClass": { "alias": "containerClass"; "required": false; "isSignal": true; }; "toolbarClass": { "alias": "toolbarClass"; "required": false; "isSignal": true; }; }, { "selectionChange": "selectionChange"; "rowClick": "rowClick"; "sortChange": "sortChange"; "pageChange": "pageChange"; }, never, ["[twDatatablesActions]"], true, never>;
3873
3990
  }
3874
3991
 
3875
3992
  interface TreeNode {
@@ -3897,18 +4014,19 @@ type TreeSelectionMode = 'none' | 'single' | 'multiple' | 'checkbox';
3897
4014
  */
3898
4015
  declare class TwTreeComponent {
3899
4016
  private readonly twClass;
4017
+ private readonly nodeRows;
3900
4018
  /** Tree nodes */
3901
- nodes: TreeNode[];
4019
+ readonly nodes: _angular_core.InputSignal<TreeNode[]>;
3902
4020
  /** Selection mode */
3903
- selectionMode: TreeSelectionMode;
4021
+ readonly selectionMode: _angular_core.InputSignal<TreeSelectionMode>;
3904
4022
  /** Indent size in pixels */
3905
- indentSize: number;
4023
+ readonly indentSize: _angular_core.InputSignalWithTransform<number, unknown>;
3906
4024
  /** Whether to propagate selection to children */
3907
- propagateSelectionDown: boolean;
4025
+ readonly propagateSelectionDown: _angular_core.InputSignal<boolean>;
3908
4026
  /** Whether to propagate selection to parent */
3909
- propagateSelectionUp: boolean;
4027
+ readonly propagateSelectionUp: _angular_core.InputSignal<boolean>;
3910
4028
  /** Additional classes */
3911
- classOverride: string;
4029
+ readonly classOverride: _angular_core.InputSignal<string>;
3912
4030
  /** Node select event */
3913
4031
  onNodeSelect: EventEmitter<TreeNode>;
3914
4032
  /** Node unselect event */
@@ -3919,8 +4037,18 @@ declare class TwTreeComponent {
3919
4037
  onNodeCollapse: EventEmitter<TreeNode>;
3920
4038
  /** Selection change event */
3921
4039
  selectionChange: EventEmitter<TreeNode[]>;
3922
- protected selection: _angular_core.WritableSignal<TreeNode[]>;
4040
+ /** Selection is held as a Set internally for O(1) lookups; emitted as an array. */
4041
+ protected selection: _angular_core.WritableSignal<ReadonlySet<TreeNode>>;
4042
+ /** Node currently owning the roving tabindex. */
4043
+ protected readonly focusedNode: _angular_core.WritableSignal<TreeNode | null>;
3923
4044
  protected containerClasses: _angular_core.Signal<string>;
4045
+ /**
4046
+ * Per-node view state (selected/indeterminate flags and classes), computed in a
4047
+ * single pass over the tree whenever the nodes input or the selection changes.
4048
+ */
4049
+ private readonly nodeViewState;
4050
+ /** Child-to-parent lookup used for upward selection propagation. */
4051
+ private readonly parentMap;
3924
4052
  protected nodeClasses(node: TreeNode, level: number): string;
3925
4053
  protected labelClasses(node: TreeNode): string;
3926
4054
  isSelected(node: TreeNode): boolean;
@@ -3928,10 +4056,18 @@ declare class TwTreeComponent {
3928
4056
  onNodeClick(node: TreeNode): void;
3929
4057
  onCheckboxChange(node: TreeNode, event: Event): void;
3930
4058
  toggleNode(node: TreeNode): void;
3931
- private selectNode;
3932
- private unselectNode;
3933
- private getSelectedDescendants;
3934
- private getAllDescendants;
4059
+ protected nodeTabIndex(node: TreeNode): number;
4060
+ protected onNodeKeydown(event: KeyboardEvent, node: TreeNode): void;
4061
+ private focusNodeAt;
4062
+ /** Nodes currently rendered, in DOM order (visible and all ancestors expanded). */
4063
+ private getVisibleNodes;
4064
+ private selectNodeInto;
4065
+ private unselectNodeFrom;
4066
+ /**
4067
+ * Walks up from the given node: a parent becomes selected when all of its
4068
+ * direct children are selected, and is deselected otherwise.
4069
+ */
4070
+ private updateAncestors;
3935
4071
  /** Expand all nodes */
3936
4072
  expandAll(): void;
3937
4073
  /** Collapse all nodes */
@@ -3941,8 +4077,7 @@ declare class TwTreeComponent {
3941
4077
  /** Clear selection */
3942
4078
  clearSelection(): void;
3943
4079
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TwTreeComponent, never>;
3944
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwTreeComponent, "tw-tree", never, { "nodes": { "alias": "nodes"; "required": false; }; "selectionMode": { "alias": "selectionMode"; "required": false; }; "indentSize": { "alias": "indentSize"; "required": false; }; "propagateSelectionDown": { "alias": "propagateSelectionDown"; "required": false; }; "propagateSelectionUp": { "alias": "propagateSelectionUp"; "required": false; }; "classOverride": { "alias": "classOverride"; "required": false; }; }, { "onNodeSelect": "onNodeSelect"; "onNodeUnselect": "onNodeUnselect"; "onNodeExpand": "onNodeExpand"; "onNodeCollapse": "onNodeCollapse"; "selectionChange": "selectionChange"; }, never, never, true, never>;
3945
- static ngAcceptInputType_indentSize: unknown;
4080
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwTreeComponent, "tw-tree", never, { "nodes": { "alias": "nodes"; "required": false; "isSignal": true; }; "selectionMode": { "alias": "selectionMode"; "required": false; "isSignal": true; }; "indentSize": { "alias": "indentSize"; "required": false; "isSignal": true; }; "propagateSelectionDown": { "alias": "propagateSelectionDown"; "required": false; "isSignal": true; }; "propagateSelectionUp": { "alias": "propagateSelectionUp"; "required": false; "isSignal": true; }; "classOverride": { "alias": "classOverride"; "required": false; "isSignal": true; }; }, { "onNodeSelect": "onNodeSelect"; "onNodeUnselect": "onNodeUnselect"; "onNodeExpand": "onNodeExpand"; "onNodeCollapse": "onNodeCollapse"; "selectionChange": "selectionChange"; }, never, never, true, never>;
3946
4081
  }
3947
4082
 
3948
4083
  interface TimelineEvent {
@@ -3981,12 +4116,14 @@ declare class TwTimelineComponent {
3981
4116
  readonly classOverride: _angular_core.InputSignal<string>;
3982
4117
  private readonly MARKER_SIZES;
3983
4118
  protected containerClasses: _angular_core.Signal<string>;
3984
- protected itemClasses(isFirst: boolean, isLast: boolean): string;
3985
- protected connectorClasses(): string;
4119
+ /** Effective alignment for an item; 'alternate' resolves per index (even left, odd right) */
4120
+ protected effectiveAlign(index: number): 'left' | 'right';
4121
+ protected itemClasses(index: number, isFirst: boolean, isLast: boolean): string;
4122
+ protected connectorClasses(index: number): string;
3986
4123
  protected markerContainerClasses(): string;
3987
4124
  protected dotMarkerClasses(event: TimelineEvent): string;
3988
4125
  protected iconMarkerClasses(event: TimelineEvent): string;
3989
- protected contentClasses(): string;
4126
+ protected contentClasses(index: number): string;
3990
4127
  protected dateClasses(): string;
3991
4128
  protected titleClasses(): string;
3992
4129
  protected descriptionClasses(): string;
@@ -3997,6 +4134,10 @@ declare class TwTimelineComponent {
3997
4134
  interface BreadcrumbItem {
3998
4135
  label: string;
3999
4136
  href?: string;
4137
+ /**
4138
+ * Optional icon rendered before the label. Treated as an HTML string
4139
+ * (e.g. an inline SVG) and sanitized by Angular's built-in HTML sanitizer.
4140
+ */
4000
4141
  icon?: string;
4001
4142
  }
4002
4143
  type BreadcrumbSeparator = 'slash' | 'chevron' | 'arrow' | 'dot';
@@ -4072,8 +4213,8 @@ declare class TwStepsComponent {
4072
4213
  private readonly twClass;
4073
4214
  /** Step definitions */
4074
4215
  readonly steps: _angular_core.InputSignal<StepItem[]>;
4075
- /** Current active step index */
4076
- readonly activeIndex: _angular_core.InputSignalWithTransform<number, unknown>;
4216
+ /** Current active step index (two-way bindable) */
4217
+ readonly activeIndex: _angular_core.ModelSignal<number>;
4077
4218
  /** Orientation */
4078
4219
  readonly orientation: _angular_core.InputSignal<StepsOrientation>;
4079
4220
  /** Size variant */
@@ -4082,12 +4223,10 @@ declare class TwStepsComponent {
4082
4223
  readonly showLabels: _angular_core.InputSignalWithTransform<boolean, unknown>;
4083
4224
  /** Whether steps are readonly (non-clickable) */
4084
4225
  readonly readonlyMode: _angular_core.InputSignalWithTransform<boolean, unknown>;
4085
- /** Whether to allow clicking future steps */
4226
+ /** Whether navigation is linear (future steps are not clickable) */
4086
4227
  readonly linear: _angular_core.InputSignalWithTransform<boolean, unknown>;
4087
4228
  /** Additional classes */
4088
4229
  readonly classOverride: _angular_core.InputSignal<string>;
4089
- /** Active index change event */
4090
- readonly activeIndexChange: _angular_core.OutputEmitterRef<number>;
4091
4230
  /** Step click event */
4092
4231
  readonly onStepClick$: _angular_core.OutputEmitterRef<{
4093
4232
  step: StepItem;
@@ -4100,6 +4239,8 @@ declare class TwStepsComponent {
4100
4239
  protected getHorizontalConnectorStyle(): Record<string, string>;
4101
4240
  protected verticalConnectorClasses(index: number): string;
4102
4241
  protected getVerticalConnectorStyle(): Record<string, string>;
4242
+ /** Whether the step at the given index can be activated by the user */
4243
+ protected isStepClickable(index: number): boolean;
4103
4244
  protected stepContentClasses(index: number): string;
4104
4245
  protected indicatorClasses(index: number): string;
4105
4246
  protected labelContainerClasses(): string;
@@ -4114,7 +4255,7 @@ declare class TwStepsComponent {
4114
4255
  /** Go to specific step */
4115
4256
  goTo(index: number): void;
4116
4257
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TwStepsComponent, never>;
4117
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwStepsComponent, "tw-steps", never, { "steps": { "alias": "steps"; "required": false; "isSignal": true; }; "activeIndex": { "alias": "activeIndex"; "required": false; "isSignal": true; }; "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "showLabels": { "alias": "showLabels"; "required": false; "isSignal": true; }; "readonlyMode": { "alias": "readonly"; "required": false; "isSignal": true; }; "linear": { "alias": "linear"; "required": false; "isSignal": true; }; "classOverride": { "alias": "classOverride"; "required": false; "isSignal": true; }; }, { "activeIndexChange": "activeIndexChange"; "onStepClick$": "onStepClick$"; }, never, never, true, never>;
4258
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwStepsComponent, "tw-steps", never, { "steps": { "alias": "steps"; "required": false; "isSignal": true; }; "activeIndex": { "alias": "activeIndex"; "required": false; "isSignal": true; }; "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "showLabels": { "alias": "showLabels"; "required": false; "isSignal": true; }; "readonlyMode": { "alias": "readonly"; "required": false; "isSignal": true; }; "linear": { "alias": "linear"; "required": false; "isSignal": true; }; "classOverride": { "alias": "classOverride"; "required": false; "isSignal": true; }; }, { "activeIndex": "activeIndexChange"; "onStepClick$": "onStepClick$"; }, never, never, true, never>;
4118
4259
  }
4119
4260
 
4120
4261
  interface MenuItem {
@@ -4125,6 +4266,10 @@ interface MenuItem {
4125
4266
  item: MenuItem;
4126
4267
  }) => void;
4127
4268
  url?: string;
4269
+ /**
4270
+ * @deprecated The library does not depend on `@angular/router`; this value is
4271
+ * rendered as a plain `href` (array segments joined with `/`). Prefer `url`.
4272
+ */
4128
4273
  routerLink?: string | any[];
4129
4274
  disabled?: boolean;
4130
4275
  visible?: boolean;
@@ -4145,36 +4290,41 @@ type MenuVariant = 'default' | 'bordered' | 'elevated';
4145
4290
  */
4146
4291
  declare class TwMenuComponent {
4147
4292
  private readonly twClass;
4293
+ private readonly elementRef;
4294
+ private readonly document;
4148
4295
  /** Menu items */
4149
- items: MenuItem[];
4296
+ readonly items: _angular_core.InputSignal<MenuItem[]>;
4150
4297
  /** Visual variant */
4151
- variant: MenuVariant;
4298
+ readonly variant: _angular_core.InputSignal<MenuVariant>;
4152
4299
  /** Whether menu is popup style */
4153
- popup: boolean;
4300
+ readonly popup: _angular_core.InputSignalWithTransform<boolean, unknown>;
4154
4301
  /** Additional classes */
4155
- classOverride: string;
4302
+ readonly classOverride: _angular_core.InputSignal<string>;
4156
4303
  /** Item select event */
4157
- onSelect: EventEmitter<MenuItem>;
4304
+ readonly onSelect: _angular_core.OutputEmitterRef<MenuItem>;
4158
4305
  protected openSubmenu: _angular_core.WritableSignal<MenuItem | null>;
4159
4306
  protected containerClasses: _angular_core.Signal<string>;
4160
4307
  protected itemClasses(item: MenuItem): string;
4161
4308
  protected separatorClasses(): string;
4162
4309
  protected submenuClasses(): string;
4163
4310
  protected badgeClasses(): string;
4311
+ /** Href for link items: `url` wins; `routerLink` renders as a plain href fallback */
4312
+ protected itemHref(item: MenuItem): string | null;
4164
4313
  onSubmenuEnter(item: MenuItem): void;
4165
4314
  onSubmenuLeave(): void;
4166
4315
  onItemClick(item: MenuItem): void;
4316
+ protected onLinkClick(item: MenuItem, event: Event): void;
4317
+ protected onMenuKeydown(event: KeyboardEvent): void;
4167
4318
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TwMenuComponent, never>;
4168
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwMenuComponent, "tw-menu", never, { "items": { "alias": "items"; "required": false; }; "variant": { "alias": "variant"; "required": false; }; "popup": { "alias": "popup"; "required": false; }; "classOverride": { "alias": "classOverride"; "required": false; }; }, { "onSelect": "onSelect"; }, never, never, true, never>;
4169
- static ngAcceptInputType_popup: unknown;
4319
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwMenuComponent, "tw-menu", never, { "items": { "alias": "items"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "popup": { "alias": "popup"; "required": false; "isSignal": true; }; "classOverride": { "alias": "classOverride"; "required": false; "isSignal": true; }; }, { "onSelect": "onSelect"; }, never, never, true, never>;
4170
4320
  }
4171
4321
  /**
4172
4322
  * Context menu component
4173
4323
  */
4174
4324
  declare class TwContextMenuComponent {
4175
- items: MenuItem[];
4176
- onSelect: EventEmitter<MenuItem>;
4177
- onHide: EventEmitter<void>;
4325
+ readonly items: _angular_core.InputSignal<MenuItem[]>;
4326
+ readonly onSelect: _angular_core.OutputEmitterRef<MenuItem>;
4327
+ readonly onHide: _angular_core.OutputEmitterRef<void>;
4178
4328
  protected visible: _angular_core.WritableSignal<boolean>;
4179
4329
  protected x: _angular_core.WritableSignal<number>;
4180
4330
  protected y: _angular_core.WritableSignal<number>;
@@ -4182,7 +4332,7 @@ declare class TwContextMenuComponent {
4182
4332
  hide(): void;
4183
4333
  onItemSelect(item: MenuItem): void;
4184
4334
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TwContextMenuComponent, never>;
4185
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwContextMenuComponent, "tw-context-menu", never, { "items": { "alias": "items"; "required": false; }; }, { "onSelect": "onSelect"; "onHide": "onHide"; }, never, never, true, never>;
4335
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwContextMenuComponent, "tw-context-menu", never, { "items": { "alias": "items"; "required": false; "isSignal": true; }; }, { "onSelect": "onSelect"; "onHide": "onHide"; }, never, never, true, never>;
4186
4336
  }
4187
4337
 
4188
4338
  type AlertVariant = 'info' | 'success' | 'warning' | 'danger' | 'neutral';
@@ -4201,7 +4351,8 @@ type AlertStyle = 'solid' | 'soft' | 'outlined' | 'accent';
4201
4351
  * Your changes have been saved successfully.
4202
4352
  * </tw-alert>
4203
4353
  *
4204
- * <tw-alert variant="danger" alertStyle="accent" [icon]="customIcon">
4354
+ * <tw-alert variant="danger" alertStyle="accent" [hasCustomIcon]="true">
4355
+ * <svg twAlertIcon class="w-5 h-5" viewBox="0 0 24 24">...</svg>
4205
4356
  * An error occurred while processing your request.
4206
4357
  * </tw-alert>
4207
4358
  * ```
@@ -4209,9 +4360,9 @@ type AlertStyle = 'solid' | 'soft' | 'outlined' | 'accent';
4209
4360
  declare class TwAlertComponent {
4210
4361
  private readonly twClass;
4211
4362
  /** Color variant */
4212
- variant: AlertVariant;
4363
+ readonly variant: _angular_core.InputSignal<AlertVariant>;
4213
4364
  /** Style variant */
4214
- alertStyle: AlertStyle;
4365
+ readonly alertStyle: _angular_core.InputSignal<AlertStyle>;
4215
4366
  /** Whether the alert can be dismissed */
4216
4367
  dismissible: boolean;
4217
4368
  /** Whether to show the icon */
@@ -4219,12 +4370,19 @@ declare class TwAlertComponent {
4219
4370
  /** Whether a custom icon is provided */
4220
4371
  hasCustomIcon: boolean;
4221
4372
  /** ARIA live region setting */
4222
- ariaLive: 'polite' | 'assertive' | 'off';
4373
+ readonly ariaLive: _angular_core.InputSignal<"polite" | "assertive" | "off">;
4223
4374
  /** Additional classes */
4224
- classOverride: string;
4375
+ readonly classOverride: _angular_core.InputSignal<string>;
4225
4376
  /** Dismiss event */
4226
4377
  dismiss: EventEmitter<void>;
4227
4378
  protected dismissed: _angular_core.WritableSignal<boolean>;
4379
+ /**
4380
+ * Role derived from the ariaLive setting: assertive maps to role="alert",
4381
+ * polite maps to role="status", off sets no role.
4382
+ */
4383
+ protected readonly alertRole: _angular_core.Signal<"status" | "alert" | null>;
4384
+ /** aria-live attribute, omitted when the role already conveys the live semantics */
4385
+ protected readonly ariaLiveAttr: _angular_core.Signal<"polite" | "assertive" | "off" | null>;
4228
4386
  protected computedClasses: _angular_core.Signal<string>;
4229
4387
  protected iconClasses: _angular_core.Signal<string>;
4230
4388
  protected dismissButtonClasses: _angular_core.Signal<string>;
@@ -4234,7 +4392,7 @@ declare class TwAlertComponent {
4234
4392
  /** Programmatically show the alert again */
4235
4393
  show(): void;
4236
4394
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TwAlertComponent, never>;
4237
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwAlertComponent, "tw-alert", never, { "variant": { "alias": "variant"; "required": false; }; "alertStyle": { "alias": "alertStyle"; "required": false; }; "dismissible": { "alias": "dismissible"; "required": false; }; "showIcon": { "alias": "showIcon"; "required": false; }; "hasCustomIcon": { "alias": "hasCustomIcon"; "required": false; }; "ariaLive": { "alias": "ariaLive"; "required": false; }; "classOverride": { "alias": "classOverride"; "required": false; }; }, { "dismiss": "dismiss"; }, never, ["[twAlertIcon]", "*", "[twAlertAction]"], true, never>;
4395
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwAlertComponent, "tw-alert", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "alertStyle": { "alias": "alertStyle"; "required": false; "isSignal": true; }; "dismissible": { "alias": "dismissible"; "required": false; }; "showIcon": { "alias": "showIcon"; "required": false; }; "hasCustomIcon": { "alias": "hasCustomIcon"; "required": false; }; "ariaLive": { "alias": "ariaLive"; "required": false; "isSignal": true; }; "classOverride": { "alias": "classOverride"; "required": false; "isSignal": true; }; }, { "dismiss": "dismiss"; }, never, ["[twAlertIcon]", "*", "[twAlertAction]"], true, never>;
4238
4396
  static ngAcceptInputType_dismissible: unknown;
4239
4397
  static ngAcceptInputType_showIcon: unknown;
4240
4398
  static ngAcceptInputType_hasCustomIcon: unknown;
@@ -4275,9 +4433,14 @@ interface Toast extends ToastOptions {
4275
4433
  declare class TwToastService {
4276
4434
  private readonly _toasts;
4277
4435
  private readonly _position;
4436
+ /** Pending auto-dismiss timers, keyed by toast id, so dismissal can cancel them. */
4437
+ private readonly timers;
4438
+ private _maxToasts;
4278
4439
  readonly toasts: _angular_core.Signal<Toast[]>;
4279
4440
  readonly position: _angular_core.Signal<ToastPosition>;
4280
4441
  setPosition(position: ToastPosition): void;
4442
+ /** Cap the number of simultaneously shown toasts; the oldest are evicted. */
4443
+ setMaxToasts(max: number): void;
4281
4444
  show(options: ToastOptions): string;
4282
4445
  success(message: string, title?: string): string;
4283
4446
  error(message: string, title?: string): string;
@@ -4285,6 +4448,7 @@ declare class TwToastService {
4285
4448
  info(message: string, title?: string): string;
4286
4449
  dismiss(id: string): void;
4287
4450
  dismissAll(): void;
4451
+ private clearTimer;
4288
4452
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TwToastService, never>;
4289
4453
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<TwToastService>;
4290
4454
  }
@@ -4314,6 +4478,8 @@ declare class TwToastComponent {
4314
4478
  label: string;
4315
4479
  onClick: () => void;
4316
4480
  } | undefined>;
4481
+ /** Only urgent variants interrupt as alerts; the rest are polite status messages. */
4482
+ protected roleValue: _angular_core.Signal<"status" | "alert">;
4317
4483
  protected toastClasses: _angular_core.Signal<string>;
4318
4484
  protected iconClasses: _angular_core.Signal<string>;
4319
4485
  protected onDismiss(): void;
@@ -4326,6 +4492,8 @@ declare class TwToastContainerComponent {
4326
4492
  protected position: _angular_core.Signal<ToastPosition>;
4327
4493
  constructor(toastService: TwToastService);
4328
4494
  protected containerClasses: _angular_core.Signal<string>;
4495
+ /** Cached per-id dismiss closures so bindings stay referentially stable across CD runs. */
4496
+ private readonly dismissFns;
4329
4497
  getDismissFunction(id: string): () => void;
4330
4498
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TwToastContainerComponent, never>;
4331
4499
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwToastContainerComponent, "tw-toast-container", never, {}, {}, never, never, true, never>;
@@ -4337,13 +4505,17 @@ type SpinnerColor = 'primary' | 'secondary' | 'success' | 'warning' | 'danger' |
4337
4505
  declare class TwSpinnerComponent {
4338
4506
  set size(val: SpinnerSize);
4339
4507
  set variant(val: SpinnerVariant);
4508
+ /**
4509
+ * Spinner color. Accepts a named color, or a complete Tailwind utility class
4510
+ * matching the variant (e.g. `border-red-500` for the border variant,
4511
+ * `bg-red-500` for dots/pulse/bars). Partial values such as `red-500` are
4512
+ * not supported because Tailwind cannot generate classes composed at runtime.
4513
+ */
4340
4514
  set color(val: SpinnerColor | string);
4341
4515
  protected _size: _angular_core.WritableSignal<SpinnerSize>;
4342
4516
  protected _variant: _angular_core.WritableSignal<SpinnerVariant>;
4343
4517
  protected _color: _angular_core.WritableSignal<string>;
4344
4518
  protected variantVal: _angular_core.Signal<SpinnerVariant>;
4345
- private readonly borderColors;
4346
- private readonly bgColors;
4347
4519
  private getBorderColor;
4348
4520
  private getBgColor;
4349
4521
  protected borderClasses: _angular_core.Signal<string>;
@@ -4358,6 +4530,11 @@ declare class TwSpinnerComponent {
4358
4530
  declare class TwLoadingOverlayComponent {
4359
4531
  set size(val: SpinnerSize);
4360
4532
  set variant(val: SpinnerVariant);
4533
+ /**
4534
+ * Spinner color. Accepts a named color, or a complete Tailwind utility class
4535
+ * matching the variant (e.g. `border-red-500` for the border variant,
4536
+ * `bg-red-500` for dots/pulse/bars).
4537
+ */
4361
4538
  set color(val: SpinnerColor | string);
4362
4539
  set message(val: string);
4363
4540
  set overlay(val: 'full' | 'inline');
@@ -4404,6 +4581,7 @@ declare class TwProgressComponent {
4404
4581
  protected labelText: _angular_core.Signal<string>;
4405
4582
  protected showValueFlag: _angular_core.Signal<boolean>;
4406
4583
  protected labelPositionVal: _angular_core.Signal<"top" | "bottom" | "inside">;
4584
+ protected indeterminateFlag: _angular_core.Signal<boolean>;
4407
4585
  protected percentage: _angular_core.Signal<number>;
4408
4586
  protected containerClasses: _angular_core.Signal<string>;
4409
4587
  protected trackClasses: _angular_core.Signal<string>;
@@ -4455,6 +4633,7 @@ declare class TwSkeletonComponent {
4455
4633
  protected customStyle: _angular_core.Signal<Record<string, string>>;
4456
4634
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TwSkeletonComponent, never>;
4457
4635
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwSkeletonComponent, "tw-skeleton", never, { "variant": { "alias": "variant"; "required": false; }; "width": { "alias": "width"; "required": false; }; "height": { "alias": "height"; "required": false; }; "animated": { "alias": "animated"; "required": false; }; }, {}, never, never, true, never>;
4636
+ static ngAcceptInputType_animated: unknown;
4458
4637
  }
4459
4638
  type SkeletonGap = 'sm' | 'md' | 'lg';
4460
4639
  declare class TwSkeletonTextComponent {
@@ -4473,6 +4652,8 @@ declare class TwSkeletonTextComponent {
4473
4652
  }[]>;
4474
4653
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TwSkeletonTextComponent, never>;
4475
4654
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwSkeletonTextComponent, "tw-skeleton-text", never, { "lineCount": { "alias": "lineCount"; "required": false; }; "animated": { "alias": "animated"; "required": false; }; "lastLineWidth": { "alias": "lastLineWidth"; "required": false; }; "gap": { "alias": "gap"; "required": false; }; }, {}, never, never, true, never>;
4655
+ static ngAcceptInputType_lineCount: unknown;
4656
+ static ngAcceptInputType_animated: unknown;
4476
4657
  }
4477
4658
  declare class TwSkeletonCardComponent {
4478
4659
  set showMedia(value: boolean);
@@ -4489,6 +4670,10 @@ declare class TwSkeletonCardComponent {
4489
4670
  protected lineCountValue: _angular_core.Signal<number>;
4490
4671
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TwSkeletonCardComponent, never>;
4491
4672
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwSkeletonCardComponent, "tw-skeleton-card", never, { "showMedia": { "alias": "showMedia"; "required": false; }; "showAvatar": { "alias": "showAvatar"; "required": false; }; "mediaHeight": { "alias": "mediaHeight"; "required": false; }; "lineCount": { "alias": "lineCount"; "required": false; }; }, {}, never, never, true, never>;
4673
+ static ngAcceptInputType_showMedia: unknown;
4674
+ static ngAcceptInputType_showAvatar: unknown;
4675
+ static ngAcceptInputType_mediaHeight: unknown;
4676
+ static ngAcceptInputType_lineCount: unknown;
4492
4677
  }
4493
4678
  declare class TwSkeletonTableComponent {
4494
4679
  set rowCount(value: number);
@@ -4502,6 +4687,8 @@ declare class TwSkeletonTableComponent {
4502
4687
  }[]>;
4503
4688
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TwSkeletonTableComponent, never>;
4504
4689
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwSkeletonTableComponent, "tw-skeleton-table", never, { "rowCount": { "alias": "rowCount"; "required": false; }; "columnCount": { "alias": "columnCount"; "required": false; }; }, {}, never, never, true, never>;
4690
+ static ngAcceptInputType_rowCount: unknown;
4691
+ static ngAcceptInputType_columnCount: unknown;
4505
4692
  }
4506
4693
 
4507
4694
  type ModalSize = 'sm' | 'md' | 'lg' | 'xl' | 'full';
@@ -4559,6 +4746,8 @@ declare class TwModalComponent implements OnDestroy {
4559
4746
  closed: EventEmitter<void>;
4560
4747
  openChange: EventEmitter<boolean>;
4561
4748
  private previousOverflow;
4749
+ /** Projected title, used as the default aria-labelledby target */
4750
+ protected readonly modalTitle: _angular_core.Signal<TwModalTitleComponent | undefined>;
4562
4751
  constructor();
4563
4752
  ngOnDestroy(): void;
4564
4753
  onEscapeKey(event: Event): void;
@@ -4576,7 +4765,7 @@ declare class TwModalComponent implements OnDestroy {
4576
4765
  private lockScroll;
4577
4766
  private unlockScroll;
4578
4767
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TwModalComponent, never>;
4579
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwModalComponent, "tw-modal", never, { "open": { "alias": "open"; "required": false; }; "size": { "alias": "size"; "required": false; }; "closeOnBackdropClick": { "alias": "closeOnBackdropClick"; "required": false; }; "closeOnEscape": { "alias": "closeOnEscape"; "required": false; }; "showCloseButton": { "alias": "showCloseButton"; "required": false; }; "autoFocus": { "alias": "autoFocus"; "required": false; }; "restoreFocus": { "alias": "restoreFocus"; "required": false; }; "centered": { "alias": "centered"; "required": false; }; "ariaLabelledBy": { "alias": "ariaLabelledBy"; "required": false; }; "ariaDescribedBy": { "alias": "ariaDescribedBy"; "required": false; }; "backdropClass": { "alias": "backdropClass"; "required": false; }; "panelClass": { "alias": "panelClass"; "required": false; }; }, { "opened": "opened"; "closed": "closed"; "openChange": "openChange"; }, never, ["*"], true, never>;
4768
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwModalComponent, "tw-modal", never, { "open": { "alias": "open"; "required": false; }; "size": { "alias": "size"; "required": false; }; "closeOnBackdropClick": { "alias": "closeOnBackdropClick"; "required": false; }; "closeOnEscape": { "alias": "closeOnEscape"; "required": false; }; "showCloseButton": { "alias": "showCloseButton"; "required": false; }; "autoFocus": { "alias": "autoFocus"; "required": false; }; "restoreFocus": { "alias": "restoreFocus"; "required": false; }; "centered": { "alias": "centered"; "required": false; }; "ariaLabelledBy": { "alias": "ariaLabelledBy"; "required": false; }; "ariaDescribedBy": { "alias": "ariaDescribedBy"; "required": false; }; "backdropClass": { "alias": "backdropClass"; "required": false; }; "panelClass": { "alias": "panelClass"; "required": false; }; }, { "opened": "opened"; "closed": "closed"; "openChange": "openChange"; }, ["modalTitle"], ["*"], true, never>;
4580
4769
  static ngAcceptInputType_closeOnBackdropClick: unknown;
4581
4770
  static ngAcceptInputType_closeOnEscape: unknown;
4582
4771
  static ngAcceptInputType_showCloseButton: unknown;
@@ -4595,8 +4784,10 @@ declare class TwModalHeaderComponent {
4595
4784
  * Modal title component
4596
4785
  */
4597
4786
  declare class TwModalTitleComponent {
4787
+ /** Unique ID used as the modal's default aria-labelledby (auto-generated if not provided) */
4788
+ id: string;
4598
4789
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TwModalTitleComponent, never>;
4599
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwModalTitleComponent, "tw-modal-title", never, {}, {}, never, ["*"], true, never>;
4790
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwModalTitleComponent, "tw-modal-title", never, { "id": { "alias": "id"; "required": false; }; }, {}, never, ["*"], true, never>;
4600
4791
  }
4601
4792
  /**
4602
4793
  * Modal body component
@@ -4716,6 +4907,7 @@ declare class TwDropdownComponent implements OnDestroy {
4716
4907
  /** Event emitted when the dropdown closes */
4717
4908
  closed: EventEmitter<void>;
4718
4909
  protected isOpen: _angular_core.WritableSignal<boolean>;
4910
+ private readonly triggerDirective;
4719
4911
  private portalHost;
4720
4912
  private portalElement;
4721
4913
  private menuContentElement;
@@ -4730,11 +4922,13 @@ declare class TwDropdownComponent implements OnDestroy {
4730
4922
  toggle(): void;
4731
4923
  open(): void;
4732
4924
  close(): void;
4925
+ private getMenuItems;
4926
+ private moveItemFocus;
4733
4927
  private createPortal;
4734
4928
  private destroyPortal;
4735
4929
  private updatePosition;
4736
4930
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TwDropdownComponent, never>;
4737
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwDropdownComponent, "tw-dropdown", never, { "position": { "alias": "position"; "required": false; }; "width": { "alias": "width"; "required": false; }; "maxHeight": { "alias": "maxHeight"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "closeOnSelect": { "alias": "closeOnSelect"; "required": false; }; "menuClass": { "alias": "menuClass"; "required": false; }; }, { "opened": "opened"; "closed": "closed"; }, never, ["[twDropdownTrigger]", "tw-dropdown-menu"], true, never>;
4931
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwDropdownComponent, "tw-dropdown", never, { "position": { "alias": "position"; "required": false; }; "width": { "alias": "width"; "required": false; }; "maxHeight": { "alias": "maxHeight"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "closeOnSelect": { "alias": "closeOnSelect"; "required": false; }; "menuClass": { "alias": "menuClass"; "required": false; }; }, { "opened": "opened"; "closed": "closed"; }, ["triggerDirective"], ["[twDropdownTrigger]", "tw-dropdown-menu"], true, never>;
4738
4932
  static ngAcceptInputType_disabled: unknown;
4739
4933
  static ngAcceptInputType_closeOnSelect: unknown;
4740
4934
  }
@@ -4749,7 +4943,7 @@ declare class TwDropdownMenuComponent {
4749
4943
  * Trigger directive for dropdown
4750
4944
  */
4751
4945
  declare class TwDropdownTriggerDirective {
4752
- expanded: boolean;
4946
+ readonly expanded: _angular_core.WritableSignal<boolean>;
4753
4947
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TwDropdownTriggerDirective, never>;
4754
4948
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<TwDropdownTriggerDirective, "[twDropdownTrigger]", never, {}, {}, never, never, true, never>;
4755
4949
  }
@@ -4770,45 +4964,53 @@ type SidebarSize = 'sm' | 'md' | 'lg' | 'xl' | 'full';
4770
4964
  */
4771
4965
  declare class TwSidebarComponent {
4772
4966
  private readonly twClass;
4773
- /** Whether the sidebar is visible */
4967
+ private readonly platformId;
4968
+ /** Whether the sidebar is visible. Supports two-way binding via `[(visible)]`. */
4969
+ readonly visible: _angular_core.ModelSignal<boolean>;
4970
+ /**
4971
+ * Whether the sidebar is visible
4972
+ *
4973
+ * @deprecated Use `[(visible)]` instead.
4974
+ */
4774
4975
  set visibleInput(value: boolean);
4775
4976
  /** Header text */
4776
- header: string;
4977
+ readonly header: _angular_core.InputSignal<string>;
4777
4978
  /** Position of the sidebar */
4778
- position: SidebarPosition;
4979
+ readonly position: _angular_core.InputSignal<SidebarPosition>;
4779
4980
  /** Size of the sidebar */
4780
- size: SidebarSize;
4981
+ readonly size: _angular_core.InputSignal<SidebarSize>;
4781
4982
  /** Whether to show backdrop */
4782
- showBackdrop: boolean;
4983
+ readonly showBackdrop: _angular_core.InputSignalWithTransform<boolean, unknown>;
4783
4984
  /** Whether clicking backdrop closes sidebar */
4784
- dismissible: boolean;
4985
+ readonly dismissible: _angular_core.InputSignalWithTransform<boolean, unknown>;
4785
4986
  /** Whether pressing Escape closes sidebar */
4786
- closeOnEscape: boolean;
4987
+ readonly closeOnEscape: _angular_core.InputSignalWithTransform<boolean, unknown>;
4787
4988
  /** Whether to show close button */
4788
- showCloseButton: boolean;
4989
+ readonly showCloseButton: _angular_core.InputSignalWithTransform<boolean, unknown>;
4789
4990
  /** Whether the sidebar is modal (blocks interaction with page) */
4790
- modal: boolean;
4991
+ readonly modal: _angular_core.InputSignalWithTransform<boolean, unknown>;
4791
4992
  /** Additional classes */
4792
- classOverride: string;
4793
- /** Visibility change event */
4794
- visibleChange: EventEmitter<boolean>;
4993
+ readonly classOverride: _angular_core.InputSignal<string>;
4795
4994
  /** Show event */
4796
- onShow: EventEmitter<void>;
4995
+ readonly onShow: _angular_core.OutputEmitterRef<void>;
4797
4996
  /** Hide event */
4798
- onHide: EventEmitter<void>;
4799
- footerTemplate: TemplateRef<any>;
4800
- protected visible: _angular_core.WritableSignal<boolean>;
4801
- protected get hasFooter(): boolean;
4997
+ readonly onHide: _angular_core.OutputEmitterRef<void>;
4998
+ footerTemplate?: TemplateRef<unknown>;
4999
+ /** Previous body overflow value, restored on hide so underlying scroll locks survive */
5000
+ private previousBodyOverflow;
4802
5001
  protected backdropClasses: _angular_core.Signal<string>;
4803
5002
  protected panelClasses: _angular_core.Signal<string>;
4804
5003
  protected headerClasses: _angular_core.Signal<string>;
4805
5004
  protected contentClasses: _angular_core.Signal<string>;
4806
5005
  protected footerClasses: _angular_core.Signal<string>;
5006
+ constructor();
4807
5007
  private getSizeClasses;
4808
5008
  private getPositionClasses;
4809
5009
  private getTransformClasses;
4810
5010
  onEscapePress(): void;
4811
5011
  onBackdropClick(): void;
5012
+ private applyShowEffects;
5013
+ private applyHideEffects;
4812
5014
  /** Show the sidebar */
4813
5015
  show(): void;
4814
5016
  /** Hide the sidebar */
@@ -4816,13 +5018,8 @@ declare class TwSidebarComponent {
4816
5018
  /** Toggle the sidebar visibility */
4817
5019
  toggle(): void;
4818
5020
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TwSidebarComponent, never>;
4819
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwSidebarComponent, "tw-sidebar", never, { "visibleInput": { "alias": "visibleInput"; "required": false; }; "header": { "alias": "header"; "required": false; }; "position": { "alias": "position"; "required": false; }; "size": { "alias": "size"; "required": false; }; "showBackdrop": { "alias": "showBackdrop"; "required": false; }; "dismissible": { "alias": "dismissible"; "required": false; }; "closeOnEscape": { "alias": "closeOnEscape"; "required": false; }; "showCloseButton": { "alias": "showCloseButton"; "required": false; }; "modal": { "alias": "modal"; "required": false; }; "classOverride": { "alias": "classOverride"; "required": false; }; }, { "visibleChange": "visibleChange"; "onShow": "onShow"; "onHide": "onHide"; }, ["footerTemplate"], ["*", "[twSidebarFooter]"], true, never>;
5021
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwSidebarComponent, "tw-sidebar", never, { "visible": { "alias": "visible"; "required": false; "isSignal": true; }; "visibleInput": { "alias": "visibleInput"; "required": false; }; "header": { "alias": "header"; "required": false; "isSignal": true; }; "position": { "alias": "position"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "showBackdrop": { "alias": "showBackdrop"; "required": false; "isSignal": true; }; "dismissible": { "alias": "dismissible"; "required": false; "isSignal": true; }; "closeOnEscape": { "alias": "closeOnEscape"; "required": false; "isSignal": true; }; "showCloseButton": { "alias": "showCloseButton"; "required": false; "isSignal": true; }; "modal": { "alias": "modal"; "required": false; "isSignal": true; }; "classOverride": { "alias": "classOverride"; "required": false; "isSignal": true; }; }, { "visible": "visibleChange"; "onShow": "onShow"; "onHide": "onHide"; }, ["footerTemplate"], ["*", "[twSidebarFooter]"], true, never>;
4820
5022
  static ngAcceptInputType_visibleInput: unknown;
4821
- static ngAcceptInputType_showBackdrop: unknown;
4822
- static ngAcceptInputType_dismissible: unknown;
4823
- static ngAcceptInputType_closeOnEscape: unknown;
4824
- static ngAcceptInputType_showCloseButton: unknown;
4825
- static ngAcceptInputType_modal: unknown;
4826
5023
  }
4827
5024
 
4828
5025
  type PopoverPosition = 'top' | 'bottom' | 'left' | 'right';
@@ -4870,6 +5067,7 @@ declare class TwPopoverComponent implements OnDestroy {
4870
5067
  private hoverTimeout;
4871
5068
  private portalHost;
4872
5069
  private portalElement;
5070
+ private movedElements;
4873
5071
  private clickOutsideListener;
4874
5072
  private scrollListener;
4875
5073
  private resizeListener;
@@ -4883,6 +5081,8 @@ declare class TwPopoverComponent implements OnDestroy {
4883
5081
  onTriggerClick(): void;
4884
5082
  onTriggerEnter(): void;
4885
5083
  onTriggerLeave(): void;
5084
+ onTriggerFocusIn(): void;
5085
+ onTriggerFocusOut(): void;
4886
5086
  private onPopoverEnter;
4887
5087
  private onPopoverLeave;
4888
5088
  private clearHoverTimeout;
@@ -4915,6 +5115,8 @@ type ImageBorderRadius = 'none' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | '3xl' | 'f
4915
5115
  */
4916
5116
  declare class TwImageComponent {
4917
5117
  private readonly twClass;
5118
+ private readonly document;
5119
+ private readonly platformId;
4918
5120
  /** Image source URL */
4919
5121
  readonly src: _angular_core.InputSignal<string>;
4920
5122
  /** Alternative text */
@@ -4949,7 +5151,9 @@ declare class TwImageComponent {
4949
5151
  protected previewVisible: _angular_core.WritableSignal<boolean>;
4950
5152
  protected zoomLevel: _angular_core.WritableSignal<number>;
4951
5153
  protected rotation: _angular_core.WritableSignal<number>;
5154
+ private previousOverflow;
4952
5155
  protected Math: Math;
5156
+ constructor();
4953
5157
  protected containerClasses: _angular_core.Signal<string>;
4954
5158
  protected containerStyles: _angular_core.Signal<Record<string, string>>;
4955
5159
  protected imageClasses: _angular_core.Signal<string>;
@@ -4959,6 +5163,7 @@ declare class TwImageComponent {
4959
5163
  onImageLoad(): void;
4960
5164
  onImageError(): void;
4961
5165
  onImageClick(): void;
5166
+ protected onThumbnailKeydown(event: KeyboardEvent): void;
4962
5167
  openPreview(): void;
4963
5168
  closePreview(): void;
4964
5169
  zoomIn(): void;
@@ -4980,35 +5185,30 @@ type ScrollTopVariant = 'primary' | 'secondary' | 'dark';
4980
5185
  * <tw-scroll-top [threshold]="200" position="bottom-left"></tw-scroll-top>
4981
5186
  * ```
4982
5187
  */
4983
- declare class TwScrollTopComponent implements OnInit, OnDestroy {
5188
+ declare class TwScrollTopComponent {
4984
5189
  private readonly twClass;
4985
5190
  private readonly platformId;
4986
5191
  /** Scroll threshold to show button (in pixels) */
4987
- threshold: number;
5192
+ readonly threshold: _angular_core.InputSignalWithTransform<number, unknown>;
4988
5193
  /** Position of the button */
4989
- position: ScrollTopPosition;
5194
+ readonly position: _angular_core.InputSignal<ScrollTopPosition>;
4990
5195
  /** Visual variant */
4991
- variant: ScrollTopVariant;
5196
+ readonly variant: _angular_core.InputSignal<ScrollTopVariant>;
4992
5197
  /** Scroll behavior */
4993
- behavior: ScrollBehavior;
5198
+ readonly behavior: _angular_core.InputSignal<ScrollBehavior>;
4994
5199
  /** Target element to scroll (defaults to window) */
4995
- target: HTMLElement | Window | null;
5200
+ readonly target: _angular_core.InputSignal<Window | HTMLElement | null>;
4996
5201
  /** Custom icon template */
4997
- icon: TemplateRef<any> | null;
5202
+ readonly icon: _angular_core.InputSignal<TemplateRef<any> | null>;
4998
5203
  /** Additional classes */
4999
- classOverride: string;
5204
+ readonly classOverride: _angular_core.InputSignal<string>;
5000
5205
  protected visible: _angular_core.WritableSignal<boolean>;
5001
- private scrollListener;
5002
5206
  protected buttonClasses: _angular_core.Signal<string>;
5003
- ngOnInit(): void;
5004
- ngOnDestroy(): void;
5005
- private setupScrollListener;
5006
- private removeScrollListener;
5207
+ constructor();
5007
5208
  private getScrollTop;
5008
5209
  scrollToTop(): void;
5009
5210
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TwScrollTopComponent, never>;
5010
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwScrollTopComponent, "tw-scroll-top", never, { "threshold": { "alias": "threshold"; "required": false; }; "position": { "alias": "position"; "required": false; }; "variant": { "alias": "variant"; "required": false; }; "behavior": { "alias": "behavior"; "required": false; }; "target": { "alias": "target"; "required": false; }; "icon": { "alias": "icon"; "required": false; }; "classOverride": { "alias": "classOverride"; "required": false; }; }, {}, never, never, true, never>;
5011
- static ngAcceptInputType_threshold: unknown;
5211
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwScrollTopComponent, "tw-scroll-top", never, { "threshold": { "alias": "threshold"; "required": false; "isSignal": true; }; "position": { "alias": "position"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "behavior": { "alias": "behavior"; "required": false; "isSignal": true; }; "target": { "alias": "target"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "classOverride": { "alias": "classOverride"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
5012
5212
  }
5013
5213
 
5014
5214
  type DialVariant = 'modern' | 'vintage' | 'minimal' | 'led' | 'light' | 'highContrast';
@@ -5022,10 +5222,12 @@ type DialSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
5022
5222
  * <tw-volume-dial [value]="gain" variant="vintage" size="lg" [showValue]="true"></tw-volume-dial>
5023
5223
  * ```
5024
5224
  */
5025
- declare class TwVolumeDialComponent implements ControlValueAccessor {
5225
+ declare class TwVolumeDialComponent implements ControlValueAccessor, OnDestroy {
5026
5226
  private readonly twClass;
5027
5227
  private readonly a11y;
5228
+ private readonly mobileSupport;
5028
5229
  private readonly dialSvg;
5230
+ ngOnDestroy(): void;
5029
5231
  /** Initial/bound value - supports two-way binding with [(value)] */
5030
5232
  readonly value: _angular_core.ModelSignal<number>;
5031
5233
  readonly min: _angular_core.InputSignal<number>;
@@ -5054,6 +5256,9 @@ declare class TwVolumeDialComponent implements ControlValueAccessor {
5054
5256
  private isDragging;
5055
5257
  private startAngle;
5056
5258
  private startValue;
5259
+ private dragController;
5260
+ private lastHapticTime;
5261
+ protected readonly effectiveReducedMotion: _angular_core.Signal<boolean>;
5057
5262
  private onChangeFn;
5058
5263
  private onTouchedFn;
5059
5264
  protected readonly sizeConfig: _angular_core.Signal<{
@@ -5108,6 +5313,7 @@ declare class TwVolumeDialComponent implements ControlValueAccessor {
5108
5313
  private getAngleFromPoint;
5109
5314
  onKeyDown(event: KeyboardEvent): void;
5110
5315
  private setValue;
5316
+ private triggerHaptics;
5111
5317
  writeValue(value: number): void;
5112
5318
  registerOnChange(fn: (value: number) => void): void;
5113
5319
  registerOnTouched(fn: () => void): void;
@@ -5133,9 +5339,8 @@ interface MeterSegment {
5133
5339
  * <tw-vu-meter [leftValue]="leftChannel" [rightValue]="rightChannel" [stereo]="true"></tw-vu-meter>
5134
5340
  * ```
5135
5341
  */
5136
- declare class TwVuMeterComponent implements OnInit {
5342
+ declare class TwVuMeterComponent {
5137
5343
  private readonly twClass;
5138
- private readonly destroyRef;
5139
5344
  readonly value: _angular_core.InputSignal<number>;
5140
5345
  readonly leftValue: _angular_core.InputSignal<number>;
5141
5346
  readonly rightValue: _angular_core.InputSignal<number>;
@@ -5174,10 +5379,10 @@ declare class TwVuMeterComponent implements OnInit {
5174
5379
  protected readonly peakValues: _angular_core.WritableSignal<number[]>;
5175
5380
  protected readonly rmsValues: _angular_core.WritableSignal<number[]>;
5176
5381
  protected readonly clipStates: _angular_core.WritableSignal<boolean[]>;
5177
- private peakDecayTimers;
5382
+ private peakHoldUntil;
5178
5383
  private rmsBuffers;
5179
5384
  private rmsWriteIndices;
5180
- ngOnInit(): void;
5385
+ constructor();
5181
5386
  protected readonly channels: _angular_core.Signal<number[]>;
5182
5387
  protected readonly showRmsBar: _angular_core.Signal<boolean>;
5183
5388
  protected readonly meterModeLabel: _angular_core.Signal<"" | "PEAK" | "RMS" | "P/R">;
@@ -5191,6 +5396,7 @@ declare class TwVuMeterComponent implements OnInit {
5191
5396
  label: string;
5192
5397
  }[]>;
5193
5398
  protected readonly containerClasses: _angular_core.Signal<string>;
5399
+ protected readonly meterAriaLabel: _angular_core.Signal<string>;
5194
5400
  protected readonly effectiveHeight: _angular_core.Signal<number>;
5195
5401
  protected readonly effectiveWidth: _angular_core.Signal<number>;
5196
5402
  protected readonly effectiveBarWidth: _angular_core.Signal<number>;
@@ -5258,17 +5464,19 @@ interface WaveformColors {
5258
5464
  * <tw-waveform [peaks]="peakData" variant="mirror" colorScheme="green"></tw-waveform>
5259
5465
  * ```
5260
5466
  */
5261
- declare class TwWaveformComponent implements AfterViewInit, OnChanges {
5467
+ declare class TwWaveformComponent implements AfterViewInit, OnChanges, OnDestroy {
5262
5468
  private readonly twClass;
5263
- private readonly destroyRef;
5469
+ private readonly zone;
5264
5470
  private readonly canvas;
5265
5471
  readonly audioBuffer: _angular_core.InputSignal<AudioBuffer | null>;
5266
5472
  readonly peaks: _angular_core.InputSignal<number[]>;
5267
5473
  readonly duration: _angular_core.InputSignal<number>;
5268
5474
  readonly mode: _angular_core.InputSignal<WaveformMode>;
5269
5475
  readonly analyserNode: _angular_core.InputSignal<AnalyserNode | null>;
5270
- readonly fftSize: _angular_core.InputSignal<number>;
5271
- readonly smoothing: _angular_core.InputSignal<number>;
5476
+ /** FFT size for real-time analysis. When omitted, the analyser node's existing fftSize is used untouched. */
5477
+ readonly fftSize: _angular_core.InputSignal<number | undefined>;
5478
+ /** Smoothing factor for real-time analysis. When omitted, the analyser node's existing smoothing is used untouched. */
5479
+ readonly smoothing: _angular_core.InputSignal<number | undefined>;
5272
5480
  readonly showTriggerLine: _angular_core.InputSignal<boolean>;
5273
5481
  readonly gain: _angular_core.InputSignal<number>;
5274
5482
  readonly size: _angular_core.InputSignal<WaveformSize>;
@@ -5322,12 +5530,15 @@ declare class TwWaveformComponent implements AfterViewInit, OnChanges {
5322
5530
  private ctx;
5323
5531
  private peakData;
5324
5532
  private animationFrame;
5533
+ private panDragController;
5534
+ private peakProcessToken;
5325
5535
  private timeDomainData;
5326
5536
  private isRealTimeRunning;
5327
5537
  protected readonly Math: Math;
5328
5538
  constructor();
5329
5539
  ngAfterViewInit(): void;
5330
5540
  ngOnChanges(changes: SimpleChanges): void;
5541
+ ngOnDestroy(): void;
5331
5542
  protected readonly effectiveWidth: _angular_core.Signal<number>;
5332
5543
  protected readonly effectiveHeight: _angular_core.Signal<number>;
5333
5544
  protected readonly effectiveBarWidth: _angular_core.Signal<number>;
@@ -5350,6 +5561,8 @@ declare class TwWaveformComponent implements AfterViewInit, OnChanges {
5350
5561
  protected readonly colors: _angular_core.Signal<WaveformColors>;
5351
5562
  private initCanvas;
5352
5563
  private processPeaks;
5564
+ private processPeaksChunked;
5565
+ private scanPeakRange;
5353
5566
  private setupRealTimeMode;
5354
5567
  private stopRealTimeMode;
5355
5568
  private drawRealTime;
@@ -5501,9 +5714,11 @@ interface ThumbnailSpriteConfig {
5501
5714
  * ></tw-scrubber>
5502
5715
  * ```
5503
5716
  */
5504
- declare class TwScrubberComponent {
5717
+ declare class TwScrubberComponent implements OnDestroy {
5505
5718
  private readonly twClass;
5506
5719
  private readonly trackContainer;
5720
+ private dragController;
5721
+ ngOnDestroy(): void;
5507
5722
  readonly currentTime: _angular_core.InputSignal<number>;
5508
5723
  readonly duration: _angular_core.InputSignal<number>;
5509
5724
  readonly buffered: _angular_core.InputSignal<number>;
@@ -5571,6 +5786,7 @@ type FaderOrientation = 'vertical' | 'horizontal';
5571
5786
  declare class TwFaderComponent implements ControlValueAccessor, OnDestroy {
5572
5787
  private readonly elementRef;
5573
5788
  private readonly a11y;
5789
+ private readonly mobileSupport;
5574
5790
  private readonly trackRef;
5575
5791
  constructor();
5576
5792
  ngOnDestroy(): void;
@@ -5610,10 +5826,16 @@ declare class TwFaderComponent implements ControlValueAccessor, OnDestroy {
5610
5826
  protected readonly internalValue: _angular_core.WritableSignal<number>;
5611
5827
  protected readonly isDragging: _angular_core.WritableSignal<boolean>;
5612
5828
  protected readonly peakHoldLevel: _angular_core.WritableSignal<number>;
5829
+ private readonly cvaDisabled;
5830
+ protected readonly isDisabled: _angular_core.Signal<boolean>;
5831
+ protected readonly ariaLabel: _angular_core.Signal<string>;
5832
+ protected readonly effectiveReducedMotion: _angular_core.Signal<boolean>;
5613
5833
  private onChange;
5614
5834
  private onTouched;
5615
5835
  private peakHoldTimeout;
5616
5836
  private lastPeakLevel;
5837
+ private dragController;
5838
+ private lastHapticTime;
5617
5839
  protected readonly dimensions: _angular_core.Signal<{
5618
5840
  trackLength: number;
5619
5841
  trackWidth: number;
@@ -5678,9 +5900,11 @@ declare class TwFaderComponent implements ControlValueAccessor, OnDestroy {
5678
5900
  protected checkPeakLevel(): void;
5679
5901
  onMouseDown(event: MouseEvent): void;
5680
5902
  onTouchStart(event: TouchEvent): void;
5903
+ onKeyDown(event: KeyboardEvent): void;
5681
5904
  private startDrag;
5682
5905
  private updateValueFromPosition;
5683
5906
  private setValue;
5907
+ private triggerHaptics;
5684
5908
  protected resetToDefault(): void;
5685
5909
  writeValue(value: number): void;
5686
5910
  registerOnChange(fn: (value: number) => void): void;
@@ -5702,7 +5926,7 @@ type PanControlSize = 'sm' | 'md' | 'lg';
5702
5926
  * <tw-pan-control variant="stereo-width" [(ngModel)]="width"></tw-pan-control>
5703
5927
  * ```
5704
5928
  */
5705
- declare class TwPanControlComponent implements ControlValueAccessor {
5929
+ declare class TwPanControlComponent implements ControlValueAccessor, OnDestroy {
5706
5930
  private readonly twClass;
5707
5931
  protected readonly Math: Math;
5708
5932
  private readonly trackRef;
@@ -5724,6 +5948,9 @@ declare class TwPanControlComponent implements ControlValueAccessor {
5724
5948
  protected readonly isDragging: _angular_core.WritableSignal<boolean>;
5725
5949
  private onChange;
5726
5950
  private onTouched;
5951
+ private dragController;
5952
+ private dragRect;
5953
+ ngOnDestroy(): void;
5727
5954
  writeValue(value: number): void;
5728
5955
  registerOnChange(fn: (value: number) => void): void;
5729
5956
  registerOnTouched(fn: () => void): void;
@@ -5747,6 +5974,7 @@ declare class TwPanControlComponent implements ControlValueAccessor {
5747
5974
  }[]>;
5748
5975
  onMouseDown(event: MouseEvent): void;
5749
5976
  onDoubleClick(): void;
5977
+ onKeyDown(event: KeyboardEvent): void;
5750
5978
  private readonly onMouseMove;
5751
5979
  private readonly onMouseUp;
5752
5980
  private updateValueFromMouseEvent;
@@ -5829,6 +6057,7 @@ type FrequencyScale = 'linear' | 'logarithmic';
5829
6057
  declare class TwSpectrumComponent implements AfterViewInit, OnChanges {
5830
6058
  private readonly twClass;
5831
6059
  private readonly destroyRef;
6060
+ private readonly zone;
5832
6061
  private readonly canvas;
5833
6062
  readonly analyserNode: _angular_core.InputSignal<AnalyserNode | null>;
5834
6063
  readonly frequencyData: _angular_core.InputSignal<number[] | Uint8Array<ArrayBufferLike>>;
@@ -5839,9 +6068,12 @@ declare class TwSpectrumComponent implements AfterViewInit, OnChanges {
5839
6068
  readonly barCount: _angular_core.InputSignal<number>;
5840
6069
  readonly barGap: _angular_core.InputSignal<number>;
5841
6070
  readonly barRadius: _angular_core.InputSignal<number>;
5842
- readonly smoothing: _angular_core.InputSignal<number>;
5843
- readonly minDecibels: _angular_core.InputSignal<number>;
5844
- readonly maxDecibels: _angular_core.InputSignal<number>;
6071
+ /** Smoothing factor applied to the analyser. When omitted, the node's existing smoothing is used untouched. */
6072
+ readonly smoothing: _angular_core.InputSignal<number | undefined>;
6073
+ /** Analyser minDecibels. When omitted, the node's existing value is used untouched. */
6074
+ readonly minDecibels: _angular_core.InputSignal<number | undefined>;
6075
+ /** Analyser maxDecibels. When omitted, the node's existing value is used untouched. */
6076
+ readonly maxDecibels: _angular_core.InputSignal<number | undefined>;
5845
6077
  readonly showPeaks: _angular_core.InputSignal<boolean>;
5846
6078
  readonly peakDecay: _angular_core.InputSignal<number>;
5847
6079
  readonly showLabels: _angular_core.InputSignal<boolean>;
@@ -5859,13 +6091,16 @@ declare class TwSpectrumComponent implements AfterViewInit, OnChanges {
5859
6091
  readonly frequencyScale: _angular_core.InputSignal<FrequencyScale>;
5860
6092
  readonly minFrequency: _angular_core.InputSignal<number>;
5861
6093
  readonly maxFrequency: _angular_core.InputSignal<number>;
6094
+ protected readonly effectiveFrequencyScale: _angular_core.WritableSignal<FrequencyScale>;
5862
6095
  private ctx;
5863
6096
  private animationFrame;
5864
6097
  private dataArray;
6098
+ private conversionBuffer;
5865
6099
  private peaks;
5866
6100
  private isRunning;
5867
6101
  private sampleRate;
5868
6102
  private binToBarMapping;
6103
+ constructor();
5869
6104
  protected readonly frequencyLabels: _angular_core.Signal<string[]>;
5870
6105
  private labelToFreq;
5871
6106
  private freqToLabel;
@@ -5877,6 +6112,7 @@ declare class TwSpectrumComponent implements AfterViewInit, OnChanges {
5877
6112
  private calculateBinMapping;
5878
6113
  private startAnimation;
5879
6114
  private draw;
6115
+ private getStaticData;
5880
6116
  private drawBars;
5881
6117
  private getBarValue;
5882
6118
  private drawGradientBars;
@@ -5940,7 +6176,7 @@ interface MidiDevice {
5940
6176
  * ></tw-piano>
5941
6177
  * ```
5942
6178
  */
5943
- declare class TwPianoComponent {
6179
+ declare class TwPianoComponent implements OnDestroy {
5944
6180
  private readonly twClass;
5945
6181
  readonly startOctave: _angular_core.InputSignal<number>;
5946
6182
  readonly octaves: _angular_core.InputSignal<number>;
@@ -5968,6 +6204,8 @@ declare class TwPianoComponent {
5968
6204
  protected readonly connectedMidiDevice: _angular_core.WritableSignal<MidiDevice | null>;
5969
6205
  private midiAccess;
5970
6206
  private midiInputs;
6207
+ private readonly midiStateChangeHandler;
6208
+ ngOnDestroy(): void;
5971
6209
  private readonly sizeConfig;
5972
6210
  protected readonly height: _angular_core.Signal<number>;
5973
6211
  protected readonly whiteKeyWidth: _angular_core.Signal<number>;
@@ -5990,6 +6228,8 @@ declare class TwPianoComponent {
5990
6228
  onKeyUp(key: PianoKey): void;
5991
6229
  onTouchStart(event: TouchEvent, key: PianoKey): void;
5992
6230
  onTouchEnd(key: PianoKey): void;
6231
+ onKeyboardDown(event: Event, key: PianoKey): void;
6232
+ onKeyboardUp(event: Event, key: PianoKey): void;
5993
6233
  initMidi(): Promise<void>;
5994
6234
  private updateMidiDevices;
5995
6235
  private handleMidiMessage;
@@ -6034,6 +6274,8 @@ interface EQBandChange {
6034
6274
  }
6035
6275
  declare class TwParametricEQComponent implements AfterViewInit, OnDestroy {
6036
6276
  canvasRef: ElementRef<HTMLCanvasElement>;
6277
+ private readonly zone;
6278
+ constructor();
6037
6279
  readonly bands: _angular_core.InputSignal<EQBand[]>;
6038
6280
  readonly width: _angular_core.InputSignalWithTransform<number, unknown>;
6039
6281
  readonly height: _angular_core.InputSignalWithTransform<number, unknown>;
@@ -6068,6 +6310,7 @@ declare class TwParametricEQComponent implements AfterViewInit, OnDestroy {
6068
6310
  protected readonly containerClasses: _angular_core.Signal<string>;
6069
6311
  ngAfterViewInit(): void;
6070
6312
  ngOnDestroy(): void;
6313
+ private requestDraw;
6071
6314
  onMouseDown(event: MouseEvent): void;
6072
6315
  onMouseMove(event: MouseEvent): void;
6073
6316
  onMouseUp(): void;
@@ -6087,6 +6330,8 @@ declare class TwParametricEQComponent implements AfterViewInit, OnDestroy {
6087
6330
  private findBandAtPosition;
6088
6331
  protected toggleBand(band: EQBand): void;
6089
6332
  protected selectBand(band: EQBand): void;
6333
+ protected onBandKeydown(event: KeyboardEvent, band: EQBand): void;
6334
+ protected bandAriaLabel(band: EQBand): string;
6090
6335
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TwParametricEQComponent, never>;
6091
6336
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwParametricEQComponent, "tw-parametric-eq", never, { "bands": { "alias": "bands"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "minFreq": { "alias": "minFreq"; "required": false; "isSignal": true; }; "maxFreq": { "alias": "maxFreq"; "required": false; "isSignal": true; }; "minGain": { "alias": "minGain"; "required": false; "isSignal": true; }; "maxGain": { "alias": "maxGain"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "showGrid": { "alias": "showGrid"; "required": false; "isSignal": true; }; "showLabels": { "alias": "showLabels"; "required": false; "isSignal": true; }; "showCurve": { "alias": "showCurve"; "required": false; "isSignal": true; }; "interactive": { "alias": "interactive"; "required": false; "isSignal": true; }; "analyserNode": { "alias": "analyserNode"; "required": false; "isSignal": true; }; "classOverride": { "alias": "classOverride"; "required": false; "isSignal": true; }; }, { "bandChange": "bandChange"; "bandsChange": "bandsChange"; }, never, never, true, never>;
6092
6337
  }
@@ -6106,7 +6351,7 @@ interface EQPreset {
6106
6351
  }
6107
6352
  type EQPresetCategory = 'flat' | 'music' | 'voice' | 'instrument' | 'correction' | 'custom';
6108
6353
  declare const EQ_PRESETS: EQPreset[];
6109
- declare class TwGraphicEQComponent implements ControlValueAccessor {
6354
+ declare class TwGraphicEQComponent implements ControlValueAccessor, OnDestroy {
6110
6355
  readonly bandCount: _angular_core.InputSignal<GraphicEQBandCount>;
6111
6356
  readonly minGain: _angular_core.InputSignalWithTransform<number, unknown>;
6112
6357
  readonly maxGain: _angular_core.InputSignalWithTransform<number, unknown>;
@@ -6135,6 +6380,8 @@ declare class TwGraphicEQComponent implements ControlValueAccessor {
6135
6380
  protected readonly EQ_PRESETS: EQPreset[];
6136
6381
  private onChange;
6137
6382
  private onTouched;
6383
+ private dragController;
6384
+ ngOnDestroy(): void;
6138
6385
  protected readonly frequencies: _angular_core.Signal<number[]>;
6139
6386
  protected readonly availablePresets: _angular_core.Signal<EQPreset[]>;
6140
6387
  protected readonly filteredPresets: _angular_core.Signal<EQPreset[]>;
@@ -6159,8 +6406,7 @@ declare class TwGraphicEQComponent implements ControlValueAccessor {
6159
6406
  protected readonly curvePath: _angular_core.Signal<string>;
6160
6407
  protected onBandMouseDown(event: MouseEvent, bandIndex: number): void;
6161
6408
  protected onBandTouchStart(event: TouchEvent, bandIndex: number): void;
6162
- private updateBandFromEvent;
6163
- private updateBandFromTouch;
6409
+ protected onBandKeydown(event: KeyboardEvent, bandIndex: number): void;
6164
6410
  private updateBandValue;
6165
6411
  private emitValues;
6166
6412
  protected resetBand(bandIndex: number): void;
@@ -6188,6 +6434,7 @@ type OscilloscopeVariant = 'default' | 'retro' | 'neon' | 'minimal';
6188
6434
  type OscilloscopeTriggerMode = 'auto' | 'normal' | 'single';
6189
6435
  declare class TwOscilloscopeComponent implements AfterViewInit, OnChanges, OnDestroy {
6190
6436
  private readonly canvasRef;
6437
+ private readonly zone;
6191
6438
  readonly analyserNode: _angular_core.InputSignal<AnalyserNode | undefined>;
6192
6439
  readonly width: _angular_core.InputSignalWithTransform<number, unknown>;
6193
6440
  readonly height: _angular_core.InputSignalWithTransform<number, unknown>;
@@ -6204,6 +6451,7 @@ declare class TwOscilloscopeComponent implements AfterViewInit, OnChanges, OnDes
6204
6451
  private ctx;
6205
6452
  private animationFrameId;
6206
6453
  private dataArray;
6454
+ private singleFrozen;
6207
6455
  protected readonly colors: _angular_core.Signal<{
6208
6456
  background: string;
6209
6457
  grid: string;
@@ -6216,6 +6464,9 @@ declare class TwOscilloscopeComponent implements AfterViewInit, OnChanges, OnDes
6216
6464
  ngOnChanges(changes: SimpleChanges): void;
6217
6465
  ngOnDestroy(): void;
6218
6466
  private setupAnalyser;
6467
+ /** Re-arm a frozen 'single' trigger sweep and resume drawing. */
6468
+ rearm(): void;
6469
+ private restartDraw;
6219
6470
  private draw;
6220
6471
  private drawGrid;
6221
6472
  private drawWaveform;
@@ -6296,6 +6547,8 @@ declare class TwChannelStripComponent implements ControlValueAccessor {
6296
6547
  protected readonly dialSize: _angular_core.Signal<"sm" | "md" | "lg">;
6297
6548
  protected readonly labelClasses: _angular_core.Signal<string>;
6298
6549
  protected readonly auxKnobSize: _angular_core.Signal<"xs" | "sm">;
6550
+ protected readonly meterHeight: _angular_core.Signal<100 | 60 | 80>;
6551
+ protected peakMarkerBottom(peak: number): number;
6299
6552
  protected onVolumeChange(value: number): void;
6300
6553
  protected onPanChange(value: number): void;
6301
6554
  protected toggleMute(): void;
@@ -6401,6 +6654,7 @@ declare class TwMixerComponent {
6401
6654
  protected readonly scrollOffset: _angular_core.WritableSignal<number>;
6402
6655
  protected readonly collapsedSections: _angular_core.WritableSignal<Set<string>>;
6403
6656
  protected readonly currentBreakpoint: _angular_core.WritableSignal<MixerBreakpoint>;
6657
+ constructor();
6404
6658
  protected readonly visibleChannels: _angular_core.Signal<MixerChannel[]>;
6405
6659
  protected readonly effectiveMaxChannels: _angular_core.Signal<number>;
6406
6660
  protected readonly effectiveSize: _angular_core.Signal<MixerSize>;
@@ -6450,7 +6704,7 @@ interface MetronomeBeat {
6450
6704
  }
6451
6705
  declare const ACCENT_PRESETS: Record<TimeSignature, AccentPattern[]>;
6452
6706
  declare class TwMetronomeComponent implements OnInit, OnDestroy {
6453
- private readonly destroyRef;
6707
+ private readonly zone;
6454
6708
  readonly bpm: _angular_core.InputSignalWithTransform<number, unknown>;
6455
6709
  readonly timeSignature: _angular_core.InputSignal<TimeSignature>;
6456
6710
  readonly variant: _angular_core.InputSignal<MetronomeVariant>;
@@ -6477,9 +6731,17 @@ declare class TwMetronomeComponent implements OnInit, OnDestroy {
6477
6731
  protected readonly tapTimes: _angular_core.WritableSignal<number[]>;
6478
6732
  protected readonly internalAccentPattern: _angular_core.WritableSignal<AccentLevel[]>;
6479
6733
  protected readonly selectedPresetIndex: _angular_core.WritableSignal<number>;
6734
+ /** True when the AudioContext could not resume without a user gesture (e.g. autoStart). */
6735
+ protected readonly needsGesture: _angular_core.WritableSignal<boolean>;
6480
6736
  protected readonly Math: Math;
6481
- private readonly stop$;
6482
6737
  private audioContext;
6738
+ private schedulerTimer;
6739
+ private nextNoteTime;
6740
+ private subBeatCounter;
6741
+ private beatCounter;
6742
+ private readonly pendingBeatTimeouts;
6743
+ private static readonly SCHEDULER_INTERVAL_MS;
6744
+ private static readonly LOOKAHEAD_SECONDS;
6483
6745
  protected readonly beatsPerMeasure: _angular_core.Signal<number>;
6484
6746
  protected readonly beatUnit: _angular_core.Signal<number>;
6485
6747
  protected readonly beatIndicators: _angular_core.Signal<number[]>;
@@ -6493,7 +6755,9 @@ declare class TwMetronomeComponent implements OnInit, OnDestroy {
6493
6755
  ngOnInit(): void;
6494
6756
  private initializeAccentPattern;
6495
6757
  ngOnDestroy(): void;
6496
- protected start(): void;
6758
+ protected start(): Promise<void>;
6759
+ private scheduler;
6760
+ private scheduleSubBeat;
6497
6761
  protected stop(): void;
6498
6762
  protected toggle(): void;
6499
6763
  protected onBpmInput(event: Event): void;
@@ -6520,14 +6784,18 @@ interface BeatEvent {
6520
6784
  }
6521
6785
  declare class TwVisualizerComponent implements AfterViewInit, OnDestroy {
6522
6786
  canvasRef: ElementRef<HTMLCanvasElement>;
6787
+ private readonly zone;
6523
6788
  readonly analyserNode: _angular_core.InputSignal<AnalyserNode | undefined>;
6789
+ /** Render animated mock data when no analyser node is connected (for demos). */
6790
+ readonly demoMode: _angular_core.InputSignal<boolean>;
6524
6791
  readonly width: _angular_core.InputSignalWithTransform<number, unknown>;
6525
6792
  readonly height: _angular_core.InputSignalWithTransform<number, unknown>;
6526
6793
  readonly variant: _angular_core.InputSignal<VisualizerVariant>;
6527
6794
  readonly colorScheme: _angular_core.InputSignal<VisualizerColorScheme>;
6528
6795
  readonly customColors: _angular_core.InputSignal<string[]>;
6529
6796
  readonly sensitivity: _angular_core.InputSignalWithTransform<number, unknown>;
6530
- readonly smoothing: _angular_core.InputSignalWithTransform<number, unknown>;
6797
+ /** Smoothing factor applied to the analyser. When omitted, the node's existing smoothing is used untouched. */
6798
+ readonly smoothing: _angular_core.InputSignalWithTransform<number | undefined, unknown>;
6531
6799
  readonly backgroundColor: _angular_core.InputSignal<string>;
6532
6800
  readonly showBackground: _angular_core.InputSignal<boolean>;
6533
6801
  readonly reactive: _angular_core.InputSignal<boolean>;
@@ -6553,6 +6821,7 @@ declare class TwVisualizerComponent implements AfterViewInit, OnDestroy {
6553
6821
  private timeDomainData;
6554
6822
  private particles;
6555
6823
  private rotation;
6824
+ private idleFrameDrawn;
6556
6825
  private readonly energyHistory;
6557
6826
  private beatTimestamps;
6558
6827
  private lastBeatTime;
@@ -6562,6 +6831,8 @@ declare class TwVisualizerComponent implements AfterViewInit, OnDestroy {
6562
6831
  protected readonly containerClasses: _angular_core.Signal<string>;
6563
6832
  ngAfterViewInit(): void;
6564
6833
  ngOnDestroy(): void;
6834
+ private scheduleNextFrame;
6835
+ private drawIdleFrame;
6565
6836
  private draw;
6566
6837
  private detectBeat;
6567
6838
  private getFrequencyBandEnergy;
@@ -6579,7 +6850,7 @@ declare class TwVisualizerComponent implements AfterViewInit, OnDestroy {
6579
6850
  private getAverageFrequency;
6580
6851
  private roundRect;
6581
6852
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TwVisualizerComponent, never>;
6582
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwVisualizerComponent, "tw-visualizer", never, { "analyserNode": { "alias": "analyserNode"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "colorScheme": { "alias": "colorScheme"; "required": false; "isSignal": true; }; "customColors": { "alias": "customColors"; "required": false; "isSignal": true; }; "sensitivity": { "alias": "sensitivity"; "required": false; "isSignal": true; }; "smoothing": { "alias": "smoothing"; "required": false; "isSignal": true; }; "backgroundColor": { "alias": "backgroundColor"; "required": false; "isSignal": true; }; "showBackground": { "alias": "showBackground"; "required": false; "isSignal": true; }; "reactive": { "alias": "reactive"; "required": false; "isSignal": true; }; "classOverride": { "alias": "classOverride"; "required": false; "isSignal": true; }; "enableBeatDetection": { "alias": "enableBeatDetection"; "required": false; "isSignal": true; }; "beatHighlightMode": { "alias": "beatHighlightMode"; "required": false; "isSignal": true; }; "beatSensitivity": { "alias": "beatSensitivity"; "required": false; "isSignal": true; }; "beatDecay": { "alias": "beatDecay"; "required": false; "isSignal": true; }; "beatHistorySize": { "alias": "beatHistorySize"; "required": false; "isSignal": true; }; "beatFlashColor": { "alias": "beatFlashColor"; "required": false; "isSignal": true; }; "beatFlashOpacity": { "alias": "beatFlashOpacity"; "required": false; "isSignal": true; }; "showBeatIndicator": { "alias": "showBeatIndicator"; "required": false; "isSignal": true; }; "detectLowBeat": { "alias": "detectLowBeat"; "required": false; "isSignal": true; }; "detectMidBeat": { "alias": "detectMidBeat"; "required": false; "isSignal": true; }; "detectHighBeat": { "alias": "detectHighBeat"; "required": false; "isSignal": true; }; }, { "beatDetected": "beatDetected"; }, never, never, true, never>;
6853
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwVisualizerComponent, "tw-visualizer", never, { "analyserNode": { "alias": "analyserNode"; "required": false; "isSignal": true; }; "demoMode": { "alias": "demoMode"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "colorScheme": { "alias": "colorScheme"; "required": false; "isSignal": true; }; "customColors": { "alias": "customColors"; "required": false; "isSignal": true; }; "sensitivity": { "alias": "sensitivity"; "required": false; "isSignal": true; }; "smoothing": { "alias": "smoothing"; "required": false; "isSignal": true; }; "backgroundColor": { "alias": "backgroundColor"; "required": false; "isSignal": true; }; "showBackground": { "alias": "showBackground"; "required": false; "isSignal": true; }; "reactive": { "alias": "reactive"; "required": false; "isSignal": true; }; "classOverride": { "alias": "classOverride"; "required": false; "isSignal": true; }; "enableBeatDetection": { "alias": "enableBeatDetection"; "required": false; "isSignal": true; }; "beatHighlightMode": { "alias": "beatHighlightMode"; "required": false; "isSignal": true; }; "beatSensitivity": { "alias": "beatSensitivity"; "required": false; "isSignal": true; }; "beatDecay": { "alias": "beatDecay"; "required": false; "isSignal": true; }; "beatHistorySize": { "alias": "beatHistorySize"; "required": false; "isSignal": true; }; "beatFlashColor": { "alias": "beatFlashColor"; "required": false; "isSignal": true; }; "beatFlashOpacity": { "alias": "beatFlashOpacity"; "required": false; "isSignal": true; }; "showBeatIndicator": { "alias": "showBeatIndicator"; "required": false; "isSignal": true; }; "detectLowBeat": { "alias": "detectLowBeat"; "required": false; "isSignal": true; }; "detectMidBeat": { "alias": "detectMidBeat"; "required": false; "isSignal": true; }; "detectHighBeat": { "alias": "detectHighBeat"; "required": false; "isSignal": true; }; }, { "beatDetected": "beatDetected"; }, never, never, true, never>;
6583
6854
  }
6584
6855
 
6585
6856
  type AudioPlayerVariant = 'default' | 'minimal' | 'compact' | 'full';
@@ -6689,8 +6960,8 @@ interface LooperEvent {
6689
6960
  * <tw-looper [maxLayers]="4" [showWaveform]="true"></tw-looper>
6690
6961
  * ```
6691
6962
  */
6692
- declare class TwLooperComponent implements OnInit, OnDestroy {
6693
- private readonly destroyRef;
6963
+ declare class TwLooperComponent implements OnDestroy {
6964
+ private readonly zone;
6694
6965
  readonly waveformCanvas: _angular_core.Signal<ElementRef<HTMLCanvasElement> | undefined>;
6695
6966
  readonly variant: _angular_core.InputSignal<LooperVariant>;
6696
6967
  readonly size: _angular_core.InputSignal<LooperSize>;
@@ -6715,6 +6986,8 @@ declare class TwLooperComponent implements OnInit, OnDestroy {
6715
6986
  readonly loopEvent: _angular_core.OutputEmitterRef<LooperEvent>;
6716
6987
  readonly layerChange: _angular_core.OutputEmitterRef<LoopLayer[]>;
6717
6988
  readonly durationChange: _angular_core.OutputEmitterRef<number>;
6989
+ /** Emits when microphone access or audio setup fails */
6990
+ readonly error: _angular_core.OutputEmitterRef<string>;
6718
6991
  protected readonly state: _angular_core.WritableSignal<LooperState>;
6719
6992
  protected readonly layers: _angular_core.WritableSignal<LoopLayer[]>;
6720
6993
  protected readonly currentLayerIndex: _angular_core.WritableSignal<number>;
@@ -6738,7 +7011,9 @@ declare class TwLooperComponent implements OnInit, OnDestroy {
6738
7011
  private animationFrame;
6739
7012
  private ctx;
6740
7013
  private layerIdCounter;
6741
- ngOnInit(): void;
7014
+ private micErrorMessage;
7015
+ private clickTrackTimer;
7016
+ constructor();
6742
7017
  ngOnDestroy(): void;
6743
7018
  private initAudio;
6744
7019
  private cleanup;
@@ -6760,6 +7035,8 @@ declare class TwLooperComponent implements OnInit, OnDestroy {
6760
7035
  private performCountIn;
6761
7036
  private playClickSound;
6762
7037
  private sleep;
7038
+ private startClickTrack;
7039
+ private stopClickTrack;
6763
7040
  private processRecording;
6764
7041
  private playAllLayers;
6765
7042
  private stopAllPlayback;
@@ -6788,7 +7065,7 @@ declare class TwLooperComponent implements OnInit, OnDestroy {
6788
7065
  protected readonly canOverdub: _angular_core.Signal<boolean>;
6789
7066
  protected readonly isActive: _angular_core.Signal<boolean>;
6790
7067
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TwLooperComponent, never>;
6791
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwLooperComponent, "tw-looper", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "maxLayers": { "alias": "maxLayers"; "required": false; "isSignal": true; }; "maxDuration": { "alias": "maxDuration"; "required": false; "isSignal": true; }; "showWaveform": { "alias": "showWaveform"; "required": false; "isSignal": true; }; "showLayers": { "alias": "showLayers"; "required": false; "isSignal": true; }; "showTimer": { "alias": "showTimer"; "required": false; "isSignal": true; }; "showControls": { "alias": "showControls"; "required": false; "isSignal": true; }; "showUndoRedo": { "alias": "showUndoRedo"; "required": false; "isSignal": true; }; "showSpeedControl": { "alias": "showSpeedControl"; "required": false; "isSignal": true; }; "showVolumeControl": { "alias": "showVolumeControl"; "required": false; "isSignal": true; }; "autoPlay": { "alias": "autoPlay"; "required": false; "isSignal": true; }; "countIn": { "alias": "countIn"; "required": false; "isSignal": true; }; "countInBeats": { "alias": "countInBeats"; "required": false; "isSignal": true; }; "clickTrack": { "alias": "clickTrack"; "required": false; "isSignal": true; }; "clickBpm": { "alias": "clickBpm"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "classOverride": { "alias": "classOverride"; "required": false; "isSignal": true; }; "audioSource": { "alias": "audioSource"; "required": false; "isSignal": true; }; }, { "stateChange": "stateChange"; "loopEvent": "loopEvent"; "layerChange": "layerChange"; "durationChange": "durationChange"; }, never, never, true, never>;
7068
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwLooperComponent, "tw-looper", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "maxLayers": { "alias": "maxLayers"; "required": false; "isSignal": true; }; "maxDuration": { "alias": "maxDuration"; "required": false; "isSignal": true; }; "showWaveform": { "alias": "showWaveform"; "required": false; "isSignal": true; }; "showLayers": { "alias": "showLayers"; "required": false; "isSignal": true; }; "showTimer": { "alias": "showTimer"; "required": false; "isSignal": true; }; "showControls": { "alias": "showControls"; "required": false; "isSignal": true; }; "showUndoRedo": { "alias": "showUndoRedo"; "required": false; "isSignal": true; }; "showSpeedControl": { "alias": "showSpeedControl"; "required": false; "isSignal": true; }; "showVolumeControl": { "alias": "showVolumeControl"; "required": false; "isSignal": true; }; "autoPlay": { "alias": "autoPlay"; "required": false; "isSignal": true; }; "countIn": { "alias": "countIn"; "required": false; "isSignal": true; }; "countInBeats": { "alias": "countInBeats"; "required": false; "isSignal": true; }; "clickTrack": { "alias": "clickTrack"; "required": false; "isSignal": true; }; "clickBpm": { "alias": "clickBpm"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "classOverride": { "alias": "classOverride"; "required": false; "isSignal": true; }; "audioSource": { "alias": "audioSource"; "required": false; "isSignal": true; }; }, { "stateChange": "stateChange"; "loopEvent": "loopEvent"; "layerChange": "layerChange"; "durationChange": "durationChange"; "error": "error"; }, never, never, true, never>;
6792
7069
  }
6793
7070
 
6794
7071
  type ClefType = 'treble' | 'bass' | 'alto' | 'tenor' | 'percussion';
@@ -6911,7 +7188,7 @@ declare class TwNoteComponent {
6911
7188
  protected readonly stemX: _angular_core.Signal<number>;
6912
7189
  protected readonly stemY1: _angular_core.Signal<number>;
6913
7190
  protected readonly stemY2: _angular_core.Signal<number>;
6914
- protected readonly flagCount: _angular_core.Signal<1 | 0 | 2 | 3>;
7191
+ protected readonly flagCount: _angular_core.Signal<0 | 1 | 2 | 3>;
6915
7192
  protected readonly noteColor: _angular_core.Signal<string>;
6916
7193
  protected readonly noteHeadFill: _angular_core.Signal<string>;
6917
7194
  protected readonly containerClasses: _angular_core.Signal<string>;
@@ -6961,7 +7238,6 @@ interface ClipboardData {
6961
7238
  measureEnd: number;
6962
7239
  }
6963
7240
  declare class TwNoteInputComponent implements AfterViewInit, OnDestroy {
6964
- private readonly destroyRef;
6965
7241
  private readonly elementRef;
6966
7242
  private readonly staffContainer;
6967
7243
  readonly clef: _angular_core.InputSignal<ClefType>;
@@ -7013,6 +7289,8 @@ declare class TwNoteInputComponent implements AfterViewInit, OnDestroy {
7013
7289
  private midiAccess;
7014
7290
  protected readonly midiConnected: _angular_core.WritableSignal<boolean>;
7015
7291
  protected readonly midiDeviceName: _angular_core.WritableSignal<string | null>;
7292
+ private readonly midiStateChangeHandler;
7293
+ private noteDragController;
7016
7294
  private noteIdCounter;
7017
7295
  protected readonly voiceColors: Record<Voice, string>;
7018
7296
  protected getVoiceColorByNumber(voice: number): string;
@@ -7564,14 +7842,10 @@ declare class TwLeadSheetComponent {
7564
7842
  readonly showMeasureNumbers: _angular_core.InputSignal<boolean>;
7565
7843
  readonly showSlashes: _angular_core.InputSignal<boolean>;
7566
7844
  readonly showChordDiagrams: _angular_core.InputSignal<boolean>;
7567
- readonly showMelodyLine: _angular_core.InputSignal<boolean>;
7568
7845
  readonly showRehearsalMarks: _angular_core.InputSignal<boolean>;
7569
7846
  readonly diagramSize: _angular_core.InputSignal<"sm" | "md" | "lg">;
7570
7847
  readonly interactive: _angular_core.InputSignal<boolean>;
7571
7848
  readonly classOverride: _angular_core.InputSignal<string>;
7572
- readonly staffClef: _angular_core.InputSignal<ClefType>;
7573
- readonly staffWidth: _angular_core.InputSignalWithTransform<number, unknown>;
7574
- readonly staffHeight: _angular_core.InputSignalWithTransform<number, unknown>;
7575
7849
  readonly chordClick: _angular_core.OutputEmitterRef<{
7576
7850
  section: number;
7577
7851
  measure: number;
@@ -7615,7 +7889,7 @@ declare class TwLeadSheetComponent {
7615
7889
  protected getStaffTimeSignature(): StaffTimeSignature;
7616
7890
  protected getRhythmicSlashPath(beat: number, isAccent: boolean, measureWidth: number, beatsPerMeasure: number): string;
7617
7891
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TwLeadSheetComponent, never>;
7618
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwLeadSheetComponent, "tw-lead-sheet", never, { "data": { "alias": "data"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "style": { "alias": "style"; "required": false; "isSignal": true; }; "displayMode": { "alias": "displayMode"; "required": false; "isSignal": true; }; "slashStyle": { "alias": "slashStyle"; "required": false; "isSignal": true; }; "measuresPerRow": { "alias": "measuresPerRow"; "required": false; "isSignal": true; }; "showSectionNames": { "alias": "showSectionNames"; "required": false; "isSignal": true; }; "showMeasureNumbers": { "alias": "showMeasureNumbers"; "required": false; "isSignal": true; }; "showSlashes": { "alias": "showSlashes"; "required": false; "isSignal": true; }; "showChordDiagrams": { "alias": "showChordDiagrams"; "required": false; "isSignal": true; }; "showMelodyLine": { "alias": "showMelodyLine"; "required": false; "isSignal": true; }; "showRehearsalMarks": { "alias": "showRehearsalMarks"; "required": false; "isSignal": true; }; "diagramSize": { "alias": "diagramSize"; "required": false; "isSignal": true; }; "interactive": { "alias": "interactive"; "required": false; "isSignal": true; }; "classOverride": { "alias": "classOverride"; "required": false; "isSignal": true; }; "staffClef": { "alias": "staffClef"; "required": false; "isSignal": true; }; "staffWidth": { "alias": "staffWidth"; "required": false; "isSignal": true; }; "staffHeight": { "alias": "staffHeight"; "required": false; "isSignal": true; }; }, { "chordClick": "chordClick"; "measureClick": "measureClick"; }, never, never, true, never>;
7892
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwLeadSheetComponent, "tw-lead-sheet", never, { "data": { "alias": "data"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "style": { "alias": "style"; "required": false; "isSignal": true; }; "displayMode": { "alias": "displayMode"; "required": false; "isSignal": true; }; "slashStyle": { "alias": "slashStyle"; "required": false; "isSignal": true; }; "measuresPerRow": { "alias": "measuresPerRow"; "required": false; "isSignal": true; }; "showSectionNames": { "alias": "showSectionNames"; "required": false; "isSignal": true; }; "showMeasureNumbers": { "alias": "showMeasureNumbers"; "required": false; "isSignal": true; }; "showSlashes": { "alias": "showSlashes"; "required": false; "isSignal": true; }; "showChordDiagrams": { "alias": "showChordDiagrams"; "required": false; "isSignal": true; }; "showRehearsalMarks": { "alias": "showRehearsalMarks"; "required": false; "isSignal": true; }; "diagramSize": { "alias": "diagramSize"; "required": false; "isSignal": true; }; "interactive": { "alias": "interactive"; "required": false; "isSignal": true; }; "classOverride": { "alias": "classOverride"; "required": false; "isSignal": true; }; }, { "chordClick": "chordClick"; "measureClick": "measureClick"; }, never, never, true, never>;
7619
7893
  }
7620
7894
 
7621
7895
  type ScoreEditorVariant = 'default' | 'print' | 'minimal';
@@ -7672,8 +7946,6 @@ declare class TwScoreEditorComponent {
7672
7946
  readonly lineSpacing: _angular_core.InputSignalWithTransform<number, unknown>;
7673
7947
  readonly editable: _angular_core.InputSignal<boolean>;
7674
7948
  readonly initialScore: _angular_core.InputSignal<ScoreData | null>;
7675
- readonly musicXml: _angular_core.InputSignal<string | null>;
7676
- readonly abcNotation: _angular_core.InputSignal<string | null>;
7677
7949
  readonly showToolbar: _angular_core.InputSignal<boolean>;
7678
7950
  readonly showPartPanel: _angular_core.InputSignal<boolean>;
7679
7951
  readonly showLyricsEditor: _angular_core.InputSignal<boolean>;
@@ -7772,7 +8044,7 @@ declare class TwScoreEditorComponent {
7772
8044
  protected toggleRest(): void;
7773
8045
  protected setVoice(voice: number): void;
7774
8046
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TwScoreEditorComponent, never>;
7775
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwScoreEditorComponent, "tw-score-editor", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "staffHeight": { "alias": "staffHeight"; "required": false; "isSignal": true; }; "measures": { "alias": "measures"; "required": false; "isSignal": true; }; "lineSpacing": { "alias": "lineSpacing"; "required": false; "isSignal": true; }; "editable": { "alias": "editable"; "required": false; "isSignal": true; }; "initialScore": { "alias": "initialScore"; "required": false; "isSignal": true; }; "musicXml": { "alias": "musicXml"; "required": false; "isSignal": true; }; "abcNotation": { "alias": "abcNotation"; "required": false; "isSignal": true; }; "showToolbar": { "alias": "showToolbar"; "required": false; "isSignal": true; }; "showPartPanel": { "alias": "showPartPanel"; "required": false; "isSignal": true; }; "showLyricsEditor": { "alias": "showLyricsEditor"; "required": false; "isSignal": true; }; "enableMidiInput": { "alias": "enableMidiInput"; "required": false; "isSignal": true; }; "enableKeyboardShortcuts": { "alias": "enableKeyboardShortcuts"; "required": false; "isSignal": true; }; "maxParts": { "alias": "maxParts"; "required": false; "isSignal": true; }; "maxUndoHistory": { "alias": "maxUndoHistory"; "required": false; "isSignal": true; }; }, { "scoreChanged": "scoreChanged"; "partAdded": "partAdded"; "partRemoved": "partRemoved"; "exportRequested": "exportRequested"; "parseError": "parseError"; }, never, never, true, never>;
8047
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwScoreEditorComponent, "tw-score-editor", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "staffHeight": { "alias": "staffHeight"; "required": false; "isSignal": true; }; "measures": { "alias": "measures"; "required": false; "isSignal": true; }; "lineSpacing": { "alias": "lineSpacing"; "required": false; "isSignal": true; }; "editable": { "alias": "editable"; "required": false; "isSignal": true; }; "initialScore": { "alias": "initialScore"; "required": false; "isSignal": true; }; "showToolbar": { "alias": "showToolbar"; "required": false; "isSignal": true; }; "showPartPanel": { "alias": "showPartPanel"; "required": false; "isSignal": true; }; "showLyricsEditor": { "alias": "showLyricsEditor"; "required": false; "isSignal": true; }; "enableMidiInput": { "alias": "enableMidiInput"; "required": false; "isSignal": true; }; "enableKeyboardShortcuts": { "alias": "enableKeyboardShortcuts"; "required": false; "isSignal": true; }; "maxParts": { "alias": "maxParts"; "required": false; "isSignal": true; }; "maxUndoHistory": { "alias": "maxUndoHistory"; "required": false; "isSignal": true; }; }, { "scoreChanged": "scoreChanged"; "partAdded": "partAdded"; "partRemoved": "partRemoved"; "exportRequested": "exportRequested"; "parseError": "parseError"; }, never, never, true, never>;
7776
8048
  }
7777
8049
 
7778
8050
  type TunerVariant = 'default' | 'minimal' | 'analog' | 'strobe';
@@ -7785,7 +8057,7 @@ interface TuningData {
7785
8057
  inTune: boolean;
7786
8058
  }
7787
8059
  declare class TwTunerComponent implements AfterViewInit, OnDestroy {
7788
- private readonly destroyRef;
8060
+ private readonly zone;
7789
8061
  readonly variant: _angular_core.InputSignal<TunerVariant>;
7790
8062
  readonly mode: _angular_core.InputSignal<TunerMode>;
7791
8063
  readonly referenceFrequency: _angular_core.InputSignalWithTransform<number, unknown>;
@@ -7799,7 +8071,10 @@ declare class TwTunerComponent implements AfterViewInit, OnDestroy {
7799
8071
  readonly classOverride: _angular_core.InputSignal<string>;
7800
8072
  readonly tuningChange: _angular_core.OutputEmitterRef<TuningData>;
7801
8073
  readonly inTune: _angular_core.OutputEmitterRef<boolean>;
8074
+ /** Emits when microphone access or audio setup fails */
8075
+ readonly error: _angular_core.OutputEmitterRef<string>;
7802
8076
  protected readonly isListening: _angular_core.WritableSignal<boolean>;
8077
+ protected readonly errorState: _angular_core.WritableSignal<string | null>;
7803
8078
  protected readonly currentFrequency: _angular_core.WritableSignal<number>;
7804
8079
  protected readonly currentNote: _angular_core.WritableSignal<string>;
7805
8080
  protected readonly currentOctave: _angular_core.WritableSignal<number>;
@@ -7828,7 +8103,7 @@ declare class TwTunerComponent implements AfterViewInit, OnDestroy {
7828
8103
  protected selectString(index: number): void;
7829
8104
  protected getExpectedFrequency(noteName: string): number;
7830
8105
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TwTunerComponent, never>;
7831
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwTunerComponent, "tw-tuner", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "referenceFrequency": { "alias": "referenceFrequency"; "required": false; "isSignal": true; }; "tolerance": { "alias": "tolerance"; "required": false; "isSignal": true; }; "showFrequency": { "alias": "showFrequency"; "required": false; "isSignal": true; }; "showOctave": { "alias": "showOctave"; "required": false; "isSignal": true; }; "showCents": { "alias": "showCents"; "required": false; "isSignal": true; }; "showMeter": { "alias": "showMeter"; "required": false; "isSignal": true; }; "showStringSelector": { "alias": "showStringSelector"; "required": false; "isSignal": true; }; "autoStart": { "alias": "autoStart"; "required": false; "isSignal": true; }; "classOverride": { "alias": "classOverride"; "required": false; "isSignal": true; }; }, { "tuningChange": "tuningChange"; "inTune": "inTune"; }, never, never, true, never>;
8106
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwTunerComponent, "tw-tuner", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "referenceFrequency": { "alias": "referenceFrequency"; "required": false; "isSignal": true; }; "tolerance": { "alias": "tolerance"; "required": false; "isSignal": true; }; "showFrequency": { "alias": "showFrequency"; "required": false; "isSignal": true; }; "showOctave": { "alias": "showOctave"; "required": false; "isSignal": true; }; "showCents": { "alias": "showCents"; "required": false; "isSignal": true; }; "showMeter": { "alias": "showMeter"; "required": false; "isSignal": true; }; "showStringSelector": { "alias": "showStringSelector"; "required": false; "isSignal": true; }; "autoStart": { "alias": "autoStart"; "required": false; "isSignal": true; }; "classOverride": { "alias": "classOverride"; "required": false; "isSignal": true; }; }, { "tuningChange": "tuningChange"; "inTune": "inTune"; "error": "error"; }, never, never, true, never>;
7832
8107
  }
7833
8108
 
7834
8109
  type NoteDisplayVariant = 'default' | 'minimal' | 'led' | 'lcd' | 'meter';
@@ -8096,6 +8371,7 @@ declare class TwPitchDisplayComponent implements OnInit {
8096
8371
  protected onCentsChange(value: number): void;
8097
8372
  protected onPitchWheelDragStart(event: MouseEvent | TouchEvent): void;
8098
8373
  private readonly onPitchWheelDrag;
8374
+ private applyBendSnap;
8099
8375
  private readonly onPitchWheelDragEnd;
8100
8376
  protected toggleKeyLock(): void;
8101
8377
  protected resetSemitones(): void;
@@ -8304,7 +8580,7 @@ declare const BPM_RANGES: {
8304
8580
  * <tw-bpm-display [bpm]="tempo" (bpmChange)="onTempoChange($event)" [showTapTempo]="true"></tw-bpm-display>
8305
8581
  * ```
8306
8582
  */
8307
- declare class TwBpmDisplayComponent implements OnInit {
8583
+ declare class TwBpmDisplayComponent implements OnInit, OnDestroy {
8308
8584
  private readonly destroyRef;
8309
8585
  readonly variant: _angular_core.InputSignal<BpmDisplayVariant>;
8310
8586
  readonly size: _angular_core.InputSignal<BpmDisplaySize>;
@@ -8340,6 +8616,8 @@ declare class TwBpmDisplayComponent implements OnInit {
8340
8616
  protected readonly editValue: _angular_core.WritableSignal<string>;
8341
8617
  protected readonly beatActive: _angular_core.WritableSignal<boolean>;
8342
8618
  private beatInterval;
8619
+ private beatFlashTimeout;
8620
+ ngOnDestroy(): void;
8343
8621
  ngOnInit(): void;
8344
8622
  private startBeatIndicator;
8345
8623
  private updateBeatInterval;
@@ -8570,7 +8848,7 @@ declare class TwCompressorMeterComponent implements OnInit, OnDestroy {
8570
8848
  protected readonly releaseSpeed: _angular_core.Signal<"medium" | "fast" | "slow" | "very-slow">;
8571
8849
  protected readonly attackBarPercent: _angular_core.Signal<number>;
8572
8850
  protected readonly releaseBarPercent: _angular_core.Signal<number>;
8573
- protected readonly compressionActivity: _angular_core.Signal<"light" | "idle" | "moderate" | "heavy" | "limiting">;
8851
+ protected readonly compressionActivity: _angular_core.Signal<"light" | "heavy" | "idle" | "moderate" | "limiting">;
8574
8852
  protected readonly activityColorClass: _angular_core.Signal<string>;
8575
8853
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TwCompressorMeterComponent, never>;
8576
8854
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<TwCompressorMeterComponent, "tw-compressor-meter", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "inputLevel": { "alias": "inputLevel"; "required": false; "isSignal": true; }; "outputLevel": { "alias": "outputLevel"; "required": false; "isSignal": true; }; "gainReduction": { "alias": "gainReduction"; "required": false; "isSignal": true; }; "settings": { "alias": "settings"; "required": false; "isSignal": true; }; "threshold": { "alias": "threshold"; "required": false; "isSignal": true; }; "ratio": { "alias": "ratio"; "required": false; "isSignal": true; }; "attack": { "alias": "attack"; "required": false; "isSignal": true; }; "release": { "alias": "release"; "required": false; "isSignal": true; }; "knee": { "alias": "knee"; "required": false; "isSignal": true; }; "makeupGain": { "alias": "makeupGain"; "required": false; "isSignal": true; }; "showInputMeter": { "alias": "showInputMeter"; "required": false; "isSignal": true; }; "showOutputMeter": { "alias": "showOutputMeter"; "required": false; "isSignal": true; }; "showGainReduction": { "alias": "showGainReduction"; "required": false; "isSignal": true; }; "showThreshold": { "alias": "showThreshold"; "required": false; "isSignal": true; }; "showSettings": { "alias": "showSettings"; "required": false; "isSignal": true; }; "showCurve": { "alias": "showCurve"; "required": false; "isSignal": true; }; "showAttackRelease": { "alias": "showAttackRelease"; "required": false; "isSignal": true; }; "attackReleaseDisplay": { "alias": "attackReleaseDisplay"; "required": false; "isSignal": true; }; "showGrHistory": { "alias": "showGrHistory"; "required": false; "isSignal": true; }; "grHistoryLength": { "alias": "grHistoryLength"; "required": false; "isSignal": true; }; "peakHold": { "alias": "peakHold"; "required": false; "isSignal": true; }; "peakHoldTime": { "alias": "peakHoldTime"; "required": false; "isSignal": true; }; "meterMin": { "alias": "meterMin"; "required": false; "isSignal": true; }; "meterMax": { "alias": "meterMax"; "required": false; "isSignal": true; }; "animated": { "alias": "animated"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "classOverride": { "alias": "classOverride"; "required": false; "isSignal": true; }; }, { "settingsChange": "settingsChange"; "clipInput": "clipInput"; "clipOutput": "clipOutput"; }, never, never, true, never>;
@@ -8676,8 +8954,21 @@ declare class MobileSupportService {
8676
8954
  setTouchGuardEnabled(enabled: boolean): void;
8677
8955
  /**
8678
8956
  * Check if an action should be allowed based on touch guard config
8957
+ *
8958
+ * This is a pure check: it does not record the action. Call
8959
+ * {@link consumeAction} once the allowed action has actually been performed
8960
+ * so the cooldown window starts; checking alone never blocks a later check.
8961
+ *
8962
+ * Only `cooldownMs` and `minDuration` are evaluated here. `minDragDistance`,
8963
+ * `axisLock` and `requireConfirm` need per-gesture context and are handled
8964
+ * by `TwTouchGuardDirective`, so they are intentionally ignored.
8679
8965
  */
8680
8966
  shouldAllowAction(config?: TouchGuardConfig): boolean;
8967
+ /**
8968
+ * Record that a guarded action was performed, starting the cooldown window
8969
+ * evaluated by {@link shouldAllowAction}
8970
+ */
8971
+ consumeAction(): void;
8681
8972
  /**
8682
8973
  * Start tracking a touch for guard validation
8683
8974
  */
@@ -8765,7 +9056,11 @@ declare class TwTouchGuardDirective implements OnInit, OnDestroy {
8765
9056
  readonly guardDisabled: _angular_core.InputSignal<boolean>;
8766
9057
  /** Emitted when a guarded click/tap passes validation */
8767
9058
  readonly guardedClick: _angular_core.OutputEmitterRef<MouseEvent | TouchEvent>;
8768
- /** Emitted when a long press is detected */
9059
+ /**
9060
+ * Emitted when a long press is detected (touch input only). Mouse long
9061
+ * presses gate `guardedClick` the same way but do not emit this output,
9062
+ * which keeps its `TouchEvent` payload type.
9063
+ */
8769
9064
  readonly longPress: _angular_core.OutputEmitterRef<TouchEvent>;
8770
9065
  /** Emitted when drag starts and passes validation */
8771
9066
  readonly guardedDragStart: _angular_core.OutputEmitterRef<MouseEvent | TouchEvent>;
@@ -8830,7 +9125,6 @@ declare class MusicAccessibilityService implements OnDestroy {
8830
9125
  private assertiveRegion;
8831
9126
  private announcementQueue;
8832
9127
  private isProcessingQueue;
8833
- private readonly cleanupTimer;
8834
9128
  private reducedMotionQuery;
8835
9129
  private highContrastQuery;
8836
9130
  private reducedMotionHandler;
@@ -8838,6 +9132,7 @@ declare class MusicAccessibilityService implements OnDestroy {
8838
9132
  private readonly _reducedMotion;
8839
9133
  private readonly _highContrast;
8840
9134
  private readonly _screenReaderHints;
9135
+ private readonly _largeText;
8841
9136
  /** Whether the user prefers reduced motion */
8842
9137
  readonly prefersReducedMotion: _angular_core.Signal<boolean>;
8843
9138
  /** Whether the user prefers high contrast */
@@ -8855,7 +9150,9 @@ declare class MusicAccessibilityService implements OnDestroy {
8855
9150
  */
8856
9151
  announce(message: string, priority?: AnnouncementPriority): void;
8857
9152
  /**
8858
- * Announce a value change (debounced for rapid changes)
9153
+ * Announce a value change (coalesced for rapid changes: a still-queued
9154
+ * announcement with the same label is replaced by the newest value instead
9155
+ * of flooding the queue, e.g. while dragging a fader)
8859
9156
  */
8860
9157
  announceValueChange(label: string, value: string | number, unit?: string): void;
8861
9158
  /**
@@ -8879,6 +9176,8 @@ declare class MusicAccessibilityService implements OnDestroy {
8879
9176
  */
8880
9177
  clearAnnouncements(): void;
8881
9178
  private processAnnouncementQueue;
9179
+ /** Re-create the live regions if they are missing (browser only) */
9180
+ private ensureLiveRegions;
8882
9181
  private initLiveRegions;
8883
9182
  private applyScreenReaderOnlyStyles;
8884
9183
  /**
@@ -9019,6 +9318,8 @@ declare class AudioContextService implements OnDestroy {
9019
9318
  private readonly _sources;
9020
9319
  private readonly _workletModules;
9021
9320
  private sourceIdCounter;
9321
+ private readonly elementSourceIds;
9322
+ private readonly sourceElements;
9022
9323
  /** Current audio context state */
9023
9324
  readonly state: _angular_core.Signal<AudioContextState>;
9024
9325
  /** Current sample rate */
@@ -9188,16 +9489,28 @@ declare class AudioContextService implements OnDestroy {
9188
9489
  setSourceMuted(id: string, muted: boolean): void;
9189
9490
  /**
9190
9491
  * Get frequency data from an analyser
9492
+ * @param out Optional pre-allocated buffer to fill (length must equal
9493
+ * `analyser.frequencyBinCount`). Without `out` a fresh array is allocated
9494
+ * on every call, so this is only allocation-free (per-frame safe) when a
9495
+ * reused buffer is provided.
9191
9496
  */
9192
- getFrequencyData(analyser: AnalyserNode): Uint8Array;
9497
+ getFrequencyData(analyser: AnalyserNode, out?: Uint8Array<ArrayBuffer>): Uint8Array<ArrayBuffer>;
9193
9498
  /**
9194
9499
  * Get time domain data from an analyser
9500
+ * @param out Optional pre-allocated buffer to fill (length must equal
9501
+ * `analyser.fftSize`). Without `out` a fresh array is allocated on every
9502
+ * call, so this is only allocation-free (per-frame safe) when a reused
9503
+ * buffer is provided.
9195
9504
  */
9196
- getTimeDomainData(analyser: AnalyserNode): Uint8Array;
9505
+ getTimeDomainData(analyser: AnalyserNode, out?: Uint8Array<ArrayBuffer>): Uint8Array<ArrayBuffer>;
9197
9506
  /**
9198
9507
  * Get float frequency data from an analyser
9508
+ * @param out Optional pre-allocated buffer to fill (length must equal
9509
+ * `analyser.frequencyBinCount`). Without `out` a fresh array is allocated
9510
+ * on every call, so this is only allocation-free (per-frame safe) when a
9511
+ * reused buffer is provided.
9199
9512
  */
9200
- getFloatFrequencyData(analyser: AnalyserNode): Float32Array;
9513
+ getFloatFrequencyData(analyser: AnalyserNode, out?: Float32Array<ArrayBuffer>): Float32Array<ArrayBuffer>;
9201
9514
  /**
9202
9515
  * Convert frequency bin index to frequency in Hz
9203
9516
  */
@@ -9584,7 +9897,11 @@ declare class TwMidiLearnDirective implements OnInit, OnDestroy {
9584
9897
  readonly midiCurve: _angular_core.InputSignal<"linear" | "logarithmic" | "exponential">;
9585
9898
  /** Pre-configured CC number (skip learn mode) */
9586
9899
  readonly midiCC: _angular_core.InputSignal<number | null>;
9587
- /** Enable right-click to start MIDI Learn */
9900
+ /**
9901
+ * Enable right-click to start MIDI Learn.
9902
+ * Off by default so that merely applying the directive does not suppress
9903
+ * the browser context menu; set to `true` to opt in.
9904
+ */
9588
9905
  readonly enableContextMenuLearn: _angular_core.InputSignal<boolean>;
9589
9906
  /** Emitted when a MIDI value is received for this control */
9590
9907
  readonly midiValueChange: _angular_core.OutputEmitterRef<CCValueChangeEvent>;
@@ -9607,13 +9924,15 @@ declare class TwMidiLearnDirective implements OnInit, OnDestroy {
9607
9924
  */
9608
9925
  cancelLearn(): void;
9609
9926
  /**
9610
- * Check if MIDI Learn is active for this control
9927
+ * Whether MIDI Learn is active for this control
9928
+ * (computed so the host class bindings only re-evaluate on signal changes)
9611
9929
  */
9612
- isLearning(): boolean;
9930
+ readonly isLearning: _angular_core.Signal<boolean>;
9613
9931
  /**
9614
- * Check if this control has a MIDI mapping
9932
+ * Whether this control has a MIDI mapping
9933
+ * (computed so the host class bindings only re-evaluate on signal changes)
9615
9934
  */
9616
- isMapped(): boolean;
9935
+ readonly isMapped: _angular_core.Signal<boolean>;
9617
9936
  /**
9618
9937
  * Get the current mapping
9619
9938
  */
@@ -9636,6 +9955,14 @@ declare class TwMidiLearnDirective implements OnInit, OnDestroy {
9636
9955
  * Platform type detection
9637
9956
  */
9638
9957
  type PlatformType = 'browser' | 'tauri' | 'electron';
9958
+ /**
9959
+ * Error thrown when an operation has no meaningful implementation on the
9960
+ * current platform (typically the browser, which cannot access the file
9961
+ * system or produce real file paths)
9962
+ */
9963
+ declare class UnsupportedOnPlatformError extends Error {
9964
+ constructor(operation: string, platform: PlatformType, hint?: string);
9965
+ }
9639
9966
  /**
9640
9967
  * File filter for dialogs
9641
9968
  */
@@ -9800,7 +10127,14 @@ declare class NativePlatformService {
9800
10127
  private openFileBrowser;
9801
10128
  /**
9802
10129
  * Open a save file dialog
9803
- * @returns Selected path or null if cancelled
10130
+ *
10131
+ * Browser semantics: the browser has no save dialog that can produce a real
10132
+ * file system path or signal cancellation, so this throws
10133
+ * {@link UnsupportedOnPlatformError} instead of fabricating a path — use
10134
+ * `writeTextFile()` / `downloadBlob()` to trigger a download instead.
10135
+ *
10136
+ * @returns Selected path or null if cancelled (Tauri/Electron)
10137
+ * @throws UnsupportedOnPlatformError in the browser
9804
10138
  */
9805
10139
  saveFile(options?: SaveFileOptions): Promise<string | null>;
9806
10140
  /**
@@ -9821,6 +10155,12 @@ declare class NativePlatformService {
9821
10155
  writeBinaryFile(path: string, contents: ArrayBuffer | Uint8Array): Promise<void>;
9822
10156
  /**
9823
10157
  * Check if a file exists
10158
+ *
10159
+ * Browser semantics: the browser cannot query the file system, so this
10160
+ * throws {@link UnsupportedOnPlatformError} instead of fabricating `false`
10161
+ * for every path — work with `File` objects from `openFile()` instead.
10162
+ *
10163
+ * @throws UnsupportedOnPlatformError in the browser
9824
10164
  */
9825
10165
  fileExists(path: string): Promise<boolean>;
9826
10166
  /**
@@ -10044,11 +10384,20 @@ interface FrequencyConversionResult {
10044
10384
  }
10045
10385
  /**
10046
10386
  * Worker message handler - processes incoming messages
10387
+ *
10388
+ * Exported for unit testing. At runtime the worker uses the `onmessage`
10389
+ * dispatcher generated by {@link getWorkerScript} from the same
10390
+ * {@link WORKER_HANDLERS} table, which is the canonical dispatcher.
10047
10391
  */
10048
10392
  declare function handleMessage(event: MessageEvent<WorkerMessage>): WorkerResponse;
10049
10393
  /**
10050
10394
  * Get the worker script as a string for creating a blob URL
10051
10395
  * This allows the worker to be bundled with the library
10396
+ *
10397
+ * WARNING: both the function definitions and the `onmessage` dispatcher below
10398
+ * are generated from {@link WORKER_HANDLERS} by serializing the processing
10399
+ * functions with `toString()`, so those functions must remain closure-free
10400
+ * (see the note on the table above).
10052
10401
  */
10053
10402
  declare function getWorkerScript(): string;
10054
10403
 
@@ -10066,8 +10415,11 @@ interface AudioWorkerConfig {
10066
10415
  /**
10067
10416
  * Service for offloading audio processing to a Web Worker
10068
10417
  *
10069
- * This service manages a Web Worker that handles computationally intensive
10070
- * audio processing tasks, keeping the main thread free for smooth UI updates.
10418
+ * An opt-in service that manages a Web Worker for computationally intensive
10419
+ * audio processing. The music visualization components run their DSP on the
10420
+ * main thread by default; route heavy per-frame work through this service
10421
+ * (e.g. `processFFT`, `downsampleWaveform` for large waveforms, `detectBeat`)
10422
+ * when the main thread needs to stay free for smooth UI updates.
10071
10423
  *
10072
10424
  * @example
10073
10425
  * ```typescript
@@ -10221,7 +10573,15 @@ declare const TW_MUSIC_DIRECTIVES: readonly [typeof TwTouchGuardDirective, typeo
10221
10573
  /**
10222
10574
  * Native App UI Component Types
10223
10575
  */
10224
- type Platform = 'macos' | 'windows' | 'linux' | 'web' | 'tauri' | 'electron';
10576
+ /** Operating system detected from the user agent. */
10577
+ type OsPlatform = 'macos' | 'windows' | 'linux' | 'web';
10578
+ /** Runtime shell the application is executing in. */
10579
+ type RuntimePlatform = 'tauri' | 'electron' | 'web';
10580
+ /**
10581
+ * @deprecated Use `OsPlatform` for OS detection or `RuntimePlatform` for
10582
+ * runtime-shell detection instead. This union conflated the two concerns.
10583
+ */
10584
+ type Platform = OsPlatform | 'tauri' | 'electron';
10225
10585
  type PlatformTheme = 'light' | 'dark' | 'system';
10226
10586
  interface WindowState {
10227
10587
  isMaximized: boolean;
@@ -10455,7 +10815,8 @@ declare class NativeAppPlatformService {
10455
10815
  private readonly _isElectron;
10456
10816
  private readonly _theme;
10457
10817
  private readonly _windowState;
10458
- readonly platform: _angular_core.Signal<Platform>;
10818
+ /** Detected operating system. Use `isTauri`/`isElectron` for runtime-shell detection. */
10819
+ readonly platform: _angular_core.Signal<OsPlatform>;
10459
10820
  readonly isTauri: _angular_core.Signal<boolean>;
10460
10821
  readonly isElectron: _angular_core.Signal<boolean>;
10461
10822
  readonly isNative: _angular_core.Signal<boolean>;
@@ -10506,7 +10867,7 @@ declare class TwTitleBarComponent {
10506
10867
  readonly showMaximize: _angular_core.InputSignal<boolean>;
10507
10868
  readonly showFullscreen: _angular_core.InputSignal<boolean>;
10508
10869
  readonly doubleClick: _angular_core.OutputEmitterRef<void>;
10509
- protected readonly effectivePlatform: _angular_core.Signal<_quinnjr_ngx_tailwindcss.Platform>;
10870
+ protected readonly effectivePlatform: _angular_core.Signal<"tauri" | "electron" | _quinnjr_ngx_tailwindcss.OsPlatform>;
10510
10871
  protected readonly containerClasses: _angular_core.Signal<string>;
10511
10872
  protected onDoubleClick(): void;
10512
10873
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TwTitleBarComponent, never>;
@@ -10537,7 +10898,7 @@ declare class TwWindowControlsComponent {
10537
10898
  readonly maximizeClick: _angular_core.OutputEmitterRef<void>;
10538
10899
  readonly fullscreenClick: _angular_core.OutputEmitterRef<void>;
10539
10900
  protected hovered: boolean;
10540
- protected readonly effectivePlatform: _angular_core.Signal<_quinnjr_ngx_tailwindcss.Platform>;
10901
+ protected readonly effectivePlatform: _angular_core.Signal<"tauri" | "electron" | _quinnjr_ngx_tailwindcss.OsPlatform>;
10541
10902
  protected readonly containerClasses: _angular_core.Signal<"flex items-center" | "flex items-center -mr-1">;
10542
10903
  protected onClose(): void;
10543
10904
  protected onMinimize(): void;
@@ -10583,7 +10944,7 @@ declare class TwMenuBarComponent {
10583
10944
  * <tw-context-menu [items]="menuItems" [trigger]="targetElement" (itemSelect)="onSelect($event)"></tw-context-menu>
10584
10945
  * ```
10585
10946
  */
10586
- declare class TwNativeContextMenuComponent implements OnInit, OnDestroy {
10947
+ declare class TwNativeContextMenuComponent implements OnDestroy {
10587
10948
  private readonly platformService;
10588
10949
  readonly items: _angular_core.InputSignal<NativeMenuItem[]>;
10589
10950
  readonly trigger: _angular_core.InputSignal<HTMLElement | null>;
@@ -10593,13 +10954,19 @@ declare class TwNativeContextMenuComponent implements OnInit, OnDestroy {
10593
10954
  protected readonly isOpen: _angular_core.WritableSignal<boolean>;
10594
10955
  protected readonly position: _angular_core.WritableSignal<NativeContextMenuPosition>;
10595
10956
  protected readonly hoveredItemId: _angular_core.WritableSignal<string | null>;
10957
+ private readonly menuRef;
10596
10958
  private readonly contextMenuHandler;
10597
- ngOnInit(): void;
10959
+ /** The exact node the contextmenu listener is currently attached to */
10960
+ private listenerTarget;
10961
+ constructor();
10598
10962
  ngOnDestroy(): void;
10963
+ private detachContextMenuListener;
10599
10964
  protected onDocumentClick(): void;
10600
10965
  protected onEscape(): void;
10601
10966
  protected onScroll(): void;
10602
10967
  private onContextMenu;
10968
+ /** Adjust position after a tick (once the menu is rendered) so it stays within the viewport */
10969
+ private clampToViewport;
10603
10970
  protected selectItem(item: NativeMenuItem, event: MouseEvent): void;
10604
10971
  protected formatShortcut(shortcut: string): string;
10605
10972
  open(x: number, y: number): void;
@@ -10771,11 +11138,15 @@ declare class TwCommandPaletteComponent implements OnInit, OnDestroy {
10771
11138
  protected readonly isOpen: _angular_core.WritableSignal<boolean>;
10772
11139
  protected readonly searchQuery: _angular_core.WritableSignal<string>;
10773
11140
  protected readonly selectedIndex: _angular_core.WritableSignal<number>;
11141
+ protected readonly paletteId: string;
11142
+ private readonly searchInput;
11143
+ private readonly searchableCommands;
10774
11144
  protected readonly filteredCommands: _angular_core.Signal<CommandItem[]>;
10775
11145
  protected readonly groupedCommands: _angular_core.Signal<{
10776
11146
  category: string;
10777
11147
  commands: CommandItem[];
10778
11148
  }[]>;
11149
+ private readonly groupStartIndexes;
10779
11150
  private readonly keydownHandler;
10780
11151
  ngOnInit(): void;
10781
11152
  ngOnDestroy(): void;
@@ -10854,6 +11225,8 @@ declare class TwQuickSwitcherComponent {
10854
11225
  readonly itemSelected: _angular_core.OutputEmitterRef<QuickSwitcherItem>;
10855
11226
  readonly closed: _angular_core.OutputEmitterRef<void>;
10856
11227
  readonly searchInput: _angular_core.Signal<ElementRef<HTMLInputElement> | undefined>;
11228
+ /** Unique id prefix for option elements (aria-activedescendant) */
11229
+ readonly switcherId: string;
10857
11230
  readonly isOpen: _angular_core.WritableSignal<boolean>;
10858
11231
  readonly searchQuery: _angular_core.WritableSignal<string>;
10859
11232
  readonly selectedIndex: _angular_core.WritableSignal<number>;
@@ -11246,7 +11619,8 @@ declare class TwOnboardingWizardComponent {
11246
11619
 
11247
11620
  /**
11248
11621
  * Terminal / Console output component
11249
- * Displays command output with ANSI color support
11622
+ * Displays command output; strips ANSI escape codes for safe display, with
11623
+ * line colors derived from each line's type
11250
11624
  *
11251
11625
  * @example
11252
11626
  * ```html
@@ -11276,6 +11650,7 @@ declare class TwTerminalComponent implements AfterViewChecked {
11276
11650
  protected readonly commandHistory: _angular_core.WritableSignal<string[]>;
11277
11651
  protected readonly historyIndex: _angular_core.WritableSignal<number>;
11278
11652
  private shouldScroll;
11653
+ protected readonly displayedLines: _angular_core.Signal<TerminalLine[]>;
11279
11654
  ngAfterViewChecked(): void;
11280
11655
  protected readonly containerClasses: _angular_core.Signal<string>;
11281
11656
  protected getLineClasses(line: TerminalLine): string;
@@ -11515,6 +11890,8 @@ declare class TwResizablePanelsComponent {
11515
11890
  readonly panel1Collapsed: _angular_core.WritableSignal<boolean>;
11516
11891
  readonly panel2Collapsed: _angular_core.WritableSignal<boolean>;
11517
11892
  readonly isResizing: _angular_core.WritableSignal<boolean>;
11893
+ /** Cleanup for the document listeners of an in-progress drag */
11894
+ private activeResizeEnd;
11518
11895
  constructor();
11519
11896
  readonly containerClasses: _angular_core.Signal<string>;
11520
11897
  panelClasses(index: number): string;
@@ -11550,21 +11927,56 @@ declare class TwShortcutDisplayComponent {
11550
11927
  }
11551
11928
 
11552
11929
  /**
11553
- * Storage service for persistent data
11554
- * Supports local storage, secure storage, and file-based storage
11930
+ * Storage service for persistent data.
11931
+ * Supports Web Storage (localStorage/sessionStorage), IndexedDB, and a
11932
+ * native-backed persistent store on Tauri/Electron.
11933
+ *
11934
+ * Note: despite their names, the `*Secure` methods are NOT backed by an OS
11935
+ * keychain — see their individual docs for what each platform actually does.
11555
11936
  */
11556
11937
  declare class NativeStorageService {
11557
11938
  private readonly platformService;
11558
11939
  private readonly _isInitialized;
11940
+ /**
11941
+ * True once the Web Storage backends are available (set at construction;
11942
+ * stays false during SSR). Native Tauri/Electron stores load lazily on
11943
+ * first `*Secure` call.
11944
+ */
11559
11945
  readonly isInitialized: _angular_core.Signal<boolean>;
11946
+ private tauriStorePromise;
11947
+ constructor();
11560
11948
  get<T>(key: string, defaultValue?: T): T | null;
11561
11949
  set(key: string, value: unknown, options?: StorageOptions): void;
11562
11950
  remove(key: string): void;
11563
11951
  clear(): void;
11564
11952
  keys(): string[];
11565
11953
  has(key: string): boolean;
11954
+ private getTauriStore;
11955
+ /**
11956
+ * Read a value from the platform's persistent store.
11957
+ *
11958
+ * Despite the name, this is NOT OS-keychain-backed secure storage:
11959
+ * - Tauri: plaintext JSON persisted via `@tauri-apps/plugin-store`
11960
+ * (optional `@tauri-apps/plugin-store` peer dependency required).
11961
+ * - Electron: delegated to the host app's `secure-storage-get` IPC handler;
11962
+ * security depends entirely on that implementation.
11963
+ * - Web: falls back to plain localStorage with a console warning.
11964
+ */
11566
11965
  getSecure<T>(key: string): Promise<T | null>;
11966
+ /**
11967
+ * Write a value to the platform's persistent store.
11968
+ *
11969
+ * Despite the name, the value is NOT stored in an OS keychain: on Tauri it
11970
+ * is persisted as plaintext JSON via `@tauri-apps/plugin-store`, on
11971
+ * Electron it is delegated to the host app's `secure-storage-set` IPC
11972
+ * handler, and on the web it falls back to plain localStorage.
11973
+ */
11567
11974
  setSecure(key: string, value: unknown): Promise<void>;
11975
+ /**
11976
+ * Remove a value from the platform's persistent store (plaintext JSON on
11977
+ * Tauri, host-app IPC handler on Electron, localStorage on the web — NOT an
11978
+ * OS keychain; see getSecure).
11979
+ */
11568
11980
  removeSecure(key: string): Promise<void>;
11569
11981
  getSession<T>(key: string, defaultValue?: T): T | null;
11570
11982
  setSession(key: string, value: unknown): void;
@@ -11584,11 +11996,10 @@ type IpcCallback<T> = (data: T) => void;
11584
11996
  * IPC (Inter-Process Communication) service
11585
11997
  * Handles communication between renderer and main process in Tauri/Electron
11586
11998
  */
11587
- declare class NativeIpcService {
11999
+ declare class NativeIpcService implements OnDestroy {
11588
12000
  private readonly platformService;
11589
12001
  private readonly ngZone;
11590
12002
  private readonly listeners;
11591
- private unlistenFns;
11592
12003
  private readonly _isConnected;
11593
12004
  readonly isConnected: _angular_core.Signal<boolean>;
11594
12005
  constructor();
@@ -11602,7 +12013,9 @@ declare class NativeIpcService {
11602
12013
  */
11603
12014
  send(channel: string, payload?: unknown): Promise<void>;
11604
12015
  /**
11605
- * Listen for messages from the main process
12016
+ * Listen for messages from the main process.
12017
+ * Returns an unlisten function that removes both the platform listener and
12018
+ * the service's bookkeeping (equivalent to `off(channel, callback)`).
11606
12019
  */
11607
12020
  on<T>(channel: string, callback: IpcCallback<T>): Promise<() => void>;
11608
12021
  /**
@@ -11610,7 +12023,9 @@ declare class NativeIpcService {
11610
12023
  */
11611
12024
  once<T>(channel: string, callback: IpcCallback<T>): Promise<void>;
11612
12025
  /**
11613
- * Remove listener for a channel
12026
+ * Remove listener(s) for a channel, tearing down the underlying platform
12027
+ * listener so callbacks stop firing. Omit `callback` to remove all
12028
+ * listeners registered for the channel.
11614
12029
  */
11615
12030
  off(channel: string, callback?: IpcCallback<unknown>): void;
11616
12031
  /**
@@ -11621,6 +12036,7 @@ declare class NativeIpcService {
11621
12036
  * Clean up all listeners
11622
12037
  */
11623
12038
  destroy(): void;
12039
+ ngOnDestroy(): void;
11624
12040
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<NativeIpcService, never>;
11625
12041
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<NativeIpcService>;
11626
12042
  }
@@ -11676,17 +12092,50 @@ declare class SystemTrayService {
11676
12092
  readonly isSupported: _angular_core.WritableSignal<boolean>;
11677
12093
  readonly isVisible: _angular_core.WritableSignal<boolean>;
11678
12094
  private trayInstance;
12095
+ private readonly electronMenuActions;
12096
+ private electronMenuListenerRegistered;
11679
12097
  constructor();
11680
12098
  private checkSupport;
11681
12099
  create(config: TrayConfig): Promise<boolean>;
11682
- setIcon(icon: string): Promise<void>;
11683
- setTooltip(tooltip: string): Promise<void>;
11684
- setMenu(menu: NativeMenuItem[]): Promise<void>;
12100
+ /**
12101
+ * Set the tray icon.
12102
+ * @returns false when the tray has not been created yet (Tauri) or the
12103
+ * platform has no tray support; true when the update was dispatched.
12104
+ */
12105
+ setIcon(icon: string): Promise<boolean>;
12106
+ /**
12107
+ * Set the tray tooltip.
12108
+ * @returns false when the tray has not been created yet (Tauri) or the
12109
+ * platform has no tray support; true when the update was dispatched.
12110
+ */
12111
+ setTooltip(tooltip: string): Promise<boolean>;
12112
+ /**
12113
+ * Set the tray context menu.
12114
+ * On Electron, item `action` callbacks are routed by id: the main process
12115
+ * must echo the clicked item's id back on the 'tray-menu-click' channel.
12116
+ * @returns false when the tray has not been created yet (Tauri) or the
12117
+ * platform has no tray support; true when the update was dispatched.
12118
+ */
12119
+ setMenu(menu: NativeMenuItem[]): Promise<boolean>;
11685
12120
  destroy(): Promise<void>;
11686
12121
  private createTauriTray;
11687
12122
  private createElectronTray;
12123
+ private buildTauriMenuItems;
11688
12124
  private buildTauriMenu;
11689
12125
  private setTauriMenu;
12126
+ /**
12127
+ * Listen for tray menu clicks echoed back from the Electron main process on
12128
+ * the 'tray-menu-click' channel (payload: the clicked item's id) and invoke
12129
+ * the matching registered action.
12130
+ */
12131
+ private registerElectronMenuClickListener;
12132
+ /**
12133
+ * Convert menu items to a serializable structure for the Electron main
12134
+ * process. Functions cannot cross the IPC boundary, so each item's `action`
12135
+ * is registered locally under its id; the main process must echo the
12136
+ * clicked item's id back on the 'tray-menu-click' channel for actions to
12137
+ * fire (see registerElectronMenuClickListener).
12138
+ */
11690
12139
  private convertMenuForElectron;
11691
12140
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SystemTrayService, never>;
11692
12141
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<SystemTrayService>;
@@ -11725,10 +12174,13 @@ declare class NativeNotificationsService {
11725
12174
  declare class DockService {
11726
12175
  private readonly platformService;
11727
12176
  readonly isSupported: _angular_core.WritableSignal<boolean>;
12177
+ private readonly electronMenuActions;
12178
+ private electronMenuListenerRegistered;
11728
12179
  constructor();
11729
12180
  private checkSupport;
11730
12181
  /**
11731
- * Set the dock badge (macOS) or taskbar overlay (Windows)
12182
+ * Set the dock badge (macOS) or taskbar overlay (Windows).
12183
+ * No-op on Tauri (warns): Tauri has no dock badge API.
11732
12184
  */
11733
12185
  setBadge(text: string): Promise<void>;
11734
12186
  /**
@@ -11752,7 +12204,9 @@ declare class DockService {
11752
12204
  */
11753
12205
  cancelBounce(id: number): Promise<void>;
11754
12206
  /**
11755
- * Set the dock menu (macOS only)
12207
+ * Set the dock menu (macOS only).
12208
+ * Item `action` callbacks are routed by id: the main process must echo the
12209
+ * clicked item's id back on the 'dock-menu-click' channel.
11756
12210
  */
11757
12211
  setMenu(items: NativeMenuItem[]): Promise<void>;
11758
12212
  /**
@@ -11767,6 +12221,19 @@ declare class DockService {
11767
12221
  * Flash the window in the taskbar (Windows only)
11768
12222
  */
11769
12223
  flashFrame(flash: boolean): Promise<void>;
12224
+ /**
12225
+ * Listen for dock menu clicks echoed back from the Electron main process on
12226
+ * the 'dock-menu-click' channel (payload: the clicked item's id) and invoke
12227
+ * the matching registered action.
12228
+ */
12229
+ private registerElectronMenuClickListener;
12230
+ /**
12231
+ * Convert menu items to a serializable structure for the Electron main
12232
+ * process. Functions cannot cross the IPC boundary, so each item's `action`
12233
+ * is registered locally under its id; the main process must echo the
12234
+ * clicked item's id back on the 'dock-menu-click' channel for actions to
12235
+ * fire (see registerElectronMenuClickListener).
12236
+ */
11770
12237
  private convertMenuForElectron;
11771
12238
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DockService, never>;
11772
12239
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<DockService>;
@@ -11825,7 +12292,7 @@ declare class UpdateService {
11825
12292
  * <div twDraggable [dragData]="{ type: 'file', data: file }">Drag me</div>
11826
12293
  * ```
11827
12294
  */
11828
- declare class TwDraggableDirective implements OnInit {
12295
+ declare class TwDraggableDirective {
11829
12296
  private readonly elementRef;
11830
12297
  readonly twDraggable: _angular_core.InputSignal<boolean | "">;
11831
12298
  readonly dragData: _angular_core.InputSignal<DragData>;
@@ -11838,7 +12305,6 @@ declare class TwDraggableDirective implements OnInit {
11838
12305
  protected get isDraggable(): boolean;
11839
12306
  protected readonly baseClass = true;
11840
12307
  protected get cursorClass(): boolean;
11841
- ngOnInit(): void;
11842
12308
  protected onDragStart(event: DragEvent): void;
11843
12309
  protected onDragEnd(event: DragEvent): void;
11844
12310
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TwDraggableDirective, never>;
@@ -11891,12 +12357,16 @@ declare class TwDropZoneDirective {
11891
12357
  declare class TwShortcutDirective implements OnInit, OnDestroy {
11892
12358
  private readonly platformService;
11893
12359
  private readonly ngZone;
12360
+ private readonly elementRef;
11894
12361
  readonly twShortcut: _angular_core.InputSignal<string>;
11895
12362
  readonly shortcutGlobal: _angular_core.InputSignal<boolean>;
11896
12363
  readonly shortcutPreventDefault: _angular_core.InputSignal<boolean>;
11897
12364
  readonly shortcutEnabled: _angular_core.InputSignal<boolean>;
11898
12365
  readonly shortcutTriggered: _angular_core.OutputEmitterRef<KeyboardEvent>;
12366
+ private readonly parsedShortcut;
11899
12367
  private readonly keydownHandler;
12368
+ /** The exact node the keydown listener is attached to */
12369
+ private listenerTarget;
11900
12370
  ngOnInit(): void;
11901
12371
  ngOnDestroy(): void;
11902
12372
  private handleKeydown;
@@ -11955,7 +12425,7 @@ declare const TW_OVERLAY_COMPONENTS: readonly [typeof TwOverlayComponent];
11955
12425
  *
11956
12426
  * @example
11957
12427
  * ```typescript
11958
- * import { TW_ALL } from '@pegasus-heavy/ngx-tailwindcss';
12428
+ * import { TW_ALL } from '@quinnjr/ngx-tailwindcss';
11959
12429
  *
11960
12430
  * @Component({
11961
12431
  * imports: [...TW_ALL],
@@ -11965,5 +12435,5 @@ declare const TW_OVERLAY_COMPONENTS: readonly [typeof TwOverlayComponent];
11965
12435
  */
11966
12436
  declare const TW_ALL: readonly [typeof _quinnjr_ngx_tailwindcss.TwRippleDirective, typeof _quinnjr_ngx_tailwindcss.TwTooltipDirective, typeof _quinnjr_ngx_tailwindcss.TwClickOutsideDirective, typeof _quinnjr_ngx_tailwindcss.TwFocusTrapDirective, typeof _quinnjr_ngx_tailwindcss.TwClassDirective, typeof _quinnjr_ngx_tailwindcss.TwVariantDirective, typeof _quinnjr_ngx_tailwindcss.TwAutoFocusDirective, typeof _quinnjr_ngx_tailwindcss.TwInViewDirective, typeof _quinnjr_ngx_tailwindcss.TwLongPressDirective, typeof _quinnjr_ngx_tailwindcss.TwDebounceClickDirective, typeof _quinnjr_ngx_tailwindcss.TwCopyClipboardDirective, typeof _quinnjr_ngx_tailwindcss.TwKeyboardShortcutDirective, typeof _quinnjr_ngx_tailwindcss.TwSwipeDirective, typeof _quinnjr_ngx_tailwindcss.TwResizeObserverDirective, typeof _quinnjr_ngx_tailwindcss.TwLazyImageDirective, typeof _quinnjr_ngx_tailwindcss.TwScrollToDirective, typeof _quinnjr_ngx_tailwindcss.TwScrollSectionDirective, typeof _quinnjr_ngx_tailwindcss.TwHoverClassDirective, typeof _quinnjr_ngx_tailwindcss.TwTrapScrollDirective, typeof _quinnjr_ngx_tailwindcss.TwSrOnlyDirective, typeof _quinnjr_ngx_tailwindcss.TwAnnounceDirective, typeof _quinnjr_ngx_tailwindcss.TwAriaExpandedDirective, typeof _quinnjr_ngx_tailwindcss.TwAriaSelectedDirective, typeof _quinnjr_ngx_tailwindcss.TwAriaCheckedDirective, typeof _quinnjr_ngx_tailwindcss.TwAriaPressedDirective, typeof _quinnjr_ngx_tailwindcss.TwAriaDisabledDirective, typeof _quinnjr_ngx_tailwindcss.TwAriaHiddenDirective, typeof _quinnjr_ngx_tailwindcss.TwAriaLiveDirective, typeof _quinnjr_ngx_tailwindcss.TwAriaCurrentDirective, typeof _quinnjr_ngx_tailwindcss.TwAriaBusyDirective, typeof _quinnjr_ngx_tailwindcss.TwAriaDescribedbyDirective, typeof _quinnjr_ngx_tailwindcss.TwAriaLabelledbyDirective, typeof _quinnjr_ngx_tailwindcss.TwAriaLabelDirective, typeof _quinnjr_ngx_tailwindcss.TwAriaValueDirective, typeof _quinnjr_ngx_tailwindcss.TwRoleDirective, typeof _quinnjr_ngx_tailwindcss.TwAriaModalDirective, typeof _quinnjr_ngx_tailwindcss.TwAriaHaspopupDirective, typeof _quinnjr_ngx_tailwindcss.TwAriaOwnsDirective, typeof _quinnjr_ngx_tailwindcss.TwAriaActivedescendantDirective, typeof _quinnjr_ngx_tailwindcss.TwButtonComponent, typeof _quinnjr_ngx_tailwindcss.TwButtonLinkComponent, typeof _quinnjr_ngx_tailwindcss.TwInputComponent, typeof _quinnjr_ngx_tailwindcss.TwTextareaComponent, typeof _quinnjr_ngx_tailwindcss.TwLabelDirective, typeof _quinnjr_ngx_tailwindcss.TwHintDirective, typeof _quinnjr_ngx_tailwindcss.TwErrorDirective, typeof _quinnjr_ngx_tailwindcss.TwInputAffixDirective, typeof TwCheckboxComponent, typeof TwRadioButtonComponent, typeof TwRadioGroupComponent, typeof TwSwitchComponent, typeof TwSelectComponent, typeof TwMultiSelectComponent, typeof TwSliderComponent, typeof TwRatingComponent, typeof TwChipComponent, typeof TwChipsComponent, typeof _quinnjr_ngx_tailwindcss.TwCardComponent, typeof _quinnjr_ngx_tailwindcss.TwCardHorizontalComponent, typeof _quinnjr_ngx_tailwindcss.TwCardHeaderDirective, typeof _quinnjr_ngx_tailwindcss.TwCardTitleDirective, typeof _quinnjr_ngx_tailwindcss.TwCardSubtitleDirective, typeof _quinnjr_ngx_tailwindcss.TwCardBodyDirective, typeof _quinnjr_ngx_tailwindcss.TwCardFooterDirective, typeof _quinnjr_ngx_tailwindcss.TwCardMediaDirective, typeof TwAccordionComponent, typeof TwAccordionItemComponent, typeof _quinnjr_ngx_tailwindcss.TwTabsComponent, typeof _quinnjr_ngx_tailwindcss.TwTabPanelComponent, typeof TwDividerComponent, typeof TwContainerComponent, typeof TwStackComponent, typeof TwVStackComponent, typeof TwHStackComponent, typeof TwGridComponent, typeof TwSimpleGridComponent, typeof TwAspectRatioComponent, typeof TwCenterComponent, typeof TwSquareComponent, typeof TwCircleComponent, typeof TwSpacerComponent, typeof TwWrapComponent, typeof TwSplitterComponent, typeof TwSplitterPaneComponent, typeof TwStickyComponent, typeof TwScrollAreaComponent, typeof TwColumnsComponent, typeof TwBleedComponent, typeof TwOverlayComponent, typeof _quinnjr_ngx_tailwindcss.TwBadgeComponent, typeof _quinnjr_ngx_tailwindcss.TwBadgeGroupComponent, typeof TwAvatarComponent, typeof TwAvatarGroupComponent, typeof TwTableComponent, typeof TwDatatablesComponent, typeof TwTreeComponent, typeof TwTimelineComponent, typeof TwBreadcrumbComponent, typeof TwPaginationComponent, typeof TwStepsComponent, typeof TwMenuComponent, typeof TwContextMenuComponent, typeof _quinnjr_ngx_tailwindcss.TwAlertComponent, typeof _quinnjr_ngx_tailwindcss.TwAlertTitleComponent, typeof _quinnjr_ngx_tailwindcss.TwAlertDescriptionComponent, typeof TwToastComponent, typeof TwToastContainerComponent, typeof TwSpinnerComponent, typeof TwLoadingOverlayComponent, typeof TwProgressComponent, typeof TwProgressCircularComponent, typeof TwSkeletonComponent, typeof TwSkeletonTextComponent, typeof TwSkeletonCardComponent, typeof TwSkeletonTableComponent, typeof _quinnjr_ngx_tailwindcss.TwModalComponent, typeof _quinnjr_ngx_tailwindcss.TwModalHeaderComponent, typeof _quinnjr_ngx_tailwindcss.TwModalTitleComponent, typeof _quinnjr_ngx_tailwindcss.TwModalBodyComponent, typeof _quinnjr_ngx_tailwindcss.TwModalFooterComponent, typeof _quinnjr_ngx_tailwindcss.TwConfirmDialogComponent, typeof _quinnjr_ngx_tailwindcss.TwDropdownComponent, typeof _quinnjr_ngx_tailwindcss.TwDropdownMenuComponent, typeof _quinnjr_ngx_tailwindcss.TwDropdownItemDirective, typeof _quinnjr_ngx_tailwindcss.TwDropdownDividerComponent, typeof _quinnjr_ngx_tailwindcss.TwDropdownHeaderComponent, typeof _quinnjr_ngx_tailwindcss.TwDropdownTriggerDirective, typeof TwSidebarComponent, typeof TwPopoverComponent, typeof TwImageComponent, typeof TwScrollTopComponent, typeof _quinnjr_ngx_tailwindcss.TwVolumeDialComponent, typeof _quinnjr_ngx_tailwindcss.TwVuMeterComponent, typeof _quinnjr_ngx_tailwindcss.TwWaveformComponent, typeof _quinnjr_ngx_tailwindcss.TwTransportComponent, typeof _quinnjr_ngx_tailwindcss.TwScrubberComponent, typeof _quinnjr_ngx_tailwindcss.TwFaderComponent, typeof _quinnjr_ngx_tailwindcss.TwPanControlComponent, typeof _quinnjr_ngx_tailwindcss.TwTimeDisplayComponent, typeof _quinnjr_ngx_tailwindcss.TwSpectrumComponent, typeof _quinnjr_ngx_tailwindcss.TwPianoComponent, typeof _quinnjr_ngx_tailwindcss.TwParametricEQComponent, typeof _quinnjr_ngx_tailwindcss.TwGraphicEQComponent, typeof _quinnjr_ngx_tailwindcss.TwOscilloscopeComponent, typeof _quinnjr_ngx_tailwindcss.TwChannelStripComponent, typeof _quinnjr_ngx_tailwindcss.TwMixerComponent, typeof _quinnjr_ngx_tailwindcss.TwMetronomeComponent, typeof _quinnjr_ngx_tailwindcss.TwVisualizerComponent, typeof _quinnjr_ngx_tailwindcss.TwAudioPlayerComponent, typeof _quinnjr_ngx_tailwindcss.TwLooperComponent, typeof _quinnjr_ngx_tailwindcss.TwStaffComponent, typeof _quinnjr_ngx_tailwindcss.TwNoteComponent, typeof _quinnjr_ngx_tailwindcss.TwNoteInputComponent, typeof _quinnjr_ngx_tailwindcss.TwMusicalSymbolComponent, typeof _quinnjr_ngx_tailwindcss.TwChordDiagramComponent, typeof _quinnjr_ngx_tailwindcss.TwPianoChordComponent, typeof _quinnjr_ngx_tailwindcss.TwTablatureComponent, typeof _quinnjr_ngx_tailwindcss.TwSheetMusicComponent, typeof _quinnjr_ngx_tailwindcss.TwLeadSheetComponent, typeof _quinnjr_ngx_tailwindcss.TwScoreEditorComponent, typeof _quinnjr_ngx_tailwindcss.TwTunerComponent, typeof _quinnjr_ngx_tailwindcss.TwNoteDisplayComponent, typeof _quinnjr_ngx_tailwindcss.TwPitchDisplayComponent, typeof _quinnjr_ngx_tailwindcss.TwAudioStatsComponent, typeof _quinnjr_ngx_tailwindcss.TwBpmDisplayComponent, typeof _quinnjr_ngx_tailwindcss.TwCompressorMeterComponent, typeof _quinnjr_ngx_tailwindcss.TwTouchGuardDirective, typeof _quinnjr_ngx_tailwindcss.TwMidiLearnDirective, typeof _quinnjr_ngx_tailwindcss.TwTitleBarComponent, typeof _quinnjr_ngx_tailwindcss.TwWindowControlsComponent, typeof _quinnjr_ngx_tailwindcss.TwMenuBarComponent, typeof _quinnjr_ngx_tailwindcss.TwNativeContextMenuComponent, typeof _quinnjr_ngx_tailwindcss.TwSidebarNavComponent, typeof _quinnjr_ngx_tailwindcss.TwFileTreeComponent, typeof _quinnjr_ngx_tailwindcss.TwBreadcrumbsNavComponent, typeof _quinnjr_ngx_tailwindcss.TwTabBarComponent, typeof _quinnjr_ngx_tailwindcss.TwCommandPaletteComponent, typeof _quinnjr_ngx_tailwindcss.TwSearchBarComponent, typeof _quinnjr_ngx_tailwindcss.TwQuickSwitcherComponent, typeof _quinnjr_ngx_tailwindcss.TwSettingsPanelComponent, typeof _quinnjr_ngx_tailwindcss.TwPreferencesDialogComponent, typeof _quinnjr_ngx_tailwindcss.TwShortcutsEditorComponent, typeof _quinnjr_ngx_tailwindcss.TwThemeSelectorComponent, typeof _quinnjr_ngx_tailwindcss.TwAlertDialogComponent, typeof _quinnjr_ngx_tailwindcss.TwNativeConfirmDialogComponent, typeof _quinnjr_ngx_tailwindcss.TwPromptDialogComponent, typeof _quinnjr_ngx_tailwindcss.TwAboutDialogComponent, typeof _quinnjr_ngx_tailwindcss.TwUpdateDialogComponent, typeof _quinnjr_ngx_tailwindcss.TwOnboardingWizardComponent, typeof _quinnjr_ngx_tailwindcss.TwTerminalComponent, typeof _quinnjr_ngx_tailwindcss.TwLogViewerComponent, typeof _quinnjr_ngx_tailwindcss.TwPropertyInspectorComponent, typeof _quinnjr_ngx_tailwindcss.TwCodeViewerComponent, typeof _quinnjr_ngx_tailwindcss.TwStatusBarComponent, typeof _quinnjr_ngx_tailwindcss.TwToolbarComponent, typeof _quinnjr_ngx_tailwindcss.TwActivityIndicatorComponent, typeof _quinnjr_ngx_tailwindcss.TwConnectionStatusComponent, typeof _quinnjr_ngx_tailwindcss.TwResizablePanelsComponent, typeof _quinnjr_ngx_tailwindcss.TwShortcutDisplayComponent, typeof _quinnjr_ngx_tailwindcss.TwDraggableDirective, typeof _quinnjr_ngx_tailwindcss.TwDropZoneDirective, typeof _quinnjr_ngx_tailwindcss.TwShortcutDirective];
11967
12437
 
11968
- export { ACCENT_PRESETS, AR_TIME_PRESETS, AriaUtils, AudioContextService, AudioWorkerService, BPM_RANGES, CODEC_INFO, COMMON_CHORDS, DEFAULT_THEME, DEFAULT_THEME_COLORS, DEFAULT_TW_CONFIG, DockService, EQ_PRESETS, FilePickerService, INSTRUMENT_PRESETS, MIDI_CC, MUSIC_FILE_FILTERS, MidiService, MobileSupportService, MusicAccessibilityService, NativeAppPlatformService, NativeIpcService, NativeNotificationsService, NativePlatformService, NativeStorageService, PIANO_CHORDS, PITCH_PRESETS, SAMPLE_MUSIC, SystemTrayService, THEME_CSS_CLASSES, TW_ACCORDION_COMPONENTS, TW_ALERT_COMPONENTS, TW_ALL, TW_ARIA_DIRECTIVES, TW_ASPECT_RATIO_COMPONENTS, TW_AVATAR_COMPONENTS, TW_BADGE_COMPONENTS, TW_BLEED_COMPONENTS, TW_BREADCRUMB_COMPONENTS, TW_BUTTON_COMPONENTS, TW_CARD_COMPONENTS, TW_CENTER_COMPONENTS, TW_CHECKBOX_COMPONENTS, TW_CHIP_COMPONENTS, TW_COLUMNS_COMPONENTS, TW_CONFIG, TW_CONTAINER_COMPONENTS, TW_CORE_DIRECTIVES, TW_DATATABLES_COMPONENTS, TW_DEFAULT_TRANSLATIONS, TW_DIRECTIVES, TW_DIVIDER_COMPONENTS, TW_DROPDOWN_COMPONENTS, TW_DX_DIRECTIVES, TW_GRID_COMPONENTS, TW_IMAGE_COMPONENTS, TW_INPUT_COMPONENTS, TW_LOCALE, TW_MENU_COMPONENTS, TW_MODAL_COMPONENTS, TW_MULTISELECT_COMPONENTS, TW_MUSIC_COMPONENTS, TW_MUSIC_DIRECTIVES, TW_NATIVE_COMPONENTS, TW_NATIVE_DIRECTIVES, TW_OVERLAY_COMPONENTS, TW_PAGINATION_COMPONENTS, TW_POPOVER_COMPONENTS, TW_PROGRESS_COMPONENTS, TW_RADIO_COMPONENTS, TW_RATING_COMPONENTS, TW_SCROLL_AREA_COMPONENTS, TW_SCROLL_TOP_COMPONENTS, TW_SELECT_COMPONENTS, TW_SIDEBAR_COMPONENTS, TW_SKELETON_COMPONENTS, TW_SLIDER_COMPONENTS, TW_SPACER_COMPONENTS, TW_SPINNER_COMPONENTS, TW_SPLITTER_COMPONENTS, TW_STACK_COMPONENTS, TW_STEPS_COMPONENTS, TW_STICKY_COMPONENTS, TW_SWITCH_COMPONENTS, TW_TABLE_COMPONENTS, TW_TABS_COMPONENTS, TW_THEME, TW_TIMELINE_COMPONENTS, TW_TOAST_COMPONENTS, TW_TRANSLATIONS, TW_TREE_COMPONENTS, TwAboutDialogComponent, TwAccordionComponent, TwAccordionItemComponent, TwActivityIndicatorComponent, TwAlertComponent, TwAlertDescriptionComponent, TwAlertDialogComponent, TwAlertTitleComponent, TwAnnounceDirective, TwAriaActivedescendantDirective, TwAriaBusyDirective, TwAriaCheckedDirective, TwAriaCurrentDirective, TwAriaDescribedbyDirective, TwAriaDisabledDirective, TwAriaExpandedDirective, TwAriaHaspopupDirective, TwAriaHiddenDirective, TwAriaLabelDirective, TwAriaLabelledbyDirective, TwAriaLiveDirective, TwAriaModalDirective, TwAriaOwnsDirective, TwAriaPressedDirective, TwAriaSelectedDirective, TwAriaService, TwAriaValueDirective, TwAspectRatioComponent, TwAudioPlayerComponent, TwAudioStatsComponent, TwAutoFocusDirective, TwAvatarComponent, TwAvatarGroupComponent, TwBadgeComponent, TwBadgeGroupComponent, TwBleedComponent, TwBpmDisplayComponent, TwBreadcrumbComponent, TwBreadcrumbsNavComponent, TwButtonComponent, TwButtonLinkComponent, TwCardBodyDirective, TwCardComponent, TwCardFooterDirective, TwCardHeaderDirective, TwCardHorizontalComponent, TwCardMediaDirective, TwCardSubtitleDirective, TwCardTitleDirective, TwCenterComponent, TwChannelStripComponent, TwCheckboxComponent, TwChipComponent, TwChipsComponent, TwChordDiagramComponent, TwCircleComponent, TwClassDirective, TwClassService, TwClickOutsideDirective, TwCodeViewerComponent, TwColumnsComponent, TwCommandPaletteComponent, TwCompressorMeterComponent, TwConfirmDialogComponent, TwConnectionStatusComponent, TwContainerComponent, TwContextMenuComponent, TwCopyClipboardDirective, TwDatatablesComponent, TwDebounceClickDirective, TwDividerComponent, TwDraggableDirective, TwDropZoneDirective, TwDropdownComponent, TwDropdownDividerComponent, TwDropdownHeaderComponent, TwDropdownItemDirective, TwDropdownMenuComponent, TwDropdownTriggerDirective, TwErrorDirective, TwFaderComponent, TwFileTreeComponent, TwFocusTrapDirective, TwGraphicEQComponent, TwGridComponent, TwHStackComponent, TwHintDirective, TwHoverClassDirective, TwI18nService, TwImageComponent, TwInViewDirective, TwInputAffixDirective, TwInputComponent, TwKeyboardShortcutDirective, TwLabelDirective, TwLazyImageDirective, TwLeadSheetComponent, TwLoadingOverlayComponent, TwLogViewerComponent, TwLongPressDirective, TwLooperComponent, TwMenuBarComponent, TwMenuComponent, TwMetronomeComponent, TwMidiLearnDirective, TwMixerComponent, TwModalBodyComponent, TwModalComponent, TwModalFooterComponent, TwModalHeaderComponent, TwModalTitleComponent, TwMultiSelectComponent, TwMusicalSymbolComponent, TwNativeConfirmDialogComponent, TwNativeContextMenuComponent, TwNoteComponent, TwNoteDisplayComponent, TwNoteInputComponent, TwOnboardingWizardComponent, TwOscilloscopeComponent, TwOverlayComponent, TwPaginationComponent, TwPanControlComponent, TwParametricEQComponent, TwPianoChordComponent, TwPianoComponent, TwPitchDisplayComponent, TwPopoverComponent, TwPreferencesDialogComponent, TwProgressCircularComponent, TwProgressComponent, TwPromptDialogComponent, TwPropertyInspectorComponent, TwQuickSwitcherComponent, TwRadioButtonComponent, TwRadioGroupComponent, TwRatingComponent, TwResizablePanelsComponent, TwResizeObserverDirective, TwRippleDirective, TwRoleDirective, TwScoreEditorComponent, TwScrollAreaComponent, TwScrollSectionDirective, TwScrollToDirective, TwScrollTopComponent, TwScrubberComponent, TwSearchBarComponent, TwSelectComponent, TwSettingTemplateDirective, TwSettingsPanelComponent, TwSheetMusicComponent, TwShortcutDirective, TwShortcutDisplayComponent, TwShortcutsEditorComponent, TwSidebarComponent, TwSidebarNavComponent, TwSimpleGridComponent, TwSkeletonCardComponent, TwSkeletonComponent, TwSkeletonTableComponent, TwSkeletonTextComponent, TwSliderComponent, TwSpacerComponent, TwSpectrumComponent, TwSpinnerComponent, TwSplitterComponent, TwSplitterPaneComponent, TwSquareComponent, TwSrOnlyDirective, TwStackComponent, TwStaffComponent, TwStatusBarComponent, TwStepsComponent, TwStickyComponent, TwSwipeDirective, TwSwitchComponent, TwTabBarComponent, TwTabPanelComponent, TwTablatureComponent, TwTableComponent, TwTabsComponent, TwTerminalComponent, TwTextareaComponent, TwThemeSelectorComponent, TwThemeService, TwTimeDisplayComponent, TwTimelineComponent, TwTitleBarComponent, TwToastComponent, TwToastContainerComponent, TwToastService, TwToolbarComponent, TwTooltipDirective, TwTouchGuardDirective, TwTransportComponent, TwTrapScrollDirective, TwTreeComponent, TwTunerComponent, TwUpdateDialogComponent, TwVStackComponent, TwVariantDirective, TwVisualizerComponent, TwVolumeDialComponent, TwVuMeterComponent, TwWaveformComponent, TwWindowControlsComponent, TwWrapComponent, UpdateService, createTheme, generateThemeCssProperties, getWorkerScript, handleMessage, parseABCNotation, parseMusicXML, provideTwConfig, provideTwLocale, provideTwTheme, provideTwTranslations, withTwConfig, withTwTheme };
11969
- export type { AboutDialogConfig, AccentLevel, AccentPattern, AccessibilityPreferences, ActiveNote, ActivityIndicatorSize, ActivityIndicatorVariant, AlertDialogConfig, AlertDialogType, AlertStyle, AlertVariant, AnnouncementPriority, ArticulationType, AspectRatioPreset, AttackReleaseDisplay, AudioChain, AudioContextState, AudioFileInfo, AudioNodeConfig, AudioPlayerTheme, AudioPlayerVariant, AudioSourceType, AudioStatsSize, AudioStatsVariant, AudioTrack, AudioWorkerConfig, AudioWorkletModuleInfo, AuxSend, AvatarSize, AvatarStatus, AvatarVariant, BadgeSize, BadgeStyle, BadgeVariant, BeamConfig, BeamPosition, BeatDetectionOptions, BeatDetectionResult, BeatEvent, BeatHighlightMode, BleedAmount, BleedDirection, BpmDisplaySize, BpmDisplayVariant, BpmSyncStatus, BreadcrumbItem, BreadcrumbSeparator, ButtonSize, ButtonVariant, CCValueChangeEvent, CardVariant, ChannelGroup, ChannelStripSize, ChannelStripState, ChannelStripVariant, CheckboxSize, CheckboxVariant, ChipSize, ChipStyle, ChipVariant, ChordDefinition, ChordDiagramSize, ChordDiagramVariant, ChordFingering, ClefType, ClipboardData, CodeLanguage, ColorMode, ColumnsCount, ColumnsGap, ColumnsRule, CommandItem, CommandPaletteMode, CompressorMeterSize, CompressorMeterVariant, CompressorSettings, ConfirmDialogConfig, ConnectedSource, ConnectionState, ContainerSize, CopyClipboardEvent, DetectedNote, DialSize, DialVariant, DividerLabelPosition, DividerOrientation, DividerVariant, DragData, DropEvent, DropdownPosition, DynamicType, EQBand, EQBandChange, EQBandValue, EQFilterType, EQPreset, EQPresetCategory, EQVariant, ExportFormat, FFTProcessOptions, FFTProcessResult, FaderOrientation, FaderSize, FaderVariant, FileFilter, FileInfo, FilePickerResult, FileTreeEvent, FileTreeNode, FindPeaksOptions, FindPeaksResult, FrequencyConversionOptions, FrequencyConversionResult, FrequencyScale, GainReductionHistoryPoint, GraphicEQBandCount, GraphicEQVariant, GridCols, GridGap, HairpinType, HapticFeedbackType, HistoryEntry, ImageBorderRadius, ImageFit, InViewEvent, InputSize, InputVariant, InstrumentPart, IpcMessage, IpcResponse, KeySignature, KeyboardShortcut, KeyboardShortcutEvent, LazyImageEvent, LeadSheetChord, LeadSheetData, LeadSheetDisplayMode, LeadSheetMeasure, LeadSheetSection, LeadSheetStyle, LeadSheetVariant, LevelOptions, LevelResult, LogEntry, LogFilter, LongPressEvent, LoopLayer, LooperEvent, LooperSize, LooperState, LooperVariant, LyricEntry, MeasureData, MelodyNote, MenuItem, MenuVariant, MetronomeBeat, MetronomeSize, MetronomeVariant, MidiCCMapping, MidiDevice, MidiDeviceInfo, MidiLearnState, MidiMessage, MidiMessageType, MidiNoteInfo, MixerBreakpoint, MixerChannel, MixerSection, MixerSize, MixerState, MixerVariant, ModalSize, MultiSelectAppendTo, MultiSelectGroup, MultiSelectOption, MultiSelectSize, MultiSelectVariant, MusicSwipeDirection, NativeBreadcrumbItem, NativeClipboardData, NativeContextMenuEvent, NativeContextMenuPosition, NativeFileFilter, NativeMenuBarItem, NativeMenuItem, NativeNotificationAction, NativeNotificationOptions, NativeOpenFileOptions, NativeSaveFileOptions, NativeSidebarPosition, NativeSidebarVariant, NoteAccidental, NoteData, NoteDisplaySize, NoteDisplayVariant, NoteDuration, NoteEvent, NoteHistoryEntry, NoteInputEvent, NoteInputMeasureData, NoteName, OnboardingStep, OpenFileOptions, OrnamentType, OscilloscopeTriggerMode, OscilloscopeVariant, OverlayBlur, OverlayOpacity, PaginationSize, PaginationVariant, PanControlSize, PanControlVariant, PanelConfig, PedalType, PianoChordDefinition, PianoChordNote, PianoChordSize, PianoChordVariant, PianoKey, PianoSize, PianoVariant, PinchGestureState, PitchBendStyle, PitchDisplaySize, PitchDisplayVariant, PitchInfo, PlacedNote, Platform, PlatformTheme, PlatformType, PopoverPosition, PopoverTrigger, PreferencesTab, PrintOptions, ProgressSize, ProgressVariant, PromptInputType, PropertyItem, QuickSwitcherItem, RadioSize, RadioVariant, RatingSize, RatingVariant, RepeatType, ResizeEvent, SaveFileOptions, ScoreData, ScoreEditorVariant, ScrollAreaDirection, ScrollAreaScrollbar, ScrollTopPosition, ScrollTopVariant, ScrubberMarker, ScrubberThumbnail, ScrubberVariant, SearchFilter, SearchSuggestion, SelectAppendTo, SelectGroup, SelectOption, SelectSize, SelectVariant, SettingItem, SettingsCategory, SheetMusicData, SheetMusicLayout, SheetMusicVariant, ShortcutBinding, ShortcutDisplayPlatform, ShortcutDisplayVariant, SidebarItem, SidebarPosition, SidebarSize, SkeletonGap, SkeletonVariant, SlashPattern, SlashStyle, SliderSize, SliderVariant, SlurPoints, SmoothDataOptions, SmoothDataResult, SpacerSize, SpectrumColorScheme, SpectrumVariant, SpinnerColor, SpinnerSize, SpinnerVariant, SplitDirection, SplitterDirection, SplitterGutterSize, StackAlign, StackDirection, StackJustify, StackSpacing, StaffTimeSignature, StaffVariant, StatusBarItem, StemDirection, StepItem, StepsOrientation, StepsSize, StickyOffset, StickyPosition, StorageOptions, SwipeDirection, SwipeEvent, SwipeGestureResult, SwitchSize, SwitchVariant, SymbolCategory, TabBarPosition, TabBarVariant, TabEvent, TabItem, TabMeasure, TabNote, TablatureTechnique, TablatureVariant, TableColumn, TableSize, TableVariant, TabsOrientation, TabsSize, TabsVariant, TempoType, TerminalLine, TerminalVariant, ThemeColorValue, ThemeColors, ThemeComponentOverrides, ThemeMode, ThemePreset, ThumbnailSpriteConfig, TimeDisplayMode, TimeDisplaySize, TimeDisplayVariant, TimeDomainOptions, TimeDomainResult, TimeSignature, TimelineAlign, TimelineEvent, TimelineLayout, TitleBarPlatform, TitleBarVariant, ToastOptions, ToastPosition, ToastVariant, ToolbarItem, ToolbarPosition, ToolbarVariant, TooltipPosition, TouchGuardConfig, TransportSize, TransportVariant, TransposeOptions, TrayConfig, TreeNode, TreeSelectionMode, TunerMode, TunerVariant, TuningData, TupletConfig, TupletPosition, TwAlertClassConfig, TwBadgeClassConfig, TwButtonClassConfig, TwCardClassConfig, TwClassOverrides, TwConfig, TwDropdownClassConfig, TwInputClassConfig, TwModalClassConfig, TwTabsClassConfig, TwTheme, TwThemeConfig, TwTranslations, UpdateDialogInfo, UpdateInfo, UpdateProgress, UpdateStatus, VisualizerColorScheme, VisualizerVariant, Voice, VuMeterMode, VuMeterOrientation, VuMeterVariant, WaveformColorScheme, WaveformDownsampleOptions, WaveformDownsampleResult, WaveformMode, WaveformSize, WaveformVariant, WindowControlButton, WindowControlsPosition, WindowState, WorkerMessage, WorkerMessageType, WorkerResponse };
12438
+ export { ACCENT_PRESETS, AR_TIME_PRESETS, AriaUtils, AudioContextService, AudioWorkerService, BPM_RANGES, CODEC_INFO, COMMON_CHORDS, DEFAULT_THEME, DEFAULT_THEME_COLORS, DEFAULT_TW_CONFIG, DockService, EQ_PRESETS, FilePickerService, INSTRUMENT_PRESETS, MIDI_CC, MUSIC_FILE_FILTERS, MidiService, MobileSupportService, MusicAccessibilityService, NativeAppPlatformService, NativeIpcService, NativeNotificationsService, NativePlatformService, NativeStorageService, PIANO_CHORDS, PITCH_PRESETS, SAMPLE_MUSIC, SystemTrayService, THEME_CSS_CLASSES, TW_ACCORDION_COMPONENTS, TW_ALERT_COMPONENTS, TW_ALL, TW_ARIA_DIRECTIVES, TW_ASPECT_RATIO_COMPONENTS, TW_AVATAR_COMPONENTS, TW_BADGE_COMPONENTS, TW_BLEED_COMPONENTS, TW_BREADCRUMB_COMPONENTS, TW_BUTTON_COMPONENTS, TW_CARD_COMPONENTS, TW_CENTER_COMPONENTS, TW_CHECKBOX_COMPONENTS, TW_CHIP_COMPONENTS, TW_COLUMNS_COMPONENTS, TW_CONFIG, TW_CONTAINER_COMPONENTS, TW_CORE_DIRECTIVES, TW_DATATABLES_COMPONENTS, TW_DEFAULT_TRANSLATIONS, TW_DIRECTIVES, TW_DIVIDER_COMPONENTS, TW_DROPDOWN_COMPONENTS, TW_DX_DIRECTIVES, TW_GRID_COMPONENTS, TW_IMAGE_COMPONENTS, TW_INPUT_COMPONENTS, TW_LOCALE, TW_MENU_COMPONENTS, TW_MODAL_COMPONENTS, TW_MULTISELECT_COMPONENTS, TW_MUSIC_COMPONENTS, TW_MUSIC_DIRECTIVES, TW_NATIVE_COMPONENTS, TW_NATIVE_DIRECTIVES, TW_OVERLAY_COMPONENTS, TW_PAGINATION_COMPONENTS, TW_POPOVER_COMPONENTS, TW_PROGRESS_COMPONENTS, TW_RADIO_COMPONENTS, TW_RATING_COMPONENTS, TW_SCROLL_AREA_COMPONENTS, TW_SCROLL_TOP_COMPONENTS, TW_SELECT_COMPONENTS, TW_SIDEBAR_COMPONENTS, TW_SKELETON_COMPONENTS, TW_SLIDER_COMPONENTS, TW_SPACER_COMPONENTS, TW_SPINNER_COMPONENTS, TW_SPLITTER_COMPONENTS, TW_STACK_COMPONENTS, TW_STEPS_COMPONENTS, TW_STICKY_COMPONENTS, TW_SWITCH_COMPONENTS, TW_TABLE_COMPONENTS, TW_TABS_COMPONENTS, TW_THEME, TW_TIMELINE_COMPONENTS, TW_TOAST_COMPONENTS, TW_TRANSLATIONS, TW_TREE_COMPONENTS, TwAboutDialogComponent, TwAccordionComponent, TwAccordionHeaderDirective, TwAccordionItemComponent, TwActivityIndicatorComponent, TwAlertComponent, TwAlertDescriptionComponent, TwAlertDialogComponent, TwAlertTitleComponent, TwAnnounceDirective, TwAriaActivedescendantDirective, TwAriaBusyDirective, TwAriaCheckedDirective, TwAriaCurrentDirective, TwAriaDescribedbyDirective, TwAriaDisabledDirective, TwAriaExpandedDirective, TwAriaHaspopupDirective, TwAriaHiddenDirective, TwAriaLabelDirective, TwAriaLabelledbyDirective, TwAriaLiveDirective, TwAriaModalDirective, TwAriaOwnsDirective, TwAriaPressedDirective, TwAriaSelectedDirective, TwAriaService, TwAriaValueDirective, TwAspectRatioComponent, TwAudioPlayerComponent, TwAudioStatsComponent, TwAutoFocusDirective, TwAvatarComponent, TwAvatarGroupComponent, TwBadgeComponent, TwBadgeGroupComponent, TwBleedComponent, TwBpmDisplayComponent, TwBreadcrumbComponent, TwBreadcrumbsNavComponent, TwButtonComponent, TwButtonLinkComponent, TwCardBodyDirective, TwCardComponent, TwCardFooterDirective, TwCardHeaderDirective, TwCardHorizontalComponent, TwCardMediaDirective, TwCardSubtitleDirective, TwCardTitleDirective, TwCenterComponent, TwChannelStripComponent, TwCheckboxComponent, TwChipComponent, TwChipsComponent, TwChordDiagramComponent, TwCircleComponent, TwClassDirective, TwClassService, TwClickOutsideDirective, TwCodeViewerComponent, TwColumnsComponent, TwCommandPaletteComponent, TwCompressorMeterComponent, TwConfirmDialogComponent, TwConnectionStatusComponent, TwContainerComponent, TwContextMenuComponent, TwCopyClipboardDirective, TwDatatablesComponent, TwDebounceClickDirective, TwDividerComponent, TwDraggableDirective, TwDropZoneDirective, TwDropdownComponent, TwDropdownDividerComponent, TwDropdownHeaderComponent, TwDropdownItemDirective, TwDropdownMenuComponent, TwDropdownTriggerDirective, TwErrorDirective, TwFaderComponent, TwFileTreeComponent, TwFocusTrapDirective, TwGraphicEQComponent, TwGridComponent, TwHStackComponent, TwHintDirective, TwHoverClassDirective, TwI18nService, TwImageComponent, TwInViewDirective, TwInputAffixDirective, TwInputComponent, TwKeyboardShortcutDirective, TwLabelDirective, TwLazyImageDirective, TwLeadSheetComponent, TwLoadingOverlayComponent, TwLogViewerComponent, TwLongPressDirective, TwLooperComponent, TwMenuBarComponent, TwMenuComponent, TwMetronomeComponent, TwMidiLearnDirective, TwMixerComponent, TwModalBodyComponent, TwModalComponent, TwModalFooterComponent, TwModalHeaderComponent, TwModalTitleComponent, TwMultiSelectComponent, TwMusicalSymbolComponent, TwNativeConfirmDialogComponent, TwNativeContextMenuComponent, TwNoteComponent, TwNoteDisplayComponent, TwNoteInputComponent, TwOnboardingWizardComponent, TwOscilloscopeComponent, TwOverlayComponent, TwPaginationComponent, TwPanControlComponent, TwParametricEQComponent, TwPianoChordComponent, TwPianoComponent, TwPitchDisplayComponent, TwPopoverComponent, TwPreferencesDialogComponent, TwProgressCircularComponent, TwProgressComponent, TwPromptDialogComponent, TwPropertyInspectorComponent, TwQuickSwitcherComponent, TwRadioButtonComponent, TwRadioGroupComponent, TwRatingComponent, TwResizablePanelsComponent, TwResizeObserverDirective, TwRippleDirective, TwRoleDirective, TwScoreEditorComponent, TwScrollAreaComponent, TwScrollSectionDirective, TwScrollToDirective, TwScrollTopComponent, TwScrubberComponent, TwSearchBarComponent, TwSelectComponent, TwSettingTemplateDirective, TwSettingsPanelComponent, TwSheetMusicComponent, TwShortcutDirective, TwShortcutDisplayComponent, TwShortcutsEditorComponent, TwSidebarComponent, TwSidebarNavComponent, TwSimpleGridComponent, TwSkeletonCardComponent, TwSkeletonComponent, TwSkeletonTableComponent, TwSkeletonTextComponent, TwSliderComponent, TwSpacerComponent, TwSpectrumComponent, TwSpinnerComponent, TwSplitterComponent, TwSplitterPaneComponent, TwSquareComponent, TwSrOnlyDirective, TwStackComponent, TwStaffComponent, TwStatusBarComponent, TwStepsComponent, TwStickyComponent, TwSwipeDirective, TwSwitchComponent, TwTabBarComponent, TwTabPanelComponent, TwTablatureComponent, TwTableComponent, TwTabsComponent, TwTerminalComponent, TwTextareaComponent, TwThemeSelectorComponent, TwThemeService, TwTimeDisplayComponent, TwTimelineComponent, TwTitleBarComponent, TwToastComponent, TwToastContainerComponent, TwToastService, TwToolbarComponent, TwTooltipDirective, TwTouchGuardDirective, TwTransportComponent, TwTrapScrollDirective, TwTreeComponent, TwTunerComponent, TwUpdateDialogComponent, TwVStackComponent, TwVariantDirective, TwVisualizerComponent, TwVolumeDialComponent, TwVuMeterComponent, TwWaveformComponent, TwWindowControlsComponent, TwWrapComponent, UnsupportedOnPlatformError, UpdateService, createTheme, generateThemeCssProperties, getWorkerScript, handleMessage, parseABCNotation, parseMusicXML, provideTwConfig, provideTwLocale, provideTwTheme, provideTwTranslations, withTwConfig, withTwTheme };
12439
+ export type { AboutDialogConfig, AccentLevel, AccentPattern, AccessibilityPreferences, AccordionVariant, ActiveNote, ActivityIndicatorSize, ActivityIndicatorVariant, AlertDialogConfig, AlertDialogType, AlertStyle, AlertVariant, AnnouncementPriority, ArticulationType, AspectRatioPreset, AttackReleaseDisplay, AudioChain, AudioContextState, AudioFileInfo, AudioNodeConfig, AudioPlayerTheme, AudioPlayerVariant, AudioSourceType, AudioStatsSize, AudioStatsVariant, AudioTrack, AudioWorkerConfig, AudioWorkletModuleInfo, AuxSend, AvatarSize, AvatarStatus, AvatarVariant, BadgeSize, BadgeStyle, BadgeVariant, BeamConfig, BeamPosition, BeatDetectionOptions, BeatDetectionResult, BeatEvent, BeatHighlightMode, BleedAmount, BleedDirection, BpmDisplaySize, BpmDisplayVariant, BpmSyncStatus, BreadcrumbItem, BreadcrumbSeparator, ButtonSize, ButtonVariant, CCValueChangeEvent, CardVariant, ChannelGroup, ChannelStripSize, ChannelStripState, ChannelStripVariant, CheckboxSize, CheckboxVariant, ChipSize, ChipStyle, ChipVariant, ChordDefinition, ChordDiagramSize, ChordDiagramVariant, ChordFingering, ClefType, ClipboardData, CodeLanguage, ColorMode, ColumnsCount, ColumnsGap, ColumnsRule, CommandItem, CommandPaletteMode, CompressorMeterSize, CompressorMeterVariant, CompressorSettings, ConfirmDialogConfig, ConnectedSource, ConnectionState, ContainerSize, CopyClipboardEvent, DetectedNote, DialSize, DialVariant, DividerLabelPosition, DividerOrientation, DividerVariant, DragData, DropEvent, DropdownPosition, DynamicType, EQBand, EQBandChange, EQBandValue, EQFilterType, EQPreset, EQPresetCategory, EQVariant, ExportFormat, FFTProcessOptions, FFTProcessResult, FaderOrientation, FaderSize, FaderVariant, FileFilter, FileInfo, FilePickerResult, FileTreeEvent, FileTreeNode, FindPeaksOptions, FindPeaksResult, FrequencyConversionOptions, FrequencyConversionResult, FrequencyScale, GainReductionHistoryPoint, GraphicEQBandCount, GraphicEQVariant, GridCols, GridGap, HairpinType, HapticFeedbackType, HistoryEntry, ImageBorderRadius, ImageFit, InViewEvent, InputSize, InputVariant, InstrumentPart, IpcMessage, IpcResponse, KeySignature, KeyboardShortcut, KeyboardShortcutEvent, LazyImageEvent, LeadSheetChord, LeadSheetData, LeadSheetDisplayMode, LeadSheetMeasure, LeadSheetSection, LeadSheetStyle, LeadSheetVariant, LevelOptions, LevelResult, LogEntry, LogFilter, LongPressEvent, LoopLayer, LooperEvent, LooperSize, LooperState, LooperVariant, LyricEntry, MeasureData, MelodyNote, MenuItem, MenuVariant, MetronomeBeat, MetronomeSize, MetronomeVariant, MidiCCMapping, MidiDevice, MidiDeviceInfo, MidiLearnState, MidiMessage, MidiMessageType, MidiNoteInfo, MixerBreakpoint, MixerChannel, MixerSection, MixerSize, MixerState, MixerVariant, ModalSize, MultiSelectAppendTo, MultiSelectGroup, MultiSelectOption, MultiSelectSize, MultiSelectVariant, MusicSwipeDirection, NativeBreadcrumbItem, NativeClipboardData, NativeContextMenuEvent, NativeContextMenuPosition, NativeFileFilter, NativeMenuBarItem, NativeMenuItem, NativeNotificationAction, NativeNotificationOptions, NativeOpenFileOptions, NativeSaveFileOptions, NativeSidebarPosition, NativeSidebarVariant, NoteAccidental, NoteData, NoteDisplaySize, NoteDisplayVariant, NoteDuration, NoteEvent, NoteHistoryEntry, NoteInputEvent, NoteInputMeasureData, NoteName, OnboardingStep, OpenFileOptions, OrnamentType, OsPlatform, OscilloscopeTriggerMode, OscilloscopeVariant, OverlayBlur, OverlayOpacity, PaginationSize, PaginationVariant, PanControlSize, PanControlVariant, PanelConfig, PedalType, PianoChordDefinition, PianoChordNote, PianoChordSize, PianoChordVariant, PianoKey, PianoSize, PianoVariant, PinchGestureState, PitchBendStyle, PitchDisplaySize, PitchDisplayVariant, PitchInfo, PlacedNote, Platform, PlatformTheme, PlatformType, PopoverPosition, PopoverTrigger, PreferencesTab, PrintOptions, ProgressSize, ProgressVariant, PromptInputType, PropertyItem, QuickSwitcherItem, RadioSize, RadioVariant, RatingSize, RatingVariant, RepeatType, ResizeEvent, RuntimePlatform, SaveFileOptions, ScoreData, ScoreEditorVariant, ScrollAreaDirection, ScrollAreaScrollbar, ScrollTopPosition, ScrollTopVariant, ScrubberMarker, ScrubberThumbnail, ScrubberVariant, SearchFilter, SearchSuggestion, SelectAppendTo, SelectGroup, SelectOption, SelectSize, SelectVariant, SettingItem, SettingsCategory, SheetMusicData, SheetMusicLayout, SheetMusicVariant, ShortcutBinding, ShortcutDisplayPlatform, ShortcutDisplayVariant, SidebarItem, SidebarPosition, SidebarSize, SkeletonGap, SkeletonVariant, SlashPattern, SlashStyle, SliderSize, SliderVariant, SlurPoints, SmoothDataOptions, SmoothDataResult, SpacerSize, SpectrumColorScheme, SpectrumVariant, SpinnerColor, SpinnerSize, SpinnerVariant, SplitDirection, SplitterDirection, SplitterGutterSize, StackAlign, StackDirection, StackJustify, StackSpacing, StaffTimeSignature, StaffVariant, StatusBarItem, StemDirection, StepItem, StepsOrientation, StepsSize, StickyOffset, StickyPosition, StorageOptions, SwipeDirection, SwipeEvent, SwipeGestureResult, SwitchSize, SwitchVariant, SymbolCategory, TabBarPosition, TabBarVariant, TabEvent, TabItem, TabMeasure, TabNote, TablatureTechnique, TablatureVariant, TableColumn, TableSize, TableVariant, TabsOrientation, TabsSize, TabsVariant, TempoType, TerminalLine, TerminalVariant, ThemeColorValue, ThemeColors, ThemeComponentOverrides, ThemeMode, ThemePreset, ThumbnailSpriteConfig, TimeDisplayMode, TimeDisplaySize, TimeDisplayVariant, TimeDomainOptions, TimeDomainResult, TimeSignature, TimelineAlign, TimelineEvent, TimelineLayout, TitleBarPlatform, TitleBarVariant, ToastOptions, ToastPosition, ToastVariant, ToolbarItem, ToolbarPosition, ToolbarVariant, TooltipPosition, TouchGuardConfig, TransportSize, TransportVariant, TransposeOptions, TrayConfig, TreeNode, TreeSelectionMode, TunerMode, TunerVariant, TuningData, TupletConfig, TupletPosition, TwAlertClassConfig, TwBadgeClassConfig, TwButtonClassConfig, TwCardClassConfig, TwClassOverrides, TwConfig, TwDropdownClassConfig, TwInputClassConfig, TwModalClassConfig, TwTabsClassConfig, TwTheme, TwThemeConfig, TwTranslations, UpdateDialogInfo, UpdateInfo, UpdateProgress, UpdateStatus, VisualizerColorScheme, VisualizerVariant, Voice, VuMeterMode, VuMeterOrientation, VuMeterVariant, WaveformColorScheme, WaveformDownsampleOptions, WaveformDownsampleResult, WaveformMode, WaveformSize, WaveformVariant, WindowControlButton, WindowControlsPosition, WindowState, WorkerMessage, WorkerMessageType, WorkerResponse };