@radix-ng/primitives 1.0.0-beta.0 → 1.0.0-beta.2

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 (117) hide show
  1. package/fesm2022/radix-ng-primitives-accordion.mjs +2 -2
  2. package/fesm2022/radix-ng-primitives-accordion.mjs.map +1 -1
  3. package/fesm2022/radix-ng-primitives-calendar.mjs +109 -84
  4. package/fesm2022/radix-ng-primitives-calendar.mjs.map +1 -1
  5. package/fesm2022/radix-ng-primitives-checkbox.mjs +2 -2
  6. package/fesm2022/radix-ng-primitives-checkbox.mjs.map +1 -1
  7. package/fesm2022/radix-ng-primitives-collapsible.mjs +1 -1
  8. package/fesm2022/radix-ng-primitives-collapsible.mjs.map +1 -1
  9. package/fesm2022/radix-ng-primitives-combobox.mjs +1923 -0
  10. package/fesm2022/radix-ng-primitives-combobox.mjs.map +1 -0
  11. package/fesm2022/radix-ng-primitives-context-menu.mjs +1 -1
  12. package/fesm2022/radix-ng-primitives-context-menu.mjs.map +1 -1
  13. package/fesm2022/radix-ng-primitives-core.mjs +591 -470
  14. package/fesm2022/radix-ng-primitives-core.mjs.map +1 -1
  15. package/fesm2022/radix-ng-primitives-cropper.mjs +287 -308
  16. package/fesm2022/radix-ng-primitives-cropper.mjs.map +1 -1
  17. package/fesm2022/radix-ng-primitives-date-field.mjs +66 -15
  18. package/fesm2022/radix-ng-primitives-date-field.mjs.map +1 -1
  19. package/fesm2022/radix-ng-primitives-dialog.mjs +1 -1
  20. package/fesm2022/radix-ng-primitives-dialog.mjs.map +1 -1
  21. package/fesm2022/radix-ng-primitives-drawer.mjs +7 -106
  22. package/fesm2022/radix-ng-primitives-drawer.mjs.map +1 -1
  23. package/fesm2022/radix-ng-primitives-editable.mjs +305 -24
  24. package/fesm2022/radix-ng-primitives-editable.mjs.map +1 -1
  25. package/fesm2022/radix-ng-primitives-field.mjs +86 -6
  26. package/fesm2022/radix-ng-primitives-field.mjs.map +1 -1
  27. package/fesm2022/radix-ng-primitives-fieldset.mjs +1 -1
  28. package/fesm2022/radix-ng-primitives-fieldset.mjs.map +1 -1
  29. package/fesm2022/radix-ng-primitives-focus-scope.mjs +1 -1
  30. package/fesm2022/radix-ng-primitives-focus-scope.mjs.map +1 -1
  31. package/fesm2022/radix-ng-primitives-form.mjs +207 -0
  32. package/fesm2022/radix-ng-primitives-form.mjs.map +1 -0
  33. package/fesm2022/radix-ng-primitives-input.mjs +85 -4
  34. package/fesm2022/radix-ng-primitives-input.mjs.map +1 -1
  35. package/fesm2022/radix-ng-primitives-menu.mjs +413 -5
  36. package/fesm2022/radix-ng-primitives-menu.mjs.map +1 -1
  37. package/fesm2022/radix-ng-primitives-menubar.mjs +1 -1
  38. package/fesm2022/radix-ng-primitives-menubar.mjs.map +1 -1
  39. package/fesm2022/radix-ng-primitives-meter.mjs +1 -1
  40. package/fesm2022/radix-ng-primitives-meter.mjs.map +1 -1
  41. package/fesm2022/radix-ng-primitives-navigation-menu.mjs +1 -1
  42. package/fesm2022/radix-ng-primitives-navigation-menu.mjs.map +1 -1
  43. package/fesm2022/radix-ng-primitives-number-field.mjs +2 -2
  44. package/fesm2022/radix-ng-primitives-number-field.mjs.map +1 -1
  45. package/fesm2022/radix-ng-primitives-popover.mjs +1 -1
  46. package/fesm2022/radix-ng-primitives-popover.mjs.map +1 -1
  47. package/fesm2022/radix-ng-primitives-popper.mjs +22 -5
  48. package/fesm2022/radix-ng-primitives-popper.mjs.map +1 -1
  49. package/fesm2022/radix-ng-primitives-portal.mjs.map +1 -1
  50. package/fesm2022/radix-ng-primitives-preview-card.mjs +1 -1
  51. package/fesm2022/radix-ng-primitives-preview-card.mjs.map +1 -1
  52. package/fesm2022/radix-ng-primitives-progress.mjs +1 -1
  53. package/fesm2022/radix-ng-primitives-progress.mjs.map +1 -1
  54. package/fesm2022/radix-ng-primitives-roving-focus.mjs +1 -1
  55. package/fesm2022/radix-ng-primitives-roving-focus.mjs.map +1 -1
  56. package/fesm2022/radix-ng-primitives-scroll-area.mjs +923 -0
  57. package/fesm2022/radix-ng-primitives-scroll-area.mjs.map +1 -0
  58. package/fesm2022/radix-ng-primitives-select.mjs +421 -224
  59. package/fesm2022/radix-ng-primitives-select.mjs.map +1 -1
  60. package/fesm2022/radix-ng-primitives-slider.mjs +1 -1
  61. package/fesm2022/radix-ng-primitives-slider.mjs.map +1 -1
  62. package/fesm2022/radix-ng-primitives-stepper.mjs.map +1 -1
  63. package/fesm2022/radix-ng-primitives-switch.mjs +3 -2
  64. package/fesm2022/radix-ng-primitives-switch.mjs.map +1 -1
  65. package/fesm2022/radix-ng-primitives-tabs.mjs +12 -3
  66. package/fesm2022/radix-ng-primitives-tabs.mjs.map +1 -1
  67. package/fesm2022/radix-ng-primitives-time-field.mjs +27 -3
  68. package/fesm2022/radix-ng-primitives-time-field.mjs.map +1 -1
  69. package/fesm2022/radix-ng-primitives-toast.mjs +839 -0
  70. package/fesm2022/radix-ng-primitives-toast.mjs.map +1 -0
  71. package/fesm2022/radix-ng-primitives-toggle-group.mjs +1 -1
  72. package/fesm2022/radix-ng-primitives-toggle-group.mjs.map +1 -1
  73. package/fesm2022/radix-ng-primitives-toolbar.mjs +2 -2
  74. package/fesm2022/radix-ng-primitives-toolbar.mjs.map +1 -1
  75. package/fesm2022/radix-ng-primitives-tooltip.mjs +11 -3
  76. package/fesm2022/radix-ng-primitives-tooltip.mjs.map +1 -1
  77. package/package.json +18 -2
  78. package/schematics/ng-add/index.js +57 -0
  79. package/schematics/ng-add/index.js.map +1 -1
  80. package/schematics/ng-add/schema.d.ts +1 -0
  81. package/schematics/ng-add/schema.json +6 -0
  82. package/types/radix-ng-primitives-accordion.d.ts +3 -2
  83. package/types/radix-ng-primitives-calendar.d.ts +38 -18
  84. package/types/radix-ng-primitives-checkbox.d.ts +5 -5
  85. package/types/radix-ng-primitives-collapsible.d.ts +2 -1
  86. package/types/radix-ng-primitives-combobox.d.ts +1265 -0
  87. package/types/radix-ng-primitives-context-menu.d.ts +3 -2
  88. package/types/radix-ng-primitives-core.d.ts +187 -56
  89. package/types/radix-ng-primitives-cropper.d.ts +89 -56
  90. package/types/radix-ng-primitives-date-field.d.ts +11 -5
  91. package/types/radix-ng-primitives-dialog.d.ts +2 -1
  92. package/types/radix-ng-primitives-drawer.d.ts +5 -27
  93. package/types/radix-ng-primitives-editable.d.ts +90 -13
  94. package/types/radix-ng-primitives-field.d.ts +74 -4
  95. package/types/radix-ng-primitives-fieldset.d.ts +3 -2
  96. package/types/radix-ng-primitives-focus-scope.d.ts +2 -1
  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 +16 -4
  100. package/types/radix-ng-primitives-menubar.d.ts +2 -1
  101. package/types/radix-ng-primitives-meter.d.ts +3 -2
  102. package/types/radix-ng-primitives-navigation-menu.d.ts +1 -1
  103. package/types/radix-ng-primitives-number-field.d.ts +6 -6
  104. package/types/radix-ng-primitives-popover.d.ts +2 -1
  105. package/types/radix-ng-primitives-popper.d.ts +19 -2
  106. package/types/radix-ng-primitives-preview-card.d.ts +1 -1
  107. package/types/radix-ng-primitives-progress.d.ts +3 -2
  108. package/types/radix-ng-primitives-roving-focus.d.ts +4 -3
  109. package/types/radix-ng-primitives-scroll-area.d.ts +253 -0
  110. package/types/radix-ng-primitives-select.d.ts +296 -136
  111. package/types/radix-ng-primitives-slider.d.ts +1 -1
  112. package/types/radix-ng-primitives-switch.d.ts +1 -1
  113. package/types/radix-ng-primitives-tabs.d.ts +1 -1
  114. package/types/radix-ng-primitives-toast.d.ts +378 -0
  115. package/types/radix-ng-primitives-toggle-group.d.ts +2 -1
  116. package/types/radix-ng-primitives-toolbar.d.ts +3 -2
  117. package/types/radix-ng-primitives-tooltip.d.ts +3 -2
@@ -1,7 +1,11 @@
1
1
  import * as _angular_core from '@angular/core';
2
- import { RdxFormValueControl, BooleanInput } from '@radix-ng/primitives/core';
2
+ import { RdxFormValueControl, BooleanInput, RdxValidationError, NumberInput } from '@radix-ng/primitives/core';
3
3
 
4
- type RdxInputValue = string | number | readonly string[];
4
+ /**
5
+ * The input value. Native text inputs always produce strings, so the model is
6
+ * `string` — matching Signal Forms' `FormValueControl<string>` round-trip.
7
+ */
8
+ type RdxInputValue = string;
5
9
  interface RdxInputValueChangeEventDetails {
6
10
  event: Event;
7
11
  cancel: () => void;
@@ -24,30 +28,44 @@ declare class RdxInputDirective implements RdxFormValueControl<RdxInputValue | u
24
28
  private defaultValueApplied;
25
29
  private readonly filledValue;
26
30
  private readonly focusedValue;
31
+ private readonly dirtyValue;
27
32
  /**
28
33
  * The input id. Field labels and descriptions use this value for accessible relationships.
29
34
  *
30
35
  * @group Props
31
36
  */
32
37
  readonly id: _angular_core.InputSignal<string>;
38
+ /**
39
+ * The name of the input, submitted with the form data and used by Form-level
40
+ * error matching.
41
+ *
42
+ * @group Props
43
+ */
44
+ readonly name: _angular_core.InputSignal<string | undefined>;
33
45
  /**
34
46
  * The controlled input value.
35
47
  *
36
48
  * @group Props
37
49
  */
38
- readonly value: _angular_core.ModelSignal<RdxInputValue | undefined>;
50
+ readonly value: _angular_core.ModelSignal<string | undefined>;
39
51
  /**
40
52
  * The initial value when the input is uncontrolled.
41
53
  *
42
54
  * @group Props
43
55
  */
44
- readonly defaultValue: _angular_core.InputSignal<RdxInputValue | undefined>;
56
+ readonly defaultValue: _angular_core.InputSignal<string | undefined>;
45
57
  /**
46
58
  * Whether the input is disabled.
47
59
  *
48
60
  * @group Props
49
61
  */
50
62
  readonly disabled: _angular_core.InputSignalWithTransform<boolean, BooleanInput>;
63
+ /**
64
+ * Whether the input is read-only.
65
+ *
66
+ * @group Props
67
+ */
68
+ readonly readonly: _angular_core.InputSignalWithTransform<boolean, BooleanInput>;
51
69
  /**
52
70
  * Whether the input is required.
53
71
  *
@@ -60,17 +78,69 @@ declare class RdxInputDirective implements RdxFormValueControl<RdxInputValue | u
60
78
  * @group Props
61
79
  */
62
80
  readonly invalid: _angular_core.InputSignalWithTransform<boolean, BooleanInput>;
81
+ /**
82
+ * Whether the input has been touched. A two-way model: the input sets it on
83
+ * blur (emitting `touchedChange`, which Signal Forms' `[formField]` listens
84
+ * to), and a form system can write it back.
85
+ *
86
+ * @group Props
87
+ */
88
+ readonly touched: _angular_core.ModelSignal<boolean>;
89
+ /**
90
+ * Whether the input value has changed from its initial value. Merged with the
91
+ * internally tracked state; a form system can own it through this input.
92
+ *
93
+ * @group Props
94
+ */
95
+ readonly dirty: _angular_core.InputSignalWithTransform<boolean, BooleanInput>;
96
+ /**
97
+ * Validation errors for the input. A non-empty list marks the input invalid.
98
+ *
99
+ * @group Props
100
+ */
101
+ readonly errors: _angular_core.InputSignal<readonly RdxValidationError[]>;
102
+ /**
103
+ * Minimum number of characters.
104
+ *
105
+ * @group Props
106
+ */
107
+ readonly minLength: _angular_core.InputSignalWithTransform<number | undefined, NumberInput>;
108
+ /**
109
+ * Maximum number of characters.
110
+ *
111
+ * @group Props
112
+ */
113
+ readonly maxLength: _angular_core.InputSignalWithTransform<number | undefined, NumberInput>;
114
+ /**
115
+ * Patterns the value must match. Reflected to the native `pattern` attribute
116
+ * only when exactly one pattern is provided (the attribute holds a single regex).
117
+ *
118
+ * @group Props
119
+ */
120
+ readonly pattern: _angular_core.InputSignal<readonly RegExp[]>;
63
121
  /**
64
122
  * Emits when the input value changes.
65
123
  *
66
124
  * @group Emits
67
125
  */
68
126
  readonly onValueChange: _angular_core.OutputEmitterRef<RdxInputValueChangeEvent>;
127
+ /**
128
+ * Emits on blur, notifying a form system the input was touched. Stable
129
+ * Angular 22 Signal Forms listens to this `touch` output; the 21.x
130
+ * experimental implementation listens to the `touched` model's
131
+ * `touchedChange` instead — both are emitted, covering either version.
132
+ *
133
+ * @group Emits
134
+ */
135
+ readonly touch: _angular_core.OutputEmitterRef<void>;
69
136
  protected readonly invalidState: _angular_core.Signal<boolean>;
70
137
  protected readonly disabledState: _angular_core.Signal<boolean>;
71
138
  protected readonly requiredState: _angular_core.Signal<boolean>;
72
139
  protected readonly filledState: _angular_core.Signal<boolean>;
73
140
  protected readonly focusedState: _angular_core.Signal<boolean>;
141
+ protected readonly touchedState: _angular_core.Signal<boolean>;
142
+ protected readonly dirtyState: _angular_core.Signal<boolean>;
143
+ protected readonly patternAttr: _angular_core.Signal<string | undefined>;
74
144
  protected readonly describedBy: _angular_core.Signal<string | undefined>;
75
145
  constructor();
76
146
  onFocus(): void;
@@ -80,7 +150,7 @@ declare class RdxInputDirective implements RdxFormValueControl<RdxInputValue | u
80
150
  private writeValue;
81
151
  protected readonly dataAttr: (value: boolean) => "" | undefined;
82
152
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdxInputDirective, never>;
83
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxInputDirective, "input[rdxInput]", ["rdxInput"], { "id": { "alias": "id"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "defaultValue": { "alias": "defaultValue"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "onValueChange": "onValueChange"; }, never, never, true, never>;
153
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxInputDirective, "input[rdxInput]", ["rdxInput"], { "id": { "alias": "id"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "defaultValue": { "alias": "defaultValue"; "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; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "touched": { "alias": "touched"; "required": false; "isSignal": true; }; "dirty": { "alias": "dirty"; "required": false; "isSignal": true; }; "errors": { "alias": "errors"; "required": false; "isSignal": true; }; "minLength": { "alias": "minLength"; "required": false; "isSignal": true; }; "maxLength": { "alias": "maxLength"; "required": false; "isSignal": true; }; "pattern": { "alias": "pattern"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "touched": "touchedChange"; "onValueChange": "onValueChange"; "touch": "touch"; }, never, never, true, never>;
84
154
  }
85
155
 
86
156
  export { RdxInputDirective };
@@ -34,6 +34,8 @@ interface RdxMenuRootContext {
34
34
  isSubmenu: Signal<boolean>;
35
35
  hasTriggerInteractionHandler: Signal<boolean>;
36
36
  trigger: Signal<HTMLElement | undefined>;
37
+ /** The popup element, once mounted. Used by submenu safe-polygon geometry. */
38
+ popupElement: Signal<HTMLElement | undefined>;
37
39
  transitionStatus: Signal<RdxMenuTransitionStatus>;
38
40
  close: () => void;
39
41
  toggle: () => void;
@@ -41,6 +43,7 @@ interface RdxMenuRootContext {
41
43
  /** Open the menu without moving focus into the popup (used for menubar hover-switching). */
42
44
  showWithoutAutoFocus: () => void;
43
45
  registerTrigger: (el: HTMLElement) => () => void;
46
+ registerPopup: (el: HTMLElement) => () => void;
44
47
  registerTransitionElement: (element: HTMLElement) => () => void;
45
48
  registerPopupArrowNavigationHandler: (handler: (offset: 1 | -1) => boolean) => () => void;
46
49
  registerTriggerInteractionHandler: (handler: RdxMenuTriggerInteractionHandler) => () => void;
@@ -77,7 +80,7 @@ type RdxMenuTriggerInteraction = {
77
80
  event: Event;
78
81
  };
79
82
  type RdxMenuTriggerInteractionHandler = (interaction: RdxMenuTriggerInteraction) => boolean;
80
- declare const injectRdxMenuRootContext: (optional?: boolean) => RdxMenuRootContext | null;
83
+ declare const injectRdxMenuRootContext: _radix_ng_primitives_core.InjectContext<RdxMenuRootContext>;
81
84
  declare const provideRdxMenuRootContext: (useFactory: () => RdxMenuRootContext) => _angular_core.Provider;
82
85
  /**
83
86
  * Groups all parts of a menu.
@@ -111,6 +114,7 @@ declare class RdxMenuRoot {
111
114
  /** Emits when the open/close CSS transition or animation finishes. */
112
115
  readonly onOpenChangeComplete: _angular_core.OutputEmitterRef<boolean>;
113
116
  readonly trigger: _angular_core.WritableSignal<HTMLElement | undefined>;
117
+ readonly popupElement: _angular_core.WritableSignal<HTMLElement | undefined>;
114
118
  readonly transitionStatus: Signal<_radix_ng_primitives_core.RdxTransitionStatus>;
115
119
  /** Whether the popup grabs focus when it opens. Set false for menubar hover-switching. */
116
120
  readonly autoFocus: _angular_core.WritableSignal<RdxMenuAutoFocus>;
@@ -122,6 +126,7 @@ declare class RdxMenuRoot {
122
126
  close(): void;
123
127
  toggle(): void;
124
128
  registerTrigger(el: HTMLElement): () => void;
129
+ registerPopup(el: HTMLElement): () => void;
125
130
  registerTransitionElement(element: HTMLElement): () => void;
126
131
  registerPopupArrowNavigationHandler(handler: (offset: 1 | -1) => boolean): () => void;
127
132
  handlePopupArrowNavigation(offset: 1 | -1): boolean;
@@ -186,8 +191,14 @@ declare class RdxMenuSubTrigger {
186
191
  private readonly submenuRoot;
187
192
  private readonly elementRef;
188
193
  private readonly destroyRef;
194
+ private readonly isBrowser;
189
195
  private readonly isFocused;
190
196
  private openTimer;
197
+ private closeTimer;
198
+ /** Cursor position from the last pointer move over the trigger (safe-polygon apex). */
199
+ private lastPointer;
200
+ /** Whether the current open was initiated by hover (vs keyboard / click). */
201
+ private openedByHover;
191
202
  /** Whether this trigger (and therefore the submenu) is disabled. */
192
203
  readonly disabled: _angular_core.InputSignalWithTransform<boolean, BooleanInput>;
193
204
  /** Whether this trigger should be treated as a native button. Auto-detected for `<button>`. */
@@ -204,6 +215,7 @@ declare class RdxMenuSubTrigger {
204
215
  protected readonly highlighted: _angular_core.Signal<boolean>;
205
216
  protected readonly nativeButtonState: _angular_core.Signal<boolean>;
206
217
  constructor();
218
+ private scheduleClose;
207
219
  protected onFocus(): void;
208
220
  protected onBlur(): void;
209
221
  protected onClick(): void;
@@ -481,7 +493,7 @@ declare function getCheckedState(checked: CheckedState): 'checked' | 'unchecked'
481
493
  interface RdxMenuCheckboxItemContext {
482
494
  checked: Signal<CheckedState>;
483
495
  }
484
- declare const injectRdxMenuCheckboxItemContext: (optional?: boolean) => RdxMenuCheckboxItemContext | null;
496
+ declare const injectRdxMenuCheckboxItemContext: _radix_ng_primitives_core.InjectContext<RdxMenuCheckboxItemContext>;
485
497
  declare const provideRdxMenuCheckboxItemContext: (useFactory: () => RdxMenuCheckboxItemContext) => _angular_core.Provider;
486
498
  /**
487
499
  * A menu item that can be checked or unchecked.
@@ -532,7 +544,7 @@ interface RdxMenuRadioGroupContext {
532
544
  value: Signal<string | undefined>;
533
545
  selectValue: (value: string) => void;
534
546
  }
535
- declare const injectRdxMenuRadioGroupContext: (optional?: boolean) => RdxMenuRadioGroupContext | null;
547
+ declare const injectRdxMenuRadioGroupContext: _radix_ng_primitives_core.InjectContext<RdxMenuRadioGroupContext>;
536
548
  declare const provideRdxMenuRadioGroupContext: (useFactory: () => RdxMenuRadioGroupContext) => _angular_core.Provider;
537
549
  /**
538
550
  * Groups radio items in a menu.
@@ -554,7 +566,7 @@ declare class RdxMenuRadioGroup {
554
566
  interface RdxMenuRadioItemContext {
555
567
  checked: Signal<boolean>;
556
568
  }
557
- declare const injectRdxMenuRadioItemContext: (optional?: boolean) => RdxMenuRadioItemContext | null;
569
+ declare const injectRdxMenuRadioItemContext: _radix_ng_primitives_core.InjectContext<RdxMenuRadioItemContext>;
558
570
  declare const provideRdxMenuRadioItemContext: (useFactory: () => RdxMenuRadioItemContext) => _angular_core.Provider;
559
571
  /**
560
572
  * A radio item within a menu radio group.
@@ -1,5 +1,6 @@
1
1
  import * as _angular_core from '@angular/core';
2
2
  import { Signal } from '@angular/core';
3
+ import * as _radix_ng_primitives_core from '@radix-ng/primitives/core';
3
4
  import { BooleanInput } from '@radix-ng/primitives/core';
4
5
 
5
6
  type RdxMenubarOrientation = 'horizontal' | 'vertical';
@@ -14,7 +15,7 @@ interface RdxMenubarContext {
14
15
  focusAdjacent: (currentId: string, offset: 1 | -1, openOnMove: boolean) => void;
15
16
  focusBoundary: (boundary: 'first' | 'last', openOnMove: boolean) => void;
16
17
  }
17
- declare const injectRdxMenubarContext: (optional?: boolean) => RdxMenubarContext | null;
18
+ declare const injectRdxMenubarContext: _radix_ng_primitives_core.InjectContext<RdxMenubarContext>;
18
19
  declare const provideRdxMenubarContext: (useFactory: () => RdxMenubarContext) => _angular_core.Provider;
19
20
  /**
20
21
  * Container for a horizontal application menu bar.
@@ -1,4 +1,5 @@
1
1
  import * as _angular_core from '@angular/core';
2
+ import * as _radix_ng_primitives_core from '@radix-ng/primitives/core';
2
3
 
3
4
  type MeterValueFormatter = (formattedValue: string, value: number) => string;
4
5
  interface MeterProps {
@@ -21,7 +22,7 @@ declare const meterRootContext: () => {
21
22
  ariaValueTextState: _angular_core.Signal<string | undefined>;
22
23
  };
23
24
  type RdxMeterRootContext = ReturnType<typeof meterRootContext>;
24
- declare const injectMeterRootContext: (optional?: boolean) => {
25
+ declare const injectMeterRootContext: _radix_ng_primitives_core.InjectContext<{
25
26
  labelId: _angular_core.InputSignal<string>;
26
27
  valueId: _angular_core.InputSignal<string>;
27
28
  minState: _angular_core.Signal<number>;
@@ -30,7 +31,7 @@ declare const injectMeterRootContext: (optional?: boolean) => {
30
31
  percentageState: _angular_core.Signal<number>;
31
32
  formattedValueState: _angular_core.Signal<string>;
32
33
  ariaValueTextState: _angular_core.Signal<string | undefined>;
33
- } | null;
34
+ }>;
34
35
  declare const provideMeterRootContext: (useFactory: () => {
35
36
  labelId: _angular_core.InputSignal<string>;
36
37
  valueId: _angular_core.InputSignal<string>;
@@ -75,7 +75,7 @@ interface RdxNavigationMenuRootContext {
75
75
  registerTransitionElement(element: HTMLElement): () => void;
76
76
  registerViewport(onTriggerChange: (previous: HTMLElement, next: HTMLElement) => void): () => void;
77
77
  }
78
- declare const injectNavigationMenuRootContext: (optional?: boolean) => RdxNavigationMenuRootContext | null;
78
+ declare const injectNavigationMenuRootContext: _radix_ng_primitives_core.InjectContext<RdxNavigationMenuRootContext>;
79
79
  declare const provideNavigationMenuRootContext: (useFactory: () => RdxNavigationMenuRootContext) => _angular_core.Provider;
80
80
 
81
81
  /**
@@ -1,10 +1,10 @@
1
1
  import * as _angular_core from '@angular/core';
2
2
  import { Signal } from '@angular/core';
3
- import * as i1 from '@radix-ng/primitives/core';
3
+ import * as _radix_ng_primitives_core from '@radix-ng/primitives/core';
4
4
  import { RdxFormValueControl, RdxControlValueAccessor, NumberInput, BooleanInput } from '@radix-ng/primitives/core';
5
5
  import * as _radix_ng_primitives_number_field from '@radix-ng/primitives/number-field';
6
6
  import { NumberFormatter, NumberParser } from '@internationalized/number';
7
- import * as i1$1 from '@radix-ng/primitives/portal';
7
+ import * as i1 from '@radix-ng/primitives/portal';
8
8
 
9
9
  /**
10
10
  * The software keyboard hint shown on touch devices, mapped to the input's `inputmode` attribute.
@@ -188,7 +188,7 @@ declare class RdxNumberFieldRoot implements RdxFormValueControl<number | null> {
188
188
  commitValue(value: number | null): void;
189
189
  private applyValue;
190
190
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdxNumberFieldRoot, never>;
191
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxNumberFieldRoot, "div[rdxNumberFieldRoot]", ["rdxNumberFieldRoot"], { "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; }; "smallStep": { "alias": "smallStep"; "required": false; "isSignal": true; }; "largeStep": { "alias": "largeStep"; "required": false; "isSignal": true; }; "snapOnStep": { "alias": "snapOnStep"; "required": false; "isSignal": true; }; "allowOutOfRange": { "alias": "allowOutOfRange"; "required": false; "isSignal": true; }; "allowWheelScrub": { "alias": "allowWheelScrub"; "required": false; "isSignal": true; }; "format": { "alias": "format"; "required": false; "isSignal": true; }; "locale": { "alias": "locale"; "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; }; "form": { "alias": "form"; "required": false; "isSignal": true; }; "defaultValue": { "alias": "defaultValue"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "onValueChange": "onValueChange"; "onValueCommitted": "onValueCommitted"; }, never, never, true, [{ directive: typeof i1.RdxControlValueAccessor; inputs: { "value": "value"; "disabled": "disabled"; }; outputs: {}; }]>;
191
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxNumberFieldRoot, "div[rdxNumberFieldRoot]", ["rdxNumberFieldRoot"], { "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; }; "smallStep": { "alias": "smallStep"; "required": false; "isSignal": true; }; "largeStep": { "alias": "largeStep"; "required": false; "isSignal": true; }; "snapOnStep": { "alias": "snapOnStep"; "required": false; "isSignal": true; }; "allowOutOfRange": { "alias": "allowOutOfRange"; "required": false; "isSignal": true; }; "allowWheelScrub": { "alias": "allowWheelScrub"; "required": false; "isSignal": true; }; "format": { "alias": "format"; "required": false; "isSignal": true; }; "locale": { "alias": "locale"; "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; }; "form": { "alias": "form"; "required": false; "isSignal": true; }; "defaultValue": { "alias": "defaultValue"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "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: {}; }]>;
192
192
  }
193
193
 
194
194
  /**
@@ -379,7 +379,7 @@ interface RdxNumberFieldScrubAreaContext {
379
379
  *
380
380
  * @see https://base-ui.com/react/components/number-field
381
381
  */
382
- declare const injectNumberFieldScrubAreaContext: (optional?: boolean) => RdxNumberFieldScrubAreaContext | null;
382
+ declare const injectNumberFieldScrubAreaContext: _radix_ng_primitives_core.InjectContext<RdxNumberFieldScrubAreaContext>;
383
383
  declare const provideNumberFieldScrubAreaContext: (useFactory: () => RdxNumberFieldScrubAreaContext) => _angular_core.Provider;
384
384
 
385
385
  type ScrubDirection = 'horizontal' | 'vertical';
@@ -441,7 +441,7 @@ declare class RdxNumberFieldScrubAreaCursor {
441
441
  protected readonly shouldRender: _angular_core.Signal<boolean>;
442
442
  constructor();
443
443
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdxNumberFieldScrubAreaCursor, never>;
444
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxNumberFieldScrubAreaCursor, "[rdxNumberFieldScrubAreaCursor]", ["rdxNumberFieldScrubAreaCursor"], {}, {}, never, never, true, [{ directive: typeof i1$1.RdxPortal; inputs: {}; outputs: {}; }]>;
444
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxNumberFieldScrubAreaCursor, "[rdxNumberFieldScrubAreaCursor]", ["rdxNumberFieldScrubAreaCursor"], {}, {}, never, never, true, [{ directive: typeof i1.RdxPortal; inputs: {}; outputs: {}; }]>;
445
445
  }
446
446
 
447
447
  /**
@@ -451,7 +451,7 @@ declare class RdxNumberFieldScrubAreaCursor {
451
451
  *
452
452
  * @see https://base-ui.com/react/components/number-field
453
453
  */
454
- declare const injectNumberFieldRootContext: (optional?: boolean) => RdxNumberFieldRoot | null;
454
+ declare const injectNumberFieldRootContext: _radix_ng_primitives_core.InjectContext<RdxNumberFieldRoot>;
455
455
  declare const provideNumberFieldRootContext: (useFactory: () => RdxNumberFieldRoot) => _angular_core.Provider;
456
456
 
457
457
  declare class RdxNumberFieldModule {
@@ -1,6 +1,7 @@
1
1
  import * as _angular_core from '@angular/core';
2
2
  import { Signal, ElementRef } from '@angular/core';
3
3
  import * as i1 from '@radix-ng/primitives/presence';
4
+ import * as _radix_ng_primitives_core from '@radix-ng/primitives/core';
4
5
  import { RdxTransitionStatus, BooleanInput, NumberInput } from '@radix-ng/primitives/core';
5
6
  import * as i1$1 from '@radix-ng/primitives/popper';
6
7
  import { RdxPopperContentWrapper, RdxPopperAnchorElement } from '@radix-ng/primitives/popper';
@@ -72,7 +73,7 @@ interface RdxPopoverRootContext {
72
73
  registerViewport: (onTriggerChange: (previous: HTMLElement, next: HTMLElement) => void) => () => void;
73
74
  toggle: (triggerId: string, trigger: HTMLElement, payload?: unknown, event?: Event) => void;
74
75
  }
75
- declare const injectRdxPopoverRootContext: (optional?: boolean) => RdxPopoverRootContext | null;
76
+ declare const injectRdxPopoverRootContext: _radix_ng_primitives_core.InjectContext<RdxPopoverRootContext>;
76
77
  declare const provideRdxPopoverRootContext: (useFactory: () => RdxPopoverRootContext) => _angular_core.Provider;
77
78
  type RdxPopoverTransitionStatus = RdxTransitionStatus;
78
79
  /**
@@ -1,6 +1,7 @@
1
1
  import * as _angular_core from '@angular/core';
2
2
  import { ElementRef, InjectionToken, Provider } from '@angular/core';
3
3
  import { ReferenceElement, Placement, Middleware, VirtualElement } from '@floating-ui/dom';
4
+ import * as _radix_ng_primitives_core from '@radix-ng/primitives/core';
4
5
  import { NumberInput, BooleanInput } from '@radix-ng/primitives/core';
5
6
 
6
7
  declare class RdxPopperAnchor {
@@ -59,7 +60,7 @@ declare const context: () => {
59
60
  anchorHidden: _angular_core.Signal<boolean>;
60
61
  };
61
62
  type PopperContentWrapperContext = ReturnType<typeof context>;
62
- declare const injectPopperContentWrapperContext: (optional?: boolean) => {
63
+ declare const injectPopperContentWrapperContext: _radix_ng_primitives_core.InjectContext<{
63
64
  placedSide: _angular_core.Signal<"top" | "right" | "bottom" | "left" | undefined>;
64
65
  placedAlign: _angular_core.Signal<"start" | "center" | "end" | undefined>;
65
66
  arrowX: _angular_core.Signal<number | undefined>;
@@ -67,7 +68,7 @@ declare const injectPopperContentWrapperContext: (optional?: boolean) => {
67
68
  shouldHideArrow: _angular_core.Signal<boolean>;
68
69
  isPositioned: _angular_core.Signal<boolean>;
69
70
  anchorHidden: _angular_core.Signal<boolean>;
70
- } | null;
71
+ }>;
71
72
  declare const providePopperContentWrapperContext: (useFactory: () => {
72
73
  placedSide: _angular_core.Signal<"top" | "right" | "bottom" | "left" | undefined>;
73
74
  placedAlign: _angular_core.Signal<"start" | "center" | "end" | undefined>;
@@ -144,6 +145,12 @@ declare class RdxPopperContentWrapper {
144
145
  */
145
146
  readonly placed: _angular_core.OutputEmitterRef<void>;
146
147
  readonly arrow: _angular_core.Signal<any>;
148
+ /**
149
+ * When `true`, the content is rendered click/hover-through (`pointer-events: none`). Used for
150
+ * cursor-following content (e.g. a tooltip tracking the pointer) that must never intercept the
151
+ * pointer and steal hover from its trigger.
152
+ */
153
+ readonly nonInteractive: _angular_core.WritableSignal<boolean>;
147
154
  readonly shouldHideArrow: _angular_core.Signal<boolean>;
148
155
  /** Whether the arrow could not be centered on the anchor because the popup was shifted. */
149
156
  readonly arrowUncentered: _angular_core.Signal<boolean>;
@@ -157,6 +164,16 @@ declare class RdxPopperContentWrapper {
157
164
  private readonly detectOverflowOptions;
158
165
  private readonly resolvedAnchor;
159
166
  private readonly position;
167
+ /**
168
+ * The last successfully computed position, retained while a new one is being computed.
169
+ *
170
+ * The `position` resource resets `value()` to `undefined` whenever its params change (e.g. on
171
+ * every pointer move while a tooltip tracks the cursor). Reading it directly would blank the
172
+ * popup (`visibility: hidden` + off-screen transform) for the frames between a move and the next
173
+ * resolved position — a visible flicker at high pointer-move rates. Holding the previous value
174
+ * keeps the popup placed and visible until the new position is ready.
175
+ */
176
+ private readonly resolvedPosition;
160
177
  /**
161
178
  * Whether the panel is positioned.
162
179
  */
@@ -64,7 +64,7 @@ interface RdxPreviewCardRootContext {
64
64
  registerViewport: (onTriggerChange: (previous: HTMLElement, next: HTMLElement) => void) => () => void;
65
65
  toggle: (triggerId: string, trigger: HTMLElement, payload?: unknown, event?: Event) => void;
66
66
  }
67
- declare const injectRdxPreviewCardRootContext: (optional?: boolean) => RdxPreviewCardRootContext | null;
67
+ declare const injectRdxPreviewCardRootContext: _radix_ng_primitives_core.InjectContext<RdxPreviewCardRootContext>;
68
68
  declare const provideRdxPreviewCardRootContext: (useFactory: () => RdxPreviewCardRootContext) => _angular_core.Provider;
69
69
  type RdxPreviewCardTransitionStatus = 'starting' | 'ending' | undefined;
70
70
  /**
@@ -1,4 +1,5 @@
1
1
  import * as _angular_core from '@angular/core';
2
+ import * as _radix_ng_primitives_core from '@radix-ng/primitives/core';
2
3
  import * as _radix_ng_primitives_progress from '@radix-ng/primitives/progress';
3
4
 
4
5
  type ProgressState = 'indeterminate' | 'complete' | 'progressing';
@@ -23,7 +24,7 @@ declare const progressRootContext: () => {
23
24
  indeterminateState: _angular_core.Signal<boolean>;
24
25
  };
25
26
  type RdxProgressRootContext = ReturnType<typeof progressRootContext>;
26
- declare const injectProgressRootContext: (optional?: boolean) => {
27
+ declare const injectProgressRootContext: _radix_ng_primitives_core.InjectContext<{
27
28
  labelId: _angular_core.InputSignal<string>;
28
29
  valueId: _angular_core.InputSignal<string>;
29
30
  minState: _angular_core.Signal<number>;
@@ -35,7 +36,7 @@ declare const injectProgressRootContext: (optional?: boolean) => {
35
36
  completeState: _angular_core.Signal<boolean>;
36
37
  progressingState: _angular_core.Signal<boolean>;
37
38
  indeterminateState: _angular_core.Signal<boolean>;
38
- } | null;
39
+ }>;
39
40
  declare const provideProgressRootContext: (useFactory: () => {
40
41
  labelId: _angular_core.InputSignal<string>;
41
42
  valueId: _angular_core.InputSignal<string>;
@@ -1,5 +1,6 @@
1
- import * as _angular_core from '@angular/core';
1
+ import * as _radix_ng_primitives_core from '@radix-ng/primitives/core';
2
2
  import { BooleanInput } from '@radix-ng/primitives/core';
3
+ import * as _angular_core from '@angular/core';
3
4
  import * as _radix_ng_primitives_roving_focus from '@radix-ng/primitives/roving-focus';
4
5
 
5
6
  type Orientation = 'horizontal' | 'vertical';
@@ -18,7 +19,7 @@ declare const rootContext: () => {
18
19
  unregisterItem: (item: HTMLElement, tabStopId: string) => void;
19
20
  };
20
21
  type RovingFocusGroupContext = ReturnType<typeof rootContext>;
21
- declare const injectRovingFocusGroupContext: (optional?: boolean) => {
22
+ declare const injectRovingFocusGroupContext: _radix_ng_primitives_core.InjectContext<{
22
23
  loop: _angular_core.Signal<boolean>;
23
24
  dir: _angular_core.Signal<Direction>;
24
25
  orientation: _angular_core.Signal<Orientation>;
@@ -28,7 +29,7 @@ declare const injectRovingFocusGroupContext: (optional?: boolean) => {
28
29
  onItemShiftTab: () => void;
29
30
  registerItem: (item: HTMLElement, tabStopId: string) => void;
30
31
  unregisterItem: (item: HTMLElement, tabStopId: string) => void;
31
- } | null;
32
+ }>;
32
33
  declare const provideRovingFocusGroupContext: (useFactory: () => {
33
34
  loop: _angular_core.Signal<boolean>;
34
35
  dir: _angular_core.Signal<Direction>;