@radix-ng/primitives 1.0.0-beta.1 → 1.0.0-beta.3

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 (107) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +76 -6
  3. package/fesm2022/radix-ng-primitives-accordion.mjs +2 -2
  4. package/fesm2022/radix-ng-primitives-accordion.mjs.map +1 -1
  5. package/fesm2022/radix-ng-primitives-alert-dialog.mjs +30 -24
  6. package/fesm2022/radix-ng-primitives-alert-dialog.mjs.map +1 -1
  7. package/fesm2022/radix-ng-primitives-autocomplete.mjs +1786 -0
  8. package/fesm2022/radix-ng-primitives-autocomplete.mjs.map +1 -0
  9. package/fesm2022/radix-ng-primitives-calendar.mjs +14 -1
  10. package/fesm2022/radix-ng-primitives-calendar.mjs.map +1 -1
  11. package/fesm2022/radix-ng-primitives-checkbox.mjs +2 -2
  12. package/fesm2022/radix-ng-primitives-checkbox.mjs.map +1 -1
  13. package/fesm2022/radix-ng-primitives-collapsible.mjs +1 -1
  14. package/fesm2022/radix-ng-primitives-collapsible.mjs.map +1 -1
  15. package/fesm2022/radix-ng-primitives-combobox.mjs +1983 -0
  16. package/fesm2022/radix-ng-primitives-combobox.mjs.map +1 -0
  17. package/fesm2022/radix-ng-primitives-context-menu.mjs +1 -1
  18. package/fesm2022/radix-ng-primitives-context-menu.mjs.map +1 -1
  19. package/fesm2022/radix-ng-primitives-core.mjs +480 -469
  20. package/fesm2022/radix-ng-primitives-core.mjs.map +1 -1
  21. package/fesm2022/radix-ng-primitives-cropper.mjs +1 -1
  22. package/fesm2022/radix-ng-primitives-cropper.mjs.map +1 -1
  23. package/fesm2022/radix-ng-primitives-date-field.mjs +11 -0
  24. package/fesm2022/radix-ng-primitives-date-field.mjs.map +1 -1
  25. package/fesm2022/radix-ng-primitives-dialog.mjs +44 -46
  26. package/fesm2022/radix-ng-primitives-dialog.mjs.map +1 -1
  27. package/fesm2022/radix-ng-primitives-drawer.mjs +154 -64
  28. package/fesm2022/radix-ng-primitives-drawer.mjs.map +1 -1
  29. package/fesm2022/radix-ng-primitives-editable.mjs +1 -1
  30. package/fesm2022/radix-ng-primitives-editable.mjs.map +1 -1
  31. package/fesm2022/radix-ng-primitives-field.mjs +86 -6
  32. package/fesm2022/radix-ng-primitives-field.mjs.map +1 -1
  33. package/fesm2022/radix-ng-primitives-fieldset.mjs +1 -1
  34. package/fesm2022/radix-ng-primitives-fieldset.mjs.map +1 -1
  35. package/fesm2022/radix-ng-primitives-focus-scope.mjs +1 -1
  36. package/fesm2022/radix-ng-primitives-focus-scope.mjs.map +1 -1
  37. package/fesm2022/radix-ng-primitives-form.mjs +207 -0
  38. package/fesm2022/radix-ng-primitives-form.mjs.map +1 -0
  39. package/fesm2022/radix-ng-primitives-input.mjs +85 -4
  40. package/fesm2022/radix-ng-primitives-input.mjs.map +1 -1
  41. package/fesm2022/radix-ng-primitives-menu.mjs +44 -24
  42. package/fesm2022/radix-ng-primitives-menu.mjs.map +1 -1
  43. package/fesm2022/radix-ng-primitives-menubar.mjs +1 -1
  44. package/fesm2022/radix-ng-primitives-menubar.mjs.map +1 -1
  45. package/fesm2022/radix-ng-primitives-meter.mjs +1 -1
  46. package/fesm2022/radix-ng-primitives-meter.mjs.map +1 -1
  47. package/fesm2022/radix-ng-primitives-navigation-menu.mjs +39 -55
  48. package/fesm2022/radix-ng-primitives-navigation-menu.mjs.map +1 -1
  49. package/fesm2022/radix-ng-primitives-number-field.mjs +2 -2
  50. package/fesm2022/radix-ng-primitives-number-field.mjs.map +1 -1
  51. package/fesm2022/radix-ng-primitives-popover.mjs +36 -51
  52. package/fesm2022/radix-ng-primitives-popover.mjs.map +1 -1
  53. package/fesm2022/radix-ng-primitives-popper.mjs +12 -6
  54. package/fesm2022/radix-ng-primitives-popper.mjs.map +1 -1
  55. package/fesm2022/radix-ng-primitives-portal.mjs +107 -17
  56. package/fesm2022/radix-ng-primitives-portal.mjs.map +1 -1
  57. package/fesm2022/radix-ng-primitives-presence.mjs +262 -79
  58. package/fesm2022/radix-ng-primitives-presence.mjs.map +1 -1
  59. package/fesm2022/radix-ng-primitives-preview-card.mjs +37 -51
  60. package/fesm2022/radix-ng-primitives-preview-card.mjs.map +1 -1
  61. package/fesm2022/radix-ng-primitives-progress.mjs +1 -1
  62. package/fesm2022/radix-ng-primitives-progress.mjs.map +1 -1
  63. package/fesm2022/radix-ng-primitives-roving-focus.mjs +1 -1
  64. package/fesm2022/radix-ng-primitives-roving-focus.mjs.map +1 -1
  65. package/fesm2022/radix-ng-primitives-scroll-area.mjs +3 -3
  66. package/fesm2022/radix-ng-primitives-scroll-area.mjs.map +1 -1
  67. package/fesm2022/radix-ng-primitives-select.mjs +469 -258
  68. package/fesm2022/radix-ng-primitives-select.mjs.map +1 -1
  69. package/fesm2022/radix-ng-primitives-slider.mjs +1 -1
  70. package/fesm2022/radix-ng-primitives-slider.mjs.map +1 -1
  71. package/fesm2022/radix-ng-primitives-switch.mjs +3 -2
  72. package/fesm2022/radix-ng-primitives-switch.mjs.map +1 -1
  73. package/fesm2022/radix-ng-primitives-tabs.mjs +1 -1
  74. package/fesm2022/radix-ng-primitives-tabs.mjs.map +1 -1
  75. package/fesm2022/radix-ng-primitives-time-field.mjs +27 -3
  76. package/fesm2022/radix-ng-primitives-time-field.mjs.map +1 -1
  77. package/fesm2022/radix-ng-primitives-toast.mjs +1 -1
  78. package/fesm2022/radix-ng-primitives-toast.mjs.map +1 -1
  79. package/fesm2022/radix-ng-primitives-toggle-group.mjs +1 -1
  80. package/fesm2022/radix-ng-primitives-toggle-group.mjs.map +1 -1
  81. package/fesm2022/radix-ng-primitives-toolbar.mjs +2 -2
  82. package/fesm2022/radix-ng-primitives-toolbar.mjs.map +1 -1
  83. package/fesm2022/radix-ng-primitives-tooltip.mjs +39 -42
  84. package/fesm2022/radix-ng-primitives-tooltip.mjs.map +1 -1
  85. package/package.json +13 -1
  86. package/schematics/ng-add/index.js +57 -0
  87. package/schematics/ng-add/index.js.map +1 -1
  88. package/schematics/ng-add/schema.d.ts +1 -0
  89. package/schematics/ng-add/schema.json +6 -0
  90. package/types/radix-ng-primitives-alert-dialog.d.ts +17 -11
  91. package/types/radix-ng-primitives-autocomplete.d.ts +596 -0
  92. package/types/radix-ng-primitives-combobox.d.ts +1310 -0
  93. package/types/radix-ng-primitives-core.d.ts +148 -56
  94. package/types/radix-ng-primitives-dialog.d.ts +32 -25
  95. package/types/radix-ng-primitives-drawer.d.ts +49 -22
  96. package/types/radix-ng-primitives-field.d.ts +71 -2
  97. package/types/radix-ng-primitives-form.d.ts +124 -0
  98. package/types/radix-ng-primitives-input.d.ts +75 -5
  99. package/types/radix-ng-primitives-menu.d.ts +19 -10
  100. package/types/radix-ng-primitives-navigation-menu.d.ts +24 -26
  101. package/types/radix-ng-primitives-popover.d.ts +23 -23
  102. package/types/radix-ng-primitives-popper.d.ts +7 -1
  103. package/types/radix-ng-primitives-portal.d.ts +53 -8
  104. package/types/radix-ng-primitives-presence.d.ts +98 -17
  105. package/types/radix-ng-primitives-preview-card.d.ts +24 -23
  106. package/types/radix-ng-primitives-select.d.ts +294 -137
  107. package/types/radix-ng-primitives-tooltip.d.ts +26 -19
@@ -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.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/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 { 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 protected readonly popperContentWrapper = injectPopperContentWrapperContext();\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.isPositioned() ? 'none' : undefined\n }));\n}\n","import { InjectionToken, Provider } from '@angular/core';\nimport { Align, 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;\n alignOffset?: number;\n arrowPadding?: number;\n avoidCollisions?: boolean;\n collisionPadding?: number | Partial<Record<Side, number>>;\n sticky?: 'partial' | 'always';\n hideWhenDetached?: boolean;\n positionStrategy?: 'fixed' | 'absolute';\n updatePositionStrategy?: 'optimized' | 'always';\n}\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\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 { isPlatformBrowser } from '@angular/common';\nimport {\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 PLATFORM_ID,\n resource,\n signal\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 { RdxPopperContent } from './popper-content';\nimport { RdxPopperContentConfigToken } from './popper-content.config';\nimport { Align, isNotNull, Side, transformOrigin } from './utils';\n\nexport type RdxPopperAnchorElement =\n | Element\n | ElementRef<Element>\n | VirtualElement\n | (() => Element | VirtualElement | null)\n | null\n | undefined;\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');\n\n@Directive({\n selector: '[rdxPopperContentWrapper]',\n providers: [providePopperContentWrapperContext(context)],\n host: {\n 'data-radix-popper-content-wrapper': '',\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 private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\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.\n */\n readonly sideOffset = input<number, NumberInput>(this.config.sideOffset ?? 0, { transform: numberAttribute });\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 /** An offset in pixels from the `start` or `end` alignment options. */\n readonly alignOffset = input<number, NumberInput>(this.config.alignOffset ?? 0, { transform: numberAttribute });\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 /** When `true`, overrides the `side` and `align` preferences to prevent collisions with boundary edges. */\n readonly avoidCollisions = input<boolean, BooleanInput>(this.config.avoidCollisions ?? true, {\n transform: booleanAttribute\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>(() => {\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 const fallbackAnchor = this.context.anchorOverride() ?? this.context.anchor()?.elementRef.nativeElement;\n\n if (!fallbackAnchor) {\n throw new Error('RdxPopperContentWrapper requires an anchor.');\n }\n\n return fallbackAnchor;\n });\n\n private readonly position = resource({\n params: () => ({\n anchor: this.resolvedAnchor(),\n strategy: this.positionStrategy(),\n placement: this.desiredPlacement(),\n sideOffset: this.sideOffset(),\n alignOffset: this.alignOffset(),\n arrowHeight: this.arrowSize()().height,\n arrowWidth: this.arrowSize()().width,\n avoidCollisions: this.avoidCollisions(),\n sticky: this.sticky(),\n detectOverflowOptions: this.detectOverflowOptions(),\n arrow: this.arrow(),\n arrowPadding: this.arrowPadding(),\n hideWhenDetached: this.hideWhenDetached()\n }),\n loader: ({ params }) =>\n 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({\n mainAxis: params.sideOffset + params.arrowHeight || 0,\n alignmentAxis: params.alignOffset\n }),\n params.avoidCollisions &&\n shift({\n mainAxis: true,\n crossAxis: false,\n limiter: params.sticky === 'partial' ? limitShift() : undefined,\n ...params.detectOverflowOptions\n }),\n params.avoidCollisions && flip({ ...params.detectOverflowOptions }),\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 * 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(),\n computation: (value, previous) => value ?? previous?.value\n });\n\n /**\n * Whether the panel is positioned.\n */\n readonly isPositioned = computed(() => this.position.hasValue());\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 private readonly contentElementRef = contentChild.required<RdxPopperContent, ElementRef<HTMLElement>>(\n RdxPopperContent,\n {\n read: ElementRef\n }\n );\n\n protected readonly contentZIndex = computed(() => {\n if (!this.isBrowser) {\n return 0;\n }\n\n return getComputedStyle(this.contentElementRef().nativeElement).zIndex;\n });\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 zIndex: this.contentZIndex(),\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 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 private readonly afterRenderEffect = afterRenderEffect((onCleanup) => {\n this.position.reload();\n\n const cleanup = autoUpdate(this.resolvedAnchor(), 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","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 '[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 { 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.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/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 { 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 { InjectionToken, Provider } from '@angular/core';\nimport { Align, 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;\n alignOffset?: number;\n arrowPadding?: number;\n avoidCollisions?: boolean;\n collisionPadding?: number | Partial<Record<Side, number>>;\n sticky?: 'partial' | 'always';\n hideWhenDetached?: boolean;\n positionStrategy?: 'fixed' | 'absolute';\n updatePositionStrategy?: 'optimized' | 'always';\n}\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\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 { isPlatformBrowser } from '@angular/common';\nimport {\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 PLATFORM_ID,\n resource,\n signal\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 { RdxPopperContent } from './popper-content';\nimport { RdxPopperContentConfigToken } from './popper-content.config';\nimport { Align, isNotNull, Side, transformOrigin } from './utils';\n\nexport type RdxPopperAnchorElement =\n | Element\n | ElementRef<Element>\n | VirtualElement\n | (() => Element | VirtualElement | null)\n | null\n | undefined;\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 '[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 private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\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.\n */\n readonly sideOffset = input<number, NumberInput>(this.config.sideOffset ?? 0, { transform: numberAttribute });\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 /** An offset in pixels from the `start` or `end` alignment options. */\n readonly alignOffset = input<number, NumberInput>(this.config.alignOffset ?? 0, { transform: numberAttribute });\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 /** When `true`, overrides the `side` and `align` preferences to prevent collisions with boundary edges. */\n readonly avoidCollisions = input<boolean, BooleanInput>(this.config.avoidCollisions ?? true, {\n transform: booleanAttribute\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>(() => {\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 const fallbackAnchor = this.context.anchorOverride() ?? this.context.anchor()?.elementRef.nativeElement;\n\n if (!fallbackAnchor) {\n throw new Error('RdxPopperContentWrapper requires an anchor.');\n }\n\n return fallbackAnchor;\n });\n\n private readonly position = resource({\n params: () => ({\n anchor: this.resolvedAnchor(),\n strategy: this.positionStrategy(),\n placement: this.desiredPlacement(),\n sideOffset: this.sideOffset(),\n alignOffset: this.alignOffset(),\n arrowHeight: this.arrowSize()().height,\n arrowWidth: this.arrowSize()().width,\n avoidCollisions: this.avoidCollisions(),\n sticky: this.sticky(),\n detectOverflowOptions: this.detectOverflowOptions(),\n arrow: this.arrow(),\n arrowPadding: this.arrowPadding(),\n hideWhenDetached: this.hideWhenDetached()\n }),\n loader: ({ params }) =>\n 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({\n mainAxis: params.sideOffset + params.arrowHeight || 0,\n alignmentAxis: params.alignOffset\n }),\n params.avoidCollisions &&\n shift({\n mainAxis: true,\n crossAxis: false,\n limiter: params.sticky === 'partial' ? limitShift() : undefined,\n ...params.detectOverflowOptions\n }),\n params.avoidCollisions && flip({ ...params.detectOverflowOptions }),\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 * 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(),\n computation: (value, previous) => value ?? previous?.value\n });\n\n /**\n * Whether the panel is positioned.\n */\n readonly isPositioned = computed(() => this.position.hasValue());\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 private readonly contentElementRef = contentChild.required<RdxPopperContent, ElementRef<HTMLElement>>(\n RdxPopperContent,\n {\n read: ElementRef\n }\n );\n\n protected readonly contentZIndex = computed(() => {\n if (!this.isBrowser) {\n return 0;\n }\n\n return getComputedStyle(this.contentElementRef().nativeElement).zIndex;\n });\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 zIndex: this.contentZIndex(),\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 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 private readonly afterRenderEffect = afterRenderEffect((onCleanup) => {\n this.position.reload();\n\n const cleanup = autoUpdate(this.resolvedAnchor(), 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","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 '[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 { 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,6 +1,27 @@
1
1
  import { DOCUMENT, isPlatformBrowser } from '@angular/common';
2
2
  import * as i0 from '@angular/core';
3
- import { inject, ElementRef, PLATFORM_ID, DestroyRef, input, linkedSignal, computed, effect, Directive } from '@angular/core';
3
+ import { ElementRef, inject, PLATFORM_ID, DestroyRef, input, linkedSignal, computed, effect, Directive, ViewContainerRef, TemplateRef, signal, Injector } from '@angular/core';
4
+ import { PresenceMachine, RDX_PRESENCE_CONTEXT } from '@radix-ng/primitives/presence';
5
+
6
+ /**
7
+ * Resolve a {@link RdxPortalContainer} to a concrete element. Returns `null` when nothing usable is
8
+ * provided (a missing container, a selector matching nothing, or a non-element value), so callers can
9
+ * fall back to `document.body`. Shared by `RdxPortal` and `RdxPortalPresence`.
10
+ */
11
+ function resolvePortalContainer(container, document) {
12
+ if (!container) {
13
+ return null;
14
+ }
15
+ if (typeof container === 'string') {
16
+ return document?.querySelector(container) ?? null;
17
+ }
18
+ if (container instanceof ElementRef) {
19
+ return container.nativeElement ?? null;
20
+ }
21
+ // Anything that isn't a real element (e.g. a TemplateRef passed by mistake) falls back to the
22
+ // default container so the content still leaves the flow instead of staying in place.
23
+ return container instanceof HTMLElement ? container : null;
24
+ }
4
25
 
5
26
  class RdxPortal {
6
27
  constructor() {
@@ -16,7 +37,7 @@ class RdxPortal {
16
37
  this._computedContainer = linkedSignal(this.container, ...(ngDevMode ? [{ debugName: "_computedContainer" }] : /* istanbul ignore next */ []));
17
38
  this.computedContainer = this._computedContainer.asReadonly();
18
39
  this.elementContainer = computed(() => {
19
- const provided = this.resolveContainer(this.computedContainer());
40
+ const provided = resolvePortalContainer(this.computedContainer(), this.document);
20
41
  const body = this.document?.body ?? null;
21
42
  return provided ?? body;
22
43
  }, ...(ngDevMode ? [{ debugName: "elementContainer" }] : /* istanbul ignore next */ []));
@@ -42,20 +63,6 @@ class RdxPortal {
42
63
  setContainer(container) {
43
64
  this._computedContainer.set(container);
44
65
  }
45
- resolveContainer(container) {
46
- if (!container) {
47
- return null;
48
- }
49
- if (typeof container === 'string') {
50
- return this.document?.querySelector(container) ?? null;
51
- }
52
- if (container instanceof ElementRef) {
53
- return container.nativeElement ?? null;
54
- }
55
- // Anything that isn't a real element (e.g. a TemplateRef passed by mistake) falls back to
56
- // the default container so the element still leaves the flow instead of staying in place.
57
- return container instanceof HTMLElement ? container : null;
58
- }
59
66
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxPortal, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
60
67
  static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.9", type: RdxPortal, isStandalone: true, selector: "[rdxPortal]", inputs: { container: { classPropertyName: "container", publicName: "container", isSignal: true, isRequired: false, transformFunction: null } }, exportAs: ["rdxPortal"], ngImport: i0 }); }
61
68
  }
@@ -67,9 +74,92 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
67
74
  }]
68
75
  }], ctorParameters: () => [], propDecorators: { container: [{ type: i0.Input, args: [{ isSignal: true, alias: "container", required: false }] }] } });
69
76
 
77
+ /**
78
+ * Structural directive merging what `RdxPortal` + `RdxPresenceDirective` did as a pair: it mounts its
79
+ * template while `present()` (from {@link RDX_PRESENCE_CONTEXT}) is `true`, **relocates every root
80
+ * node into a portal container** (default `document.body`), and on close runs the presence exit state
81
+ * machine — keeping the content mounted until every running CSS exit `@keyframes` on any root node
82
+ * finishes.
83
+ *
84
+ * Unlike `RdxPortal`, it adds **no wrapper element**: the template's root nodes become direct children
85
+ * of the container. Use the `*` microsyntax for the common single-root case
86
+ * (`<div *rdxXxxPortal rdxXxxPositioner>`) or the explicit `<ng-template rdxXxxPortal>` form for a
87
+ * custom container or multiple root nodes (e.g. a dialog backdrop + popup).
88
+ *
89
+ * SSR: on the server the view renders in place and is never relocated; after hydration the relocation
90
+ * effect moves the nodes into the container (same browser-guarded split `RdxPortal` uses).
91
+ */
92
+ class RdxPortalPresence {
93
+ constructor() {
94
+ this.viewContainerRef = inject(ViewContainerRef);
95
+ this.templateRef = inject((TemplateRef));
96
+ this.document = inject(DOCUMENT, { optional: true });
97
+ this.isBrowser = isPlatformBrowser(inject(PLATFORM_ID));
98
+ /**
99
+ * Container to portal the content into. Can be an `ElementRef`, a native element, or a CSS
100
+ * selector. Defaults to `document.body` (or when a selector matches nothing).
101
+ */
102
+ this.container = input(...(ngDevMode ? [undefined, { debugName: "container" }] : /* istanbul ignore next */ []));
103
+ this._computedContainer = linkedSignal(this.container, ...(ngDevMode ? [{ debugName: "_computedContainer" }] : /* istanbul ignore next */ []));
104
+ this.elementContainer = computed(() => {
105
+ const provided = resolvePortalContainer(this._computedContainer(), this.document);
106
+ return provided ?? this.document?.body ?? null;
107
+ }, ...(ngDevMode ? [{ debugName: "elementContainer" }] : /* istanbul ignore next */ []));
108
+ /** The live view's root nodes, exposed as a signal so the relocation effect re-runs on (re)mount. */
109
+ this.mountedNodes = signal([], ...(ngDevMode ? [{ debugName: "mountedNodes" }] : /* istanbul ignore next */ []));
110
+ this.viewRef = null;
111
+ const machine = new PresenceMachine({
112
+ present: inject(RDX_PRESENCE_CONTEXT).present,
113
+ isBrowser: this.isBrowser,
114
+ injector: inject(Injector),
115
+ mountView: () => this.mountView(),
116
+ destroyView: () => this.destroyView()
117
+ });
118
+ // Relocate reactively: re-runs whenever the resolved container changes or the view is
119
+ // (re)mounted. On the server we never relocate — the nodes render in place.
120
+ effect(() => {
121
+ const container = this.elementContainer();
122
+ const nodes = this.mountedNodes();
123
+ if (!this.isBrowser || !container) {
124
+ return;
125
+ }
126
+ for (const node of nodes) {
127
+ container.appendChild(node);
128
+ }
129
+ });
130
+ inject(DestroyRef).onDestroy(() => machine.dispose());
131
+ }
132
+ /** Imperatively override the portal container (parity with `RdxPortal.setContainer`). */
133
+ setContainer(container) {
134
+ this._computedContainer.set(container);
135
+ }
136
+ mountView() {
137
+ this.viewRef = this.viewContainerRef.createEmbeddedView(this.templateRef);
138
+ const rootNodes = this.viewRef.rootNodes;
139
+ this.mountedNodes.set(rootNodes);
140
+ // Watch every element root for exit animations (dialog returns backdrop + popup).
141
+ return rootNodes.filter((node) => node instanceof HTMLElement);
142
+ }
143
+ destroyView() {
144
+ // Destroying the view removes the nodes from wherever they currently live (the container) —
145
+ // no anchor-comment juggling, unlike `RdxPortal` which restores its host element.
146
+ this.viewRef?.destroy();
147
+ this.viewRef = null;
148
+ this.mountedNodes.set([]);
149
+ }
150
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxPortalPresence, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
151
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.9", type: RdxPortalPresence, isStandalone: true, inputs: { container: { classPropertyName: "container", publicName: "container", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 }); }
152
+ }
153
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: RdxPortalPresence, decorators: [{
154
+ type: Directive,
155
+ args: [{
156
+ standalone: true
157
+ }]
158
+ }], ctorParameters: () => [], propDecorators: { container: [{ type: i0.Input, args: [{ isSignal: true, alias: "container", required: false }] }] } });
159
+
70
160
  /**
71
161
  * Generated bundle index. Do not edit.
72
162
  */
73
163
 
74
- export { RdxPortal };
164
+ export { RdxPortal, RdxPortalPresence, resolvePortalContainer };
75
165
  //# sourceMappingURL=radix-ng-primitives-portal.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"radix-ng-primitives-portal.mjs","sources":["../../../packages/primitives/portal/src/portal.ts","../../../packages/primitives/portal/radix-ng-primitives-portal.ts"],"sourcesContent":["import { DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport {\n computed,\n DestroyRef,\n Directive,\n effect,\n ElementRef,\n inject,\n input,\n linkedSignal,\n PLATFORM_ID\n} from '@angular/core';\n\n/**\n * A target container for the portal. Accepts an `ElementRef`, a native element, or a CSS selector\n * resolved against the document.\n */\nexport type RdxPortalContainer = ElementRef<HTMLElement> | HTMLElement | string;\n\n@Directive({\n selector: '[rdxPortal]',\n exportAs: 'rdxPortal'\n})\nexport class RdxPortal {\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly platformId = inject(PLATFORM_ID);\n private readonly document = inject(DOCUMENT, { optional: true });\n private readonly destroyRef = inject(DestroyRef);\n\n /**\n * Specify a container to portal the content into. Can be an `ElementRef`, a native element, or a\n * CSS selector. Defaults to `document.body` when not set (or when a selector matches nothing).\n */\n readonly container = input<RdxPortalContainer>();\n\n private readonly _computedContainer = linkedSignal(this.container);\n readonly computedContainer = this._computedContainer.asReadonly();\n\n private readonly elementContainer = computed<HTMLElement | null>(() => {\n const provided = this.resolveContainer(this.computedContainer());\n const body = this.document?.body ?? null;\n return provided ?? body;\n });\n\n constructor() {\n const isBrowser = isPlatformBrowser(this.platformId);\n if (!isBrowser || !this.document) {\n return;\n }\n\n const element = this.elementRef.nativeElement;\n // Anchor the original DOM position with a comment node, so the element can be restored\n // exactly where it was when the directive is destroyed.\n const anchor = this.document.createComment('rdx-portal');\n element.parentNode?.insertBefore(anchor, element);\n\n // Move reactively: the effect runs after inputs are bound (so `container` is respected on\n // first render) and re-runs whenever the target container changes. `appendChild` relocates\n // the element, it does not clone it.\n effect(() => {\n this.elementContainer()?.appendChild(element);\n });\n\n this.destroyRef.onDestroy(() => {\n anchor.parentNode?.replaceChild(element, anchor);\n });\n }\n\n setContainer(container: RdxPortalContainer) {\n this._computedContainer.set(container);\n }\n\n private resolveContainer(container: RdxPortalContainer | undefined): HTMLElement | null {\n if (!container) {\n return null;\n }\n if (typeof container === 'string') {\n return this.document?.querySelector<HTMLElement>(container) ?? null;\n }\n if (container instanceof ElementRef) {\n return container.nativeElement ?? null;\n }\n // Anything that isn't a real element (e.g. a TemplateRef passed by mistake) falls back to\n // the default container so the element still leaves the flow instead of staying in place.\n return container instanceof HTMLElement ? container : null;\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;MAuBa,SAAS,CAAA;AAqBlB,IAAA,WAAA,GAAA;AApBiB,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAA0B,UAAU,CAAC;AACxD,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC;QAChC,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAC/C,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAEhD;;;AAGG;QACM,IAAA,CAAA,SAAS,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAsB;AAE/B,QAAA,IAAA,CAAA,kBAAkB,GAAG,YAAY,CAAC,IAAI,CAAC,SAAS,yFAAC;AACzD,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,CAAC,kBAAkB,CAAC,UAAU,EAAE;AAEhD,QAAA,IAAA,CAAA,gBAAgB,GAAG,QAAQ,CAAqB,MAAK;YAClE,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAChE,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,IAAI;YACxC,OAAO,QAAQ,IAAI,IAAI;AAC3B,QAAA,CAAC,uFAAC;QAGE,MAAM,SAAS,GAAG,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC;QACpD,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAC9B;QACJ;AAEA,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa;;;QAG7C,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,YAAY,CAAC;QACxD,OAAO,CAAC,UAAU,EAAE,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC;;;;QAKjD,MAAM,CAAC,MAAK;YACR,IAAI,CAAC,gBAAgB,EAAE,EAAE,WAAW,CAAC,OAAO,CAAC;AACjD,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MAAK;YAC3B,MAAM,CAAC,UAAU,EAAE,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC;AACpD,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,YAAY,CAAC,SAA6B,EAAA;AACtC,QAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC;IAC1C;AAEQ,IAAA,gBAAgB,CAAC,SAAyC,EAAA;QAC9D,IAAI,CAAC,SAAS,EAAE;AACZ,YAAA,OAAO,IAAI;QACf;AACA,QAAA,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE;YAC/B,OAAO,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAc,SAAS,CAAC,IAAI,IAAI;QACvE;AACA,QAAA,IAAI,SAAS,YAAY,UAAU,EAAE;AACjC,YAAA,OAAO,SAAS,CAAC,aAAa,IAAI,IAAI;QAC1C;;;QAGA,OAAO,SAAS,YAAY,WAAW,GAAG,SAAS,GAAG,IAAI;IAC9D;8GA9DS,SAAS,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAT,SAAS,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAT,SAAS,EAAA,UAAA,EAAA,CAAA;kBAJrB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,aAAa;AACvB,oBAAA,QAAQ,EAAE;AACb,iBAAA;;;ACtBD;;AAEG;;;;"}
1
+ {"version":3,"file":"radix-ng-primitives-portal.mjs","sources":["../../../packages/primitives/portal/src/resolve-container.ts","../../../packages/primitives/portal/src/portal.ts","../../../packages/primitives/portal/src/portal-presence.ts","../../../packages/primitives/portal/radix-ng-primitives-portal.ts"],"sourcesContent":["import { ElementRef } from '@angular/core';\n\n/**\n * A target container for a portal. Accepts an `ElementRef`, a native element, or a CSS selector\n * resolved against the document.\n */\nexport type RdxPortalContainer = ElementRef<HTMLElement> | HTMLElement | string;\n\n/**\n * Resolve a {@link RdxPortalContainer} to a concrete element. Returns `null` when nothing usable is\n * provided (a missing container, a selector matching nothing, or a non-element value), so callers can\n * fall back to `document.body`. Shared by `RdxPortal` and `RdxPortalPresence`.\n */\nexport function resolvePortalContainer(\n container: RdxPortalContainer | undefined,\n document: Document | null\n): HTMLElement | null {\n if (!container) {\n return null;\n }\n if (typeof container === 'string') {\n return document?.querySelector<HTMLElement>(container) ?? null;\n }\n if (container instanceof ElementRef) {\n return container.nativeElement ?? null;\n }\n // Anything that isn't a real element (e.g. a TemplateRef passed by mistake) falls back to the\n // default container so the content still leaves the flow instead of staying in place.\n return container instanceof HTMLElement ? container : null;\n}\n","import { DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport {\n computed,\n DestroyRef,\n Directive,\n effect,\n ElementRef,\n inject,\n input,\n linkedSignal,\n PLATFORM_ID\n} from '@angular/core';\nimport { RdxPortalContainer, resolvePortalContainer } from './resolve-container';\n\n@Directive({\n selector: '[rdxPortal]',\n exportAs: 'rdxPortal'\n})\nexport class RdxPortal {\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly platformId = inject(PLATFORM_ID);\n private readonly document = inject(DOCUMENT, { optional: true });\n private readonly destroyRef = inject(DestroyRef);\n\n /**\n * Specify a container to portal the content into. Can be an `ElementRef`, a native element, or a\n * CSS selector. Defaults to `document.body` when not set (or when a selector matches nothing).\n */\n readonly container = input<RdxPortalContainer>();\n\n private readonly _computedContainer = linkedSignal(this.container);\n readonly computedContainer = this._computedContainer.asReadonly();\n\n private readonly elementContainer = computed<HTMLElement | null>(() => {\n const provided = resolvePortalContainer(this.computedContainer(), this.document);\n const body = this.document?.body ?? null;\n return provided ?? body;\n });\n\n constructor() {\n const isBrowser = isPlatformBrowser(this.platformId);\n if (!isBrowser || !this.document) {\n return;\n }\n\n const element = this.elementRef.nativeElement;\n // Anchor the original DOM position with a comment node, so the element can be restored\n // exactly where it was when the directive is destroyed.\n const anchor = this.document.createComment('rdx-portal');\n element.parentNode?.insertBefore(anchor, element);\n\n // Move reactively: the effect runs after inputs are bound (so `container` is respected on\n // first render) and re-runs whenever the target container changes. `appendChild` relocates\n // the element, it does not clone it.\n effect(() => {\n this.elementContainer()?.appendChild(element);\n });\n\n this.destroyRef.onDestroy(() => {\n anchor.parentNode?.replaceChild(element, anchor);\n });\n }\n\n setContainer(container: RdxPortalContainer) {\n this._computedContainer.set(container);\n }\n}\n","import { DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport {\n computed,\n DestroyRef,\n Directive,\n effect,\n EmbeddedViewRef,\n inject,\n Injector,\n input,\n linkedSignal,\n PLATFORM_ID,\n signal,\n TemplateRef,\n ViewContainerRef\n} from '@angular/core';\nimport { PresenceMachine, RDX_PRESENCE_CONTEXT } from '@radix-ng/primitives/presence';\nimport { RdxPortalContainer, resolvePortalContainer } from './resolve-container';\n\n/**\n * Structural directive merging what `RdxPortal` + `RdxPresenceDirective` did as a pair: it mounts its\n * template while `present()` (from {@link RDX_PRESENCE_CONTEXT}) is `true`, **relocates every root\n * node into a portal container** (default `document.body`), and on close runs the presence exit state\n * machine — keeping the content mounted until every running CSS exit `@keyframes` on any root node\n * finishes.\n *\n * Unlike `RdxPortal`, it adds **no wrapper element**: the template's root nodes become direct children\n * of the container. Use the `*` microsyntax for the common single-root case\n * (`<div *rdxXxxPortal rdxXxxPositioner>`) or the explicit `<ng-template rdxXxxPortal>` form for a\n * custom container or multiple root nodes (e.g. a dialog backdrop + popup).\n *\n * SSR: on the server the view renders in place and is never relocated; after hydration the relocation\n * effect moves the nodes into the container (same browser-guarded split `RdxPortal` uses).\n */\n@Directive({\n standalone: true\n})\nexport class RdxPortalPresence {\n private readonly viewContainerRef = inject(ViewContainerRef);\n private readonly templateRef = inject(TemplateRef<void>);\n private readonly document = inject(DOCUMENT, { optional: true });\n private readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n\n /**\n * Container to portal the content into. Can be an `ElementRef`, a native element, or a CSS\n * selector. Defaults to `document.body` (or when a selector matches nothing).\n */\n readonly container = input<RdxPortalContainer>();\n\n private readonly _computedContainer = linkedSignal(this.container);\n\n private readonly elementContainer = computed<HTMLElement | null>(() => {\n const provided = resolvePortalContainer(this._computedContainer(), this.document);\n return provided ?? this.document?.body ?? null;\n });\n\n /** The live view's root nodes, exposed as a signal so the relocation effect re-runs on (re)mount. */\n private readonly mountedNodes = signal<Node[]>([]);\n private viewRef: EmbeddedViewRef<void> | null = null;\n\n constructor() {\n const machine = new PresenceMachine({\n present: inject(RDX_PRESENCE_CONTEXT).present,\n isBrowser: this.isBrowser,\n injector: inject(Injector),\n mountView: () => this.mountView(),\n destroyView: () => this.destroyView()\n });\n\n // Relocate reactively: re-runs whenever the resolved container changes or the view is\n // (re)mounted. On the server we never relocate — the nodes render in place.\n effect(() => {\n const container = this.elementContainer();\n const nodes = this.mountedNodes();\n if (!this.isBrowser || !container) {\n return;\n }\n for (const node of nodes) {\n container.appendChild(node);\n }\n });\n\n inject(DestroyRef).onDestroy(() => machine.dispose());\n }\n\n /** Imperatively override the portal container (parity with `RdxPortal.setContainer`). */\n setContainer(container: RdxPortalContainer): void {\n this._computedContainer.set(container);\n }\n\n private mountView(): HTMLElement[] {\n this.viewRef = this.viewContainerRef.createEmbeddedView(this.templateRef);\n const rootNodes = this.viewRef.rootNodes as Node[];\n this.mountedNodes.set(rootNodes);\n // Watch every element root for exit animations (dialog returns backdrop + popup).\n return rootNodes.filter((node): node is HTMLElement => node instanceof HTMLElement);\n }\n\n private destroyView(): void {\n // Destroying the view removes the nodes from wherever they currently live (the container) —\n // no anchor-comment juggling, unlike `RdxPortal` which restores its host element.\n this.viewRef?.destroy();\n this.viewRef = null;\n this.mountedNodes.set([]);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;AAQA;;;;AAIG;AACG,SAAU,sBAAsB,CAClC,SAAyC,EACzC,QAAyB,EAAA;IAEzB,IAAI,CAAC,SAAS,EAAE;AACZ,QAAA,OAAO,IAAI;IACf;AACA,IAAA,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE;QAC/B,OAAO,QAAQ,EAAE,aAAa,CAAc,SAAS,CAAC,IAAI,IAAI;IAClE;AACA,IAAA,IAAI,SAAS,YAAY,UAAU,EAAE;AACjC,QAAA,OAAO,SAAS,CAAC,aAAa,IAAI,IAAI;IAC1C;;;IAGA,OAAO,SAAS,YAAY,WAAW,GAAG,SAAS,GAAG,IAAI;AAC9D;;MCXa,SAAS,CAAA;AAqBlB,IAAA,WAAA,GAAA;AApBiB,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAA0B,UAAU,CAAC;AACxD,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC;QAChC,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAC/C,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAEhD;;;AAGG;QACM,IAAA,CAAA,SAAS,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAsB;AAE/B,QAAA,IAAA,CAAA,kBAAkB,GAAG,YAAY,CAAC,IAAI,CAAC,SAAS,yFAAC;AACzD,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,CAAC,kBAAkB,CAAC,UAAU,EAAE;AAEhD,QAAA,IAAA,CAAA,gBAAgB,GAAG,QAAQ,CAAqB,MAAK;AAClE,YAAA,MAAM,QAAQ,GAAG,sBAAsB,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC;YAChF,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,IAAI;YACxC,OAAO,QAAQ,IAAI,IAAI;AAC3B,QAAA,CAAC,uFAAC;QAGE,MAAM,SAAS,GAAG,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC;QACpD,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAC9B;QACJ;AAEA,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa;;;QAG7C,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,YAAY,CAAC;QACxD,OAAO,CAAC,UAAU,EAAE,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC;;;;QAKjD,MAAM,CAAC,MAAK;YACR,IAAI,CAAC,gBAAgB,EAAE,EAAE,WAAW,CAAC,OAAO,CAAC;AACjD,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MAAK;YAC3B,MAAM,CAAC,UAAU,EAAE,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC;AACpD,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,YAAY,CAAC,SAA6B,EAAA;AACtC,QAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC;IAC1C;8GA/CS,SAAS,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAT,SAAS,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAT,SAAS,EAAA,UAAA,EAAA,CAAA;kBAJrB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,aAAa;AACvB,oBAAA,QAAQ,EAAE;AACb,iBAAA;;;ACED;;;;;;;;;;;;;;AAcG;MAIU,iBAAiB,CAAA;AAuB1B,IAAA,WAAA,GAAA;AAtBiB,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC3C,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,EAAC,WAAiB,EAAC;QACvC,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QAC/C,IAAA,CAAA,SAAS,GAAG,iBAAiB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;AAEnE;;;AAGG;QACM,IAAA,CAAA,SAAS,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAsB;AAE/B,QAAA,IAAA,CAAA,kBAAkB,GAAG,YAAY,CAAC,IAAI,CAAC,SAAS,yFAAC;AAEjD,QAAA,IAAA,CAAA,gBAAgB,GAAG,QAAQ,CAAqB,MAAK;AAClE,YAAA,MAAM,QAAQ,GAAG,sBAAsB,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC;YACjF,OAAO,QAAQ,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,IAAI;AAClD,QAAA,CAAC,uFAAC;;AAGe,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAS,EAAE,mFAAC;QAC1C,IAAA,CAAA,OAAO,GAAiC,IAAI;AAGhD,QAAA,MAAM,OAAO,GAAG,IAAI,eAAe,CAAC;AAChC,YAAA,OAAO,EAAE,MAAM,CAAC,oBAAoB,CAAC,CAAC,OAAO;YAC7C,SAAS,EAAE,IAAI,CAAC,SAAS;AACzB,YAAA,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC;AAC1B,YAAA,SAAS,EAAE,MAAM,IAAI,CAAC,SAAS,EAAE;AACjC,YAAA,WAAW,EAAE,MAAM,IAAI,CAAC,WAAW;AACtC,SAAA,CAAC;;;QAIF,MAAM,CAAC,MAAK;AACR,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,EAAE;AACzC,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE;YACjC,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,SAAS,EAAE;gBAC/B;YACJ;AACA,YAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AACtB,gBAAA,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC;YAC/B;AACJ,QAAA,CAAC,CAAC;AAEF,QAAA,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;IACzD;;AAGA,IAAA,YAAY,CAAC,SAA6B,EAAA;AACtC,QAAA,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC;IAC1C;IAEQ,SAAS,GAAA;AACb,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC;AACzE,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,SAAmB;AAClD,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC;;AAEhC,QAAA,OAAO,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,KAA0B,IAAI,YAAY,WAAW,CAAC;IACvF;IAEQ,WAAW,GAAA;;;AAGf,QAAA,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE;AACvB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;AACnB,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;IAC7B;8GAnES,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAjB,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAH7B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,UAAU,EAAE;AACf,iBAAA;;;ACpCD;;AAEG;;;;"}