@acorex/components 22.1.0-next.23 → 22.1.0-next.25

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lookup/README.md CHANGED
@@ -62,11 +62,11 @@ Value binding uses the signal `value` model (`FormValueControl`) — prefer `[(n
62
62
  - `valueField` / `textField` / `disabledField`: field mappings. For tree modes these map to the tree `idField` / `titleField`.
63
63
  - `columns`: column definitions (`{ field, title, width?, expandHandler? }`) for `multi-column` and `multi-column-tree` (mapped to `ax-text-column`).
64
64
  - `treeParentField` / `hasChildrenField`: hierarchy fields for `multi-column-tree` (defaults `parentId` / `hasChild`).
65
- - `searchable`: when `true` (default), the trigger accepts typing and filters the list (`drop-down-list`, `multi-select`, `multi-column`, `multi-column-tree`). When `false`, the trigger is select-only. `drop-down-tree` / `multi-select-tree` have no search UI.
65
+ - `searchable`: when `true` (default), the trigger accepts typing and filters the list or tree in every mode. Nested array trees keep matching branches and expand ancestors of hits; lazy callback trees filter each loaded level (unloaded descendants are not searched). When `false`, the trigger is select-only.
66
66
  - `adaptivityEnabled`: when `true` (default), the list opens as a bottom actionsheet on small screens instead of a dropdown; set `false` to always use the anchored dropdown.
67
67
  - `caption`: title shown in the actionsheet header (falls back to `placeholder`).
68
- - `alternate`: when `true`, list rows use alternating background colors for easier scanning (`drop-down-list`, `multi-select`, `multi-column`, `multi-column-tree`).
69
- - `searchPlaceholder`: placeholder for the multi-select trigger search input when chips are already selected.
68
+ - `alternate`: when `true`, list rows use alternating background colors for easier scanning (all modes, including tree).
69
+ - `searchPlaceholder`: placeholder for the multi-select / multi-select-tree trigger search input when chips are already selected.
70
70
  - `itemHeight` / `maxVisibleItems`: list virtual-scroll sizing, and multi-column table viewport height (multi-column loads more pages on scroll, not via a pager).
71
71
  - `look`: the same editor-container look schemes as other editors like `ax-text-box`.
72
72
  - `ax-prefix` / `ax-suffix`: project decorators into the editor container.
package/package.json CHANGED
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "name": "@acorex/components",
3
- "version": "22.1.0-next.23",
3
+ "version": "22.1.0-next.25",
4
4
  "peerDependencies": {
5
- "@acorex/core": "22.1.0-next.23",
6
- "@acorex/cdk": "22.1.0-next.23",
5
+ "@acorex/core": "22.1.0-next.25",
6
+ "@acorex/cdk": "22.1.0-next.25",
7
7
  "@angular/aria": ">=22.1.0",
8
8
  "polytype": ">=0.17.0",
9
9
  "angular-imask": ">=7.6.1",
@@ -1,6 +1,6 @@
1
1
  import * as _angular_core from '@angular/core';
2
2
  import { TemplateRef } from '@angular/core';
3
- import { NXValueComponent, AXStyleLookType, AXValueChangedEvent, AXFocusEvent, AXItemClickEvent, AXItemSelectedEvent, AXEvent } from '@acorex/cdk/common';
3
+ import { NXValueComponent, AXStyleLookType, AXValueChangedEvent, AXFocusEvent, AXItemClickEvent, AXItemSelectedEvent, AXEvent, AXHtmlEvent } from '@acorex/cdk/common';
4
4
  import { AXPopoverComponent } from '@acorex/components/popover';
5
5
  import { AXSearchBoxComponent } from '@acorex/components/search-box';
6
6
  import { Combobox } from '@angular/aria/combobox';
@@ -205,10 +205,13 @@ declare class AXComboBoxComponent extends NXValueComponent implements FormValueC
205
205
  protected onTriggerClick(): void;
206
206
  /**
207
207
  * Keyboard handling on the trigger:
208
+ * - Searchable: Enter never submits the form; with no matches the value is cleared (`null`).
208
209
  * - Non-searchable: open with Enter/Space when collapsed; commit with Space when expanded.
209
210
  * - Multi-select: Backspace removes the last chip when the search input is empty.
210
211
  */
211
212
  protected onTriggerKeydown(event: KeyboardEvent): void;
213
+ /** Handles Enter in the actionsheet search field (no form submit; clear on no matches). */
214
+ protected onSheetSearchKeydown(e: AXHtmlEvent<KeyboardEvent>): void;
212
215
  /** Blocks typing when the trigger is not editable (keeps Tab / keyboard open working). */
213
216
  protected onBeforeInput(event: Event): void;
214
217
  /**
@@ -249,7 +252,9 @@ declare class AXComboBoxComponent extends NXValueComponent implements FormValueC
249
252
  * that option. Clicks resolve from the event target so we do not depend on listener order vs ngListbox.
250
253
  *
251
254
  * In multi-select mode the item is toggled and the popup stays open.
255
+ * When the user typed a query with no matches, Enter clears single-select to `null`.
252
256
  */
257
+ protected onListEnter(event: Event): void;
253
258
  protected commit(event?: Event): void;
254
259
  /**
255
260
  * Focuses the combo box trigger input.
@@ -28,6 +28,7 @@ declare class AXConversationComposerPopupComponent implements OnDestroy {
28
28
  private get registry();
29
29
  contentContainer: _angular_core.Signal<ViewContainerRef>;
30
30
  private currentComponentRef;
31
+ private tabItemSelectedSubscription;
31
32
  /** Popup open state (for backward compatibility) */
32
33
  readonly isOpen: _angular_core.InputSignal<boolean>;
33
34
  /** Close event (for backward compatibility) */
@@ -54,6 +55,7 @@ declare class AXConversationComposerPopupComponent implements OnDestroy {
54
55
  }): void;
55
56
  /** Load tab content component */
56
57
  private loadTabContent;
58
+ private clearTabContent;
57
59
  ngOnDestroy(): void;
58
60
  /** Close popup (for backward compatibility) */
59
61
  close(): void;
@@ -1255,6 +1257,7 @@ declare class AXConversationMessageRendererRegistry {
1255
1257
  private readonly _composerActions;
1256
1258
  constructor();
1257
1259
  private registerBuiltInRenderers;
1260
+ private registerBuiltInRendererIfMissing;
1258
1261
  /** All registered renderers */
1259
1262
  readonly renderers: Signal<AXConversationMessageRenderer[]>;
1260
1263
  /** Renderers sorted by priority (highest first) */
@@ -1618,7 +1621,6 @@ declare class AXConversationMessageActionRegistry {
1618
1621
  }
1619
1622
 
1620
1623
  declare class AXConversationComposerComponent implements OnDestroy {
1621
- #private;
1622
1624
  private readonly conversationService;
1623
1625
  private readonly composerService;
1624
1626
  private readonly messageListService;
@@ -1658,8 +1660,6 @@ declare class AXConversationComposerComponent implements OnDestroy {
1658
1660
  readonly composerPopupLoader: () => Promise<typeof _acorex_components_conversation.AXConversationComposerPopupComponent>;
1659
1661
  /** Input placeholder - use service */
1660
1662
  readonly placeholder: _angular_core.Signal<string>;
1661
- /** Typing indicator subject for rate limiting */
1662
- private readonly typingSubject;
1663
1663
  constructor();
1664
1664
  private draftSaveTimeout?;
1665
1665
  /** Number of input rows - use service */
@@ -1686,14 +1686,10 @@ declare class AXConversationComposerComponent implements OnDestroy {
1686
1686
  readonly endMenuActions: _angular_core.Signal<AXConversationComposerAction[]>;
1687
1687
  /** Default end action (voice/send morph) */
1688
1688
  readonly defaultAction: _angular_core.Signal<AXConversationComposerAction>;
1689
- /** Handle key down */
1689
+ /** Handle key down (send on Enter; typing is driven by draft changes only). */
1690
1690
  onKeyDown(event: AXHtmlEvent<KeyboardEvent>): void;
1691
- /** Handle input */
1692
- onInput(): void;
1693
- /** Send typing indicator (throttled via RxJS) */
1694
- private sendTypingIndicator;
1695
- private stopTypingIndicator;
1696
- private typingStopHandle?;
1691
+ /** Handle draft text changes — throttled typing indicator via conversation service. */
1692
+ onDraftChanged(): void;
1697
1693
  /** Cleanup on destroy */
1698
1694
  ngOnDestroy(): void;
1699
1695
  /** Handle send click */
@@ -1770,7 +1766,6 @@ declare class AXConversationComposerComponent implements OnDestroy {
1770
1766
  onReplyPreviewClick(): void;
1771
1767
  /** Inputs for picker components opened in popup / action sheet */
1772
1768
  private buildPickerInputs;
1773
- onEnter(event: AXHtmlEvent<KeyboardEvent>): Promise<void>;
1774
1769
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXConversationComposerComponent, never>;
1775
1770
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXConversationComposerComponent, "ax-conversation-composer", never, {}, { "messageSent": "messageSent"; "generationCancelled": "generationCancelled"; "emojiClick": "emojiClick"; "attachClick": "attachClick"; "voiceClick": "voiceClick"; }, never, never, true, never>;
1776
1771
  }
@@ -2631,111 +2626,33 @@ declare abstract class AXConversationMessageApi {
2631
2626
 
2632
2627
  /**
2633
2628
  * Abstract Real-time Events API
2634
- * Handle WebSocket/SSE connections and real-time event subscriptions
2629
+ * Handle WebSocket/SSE event subscriptions for conversation domain updates
2635
2630
  */
2636
2631
 
2637
- /**
2638
- * Connection options
2639
- */
2640
- interface AXConversationConnectionOptions {
2641
- /** WebSocket/SSE endpoint URL */
2642
- url?: string;
2643
- /** Authentication token */
2644
- token?: string;
2645
- /** Reconnect automatically on disconnect */
2646
- autoReconnect?: boolean;
2647
- /** Reconnect delay in milliseconds */
2648
- reconnectDelay?: number;
2649
- /** Maximum reconnect attempts */
2650
- maxReconnectAttempts?: number;
2651
- /** Heartbeat interval in milliseconds */
2652
- heartbeatInterval?: number;
2653
- /** Custom headers */
2654
- headers?: Record<string, string>;
2655
- }
2656
- /**
2657
- * Connection event
2658
- */
2659
- interface AXConversationConnectionEvent {
2660
- /** Event type */
2661
- type: 'connected' | 'disconnected' | 'reconnecting' | 'error';
2662
- /** Timestamp */
2663
- timestamp: Date;
2664
- /** Error message if applicable */
2665
- error?: string;
2666
- /** Attempt number for reconnecting */
2667
- attempt?: number;
2668
- }
2669
- /**
2670
- * Notification event
2671
- */
2672
- interface AXConversationNotificationEvent {
2673
- /** Notification ID */
2674
- id: string;
2675
- /** Notification type */
2676
- type: 'message' | 'mention' | 'reaction' | 'call' | 'system';
2677
- /** Title */
2678
- title: string;
2679
- /** Body text */
2680
- body: string;
2681
- /** Related conversation ID */
2682
- conversationId?: string;
2683
- /** Related message ID */
2684
- messageId?: string;
2685
- /** Icon URL */
2686
- icon?: string;
2687
- /** Timestamp */
2688
- timestamp: Date;
2689
- /** Custom data */
2690
- data?: Record<string, unknown>;
2691
- }
2692
- /**
2693
- * Call event
2694
- */
2695
- interface AXConversationCallEvent {
2696
- /** Call ID */
2697
- callId: string;
2698
- /** Call type */
2699
- type: 'voice' | 'video';
2700
- /** Call status */
2701
- status: 'incoming' | 'outgoing' | 'accepted' | 'rejected' | 'ended' | 'missed';
2702
- /** Caller user ID */
2703
- callerId: string;
2704
- /** Conversation ID */
2705
- conversationId: string;
2706
- /** Timestamp */
2707
- timestamp: Date;
2708
- /** Call duration in seconds (for ended calls) */
2709
- duration?: number;
2710
- }
2711
2632
  /**
2712
2633
  * Abstract Real-time Events API
2713
2634
  *
2714
- * Implement this abstract class to handle real-time event subscriptions.
2715
- * Supports WebSocket, SSE, or any other real-time protocol.
2635
+ * Implement this abstract class to expose domain event streams from your WebSocket/SSE layer.
2636
+ * Connection lifecycle is owned by the implementation — this contract only covers subscriptions.
2637
+ *
2638
+ * Covered domains: message CRUD, conversation (room) CRUD, typing indicators, and presence.
2639
+ * Message updates include edits, reactions, delivery/read status, and other message field changes.
2716
2640
  *
2717
2641
  * @example
2718
2642
  * ```typescript
2719
2643
  * @Injectable()
2720
2644
  * export class MyRealtimeApi extends AXConversationRealtimeApi {
2721
- * private socket: WebSocket;
2722
- * private connectionStatus$ = new BehaviorSubject<AXConversationConnectionStatus>('disconnected');
2645
+ * private readonly messageCreated$ = new Subject<AXConversationMessage>();
2723
2646
  *
2724
- * async connect(options?: AXConversationConnectionOptions): Promise<void> {
2725
- * this.socket = new WebSocket(options?.url || 'ws://localhost:3000');
2726
- * this.socket.onopen = () => this.connectionStatus$.next('connected');
2727
- * // ... handle other events
2647
+ * constructor(private readonly socket: MyChatSocketService) {
2648
+ * super();
2649
+ * this.socket.on('message.created', (message) => this.messageCreated$.next(message));
2728
2650
  * }
2729
2651
  *
2730
2652
  * subscribeToMessages(conversationId: string): Observable<AXConversationMessage> {
2731
- * return new Observable(subscriber => {
2732
- * this.socket.addEventListener('message', (event) => {
2733
- * const data = JSON.parse(event.data);
2734
- * if (data.type === 'message' && data.conversationId === conversationId) {
2735
- * subscriber.next(data.message);
2736
- * }
2737
- * });
2738
- * });
2653
+ * return this.messageCreated$.pipe(
2654
+ * filter((message) => !conversationId || message.conversationId === conversationId),
2655
+ * );
2739
2656
  * }
2740
2657
  *
2741
2658
  * // ... implement other methods
@@ -2743,41 +2660,6 @@ interface AXConversationCallEvent {
2743
2660
  * ```
2744
2661
  */
2745
2662
  declare abstract class AXConversationRealtimeApi {
2746
- /**
2747
- * Current connection status
2748
- * Emit connection status changes through this observable
2749
- */
2750
- abstract readonly connectionStatus$: Observable<AXConversationConnectionStatus>;
2751
- /**
2752
- * Connect to real-time server
2753
- * Establish WebSocket/SSE connection
2754
- *
2755
- * @param options - Connection options
2756
- * @throws {Error} If connection fails
2757
- */
2758
- abstract connect(options?: AXConversationConnectionOptions): Promise<void>;
2759
- /**
2760
- * Disconnect from real-time server
2761
- * Close connection and clean up resources
2762
- */
2763
- abstract disconnect(): Promise<void>;
2764
- /**
2765
- * Check if currently connected
2766
- *
2767
- * @returns True if connected
2768
- */
2769
- abstract isConnected(): boolean;
2770
- /**
2771
- * Reconnect to server
2772
- * Manually trigger reconnection
2773
- */
2774
- abstract reconnect(): Promise<void>;
2775
- /**
2776
- * Subscribe to connection events
2777
- *
2778
- * @returns Observable of connection events
2779
- */
2780
- abstract subscribeToConnectionEvents(): Observable<AXConversationConnectionEvent>;
2781
2663
  /**
2782
2664
  * Subscribe to new messages in a conversation
2783
2665
  *
@@ -2786,7 +2668,7 @@ declare abstract class AXConversationRealtimeApi {
2786
2668
  */
2787
2669
  abstract subscribeToMessages(conversationId: string): Observable<AXConversationMessage>;
2788
2670
  /**
2789
- * Subscribe to message updates (edits, status changes)
2671
+ * Subscribe to message updates (edits, reactions, status changes, metadata, etc.)
2790
2672
  *
2791
2673
  * @param conversationId - Optional conversation ID to filter
2792
2674
  * @returns Observable stream of updated messages
@@ -2800,15 +2682,32 @@ declare abstract class AXConversationRealtimeApi {
2800
2682
  */
2801
2683
  abstract subscribeToMessageDeletions(conversationId?: string): Observable<string>;
2802
2684
  /**
2803
- * Subscribe to message reactions
2685
+ * Subscribe to message status changes
2686
+ * Fires when message status changes (sending -> sent -> delivered -> read)
2687
+ *
2688
+ * @param conversationId - Optional conversation ID to filter
2689
+ * @returns Observable stream of message status updates
2690
+ */
2691
+ abstract subscribeToMessageStatusChanges(conversationId?: string): Observable<{
2692
+ messageId: string;
2693
+ status: 'sending' | 'sent' | 'delivered' | 'read' | 'failed';
2694
+ timestamp: Date;
2695
+ }>;
2696
+ /**
2697
+ * Subscribe to read receipt updates
2698
+ * Fires when someone reads messages
2804
2699
  *
2805
2700
  * @param conversationId - Optional conversation ID to filter
2806
- * @returns Observable stream of updated messages with reactions
2701
+ * @returns Observable stream of message IDs that were read
2807
2702
  */
2808
- abstract subscribeToMessageReactions(conversationId?: string): Observable<AXConversationMessage>;
2703
+ abstract subscribeToReadReceipts(conversationId?: string): Observable<{
2704
+ messageId: string;
2705
+ userId: string;
2706
+ readAt: Date;
2707
+ }>;
2809
2708
  /**
2810
2709
  * Subscribe to conversation updates
2811
- * Fires when conversation details change (title, avatar, participants, etc.)
2710
+ * Fires when conversation details change (title, avatar, participants, last message, etc.)
2812
2711
  *
2813
2712
  * @returns Observable stream of updated conversations
2814
2713
  */
@@ -2841,97 +2740,6 @@ declare abstract class AXConversationRealtimeApi {
2841
2740
  * @returns Observable stream of presence updates
2842
2741
  */
2843
2742
  abstract subscribeToPresenceUpdates(userIds?: string[]): Observable<AXConversationPresenceUpdate>;
2844
- /**
2845
- * Subscribe to read receipt updates
2846
- * Fires when someone reads messages
2847
- *
2848
- * @param conversationId - Optional conversation ID to filter
2849
- * @returns Observable stream of message IDs that were read
2850
- */
2851
- abstract subscribeToReadReceipts(conversationId?: string): Observable<{
2852
- messageId: string;
2853
- userId: string;
2854
- readAt: Date;
2855
- }>;
2856
- /**
2857
- * Subscribe to push notifications
2858
- * Fires for mentions, calls, and other important events
2859
- *
2860
- * @returns Observable stream of notification events
2861
- */
2862
- abstract subscribeToNotifications(): Observable<AXConversationNotificationEvent>;
2863
- /**
2864
- * Subscribe to call events
2865
- * Fires for incoming/outgoing calls
2866
- *
2867
- * @returns Observable stream of call events
2868
- */
2869
- abstract subscribeToCallEvents?(): Observable<AXConversationCallEvent>;
2870
- /**
2871
- * Subscribe to user blocked/unblocked events
2872
- *
2873
- * @returns Observable stream of user IDs and block status
2874
- */
2875
- abstract subscribeToUserBlockEvents(): Observable<{
2876
- userId: string;
2877
- blocked: boolean;
2878
- }>;
2879
- /**
2880
- * Subscribe to participant added/removed events
2881
- *
2882
- * @param conversationId - Optional conversation ID to filter
2883
- * @returns Observable stream of participant changes
2884
- */
2885
- abstract subscribeToParticipantEvents(conversationId?: string): Observable<{
2886
- conversationId: string;
2887
- userId: string;
2888
- action: 'added' | 'removed';
2889
- }>;
2890
- /**
2891
- * Subscribe to system events
2892
- * Fires for maintenance, updates, or other system-wide events
2893
- *
2894
- * @returns Observable stream of system events
2895
- */
2896
- abstract subscribeToSystemEvents(): Observable<{
2897
- type: string;
2898
- message: string;
2899
- data?: unknown;
2900
- }>;
2901
- /**
2902
- * Subscribe to message status changes
2903
- * Fires when message status changes (sending -> sent -> delivered -> read)
2904
- *
2905
- * @param conversationId - Optional conversation ID to filter
2906
- * @returns Observable stream of message status updates
2907
- */
2908
- abstract subscribeToMessageStatusChanges(conversationId?: string): Observable<{
2909
- messageId: string;
2910
- status: 'sending' | 'sent' | 'delivered' | 'read' | 'failed';
2911
- timestamp: Date;
2912
- }>;
2913
- /**
2914
- * Subscribe to conversation settings changes
2915
- * Fires when conversation settings are updated
2916
- *
2917
- * @param conversationId - Optional conversation ID to filter
2918
- * @returns Observable stream of settings updates
2919
- */
2920
- abstract subscribeToConversationSettingsChanges(conversationId?: string): Observable<{
2921
- conversationId: string;
2922
- settings: Record<string, unknown>;
2923
- }>;
2924
- /**
2925
- * Subscribe to draft changes
2926
- * Fires when draft is saved/updated in a conversation
2927
- *
2928
- * @param conversationId - Optional conversation ID to filter
2929
- * @returns Observable stream of draft updates
2930
- */
2931
- abstract subscribeToDraftChanges(conversationId?: string): Observable<{
2932
- conversationId: string;
2933
- draft: string | null;
2934
- }>;
2935
2743
  }
2936
2744
 
2937
2745
  /**
@@ -3251,8 +3059,6 @@ declare class AXConversationService {
3251
3059
  private readonly _error;
3252
3060
  private readonly _conversationsPagination;
3253
3061
  private readonly _messagesPaginationByConversation;
3254
- /** Emits when the active conversation changes, cancelling per-conversation subscriptions. */
3255
- private readonly _conversationSwitch$;
3256
3062
  private readonly _messageReceived$;
3257
3063
  private readonly _messageUpdated$;
3258
3064
  private readonly _messageDeleted$;
@@ -3278,8 +3084,6 @@ declare class AXConversationService {
3278
3084
  readonly activeMessagesPagination: _angular_core.Signal<AXConversationPaginationState>;
3279
3085
  /** Error state */
3280
3086
  readonly error: _angular_core.Signal<Error>;
3281
- /** Connection status */
3282
- readonly connectionStatus$: rxjs.Observable<_acorex_components_conversation.AXConversationConnectionStatus>;
3283
3087
  /** Error stream */
3284
3088
  readonly errors$: rxjs.Observable<_acorex_components_conversation.AXConversationError>;
3285
3089
  readonly onMessageReceived: rxjs.Observable<AXConversationMessage>;
@@ -3303,8 +3107,10 @@ declare class AXConversationService {
3303
3107
  private readFlushHandle;
3304
3108
  private presenceTickHandle?;
3305
3109
  private typingPruneHandle?;
3306
- private isTypingActiveForConversation;
3307
- private typingStopHandle?;
3110
+ /** Outgoing typing indicator throttle state (composer -> API). */
3111
+ private readonly outgoingTypingLastEmitAt;
3112
+ private readonly outgoingTypingActive;
3113
+ private readonly outgoingTypingStopHandles;
3308
3114
  /** Session cache for available reaction emojis. */
3309
3115
  private availableReactionsCache;
3310
3116
  private availableReactionsPromise;
@@ -3324,8 +3130,9 @@ declare class AXConversationService {
3324
3130
  */
3325
3131
  private initializeService;
3326
3132
  /**
3327
- * Subscribe to real-time events
3328
- * All subscriptions include error handling to prevent stream termination
3133
+ * Subscribe to real-time events from {@link AXConversationRealtimeApi}.
3134
+ * Binds every abstract subscription: messages (create/update/delete/status/read),
3135
+ * conversations (create/update/delete), typing indicators, and presence.
3329
3136
  */
3330
3137
  private subscribeToEvents;
3331
3138
  getUserPresence(userId: string): AXConversationUserPresence | undefined;
@@ -3427,6 +3234,18 @@ declare class AXConversationService {
3427
3234
  * Cancel an in-progress generation from the composer UI or programmatically.
3428
3235
  */
3429
3236
  cancelGeneration(): void;
3237
+ /**
3238
+ * Notify that the composer has draft content.
3239
+ * Emits typing indicators at most once per {@link AXConversationConfig.typingIndicatorThrottle}.
3240
+ */
3241
+ notifyComposerTyping(conversationId: string): void;
3242
+ /**
3243
+ * Notify that the composer no longer has draft content (or user left the chat).
3244
+ * Sends a single stop event when a typing indicator was previously emitted.
3245
+ */
3246
+ notifyComposerStoppedTyping(conversationId: string): void;
3247
+ private scheduleOutgoingTypingStop;
3248
+ private clearOutgoingTypingStop;
3430
3249
  /**
3431
3250
  * Send typing indicator
3432
3251
  * Non-critical operation, doesn't throw on failure
@@ -3472,7 +3291,6 @@ declare class AXConversationService {
3472
3291
  private handleConversationDeleted;
3473
3292
  private handleReadReceipt;
3474
3293
  private handleMessageStatusChange;
3475
- private handleRoomPreferencesChange;
3476
3294
  /**
3477
3295
  * Insert or refresh a conversation in the in-memory inbox.
3478
3296
  * @param promote When true, bumps activity so the chat sorts to the top (create / reopen).
@@ -3483,6 +3301,10 @@ declare class AXConversationService {
3483
3301
  * Update conversation's last message
3484
3302
  */
3485
3303
  private updateConversationLastMessage;
3304
+ /** Keep sidebar preview in sync when the last cached message is edited or deleted. */
3305
+ private syncLastMessageIfRelevant;
3306
+ /** Recompute conversation preview after a message is removed from the local cache. */
3307
+ private refreshConversationLastMessage;
3486
3308
  /**
3487
3309
  * Update conversation properties
3488
3310
  * @param conversationId - Conversation ID
@@ -3554,11 +3376,6 @@ declare class AXConversationService {
3554
3376
  * @returns Number of times forwarded
3555
3377
  */
3556
3378
  getForwardCount(messageId: string): Promise<number>;
3557
- /**
3558
- * Disconnect and cleanup
3559
- * Cleanly closes all connections and resources
3560
- */
3561
- disconnect(): Promise<void>;
3562
3379
  /**
3563
3380
  * Archive conversation
3564
3381
  * @param conversationId - Conversation ID
@@ -4220,7 +4037,6 @@ declare class AXConversationRegistryComponentOutletComponent {
4220
4037
  readonly componentLoader: _angular_core.InputSignal<() => Promise<Type<unknown>>>;
4221
4038
  readonly inputs: _angular_core.InputSignal<Record<string, unknown>>;
4222
4039
  readonly resolvedComponent: _angular_core.WritableSignal<Type<unknown>>;
4223
- readonly loading: _angular_core.WritableSignal<boolean>;
4224
4040
  /** Avoid re-loading when the parent re-binds the same lazy loader reference. */
4225
4041
  private activeLoader;
4226
4042
  constructor();
@@ -4422,7 +4238,6 @@ interface AXConversationConfig {
4422
4238
  messageHighlightDuration?: number;
4423
4239
  /** Search debounce delay in milliseconds */
4424
4240
  debounceSearch?: number;
4425
- /** Date separator inactivity fade delay in milliseconds */
4426
4241
  /** Maximum messages per conversation */
4427
4242
  maxMessagesPerConversation?: number;
4428
4243
  /** Maximum total messages in store */
@@ -4435,8 +4250,6 @@ interface AXConversationConfig {
4435
4250
  maxSidebarWidth?: number;
4436
4251
  /** Default sidebar width in pixels */
4437
4252
  defaultSidebarWidth?: number;
4438
- /** Filter cache size */
4439
- filterCacheSize?: number;
4440
4253
  /** Maximum message length in characters */
4441
4254
  maxMessageLength?: number;
4442
4255
  /** Minimum message length in characters */
@@ -4445,7 +4258,7 @@ interface AXConversationConfig {
4445
4258
  maxFilesPerMessage?: number;
4446
4259
  /** Threshold for marking messages as read (0.0 to 1.0, default: 0.3) */
4447
4260
  messageReadThreshold?: number;
4448
- /** Debounce window (ms) before flushing batched read-receipt API calls (default: 400) */
4261
+ /** Debounce window (ms) before flushing batched read-receipt API calls (default: 3000) */
4449
4262
  messageReadDebounce?: number;
4450
4263
  /**
4451
4264
  * When true, marks the whole conversation as read once when it is selected (single API call).
@@ -6533,4 +6346,4 @@ declare function getErrorMessage(code: string, params?: Record<string, string |
6533
6346
  type AXConversationErrorCode = typeof AX_CONVERSATION_MESSAGE_ERRORS[keyof typeof AX_CONVERSATION_MESSAGE_ERRORS]['code'] | typeof AX_CONVERSATION_FILE_ERRORS[keyof typeof AX_CONVERSATION_FILE_ERRORS]['code'] | typeof AX_CONVERSATION_USER_ERRORS[keyof typeof AX_CONVERSATION_USER_ERRORS]['code'] | typeof AX_CONVERSATION_ERRORS[keyof typeof AX_CONVERSATION_ERRORS]['code'] | typeof AX_CONVERSATION_CONNECTION_ERRORS[keyof typeof AX_CONVERSATION_CONNECTION_ERRORS]['code'] | typeof AX_CONVERSATION_LOCATION_ERRORS[keyof typeof AX_CONVERSATION_LOCATION_ERRORS]['code'] | typeof AX_CONVERSATION_URL_ERRORS[keyof typeof AX_CONVERSATION_URL_ERRORS]['code'];
6534
6347
 
6535
6348
  export { AXConversationApi, AXConversationApiLoggerService, AXConversationAudioAttachmentComponent, AXConversationAudioFileTypeProvider, AXConversationAudioPickerComponent, AXConversationAudioRendererComponent, AXConversationAvatarComponent, AXConversationAvatarPickerComponent, AXConversationBaseRegistry, AXConversationComposerActionRegistry, AXConversationComposerComponent, AXConversationComposerFileTypesProvider, AXConversationComposerGenerationStateService, AXConversationComposerPopupComponent, AXConversationComposerService, AXConversationComposerTabRegistry, AXConversationContainerComponent, AXConversationContainerDirective, AXConversationDateUtilsService, AXConversationEmojiTabComponent, AXConversationErrorHandlerService, AXConversationFallbackRendererComponent, AXConversationFileAttachmentComponent, AXConversationFileFileTypeProvider, AXConversationFilePickerComponent, AXConversationFileRendererComponent, AXConversationForwardMessageDialogComponent, AXConversationImageAttachmentComponent, AXConversationImageFileTypeProvider, AXConversationImagePickerComponent, AXConversationImageRendererComponent, AXConversationInfiniteScrollDirective, AXConversationInfoBarActionRegistry, AXConversationInfoBarComponent, AXConversationInfoBarSearchComponent, AXConversationInfoBarService, AXConversationItemActionRegistry, AXConversationLocationPickerComponent, AXConversationLocationRendererComponent, AXConversationMediaPlaybackInfoBarBannerComponent, AXConversationMessageActionRegistry, AXConversationMessageApi, AXConversationMessageListComponent, AXConversationMessageListNoActiveDefaultComponent, AXConversationMessageListService, AXConversationMessageRendererCopyHostComponent, AXConversationMessageRendererRegistry, AXConversationMessageRendererStateComponent, AXConversationMessageUtilsService, AXConversationModule, AXConversationNewDialogComponent, AXConversationPickerCaptionComponent, AXConversationPickerEmptyComponent, AXConversationPickerFooterComponent, AXConversationPickerHeaderComponent, AXConversationPickerShellComponent, AXConversationPickerToolbarComponent, AXConversationRealtimeApi, AXConversationRegistryComponentOutletComponent, AXConversationRegistryService, AXConversationService, AXConversationSidebarComponent, AXConversationSidebarService, AXConversationStickerRendererComponent, AXConversationStickerTabComponent, AXConversationSystemRendererComponent, AXConversationTabRegistry, AXConversationTextRendererComponent, AXConversationUserApi, AXConversationVideoAttachmentComponent, AXConversationVideoFileTypeProvider, AXConversationVideoPickerComponent, AXConversationVideoRendererComponent, AXConversationVoiceFileTypeProvider, AXConversationVoiceRecorderComponent, AXConversationVoiceRendererComponent, AX_CONVERSATION_AUDIO_CATALOG, AX_CONVERSATION_AUDIO_PRESENTATION, AX_CONVERSATION_AUDIO_RENDERER, AX_CONVERSATION_BUILTIN_COMPOSER_TABS, AX_CONVERSATION_COMPOSER_AUDIO_ACTION, AX_CONVERSATION_COMPOSER_EMOJI_ACTION, AX_CONVERSATION_COMPOSER_EMOJI_TAB, AX_CONVERSATION_COMPOSER_FILE_ACTION, AX_CONVERSATION_COMPOSER_IMAGE_ACTION, AX_CONVERSATION_COMPOSER_LOCATION_ACTION, AX_CONVERSATION_COMPOSER_STICKER_TAB, AX_CONVERSATION_COMPOSER_VIDEO_ACTION, AX_CONVERSATION_COMPOSER_VOICE_RECORDING_ACTION, AX_CONVERSATION_CONFIG, AX_CONVERSATION_CONNECTION_ERRORS, AX_CONVERSATION_CONVERSATION_AVATAR_COMPONENT, AX_CONVERSATION_DEFAULT_COMPOSER_ACTIONS, AX_CONVERSATION_DEFAULT_COMPOSER_TABS, AX_CONVERSATION_DEFAULT_CONVERSATION_ITEM_ACTIONS, AX_CONVERSATION_DEFAULT_CONVERSATION_TABS, AX_CONVERSATION_DEFAULT_GROUP_ICON, AX_CONVERSATION_DEFAULT_INFO_BAR_ACTIONS, AX_CONVERSATION_DEFAULT_MESSAGE_ACTIONS, AX_CONVERSATION_DEFAULT_MESSAGE_LIST_BACKGROUND, AX_CONVERSATION_DEFAULT_MESSAGE_LIST_BACKGROUND_PRESET_ID, AX_CONVERSATION_DEFAULT_MESSAGE_LIST_THEME_BACKGROUND, AX_CONVERSATION_DEFAULT_MESSAGE_RENDERERS, AX_CONVERSATION_DEFAULT_ROOM_PREFERENCES, AX_CONVERSATION_DEFAULT_USER_ICON, AX_CONVERSATION_ERRORS, AX_CONVERSATION_ERROR_HANDLER_CONFIG, AX_CONVERSATION_ERROR_MESSAGES, AX_CONVERSATION_FALLBACK_RENDERER, AX_CONVERSATION_FILE_CATALOG, AX_CONVERSATION_FILE_ERRORS, AX_CONVERSATION_FILE_PRESENTATION, AX_CONVERSATION_FILE_RENDERER, AX_CONVERSATION_FILE_TYPES_READY, AX_CONVERSATION_IMAGE_CATALOG, AX_CONVERSATION_IMAGE_PRESENTATION, AX_CONVERSATION_IMAGE_RENDERER, AX_CONVERSATION_INFO_BAR_ARCHIVE_ACTION, AX_CONVERSATION_INFO_BAR_BLOCK_ACTION, AX_CONVERSATION_INFO_BAR_DELETE_ACTION, AX_CONVERSATION_INFO_BAR_DIVIDER, AX_CONVERSATION_INFO_BAR_MUTE_ACTION, AX_CONVERSATION_INFO_BAR_SEARCH_ACTION, AX_CONVERSATION_ITEM_BLOCK_ACTION, AX_CONVERSATION_ITEM_DELETE_ACTION, AX_CONVERSATION_ITEM_DIVIDER, AX_CONVERSATION_ITEM_MARK_READ_ACTION, AX_CONVERSATION_ITEM_MUTE_ACTION, AX_CONVERSATION_ITEM_PIN_ACTION, AX_CONVERSATION_LOCATION_ERRORS, AX_CONVERSATION_LOCATION_RENDERER, AX_CONVERSATION_MESSAGE_DELETE_ACTION, AX_CONVERSATION_MESSAGE_EDIT_ACTION, AX_CONVERSATION_MESSAGE_ERRORS, AX_CONVERSATION_MESSAGE_FORWARD_ACTION, AX_CONVERSATION_MESSAGE_LIST_BACKGROUND_PRESETS, AX_CONVERSATION_MESSAGE_REPLY_ACTION, AX_CONVERSATION_MESSAGE_TYPE_FILE_TYPE, AX_CONVERSATION_PEER_AVATAR_TYPES, AX_CONVERSATION_REGISTRY_CONFIG, AX_CONVERSATION_STICKER_API_KEY, AX_CONVERSATION_STICKER_RENDERER, AX_CONVERSATION_SYSTEM_RENDERER, AX_CONVERSATION_TAB_ALL, AX_CONVERSATION_TAB_ARCHIVED, AX_CONVERSATION_TAB_BOT, AX_CONVERSATION_TAB_CHANNELS, AX_CONVERSATION_TAB_GROUPS, AX_CONVERSATION_TAB_PRIVATE, AX_CONVERSATION_TAB_UNREAD, AX_CONVERSATION_TEXT_RENDERER, AX_CONVERSATION_URL_ERRORS, AX_CONVERSATION_USER_AVATAR_COMPONENT, AX_CONVERSATION_USER_ERRORS, AX_CONVERSATION_VIDEO_CATALOG, AX_CONVERSATION_VIDEO_PRESENTATION, AX_CONVERSATION_VIDEO_RENDERER, AX_CONVERSATION_VOICE_CATALOG, AX_CONVERSATION_VOICE_PRESENTATION, AX_CONVERSATION_VOICE_RENDERER, AX_DEFAULT_CONVERSATION_CONFIG, abortPickerUploads, applyAudioLocalPreview, applyFileLocalPreview, applyLocalPreview, applyVideoLocalPreview, applyVoiceLocalPreview, audioItemFromUpload, bindMediaRendererContentState, buildMediaGalleryTiles, canShowRendererContentError, cleanupPickerUploads, conversationAudioUtilities, conversationFileUtilities, conversationImageUtilities, conversationVideoUtilities, conversationVoiceUtilities, copyWithFileTypeFallback, createConversationAudioFileType, createConversationFileFileType, createConversationImageFileType, createConversationVideoFileType, createConversationVoiceFileType, createLocalPreviewUrl, createObjectUrl, createPickerDragHandlers, createResolvedMediaUrlSignal, deleteUploadedPickerMedia, dismissComposerPickerHost, ensureConversationFileCatalogRegistered, fetchConversationMediaPage, fileItemFromUpload, filterMessagesByMediaCategory, filterSupplementalInfoPanelMessages, findExistingPrivateConversation, formatDuration, formatErrorMessage, formatFileByteSize, formatFileSize, formatMediaDuration, formatPickerValidationMessage, getConversationMediaCategories, getConversationProfileFields, getErrorMessage, getMessageAudioItems, getMessageVideoItems, getPickerCancelUploadLabel, getPrivatePeerParticipant, hasRegistryComponent, inferFileExtensionHintFromMessage, isAttachmentListCategory, isComposerTabEnabled, isConversationReactionsEnabled, isGenericPrivateConversationTitle, isGridMediaCategory, isMessageDeliveryPending, isMessageListThemeBackground, isNonPersistableMediaUrl, isPickerItemReadyToSend, isSameMessageListBackground, isUploadAborted, limitFilesToCapacity, mediaCopyText, mergeAudioUploadResult, mergeFileUploadResult, mergeInfoPanelMessages, mergeUploadResult, mergeVideoUploadResult, mergeVoiceUploadResult, mergeWithDefaults, messageContainsLink, normalizeAudioPayload, normalizeFilePayload, normalizeImagePayload, normalizeMessageListBackgroundValue, normalizeVideoPayload, notifyMaxFilesCapacityExceeded, notifyPickerValidationErrors, openWithFileType, pickDisplayMediaUrl, pickerItemToMediaReference, pickerItemToUploadResult, provideConversation, provideConversationComposerFileTypes, provideConversationFileCatalog, reportMediaLoadError, resolveComposerMaxFiles, resolveConversationAvatarDisplay, resolveConversationComposerTabs, resolveConversationForViewer, resolveConversationMessageFileType, resolveConversationPeerParticipant, resolveConversationPeerUserId, resolveConversationTitleForViewer, resolveGalleryImageUrl, resolveImageDisplayUrl, resolveMessageListBackgroundRaw, resolveMessageListBackgroundStyle, resolveParticipantProfile, resolvePersistableMediaUrl, resolvePersistedThumbnailUrl, resolvePrivatePeerParticipant, resolvePrivatePeerUserId, resolveUserAvatarDisplay, resolveVideoThumbnailUrl, revokeObjectUrl, revokePickerBlobPreviews, sanitizeInput, shouldUseUserAvatarForConversation, syncPlaybackInfoBarBanner, toUploaderReference as toMediaItemUploaderReference, toUploaderReference$1 as toUploaderReference, uploadPickerFile, validateConversationId, validateEmail, validateLatitude, validateLongitude, validateMessagePayload, validateMessageText, validateMessageType, validateUrl, validateUserId, validateUserIds, videoItemFromUpload };
6536
- export type { AXConversation, AXConversationApiError, AXConversationApiLogEntry, AXConversationApiName, AXConversationAudioMediaItem, AXConversationAudioPayload, AXConversationAvatarComponents, AXConversationAvatarDisplay, AXConversationAvatarKind, AXConversationBlockReportReason, AXConversationCallEvent, AXConversationCleanupPickerUploadsOptions, AXConversationComposerAction, AXConversationComposerActionComponent, AXConversationComposerActionContext, AXConversationComposerGenerationPhase, AXConversationComposerPickerUploadItem, AXConversationComposerPrimaryButtonMode, AXConversationComposerTab, AXConversationComposerTabFeature, AXConversationConfig, AXConversationConnectionEvent, AXConversationConnectionOptions, AXConversationConnectionStatus, AXConversationConversationAvatarComponent, AXConversationCreateData, AXConversationDeleteMessageCommand, AXConversationDropdownMenuItem, AXConversationEditMessageCommand, AXConversationError, AXConversationErrorCode, AXConversationErrorHandlerConfig, AXConversationErrorMessage, AXConversationErrorSeverity, AXConversationFeatures, AXConversationFileMediaItem, AXConversationFilePayload, AXConversationFilter, AXConversationFilters, AXConversationGroupedReaction, AXConversationImageMediaItem, AXConversationImagePayload, AXConversationInfoBarAction, AXConversationInfoBarActionComponent, AXConversationInfoBarActionContext, AXConversationInfoBarActiveBanner, AXConversationInfoBarActiveComponent, AXConversationInfoProfileField, AXConversationItemAction, AXConversationItemActionContext, AXConversationLink, AXConversationLinkPreview, AXConversationLoadMessagesResult, AXConversationLocationPayload, AXConversationMediaCategory, AXConversationMediaCategoryId, AXConversationMediaGalleryTile, AXConversationMediaItemFields, AXConversationMediaPageResult, AXConversationMention, AXConversationMessage, AXConversationMessageAction, AXConversationMessageActionContext, AXConversationMessageForwardData, AXConversationMessageInfoBarBannerComponent, AXConversationMessageListBackground, AXConversationMessageListBackgroundPreset, AXConversationMessageListEmptyComponent, AXConversationMessageListThemeBackground, AXConversationMessagePayload, AXConversationMessageRenderer, AXConversationMessageRendererCapabilities, AXConversationMessageRendererComponent, AXConversationMessageRendererContentState, AXConversationMessageRendererState, AXConversationMessageSearchFilters, AXConversationMessageStatus, AXConversationMessageType, AXConversationMetadata, AXConversationNotificationEvent, AXConversationOptions, AXConversationPaginatedResult, AXConversationPagination, AXConversationPaginationState, AXConversationParticipant, AXConversationParticipantRole, AXConversationParticipantUpdate, AXConversationPinnedMessage, AXConversationPlaybackBannerInputs, AXConversationPollOption, AXConversationPollPayload, AXConversationPresenceStatus, AXConversationPresenceUpdate, AXConversationReaction, AXConversationReadReceipt, AXConversationRegistryComponentRef, AXConversationRegistryConfiguration, AXConversationRegistryItem, AXConversationRoomPreferences, AXConversationRoomPreferencesMap, AXConversationSendMessageCommand, AXConversationSendMessageOptions, AXConversationSendMessageUploadSource, AXConversationSettingsUpdate, AXConversationSort, AXConversationStickerPayload, AXConversationSystemPayload, AXConversationTab, AXConversationTextFormat, AXConversationTextPayload, AXConversationType, AXConversationTypingIndicator, AXConversationUpdateData, AXConversationUploadOptions, AXConversationUploaderFilePreview, AXConversationUploaderReference, AXConversationUploaderResult, AXConversationUser, AXConversationUserAvatarComponent, AXConversationUserPresence, AXConversationUserProfile, AXConversationUserProfileUpdate, AXConversationUserSearchFilters, AXConversationValidationResult, AXConversationVideoMediaItem, AXConversationVideoPayload, AXConversationVoicePayload };
6349
+ export type { AXConversation, AXConversationApiError, AXConversationApiLogEntry, AXConversationApiName, AXConversationAudioMediaItem, AXConversationAudioPayload, AXConversationAvatarComponents, AXConversationAvatarDisplay, AXConversationAvatarKind, AXConversationBlockReportReason, AXConversationCleanupPickerUploadsOptions, AXConversationComposerAction, AXConversationComposerActionComponent, AXConversationComposerActionContext, AXConversationComposerGenerationPhase, AXConversationComposerPickerUploadItem, AXConversationComposerPrimaryButtonMode, AXConversationComposerTab, AXConversationComposerTabFeature, AXConversationConfig, AXConversationConnectionStatus, AXConversationConversationAvatarComponent, AXConversationCreateData, AXConversationDeleteMessageCommand, AXConversationDropdownMenuItem, AXConversationEditMessageCommand, AXConversationError, AXConversationErrorCode, AXConversationErrorHandlerConfig, AXConversationErrorMessage, AXConversationErrorSeverity, AXConversationFeatures, AXConversationFileMediaItem, AXConversationFilePayload, AXConversationFilter, AXConversationFilters, AXConversationGroupedReaction, AXConversationImageMediaItem, AXConversationImagePayload, AXConversationInfoBarAction, AXConversationInfoBarActionComponent, AXConversationInfoBarActionContext, AXConversationInfoBarActiveBanner, AXConversationInfoBarActiveComponent, AXConversationInfoProfileField, AXConversationItemAction, AXConversationItemActionContext, AXConversationLink, AXConversationLinkPreview, AXConversationLoadMessagesResult, AXConversationLocationPayload, AXConversationMediaCategory, AXConversationMediaCategoryId, AXConversationMediaGalleryTile, AXConversationMediaItemFields, AXConversationMediaPageResult, AXConversationMention, AXConversationMessage, AXConversationMessageAction, AXConversationMessageActionContext, AXConversationMessageForwardData, AXConversationMessageInfoBarBannerComponent, AXConversationMessageListBackground, AXConversationMessageListBackgroundPreset, AXConversationMessageListEmptyComponent, AXConversationMessageListThemeBackground, AXConversationMessagePayload, AXConversationMessageRenderer, AXConversationMessageRendererCapabilities, AXConversationMessageRendererComponent, AXConversationMessageRendererContentState, AXConversationMessageRendererState, AXConversationMessageSearchFilters, AXConversationMessageStatus, AXConversationMessageType, AXConversationMetadata, AXConversationOptions, AXConversationPaginatedResult, AXConversationPagination, AXConversationPaginationState, AXConversationParticipant, AXConversationParticipantRole, AXConversationParticipantUpdate, AXConversationPinnedMessage, AXConversationPlaybackBannerInputs, AXConversationPollOption, AXConversationPollPayload, AXConversationPresenceStatus, AXConversationPresenceUpdate, AXConversationReaction, AXConversationReadReceipt, AXConversationRegistryComponentRef, AXConversationRegistryConfiguration, AXConversationRegistryItem, AXConversationRoomPreferences, AXConversationRoomPreferencesMap, AXConversationSendMessageCommand, AXConversationSendMessageOptions, AXConversationSendMessageUploadSource, AXConversationSettingsUpdate, AXConversationSort, AXConversationStickerPayload, AXConversationSystemPayload, AXConversationTab, AXConversationTextFormat, AXConversationTextPayload, AXConversationType, AXConversationTypingIndicator, AXConversationUpdateData, AXConversationUploadOptions, AXConversationUploaderFilePreview, AXConversationUploaderReference, AXConversationUploaderResult, AXConversationUser, AXConversationUserAvatarComponent, AXConversationUserPresence, AXConversationUserProfile, AXConversationUserProfileUpdate, AXConversationUserSearchFilters, AXConversationValidationResult, AXConversationVideoMediaItem, AXConversationVideoPayload, AXConversationVoicePayload };
@@ -853,6 +853,11 @@ declare class AXDataTableComponent extends AXBaseDataTable implements OnInit, Af
853
853
  * @ignore
854
854
  */
855
855
  protected normalColumnsList: Signal<any[]>;
856
+ /**
857
+ * True when a text column owns the tree expander. That column stays `width: auto`
858
+ * so leftover table space is used for nested indent instead of the empty spacer.
859
+ */
860
+ protected hasTreeFillColumn: Signal<boolean>;
856
861
  /**
857
862
  * @ignore
858
863
  */
@@ -1057,6 +1062,10 @@ declare class AXDataTableComponent extends AXBaseDataTable implements OnInit, Af
1057
1062
  */
1058
1063
  ngAfterViewInit(): void;
1059
1064
  private captureAutoFitIntentColumns;
1065
+ /**
1066
+ * Tree expand columns must keep `width: auto` so nested indent can use leftover table space.
1067
+ */
1068
+ private isTreeFillColumn;
1060
1069
  /**
1061
1070
  * Returns the display text for a cell. Used for the cell tooltip when the column has `hasTitle`.
1062
1071
  */