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

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 (97) hide show
  1. package/README.md +1 -1
  2. package/fesm2022/radix-ng-primitives-accordion.mjs +5 -3
  3. package/fesm2022/radix-ng-primitives-accordion.mjs.map +1 -1
  4. package/fesm2022/radix-ng-primitives-alert-dialog.mjs +3 -2
  5. package/fesm2022/radix-ng-primitives-alert-dialog.mjs.map +1 -1
  6. package/fesm2022/radix-ng-primitives-autocomplete.mjs +617 -659
  7. package/fesm2022/radix-ng-primitives-autocomplete.mjs.map +1 -1
  8. package/fesm2022/radix-ng-primitives-calendar.mjs +5 -3
  9. package/fesm2022/radix-ng-primitives-calendar.mjs.map +1 -1
  10. package/fesm2022/radix-ng-primitives-combobox.mjs +1305 -572
  11. package/fesm2022/radix-ng-primitives-combobox.mjs.map +1 -1
  12. package/fesm2022/radix-ng-primitives-config.mjs +13 -4
  13. package/fesm2022/radix-ng-primitives-config.mjs.map +1 -1
  14. package/fesm2022/radix-ng-primitives-context-menu.mjs +51 -10
  15. package/fesm2022/radix-ng-primitives-context-menu.mjs.map +1 -1
  16. package/fesm2022/radix-ng-primitives-core.mjs +1345 -64
  17. package/fesm2022/radix-ng-primitives-core.mjs.map +1 -1
  18. package/fesm2022/radix-ng-primitives-date-field.mjs +5 -3
  19. package/fesm2022/radix-ng-primitives-date-field.mjs.map +1 -1
  20. package/fesm2022/radix-ng-primitives-dialog.mjs +240 -112
  21. package/fesm2022/radix-ng-primitives-dialog.mjs.map +1 -1
  22. package/fesm2022/radix-ng-primitives-direction-provider.mjs +70 -0
  23. package/fesm2022/radix-ng-primitives-direction-provider.mjs.map +1 -0
  24. package/fesm2022/radix-ng-primitives-dismissable-layer.mjs +519 -184
  25. package/fesm2022/radix-ng-primitives-dismissable-layer.mjs.map +1 -1
  26. package/fesm2022/radix-ng-primitives-drawer.mjs +3 -3
  27. package/fesm2022/radix-ng-primitives-drawer.mjs.map +1 -1
  28. package/fesm2022/radix-ng-primitives-field.mjs +3 -2
  29. package/fesm2022/radix-ng-primitives-field.mjs.map +1 -1
  30. package/fesm2022/radix-ng-primitives-floating-focus-manager.mjs +517 -0
  31. package/fesm2022/radix-ng-primitives-floating-focus-manager.mjs.map +1 -0
  32. package/fesm2022/radix-ng-primitives-focus-scope.mjs +296 -70
  33. package/fesm2022/radix-ng-primitives-focus-scope.mjs.map +1 -1
  34. package/fesm2022/radix-ng-primitives-menu.mjs +861 -286
  35. package/fesm2022/radix-ng-primitives-menu.mjs.map +1 -1
  36. package/fesm2022/radix-ng-primitives-menubar.mjs +32 -4
  37. package/fesm2022/radix-ng-primitives-menubar.mjs.map +1 -1
  38. package/fesm2022/radix-ng-primitives-navigation-menu.mjs +144 -159
  39. package/fesm2022/radix-ng-primitives-navigation-menu.mjs.map +1 -1
  40. package/fesm2022/radix-ng-primitives-popover.mjs +220 -205
  41. package/fesm2022/radix-ng-primitives-popover.mjs.map +1 -1
  42. package/fesm2022/radix-ng-primitives-popper.mjs +94 -51
  43. package/fesm2022/radix-ng-primitives-popper.mjs.map +1 -1
  44. package/fesm2022/radix-ng-primitives-presence.mjs +1 -1
  45. package/fesm2022/radix-ng-primitives-presence.mjs.map +1 -1
  46. package/fesm2022/radix-ng-primitives-preview-card.mjs +141 -173
  47. package/fesm2022/radix-ng-primitives-preview-card.mjs.map +1 -1
  48. package/fesm2022/radix-ng-primitives-roving-focus.mjs +4 -2
  49. package/fesm2022/radix-ng-primitives-roving-focus.mjs.map +1 -1
  50. package/fesm2022/radix-ng-primitives-scroll-area.mjs +5 -4
  51. package/fesm2022/radix-ng-primitives-scroll-area.mjs.map +1 -1
  52. package/fesm2022/radix-ng-primitives-select.mjs +211 -156
  53. package/fesm2022/radix-ng-primitives-select.mjs.map +1 -1
  54. package/fesm2022/radix-ng-primitives-slider.mjs +5 -3
  55. package/fesm2022/radix-ng-primitives-slider.mjs.map +1 -1
  56. package/fesm2022/radix-ng-primitives-stepper.mjs +5 -3
  57. package/fesm2022/radix-ng-primitives-stepper.mjs.map +1 -1
  58. package/fesm2022/radix-ng-primitives-time-field.mjs +5 -3
  59. package/fesm2022/radix-ng-primitives-time-field.mjs.map +1 -1
  60. package/fesm2022/radix-ng-primitives-toast.mjs +15 -36
  61. package/fesm2022/radix-ng-primitives-toast.mjs.map +1 -1
  62. package/fesm2022/radix-ng-primitives-toggle-group.mjs +5 -3
  63. package/fesm2022/radix-ng-primitives-toggle-group.mjs.map +1 -1
  64. package/fesm2022/radix-ng-primitives-toolbar.mjs +5 -3
  65. package/fesm2022/radix-ng-primitives-toolbar.mjs.map +1 -1
  66. package/fesm2022/radix-ng-primitives-tooltip.mjs +73 -110
  67. package/fesm2022/radix-ng-primitives-tooltip.mjs.map +1 -1
  68. package/package.json +10 -1
  69. package/types/radix-ng-primitives-accordion.d.ts +4 -3
  70. package/types/radix-ng-primitives-autocomplete.d.ts +217 -152
  71. package/types/radix-ng-primitives-calendar.d.ts +5 -3
  72. package/types/radix-ng-primitives-combobox.d.ts +672 -283
  73. package/types/radix-ng-primitives-config.d.ts +1 -1
  74. package/types/radix-ng-primitives-context-menu.d.ts +15 -5
  75. package/types/radix-ng-primitives-core.d.ts +762 -14
  76. package/types/radix-ng-primitives-date-field.d.ts +3 -2
  77. package/types/radix-ng-primitives-dialog.d.ts +77 -32
  78. package/types/radix-ng-primitives-direction-provider.d.ts +41 -0
  79. package/types/radix-ng-primitives-dismissable-layer.d.ts +147 -99
  80. package/types/radix-ng-primitives-field.d.ts +1 -0
  81. package/types/radix-ng-primitives-floating-focus-manager.d.ts +175 -0
  82. package/types/radix-ng-primitives-focus-scope.d.ts +132 -1
  83. package/types/radix-ng-primitives-menu.d.ts +186 -103
  84. package/types/radix-ng-primitives-navigation-menu.d.ts +37 -75
  85. package/types/radix-ng-primitives-popover.d.ts +59 -92
  86. package/types/radix-ng-primitives-popper.d.ts +39 -9
  87. package/types/radix-ng-primitives-preview-card.d.ts +39 -72
  88. package/types/radix-ng-primitives-roving-focus.d.ts +7 -6
  89. package/types/radix-ng-primitives-scroll-area.d.ts +2 -2
  90. package/types/radix-ng-primitives-select.d.ts +145 -108
  91. package/types/radix-ng-primitives-slider.d.ts +5 -4
  92. package/types/radix-ng-primitives-stepper.d.ts +4 -3
  93. package/types/radix-ng-primitives-time-field.d.ts +3 -2
  94. package/types/radix-ng-primitives-toast.d.ts +7 -7
  95. package/types/radix-ng-primitives-toggle-group.d.ts +5 -4
  96. package/types/radix-ng-primitives-toolbar.d.ts +3 -2
  97. package/types/radix-ng-primitives-tooltip.d.ts +24 -67
@@ -1,14 +1,17 @@
1
1
  import * as _angular_core from '@angular/core';
2
- import { InjectionToken, OutputRef, ElementRef } from '@angular/core';
2
+ import { InjectionToken, OutputRef, Signal, ElementRef } from '@angular/core';
3
3
  import * as _radix_ng_primitives_core from '@radix-ng/primitives/core';
4
- import { AcceptableValue, Direction, ItemValueComparator } from '@radix-ng/primitives/core';
4
+ import { AcceptableValue, RdxFloatingRootContext, Direction, ItemValueComparator } from '@radix-ng/primitives/core';
5
5
  import * as _radix_ng_primitives_select from '@radix-ng/primitives/select';
6
+ import * as _radix_ng_primitives_types_radix_ng_primitives_floating_focus_manager from '@radix-ng/primitives/types/radix-ng-primitives-floating-focus-manager';
6
7
  import * as i1 from '@radix-ng/primitives/collection';
7
8
  import { RdxCollectionItem } from '@radix-ng/primitives/collection';
9
+ import { RdxOutsidePressDomEvent } from '@radix-ng/primitives/dismissable-layer';
8
10
  import * as i1$1 from '@radix-ng/primitives/popper';
11
+ import { RdxPopperContentWrapper } from '@radix-ng/primitives/popper';
9
12
  import * as i2 from '@radix-ng/primitives/focus-scope';
10
- import * as i3 from '@radix-ng/primitives/dismissable-layer';
11
13
  import * as _radix_ng_primitives_types_radix_ng_primitives_core from '@radix-ng/primitives/types/radix-ng-primitives-core';
14
+ import { RdxInteractionType } from '@radix-ng/primitives/floating-focus-manager';
12
15
  import * as _radix_ng_primitives_types_radix_ng_primitives_collection from '@radix-ng/primitives/types/radix-ng-primitives-collection';
13
16
  import * as i1$2 from '@radix-ng/primitives/portal';
14
17
 
@@ -32,12 +35,16 @@ declare class RdxSelectBackdrop {
32
35
  y: number;
33
36
  } | null>;
34
37
  contentId: string;
35
- dir: _angular_core.InputSignal<_radix_ng_primitives_types_radix_ng_primitives_core.Direction>;
38
+ dir: _angular_core.Signal<_radix_ng_primitives_types_radix_ng_primitives_core.Direction>;
36
39
  value: _angular_core.ModelSignal<_radix_ng_primitives_types_radix_ng_primitives_core.AcceptableValue | _radix_ng_primitives_types_radix_ng_primitives_core.AcceptableValue[] | undefined>;
37
40
  multiple: _angular_core.InputSignalWithTransform<boolean, unknown>;
38
41
  isItemEqualToValue: _angular_core.InputSignal<_radix_ng_primitives_types_radix_ng_primitives_core.ItemValueComparator<_radix_ng_primitives_types_radix_ng_primitives_core.AcceptableValue> | undefined>;
39
42
  itemToStringLabel: _angular_core.InputSignal<((value: _radix_ng_primitives_types_radix_ng_primitives_core.AcceptableValue) => string) | undefined>;
40
43
  open: _angular_core.ModelSignal<boolean>;
44
+ openedByTouch: _angular_core.WritableSignal<boolean>;
45
+ openMethod: _angular_core.Signal<_radix_ng_primitives_types_radix_ng_primitives_floating_focus_manager.RdxInteractionType>;
46
+ openInteractionType: _angular_core.WritableSignal<_radix_ng_primitives_types_radix_ng_primitives_floating_focus_manager.RdxInteractionType>;
47
+ closeInteractionType: _angular_core.WritableSignal<_radix_ng_primitives_types_radix_ng_primitives_floating_focus_manager.RdxInteractionType>;
41
48
  disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
42
49
  modal: _angular_core.InputSignalWithTransform<boolean, unknown>;
43
50
  isEmptyModelValue: _angular_core.Signal<boolean>;
@@ -46,10 +53,10 @@ declare class RdxSelectBackdrop {
46
53
  optionsSet: _angular_core.WritableSignal<Set<_radix_ng_primitives_select.SelectOption>>;
47
54
  onOptionAdd: (option: any) => void;
48
55
  onOptionRemove: (option: any) => void;
49
- onValueChange: (value: _radix_ng_primitives_types_radix_ng_primitives_core.AcceptableValue) => void;
56
+ onValueChange: (value: _radix_ng_primitives_types_radix_ng_primitives_core.AcceptableValue, reason?: _radix_ng_primitives_select.RdxSelectValueChangeReason, event?: Event) => boolean;
50
57
  onTriggerChange: (node: any) => void;
51
58
  onValueElementChange: (node: any) => void;
52
- onOpenChange: (value: any) => void;
59
+ onOpenChange: (value: boolean, reason?: _radix_ng_primitives_select.RdxSelectOpenChangeReason, event?: Event) => boolean;
53
60
  };
54
61
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdxSelectBackdrop, never>;
55
62
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxSelectBackdrop, "[rdxSelectBackdrop]", ["rdxSelectBackdrop"], {}, {}, never, never, true, never>;
@@ -144,12 +151,16 @@ declare class RdxSelectItemText {
144
151
  y: number;
145
152
  } | null>;
146
153
  contentId: string;
147
- dir: _angular_core.InputSignal<_radix_ng_primitives_types_radix_ng_primitives_core.Direction>;
154
+ dir: _angular_core.Signal<_radix_ng_primitives_types_radix_ng_primitives_core.Direction>;
148
155
  value: _angular_core.ModelSignal<_radix_ng_primitives_types_radix_ng_primitives_core.AcceptableValue | _radix_ng_primitives_types_radix_ng_primitives_core.AcceptableValue[] | undefined>;
149
156
  multiple: _angular_core.InputSignalWithTransform<boolean, unknown>;
150
157
  isItemEqualToValue: _angular_core.InputSignal<_radix_ng_primitives_types_radix_ng_primitives_core.ItemValueComparator<_radix_ng_primitives_types_radix_ng_primitives_core.AcceptableValue> | undefined>;
151
158
  itemToStringLabel: _angular_core.InputSignal<((value: _radix_ng_primitives_types_radix_ng_primitives_core.AcceptableValue) => string) | undefined>;
152
159
  open: _angular_core.ModelSignal<boolean>;
160
+ openedByTouch: _angular_core.WritableSignal<boolean>;
161
+ openMethod: _angular_core.Signal<_radix_ng_primitives_types_radix_ng_primitives_floating_focus_manager.RdxInteractionType>;
162
+ openInteractionType: _angular_core.WritableSignal<_radix_ng_primitives_types_radix_ng_primitives_floating_focus_manager.RdxInteractionType>;
163
+ closeInteractionType: _angular_core.WritableSignal<_radix_ng_primitives_types_radix_ng_primitives_floating_focus_manager.RdxInteractionType>;
153
164
  disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
154
165
  modal: _angular_core.InputSignalWithTransform<boolean, unknown>;
155
166
  isEmptyModelValue: _angular_core.Signal<boolean>;
@@ -158,10 +169,10 @@ declare class RdxSelectItemText {
158
169
  optionsSet: _angular_core.WritableSignal<Set<_radix_ng_primitives_select.SelectOption>>;
159
170
  onOptionAdd: (option: any) => void;
160
171
  onOptionRemove: (option: any) => void;
161
- onValueChange: (value: _radix_ng_primitives_types_radix_ng_primitives_core.AcceptableValue) => void;
172
+ onValueChange: (value: _radix_ng_primitives_types_radix_ng_primitives_core.AcceptableValue, reason?: _radix_ng_primitives_select.RdxSelectValueChangeReason, event?: Event) => boolean;
162
173
  onTriggerChange: (node: any) => void;
163
174
  onValueElementChange: (node: any) => void;
164
- onOpenChange: (value: any) => void;
175
+ onOpenChange: (value: boolean, reason?: _radix_ng_primitives_select.RdxSelectOpenChangeReason, event?: Event) => boolean;
165
176
  };
166
177
  readonly contentContext: {
167
178
  content: _angular_core.WritableSignal<HTMLElement | null>;
@@ -212,7 +223,7 @@ declare const context$1: () => {
212
223
  isPositioned: _angular_core.WritableSignal<boolean>;
213
224
  selectedItem: _angular_core.WritableSignal<HTMLElement | undefined>;
214
225
  selectedItemText: _angular_core.WritableSignal<HTMLElement | undefined>;
215
- highlightedItem: _angular_core.Signal<RdxCollectionItem<unknown> | null>;
226
+ highlightedItem: Signal<RdxCollectionItem<unknown> | null>;
216
227
  isHighlighted: (item: RdxCollectionItem) => boolean;
217
228
  highlightItem: (item: RdxCollectionItem) => void;
218
229
  isKeyboardActive: () => boolean;
@@ -229,7 +240,7 @@ declare const injectSelectPopupContext: _radix_ng_primitives_core.InjectContext<
229
240
  isPositioned: _angular_core.WritableSignal<boolean>;
230
241
  selectedItem: _angular_core.WritableSignal<HTMLElement | undefined>;
231
242
  selectedItemText: _angular_core.WritableSignal<HTMLElement | undefined>;
232
- highlightedItem: _angular_core.Signal<RdxCollectionItem<unknown> | null>;
243
+ highlightedItem: Signal<RdxCollectionItem<unknown> | null>;
233
244
  isHighlighted: (item: RdxCollectionItem) => boolean;
234
245
  highlightItem: (item: RdxCollectionItem) => void;
235
246
  isKeyboardActive: () => boolean;
@@ -245,7 +256,7 @@ declare const provideSelectPopupContext: (useFactory: () => {
245
256
  isPositioned: _angular_core.WritableSignal<boolean>;
246
257
  selectedItem: _angular_core.WritableSignal<HTMLElement | undefined>;
247
258
  selectedItemText: _angular_core.WritableSignal<HTMLElement | undefined>;
248
- highlightedItem: _angular_core.Signal<RdxCollectionItem<unknown> | null>;
259
+ highlightedItem: Signal<RdxCollectionItem<unknown> | null>;
249
260
  isHighlighted: (item: RdxCollectionItem) => boolean;
250
261
  highlightItem: (item: RdxCollectionItem) => void;
251
262
  isKeyboardActive: () => boolean;
@@ -257,6 +268,13 @@ declare const provideSelectPopupContext: (useFactory: () => {
257
268
  }) => _angular_core.Provider;
258
269
  interface RdxPositionerImpl {
259
270
  placed: OutputRef<any>;
271
+ /**
272
+ * Whether **item-aligned** positioning is currently active (Base UI `alignItemWithTriggerActive`).
273
+ * `true` only for the item-aligned positioner while open **and not touch-opened** — a touch open
274
+ * falls back to a plain anchored dropdown. The popper positioner omits this (always `false`). The
275
+ * scroll-lock policy locks an item-aligned popup even when `modal === false` (ADR 0016 §2 / AC #3).
276
+ */
277
+ alignItemWithTriggerActive?: Signal<boolean>;
260
278
  }
261
279
  declare const RDX_SELECT_POSITIONER_TOKEN: InjectionToken<RdxPositionerImpl>;
262
280
  /**
@@ -273,7 +291,8 @@ declare const RDX_SELECT_POSITIONER_TOKEN: InjectionToken<RdxPositionerImpl>;
273
291
  * @group Components
274
292
  */
275
293
  declare class RdxSelectPopup {
276
- private readonly dismissableLayer;
294
+ private readonly floatingContext;
295
+ private readonly registration;
277
296
  private readonly currentElement;
278
297
  private readonly collection;
279
298
  private readonly injector;
@@ -285,31 +304,35 @@ declare class RdxSelectPopup {
285
304
  y: number;
286
305
  } | null>;
287
306
  contentId: string;
288
- dir: _angular_core.InputSignal<_radix_ng_primitives_core.Direction>;
307
+ dir: Signal<_radix_ng_primitives_core.Direction>;
289
308
  value: _angular_core.ModelSignal<AcceptableValue | AcceptableValue[] | undefined>;
290
309
  multiple: _angular_core.InputSignalWithTransform<boolean, unknown>;
291
310
  isItemEqualToValue: _angular_core.InputSignal<_radix_ng_primitives_core.ItemValueComparator<AcceptableValue> | undefined>;
292
311
  itemToStringLabel: _angular_core.InputSignal<((value: AcceptableValue) => string) | undefined>;
293
312
  open: _angular_core.ModelSignal<boolean>;
313
+ openedByTouch: _angular_core.WritableSignal<boolean>;
314
+ openMethod: Signal<_radix_ng_primitives_types_radix_ng_primitives_floating_focus_manager.RdxInteractionType>;
315
+ openInteractionType: _angular_core.WritableSignal<_radix_ng_primitives_types_radix_ng_primitives_floating_focus_manager.RdxInteractionType>;
316
+ closeInteractionType: _angular_core.WritableSignal<_radix_ng_primitives_types_radix_ng_primitives_floating_focus_manager.RdxInteractionType>;
294
317
  disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
295
318
  modal: _angular_core.InputSignalWithTransform<boolean, unknown>;
296
- isEmptyModelValue: _angular_core.Signal<boolean>;
297
- transitionStatus: _angular_core.Signal<_radix_ng_primitives_core.RdxTransitionStatus>;
319
+ isEmptyModelValue: Signal<boolean>;
320
+ transitionStatus: Signal<_radix_ng_primitives_core.RdxTransitionStatus>;
298
321
  registerTransitionElement: (element: HTMLElement) => () => void;
299
322
  optionsSet: _angular_core.WritableSignal<Set<_radix_ng_primitives_select.SelectOption>>;
300
323
  onOptionAdd: (option: any) => void;
301
324
  onOptionRemove: (option: any) => void;
302
- onValueChange: (value: AcceptableValue) => void;
325
+ onValueChange: (value: AcceptableValue, reason?: _radix_ng_primitives_select.RdxSelectValueChangeReason, event?: Event) => boolean;
303
326
  onTriggerChange: (node: any) => void;
304
327
  onValueElementChange: (node: any) => void;
305
- onOpenChange: (value: any) => void;
328
+ onOpenChange: (value: boolean, reason?: _radix_ng_primitives_select.RdxSelectOpenChangeReason, event?: Event) => boolean;
306
329
  };
307
330
  /**
308
331
  * The collected items (DOM order). Exposed so the `item-aligned` positioner — now the popup's
309
332
  * **ancestor** — can read them without injecting {@link RdxCollectionProvider} (which the popup
310
333
  * provides as a descendant, so an upward `inject` would not find it).
311
334
  */
312
- readonly items: _angular_core.Signal<readonly RdxCollectionItem<any>[]>;
335
+ readonly items: Signal<readonly RdxCollectionItem<any>[]>;
313
336
  /**
314
337
  * Highlight-model navigation over the collected items (DOM order). `loop` is disabled so arrow
315
338
  * navigation stops at the first / last item instead of wrapping around — matching native
@@ -326,12 +349,12 @@ declare class RdxSelectPopup {
326
349
  * Event handler called when the escape key is down.
327
350
  * Can be prevented.
328
351
  */
329
- readonly escapeKeyDown: OutputRef<KeyboardEvent>;
352
+ readonly escapeKeyDown: _angular_core.OutputEmitterRef<KeyboardEvent>;
330
353
  /**
331
- * Event handler called when a `pointerdown` event happens outside of the `DismissableLayer`.
354
+ * Event handler called when a `pointerdown` event happens outside of the popup.
332
355
  * Can be prevented.
333
356
  */
334
- readonly pointerDownOutside: OutputRef<PointerEvent>;
357
+ readonly pointerDownOutside: _angular_core.OutputEmitterRef<RdxOutsidePressDomEvent>;
335
358
  readonly content: _angular_core.WritableSignal<HTMLElement | null>;
336
359
  /**
337
360
  * The positioner — now an **ancestor** element — provides {@link RDX_SELECT_POSITIONER_TOKEN}
@@ -347,7 +370,7 @@ declare class RdxSelectPopup {
347
370
  isKeyboardActive(): boolean;
348
371
  handleKeyDown(event: Event): void;
349
372
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdxSelectPopup, never>;
350
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxSelectPopup, "[rdxSelectPopup]", never, {}, { "escapeKeyDown": "escapeKeyDown"; "pointerDownOutside": "pointerDownOutside"; }, never, never, true, [{ directive: typeof i1$1.RdxPopperContent; inputs: {}; outputs: {}; }, { directive: typeof i2.RdxFocusScope; inputs: {}; outputs: {}; }, { directive: typeof i3.RdxDismissableLayer; inputs: {}; outputs: {}; }, { directive: typeof i1.RdxCollectionProvider; inputs: {}; outputs: {}; }]>;
373
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxSelectPopup, "[rdxSelectPopup]", never, {}, { "escapeKeyDown": "escapeKeyDown"; "pointerDownOutside": "pointerDownOutside"; }, never, never, true, [{ directive: typeof i1$1.RdxPopperContent; inputs: {}; outputs: {}; }, { directive: typeof i2.RdxFocusScope; inputs: {}; outputs: {}; }, { directive: typeof _radix_ng_primitives_core.RdxFloatingNodeRegistration; inputs: {}; outputs: {}; }, { directive: typeof i1.RdxCollectionProvider; inputs: {}; outputs: {}; }]>;
351
374
  }
352
375
 
353
376
  /**
@@ -374,63 +397,22 @@ declare class RdxSelectPortalMisuseGuard {
374
397
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxSelectPortalMisuseGuard, "[rdxSelectPortal]:not(ng-template)", never, {}, {}, never, never, true, never>;
375
398
  }
376
399
 
377
- declare class RdxSelectPositioner implements RdxPositionerImpl {
378
- /**
379
- * The preferred side of the anchor to render against when open.
380
- * Will be reversed when collisions occur and avoidCollisions is enabled.
381
- */
382
- readonly side: _angular_core.InputSignal<"top" | "right" | "bottom" | "left">;
383
- /**
384
- * The distance in pixels from the anchor.
385
- */
386
- readonly sideOffset: _angular_core.InputSignalWithTransform<number, unknown>;
387
- /**
388
- * The preferred alignment against the anchor. May change when collisions occur.
389
- */
390
- readonly align: _angular_core.InputSignal<"center" | "end" | "start">;
391
- /**
392
- * An offset in pixels from the `start` or `end` alignment options.
393
- */
394
- readonly alignOffset: _angular_core.InputSignalWithTransform<number, unknown>;
395
- /**
396
- * The padding between the arrow and the edges of the content.
397
- * If your content has border-radius, this will prevent it from overflowing the corners.
398
- */
399
- readonly arrowPadding: _angular_core.InputSignalWithTransform<number, unknown>;
400
- /**
401
- * When `true`, overrides the `side` and `align` preferences to prevent collisions with boundary edges.
402
- */
403
- readonly avoidCollisions: _angular_core.InputSignalWithTransform<boolean, unknown>;
404
- /**
405
- * The element used as the collision boundary.
406
- * By default this is the viewport, though you can provide additional element(s) to be included in this check.
407
- */
408
- readonly collisionBoundary: _angular_core.InputSignal<ElementRef<HTMLElement> | ElementRef<HTMLElement>[] | undefined>;
409
- /**
410
- * The distance in pixels from the boundary edges where collision detection should occur.
411
- * Accepts a number (same for all sides), or a partial padding object, for example: `{ top: 20, left: 20 }`.
412
- */
413
- readonly collisionPadding: _angular_core.InputSignal<number | Partial<Record<"top" | "right" | "bottom" | "left", number>>>;
414
- /**
415
- * The sticky behavior on the `align` axis.
416
- * - `partial` will keep the content in the boundary as long as the trigger is at least partially in the boundary
417
- * - `always` will keep the content in the boundary regardless.
418
- */
419
- readonly sticky: _angular_core.InputSignal<"partial" | "always">;
420
- /**
421
- * Whether to hide the content when the trigger becomes fully occluded.
422
- */
423
- readonly hideWhenDetached: _angular_core.InputSignalWithTransform<boolean, unknown>;
424
- /**
425
- * Whether to update the position of the floating element on every animation frame if required.
426
- */
427
- readonly updatePositionStrategy: _angular_core.InputSignal<"always" | "optimized">;
428
- /**
429
- * Emits when the element is placed.
430
- */
431
- readonly placed: _angular_core.OutputRef<void>;
400
+ /**
401
+ * Positions the select popup against the trigger using the popper engine.
402
+ *
403
+ * A "thin" positioner (ADR 0012): it inherits the full popper positioning surface — the inputs
404
+ * (`side`, `sideOffset`, `align`, …), the `placed` output, and the host bindings — from
405
+ * {@link RdxPopperContentWrapper}, and declares select's Base UI-aligned defaults via the config
406
+ * provider. It also satisfies {@link RdxPositionerImpl} (via the inherited `placed`) so the popup can
407
+ * resolve it through {@link RDX_SELECT_POSITIONER_TOKEN}, the same as the item-aligned positioner.
408
+ */
409
+ declare class RdxSelectPositioner extends RdxPopperContentWrapper implements RdxPositionerImpl {
410
+ protected readonly positionerStyle: {
411
+ boxSizing: string;
412
+ };
413
+ constructor();
432
414
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdxSelectPositioner, never>;
433
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxSelectPositioner, "[rdxSelectPositioner]", 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; }; "updatePositionStrategy": { "alias": "updatePositionStrategy"; "required": false; "isSignal": true; }; }, { "placed": "placed"; }, never, never, true, [{ directive: typeof i1$1.RdxPopperContentWrapper; inputs: { "side": "side"; "sideOffset": "sideOffset"; "align": "align"; "alignOffset": "alignOffset"; "arrowPadding": "arrowPadding"; "avoidCollisions": "avoidCollisions"; "collisionBoundary": "collisionBoundary"; "collisionPadding": "collisionPadding"; "sticky": "sticky"; "hideWhenDetached": "hideWhenDetached"; "updatePositionStrategy": "updatePositionStrategy"; }; outputs: {}; }]>;
415
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxSelectPositioner, "[rdxSelectPositioner]", never, {}, {}, never, never, true, never>;
434
416
  }
435
417
 
436
418
  interface SelectOption {
@@ -438,6 +420,25 @@ interface SelectOption {
438
420
  disabled?: boolean;
439
421
  textContent: string;
440
422
  }
423
+ type RdxSelectOpenMethod = RdxInteractionType;
424
+ type RdxSelectOpenChangeReason = 'trigger-press' | 'item-press' | 'outside-press' | 'escape-key' | 'window-resize' | 'focus-out' | 'list-navigation' | 'cancel-open' | 'none';
425
+ type RdxSelectValueChangeReason = RdxSelectOpenChangeReason;
426
+ interface RdxSelectChangeEventDetails<Reason extends string = string> {
427
+ reason: Reason;
428
+ event: Event;
429
+ cancel: () => void;
430
+ isCanceled: () => boolean;
431
+ }
432
+ type RdxSelectOpenChangeEventDetails = RdxSelectChangeEventDetails<RdxSelectOpenChangeReason>;
433
+ interface RdxSelectOpenChangeEvent {
434
+ open: boolean;
435
+ eventDetails: RdxSelectOpenChangeEventDetails;
436
+ }
437
+ type RdxSelectValueChangeEventDetails = RdxSelectChangeEventDetails<RdxSelectValueChangeReason>;
438
+ interface RdxSelectValueChangeEvent {
439
+ value: AcceptableValue | AcceptableValue[];
440
+ eventDetails: RdxSelectValueChangeEventDetails;
441
+ }
441
442
  declare const context: () => {
442
443
  triggerElement: _angular_core.WritableSignal<HTMLElement | null>;
443
444
  valueElement: _angular_core.WritableSignal<HTMLElement | null>;
@@ -446,24 +447,28 @@ declare const context: () => {
446
447
  y: number;
447
448
  } | null>;
448
449
  contentId: string;
449
- dir: _angular_core.InputSignal<Direction>;
450
+ dir: Signal<Direction>;
450
451
  value: _angular_core.ModelSignal<AcceptableValue | AcceptableValue[] | undefined>;
451
452
  multiple: _angular_core.InputSignalWithTransform<boolean, unknown>;
452
453
  isItemEqualToValue: _angular_core.InputSignal<ItemValueComparator<AcceptableValue> | undefined>;
453
454
  itemToStringLabel: _angular_core.InputSignal<((value: AcceptableValue) => string) | undefined>;
454
455
  open: _angular_core.ModelSignal<boolean>;
456
+ openedByTouch: _angular_core.WritableSignal<boolean>;
457
+ openMethod: Signal<RdxInteractionType>;
458
+ openInteractionType: _angular_core.WritableSignal<RdxInteractionType>;
459
+ closeInteractionType: _angular_core.WritableSignal<RdxInteractionType>;
455
460
  disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
456
461
  modal: _angular_core.InputSignalWithTransform<boolean, unknown>;
457
- isEmptyModelValue: _angular_core.Signal<boolean>;
458
- transitionStatus: _angular_core.Signal<_radix_ng_primitives_core.RdxTransitionStatus>;
462
+ isEmptyModelValue: Signal<boolean>;
463
+ transitionStatus: Signal<_radix_ng_primitives_core.RdxTransitionStatus>;
459
464
  registerTransitionElement: (element: HTMLElement) => () => void;
460
465
  optionsSet: _angular_core.WritableSignal<Set<SelectOption>>;
461
466
  onOptionAdd: (option: any) => void;
462
467
  onOptionRemove: (option: any) => void;
463
- onValueChange: (value: AcceptableValue) => void;
468
+ onValueChange: (value: AcceptableValue, reason?: RdxSelectValueChangeReason, event?: Event) => boolean;
464
469
  onTriggerChange: (node: any) => void;
465
470
  onValueElementChange: (node: any) => void;
466
- onOpenChange: (value: any) => void;
471
+ onOpenChange: (value: boolean, reason?: RdxSelectOpenChangeReason, event?: Event) => boolean;
467
472
  };
468
473
  type RdxSelectRootContext = ReturnType<typeof context>;
469
474
  declare const injectSelectRootContext: _radix_ng_primitives_core.InjectContext<{
@@ -474,24 +479,28 @@ declare const injectSelectRootContext: _radix_ng_primitives_core.InjectContext<{
474
479
  y: number;
475
480
  } | null>;
476
481
  contentId: string;
477
- dir: _angular_core.InputSignal<Direction>;
482
+ dir: Signal<Direction>;
478
483
  value: _angular_core.ModelSignal<AcceptableValue | AcceptableValue[] | undefined>;
479
484
  multiple: _angular_core.InputSignalWithTransform<boolean, unknown>;
480
485
  isItemEqualToValue: _angular_core.InputSignal<ItemValueComparator<AcceptableValue> | undefined>;
481
486
  itemToStringLabel: _angular_core.InputSignal<((value: AcceptableValue) => string) | undefined>;
482
487
  open: _angular_core.ModelSignal<boolean>;
488
+ openedByTouch: _angular_core.WritableSignal<boolean>;
489
+ openMethod: Signal<RdxInteractionType>;
490
+ openInteractionType: _angular_core.WritableSignal<RdxInteractionType>;
491
+ closeInteractionType: _angular_core.WritableSignal<RdxInteractionType>;
483
492
  disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
484
493
  modal: _angular_core.InputSignalWithTransform<boolean, unknown>;
485
- isEmptyModelValue: _angular_core.Signal<boolean>;
486
- transitionStatus: _angular_core.Signal<_radix_ng_primitives_core.RdxTransitionStatus>;
494
+ isEmptyModelValue: Signal<boolean>;
495
+ transitionStatus: Signal<_radix_ng_primitives_core.RdxTransitionStatus>;
487
496
  registerTransitionElement: (element: HTMLElement) => () => void;
488
497
  optionsSet: _angular_core.WritableSignal<Set<SelectOption>>;
489
498
  onOptionAdd: (option: any) => void;
490
499
  onOptionRemove: (option: any) => void;
491
- onValueChange: (value: AcceptableValue) => void;
500
+ onValueChange: (value: AcceptableValue, reason?: RdxSelectValueChangeReason, event?: Event) => boolean;
492
501
  onTriggerChange: (node: any) => void;
493
502
  onValueElementChange: (node: any) => void;
494
- onOpenChange: (value: any) => void;
503
+ onOpenChange: (value: boolean, reason?: RdxSelectOpenChangeReason, event?: Event) => boolean;
495
504
  }>;
496
505
  declare const provideSelectRootContext: (useFactory: () => {
497
506
  triggerElement: _angular_core.WritableSignal<HTMLElement | null>;
@@ -501,48 +510,67 @@ declare const provideSelectRootContext: (useFactory: () => {
501
510
  y: number;
502
511
  } | null>;
503
512
  contentId: string;
504
- dir: _angular_core.InputSignal<Direction>;
513
+ dir: Signal<Direction>;
505
514
  value: _angular_core.ModelSignal<AcceptableValue | AcceptableValue[] | undefined>;
506
515
  multiple: _angular_core.InputSignalWithTransform<boolean, unknown>;
507
516
  isItemEqualToValue: _angular_core.InputSignal<ItemValueComparator<AcceptableValue> | undefined>;
508
517
  itemToStringLabel: _angular_core.InputSignal<((value: AcceptableValue) => string) | undefined>;
509
518
  open: _angular_core.ModelSignal<boolean>;
519
+ openedByTouch: _angular_core.WritableSignal<boolean>;
520
+ openMethod: Signal<RdxInteractionType>;
521
+ openInteractionType: _angular_core.WritableSignal<RdxInteractionType>;
522
+ closeInteractionType: _angular_core.WritableSignal<RdxInteractionType>;
510
523
  disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
511
524
  modal: _angular_core.InputSignalWithTransform<boolean, unknown>;
512
- isEmptyModelValue: _angular_core.Signal<boolean>;
513
- transitionStatus: _angular_core.Signal<_radix_ng_primitives_core.RdxTransitionStatus>;
525
+ isEmptyModelValue: Signal<boolean>;
526
+ transitionStatus: Signal<_radix_ng_primitives_core.RdxTransitionStatus>;
514
527
  registerTransitionElement: (element: HTMLElement) => () => void;
515
528
  optionsSet: _angular_core.WritableSignal<Set<SelectOption>>;
516
529
  onOptionAdd: (option: any) => void;
517
530
  onOptionRemove: (option: any) => void;
518
- onValueChange: (value: AcceptableValue) => void;
531
+ onValueChange: (value: AcceptableValue, reason?: RdxSelectValueChangeReason, event?: Event) => boolean;
519
532
  onTriggerChange: (node: any) => void;
520
533
  onValueElementChange: (node: any) => void;
521
- onOpenChange: (value: any) => void;
534
+ onOpenChange: (value: boolean, reason?: RdxSelectOpenChangeReason, event?: Event) => boolean;
522
535
  }) => _angular_core.Provider;
523
536
  declare class RdxSelectRoot {
524
537
  readonly open: _angular_core.ModelSignal<boolean>;
538
+ /** Whether the current open was initiated by **touch** (ADR 0016 §3 — gates the anchored scroll lock). */
539
+ readonly openedByTouch: _angular_core.WritableSignal<boolean>;
540
+ /** How the select was opened. Base UI names this state `openMethod`. */
541
+ readonly openInteractionType: _angular_core.WritableSignal<RdxInteractionType>;
542
+ /** How the select was closed. */
543
+ readonly closeInteractionType: _angular_core.WritableSignal<RdxInteractionType>;
544
+ /** Public Base UI-aligned alias for the open interaction type. */
545
+ readonly openMethod: Signal<RdxSelectOpenMethod>;
546
+ /** Per-popup floating root context (ADR 0015) — `open` / `triggers` / reference for the dismissal engine. */
547
+ readonly floatingContext: RdxFloatingRootContext;
525
548
  readonly value: _angular_core.ModelSignal<AcceptableValue | AcceptableValue[] | undefined>;
526
549
  readonly multiple: _angular_core.InputSignalWithTransform<boolean, unknown>;
527
550
  readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
528
551
  /** Whether the popup is modal: locks page scroll and makes outside content inert while open. */
529
552
  readonly modal: _angular_core.InputSignalWithTransform<boolean, unknown>;
530
- readonly dir: _angular_core.InputSignal<Direction>;
553
+ readonly dirInput: _angular_core.InputSignal<Direction | undefined>;
554
+ readonly dir: Signal<Direction>;
531
555
  /** How item values are compared for equality — a function `(a, b) => boolean` or an object key. */
532
556
  readonly isItemEqualToValue: _angular_core.InputSignal<ItemValueComparator<AcceptableValue> | undefined>;
533
557
  /** Converts a value to its display label (used by `RdxSelectValue`). */
534
558
  readonly itemToStringLabel: _angular_core.InputSignal<((value: AcceptableValue) => string) | undefined>;
559
+ /** Emits before an open-state change is committed; call `eventDetails.cancel()` to veto it. */
560
+ readonly onOpenChange: _angular_core.OutputEmitterRef<RdxSelectOpenChangeEvent>;
561
+ /** Emits before a value change is committed; call `eventDetails.cancel()` to veto it. */
562
+ readonly onValueChange: _angular_core.OutputEmitterRef<RdxSelectValueChangeEvent>;
535
563
  /** Emits after the open/close transition (including any exit animation) finishes. */
536
564
  readonly onOpenChangeComplete: _angular_core.OutputEmitterRef<boolean>;
537
565
  private readonly transition;
538
566
  /** Open/close transition phase, for `data-starting-style` / `data-ending-style`. */
539
- readonly transitionStatus: _angular_core.Signal<_radix_ng_primitives_core.RdxTransitionStatus>;
567
+ readonly transitionStatus: Signal<_radix_ng_primitives_core.RdxTransitionStatus>;
540
568
  /** Registers the popup element whose animation determines transition completion. */
541
569
  readonly registerTransitionElement: (element: HTMLElement) => () => void;
542
- readonly isEmptyModelValue: _angular_core.Signal<boolean>;
570
+ readonly isEmptyModelValue: Signal<boolean>;
543
571
  constructor();
544
572
  readonly optionsSet: _angular_core.WritableSignal<Set<SelectOption>>;
545
- readonly nativeSelectKey: _angular_core.Signal<string>;
573
+ readonly nativeSelectKey: Signal<string>;
546
574
  readonly triggerElement: _angular_core.WritableSignal<HTMLElement | null>;
547
575
  readonly valueElement: _angular_core.WritableSignal<HTMLElement | null>;
548
576
  readonly triggerPointerDownPosRef: _angular_core.WritableSignal<{
@@ -550,9 +578,10 @@ declare class RdxSelectRoot {
550
578
  y: number;
551
579
  } | null>;
552
580
  getOption(value: SelectOption['value']): SelectOption | undefined;
553
- handleValueChange(value: AcceptableValue): void;
581
+ setValue(value: AcceptableValue, reason?: RdxSelectValueChangeReason, event?: Event): boolean;
582
+ setOpen(open: boolean, reason?: RdxSelectOpenChangeReason, event?: Event): boolean;
554
583
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdxSelectRoot, never>;
555
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxSelectRoot, "[rdxSelectRoot]", ["rdxSelectRoot"], { "open": { "alias": "open"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "modal": { "alias": "modal"; "required": false; "isSignal": true; }; "dir": { "alias": "dir"; "required": false; "isSignal": true; }; "isItemEqualToValue": { "alias": "isItemEqualToValue"; "required": false; "isSignal": true; }; "itemToStringLabel": { "alias": "itemToStringLabel"; "required": false; "isSignal": true; }; }, { "open": "openChange"; "value": "valueChange"; "onOpenChangeComplete": "onOpenChangeComplete"; }, never, never, true, [{ directive: typeof i1$1.RdxPopper; inputs: {}; outputs: {}; }]>;
584
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxSelectRoot, "[rdxSelectRoot]", ["rdxSelectRoot"], { "open": { "alias": "open"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "modal": { "alias": "modal"; "required": false; "isSignal": true; }; "dirInput": { "alias": "dir"; "required": false; "isSignal": true; }; "isItemEqualToValue": { "alias": "isItemEqualToValue"; "required": false; "isSignal": true; }; "itemToStringLabel": { "alias": "itemToStringLabel"; "required": false; "isSignal": true; }; }, { "open": "openChange"; "value": "valueChange"; "onOpenChange": "onOpenChange"; "onValueChange": "onValueChange"; "onOpenChangeComplete": "onOpenChangeComplete"; }, never, never, true, [{ directive: typeof i1$1.RdxPopper; inputs: {}; outputs: {}; }]>;
556
585
  }
557
586
 
558
587
  /**
@@ -574,12 +603,16 @@ declare class RdxSelectTrigger {
574
603
  y: number;
575
604
  } | null>;
576
605
  contentId: string;
577
- dir: _angular_core.InputSignal<_radix_ng_primitives_core.Direction>;
606
+ dir: _angular_core.Signal<_radix_ng_primitives_core.Direction>;
578
607
  value: _angular_core.ModelSignal<_radix_ng_primitives_core.AcceptableValue | _radix_ng_primitives_core.AcceptableValue[] | undefined>;
579
608
  multiple: _angular_core.InputSignalWithTransform<boolean, unknown>;
580
609
  isItemEqualToValue: _angular_core.InputSignal<_radix_ng_primitives_core.ItemValueComparator<_radix_ng_primitives_core.AcceptableValue> | undefined>;
581
610
  itemToStringLabel: _angular_core.InputSignal<((value: _radix_ng_primitives_core.AcceptableValue) => string) | undefined>;
582
611
  open: _angular_core.ModelSignal<boolean>;
612
+ openedByTouch: _angular_core.WritableSignal<boolean>;
613
+ openMethod: _angular_core.Signal<_radix_ng_primitives_types_radix_ng_primitives_floating_focus_manager.RdxInteractionType>;
614
+ openInteractionType: _angular_core.WritableSignal<_radix_ng_primitives_types_radix_ng_primitives_floating_focus_manager.RdxInteractionType>;
615
+ closeInteractionType: _angular_core.WritableSignal<_radix_ng_primitives_types_radix_ng_primitives_floating_focus_manager.RdxInteractionType>;
583
616
  disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
584
617
  modal: _angular_core.InputSignalWithTransform<boolean, unknown>;
585
618
  isEmptyModelValue: _angular_core.Signal<boolean>;
@@ -588,10 +621,10 @@ declare class RdxSelectTrigger {
588
621
  optionsSet: _angular_core.WritableSignal<Set<_radix_ng_primitives_select.SelectOption>>;
589
622
  onOptionAdd: (option: any) => void;
590
623
  onOptionRemove: (option: any) => void;
591
- onValueChange: (value: _radix_ng_primitives_core.AcceptableValue) => void;
624
+ onValueChange: (value: _radix_ng_primitives_core.AcceptableValue, reason?: _radix_ng_primitives_select.RdxSelectValueChangeReason, event?: Event) => boolean;
592
625
  onTriggerChange: (node: any) => void;
593
626
  onValueElementChange: (node: any) => void;
594
- onOpenChange: (value: any) => void;
627
+ onOpenChange: (value: boolean, reason?: _radix_ng_primitives_select.RdxSelectOpenChangeReason, event?: Event) => boolean;
595
628
  };
596
629
  readonly elementRef: ElementRef<HTMLElement>;
597
630
  private readonly fieldRootContext;
@@ -605,7 +638,7 @@ declare class RdxSelectTrigger {
605
638
  protected readonly focusedState: _angular_core.Signal<boolean>;
606
639
  protected readonly describedBy: _angular_core.Signal<string | undefined>;
607
640
  constructor();
608
- handleOpen(): void;
641
+ handleOpen(reason: 'trigger-press' | 'list-navigation', event: Event): boolean;
609
642
  handlePointerOpen(event: Event): void;
610
643
  onClickHandler(event: Event): void;
611
644
  onPointerDown(event: Event): void;
@@ -627,12 +660,16 @@ declare class RdxSelectValue {
627
660
  y: number;
628
661
  } | null>;
629
662
  contentId: string;
630
- dir: _angular_core.InputSignal<_radix_ng_primitives_core.Direction>;
663
+ dir: _angular_core.Signal<_radix_ng_primitives_core.Direction>;
631
664
  value: _angular_core.ModelSignal<AcceptableValue | AcceptableValue[] | undefined>;
632
665
  multiple: _angular_core.InputSignalWithTransform<boolean, unknown>;
633
666
  isItemEqualToValue: _angular_core.InputSignal<_radix_ng_primitives_core.ItemValueComparator<AcceptableValue> | undefined>;
634
667
  itemToStringLabel: _angular_core.InputSignal<((value: AcceptableValue) => string) | undefined>;
635
668
  open: _angular_core.ModelSignal<boolean>;
669
+ openedByTouch: _angular_core.WritableSignal<boolean>;
670
+ openMethod: _angular_core.Signal<_radix_ng_primitives_types_radix_ng_primitives_floating_focus_manager.RdxInteractionType>;
671
+ openInteractionType: _angular_core.WritableSignal<_radix_ng_primitives_types_radix_ng_primitives_floating_focus_manager.RdxInteractionType>;
672
+ closeInteractionType: _angular_core.WritableSignal<_radix_ng_primitives_types_radix_ng_primitives_floating_focus_manager.RdxInteractionType>;
636
673
  disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
637
674
  modal: _angular_core.InputSignalWithTransform<boolean, unknown>;
638
675
  isEmptyModelValue: _angular_core.Signal<boolean>;
@@ -641,10 +678,10 @@ declare class RdxSelectValue {
641
678
  optionsSet: _angular_core.WritableSignal<Set<_radix_ng_primitives_select.SelectOption>>;
642
679
  onOptionAdd: (option: any) => void;
643
680
  onOptionRemove: (option: any) => void;
644
- onValueChange: (value: AcceptableValue) => void;
681
+ onValueChange: (value: AcceptableValue, reason?: _radix_ng_primitives_select.RdxSelectValueChangeReason, event?: Event) => boolean;
645
682
  onTriggerChange: (node: any) => void;
646
683
  onValueElementChange: (node: any) => void;
647
- onOpenChange: (value: any) => void;
684
+ onOpenChange: (value: boolean, reason?: _radix_ng_primitives_select.RdxSelectOpenChangeReason, event?: Event) => boolean;
648
685
  };
649
686
  readonly elementRef: ElementRef<HTMLElement>;
650
687
  readonly placeholder: _angular_core.InputSignal<string | undefined>;
@@ -666,4 +703,4 @@ declare function focusFirst(candidates: HTMLElement[]): void;
666
703
  declare const _importsSelect: (typeof RdxSelectGroupLabel)[];
667
704
 
668
705
  export { CONTENT_MARGIN, OPEN_KEYS, RDX_SELECT_POSITIONER_TOKEN, RdxSelectBackdrop, RdxSelectGroup, RdxSelectGroupLabel, RdxSelectIcon, RdxSelectItem, RdxSelectItemIndicator, RdxSelectItemText, RdxSelectList, RdxSelectPopup, RdxSelectPortal, RdxSelectPortalMisuseGuard, RdxSelectPositioner, RdxSelectRoot, RdxSelectSeparator, RdxSelectTrigger, RdxSelectValue, SELECTION_KEYS, _importsSelect, compare, focusFirst, injectSelectItemContext, injectSelectPopupContext, injectSelectRootContext, provideSelectItemContext, provideSelectPopupContext, provideSelectRootContext, shouldShowPlaceholder, valueComparator };
669
- export type { RdxPositionerImpl, RdxSelectItemContext, RdxSelectPopupContext, RdxSelectRootContext, SelectEvent, SelectOption };
706
+ export type { RdxPositionerImpl, RdxSelectChangeEventDetails, RdxSelectItemContext, RdxSelectOpenChangeEvent, RdxSelectOpenChangeEventDetails, RdxSelectOpenChangeReason, RdxSelectOpenMethod, RdxSelectPopupContext, RdxSelectRootContext, RdxSelectValueChangeEvent, RdxSelectValueChangeEventDetails, RdxSelectValueChangeReason, SelectEvent, SelectOption };
@@ -1,6 +1,6 @@
1
1
  import * as _angular_core from '@angular/core';
2
2
  import { Signal } from '@angular/core';
3
- import * as i1 from '@radix-ng/primitives/core';
3
+ import * as _radix_ng_primitives_core from '@radix-ng/primitives/core';
4
4
  import { RdxControlValueAccessor, NumberInput, BooleanInput } from '@radix-ng/primitives/core';
5
5
  export { clamp } from '@radix-ng/primitives/core';
6
6
  import * as _radix_ng_primitives_slider from '@radix-ng/primitives/slider';
@@ -144,7 +144,8 @@ declare class RdxSliderRoot {
144
144
  * The reading direction. Mirrors the horizontal axis when set to `'rtl'`.
145
145
  * @default 'ltr'
146
146
  */
147
- readonly dir: _angular_core.InputSignal<"ltr" | "rtl">;
147
+ readonly dirInput: _angular_core.InputSignal<"ltr" | "rtl" | undefined>;
148
+ readonly dir: Signal<_radix_ng_primitives_core.Direction>;
148
149
  /**
149
150
  * How thumbs behave when they meet in a range slider.
150
151
  * @default 'push'
@@ -232,7 +233,7 @@ declare class RdxSliderRoot {
232
233
  /** @ignore */
233
234
  resetPressedThumb(): void;
234
235
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdxSliderRoot, never>;
235
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxSliderRoot, "div[rdxSliderRoot]", ["rdxSliderRoot"], { "id": { "alias": "id"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "step": { "alias": "step"; "required": false; "isSignal": true; }; "largeStep": { "alias": "largeStep"; "required": false; "isSignal": true; }; "minStepsBetweenValues": { "alias": "minStepsBetweenValues"; "required": false; "isSignal": true; }; "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; "dir": { "alias": "dir"; "required": false; "isSignal": true; }; "thumbCollisionBehavior": { "alias": "thumbCollisionBehavior"; "required": false; "isSignal": true; }; "format": { "alias": "format"; "required": false; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "form": { "alias": "form"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "defaultValue": { "alias": "defaultValue"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "ariaLabelledBy": { "alias": "aria-labelledby"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "onValueChange": "onValueChange"; "onValueCommitted": "onValueCommitted"; }, never, never, true, [{ directive: typeof i1.RdxControlValueAccessor; inputs: { "value": "value"; "disabled": "disabled"; }; outputs: {}; }]>;
236
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxSliderRoot, "div[rdxSliderRoot]", ["rdxSliderRoot"], { "id": { "alias": "id"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "step": { "alias": "step"; "required": false; "isSignal": true; }; "largeStep": { "alias": "largeStep"; "required": false; "isSignal": true; }; "minStepsBetweenValues": { "alias": "minStepsBetweenValues"; "required": false; "isSignal": true; }; "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; "dirInput": { "alias": "dir"; "required": false; "isSignal": true; }; "thumbCollisionBehavior": { "alias": "thumbCollisionBehavior"; "required": false; "isSignal": true; }; "format": { "alias": "format"; "required": false; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "form": { "alias": "form"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "defaultValue": { "alias": "defaultValue"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "ariaLabelledBy": { "alias": "aria-labelledby"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "onValueChange": "onValueChange"; "onValueCommitted": "onValueCommitted"; }, never, never, true, [{ directive: typeof _radix_ng_primitives_core.RdxControlValueAccessor; inputs: { "value": "value"; "disabled": "disabled"; }; outputs: {}; }]>;
236
237
  }
237
238
 
238
239
  /**
@@ -364,7 +365,7 @@ declare class RdxSliderValue {
364
365
  *
365
366
  * @see https://base-ui.com/react/components/slider
366
367
  */
367
- declare const injectSliderRootContext: i1.InjectContext<RdxSliderRoot>;
368
+ declare const injectSliderRootContext: _radix_ng_primitives_core.InjectContext<RdxSliderRoot>;
368
369
  declare const provideSliderRootContext: (useFactory: () => RdxSliderRoot) => _angular_core.Provider;
369
370
 
370
371
  declare class RdxSliderModule {
@@ -63,7 +63,7 @@ declare class RdxStepperIndicatorDirective {
63
63
  interface StepperRootContext {
64
64
  value: ModelSignal<number | undefined>;
65
65
  orientation: InputSignal<'vertical' | 'horizontal'>;
66
- dir: InputSignal<Direction>;
66
+ dir: Signal<Direction>;
67
67
  linear: InputSignalWithTransform<boolean, BooleanInput>;
68
68
  totalStepperItems: WritableSignal<HTMLElement[]>;
69
69
  }
@@ -75,7 +75,8 @@ declare class RdxStepperRootDirective implements StepperRootContext {
75
75
  readonly defaultValue: _angular_core.InputSignalWithTransform<number | undefined, NumberInput>;
76
76
  readonly value: _angular_core.ModelSignal<number | undefined>;
77
77
  readonly linear: _angular_core.InputSignalWithTransform<boolean, BooleanInput>;
78
- readonly dir: _angular_core.InputSignal<Direction>;
78
+ readonly dirInput: _angular_core.InputSignal<Direction | undefined>;
79
+ readonly dir: _angular_core.Signal<Direction>;
79
80
  readonly orientation: _angular_core.InputSignal<"vertical" | "horizontal">;
80
81
  /** @ignore */
81
82
  readonly totalStepperItemsArray: _angular_core.Signal<HTMLElement[]>;
@@ -97,7 +98,7 @@ declare class RdxStepperRootDirective implements StepperRootContext {
97
98
  constructor();
98
99
  goToStep(step: number): void;
99
100
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdxStepperRootDirective, never>;
100
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxStepperRootDirective, "[rdxStepperRoot]", ["rdxStepperRoot"], { "defaultValue": { "alias": "defaultValue"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "linear": { "alias": "linear"; "required": false; "isSignal": true; }; "dir": { "alias": "dir"; "required": false; "isSignal": true; }; "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "onValueChange": "onValueChange"; }, never, never, true, never>;
101
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxStepperRootDirective, "[rdxStepperRoot]", ["rdxStepperRoot"], { "defaultValue": { "alias": "defaultValue"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "linear": { "alias": "linear"; "required": false; "isSignal": true; }; "dirInput": { "alias": "dir"; "required": false; "isSignal": true; }; "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "onValueChange": "onValueChange"; }, never, never, true, never>;
101
102
  }
102
103
 
103
104
  declare class RdxStepperTriggerDirective {