@radix-ng/primitives 1.0.10 → 1.1.0

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 (50) hide show
  1. package/README.md +26 -5
  2. package/fesm2022/radix-ng-primitives-autocomplete.mjs +24 -16
  3. package/fesm2022/radix-ng-primitives-autocomplete.mjs.map +1 -1
  4. package/fesm2022/radix-ng-primitives-checkbox.mjs +55 -7
  5. package/fesm2022/radix-ng-primitives-checkbox.mjs.map +1 -1
  6. package/fesm2022/radix-ng-primitives-combobox.mjs +35 -18
  7. package/fesm2022/radix-ng-primitives-combobox.mjs.map +1 -1
  8. package/fesm2022/radix-ng-primitives-composite.mjs +221 -36
  9. package/fesm2022/radix-ng-primitives-composite.mjs.map +1 -1
  10. package/fesm2022/radix-ng-primitives-core.mjs +181 -21
  11. package/fesm2022/radix-ng-primitives-core.mjs.map +1 -1
  12. package/fesm2022/radix-ng-primitives-date-field.mjs +11 -5
  13. package/fesm2022/radix-ng-primitives-date-field.mjs.map +1 -1
  14. package/fesm2022/radix-ng-primitives-field.mjs +127 -23
  15. package/fesm2022/radix-ng-primitives-field.mjs.map +1 -1
  16. package/fesm2022/radix-ng-primitives-form.mjs +35 -4
  17. package/fesm2022/radix-ng-primitives-form.mjs.map +1 -1
  18. package/fesm2022/radix-ng-primitives-input.mjs +87 -15
  19. package/fesm2022/radix-ng-primitives-input.mjs.map +1 -1
  20. package/fesm2022/radix-ng-primitives-menu.mjs +34 -7
  21. package/fesm2022/radix-ng-primitives-menu.mjs.map +1 -1
  22. package/fesm2022/radix-ng-primitives-popper.mjs +80 -11
  23. package/fesm2022/radix-ng-primitives-popper.mjs.map +1 -1
  24. package/fesm2022/radix-ng-primitives-scroll-area.mjs +6 -3
  25. package/fesm2022/radix-ng-primitives-scroll-area.mjs.map +1 -1
  26. package/fesm2022/radix-ng-primitives-select.mjs +36 -12
  27. package/fesm2022/radix-ng-primitives-select.mjs.map +1 -1
  28. package/fesm2022/radix-ng-primitives-signal-forms.mjs +27 -11
  29. package/fesm2022/radix-ng-primitives-signal-forms.mjs.map +1 -1
  30. package/fesm2022/radix-ng-primitives-time-field.mjs +12 -6
  31. package/fesm2022/radix-ng-primitives-time-field.mjs.map +1 -1
  32. package/package.json +8 -3
  33. package/types/radix-ng-primitives-autocomplete.d.ts +7 -2
  34. package/types/radix-ng-primitives-checkbox.d.ts +10 -1
  35. package/types/radix-ng-primitives-combobox.d.ts +29 -2
  36. package/types/radix-ng-primitives-composite.d.ts +48 -2
  37. package/types/radix-ng-primitives-core.d.ts +152 -94
  38. package/types/radix-ng-primitives-date-field.d.ts +7 -4
  39. package/types/radix-ng-primitives-field.d.ts +55 -8
  40. package/types/radix-ng-primitives-form.d.ts +9 -0
  41. package/types/radix-ng-primitives-input.d.ts +10 -2
  42. package/types/radix-ng-primitives-menu.d.ts +45 -4
  43. package/types/radix-ng-primitives-navigation-menu.d.ts +2 -2
  44. package/types/radix-ng-primitives-popover.d.ts +2 -2
  45. package/types/radix-ng-primitives-popper.d.ts +60 -15
  46. package/types/radix-ng-primitives-preview-card.d.ts +2 -2
  47. package/types/radix-ng-primitives-select.d.ts +17 -3
  48. package/types/radix-ng-primitives-signal-forms.d.ts +22 -8
  49. package/types/radix-ng-primitives-time-field.d.ts +9 -6
  50. package/types/radix-ng-primitives-tooltip.d.ts +2 -2
@@ -1,8 +1,9 @@
1
1
  import * as i0 from '@angular/core';
2
- import { inject, ElementRef, Directive, contentChild, signal, InjectionToken, numberAttribute, Injector, input, booleanAttribute, computed, output, forwardRef, resource, linkedSignal, afterRenderEffect, afterNextRender, EnvironmentInjector, effect, createComponent, inputBinding } from '@angular/core';
2
+ import { inject, ElementRef, Directive, contentChild, signal, InjectionToken, numberAttribute, Injector, input, computed, booleanAttribute, output, forwardRef, resource, linkedSignal, afterRenderEffect, afterNextRender, EnvironmentInjector, effect, createComponent, inputBinding } from '@angular/core';
3
3
  import { RdxArrow } from '@radix-ng/primitives/arrow';
4
4
  import { flip, shift, limitShift, computePosition, offset, size, arrow, hide, autoUpdate } from '@floating-ui/dom';
5
5
  import { createContext, elementSize, watch } from '@radix-ng/primitives/core';
6
+ import { injectDirection } from '@radix-ng/primitives/direction-provider';
6
7
 
7
8
  class RdxPopperAnchor {
8
9
  constructor() {
@@ -62,6 +63,39 @@ function provideRdxPopperContentConfig(config) {
62
63
  const SIDE_OPTIONS = ['top', 'right', 'bottom', 'left'];
63
64
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
64
65
  const ALIGN_OPTIONS = ['start', 'center', 'end'];
66
+ /**
67
+ * Resolve a logical inline side to a physical one for the current text direction; physical sides pass
68
+ * through unchanged (Base UI `useAnchorPositioning`). `inline-start` is the reading-start edge
69
+ * (`left` in LTR, `right` in RTL); `inline-end` is the reading-end edge.
70
+ */
71
+ function resolvePhysicalSide(side, isRtl) {
72
+ if (side === 'inline-start') {
73
+ return isRtl ? 'right' : 'left';
74
+ }
75
+ if (side === 'inline-end') {
76
+ return isRtl ? 'left' : 'right';
77
+ }
78
+ return side;
79
+ }
80
+ /**
81
+ * Report a rendered physical side back in the same "kind" the consumer requested (Base UI
82
+ * `getLogicalSide`): when a logical side was requested, a `left`/`right` rendered side is mapped back
83
+ * to `inline-start`/`inline-end` for the direction (so a post-collision flip surfaces logically); a
84
+ * physical request, or a `top`/`bottom` rendered side, passes through unchanged.
85
+ */
86
+ function toLogicalSide(requestedSide, renderedSide, isRtl) {
87
+ const requestedLogical = requestedSide === 'inline-start' || requestedSide === 'inline-end';
88
+ if (!requestedLogical) {
89
+ return renderedSide;
90
+ }
91
+ if (renderedSide === 'left') {
92
+ return isRtl ? 'inline-end' : 'inline-start';
93
+ }
94
+ if (renderedSide === 'right') {
95
+ return isRtl ? 'inline-start' : 'inline-end';
96
+ }
97
+ return renderedSide;
98
+ }
65
99
  function isNotNull(value) {
66
100
  return value !== null;
67
101
  }
@@ -118,6 +152,7 @@ const context = () => {
118
152
  const popperContentWrapper = inject(RdxPopperContentWrapper);
119
153
  return {
120
154
  placedSide: popperContentWrapper.placedSide,
155
+ physicalPlacedSide: popperContentWrapper.physicalPlacedSide,
121
156
  placedAlign: popperContentWrapper.placedAlign,
122
157
  arrowX: popperContentWrapper.arrowX,
123
158
  arrowY: popperContentWrapper.arrowY,
@@ -135,6 +170,7 @@ class RdxPopperContentWrapper {
135
170
  strategy: this.positionStrategy(),
136
171
  placement: this.desiredPlacement(),
137
172
  side: this.side(),
173
+ isRtl: this.direction() === 'rtl',
138
174
  align: this.align(),
139
175
  sideOffset: this.sideOffset(),
140
176
  alignOffset: this.alignOffset(),
@@ -162,9 +198,24 @@ class RdxPopperContentWrapper {
162
198
  /**
163
199
  * The preferred side of the anchor to render against when open.
164
200
  * Will be reversed when collisions occur and avoidCollisions is enabled.
201
+ *
202
+ * Accepts the logical `'inline-start'` / `'inline-end'` in addition to the physical sides; those
203
+ * resolve to `left` / `right` for the text direction (Base UI parity). The placed side reported via
204
+ * `data-side` / `placedSide()` echoes the requested kind: logical in → logical out (even after a
205
+ * collision flip), physical in → physical out.
165
206
  */
166
207
  this.side = input(this.config.side ?? 'bottom', /* @ts-ignore */
167
208
  ...(ngDevMode ? [{ debugName: "side" }] : /* istanbul ignore next */ []));
209
+ /**
210
+ * Text direction, used only to resolve a logical `side` (`inline-start` / `inline-end`) to a
211
+ * physical one. Falls back to an enclosing direction provider, then `ltr`.
212
+ */
213
+ this.dir = input(undefined, /* @ts-ignore */
214
+ ...(ngDevMode ? [{ debugName: "dir" }] : /* istanbul ignore next */ []));
215
+ this.direction = injectDirection(this.dir);
216
+ /** The `side` input with any logical inline value resolved to a physical side for the direction. */
217
+ this.resolvedSide = computed(() => resolvePhysicalSide(this.side(), this.direction() === 'rtl'), /* @ts-ignore */
218
+ ...(ngDevMode ? [{ debugName: "resolvedSide" }] : /* istanbul ignore next */ []));
168
219
  /**
169
220
  * Distance between the anchor and the popup in pixels. Also accepts an {@link OffsetFunction} that
170
221
  * reads the anchor / positioner dimensions and the resolved side / align.
@@ -282,7 +333,7 @@ class RdxPopperContentWrapper {
282
333
  ...(ngDevMode ? [{ debugName: "arrowY" }] : /* istanbul ignore next */ []));
283
334
  this.anchorHidden = computed(() => this.position.value()?.middlewareData.hide?.referenceHidden === true, /* @ts-ignore */
284
335
  ...(ngDevMode ? [{ debugName: "anchorHidden" }] : /* istanbul ignore next */ []));
285
- this.desiredPlacement = computed(() => (this.side() + (this.align() !== 'center' ? '-' + this.align() : '')), /* @ts-ignore */
336
+ this.desiredPlacement = computed(() => (this.resolvedSide() + (this.align() !== 'center' ? '-' + this.align() : '')), /* @ts-ignore */
286
337
  ...(ngDevMode ? [{ debugName: "desiredPlacement" }] : /* istanbul ignore next */ []));
287
338
  this.arrowSize = computed(() => {
288
339
  const arrowElementRef = this.arrow()?.elementRef;
@@ -372,7 +423,10 @@ class RdxPopperContentWrapper {
372
423
  offset((state) => {
373
424
  const [placedSide, placedAlign] = getSideAndAlignFromPlacement(state.placement);
374
425
  const data = {
375
- side: placedSide,
426
+ // Report the placed side in the same kind the consumer requested: logical
427
+ // when a logical `side` was passed (so a post-collision flip stays logical),
428
+ // physical otherwise (Base UI parity).
429
+ side: toLogicalSide(params.side, placedSide, params.isRtl),
376
430
  align: placedAlign,
377
431
  anchor: {
378
432
  width: state.rects.reference.width,
@@ -454,9 +508,22 @@ class RdxPopperContentWrapper {
454
508
  }, /* @ts-ignore */
455
509
  ...(ngDevMode ? [{ debugName: "placement" }] : /* istanbul ignore next */ []));
456
510
  /**
457
- * The side the panel is currently placed against.
511
+ * The physical side the panel is currently placed against. Internal geometry (arrow position,
512
+ * transform origins) must use this — never {@link placedSide}, which can be logical.
513
+ */
514
+ this.physicalPlacedSide = computed(() => this.placement()?.side, /* @ts-ignore */
515
+ ...(ngDevMode ? [{ debugName: "physicalPlacedSide" }] : /* istanbul ignore next */ []));
516
+ /**
517
+ * The side the panel is currently placed against, reported in the kind the consumer requested
518
+ * (Base UI positioner `side`): when a logical `side` was passed, a placed `left`/`right` maps back
519
+ * to `inline-start`/`inline-end` for the direction — so a post-collision flip stays logical and
520
+ * `[data-side="inline-start"]` CSS is direction-agnostic. A physical request is always reported
521
+ * physically.
458
522
  */
459
- this.placedSide = computed(() => this.placement()?.side, /* @ts-ignore */
523
+ this.placedSide = computed(() => {
524
+ const side = this.placement()?.side;
525
+ return side === undefined ? undefined : toLogicalSide(this.side(), side, this.direction() === 'rtl');
526
+ }, /* @ts-ignore */
460
527
  ...(ngDevMode ? [{ debugName: "placedSide" }] : /* istanbul ignore next */ []));
461
528
  /**
462
529
  * The current alignment of the panel.
@@ -541,7 +608,7 @@ class RdxPopperContentWrapper {
541
608
  });
542
609
  }
543
610
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: RdxPopperContentWrapper, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
544
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "22.0.2", type: RdxPopperContentWrapper, isStandalone: true, selector: "[rdxPopperContentWrapper]", inputs: { anchor: { classPropertyName: "anchor", publicName: "anchor", isSignal: true, isRequired: false, transformFunction: null }, side: { classPropertyName: "side", publicName: "side", isSignal: true, isRequired: false, transformFunction: null }, sideOffset: { classPropertyName: "sideOffset", publicName: "sideOffset", isSignal: true, isRequired: false, transformFunction: null }, align: { classPropertyName: "align", publicName: "align", isSignal: true, isRequired: false, transformFunction: null }, alignOffset: { classPropertyName: "alignOffset", publicName: "alignOffset", isSignal: true, isRequired: false, transformFunction: null }, arrowPadding: { classPropertyName: "arrowPadding", publicName: "arrowPadding", isSignal: true, isRequired: false, transformFunction: null }, avoidCollisions: { classPropertyName: "avoidCollisions", publicName: "avoidCollisions", isSignal: true, isRequired: false, transformFunction: null }, collisionAvoidance: { classPropertyName: "collisionAvoidance", publicName: "collisionAvoidance", isSignal: true, isRequired: false, transformFunction: null }, collisionBoundary: { classPropertyName: "collisionBoundary", publicName: "collisionBoundary", isSignal: true, isRequired: false, transformFunction: null }, collisionPadding: { classPropertyName: "collisionPadding", publicName: "collisionPadding", isSignal: true, isRequired: false, transformFunction: null }, sticky: { classPropertyName: "sticky", publicName: "sticky", isSignal: true, isRequired: false, transformFunction: null }, hideWhenDetached: { classPropertyName: "hideWhenDetached", publicName: "hideWhenDetached", isSignal: true, isRequired: false, transformFunction: null }, positionStrategy: { classPropertyName: "positionStrategy", publicName: "positionStrategy", isSignal: true, isRequired: false, transformFunction: null }, updatePositionStrategy: { classPropertyName: "updatePositionStrategy", publicName: "updatePositionStrategy", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { placed: "placed" }, host: { attributes: { "data-radix-popper-content-wrapper": "" }, properties: { "attr.data-side": "placedSide()", "attr.data-align": "placedAlign()", "attr.data-anchor-hidden": "anchorHidden() ? \"\" : undefined", "style": "style()" } }, providers: [providePopperContentWrapperContext(context)], queries: [{ propertyName: "arrow", first: true, predicate: i0.forwardRef(() => RdxPopperArrow), descendants: true, isSignal: true }], ngImport: i0 }); }
611
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "22.0.2", type: RdxPopperContentWrapper, isStandalone: true, selector: "[rdxPopperContentWrapper]", inputs: { anchor: { classPropertyName: "anchor", publicName: "anchor", isSignal: true, isRequired: false, transformFunction: null }, side: { classPropertyName: "side", publicName: "side", isSignal: true, isRequired: false, transformFunction: null }, dir: { classPropertyName: "dir", publicName: "dir", isSignal: true, isRequired: false, transformFunction: null }, sideOffset: { classPropertyName: "sideOffset", publicName: "sideOffset", isSignal: true, isRequired: false, transformFunction: null }, align: { classPropertyName: "align", publicName: "align", isSignal: true, isRequired: false, transformFunction: null }, alignOffset: { classPropertyName: "alignOffset", publicName: "alignOffset", isSignal: true, isRequired: false, transformFunction: null }, arrowPadding: { classPropertyName: "arrowPadding", publicName: "arrowPadding", isSignal: true, isRequired: false, transformFunction: null }, avoidCollisions: { classPropertyName: "avoidCollisions", publicName: "avoidCollisions", isSignal: true, isRequired: false, transformFunction: null }, collisionAvoidance: { classPropertyName: "collisionAvoidance", publicName: "collisionAvoidance", isSignal: true, isRequired: false, transformFunction: null }, collisionBoundary: { classPropertyName: "collisionBoundary", publicName: "collisionBoundary", isSignal: true, isRequired: false, transformFunction: null }, collisionPadding: { classPropertyName: "collisionPadding", publicName: "collisionPadding", isSignal: true, isRequired: false, transformFunction: null }, sticky: { classPropertyName: "sticky", publicName: "sticky", isSignal: true, isRequired: false, transformFunction: null }, hideWhenDetached: { classPropertyName: "hideWhenDetached", publicName: "hideWhenDetached", isSignal: true, isRequired: false, transformFunction: null }, positionStrategy: { classPropertyName: "positionStrategy", publicName: "positionStrategy", isSignal: true, isRequired: false, transformFunction: null }, updatePositionStrategy: { classPropertyName: "updatePositionStrategy", publicName: "updatePositionStrategy", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { placed: "placed" }, host: { attributes: { "data-radix-popper-content-wrapper": "" }, properties: { "attr.data-side": "placedSide()", "attr.data-align": "placedAlign()", "attr.data-anchor-hidden": "anchorHidden() ? \"\" : undefined", "style": "style()" } }, providers: [providePopperContentWrapperContext(context)], queries: [{ propertyName: "arrow", first: true, predicate: i0.forwardRef(() => RdxPopperArrow), descendants: true, isSignal: true }], ngImport: i0 }); }
545
612
  }
546
613
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: RdxPopperContentWrapper, decorators: [{
547
614
  type: Directive,
@@ -558,7 +625,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
558
625
  '[style]': 'style()'
559
626
  }
560
627
  }]
561
- }], ctorParameters: () => [], propDecorators: { anchor: [{ type: i0.Input, args: [{ isSignal: true, alias: "anchor", required: false }] }], side: [{ type: i0.Input, args: [{ isSignal: true, alias: "side", required: false }] }], sideOffset: [{ type: i0.Input, args: [{ isSignal: true, alias: "sideOffset", required: false }] }], align: [{ type: i0.Input, args: [{ isSignal: true, alias: "align", required: false }] }], alignOffset: [{ type: i0.Input, args: [{ isSignal: true, alias: "alignOffset", required: false }] }], arrowPadding: [{ type: i0.Input, args: [{ isSignal: true, alias: "arrowPadding", required: false }] }], avoidCollisions: [{ type: i0.Input, args: [{ isSignal: true, alias: "avoidCollisions", required: false }] }], collisionAvoidance: [{ type: i0.Input, args: [{ isSignal: true, alias: "collisionAvoidance", required: false }] }], collisionBoundary: [{ type: i0.Input, args: [{ isSignal: true, alias: "collisionBoundary", required: false }] }], collisionPadding: [{ type: i0.Input, args: [{ isSignal: true, alias: "collisionPadding", required: false }] }], sticky: [{ type: i0.Input, args: [{ isSignal: true, alias: "sticky", required: false }] }], hideWhenDetached: [{ type: i0.Input, args: [{ isSignal: true, alias: "hideWhenDetached", required: false }] }], positionStrategy: [{ type: i0.Input, args: [{ isSignal: true, alias: "positionStrategy", required: false }] }], updatePositionStrategy: [{ type: i0.Input, args: [{ isSignal: true, alias: "updatePositionStrategy", required: false }] }], placed: [{ type: i0.Output, args: ["placed"] }], arrow: [{ type: i0.ContentChild, args: [forwardRef(() => RdxPopperArrow), { isSignal: true }] }] } });
628
+ }], ctorParameters: () => [], propDecorators: { anchor: [{ type: i0.Input, args: [{ isSignal: true, alias: "anchor", required: false }] }], side: [{ type: i0.Input, args: [{ isSignal: true, alias: "side", required: false }] }], dir: [{ type: i0.Input, args: [{ isSignal: true, alias: "dir", required: false }] }], sideOffset: [{ type: i0.Input, args: [{ isSignal: true, alias: "sideOffset", required: false }] }], align: [{ type: i0.Input, args: [{ isSignal: true, alias: "align", required: false }] }], alignOffset: [{ type: i0.Input, args: [{ isSignal: true, alias: "alignOffset", required: false }] }], arrowPadding: [{ type: i0.Input, args: [{ isSignal: true, alias: "arrowPadding", required: false }] }], avoidCollisions: [{ type: i0.Input, args: [{ isSignal: true, alias: "avoidCollisions", required: false }] }], collisionAvoidance: [{ type: i0.Input, args: [{ isSignal: true, alias: "collisionAvoidance", required: false }] }], collisionBoundary: [{ type: i0.Input, args: [{ isSignal: true, alias: "collisionBoundary", required: false }] }], collisionPadding: [{ type: i0.Input, args: [{ isSignal: true, alias: "collisionPadding", required: false }] }], sticky: [{ type: i0.Input, args: [{ isSignal: true, alias: "sticky", required: false }] }], hideWhenDetached: [{ type: i0.Input, args: [{ isSignal: true, alias: "hideWhenDetached", required: false }] }], positionStrategy: [{ type: i0.Input, args: [{ isSignal: true, alias: "positionStrategy", required: false }] }], updatePositionStrategy: [{ type: i0.Input, args: [{ isSignal: true, alias: "updatePositionStrategy", required: false }] }], placed: [{ type: i0.Output, args: ["placed"] }], arrow: [{ type: i0.ContentChild, args: [forwardRef(() => RdxPopperArrow), { isSignal: true }] }] } });
562
629
  /**
563
630
  * Providers a "thin" positioner that `extends RdxPopperContentWrapper` must include. Angular
564
631
  * inherits a base directive's inputs/outputs/host bindings/queries but **not** its `providers`, so
@@ -610,7 +677,9 @@ class RdxPopperArrow {
610
677
  this.elementRef = inject(ElementRef);
611
678
  this.width = input(10, { ...(ngDevMode ? { debugName: "width" } : /* istanbul ignore next */ {}), transform: numberAttribute });
612
679
  this.height = input(5, { ...(ngDevMode ? { debugName: "height" } : /* istanbul ignore next */ {}), transform: numberAttribute });
613
- this.baseSide = computed(() => OPPOSITE_SIDE[this.popperContentContext.placedSide()], /* @ts-ignore */
680
+ // Geometry is physical: the arrow reads `physicalPlacedSide` (`placedSide` can be logical
681
+ // `inline-start`/`inline-end` when a logical side was requested — a styling hook, not a direction).
682
+ this.baseSide = computed(() => OPPOSITE_SIDE[this.popperContentContext.physicalPlacedSide()], /* @ts-ignore */
614
683
  ...(ngDevMode ? [{ debugName: "baseSide" }] : /* istanbul ignore next */ []));
615
684
  this.style = computed(() => {
616
685
  return {
@@ -623,13 +692,13 @@ class RdxPopperArrow {
623
692
  right: '0 0',
624
693
  bottom: 'center 0',
625
694
  left: '100% 0'
626
- }[this.popperContentContext.placedSide()],
695
+ }[this.popperContentContext.physicalPlacedSide()],
627
696
  transform: {
628
697
  top: 'translateY(100%)',
629
698
  right: 'translateY(50%) rotate(90deg) translateX(-50%)',
630
699
  bottom: `rotate(180deg)`,
631
700
  left: 'translateY(50%) rotate(-90deg) translateX(50%)'
632
- }[this.popperContentContext.placedSide()],
701
+ }[this.popperContentContext.physicalPlacedSide()],
633
702
  visibility: this.popperContentContext.shouldHideArrow() ? 'hidden' : undefined
634
703
  };
635
704
  }, /* @ts-ignore */
@@ -700,5 +769,5 @@ const popperImports = [RdxPopper, RdxPopperArrow, RdxPopperContentWrapper, RdxPo
700
769
  * Generated bundle index. Do not edit.
701
770
  */
702
771
 
703
- export { DROPDOWN_COLLISION_AVOIDANCE, POPUP_COLLISION_AVOIDANCE, RdxPopper, RdxPopperAnchor, RdxPopperArrow, RdxPopperContent, RdxPopperContentConfigToken, RdxPopperContentWrapper, getSideAndAlignFromPlacement, injectPopperContentWrapperContext, isNotNull, legacyPopperVars, popperImports, providePopperContentWrapperContext, provideRdxPopperContentConfig, provideRdxPopperContentWrapper, transformOrigin };
772
+ export { DROPDOWN_COLLISION_AVOIDANCE, POPUP_COLLISION_AVOIDANCE, RdxPopper, RdxPopperAnchor, RdxPopperArrow, RdxPopperContent, RdxPopperContentConfigToken, RdxPopperContentWrapper, getSideAndAlignFromPlacement, injectPopperContentWrapperContext, isNotNull, legacyPopperVars, popperImports, providePopperContentWrapperContext, provideRdxPopperContentConfig, provideRdxPopperContentWrapper, resolvePhysicalSide, toLogicalSide, transformOrigin };
704
773
  //# sourceMappingURL=radix-ng-primitives-popper.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"radix-ng-primitives-popper.mjs","sources":["../../../packages/primitives/popper/src/popper-anchor.ts","../../../packages/primitives/popper/src/popper.ts","../../../packages/primitives/popper/src/popper-content.config.ts","../../../packages/primitives/popper/src/utils.ts","../../../packages/primitives/popper/src/popper-content-wrapper.ts","../../../packages/primitives/popper/src/popper-arrow.ts","../../../packages/primitives/popper/src/popper-content.ts","../../../packages/primitives/popper/index.ts","../../../packages/primitives/popper/radix-ng-primitives-popper.ts"],"sourcesContent":["import { Directive, ElementRef, inject } from '@angular/core';\n\n@Directive({\n selector: '[rdxPopperAnchor]'\n})\nexport class RdxPopperAnchor {\n readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n}\n","import { contentChild, Directive, signal } from '@angular/core';\nimport type { ReferenceElement } from '@floating-ui/dom';\nimport { RdxPopperAnchor } from './popper-anchor';\n\n@Directive({\n selector: '[rdxPopperRoot]'\n})\nexport class RdxPopper {\n readonly anchor = contentChild(RdxPopperAnchor);\n readonly anchorOverride = signal<ReferenceElement | undefined>(undefined);\n}\n","import { InjectionToken, Provider } from '@angular/core';\nimport { Align, OffsetFunction, RdxCollisionAvoidance, Side } from './utils';\n\n/**\n * Default positioning values for `RdxPopperContentWrapper`.\n *\n * Lets a composing primitive (e.g. tooltip) provide its own Base UI-aligned defaults without\n * changing the shared popper defaults that other consumers (e.g. popover) rely on. Any value left\n * `undefined` falls back to the wrapper's built-in default. Consumer template bindings always win.\n */\nexport interface RdxPopperContentConfig {\n side?: Side;\n align?: Align;\n sideOffset?: number | OffsetFunction;\n alignOffset?: number | OffsetFunction;\n arrowPadding?: number;\n /**\n * @deprecated Use {@link collisionAvoidance} instead. Kept for back-compat: `false` disables all\n * collision avoidance (equivalent to `{ side: 'none', align: 'none', fallbackAxisSide: 'none' }`).\n */\n avoidCollisions?: boolean;\n /** Per-primitive collision-avoidance default (Base UI parity). See {@link RdxCollisionAvoidance}. */\n collisionAvoidance?: RdxCollisionAvoidance;\n collisionPadding?: number | Partial<Record<Side, number>>;\n sticky?: 'partial' | 'always';\n hideWhenDetached?: boolean;\n positionStrategy?: 'fixed' | 'absolute';\n updatePositionStrategy?: 'optimized' | 'always';\n}\n\n/**\n * Collision-avoidance preset for dropdown-style popups (Base UI `DROPDOWN_COLLISION_AVOIDANCE`).\n *\n * Dropdowns (select / combobox / autocomplete / menu) strictly prefer their top/bottom placement and\n * cap their height with `var(--available-height)`, so they must **not** fall back to the perpendicular\n * (left/right) axis. `side`/`align` fall back to the wrapper default (`'flip'`).\n */\nexport const DROPDOWN_COLLISION_AVOIDANCE: RdxCollisionAvoidance = { fallbackAxisSide: 'none' };\n\n/**\n * Collision-avoidance preset for regular popups (Base UI `POPUP_COLLISION_AVOIDANCE`).\n *\n * Popovers / tooltips / preview cards aren't height-capped and may freely flip to the perpendicular\n * axis, preferring the logical end side. This equals the wrapper's built-in default; it is exported so\n * popups can state the intent explicitly.\n */\nexport const POPUP_COLLISION_AVOIDANCE: RdxCollisionAvoidance = { fallbackAxisSide: 'end' };\n\nexport const RdxPopperContentConfigToken = new InjectionToken<RdxPopperContentConfig>('RdxPopperContentConfig', {\n factory: () => ({})\n});\n\nexport function provideRdxPopperContentConfig(config: RdxPopperContentConfig): Provider {\n return { provide: RdxPopperContentConfigToken, useValue: config };\n}\n","import type { Middleware, Placement } from '@floating-ui/dom';\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst SIDE_OPTIONS = ['top', 'right', 'bottom', 'left'] as const;\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst ALIGN_OPTIONS = ['start', 'center', 'end'] as const;\n\nexport type Side = (typeof SIDE_OPTIONS)[number];\nexport type Align = (typeof ALIGN_OPTIONS)[number];\n\n/**\n * How the popper avoids collisions with the boundary edges (Base UI `collisionAvoidance`).\n *\n * - `side` — behavior on the **preferred placement axis** (`top`/`bottom` or `left`/`right`):\n * `'flip'` swaps to the opposite side when it doesn't fit, `'shift'` keeps the side and nudges the\n * popup within the boundary, `'none'` leaves side-axis overflow uncorrected.\n * - `align` — behavior on the **alignment axis** (`start`/`center`/`end`): `'flip'` swaps `start`/`end`,\n * `'shift'` nudges the popup along the alignment axis, `'none'` leaves it uncorrected.\n * - `fallbackAxisSide` — when neither preferred side fits, whether to fall back to the perpendicular\n * axis and which logical side to prefer (`'start'` / `'end'`), or `'none'` to stay on the axis.\n *\n * Any omitted field falls back to the wrapper default (`side: 'flip'`, `align: 'flip'`,\n * `fallbackAxisSide: 'end'`), matching Base UI.\n */\nexport interface RdxCollisionAvoidance {\n side?: 'flip' | 'shift' | 'none';\n align?: 'flip' | 'shift' | 'none';\n fallbackAxisSide?: 'start' | 'end' | 'none';\n}\n\n/** Fully-resolved {@link RdxCollisionAvoidance} — every field present (no wrapper-default fallback left). */\nexport type ResolvedCollisionAvoidance = Required<RdxCollisionAvoidance>;\n\n/**\n * Function form of `sideOffset` / `alignOffset` (Base UI `OffsetFunction`). Receives the resolved\n * placement and the measured anchor / positioner dimensions, and returns the offset in pixels — e.g.\n * `({ anchor }) => anchor.width` to offset by the trigger's own width. `side` is the physical side the\n * popup is placed against.\n */\nexport type OffsetFunction = (data: {\n side: Side;\n align: Align;\n anchor: { width: number; height: number };\n positioner: { width: number; height: number };\n}) => number;\n\nexport function isNotNull<T>(value: T | null): value is T {\n return value !== null;\n}\n\nexport function transformOrigin(options: { arrowWidth: number; arrowHeight: number }): Middleware {\n return {\n name: 'transformOrigin',\n options,\n fn(data) {\n const { placement, rects, middlewareData } = data;\n\n const cannotCenterArrow = middlewareData.arrow?.centerOffset !== 0;\n const isArrowHidden = cannotCenterArrow;\n const arrowWidth = isArrowHidden ? 0 : options.arrowWidth;\n const arrowHeight = isArrowHidden ? 0 : options.arrowHeight;\n\n const [placedSide, placedAlign] = getSideAndAlignFromPlacement(placement);\n const noArrowAlign = { start: '0%', center: '50%', end: '100%' }[placedAlign];\n\n const arrowXCenter = (middlewareData.arrow?.x ?? 0) + arrowWidth / 2;\n const arrowYCenter = (middlewareData.arrow?.y ?? 0) + arrowHeight / 2;\n\n let x = '';\n let y = '';\n\n if (placedSide === 'bottom') {\n x = isArrowHidden ? noArrowAlign : `${arrowXCenter}px`;\n y = `${-arrowHeight}px`;\n } else if (placedSide === 'top') {\n x = isArrowHidden ? noArrowAlign : `${arrowXCenter}px`;\n y = `${rects.floating.height + arrowHeight}px`;\n } else if (placedSide === 'right') {\n x = `${-arrowHeight}px`;\n y = isArrowHidden ? noArrowAlign : `${arrowYCenter}px`;\n } else if (placedSide === 'left') {\n x = `${rects.floating.width + arrowHeight}px`;\n y = isArrowHidden ? noArrowAlign : `${arrowYCenter}px`;\n }\n return { data: { x, y } };\n }\n };\n}\n\nexport function getSideAndAlignFromPlacement(placement: Placement) {\n const [side, align = 'center'] = placement.split('-');\n return [side as Side, align as Align] as const;\n}\n","import {\n afterNextRender,\n afterRenderEffect,\n booleanAttribute,\n computed,\n contentChild,\n Directive,\n ElementRef,\n forwardRef,\n inject,\n Injector,\n input,\n linkedSignal,\n numberAttribute,\n output,\n Provider,\n resource,\n Signal,\n signal,\n Type\n} from '@angular/core';\nimport type { ComputePositionReturn, ReferenceElement, VirtualElement } from '@floating-ui/dom';\nimport {\n autoUpdate,\n computePosition,\n flip,\n arrow as floatingUIArrow,\n hide,\n limitShift,\n offset,\n Placement,\n shift,\n size\n} from '@floating-ui/dom';\nimport { BooleanInput, createContext, elementSize, NumberInput, watch } from '@radix-ng/primitives/core';\nimport { RdxPopper } from './popper';\nimport { RdxPopperArrow } from './popper-arrow';\nimport { RdxPopperContentConfigToken } from './popper-content.config';\nimport {\n Align,\n getSideAndAlignFromPlacement,\n isNotNull,\n OffsetFunction,\n RdxCollisionAvoidance,\n ResolvedCollisionAvoidance,\n Side,\n transformOrigin\n} from './utils';\n\n/**\n * `input()` transform for `sideOffset` / `alignOffset`: coerce string/number attribute values to a\n * number but pass an {@link OffsetFunction} through untouched. A **named** module-level function (not\n * an inline arrow) so compodoc parses the file — see CLAUDE.md's compodoc gotcha.\n */\nfunction coerceOffset(value: number | OffsetFunction | string | null | undefined): number | OffsetFunction {\n return typeof value === 'function' ? value : numberAttribute(value);\n}\n\nexport type RdxPopperAnchorElement =\n | Element\n | ElementRef<Element>\n | VirtualElement\n | (() => Element | VirtualElement | null)\n | null\n | undefined;\n\ntype PopperPositionParams = {\n positioningActive: boolean;\n anchor: ReferenceElement | null;\n strategy: 'fixed' | 'absolute';\n placement: Placement;\n side: Side;\n align: Align;\n sideOffset: number | OffsetFunction;\n alignOffset: number | OffsetFunction;\n arrowHeight: number;\n arrowWidth: number;\n collisionAvoidance: ResolvedCollisionAvoidance;\n sticky: 'partial' | 'always';\n detectOverflowOptions: {\n padding: number | Partial<Record<Side, number>>;\n boundary: Element[];\n altBoundary: boolean;\n };\n arrow: RdxPopperArrow | undefined;\n arrowPadding: number;\n hideWhenDetached: boolean;\n};\n\nconst context = () => {\n const popperContentWrapper = inject(RdxPopperContentWrapper);\n\n return {\n placedSide: popperContentWrapper.placedSide,\n placedAlign: popperContentWrapper.placedAlign,\n arrowX: popperContentWrapper.arrowX,\n arrowY: popperContentWrapper.arrowY,\n shouldHideArrow: popperContentWrapper.shouldHideArrow,\n isPositioned: popperContentWrapper.isPositioned,\n anchorHidden: popperContentWrapper.anchorHidden\n };\n};\n\nexport type PopperContentWrapperContext = ReturnType<typeof context>;\n\nexport const [injectPopperContentWrapperContext, providePopperContentWrapperContext] =\n createContext<PopperContentWrapperContext>('PopperContentWrapperContext', 'utils/popper');\n\n@Directive({\n selector: '[rdxPopperContentWrapper]',\n providers: [providePopperContentWrapperContext(context)],\n host: {\n 'data-radix-popper-content-wrapper': '',\n // Placement state, emitted once for every positioner (ADR 0012). The popup\n // (`RdxPopperContent`) keeps its own `data-side`/`data-align` as popup-level styling hooks.\n '[attr.data-side]': 'placedSide()',\n '[attr.data-align]': 'placedAlign()',\n '[attr.data-anchor-hidden]': 'anchorHidden() ? \"\" : undefined',\n '[style]': 'style()'\n }\n})\nexport class RdxPopperContentWrapper {\n private readonly elementRef = inject(ElementRef);\n private readonly injector = inject(Injector);\n\n private readonly context = inject(RdxPopper);\n\n /** Optional positioning defaults provided by a composing primitive (e.g. tooltip). */\n private readonly config = inject(RdxPopperContentConfigToken);\n\n /**\n * An element to position the popup against. Defaults to the popper anchor.\n */\n readonly anchor = input<RdxPopperAnchorElement>();\n\n /**\n * The preferred side of the anchor to render against when open.\n * Will be reversed when collisions occur and avoidCollisions is enabled.\n */\n readonly side = input<Side>(this.config.side ?? 'bottom');\n\n /**\n * Distance between the anchor and the popup in pixels. Also accepts an {@link OffsetFunction} that\n * reads the anchor / positioner dimensions and the resolved side / align.\n */\n readonly sideOffset = input(this.config.sideOffset ?? 0, { transform: coerceOffset });\n\n /**\n * How to align the popup relative to the specified side. May change when collisions occur.\n */\n readonly align = input<Align>(this.config.align ?? 'center');\n\n /**\n * An offset in pixels from the `start` or `end` alignment options. Also accepts an\n * {@link OffsetFunction} (same signature as `sideOffset`).\n */\n readonly alignOffset = input(this.config.alignOffset ?? 0, { transform: coerceOffset });\n\n /**\n * Minimum distance to maintain between the arrow and the edges of the popup.\n * If your content has border-radius, this will prevent it from overflowing the corners.\n */\n readonly arrowPadding = input<number, NumberInput>(this.config.arrowPadding ?? 0, { transform: numberAttribute });\n\n /**\n * When `true`, overrides the `side` and `align` preferences to prevent collisions with boundary edges.\n *\n * @deprecated Use {@link collisionAvoidance} for fine-grained control (Base UI parity). Still honored:\n * `false` disables all avoidance (unless a `collisionAvoidance` object is provided, which wins).\n */\n readonly avoidCollisions = input<boolean, BooleanInput>(this.config.avoidCollisions ?? true, {\n transform: booleanAttribute\n });\n\n /**\n * How the popup avoids colliding with the boundary edges, per axis (Base UI `collisionAvoidance`).\n * Overrides the deprecated `avoidCollisions` and any per-primitive preset. An object here **fully\n * replaces** the preset — omitted fields fall back to `side: 'flip'`, `align: 'flip'`,\n * `fallbackAxisSide: 'end'`, never to the preset. See {@link RdxCollisionAvoidance}.\n */\n readonly collisionAvoidance = input<RdxCollisionAvoidance | undefined>(undefined);\n\n /**\n * Collision avoidance resolved against the deprecated `avoidCollisions` flag, the per-primitive\n * config preset, and the wrapper defaults. Precedence: an explicit `collisionAvoidance` input →\n * a legacy `avoidCollisions=false` (disables everything) → the config preset → the Base UI defaults.\n */\n private readonly effectiveCollisionAvoidance = computed<ResolvedCollisionAvoidance>(() => {\n const explicit = this.collisionAvoidance();\n\n // Legacy escape hatch (deprecated): `avoidCollisions=false` disables avoidance entirely — unless\n // the consumer passes an explicit `collisionAvoidance` object, which always wins. Checked before\n // the preset so `[avoidCollisions]=\"false\"` still works on a positioner that ships a preset.\n if (!explicit && this.avoidCollisions() === false) {\n return { side: 'none', align: 'none', fallbackAxisSide: 'none' };\n }\n\n // A consumer object fully REPLACES the preset (Base UI parity — the preset is only the default\n // when the consumer passes nothing); omitted fields fall back to the global defaults, not the\n // preset. `??` (not spread-merge) is what enforces the \"replaces, not merges\" semantics.\n const source = explicit ?? this.config.collisionAvoidance;\n\n return {\n side: source?.side ?? 'flip',\n align: source?.align ?? 'flip',\n fallbackAxisSide: source?.fallbackAxisSide ?? 'end'\n };\n });\n\n /**\n * The element used as the collision boundary.\n * By default this is the viewport, though you can provide additional element(s) to be included in this check.\n */\n readonly collisionBoundary = input<ElementRef<HTMLElement> | ElementRef<HTMLElement>[]>();\n /**\n * The distance in pixels from the boundary edges where collision detection should occur.\n * Accepts a number (same for all sides), or a partial padding object, for example: `{ top: 20, left: 20 }`.\n */\n readonly collisionPadding = input<number | Partial<Record<Side, number>>>(this.config.collisionPadding ?? 0);\n\n /**\n * The sticky behavior on the align axis. `partial` will keep the\n * content in the boundary as long as the trigger is at least partially\n * in the boundary whilst \"always\" will keep the content in the boundary\n * regardless.\n */\n readonly sticky = input<'partial' | 'always'>(this.config.sticky ?? 'partial');\n\n /**\n * Whether to hide the content when the trigger becomes fully occluded.\n */\n readonly hideWhenDetached = input<boolean, BooleanInput>(this.config.hideWhenDetached ?? false, {\n transform: booleanAttribute\n });\n\n /**\n * The type of CSS position property to use.\n */\n readonly positionStrategy = input<'fixed' | 'absolute'>(this.config.positionStrategy ?? 'fixed');\n\n /**\n * Strategy to update the position of the floating element on every animation frame.\n */\n readonly updatePositionStrategy = input<'optimized' | 'always'>(this.config.updatePositionStrategy ?? 'optimized');\n\n /**\n * Emits when the element is placed.\n */\n readonly placed = output<void>();\n\n readonly arrow = contentChild(forwardRef(() => RdxPopperArrow));\n\n /**\n * When `true`, the content is rendered click/hover-through (`pointer-events: none`). Used for\n * cursor-following content (e.g. a tooltip tracking the pointer) that must never intercept the\n * pointer and steal hover from its trigger.\n */\n readonly nonInteractive = signal(false);\n\n readonly shouldHideArrow = computed(() => this.position.value()?.middlewareData['arrow']?.centerOffset !== 0);\n /** Whether the arrow could not be centered on the anchor because the popup was shifted. */\n readonly arrowUncentered = computed(\n () => (this.position.value()?.middlewareData['arrow']?.centerOffset ?? 0) !== 0\n );\n readonly arrowX = computed(() => this.position.value()?.middlewareData['arrow']?.x);\n readonly arrowY = computed(() => this.position.value()?.middlewareData['arrow']?.y);\n readonly anchorHidden = computed(() => this.position.value()?.middlewareData.hide?.referenceHidden === true);\n\n private readonly desiredPlacement = computed(\n () => (this.side() + (this.align() !== 'center' ? '-' + this.align() : '')) as Placement\n );\n\n private readonly arrowSize = computed(() => {\n const arrowElementRef = this.arrow()?.elementRef;\n\n if (!arrowElementRef) {\n return computed(() => ({\n height: 0,\n width: 0\n }));\n }\n\n return elementSize({\n elementRef: arrowElementRef,\n injector: this.injector\n });\n });\n\n private readonly boundary = computed(() => {\n const boundary = this.collisionBoundary();\n\n if (Array.isArray(boundary)) {\n return boundary.map((e) => e.nativeElement);\n }\n\n if (!boundary) {\n return [];\n }\n\n return [boundary.nativeElement];\n });\n\n private readonly hasExplicitBoundaries = computed(() => this.boundary().length > 0);\n\n private readonly detectOverflowOptions = computed(() => ({\n padding: this.collisionPadding(),\n boundary: this.boundary().filter(isNotNull),\n // with `strategy: 'fixed'`, this is the only way to get it to respect boundaries\n altBoundary: this.hasExplicitBoundaries()\n }));\n\n private readonly resolvedAnchor = computed<ReferenceElement | null>(() => {\n const anchor = this.anchor();\n const resolvedAnchor = typeof anchor === 'function' ? anchor() : anchor;\n\n if (resolvedAnchor instanceof ElementRef) {\n return resolvedAnchor.nativeElement;\n }\n\n if (resolvedAnchor) {\n return resolvedAnchor;\n }\n\n return this.context.anchorOverride() ?? this.context.anchor()?.elementRef.nativeElement ?? null;\n });\n\n private readonly position = resource<ComputePositionReturn | null, PopperPositionParams>({\n params: () => this.positionParams(),\n loader: ({ params }) => {\n // Skip computing a position for a paused (closed keep-mounted) positioner.\n if (!params.positioningActive || !params.anchor) {\n return Promise.resolve(null);\n }\n\n const ca = params.collisionAvoidance;\n // Ported from Base UI `useAnchorPositioning`: `side`/`align`/`fallbackAxisSide` select and\n // configure the `flip()` / `shift()` middleware instead of the old boolean toggle.\n const shiftDisabled = ca.align === 'none' && ca.side !== 'shift';\n const crossAxisShiftEnabled = !shiftDisabled && (params.sticky === 'always' || ca.side === 'shift');\n\n const flipMiddleware =\n ca.side === 'none'\n ? undefined\n : flip({\n ...params.detectOverflowOptions,\n mainAxis: ca.side === 'flip',\n crossAxis: ca.align === 'flip' ? 'alignment' : false,\n fallbackAxisSideDirection: ca.fallbackAxisSide\n });\n\n const shiftMiddleware = shiftDisabled\n ? undefined\n : shift({\n ...params.detectOverflowOptions,\n mainAxis: ca.align !== 'none',\n crossAxis: crossAxisShiftEnabled,\n // `partial` keeps the popup attached to the anchor (limitShift); `always` keeps it\n // fully inside the boundary regardless (no limiter).\n limiter: params.sticky === 'partial' ? limitShift() : undefined\n });\n\n // https://floating-ui.com/docs/flip#combining-with-shift — run shift first when shifting is\n // the primary correction (or for center alignment), otherwise flip first.\n const collisionMiddleware =\n ca.side === 'shift' || ca.align === 'shift' || params.align === 'center'\n ? [shiftMiddleware, flipMiddleware]\n : [flipMiddleware, shiftMiddleware];\n\n return computePosition(params.anchor, this.elementRef.nativeElement, {\n // default to `fixed` strategy so users don't have to pick and we also avoid focus scroll issues\n strategy: params.strategy,\n placement: params.placement,\n middleware: [\n offset((state) => {\n const [placedSide, placedAlign] = getSideAndAlignFromPlacement(state.placement);\n const data = {\n side: placedSide,\n align: placedAlign,\n anchor: {\n width: state.rects.reference.width,\n height: state.rects.reference.height\n },\n positioner: {\n width: state.rects.floating.width,\n height: state.rects.floating.height\n }\n };\n const sideAxis =\n typeof params.sideOffset === 'function' ? params.sideOffset(data) : params.sideOffset;\n const alignAxis =\n typeof params.alignOffset === 'function' ? params.alignOffset(data) : params.alignOffset;\n\n return {\n mainAxis: sideAxis + params.arrowHeight || 0,\n // both axes so `alignOffset` also applies to center-aligned popups\n // (`alignmentAxis` overrides `crossAxis` for start/end placements)\n crossAxis: alignAxis,\n alignmentAxis: alignAxis\n };\n }),\n ...collisionMiddleware,\n size({\n ...params.detectOverflowOptions,\n apply: ({ elements, rects, availableWidth, availableHeight }) => {\n const { width: anchorWidth, height: anchorHeight } = rects.reference;\n const contentStyle = elements.floating.style;\n contentStyle.setProperty('--radix-popper-available-width', `${availableWidth}px`);\n contentStyle.setProperty('--radix-popper-available-height', `${availableHeight}px`);\n contentStyle.setProperty('--radix-popper-anchor-width', `${anchorWidth}px`);\n contentStyle.setProperty('--radix-popper-anchor-height', `${anchorHeight}px`);\n }\n }),\n params.arrow &&\n floatingUIArrow({\n element: params.arrow.elementRef.nativeElement,\n padding: params.arrowPadding\n }),\n transformOrigin({\n arrowWidth: params.arrowWidth,\n arrowHeight: params.arrowHeight\n }),\n params.hideWhenDetached &&\n hide({\n strategy: 'referenceHidden',\n ...params.detectOverflowOptions\n })\n ]\n });\n }\n });\n\n private positionParams(): PopperPositionParams {\n return {\n positioningActive: this.positioningActive(),\n anchor: this.resolvedAnchor(),\n strategy: this.positionStrategy(),\n placement: this.desiredPlacement(),\n side: this.side(),\n align: this.align(),\n sideOffset: this.sideOffset(),\n alignOffset: this.alignOffset(),\n arrowHeight: this.arrowSize()().height,\n arrowWidth: this.arrowSize()().width,\n collisionAvoidance: this.effectiveCollisionAvoidance(),\n sticky: this.sticky(),\n detectOverflowOptions: this.detectOverflowOptions(),\n arrow: this.arrow(),\n arrowPadding: this.arrowPadding(),\n hideWhenDetached: this.hideWhenDetached()\n };\n }\n\n /**\n * The last successfully computed position, retained while a new one is being computed.\n *\n * The `position` resource resets `value()` to `undefined` whenever its params change (e.g. on\n * every pointer move while a tooltip tracks the cursor). Reading it directly would blank the\n * popup (`visibility: hidden` + off-screen transform) for the frames between a move and the next\n * resolved position — a visible flicker at high pointer-move rates. Holding the previous value\n * keeps the popup placed and visible until the new position is ready.\n */\n private readonly resolvedPosition = linkedSignal<\n ComputePositionReturn | undefined,\n ComputePositionReturn | undefined\n >({\n source: () => this.position.value() ?? undefined,\n computation: (value, previous) => value ?? previous?.value\n });\n\n /**\n * Whether the panel is positioned.\n */\n readonly isPositioned = computed(() => !!this.position.value());\n\n /**\n * The current placement of the panel.\n */\n readonly placement = computed(() => {\n const placement = this.position.value()?.placement;\n\n if (!placement) {\n return;\n }\n\n const [side, align = 'center'] = placement.split('-');\n\n return {\n side: side as Side,\n align: align as Align\n };\n });\n\n /**\n * The side the panel is currently placed against.\n */\n readonly placedSide = computed(() => this.placement()?.side);\n\n /**\n * The current alignment of the panel.\n */\n readonly placedAlign = computed(() => this.placement()?.align);\n\n protected readonly style = computed(() => {\n const pos = this.resolvedPosition();\n const x = pos?.x;\n const y = pos?.y;\n\n const ready = Number.isFinite(x) && Number.isFinite(y);\n\n return {\n position: this.positionStrategy(),\n transform: ready ? '' : 'translate(0, -200%)', // keep off the page when measuring\n minWidth: 'max-content',\n // ADR 0012 §3: z-index belongs on the positioner (set it via a class/style on the\n // positioner element), Base UI-aligned. The wrapper no longer copies the popup's computed\n // z-index, so a positioner no longer requires an inner `RdxPopperContent` to exist.\n top: Number.isFinite(y) ? `${y}px` : '',\n left: Number.isFinite(x) ? `${x}px` : '',\n '--radix-popper-transform-origin': [\n pos?.middlewareData['transformOrigin']?.x,\n pos?.middlewareData['transformOrigin']?.y\n ].join(' '),\n '--radix-popper-content-wrapper-width': `${this.elementRef.nativeElement.offsetWidth}px`,\n '--radix-popper-content-wrapper-height': `${this.elementRef.nativeElement.offsetHeight}px`,\n\n // Unified Base UI-style variables (ADR 0012), emitted once for every positioner so\n // consumers learn a single dialect. They alias the engine-level `--radix-popper-*` values\n // (the `--anchor-*`/`--available-*` ones are set imperatively by the `size` middleware).\n '--anchor-width': 'var(--radix-popper-anchor-width)',\n '--anchor-height': 'var(--radix-popper-anchor-height)',\n '--available-width': 'var(--radix-popper-available-width)',\n '--available-height': 'var(--radix-popper-available-height)',\n '--positioner-width': 'var(--radix-popper-content-wrapper-width)',\n '--positioner-height': 'var(--radix-popper-content-wrapper-height)',\n '--transform-origin': 'var(--radix-popper-transform-origin)',\n\n visibility: ready ? 'visible' : 'hidden',\n pointerEvents: this.nonInteractive() || !ready ? 'none' : 'auto',\n\n // hide the content if using the hide middleware and should be hidden\n // set visibility to hidden and disable pointer events so the UI behaves\n // as if the PopperContent isn't there at all\n ...(pos?.middlewareData.hide?.referenceHidden && {\n visibility: 'hidden',\n pointerEvents: 'none'\n })\n };\n });\n\n /**\n * Whether the positioner should actively track its anchor (recompute + `autoUpdate`). Defaults to\n * always-on — the historical behavior, correct for a positioner that unmounts when its layer closes.\n * A positioner that can stay mounted while closed (`keepMounted`) **overrides** this with its\n * open/presence signal so a closed, hidden positioner doesn't spin an endless `autoUpdate`\n * `requestAnimationFrame` loop (only relevant when `updatePositionStrategy: 'always'`). It's a\n * reassignable field (not `readonly`) because the render effect below reads it lazily, after the\n * subclass constructor has swapped it in.\n */\n protected positioningActive: Signal<boolean> = computed(() => true);\n\n private readonly afterRenderEffect = afterRenderEffect((onCleanup) => {\n // Closed keep-mounted positioner: skip positioning entirely so `autoUpdate` doesn't keep firing.\n if (!this.positioningActive()) {\n return;\n }\n\n this.position.reload();\n\n const anchor = this.resolvedAnchor();\n if (!anchor) {\n return;\n }\n\n const cleanup = autoUpdate(anchor, this.elementRef.nativeElement, () => this.position.reload(), {\n animationFrame: this.updatePositionStrategy() === 'always'\n });\n\n onCleanup(cleanup);\n });\n\n constructor() {\n watch([this.isPositioned], ([isPositioned]) => {\n if (!isPositioned) {\n return;\n }\n\n afterNextRender(\n () => {\n this.placed.emit();\n },\n { injector: this.injector }\n );\n });\n }\n}\n\n/**\n * Providers a \"thin\" positioner that `extends RdxPopperContentWrapper` must include. Angular\n * inherits a base directive's inputs/outputs/host bindings/queries but **not** its `providers`, so\n * the `useExisting` alias (lets the popup and arrow resolve the subclass through the\n * {@link RdxPopperContentWrapper} token) and the wrapper context provider (what\n * `injectPopperContentWrapperContext()` reads) are re-declared here in one place.\n *\n * Combine with {@link provideRdxPopperContentConfig} for per-primitive positioning defaults:\n *\n * ```ts\n * providers: [\n * ...provideRdxPopperContentWrapper(RdxComboboxPositioner),\n * provideRdxPopperContentConfig({ sideOffset: 4, align: 'start' })\n * ]\n * ```\n */\nexport function provideRdxPopperContentWrapper(positioner: Type<RdxPopperContentWrapper>): Provider[] {\n return [{ provide: RdxPopperContentWrapper, useExisting: positioner }, providePopperContentWrapperContext(context)];\n}\n\n/**\n * Deprecated per-primitive aliases of the unified popper variables (ADR 0012). Since the wrapper now\n * emits the unified `--anchor-*` / `--available-*` / `--transform-origin` set itself, a positioner no\n * longer hand-writes a re-namespacing `[style]` map; it spreads this helper into a host `[style]`\n * binding only to keep the legacy `--radix-<name>-content-*` / `--radix-<name>-trigger-*` names alive\n * for one release of consumer back-compat. Migrate to the unified set; these are removed next minor.\n *\n * @deprecated Use the unified `--anchor-*` / `--available-*` / `--transform-origin` variables.\n */\nexport function legacyPopperVars(name: string): Record<string, string> {\n return {\n [`--radix-${name}-content-transform-origin`]: 'var(--radix-popper-transform-origin)',\n [`--radix-${name}-content-available-width`]: 'var(--radix-popper-available-width)',\n [`--radix-${name}-content-available-height`]: 'var(--radix-popper-available-height)',\n [`--radix-${name}-trigger-width`]: 'var(--radix-popper-anchor-width)',\n [`--radix-${name}-trigger-height`]: 'var(--radix-popper-anchor-height)'\n };\n}\n","import {\n computed,\n createComponent,\n Directive,\n effect,\n ElementRef,\n EnvironmentInjector,\n inject,\n input,\n inputBinding,\n numberAttribute\n} from '@angular/core';\nimport { RdxArrow } from '@radix-ng/primitives/arrow';\nimport { injectPopperContentWrapperContext } from './popper-content-wrapper';\nimport { Side } from './utils';\n\nconst OPPOSITE_SIDE: Record<Side, Side> = {\n top: 'bottom',\n right: 'left',\n bottom: 'top',\n left: 'right'\n};\n\n@Directive({\n selector: '[rdxPopperArrow]',\n host: {\n // The arrow is purely decorative — keep it out of the accessibility tree (Base UI does the same).\n 'aria-hidden': 'true',\n '[style]': 'style()'\n }\n})\nexport class RdxPopperArrow {\n private readonly popperContentContext = injectPopperContentWrapperContext();\n\n private readonly environmentInjector = inject(EnvironmentInjector);\n\n readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n readonly width = input(10, { transform: numberAttribute });\n\n readonly height = input(5, { transform: numberAttribute });\n\n baseSide = computed(() => OPPOSITE_SIDE[this.popperContentContext.placedSide()!]);\n\n protected readonly style = computed(() => {\n return {\n position: 'absolute',\n left: this.popperContentContext.arrowX() ? `${this.popperContentContext.arrowX()}px` : undefined,\n top: this.popperContentContext.arrowY() ? `${this.popperContentContext.arrowY()}px` : undefined,\n [this.baseSide()]: 0,\n transformOrigin: {\n top: '',\n right: '0 0',\n bottom: 'center 0',\n left: '100% 0'\n }[this.popperContentContext.placedSide()!],\n transform: {\n top: 'translateY(100%)',\n right: 'translateY(50%) rotate(90deg) translateX(-50%)',\n bottom: `rotate(180deg)`,\n left: 'translateY(50%) rotate(-90deg) translateX(50%)'\n }[this.popperContentContext.placedSide()!],\n visibility: this.popperContentContext.shouldHideArrow() ? 'hidden' : undefined\n };\n });\n\n private onCleanup = effect((onCleanup) => {\n const component = createComponent(RdxArrow, {\n environmentInjector: this.environmentInjector,\n hostElement: this.elementRef.nativeElement,\n projectableNodes: [Array.from(this.elementRef.nativeElement.childNodes)],\n bindings: [inputBinding('width', () => this.width()), inputBinding('height', () => this.height())]\n });\n\n component.changeDetectorRef.detectChanges();\n\n onCleanup(() => component.destroy());\n });\n}\n","import { computed, Directive } from '@angular/core';\nimport { injectPopperContentWrapperContext } from './popper-content-wrapper';\n\n@Directive({\n selector: '[rdxPopperContent]',\n host: {\n '[attr.data-side]': 'popperContentWrapper?.placedSide()',\n '[attr.data-align]': 'popperContentWrapper?.placedAlign()',\n '[style]': 'style()'\n }\n})\nexport class RdxPopperContent {\n /**\n * Optional so the directive can be composed onto a content part that is also used outside Popper\n * positioning (e.g. select's `item-aligned` mode, where there is no `RdxPopperContentWrapper`\n * ancestor). With no wrapper the `data-side` / `data-align` bindings and the animation guard\n * simply no-op.\n */\n protected readonly popperContentWrapper = injectPopperContentWrapperContext(true);\n\n /**\n * if the PopperContent hasn't been placed yet (not all measurements done)\n * we prevent animations so that users's animation don't kick in too early referring wrong sides\n */\n protected readonly style = computed(() => ({\n animation: this.popperContentWrapper && !this.popperContentWrapper.isPositioned() ? 'none' : undefined\n }));\n}\n","import { RdxPopper } from './src/popper';\nimport { RdxPopperAnchor } from './src/popper-anchor';\nimport { RdxPopperArrow } from './src/popper-arrow';\nimport { RdxPopperContent } from './src/popper-content';\nimport { RdxPopperContentWrapper } from './src/popper-content-wrapper';\n\nexport * from './src/popper';\nexport * from './src/popper-anchor';\nexport * from './src/popper-arrow';\nexport * from './src/popper-content';\nexport * from './src/popper-content-wrapper';\nexport * from './src/popper-content.config';\nexport * from './src/utils';\n\nexport const popperImports = [RdxPopper, RdxPopperArrow, RdxPopperContentWrapper, RdxPopperContent, RdxPopperAnchor];\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["floatingUIArrow"],"mappings":"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"}
1
+ {"version":3,"file":"radix-ng-primitives-popper.mjs","sources":["../../../packages/primitives/popper/src/popper-anchor.ts","../../../packages/primitives/popper/src/popper.ts","../../../packages/primitives/popper/src/popper-content.config.ts","../../../packages/primitives/popper/src/utils.ts","../../../packages/primitives/popper/src/popper-content-wrapper.ts","../../../packages/primitives/popper/src/popper-arrow.ts","../../../packages/primitives/popper/src/popper-content.ts","../../../packages/primitives/popper/index.ts","../../../packages/primitives/popper/radix-ng-primitives-popper.ts"],"sourcesContent":["import { Directive, ElementRef, inject } from '@angular/core';\n\n@Directive({\n selector: '[rdxPopperAnchor]'\n})\nexport class RdxPopperAnchor {\n readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n}\n","import { contentChild, Directive, signal } from '@angular/core';\nimport type { ReferenceElement } from '@floating-ui/dom';\nimport { RdxPopperAnchor } from './popper-anchor';\n\n@Directive({\n selector: '[rdxPopperRoot]'\n})\nexport class RdxPopper {\n readonly anchor = contentChild(RdxPopperAnchor);\n readonly anchorOverride = signal<ReferenceElement | undefined>(undefined);\n}\n","import { InjectionToken, Provider } from '@angular/core';\nimport { Align, OffsetFunction, RdxCollisionAvoidance, Side, SideOrLogical } from './utils';\n\n/**\n * Default positioning values for `RdxPopperContentWrapper`.\n *\n * Lets a composing primitive (e.g. tooltip) provide its own Base UI-aligned defaults without\n * changing the shared popper defaults that other consumers (e.g. popover) rely on. Any value left\n * `undefined` falls back to the wrapper's built-in default. Consumer template bindings always win.\n */\nexport interface RdxPopperContentConfig {\n side?: SideOrLogical;\n align?: Align;\n sideOffset?: number | OffsetFunction;\n alignOffset?: number | OffsetFunction;\n arrowPadding?: number;\n /**\n * @deprecated Use {@link collisionAvoidance} instead. Kept for back-compat: `false` disables all\n * collision avoidance (equivalent to `{ side: 'none', align: 'none', fallbackAxisSide: 'none' }`).\n */\n avoidCollisions?: boolean;\n /** Per-primitive collision-avoidance default (Base UI parity). See {@link RdxCollisionAvoidance}. */\n collisionAvoidance?: RdxCollisionAvoidance;\n collisionPadding?: number | Partial<Record<Side, number>>;\n sticky?: 'partial' | 'always';\n hideWhenDetached?: boolean;\n positionStrategy?: 'fixed' | 'absolute';\n updatePositionStrategy?: 'optimized' | 'always';\n}\n\n/**\n * Collision-avoidance preset for dropdown-style popups (Base UI `DROPDOWN_COLLISION_AVOIDANCE`).\n *\n * Dropdowns (select / combobox / autocomplete / menu) strictly prefer their top/bottom placement and\n * cap their height with `var(--available-height)`, so they must **not** fall back to the perpendicular\n * (left/right) axis. `side`/`align` fall back to the wrapper default (`'flip'`).\n */\nexport const DROPDOWN_COLLISION_AVOIDANCE: RdxCollisionAvoidance = { fallbackAxisSide: 'none' };\n\n/**\n * Collision-avoidance preset for regular popups (Base UI `POPUP_COLLISION_AVOIDANCE`).\n *\n * Popovers / tooltips / preview cards aren't height-capped and may freely flip to the perpendicular\n * axis, preferring the logical end side. This equals the wrapper's built-in default; it is exported so\n * popups can state the intent explicitly.\n */\nexport const POPUP_COLLISION_AVOIDANCE: RdxCollisionAvoidance = { fallbackAxisSide: 'end' };\n\nexport const RdxPopperContentConfigToken = new InjectionToken<RdxPopperContentConfig>('RdxPopperContentConfig', {\n factory: () => ({})\n});\n\nexport function provideRdxPopperContentConfig(config: RdxPopperContentConfig): Provider {\n return { provide: RdxPopperContentConfigToken, useValue: config };\n}\n","import type { Middleware, Placement } from '@floating-ui/dom';\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst SIDE_OPTIONS = ['top', 'right', 'bottom', 'left'] as const;\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst ALIGN_OPTIONS = ['start', 'center', 'end'] as const;\n\nexport type Side = (typeof SIDE_OPTIONS)[number];\nexport type Align = (typeof ALIGN_OPTIONS)[number];\n\n/** Logical (writing-direction-relative) inline sides, resolved to a physical {@link Side} by text direction. */\nexport type LogicalSide = 'inline-start' | 'inline-end';\n\n/** A physical {@link Side} or a {@link LogicalSide} — accepted by the positioner's `side` input. */\nexport type SideOrLogical = Side | LogicalSide;\n\n/**\n * Resolve a logical inline side to a physical one for the current text direction; physical sides pass\n * through unchanged (Base UI `useAnchorPositioning`). `inline-start` is the reading-start edge\n * (`left` in LTR, `right` in RTL); `inline-end` is the reading-end edge.\n */\nexport function resolvePhysicalSide(side: SideOrLogical, isRtl: boolean): Side {\n if (side === 'inline-start') {\n return isRtl ? 'right' : 'left';\n }\n\n if (side === 'inline-end') {\n return isRtl ? 'left' : 'right';\n }\n\n return side;\n}\n\n/**\n * Report a rendered physical side back in the same \"kind\" the consumer requested (Base UI\n * `getLogicalSide`): when a logical side was requested, a `left`/`right` rendered side is mapped back\n * to `inline-start`/`inline-end` for the direction (so a post-collision flip surfaces logically); a\n * physical request, or a `top`/`bottom` rendered side, passes through unchanged.\n */\nexport function toLogicalSide(requestedSide: SideOrLogical, renderedSide: Side, isRtl: boolean): SideOrLogical {\n const requestedLogical = requestedSide === 'inline-start' || requestedSide === 'inline-end';\n\n if (!requestedLogical) {\n return renderedSide;\n }\n\n if (renderedSide === 'left') {\n return isRtl ? 'inline-end' : 'inline-start';\n }\n\n if (renderedSide === 'right') {\n return isRtl ? 'inline-start' : 'inline-end';\n }\n\n return renderedSide;\n}\n\n/**\n * How the popper avoids collisions with the boundary edges (Base UI `collisionAvoidance`).\n *\n * - `side` — behavior on the **preferred placement axis** (`top`/`bottom` or `left`/`right`):\n * `'flip'` swaps to the opposite side when it doesn't fit, `'shift'` keeps the side and nudges the\n * popup within the boundary, `'none'` leaves side-axis overflow uncorrected.\n * - `align` — behavior on the **alignment axis** (`start`/`center`/`end`): `'flip'` swaps `start`/`end`,\n * `'shift'` nudges the popup along the alignment axis, `'none'` leaves it uncorrected.\n * - `fallbackAxisSide` — when neither preferred side fits, whether to fall back to the perpendicular\n * axis and which logical side to prefer (`'start'` / `'end'`), or `'none'` to stay on the axis.\n *\n * Any omitted field falls back to the wrapper default (`side: 'flip'`, `align: 'flip'`,\n * `fallbackAxisSide: 'end'`), matching Base UI.\n */\nexport interface RdxCollisionAvoidance {\n side?: 'flip' | 'shift' | 'none';\n align?: 'flip' | 'shift' | 'none';\n fallbackAxisSide?: 'start' | 'end' | 'none';\n}\n\n/** Fully-resolved {@link RdxCollisionAvoidance} — every field present (no wrapper-default fallback left). */\nexport type ResolvedCollisionAvoidance = Required<RdxCollisionAvoidance>;\n\n/**\n * Function form of `sideOffset` / `alignOffset` (Base UI `OffsetFunction`). Receives the resolved\n * placement and the measured anchor / positioner dimensions, and returns the offset in pixels — e.g.\n * `({ anchor }) => anchor.width` to offset by the trigger's own width. `side` is the side the popup is\n * placed against — reported logically (`inline-start` / `inline-end`) when a logical side was\n * requested, otherwise physical (Base UI parity).\n */\nexport type OffsetFunction = (data: {\n side: SideOrLogical;\n align: Align;\n anchor: { width: number; height: number };\n positioner: { width: number; height: number };\n}) => number;\n\nexport function isNotNull<T>(value: T | null): value is T {\n return value !== null;\n}\n\nexport function transformOrigin(options: { arrowWidth: number; arrowHeight: number }): Middleware {\n return {\n name: 'transformOrigin',\n options,\n fn(data) {\n const { placement, rects, middlewareData } = data;\n\n const cannotCenterArrow = middlewareData.arrow?.centerOffset !== 0;\n const isArrowHidden = cannotCenterArrow;\n const arrowWidth = isArrowHidden ? 0 : options.arrowWidth;\n const arrowHeight = isArrowHidden ? 0 : options.arrowHeight;\n\n const [placedSide, placedAlign] = getSideAndAlignFromPlacement(placement);\n const noArrowAlign = { start: '0%', center: '50%', end: '100%' }[placedAlign];\n\n const arrowXCenter = (middlewareData.arrow?.x ?? 0) + arrowWidth / 2;\n const arrowYCenter = (middlewareData.arrow?.y ?? 0) + arrowHeight / 2;\n\n let x = '';\n let y = '';\n\n if (placedSide === 'bottom') {\n x = isArrowHidden ? noArrowAlign : `${arrowXCenter}px`;\n y = `${-arrowHeight}px`;\n } else if (placedSide === 'top') {\n x = isArrowHidden ? noArrowAlign : `${arrowXCenter}px`;\n y = `${rects.floating.height + arrowHeight}px`;\n } else if (placedSide === 'right') {\n x = `${-arrowHeight}px`;\n y = isArrowHidden ? noArrowAlign : `${arrowYCenter}px`;\n } else if (placedSide === 'left') {\n x = `${rects.floating.width + arrowHeight}px`;\n y = isArrowHidden ? noArrowAlign : `${arrowYCenter}px`;\n }\n return { data: { x, y } };\n }\n };\n}\n\nexport function getSideAndAlignFromPlacement(placement: Placement) {\n const [side, align = 'center'] = placement.split('-');\n return [side as Side, align as Align] as const;\n}\n","import {\n afterNextRender,\n afterRenderEffect,\n booleanAttribute,\n computed,\n contentChild,\n Directive,\n ElementRef,\n forwardRef,\n inject,\n Injector,\n input,\n linkedSignal,\n numberAttribute,\n output,\n Provider,\n resource,\n Signal,\n signal,\n Type\n} from '@angular/core';\nimport type { ComputePositionReturn, ReferenceElement, VirtualElement } from '@floating-ui/dom';\nimport {\n autoUpdate,\n computePosition,\n flip,\n arrow as floatingUIArrow,\n hide,\n limitShift,\n offset,\n Placement,\n shift,\n size\n} from '@floating-ui/dom';\nimport { BooleanInput, createContext, Direction, elementSize, NumberInput, watch } from '@radix-ng/primitives/core';\nimport { injectDirection } from '@radix-ng/primitives/direction-provider';\nimport { RdxPopper } from './popper';\nimport { RdxPopperArrow } from './popper-arrow';\nimport { RdxPopperContentConfigToken } from './popper-content.config';\nimport {\n Align,\n getSideAndAlignFromPlacement,\n isNotNull,\n OffsetFunction,\n RdxCollisionAvoidance,\n ResolvedCollisionAvoidance,\n resolvePhysicalSide,\n Side,\n SideOrLogical,\n toLogicalSide,\n transformOrigin\n} from './utils';\n\n/**\n * `input()` transform for `sideOffset` / `alignOffset`: coerce string/number attribute values to a\n * number but pass an {@link OffsetFunction} through untouched. A **named** module-level function (not\n * an inline arrow) so compodoc parses the file — see CLAUDE.md's compodoc gotcha.\n */\nfunction coerceOffset(value: number | OffsetFunction | string | null | undefined): number | OffsetFunction {\n return typeof value === 'function' ? value : numberAttribute(value);\n}\n\nexport type RdxPopperAnchorElement =\n | Element\n | ElementRef<Element>\n | VirtualElement\n | (() => Element | VirtualElement | null)\n | null\n | undefined;\n\ntype PopperPositionParams = {\n positioningActive: boolean;\n anchor: ReferenceElement | null;\n strategy: 'fixed' | 'absolute';\n placement: Placement;\n /** The original requested side (may be logical) — used to report the side logically to offset functions. */\n side: SideOrLogical;\n isRtl: boolean;\n align: Align;\n sideOffset: number | OffsetFunction;\n alignOffset: number | OffsetFunction;\n arrowHeight: number;\n arrowWidth: number;\n collisionAvoidance: ResolvedCollisionAvoidance;\n sticky: 'partial' | 'always';\n detectOverflowOptions: {\n padding: number | Partial<Record<Side, number>>;\n boundary: Element[];\n altBoundary: boolean;\n };\n arrow: RdxPopperArrow | undefined;\n arrowPadding: number;\n hideWhenDetached: boolean;\n};\n\nconst context = () => {\n const popperContentWrapper = inject(RdxPopperContentWrapper);\n\n return {\n placedSide: popperContentWrapper.placedSide,\n physicalPlacedSide: popperContentWrapper.physicalPlacedSide,\n placedAlign: popperContentWrapper.placedAlign,\n arrowX: popperContentWrapper.arrowX,\n arrowY: popperContentWrapper.arrowY,\n shouldHideArrow: popperContentWrapper.shouldHideArrow,\n isPositioned: popperContentWrapper.isPositioned,\n anchorHidden: popperContentWrapper.anchorHidden\n };\n};\n\nexport type PopperContentWrapperContext = ReturnType<typeof context>;\n\nexport const [injectPopperContentWrapperContext, providePopperContentWrapperContext] =\n createContext<PopperContentWrapperContext>('PopperContentWrapperContext', 'utils/popper');\n\n@Directive({\n selector: '[rdxPopperContentWrapper]',\n providers: [providePopperContentWrapperContext(context)],\n host: {\n 'data-radix-popper-content-wrapper': '',\n // Placement state, emitted once for every positioner (ADR 0012). The popup\n // (`RdxPopperContent`) keeps its own `data-side`/`data-align` as popup-level styling hooks.\n '[attr.data-side]': 'placedSide()',\n '[attr.data-align]': 'placedAlign()',\n '[attr.data-anchor-hidden]': 'anchorHidden() ? \"\" : undefined',\n '[style]': 'style()'\n }\n})\nexport class RdxPopperContentWrapper {\n private readonly elementRef = inject(ElementRef);\n private readonly injector = inject(Injector);\n\n private readonly context = inject(RdxPopper);\n\n /** Optional positioning defaults provided by a composing primitive (e.g. tooltip). */\n private readonly config = inject(RdxPopperContentConfigToken);\n\n /**\n * An element to position the popup against. Defaults to the popper anchor.\n */\n readonly anchor = input<RdxPopperAnchorElement>();\n\n /**\n * The preferred side of the anchor to render against when open.\n * Will be reversed when collisions occur and avoidCollisions is enabled.\n *\n * Accepts the logical `'inline-start'` / `'inline-end'` in addition to the physical sides; those\n * resolve to `left` / `right` for the text direction (Base UI parity). The placed side reported via\n * `data-side` / `placedSide()` echoes the requested kind: logical in → logical out (even after a\n * collision flip), physical in → physical out.\n */\n readonly side = input<SideOrLogical>(this.config.side ?? 'bottom');\n\n /**\n * Text direction, used only to resolve a logical `side` (`inline-start` / `inline-end`) to a\n * physical one. Falls back to an enclosing direction provider, then `ltr`.\n */\n readonly dir = input<Direction | undefined>(undefined);\n private readonly direction = injectDirection(this.dir);\n\n /** The `side` input with any logical inline value resolved to a physical side for the direction. */\n private readonly resolvedSide = computed<Side>(() => resolvePhysicalSide(this.side(), this.direction() === 'rtl'));\n\n /**\n * Distance between the anchor and the popup in pixels. Also accepts an {@link OffsetFunction} that\n * reads the anchor / positioner dimensions and the resolved side / align.\n */\n readonly sideOffset = input(this.config.sideOffset ?? 0, { transform: coerceOffset });\n\n /**\n * How to align the popup relative to the specified side. May change when collisions occur.\n */\n readonly align = input<Align>(this.config.align ?? 'center');\n\n /**\n * An offset in pixels from the `start` or `end` alignment options. Also accepts an\n * {@link OffsetFunction} (same signature as `sideOffset`).\n */\n readonly alignOffset = input(this.config.alignOffset ?? 0, { transform: coerceOffset });\n\n /**\n * Minimum distance to maintain between the arrow and the edges of the popup.\n * If your content has border-radius, this will prevent it from overflowing the corners.\n */\n readonly arrowPadding = input<number, NumberInput>(this.config.arrowPadding ?? 0, { transform: numberAttribute });\n\n /**\n * When `true`, overrides the `side` and `align` preferences to prevent collisions with boundary edges.\n *\n * @deprecated Use {@link collisionAvoidance} for fine-grained control (Base UI parity). Still honored:\n * `false` disables all avoidance (unless a `collisionAvoidance` object is provided, which wins).\n */\n readonly avoidCollisions = input<boolean, BooleanInput>(this.config.avoidCollisions ?? true, {\n transform: booleanAttribute\n });\n\n /**\n * How the popup avoids colliding with the boundary edges, per axis (Base UI `collisionAvoidance`).\n * Overrides the deprecated `avoidCollisions` and any per-primitive preset. An object here **fully\n * replaces** the preset — omitted fields fall back to `side: 'flip'`, `align: 'flip'`,\n * `fallbackAxisSide: 'end'`, never to the preset. See {@link RdxCollisionAvoidance}.\n */\n readonly collisionAvoidance = input<RdxCollisionAvoidance | undefined>(undefined);\n\n /**\n * Collision avoidance resolved against the deprecated `avoidCollisions` flag, the per-primitive\n * config preset, and the wrapper defaults. Precedence: an explicit `collisionAvoidance` input →\n * a legacy `avoidCollisions=false` (disables everything) → the config preset → the Base UI defaults.\n */\n private readonly effectiveCollisionAvoidance = computed<ResolvedCollisionAvoidance>(() => {\n const explicit = this.collisionAvoidance();\n\n // Legacy escape hatch (deprecated): `avoidCollisions=false` disables avoidance entirely — unless\n // the consumer passes an explicit `collisionAvoidance` object, which always wins. Checked before\n // the preset so `[avoidCollisions]=\"false\"` still works on a positioner that ships a preset.\n if (!explicit && this.avoidCollisions() === false) {\n return { side: 'none', align: 'none', fallbackAxisSide: 'none' };\n }\n\n // A consumer object fully REPLACES the preset (Base UI parity — the preset is only the default\n // when the consumer passes nothing); omitted fields fall back to the global defaults, not the\n // preset. `??` (not spread-merge) is what enforces the \"replaces, not merges\" semantics.\n const source = explicit ?? this.config.collisionAvoidance;\n\n return {\n side: source?.side ?? 'flip',\n align: source?.align ?? 'flip',\n fallbackAxisSide: source?.fallbackAxisSide ?? 'end'\n };\n });\n\n /**\n * The element used as the collision boundary.\n * By default this is the viewport, though you can provide additional element(s) to be included in this check.\n */\n readonly collisionBoundary = input<ElementRef<HTMLElement> | ElementRef<HTMLElement>[]>();\n /**\n * The distance in pixels from the boundary edges where collision detection should occur.\n * Accepts a number (same for all sides), or a partial padding object, for example: `{ top: 20, left: 20 }`.\n */\n readonly collisionPadding = input<number | Partial<Record<Side, number>>>(this.config.collisionPadding ?? 0);\n\n /**\n * The sticky behavior on the align axis. `partial` will keep the\n * content in the boundary as long as the trigger is at least partially\n * in the boundary whilst \"always\" will keep the content in the boundary\n * regardless.\n */\n readonly sticky = input<'partial' | 'always'>(this.config.sticky ?? 'partial');\n\n /**\n * Whether to hide the content when the trigger becomes fully occluded.\n */\n readonly hideWhenDetached = input<boolean, BooleanInput>(this.config.hideWhenDetached ?? false, {\n transform: booleanAttribute\n });\n\n /**\n * The type of CSS position property to use.\n */\n readonly positionStrategy = input<'fixed' | 'absolute'>(this.config.positionStrategy ?? 'fixed');\n\n /**\n * Strategy to update the position of the floating element on every animation frame.\n */\n readonly updatePositionStrategy = input<'optimized' | 'always'>(this.config.updatePositionStrategy ?? 'optimized');\n\n /**\n * Emits when the element is placed.\n */\n readonly placed = output<void>();\n\n readonly arrow = contentChild(forwardRef(() => RdxPopperArrow));\n\n /**\n * When `true`, the content is rendered click/hover-through (`pointer-events: none`). Used for\n * cursor-following content (e.g. a tooltip tracking the pointer) that must never intercept the\n * pointer and steal hover from its trigger.\n */\n readonly nonInteractive = signal(false);\n\n readonly shouldHideArrow = computed(() => this.position.value()?.middlewareData['arrow']?.centerOffset !== 0);\n /** Whether the arrow could not be centered on the anchor because the popup was shifted. */\n readonly arrowUncentered = computed(\n () => (this.position.value()?.middlewareData['arrow']?.centerOffset ?? 0) !== 0\n );\n readonly arrowX = computed(() => this.position.value()?.middlewareData['arrow']?.x);\n readonly arrowY = computed(() => this.position.value()?.middlewareData['arrow']?.y);\n readonly anchorHidden = computed(() => this.position.value()?.middlewareData.hide?.referenceHidden === true);\n\n private readonly desiredPlacement = computed(\n () => (this.resolvedSide() + (this.align() !== 'center' ? '-' + this.align() : '')) as Placement\n );\n\n private readonly arrowSize = computed(() => {\n const arrowElementRef = this.arrow()?.elementRef;\n\n if (!arrowElementRef) {\n return computed(() => ({\n height: 0,\n width: 0\n }));\n }\n\n return elementSize({\n elementRef: arrowElementRef,\n injector: this.injector\n });\n });\n\n private readonly boundary = computed(() => {\n const boundary = this.collisionBoundary();\n\n if (Array.isArray(boundary)) {\n return boundary.map((e) => e.nativeElement);\n }\n\n if (!boundary) {\n return [];\n }\n\n return [boundary.nativeElement];\n });\n\n private readonly hasExplicitBoundaries = computed(() => this.boundary().length > 0);\n\n private readonly detectOverflowOptions = computed(() => ({\n padding: this.collisionPadding(),\n boundary: this.boundary().filter(isNotNull),\n // with `strategy: 'fixed'`, this is the only way to get it to respect boundaries\n altBoundary: this.hasExplicitBoundaries()\n }));\n\n private readonly resolvedAnchor = computed<ReferenceElement | null>(() => {\n const anchor = this.anchor();\n const resolvedAnchor = typeof anchor === 'function' ? anchor() : anchor;\n\n if (resolvedAnchor instanceof ElementRef) {\n return resolvedAnchor.nativeElement;\n }\n\n if (resolvedAnchor) {\n return resolvedAnchor;\n }\n\n return this.context.anchorOverride() ?? this.context.anchor()?.elementRef.nativeElement ?? null;\n });\n\n private readonly position = resource<ComputePositionReturn | null, PopperPositionParams>({\n params: () => this.positionParams(),\n loader: ({ params }) => {\n // Skip computing a position for a paused (closed keep-mounted) positioner.\n if (!params.positioningActive || !params.anchor) {\n return Promise.resolve(null);\n }\n\n const ca = params.collisionAvoidance;\n // Ported from Base UI `useAnchorPositioning`: `side`/`align`/`fallbackAxisSide` select and\n // configure the `flip()` / `shift()` middleware instead of the old boolean toggle.\n const shiftDisabled = ca.align === 'none' && ca.side !== 'shift';\n const crossAxisShiftEnabled = !shiftDisabled && (params.sticky === 'always' || ca.side === 'shift');\n\n const flipMiddleware =\n ca.side === 'none'\n ? undefined\n : flip({\n ...params.detectOverflowOptions,\n mainAxis: ca.side === 'flip',\n crossAxis: ca.align === 'flip' ? 'alignment' : false,\n fallbackAxisSideDirection: ca.fallbackAxisSide\n });\n\n const shiftMiddleware = shiftDisabled\n ? undefined\n : shift({\n ...params.detectOverflowOptions,\n mainAxis: ca.align !== 'none',\n crossAxis: crossAxisShiftEnabled,\n // `partial` keeps the popup attached to the anchor (limitShift); `always` keeps it\n // fully inside the boundary regardless (no limiter).\n limiter: params.sticky === 'partial' ? limitShift() : undefined\n });\n\n // https://floating-ui.com/docs/flip#combining-with-shift — run shift first when shifting is\n // the primary correction (or for center alignment), otherwise flip first.\n const collisionMiddleware =\n ca.side === 'shift' || ca.align === 'shift' || params.align === 'center'\n ? [shiftMiddleware, flipMiddleware]\n : [flipMiddleware, shiftMiddleware];\n\n return computePosition(params.anchor, this.elementRef.nativeElement, {\n // default to `fixed` strategy so users don't have to pick and we also avoid focus scroll issues\n strategy: params.strategy,\n placement: params.placement,\n middleware: [\n offset((state) => {\n const [placedSide, placedAlign] = getSideAndAlignFromPlacement(state.placement);\n const data = {\n // Report the placed side in the same kind the consumer requested: logical\n // when a logical `side` was passed (so a post-collision flip stays logical),\n // physical otherwise (Base UI parity).\n side: toLogicalSide(params.side, placedSide, params.isRtl),\n align: placedAlign,\n anchor: {\n width: state.rects.reference.width,\n height: state.rects.reference.height\n },\n positioner: {\n width: state.rects.floating.width,\n height: state.rects.floating.height\n }\n };\n const sideAxis =\n typeof params.sideOffset === 'function' ? params.sideOffset(data) : params.sideOffset;\n const alignAxis =\n typeof params.alignOffset === 'function' ? params.alignOffset(data) : params.alignOffset;\n\n return {\n mainAxis: sideAxis + params.arrowHeight || 0,\n // both axes so `alignOffset` also applies to center-aligned popups\n // (`alignmentAxis` overrides `crossAxis` for start/end placements)\n crossAxis: alignAxis,\n alignmentAxis: alignAxis\n };\n }),\n ...collisionMiddleware,\n size({\n ...params.detectOverflowOptions,\n apply: ({ elements, rects, availableWidth, availableHeight }) => {\n const { width: anchorWidth, height: anchorHeight } = rects.reference;\n const contentStyle = elements.floating.style;\n contentStyle.setProperty('--radix-popper-available-width', `${availableWidth}px`);\n contentStyle.setProperty('--radix-popper-available-height', `${availableHeight}px`);\n contentStyle.setProperty('--radix-popper-anchor-width', `${anchorWidth}px`);\n contentStyle.setProperty('--radix-popper-anchor-height', `${anchorHeight}px`);\n }\n }),\n params.arrow &&\n floatingUIArrow({\n element: params.arrow.elementRef.nativeElement,\n padding: params.arrowPadding\n }),\n transformOrigin({\n arrowWidth: params.arrowWidth,\n arrowHeight: params.arrowHeight\n }),\n params.hideWhenDetached &&\n hide({\n strategy: 'referenceHidden',\n ...params.detectOverflowOptions\n })\n ]\n });\n }\n });\n\n private positionParams(): PopperPositionParams {\n return {\n positioningActive: this.positioningActive(),\n anchor: this.resolvedAnchor(),\n strategy: this.positionStrategy(),\n placement: this.desiredPlacement(),\n side: this.side(),\n isRtl: this.direction() === 'rtl',\n align: this.align(),\n sideOffset: this.sideOffset(),\n alignOffset: this.alignOffset(),\n arrowHeight: this.arrowSize()().height,\n arrowWidth: this.arrowSize()().width,\n collisionAvoidance: this.effectiveCollisionAvoidance(),\n sticky: this.sticky(),\n detectOverflowOptions: this.detectOverflowOptions(),\n arrow: this.arrow(),\n arrowPadding: this.arrowPadding(),\n hideWhenDetached: this.hideWhenDetached()\n };\n }\n\n /**\n * The last successfully computed position, retained while a new one is being computed.\n *\n * The `position` resource resets `value()` to `undefined` whenever its params change (e.g. on\n * every pointer move while a tooltip tracks the cursor). Reading it directly would blank the\n * popup (`visibility: hidden` + off-screen transform) for the frames between a move and the next\n * resolved position — a visible flicker at high pointer-move rates. Holding the previous value\n * keeps the popup placed and visible until the new position is ready.\n */\n private readonly resolvedPosition = linkedSignal<\n ComputePositionReturn | undefined,\n ComputePositionReturn | undefined\n >({\n source: () => this.position.value() ?? undefined,\n computation: (value, previous) => value ?? previous?.value\n });\n\n /**\n * Whether the panel is positioned.\n */\n readonly isPositioned = computed(() => !!this.position.value());\n\n /**\n * The current placement of the panel.\n */\n readonly placement = computed(() => {\n const placement = this.position.value()?.placement;\n\n if (!placement) {\n return;\n }\n\n const [side, align = 'center'] = placement.split('-');\n\n return {\n side: side as Side,\n align: align as Align\n };\n });\n\n /**\n * The physical side the panel is currently placed against. Internal geometry (arrow position,\n * transform origins) must use this — never {@link placedSide}, which can be logical.\n */\n readonly physicalPlacedSide = computed(() => this.placement()?.side);\n\n /**\n * The side the panel is currently placed against, reported in the kind the consumer requested\n * (Base UI positioner `side`): when a logical `side` was passed, a placed `left`/`right` maps back\n * to `inline-start`/`inline-end` for the direction — so a post-collision flip stays logical and\n * `[data-side=\"inline-start\"]` CSS is direction-agnostic. A physical request is always reported\n * physically.\n */\n readonly placedSide = computed<SideOrLogical | undefined>(() => {\n const side = this.placement()?.side;\n\n return side === undefined ? undefined : toLogicalSide(this.side(), side, this.direction() === 'rtl');\n });\n\n /**\n * The current alignment of the panel.\n */\n readonly placedAlign = computed(() => this.placement()?.align);\n\n protected readonly style = computed(() => {\n const pos = this.resolvedPosition();\n const x = pos?.x;\n const y = pos?.y;\n\n const ready = Number.isFinite(x) && Number.isFinite(y);\n\n return {\n position: this.positionStrategy(),\n transform: ready ? '' : 'translate(0, -200%)', // keep off the page when measuring\n minWidth: 'max-content',\n // ADR 0012 §3: z-index belongs on the positioner (set it via a class/style on the\n // positioner element), Base UI-aligned. The wrapper no longer copies the popup's computed\n // z-index, so a positioner no longer requires an inner `RdxPopperContent` to exist.\n top: Number.isFinite(y) ? `${y}px` : '',\n left: Number.isFinite(x) ? `${x}px` : '',\n '--radix-popper-transform-origin': [\n pos?.middlewareData['transformOrigin']?.x,\n pos?.middlewareData['transformOrigin']?.y\n ].join(' '),\n '--radix-popper-content-wrapper-width': `${this.elementRef.nativeElement.offsetWidth}px`,\n '--radix-popper-content-wrapper-height': `${this.elementRef.nativeElement.offsetHeight}px`,\n\n // Unified Base UI-style variables (ADR 0012), emitted once for every positioner so\n // consumers learn a single dialect. They alias the engine-level `--radix-popper-*` values\n // (the `--anchor-*`/`--available-*` ones are set imperatively by the `size` middleware).\n '--anchor-width': 'var(--radix-popper-anchor-width)',\n '--anchor-height': 'var(--radix-popper-anchor-height)',\n '--available-width': 'var(--radix-popper-available-width)',\n '--available-height': 'var(--radix-popper-available-height)',\n '--positioner-width': 'var(--radix-popper-content-wrapper-width)',\n '--positioner-height': 'var(--radix-popper-content-wrapper-height)',\n '--transform-origin': 'var(--radix-popper-transform-origin)',\n\n visibility: ready ? 'visible' : 'hidden',\n pointerEvents: this.nonInteractive() || !ready ? 'none' : 'auto',\n\n // hide the content if using the hide middleware and should be hidden\n // set visibility to hidden and disable pointer events so the UI behaves\n // as if the PopperContent isn't there at all\n ...(pos?.middlewareData.hide?.referenceHidden && {\n visibility: 'hidden',\n pointerEvents: 'none'\n })\n };\n });\n\n /**\n * Whether the positioner should actively track its anchor (recompute + `autoUpdate`). Defaults to\n * always-on — the historical behavior, correct for a positioner that unmounts when its layer closes.\n * A positioner that can stay mounted while closed (`keepMounted`) **overrides** this with its\n * open/presence signal so a closed, hidden positioner doesn't spin an endless `autoUpdate`\n * `requestAnimationFrame` loop (only relevant when `updatePositionStrategy: 'always'`). It's a\n * reassignable field (not `readonly`) because the render effect below reads it lazily, after the\n * subclass constructor has swapped it in.\n */\n protected positioningActive: Signal<boolean> = computed(() => true);\n\n private readonly afterRenderEffect = afterRenderEffect((onCleanup) => {\n // Closed keep-mounted positioner: skip positioning entirely so `autoUpdate` doesn't keep firing.\n if (!this.positioningActive()) {\n return;\n }\n\n this.position.reload();\n\n const anchor = this.resolvedAnchor();\n if (!anchor) {\n return;\n }\n\n const cleanup = autoUpdate(anchor, this.elementRef.nativeElement, () => this.position.reload(), {\n animationFrame: this.updatePositionStrategy() === 'always'\n });\n\n onCleanup(cleanup);\n });\n\n constructor() {\n watch([this.isPositioned], ([isPositioned]) => {\n if (!isPositioned) {\n return;\n }\n\n afterNextRender(\n () => {\n this.placed.emit();\n },\n { injector: this.injector }\n );\n });\n }\n}\n\n/**\n * Providers a \"thin\" positioner that `extends RdxPopperContentWrapper` must include. Angular\n * inherits a base directive's inputs/outputs/host bindings/queries but **not** its `providers`, so\n * the `useExisting` alias (lets the popup and arrow resolve the subclass through the\n * {@link RdxPopperContentWrapper} token) and the wrapper context provider (what\n * `injectPopperContentWrapperContext()` reads) are re-declared here in one place.\n *\n * Combine with {@link provideRdxPopperContentConfig} for per-primitive positioning defaults:\n *\n * ```ts\n * providers: [\n * ...provideRdxPopperContentWrapper(RdxComboboxPositioner),\n * provideRdxPopperContentConfig({ sideOffset: 4, align: 'start' })\n * ]\n * ```\n */\nexport function provideRdxPopperContentWrapper(positioner: Type<RdxPopperContentWrapper>): Provider[] {\n return [{ provide: RdxPopperContentWrapper, useExisting: positioner }, providePopperContentWrapperContext(context)];\n}\n\n/**\n * Deprecated per-primitive aliases of the unified popper variables (ADR 0012). Since the wrapper now\n * emits the unified `--anchor-*` / `--available-*` / `--transform-origin` set itself, a positioner no\n * longer hand-writes a re-namespacing `[style]` map; it spreads this helper into a host `[style]`\n * binding only to keep the legacy `--radix-<name>-content-*` / `--radix-<name>-trigger-*` names alive\n * for one release of consumer back-compat. Migrate to the unified set; these are removed next minor.\n *\n * @deprecated Use the unified `--anchor-*` / `--available-*` / `--transform-origin` variables.\n */\nexport function legacyPopperVars(name: string): Record<string, string> {\n return {\n [`--radix-${name}-content-transform-origin`]: 'var(--radix-popper-transform-origin)',\n [`--radix-${name}-content-available-width`]: 'var(--radix-popper-available-width)',\n [`--radix-${name}-content-available-height`]: 'var(--radix-popper-available-height)',\n [`--radix-${name}-trigger-width`]: 'var(--radix-popper-anchor-width)',\n [`--radix-${name}-trigger-height`]: 'var(--radix-popper-anchor-height)'\n };\n}\n","import {\n computed,\n createComponent,\n Directive,\n effect,\n ElementRef,\n EnvironmentInjector,\n inject,\n input,\n inputBinding,\n numberAttribute\n} from '@angular/core';\nimport { RdxArrow } from '@radix-ng/primitives/arrow';\nimport { injectPopperContentWrapperContext } from './popper-content-wrapper';\nimport { Side } from './utils';\n\nconst OPPOSITE_SIDE: Record<Side, Side> = {\n top: 'bottom',\n right: 'left',\n bottom: 'top',\n left: 'right'\n};\n\n@Directive({\n selector: '[rdxPopperArrow]',\n host: {\n // The arrow is purely decorative — keep it out of the accessibility tree (Base UI does the same).\n 'aria-hidden': 'true',\n '[style]': 'style()'\n }\n})\nexport class RdxPopperArrow {\n private readonly popperContentContext = injectPopperContentWrapperContext();\n\n private readonly environmentInjector = inject(EnvironmentInjector);\n\n readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n readonly width = input(10, { transform: numberAttribute });\n\n readonly height = input(5, { transform: numberAttribute });\n\n // Geometry is physical: the arrow reads `physicalPlacedSide` (`placedSide` can be logical\n // `inline-start`/`inline-end` when a logical side was requested — a styling hook, not a direction).\n baseSide = computed(() => OPPOSITE_SIDE[this.popperContentContext.physicalPlacedSide()!]);\n\n protected readonly style = computed(() => {\n return {\n position: 'absolute',\n left: this.popperContentContext.arrowX() ? `${this.popperContentContext.arrowX()}px` : undefined,\n top: this.popperContentContext.arrowY() ? `${this.popperContentContext.arrowY()}px` : undefined,\n [this.baseSide()]: 0,\n transformOrigin: {\n top: '',\n right: '0 0',\n bottom: 'center 0',\n left: '100% 0'\n }[this.popperContentContext.physicalPlacedSide()!],\n transform: {\n top: 'translateY(100%)',\n right: 'translateY(50%) rotate(90deg) translateX(-50%)',\n bottom: `rotate(180deg)`,\n left: 'translateY(50%) rotate(-90deg) translateX(50%)'\n }[this.popperContentContext.physicalPlacedSide()!],\n visibility: this.popperContentContext.shouldHideArrow() ? 'hidden' : undefined\n };\n });\n\n private onCleanup = effect((onCleanup) => {\n const component = createComponent(RdxArrow, {\n environmentInjector: this.environmentInjector,\n hostElement: this.elementRef.nativeElement,\n projectableNodes: [Array.from(this.elementRef.nativeElement.childNodes)],\n bindings: [inputBinding('width', () => this.width()), inputBinding('height', () => this.height())]\n });\n\n component.changeDetectorRef.detectChanges();\n\n onCleanup(() => component.destroy());\n });\n}\n","import { computed, Directive } from '@angular/core';\nimport { injectPopperContentWrapperContext } from './popper-content-wrapper';\n\n@Directive({\n selector: '[rdxPopperContent]',\n host: {\n '[attr.data-side]': 'popperContentWrapper?.placedSide()',\n '[attr.data-align]': 'popperContentWrapper?.placedAlign()',\n '[style]': 'style()'\n }\n})\nexport class RdxPopperContent {\n /**\n * Optional so the directive can be composed onto a content part that is also used outside Popper\n * positioning (e.g. select's `item-aligned` mode, where there is no `RdxPopperContentWrapper`\n * ancestor). With no wrapper the `data-side` / `data-align` bindings and the animation guard\n * simply no-op.\n */\n protected readonly popperContentWrapper = injectPopperContentWrapperContext(true);\n\n /**\n * if the PopperContent hasn't been placed yet (not all measurements done)\n * we prevent animations so that users's animation don't kick in too early referring wrong sides\n */\n protected readonly style = computed(() => ({\n animation: this.popperContentWrapper && !this.popperContentWrapper.isPositioned() ? 'none' : undefined\n }));\n}\n","import { RdxPopper } from './src/popper';\nimport { RdxPopperAnchor } from './src/popper-anchor';\nimport { RdxPopperArrow } from './src/popper-arrow';\nimport { RdxPopperContent } from './src/popper-content';\nimport { RdxPopperContentWrapper } from './src/popper-content-wrapper';\n\nexport * from './src/popper';\nexport * from './src/popper-anchor';\nexport * from './src/popper-arrow';\nexport * from './src/popper-content';\nexport * from './src/popper-content-wrapper';\nexport * from './src/popper-content.config';\nexport * from './src/utils';\n\nexport const popperImports = [RdxPopper, RdxPopperArrow, RdxPopperContentWrapper, RdxPopperContent, RdxPopperAnchor];\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["floatingUIArrow"],"mappings":"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"}
@@ -522,7 +522,11 @@ class RdxScrollAreaViewport {
522
522
  return;
523
523
  }
524
524
  this.computeThumbPosition();
525
- if (!this.programmaticScroll) {
525
+ // WebKit consumes a touch that catches an in-flight momentum scroll or rubber-band bounce
526
+ // without dispatching any DOM events for the whole gesture (not even `touchstart`), so such a
527
+ // scroll can't be attributed to the user through events. Treat every scroll in touch modality
528
+ // as user-driven instead, otherwise the scrollbar never shows on iOS (Base UI parity).
529
+ if (this.rootContext.touchModality() || !this.programmaticScroll) {
526
530
  this.rootContext.handleScroll({ x: viewportEl.scrollLeft, y: viewportEl.scrollTop });
527
531
  }
528
532
  // Debounce restoring the programmatic flag so momentum scrolling (no further
@@ -569,7 +573,7 @@ class RdxScrollAreaViewport {
569
573
  this.destroyRef.onDestroy(() => resizeObserver.disconnect());
570
574
  }
571
575
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: RdxScrollAreaViewport, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
572
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.2", type: RdxScrollAreaViewport, isStandalone: true, selector: "[rdxScrollAreaViewport]", host: { attributes: { "role": "presentation" }, listeners: { "scroll": "onScroll()", "wheel": "onUserInteraction()", "touchmove": "onUserInteraction()", "pointermove": "onUserInteraction()", "pointerenter": "onUserInteraction()", "keydown": "onUserInteraction()" }, properties: { "style.overflow": "\"scroll\"", "attr.tabindex": "(rootContext.hiddenState().x && rootContext.hiddenState().y) ? -1 : 0", "attr.data-id": "rootContext.rootId + \"-viewport\"", "attr.data-scrolling": "(rootContext.scrollingX() || rootContext.scrollingY()) ? \"\" : undefined", "attr.data-has-overflow-x": "!rootContext.hiddenState().x ? \"\" : undefined", "attr.data-has-overflow-y": "!rootContext.hiddenState().y ? \"\" : undefined", "attr.data-overflow-x-start": "rootContext.overflowEdges().xStart ? \"\" : undefined", "attr.data-overflow-x-end": "rootContext.overflowEdges().xEnd ? \"\" : undefined", "attr.data-overflow-y-start": "rootContext.overflowEdges().yStart ? \"\" : undefined", "attr.data-overflow-y-end": "rootContext.overflowEdges().yEnd ? \"\" : undefined" } }, providers: [provideScrollAreaViewportContext(viewportContext)], exportAs: ["rdxScrollAreaViewport"], ngImport: i0 }); }
576
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.2", type: RdxScrollAreaViewport, isStandalone: true, selector: "[rdxScrollAreaViewport]", host: { attributes: { "role": "presentation" }, listeners: { "scroll": "onScroll()", "wheel": "onUserInteraction()", "pointermove": "onUserInteraction()", "pointerenter": "onUserInteraction()", "keydown": "onUserInteraction()" }, properties: { "style.overflow": "\"scroll\"", "attr.tabindex": "(rootContext.hiddenState().x && rootContext.hiddenState().y) ? -1 : 0", "attr.data-id": "rootContext.rootId + \"-viewport\"", "attr.data-scrolling": "(rootContext.scrollingX() || rootContext.scrollingY()) ? \"\" : undefined", "attr.data-has-overflow-x": "!rootContext.hiddenState().x ? \"\" : undefined", "attr.data-has-overflow-y": "!rootContext.hiddenState().y ? \"\" : undefined", "attr.data-overflow-x-start": "rootContext.overflowEdges().xStart ? \"\" : undefined", "attr.data-overflow-x-end": "rootContext.overflowEdges().xEnd ? \"\" : undefined", "attr.data-overflow-y-start": "rootContext.overflowEdges().yStart ? \"\" : undefined", "attr.data-overflow-y-end": "rootContext.overflowEdges().yEnd ? \"\" : undefined" } }, providers: [provideScrollAreaViewportContext(viewportContext)], exportAs: ["rdxScrollAreaViewport"], ngImport: i0 }); }
573
577
  }
574
578
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: RdxScrollAreaViewport, decorators: [{
575
579
  type: Directive,
@@ -591,7 +595,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
591
595
  '[attr.data-overflow-y-end]': 'rootContext.overflowEdges().yEnd ? "" : undefined',
592
596
  '(scroll)': 'onScroll()',
593
597
  '(wheel)': 'onUserInteraction()',
594
- '(touchmove)': 'onUserInteraction()',
595
598
  '(pointermove)': 'onUserInteraction()',
596
599
  '(pointerenter)': 'onUserInteraction()',
597
600
  '(keydown)': 'onUserInteraction()'