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

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 (186) hide show
  1. package/fesm2022/radix-ng-primitives-accordion.mjs +105 -38
  2. package/fesm2022/radix-ng-primitives-accordion.mjs.map +1 -1
  3. package/fesm2022/radix-ng-primitives-alert-dialog.mjs +221 -129
  4. package/fesm2022/radix-ng-primitives-alert-dialog.mjs.map +1 -1
  5. package/fesm2022/radix-ng-primitives-arrow.mjs +20 -4
  6. package/fesm2022/radix-ng-primitives-arrow.mjs.map +1 -1
  7. package/fesm2022/radix-ng-primitives-aspect-ratio.mjs.map +1 -1
  8. package/fesm2022/radix-ng-primitives-avatar.mjs +54 -61
  9. package/fesm2022/radix-ng-primitives-avatar.mjs.map +1 -1
  10. package/fesm2022/radix-ng-primitives-button.mjs +123 -0
  11. package/fesm2022/radix-ng-primitives-button.mjs.map +1 -0
  12. package/fesm2022/radix-ng-primitives-calendar.mjs +95 -83
  13. package/fesm2022/radix-ng-primitives-calendar.mjs.map +1 -1
  14. package/fesm2022/radix-ng-primitives-checkbox.mjs +378 -54
  15. package/fesm2022/radix-ng-primitives-checkbox.mjs.map +1 -1
  16. package/fesm2022/radix-ng-primitives-collapsible.mjs +182 -81
  17. package/fesm2022/radix-ng-primitives-collapsible.mjs.map +1 -1
  18. package/fesm2022/radix-ng-primitives-collection.mjs +40 -57
  19. package/fesm2022/radix-ng-primitives-collection.mjs.map +1 -1
  20. package/fesm2022/radix-ng-primitives-config.mjs.map +1 -1
  21. package/fesm2022/radix-ng-primitives-context-menu.mjs +140 -424
  22. package/fesm2022/radix-ng-primitives-context-menu.mjs.map +1 -1
  23. package/fesm2022/radix-ng-primitives-core.mjs +845 -744
  24. package/fesm2022/radix-ng-primitives-core.mjs.map +1 -1
  25. package/fesm2022/radix-ng-primitives-cropper.mjs +288 -308
  26. package/fesm2022/radix-ng-primitives-cropper.mjs.map +1 -1
  27. package/fesm2022/radix-ng-primitives-date-field.mjs +104 -58
  28. package/fesm2022/radix-ng-primitives-date-field.mjs.map +1 -1
  29. package/fesm2022/radix-ng-primitives-dialog.mjs +655 -327
  30. package/fesm2022/radix-ng-primitives-dialog.mjs.map +1 -1
  31. package/fesm2022/radix-ng-primitives-dismissable-layer.mjs +70 -46
  32. package/fesm2022/radix-ng-primitives-dismissable-layer.mjs.map +1 -1
  33. package/fesm2022/radix-ng-primitives-drawer.mjs +960 -0
  34. package/fesm2022/radix-ng-primitives-drawer.mjs.map +1 -0
  35. package/fesm2022/radix-ng-primitives-editable.mjs +304 -23
  36. package/fesm2022/radix-ng-primitives-editable.mjs.map +1 -1
  37. package/fesm2022/radix-ng-primitives-field.mjs +363 -0
  38. package/fesm2022/radix-ng-primitives-field.mjs.map +1 -0
  39. package/fesm2022/radix-ng-primitives-fieldset.mjs +79 -0
  40. package/fesm2022/radix-ng-primitives-fieldset.mjs.map +1 -0
  41. package/fesm2022/radix-ng-primitives-focus-scope.mjs +23 -8
  42. package/fesm2022/radix-ng-primitives-focus-scope.mjs.map +1 -1
  43. package/fesm2022/radix-ng-primitives-input.mjs +172 -0
  44. package/fesm2022/radix-ng-primitives-input.mjs.map +1 -0
  45. package/fesm2022/radix-ng-primitives-label.mjs +6 -6
  46. package/fesm2022/radix-ng-primitives-label.mjs.map +1 -1
  47. package/fesm2022/radix-ng-primitives-menu.mjs +1907 -363
  48. package/fesm2022/radix-ng-primitives-menu.mjs.map +1 -1
  49. package/fesm2022/radix-ng-primitives-menubar.mjs +290 -162
  50. package/fesm2022/radix-ng-primitives-menubar.mjs.map +1 -1
  51. package/fesm2022/radix-ng-primitives-meter.mjs +271 -0
  52. package/fesm2022/radix-ng-primitives-meter.mjs.map +1 -0
  53. package/fesm2022/radix-ng-primitives-navigation-menu.mjs +1052 -1553
  54. package/fesm2022/radix-ng-primitives-navigation-menu.mjs.map +1 -1
  55. package/fesm2022/radix-ng-primitives-number-field.mjs +1102 -367
  56. package/fesm2022/radix-ng-primitives-number-field.mjs.map +1 -1
  57. package/fesm2022/radix-ng-primitives-pagination.mjs.map +1 -1
  58. package/fesm2022/radix-ng-primitives-popover.mjs +978 -989
  59. package/fesm2022/radix-ng-primitives-popover.mjs.map +1 -1
  60. package/fesm2022/radix-ng-primitives-popper.mjs +111 -44
  61. package/fesm2022/radix-ng-primitives-popper.mjs.map +1 -1
  62. package/fesm2022/radix-ng-primitives-portal.mjs +34 -10
  63. package/fesm2022/radix-ng-primitives-portal.mjs.map +1 -1
  64. package/fesm2022/radix-ng-primitives-presence.mjs +134 -246
  65. package/fesm2022/radix-ng-primitives-presence.mjs.map +1 -1
  66. package/fesm2022/radix-ng-primitives-preview-card.mjs +997 -0
  67. package/fesm2022/radix-ng-primitives-preview-card.mjs.map +1 -0
  68. package/fesm2022/radix-ng-primitives-progress.mjs +223 -84
  69. package/fesm2022/radix-ng-primitives-progress.mjs.map +1 -1
  70. package/fesm2022/radix-ng-primitives-radio.mjs +191 -51
  71. package/fesm2022/radix-ng-primitives-radio.mjs.map +1 -1
  72. package/fesm2022/radix-ng-primitives-roving-focus.mjs +96 -50
  73. package/fesm2022/radix-ng-primitives-roving-focus.mjs.map +1 -1
  74. package/fesm2022/radix-ng-primitives-scroll-area.mjs +923 -0
  75. package/fesm2022/radix-ng-primitives-scroll-area.mjs.map +1 -0
  76. package/fesm2022/radix-ng-primitives-select.mjs +791 -509
  77. package/fesm2022/radix-ng-primitives-select.mjs.map +1 -1
  78. package/fesm2022/radix-ng-primitives-separator.mjs +12 -35
  79. package/fesm2022/radix-ng-primitives-separator.mjs.map +1 -1
  80. package/fesm2022/radix-ng-primitives-slider.mjs +969 -717
  81. package/fesm2022/radix-ng-primitives-slider.mjs.map +1 -1
  82. package/fesm2022/radix-ng-primitives-stepper.mjs +15 -19
  83. package/fesm2022/radix-ng-primitives-stepper.mjs.map +1 -1
  84. package/fesm2022/radix-ng-primitives-switch.mjs +125 -113
  85. package/fesm2022/radix-ng-primitives-switch.mjs.map +1 -1
  86. package/fesm2022/radix-ng-primitives-tabs.mjs +390 -108
  87. package/fesm2022/radix-ng-primitives-tabs.mjs.map +1 -1
  88. package/fesm2022/radix-ng-primitives-time-field.mjs +55 -46
  89. package/fesm2022/radix-ng-primitives-time-field.mjs.map +1 -1
  90. package/fesm2022/radix-ng-primitives-toast.mjs +839 -0
  91. package/fesm2022/radix-ng-primitives-toast.mjs.map +1 -0
  92. package/fesm2022/radix-ng-primitives-toggle-group.mjs +121 -247
  93. package/fesm2022/radix-ng-primitives-toggle-group.mjs.map +1 -1
  94. package/fesm2022/radix-ng-primitives-toggle.mjs +98 -61
  95. package/fesm2022/radix-ng-primitives-toggle.mjs.map +1 -1
  96. package/fesm2022/radix-ng-primitives-toolbar.mjs +303 -92
  97. package/fesm2022/radix-ng-primitives-toolbar.mjs.map +1 -1
  98. package/fesm2022/radix-ng-primitives-tooltip.mjs +699 -1072
  99. package/fesm2022/radix-ng-primitives-tooltip.mjs.map +1 -1
  100. package/fesm2022/radix-ng-primitives-visually-hidden.mjs +25 -66
  101. package/fesm2022/radix-ng-primitives-visually-hidden.mjs.map +1 -1
  102. package/meter/README.md +3 -0
  103. package/navigation-menu/README.md +2 -1
  104. package/package.json +39 -18
  105. package/portal/README.md +2 -0
  106. package/preview-card/README.md +3 -0
  107. package/schematics/collection.json +1 -0
  108. package/schematics/ng-add/index.d.ts +3 -2
  109. package/schematics/ng-add/index.js +62 -31
  110. package/schematics/ng-add/index.js.map +1 -1
  111. package/schematics/ng-add/package-config.d.ts +4 -2
  112. package/schematics/ng-add/package-config.js +10 -2
  113. package/schematics/ng-add/package-config.js.map +1 -1
  114. package/schematics/ng-add/schema.d.ts +3 -0
  115. package/schematics/ng-add/schema.js +3 -0
  116. package/schematics/ng-add/schema.js.map +1 -0
  117. package/schematics/ng-add/schema.json +14 -0
  118. package/select/README.md +2 -0
  119. package/types/radix-ng-primitives-accordion.d.ts +51 -16
  120. package/types/radix-ng-primitives-alert-dialog.d.ts +95 -38
  121. package/types/radix-ng-primitives-arrow.d.ts +1 -1
  122. package/types/radix-ng-primitives-aspect-ratio.d.ts +1 -1
  123. package/types/radix-ng-primitives-avatar.d.ts +7 -11
  124. package/types/radix-ng-primitives-button.d.ts +73 -0
  125. package/types/radix-ng-primitives-calendar.d.ts +39 -20
  126. package/types/radix-ng-primitives-checkbox.d.ts +204 -35
  127. package/types/radix-ng-primitives-collapsible.d.ts +114 -40
  128. package/types/radix-ng-primitives-collection.d.ts +38 -34
  129. package/types/radix-ng-primitives-config.d.ts +1 -1
  130. package/types/radix-ng-primitives-context-menu.d.ts +61 -116
  131. package/types/radix-ng-primitives-core.d.ts +345 -235
  132. package/types/radix-ng-primitives-cropper.d.ts +89 -56
  133. package/types/radix-ng-primitives-date-field.d.ts +49 -28
  134. package/types/radix-ng-primitives-dialog.d.ts +283 -165
  135. package/types/radix-ng-primitives-dismissable-layer.d.ts +15 -7
  136. package/types/radix-ng-primitives-drawer.d.ts +426 -0
  137. package/types/radix-ng-primitives-editable.d.ts +91 -14
  138. package/types/radix-ng-primitives-field.d.ts +374 -0
  139. package/types/radix-ng-primitives-fieldset.d.ts +49 -0
  140. package/types/radix-ng-primitives-focus-scope.d.ts +15 -6
  141. package/types/radix-ng-primitives-input.d.ts +87 -0
  142. package/types/radix-ng-primitives-label.d.ts +0 -1
  143. package/types/radix-ng-primitives-menu.d.ts +584 -99
  144. package/types/radix-ng-primitives-menubar.d.ts +61 -50
  145. package/types/radix-ng-primitives-meter.d.ts +194 -0
  146. package/types/radix-ng-primitives-navigation-menu.d.ts +422 -340
  147. package/types/radix-ng-primitives-number-field.d.ts +405 -145
  148. package/types/radix-ng-primitives-pagination.d.ts +2 -2
  149. package/types/radix-ng-primitives-popover.d.ts +366 -351
  150. package/types/radix-ng-primitives-popper.d.ts +68 -11
  151. package/types/radix-ng-primitives-portal.d.ts +14 -6
  152. package/types/radix-ng-primitives-presence.d.ts +28 -76
  153. package/types/radix-ng-primitives-preview-card.d.ts +359 -0
  154. package/types/radix-ng-primitives-progress.d.ts +175 -48
  155. package/types/radix-ng-primitives-radio.d.ts +55 -25
  156. package/types/radix-ng-primitives-roving-focus.d.ts +33 -23
  157. package/types/radix-ng-primitives-scroll-area.d.ts +253 -0
  158. package/types/radix-ng-primitives-select.d.ts +475 -177
  159. package/types/radix-ng-primitives-separator.d.ts +7 -32
  160. package/types/radix-ng-primitives-slider.d.ts +315 -201
  161. package/types/radix-ng-primitives-stepper.d.ts +5 -7
  162. package/types/radix-ng-primitives-switch.d.ts +86 -71
  163. package/types/radix-ng-primitives-tabs.d.ts +213 -79
  164. package/types/radix-ng-primitives-time-field.d.ts +42 -27
  165. package/types/radix-ng-primitives-toast.d.ts +378 -0
  166. package/types/radix-ng-primitives-toggle-group.d.ts +86 -164
  167. package/types/radix-ng-primitives-toggle.d.ts +43 -53
  168. package/types/radix-ng-primitives-toolbar.d.ts +164 -38
  169. package/types/radix-ng-primitives-tooltip.d.ts +348 -384
  170. package/types/radix-ng-primitives-visually-hidden.d.ts +19 -19
  171. package/dropdown-menu/README.md +0 -1
  172. package/fesm2022/radix-ng-primitives-dropdown-menu.mjs +0 -581
  173. package/fesm2022/radix-ng-primitives-dropdown-menu.mjs.map +0 -1
  174. package/fesm2022/radix-ng-primitives-hover-card.mjs +0 -1238
  175. package/fesm2022/radix-ng-primitives-hover-card.mjs.map +0 -1
  176. package/fesm2022/radix-ng-primitives-select2.mjs +0 -897
  177. package/fesm2022/radix-ng-primitives-select2.mjs.map +0 -1
  178. package/fesm2022/radix-ng-primitives-tooltip2.mjs +0 -735
  179. package/fesm2022/radix-ng-primitives-tooltip2.mjs.map +0 -1
  180. package/hover-card/README.md +0 -3
  181. package/select2/README.md +0 -3
  182. package/tooltip2/README.md +0 -3
  183. package/types/radix-ng-primitives-dropdown-menu.d.ts +0 -171
  184. package/types/radix-ng-primitives-hover-card.d.ts +0 -471
  185. package/types/radix-ng-primitives-select2.d.ts +0 -511
  186. package/types/radix-ng-primitives-tooltip2.d.ts +0 -325
@@ -1,7 +1,8 @@
1
1
  import * as _angular_core from '@angular/core';
2
- import { ElementRef } from '@angular/core';
3
- import { NumberInput, BooleanInput } from '@angular/cdk/coercion';
4
- import { Middleware, Placement } from '@floating-ui/dom';
2
+ import { ElementRef, InjectionToken, Provider } from '@angular/core';
3
+ import { ReferenceElement, Placement, Middleware, VirtualElement } from '@floating-ui/dom';
4
+ import * as _radix_ng_primitives_core from '@radix-ng/primitives/core';
5
+ import { NumberInput, BooleanInput } from '@radix-ng/primitives/core';
5
6
 
6
7
  declare class RdxPopperAnchor {
7
8
  readonly elementRef: ElementRef<HTMLElement>;
@@ -10,7 +11,8 @@ declare class RdxPopperAnchor {
10
11
  }
11
12
 
12
13
  declare class RdxPopper {
13
- readonly anchor: _angular_core.Signal<RdxPopperAnchor>;
14
+ readonly anchor: _angular_core.Signal<RdxPopperAnchor | undefined>;
15
+ readonly anchorOverride: _angular_core.WritableSignal<ReferenceElement | undefined>;
14
16
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdxPopper, never>;
15
17
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxPopper, "[rdxPopperRoot]", never, {}, {}, ["anchor"], never, true, never>;
16
18
  }
@@ -23,6 +25,7 @@ declare class RdxPopperContent {
23
25
  arrowY: _angular_core.Signal<number | undefined>;
24
26
  shouldHideArrow: _angular_core.Signal<boolean>;
25
27
  isPositioned: _angular_core.Signal<boolean>;
28
+ anchorHidden: _angular_core.Signal<boolean>;
26
29
  };
27
30
  /**
28
31
  * if the PopperContent hasn't been placed yet (not all measurements done)
@@ -46,6 +49,7 @@ declare function transformOrigin(options: {
46
49
  }): Middleware;
47
50
  declare function getSideAndAlignFromPlacement(placement: Placement): readonly ["top" | "right" | "bottom" | "left", "start" | "center" | "end"];
48
51
 
52
+ type RdxPopperAnchorElement = Element | ElementRef<Element> | VirtualElement | (() => Element | VirtualElement | null) | null | undefined;
49
53
  declare const context: () => {
50
54
  placedSide: _angular_core.Signal<"top" | "right" | "bottom" | "left" | undefined>;
51
55
  placedAlign: _angular_core.Signal<"start" | "center" | "end" | undefined>;
@@ -53,16 +57,18 @@ declare const context: () => {
53
57
  arrowY: _angular_core.Signal<number | undefined>;
54
58
  shouldHideArrow: _angular_core.Signal<boolean>;
55
59
  isPositioned: _angular_core.Signal<boolean>;
60
+ anchorHidden: _angular_core.Signal<boolean>;
56
61
  };
57
62
  type PopperContentWrapperContext = ReturnType<typeof context>;
58
- declare const injectPopperContentWrapperContext: (optional?: boolean) => {
63
+ declare const injectPopperContentWrapperContext: _radix_ng_primitives_core.InjectContext<{
59
64
  placedSide: _angular_core.Signal<"top" | "right" | "bottom" | "left" | undefined>;
60
65
  placedAlign: _angular_core.Signal<"start" | "center" | "end" | undefined>;
61
66
  arrowX: _angular_core.Signal<number | undefined>;
62
67
  arrowY: _angular_core.Signal<number | undefined>;
63
68
  shouldHideArrow: _angular_core.Signal<boolean>;
64
69
  isPositioned: _angular_core.Signal<boolean>;
65
- } | null;
70
+ anchorHidden: _angular_core.Signal<boolean>;
71
+ }>;
66
72
  declare const providePopperContentWrapperContext: (useFactory: () => {
67
73
  placedSide: _angular_core.Signal<"top" | "right" | "bottom" | "left" | undefined>;
68
74
  placedAlign: _angular_core.Signal<"start" | "center" | "end" | undefined>;
@@ -70,13 +76,19 @@ declare const providePopperContentWrapperContext: (useFactory: () => {
70
76
  arrowY: _angular_core.Signal<number | undefined>;
71
77
  shouldHideArrow: _angular_core.Signal<boolean>;
72
78
  isPositioned: _angular_core.Signal<boolean>;
79
+ anchorHidden: _angular_core.Signal<boolean>;
73
80
  }) => _angular_core.Provider;
74
81
  declare class RdxPopperContentWrapper {
75
82
  private readonly elementRef;
76
- private readonly destroyRef;
77
83
  private readonly injector;
78
84
  private readonly context;
79
85
  private readonly isBrowser;
86
+ /** Optional positioning defaults provided by a composing primitive (e.g. tooltip). */
87
+ private readonly config;
88
+ /**
89
+ * An element to position the popup against. Defaults to the popper anchor.
90
+ */
91
+ readonly anchor: _angular_core.InputSignal<RdxPopperAnchorElement>;
80
92
  /**
81
93
  * The preferred side of the anchor to render against when open.
82
94
  * Will be reversed when collisions occur and avoidCollisions is enabled.
@@ -133,15 +145,35 @@ declare class RdxPopperContentWrapper {
133
145
  */
134
146
  readonly placed: _angular_core.OutputEmitterRef<void>;
135
147
  readonly arrow: _angular_core.Signal<any>;
148
+ /**
149
+ * When `true`, the content is rendered click/hover-through (`pointer-events: none`). Used for
150
+ * cursor-following content (e.g. a tooltip tracking the pointer) that must never intercept the
151
+ * pointer and steal hover from its trigger.
152
+ */
153
+ readonly nonInteractive: _angular_core.WritableSignal<boolean>;
136
154
  readonly shouldHideArrow: _angular_core.Signal<boolean>;
155
+ /** Whether the arrow could not be centered on the anchor because the popup was shifted. */
156
+ readonly arrowUncentered: _angular_core.Signal<boolean>;
137
157
  readonly arrowX: _angular_core.Signal<number | undefined>;
138
158
  readonly arrowY: _angular_core.Signal<number | undefined>;
159
+ readonly anchorHidden: _angular_core.Signal<boolean>;
139
160
  private readonly desiredPlacement;
140
161
  private readonly arrowSize;
141
162
  private readonly boundary;
142
163
  private readonly hasExplicitBoundaries;
143
164
  private readonly detectOverflowOptions;
165
+ private readonly resolvedAnchor;
144
166
  private readonly position;
167
+ /**
168
+ * The last successfully computed position, retained while a new one is being computed.
169
+ *
170
+ * The `position` resource resets `value()` to `undefined` whenever its params change (e.g. on
171
+ * every pointer move while a tooltip tracks the cursor). Reading it directly would blank the
172
+ * popup (`visibility: hidden` + off-screen transform) for the frames between a move and the next
173
+ * resolved position — a visible flicker at high pointer-move rates. Holding the previous value
174
+ * keeps the popup placed and visible until the new position is ready.
175
+ */
176
+ private readonly resolvedPosition;
145
177
  /**
146
178
  * Whether the panel is positioned.
147
179
  */
@@ -173,11 +205,13 @@ declare class RdxPopperContentWrapper {
173
205
  top: string;
174
206
  left: string;
175
207
  '--radix-popper-transform-origin': string;
208
+ '--radix-popper-content-wrapper-width': string;
209
+ '--radix-popper-content-wrapper-height': string;
176
210
  }>;
177
- private readonly afterNextRender;
211
+ private readonly afterRenderEffect;
178
212
  constructor();
179
213
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdxPopperContentWrapper, never>;
180
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxPopperContentWrapper, "[rdxPopperContentWrapper]", never, { "side": { "alias": "side"; "required": false; "isSignal": true; }; "sideOffset": { "alias": "sideOffset"; "required": false; "isSignal": true; }; "align": { "alias": "align"; "required": false; "isSignal": true; }; "alignOffset": { "alias": "alignOffset"; "required": false; "isSignal": true; }; "arrowPadding": { "alias": "arrowPadding"; "required": false; "isSignal": true; }; "avoidCollisions": { "alias": "avoidCollisions"; "required": false; "isSignal": true; }; "collisionBoundary": { "alias": "collisionBoundary"; "required": false; "isSignal": true; }; "collisionPadding": { "alias": "collisionPadding"; "required": false; "isSignal": true; }; "sticky": { "alias": "sticky"; "required": false; "isSignal": true; }; "hideWhenDetached": { "alias": "hideWhenDetached"; "required": false; "isSignal": true; }; "positionStrategy": { "alias": "positionStrategy"; "required": false; "isSignal": true; }; "updatePositionStrategy": { "alias": "updatePositionStrategy"; "required": false; "isSignal": true; }; }, { "placed": "placed"; }, ["arrow", "contentElementRef"], never, true, never>;
214
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxPopperContentWrapper, "[rdxPopperContentWrapper]", never, { "anchor": { "alias": "anchor"; "required": false; "isSignal": true; }; "side": { "alias": "side"; "required": false; "isSignal": true; }; "sideOffset": { "alias": "sideOffset"; "required": false; "isSignal": true; }; "align": { "alias": "align"; "required": false; "isSignal": true; }; "alignOffset": { "alias": "alignOffset"; "required": false; "isSignal": true; }; "arrowPadding": { "alias": "arrowPadding"; "required": false; "isSignal": true; }; "avoidCollisions": { "alias": "avoidCollisions"; "required": false; "isSignal": true; }; "collisionBoundary": { "alias": "collisionBoundary"; "required": false; "isSignal": true; }; "collisionPadding": { "alias": "collisionPadding"; "required": false; "isSignal": true; }; "sticky": { "alias": "sticky"; "required": false; "isSignal": true; }; "hideWhenDetached": { "alias": "hideWhenDetached"; "required": false; "isSignal": true; }; "positionStrategy": { "alias": "positionStrategy"; "required": false; "isSignal": true; }; "updatePositionStrategy": { "alias": "updatePositionStrategy"; "required": false; "isSignal": true; }; }, { "placed": "placed"; }, ["arrow", "contentElementRef"], never, true, never>;
181
215
  }
182
216
 
183
217
  declare class RdxPopperArrow {
@@ -201,7 +235,30 @@ declare class RdxPopperArrow {
201
235
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxPopperArrow, "[rdxPopperArrow]", never, { "width": { "alias": "width"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
202
236
  }
203
237
 
238
+ /**
239
+ * Default positioning values for `RdxPopperContentWrapper`.
240
+ *
241
+ * Lets a composing primitive (e.g. tooltip) provide its own Base UI-aligned defaults without
242
+ * changing the shared popper defaults that other consumers (e.g. popover) rely on. Any value left
243
+ * `undefined` falls back to the wrapper's built-in default. Consumer template bindings always win.
244
+ */
245
+ interface RdxPopperContentConfig {
246
+ side?: Side;
247
+ align?: Align;
248
+ sideOffset?: number;
249
+ alignOffset?: number;
250
+ arrowPadding?: number;
251
+ avoidCollisions?: boolean;
252
+ collisionPadding?: number | Partial<Record<Side, number>>;
253
+ sticky?: 'partial' | 'always';
254
+ hideWhenDetached?: boolean;
255
+ positionStrategy?: 'fixed' | 'absolute';
256
+ updatePositionStrategy?: 'optimized' | 'always';
257
+ }
258
+ declare const RdxPopperContentConfigToken: InjectionToken<RdxPopperContentConfig>;
259
+ declare function provideRdxPopperContentConfig(config: RdxPopperContentConfig): Provider;
260
+
204
261
  declare const popperImports: (typeof RdxPopperAnchor | typeof RdxPopper | typeof RdxPopperContent | typeof RdxPopperContentWrapper)[];
205
262
 
206
- export { RdxPopper, RdxPopperAnchor, RdxPopperArrow, RdxPopperContent, RdxPopperContentWrapper, getSideAndAlignFromPlacement, injectPopperContentWrapperContext, isNotNull, popperImports, providePopperContentWrapperContext, transformOrigin };
207
- export type { Align, PopperContentWrapperContext, Side };
263
+ export { RdxPopper, RdxPopperAnchor, RdxPopperArrow, RdxPopperContent, RdxPopperContentConfigToken, RdxPopperContentWrapper, getSideAndAlignFromPlacement, injectPopperContentWrapperContext, isNotNull, popperImports, providePopperContentWrapperContext, provideRdxPopperContentConfig, transformOrigin };
264
+ export type { Align, PopperContentWrapperContext, RdxPopperAnchorElement, RdxPopperContentConfig, Side };
@@ -1,22 +1,30 @@
1
1
  import * as _angular_core from '@angular/core';
2
2
  import { ElementRef } from '@angular/core';
3
3
 
4
+ /**
5
+ * A target container for the portal. Accepts an `ElementRef`, a native element, or a CSS selector
6
+ * resolved against the document.
7
+ */
8
+ type RdxPortalContainer = ElementRef<HTMLElement> | HTMLElement | string;
4
9
  declare class RdxPortal {
5
10
  private readonly elementRef;
6
11
  private readonly platformId;
7
12
  private readonly document;
8
13
  private readonly destroyRef;
9
14
  /**
10
- * Specify a container element to portal the content into.
15
+ * Specify a container to portal the content into. Can be an `ElementRef`, a native element, or a
16
+ * CSS selector. Defaults to `document.body` when not set (or when a selector matches nothing).
11
17
  */
12
- readonly container: _angular_core.InputSignal<ElementRef<HTMLElement> | undefined>;
13
- private _computedContainer;
14
- readonly computedContainer: _angular_core.WritableSignal<ElementRef<HTMLElement> | undefined>;
18
+ readonly container: _angular_core.InputSignal<RdxPortalContainer | undefined>;
19
+ private readonly _computedContainer;
20
+ readonly computedContainer: _angular_core.Signal<RdxPortalContainer | undefined>;
15
21
  private readonly elementContainer;
16
22
  constructor();
17
- setContainer(container: ElementRef<HTMLElement>): void;
23
+ setContainer(container: RdxPortalContainer): void;
24
+ private resolveContainer;
18
25
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdxPortal, never>;
19
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxPortal, "[rdxPortal]", never, { "container": { "alias": "container"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
26
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxPortal, "[rdxPortal]", ["rdxPortal"], { "container": { "alias": "container"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
20
27
  }
21
28
 
22
29
  export { RdxPortal };
30
+ export type { RdxPortalContainer };
@@ -1,59 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { NgZone, Signal, InjectionToken, Provider } from '@angular/core';
3
- import { Subject, Observable } from 'rxjs';
4
-
5
- type TransitionOptions<T> = {
6
- context?: T;
7
- animation: boolean;
8
- state?: 'continue' | 'stop';
9
- transitionTimerDelayMs?: number;
10
- };
11
- type TransitionContext<T> = {
12
- transition$: Subject<any>;
13
- complete: () => void;
14
- context: T;
15
- };
16
- type TransitionStartFn<T = any> = (element: HTMLElement, animation: boolean, context: T) => TransitionEndFn | void;
17
- type TransitionEndFn = () => void;
18
-
19
- /**
20
- * Manages the presence of an element with optional transition animation.
21
- *
22
- * @template T - The type of the context object used in the transition.
23
- * @param {NgZone} zone - The Angular zone to control the change detection context.
24
- * @param {HTMLElement} element - The target HTML element to apply the transition.
25
- * @param {TransitionOptions<T>} options - Options for controlling the transition behavior.
26
- * @param {T} [options.context] - An optional context object to pass through the transition.
27
- * @param {boolean} options.animation - A flag indicating if the transition should be animated.
28
- * @param {'start' | 'continue' | 'stop'} options.state - The desired state of the transition.
29
- * @param {TransitionStartFn<T>} startFn - A function to start the transition.
30
- * @returns {Observable<void>} - An observable that emits when the transition completes.
31
- *
32
- * The `usePresence` function is designed to manage the presence and visibility of an HTML element,
33
- * optionally applying a transition animation. It utilizes Angular's NgZone for efficient change
34
- * detection management and allows for different states of transitions ('start', 'continue', 'stop').
35
- * The function takes a start function to handle the beginning of the transition and returns an
36
- * observable that completes when the transition ends.
37
- *
38
- * Example usage:
39
- *
40
- * const options: TransitionOptions<MyContext> = {
41
- * context: {}, // your context object
42
- * animation: true,
43
- * state: 'start'
44
- * };
45
- *
46
- * const startFn: TransitionStartFn<MyContext> = (el, animation, context) => {
47
- * el.classList.add('active');
48
- * return () => el.classList.remove('active');
49
- * };
50
- *
51
- * usePresence(zone, element, startFn, options).subscribe(() => {
52
- * console.log('Transition completed');
53
- * });
54
- */
55
- declare const usePresence: <T>(zone: NgZone, element: HTMLElement, startFn: TransitionStartFn<T>, options: TransitionOptions<T>) => Observable<void>;
56
- declare const completeTransition: (element: HTMLElement) => void;
2
+ import { InjectionToken, Signal, Provider } from '@angular/core';
57
3
 
58
4
  /**
59
5
  * Context interface for RdxPresence directive
@@ -72,32 +18,38 @@ declare const RDX_PRESENCE_CONTEXT: InjectionToken<RdxPresenceContext>;
72
18
  * ]
73
19
  */
74
20
  declare function provideRdxPresenceContext(contextFactory: () => RdxPresenceContext): Provider;
21
+ /**
22
+ * Headless structural directive that conditionally renders its template based on a reactive
23
+ * `present` signal supplied through {@link RDX_PRESENCE_CONTEXT}.
24
+ *
25
+ * Unlike a plain `*ngIf`, it keeps the content mounted while a CSS exit animation
26
+ * (`@keyframes` applied for the closed state) is running, and unmounts it only once that
27
+ * animation finishes. If the content has no exit animation, it unmounts immediately.
28
+ */
75
29
  declare class RdxPresenceDirective {
76
30
  private readonly context;
77
31
  private readonly viewContainerRef;
78
32
  private readonly templateRef;
79
- private effectRef;
33
+ private readonly injector;
34
+ private readonly isBrowser;
35
+ private viewRef;
36
+ private node;
37
+ private removeListeners;
38
+ private state;
39
+ private prevPresent;
40
+ private prevAnimationName;
41
+ constructor();
42
+ /** Decides whether to suspend the unmount for an exit animation (port of Radix' logic). */
43
+ private evaluateExit;
44
+ private send;
45
+ private mountView;
46
+ private destroyView;
47
+ private addAnimationListeners;
48
+ private getComputedStyles;
49
+ private getAnimationName;
80
50
  static ɵfac: i0.ɵɵFactoryDeclaration<RdxPresenceDirective, never>;
81
51
  static ɵdir: i0.ɵɵDirectiveDeclaration<RdxPresenceDirective, never, never, {}, {}, never, never, true, never>;
82
52
  }
83
53
 
84
- type CollapseContext = {
85
- direction: 'show' | 'hide';
86
- dimension: 'width' | 'height';
87
- maxSize?: string;
88
- };
89
- /**
90
- * Function to handle the start of a collapsing transition.
91
- *
92
- * @param element - The HTML element to animate.
93
- * @param animation - Whether to use animation or not.
94
- * @param context - The context containing direction and dimension information.
95
- * @returns A function to clean up the animation.
96
- */
97
- declare const transitionCollapsing: TransitionStartFn<CollapseContext>;
98
-
99
- declare const toastFadeInTransition: TransitionStartFn;
100
- declare const toastFadeOutTransition: TransitionStartFn;
101
-
102
- export { RDX_PRESENCE_CONTEXT, RdxPresenceDirective, completeTransition, provideRdxPresenceContext, toastFadeInTransition, toastFadeOutTransition, transitionCollapsing, usePresence };
103
- export type { CollapseContext, RdxPresenceContext, TransitionContext, TransitionEndFn, TransitionOptions, TransitionStartFn };
54
+ export { RDX_PRESENCE_CONTEXT, RdxPresenceDirective, provideRdxPresenceContext };
55
+ export type { RdxPresenceContext };