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

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 (45) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +76 -6
  3. package/fesm2022/radix-ng-primitives-alert-dialog.mjs +30 -24
  4. package/fesm2022/radix-ng-primitives-alert-dialog.mjs.map +1 -1
  5. package/fesm2022/radix-ng-primitives-autocomplete.mjs +1786 -0
  6. package/fesm2022/radix-ng-primitives-autocomplete.mjs.map +1 -0
  7. package/fesm2022/radix-ng-primitives-combobox.mjs +107 -47
  8. package/fesm2022/radix-ng-primitives-combobox.mjs.map +1 -1
  9. package/fesm2022/radix-ng-primitives-dialog.mjs +43 -45
  10. package/fesm2022/radix-ng-primitives-dialog.mjs.map +1 -1
  11. package/fesm2022/radix-ng-primitives-drawer.mjs +153 -63
  12. package/fesm2022/radix-ng-primitives-drawer.mjs.map +1 -1
  13. package/fesm2022/radix-ng-primitives-menu.mjs +40 -20
  14. package/fesm2022/radix-ng-primitives-menu.mjs.map +1 -1
  15. package/fesm2022/radix-ng-primitives-navigation-menu.mjs +38 -54
  16. package/fesm2022/radix-ng-primitives-navigation-menu.mjs.map +1 -1
  17. package/fesm2022/radix-ng-primitives-popover.mjs +35 -50
  18. package/fesm2022/radix-ng-primitives-popover.mjs.map +1 -1
  19. package/fesm2022/radix-ng-primitives-popper.mjs +11 -5
  20. package/fesm2022/radix-ng-primitives-popper.mjs.map +1 -1
  21. package/fesm2022/radix-ng-primitives-portal.mjs +107 -17
  22. package/fesm2022/radix-ng-primitives-portal.mjs.map +1 -1
  23. package/fesm2022/radix-ng-primitives-presence.mjs +262 -79
  24. package/fesm2022/radix-ng-primitives-presence.mjs.map +1 -1
  25. package/fesm2022/radix-ng-primitives-preview-card.mjs +36 -50
  26. package/fesm2022/radix-ng-primitives-preview-card.mjs.map +1 -1
  27. package/fesm2022/radix-ng-primitives-select.mjs +106 -92
  28. package/fesm2022/radix-ng-primitives-select.mjs.map +1 -1
  29. package/fesm2022/radix-ng-primitives-tooltip.mjs +37 -40
  30. package/fesm2022/radix-ng-primitives-tooltip.mjs.map +1 -1
  31. package/package.json +5 -1
  32. package/types/radix-ng-primitives-alert-dialog.d.ts +17 -11
  33. package/types/radix-ng-primitives-autocomplete.d.ts +596 -0
  34. package/types/radix-ng-primitives-combobox.d.ts +61 -16
  35. package/types/radix-ng-primitives-dialog.d.ts +32 -25
  36. package/types/radix-ng-primitives-drawer.d.ts +49 -22
  37. package/types/radix-ng-primitives-menu.d.ts +19 -10
  38. package/types/radix-ng-primitives-navigation-menu.d.ts +24 -26
  39. package/types/radix-ng-primitives-popover.d.ts +23 -23
  40. package/types/radix-ng-primitives-popper.d.ts +7 -1
  41. package/types/radix-ng-primitives-portal.d.ts +53 -8
  42. package/types/radix-ng-primitives-presence.d.ts +98 -17
  43. package/types/radix-ng-primitives-preview-card.d.ts +24 -23
  44. package/types/radix-ng-primitives-select.d.ts +52 -55
  45. package/types/radix-ng-primitives-tooltip.d.ts +26 -19
@@ -2,13 +2,13 @@ import * as _angular_core from '@angular/core';
2
2
  import { Signal, ElementRef } from '@angular/core';
3
3
  import * as i1 from '@radix-ng/primitives/popper';
4
4
  import * as _radix_ng_primitives_core from '@radix-ng/primitives/core';
5
- import { AcceptableValue, Direction, ItemValueComparator, BooleanInput } from '@radix-ng/primitives/core';
5
+ import { AcceptableValue, Direction, BooleanInput, ItemValueComparator } from '@radix-ng/primitives/core';
6
6
  import { ControlValueAccessor } from '@angular/forms';
7
7
  import * as _radix_ng_primitives_combobox from '@radix-ng/primitives/combobox';
8
8
  import * as i1$1 from '@radix-ng/primitives/dismissable-layer';
9
9
  import * as _radix_ng_primitives_types_radix_ng_primitives_core from '@radix-ng/primitives/types/radix-ng-primitives-core';
10
10
  import * as i1$2 from '@radix-ng/primitives/portal';
11
- import * as i1$3 from '@radix-ng/primitives/presence';
11
+ import { RdxPortalContainer } from '@radix-ng/primitives/portal';
12
12
 
13
13
  /**
14
14
  * Optional positioning anchor for the popup. Put it on the element the popup should align to — for
@@ -98,6 +98,8 @@ declare const context: () => {
98
98
  highlightIndex: (index: number, reason: ComboboxHighlightReason) => void;
99
99
  setHighlight: (item: ComboboxItemRef, reason: ComboboxHighlightReason) => void;
100
100
  clearHighlight: () => void;
101
+ highlightItemOnHover: _angular_core.InputSignalWithTransform<boolean, unknown>;
102
+ keepHighlight: _angular_core.InputSignalWithTransform<boolean, unknown>;
101
103
  inputElement: Signal<HTMLInputElement | null>;
102
104
  setInputElement: (el: HTMLInputElement | null) => void;
103
105
  registerTrigger: (el: HTMLElement | null) => HTMLElement | null;
@@ -157,6 +159,8 @@ declare const injectComboboxRootContext: _radix_ng_primitives_core.InjectContext
157
159
  highlightIndex: (index: number, reason: ComboboxHighlightReason) => void;
158
160
  setHighlight: (item: ComboboxItemRef, reason: ComboboxHighlightReason) => void;
159
161
  clearHighlight: () => void;
162
+ highlightItemOnHover: _angular_core.InputSignalWithTransform<boolean, unknown>;
163
+ keepHighlight: _angular_core.InputSignalWithTransform<boolean, unknown>;
160
164
  inputElement: Signal<HTMLInputElement | null>;
161
165
  setInputElement: (el: HTMLInputElement | null) => void;
162
166
  registerTrigger: (el: HTMLElement | null) => HTMLElement | null;
@@ -215,6 +219,8 @@ declare const provideComboboxRootContext: (useFactory: () => {
215
219
  highlightIndex: (index: number, reason: ComboboxHighlightReason) => void;
216
220
  setHighlight: (item: ComboboxItemRef, reason: ComboboxHighlightReason) => void;
217
221
  clearHighlight: () => void;
222
+ highlightItemOnHover: _angular_core.InputSignalWithTransform<boolean, unknown>;
223
+ keepHighlight: _angular_core.InputSignalWithTransform<boolean, unknown>;
218
224
  inputElement: Signal<HTMLInputElement | null>;
219
225
  setInputElement: (el: HTMLInputElement | null) => void;
220
226
  registerTrigger: (el: HTMLElement | null) => HTMLElement | null;
@@ -280,12 +286,24 @@ declare class RdxComboboxRoot implements ControlValueAccessor {
280
286
  /**
281
287
  * Auto-highlight behavior:
282
288
  * - `false` (default): never auto-highlight;
283
- * - `true` / `'input-change'`: highlight the first match as the query changes;
289
+ * - `true` (also the bare `autoHighlight` attribute) / `'input-change'`: highlight the first match as the query changes;
284
290
  * - `'always'`: keep the first navigable item highlighted whenever the popup is open.
285
291
  */
286
- readonly autoHighlight: _angular_core.InputSignal<boolean | "always" | "input-change">;
292
+ readonly autoHighlight: _angular_core.InputSignalWithTransform<boolean | "always" | "input-change", BooleanInput>;
287
293
  /** Resolved auto-highlight mode. */
288
294
  readonly autoHighlightMode: Signal<"always" | "input-change" | "off">;
295
+ /**
296
+ * Whether moving the pointer over an item highlights it. `true` (default) paints `data-highlighted`
297
+ * on hover; `false` suppresses hover-driven highlight entirely, letting CSS `:hover` stay distinct
298
+ * from the `data-highlighted` (keyboard) state. Clicking an item still selects it.
299
+ */
300
+ readonly highlightItemOnHover: _angular_core.InputSignalWithTransform<boolean, unknown>;
301
+ /**
302
+ * Whether a pointer-driven highlight is kept when the cursor leaves the list. `false` (default)
303
+ * clears the highlight on pointer-leave; `true` retains the last hovered item highlighted. Keyboard
304
+ * navigation and auto-highlight are unaffected.
305
+ */
306
+ readonly keepHighlight: _angular_core.InputSignalWithTransform<boolean, unknown>;
289
307
  /** Whether clicking the input opens the popup. */
290
308
  readonly openOnInputClick: _angular_core.InputSignalWithTransform<boolean, unknown>;
291
309
  /** Whether the popup is modal: locks page scroll and makes outside content inert while open. */
@@ -447,7 +465,7 @@ declare class RdxComboboxRoot implements ControlValueAccessor {
447
465
  registerOnTouched(fn: () => void): void;
448
466
  setDisabledState(isDisabled: boolean): void;
449
467
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdxComboboxRoot, never>;
450
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxComboboxRoot, "[rdxComboboxRoot]", ["rdxComboboxRoot"], { "value": { "alias": "value"; "required": false; "isSignal": true; }; "defaultValue": { "alias": "defaultValue"; "required": false; "isSignal": true; }; "inputValue": { "alias": "inputValue"; "required": false; "isSignal": true; }; "open": { "alias": "open"; "required": false; "isSignal": true; }; "defaultOpen": { "alias": "defaultOpen"; "required": false; "isSignal": true; }; "multipleInput": { "alias": "multiple"; "required": false; "isSignal": true; }; "selectionMode": { "alias": "selectionMode"; "required": false; "isSignal": true; }; "fillInputOnItemPress": { "alias": "fillInputOnItemPress"; "required": false; "isSignal": true; }; "dir": { "alias": "dir"; "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; }; "loopFocus": { "alias": "loopFocus"; "required": false; "isSignal": true; }; "autoHighlight": { "alias": "autoHighlight"; "required": false; "isSignal": true; }; "openOnInputClick": { "alias": "openOnInputClick"; "required": false; "isSignal": true; }; "modal": { "alias": "modal"; "required": false; "isSignal": true; }; "submitOnItemClick": { "alias": "submitOnItemClick"; "required": false; "isSignal": true; }; "filter": { "alias": "filter"; "required": false; "isSignal": true; }; "limit": { "alias": "limit"; "required": false; "isSignal": true; }; "items": { "alias": "items"; "required": false; "isSignal": true; }; "virtualized": { "alias": "virtualized"; "required": false; "isSignal": true; }; "by": { "alias": "by"; "required": false; "isSignal": true; }; "itemToStringLabel": { "alias": "itemToStringLabel"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "inputValue": "inputValueChange"; "open": "openChange"; "onValueChange": "onValueChange"; "onInputValueChange": "onInputValueChange"; "onOpenChange": "onOpenChange"; "onItemHighlighted": "onItemHighlighted"; "onOpenChangeComplete": "onOpenChangeComplete"; }, never, never, true, [{ directive: typeof i1.RdxPopper; inputs: {}; outputs: {}; }]>;
468
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxComboboxRoot, "[rdxComboboxRoot]", ["rdxComboboxRoot"], { "value": { "alias": "value"; "required": false; "isSignal": true; }; "defaultValue": { "alias": "defaultValue"; "required": false; "isSignal": true; }; "inputValue": { "alias": "inputValue"; "required": false; "isSignal": true; }; "open": { "alias": "open"; "required": false; "isSignal": true; }; "defaultOpen": { "alias": "defaultOpen"; "required": false; "isSignal": true; }; "multipleInput": { "alias": "multiple"; "required": false; "isSignal": true; }; "selectionMode": { "alias": "selectionMode"; "required": false; "isSignal": true; }; "fillInputOnItemPress": { "alias": "fillInputOnItemPress"; "required": false; "isSignal": true; }; "dir": { "alias": "dir"; "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; }; "loopFocus": { "alias": "loopFocus"; "required": false; "isSignal": true; }; "autoHighlight": { "alias": "autoHighlight"; "required": false; "isSignal": true; }; "highlightItemOnHover": { "alias": "highlightItemOnHover"; "required": false; "isSignal": true; }; "keepHighlight": { "alias": "keepHighlight"; "required": false; "isSignal": true; }; "openOnInputClick": { "alias": "openOnInputClick"; "required": false; "isSignal": true; }; "modal": { "alias": "modal"; "required": false; "isSignal": true; }; "submitOnItemClick": { "alias": "submitOnItemClick"; "required": false; "isSignal": true; }; "filter": { "alias": "filter"; "required": false; "isSignal": true; }; "limit": { "alias": "limit"; "required": false; "isSignal": true; }; "items": { "alias": "items"; "required": false; "isSignal": true; }; "virtualized": { "alias": "virtualized"; "required": false; "isSignal": true; }; "by": { "alias": "by"; "required": false; "isSignal": true; }; "itemToStringLabel": { "alias": "itemToStringLabel"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "inputValue": "inputValueChange"; "open": "openChange"; "onValueChange": "onValueChange"; "onInputValueChange": "onInputValueChange"; "onOpenChange": "onOpenChange"; "onItemHighlighted": "onItemHighlighted"; "onOpenChangeComplete": "onOpenChangeComplete"; }, never, never, true, [{ directive: typeof i1.RdxPopper; inputs: {}; outputs: {}; }]>;
451
469
  }
452
470
 
453
471
  /**
@@ -509,6 +527,8 @@ declare class RdxComboboxInput {
509
527
  highlightIndex: (index: number, reason: _radix_ng_primitives_combobox.ComboboxHighlightReason) => void;
510
528
  setHighlight: (item: _radix_ng_primitives_combobox.ComboboxItemRef, reason: _radix_ng_primitives_combobox.ComboboxHighlightReason) => void;
511
529
  clearHighlight: () => void;
530
+ highlightItemOnHover: _angular_core.InputSignalWithTransform<boolean, unknown>;
531
+ keepHighlight: _angular_core.InputSignalWithTransform<boolean, unknown>;
512
532
  inputElement: _angular_core.Signal<HTMLInputElement | null>;
513
533
  setInputElement: (el: HTMLInputElement | null) => void;
514
534
  registerTrigger: (el: HTMLElement | null) => HTMLElement | null;
@@ -624,6 +644,8 @@ declare class RdxComboboxTrigger {
624
644
  highlightIndex: (index: number, reason: _radix_ng_primitives_combobox.ComboboxHighlightReason) => void;
625
645
  setHighlight: (item: _radix_ng_primitives_combobox.ComboboxItemRef, reason: _radix_ng_primitives_combobox.ComboboxHighlightReason) => void;
626
646
  clearHighlight: () => void;
647
+ highlightItemOnHover: _angular_core.InputSignalWithTransform<boolean, unknown>;
648
+ keepHighlight: _angular_core.InputSignalWithTransform<boolean, unknown>;
627
649
  inputElement: _angular_core.Signal<HTMLInputElement | null>;
628
650
  setInputElement: (el: HTMLInputElement | null) => void;
629
651
  registerTrigger: (el: HTMLElement | null) => HTMLElement | null;
@@ -705,6 +727,8 @@ declare class RdxComboboxClear {
705
727
  highlightIndex: (index: number, reason: _radix_ng_primitives_combobox.ComboboxHighlightReason) => void;
706
728
  setHighlight: (item: _radix_ng_primitives_combobox.ComboboxItemRef, reason: _radix_ng_primitives_combobox.ComboboxHighlightReason) => void;
707
729
  clearHighlight: () => void;
730
+ highlightItemOnHover: _angular_core.InputSignalWithTransform<boolean, unknown>;
731
+ keepHighlight: _angular_core.InputSignalWithTransform<boolean, unknown>;
708
732
  inputElement: _angular_core.Signal<HTMLInputElement | null>;
709
733
  setInputElement: (el: HTMLInputElement | null) => void;
710
734
  registerTrigger: (el: HTMLElement | null) => HTMLElement | null;
@@ -732,24 +756,36 @@ declare class RdxComboboxClear {
732
756
  }
733
757
 
734
758
  /**
735
- * Teleports the popup into a container (default `document.body`).
759
+ * Structural directive that teleports the combobox popup into a container (default `document.body`)
760
+ * while the combobox is open, and keeps it mounted until any CSS exit `@keyframes` finishes.
761
+ *
762
+ * Apply it with the `*` microsyntax on the positioner —
763
+ * `<div *rdxComboboxPortal rdxComboboxPositioner>` — or as an explicit `<ng-template rdxComboboxPortal>`.
764
+ * For a custom container use the explicit form with `[container]`.
736
765
  *
737
766
  * @group Components
738
767
  */
739
768
  declare class RdxComboboxPortal {
769
+ /**
770
+ * Optional container to portal the content into. Defaults to `document.body`. Declared here (and
771
+ * forwarded to the composed {@link RdxPortalPresence}) so the autocomplete portal can re-expose it
772
+ * through its own `hostDirectives`.
773
+ */
774
+ readonly container: _angular_core.InputSignal<RdxPortalContainer | undefined>;
740
775
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdxComboboxPortal, never>;
741
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxComboboxPortal, "[rdxComboboxPortal]", ["rdxComboboxPortal"], {}, {}, never, never, true, [{ directive: typeof i1$2.RdxPortal; inputs: { "container": "container"; }; outputs: {}; }]>;
776
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxComboboxPortal, "ng-template[rdxComboboxPortal]", ["rdxComboboxPortal"], { "container": { "alias": "container"; "required": false; "isSignal": true; }; }, {}, never, never, true, [{ directive: typeof i1$2.RdxPortalPresence; inputs: { "container": "container"; }; outputs: {}; }]>;
742
777
  }
743
-
744
778
  /**
745
- * Wraps the popup template in {@link RdxPresenceDirective} so it mounts/unmounts with the open state
746
- * and can run enter/leave animations.
779
+ * Dev-mode guard: `rdxComboboxPortal` used to be an attribute directive on a `<div>`. It is now
780
+ * structural, so the old `<div rdxComboboxPortal>` markup would silently stop portaling — fail loudly
781
+ * instead.
747
782
  *
748
783
  * @group Components
749
784
  */
750
- declare class RdxComboboxPortalPresence {
751
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdxComboboxPortalPresence, never>;
752
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxComboboxPortalPresence, "ng-template[rdxComboboxPortalPresence]", never, {}, {}, never, never, true, [{ directive: typeof i1$3.RdxPresenceDirective; inputs: {}; outputs: {}; }]>;
785
+ declare class RdxComboboxPortalMisuseGuard {
786
+ constructor();
787
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdxComboboxPortalMisuseGuard, never>;
788
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxComboboxPortalMisuseGuard, "[rdxComboboxPortal]:not(ng-template)", never, {}, {}, never, never, true, never>;
753
789
  }
754
790
 
755
791
  /**
@@ -798,6 +834,8 @@ declare class RdxComboboxBackdrop {
798
834
  highlightIndex: (index: number, reason: _radix_ng_primitives_combobox.ComboboxHighlightReason) => void;
799
835
  setHighlight: (item: _radix_ng_primitives_combobox.ComboboxItemRef, reason: _radix_ng_primitives_combobox.ComboboxHighlightReason) => void;
800
836
  clearHighlight: () => void;
837
+ highlightItemOnHover: _angular_core.InputSignalWithTransform<boolean, unknown>;
838
+ keepHighlight: _angular_core.InputSignalWithTransform<boolean, unknown>;
801
839
  inputElement: _angular_core.Signal<HTMLInputElement | null>;
802
840
  setInputElement: (el: HTMLInputElement | null) => void;
803
841
  registerTrigger: (el: HTMLElement | null) => HTMLElement | null;
@@ -831,7 +869,7 @@ declare class RdxComboboxBackdrop {
831
869
  declare class RdxComboboxPositioner {
832
870
  readonly side: _angular_core.InputSignal<"top" | "right" | "bottom" | "left">;
833
871
  readonly sideOffset: _angular_core.InputSignalWithTransform<number, unknown>;
834
- readonly align: _angular_core.InputSignal<"center" | "start" | "end">;
872
+ readonly align: _angular_core.InputSignal<"center" | "end" | "start">;
835
873
  readonly alignOffset: _angular_core.InputSignalWithTransform<number, unknown>;
836
874
  readonly arrowPadding: _angular_core.InputSignalWithTransform<number, unknown>;
837
875
  readonly avoidCollisions: _angular_core.InputSignalWithTransform<boolean, unknown>;
@@ -889,6 +927,8 @@ declare class RdxComboboxPopup {
889
927
  highlightIndex: (index: number, reason: _radix_ng_primitives_combobox.ComboboxHighlightReason) => void;
890
928
  setHighlight: (item: _radix_ng_primitives_combobox.ComboboxItemRef, reason: _radix_ng_primitives_combobox.ComboboxHighlightReason) => void;
891
929
  clearHighlight: () => void;
930
+ highlightItemOnHover: _angular_core.InputSignalWithTransform<boolean, unknown>;
931
+ keepHighlight: _angular_core.InputSignalWithTransform<boolean, unknown>;
892
932
  inputElement: _angular_core.Signal<HTMLInputElement | null>;
893
933
  setInputElement: (el: HTMLInputElement | null) => void;
894
934
  registerTrigger: (el: HTMLElement | null) => HTMLElement | null;
@@ -972,6 +1012,8 @@ declare class RdxComboboxList {
972
1012
  highlightIndex: (index: number, reason: _radix_ng_primitives_combobox.ComboboxHighlightReason) => void;
973
1013
  setHighlight: (item: _radix_ng_primitives_combobox.ComboboxItemRef, reason: _radix_ng_primitives_combobox.ComboboxHighlightReason) => void;
974
1014
  clearHighlight: () => void;
1015
+ highlightItemOnHover: _angular_core.InputSignalWithTransform<boolean, unknown>;
1016
+ keepHighlight: _angular_core.InputSignalWithTransform<boolean, unknown>;
975
1017
  inputElement: _angular_core.Signal<HTMLInputElement | null>;
976
1018
  setInputElement: (el: HTMLInputElement | null) => void;
977
1019
  registerTrigger: (el: HTMLElement | null) => HTMLElement | null;
@@ -1051,6 +1093,7 @@ declare class RdxComboboxItem implements ComboboxItemRef {
1051
1093
  onPointerDown(event: MouseEvent): void;
1052
1094
  onPointerUp(): void;
1053
1095
  onPointerMove(): void;
1096
+ onPointerLeave(event: PointerEvent): void;
1054
1097
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdxComboboxItem, never>;
1055
1098
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxComboboxItem, "[rdxComboboxItem]", ["rdxComboboxItem"], { "value": { "alias": "value"; "required": true; "isSignal": true; }; "textValueInput": { "alias": "textValue"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "index": { "alias": "index"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
1056
1099
  }
@@ -1162,6 +1205,8 @@ declare class RdxComboboxEmpty {
1162
1205
  highlightIndex: (index: number, reason: _radix_ng_primitives_combobox.ComboboxHighlightReason) => void;
1163
1206
  setHighlight: (item: _radix_ng_primitives_combobox.ComboboxItemRef, reason: _radix_ng_primitives_combobox.ComboboxHighlightReason) => void;
1164
1207
  clearHighlight: () => void;
1208
+ highlightItemOnHover: _angular_core.InputSignalWithTransform<boolean, unknown>;
1209
+ keepHighlight: _angular_core.InputSignalWithTransform<boolean, unknown>;
1165
1210
  inputElement: _angular_core.Signal<HTMLInputElement | null>;
1166
1211
  setInputElement: (el: HTMLInputElement | null) => void;
1167
1212
  registerTrigger: (el: HTMLElement | null) => HTMLElement | null;
@@ -1257,9 +1302,9 @@ declare class RdxComboboxChipRemove {
1257
1302
  declare const _importsCombobox: (typeof RdxComboboxAnchor)[];
1258
1303
  declare class RdxComboboxModule {
1259
1304
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdxComboboxModule, never>;
1260
- static ɵmod: _angular_core.ɵɵNgModuleDeclaration<RdxComboboxModule, never, [typeof RdxComboboxRoot, typeof RdxComboboxAnchor, typeof RdxComboboxLabel, typeof RdxComboboxInput, typeof RdxComboboxValue, typeof RdxComboboxTrigger, typeof RdxComboboxIcon, typeof RdxComboboxClear, typeof RdxComboboxPortal, typeof RdxComboboxPortalPresence, typeof RdxComboboxBackdrop, typeof RdxComboboxPositioner, typeof RdxComboboxPopup, typeof RdxComboboxArrow, typeof RdxComboboxList, typeof RdxComboboxItem, typeof RdxComboboxItemIndicator, typeof RdxComboboxGroup, typeof RdxComboboxGroupLabel, typeof RdxComboboxEmpty, typeof RdxComboboxStatus, typeof RdxComboboxChips, typeof RdxComboboxChip, typeof RdxComboboxChipRemove], [typeof RdxComboboxRoot, typeof RdxComboboxAnchor, typeof RdxComboboxLabel, typeof RdxComboboxInput, typeof RdxComboboxValue, typeof RdxComboboxTrigger, typeof RdxComboboxIcon, typeof RdxComboboxClear, typeof RdxComboboxPortal, typeof RdxComboboxPortalPresence, typeof RdxComboboxBackdrop, typeof RdxComboboxPositioner, typeof RdxComboboxPopup, typeof RdxComboboxArrow, typeof RdxComboboxList, typeof RdxComboboxItem, typeof RdxComboboxItemIndicator, typeof RdxComboboxGroup, typeof RdxComboboxGroupLabel, typeof RdxComboboxEmpty, typeof RdxComboboxStatus, typeof RdxComboboxChips, typeof RdxComboboxChip, typeof RdxComboboxChipRemove]>;
1305
+ static ɵmod: _angular_core.ɵɵNgModuleDeclaration<RdxComboboxModule, never, [typeof RdxComboboxRoot, typeof RdxComboboxAnchor, typeof RdxComboboxLabel, typeof RdxComboboxInput, typeof RdxComboboxValue, typeof RdxComboboxTrigger, typeof RdxComboboxIcon, typeof RdxComboboxClear, typeof RdxComboboxPortal, typeof RdxComboboxPortalMisuseGuard, typeof RdxComboboxBackdrop, typeof RdxComboboxPositioner, typeof RdxComboboxPopup, typeof RdxComboboxArrow, typeof RdxComboboxList, typeof RdxComboboxItem, typeof RdxComboboxItemIndicator, typeof RdxComboboxGroup, typeof RdxComboboxGroupLabel, typeof RdxComboboxEmpty, typeof RdxComboboxStatus, typeof RdxComboboxChips, typeof RdxComboboxChip, typeof RdxComboboxChipRemove], [typeof RdxComboboxRoot, typeof RdxComboboxAnchor, typeof RdxComboboxLabel, typeof RdxComboboxInput, typeof RdxComboboxValue, typeof RdxComboboxTrigger, typeof RdxComboboxIcon, typeof RdxComboboxClear, typeof RdxComboboxPortal, typeof RdxComboboxPortalMisuseGuard, typeof RdxComboboxBackdrop, typeof RdxComboboxPositioner, typeof RdxComboboxPopup, typeof RdxComboboxArrow, typeof RdxComboboxList, typeof RdxComboboxItem, typeof RdxComboboxItemIndicator, typeof RdxComboboxGroup, typeof RdxComboboxGroupLabel, typeof RdxComboboxEmpty, typeof RdxComboboxStatus, typeof RdxComboboxChips, typeof RdxComboboxChip, typeof RdxComboboxChipRemove]>;
1261
1306
  static ɵinj: _angular_core.ɵɵInjectorDeclaration<RdxComboboxModule>;
1262
1307
  }
1263
1308
 
1264
- export { RdxComboboxAnchor, RdxComboboxArrow, RdxComboboxBackdrop, RdxComboboxChip, RdxComboboxChipRemove, RdxComboboxChips, RdxComboboxClear, RdxComboboxEmpty, RdxComboboxGroup, RdxComboboxGroupLabel, RdxComboboxIcon, RdxComboboxInput, RdxComboboxItem, RdxComboboxItemIndicator, RdxComboboxLabel, RdxComboboxList, RdxComboboxModule, RdxComboboxPopup, RdxComboboxPortal, RdxComboboxPortalPresence, RdxComboboxPositioner, RdxComboboxRoot, RdxComboboxStatus, RdxComboboxTrigger, RdxComboboxValue, _importsCombobox, injectComboboxChipContext, injectComboboxGroupContext, injectComboboxItemContext, injectComboboxRootContext, provideComboboxChipContext, provideComboboxGroupContext, provideComboboxItemContext, provideComboboxRootContext };
1309
+ export { RdxComboboxAnchor, RdxComboboxArrow, RdxComboboxBackdrop, RdxComboboxChip, RdxComboboxChipRemove, RdxComboboxChips, RdxComboboxClear, RdxComboboxEmpty, RdxComboboxGroup, RdxComboboxGroupLabel, RdxComboboxIcon, RdxComboboxInput, RdxComboboxItem, RdxComboboxItemIndicator, RdxComboboxLabel, RdxComboboxList, RdxComboboxModule, RdxComboboxPopup, RdxComboboxPortal, RdxComboboxPortalMisuseGuard, RdxComboboxPositioner, RdxComboboxRoot, RdxComboboxStatus, RdxComboboxTrigger, RdxComboboxValue, _importsCombobox, injectComboboxChipContext, injectComboboxGroupContext, injectComboboxItemContext, injectComboboxRootContext, provideComboboxChipContext, provideComboboxGroupContext, provideComboboxItemContext, provideComboboxRootContext };
1265
1310
  export type { ComboboxFilter, ComboboxHighlightReason, ComboboxItemHighlightedDetails, ComboboxItemRef, ComboboxValue, RdxComboboxChipContext, RdxComboboxGroupContext, RdxComboboxItemContext, RdxComboboxRootContext };
@@ -1,20 +1,40 @@
1
1
  import * as _angular_core from '@angular/core';
2
2
  import { InjectionToken, Provider, Signal, ElementRef } from '@angular/core';
3
- import * as i1 from '@radix-ng/primitives/presence';
3
+ import * as i1 from '@radix-ng/primitives/portal';
4
+ import { RdxPortalContainer } from '@radix-ng/primitives/portal';
4
5
  import * as _radix_ng_primitives_core from '@radix-ng/primitives/core';
5
6
  import { RdxTransitionStatus, BooleanInput } from '@radix-ng/primitives/core';
6
7
  import * as _radix_ng_primitives_dialog from '@radix-ng/primitives/dialog';
7
- import * as i1$1 from '@radix-ng/primitives/portal';
8
- import { RdxPortalContainer } from '@radix-ng/primitives/portal';
9
- import * as i1$2 from '@radix-ng/primitives/dismissable-layer';
8
+ import * as i1$1 from '@radix-ng/primitives/dismissable-layer';
10
9
  import * as i2 from '@radix-ng/primitives/focus-scope';
11
10
 
12
11
  /**
13
- * Mounts the portal while the dialog is open and waits for CSS exit keyframes before unmounting.
12
+ * Structural directive that teleports the dialog content (backdrop + popup) into a container (default
13
+ * `document.body`) while the dialog is open, and keeps it mounted until the CSS exit `@keyframes` on
14
+ * every root element finish.
15
+ *
16
+ * Dialog has two root nodes (backdrop + popup), so use the explicit `<ng-template rdxDialogPortal>`
17
+ * form. Pass `[container]` to portal into a different element.
18
+ */
19
+ declare class RdxDialogPortal {
20
+ /**
21
+ * Optional container to portal the content into. Defaults to `document.body`. Declared here (and
22
+ * forwarded to the composed {@link RdxPortalPresence}) so that the drawer and alert-dialog portals
23
+ * can re-expose it through their own `hostDirectives`.
24
+ */
25
+ readonly container: _angular_core.InputSignal<RdxPortalContainer | undefined>;
26
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdxDialogPortal, never>;
27
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxDialogPortal, "ng-template[rdxDialogPortal]", ["rdxDialogPortal"], { "container": { "alias": "container"; "required": false; "isSignal": true; }; }, {}, never, never, true, [{ directive: typeof i1.RdxPortalPresence; inputs: { "container": "container"; }; outputs: {}; }]>;
28
+ }
29
+ /**
30
+ * Dev-mode guard: `rdxDialogPortal` used to be an attribute directive on a `<div>`. It is now
31
+ * structural, so the old `<div rdxDialogPortal>` markup would silently stop portaling — fail loudly
32
+ * instead.
14
33
  */
15
- declare class RdxDialogPortalPresence {
16
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdxDialogPortalPresence, never>;
17
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxDialogPortalPresence, "ng-template[rdxDialogPortalPresence]", never, {}, {}, never, never, true, [{ directive: typeof i1.RdxPresenceDirective; inputs: {}; outputs: {}; }]>;
34
+ declare class RdxDialogPortalMisuseGuard {
35
+ constructor();
36
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdxDialogPortalMisuseGuard, never>;
37
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxDialogPortalMisuseGuard, "[rdxDialogPortal]:not(ng-template)", never, {}, {}, never, never, true, never>;
18
38
  }
19
39
 
20
40
  /**
@@ -210,19 +230,6 @@ declare class RdxDialogTrigger {
210
230
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxDialogTrigger, "button[rdxDialogTrigger]", ["rdxDialogTrigger"], { "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; }; }, {}, never, never, true, never>;
211
231
  }
212
232
 
213
- /**
214
- * Moves the dialog to a different part of the DOM.
215
- */
216
- declare class RdxDialogPortal {
217
- protected readonly rootContext: _radix_ng_primitives_dialog.RdxDialogRootContext;
218
- /**
219
- * Optional container to portal the content into. Defaults to `document.body`.
220
- */
221
- readonly container: _angular_core.InputSignal<RdxPortalContainer | undefined>;
222
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdxDialogPortal, never>;
223
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxDialogPortal, "[rdxDialogPortal]", ["rdxDialogPortal"], { "container": { "alias": "container"; "required": false; "isSignal": true; }; }, {}, never, never, true, [{ directive: typeof i1$1.RdxPortal; inputs: { "container": "container"; }; outputs: {}; }]>;
224
- }
225
-
226
233
  /**
227
234
  * An overlay displayed beneath the dialog popup.
228
235
  */
@@ -279,7 +286,7 @@ declare class RdxDialogPopup {
279
286
  constructor();
280
287
  private isEventOnTrigger;
281
288
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdxDialogPopup, never>;
282
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxDialogPopup, "[rdxDialogPopup]", ["rdxDialogPopup"], {}, { "escapeKeyDown": "escapeKeyDown"; "pointerDownOutside": "pointerDownOutside"; "focusOutside": "focusOutside"; "interactOutside": "interactOutside"; "openAutoFocus": "openAutoFocus"; "closeAutoFocus": "closeAutoFocus"; }, never, never, true, [{ directive: typeof i1$2.RdxDismissableLayer; inputs: {}; outputs: {}; }, { directive: typeof i2.RdxFocusScope; inputs: {}; outputs: {}; }]>;
289
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxDialogPopup, "[rdxDialogPopup]", ["rdxDialogPopup"], {}, { "escapeKeyDown": "escapeKeyDown"; "pointerDownOutside": "pointerDownOutside"; "focusOutside": "focusOutside"; "interactOutside": "interactOutside"; "openAutoFocus": "openAutoFocus"; "closeAutoFocus": "closeAutoFocus"; }, never, never, true, [{ directive: typeof i1$1.RdxDismissableLayer; inputs: {}; outputs: {}; }, { directive: typeof i2.RdxFocusScope; inputs: {}; outputs: {}; }]>;
283
290
  }
284
291
 
285
292
  /**
@@ -313,12 +320,12 @@ declare class RdxDialogClose {
313
320
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxDialogClose, "button[rdxDialogClose]", ["rdxDialogClose"], {}, {}, never, never, true, never>;
314
321
  }
315
322
 
316
- declare const dialogImports: (typeof RdxDialogPortalPresence)[];
323
+ declare const dialogImports: (typeof RdxDialogPortalMisuseGuard)[];
317
324
  declare class RdxDialogModule {
318
325
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdxDialogModule, never>;
319
- static ɵmod: _angular_core.ɵɵNgModuleDeclaration<RdxDialogModule, never, [typeof RdxDialogRoot, typeof RdxDialogTrigger, typeof RdxDialogPortalPresence, typeof RdxDialogPortal, typeof RdxDialogBackdrop, typeof RdxDialogViewport, typeof RdxDialogPopup, typeof RdxDialogTitle, typeof RdxDialogDescription, typeof RdxDialogClose], [typeof RdxDialogRoot, typeof RdxDialogTrigger, typeof RdxDialogPortalPresence, typeof RdxDialogPortal, typeof RdxDialogBackdrop, typeof RdxDialogViewport, typeof RdxDialogPopup, typeof RdxDialogTitle, typeof RdxDialogDescription, typeof RdxDialogClose]>;
326
+ static ɵmod: _angular_core.ɵɵNgModuleDeclaration<RdxDialogModule, never, [typeof RdxDialogRoot, typeof RdxDialogTrigger, typeof RdxDialogPortal, typeof RdxDialogPortalMisuseGuard, typeof RdxDialogBackdrop, typeof RdxDialogViewport, typeof RdxDialogPopup, typeof RdxDialogTitle, typeof RdxDialogDescription, typeof RdxDialogClose], [typeof RdxDialogRoot, typeof RdxDialogTrigger, typeof RdxDialogPortal, typeof RdxDialogPortalMisuseGuard, typeof RdxDialogBackdrop, typeof RdxDialogViewport, typeof RdxDialogPopup, typeof RdxDialogTitle, typeof RdxDialogDescription, typeof RdxDialogClose]>;
320
327
  static ɵinj: _angular_core.ɵɵInjectorDeclaration<RdxDialogModule>;
321
328
  }
322
329
 
323
- export { RDX_DIALOG_VARIANT, RdxDialogBackdrop, RdxDialogClose, RdxDialogDescription, RdxDialogHandle, RdxDialogModule, RdxDialogPopup, RdxDialogPortal, RdxDialogPortalPresence, RdxDialogRoot, RdxDialogTitle, RdxDialogTrigger, RdxDialogViewport, createRdxDialogHandle, dialogImports, injectRdxDialogRootContext, provideRdxDialogRootContext, provideRdxDialogVariant };
330
+ export { RDX_DIALOG_VARIANT, RdxDialogBackdrop, RdxDialogClose, RdxDialogDescription, RdxDialogHandle, RdxDialogModule, RdxDialogPopup, RdxDialogPortal, RdxDialogPortalMisuseGuard, RdxDialogRoot, RdxDialogTitle, RdxDialogTrigger, RdxDialogViewport, createRdxDialogHandle, dialogImports, injectRdxDialogRootContext, provideRdxDialogRootContext, provideRdxDialogVariant };
324
331
  export type { RdxDialogModal, RdxDialogOpenChange, RdxDialogOpenChangeReason, RdxDialogRole, RdxDialogRootContext, RdxDialogVariant };
@@ -13,6 +13,8 @@ interface RdxDrawerRegistration {
13
13
  id: string;
14
14
  /** The drawer popup's measured size (px) along its dismiss axis. */
15
15
  height: Signal<number>;
16
+ /** 0..1 live dismiss progress of this drawer. */
17
+ swipeProgress: Signal<number>;
16
18
  }
17
19
  /**
18
20
  * App-level coordinator that tracks every open drawer so background content can react to them
@@ -30,6 +32,8 @@ declare class RdxDrawerProvider {
30
32
  readonly frontmost: Signal<RdxDrawerRegistration | null>;
31
33
  /** The frontmost drawer's measured size (px), or `0` when none is open. */
32
34
  readonly frontmostHeight: Signal<number>;
35
+ /** The frontmost drawer's live dismiss progress, or `0` when none is open. */
36
+ readonly swipeProgress: Signal<number>;
33
37
  /** Register an open drawer; returns a disposer that removes it. */
34
38
  register(registration: RdxDrawerRegistration): () => void;
35
39
  static ɵfac: i0.ɵɵFactoryDeclaration<RdxDrawerProvider, never>;
@@ -62,6 +66,10 @@ type RdxDrawerRelease = {
62
66
  interface RdxDrawerSwipeConfig {
63
67
  /** The popup element the gesture lives on (CSS variables + data attributes are written here). */
64
68
  element: () => HTMLElement;
69
+ /** Gesture boundary used to discover scrollable ancestors around the popup. */
70
+ boundary?: () => HTMLElement;
71
+ /** Visible size along the dismiss axis, used to normalize live swipe progress. */
72
+ size?: () => number;
65
73
  /** Active swipe direction. */
66
74
  direction: Signal<RdxDrawerSwipeDirection>;
67
75
  /** Whether the gesture is currently armed (typically `open`). */
@@ -109,8 +117,8 @@ declare function useDrawerSwipe(config: RdxDrawerSwipeConfig): void;
109
117
  * - a string — `'148px'` (pixels), `'30rem'` (root-em), `'40%'` (fraction of size), or a bare number
110
118
  * as above.
111
119
  *
112
- * Order the `snapPoints` array ascending by openness; the last entry is treated as "most open" and
113
- * is the default the drawer opens to when `defaultSnapPoint` is not set.
120
+ * Order the `snapPoints` array ascending by openness; the first entry is the default the drawer opens
121
+ * to when `defaultSnapPoint` is not set.
114
122
  */
115
123
  type RdxDrawerSnapPoint = number | string;
116
124
  /**
@@ -166,6 +174,12 @@ interface RdxDrawerRootContext {
166
174
  swipeProgress: Signal<number>;
167
175
  /** Reports gesture progress from the popup's swipe engine. */
168
176
  setSwipeProgress: (value: number) => void;
177
+ /** Whether the drawer is currently being revealed from a SwipeArea. */
178
+ openingSwipeActive: Signal<boolean>;
179
+ /** Pointer travel (px) inward from the SwipeArea while revealing the drawer. */
180
+ openingSwipeDistance: Signal<number>;
181
+ /** Starts or updates the SwipeArea reveal gesture. */
182
+ setOpeningSwipe: (active: boolean, distance: number) => void;
169
183
  /** Configured snap points (empty when the drawer has none). */
170
184
  snapPoints: Signal<readonly RdxDrawerSnapPoint[]>;
171
185
  /** Whether the drawer rests at discrete snap points. */
@@ -208,12 +222,12 @@ declare class RdxDrawerRoot {
208
222
  readonly swipeDirection: i0.InputSignal<RdxDrawerSwipeDirection>;
209
223
  /**
210
224
  * Resting positions the drawer snaps to along the dismiss axis. Order ascending by openness; the
211
- * last entry is the default the drawer opens to. Omit for a plain open/closed drawer.
225
+ * first entry is the default the drawer opens to. Omit for a plain open/closed drawer.
212
226
  */
213
227
  readonly snapPoints: i0.InputSignal<readonly RdxDrawerSnapPoint[] | undefined>;
214
228
  /** The active snap point (controlled / uncontrolled with `[(snapPoint)]`). */
215
229
  readonly snapPoint: i0.ModelSignal<RdxDrawerSnapPoint | null>;
216
- /** The snap point the drawer opens to when uncontrolled; defaults to the most open point. */
230
+ /** The snap point the drawer opens to when uncontrolled; defaults to the first point. */
217
231
  readonly defaultSnapPoint: i0.InputSignal<RdxDrawerSnapPoint | undefined>;
218
232
  /** Step at most one snap point per release instead of letting velocity skip points. */
219
233
  readonly snapToSequentialPoints: i0.InputSignalWithTransform<boolean, BooleanInput>;
@@ -221,6 +235,9 @@ declare class RdxDrawerRoot {
221
235
  readonly onSnapPointChange: i0.OutputEmitterRef<RdxDrawerSnapPoint>;
222
236
  /** 0..1 progress of the active dismiss gesture, written by the popup's swipe engine. */
223
237
  readonly swipeProgress: i0.WritableSignal<number>;
238
+ /** Live SwipeArea reveal state; the popup converts distance into its measured-axis movement. */
239
+ readonly openingSwipeActive: i0.WritableSignal<boolean>;
240
+ readonly openingSwipeDistance: i0.WritableSignal<number>;
224
241
  readonly normalizedSnapPoints: Signal<readonly RdxDrawerSnapPoint[]>;
225
242
  readonly hasSnapPoints: Signal<boolean>;
226
243
  /** Whether a drawer nested inside this one is open (reuses the dialog's nesting detection). */
@@ -252,41 +269,47 @@ declare class RdxDrawerTrigger {
252
269
  /**
253
270
  * An off-canvas region (typically pinned to a screen edge) that opens the drawer when swiped inward.
254
271
  *
255
- * Phase 1 opens on a threshold crossing rather than following the pointer live (the popup is not
256
- * mounted while closed); the live-follow open will land with snap points. Shares the drawer's
257
- * pointer-drag lifecycle so capture/cancel handling stays consistent with the popup gesture.
272
+ * Opens the drawer at the start of a drag so its popup can follow the pointer live. Releasing past
273
+ * the threshold settles open; releasing before it or cancelling animates the drawer back out.
258
274
  */
259
275
  declare class RdxDrawerSwipeArea {
260
276
  private readonly drawerContext;
261
277
  private readonly dialogContext;
262
- /** Direction the swipe area opens from; defaults to the root's `swipeDirection`. */
278
+ /** Direction the opening gesture travels; defaults to the opposite of the root's dismiss direction. */
263
279
  readonly swipeDirection: i0.InputSignal<RdxDrawerSwipeDirection | undefined>;
264
280
  /** Whether the swipe area should ignore user interaction. */
265
281
  readonly disabled: i0.InputSignalWithTransform<boolean, BooleanInput>;
266
282
  protected readonly isOpen: i0.Signal<boolean>;
267
283
  protected readonly direction: i0.Signal<RdxDrawerSwipeDirection>;
284
+ protected readonly resolvedTouchAction: i0.Signal<"pan-y" | "pan-x">;
268
285
  protected readonly swiping: i0.WritableSignal<boolean>;
269
286
  private startX;
270
287
  private startY;
288
+ private distance;
271
289
  constructor();
272
290
  static ɵfac: i0.ɵɵFactoryDeclaration<RdxDrawerSwipeArea, never>;
273
291
  static ɵdir: i0.ɵɵDirectiveDeclaration<RdxDrawerSwipeArea, "[rdxDrawerSwipeArea]", ["rdxDrawerSwipeArea"], { "swipeDirection": { "alias": "swipeDirection"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
274
292
  }
275
293
 
276
294
  /**
277
- * Mounts the portal while the drawer is open and waits for CSS exit keyframes before unmounting.
295
+ * Structural directive that teleports the drawer content (backdrop + popup) into a container (default
296
+ * `document.body`) while the drawer is open, keeping it mounted until its CSS exit `@keyframes`
297
+ * finish. It composes the structural {@link RdxDialogPortal}, inheriting the dialog presence context.
298
+ *
299
+ * Use the explicit `<ng-template rdxDrawerPortal>` form; pass `[container]` for a custom target.
278
300
  */
279
- declare class RdxDrawerPortalPresence {
280
- static ɵfac: i0.ɵɵFactoryDeclaration<RdxDrawerPortalPresence, never>;
281
- static ɵdir: i0.ɵɵDirectiveDeclaration<RdxDrawerPortalPresence, "ng-template[rdxDrawerPortalPresence]", never, {}, {}, never, never, true, [{ directive: typeof i1.RdxDialogPortalPresence; inputs: {}; outputs: {}; }]>;
301
+ declare class RdxDrawerPortal {
302
+ static ɵfac: i0.ɵɵFactoryDeclaration<RdxDrawerPortal, never>;
303
+ static ɵdir: i0.ɵɵDirectiveDeclaration<RdxDrawerPortal, "ng-template[rdxDrawerPortal]", ["rdxDrawerPortal"], {}, {}, never, never, true, [{ directive: typeof i1.RdxDialogPortal; inputs: { "container": "container"; }; outputs: {}; }]>;
282
304
  }
283
-
284
305
  /**
285
- * Moves the drawer to a different part of the DOM. Defaults to `document.body`.
306
+ * Dev-mode guard: `rdxDrawerPortal` is now structural, so the old `<div rdxDrawerPortal>` markup would
307
+ * silently stop portaling — fail loudly instead.
286
308
  */
287
- declare class RdxDrawerPortal {
288
- static ɵfac: i0.ɵɵFactoryDeclaration<RdxDrawerPortal, never>;
289
- static ɵdir: i0.ɵɵDirectiveDeclaration<RdxDrawerPortal, "[rdxDrawerPortal]", ["rdxDrawerPortal"], {}, {}, never, never, true, [{ directive: typeof i1.RdxDialogPortal; inputs: { "container": "container"; }; outputs: {}; }]>;
309
+ declare class RdxDrawerPortalMisuseGuard {
310
+ constructor();
311
+ static ɵfac: i0.ɵɵFactoryDeclaration<RdxDrawerPortalMisuseGuard, never>;
312
+ static ɵdir: i0.ɵɵDirectiveDeclaration<RdxDrawerPortalMisuseGuard, "[rdxDrawerPortal]:not(ng-template)", never, {}, {}, never, never, true, never>;
290
313
  }
291
314
 
292
315
  /**
@@ -336,6 +359,9 @@ declare class RdxDrawerPopup {
336
359
  protected readonly frontmostHeightPx: i0.Signal<string | null>;
337
360
  constructor();
338
361
  private axisSize;
362
+ private axisElementSize;
363
+ private swipeBoundary;
364
+ private visibleAxisSize;
339
365
  private resolveRelease;
340
366
  static ɵfac: i0.ɵɵFactoryDeclaration<RdxDrawerPopup, never>;
341
367
  static ɵdir: i0.ɵɵDirectiveDeclaration<RdxDrawerPopup, "[rdxDrawerPopup]", ["rdxDrawerPopup"], {}, {}, never, never, true, [{ directive: typeof i1.RdxDialogPopup; inputs: {}; outputs: { "escapeKeyDown": "escapeKeyDown"; "pointerDownOutside": "pointerDownOutside"; "focusOutside": "focusOutside"; "interactOutside": "interactOutside"; "openAutoFocus": "openAutoFocus"; "closeAutoFocus": "closeAutoFocus"; }; }]>;
@@ -384,6 +410,7 @@ declare class RdxDrawerClose {
384
410
  * Reads the nearest {@link RdxDrawerProvider} and exposes styling hooks; the visual transform is
385
411
  * consumer CSS (headless):
386
412
  * - `[data-active]` — present while at least one drawer is open.
413
+ * - `--drawer-swipe-progress` — 0..1 live dismiss progress of the frontmost drawer.
387
414
  * - `--nested-drawers` — the number of open drawers.
388
415
  * - `--drawer-frontmost-height` — the frontmost drawer's measured size, in pixels.
389
416
  */
@@ -396,9 +423,9 @@ declare class RdxDrawerIndent {
396
423
  /**
397
424
  * The page background layer that scales/indents while any drawer is open.
398
425
  *
399
- * Behaves like {@link RdxDrawerIndent} (same `[data-active]` / `--nested-drawers` /
400
- * `--drawer-frontmost-height` contract); kept as a distinct part so the page backdrop and the
401
- * indented content can be styled independently, mirroring Base UI.
426
+ * Behaves like {@link RdxDrawerIndent} (same `[data-active]` / `--drawer-swipe-progress` /
427
+ * `--nested-drawers` / `--drawer-frontmost-height` contract); kept as a distinct part so the page
428
+ * backdrop and the indented content can be styled independently, mirroring Base UI.
402
429
  */
403
430
  declare class RdxDrawerIndentBackground {
404
431
  protected readonly provider: RdxDrawerProvider | null;
@@ -418,9 +445,9 @@ declare function createRdxDrawerHandle<Payload = unknown>(): RdxDrawerHandle<Pay
418
445
  declare const drawerImports: (typeof RdxDrawerProviderDirective)[];
419
446
  declare class RdxDrawerModule {
420
447
  static ɵfac: i0.ɵɵFactoryDeclaration<RdxDrawerModule, never>;
421
- static ɵmod: i0.ɵɵNgModuleDeclaration<RdxDrawerModule, never, [typeof RdxDrawerProviderDirective, typeof RdxDrawerRoot, typeof RdxDrawerTrigger, typeof RdxDrawerSwipeArea, typeof RdxDrawerPortalPresence, typeof RdxDrawerPortal, typeof RdxDrawerBackdrop, typeof RdxDrawerViewport, typeof RdxDrawerPopup, typeof RdxDrawerContent, typeof RdxDrawerTitle, typeof RdxDrawerDescription, typeof RdxDrawerClose, typeof RdxDrawerIndent, typeof RdxDrawerIndentBackground], [typeof RdxDrawerProviderDirective, typeof RdxDrawerRoot, typeof RdxDrawerTrigger, typeof RdxDrawerSwipeArea, typeof RdxDrawerPortalPresence, typeof RdxDrawerPortal, typeof RdxDrawerBackdrop, typeof RdxDrawerViewport, typeof RdxDrawerPopup, typeof RdxDrawerContent, typeof RdxDrawerTitle, typeof RdxDrawerDescription, typeof RdxDrawerClose, typeof RdxDrawerIndent, typeof RdxDrawerIndentBackground]>;
448
+ static ɵmod: i0.ɵɵNgModuleDeclaration<RdxDrawerModule, never, [typeof RdxDrawerProviderDirective, typeof RdxDrawerRoot, typeof RdxDrawerTrigger, typeof RdxDrawerSwipeArea, typeof RdxDrawerPortal, typeof RdxDrawerPortalMisuseGuard, typeof RdxDrawerBackdrop, typeof RdxDrawerViewport, typeof RdxDrawerPopup, typeof RdxDrawerContent, typeof RdxDrawerTitle, typeof RdxDrawerDescription, typeof RdxDrawerClose, typeof RdxDrawerIndent, typeof RdxDrawerIndentBackground], [typeof RdxDrawerProviderDirective, typeof RdxDrawerRoot, typeof RdxDrawerTrigger, typeof RdxDrawerSwipeArea, typeof RdxDrawerPortal, typeof RdxDrawerPortalMisuseGuard, typeof RdxDrawerBackdrop, typeof RdxDrawerViewport, typeof RdxDrawerPopup, typeof RdxDrawerContent, typeof RdxDrawerTitle, typeof RdxDrawerDescription, typeof RdxDrawerClose, typeof RdxDrawerIndent, typeof RdxDrawerIndentBackground]>;
422
449
  static ɵinj: i0.ɵɵInjectorDeclaration<RdxDrawerModule>;
423
450
  }
424
451
 
425
- export { RdxDrawerBackdrop, RdxDrawerClose, RdxDrawerContent, RdxDrawerDescription, RdxDrawerHandle, RdxDrawerIndent, RdxDrawerIndentBackground, RdxDrawerModule, RdxDrawerPopup, RdxDrawerPortal, RdxDrawerPortalPresence, RdxDrawerProvider, RdxDrawerProviderDirective, RdxDrawerRoot, RdxDrawerSwipeArea, RdxDrawerTitle, RdxDrawerTrigger, RdxDrawerViewport, buildSnapEntries, createRdxDrawerHandle, dismissUnitVector, drawerImports, injectRdxDrawerRootContext, provideRdxDrawerProvider, provideRdxDrawerRootContext, resolveSnapTarget, snapPointReveal, useDrawerSwipe };
452
+ export { RdxDrawerBackdrop, RdxDrawerClose, RdxDrawerContent, RdxDrawerDescription, RdxDrawerHandle, RdxDrawerIndent, RdxDrawerIndentBackground, RdxDrawerModule, RdxDrawerPopup, RdxDrawerPortal, RdxDrawerPortalMisuseGuard, RdxDrawerProvider, RdxDrawerProviderDirective, RdxDrawerRoot, RdxDrawerSwipeArea, RdxDrawerTitle, RdxDrawerTrigger, RdxDrawerViewport, buildSnapEntries, createRdxDrawerHandle, dismissUnitVector, drawerImports, injectRdxDrawerRootContext, provideRdxDrawerProvider, provideRdxDrawerRootContext, resolveSnapTarget, snapPointReveal, useDrawerSwipe };
426
453
  export type { RdxDrawerRegistration, RdxDrawerRelease, RdxDrawerRootContext, RdxDrawerSnapEntry, RdxDrawerSnapPoint, RdxDrawerSnapResolveOptions, RdxDrawerSnapTarget, RdxDrawerSwipeConfig, RdxDrawerSwipeDirection };
@@ -7,7 +7,6 @@ import { RdxPopperContentWrapper, RdxPopperAnchorElement } from '@radix-ng/primi
7
7
  import * as _radix_ng_primitives_menu from '@radix-ng/primitives/menu';
8
8
  import * as i2 from '@radix-ng/primitives/dismissable-layer';
9
9
  import * as i1$1 from '@radix-ng/primitives/portal';
10
- import { RdxPortalContainer } from '@radix-ng/primitives/portal';
11
10
  import * as i3 from '@radix-ng/primitives/focus-scope';
12
11
 
13
12
  type RdxMenuTransitionStatus = 'starting' | 'ending' | undefined;
@@ -230,16 +229,26 @@ declare class RdxMenuSubTrigger {
230
229
  }
231
230
 
232
231
  /**
233
- * Moves the menu to a different part of the DOM.
234
- * Applied on ng-template no host bindings (ng-template is not a real DOM node).
232
+ * Structural directive that teleports the menu popup into a container (default `document.body`) while
233
+ * the menu is open, and keeps it mounted until any CSS exit `@keyframes` finishes.
234
+ *
235
+ * This replaces the consumer-owned `@if (root.open())` mount: it adds both teleporting *and*
236
+ * exit-animation support. Apply it with the `*` microsyntax on the positioner —
237
+ * `<div *rdxMenuPortal rdxMenuPositioner>` — or as an explicit `<ng-template rdxMenuPortal>`. For a
238
+ * custom container, or a backdrop alongside the positioner (multi-root), use the explicit form.
235
239
  */
236
240
  declare class RdxMenuPortal {
237
- /**
238
- * Optional container to portal the content into. Defaults to `document.body`.
239
- */
240
- readonly container: _angular_core.InputSignal<RdxPortalContainer | undefined>;
241
241
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdxMenuPortal, never>;
242
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxMenuPortal, "[rdxMenuPortal]", ["rdxMenuPortal"], { "container": { "alias": "container"; "required": false; "isSignal": true; }; }, {}, never, never, true, [{ directive: typeof i1$1.RdxPortal; inputs: { "container": "container"; }; outputs: {}; }]>;
242
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxMenuPortal, "ng-template[rdxMenuPortal]", ["rdxMenuPortal"], {}, {}, never, never, true, [{ directive: typeof i1$1.RdxPortalPresence; inputs: { "container": "container"; }; outputs: {}; }]>;
243
+ }
244
+ /**
245
+ * Dev-mode guard: `rdxMenuPortal` is a structural directive. The old `<div rdxMenuPortal>` markup
246
+ * would silently stop portaling — fail loudly instead.
247
+ */
248
+ declare class RdxMenuPortalMisuseGuard {
249
+ constructor();
250
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdxMenuPortalMisuseGuard, never>;
251
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxMenuPortalMisuseGuard, "[rdxMenuPortal]:not(ng-template)", never, {}, {}, never, never, true, never>;
243
252
  }
244
253
 
245
254
  /**
@@ -616,9 +625,9 @@ declare class RdxMenuRadioItemIndicator {
616
625
 
617
626
  declare class RdxMenuModule {
618
627
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdxMenuModule, never>;
619
- static ɵmod: _angular_core.ɵɵNgModuleDeclaration<RdxMenuModule, never, [typeof RdxMenuRoot, typeof RdxMenuTrigger, typeof RdxMenuSubTrigger, typeof RdxMenuPortal, typeof RdxMenuPositioner, typeof RdxMenuPopup, typeof RdxMenuViewport, typeof RdxMenuBackdrop, typeof RdxMenuArrow, typeof RdxMenuItem, typeof RdxMenuLinkItem, typeof RdxMenuGroup, typeof RdxMenuGroupLabel, typeof RdxMenuSeparator, typeof RdxMenuCheckboxItem, typeof RdxMenuCheckboxItemIndicator, typeof RdxMenuRadioGroup, typeof RdxMenuRadioItem, typeof RdxMenuRadioItemIndicator], [typeof RdxMenuRoot, typeof RdxMenuTrigger, typeof RdxMenuSubTrigger, typeof RdxMenuPortal, typeof RdxMenuPositioner, typeof RdxMenuPopup, typeof RdxMenuViewport, typeof RdxMenuBackdrop, typeof RdxMenuArrow, typeof RdxMenuItem, typeof RdxMenuLinkItem, typeof RdxMenuGroup, typeof RdxMenuGroupLabel, typeof RdxMenuSeparator, typeof RdxMenuCheckboxItem, typeof RdxMenuCheckboxItemIndicator, typeof RdxMenuRadioGroup, typeof RdxMenuRadioItem, typeof RdxMenuRadioItemIndicator]>;
628
+ static ɵmod: _angular_core.ɵɵNgModuleDeclaration<RdxMenuModule, never, [typeof RdxMenuRoot, typeof RdxMenuTrigger, typeof RdxMenuSubTrigger, typeof RdxMenuPortal, typeof RdxMenuPortalMisuseGuard, typeof RdxMenuPositioner, typeof RdxMenuPopup, typeof RdxMenuViewport, typeof RdxMenuBackdrop, typeof RdxMenuArrow, typeof RdxMenuItem, typeof RdxMenuLinkItem, typeof RdxMenuGroup, typeof RdxMenuGroupLabel, typeof RdxMenuSeparator, typeof RdxMenuCheckboxItem, typeof RdxMenuCheckboxItemIndicator, typeof RdxMenuRadioGroup, typeof RdxMenuRadioItem, typeof RdxMenuRadioItemIndicator], [typeof RdxMenuRoot, typeof RdxMenuTrigger, typeof RdxMenuSubTrigger, typeof RdxMenuPortal, typeof RdxMenuPortalMisuseGuard, typeof RdxMenuPositioner, typeof RdxMenuPopup, typeof RdxMenuViewport, typeof RdxMenuBackdrop, typeof RdxMenuArrow, typeof RdxMenuItem, typeof RdxMenuLinkItem, typeof RdxMenuGroup, typeof RdxMenuGroupLabel, typeof RdxMenuSeparator, typeof RdxMenuCheckboxItem, typeof RdxMenuCheckboxItemIndicator, typeof RdxMenuRadioGroup, typeof RdxMenuRadioItem, typeof RdxMenuRadioItemIndicator]>;
620
629
  static ɵinj: _angular_core.ɵɵInjectorDeclaration<RdxMenuModule>;
621
630
  }
622
631
 
623
- export { RdxMenuArrow, RdxMenuBackdrop, RdxMenuCheckboxItem, RdxMenuCheckboxItemIndicator, RdxMenuGroup, RdxMenuGroupLabel, RdxMenuItem, RdxMenuLinkItem, RdxMenuModule, RdxMenuPopup, RdxMenuPortal, RdxMenuPositioner, RdxMenuRadioGroup, RdxMenuRadioItem, RdxMenuRadioItemIndicator, RdxMenuRoot, RdxMenuSeparator, RdxMenuSubTrigger, RdxMenuTrigger, RdxMenuViewport, getCheckedState, injectRdxMenuCheckboxItemContext, injectRdxMenuRadioGroupContext, injectRdxMenuRadioItemContext, injectRdxMenuRootContext, isIndeterminate, provideRdxMenuCheckboxItemContext, provideRdxMenuRadioGroupContext, provideRdxMenuRadioItemContext, provideRdxMenuRootContext };
632
+ export { RdxMenuArrow, RdxMenuBackdrop, RdxMenuCheckboxItem, RdxMenuCheckboxItemIndicator, RdxMenuGroup, RdxMenuGroupLabel, RdxMenuItem, RdxMenuLinkItem, RdxMenuModule, RdxMenuPopup, RdxMenuPortal, RdxMenuPortalMisuseGuard, RdxMenuPositioner, RdxMenuRadioGroup, RdxMenuRadioItem, RdxMenuRadioItemIndicator, RdxMenuRoot, RdxMenuSeparator, RdxMenuSubTrigger, RdxMenuTrigger, RdxMenuViewport, getCheckedState, injectRdxMenuCheckboxItemContext, injectRdxMenuRadioGroupContext, injectRdxMenuRadioItemContext, injectRdxMenuRootContext, isIndeterminate, provideRdxMenuCheckboxItemContext, provideRdxMenuRadioGroupContext, provideRdxMenuRadioItemContext, provideRdxMenuRootContext };
624
633
  export type { CheckedState, RdxMenuAutoFocus, RdxMenuAutoFocusInput, RdxMenuCheckboxItemContext, RdxMenuOrientation, RdxMenuRadioGroupContext, RdxMenuRadioItemContext, RdxMenuRootContext, RdxMenuTransitionStatus, RdxMenuTriggerInteraction, RdxMenuTriggerInteractionHandler };