@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,7 +1,7 @@
1
1
  import * as _angular_core from '@angular/core';
2
2
  import { Signal } from '@angular/core';
3
- import * as i1 from '@radix-ng/primitives/core';
4
- import { RdxControlValueAccessor, NumberInput, BooleanInput } from '@radix-ng/primitives/core';
3
+ import * as _radix_ng_primitives_core from '@radix-ng/primitives/core';
4
+ import { RdxControlValueAccessor, NumberInput, BooleanInput, RdxCancelableChangeEventDetails } from '@radix-ng/primitives/core';
5
5
  export { clamp } from '@radix-ng/primitives/core';
6
6
  import * as _radix_ng_primitives_slider from '@radix-ng/primitives/slider';
7
7
 
@@ -18,6 +18,8 @@ declare function getMidpoint(element: Element): {
18
18
  x: number;
19
19
  y: number;
20
20
  };
21
+ /** Calculates the control-relative percent for an edge-aligned thumb. */
22
+ declare function getInsetThumbPositionPercent(control: Element, thumb: Element, thumbValuePercent: number, vertical: boolean): number | undefined;
21
23
  /** Converts an array of values into clamped 0–100 percentages. */
22
24
  declare function valueArrayToPercentages(values: readonly number[], min: number, max: number): number[];
23
25
  /** Number of decimal places in `num`, handling exponential notation for tiny values. */
@@ -90,6 +92,25 @@ declare const ALL_KEYS: Set<string>;
90
92
  declare function areValuesEqual(a: number | number[], b: number | number[]): boolean;
91
93
 
92
94
  type SliderValue = number | number[];
95
+ type RdxSliderThumbAlignment = 'center' | 'edge' | 'edge-client-only';
96
+ type RdxSliderValueChangeReason = 'input-change' | 'track-press' | 'drag' | 'keyboard' | 'none';
97
+ type RdxSliderValueChangeEventDetails = RdxCancelableChangeEventDetails<RdxSliderValueChangeReason> & {
98
+ activeThumbIndex: number;
99
+ };
100
+ type RdxSliderValueCommitReason = RdxSliderValueChangeReason;
101
+ interface RdxSliderValueCommitEventDetails {
102
+ reason: RdxSliderValueCommitReason;
103
+ event: Event;
104
+ trigger: HTMLElement | undefined;
105
+ }
106
+ interface RdxSliderValueChangeEvent {
107
+ value: SliderValue;
108
+ eventDetails: RdxSliderValueChangeEventDetails;
109
+ }
110
+ interface RdxSliderValueCommitEvent {
111
+ value: SliderValue;
112
+ eventDetails: RdxSliderValueCommitEventDetails;
113
+ }
93
114
  /** Minimal shape a thumb registers with the root, used for hit-testing and focus. */
94
115
  interface RdxSliderThumbRef {
95
116
  /** The thumb wrapper element. */
@@ -109,6 +130,7 @@ interface RdxSliderThumbRef {
109
130
  declare class RdxSliderRoot {
110
131
  /** @ignore */
111
132
  protected readonly cva: RdxControlValueAccessor<SliderValue>;
133
+ private readonly document;
112
134
  readonly id: _angular_core.InputSignal<string>;
113
135
  /**
114
136
  * The minimum value of the slider.
@@ -144,12 +166,20 @@ declare class RdxSliderRoot {
144
166
  * The reading direction. Mirrors the horizontal axis when set to `'rtl'`.
145
167
  * @default 'ltr'
146
168
  */
147
- readonly dir: _angular_core.InputSignal<"ltr" | "rtl">;
169
+ readonly dirInput: _angular_core.InputSignal<"ltr" | "rtl" | undefined>;
170
+ readonly dir: Signal<_radix_ng_primitives_core.Direction>;
148
171
  /**
149
172
  * How thumbs behave when they meet in a range slider.
150
173
  * @default 'push'
151
174
  */
152
175
  readonly thumbCollisionBehavior: _angular_core.InputSignal<ThumbCollisionBehavior>;
176
+ /**
177
+ * How the thumbs align with the control when the value is at min/max.
178
+ * `center` aligns the thumb center to the control edge; `edge`/`edge-client-only`
179
+ * inset thumbs so their outer edge aligns to the control edge.
180
+ * @default 'center'
181
+ */
182
+ readonly thumbAlignment: _angular_core.InputSignal<RdxSliderThumbAlignment>;
153
183
  /** Options forwarded to `Intl.NumberFormat` when displaying and announcing values. */
154
184
  readonly format: _angular_core.InputSignal<Intl.NumberFormatOptions | undefined>;
155
185
  /** Locale used for value formatting. */
@@ -169,9 +199,9 @@ declare class RdxSliderRoot {
169
199
  readonly value: _angular_core.ModelSignal<SliderValue | undefined>;
170
200
  readonly ariaLabelledBy: _angular_core.InputSignal<string | undefined>;
171
201
  /** Emitted when the value changes (during interaction). */
172
- readonly onValueChange: _angular_core.OutputEmitterRef<SliderValue>;
202
+ readonly onValueChange: _angular_core.OutputEmitterRef<RdxSliderValueChangeEvent>;
173
203
  /** Emitted when interaction ends, with the final value — useful for committing to a backend. */
174
- readonly onValueCommitted: _angular_core.OutputEmitterRef<SliderValue>;
204
+ readonly onValueCommitted: _angular_core.OutputEmitterRef<RdxSliderValueCommitEvent>;
175
205
  /** @ignore */
176
206
  readonly controlRef: _angular_core.WritableSignal<HTMLElement | null>;
177
207
  /** @ignore Active thumb index (-1 when none). */
@@ -180,6 +210,8 @@ declare class RdxSliderRoot {
180
210
  readonly lastUsedThumbIndex: _angular_core.WritableSignal<number>;
181
211
  /** @ignore Whether a pointer drag is in progress. */
182
212
  readonly dragging: _angular_core.WritableSignal<boolean>;
213
+ /** @ignore Edge-aligned thumb/indicator positions, in control-relative percentages. */
214
+ readonly indicatorPosition: _angular_core.WritableSignal<[number | undefined, number | undefined]>;
183
215
  /** @ignore Pointer-drag scratch state (not reactive). */
184
216
  pressedThumbIndex: number;
185
217
  /** @ignore */
@@ -191,7 +223,13 @@ declare class RdxSliderRoot {
191
223
  /** @ignore */
192
224
  lastChangeReason: string;
193
225
  /** @ignore */
226
+ lastChangeEvent: Event | undefined;
227
+ /** @ignore */
194
228
  readonly isDisabled: Signal<boolean>;
229
+ /** @ignore */
230
+ readonly inset: Signal<boolean>;
231
+ /** @ignore */
232
+ readonly renderBeforeHydration: Signal<boolean>;
195
233
  /** @ignore The current value source (controlled value, else default, else min). */
196
234
  private readonly currentRaw;
197
235
  /** Whether the slider has multiple thumbs (the value is an array). */
@@ -212,6 +250,8 @@ declare class RdxSliderRoot {
212
250
  /** @ignore */
213
251
  focusThumb(index: number): void;
214
252
  /** @ignore */
253
+ setIndicatorPosition(index: number, position: number | undefined): void;
254
+ /** @ignore */
215
255
  formatValue(value: number): string;
216
256
  /** @ignore Output value matching the original value shape (number vs array). */
217
257
  private outputValue;
@@ -220,19 +260,21 @@ declare class RdxSliderRoot {
220
260
  * Applies a new full set of values, preserving the single/range value shape.
221
261
  * Returns `false` when the value did not change.
222
262
  */
223
- setValue(nextValues: number[], reason: string): boolean;
263
+ setValue(nextValues: number[], reason: RdxSliderValueChangeReason, event?: Event, activeThumbIndex?: number): boolean;
224
264
  /** @ignore Keyboard / native input path: clamps to neighbours, commits immediately. */
225
- handleInputChange(valueInput: number, index: number, reason?: string): void;
265
+ handleInputChange(valueInput: number, index: number, reason?: RdxSliderValueChangeReason, event?: Event): void;
226
266
  /** @ignore Emits the committed value at the end of a pointer drag. */
227
- commitValue(): void;
267
+ commitValue(event?: Event, reason?: RdxSliderValueCommitReason): void;
228
268
  /** @ignore */
229
269
  markAsTouched(): void;
230
270
  /** @ignore */
231
271
  setDragging(dragging: boolean): void;
232
272
  /** @ignore */
233
273
  resetPressedThumb(): void;
274
+ /** @ignore */
275
+ getOwnerWindow(): Window | undefined;
234
276
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdxSliderRoot, never>;
235
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxSliderRoot, "div[rdxSliderRoot]", ["rdxSliderRoot"], { "id": { "alias": "id"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "step": { "alias": "step"; "required": false; "isSignal": true; }; "largeStep": { "alias": "largeStep"; "required": false; "isSignal": true; }; "minStepsBetweenValues": { "alias": "minStepsBetweenValues"; "required": false; "isSignal": true; }; "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; "dir": { "alias": "dir"; "required": false; "isSignal": true; }; "thumbCollisionBehavior": { "alias": "thumbCollisionBehavior"; "required": false; "isSignal": true; }; "format": { "alias": "format"; "required": false; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "form": { "alias": "form"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "defaultValue": { "alias": "defaultValue"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "ariaLabelledBy": { "alias": "aria-labelledby"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "onValueChange": "onValueChange"; "onValueCommitted": "onValueCommitted"; }, never, never, true, [{ directive: typeof i1.RdxControlValueAccessor; inputs: { "value": "value"; "disabled": "disabled"; }; outputs: {}; }]>;
277
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxSliderRoot, "div[rdxSliderRoot]", ["rdxSliderRoot"], { "id": { "alias": "id"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "step": { "alias": "step"; "required": false; "isSignal": true; }; "largeStep": { "alias": "largeStep"; "required": false; "isSignal": true; }; "minStepsBetweenValues": { "alias": "minStepsBetweenValues"; "required": false; "isSignal": true; }; "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; "dirInput": { "alias": "dir"; "required": false; "isSignal": true; }; "thumbCollisionBehavior": { "alias": "thumbCollisionBehavior"; "required": false; "isSignal": true; }; "thumbAlignment": { "alias": "thumbAlignment"; "required": false; "isSignal": true; }; "format": { "alias": "format"; "required": false; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "form": { "alias": "form"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "defaultValue": { "alias": "defaultValue"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "ariaLabelledBy": { "alias": "aria-labelledby"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "onValueChange": "onValueChange"; "onValueCommitted": "onValueCommitted"; }, never, never, true, [{ directive: typeof _radix_ng_primitives_core.RdxControlValueAccessor; inputs: { "value": "value"; "disabled": "disabled"; }; outputs: {}; }]>;
236
278
  }
237
279
 
238
280
  /**
@@ -248,14 +290,22 @@ declare class RdxSliderControl {
248
290
  private styles;
249
291
  private moveCount;
250
292
  private currentInteractionValue;
293
+ private touchId;
294
+ private insetThumbOffset;
295
+ private readonly onTouchStart;
251
296
  private readonly onMove;
252
297
  private readonly onUp;
253
298
  private readonly onCancel;
299
+ private readonly onTouchMove;
300
+ private readonly onTouchEnd;
254
301
  constructor();
255
302
  protected onPointerDown(event: PointerEvent): void;
303
+ private handleTouchStart;
256
304
  private handleMove;
257
305
  private handleUp;
258
306
  private stopListening;
307
+ private getFingerCoords;
308
+ private isTargetDisabledThumb;
259
309
  private startPressing;
260
310
  private setValueFromPointer;
261
311
  /** Projects a pointer position onto the track and resolves it to a value (+ collision). */
@@ -310,8 +360,10 @@ declare class RdxSliderThumb implements RdxSliderThumbRef {
310
360
  /** The value represented by this thumb. */
311
361
  readonly value: _angular_core.Signal<number | undefined>;
312
362
  private readonly percent;
363
+ private readonly insetPosition;
313
364
  protected readonly thumbStyle: _angular_core.Signal<Record<string, string | number>>;
314
365
  constructor();
366
+ private updateInsetPosition;
315
367
  protected onPointerDown(event: PointerEvent): void;
316
368
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdxSliderThumb, never>;
317
369
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxSliderThumb, "div[rdxSliderThumb]", ["rdxSliderThumb"], { "indexInput": { "alias": "index"; "required": false; "isSignal": true; }; "thumbDisabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
@@ -364,7 +416,7 @@ declare class RdxSliderValue {
364
416
  *
365
417
  * @see https://base-ui.com/react/components/slider
366
418
  */
367
- declare const injectSliderRootContext: i1.InjectContext<RdxSliderRoot>;
419
+ declare const injectSliderRootContext: _radix_ng_primitives_core.InjectContext<RdxSliderRoot>;
368
420
  declare const provideSliderRootContext: (useFactory: () => RdxSliderRoot) => _angular_core.Provider;
369
421
 
370
422
  declare class RdxSliderModule {
@@ -373,5 +425,5 @@ declare class RdxSliderModule {
373
425
  static ɵinj: _angular_core.ɵɵInjectorDeclaration<RdxSliderModule>;
374
426
  }
375
427
 
376
- export { ALL_KEYS, ARROW_KEYS, COMPOSITE_KEYS, RdxSliderControl, RdxSliderIndicator, RdxSliderModule, RdxSliderRoot, RdxSliderThumb, RdxSliderThumbInput, RdxSliderTrack, RdxSliderValue, areValuesEqual, asc, formatNumber, getControlOffset, getDecimalPrecision, getDefaultAriaValueText, getMidpoint, getNewValue, getPushedThumbValues, getSliderValue, injectSliderRootContext, provideSliderRootContext, replaceArrayItemAtIndex, resolveThumbCollision, roundValueToStep, validateMinimumDistance, valueArrayToPercentages, valueToPercent };
377
- export type { RdxSliderThumbRef, ResolveThumbCollisionParams, ResolveThumbCollisionResult, SliderOrientation, SliderValue, ThumbCollisionBehavior };
428
+ export { ALL_KEYS, ARROW_KEYS, COMPOSITE_KEYS, RdxSliderControl, RdxSliderIndicator, RdxSliderModule, RdxSliderRoot, RdxSliderThumb, RdxSliderThumbInput, RdxSliderTrack, RdxSliderValue, areValuesEqual, asc, formatNumber, getControlOffset, getDecimalPrecision, getDefaultAriaValueText, getInsetThumbPositionPercent, getMidpoint, getNewValue, getPushedThumbValues, getSliderValue, injectSliderRootContext, provideSliderRootContext, replaceArrayItemAtIndex, resolveThumbCollision, roundValueToStep, validateMinimumDistance, valueArrayToPercentages, valueToPercent };
429
+ export type { RdxSliderThumbAlignment, RdxSliderThumbRef, RdxSliderValueChangeEvent, RdxSliderValueChangeEventDetails, RdxSliderValueChangeReason, RdxSliderValueCommitEvent, RdxSliderValueCommitEventDetails, RdxSliderValueCommitReason, ResolveThumbCollisionParams, ResolveThumbCollisionResult, SliderOrientation, SliderValue, ThumbCollisionBehavior };
@@ -1,6 +1,6 @@
1
1
  import * as _angular_core from '@angular/core';
2
2
  import { InputSignalWithTransform, Signal, ModelSignal, InputSignal, WritableSignal, InjectionToken } from '@angular/core';
3
- import { NumberInput, BooleanInput, Direction } from '@radix-ng/primitives/core';
3
+ import { NumberInput, BooleanInput, Direction, RdxCancelableChangeEventDetails } from '@radix-ng/primitives/core';
4
4
  import * as _radix_ng_primitives_stepper from '@radix-ng/primitives/stepper';
5
5
  import * as i1 from '@radix-ng/primitives/separator';
6
6
 
@@ -63,23 +63,31 @@ declare class RdxStepperIndicatorDirective {
63
63
  interface StepperRootContext {
64
64
  value: ModelSignal<number | undefined>;
65
65
  orientation: InputSignal<'vertical' | 'horizontal'>;
66
- dir: InputSignal<Direction>;
66
+ dir: Signal<Direction>;
67
67
  linear: InputSignalWithTransform<boolean, BooleanInput>;
68
68
  totalStepperItems: WritableSignal<HTMLElement[]>;
69
+ goToStep(step: number, event?: Event, reason?: string): void;
69
70
  }
70
71
  declare const STEPPER_ROOT_CONTEXT: InjectionToken<StepperRootContext>;
71
72
  declare function injectStepperRootContext(): StepperRootContext;
72
73
 
74
+ type RdxStepperValueChangeReason = 'trigger-press' | 'keyboard' | 'none';
75
+ type RdxStepperValueChangeEventDetails = RdxCancelableChangeEventDetails<RdxStepperValueChangeReason>;
76
+ interface RdxStepperValueChangeEvent {
77
+ value: number;
78
+ eventDetails: RdxStepperValueChangeEventDetails;
79
+ }
73
80
  declare class RdxStepperRootDirective implements StepperRootContext {
74
81
  private readonly liveAnnouncer;
75
82
  readonly defaultValue: _angular_core.InputSignalWithTransform<number | undefined, NumberInput>;
76
83
  readonly value: _angular_core.ModelSignal<number | undefined>;
77
84
  readonly linear: _angular_core.InputSignalWithTransform<boolean, BooleanInput>;
78
- readonly dir: _angular_core.InputSignal<Direction>;
85
+ readonly dirInput: _angular_core.InputSignal<Direction | undefined>;
86
+ readonly dir: _angular_core.Signal<Direction>;
79
87
  readonly orientation: _angular_core.InputSignal<"vertical" | "horizontal">;
80
88
  /** @ignore */
81
89
  readonly totalStepperItemsArray: _angular_core.Signal<HTMLElement[]>;
82
- readonly onValueChange: _angular_core.OutputEmitterRef<number>;
90
+ readonly onValueChange: _angular_core.OutputEmitterRef<RdxStepperValueChangeEvent>;
83
91
  /** @ignore */
84
92
  readonly isFirstStep: _angular_core.Signal<boolean>;
85
93
  /** @ignore */
@@ -95,9 +103,9 @@ declare class RdxStepperRootDirective implements StepperRootContext {
95
103
  private readonly nextStepperItem;
96
104
  private readonly prevStepperItem;
97
105
  constructor();
98
- goToStep(step: number): void;
106
+ goToStep(step: number, event?: Event, reason?: RdxStepperValueChangeReason): void;
99
107
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdxStepperRootDirective, never>;
100
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxStepperRootDirective, "[rdxStepperRoot]", ["rdxStepperRoot"], { "defaultValue": { "alias": "defaultValue"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "linear": { "alias": "linear"; "required": false; "isSignal": true; }; "dir": { "alias": "dir"; "required": false; "isSignal": true; }; "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "onValueChange": "onValueChange"; }, never, never, true, never>;
108
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxStepperRootDirective, "[rdxStepperRoot]", ["rdxStepperRoot"], { "defaultValue": { "alias": "defaultValue"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "linear": { "alias": "linear"; "required": false; "isSignal": true; }; "dirInput": { "alias": "dir"; "required": false; "isSignal": true; }; "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "onValueChange": "onValueChange"; }, never, never, true, never>;
101
109
  }
102
110
 
103
111
  declare class RdxStepperTriggerDirective {
@@ -119,4 +127,4 @@ declare class RdxStepperModule {
119
127
  }
120
128
 
121
129
  export { RdxStepperDescriptionDirective, RdxStepperIndicatorDirective, RdxStepperItemDirective, RdxStepperModule, RdxStepperRootDirective, RdxStepperSeparatorDirective, RdxStepperTitleDirective, RdxStepperTriggerDirective, STEPPER_ROOT_CONTEXT, injectStepperRootContext };
122
- export type { StepperRootContext, StepperState };
130
+ export type { RdxStepperValueChangeEvent, RdxStepperValueChangeEventDetails, RdxStepperValueChangeReason, StepperRootContext, StepperState };
@@ -2,7 +2,7 @@ import * as _radix_ng_primitives_switch from '@radix-ng/primitives/switch';
2
2
  import * as _angular_core from '@angular/core';
3
3
  import { Signal } from '@angular/core';
4
4
  import * as i1 from '@radix-ng/primitives/core';
5
- import { RdxFormCheckboxControl, RdxControlValueAccessor, BooleanInput } from '@radix-ng/primitives/core';
5
+ import { RdxCancelableChangeEventDetails, RdxFormCheckboxControl, RdxControlValueAccessor, BooleanInput } from '@radix-ng/primitives/core';
6
6
 
7
7
  /**
8
8
  * The hidden native checkbox that mirrors the switch state for form submission and screen readers.
@@ -15,6 +15,12 @@ declare class RdxSwitchInput {
15
15
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxSwitchInput, "input[rdxSwitchInput]", ["rdxSwitchInput"], {}, {}, never, never, true, never>;
16
16
  }
17
17
 
18
+ type RdxSwitchCheckedChangeReason = 'trigger-press' | 'none';
19
+ type RdxSwitchCheckedChangeEventDetails = RdxCancelableChangeEventDetails<RdxSwitchCheckedChangeReason>;
20
+ interface RdxSwitchCheckedChangeEvent {
21
+ checked: boolean;
22
+ eventDetails: RdxSwitchCheckedChangeEventDetails;
23
+ }
18
24
  /**
19
25
  * A control that toggles between on and off.
20
26
  *
@@ -68,13 +74,13 @@ declare class RdxSwitchRoot implements RdxFormCheckboxControl {
68
74
  readonly ariaLabelledBy: _angular_core.InputSignal<string | undefined>;
69
75
  readonly ariaLabel: _angular_core.InputSignal<string | undefined>;
70
76
  /** Event handler called when the checked state of the switch changes. */
71
- readonly onCheckedChange: _angular_core.OutputEmitterRef<boolean>;
77
+ readonly onCheckedChange: _angular_core.OutputEmitterRef<RdxSwitchCheckedChangeEvent>;
72
78
  /** @ignore */
73
79
  readonly checkedState: _angular_core.Signal<boolean>;
74
80
  /** @ignore */
75
81
  protected readonly isDisabled: _angular_core.Signal<boolean>;
76
82
  /** @ignore Toggles the checked state unless disabled or read-only. */
77
- toggle(): void;
83
+ toggle(event?: Event): void;
78
84
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdxSwitchRoot, never>;
79
85
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxSwitchRoot, "button[rdxSwitchRoot]", ["rdxSwitchRoot"], { "id": { "alias": "id"; "required": false; "isSignal": true; }; "defaultChecked": { "alias": "defaultChecked"; "required": false; "isSignal": true; }; "checked": { "alias": "checked"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "submitValue": { "alias": "value"; "required": false; "isSignal": true; }; "ariaLabelledBy": { "alias": "aria-labelledby"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "aria-label"; "required": false; "isSignal": true; }; }, { "checked": "checkedChange"; "onCheckedChange": "onCheckedChange"; }, never, never, true, [{ directive: typeof i1.RdxControlValueAccessor; inputs: { "value": "checked"; "disabled": "disabled"; }; outputs: {}; }]>;
80
86
  }
@@ -118,4 +124,4 @@ declare class RdxSwitchModule {
118
124
  }
119
125
 
120
126
  export { RdxSwitchInput, RdxSwitchModule, RdxSwitchRoot, RdxSwitchThumb, injectSwitchContext, provideSwitchContext, switchImports };
121
- export type { RdxSwitchContext };
127
+ export type { RdxSwitchCheckedChangeEvent, RdxSwitchCheckedChangeEventDetails, RdxSwitchCheckedChangeReason, RdxSwitchContext };
@@ -2,7 +2,7 @@ import * as _angular_core from '@angular/core';
2
2
  import { Signal } from '@angular/core';
3
3
  import * as i1 from '@radix-ng/primitives/presence';
4
4
  import * as _radix_ng_primitives_core from '@radix-ng/primitives/core';
5
- import { DataOrientation, BooleanInput } from '@radix-ng/primitives/core';
5
+ import { DataOrientation, RdxCancelableChangeEventDetails, BooleanInput } from '@radix-ng/primitives/core';
6
6
  import * as _radix_ng_primitives_tabs from '@radix-ng/primitives/tabs';
7
7
  import * as i1$1 from '@radix-ng/primitives/roving-focus';
8
8
 
@@ -28,6 +28,12 @@ type RdxTabsActivationDirection = 'left' | 'right' | 'up' | 'down' | 'none';
28
28
  /** A value that identifies a tab / panel pair. */
29
29
  type RdxTabsValue = string | number | null;
30
30
 
31
+ type RdxTabsValueChangeReason = 'trigger-press' | 'keyboard' | 'focus' | 'none';
32
+ type RdxTabsValueChangeEventDetails = RdxCancelableChangeEventDetails<RdxTabsValueChangeReason>;
33
+ interface RdxTabsValueChangeEvent {
34
+ value: RdxTabsValue;
35
+ eventDetails: RdxTabsValueChangeEventDetails;
36
+ }
31
37
  /**
32
38
  * Groups the tabs and the corresponding panels.
33
39
  *
@@ -54,7 +60,7 @@ declare class RdxTabsRoot {
54
60
  /**
55
61
  * Event emitted when the selected tab changes.
56
62
  */
57
- readonly onValueChange: _angular_core.OutputEmitterRef<RdxTabsValue>;
63
+ readonly onValueChange: _angular_core.OutputEmitterRef<RdxTabsValueChangeEvent>;
58
64
  /** @ignore Set by `[rdxTabsList]`. */
59
65
  readonly activateOnFocus: _angular_core.WritableSignal<boolean>;
60
66
  /** @ignore Set by `[rdxTabsList]`. */
@@ -63,7 +69,7 @@ declare class RdxTabsRoot {
63
69
  readonly activationDirection: _angular_core.WritableSignal<RdxTabsActivationDirection>;
64
70
  constructor();
65
71
  /** @ignore */
66
- setValue(value: RdxTabsValue): void;
72
+ setValue(value: RdxTabsValue, event?: Event, reason?: RdxTabsValueChangeReason): void;
67
73
  private computeDirection;
68
74
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdxTabsRoot, never>;
69
75
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxTabsRoot, "[rdxTabsRoot]", ["rdxTabsRoot"], { "value": { "alias": "value"; "required": false; "isSignal": true; }; "defaultValue": { "alias": "defaultValue"; "required": false; "isSignal": true; }; "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "onValueChange": "onValueChange"; }, never, never, true, never>;
@@ -124,7 +130,7 @@ declare class RdxTabsTab {
124
130
  /** @ignore */
125
131
  protected onKeyDown(event: KeyboardEvent): void;
126
132
  /** @ignore */
127
- protected onFocus(): void;
133
+ protected onFocus(event: FocusEvent): void;
128
134
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdxTabsTab, never>;
129
135
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxTabsTab, "[rdxTabsTab]", ["rdxTabsTab"], { "value": { "alias": "value"; "required": true; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, {}, never, never, true, [{ directive: typeof i1$1.RdxRovingFocusItemDirective; inputs: { "allowShiftKey": "allowShiftKey"; }; outputs: {}; }]>;
130
136
  }
@@ -227,7 +233,7 @@ interface RdxTabsRootContext {
227
233
  /** The `[rdxTabsList]` host element, used to resolve tab order and indicator geometry. */
228
234
  readonly tabListElement: Signal<HTMLElement | null>;
229
235
  /** Select a tab by value. No-op when the value is unchanged. */
230
- setValue(value: RdxTabsValue): void;
236
+ setValue(value: RdxTabsValue, event?: Event, reason?: string): void;
231
237
  /** Mirror the list's `activateOnFocus` input onto the root context. */
232
238
  setActivateOnFocus(value: boolean): void;
233
239
  /** Register the list host element. */
@@ -244,4 +250,4 @@ declare class RdxTabsModule {
244
250
  }
245
251
 
246
252
  export { RdxTabsIndicator, RdxTabsList, RdxTabsModule, RdxTabsPanel, RdxTabsPanelPresence, RdxTabsRoot, RdxTabsTab, injectTabsRootContext, provideTabsRootContext, tabsImports };
247
- export type { RdxTabsActivationDirection, RdxTabsRootContext, RdxTabsValue };
253
+ export type { RdxTabsActivationDirection, RdxTabsRootContext, RdxTabsValue, RdxTabsValueChangeEvent, RdxTabsValueChangeEventDetails, RdxTabsValueChangeReason };
@@ -22,7 +22,8 @@ declare class RdxTimeFieldRootDirective {
22
22
  * The locale to use for formatting dates.
23
23
  */
24
24
  readonly locale: _angular_core.InputSignal<string>;
25
- readonly dir: _angular_core.InputSignal<Direction>;
25
+ readonly dirInput: _angular_core.InputSignal<Direction | undefined>;
26
+ readonly dir: Signal<Direction>;
26
27
  /**
27
28
  * The minimum valid date that can be entered.
28
29
  */
@@ -138,7 +139,7 @@ declare class RdxTimeFieldRootDirective {
138
139
  */
139
140
  setFocusedElement(el: HTMLElement): void;
140
141
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdxTimeFieldRootDirective, never>;
141
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxTimeFieldRootDirective, "[rdxTimeFieldRoot]", ["rdxTimeFieldRoot"], { "value": { "alias": "value"; "required": false; "isSignal": true; }; "hourCycle": { "alias": "hourCycle"; "required": false; "isSignal": true; }; "granularity": { "alias": "granularity"; "required": false; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; "dir": { "alias": "dir"; "required": false; "isSignal": true; }; "minValue": { "alias": "minValue"; "required": false; "isSignal": true; }; "maxValue": { "alias": "maxValue"; "required": false; "isSignal": true; }; "hideTimeZone": { "alias": "hideTimeZone"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "step": { "alias": "step"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "placeholder": "placeholderChange"; }, ["segmentInputs"], never, true, never>;
142
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxTimeFieldRootDirective, "[rdxTimeFieldRoot]", ["rdxTimeFieldRoot"], { "value": { "alias": "value"; "required": false; "isSignal": true; }; "hourCycle": { "alias": "hourCycle"; "required": false; "isSignal": true; }; "granularity": { "alias": "granularity"; "required": false; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; "dirInput": { "alias": "dir"; "required": false; "isSignal": true; }; "minValue": { "alias": "minValue"; "required": false; "isSignal": true; }; "maxValue": { "alias": "maxValue"; "required": false; "isSignal": true; }; "hideTimeZone": { "alias": "hideTimeZone"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "step": { "alias": "step"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "placeholder": "placeholderChange"; }, ["segmentInputs"], never, true, never>;
142
143
  }
143
144
 
144
145
  declare class RdxTimeFieldInputDirective {
@@ -207,16 +207,16 @@ declare class RdxToastViewport {
207
207
 
208
208
  /**
209
209
  * Positions an anchored toast against an element — the Angular counterpart of `<Toast.Positioner>`.
210
- * Composes the popper machinery so a toast can point at a trigger instead of living in the stack.
211
210
  *
212
- * Bind `anchor` (and optionally `side`/`align`/offsets) typically from a toast's `positionerProps`.
213
- * It hosts its own `RdxPopper` so it is self-contained (no surrounding `rdxPopperRoot` needed), and
214
- * mirrors the popper measurements as friendlier CSS variables plus `data-side` / `data-align`.
211
+ * A "thin" positioner (ADR 0012): it inherits the popper positioning surface (inputs, `placed`
212
+ * output, unified vars + placement attrs) from {@link RdxPopperContentWrapper}. Bind `anchor` (and
213
+ * optionally `side`/`align`/offsets) typically from a toast's `positionerProps`. It also composes
214
+ * its own {@link RdxPopper} so it is self-contained (no surrounding `rdxPopperRoot` needed), and
215
+ * mirrors the anchor width / transform origin as friendlier `--toast-*` CSS variables.
215
216
  */
216
- declare class RdxToastPositioner {
217
- protected readonly wrapper: RdxPopperContentWrapper;
217
+ declare class RdxToastPositioner extends RdxPopperContentWrapper {
218
218
  static ɵfac: i0.ɵɵFactoryDeclaration<RdxToastPositioner, never>;
219
- static ɵdir: i0.ɵɵDirectiveDeclaration<RdxToastPositioner, "[rdxToastPositioner]", ["rdxToastPositioner"], {}, {}, never, never, true, [{ directive: typeof i1$1.RdxPopper; inputs: {}; outputs: {}; }, { directive: typeof i1$1.RdxPopperContentWrapper; inputs: { "anchor": "anchor"; "side": "side"; "sideOffset": "sideOffset"; "align": "align"; "alignOffset": "alignOffset"; "arrowPadding": "arrowPadding"; "avoidCollisions": "avoidCollisions"; "collisionBoundary": "collisionBoundary"; "collisionPadding": "collisionPadding"; "sticky": "sticky"; "hideWhenDetached": "hideWhenDetached"; "positionStrategy": "positionStrategy"; "updatePositionStrategy": "updatePositionStrategy"; }; outputs: {}; }]>;
219
+ static ɵdir: i0.ɵɵDirectiveDeclaration<RdxToastPositioner, "[rdxToastPositioner]", ["rdxToastPositioner"], {}, {}, never, never, true, [{ directive: typeof i1$1.RdxPopper; inputs: {}; outputs: {}; }]>;
220
220
  }
221
221
 
222
222
  /** Direction a swipe travels to dismiss a toast. */
@@ -1,7 +1,7 @@
1
+ import * as _radix_ng_primitives_core from '@radix-ng/primitives/core';
2
+ import { DataOrientation, BooleanInput, RdxCancelableChangeEventDetails } from '@radix-ng/primitives/core';
1
3
  import * as _angular_core from '@angular/core';
2
4
  import { Signal } from '@angular/core';
3
- import * as _radix_ng_primitives_core from '@radix-ng/primitives/core';
4
- import { DataOrientation, BooleanInput } from '@radix-ng/primitives/core';
5
5
  import * as i1 from '@radix-ng/primitives/roving-focus';
6
6
  import { Direction } from '@radix-ng/primitives/roving-focus';
7
7
  import { ControlValueAccessor } from '@angular/forms';
@@ -19,11 +19,17 @@ interface RdxToggleGroupContext {
19
19
  /** The orientation of the group. */
20
20
  readonly orientation: Signal<DataOrientation>;
21
21
  /** Toggle the pressed state of `value` within the group. */
22
- toggle(value: string): void;
22
+ toggle(value: string, event?: Event): void;
23
23
  }
24
24
  declare const injectToggleGroupContext: _radix_ng_primitives_core.InjectContext<RdxToggleGroupContext>;
25
25
  declare const provideToggleGroupContext: (useFactory: () => RdxToggleGroupContext) => _angular_core.Provider;
26
26
 
27
+ type RdxToggleGroupValueChangeReason = 'trigger-press' | 'none';
28
+ type RdxToggleGroupValueChangeEventDetails = RdxCancelableChangeEventDetails<RdxToggleGroupValueChangeReason>;
29
+ interface RdxToggleGroupValueChangeEvent {
30
+ value: string[];
31
+ eventDetails: RdxToggleGroupValueChangeEventDetails;
32
+ }
27
33
  /** Builds the shared context a {@link RdxToggle} reads when it belongs to this group. */
28
34
  declare function toggleGroupContext(instance: RdxToggleGroupBase): RdxToggleGroupContext;
29
35
  /**
@@ -58,7 +64,7 @@ declare abstract class RdxToggleGroupBase implements ControlValueAccessor {
58
64
  */
59
65
  readonly orientation: _angular_core.InputSignal<DataOrientation>;
60
66
  /** Event emitted when the pressed values change. */
61
- readonly onValueChange: _angular_core.OutputEmitterRef<string[]>;
67
+ readonly onValueChange: _angular_core.OutputEmitterRef<RdxToggleGroupValueChangeEvent>;
62
68
  /** @ignore */
63
69
  readonly pressedValues: _angular_core.Signal<string[]>;
64
70
  protected readonly accessorDisabled: _angular_core.WritableSignal<boolean>;
@@ -68,7 +74,7 @@ declare abstract class RdxToggleGroupBase implements ControlValueAccessor {
68
74
  protected onTouched?: () => void;
69
75
  constructor();
70
76
  /** @ignore */
71
- toggle(value: string): void;
77
+ toggle(value: string, event?: Event): void;
72
78
  /** @ignore */
73
79
  writeValue(value: string[] | string | null): void;
74
80
  /** @ignore */
@@ -89,7 +95,8 @@ declare abstract class RdxToggleGroupBase implements ControlValueAccessor {
89
95
  */
90
96
  declare class RdxToggleGroup extends RdxToggleGroupBase {
91
97
  /** Text direction for arrow-key navigation. */
92
- readonly dir: _angular_core.InputSignal<Direction>;
98
+ readonly dirInput: _angular_core.InputSignal<Direction | undefined>;
99
+ readonly dir: _angular_core.Signal<_radix_ng_primitives_core.Direction>;
93
100
  /**
94
101
  * Whether keyboard navigation should loop from the last item back to the first.
95
102
  *
@@ -99,7 +106,7 @@ declare class RdxToggleGroup extends RdxToggleGroupBase {
99
106
  private readonly rovingFocusGroup;
100
107
  constructor();
101
108
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdxToggleGroup, never>;
102
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxToggleGroup, "[rdxToggleGroup]", ["rdxToggleGroup"], { "dir": { "alias": "dir"; "required": false; "isSignal": true; }; "loopFocus": { "alias": "loopFocus"; "required": false; "isSignal": true; }; }, {}, never, never, true, [{ directive: typeof i1.RdxRovingFocusGroupDirective; inputs: {}; outputs: {}; }]>;
109
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxToggleGroup, "[rdxToggleGroup]", ["rdxToggleGroup"], { "dirInput": { "alias": "dir"; "required": false; "isSignal": true; }; "loopFocus": { "alias": "loopFocus"; "required": false; "isSignal": true; }; }, {}, never, never, true, [{ directive: typeof i1.RdxRovingFocusGroupDirective; inputs: {}; outputs: {}; }]>;
103
110
  }
104
111
 
105
112
  /**
@@ -114,4 +121,4 @@ declare class RdxToggleGroupWithoutFocus extends RdxToggleGroupBase {
114
121
  }
115
122
 
116
123
  export { RdxToggleGroup, RdxToggleGroupBase, RdxToggleGroupWithoutFocus, injectToggleGroupContext, provideToggleGroupContext, toggleGroupContext };
117
- export type { RdxToggleGroupContext };
124
+ export type { RdxToggleGroupContext, RdxToggleGroupValueChangeEvent, RdxToggleGroupValueChangeEventDetails, RdxToggleGroupValueChangeReason };
@@ -1,8 +1,14 @@
1
1
  import * as _angular_core from '@angular/core';
2
- import { BooleanInput } from '@radix-ng/primitives/core';
2
+ import { BooleanInput, RdxCancelableChangeEventDetails } from '@radix-ng/primitives/core';
3
3
  import * as i1 from '@radix-ng/primitives/roving-focus';
4
4
  import * as i1$1 from '@radix-ng/primitives/visually-hidden';
5
5
 
6
+ type RdxTogglePressedChangeReason = 'trigger-press' | 'none';
7
+ type RdxTogglePressedChangeEventDetails = RdxCancelableChangeEventDetails<RdxTogglePressedChangeReason>;
8
+ interface RdxTogglePressedChangeEvent {
9
+ pressed: boolean;
10
+ eventDetails: RdxTogglePressedChangeEventDetails;
11
+ }
6
12
  /**
7
13
  * A two-state button that can be either on (pressed) or off.
8
14
  *
@@ -42,7 +48,7 @@ declare class RdxToggle {
42
48
  */
43
49
  readonly nativeButton: _angular_core.InputSignalWithTransform<boolean, BooleanInput>;
44
50
  /** Event emitted when the pressed state changes (standalone). */
45
- readonly onPressedChange: _angular_core.OutputEmitterRef<boolean>;
51
+ readonly onPressedChange: _angular_core.OutputEmitterRef<RdxTogglePressedChangeEvent>;
46
52
  private readonly internalPressed;
47
53
  /** @ignore Whether the toggle is currently pressed (from the group when grouped). */
48
54
  readonly pressedState: _angular_core.Signal<boolean>;
@@ -50,7 +56,7 @@ declare class RdxToggle {
50
56
  readonly isDisabled: _angular_core.Signal<boolean>;
51
57
  constructor();
52
58
  /** @ignore */
53
- protected onClick(): void;
59
+ protected onClick(event?: Event): void;
54
60
  /** @ignore */
55
61
  protected onKeyDown(event: KeyboardEvent): void;
56
62
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdxToggle, never>;
@@ -63,3 +69,4 @@ declare class RdxToggleVisuallyHiddenInputDirective {
63
69
  }
64
70
 
65
71
  export { RdxToggle, RdxToggleVisuallyHiddenInputDirective };
72
+ export type { RdxTogglePressedChangeEvent, RdxTogglePressedChangeEventDetails, RdxTogglePressedChangeReason };
@@ -31,7 +31,8 @@ declare class RdxToolbarRoot {
31
31
  */
32
32
  readonly orientation: _angular_core.InputSignal<DataOrientation>;
33
33
  /** Text direction for arrow-key navigation. */
34
- readonly dir: _angular_core.InputSignal<Direction>;
34
+ readonly dirInput: _angular_core.InputSignal<Direction | undefined>;
35
+ readonly dir: _angular_core.Signal<_radix_ng_primitives_core.Direction>;
35
36
  /**
36
37
  * Whether keyboard navigation should loop from the last item back to the first.
37
38
  *
@@ -47,7 +48,7 @@ declare class RdxToolbarRoot {
47
48
  private readonly rovingFocusGroup;
48
49
  constructor();
49
50
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdxToolbarRoot, never>;
50
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxToolbarRoot, "[rdxToolbarRoot]", ["rdxToolbarRoot"], { "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; "dir": { "alias": "dir"; "required": false; "isSignal": true; }; "loopFocus": { "alias": "loopFocus"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, {}, never, never, true, [{ directive: typeof i1$1.RdxRovingFocusGroupDirective; inputs: {}; outputs: {}; }]>;
51
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxToolbarRoot, "[rdxToolbarRoot]", ["rdxToolbarRoot"], { "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; "dirInput": { "alias": "dir"; "required": false; "isSignal": true; }; "loopFocus": { "alias": "loopFocus"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, {}, never, never, true, [{ directive: typeof i1$1.RdxRovingFocusGroupDirective; inputs: {}; outputs: {}; }]>;
51
52
  }
52
53
 
53
54
  /**