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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (118) 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-checkbox.mjs +33 -18
  11. package/fesm2022/radix-ng-primitives-checkbox.mjs.map +1 -1
  12. package/fesm2022/radix-ng-primitives-combobox.mjs +1305 -572
  13. package/fesm2022/radix-ng-primitives-combobox.mjs.map +1 -1
  14. package/fesm2022/radix-ng-primitives-config.mjs +13 -4
  15. package/fesm2022/radix-ng-primitives-config.mjs.map +1 -1
  16. package/fesm2022/radix-ng-primitives-context-menu.mjs +51 -10
  17. package/fesm2022/radix-ng-primitives-context-menu.mjs.map +1 -1
  18. package/fesm2022/radix-ng-primitives-core.mjs +1352 -64
  19. package/fesm2022/radix-ng-primitives-core.mjs.map +1 -1
  20. package/fesm2022/radix-ng-primitives-date-field.mjs +5 -3
  21. package/fesm2022/radix-ng-primitives-date-field.mjs.map +1 -1
  22. package/fesm2022/radix-ng-primitives-dialog.mjs +290 -120
  23. package/fesm2022/radix-ng-primitives-dialog.mjs.map +1 -1
  24. package/fesm2022/radix-ng-primitives-direction-provider.mjs +70 -0
  25. package/fesm2022/radix-ng-primitives-direction-provider.mjs.map +1 -0
  26. package/fesm2022/radix-ng-primitives-dismissable-layer.mjs +519 -184
  27. package/fesm2022/radix-ng-primitives-dismissable-layer.mjs.map +1 -1
  28. package/fesm2022/radix-ng-primitives-drawer.mjs +3 -3
  29. package/fesm2022/radix-ng-primitives-drawer.mjs.map +1 -1
  30. package/fesm2022/radix-ng-primitives-editable.mjs +12 -7
  31. package/fesm2022/radix-ng-primitives-editable.mjs.map +1 -1
  32. package/fesm2022/radix-ng-primitives-field.mjs +3 -2
  33. package/fesm2022/radix-ng-primitives-field.mjs.map +1 -1
  34. package/fesm2022/radix-ng-primitives-floating-focus-manager.mjs +803 -0
  35. package/fesm2022/radix-ng-primitives-floating-focus-manager.mjs.map +1 -0
  36. package/fesm2022/radix-ng-primitives-focus-scope.mjs +305 -70
  37. package/fesm2022/radix-ng-primitives-focus-scope.mjs.map +1 -1
  38. package/fesm2022/radix-ng-primitives-menu.mjs +893 -289
  39. package/fesm2022/radix-ng-primitives-menu.mjs.map +1 -1
  40. package/fesm2022/radix-ng-primitives-menubar.mjs +32 -4
  41. package/fesm2022/radix-ng-primitives-menubar.mjs.map +1 -1
  42. package/fesm2022/radix-ng-primitives-navigation-menu.mjs +144 -159
  43. package/fesm2022/radix-ng-primitives-navigation-menu.mjs.map +1 -1
  44. package/fesm2022/radix-ng-primitives-number-field.mjs +7 -2
  45. package/fesm2022/radix-ng-primitives-number-field.mjs.map +1 -1
  46. package/fesm2022/radix-ng-primitives-popover.mjs +284 -212
  47. package/fesm2022/radix-ng-primitives-popover.mjs.map +1 -1
  48. package/fesm2022/radix-ng-primitives-popper.mjs +94 -51
  49. package/fesm2022/radix-ng-primitives-popper.mjs.map +1 -1
  50. package/fesm2022/radix-ng-primitives-presence.mjs +1 -1
  51. package/fesm2022/radix-ng-primitives-presence.mjs.map +1 -1
  52. package/fesm2022/radix-ng-primitives-preview-card.mjs +141 -173
  53. package/fesm2022/radix-ng-primitives-preview-card.mjs.map +1 -1
  54. package/fesm2022/radix-ng-primitives-radio.mjs +19 -14
  55. package/fesm2022/radix-ng-primitives-radio.mjs.map +1 -1
  56. package/fesm2022/radix-ng-primitives-roving-focus.mjs +4 -2
  57. package/fesm2022/radix-ng-primitives-roving-focus.mjs.map +1 -1
  58. package/fesm2022/radix-ng-primitives-scroll-area.mjs +5 -4
  59. package/fesm2022/radix-ng-primitives-scroll-area.mjs.map +1 -1
  60. package/fesm2022/radix-ng-primitives-select.mjs +241 -164
  61. package/fesm2022/radix-ng-primitives-select.mjs.map +1 -1
  62. package/fesm2022/radix-ng-primitives-slider.mjs +262 -29
  63. package/fesm2022/radix-ng-primitives-slider.mjs.map +1 -1
  64. package/fesm2022/radix-ng-primitives-stepper.mjs +16 -10
  65. package/fesm2022/radix-ng-primitives-stepper.mjs.map +1 -1
  66. package/fesm2022/radix-ng-primitives-switch.mjs +10 -5
  67. package/fesm2022/radix-ng-primitives-switch.mjs.map +1 -1
  68. package/fesm2022/radix-ng-primitives-tabs.mjs +15 -10
  69. package/fesm2022/radix-ng-primitives-tabs.mjs.map +1 -1
  70. package/fesm2022/radix-ng-primitives-time-field.mjs +5 -3
  71. package/fesm2022/radix-ng-primitives-time-field.mjs.map +1 -1
  72. package/fesm2022/radix-ng-primitives-toast.mjs +15 -36
  73. package/fesm2022/radix-ng-primitives-toast.mjs.map +1 -1
  74. package/fesm2022/radix-ng-primitives-toggle-group.mjs +14 -7
  75. package/fesm2022/radix-ng-primitives-toggle-group.mjs.map +1 -1
  76. package/fesm2022/radix-ng-primitives-toggle.mjs +12 -6
  77. package/fesm2022/radix-ng-primitives-toggle.mjs.map +1 -1
  78. package/fesm2022/radix-ng-primitives-toolbar.mjs +5 -3
  79. package/fesm2022/radix-ng-primitives-toolbar.mjs.map +1 -1
  80. package/fesm2022/radix-ng-primitives-tooltip.mjs +251 -143
  81. package/fesm2022/radix-ng-primitives-tooltip.mjs.map +1 -1
  82. package/package.json +10 -1
  83. package/types/radix-ng-primitives-accordion.d.ts +4 -3
  84. package/types/radix-ng-primitives-autocomplete.d.ts +217 -152
  85. package/types/radix-ng-primitives-calendar.d.ts +5 -3
  86. package/types/radix-ng-primitives-checkbox.d.ts +27 -15
  87. package/types/radix-ng-primitives-combobox.d.ts +672 -283
  88. package/types/radix-ng-primitives-config.d.ts +1 -1
  89. package/types/radix-ng-primitives-context-menu.d.ts +15 -5
  90. package/types/radix-ng-primitives-core.d.ts +764 -14
  91. package/types/radix-ng-primitives-date-field.d.ts +3 -2
  92. package/types/radix-ng-primitives-dialog.d.ts +88 -32
  93. package/types/radix-ng-primitives-direction-provider.d.ts +41 -0
  94. package/types/radix-ng-primitives-dismissable-layer.d.ts +147 -99
  95. package/types/radix-ng-primitives-editable.d.ts +11 -5
  96. package/types/radix-ng-primitives-field.d.ts +1 -0
  97. package/types/radix-ng-primitives-floating-focus-manager.d.ts +272 -0
  98. package/types/radix-ng-primitives-focus-scope.d.ts +132 -1
  99. package/types/radix-ng-primitives-menu.d.ts +192 -103
  100. package/types/radix-ng-primitives-navigation-menu.d.ts +37 -75
  101. package/types/radix-ng-primitives-number-field.d.ts +8 -3
  102. package/types/radix-ng-primitives-popover.d.ts +71 -92
  103. package/types/radix-ng-primitives-popper.d.ts +39 -9
  104. package/types/radix-ng-primitives-preview-card.d.ts +39 -72
  105. package/types/radix-ng-primitives-radio.d.ts +13 -6
  106. package/types/radix-ng-primitives-roving-focus.d.ts +7 -6
  107. package/types/radix-ng-primitives-scroll-area.d.ts +2 -2
  108. package/types/radix-ng-primitives-select.d.ts +142 -109
  109. package/types/radix-ng-primitives-slider.d.ts +64 -12
  110. package/types/radix-ng-primitives-stepper.d.ts +15 -7
  111. package/types/radix-ng-primitives-switch.d.ts +10 -4
  112. package/types/radix-ng-primitives-tabs.d.ts +12 -6
  113. package/types/radix-ng-primitives-time-field.d.ts +3 -2
  114. package/types/radix-ng-primitives-toast.d.ts +7 -7
  115. package/types/radix-ng-primitives-toggle-group.d.ts +15 -8
  116. package/types/radix-ng-primitives-toggle.d.ts +10 -3
  117. package/types/radix-ng-primitives-toolbar.d.ts +3 -2
  118. package/types/radix-ng-primitives-tooltip.d.ts +61 -80
@@ -1,13 +1,16 @@
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, RdxCancelableChangeEventDetails, 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_floating_focus_manager from '@radix-ng/primitives/floating-focus-manager';
7
+ import { RdxInteractionType } from '@radix-ng/primitives/floating-focus-manager';
6
8
  import * as i1 from '@radix-ng/primitives/collection';
7
9
  import { RdxCollectionItem } from '@radix-ng/primitives/collection';
10
+ import { RdxOutsidePressDomEvent } from '@radix-ng/primitives/dismissable-layer';
8
11
  import * as i1$1 from '@radix-ng/primitives/popper';
9
- import * as i2 from '@radix-ng/primitives/focus-scope';
10
- import * as i3 from '@radix-ng/primitives/dismissable-layer';
12
+ import { RdxPopperContentWrapper } from '@radix-ng/primitives/popper';
13
+ import * as _radix_ng_primitives_types_radix_ng_primitives_floating_focus_manager from '@radix-ng/primitives/types/radix-ng-primitives-floating-focus-manager';
11
14
  import * as _radix_ng_primitives_types_radix_ng_primitives_core from '@radix-ng/primitives/types/radix-ng-primitives-core';
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';
@@ -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_floating_focus_manager.RdxInteractionType>;
315
+ openInteractionType: _angular_core.WritableSignal<_radix_ng_primitives_floating_focus_manager.RdxInteractionType>;
316
+ closeInteractionType: _angular_core.WritableSignal<_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 _radix_ng_primitives_floating_focus_manager.RdxFloatingFocusManager; inputs: { "returnFocus": "finalFocus"; }; 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,19 @@ 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
+ type RdxSelectOpenChangeEventDetails = RdxCancelableChangeEventDetails<RdxSelectOpenChangeReason>;
427
+ interface RdxSelectOpenChangeEvent {
428
+ open: boolean;
429
+ eventDetails: RdxSelectOpenChangeEventDetails;
430
+ }
431
+ type RdxSelectValueChangeEventDetails = RdxCancelableChangeEventDetails<RdxSelectValueChangeReason>;
432
+ interface RdxSelectValueChangeEvent {
433
+ value: AcceptableValue | AcceptableValue[];
434
+ eventDetails: RdxSelectValueChangeEventDetails;
435
+ }
441
436
  declare const context: () => {
442
437
  triggerElement: _angular_core.WritableSignal<HTMLElement | null>;
443
438
  valueElement: _angular_core.WritableSignal<HTMLElement | null>;
@@ -446,24 +441,28 @@ declare const context: () => {
446
441
  y: number;
447
442
  } | null>;
448
443
  contentId: string;
449
- dir: _angular_core.InputSignal<Direction>;
444
+ dir: Signal<Direction>;
450
445
  value: _angular_core.ModelSignal<AcceptableValue | AcceptableValue[] | undefined>;
451
446
  multiple: _angular_core.InputSignalWithTransform<boolean, unknown>;
452
447
  isItemEqualToValue: _angular_core.InputSignal<ItemValueComparator<AcceptableValue> | undefined>;
453
448
  itemToStringLabel: _angular_core.InputSignal<((value: AcceptableValue) => string) | undefined>;
454
449
  open: _angular_core.ModelSignal<boolean>;
450
+ openedByTouch: _angular_core.WritableSignal<boolean>;
451
+ openMethod: Signal<RdxInteractionType>;
452
+ openInteractionType: _angular_core.WritableSignal<RdxInteractionType>;
453
+ closeInteractionType: _angular_core.WritableSignal<RdxInteractionType>;
455
454
  disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
456
455
  modal: _angular_core.InputSignalWithTransform<boolean, unknown>;
457
- isEmptyModelValue: _angular_core.Signal<boolean>;
458
- transitionStatus: _angular_core.Signal<_radix_ng_primitives_core.RdxTransitionStatus>;
456
+ isEmptyModelValue: Signal<boolean>;
457
+ transitionStatus: Signal<_radix_ng_primitives_core.RdxTransitionStatus>;
459
458
  registerTransitionElement: (element: HTMLElement) => () => void;
460
459
  optionsSet: _angular_core.WritableSignal<Set<SelectOption>>;
461
460
  onOptionAdd: (option: any) => void;
462
461
  onOptionRemove: (option: any) => void;
463
- onValueChange: (value: AcceptableValue) => void;
462
+ onValueChange: (value: AcceptableValue, reason?: RdxSelectValueChangeReason, event?: Event) => boolean;
464
463
  onTriggerChange: (node: any) => void;
465
464
  onValueElementChange: (node: any) => void;
466
- onOpenChange: (value: any) => void;
465
+ onOpenChange: (value: boolean, reason?: RdxSelectOpenChangeReason, event?: Event) => boolean;
467
466
  };
468
467
  type RdxSelectRootContext = ReturnType<typeof context>;
469
468
  declare const injectSelectRootContext: _radix_ng_primitives_core.InjectContext<{
@@ -474,24 +473,28 @@ declare const injectSelectRootContext: _radix_ng_primitives_core.InjectContext<{
474
473
  y: number;
475
474
  } | null>;
476
475
  contentId: string;
477
- dir: _angular_core.InputSignal<Direction>;
476
+ dir: Signal<Direction>;
478
477
  value: _angular_core.ModelSignal<AcceptableValue | AcceptableValue[] | undefined>;
479
478
  multiple: _angular_core.InputSignalWithTransform<boolean, unknown>;
480
479
  isItemEqualToValue: _angular_core.InputSignal<ItemValueComparator<AcceptableValue> | undefined>;
481
480
  itemToStringLabel: _angular_core.InputSignal<((value: AcceptableValue) => string) | undefined>;
482
481
  open: _angular_core.ModelSignal<boolean>;
482
+ openedByTouch: _angular_core.WritableSignal<boolean>;
483
+ openMethod: Signal<RdxInteractionType>;
484
+ openInteractionType: _angular_core.WritableSignal<RdxInteractionType>;
485
+ closeInteractionType: _angular_core.WritableSignal<RdxInteractionType>;
483
486
  disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
484
487
  modal: _angular_core.InputSignalWithTransform<boolean, unknown>;
485
- isEmptyModelValue: _angular_core.Signal<boolean>;
486
- transitionStatus: _angular_core.Signal<_radix_ng_primitives_core.RdxTransitionStatus>;
488
+ isEmptyModelValue: Signal<boolean>;
489
+ transitionStatus: Signal<_radix_ng_primitives_core.RdxTransitionStatus>;
487
490
  registerTransitionElement: (element: HTMLElement) => () => void;
488
491
  optionsSet: _angular_core.WritableSignal<Set<SelectOption>>;
489
492
  onOptionAdd: (option: any) => void;
490
493
  onOptionRemove: (option: any) => void;
491
- onValueChange: (value: AcceptableValue) => void;
494
+ onValueChange: (value: AcceptableValue, reason?: RdxSelectValueChangeReason, event?: Event) => boolean;
492
495
  onTriggerChange: (node: any) => void;
493
496
  onValueElementChange: (node: any) => void;
494
- onOpenChange: (value: any) => void;
497
+ onOpenChange: (value: boolean, reason?: RdxSelectOpenChangeReason, event?: Event) => boolean;
495
498
  }>;
496
499
  declare const provideSelectRootContext: (useFactory: () => {
497
500
  triggerElement: _angular_core.WritableSignal<HTMLElement | null>;
@@ -501,48 +504,68 @@ declare const provideSelectRootContext: (useFactory: () => {
501
504
  y: number;
502
505
  } | null>;
503
506
  contentId: string;
504
- dir: _angular_core.InputSignal<Direction>;
507
+ dir: Signal<Direction>;
505
508
  value: _angular_core.ModelSignal<AcceptableValue | AcceptableValue[] | undefined>;
506
509
  multiple: _angular_core.InputSignalWithTransform<boolean, unknown>;
507
510
  isItemEqualToValue: _angular_core.InputSignal<ItemValueComparator<AcceptableValue> | undefined>;
508
511
  itemToStringLabel: _angular_core.InputSignal<((value: AcceptableValue) => string) | undefined>;
509
512
  open: _angular_core.ModelSignal<boolean>;
513
+ openedByTouch: _angular_core.WritableSignal<boolean>;
514
+ openMethod: Signal<RdxInteractionType>;
515
+ openInteractionType: _angular_core.WritableSignal<RdxInteractionType>;
516
+ closeInteractionType: _angular_core.WritableSignal<RdxInteractionType>;
510
517
  disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
511
518
  modal: _angular_core.InputSignalWithTransform<boolean, unknown>;
512
- isEmptyModelValue: _angular_core.Signal<boolean>;
513
- transitionStatus: _angular_core.Signal<_radix_ng_primitives_core.RdxTransitionStatus>;
519
+ isEmptyModelValue: Signal<boolean>;
520
+ transitionStatus: Signal<_radix_ng_primitives_core.RdxTransitionStatus>;
514
521
  registerTransitionElement: (element: HTMLElement) => () => void;
515
522
  optionsSet: _angular_core.WritableSignal<Set<SelectOption>>;
516
523
  onOptionAdd: (option: any) => void;
517
524
  onOptionRemove: (option: any) => void;
518
- onValueChange: (value: AcceptableValue) => void;
525
+ onValueChange: (value: AcceptableValue, reason?: RdxSelectValueChangeReason, event?: Event) => boolean;
519
526
  onTriggerChange: (node: any) => void;
520
527
  onValueElementChange: (node: any) => void;
521
- onOpenChange: (value: any) => void;
528
+ onOpenChange: (value: boolean, reason?: RdxSelectOpenChangeReason, event?: Event) => boolean;
522
529
  }) => _angular_core.Provider;
523
530
  declare class RdxSelectRoot {
531
+ readonly contentId: string;
524
532
  readonly open: _angular_core.ModelSignal<boolean>;
533
+ /** Whether the current open was initiated by **touch** (ADR 0016 §3 — gates the anchored scroll lock). */
534
+ readonly openedByTouch: _angular_core.WritableSignal<boolean>;
535
+ /** How the select was opened. Base UI names this state `openMethod`. */
536
+ readonly openInteractionType: _angular_core.WritableSignal<RdxInteractionType>;
537
+ /** How the select was closed. */
538
+ readonly closeInteractionType: _angular_core.WritableSignal<RdxInteractionType>;
539
+ /** Public Base UI-aligned alias for the open interaction type. */
540
+ readonly openMethod: Signal<RdxSelectOpenMethod>;
541
+ /** Per-popup floating root context (ADR 0015) — `open` / `triggers` / reference for the dismissal engine. */
542
+ readonly floatingContext: RdxFloatingRootContext;
525
543
  readonly value: _angular_core.ModelSignal<AcceptableValue | AcceptableValue[] | undefined>;
526
544
  readonly multiple: _angular_core.InputSignalWithTransform<boolean, unknown>;
527
545
  readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
528
546
  /** Whether the popup is modal: locks page scroll and makes outside content inert while open. */
529
547
  readonly modal: _angular_core.InputSignalWithTransform<boolean, unknown>;
530
- readonly dir: _angular_core.InputSignal<Direction>;
548
+ readonly dirInput: _angular_core.InputSignal<Direction | undefined>;
549
+ readonly dir: Signal<Direction>;
531
550
  /** How item values are compared for equality — a function `(a, b) => boolean` or an object key. */
532
551
  readonly isItemEqualToValue: _angular_core.InputSignal<ItemValueComparator<AcceptableValue> | undefined>;
533
552
  /** Converts a value to its display label (used by `RdxSelectValue`). */
534
553
  readonly itemToStringLabel: _angular_core.InputSignal<((value: AcceptableValue) => string) | undefined>;
554
+ /** Emits before an open-state change is committed; call `eventDetails.cancel()` to veto it. */
555
+ readonly onOpenChange: _angular_core.OutputEmitterRef<RdxSelectOpenChangeEvent>;
556
+ /** Emits before a value change is committed; call `eventDetails.cancel()` to veto it. */
557
+ readonly onValueChange: _angular_core.OutputEmitterRef<RdxSelectValueChangeEvent>;
535
558
  /** Emits after the open/close transition (including any exit animation) finishes. */
536
559
  readonly onOpenChangeComplete: _angular_core.OutputEmitterRef<boolean>;
537
560
  private readonly transition;
538
561
  /** Open/close transition phase, for `data-starting-style` / `data-ending-style`. */
539
- readonly transitionStatus: _angular_core.Signal<_radix_ng_primitives_core.RdxTransitionStatus>;
562
+ readonly transitionStatus: Signal<_radix_ng_primitives_core.RdxTransitionStatus>;
540
563
  /** Registers the popup element whose animation determines transition completion. */
541
564
  readonly registerTransitionElement: (element: HTMLElement) => () => void;
542
- readonly isEmptyModelValue: _angular_core.Signal<boolean>;
565
+ readonly isEmptyModelValue: Signal<boolean>;
543
566
  constructor();
544
567
  readonly optionsSet: _angular_core.WritableSignal<Set<SelectOption>>;
545
- readonly nativeSelectKey: _angular_core.Signal<string>;
568
+ readonly nativeSelectKey: Signal<string>;
546
569
  readonly triggerElement: _angular_core.WritableSignal<HTMLElement | null>;
547
570
  readonly valueElement: _angular_core.WritableSignal<HTMLElement | null>;
548
571
  readonly triggerPointerDownPosRef: _angular_core.WritableSignal<{
@@ -550,9 +573,10 @@ declare class RdxSelectRoot {
550
573
  y: number;
551
574
  } | null>;
552
575
  getOption(value: SelectOption['value']): SelectOption | undefined;
553
- handleValueChange(value: AcceptableValue): void;
576
+ setValue(value: AcceptableValue, reason?: RdxSelectValueChangeReason, event?: Event): boolean;
577
+ setOpen(open: boolean, reason?: RdxSelectOpenChangeReason, event?: Event): boolean;
554
578
  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: {}; }]>;
579
+ 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
580
  }
557
581
 
558
582
  /**
@@ -574,12 +598,16 @@ declare class RdxSelectTrigger {
574
598
  y: number;
575
599
  } | null>;
576
600
  contentId: string;
577
- dir: _angular_core.InputSignal<_radix_ng_primitives_core.Direction>;
601
+ dir: _angular_core.Signal<_radix_ng_primitives_core.Direction>;
578
602
  value: _angular_core.ModelSignal<_radix_ng_primitives_core.AcceptableValue | _radix_ng_primitives_core.AcceptableValue[] | undefined>;
579
603
  multiple: _angular_core.InputSignalWithTransform<boolean, unknown>;
580
604
  isItemEqualToValue: _angular_core.InputSignal<_radix_ng_primitives_core.ItemValueComparator<_radix_ng_primitives_core.AcceptableValue> | undefined>;
581
605
  itemToStringLabel: _angular_core.InputSignal<((value: _radix_ng_primitives_core.AcceptableValue) => string) | undefined>;
582
606
  open: _angular_core.ModelSignal<boolean>;
607
+ openedByTouch: _angular_core.WritableSignal<boolean>;
608
+ openMethod: _angular_core.Signal<_radix_ng_primitives_floating_focus_manager.RdxInteractionType>;
609
+ openInteractionType: _angular_core.WritableSignal<_radix_ng_primitives_floating_focus_manager.RdxInteractionType>;
610
+ closeInteractionType: _angular_core.WritableSignal<_radix_ng_primitives_floating_focus_manager.RdxInteractionType>;
583
611
  disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
584
612
  modal: _angular_core.InputSignalWithTransform<boolean, unknown>;
585
613
  isEmptyModelValue: _angular_core.Signal<boolean>;
@@ -588,10 +616,10 @@ declare class RdxSelectTrigger {
588
616
  optionsSet: _angular_core.WritableSignal<Set<_radix_ng_primitives_select.SelectOption>>;
589
617
  onOptionAdd: (option: any) => void;
590
618
  onOptionRemove: (option: any) => void;
591
- onValueChange: (value: _radix_ng_primitives_core.AcceptableValue) => void;
619
+ onValueChange: (value: _radix_ng_primitives_core.AcceptableValue, reason?: _radix_ng_primitives_select.RdxSelectValueChangeReason, event?: Event) => boolean;
592
620
  onTriggerChange: (node: any) => void;
593
621
  onValueElementChange: (node: any) => void;
594
- onOpenChange: (value: any) => void;
622
+ onOpenChange: (value: boolean, reason?: _radix_ng_primitives_select.RdxSelectOpenChangeReason, event?: Event) => boolean;
595
623
  };
596
624
  readonly elementRef: ElementRef<HTMLElement>;
597
625
  private readonly fieldRootContext;
@@ -599,13 +627,14 @@ declare class RdxSelectTrigger {
599
627
  readonly id: _angular_core.InputSignal<string>;
600
628
  readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
601
629
  readonly isDisabled: _angular_core.Signal<boolean>;
630
+ protected readonly triggerInteraction: _radix_ng_primitives_floating_focus_manager.RdxTriggerInteraction;
602
631
  protected readonly invalidState: _angular_core.Signal<boolean>;
603
632
  protected readonly requiredState: _angular_core.Signal<boolean>;
604
633
  protected readonly filledState: _angular_core.Signal<boolean>;
605
634
  protected readonly focusedState: _angular_core.Signal<boolean>;
606
635
  protected readonly describedBy: _angular_core.Signal<string | undefined>;
607
636
  constructor();
608
- handleOpen(): void;
637
+ handleOpen(reason: 'trigger-press' | 'list-navigation', event: Event): boolean;
609
638
  handlePointerOpen(event: Event): void;
610
639
  onClickHandler(event: Event): void;
611
640
  onPointerDown(event: Event): void;
@@ -627,12 +656,16 @@ declare class RdxSelectValue {
627
656
  y: number;
628
657
  } | null>;
629
658
  contentId: string;
630
- dir: _angular_core.InputSignal<_radix_ng_primitives_core.Direction>;
659
+ dir: _angular_core.Signal<_radix_ng_primitives_core.Direction>;
631
660
  value: _angular_core.ModelSignal<AcceptableValue | AcceptableValue[] | undefined>;
632
661
  multiple: _angular_core.InputSignalWithTransform<boolean, unknown>;
633
662
  isItemEqualToValue: _angular_core.InputSignal<_radix_ng_primitives_core.ItemValueComparator<AcceptableValue> | undefined>;
634
663
  itemToStringLabel: _angular_core.InputSignal<((value: AcceptableValue) => string) | undefined>;
635
664
  open: _angular_core.ModelSignal<boolean>;
665
+ openedByTouch: _angular_core.WritableSignal<boolean>;
666
+ openMethod: _angular_core.Signal<_radix_ng_primitives_types_radix_ng_primitives_floating_focus_manager.RdxInteractionType>;
667
+ openInteractionType: _angular_core.WritableSignal<_radix_ng_primitives_types_radix_ng_primitives_floating_focus_manager.RdxInteractionType>;
668
+ closeInteractionType: _angular_core.WritableSignal<_radix_ng_primitives_types_radix_ng_primitives_floating_focus_manager.RdxInteractionType>;
636
669
  disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
637
670
  modal: _angular_core.InputSignalWithTransform<boolean, unknown>;
638
671
  isEmptyModelValue: _angular_core.Signal<boolean>;
@@ -641,10 +674,10 @@ declare class RdxSelectValue {
641
674
  optionsSet: _angular_core.WritableSignal<Set<_radix_ng_primitives_select.SelectOption>>;
642
675
  onOptionAdd: (option: any) => void;
643
676
  onOptionRemove: (option: any) => void;
644
- onValueChange: (value: AcceptableValue) => void;
677
+ onValueChange: (value: AcceptableValue, reason?: _radix_ng_primitives_select.RdxSelectValueChangeReason, event?: Event) => boolean;
645
678
  onTriggerChange: (node: any) => void;
646
679
  onValueElementChange: (node: any) => void;
647
- onOpenChange: (value: any) => void;
680
+ onOpenChange: (value: boolean, reason?: _radix_ng_primitives_select.RdxSelectOpenChangeReason, event?: Event) => boolean;
648
681
  };
649
682
  readonly elementRef: ElementRef<HTMLElement>;
650
683
  readonly placeholder: _angular_core.InputSignal<string | undefined>;
@@ -666,4 +699,4 @@ declare function focusFirst(candidates: HTMLElement[]): void;
666
699
  declare const _importsSelect: (typeof RdxSelectGroupLabel)[];
667
700
 
668
701
  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 };
702
+ export type { RdxPositionerImpl, RdxSelectItemContext, RdxSelectOpenChangeEvent, RdxSelectOpenChangeEventDetails, RdxSelectOpenChangeReason, RdxSelectOpenMethod, RdxSelectPopupContext, RdxSelectRootContext, RdxSelectValueChangeEvent, RdxSelectValueChangeEventDetails, RdxSelectValueChangeReason, SelectEvent, SelectOption };