@radix-ng/primitives 1.0.0-beta.5 → 1.0.1

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.
Files changed (50) hide show
  1. package/composite/README.md +3 -0
  2. package/fesm2022/radix-ng-primitives-accordion.mjs +12 -36
  3. package/fesm2022/radix-ng-primitives-accordion.mjs.map +1 -1
  4. package/fesm2022/radix-ng-primitives-composite.mjs +515 -0
  5. package/fesm2022/radix-ng-primitives-composite.mjs.map +1 -0
  6. package/fesm2022/radix-ng-primitives-drawer.mjs +442 -2
  7. package/fesm2022/radix-ng-primitives-drawer.mjs.map +1 -1
  8. package/fesm2022/radix-ng-primitives-menu.mjs +38 -16
  9. package/fesm2022/radix-ng-primitives-menu.mjs.map +1 -1
  10. package/fesm2022/radix-ng-primitives-menubar.mjs +68 -36
  11. package/fesm2022/radix-ng-primitives-menubar.mjs.map +1 -1
  12. package/fesm2022/radix-ng-primitives-navigation-menu.mjs +281 -88
  13. package/fesm2022/radix-ng-primitives-navigation-menu.mjs.map +1 -1
  14. package/fesm2022/radix-ng-primitives-popover.mjs +40 -15
  15. package/fesm2022/radix-ng-primitives-popover.mjs.map +1 -1
  16. package/fesm2022/radix-ng-primitives-popper.mjs +73 -65
  17. package/fesm2022/radix-ng-primitives-popper.mjs.map +1 -1
  18. package/fesm2022/radix-ng-primitives-radio.mjs +63 -27
  19. package/fesm2022/radix-ng-primitives-radio.mjs.map +1 -1
  20. package/fesm2022/radix-ng-primitives-roving-focus.mjs +40 -8
  21. package/fesm2022/radix-ng-primitives-roving-focus.mjs.map +1 -1
  22. package/fesm2022/radix-ng-primitives-scroll-area.mjs +56 -25
  23. package/fesm2022/radix-ng-primitives-scroll-area.mjs.map +1 -1
  24. package/fesm2022/radix-ng-primitives-select.mjs +3 -0
  25. package/fesm2022/radix-ng-primitives-select.mjs.map +1 -1
  26. package/fesm2022/radix-ng-primitives-tabs.mjs +50 -21
  27. package/fesm2022/radix-ng-primitives-tabs.mjs.map +1 -1
  28. package/fesm2022/radix-ng-primitives-toggle-group.mjs +66 -21
  29. package/fesm2022/radix-ng-primitives-toggle-group.mjs.map +1 -1
  30. package/fesm2022/radix-ng-primitives-toggle.mjs +29 -11
  31. package/fesm2022/radix-ng-primitives-toggle.mjs.map +1 -1
  32. package/fesm2022/radix-ng-primitives-toolbar.mjs +50 -24
  33. package/fesm2022/radix-ng-primitives-toolbar.mjs.map +1 -1
  34. package/navigation-menu/README.md +5 -2
  35. package/package.json +5 -1
  36. package/types/radix-ng-primitives-accordion.d.ts +9 -13
  37. package/types/radix-ng-primitives-composite.d.ts +152 -0
  38. package/types/radix-ng-primitives-drawer.d.ts +40 -2
  39. package/types/radix-ng-primitives-menu.d.ts +5 -3
  40. package/types/radix-ng-primitives-menubar.d.ts +10 -5
  41. package/types/radix-ng-primitives-navigation-menu.d.ts +65 -33
  42. package/types/radix-ng-primitives-popover.d.ts +9 -5
  43. package/types/radix-ng-primitives-popper.d.ts +1 -0
  44. package/types/radix-ng-primitives-radio.d.ts +11 -9
  45. package/types/radix-ng-primitives-roving-focus.d.ts +15 -1
  46. package/types/radix-ng-primitives-scroll-area.d.ts +4 -1
  47. package/types/radix-ng-primitives-tabs.d.ts +8 -5
  48. package/types/radix-ng-primitives-toggle-group.d.ts +27 -16
  49. package/types/radix-ng-primitives-toggle.d.ts +5 -5
  50. package/types/radix-ng-primitives-toolbar.d.ts +22 -14
@@ -2,17 +2,17 @@ import * as _angular_core from '@angular/core';
2
2
  import { TemplateRef, Signal } from '@angular/core';
3
3
  import * as i1 from '@radix-ng/primitives/portal';
4
4
  import * as _radix_ng_primitives_core from '@radix-ng/primitives/core';
5
- import { RdxCancelableChangeEventDetails, RdxTransitionStatus, RdxFloatingRootContext, BooleanInput, NumberInput } from '@radix-ng/primitives/core';
5
+ import { RdxCancelableChangeEventDetails, RdxTransitionStatus, RdxFloatingRootContext, NumberInput } from '@radix-ng/primitives/core';
6
6
  import * as i1$1 from '@radix-ng/primitives/popper';
7
7
  import { RdxPopperContentWrapper } from '@radix-ng/primitives/popper';
8
8
  import * as _radix_ng_primitives_navigation_menu from '@radix-ng/primitives/navigation-menu';
9
- import * as i1$2 from '@radix-ng/primitives/roving-focus';
9
+ import * as i1$2 from '@radix-ng/primitives/composite';
10
10
  import { RdxOutsidePressDomEvent } from '@radix-ng/primitives/dismissable-layer';
11
11
 
12
12
  /**
13
13
  * Structural directive that teleports the navigation menu popup into a container (default
14
14
  * `document.body`) while the menu is open, and keeps it mounted until any CSS exit `@keyframes`
15
- * finishes.
15
+ * finishes. Set `[keepMounted]="true"` to keep the portal mounted while closed.
16
16
  *
17
17
  * Apply it with the `*` microsyntax on the positioner —
18
18
  * `<div *rdxNavigationMenuPortal rdxNavigationMenuPositioner>` — or as an explicit
@@ -20,8 +20,14 @@ import { RdxOutsidePressDomEvent } from '@radix-ng/primitives/dismissable-layer'
20
20
  * `[container]`.
21
21
  */
22
22
  declare class RdxNavigationMenuPortal {
23
+ private readonly rootContext;
24
+ /**
25
+ * Keep the portal mounted while the menu is closed.
26
+ */
27
+ readonly keepMounted: _angular_core.InputSignalWithTransform<boolean, unknown>;
28
+ readonly present: _angular_core.Signal<boolean>;
23
29
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdxNavigationMenuPortal, never>;
24
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxNavigationMenuPortal, "ng-template[rdxNavigationMenuPortal]", ["rdxNavigationMenuPortal"], {}, {}, never, never, true, [{ directive: typeof i1.RdxPortalPresence; inputs: { "container": "container"; }; outputs: {}; }]>;
30
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxNavigationMenuPortal, "ng-template[rdxNavigationMenuPortal]", ["rdxNavigationMenuPortal"], { "keepMounted": { "alias": "keepMounted"; "required": false; "isSignal": true; }; }, {}, never, never, true, [{ directive: typeof i1.RdxPortalPresence; inputs: { "container": "container"; }; outputs: {}; }]>;
25
31
  }
26
32
  /**
27
33
  * Dev-mode guard: `rdxNavigationMenuPortal` used to be an attribute directive on a `<div>`. It is now
@@ -36,7 +42,7 @@ declare class RdxNavigationMenuPortalMisuseGuard {
36
42
 
37
43
  type NavigationMenuOrientation = 'horizontal' | 'vertical';
38
44
  type NavigationMenuDirection = 'ltr' | 'rtl';
39
- type RdxNavigationMenuOpenChangeReason = 'trigger-hover' | 'trigger-focus' | 'trigger-press' | 'list-navigation' | 'outside-press' | 'focus-out' | 'escape-key' | 'link-select' | 'list-leave' | 'none';
45
+ type RdxNavigationMenuOpenChangeReason = 'trigger-hover' | 'trigger-press' | 'list-navigation' | 'outside-press' | 'focus-out' | 'escape-key' | 'link-select' | 'list-leave' | 'none';
40
46
  type RdxNavigationMenuOpenChangeEventDetails = RdxCancelableChangeEventDetails<RdxNavigationMenuOpenChangeReason>;
41
47
  interface RdxNavigationMenuOpenChange {
42
48
  value: string | null;
@@ -62,7 +68,6 @@ interface RdxNavigationMenuRootContext {
62
68
  readonly baseId: string;
63
69
  readonly orientation: Signal<NavigationMenuOrientation>;
64
70
  readonly dir: Signal<NavigationMenuDirection>;
65
- readonly loop: Signal<boolean>;
66
71
  /** Value of the currently open item, or `null` when closed. */
67
72
  readonly value: Signal<string | null>;
68
73
  /** Value of the previously open item (used for slide-direction morphing). */
@@ -74,7 +79,14 @@ interface RdxNavigationMenuRootContext {
74
79
  /** The active trigger element the popup is anchored to. */
75
80
  readonly trigger: Signal<HTMLElement | undefined>;
76
81
  readonly triggers: Signal<HTMLElement[]>;
82
+ readonly list: Signal<HTMLElement | undefined>;
83
+ readonly contents: Signal<Map<string, RdxNavigationMenuContentEntry>>;
77
84
  readonly activeContent: Signal<RdxNavigationMenuContentEntry | undefined>;
85
+ readonly popup: Signal<HTMLElement | undefined>;
86
+ readonly size: Signal<{
87
+ width: number;
88
+ height: number;
89
+ } | null>;
78
90
  contentId(value: string): string;
79
91
  triggerId(value: string): string;
80
92
  setValue(value: string | null, reason?: RdxNavigationMenuOpenChangeReason, event?: Event): void;
@@ -85,8 +97,14 @@ interface RdxNavigationMenuRootContext {
85
97
  closeOnHover(event?: PointerEvent): void;
86
98
  cancelHoverOpen(): void;
87
99
  cancelHoverClose(): void;
100
+ setSize(size: {
101
+ width: number;
102
+ height: number;
103
+ } | null): void;
88
104
  registerTrigger(value: string, trigger: HTMLElement): () => void;
105
+ registerList(list: HTMLElement): () => void;
89
106
  registerContent(entry: RdxNavigationMenuContentEntry): () => void;
107
+ registerPopup(element: HTMLElement): () => void;
90
108
  registerTransitionElement(element: HTMLElement): () => void;
91
109
  registerViewport(onTriggerChange: (previous: HTMLElement, next: HTMLElement) => void): () => void;
92
110
  }
@@ -127,10 +145,6 @@ declare class RdxNavigationMenuRoot {
127
145
  */
128
146
  readonly dirInput: _angular_core.InputSignal<NavigationMenuDirection | undefined>;
129
147
  readonly dir: _angular_core.Signal<_radix_ng_primitives_core.Direction>;
130
- /**
131
- * Whether keyboard navigation loops from the last item back to the first and vice versa.
132
- */
133
- readonly loop: _angular_core.InputSignalWithTransform<boolean, BooleanInput>;
134
148
  /**
135
149
  * How long to wait before opening the menu on hover, in milliseconds.
136
150
  */
@@ -164,7 +178,13 @@ declare class RdxNavigationMenuRoot {
164
178
  readonly present: _angular_core.Signal<boolean>;
165
179
  readonly trigger: _angular_core.WritableSignal<HTMLElement | undefined>;
166
180
  readonly triggers: _angular_core.WritableSignal<HTMLElement[]>;
181
+ readonly list: _angular_core.WritableSignal<HTMLElement | undefined>;
167
182
  readonly contents: _angular_core.WritableSignal<Map<string, RdxNavigationMenuContentEntry>>;
183
+ readonly popup: _angular_core.WritableSignal<HTMLElement | undefined>;
184
+ readonly size: _angular_core.WritableSignal<{
185
+ width: number;
186
+ height: number;
187
+ } | null>;
168
188
  readonly activeContent: _angular_core.Signal<RdxNavigationMenuContentEntry | undefined>;
169
189
  private readonly registeredTriggers;
170
190
  private readonly viewportTriggerChange;
@@ -180,7 +200,13 @@ declare class RdxNavigationMenuRoot {
180
200
  cancelHoverOpen(): void;
181
201
  cancelHoverClose(): void;
182
202
  registerTrigger(value: string, trigger: HTMLElement): () => void;
203
+ registerList(list: HTMLElement): () => void;
183
204
  registerContent(entry: RdxNavigationMenuContentEntry): () => void;
205
+ registerPopup(element: HTMLElement): () => void;
206
+ setSize(size: {
207
+ width: number;
208
+ height: number;
209
+ } | null): void;
184
210
  registerTransitionElement(element: HTMLElement): () => void;
185
211
  registerViewport(onTriggerChange: (previous: HTMLElement, next: HTMLElement) => void): () => boolean;
186
212
  private createOpenChangeEvent;
@@ -190,19 +216,20 @@ declare class RdxNavigationMenuRoot {
190
216
  private clearCloseTimer;
191
217
  private isInsideOpenChild;
192
218
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdxNavigationMenuRoot, never>;
193
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxNavigationMenuRoot, "[rdxNavigationMenuRoot]", ["rdxNavigationMenuRoot"], { "value": { "alias": "value"; "required": false; "isSignal": true; }; "defaultValue": { "alias": "defaultValue"; "required": false; "isSignal": true; }; "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; "dirInput": { "alias": "dir"; "required": false; "isSignal": true; }; "loop": { "alias": "loop"; "required": false; "isSignal": true; }; "delay": { "alias": "delay"; "required": false; "isSignal": true; }; "closeDelay": { "alias": "closeDelay"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "onValueChange": "onValueChange"; "onOpenChange": "onOpenChange"; "onOpenChangeComplete": "onOpenChangeComplete"; }, never, never, true, [{ directive: typeof i1$1.RdxPopper; inputs: {}; outputs: {}; }, { directive: typeof _radix_ng_primitives_core.RdxFloatingNodeRegistration; inputs: {}; outputs: {}; }]>;
219
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxNavigationMenuRoot, "[rdxNavigationMenuRoot]", ["rdxNavigationMenuRoot"], { "value": { "alias": "value"; "required": false; "isSignal": true; }; "defaultValue": { "alias": "defaultValue"; "required": false; "isSignal": true; }; "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; "dirInput": { "alias": "dir"; "required": false; "isSignal": true; }; "delay": { "alias": "delay"; "required": false; "isSignal": true; }; "closeDelay": { "alias": "closeDelay"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "onValueChange": "onValueChange"; "onOpenChange": "onOpenChange"; "onOpenChangeComplete": "onOpenChangeComplete"; }, never, never, true, [{ directive: typeof i1$1.RdxPopper; inputs: {}; outputs: {}; }, { directive: typeof _radix_ng_primitives_core.RdxFloatingNodeRegistration; inputs: {}; outputs: {}; }]>;
194
220
  }
195
221
 
196
222
  /**
197
- * Contains the navigation menu items. Renders as a menubar with roving keyboard focus.
223
+ * Contains the navigation menu items and coordinates composite keyboard focus between triggers.
198
224
  */
199
225
  declare class RdxNavigationMenuList {
200
226
  protected readonly rootContext: _radix_ng_primitives_navigation_menu.RdxNavigationMenuRootContext;
201
- private readonly rovingFocusGroup;
227
+ private readonly compositeRoot;
202
228
  constructor();
229
+ protected onKeydown(event: KeyboardEvent): void;
203
230
  protected onPointerLeave(event: PointerEvent): void;
204
231
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdxNavigationMenuList, never>;
205
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxNavigationMenuList, "[rdxNavigationMenuList]", never, {}, {}, never, never, true, [{ directive: typeof i1$2.RdxRovingFocusGroupDirective; inputs: {}; outputs: {}; }]>;
232
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxNavigationMenuList, "[rdxNavigationMenuList]", never, {}, {}, never, never, true, [{ directive: typeof i1$2.RdxCompositeRoot; inputs: {}; outputs: {}; }]>;
206
233
  }
207
234
 
208
235
  /**
@@ -229,8 +256,7 @@ declare class RdxNavigationMenuItem {
229
256
  */
230
257
  declare class RdxNavigationMenuTrigger {
231
258
  protected readonly item: RdxNavigationMenuItem;
232
- private readonly rootContext;
233
- private readonly rovingFocusItem;
259
+ protected readonly rootContext: _radix_ng_primitives_navigation_menu.RdxNavigationMenuRootContext;
234
260
  private readonly elementRef;
235
261
  private readonly document;
236
262
  /**
@@ -246,18 +272,12 @@ declare class RdxNavigationMenuTrigger {
246
272
  protected onClick(event: MouseEvent): void;
247
273
  protected onPointerEnter(event: PointerEvent): void;
248
274
  protected onPointerLeave(event: PointerEvent): void;
249
- /**
250
- * Open-follows-focus: while the menu is already open, moving keyboard focus (arrow keys via
251
- * roving) to another trigger switches the shared popup to that item — matching Base UI, so the
252
- * open menu visibly responds to arrow-key navigation. Focus never *opens* a closed menu.
253
- */
254
- protected onFocus(): void;
255
275
  protected onKeydown(event: KeyboardEvent): void;
256
276
  /** The key that moves focus from the trigger into the open content, based on orientation/dir. */
257
277
  private entryKey;
258
278
  private focusContent;
259
279
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdxNavigationMenuTrigger, never>;
260
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxNavigationMenuTrigger, "button[rdxNavigationMenuTrigger]", never, { "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "openOnHover": { "alias": "openOnHover"; "required": false; "isSignal": true; }; }, {}, never, never, true, [{ directive: typeof i1$2.RdxRovingFocusItemDirective; inputs: {}; outputs: {}; }]>;
280
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxNavigationMenuTrigger, "button[rdxNavigationMenuTrigger]", never, { "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "openOnHover": { "alias": "openOnHover"; "required": false; "isSignal": true; }; }, {}, never, never, true, [{ directive: typeof i1$2.RdxCompositeItem; inputs: {}; outputs: {}; }]>;
261
281
  }
262
282
 
263
283
  /**
@@ -297,10 +317,10 @@ declare class RdxNavigationMenuContent {
297
317
  }
298
318
 
299
319
  /**
300
- * A navigation link. Closes the menu on selection unless prevented.
320
+ * A navigation link. Can close the menu on selection when `closeOnClick` is enabled.
301
321
  *
302
- * Used both as a top-level menubar item and inside content. It is a plain tabbable anchor (not part
303
- * of the menubar's arrow-key roving), matching Base UI.
322
+ * Used both as a top-level navigation item and inside content. Top-level links join the list's
323
+ * composite collection, matching Base UI's CompositeItem-backed NavigationMenu.Link.
304
324
  */
305
325
  declare class RdxNavigationMenuLink {
306
326
  private readonly rootContext;
@@ -320,7 +340,7 @@ declare class RdxNavigationMenuLink {
320
340
  protected onClick(event: Event): void;
321
341
  protected onKeydown(event: KeyboardEvent): void;
322
342
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdxNavigationMenuLink, never>;
323
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxNavigationMenuLink, "[rdxNavigationMenuLink]", never, { "active": { "alias": "active"; "required": false; "isSignal": true; }; "closeOnClick": { "alias": "closeOnClick"; "required": false; "isSignal": true; }; }, { "onSelect": "onSelect"; }, never, never, true, never>;
343
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxNavigationMenuLink, "[rdxNavigationMenuLink]", never, { "active": { "alias": "active"; "required": false; "isSignal": true; }; "closeOnClick": { "alias": "closeOnClick"; "required": false; "isSignal": true; }; }, { "onSelect": "onSelect"; }, never, never, true, [{ directive: typeof i1$2.RdxCompositeItem; inputs: {}; outputs: {}; }]>;
324
344
  }
325
345
 
326
346
  /**
@@ -328,6 +348,7 @@ declare class RdxNavigationMenuLink {
328
348
  */
329
349
  declare class RdxNavigationMenuBackdrop {
330
350
  protected readonly rootContext: _radix_ng_primitives_navigation_menu.RdxNavigationMenuRootContext;
351
+ constructor();
331
352
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdxNavigationMenuBackdrop, never>;
332
353
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxNavigationMenuBackdrop, "[rdxNavigationMenuBackdrop]", never, {}, {}, never, never, true, never>;
333
354
  }
@@ -362,8 +383,7 @@ declare class RdxNavigationMenuPopup {
362
383
  private readonly elementRef;
363
384
  protected readonly side: _angular_core.Signal<"top" | "right" | "bottom" | "left" | undefined>;
364
385
  protected readonly align: _angular_core.Signal<"start" | "center" | "end" | undefined>;
365
- /** Names the menu after the active trigger so the `role="menu"` element has an accessible name. */
366
- protected readonly labelledBy: _angular_core.Signal<string | undefined>;
386
+ protected readonly id: _angular_core.Signal<string>;
367
387
  /**
368
388
  * Event handler called when the escape key is down. Can be prevented.
369
389
  */
@@ -379,11 +399,15 @@ declare class RdxNavigationMenuPopup {
379
399
  constructor();
380
400
  protected onPointerLeave(event: PointerEvent): void;
381
401
  /**
382
- * Keyboard navigation inside the open panel: Down/Up move between the panel's focusable items in
383
- * DOM order, Home/End jump to the first/last, and Up from the first item returns focus to the
384
- * trigger. (Tab keeps working natively; Escape is handled by the dismissal capability.)
402
+ * Keyboard navigation inside the open panel mirrors Base UI's CompositeRoot-backed content:
403
+ * arrow keys move between panel focusables in DOM order, Home/End jump to the first/last, Up from
404
+ * the first item returns focus to the trigger, and Tab exits the portalled panel through the
405
+ * logical top-level navigation order. Escape is handled by the dismissal capability.
385
406
  */
386
407
  protected onKeydown(event: KeyboardEvent): void;
408
+ private handleTabKey;
409
+ private getNextTopLevelItem;
410
+ private getTopLevelItems;
387
411
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdxNavigationMenuPopup, never>;
388
412
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxNavigationMenuPopup, "[rdxNavigationMenuPopup]", never, {}, { "escapeKeyDown": "escapeKeyDown"; "pointerDownOutside": "pointerDownOutside"; "focusOutside": "focusOutside"; }, never, never, true, [{ directive: typeof i1$1.RdxPopperContent; inputs: {}; outputs: {}; }]>;
389
413
  }
@@ -422,13 +446,21 @@ declare class RdxNavigationMenuViewport {
422
446
  height: number;
423
447
  } | null>;
424
448
  private current;
449
+ private readonly rendered;
425
450
  private previousElement;
426
451
  private pendingDirection;
427
452
  private cleanupTimer;
428
453
  private readonly resizeObserver;
429
454
  private readonly activeContent;
455
+ private readonly contents;
430
456
  constructor();
457
+ private sync;
431
458
  private render;
459
+ private createRendered;
460
+ private deactivateCurrent;
461
+ private markCurrent;
462
+ private markInactive;
463
+ private destroyRendered;
432
464
  private startLeave;
433
465
  private removePrevious;
434
466
  private clearCleanupTimer;
@@ -437,7 +469,7 @@ declare class RdxNavigationMenuViewport {
437
469
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxNavigationMenuViewport, "[rdxNavigationMenuViewport]", never, { "forceMount": { "alias": "forceMount"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
438
470
  }
439
471
 
440
- declare const navigationMenuImports: (typeof RdxNavigationMenuPortal)[];
472
+ declare const navigationMenuImports: (typeof RdxNavigationMenuPortalMisuseGuard)[];
441
473
  declare class RdxNavigationMenuModule {
442
474
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdxNavigationMenuModule, never>;
443
475
  static ɵmod: _angular_core.ɵɵNgModuleDeclaration<RdxNavigationMenuModule, never, [typeof RdxNavigationMenuRoot, typeof RdxNavigationMenuList, typeof RdxNavigationMenuItem, typeof RdxNavigationMenuTrigger, typeof RdxNavigationMenuIcon, typeof RdxNavigationMenuContent, typeof RdxNavigationMenuLink, typeof RdxNavigationMenuPortal, typeof RdxNavigationMenuPortalMisuseGuard, typeof RdxNavigationMenuBackdrop, typeof RdxNavigationMenuPositioner, typeof RdxNavigationMenuPopup, typeof RdxNavigationMenuArrow, typeof RdxNavigationMenuViewport], [typeof RdxNavigationMenuRoot, typeof RdxNavigationMenuList, typeof RdxNavigationMenuItem, typeof RdxNavigationMenuTrigger, typeof RdxNavigationMenuIcon, typeof RdxNavigationMenuContent, typeof RdxNavigationMenuLink, typeof RdxNavigationMenuPortal, typeof RdxNavigationMenuPortalMisuseGuard, typeof RdxNavigationMenuBackdrop, typeof RdxNavigationMenuPositioner, typeof RdxNavigationMenuPopup, typeof RdxNavigationMenuArrow, typeof RdxNavigationMenuViewport]>;
@@ -311,7 +311,7 @@ declare class RdxPopoverPopup {
311
311
  readonly closeAutoFocus: _angular_core.OutputRef<Event>;
312
312
  constructor();
313
313
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdxPopoverPopup, never>;
314
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxPopoverPopup, "[rdxPopoverPopup]", never, {}, { "escapeKeyDown": "escapeKeyDown"; "pointerDownOutside": "pointerDownOutside"; "focusOutside": "focusOutside"; "interactOutside": "interactOutside"; "openAutoFocus": "openAutoFocus"; "closeAutoFocus": "closeAutoFocus"; }, never, never, true, [{ directive: typeof i1$1.RdxPopperContent; inputs: {}; outputs: {}; }, { directive: typeof _radix_ng_primitives_core.RdxFloatingNodeRegistration; inputs: {}; outputs: {}; }, { directive: typeof _radix_ng_primitives_floating_focus_manager.RdxFloatingFocusManager; inputs: {}; outputs: {}; }]>;
314
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxPopoverPopup, "[rdxPopoverPopup]", never, {}, { "escapeKeyDown": "escapeKeyDown"; "pointerDownOutside": "pointerDownOutside"; "focusOutside": "focusOutside"; "interactOutside": "interactOutside"; "openAutoFocus": "openAutoFocus"; "closeAutoFocus": "closeAutoFocus"; }, never, never, true, [{ directive: typeof i1$1.RdxPopperContent; inputs: {}; outputs: {}; }, { directive: typeof _radix_ng_primitives_core.RdxFloatingNodeRegistration; inputs: {}; outputs: {}; }, { directive: typeof _radix_ng_primitives_floating_focus_manager.RdxFloatingFocusManager; inputs: { "initialFocus": "initialFocus"; "returnFocus": "finalFocus"; }; outputs: {}; }]>;
315
315
  }
316
316
 
317
317
  /**
@@ -332,10 +332,12 @@ declare class RdxPopoverArrow {
332
332
  */
333
333
  declare class RdxPopoverTitle {
334
334
  private readonly rootContext;
335
- readonly id: string;
335
+ private readonly generatedId;
336
+ readonly idInput: _angular_core.InputSignal<string | undefined>;
337
+ readonly id: _angular_core.Signal<string>;
336
338
  constructor();
337
339
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdxPopoverTitle, never>;
338
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxPopoverTitle, "[rdxPopoverTitle]", never, {}, {}, never, never, true, never>;
340
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxPopoverTitle, "[rdxPopoverTitle]", never, { "idInput": { "alias": "id"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
339
341
  }
340
342
 
341
343
  /**
@@ -343,10 +345,12 @@ declare class RdxPopoverTitle {
343
345
  */
344
346
  declare class RdxPopoverDescription {
345
347
  private readonly rootContext;
346
- readonly id: string;
348
+ private readonly generatedId;
349
+ readonly idInput: _angular_core.InputSignal<string | undefined>;
350
+ readonly id: _angular_core.Signal<string>;
347
351
  constructor();
348
352
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdxPopoverDescription, never>;
349
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxPopoverDescription, "[rdxPopoverDescription]", never, {}, {}, never, never, true, never>;
353
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxPopoverDescription, "[rdxPopoverDescription]", never, { "idInput": { "alias": "id"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
350
354
  }
351
355
 
352
356
  /**
@@ -169,6 +169,7 @@ declare class RdxPopperContentWrapper {
169
169
  private readonly detectOverflowOptions;
170
170
  private readonly resolvedAnchor;
171
171
  private readonly position;
172
+ private positionParams;
172
173
  /**
173
174
  * The last successfully computed position, retained while a new one is being computed.
174
175
  *
@@ -2,10 +2,10 @@ import * as _angular_core from '@angular/core';
2
2
  import { ModelSignal, InputSignal, InputSignalWithTransform, Signal, InjectionToken } from '@angular/core';
3
3
  import { ControlValueAccessor } from '@angular/forms';
4
4
  import { BooleanInput, RdxFormValueControl, RdxCancelableChangeEventDetails } from '@radix-ng/primitives/core';
5
- import * as i1 from '@radix-ng/primitives/roving-focus';
6
- import { Orientation } from '@radix-ng/primitives/roving-focus';
5
+ import * as i1 from '@radix-ng/primitives/composite';
7
6
  import * as i1$1 from '@radix-ng/primitives/visually-hidden';
8
7
 
8
+ type RdxRadioValueChangeReason = 'none';
9
9
  interface RadioGroupProps {
10
10
  value: ModelSignal<string | null>;
11
11
  defaultValue: InputSignal<string | undefined>;
@@ -14,23 +14,23 @@ interface RadioGroupProps {
14
14
  disabled: InputSignalWithTransform<boolean, BooleanInput>;
15
15
  readonly: InputSignalWithTransform<boolean, BooleanInput>;
16
16
  required: InputSignalWithTransform<boolean, BooleanInput>;
17
- orientation: InputSignal<Orientation | undefined>;
18
17
  disabledState: Signal<boolean>;
19
18
  }
20
19
  interface RadioGroupDirective extends RadioGroupProps {
21
- select(value: string | null, event?: Event, reason?: string): void;
20
+ select(value: string | null, event?: Event, reason?: RdxRadioValueChangeReason): void;
22
21
  onTouched(): void;
23
22
  setArrowNavigation(value: boolean): void;
24
23
  isArrowNavigation(): boolean;
25
24
  }
26
25
 
27
- type RdxRadioValueChangeReason = 'trigger-press' | 'keyboard' | 'focus' | 'none';
28
26
  type RdxRadioValueChangeEventDetails = RdxCancelableChangeEventDetails<RdxRadioValueChangeReason>;
29
27
  interface RdxRadioValueChangeEvent {
30
28
  value: string;
31
29
  eventDetails: RdxRadioValueChangeEventDetails;
32
30
  }
33
31
  declare class RdxRadioGroupDirective implements RadioGroupProps, RadioGroupDirective, ControlValueAccessor, RdxFormValueControl<string | null> {
32
+ private readonly elementRef;
33
+ private readonly compositeRoot;
34
34
  readonly value: _angular_core.ModelSignal<string | null>;
35
35
  readonly defaultValue: _angular_core.InputSignal<string | undefined>;
36
36
  readonly name: _angular_core.InputSignal<string | undefined>;
@@ -38,7 +38,6 @@ declare class RdxRadioGroupDirective implements RadioGroupProps, RadioGroupDirec
38
38
  readonly disabled: _angular_core.InputSignalWithTransform<boolean, BooleanInput>;
39
39
  readonly readonly: _angular_core.InputSignalWithTransform<boolean, BooleanInput>;
40
40
  readonly required: _angular_core.InputSignalWithTransform<boolean, BooleanInput>;
41
- readonly orientation: _angular_core.InputSignal<Orientation | undefined>;
42
41
  /**
43
42
  * Event handler called when the value changes.
44
43
  */
@@ -46,6 +45,9 @@ declare class RdxRadioGroupDirective implements RadioGroupProps, RadioGroupDirec
46
45
  private readonly disable;
47
46
  readonly disabledState: _angular_core.Signal<boolean>;
48
47
  private readonly arrowNavigation;
48
+ private readonly itemMetadata;
49
+ private readonly disabledIndices;
50
+ private readonly activeIndex;
49
51
  /**
50
52
  * The callback function to call when the value of the radio group changes.
51
53
  */
@@ -86,7 +88,7 @@ declare class RdxRadioGroupDirective implements RadioGroupProps, RadioGroupDirec
86
88
  isArrowNavigation(): boolean;
87
89
  protected onKeydown(): void;
88
90
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdxRadioGroupDirective, never>;
89
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxRadioGroupDirective, "[rdxRadioRoot]", ["rdxRadioRoot"], { "value": { "alias": "value"; "required": false; "isSignal": true; }; "defaultValue": { "alias": "defaultValue"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "form": { "alias": "form"; "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; }; "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "onValueChange": "onValueChange"; }, never, never, true, [{ directive: typeof i1.RdxRovingFocusGroupDirective; inputs: { "dir": "dir"; "orientation": "orientation"; "loop": "loop"; }; outputs: {}; }]>;
91
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxRadioGroupDirective, "[rdxRadioRoot]", ["rdxRadioRoot"], { "value": { "alias": "value"; "required": false; "isSignal": true; }; "defaultValue": { "alias": "defaultValue"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "form": { "alias": "form"; "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; }; }, { "value": "valueChange"; "onValueChange": "onValueChange"; }, never, never, true, [{ directive: typeof i1.RdxCompositeRoot; inputs: {}; outputs: {}; }]>;
90
92
  }
91
93
 
92
94
  declare const RdxRadioItemToken: InjectionToken<RdxRadioItemDirective>;
@@ -95,7 +97,7 @@ declare class RdxRadioItemDirective {
95
97
  private readonly radioGroup;
96
98
  private readonly elementRef;
97
99
  private readonly renderer;
98
- private readonly rovingFocusItem;
100
+ private readonly compositeItem;
99
101
  private readonly destroyRef;
100
102
  private readonly inputElement;
101
103
  private previousCheckedState;
@@ -126,7 +128,7 @@ declare class RdxRadioItemDirective {
126
128
  private setOptionalAttribute;
127
129
  private setBooleanAttribute;
128
130
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdxRadioItemDirective, never>;
129
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxRadioItemDirective, "[rdxRadioItem]", ["rdxRadioItem"], { "value": { "alias": "value"; "required": true; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "nativeButton": { "alias": "nativeButton"; "required": false; "isSignal": true; }; }, {}, never, never, true, [{ directive: typeof i1.RdxRovingFocusItemDirective; inputs: { "tabStopId": "id"; "focusable": "focusable"; "active": "active"; "allowShiftKey": "allowShiftKey"; }; outputs: {}; }]>;
131
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxRadioItemDirective, "[rdxRadioItem]", ["rdxRadioItem"], { "value": { "alias": "value"; "required": true; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "nativeButton": { "alias": "nativeButton"; "required": false; "isSignal": true; }; }, {}, never, never, true, [{ directive: typeof i1.RdxCompositeItem; inputs: {}; outputs: {}; }]>;
130
132
  }
131
133
 
132
134
  declare class RdxRadioIndicatorDirective {
@@ -8,6 +8,7 @@ type Direction = 'ltr' | 'rtl';
8
8
  declare function focusFirst(candidates: HTMLElement[], preventScroll?: boolean, rootNode?: Document | ShadowRoot): void;
9
9
 
10
10
  declare const rootContext: () => {
11
+ enabled: _angular_core.Signal<boolean>;
11
12
  loop: _angular_core.Signal<boolean>;
12
13
  dir: _angular_core.Signal<_radix_ng_primitives_core.Direction>;
13
14
  orientation: _angular_core.Signal<Orientation>;
@@ -20,6 +21,7 @@ declare const rootContext: () => {
20
21
  };
21
22
  type RovingFocusGroupContext = ReturnType<typeof rootContext>;
22
23
  declare const injectRovingFocusGroupContext: _radix_ng_primitives_core.InjectContext<{
24
+ enabled: _angular_core.Signal<boolean>;
23
25
  loop: _angular_core.Signal<boolean>;
24
26
  dir: _angular_core.Signal<_radix_ng_primitives_core.Direction>;
25
27
  orientation: _angular_core.Signal<Orientation>;
@@ -31,6 +33,7 @@ declare const injectRovingFocusGroupContext: _radix_ng_primitives_core.InjectCon
31
33
  unregisterItem: (item: HTMLElement, tabStopId: string) => void;
32
34
  }>;
33
35
  declare const provideRovingFocusGroupContext: (useFactory: () => {
36
+ enabled: _angular_core.Signal<boolean>;
34
37
  loop: _angular_core.Signal<boolean>;
35
38
  dir: _angular_core.Signal<_radix_ng_primitives_core.Direction>;
36
39
  orientation: _angular_core.Signal<Orientation>;
@@ -61,6 +64,11 @@ declare class RdxRovingFocusGroupDirective {
61
64
  * Whether keyboard navigation should loop around
62
65
  */
63
66
  readonly loopInput: _angular_core.InputSignalWithTransform<boolean, BooleanInput>;
67
+ /**
68
+ * Whether roving focus behavior is active for the group.
69
+ * @group Props
70
+ */
71
+ readonly enabledInput: _angular_core.InputSignalWithTransform<boolean, BooleanInput>;
64
72
  /**
65
73
  * When `true`, will prevent scrolling to the focus item when focused.
66
74
  * @group Props
@@ -89,6 +97,8 @@ declare class RdxRovingFocusGroupDirective {
89
97
  readonly dir: _angular_core.Signal<_radix_ng_primitives_core.Direction>;
90
98
  private readonly _loop;
91
99
  readonly loop: _angular_core.Signal<boolean>;
100
+ private readonly _enabled;
101
+ readonly enabled: _angular_core.Signal<boolean>;
92
102
  readonly focusableItems: _angular_core.WritableSignal<HTMLElement[]>;
93
103
  protected readonly isClickFocus: _angular_core.WritableSignal<boolean>;
94
104
  readonly isTabbingBackOut: _angular_core.WritableSignal<boolean>;
@@ -98,6 +108,7 @@ declare class RdxRovingFocusGroupDirective {
98
108
  setOrientation(value: Orientation): void;
99
109
  setDir(value: Direction): void;
100
110
  setLoop(value: boolean): void;
111
+ setEnabled(value: boolean): void;
101
112
  /** @ignore */
102
113
  registerItem(item: HTMLElement, tabStopId: string): void;
103
114
  /** @ignore */
@@ -107,7 +118,7 @@ declare class RdxRovingFocusGroupDirective {
107
118
  /** @ignore */
108
119
  handleFocus(event: Event): void;
109
120
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdxRovingFocusGroupDirective, never>;
110
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxRovingFocusGroupDirective, "[rdxRovingFocusGroup]", never, { "orientationInput": { "alias": "orientation"; "required": false; "isSignal": true; }; "dirInput": { "alias": "dir"; "required": false; "isSignal": true; }; "loopInput": { "alias": "loop"; "required": false; "isSignal": true; }; "preventScrollOnEntryFocus": { "alias": "preventScrollOnEntryFocus"; "required": false; "isSignal": true; }; "defaultCurrentTabStopId": { "alias": "defaultCurrentTabStopId"; "required": false; "isSignal": true; }; "currentTabStopId": { "alias": "currentTabStopId"; "required": false; "isSignal": true; }; }, { "currentTabStopId": "currentTabStopIdChange"; "entryFocus": "entryFocus"; }, never, never, true, never>;
121
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxRovingFocusGroupDirective, "[rdxRovingFocusGroup]", never, { "orientationInput": { "alias": "orientation"; "required": false; "isSignal": true; }; "dirInput": { "alias": "dir"; "required": false; "isSignal": true; }; "loopInput": { "alias": "loop"; "required": false; "isSignal": true; }; "enabledInput": { "alias": "enabled"; "required": false; "isSignal": true; }; "preventScrollOnEntryFocus": { "alias": "preventScrollOnEntryFocus"; "required": false; "isSignal": true; }; "defaultCurrentTabStopId": { "alias": "defaultCurrentTabStopId"; "required": false; "isSignal": true; }; "currentTabStopId": { "alias": "currentTabStopId"; "required": false; "isSignal": true; }; }, { "currentTabStopId": "currentTabStopIdChange"; "entryFocus": "entryFocus"; }, never, never, true, never>;
111
122
  }
112
123
 
113
124
  /**
@@ -121,6 +132,7 @@ declare class RdxRovingFocusItemDirective {
121
132
  * (e.g. a standalone Toggle), it degrades to a plain element and does not manage focus.
122
133
  */
123
134
  protected readonly rootContext: {
135
+ enabled: _angular_core.Signal<boolean>;
124
136
  loop: _angular_core.Signal<boolean>;
125
137
  dir: _angular_core.Signal<_radix_ng_primitives_core.Direction>;
126
138
  orientation: _angular_core.Signal<_radix_ng_primitives_roving_focus.Orientation>;
@@ -155,6 +167,7 @@ declare class RdxRovingFocusItemDirective {
155
167
  protected readonly isCurrentTabStop: _angular_core.Signal<boolean>;
156
168
  protected readonly focusable: _angular_core.WritableSignal<boolean>;
157
169
  protected readonly active: _angular_core.WritableSignal<boolean>;
170
+ protected readonly enabled: _angular_core.WritableSignal<boolean>;
158
171
  private readonly tabStopId;
159
172
  /**
160
173
  * The roving tabindex. Without a group the item keeps its natural tab order (`null`); inside a
@@ -163,6 +176,7 @@ declare class RdxRovingFocusItemDirective {
163
176
  protected readonly tabindex: _angular_core.Signal<-1 | 0 | null>;
164
177
  constructor();
165
178
  setFocusable(value: boolean): void;
179
+ setEnabled(value: boolean): void;
166
180
  setActive(value: boolean): void;
167
181
  setTabStopId(value: string): void;
168
182
  /** @ignore */
@@ -42,6 +42,7 @@ interface ScrollAreaRootContext {
42
42
  yStart: number;
43
43
  yEnd: number;
44
44
  }>;
45
+ readonly disableStyleElements: Signal<boolean>;
45
46
  readonly hovering: Signal<boolean>;
46
47
  readonly scrollingX: Signal<boolean>;
47
48
  readonly scrollingY: Signal<boolean>;
@@ -90,6 +91,7 @@ declare class RdxScrollAreaRoot {
90
91
  * Accepts a single number for all edges or an object to configure them individually.
91
92
  */
92
93
  readonly overflowEdgeThreshold: _angular_core.InputSignal<OverflowEdgeThreshold>;
94
+ readonly disableStyleElements: _angular_core.InputSignalWithTransform<boolean, BooleanInput>;
93
95
  readonly normalizedThreshold: Signal<{
94
96
  xStart: number;
95
97
  xEnd: number;
@@ -135,7 +137,7 @@ declare class RdxScrollAreaRoot {
135
137
  onTouchModalityChange(event: PointerEvent): void;
136
138
  onPointerEnterOrMove(event: PointerEvent): void;
137
139
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdxScrollAreaRoot, never>;
138
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxScrollAreaRoot, "[rdxScrollAreaRoot]", ["rdxScrollAreaRoot"], { "dirInput": { "alias": "dir"; "required": false; "isSignal": true; }; "overflowEdgeThreshold": { "alias": "overflowEdgeThreshold"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
140
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxScrollAreaRoot, "[rdxScrollAreaRoot]", ["rdxScrollAreaRoot"], { "dirInput": { "alias": "dir"; "required": false; "isSignal": true; }; "overflowEdgeThreshold": { "alias": "overflowEdgeThreshold"; "required": false; "isSignal": true; }; "disableStyleElements": { "alias": "disableStyleElements"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
139
141
  }
140
142
 
141
143
  interface ScrollAreaViewportContext {
@@ -155,6 +157,7 @@ declare class RdxScrollAreaViewport {
155
157
  private readonly element;
156
158
  private readonly destroyRef;
157
159
  private readonly isBrowser;
160
+ private readonly cspNonce;
158
161
  private programmaticScroll;
159
162
  private lastMeasuredMetrics;
160
163
  private scrollEndTimer;
@@ -4,7 +4,7 @@ import * as i1 from '@radix-ng/primitives/presence';
4
4
  import * as _radix_ng_primitives_core from '@radix-ng/primitives/core';
5
5
  import { DataOrientation, RdxCancelableChangeEventDetails, BooleanInput } from '@radix-ng/primitives/core';
6
6
  import * as _radix_ng_primitives_tabs from '@radix-ng/primitives/tabs';
7
- import * as i1$1 from '@radix-ng/primitives/roving-focus';
7
+ import * as i1$1 from '@radix-ng/primitives/composite';
8
8
 
9
9
  /**
10
10
  * Structural directive that mounts the tab panel contents only while the panel is active,
@@ -83,7 +83,7 @@ declare class RdxTabsRoot {
83
83
  declare class RdxTabsList {
84
84
  protected readonly rootContext: _radix_ng_primitives_tabs.RdxTabsRootContext;
85
85
  private readonly elementRef;
86
- private readonly rovingFocusGroup;
86
+ private readonly compositeRoot;
87
87
  /**
88
88
  * Whether a tab is activated when it receives focus (automatic activation).
89
89
  * When `false`, tabs are only activated on click or Enter/Space.
@@ -97,9 +97,12 @@ declare class RdxTabsList {
97
97
  * @default true
98
98
  */
99
99
  readonly loopFocus: _angular_core.InputSignalWithTransform<boolean, unknown>;
100
+ private readonly tabMetadata;
101
+ private readonly disabledIndices;
102
+ private readonly activeIndex;
100
103
  constructor();
101
104
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdxTabsList, never>;
102
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxTabsList, "[rdxTabsList]", ["rdxTabsList"], { "activateOnFocus": { "alias": "activateOnFocus"; "required": false; "isSignal": true; }; "loopFocus": { "alias": "loopFocus"; "required": false; "isSignal": true; }; }, {}, never, never, true, [{ directive: typeof i1$1.RdxRovingFocusGroupDirective; inputs: {}; outputs: {}; }]>;
105
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxTabsList, "[rdxTabsList]", ["rdxTabsList"], { "activateOnFocus": { "alias": "activateOnFocus"; "required": false; "isSignal": true; }; "loopFocus": { "alias": "loopFocus"; "required": false; "isSignal": true; }; }, {}, never, never, true, [{ directive: typeof i1$1.RdxCompositeRoot; inputs: {}; outputs: {}; }]>;
103
106
  }
104
107
 
105
108
  /**
@@ -109,7 +112,7 @@ declare class RdxTabsList {
109
112
  */
110
113
  declare class RdxTabsTab {
111
114
  protected readonly rootContext: _radix_ng_primitives_tabs.RdxTabsRootContext;
112
- private readonly rovingFocusItem;
115
+ private readonly compositeItem;
113
116
  /**
114
117
  * A unique value that associates the tab with a panel.
115
118
  */
@@ -132,7 +135,7 @@ declare class RdxTabsTab {
132
135
  /** @ignore */
133
136
  protected onFocus(event: FocusEvent): void;
134
137
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdxTabsTab, never>;
135
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxTabsTab, "[rdxTabsTab]", ["rdxTabsTab"], { "value": { "alias": "value"; "required": true; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, {}, never, never, true, [{ directive: typeof i1$1.RdxRovingFocusItemDirective; inputs: { "allowShiftKey": "allowShiftKey"; }; outputs: {}; }]>;
138
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxTabsTab, "[rdxTabsTab]", ["rdxTabsTab"], { "value": { "alias": "value"; "required": true; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, {}, never, never, true, [{ directive: typeof i1$1.RdxCompositeItem; inputs: {}; outputs: {}; }]>;
136
139
  }
137
140
 
138
141
  /**