@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.
- package/fesm2022/radix-ng-primitives-checkbox.mjs +33 -18
- package/fesm2022/radix-ng-primitives-checkbox.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-core.mjs +7 -0
- package/fesm2022/radix-ng-primitives-core.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-dialog.mjs +54 -12
- package/fesm2022/radix-ng-primitives-dialog.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-editable.mjs +12 -7
- package/fesm2022/radix-ng-primitives-editable.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-floating-focus-manager.mjs +294 -8
- package/fesm2022/radix-ng-primitives-floating-focus-manager.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-focus-scope.mjs +9 -0
- package/fesm2022/radix-ng-primitives-focus-scope.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-menu.mjs +34 -5
- package/fesm2022/radix-ng-primitives-menu.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-number-field.mjs +7 -2
- package/fesm2022/radix-ng-primitives-number-field.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-popover.mjs +77 -20
- package/fesm2022/radix-ng-primitives-popover.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-radio.mjs +19 -14
- package/fesm2022/radix-ng-primitives-radio.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-select.mjs +59 -37
- package/fesm2022/radix-ng-primitives-select.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-slider.mjs +259 -28
- package/fesm2022/radix-ng-primitives-slider.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-stepper.mjs +11 -7
- package/fesm2022/radix-ng-primitives-stepper.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-switch.mjs +10 -5
- package/fesm2022/radix-ng-primitives-switch.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-tabs.mjs +15 -10
- package/fesm2022/radix-ng-primitives-tabs.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-toggle-group.mjs +9 -4
- package/fesm2022/radix-ng-primitives-toggle-group.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-toggle.mjs +12 -6
- package/fesm2022/radix-ng-primitives-toggle.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-tooltip.mjs +180 -35
- package/fesm2022/radix-ng-primitives-tooltip.mjs.map +1 -1
- package/package.json +1 -1
- package/types/radix-ng-primitives-checkbox.d.ts +27 -15
- package/types/radix-ng-primitives-core.d.ts +2 -0
- package/types/radix-ng-primitives-dialog.d.ts +13 -2
- package/types/radix-ng-primitives-editable.d.ts +11 -5
- package/types/radix-ng-primitives-floating-focus-manager.d.ts +113 -16
- package/types/radix-ng-primitives-menu.d.ts +8 -2
- package/types/radix-ng-primitives-number-field.d.ts +8 -3
- package/types/radix-ng-primitives-popover.d.ts +18 -6
- package/types/radix-ng-primitives-radio.d.ts +13 -6
- package/types/radix-ng-primitives-select.d.ts +16 -20
- package/types/radix-ng-primitives-slider.d.ts +60 -9
- package/types/radix-ng-primitives-stepper.d.ts +11 -4
- package/types/radix-ng-primitives-switch.d.ts +10 -4
- package/types/radix-ng-primitives-tabs.d.ts +12 -6
- package/types/radix-ng-primitives-toggle-group.d.ts +11 -5
- package/types/radix-ng-primitives-toggle.d.ts +10 -3
- 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
|
|
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
|
|
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
|
|
182
|
+
close(reason = 'none', event) {
|
|
175
183
|
this.clearHoverTimers();
|
|
176
184
|
if (!this.open()) {
|
|
177
185
|
return;
|
|
178
186
|
}
|
|
179
|
-
const
|
|
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
|
|
473
|
-
*
|
|
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.
|
|
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
|
-
|
|
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.
|
|
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": "
|
|
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]': '
|
|
917
|
+
'[attr.aria-expanded]': 'triggerInteraction.ariaExpanded()',
|
|
861
918
|
'[attr.aria-haspopup]': '"dialog"',
|
|
862
|
-
'[attr.data-state]': '
|
|
863
|
-
'[attr.data-popup-open]': '
|
|
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)',
|