@radix-ng/primitives 1.0.5 → 1.0.6

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 (123) hide show
  1. package/fesm2022/radix-ng-primitives-accordion.mjs +35 -27
  2. package/fesm2022/radix-ng-primitives-accordion.mjs.map +1 -1
  3. package/fesm2022/radix-ng-primitives-alert-dialog.mjs +34 -34
  4. package/fesm2022/radix-ng-primitives-arrow.mjs +3 -3
  5. package/fesm2022/radix-ng-primitives-aspect-ratio.mjs +5 -4
  6. package/fesm2022/radix-ng-primitives-aspect-ratio.mjs.map +1 -1
  7. package/fesm2022/radix-ng-primitives-autocomplete.mjs +175 -125
  8. package/fesm2022/radix-ng-primitives-autocomplete.mjs.map +1 -1
  9. package/fesm2022/radix-ng-primitives-avatar.mjs +25 -19
  10. package/fesm2022/radix-ng-primitives-avatar.mjs.map +1 -1
  11. package/fesm2022/radix-ng-primitives-button.mjs +11 -7
  12. package/fesm2022/radix-ng-primitives-button.mjs.map +1 -1
  13. package/fesm2022/radix-ng-primitives-calendar.mjs +140 -90
  14. package/fesm2022/radix-ng-primitives-calendar.mjs.map +1 -1
  15. package/fesm2022/radix-ng-primitives-checkbox.mjs +61 -40
  16. package/fesm2022/radix-ng-primitives-checkbox.mjs.map +1 -1
  17. package/fesm2022/radix-ng-primitives-collapsible.mjs +35 -24
  18. package/fesm2022/radix-ng-primitives-collapsible.mjs.map +1 -1
  19. package/fesm2022/radix-ng-primitives-combobox.mjs +278 -177
  20. package/fesm2022/radix-ng-primitives-combobox.mjs.map +1 -1
  21. package/fesm2022/radix-ng-primitives-composite.mjs +50 -33
  22. package/fesm2022/radix-ng-primitives-composite.mjs.map +1 -1
  23. package/fesm2022/radix-ng-primitives-config.mjs +7 -5
  24. package/fesm2022/radix-ng-primitives-config.mjs.map +1 -1
  25. package/fesm2022/radix-ng-primitives-context-menu.mjs +48 -22
  26. package/fesm2022/radix-ng-primitives-context-menu.mjs.map +1 -1
  27. package/fesm2022/radix-ng-primitives-core.mjs +44 -28
  28. package/fesm2022/radix-ng-primitives-core.mjs.map +1 -1
  29. package/fesm2022/radix-ng-primitives-cropper.mjs +73 -45
  30. package/fesm2022/radix-ng-primitives-cropper.mjs.map +1 -1
  31. package/fesm2022/radix-ng-primitives-date-field.mjs +70 -40
  32. package/fesm2022/radix-ng-primitives-date-field.mjs.map +1 -1
  33. package/fesm2022/radix-ng-primitives-dialog.mjs +93 -67
  34. package/fesm2022/radix-ng-primitives-dialog.mjs.map +1 -1
  35. package/fesm2022/radix-ng-primitives-direction-provider.mjs +5 -4
  36. package/fesm2022/radix-ng-primitives-direction-provider.mjs.map +1 -1
  37. package/fesm2022/radix-ng-primitives-dismissable-layer.mjs +20 -16
  38. package/fesm2022/radix-ng-primitives-dismissable-layer.mjs.map +1 -1
  39. package/fesm2022/radix-ng-primitives-drawer.mjs +107 -81
  40. package/fesm2022/radix-ng-primitives-drawer.mjs.map +1 -1
  41. package/fesm2022/radix-ng-primitives-editable.mjs +53 -39
  42. package/fesm2022/radix-ng-primitives-editable.mjs.map +1 -1
  43. package/fesm2022/radix-ng-primitives-field.mjs +69 -42
  44. package/fesm2022/radix-ng-primitives-field.mjs.map +1 -1
  45. package/fesm2022/radix-ng-primitives-fieldset.mjs +8 -7
  46. package/fesm2022/radix-ng-primitives-fieldset.mjs.map +1 -1
  47. package/fesm2022/radix-ng-primitives-floating-focus-manager.mjs +77 -40
  48. package/fesm2022/radix-ng-primitives-floating-focus-manager.mjs.map +1 -1
  49. package/fesm2022/radix-ng-primitives-focus-guards.mjs +3 -3
  50. package/fesm2022/radix-ng-primitives-focus-scope.mjs +7 -5
  51. package/fesm2022/radix-ng-primitives-focus-scope.mjs.map +1 -1
  52. package/fesm2022/radix-ng-primitives-form.mjs +25 -16
  53. package/fesm2022/radix-ng-primitives-form.mjs.map +1 -1
  54. package/fesm2022/radix-ng-primitives-input.mjs +41 -22
  55. package/fesm2022/radix-ng-primitives-input.mjs.map +1 -1
  56. package/fesm2022/radix-ng-primitives-label.mjs +7 -5
  57. package/fesm2022/radix-ng-primitives-label.mjs.map +1 -1
  58. package/fesm2022/radix-ng-primitives-menu.mjs +274 -154
  59. package/fesm2022/radix-ng-primitives-menu.mjs.map +1 -1
  60. package/fesm2022/radix-ng-primitives-menubar.mjs +35 -17
  61. package/fesm2022/radix-ng-primitives-menubar.mjs.map +1 -1
  62. package/fesm2022/radix-ng-primitives-meter.mjs +41 -30
  63. package/fesm2022/radix-ng-primitives-meter.mjs.map +1 -1
  64. package/fesm2022/radix-ng-primitives-navigation-menu.mjs +220 -183
  65. package/fesm2022/radix-ng-primitives-navigation-menu.mjs.map +1 -1
  66. package/fesm2022/radix-ng-primitives-number-field.mjs +87 -59
  67. package/fesm2022/radix-ng-primitives-number-field.mjs.map +1 -1
  68. package/fesm2022/radix-ng-primitives-pagination.mjs +48 -38
  69. package/fesm2022/radix-ng-primitives-pagination.mjs.map +1 -1
  70. package/fesm2022/radix-ng-primitives-popover.mjs +150 -107
  71. package/fesm2022/radix-ng-primitives-popover.mjs.map +1 -1
  72. package/fesm2022/radix-ng-primitives-popper.mjs +79 -47
  73. package/fesm2022/radix-ng-primitives-popper.mjs.map +1 -1
  74. package/fesm2022/radix-ng-primitives-portal.mjs +20 -13
  75. package/fesm2022/radix-ng-primitives-portal.mjs.map +1 -1
  76. package/fesm2022/radix-ng-primitives-presence.mjs +3 -3
  77. package/fesm2022/radix-ng-primitives-preview-card.mjs +119 -74
  78. package/fesm2022/radix-ng-primitives-preview-card.mjs.map +1 -1
  79. package/fesm2022/radix-ng-primitives-progress.mjs +43 -31
  80. package/fesm2022/radix-ng-primitives-progress.mjs.map +1 -1
  81. package/fesm2022/radix-ng-primitives-radio.mjs +58 -35
  82. package/fesm2022/radix-ng-primitives-radio.mjs.map +1 -1
  83. package/fesm2022/radix-ng-primitives-scroll-area.mjs +54 -38
  84. package/fesm2022/radix-ng-primitives-scroll-area.mjs.map +1 -1
  85. package/fesm2022/radix-ng-primitives-select.mjs +595 -102
  86. package/fesm2022/radix-ng-primitives-select.mjs.map +1 -1
  87. package/fesm2022/radix-ng-primitives-separator.mjs +7 -5
  88. package/fesm2022/radix-ng-primitives-separator.mjs.map +1 -1
  89. package/fesm2022/radix-ng-primitives-slider.mjs +101 -63
  90. package/fesm2022/radix-ng-primitives-slider.mjs.map +1 -1
  91. package/fesm2022/radix-ng-primitives-stepper.mjs +53 -39
  92. package/fesm2022/radix-ng-primitives-stepper.mjs.map +1 -1
  93. package/fesm2022/radix-ng-primitives-switch.mjs +23 -18
  94. package/fesm2022/radix-ng-primitives-switch.mjs.map +1 -1
  95. package/fesm2022/radix-ng-primitives-tabs.mjs +72 -47
  96. package/fesm2022/radix-ng-primitives-tabs.mjs.map +1 -1
  97. package/fesm2022/radix-ng-primitives-time-field.mjs +72 -41
  98. package/fesm2022/radix-ng-primitives-time-field.mjs.map +1 -1
  99. package/fesm2022/radix-ng-primitives-toast.mjs +75 -56
  100. package/fesm2022/radix-ng-primitives-toast.mjs.map +1 -1
  101. package/fesm2022/radix-ng-primitives-toggle-group.mjs +29 -19
  102. package/fesm2022/radix-ng-primitives-toggle-group.mjs.map +1 -1
  103. package/fesm2022/radix-ng-primitives-toggle.mjs +16 -11
  104. package/fesm2022/radix-ng-primitives-toggle.mjs.map +1 -1
  105. package/fesm2022/radix-ng-primitives-toolbar.mjs +38 -30
  106. package/fesm2022/radix-ng-primitives-toolbar.mjs.map +1 -1
  107. package/fesm2022/radix-ng-primitives-tooltip.mjs +118 -63
  108. package/fesm2022/radix-ng-primitives-tooltip.mjs.map +1 -1
  109. package/fesm2022/radix-ng-primitives-visually-hidden.mjs +31 -20
  110. package/fesm2022/radix-ng-primitives-visually-hidden.mjs.map +1 -1
  111. package/package.json +2 -2
  112. package/types/radix-ng-primitives-autocomplete.d.ts +3 -1
  113. package/types/radix-ng-primitives-combobox.d.ts +28 -9
  114. package/types/radix-ng-primitives-context-menu.d.ts +2 -0
  115. package/types/radix-ng-primitives-dialog.d.ts +6 -3
  116. package/types/radix-ng-primitives-floating-focus-manager.d.ts +11 -0
  117. package/types/radix-ng-primitives-menu.d.ts +47 -15
  118. package/types/radix-ng-primitives-menubar.d.ts +6 -1
  119. package/types/radix-ng-primitives-navigation-menu.d.ts +8 -6
  120. package/types/radix-ng-primitives-popover.d.ts +12 -4
  121. package/types/radix-ng-primitives-preview-card.d.ts +18 -5
  122. package/types/radix-ng-primitives-select.d.ts +186 -391
  123. package/types/radix-ng-primitives-tooltip.d.ts +17 -3
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { inject, ElementRef, model, input, booleanAttribute, output, signal, computed, effect, untracked, Directive, DestroyRef, isDevMode, Injector, afterNextRender, numberAttribute, PLATFORM_ID, NgModule } from '@angular/core';
2
+ import { InjectionToken, inject, ElementRef, model, input, booleanAttribute, output, signal, computed, effect, untracked, Directive, DestroyRef, isDevMode, Injector, afterNextRender, numberAttribute, PLATFORM_ID, NgModule } from '@angular/core';
3
3
  import * as i1 from '@radix-ng/primitives/popper';
4
4
  import { RdxPopper, RdxPopperContentWrapper, RdxPopperArrow, RdxPopperContent, legacyPopperVars, provideRdxPopperContentWrapper, provideRdxPopperContentConfig, RdxPopperAnchor } from '@radix-ng/primitives/popper';
5
5
  import * as i2 from '@radix-ng/primitives/core';
@@ -79,6 +79,12 @@ function getMenuItemType(element) {
79
79
  }
80
80
 
81
81
  const [injectRdxMenuRootContext, provideRdxMenuRootContext] = createContext('RdxMenuRootContext', 'components/menu');
82
+ /**
83
+ * Ambient modality for a menu, provided by a coordinator (e.g. `Menubar`) so its child menus inherit
84
+ * the coordinator's `modal` setting instead of each defaulting independently. A top-level menu prefers
85
+ * this over its own `modal` input when present; submenus stay non-modal regardless.
86
+ */
87
+ const RDX_MENU_AMBIENT_MODAL = new InjectionToken('RdxMenuAmbientModal');
82
88
  function buildContext(instance) {
83
89
  return {
84
90
  isOpen: instance.open,
@@ -95,6 +101,7 @@ function buildContext(instance) {
95
101
  isSubmenu: instance.isSubmenu.asReadonly(),
96
102
  parentType: instance.parentType,
97
103
  lastOpenChangeReason: instance.lastOpenChangeReason.asReadonly(),
104
+ instantType: instance.instantType,
98
105
  allowMouseUpTrigger: instance.allowMouseUpTrigger,
99
106
  openedByTouch: instance.openedByTouch.asReadonly(),
100
107
  openInteractionType: instance.openInteractionType.asReadonly(),
@@ -133,6 +140,8 @@ class RdxMenuRoot {
133
140
  this.popper = inject(RdxPopper);
134
141
  this.parentRoot = inject(RdxMenuRoot, { optional: true, skipSelf: true });
135
142
  this.providedDirection = injectDirection();
143
+ /** Ambient modality from an enclosing coordinator (e.g. Menubar). Overrides own `modal` for top-level menus. */
144
+ this.ambientModal = inject(RDX_MENU_AMBIENT_MODAL, { optional: true });
136
145
  /**
137
146
  * The shared per-popup floating context (ADR 0015 §1) — `open` mirrors this menu's open state, the
138
147
  * trigger registry is bridged from {@link registerTrigger}, and the reference / floating elements are
@@ -146,7 +155,8 @@ class RdxMenuRoot {
146
155
  this.transition = useTransitionStatus((open) => this.onOpenChangeComplete.emit(open));
147
156
  this.hasAppliedDefaultOpen = false;
148
157
  /** Whether the menu is currently open. */
149
- this.open = model(false, ...(ngDevMode ? [{ debugName: "open" }] : /* istanbul ignore next */ []));
158
+ this.open = model(false, /* @ts-ignore */
159
+ ...(ngDevMode ? [{ debugName: "open" }] : /* istanbul ignore next */ []));
150
160
  /** Whether the menu is initially open. */
151
161
  this.defaultOpen = input(false, { ...(ngDevMode ? { debugName: "defaultOpen" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
152
162
  /** Whether interactions with the menu are disabled. */
@@ -161,7 +171,8 @@ class RdxMenuRoot {
161
171
  /** Whether moving the pointer over items should highlight them. */
162
172
  this.highlightItemOnHover = input(true, { ...(ngDevMode ? { debugName: "highlightItemOnHover" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
163
173
  /** The menu orientation. */
164
- this.orientation = input('vertical', ...(ngDevMode ? [{ debugName: "orientation" }] : /* istanbul ignore next */ []));
174
+ this.orientation = input('vertical', /* @ts-ignore */
175
+ ...(ngDevMode ? [{ debugName: "orientation" }] : /* istanbul ignore next */ []));
165
176
  /** Text direction for submenu arrow-key behavior. Inherited by nested submenu roots. */
166
177
  this.dirInput = input(undefined, { ...(ngDevMode ? { debugName: "dirInput" } : /* istanbul ignore next */ {}), alias: 'dir' });
167
178
  /** Whether pressing Escape inside a submenu closes the whole menu chain. */
@@ -170,18 +181,27 @@ class RdxMenuRoot {
170
181
  this.onOpenChange = output();
171
182
  /** Emits when the open/close CSS transition or animation finishes. */
172
183
  this.onOpenChangeComplete = output();
173
- this.trigger = signal(undefined, ...(ngDevMode ? [{ debugName: "trigger" }] : /* istanbul ignore next */ []));
174
- this.popupElement = signal(undefined, ...(ngDevMode ? [{ debugName: "popupElement" }] : /* istanbul ignore next */ []));
175
- this.beforeContentFocusGuard = signal(null, ...(ngDevMode ? [{ debugName: "beforeContentFocusGuard" }] : /* istanbul ignore next */ []));
184
+ this.trigger = signal(undefined, /* @ts-ignore */
185
+ ...(ngDevMode ? [{ debugName: "trigger" }] : /* istanbul ignore next */ []));
186
+ this.popupElement = signal(undefined, /* @ts-ignore */
187
+ ...(ngDevMode ? [{ debugName: "popupElement" }] : /* istanbul ignore next */ []));
188
+ this.beforeContentFocusGuard = signal(null, /* @ts-ignore */
189
+ ...(ngDevMode ? [{ debugName: "beforeContentFocusGuard" }] : /* istanbul ignore next */ []));
176
190
  this.transitionStatus = this.transition.status;
177
- this.activeIndex = signal(null, ...(ngDevMode ? [{ debugName: "activeIndex" }] : /* istanbul ignore next */ []));
191
+ this.activeIndex = signal(null, /* @ts-ignore */
192
+ ...(ngDevMode ? [{ debugName: "activeIndex" }] : /* istanbul ignore next */ []));
178
193
  /** Whether the popup grabs focus when it opens. Set false for menubar hover-switching. */
179
- this.autoFocus = signal('first', ...(ngDevMode ? [{ debugName: "autoFocus" }] : /* istanbul ignore next */ []));
180
- this.isSubmenu = signal(false, ...(ngDevMode ? [{ debugName: "isSubmenu" }] : /* istanbul ignore next */ []));
194
+ this.autoFocus = signal('first', /* @ts-ignore */
195
+ ...(ngDevMode ? [{ debugName: "autoFocus" }] : /* istanbul ignore next */ []));
196
+ this.isSubmenu = signal(false, /* @ts-ignore */
197
+ ...(ngDevMode ? [{ debugName: "isSubmenu" }] : /* istanbul ignore next */ []));
181
198
  /** Set by `RdxContextMenuRoot` (it composes this root) — distinguishes a context menu from a dropdown. */
182
- this.isContextMenu = signal(false, ...(ngDevMode ? [{ debugName: "isContextMenu" }] : /* istanbul ignore next */ []));
183
- this.hasTriggerInteractionHandler = signal(false, ...(ngDevMode ? [{ debugName: "hasTriggerInteractionHandler" }] : /* istanbul ignore next */ []));
184
- this.preventUnmountOnClose = signal(false, ...(ngDevMode ? [{ debugName: "preventUnmountOnClose" }] : /* istanbul ignore next */ []));
199
+ this.isContextMenu = signal(false, /* @ts-ignore */
200
+ ...(ngDevMode ? [{ debugName: "isContextMenu" }] : /* istanbul ignore next */ []));
201
+ this.hasTriggerInteractionHandler = signal(false, /* @ts-ignore */
202
+ ...(ngDevMode ? [{ debugName: "hasTriggerInteractionHandler" }] : /* istanbul ignore next */ []));
203
+ this.preventUnmountOnClose = signal(false, /* @ts-ignore */
204
+ ...(ngDevMode ? [{ debugName: "preventUnmountOnClose" }] : /* istanbul ignore next */ []));
185
205
  /**
186
206
  * What kind of parent this menu has (Base UI `MenuParent.type`). A submenu wins over everything (its
187
207
  * parent is a menu); otherwise a context-menu marker, then a menubar (detected by the trigger
@@ -198,22 +218,54 @@ class RdxMenuRoot {
198
218
  return 'menubar';
199
219
  }
200
220
  return undefined;
201
- }, ...(ngDevMode ? [{ debugName: "parentType" }] : /* istanbul ignore next */ []));
221
+ }, /* @ts-ignore */
222
+ ...(ngDevMode ? [{ debugName: "parentType" }] : /* istanbul ignore next */ []));
202
223
  /** The reason for the most recent open-change (Base UI open-change `reason`), for the per-kind policy. */
203
- this.lastOpenChangeReason = signal('none', ...(ngDevMode ? [{ debugName: "lastOpenChangeReason" }] : /* istanbul ignore next */ []));
204
- this.localAllowMouseUpTrigger = signal(false, ...(ngDevMode ? [{ debugName: "localAllowMouseUpTrigger" }] : /* istanbul ignore next */ []));
205
- this.allowMouseUpTrigger = computed(() => this.parentRoot?.allowMouseUpTrigger() ?? this.localAllowMouseUpTrigger(), ...(ngDevMode ? [{ debugName: "allowMouseUpTrigger" }] : /* istanbul ignore next */ []));
224
+ this.lastOpenChangeReason = signal('none', /* @ts-ignore */
225
+ ...(ngDevMode ? [{ debugName: "lastOpenChangeReason" }] : /* istanbul ignore next */ []));
226
+ this.localAllowMouseUpTrigger = signal(false, /* @ts-ignore */
227
+ ...(ngDevMode ? [{ debugName: "localAllowMouseUpTrigger" }] : /* istanbul ignore next */ []));
228
+ this.allowMouseUpTrigger = computed(() => this.parentRoot?.allowMouseUpTrigger() ?? this.localAllowMouseUpTrigger(), /* @ts-ignore */
229
+ ...(ngDevMode ? [{ debugName: "allowMouseUpTrigger" }] : /* istanbul ignore next */ []));
206
230
  /** Whether the current open was initiated by **touch** (ADR 0016 §3 — gates the anchored scroll lock). */
207
- this.openedByTouch = signal(false, ...(ngDevMode ? [{ debugName: "openedByTouch" }] : /* istanbul ignore next */ []));
208
- this.openInteractionType = signal(null, ...(ngDevMode ? [{ debugName: "openInteractionType" }] : /* istanbul ignore next */ []));
209
- this.closeInteractionType = signal(null, ...(ngDevMode ? [{ debugName: "closeInteractionType" }] : /* istanbul ignore next */ []));
210
- this.effectiveDisabled = computed(() => this.disabled() || (this.parentRoot?.effectiveDisabled() ?? false), ...(ngDevMode ? [{ debugName: "effectiveDisabled" }] : /* istanbul ignore next */ []));
231
+ this.openedByTouch = signal(false, /* @ts-ignore */
232
+ ...(ngDevMode ? [{ debugName: "openedByTouch" }] : /* istanbul ignore next */ []));
233
+ this.openInteractionType = signal(null, /* @ts-ignore */
234
+ ...(ngDevMode ? [{ debugName: "openInteractionType" }] : /* istanbul ignore next */ []));
235
+ this.closeInteractionType = signal(null, /* @ts-ignore */
236
+ ...(ngDevMode ? [{ debugName: "closeInteractionType" }] : /* istanbul ignore next */ []));
237
+ this.effectiveDisabled = computed(() => this.disabled() || (this.parentRoot?.effectiveDisabled() ?? false), /* @ts-ignore */
238
+ ...(ngDevMode ? [{ debugName: "effectiveDisabled" }] : /* istanbul ignore next */ []));
211
239
  this.dir = computed(() => {
212
240
  return this.dirInput() ?? this.parentRoot?.dir() ?? this.providedDirection();
213
- }, ...(ngDevMode ? [{ debugName: "dir" }] : /* istanbul ignore next */ []));
214
- this.effectiveModal = computed(() => this.modal() && !this.isSubmenu(), ...(ngDevMode ? [{ debugName: "effectiveModal" }] : /* istanbul ignore next */ []));
215
- this.state = computed(() => (this.open() ? 'open' : 'closed'), ...(ngDevMode ? [{ debugName: "state" }] : /* istanbul ignore next */ []));
216
- this.present = computed(() => this.open() || this.preventUnmountOnClose(), ...(ngDevMode ? [{ debugName: "present" }] : /* istanbul ignore next */ []));
241
+ }, /* @ts-ignore */
242
+ ...(ngDevMode ? [{ debugName: "dir" }] : /* istanbul ignore next */ []));
243
+ this.effectiveModal = computed(() => (this.ambientModal?.() ?? this.modal()) && !this.isSubmenu(), /* @ts-ignore */
244
+ ...(ngDevMode ? [{ debugName: "effectiveModal" }] : /* istanbul ignore next */ []));
245
+ this.state = computed(() => (this.open() ? 'open' : 'closed'), /* @ts-ignore */
246
+ ...(ngDevMode ? [{ debugName: "state" }] : /* istanbul ignore next */ []));
247
+ this.present = computed(() => this.open() || this.preventUnmountOnClose(), /* @ts-ignore */
248
+ ...(ngDevMode ? [{ debugName: "present" }] : /* istanbul ignore next */ []));
249
+ /** Base UI `data-instant`: the open/close reason classified into the instant-suppression bucket. */
250
+ this.instantType = computed(() => {
251
+ const reason = this.lastOpenChangeReason();
252
+ if (this.open()) {
253
+ if (reason === 'sibling-open')
254
+ return 'trigger-change';
255
+ if (reason === 'trigger-press' || reason === 'trigger-focus' || reason === 'list-navigation') {
256
+ return 'click';
257
+ }
258
+ return undefined;
259
+ }
260
+ if (reason === 'escape-key' ||
261
+ reason === 'outside-press' ||
262
+ reason === 'focus-out' ||
263
+ reason === 'cancel-open') {
264
+ return 'dismiss';
265
+ }
266
+ return undefined;
267
+ }, /* @ts-ignore */
268
+ ...(ngDevMode ? [{ debugName: "instantType" }] : /* istanbul ignore next */ []));
217
269
  effect(() => {
218
270
  const defaultOpen = this.defaultOpen();
219
271
  if (!this.hasAppliedDefaultOpen && defaultOpen) {
@@ -411,8 +463,8 @@ class RdxMenuRoot {
411
463
  const item = autoFocus === 'last' ? items.at(-1) : items[0];
412
464
  (item ?? popup).focus({ preventScroll: true });
413
465
  }
414
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxMenuRoot, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
415
- 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: [
466
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: RdxMenuRoot, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
467
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.2", 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: [
416
468
  provideRdxMenuRootContext(contextFactory),
417
469
  // New floating foundation (ADR 0015/0017). Inherit-or-create the tree so a submenu shares its
418
470
  // parent menu's tree; the per-popup root context bridges open / triggers / reference.
@@ -420,7 +472,7 @@ class RdxMenuRoot {
420
472
  provideFloatingRootContext(() => inject(RdxMenuRoot).floatingContext)
421
473
  ], exportAs: ["rdxMenuRoot"], hostDirectives: [{ directive: i1.RdxPopper }], ngImport: i0 }); }
422
474
  }
423
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxMenuRoot, decorators: [{
475
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: RdxMenuRoot, decorators: [{
424
476
  type: Directive,
425
477
  args: [{
426
478
  selector: '[rdxMenuRoot],[rdxMenuSubmenuRoot]',
@@ -444,14 +496,17 @@ class RdxMenuArrow {
444
496
  constructor() {
445
497
  this.rootContext = injectRdxMenuRootContext();
446
498
  this.wrapper = inject(RdxPopperContentWrapper, { optional: true });
447
- this.side = computed(() => this.wrapper?.placedSide(), ...(ngDevMode ? [{ debugName: "side" }] : /* istanbul ignore next */ []));
448
- this.align = computed(() => this.wrapper?.placedAlign(), ...(ngDevMode ? [{ debugName: "align" }] : /* istanbul ignore next */ []));
449
- this.uncentered = computed(() => this.wrapper?.arrowUncentered() ?? false, ...(ngDevMode ? [{ debugName: "uncentered" }] : /* istanbul ignore next */ []));
450
- }
451
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxMenuArrow, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
452
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.9", type: RdxMenuArrow, isStandalone: true, selector: "[rdxMenuArrow]", host: { properties: { "attr.data-open": "rootContext.isOpen() ? \"\" : undefined", "attr.data-closed": "rootContext.isOpen() ? undefined : \"\"", "attr.data-side": "side()", "attr.data-align": "align()", "attr.data-uncentered": "uncentered() ? \"\" : undefined" } }, exportAs: ["rdxMenuArrow"], hostDirectives: [{ directive: i1.RdxPopperArrow }], ngImport: i0 }); }
499
+ this.side = computed(() => this.wrapper?.placedSide(), /* @ts-ignore */
500
+ ...(ngDevMode ? [{ debugName: "side" }] : /* istanbul ignore next */ []));
501
+ this.align = computed(() => this.wrapper?.placedAlign(), /* @ts-ignore */
502
+ ...(ngDevMode ? [{ debugName: "align" }] : /* istanbul ignore next */ []));
503
+ this.uncentered = computed(() => this.wrapper?.arrowUncentered() ?? false, /* @ts-ignore */
504
+ ...(ngDevMode ? [{ debugName: "uncentered" }] : /* istanbul ignore next */ []));
505
+ }
506
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: RdxMenuArrow, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
507
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.2", type: RdxMenuArrow, isStandalone: true, selector: "[rdxMenuArrow]", host: { properties: { "attr.data-open": "rootContext.isOpen() ? \"\" : undefined", "attr.data-closed": "rootContext.isOpen() ? undefined : \"\"", "attr.data-side": "side()", "attr.data-align": "align()", "attr.data-uncentered": "uncentered() ? \"\" : undefined" } }, exportAs: ["rdxMenuArrow"], hostDirectives: [{ directive: i1.RdxPopperArrow }], ngImport: i0 }); }
453
508
  }
454
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxMenuArrow, decorators: [{
509
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: RdxMenuArrow, decorators: [{
455
510
  type: Directive,
456
511
  args: [{
457
512
  selector: '[rdxMenuArrow]',
@@ -476,10 +531,10 @@ class RdxMenuBackdrop {
476
531
  constructor() {
477
532
  this.rootContext = injectRdxMenuRootContext();
478
533
  }
479
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxMenuBackdrop, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
480
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.9", type: RdxMenuBackdrop, isStandalone: true, selector: "[rdxMenuBackdrop]", host: { properties: { "attr.data-open": "rootContext.isOpen() ? \"\" : undefined", "attr.data-closed": "rootContext.isOpen() ? undefined : \"\"", "attr.data-state": "rootContext.isOpen() ? \"open\" : \"closed\"", "attr.data-starting-style": "rootContext.transitionStatus() === \"starting\" ? \"\" : undefined", "attr.data-ending-style": "rootContext.transitionStatus() === \"ending\" ? \"\" : undefined" } }, exportAs: ["rdxMenuBackdrop"], ngImport: i0 }); }
534
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: RdxMenuBackdrop, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
535
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.2", type: RdxMenuBackdrop, isStandalone: true, selector: "[rdxMenuBackdrop]", host: { properties: { "attr.data-open": "rootContext.isOpen() ? \"\" : undefined", "attr.data-closed": "rootContext.isOpen() ? undefined : \"\"", "attr.data-starting-style": "rootContext.transitionStatus() === \"starting\" ? \"\" : undefined", "attr.data-ending-style": "rootContext.transitionStatus() === \"ending\" ? \"\" : undefined" } }, exportAs: ["rdxMenuBackdrop"], ngImport: i0 }); }
481
536
  }
482
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxMenuBackdrop, decorators: [{
537
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: RdxMenuBackdrop, decorators: [{
483
538
  type: Directive,
484
539
  args: [{
485
540
  selector: '[rdxMenuBackdrop]',
@@ -487,7 +542,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
487
542
  host: {
488
543
  '[attr.data-open]': 'rootContext.isOpen() ? "" : undefined',
489
544
  '[attr.data-closed]': 'rootContext.isOpen() ? undefined : ""',
490
- '[attr.data-state]': 'rootContext.isOpen() ? "open" : "closed"',
491
545
  '[attr.data-starting-style]': 'rootContext.transitionStatus() === "starting" ? "" : undefined',
492
546
  '[attr.data-ending-style]': 'rootContext.transitionStatus() === "ending" ? "" : undefined'
493
547
  }
@@ -516,22 +570,26 @@ class RdxMenuCheckboxItem {
516
570
  this.rootContext = injectRdxMenuRootContext(true);
517
571
  this.listItem = inject(RdxCompositeListItem, { self: true });
518
572
  this.elementRef = inject(ElementRef);
519
- this.isFocused = signal(false, ...(ngDevMode ? [{ debugName: "isFocused" }] : /* istanbul ignore next */ []));
573
+ this.isFocused = signal(false, /* @ts-ignore */
574
+ ...(ngDevMode ? [{ debugName: "isFocused" }] : /* istanbul ignore next */ []));
520
575
  /** Whether this item is disabled. */
521
576
  this.disabled = input(false, { ...(ngDevMode ? { debugName: "disabled" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
522
577
  /** Whether toggling closes the menu. Defaults to false — checkbox items stay open. */
523
578
  this.closeOnClick = input(false, { ...(ngDevMode ? { debugName: "closeOnClick" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
524
579
  /** Explicit typeahead label. When set, overrides textContent for character search. */
525
- this.label = input(undefined, ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
580
+ this.label = input(undefined, /* @ts-ignore */
581
+ ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
526
582
  /** The checked state of the item. */
527
- this.checked = model(false, ...(ngDevMode ? [{ debugName: "checked" }] : /* istanbul ignore next */ []));
528
- /** Emits when the checked state changes. */
583
+ this.checked = model(false, /* @ts-ignore */
584
+ ...(ngDevMode ? [{ debugName: "checked" }] : /* istanbul ignore next */ []));
585
+ /** Emits before the checked state changes; call `eventDetails.cancel()` to veto it. */
529
586
  this.onCheckedChange = output();
530
- this.highlighted = computed(() => this.rootContext?.activeIndex() === this.listItem.index() || this.isFocused(), ...(ngDevMode ? [{ debugName: "highlighted" }] : /* istanbul ignore next */ []));
531
- this.effectiveDisabled = computed(() => this.disabled() || (this.rootContext?.disabled() ?? false), ...(ngDevMode ? [{ debugName: "effectiveDisabled" }] : /* istanbul ignore next */ []));
587
+ this.highlighted = computed(() => this.rootContext?.activeIndex() === this.listItem.index() || this.isFocused(), /* @ts-ignore */
588
+ ...(ngDevMode ? [{ debugName: "highlighted" }] : /* istanbul ignore next */ []));
589
+ this.effectiveDisabled = computed(() => this.disabled() || (this.rootContext?.disabled() ?? false), /* @ts-ignore */
590
+ ...(ngDevMode ? [{ debugName: "effectiveDisabled" }] : /* istanbul ignore next */ []));
532
591
  // Expose helpers for host bindings
533
592
  this.isIndeterminate = isIndeterminate;
534
- this.getCheckedState = getCheckedState;
535
593
  effect(() => {
536
594
  this.listItem.setMetadata({
537
595
  type: 'checkbox-item',
@@ -575,9 +633,9 @@ class RdxMenuCheckboxItem {
575
633
  onItemClick() {
576
634
  if (this.effectiveDisabled())
577
635
  return;
578
- this.toggleChecked();
579
- if (this.closeOnClick())
636
+ if (this.toggleChecked() && this.closeOnClick()) {
580
637
  this.rootContext?.closeEntireMenu();
638
+ }
581
639
  }
582
640
  onMouseUp(event) {
583
641
  if (this.effectiveDisabled() || event.button !== 0 || !this.rootContext?.allowMouseUpTrigger()) {
@@ -590,14 +648,20 @@ class RdxMenuCheckboxItem {
590
648
  if (this.effectiveDisabled())
591
649
  return;
592
650
  event.preventDefault();
593
- this.toggleChecked();
594
- if (this.closeOnClick())
651
+ if (this.toggleChecked(event) && this.closeOnClick()) {
595
652
  this.rootContext?.closeEntireMenu();
653
+ }
596
654
  }
597
- toggleChecked() {
655
+ /** Emits the cancelable change, applies it unless vetoed, and reports whether it was applied. */
656
+ toggleChecked(event) {
598
657
  const next = isIndeterminate(this.checked()) ? true : !this.checked();
658
+ const { eventDetails } = createCancelableChangeEventDetails('none', event ?? new Event('menu.checked-change'));
659
+ this.onCheckedChange.emit({ checked: next, eventDetails });
660
+ if (eventDetails.isCanceled()) {
661
+ return false;
662
+ }
599
663
  this.checked.set(next);
600
- this.onCheckedChange.emit(next);
664
+ return true;
601
665
  }
602
666
  setActiveIndex() {
603
667
  if (!this.rootContext || this.rootContext.disabled()) {
@@ -613,10 +677,10 @@ class RdxMenuCheckboxItem {
613
677
  this.rootContext.setActiveIndex(null);
614
678
  }
615
679
  }
616
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxMenuCheckboxItem, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
617
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.9", type: RdxMenuCheckboxItem, isStandalone: true, selector: "[rdxMenuCheckboxItem]", inputs: { disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, closeOnClick: { classPropertyName: "closeOnClick", publicName: "closeOnClick", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, checked: { classPropertyName: "checked", publicName: "checked", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { checked: "checkedChange", onCheckedChange: "onCheckedChange" }, host: { attributes: { "role": "menuitemcheckbox" }, listeners: { "focus": "onFocus()", "blur": "onBlur()", "pointermove": "onPointerMove($event)", "pointerleave": "onPointerLeave($event)", "mouseup": "onMouseUp($event)", "click": "onItemClick()", "keydown.enter": "onActivate($event)", "keydown.space": "onActivate($event)" }, properties: { "attr.tabindex": "rootContext?.isOpen() && highlighted() ? 0 : -1", "attr.aria-checked": "isIndeterminate(checked()) ? \"mixed\" : checked()", "attr.data-state": "getCheckedState(checked())", "attr.data-disabled": "effectiveDisabled() ? \"\" : undefined", "attr.aria-disabled": "effectiveDisabled() ? true : undefined", "attr.data-highlighted": "highlighted() ? \"\" : undefined", "attr.data-label": "label() ?? undefined" } }, providers: [provideRdxMenuCheckboxItemContext(checkboxItemContextFactory)], exportAs: ["rdxMenuCheckboxItem"], hostDirectives: [{ directive: i1$1.RdxCompositeListItem }], ngImport: i0 }); }
680
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: RdxMenuCheckboxItem, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
681
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.2", type: RdxMenuCheckboxItem, isStandalone: true, selector: "[rdxMenuCheckboxItem]", inputs: { disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, closeOnClick: { classPropertyName: "closeOnClick", publicName: "closeOnClick", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, checked: { classPropertyName: "checked", publicName: "checked", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { checked: "checkedChange", onCheckedChange: "onCheckedChange" }, host: { attributes: { "role": "menuitemcheckbox" }, listeners: { "focus": "onFocus()", "blur": "onBlur()", "pointermove": "onPointerMove($event)", "pointerleave": "onPointerLeave($event)", "mouseup": "onMouseUp($event)", "click": "onItemClick()", "keydown.enter": "onActivate($event)", "keydown.space": "onActivate($event)" }, properties: { "attr.tabindex": "rootContext?.isOpen() && highlighted() ? 0 : -1", "attr.aria-checked": "isIndeterminate(checked()) ? \"mixed\" : checked()", "attr.data-checked": "checked() === true ? \"\" : undefined", "attr.data-unchecked": "checked() === false ? \"\" : undefined", "attr.data-indeterminate": "isIndeterminate(checked()) ? \"\" : undefined", "attr.data-disabled": "effectiveDisabled() ? \"\" : undefined", "attr.aria-disabled": "effectiveDisabled() ? true : undefined", "attr.data-highlighted": "highlighted() ? \"\" : undefined", "attr.data-label": "label() ?? undefined" } }, providers: [provideRdxMenuCheckboxItemContext(checkboxItemContextFactory)], exportAs: ["rdxMenuCheckboxItem"], hostDirectives: [{ directive: i1$1.RdxCompositeListItem }], ngImport: i0 }); }
618
682
  }
619
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxMenuCheckboxItem, decorators: [{
683
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: RdxMenuCheckboxItem, decorators: [{
620
684
  type: Directive,
621
685
  args: [{
622
686
  selector: '[rdxMenuCheckboxItem]',
@@ -627,7 +691,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
627
691
  role: 'menuitemcheckbox',
628
692
  '[attr.tabindex]': 'rootContext?.isOpen() && highlighted() ? 0 : -1',
629
693
  '[attr.aria-checked]': 'isIndeterminate(checked()) ? "mixed" : checked()',
630
- '[attr.data-state]': 'getCheckedState(checked())',
694
+ '[attr.data-checked]': 'checked() === true ? "" : undefined',
695
+ '[attr.data-unchecked]': 'checked() === false ? "" : undefined',
696
+ '[attr.data-indeterminate]': 'isIndeterminate(checked()) ? "" : undefined',
631
697
  '[attr.data-disabled]': 'effectiveDisabled() ? "" : undefined',
632
698
  '[attr.aria-disabled]': 'effectiveDisabled() ? true : undefined',
633
699
  '[attr.data-highlighted]': 'highlighted() ? "" : undefined',
@@ -653,19 +719,23 @@ class RdxMenuCheckboxItemIndicator {
653
719
  this.itemContext = injectRdxMenuCheckboxItemContext();
654
720
  /** Keep the indicator in the DOM when unchecked so CSS exit animations can play. */
655
721
  this.keepMounted = input(false, { ...(ngDevMode ? { debugName: "keepMounted" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
656
- this.dataState = computed(() => getCheckedState(this.itemContext.checked()), ...(ngDevMode ? [{ debugName: "dataState" }] : /* istanbul ignore next */ []));
657
- this.isVisible = computed(() => isIndeterminate(this.itemContext.checked()) || this.itemContext.checked() === true, ...(ngDevMode ? [{ debugName: "isVisible" }] : /* istanbul ignore next */ []));
722
+ this.checked = this.itemContext.checked;
723
+ this.isIndeterminate = isIndeterminate;
724
+ this.isVisible = computed(() => isIndeterminate(this.itemContext.checked()) || this.itemContext.checked() === true, /* @ts-ignore */
725
+ ...(ngDevMode ? [{ debugName: "isVisible" }] : /* istanbul ignore next */ []));
658
726
  }
659
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxMenuCheckboxItemIndicator, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
660
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.9", type: RdxMenuCheckboxItemIndicator, isStandalone: true, selector: "[rdxMenuCheckboxItemIndicator]", inputs: { keepMounted: { classPropertyName: "keepMounted", publicName: "keepMounted", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.data-state": "dataState()", "attr.data-starting-style": "isVisible() ? \"\" : undefined", "attr.data-ending-style": "!isVisible() ? \"\" : undefined", "style.display": "!keepMounted() && !isVisible() ? \"none\" : null" } }, exportAs: ["rdxMenuCheckboxItemIndicator"], ngImport: i0 }); }
727
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: RdxMenuCheckboxItemIndicator, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
728
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.2", type: RdxMenuCheckboxItemIndicator, isStandalone: true, selector: "[rdxMenuCheckboxItemIndicator]", inputs: { keepMounted: { classPropertyName: "keepMounted", publicName: "keepMounted", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.data-checked": "checked() === true ? \"\" : undefined", "attr.data-unchecked": "checked() === false ? \"\" : undefined", "attr.data-indeterminate": "isIndeterminate(checked()) ? \"\" : undefined", "attr.data-starting-style": "isVisible() ? \"\" : undefined", "attr.data-ending-style": "!isVisible() ? \"\" : undefined", "style.display": "!keepMounted() && !isVisible() ? \"none\" : null" } }, exportAs: ["rdxMenuCheckboxItemIndicator"], ngImport: i0 }); }
661
729
  }
662
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxMenuCheckboxItemIndicator, decorators: [{
730
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: RdxMenuCheckboxItemIndicator, decorators: [{
663
731
  type: Directive,
664
732
  args: [{
665
733
  selector: '[rdxMenuCheckboxItemIndicator]',
666
734
  exportAs: 'rdxMenuCheckboxItemIndicator',
667
735
  host: {
668
- '[attr.data-state]': 'dataState()',
736
+ '[attr.data-checked]': 'checked() === true ? "" : undefined',
737
+ '[attr.data-unchecked]': 'checked() === false ? "" : undefined',
738
+ '[attr.data-indeterminate]': 'isIndeterminate(checked()) ? "" : undefined',
669
739
  '[attr.data-starting-style]': 'isVisible() ? "" : undefined',
670
740
  '[attr.data-ending-style]': '!isVisible() ? "" : undefined',
671
741
  '[style.display]': '!keepMounted() && !isVisible() ? "none" : null'
@@ -684,12 +754,13 @@ const groupContextFactory$1 = () => {
684
754
  */
685
755
  class RdxMenuGroup {
686
756
  constructor() {
687
- this.labelId = signal(undefined, ...(ngDevMode ? [{ debugName: "labelId" }] : /* istanbul ignore next */ []));
757
+ this.labelId = signal(undefined, /* @ts-ignore */
758
+ ...(ngDevMode ? [{ debugName: "labelId" }] : /* istanbul ignore next */ []));
688
759
  }
689
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxMenuGroup, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
690
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.9", type: RdxMenuGroup, isStandalone: true, selector: "[rdxMenuGroup]", host: { attributes: { "role": "group" }, properties: { "attr.aria-labelledby": "labelId()" } }, providers: [provideRdxMenuGroupContext(groupContextFactory$1)], exportAs: ["rdxMenuGroup"], ngImport: i0 }); }
760
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: RdxMenuGroup, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
761
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.2", type: RdxMenuGroup, isStandalone: true, selector: "[rdxMenuGroup]", host: { attributes: { "role": "group" }, properties: { "attr.aria-labelledby": "labelId()" } }, providers: [provideRdxMenuGroupContext(groupContextFactory$1)], exportAs: ["rdxMenuGroup"], ngImport: i0 }); }
691
762
  }
692
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxMenuGroup, decorators: [{
763
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: RdxMenuGroup, decorators: [{
693
764
  type: Directive,
694
765
  args: [{
695
766
  selector: '[rdxMenuGroup]',
@@ -716,10 +787,10 @@ class RdxMenuGroupLabel {
716
787
  }
717
788
  });
718
789
  }
719
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxMenuGroupLabel, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
720
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.9", type: RdxMenuGroupLabel, isStandalone: true, selector: "[rdxMenuGroupLabel]", host: { properties: { "attr.id": "id" } }, exportAs: ["rdxMenuGroupLabel"], ngImport: i0 }); }
790
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: RdxMenuGroupLabel, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
791
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.2", type: RdxMenuGroupLabel, isStandalone: true, selector: "[rdxMenuGroupLabel]", host: { properties: { "attr.id": "id" } }, exportAs: ["rdxMenuGroupLabel"], ngImport: i0 }); }
721
792
  }
722
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxMenuGroupLabel, decorators: [{
793
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: RdxMenuGroupLabel, decorators: [{
723
794
  type: Directive,
724
795
  args: [{
725
796
  selector: '[rdxMenuGroupLabel]',
@@ -738,17 +809,21 @@ class RdxMenuItem {
738
809
  this.rootContext = injectRdxMenuRootContext(true);
739
810
  this.listItem = inject(RdxCompositeListItem, { self: true });
740
811
  this.elementRef = inject(ElementRef);
741
- this.isFocused = signal(false, ...(ngDevMode ? [{ debugName: "isFocused" }] : /* istanbul ignore next */ []));
812
+ this.isFocused = signal(false, /* @ts-ignore */
813
+ ...(ngDevMode ? [{ debugName: "isFocused" }] : /* istanbul ignore next */ []));
742
814
  /** Whether this item is disabled. */
743
815
  this.disabled = input(false, { ...(ngDevMode ? { debugName: "disabled" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
744
816
  /** Whether selecting this item closes the menu. */
745
817
  this.closeOnClick = input(true, { ...(ngDevMode ? { debugName: "closeOnClick" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
746
818
  /** Explicit typeahead label. When set, overrides textContent for character search. */
747
- this.label = input(undefined, ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
819
+ this.label = input(undefined, /* @ts-ignore */
820
+ ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
748
821
  /** Emits when the item is selected. */
749
822
  this.onSelect = output();
750
- this.highlighted = computed(() => this.rootContext?.activeIndex() === this.listItem.index() || this.isFocused(), ...(ngDevMode ? [{ debugName: "highlighted" }] : /* istanbul ignore next */ []));
751
- this.effectiveDisabled = computed(() => this.disabled() || (this.rootContext?.disabled() ?? false), ...(ngDevMode ? [{ debugName: "effectiveDisabled" }] : /* istanbul ignore next */ []));
823
+ this.highlighted = computed(() => this.rootContext?.activeIndex() === this.listItem.index() || this.isFocused(), /* @ts-ignore */
824
+ ...(ngDevMode ? [{ debugName: "highlighted" }] : /* istanbul ignore next */ []));
825
+ this.effectiveDisabled = computed(() => this.disabled() || (this.rootContext?.disabled() ?? false), /* @ts-ignore */
826
+ ...(ngDevMode ? [{ debugName: "effectiveDisabled" }] : /* istanbul ignore next */ []));
752
827
  effect(() => {
753
828
  this.listItem.setMetadata({
754
829
  type: 'regular-item',
@@ -827,10 +902,10 @@ class RdxMenuItem {
827
902
  this.rootContext.setActiveIndex(null);
828
903
  }
829
904
  }
830
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxMenuItem, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
831
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.9", type: RdxMenuItem, isStandalone: true, selector: "[rdxMenuItem]", inputs: { disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, closeOnClick: { classPropertyName: "closeOnClick", publicName: "closeOnClick", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onSelect: "onSelect" }, host: { attributes: { "role": "menuitem" }, listeners: { "focus": "onFocus()", "blur": "onBlur()", "pointermove": "onPointerMove($event)", "pointerleave": "onPointerLeave($event)", "mouseup": "onMouseUp($event)", "click": "onItemClick()", "keydown.enter": "onActivate($event)", "keydown.space": "onActivate($event)" }, properties: { "attr.tabindex": "rootContext?.isOpen() && highlighted() ? 0 : -1", "attr.data-disabled": "effectiveDisabled() ? \"\" : undefined", "attr.aria-disabled": "effectiveDisabled() ? true : undefined", "attr.data-highlighted": "highlighted() ? \"\" : undefined", "attr.data-label": "label() ?? undefined" } }, exportAs: ["rdxMenuItem"], hostDirectives: [{ directive: i1$1.RdxCompositeListItem }], ngImport: i0 }); }
905
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: RdxMenuItem, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
906
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.2", type: RdxMenuItem, isStandalone: true, selector: "[rdxMenuItem]", inputs: { disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, closeOnClick: { classPropertyName: "closeOnClick", publicName: "closeOnClick", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onSelect: "onSelect" }, host: { attributes: { "role": "menuitem" }, listeners: { "focus": "onFocus()", "blur": "onBlur()", "pointermove": "onPointerMove($event)", "pointerleave": "onPointerLeave($event)", "mouseup": "onMouseUp($event)", "click": "onItemClick()", "keydown.enter": "onActivate($event)", "keydown.space": "onActivate($event)" }, properties: { "attr.tabindex": "rootContext?.isOpen() && highlighted() ? 0 : -1", "attr.data-disabled": "effectiveDisabled() ? \"\" : undefined", "attr.aria-disabled": "effectiveDisabled() ? true : undefined", "attr.data-highlighted": "highlighted() ? \"\" : undefined", "attr.data-label": "label() ?? undefined" } }, exportAs: ["rdxMenuItem"], hostDirectives: [{ directive: i1$1.RdxCompositeListItem }], ngImport: i0 }); }
832
907
  }
833
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxMenuItem, decorators: [{
908
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: RdxMenuItem, decorators: [{
834
909
  type: Directive,
835
910
  args: [{
836
911
  selector: '[rdxMenuItem]',
@@ -863,17 +938,21 @@ class RdxMenuLinkItem {
863
938
  this.rootContext = injectRdxMenuRootContext(true);
864
939
  this.listItem = inject(RdxCompositeListItem, { self: true });
865
940
  this.elementRef = inject(ElementRef);
866
- this.isFocused = signal(false, ...(ngDevMode ? [{ debugName: "isFocused" }] : /* istanbul ignore next */ []));
941
+ this.isFocused = signal(false, /* @ts-ignore */
942
+ ...(ngDevMode ? [{ debugName: "isFocused" }] : /* istanbul ignore next */ []));
867
943
  /** Whether this item is disabled. */
868
944
  this.disabled = input(false, { ...(ngDevMode ? { debugName: "disabled" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
869
945
  /** Whether selecting this item closes the menu. Defaults to false — links navigate by default. */
870
946
  this.closeOnClick = input(false, { ...(ngDevMode ? { debugName: "closeOnClick" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
871
947
  /** Explicit typeahead label. When set, overrides textContent for character search. */
872
- this.label = input(undefined, ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
948
+ this.label = input(undefined, /* @ts-ignore */
949
+ ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
873
950
  /** Emits when the item is selected. */
874
951
  this.onSelect = output();
875
- this.highlighted = computed(() => this.rootContext?.activeIndex() === this.listItem.index() || this.isFocused(), ...(ngDevMode ? [{ debugName: "highlighted" }] : /* istanbul ignore next */ []));
876
- this.effectiveDisabled = computed(() => this.disabled() || (this.rootContext?.disabled() ?? false), ...(ngDevMode ? [{ debugName: "effectiveDisabled" }] : /* istanbul ignore next */ []));
952
+ this.highlighted = computed(() => this.rootContext?.activeIndex() === this.listItem.index() || this.isFocused(), /* @ts-ignore */
953
+ ...(ngDevMode ? [{ debugName: "highlighted" }] : /* istanbul ignore next */ []));
954
+ this.effectiveDisabled = computed(() => this.disabled() || (this.rootContext?.disabled() ?? false), /* @ts-ignore */
955
+ ...(ngDevMode ? [{ debugName: "effectiveDisabled" }] : /* istanbul ignore next */ []));
877
956
  effect(() => {
878
957
  this.listItem.setMetadata({
879
958
  type: 'link-item',
@@ -951,10 +1030,10 @@ class RdxMenuLinkItem {
951
1030
  this.rootContext.setActiveIndex(null);
952
1031
  }
953
1032
  }
954
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxMenuLinkItem, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
955
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.9", type: RdxMenuLinkItem, isStandalone: true, selector: "a[rdxMenuLinkItem]", inputs: { disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, closeOnClick: { classPropertyName: "closeOnClick", publicName: "closeOnClick", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onSelect: "onSelect" }, host: { attributes: { "role": "menuitem" }, listeners: { "focus": "onFocus()", "blur": "onBlur()", "pointermove": "onPointerMove($event)", "pointerleave": "onPointerLeave($event)", "mouseup": "onMouseUp($event)", "click": "onItemClick($event)", "keydown.enter": "onActivate($event)", "keydown.space": "onActivate($event)" }, properties: { "attr.tabindex": "rootContext?.isOpen() && highlighted() ? 0 : -1", "attr.data-disabled": "effectiveDisabled() ? \"\" : undefined", "attr.aria-disabled": "effectiveDisabled() ? true : undefined", "attr.data-highlighted": "highlighted() ? \"\" : undefined", "attr.data-label": "label() ?? undefined" } }, exportAs: ["rdxMenuLinkItem"], hostDirectives: [{ directive: i1$1.RdxCompositeListItem }], ngImport: i0 }); }
1033
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: RdxMenuLinkItem, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
1034
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.2", type: RdxMenuLinkItem, isStandalone: true, selector: "a[rdxMenuLinkItem]", inputs: { disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, closeOnClick: { classPropertyName: "closeOnClick", publicName: "closeOnClick", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onSelect: "onSelect" }, host: { attributes: { "role": "menuitem" }, listeners: { "focus": "onFocus()", "blur": "onBlur()", "pointermove": "onPointerMove($event)", "pointerleave": "onPointerLeave($event)", "mouseup": "onMouseUp($event)", "click": "onItemClick($event)", "keydown.enter": "onActivate($event)", "keydown.space": "onActivate($event)" }, properties: { "attr.tabindex": "rootContext?.isOpen() && highlighted() ? 0 : -1", "attr.data-disabled": "effectiveDisabled() ? \"\" : undefined", "attr.aria-disabled": "effectiveDisabled() ? true : undefined", "attr.data-highlighted": "highlighted() ? \"\" : undefined", "attr.data-label": "label() ?? undefined" } }, exportAs: ["rdxMenuLinkItem"], hostDirectives: [{ directive: i1$1.RdxCompositeListItem }], ngImport: i0 }); }
956
1035
  }
957
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxMenuLinkItem, decorators: [{
1036
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: RdxMenuLinkItem, decorators: [{
958
1037
  type: Directive,
959
1038
  args: [{
960
1039
  selector: 'a[rdxMenuLinkItem]',
@@ -993,8 +1072,10 @@ class RdxMenuPopup {
993
1072
  this.wrapper = inject(RdxPopperContentWrapper, { optional: true });
994
1073
  this.elementRef = inject(ElementRef);
995
1074
  this.search = '';
996
- this.align = computed(() => this.wrapper?.placedAlign(), ...(ngDevMode ? [{ debugName: "align" }] : /* istanbul ignore next */ []));
997
- this.side = computed(() => this.wrapper?.placedSide(), ...(ngDevMode ? [{ debugName: "side" }] : /* istanbul ignore next */ []));
1075
+ this.align = computed(() => this.wrapper?.placedAlign(), /* @ts-ignore */
1076
+ ...(ngDevMode ? [{ debugName: "align" }] : /* istanbul ignore next */ []));
1077
+ this.side = computed(() => this.wrapper?.placedSide(), /* @ts-ignore */
1078
+ ...(ngDevMode ? [{ debugName: "side" }] : /* istanbul ignore next */ []));
998
1079
  /**
999
1080
  * Event handler called when the escape key is pressed. Can be prevented.
1000
1081
  */
@@ -1256,8 +1337,8 @@ class RdxMenuPopup {
1256
1337
  this.rootContext.setActiveIndex(item.index);
1257
1338
  item.element.focus({ preventScroll: true });
1258
1339
  }
1259
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxMenuPopup, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
1260
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.9", type: RdxMenuPopup, isStandalone: true, selector: "[rdxMenuPopup]", outputs: { escapeKeyDown: "escapeKeyDown", pointerDownOutside: "pointerDownOutside", focusOutside: "focusOutside", interactOutside: "interactOutside", openAutoFocus: "openAutoFocus", closeAutoFocus: "closeAutoFocus" }, host: { attributes: { "role": "menu", "tabindex": "-1" }, listeners: { "keydown": "handleKeydown($event)", "rdx-menu-close-parent": "handleCloseParent($event)" }, properties: { "attr.aria-orientation": "rootContext.orientation()", "attr.data-closed": "rootContext.isOpen() ? undefined : \"\"", "attr.data-open": "rootContext.isOpen() ? \"\" : undefined", "attr.data-state": "rootContext.isOpen() ? \"open\" : \"closed\"", "attr.data-starting-style": "rootContext.transitionStatus() === \"starting\" ? \"\" : undefined", "attr.data-ending-style": "rootContext.transitionStatus() === \"ending\" ? \"\" : undefined", "attr.data-align": "align()", "attr.data-side": "side()" } }, providers: [
1340
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: RdxMenuPopup, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
1341
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.2", type: RdxMenuPopup, isStandalone: true, selector: "[rdxMenuPopup]", outputs: { escapeKeyDown: "escapeKeyDown", pointerDownOutside: "pointerDownOutside", focusOutside: "focusOutside", interactOutside: "interactOutside", openAutoFocus: "openAutoFocus", closeAutoFocus: "closeAutoFocus" }, host: { attributes: { "role": "menu", "tabindex": "-1" }, listeners: { "keydown": "handleKeydown($event)", "rdx-menu-close-parent": "handleCloseParent($event)" }, properties: { "attr.aria-orientation": "rootContext.orientation()", "attr.data-closed": "rootContext.isOpen() ? undefined : \"\"", "attr.data-open": "rootContext.isOpen() ? \"\" : undefined", "attr.data-instant": "rootContext.instantType()", "attr.data-starting-style": "rootContext.transitionStatus() === \"starting\" ? \"\" : undefined", "attr.data-ending-style": "rootContext.transitionStatus() === \"ending\" ? \"\" : undefined", "attr.data-align": "align()", "attr.data-side": "side()" } }, providers: [
1261
1342
  provideFloatingFocusManagerConfig(() => {
1262
1343
  const rootContext = injectRdxMenuRootContext();
1263
1344
  const popup = inject(ElementRef).nativeElement;
@@ -1308,7 +1389,7 @@ class RdxMenuPopup {
1308
1389
  })
1309
1390
  ], exportAs: ["rdxMenuPopup"], hostDirectives: [{ directive: i1.RdxPopperContent }, { directive: i2.RdxFloatingNodeRegistration }, { directive: i3.RdxFloatingFocusManager }, { directive: i1$1.RdxCompositeList }], ngImport: i0 }); }
1310
1391
  }
1311
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxMenuPopup, decorators: [{
1392
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: RdxMenuPopup, decorators: [{
1312
1393
  type: Directive,
1313
1394
  args: [{
1314
1395
  selector: '[rdxMenuPopup]',
@@ -1370,7 +1451,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
1370
1451
  '[attr.aria-orientation]': 'rootContext.orientation()',
1371
1452
  '[attr.data-closed]': 'rootContext.isOpen() ? undefined : ""',
1372
1453
  '[attr.data-open]': 'rootContext.isOpen() ? "" : undefined',
1373
- '[attr.data-state]': 'rootContext.isOpen() ? "open" : "closed"',
1454
+ '[attr.data-instant]': 'rootContext.instantType()',
1374
1455
  '[attr.data-starting-style]': 'rootContext.transitionStatus() === "starting" ? "" : undefined',
1375
1456
  '[attr.data-ending-style]': 'rootContext.transitionStatus() === "ending" ? "" : undefined',
1376
1457
  '[attr.data-align]': 'align()',
@@ -1391,10 +1472,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
1391
1472
  * custom container, or a backdrop alongside the positioner (multi-root), use the explicit form.
1392
1473
  */
1393
1474
  class RdxMenuPortal {
1394
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxMenuPortal, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
1395
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.9", type: RdxMenuPortal, isStandalone: true, selector: "ng-template[rdxMenuPortal]", providers: [provideRdxPresenceContext(() => ({ present: injectRdxMenuRootContext().present }))], exportAs: ["rdxMenuPortal"], hostDirectives: [{ directive: i1$2.RdxPortalPresence, inputs: ["container", "container"] }], ngImport: i0 }); }
1475
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: RdxMenuPortal, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
1476
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.2", type: RdxMenuPortal, isStandalone: true, selector: "ng-template[rdxMenuPortal]", providers: [provideRdxPresenceContext(() => ({ present: injectRdxMenuRootContext().present }))], exportAs: ["rdxMenuPortal"], hostDirectives: [{ directive: i1$2.RdxPortalPresence, inputs: ["container", "container"] }], ngImport: i0 }); }
1396
1477
  }
1397
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxMenuPortal, decorators: [{
1478
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: RdxMenuPortal, decorators: [{
1398
1479
  type: Directive,
1399
1480
  args: [{
1400
1481
  selector: 'ng-template[rdxMenuPortal]',
@@ -1414,10 +1495,10 @@ class RdxMenuPortalMisuseGuard {
1414
1495
  'Use `*rdxMenuPortal` on the positioner element or `<ng-template rdxMenuPortal>`.', 'components/menu');
1415
1496
  }
1416
1497
  }
1417
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxMenuPortalMisuseGuard, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
1418
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.9", type: RdxMenuPortalMisuseGuard, isStandalone: true, selector: "[rdxMenuPortal]:not(ng-template)", ngImport: i0 }); }
1498
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: RdxMenuPortalMisuseGuard, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
1499
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.2", type: RdxMenuPortalMisuseGuard, isStandalone: true, selector: "[rdxMenuPortal]:not(ng-template)", ngImport: i0 }); }
1419
1500
  }
1420
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxMenuPortalMisuseGuard, decorators: [{
1501
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: RdxMenuPortalMisuseGuard, decorators: [{
1421
1502
  type: Directive,
1422
1503
  args: [{
1423
1504
  selector: '[rdxMenuPortal]:not(ng-template)'
@@ -1481,13 +1562,13 @@ class RdxMenuPositioner extends RdxPopperContentWrapper {
1481
1562
  // modal internal backdrop (finding #1) as a sibling before it.
1482
1563
  afterNextRender(() => setupMenuInternalBackdrop(host, this.rootContext, injector));
1483
1564
  }
1484
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxMenuPositioner, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
1485
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.9", type: RdxMenuPositioner, isStandalone: true, selector: "[rdxMenuPositioner]", host: { properties: { "attr.data-open": "rootContext.isOpen() ? \"\" : undefined", "attr.data-closed": "rootContext.isOpen() ? undefined : \"\"", "style": "legacyVars" } }, providers: [
1565
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: RdxMenuPositioner, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
1566
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.2", type: RdxMenuPositioner, isStandalone: true, selector: "[rdxMenuPositioner]", host: { properties: { "attr.data-open": "rootContext.isOpen() ? \"\" : undefined", "attr.data-closed": "rootContext.isOpen() ? undefined : \"\"", "style": "legacyVars" } }, providers: [
1486
1567
  ...provideRdxPopperContentWrapper(RdxMenuPositioner),
1487
1568
  provideRdxPopperContentConfig({ arrowPadding: 5, collisionPadding: 5, updatePositionStrategy: 'always' })
1488
1569
  ], exportAs: ["rdxMenuPositioner"], usesInheritance: true, ngImport: i0 }); }
1489
1570
  }
1490
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxMenuPositioner, decorators: [{
1571
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: RdxMenuPositioner, decorators: [{
1491
1572
  type: Directive,
1492
1573
  args: [{
1493
1574
  selector: '[rdxMenuPositioner]',
@@ -1528,16 +1609,19 @@ class RdxMenuRadioGroup {
1528
1609
  /**
1529
1610
  * The currently selected value.
1530
1611
  */
1531
- this.value = model(undefined, ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
1612
+ this.value = model(undefined, /* @ts-ignore */
1613
+ ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
1532
1614
  /** The initially selected value for uncontrolled usage. */
1533
- this.defaultValue = input(undefined, ...(ngDevMode ? [{ debugName: "defaultValue" }] : /* istanbul ignore next */ []));
1615
+ this.defaultValue = input(undefined, /* @ts-ignore */
1616
+ ...(ngDevMode ? [{ debugName: "defaultValue" }] : /* istanbul ignore next */ []));
1534
1617
  /** Whether all radio items in the group are disabled. */
1535
1618
  this.disabled = input(false, { ...(ngDevMode ? { debugName: "disabled" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
1536
1619
  /**
1537
- * Emits when the selected value changes.
1620
+ * Emits before the selected value changes; call `eventDetails.cancel()` to veto it.
1538
1621
  */
1539
1622
  this.onValueChange = output();
1540
- this.labelId = signal(undefined, ...(ngDevMode ? [{ debugName: "labelId" }] : /* istanbul ignore next */ []));
1623
+ this.labelId = signal(undefined, /* @ts-ignore */
1624
+ ...(ngDevMode ? [{ debugName: "labelId" }] : /* istanbul ignore next */ []));
1541
1625
  effect(() => {
1542
1626
  const defaultValue = this.defaultValue();
1543
1627
  if (!this.hasAppliedDefaultValue && defaultValue !== undefined) {
@@ -1546,20 +1630,24 @@ class RdxMenuRadioGroup {
1546
1630
  }
1547
1631
  });
1548
1632
  }
1549
- selectValue(newValue) {
1633
+ selectValue(newValue, event) {
1550
1634
  if (this.disabled()) {
1551
1635
  return;
1552
1636
  }
1637
+ const { eventDetails } = createCancelableChangeEventDetails('none', event ?? new Event('menu.value-change'));
1638
+ this.onValueChange.emit({ value: newValue, eventDetails });
1639
+ if (eventDetails.isCanceled()) {
1640
+ return;
1641
+ }
1553
1642
  this.value.set(newValue);
1554
- this.onValueChange.emit(newValue);
1555
1643
  }
1556
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxMenuRadioGroup, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
1557
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.9", type: RdxMenuRadioGroup, isStandalone: true, selector: "[rdxMenuRadioGroup]", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, defaultValue: { classPropertyName: "defaultValue", publicName: "defaultValue", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", onValueChange: "onValueChange" }, host: { attributes: { "role": "group" }, properties: { "attr.aria-labelledby": "labelId()", "attr.data-disabled": "disabled() ? \"\" : undefined" } }, providers: [
1644
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: RdxMenuRadioGroup, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
1645
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.2", type: RdxMenuRadioGroup, isStandalone: true, selector: "[rdxMenuRadioGroup]", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, defaultValue: { classPropertyName: "defaultValue", publicName: "defaultValue", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", onValueChange: "onValueChange" }, host: { attributes: { "role": "group" }, properties: { "attr.aria-labelledby": "labelId()", "attr.data-disabled": "disabled() ? \"\" : undefined" } }, providers: [
1558
1646
  provideRdxMenuRadioGroupContext(radioGroupContextFactory),
1559
1647
  provideRdxMenuGroupContext(groupContextFactory)
1560
1648
  ], exportAs: ["rdxMenuRadioGroup"], ngImport: i0 }); }
1561
1649
  }
1562
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxMenuRadioGroup, decorators: [{
1650
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: RdxMenuRadioGroup, decorators: [{
1563
1651
  type: Directive,
1564
1652
  args: [{
1565
1653
  selector: '[rdxMenuRadioGroup]',
@@ -1592,21 +1680,26 @@ class RdxMenuRadioItem {
1592
1680
  this.radioGroupContext = injectRdxMenuRadioGroupContext();
1593
1681
  this.listItem = inject(RdxCompositeListItem, { self: true });
1594
1682
  this.elementRef = inject(ElementRef);
1595
- this.isFocused = signal(false, ...(ngDevMode ? [{ debugName: "isFocused" }] : /* istanbul ignore next */ []));
1683
+ this.isFocused = signal(false, /* @ts-ignore */
1684
+ ...(ngDevMode ? [{ debugName: "isFocused" }] : /* istanbul ignore next */ []));
1596
1685
  /** The value of this radio item. */
1597
- this.value = input.required(...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
1686
+ this.value = input.required(/* @ts-ignore */
1687
+ ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
1598
1688
  /** Whether this item is disabled. */
1599
1689
  this.disabled = input(false, { ...(ngDevMode ? { debugName: "disabled" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
1600
1690
  /** Whether selecting closes the menu. Defaults to false — radio items stay open. */
1601
1691
  this.closeOnClick = input(false, { ...(ngDevMode ? { debugName: "closeOnClick" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
1602
1692
  /** Explicit typeahead label. When set, overrides textContent for character search. */
1603
- this.label = input(undefined, ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
1693
+ this.label = input(undefined, /* @ts-ignore */
1694
+ ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
1604
1695
  /** Emits when this item is selected. */
1605
1696
  this.onSelect = output();
1606
- this.checked = computed(() => this.radioGroupContext.value() === this.value(), ...(ngDevMode ? [{ debugName: "checked" }] : /* istanbul ignore next */ []));
1607
- this.highlighted = computed(() => this.rootContext?.activeIndex() === this.listItem.index() || this.isFocused(), ...(ngDevMode ? [{ debugName: "highlighted" }] : /* istanbul ignore next */ []));
1608
- this.effectiveDisabled = computed(() => this.disabled() || this.radioGroupContext.disabled() || (this.rootContext?.disabled() ?? false), ...(ngDevMode ? [{ debugName: "effectiveDisabled" }] : /* istanbul ignore next */ []));
1609
- this.getCheckedState = getCheckedState;
1697
+ this.checked = computed(() => this.radioGroupContext.value() === this.value(), /* @ts-ignore */
1698
+ ...(ngDevMode ? [{ debugName: "checked" }] : /* istanbul ignore next */ []));
1699
+ this.highlighted = computed(() => this.rootContext?.activeIndex() === this.listItem.index() || this.isFocused(), /* @ts-ignore */
1700
+ ...(ngDevMode ? [{ debugName: "highlighted" }] : /* istanbul ignore next */ []));
1701
+ this.effectiveDisabled = computed(() => this.disabled() || this.radioGroupContext.disabled() || (this.rootContext?.disabled() ?? false), /* @ts-ignore */
1702
+ ...(ngDevMode ? [{ debugName: "effectiveDisabled" }] : /* istanbul ignore next */ []));
1610
1703
  effect(() => {
1611
1704
  this.listItem.setMetadata({
1612
1705
  type: 'radio-item',
@@ -1688,10 +1781,10 @@ class RdxMenuRadioItem {
1688
1781
  this.rootContext.setActiveIndex(null);
1689
1782
  }
1690
1783
  }
1691
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxMenuRadioItem, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
1692
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.9", type: RdxMenuRadioItem, isStandalone: true, selector: "[rdxMenuRadioItem]", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: true, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, closeOnClick: { classPropertyName: "closeOnClick", publicName: "closeOnClick", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onSelect: "onSelect" }, host: { attributes: { "role": "menuitemradio" }, listeners: { "focus": "onFocus()", "blur": "onBlur()", "pointermove": "onPointerMove($event)", "pointerleave": "onPointerLeave($event)", "mouseup": "onMouseUp($event)", "click": "onItemClick()", "keydown.enter": "onActivate($event)", "keydown.space": "onActivate($event)" }, properties: { "attr.tabindex": "rootContext?.isOpen() && highlighted() ? 0 : -1", "attr.aria-checked": "checked()", "attr.data-state": "getCheckedState(checked())", "attr.data-disabled": "effectiveDisabled() ? \"\" : undefined", "attr.aria-disabled": "effectiveDisabled() ? true : undefined", "attr.data-highlighted": "highlighted() ? \"\" : undefined", "attr.data-label": "label() ?? undefined" } }, providers: [provideRdxMenuRadioItemContext(radioItemContextFactory)], exportAs: ["rdxMenuRadioItem"], hostDirectives: [{ directive: i1$1.RdxCompositeListItem }], ngImport: i0 }); }
1784
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: RdxMenuRadioItem, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
1785
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.2", type: RdxMenuRadioItem, isStandalone: true, selector: "[rdxMenuRadioItem]", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: true, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, closeOnClick: { classPropertyName: "closeOnClick", publicName: "closeOnClick", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onSelect: "onSelect" }, host: { attributes: { "role": "menuitemradio" }, listeners: { "focus": "onFocus()", "blur": "onBlur()", "pointermove": "onPointerMove($event)", "pointerleave": "onPointerLeave($event)", "mouseup": "onMouseUp($event)", "click": "onItemClick()", "keydown.enter": "onActivate($event)", "keydown.space": "onActivate($event)" }, properties: { "attr.tabindex": "rootContext?.isOpen() && highlighted() ? 0 : -1", "attr.aria-checked": "checked()", "attr.data-checked": "checked() ? \"\" : undefined", "attr.data-unchecked": "checked() ? undefined : \"\"", "attr.data-disabled": "effectiveDisabled() ? \"\" : undefined", "attr.aria-disabled": "effectiveDisabled() ? true : undefined", "attr.data-highlighted": "highlighted() ? \"\" : undefined", "attr.data-label": "label() ?? undefined" } }, providers: [provideRdxMenuRadioItemContext(radioItemContextFactory)], exportAs: ["rdxMenuRadioItem"], hostDirectives: [{ directive: i1$1.RdxCompositeListItem }], ngImport: i0 }); }
1693
1786
  }
1694
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxMenuRadioItem, decorators: [{
1787
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: RdxMenuRadioItem, decorators: [{
1695
1788
  type: Directive,
1696
1789
  args: [{
1697
1790
  selector: '[rdxMenuRadioItem]',
@@ -1702,7 +1795,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
1702
1795
  role: 'menuitemradio',
1703
1796
  '[attr.tabindex]': 'rootContext?.isOpen() && highlighted() ? 0 : -1',
1704
1797
  '[attr.aria-checked]': 'checked()',
1705
- '[attr.data-state]': 'getCheckedState(checked())',
1798
+ '[attr.data-checked]': 'checked() ? "" : undefined',
1799
+ '[attr.data-unchecked]': 'checked() ? undefined : ""',
1706
1800
  '[attr.data-disabled]': 'effectiveDisabled() ? "" : undefined',
1707
1801
  '[attr.aria-disabled]': 'effectiveDisabled() ? true : undefined',
1708
1802
  '[attr.data-highlighted]': 'highlighted() ? "" : undefined',
@@ -1728,19 +1822,21 @@ class RdxMenuRadioItemIndicator {
1728
1822
  this.itemContext = injectRdxMenuRadioItemContext();
1729
1823
  /** Keep the indicator in the DOM when unselected so CSS exit animations can play. */
1730
1824
  this.keepMounted = input(false, { ...(ngDevMode ? { debugName: "keepMounted" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
1731
- this.dataState = computed(() => getCheckedState(this.itemContext.checked()), ...(ngDevMode ? [{ debugName: "dataState" }] : /* istanbul ignore next */ []));
1732
- this.isVisible = computed(() => this.itemContext.checked() === true, ...(ngDevMode ? [{ debugName: "isVisible" }] : /* istanbul ignore next */ []));
1825
+ this.checked = this.itemContext.checked;
1826
+ this.isVisible = computed(() => this.itemContext.checked() === true, /* @ts-ignore */
1827
+ ...(ngDevMode ? [{ debugName: "isVisible" }] : /* istanbul ignore next */ []));
1733
1828
  }
1734
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxMenuRadioItemIndicator, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
1735
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.9", type: RdxMenuRadioItemIndicator, isStandalone: true, selector: "[rdxMenuRadioItemIndicator]", inputs: { keepMounted: { classPropertyName: "keepMounted", publicName: "keepMounted", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.data-state": "dataState()", "attr.data-starting-style": "isVisible() ? \"\" : undefined", "attr.data-ending-style": "!isVisible() ? \"\" : undefined", "style.display": "!keepMounted() && !isVisible() ? \"none\" : null" } }, exportAs: ["rdxMenuRadioItemIndicator"], ngImport: i0 }); }
1829
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: RdxMenuRadioItemIndicator, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
1830
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.2", type: RdxMenuRadioItemIndicator, isStandalone: true, selector: "[rdxMenuRadioItemIndicator]", inputs: { keepMounted: { classPropertyName: "keepMounted", publicName: "keepMounted", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.data-checked": "checked() ? \"\" : undefined", "attr.data-unchecked": "checked() ? undefined : \"\"", "attr.data-starting-style": "isVisible() ? \"\" : undefined", "attr.data-ending-style": "!isVisible() ? \"\" : undefined", "style.display": "!keepMounted() && !isVisible() ? \"none\" : null" } }, exportAs: ["rdxMenuRadioItemIndicator"], ngImport: i0 }); }
1736
1831
  }
1737
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxMenuRadioItemIndicator, decorators: [{
1832
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: RdxMenuRadioItemIndicator, decorators: [{
1738
1833
  type: Directive,
1739
1834
  args: [{
1740
1835
  selector: '[rdxMenuRadioItemIndicator]',
1741
1836
  exportAs: 'rdxMenuRadioItemIndicator',
1742
1837
  host: {
1743
- '[attr.data-state]': 'dataState()',
1838
+ '[attr.data-checked]': 'checked() ? "" : undefined',
1839
+ '[attr.data-unchecked]': 'checked() ? undefined : ""',
1744
1840
  '[attr.data-starting-style]': 'isVisible() ? "" : undefined',
1745
1841
  '[attr.data-ending-style]': '!isVisible() ? "" : undefined',
1746
1842
  '[style.display]': '!keepMounted() && !isVisible() ? "none" : null'
@@ -1752,20 +1848,26 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
1752
1848
  * A visual separator between groups of menu items.
1753
1849
  */
1754
1850
  class RdxMenuSeparator {
1755
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxMenuSeparator, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
1756
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.9", type: RdxMenuSeparator, isStandalone: true, selector: "[rdxMenuSeparator]", host: { attributes: { "role": "separator" }, properties: { "attr.aria-orientation": "\"horizontal\"" } }, exportAs: ["rdxMenuSeparator"], ngImport: i0 }); }
1851
+ constructor() {
1852
+ /** The orientation of the separator. Matches Base UI's `Separator.orientation`. */
1853
+ this.orientation = input('horizontal', /* @ts-ignore */
1854
+ ...(ngDevMode ? [{ debugName: "orientation" }] : /* istanbul ignore next */ []));
1855
+ }
1856
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: RdxMenuSeparator, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
1857
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.2", type: RdxMenuSeparator, isStandalone: true, selector: "[rdxMenuSeparator]", inputs: { orientation: { classPropertyName: "orientation", publicName: "orientation", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "separator" }, properties: { "attr.aria-orientation": "orientation()", "attr.data-orientation": "orientation()" } }, exportAs: ["rdxMenuSeparator"], ngImport: i0 }); }
1757
1858
  }
1758
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxMenuSeparator, decorators: [{
1859
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: RdxMenuSeparator, decorators: [{
1759
1860
  type: Directive,
1760
1861
  args: [{
1761
1862
  selector: '[rdxMenuSeparator]',
1762
1863
  exportAs: 'rdxMenuSeparator',
1763
1864
  host: {
1764
1865
  role: 'separator',
1765
- '[attr.aria-orientation]': '"horizontal"'
1866
+ '[attr.aria-orientation]': 'orientation()',
1867
+ '[attr.data-orientation]': 'orientation()'
1766
1868
  }
1767
1869
  }]
1768
- }] });
1870
+ }], propDecorators: { orientation: [{ type: i0.Input, args: [{ isSignal: true, alias: "orientation", required: false }] }] } });
1769
1871
 
1770
1872
  /**
1771
1873
  * Submenu "safe polygon" — a faithful port of Floating UI's `safePolygon` algorithm
@@ -2116,7 +2218,8 @@ class RdxMenuSubTrigger {
2116
2218
  this.elementRef = inject(ElementRef);
2117
2219
  this.destroyRef = inject(DestroyRef);
2118
2220
  this.isBrowser = isPlatformBrowser(inject(PLATFORM_ID));
2119
- this.isFocused = signal(false, ...(ngDevMode ? [{ debugName: "isFocused" }] : /* istanbul ignore next */ []));
2221
+ this.isFocused = signal(false, /* @ts-ignore */
2222
+ ...(ngDevMode ? [{ debugName: "isFocused" }] : /* istanbul ignore next */ []));
2120
2223
  /** Cursor position from the last pointer move over the trigger (safe-polygon apex). */
2121
2224
  this.lastPointer = null;
2122
2225
  /** Whether the current open was initiated by hover (vs keyboard / click). */
@@ -2133,13 +2236,17 @@ class RdxMenuSubTrigger {
2133
2236
  /** Delay before a pending hover close runs, in milliseconds. */
2134
2237
  this.closeDelay = input(0, { ...(ngDevMode ? { debugName: "closeDelay" } : /* istanbul ignore next */ {}), transform: numberOrUndefined$1 });
2135
2238
  /** Explicit typeahead label. When set, overrides textContent for character search. */
2136
- this.label = input(undefined, ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
2239
+ this.label = input(undefined, /* @ts-ignore */
2240
+ ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
2137
2241
  /** Highlighted when active in the parent menu or while the submenu is open. */
2138
2242
  this.highlighted = computed(() => this.parentMenuRoot?.activeIndex() === this.listItem.index() ||
2139
2243
  this.isFocused() ||
2140
- this.submenuContext.isOpen(), ...(ngDevMode ? [{ debugName: "highlighted" }] : /* istanbul ignore next */ []));
2141
- this.effectiveDisabled = computed(() => this.disabled() || this.submenuContext.disabled(), ...(ngDevMode ? [{ debugName: "effectiveDisabled" }] : /* istanbul ignore next */ []));
2142
- this.nativeButtonState = computed(() => this.nativeButton() || this.elementRef.nativeElement.tagName === 'BUTTON', ...(ngDevMode ? [{ debugName: "nativeButtonState" }] : /* istanbul ignore next */ []));
2244
+ this.submenuContext.isOpen(), /* @ts-ignore */
2245
+ ...(ngDevMode ? [{ debugName: "highlighted" }] : /* istanbul ignore next */ []));
2246
+ this.effectiveDisabled = computed(() => this.disabled() || this.submenuContext.disabled(), /* @ts-ignore */
2247
+ ...(ngDevMode ? [{ debugName: "effectiveDisabled" }] : /* istanbul ignore next */ []));
2248
+ this.nativeButtonState = computed(() => this.nativeButton() || this.elementRef.nativeElement.tagName === 'BUTTON', /* @ts-ignore */
2249
+ ...(ngDevMode ? [{ debugName: "nativeButtonState" }] : /* istanbul ignore next */ []));
2143
2250
  this.submenuContext.markAsSubmenu();
2144
2251
  effect((onCleanup) => {
2145
2252
  const el = this.elementRef.nativeElement;
@@ -2401,10 +2508,10 @@ class RdxMenuSubTrigger {
2401
2508
  this.parentMenuRoot.setActiveIndex(null);
2402
2509
  }
2403
2510
  }
2404
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxMenuSubTrigger, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
2405
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.9", type: RdxMenuSubTrigger, isStandalone: true, selector: "[rdxMenuSubTrigger]", inputs: { disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, nativeButton: { classPropertyName: "nativeButton", publicName: "nativeButton", 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 }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "menuitem" }, listeners: { "focus": "onFocus()", "blur": "onBlur()", "click": "onClick($event)", "keydown.enter": "onEnter($event)", "keydown.space": "onEnter($event)", "keydown.arrowleft": "onArrowLeft($event)", "keydown.arrowright": "onArrowRight($event)", "pointermove": "onPointerMove($event)", "pointerleave": "onPointerLeave()", "rdx-menu-subtrigger-clear-highlight": "clearHighlight()" }, properties: { "attr.type": "nativeButtonState() ? \"button\" : undefined", "attr.tabindex": "parentMenuRoot?.open() && highlighted() ? 0 : -1", "attr.aria-haspopup": "\"menu\"", "attr.aria-expanded": "submenuContext.isOpen()", "attr.aria-disabled": "effectiveDisabled() ? true : undefined", "attr.data-state": "submenuContext.isOpen() ? \"open\" : \"closed\"", "attr.data-popup-open": "submenuContext.isOpen() ? \"\" : undefined", "attr.data-highlighted": "highlighted() ? \"\" : undefined", "attr.data-disabled": "effectiveDisabled() ? \"\" : undefined", "attr.data-label": "label() ?? undefined" } }, exportAs: ["rdxMenuSubTrigger"], hostDirectives: [{ directive: i1.RdxPopperAnchor }, { directive: i1$1.RdxCompositeListItem }], ngImport: i0 }); }
2511
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: RdxMenuSubTrigger, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
2512
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.2", type: RdxMenuSubTrigger, isStandalone: true, selector: "[rdxMenuSubTrigger]", inputs: { disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, nativeButton: { classPropertyName: "nativeButton", publicName: "nativeButton", 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 }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "role": "menuitem" }, listeners: { "focus": "onFocus()", "blur": "onBlur()", "click": "onClick($event)", "keydown.enter": "onEnter($event)", "keydown.space": "onEnter($event)", "keydown.arrowleft": "onArrowLeft($event)", "keydown.arrowright": "onArrowRight($event)", "pointermove": "onPointerMove($event)", "pointerleave": "onPointerLeave()", "rdx-menu-subtrigger-clear-highlight": "clearHighlight()" }, properties: { "attr.type": "nativeButtonState() ? \"button\" : undefined", "attr.tabindex": "parentMenuRoot?.open() && highlighted() ? 0 : -1", "attr.aria-haspopup": "\"menu\"", "attr.aria-expanded": "submenuContext.isOpen()", "attr.aria-disabled": "effectiveDisabled() ? true : undefined", "attr.data-popup-open": "submenuContext.isOpen() ? \"\" : undefined", "attr.data-highlighted": "highlighted() ? \"\" : undefined", "attr.data-disabled": "effectiveDisabled() ? \"\" : undefined", "attr.data-label": "label() ?? undefined" } }, exportAs: ["rdxMenuSubTrigger"], hostDirectives: [{ directive: i1.RdxPopperAnchor }, { directive: i1$1.RdxCompositeListItem }], ngImport: i0 }); }
2406
2513
  }
2407
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxMenuSubTrigger, decorators: [{
2514
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: RdxMenuSubTrigger, decorators: [{
2408
2515
  type: Directive,
2409
2516
  args: [{
2410
2517
  selector: '[rdxMenuSubTrigger]',
@@ -2417,7 +2524,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
2417
2524
  '[attr.aria-haspopup]': '"menu"',
2418
2525
  '[attr.aria-expanded]': 'submenuContext.isOpen()',
2419
2526
  '[attr.aria-disabled]': 'effectiveDisabled() ? true : undefined',
2420
- '[attr.data-state]': 'submenuContext.isOpen() ? "open" : "closed"',
2421
2527
  '[attr.data-popup-open]': 'submenuContext.isOpen() ? "" : undefined',
2422
2528
  '[attr.data-highlighted]': 'highlighted() ? "" : undefined',
2423
2529
  '[attr.data-disabled]': 'effectiveDisabled() ? "" : undefined',
@@ -2473,8 +2579,13 @@ class RdxMenuTrigger {
2473
2579
  this.delay = input(100, { ...(ngDevMode ? { debugName: "delay" } : /* istanbul ignore next */ {}), transform: numberOrUndefined });
2474
2580
  /** Delay before hover leave closes the menu, in milliseconds. */
2475
2581
  this.closeDelay = input(undefined, { ...(ngDevMode ? { debugName: "closeDelay" } : /* istanbul ignore next */ {}), transform: numberOrUndefined });
2476
- this.nativeButtonState = computed(() => this.nativeButton() || this.elementRef.nativeElement.tagName === 'BUTTON', ...(ngDevMode ? [{ debugName: "nativeButtonState" }] : /* istanbul ignore next */ []));
2477
- this.isDisabled = computed(() => this.rootContext.disabled() || this.disabled(), ...(ngDevMode ? [{ debugName: "isDisabled" }] : /* istanbul ignore next */ []));
2582
+ this.nativeButtonState = computed(() => this.nativeButton() || this.elementRef.nativeElement.tagName === 'BUTTON', /* @ts-ignore */
2583
+ ...(ngDevMode ? [{ debugName: "nativeButtonState" }] : /* istanbul ignore next */ []));
2584
+ /** Whether the trigger is currently pressed (pointer down), for Base UI's `data-pressed`. */
2585
+ this.pressed = signal(false, /* @ts-ignore */
2586
+ ...(ngDevMode ? [{ debugName: "pressed" }] : /* istanbul ignore next */ []));
2587
+ this.isDisabled = computed(() => this.rootContext.disabled() || this.disabled(), /* @ts-ignore */
2588
+ ...(ngDevMode ? [{ debugName: "isDisabled" }] : /* istanbul ignore next */ []));
2478
2589
  this.triggerInteraction = createRdxTriggerInteraction({
2479
2590
  trigger: () => this.elementRef.nativeElement,
2480
2591
  activeTrigger: () => this.rootContext.trigger(),
@@ -2561,6 +2672,9 @@ class RdxMenuTrigger {
2561
2672
  }
2562
2673
  handlePointerDown(event) {
2563
2674
  this.triggerInteraction.recordPointerDown(event);
2675
+ if (!this.isDisabled() && event.button === 0) {
2676
+ this.pressed.set(true);
2677
+ }
2564
2678
  }
2565
2679
  handleClick(event) {
2566
2680
  if (this.isDisabled()) {
@@ -2667,6 +2781,7 @@ class RdxMenuTrigger {
2667
2781
  }, delay);
2668
2782
  }
2669
2783
  handlePointerLeave(event) {
2784
+ this.pressed.set(false);
2670
2785
  if (event.pointerType === 'touch' || !this.openOnHover()) {
2671
2786
  return;
2672
2787
  }
@@ -2739,10 +2854,10 @@ class RdxMenuTrigger {
2739
2854
  setTimeout(run);
2740
2855
  }
2741
2856
  }
2742
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxMenuTrigger, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
2743
- 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 }], ngImport: i0 }); }
2857
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: RdxMenuTrigger, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
2858
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.2", 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)", "pointerup": "pressed.set(false)", "pointercancel": "pressed.set(false)", "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-disabled": "isDisabled() ? \"\" : undefined", "attr.data-popup-open": "triggerInteraction.dataPopupOpen()", "attr.data-pressed": "pressed() ? \"\" : undefined", "style.pointer-events": "rootContext.isOpen() && rootContext.modal() ? \"auto\" : undefined" } }, exportAs: ["rdxMenuTrigger"], hostDirectives: [{ directive: i1.RdxPopperAnchor }], ngImport: i0 }); }
2744
2859
  }
2745
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxMenuTrigger, decorators: [{
2860
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: RdxMenuTrigger, decorators: [{
2746
2861
  type: Directive,
2747
2862
  args: [{
2748
2863
  selector: '[rdxMenuTrigger]',
@@ -2755,11 +2870,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
2755
2870
  '[attr.aria-expanded]': 'triggerInteraction.ariaExpanded()',
2756
2871
  '[attr.aria-disabled]': 'isDisabled() ? true : undefined',
2757
2872
  '[attr.disabled]': 'nativeButtonState() && isDisabled() ? "" : undefined',
2758
- '[attr.data-state]': 'triggerInteraction.dataState()',
2759
2873
  '[attr.data-disabled]': 'isDisabled() ? "" : undefined',
2760
2874
  '[attr.data-popup-open]': 'triggerInteraction.dataPopupOpen()',
2875
+ '[attr.data-pressed]': 'pressed() ? "" : undefined',
2761
2876
  '[style.pointer-events]': 'rootContext.isOpen() && rootContext.modal() ? "auto" : undefined',
2762
2877
  '(pointerdown)': 'handlePointerDown($event)',
2878
+ '(pointerup)': 'pressed.set(false)',
2879
+ '(pointercancel)': 'pressed.set(false)',
2763
2880
  '(mousedown)': 'handleMouseDown($event)',
2764
2881
  '(click)': 'handleClick($event)',
2765
2882
  '(pointerenter)': 'handlePointerEnter($event)',
@@ -2800,9 +2917,12 @@ class RdxMenuViewport {
2800
2917
  constructor() {
2801
2918
  this.elementRef = inject(ElementRef);
2802
2919
  this.destroyRef = inject(DestroyRef);
2803
- this.width = signal(undefined, ...(ngDevMode ? [{ debugName: "width" }] : /* istanbul ignore next */ []));
2804
- this.height = signal(undefined, ...(ngDevMode ? [{ debugName: "height" }] : /* istanbul ignore next */ []));
2805
- this.transitioning = signal(false, ...(ngDevMode ? [{ debugName: "transitioning" }] : /* istanbul ignore next */ []));
2920
+ this.width = signal(undefined, /* @ts-ignore */
2921
+ ...(ngDevMode ? [{ debugName: "width" }] : /* istanbul ignore next */ []));
2922
+ this.height = signal(undefined, /* @ts-ignore */
2923
+ ...(ngDevMode ? [{ debugName: "height" }] : /* istanbul ignore next */ []));
2924
+ this.transitioning = signal(false, /* @ts-ignore */
2925
+ ...(ngDevMode ? [{ debugName: "transitioning" }] : /* istanbul ignore next */ []));
2806
2926
  afterNextRender(() => {
2807
2927
  const el = this.elementRef.nativeElement;
2808
2928
  // Seed the initial size without marking a transition.
@@ -2838,10 +2958,10 @@ class RdxMenuViewport {
2838
2958
  const duration = getMaxTransitionDuration(this.elementRef.nativeElement);
2839
2959
  this.transitionTimer = setTimeout(() => this.transitioning.set(false), duration > 0 ? duration + 50 : 0);
2840
2960
  }
2841
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxMenuViewport, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
2842
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.9", type: RdxMenuViewport, isStandalone: true, selector: "[rdxMenuViewport]", host: { properties: { "attr.data-transitioning": "transitioning() ? \"\" : undefined", "style.--popup-width.px": "width()", "style.--popup-height.px": "height()" } }, exportAs: ["rdxMenuViewport"], ngImport: i0 }); }
2961
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: RdxMenuViewport, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
2962
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.2", type: RdxMenuViewport, isStandalone: true, selector: "[rdxMenuViewport]", host: { properties: { "attr.data-transitioning": "transitioning() ? \"\" : undefined", "style.--popup-width.px": "width()", "style.--popup-height.px": "height()" } }, exportAs: ["rdxMenuViewport"], ngImport: i0 }); }
2843
2963
  }
2844
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxMenuViewport, decorators: [{
2964
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: RdxMenuViewport, decorators: [{
2845
2965
  type: Directive,
2846
2966
  args: [{
2847
2967
  selector: '[rdxMenuViewport]',
@@ -2877,8 +2997,8 @@ const menuImports = [
2877
2997
  RdxMenuRadioItemIndicator
2878
2998
  ];
2879
2999
  class RdxMenuModule {
2880
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxMenuModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
2881
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.2.9", ngImport: i0, type: RdxMenuModule, imports: [RdxMenuRoot,
3000
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: RdxMenuModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
3001
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "22.0.2", ngImport: i0, type: RdxMenuModule, imports: [RdxMenuRoot,
2882
3002
  RdxMenuTrigger,
2883
3003
  RdxMenuSubTrigger,
2884
3004
  RdxMenuPortal,
@@ -2917,9 +3037,9 @@ class RdxMenuModule {
2917
3037
  RdxMenuRadioGroup,
2918
3038
  RdxMenuRadioItem,
2919
3039
  RdxMenuRadioItemIndicator] }); }
2920
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxMenuModule }); }
3040
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: RdxMenuModule }); }
2921
3041
  }
2922
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxMenuModule, decorators: [{
3042
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: RdxMenuModule, decorators: [{
2923
3043
  type: NgModule,
2924
3044
  args: [{
2925
3045
  imports: [...menuImports],
@@ -2931,5 +3051,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
2931
3051
  * Generated bundle index. Do not edit.
2932
3052
  */
2933
3053
 
2934
- export { RdxMenuArrow, RdxMenuBackdrop, RdxMenuCheckboxItem, RdxMenuCheckboxItemIndicator, RdxMenuGroup, RdxMenuGroupLabel, RdxMenuItem, RdxMenuLinkItem, RdxMenuModule, RdxMenuPopup, RdxMenuPortal, RdxMenuPortalMisuseGuard, RdxMenuPositioner, RdxMenuRadioGroup, RdxMenuRadioItem, RdxMenuRadioItemIndicator, RdxMenuRoot, RdxMenuSeparator, RdxMenuSubTrigger, RdxMenuTrigger, RdxMenuViewport, getCheckedState, injectRdxMenuCheckboxItemContext, injectRdxMenuGroupContext, injectRdxMenuRadioGroupContext, injectRdxMenuRadioItemContext, injectRdxMenuRootContext, isIndeterminate, provideRdxMenuCheckboxItemContext, provideRdxMenuGroupContext, provideRdxMenuRadioGroupContext, provideRdxMenuRadioItemContext, provideRdxMenuRootContext };
3054
+ export { RDX_MENU_AMBIENT_MODAL, RdxMenuArrow, RdxMenuBackdrop, RdxMenuCheckboxItem, RdxMenuCheckboxItemIndicator, RdxMenuGroup, RdxMenuGroupLabel, RdxMenuItem, RdxMenuLinkItem, RdxMenuModule, RdxMenuPopup, RdxMenuPortal, RdxMenuPortalMisuseGuard, RdxMenuPositioner, RdxMenuRadioGroup, RdxMenuRadioItem, RdxMenuRadioItemIndicator, RdxMenuRoot, RdxMenuSeparator, RdxMenuSubTrigger, RdxMenuTrigger, RdxMenuViewport, getCheckedState, injectRdxMenuCheckboxItemContext, injectRdxMenuGroupContext, injectRdxMenuRadioGroupContext, injectRdxMenuRadioItemContext, injectRdxMenuRootContext, isIndeterminate, provideRdxMenuCheckboxItemContext, provideRdxMenuGroupContext, provideRdxMenuRadioGroupContext, provideRdxMenuRadioItemContext, provideRdxMenuRootContext };
2935
3055
  //# sourceMappingURL=radix-ng-primitives-menu.mjs.map