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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. package/composite/README.md +3 -0
  2. package/fesm2022/radix-ng-primitives-accordion.mjs +12 -36
  3. package/fesm2022/radix-ng-primitives-accordion.mjs.map +1 -1
  4. package/fesm2022/radix-ng-primitives-checkbox.mjs +33 -18
  5. package/fesm2022/radix-ng-primitives-checkbox.mjs.map +1 -1
  6. package/fesm2022/radix-ng-primitives-composite.mjs +515 -0
  7. package/fesm2022/radix-ng-primitives-composite.mjs.map +1 -0
  8. package/fesm2022/radix-ng-primitives-core.mjs +7 -0
  9. package/fesm2022/radix-ng-primitives-core.mjs.map +1 -1
  10. package/fesm2022/radix-ng-primitives-dialog.mjs +54 -12
  11. package/fesm2022/radix-ng-primitives-dialog.mjs.map +1 -1
  12. package/fesm2022/radix-ng-primitives-drawer.mjs +442 -2
  13. package/fesm2022/radix-ng-primitives-drawer.mjs.map +1 -1
  14. package/fesm2022/radix-ng-primitives-editable.mjs +12 -7
  15. package/fesm2022/radix-ng-primitives-editable.mjs.map +1 -1
  16. package/fesm2022/radix-ng-primitives-floating-focus-manager.mjs +294 -8
  17. package/fesm2022/radix-ng-primitives-floating-focus-manager.mjs.map +1 -1
  18. package/fesm2022/radix-ng-primitives-focus-scope.mjs +9 -0
  19. package/fesm2022/radix-ng-primitives-focus-scope.mjs.map +1 -1
  20. package/fesm2022/radix-ng-primitives-menu.mjs +71 -20
  21. package/fesm2022/radix-ng-primitives-menu.mjs.map +1 -1
  22. package/fesm2022/radix-ng-primitives-menubar.mjs +68 -36
  23. package/fesm2022/radix-ng-primitives-menubar.mjs.map +1 -1
  24. package/fesm2022/radix-ng-primitives-navigation-menu.mjs +281 -88
  25. package/fesm2022/radix-ng-primitives-navigation-menu.mjs.map +1 -1
  26. package/fesm2022/radix-ng-primitives-number-field.mjs +7 -2
  27. package/fesm2022/radix-ng-primitives-number-field.mjs.map +1 -1
  28. package/fesm2022/radix-ng-primitives-popover.mjs +117 -35
  29. package/fesm2022/radix-ng-primitives-popover.mjs.map +1 -1
  30. package/fesm2022/radix-ng-primitives-popper.mjs +73 -65
  31. package/fesm2022/radix-ng-primitives-popper.mjs.map +1 -1
  32. package/fesm2022/radix-ng-primitives-radio.mjs +77 -36
  33. package/fesm2022/radix-ng-primitives-radio.mjs.map +1 -1
  34. package/fesm2022/radix-ng-primitives-roving-focus.mjs +40 -8
  35. package/fesm2022/radix-ng-primitives-roving-focus.mjs.map +1 -1
  36. package/fesm2022/radix-ng-primitives-scroll-area.mjs +56 -25
  37. package/fesm2022/radix-ng-primitives-scroll-area.mjs.map +1 -1
  38. package/fesm2022/radix-ng-primitives-select.mjs +62 -37
  39. package/fesm2022/radix-ng-primitives-select.mjs.map +1 -1
  40. package/fesm2022/radix-ng-primitives-slider.mjs +259 -28
  41. package/fesm2022/radix-ng-primitives-slider.mjs.map +1 -1
  42. package/fesm2022/radix-ng-primitives-stepper.mjs +11 -7
  43. package/fesm2022/radix-ng-primitives-stepper.mjs.map +1 -1
  44. package/fesm2022/radix-ng-primitives-switch.mjs +10 -5
  45. package/fesm2022/radix-ng-primitives-switch.mjs.map +1 -1
  46. package/fesm2022/radix-ng-primitives-tabs.mjs +64 -30
  47. package/fesm2022/radix-ng-primitives-tabs.mjs.map +1 -1
  48. package/fesm2022/radix-ng-primitives-toggle-group.mjs +69 -19
  49. package/fesm2022/radix-ng-primitives-toggle-group.mjs.map +1 -1
  50. package/fesm2022/radix-ng-primitives-toggle.mjs +37 -13
  51. package/fesm2022/radix-ng-primitives-toggle.mjs.map +1 -1
  52. package/fesm2022/radix-ng-primitives-toolbar.mjs +50 -24
  53. package/fesm2022/radix-ng-primitives-toolbar.mjs.map +1 -1
  54. package/fesm2022/radix-ng-primitives-tooltip.mjs +180 -35
  55. package/fesm2022/radix-ng-primitives-tooltip.mjs.map +1 -1
  56. package/navigation-menu/README.md +5 -2
  57. package/package.json +5 -1
  58. package/types/radix-ng-primitives-accordion.d.ts +9 -13
  59. package/types/radix-ng-primitives-checkbox.d.ts +27 -15
  60. package/types/radix-ng-primitives-composite.d.ts +152 -0
  61. package/types/radix-ng-primitives-core.d.ts +2 -0
  62. package/types/radix-ng-primitives-dialog.d.ts +13 -2
  63. package/types/radix-ng-primitives-drawer.d.ts +40 -2
  64. package/types/radix-ng-primitives-editable.d.ts +11 -5
  65. package/types/radix-ng-primitives-floating-focus-manager.d.ts +113 -16
  66. package/types/radix-ng-primitives-menu.d.ts +13 -5
  67. package/types/radix-ng-primitives-menubar.d.ts +10 -5
  68. package/types/radix-ng-primitives-navigation-menu.d.ts +65 -33
  69. package/types/radix-ng-primitives-number-field.d.ts +8 -3
  70. package/types/radix-ng-primitives-popover.d.ts +26 -10
  71. package/types/radix-ng-primitives-popper.d.ts +1 -0
  72. package/types/radix-ng-primitives-radio.d.ts +22 -13
  73. package/types/radix-ng-primitives-roving-focus.d.ts +15 -1
  74. package/types/radix-ng-primitives-scroll-area.d.ts +4 -1
  75. package/types/radix-ng-primitives-select.d.ts +16 -20
  76. package/types/radix-ng-primitives-slider.d.ts +60 -9
  77. package/types/radix-ng-primitives-stepper.d.ts +11 -4
  78. package/types/radix-ng-primitives-switch.d.ts +10 -4
  79. package/types/radix-ng-primitives-tabs.d.ts +20 -11
  80. package/types/radix-ng-primitives-toggle-group.d.ts +34 -17
  81. package/types/radix-ng-primitives-toggle.d.ts +14 -7
  82. package/types/radix-ng-primitives-toolbar.d.ts +22 -14
  83. package/types/radix-ng-primitives-tooltip.d.ts +38 -14
@@ -6,7 +6,7 @@ import * as i2 from '@radix-ng/primitives/core';
6
6
  import { createContext, createFloatingRootContext, useTransitionStatus, createCancelableChangeEventDetails, provideFloatingTree, provideFloatingRootContext, injectId, RDX_FLOATING_ROOT_CONTEXT, RDX_FLOATING_REGISTRATION, useAnchoredScrollLock, RdxFloatingNodeRegistration, rdxDevError, setupInternalBackdrop, getMaxTransitionDuration } from '@radix-ng/primitives/core';
7
7
  import { injectDirection } from '@radix-ng/primitives/direction-provider';
8
8
  import * as i3 from '@radix-ng/primitives/floating-focus-manager';
9
- import { getInteractionTypeFromEvent, RdxFloatingFocusManager, provideFloatingFocusManagerConfig } from '@radix-ng/primitives/floating-focus-manager';
9
+ import { getInteractionTypeFromEvent, RdxFloatingFocusManager, provideFloatingFocusManagerConfig, createRdxTriggerInteraction, useTriggerFocusGuards } from '@radix-ng/primitives/floating-focus-manager';
10
10
  import { outputFromObservable, outputToObservable } from '@angular/core/rxjs-interop';
11
11
  import { RdxDismiss } from '@radix-ng/primitives/dismissable-layer';
12
12
  import { RdxFocusScope } from '@radix-ng/primitives/focus-scope';
@@ -14,6 +14,20 @@ import * as i1$1 from '@radix-ng/primitives/portal';
14
14
  import { RdxPortalPresence } from '@radix-ng/primitives/portal';
15
15
  import { provideRdxPresenceContext } from '@radix-ng/primitives/presence';
16
16
  import { isPlatformBrowser } from '@angular/common';
17
+ import * as i2$1 from '@radix-ng/primitives/composite';
18
+ import { RdxCompositeItem } from '@radix-ng/primitives/composite';
19
+
20
+ /** Selector for focusable menu items within a popup. */
21
+ const RDX_MENU_ITEM_SELECTOR = [
22
+ '[rdxMenuItem]:not([data-disabled])',
23
+ '[rdxMenuCheckboxItem]:not([data-disabled])',
24
+ '[rdxMenuRadioItem]:not([data-disabled])',
25
+ '[rdxMenuLinkItem]:not([data-disabled])',
26
+ '[rdxMenuSubTrigger]:not([data-disabled])'
27
+ ].join(',');
28
+ function getFocusableMenuItems(popup) {
29
+ return Array.from(popup.querySelectorAll(RDX_MENU_ITEM_SELECTOR)).filter((item) => item.closest('[rdxMenuPopup]') === popup);
30
+ }
17
31
 
18
32
  const [injectRdxMenuRootContext, provideRdxMenuRootContext] = createContext('RdxMenuRootContext', 'components/menu');
19
33
  function buildContext(instance) {
@@ -38,6 +52,7 @@ function buildContext(instance) {
38
52
  hasTriggerInteractionHandler: instance.hasTriggerInteractionHandler.asReadonly(),
39
53
  trigger: instance.trigger.asReadonly(),
40
54
  popupElement: instance.popupElement.asReadonly(),
55
+ beforeContentFocusGuard: instance.beforeContentFocusGuard.asReadonly(),
41
56
  transitionStatus: instance.transitionStatus,
42
57
  close: (reason, event) => instance.close(reason, event),
43
58
  closeEntireMenu: (reason, event) => instance.closeEntireMenu(reason, event),
@@ -46,6 +61,7 @@ function buildContext(instance) {
46
61
  showWithoutAutoFocus: (reason, event) => instance.show(false, reason, event),
47
62
  registerTrigger: (el) => instance.registerTrigger(el),
48
63
  registerPopup: (el) => instance.registerPopup(el),
64
+ setBeforeContentFocusGuard: (element) => instance.setBeforeContentFocusGuard(element),
49
65
  registerTransitionElement: (el) => instance.registerTransitionElement(el),
50
66
  registerPopupArrowNavigationHandler: (handler) => instance.registerPopupArrowNavigationHandler(handler),
51
67
  registerTriggerInteractionHandler: (handler) => instance.registerTriggerInteractionHandler(handler),
@@ -105,6 +121,7 @@ class RdxMenuRoot {
105
121
  this.onOpenChangeComplete = output();
106
122
  this.trigger = signal(undefined, ...(ngDevMode ? [{ debugName: "trigger" }] : /* istanbul ignore next */ []));
107
123
  this.popupElement = signal(undefined, ...(ngDevMode ? [{ debugName: "popupElement" }] : /* istanbul ignore next */ []));
124
+ this.beforeContentFocusGuard = signal(null, ...(ngDevMode ? [{ debugName: "beforeContentFocusGuard" }] : /* istanbul ignore next */ []));
108
125
  this.transitionStatus = this.transition.status;
109
126
  /** Whether the popup grabs focus when it opens. Set false for menubar hover-switching. */
110
127
  this.autoFocus = signal('first', ...(ngDevMode ? [{ debugName: "autoFocus" }] : /* istanbul ignore next */ []));
@@ -174,7 +191,12 @@ class RdxMenuRoot {
174
191
  if (this.effectiveDisabled()) {
175
192
  return;
176
193
  }
177
- this.autoFocus.set(autoFocus === true ? 'first' : autoFocus);
194
+ const nextAutoFocus = autoFocus === true ? 'first' : autoFocus;
195
+ this.autoFocus.set(nextAutoFocus);
196
+ if (this.open()) {
197
+ this.focusOpenPopup(nextAutoFocus);
198
+ return;
199
+ }
178
200
  if (!this.open()) {
179
201
  const change = this.createOpenChangeEvent(true, reason, event);
180
202
  this.onOpenChange.emit(change.payload);
@@ -257,6 +279,9 @@ class RdxMenuRoot {
257
279
  }
258
280
  };
259
281
  }
282
+ setBeforeContentFocusGuard(element) {
283
+ this.beforeContentFocusGuard.set(element);
284
+ }
260
285
  registerTransitionElement(element) {
261
286
  return this.transition.registerElement(element);
262
287
  }
@@ -304,6 +329,22 @@ class RdxMenuRoot {
304
329
  }
305
330
  };
306
331
  }
332
+ focusOpenPopup(autoFocus) {
333
+ if (autoFocus === false) {
334
+ return;
335
+ }
336
+ const popup = this.popupElement();
337
+ if (!popup) {
338
+ return;
339
+ }
340
+ if (autoFocus === 'popup') {
341
+ popup.focus({ preventScroll: true });
342
+ return;
343
+ }
344
+ const items = getFocusableMenuItems(popup);
345
+ const item = autoFocus === 'last' ? items.at(-1) : items[0];
346
+ (item ?? popup).focus({ preventScroll: true });
347
+ }
307
348
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxMenuRoot, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
308
349
  static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.9", type: RdxMenuRoot, isStandalone: true, selector: "[rdxMenuRoot],[rdxMenuSubmenuRoot]", inputs: { open: { classPropertyName: "open", publicName: "open", isSignal: true, isRequired: false, transformFunction: null }, defaultOpen: { classPropertyName: "defaultOpen", publicName: "defaultOpen", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, modal: { classPropertyName: "modal", publicName: "modal", isSignal: true, isRequired: false, transformFunction: null }, loopFocus: { classPropertyName: "loopFocus", publicName: "loopFocus", isSignal: true, isRequired: false, transformFunction: null }, highlightItemOnHover: { classPropertyName: "highlightItemOnHover", publicName: "highlightItemOnHover", isSignal: true, isRequired: false, transformFunction: null }, orientation: { classPropertyName: "orientation", publicName: "orientation", isSignal: true, isRequired: false, transformFunction: null }, dirInput: { classPropertyName: "dirInput", publicName: "dir", isSignal: true, isRequired: false, transformFunction: null }, closeParentOnEsc: { classPropertyName: "closeParentOnEsc", publicName: "closeParentOnEsc", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { open: "openChange", onOpenChange: "onOpenChange", onOpenChangeComplete: "onOpenChangeComplete" }, providers: [
309
350
  provideRdxMenuRootContext(contextFactory),
@@ -789,18 +830,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
789
830
  }]
790
831
  }], propDecorators: { disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], closeOnClick: [{ type: i0.Input, args: [{ isSignal: true, alias: "closeOnClick", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], onSelect: [{ type: i0.Output, args: ["onSelect"] }] } });
791
832
 
792
- /** Selector for focusable menu items within a popup. */
793
- const RDX_MENU_ITEM_SELECTOR = [
794
- '[rdxMenuItem]:not([data-disabled])',
795
- '[rdxMenuCheckboxItem]:not([data-disabled])',
796
- '[rdxMenuRadioItem]:not([data-disabled])',
797
- '[rdxMenuLinkItem]:not([data-disabled])',
798
- '[rdxMenuSubTrigger]:not([data-disabled])'
799
- ].join(',');
800
- function getFocusableMenuItems(popup) {
801
- return Array.from(popup.querySelectorAll(RDX_MENU_ITEM_SELECTOR)).filter((item) => item.closest('[rdxMenuPopup]') === popup);
802
- }
803
-
804
833
  /**
805
834
  * A container for the menu contents.
806
835
  */
@@ -1072,6 +1101,9 @@ class RdxMenuPopup {
1072
1101
  // disabled separately below; focus/marker policy should not disappear if a menu becomes
1073
1102
  // disabled while open, or if `preventUnmountOnClose()` keeps it mounted after close.
1074
1103
  enabled: () => rootContext.present(),
1104
+ restoreFocus: () => true,
1105
+ previousFocusableElement: () => rootContext.trigger() ?? null,
1106
+ beforeContentFocusGuardRef: () => (element) => rootContext.setBeforeContentFocusGuard(element),
1075
1107
  // Base UI's submenu policy: a submenu mount does not steal focus from its trigger.
1076
1108
  // Root menus still choose first / last item vs popup container from the menu's own
1077
1109
  // open policy (`autoFocus`), but the decision now lives in the focus manager instead
@@ -1126,6 +1158,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
1126
1158
  // disabled separately below; focus/marker policy should not disappear if a menu becomes
1127
1159
  // disabled while open, or if `preventUnmountOnClose()` keeps it mounted after close.
1128
1160
  enabled: () => rootContext.present(),
1161
+ restoreFocus: () => true,
1162
+ previousFocusableElement: () => rootContext.trigger() ?? null,
1163
+ beforeContentFocusGuardRef: () => (element) => rootContext.setBeforeContentFocusGuard(element),
1129
1164
  // Base UI's submenu policy: a submenu mount does not steal focus from its trigger.
1130
1165
  // Root menus still choose first / last item vs popup container from the menu's own
1131
1166
  // open policy (`autoFocus`), but the decision now lives in the focus manager instead
@@ -2215,6 +2250,12 @@ class RdxMenuTrigger {
2215
2250
  this.closeDelay = input(undefined, { ...(ngDevMode ? { debugName: "closeDelay" } : /* istanbul ignore next */ {}), transform: numberOrUndefined });
2216
2251
  this.nativeButtonState = computed(() => this.nativeButton() || this.elementRef.nativeElement.tagName === 'BUTTON', ...(ngDevMode ? [{ debugName: "nativeButtonState" }] : /* istanbul ignore next */ []));
2217
2252
  this.isDisabled = computed(() => this.rootContext.disabled() || this.disabled(), ...(ngDevMode ? [{ debugName: "isDisabled" }] : /* istanbul ignore next */ []));
2253
+ this.triggerInteraction = createRdxTriggerInteraction({
2254
+ trigger: () => this.elementRef.nativeElement,
2255
+ activeTrigger: () => this.rootContext.trigger(),
2256
+ open: () => this.rootContext.isOpen(),
2257
+ disabled: () => this.isDisabled()
2258
+ });
2218
2259
  effect((onCleanup) => {
2219
2260
  const el = this.elementRef.nativeElement;
2220
2261
  const unregister = this.rootContext.registerTrigger(el);
@@ -2259,6 +2300,13 @@ class RdxMenuTrigger {
2259
2300
  // (A press/focus on the trigger no longer needs a dismissable-layer branch to avoid
2260
2301
  // self-dismissal: the trigger is registered in the menu's floating context, so the dismissal
2261
2302
  // capability already treats it as "inside" — ADR 0015 trigger registry replaces the branch.)
2303
+ useTriggerFocusGuards({
2304
+ trigger: () => this.elementRef.nativeElement,
2305
+ close: (event) => this.rootContext.close('focus-out', event),
2306
+ beforeContentFocusGuard: () => this.rootContext.beforeContentFocusGuard(),
2307
+ enabled: () => this.triggerInteraction.isActive(),
2308
+ popupElement: () => this.rootContext.popupElement()
2309
+ });
2262
2310
  this.destroyRef.onDestroy(() => {
2263
2311
  this.clearOpenTimer();
2264
2312
  this.clearCloseTimer();
@@ -2286,6 +2334,9 @@ class RdxMenuTrigger {
2286
2334
  this.armMouseUpGuard(event.currentTarget);
2287
2335
  }
2288
2336
  }
2337
+ handlePointerDown(event) {
2338
+ this.triggerInteraction.recordPointerDown(event);
2339
+ }
2289
2340
  handleClick(event) {
2290
2341
  if (this.isDisabled()) {
2291
2342
  return;
@@ -2464,26 +2515,26 @@ class RdxMenuTrigger {
2464
2515
  }
2465
2516
  }
2466
2517
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxMenuTrigger, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
2467
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.9", type: RdxMenuTrigger, isStandalone: true, selector: "[rdxMenuTrigger]", inputs: { nativeButton: { classPropertyName: "nativeButton", publicName: "nativeButton", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, openOnHover: { classPropertyName: "openOnHover", publicName: "openOnHover", isSignal: true, isRequired: false, transformFunction: null }, delay: { classPropertyName: "delay", publicName: "delay", isSignal: true, isRequired: false, transformFunction: null }, closeDelay: { classPropertyName: "closeDelay", publicName: "closeDelay", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "mousedown": "handleMouseDown($event)", "click": "handleClick($event)", "pointerenter": "handlePointerEnter($event)", "pointermove": "handlePointerMove($event)", "pointerleave": "handlePointerLeave($event)", "keydown.arrowdown": "handleArrowDown($event)", "keydown.arrowup": "handleArrowUp($event)", "keydown.arrowleft": "handleArrowLeft($event)", "keydown.arrowright": "handleArrowRight($event)", "keydown.home": "handleHome($event)", "keydown.end": "handleEnd($event)", "keydown.escape": "handleEscape($event)", "keydown.enter": "handleKeyboardToggle($event)", "keydown.space": "handleKeyboardToggle($event)" }, properties: { "attr.type": "nativeButtonState() ? \"button\" : undefined", "attr.role": "rootContext.hasTriggerInteractionHandler() ? \"menuitem\" : nativeButtonState() ? undefined : \"button\"", "attr.tabindex": "rootContext.hasTriggerInteractionHandler() ? \"-1\" : undefined", "attr.aria-haspopup": "\"menu\"", "attr.aria-expanded": "rootContext.isOpen()", "attr.aria-disabled": "isDisabled() ? true : undefined", "attr.disabled": "nativeButtonState() && isDisabled() ? \"\" : undefined", "attr.data-state": "rootContext.isOpen() ? \"open\" : \"closed\"", "attr.data-disabled": "isDisabled() ? \"\" : undefined", "attr.data-popup-open": "rootContext.isOpen() ? \"\" : undefined", "style.pointer-events": "rootContext.isOpen() && rootContext.modal() ? \"auto\" : undefined" } }, exportAs: ["rdxMenuTrigger"], hostDirectives: [{ directive: i1.RdxPopperAnchor }], ngImport: i0 }); }
2518
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.9", type: RdxMenuTrigger, isStandalone: true, selector: "[rdxMenuTrigger]", inputs: { nativeButton: { classPropertyName: "nativeButton", publicName: "nativeButton", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, openOnHover: { classPropertyName: "openOnHover", publicName: "openOnHover", isSignal: true, isRequired: false, transformFunction: null }, delay: { classPropertyName: "delay", publicName: "delay", isSignal: true, isRequired: false, transformFunction: null }, closeDelay: { classPropertyName: "closeDelay", publicName: "closeDelay", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "pointerdown": "handlePointerDown($event)", "mousedown": "handleMouseDown($event)", "click": "handleClick($event)", "pointerenter": "handlePointerEnter($event)", "pointermove": "handlePointerMove($event)", "pointerleave": "handlePointerLeave($event)", "keydown.arrowdown": "handleArrowDown($event)", "keydown.arrowup": "handleArrowUp($event)", "keydown.arrowleft": "handleArrowLeft($event)", "keydown.arrowright": "handleArrowRight($event)", "keydown.home": "handleHome($event)", "keydown.end": "handleEnd($event)", "keydown.escape": "handleEscape($event)", "keydown.enter": "handleKeyboardToggle($event)", "keydown.space": "handleKeyboardToggle($event)" }, properties: { "attr.type": "nativeButtonState() ? \"button\" : undefined", "attr.role": "rootContext.hasTriggerInteractionHandler() ? \"menuitem\" : nativeButtonState() ? undefined : \"button\"", "attr.aria-haspopup": "\"menu\"", "attr.aria-expanded": "triggerInteraction.ariaExpanded()", "attr.aria-disabled": "isDisabled() ? true : undefined", "attr.disabled": "nativeButtonState() && isDisabled() ? \"\" : undefined", "attr.data-state": "triggerInteraction.dataState()", "attr.data-disabled": "isDisabled() ? \"\" : undefined", "attr.data-popup-open": "triggerInteraction.dataPopupOpen()", "style.pointer-events": "rootContext.isOpen() && rootContext.modal() ? \"auto\" : undefined" } }, exportAs: ["rdxMenuTrigger"], hostDirectives: [{ directive: i1.RdxPopperAnchor }, { directive: i2$1.RdxCompositeItem }], ngImport: i0 }); }
2468
2519
  }
2469
2520
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxMenuTrigger, decorators: [{
2470
2521
  type: Directive,
2471
2522
  args: [{
2472
2523
  selector: '[rdxMenuTrigger]',
2473
2524
  exportAs: 'rdxMenuTrigger',
2474
- hostDirectives: [RdxPopperAnchor],
2525
+ hostDirectives: [RdxPopperAnchor, RdxCompositeItem],
2475
2526
  host: {
2476
2527
  '[attr.type]': 'nativeButtonState() ? "button" : undefined',
2477
2528
  '[attr.role]': 'rootContext.hasTriggerInteractionHandler() ? "menuitem" : nativeButtonState() ? undefined : "button"',
2478
- '[attr.tabindex]': 'rootContext.hasTriggerInteractionHandler() ? "-1" : undefined',
2479
2529
  '[attr.aria-haspopup]': '"menu"',
2480
- '[attr.aria-expanded]': 'rootContext.isOpen()',
2530
+ '[attr.aria-expanded]': 'triggerInteraction.ariaExpanded()',
2481
2531
  '[attr.aria-disabled]': 'isDisabled() ? true : undefined',
2482
2532
  '[attr.disabled]': 'nativeButtonState() && isDisabled() ? "" : undefined',
2483
- '[attr.data-state]': 'rootContext.isOpen() ? "open" : "closed"',
2533
+ '[attr.data-state]': 'triggerInteraction.dataState()',
2484
2534
  '[attr.data-disabled]': 'isDisabled() ? "" : undefined',
2485
- '[attr.data-popup-open]': 'rootContext.isOpen() ? "" : undefined',
2535
+ '[attr.data-popup-open]': 'triggerInteraction.dataPopupOpen()',
2486
2536
  '[style.pointer-events]': 'rootContext.isOpen() && rootContext.modal() ? "auto" : undefined',
2537
+ '(pointerdown)': 'handlePointerDown($event)',
2487
2538
  '(mousedown)': 'handleMouseDown($event)',
2488
2539
  '(click)': 'handleClick($event)',
2489
2540
  '(pointerenter)': 'handlePointerEnter($event)',