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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (107) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +76 -6
  3. package/fesm2022/radix-ng-primitives-accordion.mjs +2 -2
  4. package/fesm2022/radix-ng-primitives-accordion.mjs.map +1 -1
  5. package/fesm2022/radix-ng-primitives-alert-dialog.mjs +30 -24
  6. package/fesm2022/radix-ng-primitives-alert-dialog.mjs.map +1 -1
  7. package/fesm2022/radix-ng-primitives-autocomplete.mjs +1786 -0
  8. package/fesm2022/radix-ng-primitives-autocomplete.mjs.map +1 -0
  9. package/fesm2022/radix-ng-primitives-calendar.mjs +14 -1
  10. package/fesm2022/radix-ng-primitives-calendar.mjs.map +1 -1
  11. package/fesm2022/radix-ng-primitives-checkbox.mjs +2 -2
  12. package/fesm2022/radix-ng-primitives-checkbox.mjs.map +1 -1
  13. package/fesm2022/radix-ng-primitives-collapsible.mjs +1 -1
  14. package/fesm2022/radix-ng-primitives-collapsible.mjs.map +1 -1
  15. package/fesm2022/radix-ng-primitives-combobox.mjs +1983 -0
  16. package/fesm2022/radix-ng-primitives-combobox.mjs.map +1 -0
  17. package/fesm2022/radix-ng-primitives-context-menu.mjs +1 -1
  18. package/fesm2022/radix-ng-primitives-context-menu.mjs.map +1 -1
  19. package/fesm2022/radix-ng-primitives-core.mjs +480 -469
  20. package/fesm2022/radix-ng-primitives-core.mjs.map +1 -1
  21. package/fesm2022/radix-ng-primitives-cropper.mjs +1 -1
  22. package/fesm2022/radix-ng-primitives-cropper.mjs.map +1 -1
  23. package/fesm2022/radix-ng-primitives-date-field.mjs +11 -0
  24. package/fesm2022/radix-ng-primitives-date-field.mjs.map +1 -1
  25. package/fesm2022/radix-ng-primitives-dialog.mjs +44 -46
  26. package/fesm2022/radix-ng-primitives-dialog.mjs.map +1 -1
  27. package/fesm2022/radix-ng-primitives-drawer.mjs +154 -64
  28. package/fesm2022/radix-ng-primitives-drawer.mjs.map +1 -1
  29. package/fesm2022/radix-ng-primitives-editable.mjs +1 -1
  30. package/fesm2022/radix-ng-primitives-editable.mjs.map +1 -1
  31. package/fesm2022/radix-ng-primitives-field.mjs +86 -6
  32. package/fesm2022/radix-ng-primitives-field.mjs.map +1 -1
  33. package/fesm2022/radix-ng-primitives-fieldset.mjs +1 -1
  34. package/fesm2022/radix-ng-primitives-fieldset.mjs.map +1 -1
  35. package/fesm2022/radix-ng-primitives-focus-scope.mjs +1 -1
  36. package/fesm2022/radix-ng-primitives-focus-scope.mjs.map +1 -1
  37. package/fesm2022/radix-ng-primitives-form.mjs +207 -0
  38. package/fesm2022/radix-ng-primitives-form.mjs.map +1 -0
  39. package/fesm2022/radix-ng-primitives-input.mjs +85 -4
  40. package/fesm2022/radix-ng-primitives-input.mjs.map +1 -1
  41. package/fesm2022/radix-ng-primitives-menu.mjs +44 -24
  42. package/fesm2022/radix-ng-primitives-menu.mjs.map +1 -1
  43. package/fesm2022/radix-ng-primitives-menubar.mjs +1 -1
  44. package/fesm2022/radix-ng-primitives-menubar.mjs.map +1 -1
  45. package/fesm2022/radix-ng-primitives-meter.mjs +1 -1
  46. package/fesm2022/radix-ng-primitives-meter.mjs.map +1 -1
  47. package/fesm2022/radix-ng-primitives-navigation-menu.mjs +39 -55
  48. package/fesm2022/radix-ng-primitives-navigation-menu.mjs.map +1 -1
  49. package/fesm2022/radix-ng-primitives-number-field.mjs +2 -2
  50. package/fesm2022/radix-ng-primitives-number-field.mjs.map +1 -1
  51. package/fesm2022/radix-ng-primitives-popover.mjs +36 -51
  52. package/fesm2022/radix-ng-primitives-popover.mjs.map +1 -1
  53. package/fesm2022/radix-ng-primitives-popper.mjs +12 -6
  54. package/fesm2022/radix-ng-primitives-popper.mjs.map +1 -1
  55. package/fesm2022/radix-ng-primitives-portal.mjs +107 -17
  56. package/fesm2022/radix-ng-primitives-portal.mjs.map +1 -1
  57. package/fesm2022/radix-ng-primitives-presence.mjs +262 -79
  58. package/fesm2022/radix-ng-primitives-presence.mjs.map +1 -1
  59. package/fesm2022/radix-ng-primitives-preview-card.mjs +37 -51
  60. package/fesm2022/radix-ng-primitives-preview-card.mjs.map +1 -1
  61. package/fesm2022/radix-ng-primitives-progress.mjs +1 -1
  62. package/fesm2022/radix-ng-primitives-progress.mjs.map +1 -1
  63. package/fesm2022/radix-ng-primitives-roving-focus.mjs +1 -1
  64. package/fesm2022/radix-ng-primitives-roving-focus.mjs.map +1 -1
  65. package/fesm2022/radix-ng-primitives-scroll-area.mjs +3 -3
  66. package/fesm2022/radix-ng-primitives-scroll-area.mjs.map +1 -1
  67. package/fesm2022/radix-ng-primitives-select.mjs +469 -258
  68. package/fesm2022/radix-ng-primitives-select.mjs.map +1 -1
  69. package/fesm2022/radix-ng-primitives-slider.mjs +1 -1
  70. package/fesm2022/radix-ng-primitives-slider.mjs.map +1 -1
  71. package/fesm2022/radix-ng-primitives-switch.mjs +3 -2
  72. package/fesm2022/radix-ng-primitives-switch.mjs.map +1 -1
  73. package/fesm2022/radix-ng-primitives-tabs.mjs +1 -1
  74. package/fesm2022/radix-ng-primitives-tabs.mjs.map +1 -1
  75. package/fesm2022/radix-ng-primitives-time-field.mjs +27 -3
  76. package/fesm2022/radix-ng-primitives-time-field.mjs.map +1 -1
  77. package/fesm2022/radix-ng-primitives-toast.mjs +1 -1
  78. package/fesm2022/radix-ng-primitives-toast.mjs.map +1 -1
  79. package/fesm2022/radix-ng-primitives-toggle-group.mjs +1 -1
  80. package/fesm2022/radix-ng-primitives-toggle-group.mjs.map +1 -1
  81. package/fesm2022/radix-ng-primitives-toolbar.mjs +2 -2
  82. package/fesm2022/radix-ng-primitives-toolbar.mjs.map +1 -1
  83. package/fesm2022/radix-ng-primitives-tooltip.mjs +39 -42
  84. package/fesm2022/radix-ng-primitives-tooltip.mjs.map +1 -1
  85. package/package.json +13 -1
  86. package/schematics/ng-add/index.js +57 -0
  87. package/schematics/ng-add/index.js.map +1 -1
  88. package/schematics/ng-add/schema.d.ts +1 -0
  89. package/schematics/ng-add/schema.json +6 -0
  90. package/types/radix-ng-primitives-alert-dialog.d.ts +17 -11
  91. package/types/radix-ng-primitives-autocomplete.d.ts +596 -0
  92. package/types/radix-ng-primitives-combobox.d.ts +1310 -0
  93. package/types/radix-ng-primitives-core.d.ts +148 -56
  94. package/types/radix-ng-primitives-dialog.d.ts +32 -25
  95. package/types/radix-ng-primitives-drawer.d.ts +49 -22
  96. package/types/radix-ng-primitives-field.d.ts +71 -2
  97. package/types/radix-ng-primitives-form.d.ts +124 -0
  98. package/types/radix-ng-primitives-input.d.ts +75 -5
  99. package/types/radix-ng-primitives-menu.d.ts +19 -10
  100. package/types/radix-ng-primitives-navigation-menu.d.ts +24 -26
  101. package/types/radix-ng-primitives-popover.d.ts +23 -23
  102. package/types/radix-ng-primitives-popper.d.ts +7 -1
  103. package/types/radix-ng-primitives-portal.d.ts +53 -8
  104. package/types/radix-ng-primitives-presence.d.ts +98 -17
  105. package/types/radix-ng-primitives-preview-card.d.ts +24 -23
  106. package/types/radix-ng-primitives-select.d.ts +294 -137
  107. package/types/radix-ng-primitives-tooltip.d.ts +26 -19
@@ -1,65 +1,30 @@
1
1
  import * as _angular_core from '@angular/core';
2
2
  import { InjectionToken, OutputRef, ElementRef } from '@angular/core';
3
3
  import * as _radix_ng_primitives_core from '@radix-ng/primitives/core';
4
- import { AcceptableValue, Direction } from '@radix-ng/primitives/core';
4
+ import { AcceptableValue, Direction, ItemValueComparator } from '@radix-ng/primitives/core';
5
5
  import * as _radix_ng_primitives_select from '@radix-ng/primitives/select';
6
- import * as i1 from '@radix-ng/primitives/focus-scope';
7
- import * as i2 from '@radix-ng/primitives/dismissable-layer';
8
- import * as i3 from '@radix-ng/primitives/collection';
9
- import * as _radix_ng_primitives_types_radix_ng_primitives_core from '@radix-ng/primitives/types/radix-ng-primitives-core';
6
+ import * as i1 from '@radix-ng/primitives/collection';
7
+ import { RdxCollectionItem } from '@radix-ng/primitives/collection';
10
8
  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';
11
+ import * as _radix_ng_primitives_types_radix_ng_primitives_core from '@radix-ng/primitives/types/radix-ng-primitives-core';
12
+ import * as _radix_ng_primitives_types_radix_ng_primitives_collection from '@radix-ng/primitives/types/radix-ng-primitives-collection';
11
13
  import * as i1$2 from '@radix-ng/primitives/portal';
12
- import { RdxPortalContainer } from '@radix-ng/primitives/portal';
13
- import * as i1$3 from '@radix-ng/primitives/presence';
14
14
 
15
- declare class RdxSelectLabel {
16
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdxSelectLabel, never>;
17
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxSelectLabel, "[rdxSelectLabel]", never, {}, {}, never, never, true, never>;
15
+ declare class RdxSelectGroupLabel {
16
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdxSelectGroupLabel, never>;
17
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxSelectGroupLabel, "[rdxSelectGroupLabel]", never, {}, {}, never, never, true, never>;
18
18
  }
19
19
 
20
- declare const context$2: () => {
21
- content: _angular_core.WritableSignal<HTMLElement | null>;
22
- viewport: _angular_core.WritableSignal<HTMLElement | undefined>;
23
- isPositioned: _angular_core.WritableSignal<boolean>;
24
- selectedItem: _angular_core.WritableSignal<HTMLElement | undefined>;
25
- selectedItemText: _angular_core.WritableSignal<HTMLElement | undefined>;
26
- onViewportChange: (node: any) => void;
27
- onItemLeave: () => void;
28
- itemRefCallback: (node: any, value: any, disabled: boolean) => void;
29
- itemTextRefCallback: (node: any, value: any, disabled: any) => void;
30
- };
31
- type RdxSelectContentContext = ReturnType<typeof context$2>;
32
- declare const injectSelectContentContext: _radix_ng_primitives_core.InjectContext<{
33
- content: _angular_core.WritableSignal<HTMLElement | null>;
34
- viewport: _angular_core.WritableSignal<HTMLElement | undefined>;
35
- isPositioned: _angular_core.WritableSignal<boolean>;
36
- selectedItem: _angular_core.WritableSignal<HTMLElement | undefined>;
37
- selectedItemText: _angular_core.WritableSignal<HTMLElement | undefined>;
38
- onViewportChange: (node: any) => void;
39
- onItemLeave: () => void;
40
- itemRefCallback: (node: any, value: any, disabled: boolean) => void;
41
- itemTextRefCallback: (node: any, value: any, disabled: any) => void;
42
- }>;
43
- declare const provideSelectContentContext: (useFactory: () => {
44
- content: _angular_core.WritableSignal<HTMLElement | null>;
45
- viewport: _angular_core.WritableSignal<HTMLElement | undefined>;
46
- isPositioned: _angular_core.WritableSignal<boolean>;
47
- selectedItem: _angular_core.WritableSignal<HTMLElement | undefined>;
48
- selectedItemText: _angular_core.WritableSignal<HTMLElement | undefined>;
49
- onViewportChange: (node: any) => void;
50
- onItemLeave: () => void;
51
- itemRefCallback: (node: any, value: any, disabled: boolean) => void;
52
- itemTextRefCallback: (node: any, value: any, disabled: any) => void;
53
- }) => _angular_core.Provider;
54
- interface RdxPositionerImpl {
55
- placed: OutputRef<any>;
56
- }
57
- declare const RDX_SELECT_POSITIONER_TOKEN: InjectionToken<RdxPositionerImpl>;
58
- declare class RdxSelectContent {
59
- private readonly dismissableLayer;
60
- private readonly currentElement;
61
- private readonly collection;
62
- readonly rootContext: {
20
+ /**
21
+ * An overlay rendered beneath the popup in `modal` mode. Place it inside the portal/presence; style
22
+ * it `position: fixed; inset: 0`. Exposes `data-open` / `data-closed` for animation.
23
+ *
24
+ * @group Components
25
+ */
26
+ declare class RdxSelectBackdrop {
27
+ protected readonly rootContext: {
63
28
  triggerElement: _angular_core.WritableSignal<HTMLElement | null>;
64
29
  valueElement: _angular_core.WritableSignal<HTMLElement | null>;
65
30
  triggerPointerDownPosRef: _angular_core.WritableSignal<{
@@ -67,42 +32,27 @@ declare class RdxSelectContent {
67
32
  y: number;
68
33
  } | null>;
69
34
  contentId: string;
70
- dir: _angular_core.InputSignal<_radix_ng_primitives_core.Direction>;
71
- value: _angular_core.ModelSignal<_radix_ng_primitives_core.AcceptableValue | _radix_ng_primitives_core.AcceptableValue[] | undefined>;
35
+ dir: _angular_core.InputSignal<_radix_ng_primitives_types_radix_ng_primitives_core.Direction>;
36
+ value: _angular_core.ModelSignal<_radix_ng_primitives_types_radix_ng_primitives_core.AcceptableValue | _radix_ng_primitives_types_radix_ng_primitives_core.AcceptableValue[] | undefined>;
72
37
  multiple: _angular_core.InputSignalWithTransform<boolean, unknown>;
73
- by: _angular_core.InputSignal<string | ((a: _radix_ng_primitives_core.AcceptableValue, b: _radix_ng_primitives_core.AcceptableValue) => boolean) | undefined>;
38
+ isItemEqualToValue: _angular_core.InputSignal<_radix_ng_primitives_types_radix_ng_primitives_core.ItemValueComparator<_radix_ng_primitives_types_radix_ng_primitives_core.AcceptableValue> | undefined>;
39
+ itemToStringLabel: _angular_core.InputSignal<((value: _radix_ng_primitives_types_radix_ng_primitives_core.AcceptableValue) => string) | undefined>;
74
40
  open: _angular_core.ModelSignal<boolean>;
75
41
  disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
42
+ modal: _angular_core.InputSignalWithTransform<boolean, unknown>;
43
+ isEmptyModelValue: _angular_core.Signal<boolean>;
44
+ transitionStatus: _angular_core.Signal<_radix_ng_primitives_types_radix_ng_primitives_core.RdxTransitionStatus>;
45
+ registerTransitionElement: (element: HTMLElement) => () => void;
76
46
  optionsSet: _angular_core.WritableSignal<Set<_radix_ng_primitives_select.SelectOption>>;
77
47
  onOptionAdd: (option: any) => void;
78
48
  onOptionRemove: (option: any) => void;
79
- onValueChange: (value: _radix_ng_primitives_core.AcceptableValue) => void;
49
+ onValueChange: (value: _radix_ng_primitives_types_radix_ng_primitives_core.AcceptableValue) => void;
80
50
  onTriggerChange: (node: any) => void;
81
51
  onValueElementChange: (node: any) => void;
82
52
  onOpenChange: (value: any) => void;
83
53
  };
84
- readonly selectedItem: _angular_core.WritableSignal<HTMLElement | undefined>;
85
- readonly selectedItemText: _angular_core.WritableSignal<HTMLElement | undefined>;
86
- readonly firstValidItemFoundRef: _angular_core.WritableSignal<boolean>;
87
- readonly viewport: _angular_core.WritableSignal<HTMLElement | undefined>;
88
- readonly isPositioned: _angular_core.WritableSignal<boolean>;
89
- /**
90
- * Event handler called when the escape key is down.
91
- * Can be prevented.
92
- */
93
- readonly escapeKeyDown: OutputRef<KeyboardEvent>;
94
- /**
95
- * Event handler called when a `pointerdown` event happens outside of the `DismissableLayer`.
96
- * Can be prevented.
97
- */
98
- readonly pointerDownOutside: OutputRef<PointerEvent>;
99
- readonly content: _angular_core.WritableSignal<HTMLElement | null>;
100
- set positioner(port: RdxPositionerImpl | undefined);
101
- constructor();
102
- focusSelectedItem(): void;
103
- handleKeyDown(event: Event): void;
104
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdxSelectContent, never>;
105
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxSelectContent, "[rdxSelectContent]", never, {}, { "escapeKeyDown": "escapeKeyDown"; "pointerDownOutside": "pointerDownOutside"; }, ["positioner"], never, true, [{ directive: typeof i1.RdxFocusScope; inputs: {}; outputs: {}; }, { directive: typeof i2.RdxDismissableLayer; inputs: {}; outputs: {}; }, { directive: typeof i3.RdxCollectionProvider; inputs: {}; outputs: {}; }]>;
54
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdxSelectBackdrop, never>;
55
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxSelectBackdrop, "[rdxSelectBackdrop]", ["rdxSelectBackdrop"], {}, {}, never, never, true, never>;
106
56
  }
107
57
 
108
58
  declare class RdxSelectGroup {
@@ -111,14 +61,24 @@ declare class RdxSelectGroup {
111
61
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxSelectGroup, "[rdxSelectGroup]", ["rdxSelectGroup"], {}, {}, never, never, true, never>;
112
62
  }
113
63
 
114
- declare const context$1: () => {
64
+ /**
65
+ * Decorative icon inside the trigger (e.g. a chevron). Hidden from assistive technology.
66
+ *
67
+ * @group Components
68
+ */
69
+ declare class RdxSelectIcon {
70
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdxSelectIcon, never>;
71
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxSelectIcon, "[rdxSelectIcon]", ["rdxSelectIcon"], {}, {}, never, never, true, never>;
72
+ }
73
+
74
+ declare const context$2: () => {
115
75
  value: _angular_core.InputSignal<any>;
116
76
  disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
117
77
  isSelected: _angular_core.Signal<boolean>;
118
78
  textId: string;
119
79
  onItemTextChange: (node: any) => void;
120
80
  };
121
- type RdxSelectItemContext = ReturnType<typeof context$1>;
81
+ type RdxSelectItemContext = ReturnType<typeof context$2>;
122
82
  declare const injectSelectItemContext: _radix_ng_primitives_core.InjectContext<{
123
83
  value: _angular_core.InputSignal<any>;
124
84
  disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
@@ -140,24 +100,26 @@ type SelectEvent = CustomEvent<{
140
100
  declare class RdxSelectItem {
141
101
  private readonly rootContext;
142
102
  private readonly contentContext;
103
+ private readonly collectionItem;
143
104
  private readonly currentElement;
144
105
  readonly value: _angular_core.InputSignal<any>;
145
106
  readonly textValue: _angular_core.InputSignal<string>;
146
107
  readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
147
108
  readonly textValue$: _angular_core.WritableSignal<string>;
148
109
  readonly isSelected: _angular_core.Signal<boolean>;
149
- readonly isFocused: _angular_core.WritableSignal<boolean>;
110
+ /** Highlighted via the highlight model (keyboard / hover), not DOM focus. */
111
+ readonly isHighlighted: _angular_core.Signal<boolean>;
112
+ /** Item id, referenced by the popup's `aria-activedescendant`. */
113
+ readonly id: string;
150
114
  readonly textId: string;
151
115
  private readonly afterNextRender;
152
116
  private SELECT_SELECT;
153
- onPointerDown(event: Event): void;
154
117
  onPointerUp(event: PointerEvent | KeyboardEvent): void;
155
118
  onPointerLeave(event: Event): void;
156
119
  onPointerMove(event: Event): void;
157
120
  handleKeyDown(event: Event): void;
158
- handleSelectCustomEvent(event: PointerEvent | KeyboardEvent): Promise<void>;
159
121
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdxSelectItem, never>;
160
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxSelectItem, "[rdxSelectItem]", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "textValue": { "alias": "textValue"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, {}, never, never, true, [{ directive: typeof i3.RdxCollectionItem; inputs: { "value": "value"; }; outputs: {}; }]>;
122
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxSelectItem, "[rdxSelectItem]", ["rdxSelectItem"], { "value": { "alias": "value"; "required": false; "isSignal": true; }; "textValue": { "alias": "textValue"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, {}, never, never, true, [{ directive: typeof i1.RdxCollectionItem; inputs: { "value": "value"; "disabled": "disabled"; }; outputs: {}; }]>;
161
123
  }
162
124
 
163
125
  declare class RdxSelectItemIndicator {
@@ -185,9 +147,14 @@ declare class RdxSelectItemText {
185
147
  dir: _angular_core.InputSignal<_radix_ng_primitives_types_radix_ng_primitives_core.Direction>;
186
148
  value: _angular_core.ModelSignal<_radix_ng_primitives_types_radix_ng_primitives_core.AcceptableValue | _radix_ng_primitives_types_radix_ng_primitives_core.AcceptableValue[] | undefined>;
187
149
  multiple: _angular_core.InputSignalWithTransform<boolean, unknown>;
188
- by: _angular_core.InputSignal<string | ((a: _radix_ng_primitives_types_radix_ng_primitives_core.AcceptableValue, b: _radix_ng_primitives_types_radix_ng_primitives_core.AcceptableValue) => boolean) | undefined>;
150
+ isItemEqualToValue: _angular_core.InputSignal<_radix_ng_primitives_types_radix_ng_primitives_core.ItemValueComparator<_radix_ng_primitives_types_radix_ng_primitives_core.AcceptableValue> | undefined>;
151
+ itemToStringLabel: _angular_core.InputSignal<((value: _radix_ng_primitives_types_radix_ng_primitives_core.AcceptableValue) => string) | undefined>;
189
152
  open: _angular_core.ModelSignal<boolean>;
190
153
  disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
154
+ modal: _angular_core.InputSignalWithTransform<boolean, unknown>;
155
+ isEmptyModelValue: _angular_core.Signal<boolean>;
156
+ transitionStatus: _angular_core.Signal<_radix_ng_primitives_types_radix_ng_primitives_core.RdxTransitionStatus>;
157
+ registerTransitionElement: (element: HTMLElement) => () => void;
191
158
  optionsSet: _angular_core.WritableSignal<Set<_radix_ng_primitives_select.SelectOption>>;
192
159
  onOptionAdd: (option: any) => void;
193
160
  onOptionRemove: (option: any) => void;
@@ -202,6 +169,11 @@ declare class RdxSelectItemText {
202
169
  isPositioned: _angular_core.WritableSignal<boolean>;
203
170
  selectedItem: _angular_core.WritableSignal<HTMLElement | undefined>;
204
171
  selectedItemText: _angular_core.WritableSignal<HTMLElement | undefined>;
172
+ highlightedItem: _angular_core.Signal<_radix_ng_primitives_types_radix_ng_primitives_collection.RdxCollectionItem<unknown> | null>;
173
+ isHighlighted: (item: _radix_ng_primitives_types_radix_ng_primitives_collection.RdxCollectionItem) => boolean;
174
+ highlightItem: (item: _radix_ng_primitives_types_radix_ng_primitives_collection.RdxCollectionItem) => void;
175
+ isKeyboardActive: () => boolean;
176
+ setKeyboardActive: (value: boolean) => void;
205
177
  onViewportChange: (node: any) => void;
206
178
  onItemLeave: () => void;
207
179
  itemRefCallback: (node: any, value: any, disabled: boolean) => void;
@@ -224,8 +196,88 @@ declare class RdxSelectItemText {
224
196
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxSelectItemText, "[rdxSelectItemText]", never, {}, {}, never, never, true, never>;
225
197
  }
226
198
 
227
- declare class RdxSelectPopperPositionContent {
228
- protected rootContext: {
199
+ declare class RdxSelectList {
200
+ private readonly contentContext;
201
+ private readonly elementRef;
202
+ private readonly prevScrollTopRef;
203
+ constructor();
204
+ handleScroll(event: Event): void;
205
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdxSelectList, never>;
206
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxSelectList, "[rdxSelectList]", never, {}, {}, never, never, true, never>;
207
+ }
208
+
209
+ declare const context$1: () => {
210
+ content: _angular_core.WritableSignal<HTMLElement | null>;
211
+ viewport: _angular_core.WritableSignal<HTMLElement | undefined>;
212
+ isPositioned: _angular_core.WritableSignal<boolean>;
213
+ selectedItem: _angular_core.WritableSignal<HTMLElement | undefined>;
214
+ selectedItemText: _angular_core.WritableSignal<HTMLElement | undefined>;
215
+ highlightedItem: _angular_core.Signal<RdxCollectionItem<unknown> | null>;
216
+ isHighlighted: (item: RdxCollectionItem) => boolean;
217
+ highlightItem: (item: RdxCollectionItem) => void;
218
+ isKeyboardActive: () => boolean;
219
+ setKeyboardActive: (value: boolean) => void;
220
+ onViewportChange: (node: any) => void;
221
+ onItemLeave: () => void;
222
+ itemRefCallback: (node: any, value: any, disabled: boolean) => void;
223
+ itemTextRefCallback: (node: any, value: any, disabled: any) => void;
224
+ };
225
+ type RdxSelectPopupContext = ReturnType<typeof context$1>;
226
+ declare const injectSelectPopupContext: _radix_ng_primitives_core.InjectContext<{
227
+ content: _angular_core.WritableSignal<HTMLElement | null>;
228
+ viewport: _angular_core.WritableSignal<HTMLElement | undefined>;
229
+ isPositioned: _angular_core.WritableSignal<boolean>;
230
+ selectedItem: _angular_core.WritableSignal<HTMLElement | undefined>;
231
+ selectedItemText: _angular_core.WritableSignal<HTMLElement | undefined>;
232
+ highlightedItem: _angular_core.Signal<RdxCollectionItem<unknown> | null>;
233
+ isHighlighted: (item: RdxCollectionItem) => boolean;
234
+ highlightItem: (item: RdxCollectionItem) => void;
235
+ isKeyboardActive: () => boolean;
236
+ setKeyboardActive: (value: boolean) => void;
237
+ onViewportChange: (node: any) => void;
238
+ onItemLeave: () => void;
239
+ itemRefCallback: (node: any, value: any, disabled: boolean) => void;
240
+ itemTextRefCallback: (node: any, value: any, disabled: any) => void;
241
+ }>;
242
+ declare const provideSelectPopupContext: (useFactory: () => {
243
+ content: _angular_core.WritableSignal<HTMLElement | null>;
244
+ viewport: _angular_core.WritableSignal<HTMLElement | undefined>;
245
+ isPositioned: _angular_core.WritableSignal<boolean>;
246
+ selectedItem: _angular_core.WritableSignal<HTMLElement | undefined>;
247
+ selectedItemText: _angular_core.WritableSignal<HTMLElement | undefined>;
248
+ highlightedItem: _angular_core.Signal<RdxCollectionItem<unknown> | null>;
249
+ isHighlighted: (item: RdxCollectionItem) => boolean;
250
+ highlightItem: (item: RdxCollectionItem) => void;
251
+ isKeyboardActive: () => boolean;
252
+ setKeyboardActive: (value: boolean) => void;
253
+ onViewportChange: (node: any) => void;
254
+ onItemLeave: () => void;
255
+ itemRefCallback: (node: any, value: any, disabled: boolean) => void;
256
+ itemTextRefCallback: (node: any, value: any, disabled: any) => void;
257
+ }) => _angular_core.Provider;
258
+ interface RdxPositionerImpl {
259
+ placed: OutputRef<any>;
260
+ }
261
+ declare const RDX_SELECT_POSITIONER_TOKEN: InjectionToken<RdxPositionerImpl>;
262
+ /**
263
+ * The popup listbox. Holds DOM focus while open and navigates with the highlight model
264
+ * (`aria-activedescendant`) — items are not individually focusable.
265
+ *
266
+ * Since ADR 0010 §6 the popup is the **inner** element (the positioner is its ancestor): it carries
267
+ * `role="listbox"`, the `contentId`, and — via the composed {@link RdxPopperContent} — the
268
+ * `data-side` / `data-align` attributes and the until-positioned animation guard previously held by
269
+ * the deleted `rdxSelectPositionerContent`. `RdxPopperContent` also makes the popup the element the
270
+ * `RdxPopperContentWrapper` ancestor reads its content z-index from. In item-aligned mode there is no
271
+ * wrapper, so `RdxPopperContent` no-ops.
272
+ *
273
+ * @group Components
274
+ */
275
+ declare class RdxSelectPopup {
276
+ private readonly dismissableLayer;
277
+ private readonly currentElement;
278
+ private readonly collection;
279
+ private readonly injector;
280
+ readonly rootContext: {
229
281
  triggerElement: _angular_core.WritableSignal<HTMLElement | null>;
230
282
  valueElement: _angular_core.WritableSignal<HTMLElement | null>;
231
283
  triggerPointerDownPosRef: _angular_core.WritableSignal<{
@@ -233,25 +285,96 @@ declare class RdxSelectPopperPositionContent {
233
285
  y: number;
234
286
  } | null>;
235
287
  contentId: string;
236
- dir: _angular_core.InputSignal<_radix_ng_primitives_types_radix_ng_primitives_core.Direction>;
237
- value: _angular_core.ModelSignal<_radix_ng_primitives_types_radix_ng_primitives_core.AcceptableValue | _radix_ng_primitives_types_radix_ng_primitives_core.AcceptableValue[] | undefined>;
288
+ dir: _angular_core.InputSignal<_radix_ng_primitives_core.Direction>;
289
+ value: _angular_core.ModelSignal<AcceptableValue | AcceptableValue[] | undefined>;
238
290
  multiple: _angular_core.InputSignalWithTransform<boolean, unknown>;
239
- by: _angular_core.InputSignal<string | ((a: _radix_ng_primitives_types_radix_ng_primitives_core.AcceptableValue, b: _radix_ng_primitives_types_radix_ng_primitives_core.AcceptableValue) => boolean) | undefined>;
291
+ isItemEqualToValue: _angular_core.InputSignal<_radix_ng_primitives_core.ItemValueComparator<AcceptableValue> | undefined>;
292
+ itemToStringLabel: _angular_core.InputSignal<((value: AcceptableValue) => string) | undefined>;
240
293
  open: _angular_core.ModelSignal<boolean>;
241
294
  disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
295
+ modal: _angular_core.InputSignalWithTransform<boolean, unknown>;
296
+ isEmptyModelValue: _angular_core.Signal<boolean>;
297
+ transitionStatus: _angular_core.Signal<_radix_ng_primitives_core.RdxTransitionStatus>;
298
+ registerTransitionElement: (element: HTMLElement) => () => void;
242
299
  optionsSet: _angular_core.WritableSignal<Set<_radix_ng_primitives_select.SelectOption>>;
243
300
  onOptionAdd: (option: any) => void;
244
301
  onOptionRemove: (option: any) => void;
245
- onValueChange: (value: _radix_ng_primitives_types_radix_ng_primitives_core.AcceptableValue) => void;
302
+ onValueChange: (value: AcceptableValue) => void;
246
303
  onTriggerChange: (node: any) => void;
247
304
  onValueElementChange: (node: any) => void;
248
305
  onOpenChange: (value: any) => void;
249
306
  };
250
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdxSelectPopperPositionContent, never>;
251
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxSelectPopperPositionContent, "[rdxSelectPopperPositionContent]", never, {}, {}, never, never, true, [{ directive: typeof i1$1.RdxPopperContent; inputs: {}; outputs: {}; }]>;
307
+ /**
308
+ * The collected items (DOM order). Exposed so the `item-aligned` positioner now the popup's
309
+ * **ancestor** — can read them without injecting {@link RdxCollectionProvider} (which the popup
310
+ * provides as a descendant, so an upward `inject` would not find it).
311
+ */
312
+ readonly items: _angular_core.Signal<readonly RdxCollectionItem<any>[]>;
313
+ /**
314
+ * Highlight-model navigation over the collected items (DOM order). `loop` is disabled so arrow
315
+ * navigation stops at the first / last item instead of wrapping around — matching native
316
+ * `<select>` behavior.
317
+ */
318
+ readonly highlight: _radix_ng_primitives_core.ListHighlight<RdxCollectionItem<unknown>>;
319
+ readonly selectedItem: _angular_core.WritableSignal<HTMLElement | undefined>;
320
+ readonly selectedItemText: _angular_core.WritableSignal<HTMLElement | undefined>;
321
+ readonly firstValidItemFoundRef: _angular_core.WritableSignal<boolean>;
322
+ readonly viewport: _angular_core.WritableSignal<HTMLElement | undefined>;
323
+ readonly isPositioned: _angular_core.WritableSignal<boolean>;
324
+ private keyboardActive;
325
+ /**
326
+ * Event handler called when the escape key is down.
327
+ * Can be prevented.
328
+ */
329
+ readonly escapeKeyDown: OutputRef<KeyboardEvent>;
330
+ /**
331
+ * Event handler called when a `pointerdown` event happens outside of the `DismissableLayer`.
332
+ * Can be prevented.
333
+ */
334
+ readonly pointerDownOutside: OutputRef<PointerEvent>;
335
+ readonly content: _angular_core.WritableSignal<HTMLElement | null>;
336
+ /**
337
+ * The positioner — now an **ancestor** element — provides {@link RDX_SELECT_POSITIONER_TOKEN}
338
+ * (Popper or item-aligned). We react to its `placed` to highlight and scroll the selected item
339
+ * into view and flag the popup as positioned.
340
+ */
341
+ private readonly positioner;
342
+ constructor();
343
+ /** Highlights the selected item (or the first enabled one) when the popup opens. */
344
+ highlightSelectedItem(): void;
345
+ private scrollSelectedIntoView;
346
+ setKeyboardActive(value: boolean): void;
347
+ isKeyboardActive(): boolean;
348
+ handleKeyDown(event: Event): void;
349
+ 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: {}; }]>;
252
351
  }
253
352
 
254
- declare class RdxSelectPopperPositionWrapper implements RdxPositionerImpl {
353
+ /**
354
+ * Structural directive that teleports the select popup into a container (default `document.body`)
355
+ * while the select is open, and keeps it mounted until any CSS exit `@keyframes` finishes.
356
+ *
357
+ * Apply it with the `*` microsyntax on the popup — `<div *rdxSelectPortal rdxSelectPopup>` — or as an
358
+ * explicit `<ng-template rdxSelectPortal>`. For a custom container use the explicit form with
359
+ * `[container]`. Unlike the previous attribute portal it no longer parks an empty wrapper `<div>` in
360
+ * `document.body` while the select is closed.
361
+ */
362
+ declare class RdxSelectPortal {
363
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdxSelectPortal, never>;
364
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxSelectPortal, "ng-template[rdxSelectPortal]", ["rdxSelectPortal"], {}, {}, never, never, true, [{ directive: typeof i1$2.RdxPortalPresence; inputs: { "container": "container"; }; outputs: {}; }]>;
365
+ }
366
+ /**
367
+ * Dev-mode guard: `rdxSelectPortal` used to be an attribute directive on a `<div>`. It is now
368
+ * structural, so the old `<div rdxSelectPortal>` markup would silently stop portaling — fail loudly
369
+ * instead.
370
+ */
371
+ declare class RdxSelectPortalMisuseGuard {
372
+ constructor();
373
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdxSelectPortalMisuseGuard, never>;
374
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxSelectPortalMisuseGuard, "[rdxSelectPortal]:not(ng-template)", never, {}, {}, never, never, true, never>;
375
+ }
376
+
377
+ declare class RdxSelectPositioner implements RdxPositionerImpl {
255
378
  /**
256
379
  * The preferred side of the anchor to render against when open.
257
380
  * Will be reversed when collisions occur and avoidCollisions is enabled.
@@ -264,7 +387,7 @@ declare class RdxSelectPopperPositionWrapper implements RdxPositionerImpl {
264
387
  /**
265
388
  * The preferred alignment against the anchor. May change when collisions occur.
266
389
  */
267
- readonly align: _angular_core.InputSignal<"start" | "center" | "end">;
390
+ readonly align: _angular_core.InputSignal<"center" | "end" | "start">;
268
391
  /**
269
392
  * An offset in pixels from the `start` or `end` alignment options.
270
393
  */
@@ -306,22 +429,8 @@ declare class RdxSelectPopperPositionWrapper implements RdxPositionerImpl {
306
429
  * Emits when the element is placed.
307
430
  */
308
431
  readonly placed: _angular_core.OutputRef<void>;
309
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdxSelectPopperPositionWrapper, never>;
310
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxSelectPopperPositionWrapper, "[rdxSelectPopperPositionWrapper]", 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: {}; }]>;
311
- }
312
-
313
- declare class RdxSelectPortal {
314
- /**
315
- * Optional container to portal the content into. Defaults to `document.body` when not set.
316
- */
317
- readonly container: _angular_core.InputSignal<RdxPortalContainer | undefined>;
318
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdxSelectPortal, never>;
319
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxSelectPortal, "[rdxSelectPortal]", never, { "container": { "alias": "container"; "required": false; "isSignal": true; }; }, {}, never, never, true, [{ directive: typeof i1$2.RdxPortal; inputs: { "container": "container"; }; outputs: {}; }]>;
320
- }
321
-
322
- declare class RdxSelectPortalPresence {
323
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdxSelectPortalPresence, never>;
324
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxSelectPortalPresence, "ng-template[rdxSelectPortalPresence]", never, {}, {}, never, never, true, [{ directive: typeof i1$3.RdxPresenceDirective; inputs: {}; outputs: {}; }]>;
432
+ 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: {}; }]>;
325
434
  }
326
435
 
327
436
  interface SelectOption {
@@ -340,9 +449,14 @@ declare const context: () => {
340
449
  dir: _angular_core.InputSignal<Direction>;
341
450
  value: _angular_core.ModelSignal<AcceptableValue | AcceptableValue[] | undefined>;
342
451
  multiple: _angular_core.InputSignalWithTransform<boolean, unknown>;
343
- by: _angular_core.InputSignal<string | ((a: AcceptableValue, b: AcceptableValue) => boolean) | undefined>;
452
+ isItemEqualToValue: _angular_core.InputSignal<ItemValueComparator<AcceptableValue> | undefined>;
453
+ itemToStringLabel: _angular_core.InputSignal<((value: AcceptableValue) => string) | undefined>;
344
454
  open: _angular_core.ModelSignal<boolean>;
345
455
  disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
456
+ modal: _angular_core.InputSignalWithTransform<boolean, unknown>;
457
+ isEmptyModelValue: _angular_core.Signal<boolean>;
458
+ transitionStatus: _angular_core.Signal<_radix_ng_primitives_core.RdxTransitionStatus>;
459
+ registerTransitionElement: (element: HTMLElement) => () => void;
346
460
  optionsSet: _angular_core.WritableSignal<Set<SelectOption>>;
347
461
  onOptionAdd: (option: any) => void;
348
462
  onOptionRemove: (option: any) => void;
@@ -363,9 +477,14 @@ declare const injectSelectRootContext: _radix_ng_primitives_core.InjectContext<{
363
477
  dir: _angular_core.InputSignal<Direction>;
364
478
  value: _angular_core.ModelSignal<AcceptableValue | AcceptableValue[] | undefined>;
365
479
  multiple: _angular_core.InputSignalWithTransform<boolean, unknown>;
366
- by: _angular_core.InputSignal<string | ((a: AcceptableValue, b: AcceptableValue) => boolean) | undefined>;
480
+ isItemEqualToValue: _angular_core.InputSignal<ItemValueComparator<AcceptableValue> | undefined>;
481
+ itemToStringLabel: _angular_core.InputSignal<((value: AcceptableValue) => string) | undefined>;
367
482
  open: _angular_core.ModelSignal<boolean>;
368
483
  disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
484
+ modal: _angular_core.InputSignalWithTransform<boolean, unknown>;
485
+ isEmptyModelValue: _angular_core.Signal<boolean>;
486
+ transitionStatus: _angular_core.Signal<_radix_ng_primitives_core.RdxTransitionStatus>;
487
+ registerTransitionElement: (element: HTMLElement) => () => void;
369
488
  optionsSet: _angular_core.WritableSignal<Set<SelectOption>>;
370
489
  onOptionAdd: (option: any) => void;
371
490
  onOptionRemove: (option: any) => void;
@@ -385,9 +504,14 @@ declare const provideSelectRootContext: (useFactory: () => {
385
504
  dir: _angular_core.InputSignal<Direction>;
386
505
  value: _angular_core.ModelSignal<AcceptableValue | AcceptableValue[] | undefined>;
387
506
  multiple: _angular_core.InputSignalWithTransform<boolean, unknown>;
388
- by: _angular_core.InputSignal<string | ((a: AcceptableValue, b: AcceptableValue) => boolean) | undefined>;
507
+ isItemEqualToValue: _angular_core.InputSignal<ItemValueComparator<AcceptableValue> | undefined>;
508
+ itemToStringLabel: _angular_core.InputSignal<((value: AcceptableValue) => string) | undefined>;
389
509
  open: _angular_core.ModelSignal<boolean>;
390
510
  disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
511
+ modal: _angular_core.InputSignalWithTransform<boolean, unknown>;
512
+ isEmptyModelValue: _angular_core.Signal<boolean>;
513
+ transitionStatus: _angular_core.Signal<_radix_ng_primitives_core.RdxTransitionStatus>;
514
+ registerTransitionElement: (element: HTMLElement) => () => void;
391
515
  optionsSet: _angular_core.WritableSignal<Set<SelectOption>>;
392
516
  onOptionAdd: (option: any) => void;
393
517
  onOptionRemove: (option: any) => void;
@@ -401,10 +525,22 @@ declare class RdxSelectRoot {
401
525
  readonly value: _angular_core.ModelSignal<AcceptableValue | AcceptableValue[] | undefined>;
402
526
  readonly multiple: _angular_core.InputSignalWithTransform<boolean, unknown>;
403
527
  readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
528
+ /** Whether the popup is modal: locks page scroll and makes outside content inert while open. */
529
+ readonly modal: _angular_core.InputSignalWithTransform<boolean, unknown>;
404
530
  readonly dir: _angular_core.InputSignal<Direction>;
405
- /** Use this to compare objects by a particular field, or pass your own comparison function for complete control over how objects are compared. */
406
- readonly by: _angular_core.InputSignal<string | ((a: AcceptableValue, b: AcceptableValue) => boolean) | undefined>;
531
+ /** How item values are compared for equality a function `(a, b) => boolean` or an object key. */
532
+ readonly isItemEqualToValue: _angular_core.InputSignal<ItemValueComparator<AcceptableValue> | undefined>;
533
+ /** Converts a value to its display label (used by `RdxSelectValue`). */
534
+ readonly itemToStringLabel: _angular_core.InputSignal<((value: AcceptableValue) => string) | undefined>;
535
+ /** Emits after the open/close transition (including any exit animation) finishes. */
536
+ readonly onOpenChangeComplete: _angular_core.OutputEmitterRef<boolean>;
537
+ private readonly transition;
538
+ /** Open/close transition phase, for `data-starting-style` / `data-ending-style`. */
539
+ readonly transitionStatus: _angular_core.Signal<_radix_ng_primitives_core.RdxTransitionStatus>;
540
+ /** Registers the popup element whose animation determines transition completion. */
541
+ readonly registerTransitionElement: (element: HTMLElement) => () => void;
407
542
  readonly isEmptyModelValue: _angular_core.Signal<boolean>;
543
+ constructor();
408
544
  readonly optionsSet: _angular_core.WritableSignal<Set<SelectOption>>;
409
545
  readonly nativeSelectKey: _angular_core.Signal<string>;
410
546
  readonly triggerElement: _angular_core.WritableSignal<HTMLElement | null>;
@@ -416,7 +552,17 @@ declare class RdxSelectRoot {
416
552
  getOption(value: SelectOption['value']): SelectOption | undefined;
417
553
  handleValueChange(value: AcceptableValue): void;
418
554
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdxSelectRoot, never>;
419
- 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; }; "dir": { "alias": "dir"; "required": false; "isSignal": true; }; "by": { "alias": "by"; "required": false; "isSignal": true; }; }, { "open": "openChange"; "value": "valueChange"; }, never, never, true, [{ directive: typeof i1$1.RdxPopper; inputs: {}; outputs: {}; }]>;
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: {}; }]>;
556
+ }
557
+
558
+ /**
559
+ * A visual divider between groups of items.
560
+ *
561
+ * @group Components
562
+ */
563
+ declare class RdxSelectSeparator {
564
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdxSelectSeparator, never>;
565
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxSelectSeparator, "[rdxSelectSeparator]", ["rdxSelectSeparator"], {}, {}, never, never, true, never>;
420
566
  }
421
567
 
422
568
  declare class RdxSelectTrigger {
@@ -428,23 +574,36 @@ declare class RdxSelectTrigger {
428
574
  y: number;
429
575
  } | null>;
430
576
  contentId: string;
431
- dir: _angular_core.InputSignal<_radix_ng_primitives_types_radix_ng_primitives_core.Direction>;
432
- value: _angular_core.ModelSignal<_radix_ng_primitives_types_radix_ng_primitives_core.AcceptableValue | _radix_ng_primitives_types_radix_ng_primitives_core.AcceptableValue[] | undefined>;
577
+ dir: _angular_core.InputSignal<_radix_ng_primitives_core.Direction>;
578
+ value: _angular_core.ModelSignal<_radix_ng_primitives_core.AcceptableValue | _radix_ng_primitives_core.AcceptableValue[] | undefined>;
433
579
  multiple: _angular_core.InputSignalWithTransform<boolean, unknown>;
434
- by: _angular_core.InputSignal<string | ((a: _radix_ng_primitives_types_radix_ng_primitives_core.AcceptableValue, b: _radix_ng_primitives_types_radix_ng_primitives_core.AcceptableValue) => boolean) | undefined>;
580
+ isItemEqualToValue: _angular_core.InputSignal<_radix_ng_primitives_core.ItemValueComparator<_radix_ng_primitives_core.AcceptableValue> | undefined>;
581
+ itemToStringLabel: _angular_core.InputSignal<((value: _radix_ng_primitives_core.AcceptableValue) => string) | undefined>;
435
582
  open: _angular_core.ModelSignal<boolean>;
436
583
  disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
584
+ modal: _angular_core.InputSignalWithTransform<boolean, unknown>;
585
+ isEmptyModelValue: _angular_core.Signal<boolean>;
586
+ transitionStatus: _angular_core.Signal<_radix_ng_primitives_core.RdxTransitionStatus>;
587
+ registerTransitionElement: (element: HTMLElement) => () => void;
437
588
  optionsSet: _angular_core.WritableSignal<Set<_radix_ng_primitives_select.SelectOption>>;
438
589
  onOptionAdd: (option: any) => void;
439
590
  onOptionRemove: (option: any) => void;
440
- onValueChange: (value: _radix_ng_primitives_types_radix_ng_primitives_core.AcceptableValue) => void;
591
+ onValueChange: (value: _radix_ng_primitives_core.AcceptableValue) => void;
441
592
  onTriggerChange: (node: any) => void;
442
593
  onValueElementChange: (node: any) => void;
443
594
  onOpenChange: (value: any) => void;
444
595
  };
445
596
  readonly elementRef: ElementRef<HTMLElement>;
597
+ private readonly fieldRootContext;
598
+ /** The trigger id; Field labels and descriptions reference it for accessible relationships. */
599
+ readonly id: _angular_core.InputSignal<string>;
446
600
  readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
447
601
  readonly isDisabled: _angular_core.Signal<boolean>;
602
+ protected readonly invalidState: _angular_core.Signal<boolean>;
603
+ protected readonly requiredState: _angular_core.Signal<boolean>;
604
+ protected readonly filledState: _angular_core.Signal<boolean>;
605
+ protected readonly focusedState: _angular_core.Signal<boolean>;
606
+ protected readonly describedBy: _angular_core.Signal<string | undefined>;
448
607
  constructor();
449
608
  handleOpen(): void;
450
609
  handlePointerOpen(event: Event): void;
@@ -452,8 +611,11 @@ declare class RdxSelectTrigger {
452
611
  onPointerDown(event: Event): void;
453
612
  onPointerUp(event: Event): void;
454
613
  onKeydown(event: Event): void;
614
+ onFocus(): void;
615
+ onBlur(): void;
616
+ protected readonly dataAttr: (value: boolean) => "" | undefined;
455
617
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdxSelectTrigger, never>;
456
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxSelectTrigger, "button[rdxSelectTrigger]", never, { "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, {}, never, never, true, [{ directive: typeof i1$1.RdxPopperAnchor; inputs: {}; outputs: {}; }]>;
618
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxSelectTrigger, "button[rdxSelectTrigger]", never, { "id": { "alias": "id"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, {}, never, never, true, [{ directive: typeof i1$1.RdxPopperAnchor; inputs: {}; outputs: {}; }]>;
457
619
  }
458
620
 
459
621
  declare class RdxSelectValue {
@@ -468,9 +630,14 @@ declare class RdxSelectValue {
468
630
  dir: _angular_core.InputSignal<_radix_ng_primitives_core.Direction>;
469
631
  value: _angular_core.ModelSignal<AcceptableValue | AcceptableValue[] | undefined>;
470
632
  multiple: _angular_core.InputSignalWithTransform<boolean, unknown>;
471
- by: _angular_core.InputSignal<string | ((a: AcceptableValue, b: AcceptableValue) => boolean) | undefined>;
633
+ isItemEqualToValue: _angular_core.InputSignal<_radix_ng_primitives_core.ItemValueComparator<AcceptableValue> | undefined>;
634
+ itemToStringLabel: _angular_core.InputSignal<((value: AcceptableValue) => string) | undefined>;
472
635
  open: _angular_core.ModelSignal<boolean>;
473
636
  disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
637
+ modal: _angular_core.InputSignalWithTransform<boolean, unknown>;
638
+ isEmptyModelValue: _angular_core.Signal<boolean>;
639
+ transitionStatus: _angular_core.Signal<_radix_ng_primitives_core.RdxTransitionStatus>;
640
+ registerTransitionElement: (element: HTMLElement) => () => void;
474
641
  optionsSet: _angular_core.WritableSignal<Set<_radix_ng_primitives_select.SelectOption>>;
475
642
  onOptionAdd: (option: any) => void;
476
643
  onOptionRemove: (option: any) => void;
@@ -488,16 +655,6 @@ declare class RdxSelectValue {
488
655
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxSelectValue, "span[rdxSelectValue]", ["rdxSelectedValue"], { "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
489
656
  }
490
657
 
491
- declare class RdxSelectViewport {
492
- private readonly contentContext;
493
- private readonly elementRef;
494
- private readonly prevScrollTopRef;
495
- constructor();
496
- handleScroll(event: Event): void;
497
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdxSelectViewport, never>;
498
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxSelectViewport, "[rdxSelectViewport]", never, {}, {}, never, never, true, never>;
499
- }
500
-
501
658
  declare const OPEN_KEYS: string[];
502
659
  declare const SELECTION_KEYS: string[];
503
660
  declare const CONTENT_MARGIN = 10;
@@ -506,7 +663,7 @@ declare function compare<T>(value?: T, currentValue?: T, comparator?: string | (
506
663
  declare function shouldShowPlaceholder(value?: AcceptableValue | AcceptableValue[]): boolean;
507
664
  declare function focusFirst(candidates: HTMLElement[]): void;
508
665
 
509
- declare const _importsSelect: (typeof RdxSelectLabel)[];
666
+ declare const _importsSelect: (typeof RdxSelectGroupLabel)[];
510
667
 
511
- export { CONTENT_MARGIN, OPEN_KEYS, RDX_SELECT_POSITIONER_TOKEN, RdxSelectContent, RdxSelectGroup, RdxSelectItem, RdxSelectItemIndicator, RdxSelectItemText, RdxSelectLabel, RdxSelectPopperPositionContent, RdxSelectPopperPositionWrapper, RdxSelectPortal, RdxSelectPortalPresence, RdxSelectRoot, RdxSelectTrigger, RdxSelectValue, RdxSelectViewport, SELECTION_KEYS, _importsSelect, compare, focusFirst, injectSelectContentContext, injectSelectItemContext, injectSelectRootContext, provideSelectContentContext, provideSelectItemContext, provideSelectRootContext, shouldShowPlaceholder, valueComparator };
512
- export type { RdxPositionerImpl, RdxSelectContentContext, RdxSelectItemContext, RdxSelectRootContext, SelectEvent, SelectOption };
668
+ 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 };