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

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 (54) hide show
  1. package/fesm2022/radix-ng-primitives-checkbox.mjs +33 -18
  2. package/fesm2022/radix-ng-primitives-checkbox.mjs.map +1 -1
  3. package/fesm2022/radix-ng-primitives-core.mjs +7 -0
  4. package/fesm2022/radix-ng-primitives-core.mjs.map +1 -1
  5. package/fesm2022/radix-ng-primitives-dialog.mjs +54 -12
  6. package/fesm2022/radix-ng-primitives-dialog.mjs.map +1 -1
  7. package/fesm2022/radix-ng-primitives-editable.mjs +12 -7
  8. package/fesm2022/radix-ng-primitives-editable.mjs.map +1 -1
  9. package/fesm2022/radix-ng-primitives-floating-focus-manager.mjs +294 -8
  10. package/fesm2022/radix-ng-primitives-floating-focus-manager.mjs.map +1 -1
  11. package/fesm2022/radix-ng-primitives-focus-scope.mjs +9 -0
  12. package/fesm2022/radix-ng-primitives-focus-scope.mjs.map +1 -1
  13. package/fesm2022/radix-ng-primitives-menu.mjs +34 -5
  14. package/fesm2022/radix-ng-primitives-menu.mjs.map +1 -1
  15. package/fesm2022/radix-ng-primitives-number-field.mjs +7 -2
  16. package/fesm2022/radix-ng-primitives-number-field.mjs.map +1 -1
  17. package/fesm2022/radix-ng-primitives-popover.mjs +77 -20
  18. package/fesm2022/radix-ng-primitives-popover.mjs.map +1 -1
  19. package/fesm2022/radix-ng-primitives-radio.mjs +19 -14
  20. package/fesm2022/radix-ng-primitives-radio.mjs.map +1 -1
  21. package/fesm2022/radix-ng-primitives-select.mjs +59 -37
  22. package/fesm2022/radix-ng-primitives-select.mjs.map +1 -1
  23. package/fesm2022/radix-ng-primitives-slider.mjs +259 -28
  24. package/fesm2022/radix-ng-primitives-slider.mjs.map +1 -1
  25. package/fesm2022/radix-ng-primitives-stepper.mjs +11 -7
  26. package/fesm2022/radix-ng-primitives-stepper.mjs.map +1 -1
  27. package/fesm2022/radix-ng-primitives-switch.mjs +10 -5
  28. package/fesm2022/radix-ng-primitives-switch.mjs.map +1 -1
  29. package/fesm2022/radix-ng-primitives-tabs.mjs +15 -10
  30. package/fesm2022/radix-ng-primitives-tabs.mjs.map +1 -1
  31. package/fesm2022/radix-ng-primitives-toggle-group.mjs +9 -4
  32. package/fesm2022/radix-ng-primitives-toggle-group.mjs.map +1 -1
  33. package/fesm2022/radix-ng-primitives-toggle.mjs +12 -6
  34. package/fesm2022/radix-ng-primitives-toggle.mjs.map +1 -1
  35. package/fesm2022/radix-ng-primitives-tooltip.mjs +180 -35
  36. package/fesm2022/radix-ng-primitives-tooltip.mjs.map +1 -1
  37. package/package.json +1 -1
  38. package/types/radix-ng-primitives-checkbox.d.ts +27 -15
  39. package/types/radix-ng-primitives-core.d.ts +2 -0
  40. package/types/radix-ng-primitives-dialog.d.ts +13 -2
  41. package/types/radix-ng-primitives-editable.d.ts +11 -5
  42. package/types/radix-ng-primitives-floating-focus-manager.d.ts +113 -16
  43. package/types/radix-ng-primitives-menu.d.ts +8 -2
  44. package/types/radix-ng-primitives-number-field.d.ts +8 -3
  45. package/types/radix-ng-primitives-popover.d.ts +18 -6
  46. package/types/radix-ng-primitives-radio.d.ts +13 -6
  47. package/types/radix-ng-primitives-select.d.ts +16 -20
  48. package/types/radix-ng-primitives-slider.d.ts +60 -9
  49. package/types/radix-ng-primitives-stepper.d.ts +11 -4
  50. package/types/radix-ng-primitives-switch.d.ts +10 -4
  51. package/types/radix-ng-primitives-tabs.d.ts +12 -6
  52. package/types/radix-ng-primitives-toggle-group.d.ts +11 -5
  53. package/types/radix-ng-primitives-toggle.d.ts +10 -3
  54. package/types/radix-ng-primitives-tooltip.d.ts +38 -14
@@ -4,10 +4,10 @@ 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';
6
6
  import { createContext, createFloatingRootContext, useTransitionStatus, injectId, createCancelableChangeEventDetails, provideFloatingTree, provideFloatingRootContext, RDX_FLOATING_ROOT_CONTEXT, RDX_FLOATING_REGISTRATION, useAnchoredScrollLock, RdxFloatingNodeRegistration, rdxDevError, useGraceArea } from '@radix-ng/primitives/core';
7
+ import * as i3 from '@radix-ng/primitives/floating-focus-manager';
8
+ import { getInteractionTypeFromEvent, RdxFloatingFocusManager, provideFloatingFocusManagerConfig, createRdxTriggerInteraction, useTriggerFocusGuards } from '@radix-ng/primitives/floating-focus-manager';
7
9
  import { outputFromObservable, outputToObservable } from '@angular/core/rxjs-interop';
8
10
  import { RdxDismiss } from '@radix-ng/primitives/dismissable-layer';
9
- import * as i3 from '@radix-ng/primitives/floating-focus-manager';
10
- import { RdxFloatingFocusManager, provideFloatingFocusManagerConfig } from '@radix-ng/primitives/floating-focus-manager';
11
11
  import { RdxFocusScope } from '@radix-ng/primitives/focus-scope';
12
12
  import * as i1$1 from '@radix-ng/primitives/portal';
13
13
  import { RdxPortalPresence } from '@radix-ng/primitives/portal';
@@ -65,6 +65,7 @@ class RdxPopoverRoot {
65
65
  */
66
66
  this.handle = input(...(ngDevMode ? [undefined, { debugName: "handle" }] : /* istanbul ignore next */ []));
67
67
  this.contentId = injectId('rdx-popover-content-');
68
+ this.beforeContentFocusGuard = signal(null, ...(ngDevMode ? [{ debugName: "beforeContentFocusGuard" }] : /* istanbul ignore next */ []));
68
69
  this.descriptionId = signal(undefined, ...(ngDevMode ? [{ debugName: "descriptionId" }] : /* istanbul ignore next */ []));
69
70
  this.titleId = signal(undefined, ...(ngDevMode ? [{ debugName: "titleId" }] : /* istanbul ignore next */ []));
70
71
  this.trigger = signal(undefined, ...(ngDevMode ? [{ debugName: "trigger" }] : /* istanbul ignore next */ []));
@@ -73,8 +74,11 @@ class RdxPopoverRoot {
73
74
  this.isPointerDownOnTrigger = signal(false, ...(ngDevMode ? [{ debugName: "isPointerDownOnTrigger" }] : /* istanbul ignore next */ []));
74
75
  /** Whether the current open was initiated by touch (ADR 0016 §3 — gates the anchored scroll lock). */
75
76
  this.openedByTouch = signal(false, ...(ngDevMode ? [{ debugName: "openedByTouch" }] : /* istanbul ignore next */ []));
77
+ this.openInteractionType = signal(null, ...(ngDevMode ? [{ debugName: "openInteractionType" }] : /* istanbul ignore next */ []));
78
+ this.closeInteractionType = signal(null, ...(ngDevMode ? [{ debugName: "closeInteractionType" }] : /* istanbul ignore next */ []));
76
79
  this.popupCloseCount = signal(0, ...(ngDevMode ? [{ debugName: "popupCloseCount" }] : /* istanbul ignore next */ []));
77
80
  this.preventUnmountOnClose = signal(false, ...(ngDevMode ? [{ debugName: "preventUnmountOnClose" }] : /* istanbul ignore next */ []));
81
+ this.pendingTriggerOpenInteractionType = signal(null, ...(ngDevMode ? [{ debugName: "pendingTriggerOpenInteractionType" }] : /* istanbul ignore next */ []));
78
82
  this.onOpenChange = output();
79
83
  this.onOpenChangeComplete = output();
80
84
  this.registeredTriggers = new Map();
@@ -132,7 +136,7 @@ class RdxPopoverRoot {
132
136
  }
133
137
  });
134
138
  }
135
- show(trigger = this.trigger(), payload, triggerId, reason = 'none', event = new Event('popover.open-change'), fromHover = false) {
139
+ show(trigger = this.trigger(), payload, triggerId, reason = 'none', event, fromHover = false) {
136
140
  this.clearHoverTimers();
137
141
  const previousTrigger = this.trigger();
138
142
  const changedTriggerWhileOpen = this.open() && previousTrigger !== trigger;
@@ -146,11 +150,15 @@ class RdxPopoverRoot {
146
150
  this.payload.set(payload);
147
151
  return;
148
152
  }
149
- const change = this.createOpenChangeEvent(true, reason, event, trigger, triggerId ?? this.triggerId());
153
+ const resolvedEvent = event ?? new Event('popover.open-change');
154
+ const change = this.createOpenChangeEvent(true, reason, resolvedEvent, trigger, triggerId ?? this.triggerId());
150
155
  this.onOpenChange.emit(change.payload);
151
156
  if (change.eventDetails.isCanceled()) {
152
157
  return;
153
158
  }
159
+ const interactionType = this.consumeOpenInteractionType(event);
160
+ this.openInteractionType.set(interactionType);
161
+ this.openedByTouch.set(interactionType === 'touch');
154
162
  this.isHoverActive.set(fromHover);
155
163
  this.openChangeReason.set(reason);
156
164
  this.instant.set(changedTriggerWhileOpen || reason === 'trigger-focus');
@@ -171,16 +179,19 @@ class RdxPopoverRoot {
171
179
  this.open.set(true);
172
180
  this.floatingContext.events.emit('openchange', { open: true, reason, event: change.eventDetails.event });
173
181
  }
174
- close(reason = 'none', event = new Event('popover.open-change')) {
182
+ close(reason = 'none', event) {
175
183
  this.clearHoverTimers();
176
184
  if (!this.open()) {
177
185
  return;
178
186
  }
179
- const change = this.createOpenChangeEvent(false, reason, event, this.trigger(), this.triggerId());
187
+ const resolvedEvent = event ?? new Event('popover.open-change');
188
+ const change = this.createOpenChangeEvent(false, reason, resolvedEvent, this.trigger(), this.triggerId());
180
189
  this.onOpenChange.emit(change.payload);
181
190
  if (change.eventDetails.isCanceled()) {
182
191
  return;
183
192
  }
193
+ this.pendingTriggerOpenInteractionType.set(null);
194
+ this.closeInteractionType.set(getInteractionTypeFromEvent(event));
184
195
  this.isHoverActive.set(false);
185
196
  this.openedByTouch.set(false);
186
197
  this.instant.set(reason !== 'none' && reason !== 'trigger-hover');
@@ -224,6 +235,9 @@ class RdxPopoverRoot {
224
235
  this.hoverDelay = delay;
225
236
  this.hoverCloseDelay = closeDelay;
226
237
  }
238
+ setTriggerOpenInteractionType(type) {
239
+ this.pendingTriggerOpenInteractionType.set(type);
240
+ }
227
241
  registerTrigger(id, trigger, payload) {
228
242
  this.registeredTriggers.set(id, { element: trigger, payload });
229
243
  this.triggers.update((triggers) => (triggers.includes(trigger) ? triggers : [...triggers, trigger]));
@@ -263,6 +277,9 @@ class RdxPopoverRoot {
263
277
  this.viewportTriggerChange.add(onTriggerChange);
264
278
  return () => this.viewportTriggerChange.delete(onTriggerChange);
265
279
  }
280
+ setBeforeContentFocusGuard(element) {
281
+ this.beforeContentFocusGuard.set(element);
282
+ }
266
283
  registerTransitionElement(element) {
267
284
  return this.transition.registerElement(element);
268
285
  }
@@ -330,6 +347,11 @@ class RdxPopoverRoot {
330
347
  }
331
348
  });
332
349
  }
350
+ consumeOpenInteractionType(event) {
351
+ const pending = this.pendingTriggerOpenInteractionType();
352
+ this.pendingTriggerOpenInteractionType.set(null);
353
+ return pending ?? getInteractionTypeFromEvent(event);
354
+ }
333
355
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxPopoverRoot, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
334
356
  static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.9", type: RdxPopoverRoot, isStandalone: true, selector: "[rdxPopoverRoot]", inputs: { open: { classPropertyName: "open", publicName: "open", isSignal: true, isRequired: false, transformFunction: null }, defaultOpen: { classPropertyName: "defaultOpen", publicName: "defaultOpen", isSignal: true, isRequired: false, transformFunction: null }, triggerId: { classPropertyName: "triggerId", publicName: "triggerId", isSignal: true, isRequired: false, transformFunction: null }, defaultTriggerId: { classPropertyName: "defaultTriggerId", publicName: "defaultTriggerId", isSignal: true, isRequired: false, transformFunction: null }, modal: { classPropertyName: "modal", publicName: "modal", isSignal: true, isRequired: false, transformFunction: null }, handle: { classPropertyName: "handle", publicName: "handle", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { open: "openChange", triggerId: "triggerIdChange", onOpenChange: "onOpenChange", onOpenChangeComplete: "onOpenChangeComplete" }, providers: [
335
357
  provideRdxPopoverRootContext(context),
@@ -371,6 +393,8 @@ function contextFor(root) {
371
393
  openChangeReason: root.openChangeReason.asReadonly(),
372
394
  isPointerDownOnTrigger: root.isPointerDownOnTrigger.asReadonly(),
373
395
  openedByTouch: root.openedByTouch.asReadonly(),
396
+ openInteractionType: root.openInteractionType.asReadonly(),
397
+ closeInteractionType: root.closeInteractionType.asReadonly(),
374
398
  close: (reason, event) => root.close(reason, event),
375
399
  cancelHoverClose: () => root.cancelHoverClose(),
376
400
  cancelHoverOpen: () => root.cancelHoverOpen(),
@@ -382,6 +406,7 @@ function contextFor(root) {
382
406
  setTitleId: (id) => root.titleId.set(id),
383
407
  setPointerDownOnTrigger: (pointerDown) => root.isPointerDownOnTrigger.set(pointerDown),
384
408
  setOpenedByTouch: (value) => root.openedByTouch.set(value),
409
+ setTriggerOpenInteractionType: (type) => root.setTriggerOpenInteractionType(type),
385
410
  setHoverDelays: (delay, closeDelay) => root.setHoverDelays(delay, closeDelay),
386
411
  registerPopupClose: () => {
387
412
  root.popupCloseCount.update((count) => count + 1);
@@ -389,7 +414,9 @@ function contextFor(root) {
389
414
  },
390
415
  registerTransitionElement: (element) => root.registerTransitionElement(element),
391
416
  transitionStatus: root.transitionStatus,
417
+ beforeContentFocusGuard: root.beforeContentFocusGuard.asReadonly(),
392
418
  registerViewport: (onTriggerChange) => root.registerViewport(onTriggerChange),
419
+ setBeforeContentFocusGuard: (element) => root.setBeforeContentFocusGuard(element),
393
420
  toggle: (triggerId, trigger, payload, event) => root.toggle(triggerId, trigger, payload, event)
394
421
  };
395
422
  }
@@ -469,8 +496,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
469
496
  * - No `disablePointerDismissal` — outside-press + focus-out always close.
470
497
  *
471
498
  * Note: a positioned popover does **not** auto-focus into the popup on open (pre-existing — the legacy
472
- * behaved the same; verified). The trap holds focus once it is inside. Auto-focus-on-open + redirecting a
473
- * Tab from the trigger into the popup needs the deferred portal-focus bridge / guards (ADR 0017 §6a).
499
+ * behaved the same; verified). The trap holds focus once it is inside; portal tab-order handoff is owned
500
+ * by `RdxFloatingFocusManager` and anchored to the active trigger below.
474
501
  */
475
502
  class RdxPopoverPopup {
476
503
  constructor() {
@@ -547,11 +574,16 @@ class RdxPopoverPopup {
547
574
  (rootContext.modal() === true && rootContext.hasPopupClose()),
548
575
  // Full modal blocks outside pointer interaction; `trap-focus` only traps focus.
549
576
  inert: () => rootContext.modal() === true && rootContext.hasPopupClose(),
577
+ restoreFocus: () => 'popup',
578
+ previousFocusableElement: () => rootContext.trigger() ?? null,
579
+ beforeContentFocusGuardRef: () => (element) => rootContext.setBeforeContentFocusGuard(element),
550
580
  // Active for the whole MOUNTED lifetime (Base UI `disabled={!mounted}`, not `open`) for
551
581
  // trap/return-focus — including an explicit `preventUnmountOnClose()` cycle after the
552
582
  // exit transition. Marker + isolation are additionally gated on `open` inside the
553
583
  // manager. Still suppressed while hover-opened.
554
- enabled: () => rootContext.present() && !rootContext.isHoverActive()
584
+ enabled: () => rootContext.present() && !rootContext.isHoverActive(),
585
+ openInteractionType: () => rootContext.openInteractionType(),
586
+ closeInteractionType: () => rootContext.closeInteractionType()
555
587
  };
556
588
  })
557
589
  ], hostDirectives: [{ directive: i1.RdxPopperContent }, { directive: i2.RdxFloatingNodeRegistration }, { directive: i3.RdxFloatingFocusManager }], ngImport: i0 }); }
@@ -569,11 +601,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
569
601
  (rootContext.modal() === true && rootContext.hasPopupClose()),
570
602
  // Full modal blocks outside pointer interaction; `trap-focus` only traps focus.
571
603
  inert: () => rootContext.modal() === true && rootContext.hasPopupClose(),
604
+ restoreFocus: () => 'popup',
605
+ previousFocusableElement: () => rootContext.trigger() ?? null,
606
+ beforeContentFocusGuardRef: () => (element) => rootContext.setBeforeContentFocusGuard(element),
572
607
  // Active for the whole MOUNTED lifetime (Base UI `disabled={!mounted}`, not `open`) for
573
608
  // trap/return-focus — including an explicit `preventUnmountOnClose()` cycle after the
574
609
  // exit transition. Marker + isolation are additionally gated on `open` inside the
575
610
  // manager. Still suppressed while hover-opened.
576
- enabled: () => rootContext.present() && !rootContext.isHoverActive()
611
+ enabled: () => rootContext.present() && !rootContext.isHoverActive(),
612
+ openInteractionType: () => rootContext.openInteractionType(),
613
+ closeInteractionType: () => rootContext.closeInteractionType()
577
614
  };
578
615
  })
579
616
  ],
@@ -765,8 +802,6 @@ class RdxPopoverTrigger {
765
802
  constructor() {
766
803
  this.parentRootContext = injectRdxPopoverRootContext(true);
767
804
  this.elementRef = inject(ElementRef);
768
- /** Pointer type of the most recent `pointerdown`, used to detect a touch open (ADR 0016 §3). */
769
- this.lastPointerType = '';
770
805
  /**
771
806
  * Associates this trigger with a detached popover root.
772
807
  */
@@ -798,7 +833,14 @@ class RdxPopoverTrigger {
798
833
  this.triggerId = computed(() => this.id() ?? this.generatedId, ...(ngDevMode ? [{ debugName: "triggerId" }] : /* istanbul ignore next */ []));
799
834
  this.rootContext = computed(() => this.handle()?.context() ?? this.parentRootContext, ...(ngDevMode ? [{ debugName: "rootContext" }] : /* istanbul ignore next */ []));
800
835
  this.isOpen = computed(() => this.rootContext()?.isOpen() === true && this.rootContext()?.trigger() === this.elementRef.nativeElement, ...(ngDevMode ? [{ debugName: "isOpen" }] : /* istanbul ignore next */ []));
801
- this.isPressed = computed(() => this.isOpen() && this.rootContext()?.openChangeReason() === 'trigger-press', ...(ngDevMode ? [{ debugName: "isPressed" }] : /* istanbul ignore next */ []));
836
+ this.triggerInteraction = createRdxTriggerInteraction({
837
+ trigger: () => this.elementRef.nativeElement,
838
+ activeTrigger: () => this.rootContext()?.trigger(),
839
+ open: () => this.rootContext()?.isOpen() ?? false,
840
+ disabled: () => this.disabled(),
841
+ contentId: () => this.rootContext()?.contentId
842
+ });
843
+ this.isPressed = computed(() => this.triggerInteraction.isActive() && this.rootContext()?.openChangeReason() === 'trigger-press', ...(ngDevMode ? [{ debugName: "isPressed" }] : /* istanbul ignore next */ []));
802
844
  this.generatedId = injectId('rdx-popover-trigger-');
803
845
  effect((onCleanup) => {
804
846
  const handle = this.handle();
@@ -809,6 +851,19 @@ class RdxPopoverTrigger {
809
851
  onCleanup(untracked(() => this.parentRootContext.registerTrigger(this.triggerId(), this.elementRef.nativeElement, () => this.payload())));
810
852
  }
811
853
  });
854
+ useTriggerFocusGuards({
855
+ trigger: () => this.elementRef.nativeElement,
856
+ close: (event) => this.rootContext()?.close('focus-out', event),
857
+ beforeContentFocusGuard: () => this.rootContext()?.beforeContentFocusGuard(),
858
+ contentId: () => this.rootContext()?.contentId,
859
+ enabled: () => this.triggerInteraction.isActive(),
860
+ popupElement: () => {
861
+ const contentId = this.rootContext()?.contentId;
862
+ return contentId
863
+ ? this.elementRef.nativeElement.ownerDocument.getElementById(contentId)
864
+ : null;
865
+ }
866
+ });
812
867
  }
813
868
  handleClick(event) {
814
869
  if (this.disabled()) {
@@ -816,7 +871,9 @@ class RdxPopoverTrigger {
816
871
  }
817
872
  // Record whether this open is a touch tap (ADR 0016 §3). `detail === 0` is a keyboard-activated
818
873
  // click (no preceding pointerdown), which must read non-touch regardless of the last pointer type.
819
- this.rootContext()?.setOpenedByTouch(event.detail !== 0 && this.lastPointerType === 'touch');
874
+ const interactionType = this.triggerInteraction.clickInteractionType(event);
875
+ this.rootContext()?.setOpenedByTouch(interactionType === 'touch');
876
+ this.rootContext()?.setTriggerOpenInteractionType(interactionType);
820
877
  this.rootContext()?.setPointerDownOnTrigger(false);
821
878
  if (this.handle()) {
822
879
  this.handle().toggle(this.triggerId(), event);
@@ -840,14 +897,14 @@ class RdxPopoverTrigger {
840
897
  this.rootContext()?.cancelHoverOpen();
841
898
  }
842
899
  handlePointerDown(event) {
843
- this.lastPointerType = event.pointerType;
900
+ this.triggerInteraction.recordPointerDown(event);
844
901
  this.rootContext()?.setPointerDownOnTrigger(true);
845
902
  }
846
903
  handlePointerUp() {
847
904
  this.rootContext()?.setPointerDownOnTrigger(false);
848
905
  }
849
906
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxPopoverTrigger, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
850
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.9", type: RdxPopoverTrigger, isStandalone: true, selector: "button[rdxPopoverTrigger]", inputs: { handle: { classPropertyName: "handle", publicName: "handle", isSignal: true, isRequired: false, transformFunction: null }, payload: { classPropertyName: "payload", publicName: "payload", isSignal: true, isRequired: false, transformFunction: null }, id: { classPropertyName: "id", publicName: "id", 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: { attributes: { "type": "button" }, listeners: { "click": "handleClick($event)", "pointerenter": "handlePointerEnter($event)", "pointerleave": "handlePointerLeave($event)", "pointerdown": "handlePointerDown($event)", "pointerup": "handlePointerUp()", "pointercancel": "handlePointerUp()" }, properties: { "attr.aria-controls": "rootContext()?.contentId", "attr.aria-expanded": "isOpen()", "attr.aria-haspopup": "\"dialog\"", "attr.data-state": "isOpen() ? \"open\" : \"closed\"", "attr.data-popup-open": "isOpen() ? \"\" : undefined", "attr.data-pressed": "isPressed() ? \"\" : undefined", "attr.disabled": "disabled() ? \"\" : undefined", "id": "triggerId()" } }, hostDirectives: [{ directive: i1.RdxPopperAnchor }], ngImport: i0 }); }
907
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.9", type: RdxPopoverTrigger, isStandalone: true, selector: "button[rdxPopoverTrigger]", inputs: { handle: { classPropertyName: "handle", publicName: "handle", isSignal: true, isRequired: false, transformFunction: null }, payload: { classPropertyName: "payload", publicName: "payload", isSignal: true, isRequired: false, transformFunction: null }, id: { classPropertyName: "id", publicName: "id", 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: { attributes: { "type": "button" }, listeners: { "click": "handleClick($event)", "pointerenter": "handlePointerEnter($event)", "pointerleave": "handlePointerLeave($event)", "pointerdown": "handlePointerDown($event)", "pointerup": "handlePointerUp()", "pointercancel": "handlePointerUp()" }, properties: { "attr.aria-controls": "rootContext()?.contentId", "attr.aria-expanded": "triggerInteraction.ariaExpanded()", "attr.aria-haspopup": "\"dialog\"", "attr.data-state": "triggerInteraction.dataState()", "attr.data-popup-open": "triggerInteraction.dataPopupOpen()", "attr.data-pressed": "isPressed() ? \"\" : undefined", "attr.disabled": "triggerInteraction.disabled() ? \"\" : undefined", "id": "triggerId()" } }, hostDirectives: [{ directive: i1.RdxPopperAnchor }], ngImport: i0 }); }
851
908
  }
852
909
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxPopoverTrigger, decorators: [{
853
910
  type: Directive,
@@ -857,12 +914,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
857
914
  host: {
858
915
  type: 'button',
859
916
  '[attr.aria-controls]': 'rootContext()?.contentId',
860
- '[attr.aria-expanded]': 'isOpen()',
917
+ '[attr.aria-expanded]': 'triggerInteraction.ariaExpanded()',
861
918
  '[attr.aria-haspopup]': '"dialog"',
862
- '[attr.data-state]': 'isOpen() ? "open" : "closed"',
863
- '[attr.data-popup-open]': 'isOpen() ? "" : undefined',
919
+ '[attr.data-state]': 'triggerInteraction.dataState()',
920
+ '[attr.data-popup-open]': 'triggerInteraction.dataPopupOpen()',
864
921
  '[attr.data-pressed]': 'isPressed() ? "" : undefined',
865
- '[attr.disabled]': 'disabled() ? "" : undefined',
922
+ '[attr.disabled]': 'triggerInteraction.disabled() ? "" : undefined',
866
923
  '[id]': 'triggerId()',
867
924
  '(click)': 'handleClick($event)',
868
925
  '(pointerenter)': 'handlePointerEnter($event)',