@radix-ng/primitives 1.0.0-beta.3 → 1.0.0-beta.4

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 (97) hide show
  1. package/README.md +1 -1
  2. package/fesm2022/radix-ng-primitives-accordion.mjs +5 -3
  3. package/fesm2022/radix-ng-primitives-accordion.mjs.map +1 -1
  4. package/fesm2022/radix-ng-primitives-alert-dialog.mjs +3 -2
  5. package/fesm2022/radix-ng-primitives-alert-dialog.mjs.map +1 -1
  6. package/fesm2022/radix-ng-primitives-autocomplete.mjs +617 -659
  7. package/fesm2022/radix-ng-primitives-autocomplete.mjs.map +1 -1
  8. package/fesm2022/radix-ng-primitives-calendar.mjs +5 -3
  9. package/fesm2022/radix-ng-primitives-calendar.mjs.map +1 -1
  10. package/fesm2022/radix-ng-primitives-combobox.mjs +1305 -572
  11. package/fesm2022/radix-ng-primitives-combobox.mjs.map +1 -1
  12. package/fesm2022/radix-ng-primitives-config.mjs +13 -4
  13. package/fesm2022/radix-ng-primitives-config.mjs.map +1 -1
  14. package/fesm2022/radix-ng-primitives-context-menu.mjs +51 -10
  15. package/fesm2022/radix-ng-primitives-context-menu.mjs.map +1 -1
  16. package/fesm2022/radix-ng-primitives-core.mjs +1345 -64
  17. package/fesm2022/radix-ng-primitives-core.mjs.map +1 -1
  18. package/fesm2022/radix-ng-primitives-date-field.mjs +5 -3
  19. package/fesm2022/radix-ng-primitives-date-field.mjs.map +1 -1
  20. package/fesm2022/radix-ng-primitives-dialog.mjs +240 -112
  21. package/fesm2022/radix-ng-primitives-dialog.mjs.map +1 -1
  22. package/fesm2022/radix-ng-primitives-direction-provider.mjs +70 -0
  23. package/fesm2022/radix-ng-primitives-direction-provider.mjs.map +1 -0
  24. package/fesm2022/radix-ng-primitives-dismissable-layer.mjs +519 -184
  25. package/fesm2022/radix-ng-primitives-dismissable-layer.mjs.map +1 -1
  26. package/fesm2022/radix-ng-primitives-drawer.mjs +3 -3
  27. package/fesm2022/radix-ng-primitives-drawer.mjs.map +1 -1
  28. package/fesm2022/radix-ng-primitives-field.mjs +3 -2
  29. package/fesm2022/radix-ng-primitives-field.mjs.map +1 -1
  30. package/fesm2022/radix-ng-primitives-floating-focus-manager.mjs +517 -0
  31. package/fesm2022/radix-ng-primitives-floating-focus-manager.mjs.map +1 -0
  32. package/fesm2022/radix-ng-primitives-focus-scope.mjs +296 -70
  33. package/fesm2022/radix-ng-primitives-focus-scope.mjs.map +1 -1
  34. package/fesm2022/radix-ng-primitives-menu.mjs +861 -286
  35. package/fesm2022/radix-ng-primitives-menu.mjs.map +1 -1
  36. package/fesm2022/radix-ng-primitives-menubar.mjs +32 -4
  37. package/fesm2022/radix-ng-primitives-menubar.mjs.map +1 -1
  38. package/fesm2022/radix-ng-primitives-navigation-menu.mjs +144 -159
  39. package/fesm2022/radix-ng-primitives-navigation-menu.mjs.map +1 -1
  40. package/fesm2022/radix-ng-primitives-popover.mjs +220 -205
  41. package/fesm2022/radix-ng-primitives-popover.mjs.map +1 -1
  42. package/fesm2022/radix-ng-primitives-popper.mjs +94 -51
  43. package/fesm2022/radix-ng-primitives-popper.mjs.map +1 -1
  44. package/fesm2022/radix-ng-primitives-presence.mjs +1 -1
  45. package/fesm2022/radix-ng-primitives-presence.mjs.map +1 -1
  46. package/fesm2022/radix-ng-primitives-preview-card.mjs +141 -173
  47. package/fesm2022/radix-ng-primitives-preview-card.mjs.map +1 -1
  48. package/fesm2022/radix-ng-primitives-roving-focus.mjs +4 -2
  49. package/fesm2022/radix-ng-primitives-roving-focus.mjs.map +1 -1
  50. package/fesm2022/radix-ng-primitives-scroll-area.mjs +5 -4
  51. package/fesm2022/radix-ng-primitives-scroll-area.mjs.map +1 -1
  52. package/fesm2022/radix-ng-primitives-select.mjs +211 -156
  53. package/fesm2022/radix-ng-primitives-select.mjs.map +1 -1
  54. package/fesm2022/radix-ng-primitives-slider.mjs +5 -3
  55. package/fesm2022/radix-ng-primitives-slider.mjs.map +1 -1
  56. package/fesm2022/radix-ng-primitives-stepper.mjs +5 -3
  57. package/fesm2022/radix-ng-primitives-stepper.mjs.map +1 -1
  58. package/fesm2022/radix-ng-primitives-time-field.mjs +5 -3
  59. package/fesm2022/radix-ng-primitives-time-field.mjs.map +1 -1
  60. package/fesm2022/radix-ng-primitives-toast.mjs +15 -36
  61. package/fesm2022/radix-ng-primitives-toast.mjs.map +1 -1
  62. package/fesm2022/radix-ng-primitives-toggle-group.mjs +5 -3
  63. package/fesm2022/radix-ng-primitives-toggle-group.mjs.map +1 -1
  64. package/fesm2022/radix-ng-primitives-toolbar.mjs +5 -3
  65. package/fesm2022/radix-ng-primitives-toolbar.mjs.map +1 -1
  66. package/fesm2022/radix-ng-primitives-tooltip.mjs +73 -110
  67. package/fesm2022/radix-ng-primitives-tooltip.mjs.map +1 -1
  68. package/package.json +10 -1
  69. package/types/radix-ng-primitives-accordion.d.ts +4 -3
  70. package/types/radix-ng-primitives-autocomplete.d.ts +217 -152
  71. package/types/radix-ng-primitives-calendar.d.ts +5 -3
  72. package/types/radix-ng-primitives-combobox.d.ts +672 -283
  73. package/types/radix-ng-primitives-config.d.ts +1 -1
  74. package/types/radix-ng-primitives-context-menu.d.ts +15 -5
  75. package/types/radix-ng-primitives-core.d.ts +762 -14
  76. package/types/radix-ng-primitives-date-field.d.ts +3 -2
  77. package/types/radix-ng-primitives-dialog.d.ts +77 -32
  78. package/types/radix-ng-primitives-direction-provider.d.ts +41 -0
  79. package/types/radix-ng-primitives-dismissable-layer.d.ts +147 -99
  80. package/types/radix-ng-primitives-field.d.ts +1 -0
  81. package/types/radix-ng-primitives-floating-focus-manager.d.ts +175 -0
  82. package/types/radix-ng-primitives-focus-scope.d.ts +132 -1
  83. package/types/radix-ng-primitives-menu.d.ts +186 -103
  84. package/types/radix-ng-primitives-navigation-menu.d.ts +37 -75
  85. package/types/radix-ng-primitives-popover.d.ts +59 -92
  86. package/types/radix-ng-primitives-popper.d.ts +39 -9
  87. package/types/radix-ng-primitives-preview-card.d.ts +39 -72
  88. package/types/radix-ng-primitives-roving-focus.d.ts +7 -6
  89. package/types/radix-ng-primitives-scroll-area.d.ts +2 -2
  90. package/types/radix-ng-primitives-select.d.ts +145 -108
  91. package/types/radix-ng-primitives-slider.d.ts +5 -4
  92. package/types/radix-ng-primitives-stepper.d.ts +4 -3
  93. package/types/radix-ng-primitives-time-field.d.ts +3 -2
  94. package/types/radix-ng-primitives-toast.d.ts +7 -7
  95. package/types/radix-ng-primitives-toggle-group.d.ts +5 -4
  96. package/types/radix-ng-primitives-toolbar.d.ts +3 -2
  97. package/types/radix-ng-primitives-tooltip.d.ts +24 -67
@@ -1,13 +1,13 @@
1
1
  import * as _angular_core from '@angular/core';
2
- import { TemplateRef, Signal, ElementRef } from '@angular/core';
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 { RdxTransitionStatus, BooleanInput, NumberInput } from '@radix-ng/primitives/core';
5
+ import { RdxCancelableChangeEventDetails, RdxTransitionStatus, RdxFloatingRootContext, BooleanInput, NumberInput } from '@radix-ng/primitives/core';
6
6
  import * as i1$1 from '@radix-ng/primitives/popper';
7
- import { RdxPopperContentWrapper, RdxPopperAnchorElement } from '@radix-ng/primitives/popper';
7
+ import { RdxPopperContentWrapper } from '@radix-ng/primitives/popper';
8
8
  import * as _radix_ng_primitives_navigation_menu from '@radix-ng/primitives/navigation-menu';
9
9
  import * as i1$2 from '@radix-ng/primitives/roving-focus';
10
- import * as i2 from '@radix-ng/primitives/dismissable-layer';
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
@@ -36,12 +36,15 @@ declare class RdxNavigationMenuPortalMisuseGuard {
36
36
 
37
37
  type NavigationMenuOrientation = 'horizontal' | 'vertical';
38
38
  type NavigationMenuDirection = 'ltr' | 'rtl';
39
- type RdxNavigationMenuOpenChangeReason = 'trigger-hover' | 'trigger-focus' | 'trigger-press' | 'outside-press' | 'focus-out' | 'escape-key' | 'link-select' | 'list-leave' | 'none';
39
+ type RdxNavigationMenuOpenChangeReason = 'trigger-hover' | 'trigger-focus' | 'trigger-press' | 'list-navigation' | 'outside-press' | 'focus-out' | 'escape-key' | 'link-select' | 'list-leave' | 'none';
40
+ type RdxNavigationMenuOpenChangeEventDetails = RdxCancelableChangeEventDetails<RdxNavigationMenuOpenChangeReason>;
40
41
  interface RdxNavigationMenuOpenChange {
41
42
  value: string | null;
42
43
  open: boolean;
43
44
  reason: RdxNavigationMenuOpenChangeReason;
44
45
  event: Event;
46
+ trigger: HTMLElement | undefined;
47
+ eventDetails: RdxNavigationMenuOpenChangeEventDetails;
45
48
  }
46
49
  /**
47
50
  * A registered item content template, rendered into the shared viewport when its item is active.
@@ -65,6 +68,7 @@ interface RdxNavigationMenuRootContext {
65
68
  /** Value of the previously open item (used for slide-direction morphing). */
66
69
  readonly previousValue: Signal<string | null>;
67
70
  readonly isOpen: Signal<boolean>;
71
+ readonly present: Signal<boolean>;
68
72
  readonly instant: Signal<boolean>;
69
73
  readonly transitionStatus: Signal<RdxTransitionStatus>;
70
74
  /** The active trigger element the popup is anchored to. */
@@ -78,7 +82,7 @@ interface RdxNavigationMenuRootContext {
78
82
  close(reason?: RdxNavigationMenuOpenChangeReason, event?: Event): void;
79
83
  toggle(value: string, trigger: HTMLElement, event?: Event): void;
80
84
  openOnHover(value: string, trigger: HTMLElement, event: PointerEvent): void;
81
- closeOnHover(): void;
85
+ closeOnHover(event?: PointerEvent): void;
82
86
  cancelHoverOpen(): void;
83
87
  cancelHoverClose(): void;
84
88
  registerTrigger(value: string, trigger: HTMLElement): () => void;
@@ -100,6 +104,9 @@ declare class RdxNavigationMenuRoot {
100
104
  private readonly popper;
101
105
  private readonly destroyRef;
102
106
  private readonly parentRoot;
107
+ private readonly registration;
108
+ /** Per-popup floating root context (ADR 0015) — `open` / `triggers` / reference for the dismissal engine. */
109
+ readonly floatingContext: RdxFloatingRootContext;
103
110
  /** Whether this root is nested inside another navigation menu's content. */
104
111
  readonly nested: boolean;
105
112
  readonly baseId: string;
@@ -118,7 +125,8 @@ declare class RdxNavigationMenuRoot {
118
125
  /**
119
126
  * The reading direction of the navigation menu.
120
127
  */
121
- readonly dir: _angular_core.InputSignal<NavigationMenuDirection>;
128
+ readonly dirInput: _angular_core.InputSignal<NavigationMenuDirection | undefined>;
129
+ readonly dir: _angular_core.Signal<_radix_ng_primitives_core.Direction>;
122
130
  /**
123
131
  * Whether keyboard navigation loops from the last item back to the first and vice versa.
124
132
  */
@@ -152,6 +160,8 @@ declare class RdxNavigationMenuRoot {
152
160
  readonly transitionStatus: _angular_core.Signal<_radix_ng_primitives_core.RdxTransitionStatus>;
153
161
  readonly previousValue: _angular_core.WritableSignal<string | null>;
154
162
  readonly isOpen: _angular_core.Signal<boolean>;
163
+ private readonly preventUnmountOnClose;
164
+ readonly present: _angular_core.Signal<boolean>;
155
165
  readonly trigger: _angular_core.WritableSignal<HTMLElement | undefined>;
156
166
  readonly triggers: _angular_core.WritableSignal<HTMLElement[]>;
157
167
  readonly contents: _angular_core.WritableSignal<Map<string, RdxNavigationMenuContentEntry>>;
@@ -166,19 +176,21 @@ declare class RdxNavigationMenuRoot {
166
176
  close(reason?: RdxNavigationMenuOpenChangeReason, event?: Event): void;
167
177
  toggle(value: string, trigger: HTMLElement, event?: Event): void;
168
178
  openOnHover(value: string, trigger: HTMLElement, event: PointerEvent): void;
169
- closeOnHover(): void;
179
+ closeOnHover(event?: PointerEvent): void;
170
180
  cancelHoverOpen(): void;
171
181
  cancelHoverClose(): void;
172
182
  registerTrigger(value: string, trigger: HTMLElement): () => void;
173
183
  registerContent(entry: RdxNavigationMenuContentEntry): () => void;
174
184
  registerTransitionElement(element: HTMLElement): () => void;
175
185
  registerViewport(onTriggerChange: (previous: HTMLElement, next: HTMLElement) => void): () => boolean;
186
+ private createOpenChangeEvent;
176
187
  private scheduleInstantReset;
177
188
  private clearHoverTimers;
178
189
  private clearOpenTimer;
179
190
  private clearCloseTimer;
191
+ private isInsideOpenChild;
180
192
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdxNavigationMenuRoot, never>;
181
- 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; }; "dir": { "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: {}; }]>;
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: {}; }]>;
182
194
  }
183
195
 
184
196
  /**
@@ -322,69 +334,21 @@ declare class RdxNavigationMenuBackdrop {
322
334
 
323
335
  /**
324
336
  * Positions the shared popup against the active trigger.
337
+ *
338
+ * A "thin" positioner (ADR 0012): it inherits the popper positioning surface (inputs, `placed`
339
+ * output, unified vars + placement attrs) from {@link RdxPopperContentWrapper} and adds the
340
+ * navigation-menu defaults, the open/closed/instant state attributes, and the grace-area hover
341
+ * bridge. It exposes no legacy `--radix-*` aliases.
325
342
  */
326
- declare class RdxNavigationMenuPositioner {
343
+ declare class RdxNavigationMenuPositioner extends RdxPopperContentWrapper {
327
344
  protected readonly rootContext: _radix_ng_primitives_navigation_menu.RdxNavigationMenuRootContext;
328
- protected readonly wrapper: RdxPopperContentWrapper;
329
- private readonly elementRef;
345
+ private readonly containerRef;
330
346
  private readonly triggerEl;
331
347
  private readonly containerEl;
332
348
  private readonly graceArea;
333
- /**
334
- * An element to position the popup against. Defaults to the active trigger.
335
- */
336
- readonly anchor: _angular_core.InputSignal<RdxPopperAnchorElement>;
337
- /**
338
- * The preferred side of the trigger to render against when open.
339
- */
340
- readonly side: _angular_core.InputSignal<"top" | "right" | "bottom" | "left">;
341
- /**
342
- * Distance between the trigger and the popup in pixels.
343
- */
344
- readonly sideOffset: _angular_core.InputSignalWithTransform<number, NumberInput>;
345
- /**
346
- * How to align the popup relative to the specified side.
347
- */
348
- readonly align: _angular_core.InputSignal<"start" | "center" | "end">;
349
- /**
350
- * An offset in pixels from the `start` or `end` alignment options.
351
- */
352
- readonly alignOffset: _angular_core.InputSignalWithTransform<number, NumberInput>;
353
- /**
354
- * Minimum distance to maintain between the arrow and the edges of the popup.
355
- */
356
- readonly arrowPadding: _angular_core.InputSignalWithTransform<number, NumberInput>;
357
- /**
358
- * Whether to override side and alignment preferences to prevent collisions.
359
- */
360
- readonly avoidCollisions: _angular_core.InputSignalWithTransform<boolean, BooleanInput>;
361
- /**
362
- * The element used as the collision boundary.
363
- */
364
- readonly collisionBoundary: _angular_core.InputSignal<ElementRef<HTMLElement> | ElementRef<HTMLElement>[] | undefined>;
365
- /**
366
- * Distance in pixels from the boundary edges where collision detection should occur.
367
- */
368
- readonly collisionPadding: _angular_core.InputSignal<number | Partial<Record<"top" | "right" | "bottom" | "left", number>>>;
369
- /**
370
- * The sticky behavior on the alignment axis.
371
- */
372
- readonly sticky: _angular_core.InputSignal<"always" | "partial">;
373
- /**
374
- * Whether to hide the popup when the trigger becomes fully occluded.
375
- */
376
- readonly hideWhenDetached: _angular_core.InputSignalWithTransform<boolean, BooleanInput>;
377
- /**
378
- * The CSS position strategy used by Floating UI.
379
- */
380
- readonly positionStrategy: _angular_core.InputSignal<"fixed" | "absolute">;
381
- /**
382
- * Whether to update position on every animation frame.
383
- */
384
- readonly updatePositionStrategy: _angular_core.InputSignal<"always" | "optimized">;
385
349
  constructor();
386
350
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdxNavigationMenuPositioner, never>;
387
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxNavigationMenuPositioner, "[rdxNavigationMenuPositioner]", never, { "anchor": { "alias": "anchor"; "required": false; "isSignal": true; }; "side": { "alias": "side"; "required": false; "isSignal": true; }; "sideOffset": { "alias": "sideOffset"; "required": false; "isSignal": true; }; "align": { "alias": "align"; "required": false; "isSignal": true; }; "alignOffset": { "alias": "alignOffset"; "required": false; "isSignal": true; }; "arrowPadding": { "alias": "arrowPadding"; "required": false; "isSignal": true; }; "avoidCollisions": { "alias": "avoidCollisions"; "required": false; "isSignal": true; }; "collisionBoundary": { "alias": "collisionBoundary"; "required": false; "isSignal": true; }; "collisionPadding": { "alias": "collisionPadding"; "required": false; "isSignal": true; }; "sticky": { "alias": "sticky"; "required": false; "isSignal": true; }; "hideWhenDetached": { "alias": "hideWhenDetached"; "required": false; "isSignal": true; }; "positionStrategy": { "alias": "positionStrategy"; "required": false; "isSignal": true; }; "updatePositionStrategy": { "alias": "updatePositionStrategy"; "required": false; "isSignal": true; }; }, {}, never, never, true, [{ directive: typeof i1$1.RdxPopperContentWrapper; inputs: { "anchor": "anchor"; "side": "side"; "sideOffset": "sideOffset"; "align": "align"; "alignOffset": "alignOffset"; "arrowPadding": "arrowPadding"; "avoidCollisions": "avoidCollisions"; "collisionBoundary": "collisionBoundary"; "collisionPadding": "collisionPadding"; "sticky": "sticky"; "hideWhenDetached": "hideWhenDetached"; "positionStrategy": "positionStrategy"; "updatePositionStrategy": "updatePositionStrategy"; }; outputs: {}; }]>;
351
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxNavigationMenuPositioner, "[rdxNavigationMenuPositioner]", never, {}, {}, never, never, true, never>;
388
352
  }
389
353
 
390
354
  /**
@@ -392,38 +356,36 @@ declare class RdxNavigationMenuPositioner {
392
356
  */
393
357
  declare class RdxNavigationMenuPopup {
394
358
  protected readonly rootContext: _radix_ng_primitives_navigation_menu.RdxNavigationMenuRootContext;
395
- private readonly dismissableLayer;
359
+ private readonly floatingContext;
360
+ private readonly registration;
396
361
  private readonly wrapper;
397
- private readonly layersContext;
398
362
  private readonly elementRef;
399
363
  protected readonly side: _angular_core.Signal<"top" | "right" | "bottom" | "left" | undefined>;
400
364
  protected readonly align: _angular_core.Signal<"start" | "center" | "end" | undefined>;
401
365
  /** Names the menu after the active trigger so the `role="menu"` element has an accessible name. */
402
366
  protected readonly labelledBy: _angular_core.Signal<string | undefined>;
403
- private dismissReason;
404
- private dismissEvent;
405
367
  /**
406
368
  * Event handler called when the escape key is down. Can be prevented.
407
369
  */
408
- readonly escapeKeyDown: _angular_core.OutputRef<KeyboardEvent>;
370
+ readonly escapeKeyDown: _angular_core.OutputEmitterRef<KeyboardEvent>;
409
371
  /**
410
372
  * Event handler called when a pointerdown event happens outside the popup. Can be prevented.
411
373
  */
412
- readonly pointerDownOutside: _angular_core.OutputRef<PointerEvent>;
374
+ readonly pointerDownOutside: _angular_core.OutputEmitterRef<RdxOutsidePressDomEvent>;
413
375
  /**
414
376
  * Event handler called when focus moves outside the popup. Can be prevented.
415
377
  */
416
- readonly focusOutside: _angular_core.OutputRef<FocusEvent>;
378
+ readonly focusOutside: _angular_core.OutputEmitterRef<FocusEvent>;
417
379
  constructor();
418
380
  protected onPointerLeave(event: PointerEvent): void;
419
381
  /**
420
382
  * Keyboard navigation inside the open panel: Down/Up move between the panel's focusable items in
421
383
  * DOM order, Home/End jump to the first/last, and Up from the first item returns focus to the
422
- * trigger. (Tab keeps working natively; Escape is handled by the dismissable layer.)
384
+ * trigger. (Tab keeps working natively; Escape is handled by the dismissal capability.)
423
385
  */
424
386
  protected onKeydown(event: KeyboardEvent): void;
425
387
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdxNavigationMenuPopup, never>;
426
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxNavigationMenuPopup, "[rdxNavigationMenuPopup]", never, {}, { "escapeKeyDown": "escapeKeyDown"; "pointerDownOutside": "pointerDownOutside"; "focusOutside": "focusOutside"; }, never, never, true, [{ directive: typeof i1$1.RdxPopperContent; inputs: {}; outputs: {}; }, { directive: typeof i2.RdxDismissableLayer; inputs: {}; outputs: {}; }]>;
388
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxNavigationMenuPopup, "[rdxNavigationMenuPopup]", never, {}, { "escapeKeyDown": "escapeKeyDown"; "pointerDownOutside": "pointerDownOutside"; "focusOutside": "focusOutside"; }, never, never, true, [{ directive: typeof i1$1.RdxPopperContent; inputs: {}; outputs: {}; }]>;
427
389
  }
428
390
 
429
391
  /**
@@ -483,4 +445,4 @@ declare class RdxNavigationMenuModule {
483
445
  }
484
446
 
485
447
  export { RdxNavigationMenuArrow, RdxNavigationMenuBackdrop, RdxNavigationMenuContent, RdxNavigationMenuIcon, RdxNavigationMenuItem, RdxNavigationMenuLink, RdxNavigationMenuList, RdxNavigationMenuModule, RdxNavigationMenuPopup, RdxNavigationMenuPortal, RdxNavigationMenuPortalMisuseGuard, RdxNavigationMenuPositioner, RdxNavigationMenuRoot, RdxNavigationMenuTrigger, RdxNavigationMenuViewport, injectNavigationMenuRootContext, navigationMenuImports, provideNavigationMenuRootContext };
486
- export type { NavigationMenuDirection, NavigationMenuOrientation, RdxNavigationMenuContentEntry, RdxNavigationMenuOpenChange, RdxNavigationMenuOpenChangeReason, RdxNavigationMenuRootContext };
448
+ export type { NavigationMenuDirection, NavigationMenuOrientation, RdxNavigationMenuContentEntry, RdxNavigationMenuOpenChange, RdxNavigationMenuOpenChangeEventDetails, RdxNavigationMenuOpenChangeReason, RdxNavigationMenuRootContext };
@@ -2,12 +2,12 @@ import * as _angular_core from '@angular/core';
2
2
  import { Signal, ElementRef } 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 { RdxTransitionStatus, BooleanInput, NumberInput } from '@radix-ng/primitives/core';
5
+ import { RdxTransitionStatus, RdxFloatingRootContext, BooleanInput, RdxCancelableChangeEventDetails, NumberInput } from '@radix-ng/primitives/core';
6
6
  import * as i1$1 from '@radix-ng/primitives/popper';
7
- import { RdxPopperContentWrapper, RdxPopperAnchorElement } from '@radix-ng/primitives/popper';
7
+ import { RdxPopperContentWrapper } from '@radix-ng/primitives/popper';
8
8
  import * as _radix_ng_primitives_popover from '@radix-ng/primitives/popover';
9
- import * as i2 from '@radix-ng/primitives/dismissable-layer';
10
- import * as i3 from '@radix-ng/primitives/focus-scope';
9
+ import { RdxOutsidePressDomEvent } from '@radix-ng/primitives/dismissable-layer';
10
+ import * as i3 from '@radix-ng/primitives/floating-focus-manager';
11
11
 
12
12
  /**
13
13
  * Structural directive that teleports the popover content into a container (default `document.body`)
@@ -48,17 +48,20 @@ declare function createRdxPopoverHandle<Payload = unknown>(): RdxPopoverHandle<P
48
48
 
49
49
  type RdxPopoverModal = boolean | 'trap-focus';
50
50
  type RdxPopoverOpenChangeReason = 'trigger-hover' | 'trigger-focus' | 'trigger-press' | 'outside-press' | 'escape-key' | 'close-press' | 'focus-out' | 'imperative-action' | 'none';
51
+ type RdxPopoverOpenChangeEventDetails = RdxCancelableChangeEventDetails<RdxPopoverOpenChangeReason>;
51
52
  interface RdxPopoverOpenChange {
52
53
  open: boolean;
53
54
  triggerId: string | null;
54
55
  trigger: HTMLElement | undefined;
55
56
  reason: RdxPopoverOpenChangeReason;
56
57
  event: Event;
58
+ eventDetails: RdxPopoverOpenChangeEventDetails;
57
59
  }
58
60
  interface RdxPopoverRootContext {
59
61
  contentId: string;
60
62
  descriptionId: Signal<string | undefined>;
61
63
  isOpen: Signal<boolean>;
64
+ present: Signal<boolean>;
62
65
  modal: Signal<RdxPopoverModal>;
63
66
  titleId: Signal<string | undefined>;
64
67
  trigger: Signal<HTMLElement | undefined>;
@@ -68,6 +71,8 @@ interface RdxPopoverRootContext {
68
71
  instant: Signal<boolean>;
69
72
  openChangeReason: Signal<RdxPopoverOpenChangeReason>;
70
73
  isPointerDownOnTrigger: Signal<boolean>;
74
+ /** Whether the current open was initiated by touch (ADR 0016 §3 — gates the anchored scroll lock). */
75
+ openedByTouch: Signal<boolean>;
71
76
  close: (reason?: RdxPopoverOpenChangeReason, event?: Event) => void;
72
77
  cancelHoverClose: () => void;
73
78
  cancelHoverOpen: () => void;
@@ -79,6 +84,7 @@ interface RdxPopoverRootContext {
79
84
  setDescriptionId: (id: string | undefined) => void;
80
85
  setTitleId: (id: string | undefined) => void;
81
86
  setPointerDownOnTrigger: (pointerDown: boolean) => void;
87
+ setOpenedByTouch: (value: boolean) => void;
82
88
  setHoverDelays: (delay: number, closeDelay: number) => void;
83
89
  registerPopupClose: () => () => void;
84
90
  registerTransitionElement: (element: HTMLElement) => () => void;
@@ -95,6 +101,8 @@ type RdxPopoverTransitionStatus = RdxTransitionStatus;
95
101
  declare class RdxPopoverRoot {
96
102
  private readonly popper;
97
103
  private readonly destroyRef;
104
+ /** Shared per-popup floating context (ADR 0015 §1): `open`, trigger registry, reference / floating els. */
105
+ readonly floatingContext: RdxFloatingRootContext;
98
106
  private hasAppliedDefaultOpen;
99
107
  private hasAppliedDefaultTriggerId;
100
108
  private openTimer;
@@ -138,12 +146,16 @@ declare class RdxPopoverRoot {
138
146
  readonly triggers: _angular_core.WritableSignal<HTMLElement[]>;
139
147
  readonly payload: _angular_core.WritableSignal<unknown>;
140
148
  readonly isPointerDownOnTrigger: _angular_core.WritableSignal<boolean>;
149
+ /** Whether the current open was initiated by touch (ADR 0016 §3 — gates the anchored scroll lock). */
150
+ readonly openedByTouch: _angular_core.WritableSignal<boolean>;
141
151
  readonly popupCloseCount: _angular_core.WritableSignal<number>;
152
+ private readonly preventUnmountOnClose;
142
153
  readonly onOpenChange: _angular_core.OutputEmitterRef<RdxPopoverOpenChange>;
143
154
  readonly onOpenChangeComplete: _angular_core.OutputEmitterRef<boolean>;
144
155
  private readonly registeredTriggers;
145
156
  private readonly viewportTriggerChange;
146
157
  readonly state: Signal<"open" | "closed">;
158
+ readonly present: Signal<boolean>;
147
159
  constructor();
148
160
  show(trigger?: HTMLElement | undefined, payload?: unknown, triggerId?: string, reason?: RdxPopoverOpenChangeReason, event?: Event, fromHover?: boolean): void;
149
161
  close(reason?: RdxPopoverOpenChangeReason, event?: Event): void;
@@ -157,7 +169,7 @@ declare class RdxPopoverRoot {
157
169
  registerViewport(onTriggerChange: (previous: HTMLElement, next: HTMLElement) => void): () => boolean;
158
170
  registerTransitionElement(element: HTMLElement): () => void;
159
171
  private syncTriggerId;
160
- private emitOpenChange;
172
+ private createOpenChangeEvent;
161
173
  private clearHoverTimers;
162
174
  private clearOpenTimer;
163
175
  private clearCloseTimer;
@@ -172,6 +184,8 @@ declare class RdxPopoverRoot {
172
184
  declare class RdxPopoverTrigger {
173
185
  private readonly parentRootContext;
174
186
  readonly elementRef: ElementRef<HTMLElement>;
187
+ /** Pointer type of the most recent `pointerdown`, used to detect a touch open (ADR 0016 §3). */
188
+ private lastPointerType;
175
189
  /**
176
190
  * Associates this trigger with a detached popover root.
177
191
  */
@@ -209,7 +223,7 @@ declare class RdxPopoverTrigger {
209
223
  protected handleClick(event: MouseEvent): void;
210
224
  protected handlePointerEnter(event: PointerEvent): void;
211
225
  protected handlePointerLeave(event: PointerEvent): void;
212
- protected handlePointerDown(): void;
226
+ protected handlePointerDown(event: PointerEvent): void;
213
227
  protected handlePointerUp(): void;
214
228
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdxPopoverTrigger, never>;
215
229
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxPopoverTrigger, "button[rdxPopoverTrigger]", never, { "handle": { "alias": "handle"; "required": false; "isSignal": true; }; "payload": { "alias": "payload"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "openOnHover": { "alias": "openOnHover"; "required": false; "isSignal": true; }; "delay": { "alias": "delay"; "required": false; "isSignal": true; }; "closeDelay": { "alias": "closeDelay"; "required": false; "isSignal": true; }; }, {}, never, never, true, [{ directive: typeof i1$1.RdxPopperAnchor; inputs: {}; outputs: {}; }]>;
@@ -220,119 +234,72 @@ declare class RdxPopoverTrigger {
220
234
  */
221
235
  declare class RdxPopoverBackdrop {
222
236
  protected readonly rootContext: _radix_ng_primitives_popover.RdxPopoverRootContext;
237
+ constructor();
223
238
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdxPopoverBackdrop, never>;
224
239
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxPopoverBackdrop, "[rdxPopoverBackdrop]", never, {}, {}, never, never, true, never>;
225
240
  }
226
241
 
227
242
  /**
228
243
  * Positions the popover against its trigger.
244
+ *
245
+ * A "thin" positioner (ADR 0012): it inherits the popper positioning surface (inputs, `placed`
246
+ * output, unified vars + placement attrs) from {@link RdxPopperContentWrapper} and adds popover's own
247
+ * concerns — Base UI-aligned defaults via the config provider, the open/closed/instant state
248
+ * attributes, the deprecated `--radix-popover-*` aliases, and the grace-area hover bridge.
229
249
  */
230
- declare class RdxPopoverPositioner {
250
+ declare class RdxPopoverPositioner extends RdxPopperContentWrapper {
231
251
  protected readonly rootContext: _radix_ng_primitives_popover.RdxPopoverRootContext;
232
- protected readonly wrapper: RdxPopperContentWrapper;
233
- private readonly elementRef;
252
+ protected readonly legacyVars: Record<string, string>;
253
+ private readonly containerRef;
234
254
  private readonly triggerEl;
235
255
  private readonly containerEl;
236
256
  private readonly graceArea;
237
- /**
238
- * An element to position the popup against. Defaults to the trigger.
239
- */
240
- readonly anchor: _angular_core.InputSignal<RdxPopperAnchorElement>;
241
- /**
242
- * The preferred side of the trigger to render against when open.
243
- */
244
- readonly side: _angular_core.InputSignal<"top" | "right" | "bottom" | "left">;
245
- /**
246
- * Distance between the trigger and the popup in pixels.
247
- */
248
- readonly sideOffset: _angular_core.InputSignalWithTransform<number, NumberInput>;
249
- /**
250
- * How to align the popup relative to the specified side.
251
- */
252
- readonly align: _angular_core.InputSignal<"start" | "center" | "end">;
253
- /**
254
- * An offset in pixels from the `start` or `end` alignment options.
255
- */
256
- readonly alignOffset: _angular_core.InputSignalWithTransform<number, NumberInput>;
257
- /**
258
- * Minimum distance to maintain between the arrow and the edges of the popup.
259
- */
260
- readonly arrowPadding: _angular_core.InputSignalWithTransform<number, NumberInput>;
261
- /**
262
- * Whether to override side and alignment preferences to prevent collisions.
263
- */
264
- readonly avoidCollisions: _angular_core.InputSignalWithTransform<boolean, BooleanInput>;
265
- /**
266
- * The element used as the collision boundary.
267
- */
268
- readonly collisionBoundary: _angular_core.InputSignal<ElementRef<HTMLElement> | ElementRef<HTMLElement>[] | undefined>;
269
- /**
270
- * Distance in pixels from the boundary edges where collision detection should occur.
271
- */
272
- readonly collisionPadding: _angular_core.InputSignal<number | Partial<Record<"top" | "right" | "bottom" | "left", number>>>;
273
- /**
274
- * The sticky behavior on the alignment axis.
275
- */
276
- readonly sticky: _angular_core.InputSignal<"always" | "partial">;
277
- /**
278
- * Whether to hide the popup when the trigger becomes fully occluded.
279
- */
280
- readonly hideWhenDetached: _angular_core.InputSignalWithTransform<boolean, BooleanInput>;
281
- /**
282
- * The CSS position strategy used by Floating UI.
283
- */
284
- readonly positionStrategy: _angular_core.InputSignal<"fixed" | "absolute">;
285
- /**
286
- * Whether to update position on every animation frame.
287
- */
288
- readonly updatePositionStrategy: _angular_core.InputSignal<"always" | "optimized">;
289
- /**
290
- * Emits when the popup has been placed.
291
- */
292
- readonly placed: _angular_core.OutputRef<void>;
293
257
  constructor();
294
258
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdxPopoverPositioner, never>;
295
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxPopoverPositioner, "[rdxPopoverPositioner]", never, { "anchor": { "alias": "anchor"; "required": false; "isSignal": true; }; "side": { "alias": "side"; "required": false; "isSignal": true; }; "sideOffset": { "alias": "sideOffset"; "required": false; "isSignal": true; }; "align": { "alias": "align"; "required": false; "isSignal": true; }; "alignOffset": { "alias": "alignOffset"; "required": false; "isSignal": true; }; "arrowPadding": { "alias": "arrowPadding"; "required": false; "isSignal": true; }; "avoidCollisions": { "alias": "avoidCollisions"; "required": false; "isSignal": true; }; "collisionBoundary": { "alias": "collisionBoundary"; "required": false; "isSignal": true; }; "collisionPadding": { "alias": "collisionPadding"; "required": false; "isSignal": true; }; "sticky": { "alias": "sticky"; "required": false; "isSignal": true; }; "hideWhenDetached": { "alias": "hideWhenDetached"; "required": false; "isSignal": true; }; "positionStrategy": { "alias": "positionStrategy"; "required": false; "isSignal": true; }; "updatePositionStrategy": { "alias": "updatePositionStrategy"; "required": false; "isSignal": true; }; }, { "placed": "placed"; }, never, never, true, [{ directive: typeof i1$1.RdxPopperContentWrapper; inputs: { "anchor": "anchor"; "side": "side"; "sideOffset": "sideOffset"; "align": "align"; "alignOffset": "alignOffset"; "arrowPadding": "arrowPadding"; "avoidCollisions": "avoidCollisions"; "collisionBoundary": "collisionBoundary"; "collisionPadding": "collisionPadding"; "sticky": "sticky"; "hideWhenDetached": "hideWhenDetached"; "positionStrategy": "positionStrategy"; "updatePositionStrategy": "updatePositionStrategy"; }; outputs: {}; }]>;
259
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxPopoverPositioner, "[rdxPopoverPositioner]", never, {}, {}, never, never, true, never>;
296
260
  }
297
261
 
298
262
  /**
299
263
  * A container for the popover contents.
264
+ *
265
+ * **ADR 0015/0017 Phase-4 migration** onto the new floating dismissal + focus engine (same pattern as
266
+ * Dialog; browser-verified via `popover.behavior` Playwright). Popover-specific:
267
+ * - **Hover-open disables the manager** (`enabled = isOpen && !isHoverActive`) — Base UI parity
268
+ * (`disabled={!mounted || openReason === triggerHover}`); a hover-opened popover does not trap / mark.
269
+ * (The legacy only suppressed auto-focus while still trapping — that Radix divergence is dropped.)
270
+ * - Trap = `'trap-focus' || (modal === true && hasPopupClose())`; scroll lock + real outside `inert`
271
+ * isolation key off the full modal (`modal === true`).
272
+ * - No `disablePointerDismissal` — outside-press + focus-out always close.
273
+ *
274
+ * Note: a positioned popover does **not** auto-focus into the popup on open (pre-existing — the legacy
275
+ * behaved the same; verified). The trap holds focus once it is inside. Auto-focus-on-open + redirecting a
276
+ * Tab from the trigger into the popup needs the deferred portal-focus bridge / guards (ADR 0017 §6a).
300
277
  */
301
278
  declare class RdxPopoverPopup {
302
279
  protected readonly rootContext: _radix_ng_primitives_popover.RdxPopoverRootContext;
303
- private readonly dismissableLayer;
280
+ private readonly host;
281
+ private readonly floatingContext;
282
+ private readonly registration;
283
+ private readonly focusManager;
304
284
  private readonly focusScope;
305
285
  private readonly wrapper;
306
286
  protected readonly align: _angular_core.Signal<"start" | "center" | "end" | undefined>;
307
287
  protected readonly side: _angular_core.Signal<"top" | "right" | "bottom" | "left" | undefined>;
308
- private dismissDetails;
309
- /**
310
- * Event handler called when the escape key is down. Can be prevented.
311
- */
312
- readonly escapeKeyDown: _angular_core.OutputRef<KeyboardEvent>;
313
- /**
314
- * Event handler called when a pointerdown event happens outside of the popup. Can be prevented.
315
- */
316
- readonly pointerDownOutside: _angular_core.OutputRef<PointerEvent>;
317
- /**
318
- * Event handler called when focus moves outside of the popup. Can be prevented.
319
- */
320
- readonly focusOutside: _angular_core.OutputRef<FocusEvent>;
321
- /**
322
- * Event handler called when an interaction happens outside of the popup. Can be prevented.
323
- */
324
- readonly interactOutside: _angular_core.OutputRef<PointerEvent | FocusEvent>;
325
- /**
326
- * Event handler called before focus moves into the popup. Can be prevented.
327
- */
288
+ /** Event handler called when the escape key is down. Can be prevented. */
289
+ readonly escapeKeyDown: _angular_core.OutputEmitterRef<KeyboardEvent>;
290
+ /** Event handler called when a pointerdown event happens outside of the popup. Can be prevented. */
291
+ readonly pointerDownOutside: _angular_core.OutputEmitterRef<RdxOutsidePressDomEvent>;
292
+ /** Event handler called when focus moves outside of the popup. Can be prevented. */
293
+ readonly focusOutside: _angular_core.OutputEmitterRef<FocusEvent>;
294
+ /** Event handler called when an interaction (pointer / focus) happens outside of the popup. */
295
+ readonly interactOutside: _angular_core.OutputEmitterRef<RdxOutsidePressDomEvent | FocusEvent>;
296
+ /** Event handler called before focus moves into the popup. Can be prevented. */
328
297
  readonly openAutoFocus: _angular_core.OutputRef<Event>;
329
- /**
330
- * Event handler called before focus returns after the popup is removed. Can be prevented.
331
- */
298
+ /** Event handler called before focus returns after the popup is removed. Can be prevented. */
332
299
  readonly closeAutoFocus: _angular_core.OutputRef<Event>;
333
300
  constructor();
334
301
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdxPopoverPopup, never>;
335
- 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 i2.RdxDismissableLayer; inputs: {}; outputs: {}; }, { directive: typeof i3.RdxFocusScope; inputs: {}; outputs: {}; }]>;
302
+ 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 i3.RdxFloatingFocusManager; inputs: {}; outputs: {}; }]>;
336
303
  }
337
304
 
338
305
  /**
@@ -414,4 +381,4 @@ declare class RdxPopoverModule {
414
381
  }
415
382
 
416
383
  export { RdxPopoverArrow, RdxPopoverBackdrop, RdxPopoverClose, RdxPopoverDescription, RdxPopoverHandle, RdxPopoverModule, RdxPopoverPopup, RdxPopoverPortal, RdxPopoverPortalMisuseGuard, RdxPopoverPositioner, RdxPopoverRoot, RdxPopoverTitle, RdxPopoverTrigger, RdxPopoverViewport, createRdxPopoverHandle, injectRdxPopoverRootContext, popoverImports, provideRdxPopoverRootContext };
417
- export type { RdxPopoverModal, RdxPopoverOpenChange, RdxPopoverOpenChangeReason, RdxPopoverRootContext, RdxPopoverTransitionStatus };
384
+ export type { RdxPopoverModal, RdxPopoverOpenChange, RdxPopoverOpenChangeEventDetails, RdxPopoverOpenChangeReason, RdxPopoverRootContext, RdxPopoverTransitionStatus };
@@ -1,5 +1,5 @@
1
1
  import * as _angular_core from '@angular/core';
2
- import { ElementRef, InjectionToken, Provider } from '@angular/core';
2
+ import { ElementRef, Provider, Type, InjectionToken } from '@angular/core';
3
3
  import { ReferenceElement, Placement, Middleware, VirtualElement } from '@floating-ui/dom';
4
4
  import * as _radix_ng_primitives_core from '@radix-ng/primitives/core';
5
5
  import { NumberInput, BooleanInput } from '@radix-ng/primitives/core';
@@ -83,12 +83,11 @@ declare const providePopperContentWrapperContext: (useFactory: () => {
83
83
  shouldHideArrow: _angular_core.Signal<boolean>;
84
84
  isPositioned: _angular_core.Signal<boolean>;
85
85
  anchorHidden: _angular_core.Signal<boolean>;
86
- }) => _angular_core.Provider;
86
+ }) => Provider;
87
87
  declare class RdxPopperContentWrapper {
88
88
  private readonly elementRef;
89
89
  private readonly injector;
90
90
  private readonly context;
91
- private readonly isBrowser;
92
91
  /** Optional positioning defaults provided by a composing primitive (e.g. tooltip). */
93
92
  private readonly config;
94
93
  /**
@@ -199,26 +198,57 @@ declare class RdxPopperContentWrapper {
199
198
  * The current alignment of the panel.
200
199
  */
201
200
  readonly placedAlign: _angular_core.Signal<"start" | "center" | "end" | undefined>;
202
- private readonly contentElementRef;
203
- protected readonly contentZIndex: _angular_core.Signal<string | 0>;
204
201
  protected readonly style: _angular_core.Signal<{
205
202
  visibility: string;
206
203
  pointerEvents: string;
207
204
  position: "fixed" | "absolute";
208
205
  transform: string;
209
206
  minWidth: string;
210
- zIndex: string | number;
211
207
  top: string;
212
208
  left: string;
213
209
  '--radix-popper-transform-origin': string;
214
210
  '--radix-popper-content-wrapper-width': string;
215
211
  '--radix-popper-content-wrapper-height': string;
212
+ '--anchor-width': string;
213
+ '--anchor-height': string;
214
+ '--available-width': string;
215
+ '--available-height': string;
216
+ '--positioner-width': string;
217
+ '--positioner-height': string;
218
+ '--transform-origin': string;
216
219
  }>;
217
220
  private readonly afterRenderEffect;
218
221
  constructor();
219
222
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdxPopperContentWrapper, never>;
220
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxPopperContentWrapper, "[rdxPopperContentWrapper]", never, { "anchor": { "alias": "anchor"; "required": false; "isSignal": true; }; "side": { "alias": "side"; "required": false; "isSignal": true; }; "sideOffset": { "alias": "sideOffset"; "required": false; "isSignal": true; }; "align": { "alias": "align"; "required": false; "isSignal": true; }; "alignOffset": { "alias": "alignOffset"; "required": false; "isSignal": true; }; "arrowPadding": { "alias": "arrowPadding"; "required": false; "isSignal": true; }; "avoidCollisions": { "alias": "avoidCollisions"; "required": false; "isSignal": true; }; "collisionBoundary": { "alias": "collisionBoundary"; "required": false; "isSignal": true; }; "collisionPadding": { "alias": "collisionPadding"; "required": false; "isSignal": true; }; "sticky": { "alias": "sticky"; "required": false; "isSignal": true; }; "hideWhenDetached": { "alias": "hideWhenDetached"; "required": false; "isSignal": true; }; "positionStrategy": { "alias": "positionStrategy"; "required": false; "isSignal": true; }; "updatePositionStrategy": { "alias": "updatePositionStrategy"; "required": false; "isSignal": true; }; }, { "placed": "placed"; }, ["arrow", "contentElementRef"], never, true, never>;
223
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxPopperContentWrapper, "[rdxPopperContentWrapper]", never, { "anchor": { "alias": "anchor"; "required": false; "isSignal": true; }; "side": { "alias": "side"; "required": false; "isSignal": true; }; "sideOffset": { "alias": "sideOffset"; "required": false; "isSignal": true; }; "align": { "alias": "align"; "required": false; "isSignal": true; }; "alignOffset": { "alias": "alignOffset"; "required": false; "isSignal": true; }; "arrowPadding": { "alias": "arrowPadding"; "required": false; "isSignal": true; }; "avoidCollisions": { "alias": "avoidCollisions"; "required": false; "isSignal": true; }; "collisionBoundary": { "alias": "collisionBoundary"; "required": false; "isSignal": true; }; "collisionPadding": { "alias": "collisionPadding"; "required": false; "isSignal": true; }; "sticky": { "alias": "sticky"; "required": false; "isSignal": true; }; "hideWhenDetached": { "alias": "hideWhenDetached"; "required": false; "isSignal": true; }; "positionStrategy": { "alias": "positionStrategy"; "required": false; "isSignal": true; }; "updatePositionStrategy": { "alias": "updatePositionStrategy"; "required": false; "isSignal": true; }; }, { "placed": "placed"; }, ["arrow"], never, true, never>;
221
224
  }
225
+ /**
226
+ * Providers a "thin" positioner that `extends RdxPopperContentWrapper` must include. Angular
227
+ * inherits a base directive's inputs/outputs/host bindings/queries but **not** its `providers`, so
228
+ * the `useExisting` alias (lets the popup and arrow resolve the subclass through the
229
+ * {@link RdxPopperContentWrapper} token) and the wrapper context provider (what
230
+ * `injectPopperContentWrapperContext()` reads) are re-declared here in one place.
231
+ *
232
+ * Combine with {@link provideRdxPopperContentConfig} for per-primitive positioning defaults:
233
+ *
234
+ * ```ts
235
+ * providers: [
236
+ * ...provideRdxPopperContentWrapper(RdxComboboxPositioner),
237
+ * provideRdxPopperContentConfig({ sideOffset: 4, align: 'start' })
238
+ * ]
239
+ * ```
240
+ */
241
+ declare function provideRdxPopperContentWrapper(positioner: Type<RdxPopperContentWrapper>): Provider[];
242
+ /**
243
+ * Deprecated per-primitive aliases of the unified popper variables (ADR 0012). Since the wrapper now
244
+ * emits the unified `--anchor-*` / `--available-*` / `--transform-origin` set itself, a positioner no
245
+ * longer hand-writes a re-namespacing `[style]` map; it spreads this helper into a host `[style]`
246
+ * binding only to keep the legacy `--radix-<name>-content-*` / `--radix-<name>-trigger-*` names alive
247
+ * for one release of consumer back-compat. Migrate to the unified set; these are removed next minor.
248
+ *
249
+ * @deprecated Use the unified `--anchor-*` / `--available-*` / `--transform-origin` variables.
250
+ */
251
+ declare function legacyPopperVars(name: string): Record<string, string>;
222
252
 
223
253
  declare class RdxPopperArrow {
224
254
  private readonly popperContentContext;
@@ -264,7 +294,7 @@ interface RdxPopperContentConfig {
264
294
  declare const RdxPopperContentConfigToken: InjectionToken<RdxPopperContentConfig>;
265
295
  declare function provideRdxPopperContentConfig(config: RdxPopperContentConfig): Provider;
266
296
 
267
- declare const popperImports: (typeof RdxPopperAnchor | typeof RdxPopper | typeof RdxPopperContent | typeof RdxPopperContentWrapper)[];
297
+ declare const popperImports: (typeof RdxPopperAnchor | typeof RdxPopper | typeof RdxPopperContentWrapper | typeof RdxPopperContent)[];
268
298
 
269
- export { RdxPopper, RdxPopperAnchor, RdxPopperArrow, RdxPopperContent, RdxPopperContentConfigToken, RdxPopperContentWrapper, getSideAndAlignFromPlacement, injectPopperContentWrapperContext, isNotNull, popperImports, providePopperContentWrapperContext, provideRdxPopperContentConfig, transformOrigin };
299
+ export { RdxPopper, RdxPopperAnchor, RdxPopperArrow, RdxPopperContent, RdxPopperContentConfigToken, RdxPopperContentWrapper, getSideAndAlignFromPlacement, injectPopperContentWrapperContext, isNotNull, legacyPopperVars, popperImports, providePopperContentWrapperContext, provideRdxPopperContentConfig, provideRdxPopperContentWrapper, transformOrigin };
270
300
  export type { Align, PopperContentWrapperContext, RdxPopperAnchorElement, RdxPopperContentConfig, Side };