@radix-ng/primitives 1.0.9 → 1.1.0
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.
- package/README.md +26 -5
- package/fesm2022/radix-ng-primitives-autocomplete.mjs +35 -19
- package/fesm2022/radix-ng-primitives-autocomplete.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-checkbox.mjs +55 -7
- package/fesm2022/radix-ng-primitives-checkbox.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-combobox.mjs +46 -21
- package/fesm2022/radix-ng-primitives-combobox.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-composite.mjs +221 -36
- package/fesm2022/radix-ng-primitives-composite.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-core.mjs +189 -26
- package/fesm2022/radix-ng-primitives-core.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-date-field.mjs +29 -13
- package/fesm2022/radix-ng-primitives-date-field.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-field.mjs +127 -23
- package/fesm2022/radix-ng-primitives-field.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-floating-focus-manager.mjs +9 -0
- package/fesm2022/radix-ng-primitives-floating-focus-manager.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-focus-scope.mjs +241 -95
- package/fesm2022/radix-ng-primitives-focus-scope.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-form.mjs +35 -4
- package/fesm2022/radix-ng-primitives-form.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-input.mjs +87 -15
- package/fesm2022/radix-ng-primitives-input.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-menu.mjs +131 -16
- package/fesm2022/radix-ng-primitives-menu.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-navigation-menu.mjs +17 -3
- package/fesm2022/radix-ng-primitives-navigation-menu.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-popper.mjs +223 -29
- package/fesm2022/radix-ng-primitives-popper.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-portal.mjs +16 -5
- package/fesm2022/radix-ng-primitives-portal.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-scroll-area.mjs +6 -3
- package/fesm2022/radix-ng-primitives-scroll-area.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-select.mjs +49 -17
- package/fesm2022/radix-ng-primitives-select.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-signal-forms.mjs +27 -11
- package/fesm2022/radix-ng-primitives-signal-forms.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-time-field.mjs +24 -10
- package/fesm2022/radix-ng-primitives-time-field.mjs.map +1 -1
- package/package.json +8 -7
- package/types/radix-ng-primitives-autocomplete.d.ts +7 -2
- package/types/radix-ng-primitives-checkbox.d.ts +10 -1
- package/types/radix-ng-primitives-combobox.d.ts +29 -2
- package/types/radix-ng-primitives-composite.d.ts +48 -2
- package/types/radix-ng-primitives-core.d.ts +165 -104
- package/types/radix-ng-primitives-date-field.d.ts +21 -8
- package/types/radix-ng-primitives-field.d.ts +55 -8
- package/types/radix-ng-primitives-floating-focus-manager.d.ts +7 -0
- package/types/radix-ng-primitives-focus-scope.d.ts +61 -44
- package/types/radix-ng-primitives-form.d.ts +9 -0
- package/types/radix-ng-primitives-input.d.ts +10 -2
- package/types/radix-ng-primitives-menu.d.ts +59 -7
- package/types/radix-ng-primitives-navigation-menu.d.ts +2 -2
- package/types/radix-ng-primitives-popover.d.ts +2 -2
- package/types/radix-ng-primitives-popper.d.ts +186 -48
- package/types/radix-ng-primitives-portal.d.ts +18 -8
- package/types/radix-ng-primitives-preview-card.d.ts +2 -2
- package/types/radix-ng-primitives-select.d.ts +17 -3
- package/types/radix-ng-primitives-signal-forms.d.ts +22 -8
- package/types/radix-ng-primitives-time-field.d.ts +21 -10
- package/types/radix-ng-primitives-tooltip.d.ts +2 -2
- package/fesm2022/radix-ng-primitives-focus-guards.mjs +0 -53
- package/fesm2022/radix-ng-primitives-focus-guards.mjs.map +0 -1
- package/focus-guards/README.md +0 -1
- package/types/radix-ng-primitives-focus-guards.d.ts +0 -15
|
@@ -92,6 +92,8 @@ interface ComboboxEngineConfig {
|
|
|
92
92
|
items: Signal<readonly AcceptableValue[] | undefined>;
|
|
93
93
|
/** Filter: `undefined` → default contains; a function → custom; `null` → built-in filtering off. */
|
|
94
94
|
filter: Signal<ComboboxFilter | null | undefined>;
|
|
95
|
+
/** Locale for the default `contains` collator; `undefined` → the runtime's default locale. */
|
|
96
|
+
locale: Signal<Intl.LocalesArgument>;
|
|
95
97
|
/** Maximum number of matching items to show (`-1` = no limit). */
|
|
96
98
|
limit: Signal<number>;
|
|
97
99
|
/** Whether the list is a 2D grid (row/column arrow navigation). Defaults off for plain lists. */
|
|
@@ -226,6 +228,8 @@ declare const context: () => {
|
|
|
226
228
|
readonly: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
227
229
|
requiredState: _angular_core.Signal<boolean>;
|
|
228
230
|
invalidState: _angular_core.Signal<boolean>;
|
|
231
|
+
pendingState: _angular_core.Signal<boolean>;
|
|
232
|
+
validState: _angular_core.Signal<boolean | null>;
|
|
229
233
|
touchedState: _angular_core.Signal<boolean>;
|
|
230
234
|
dirtyState: _angular_core.Signal<boolean>;
|
|
231
235
|
openOnInputClick: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
@@ -301,6 +305,8 @@ declare const injectComboboxRootContext: _radix_ng_primitives_core.InjectContext
|
|
|
301
305
|
readonly: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
302
306
|
requiredState: _angular_core.Signal<boolean>;
|
|
303
307
|
invalidState: _angular_core.Signal<boolean>;
|
|
308
|
+
pendingState: _angular_core.Signal<boolean>;
|
|
309
|
+
validState: _angular_core.Signal<boolean | null>;
|
|
304
310
|
touchedState: _angular_core.Signal<boolean>;
|
|
305
311
|
dirtyState: _angular_core.Signal<boolean>;
|
|
306
312
|
openOnInputClick: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
@@ -375,6 +381,8 @@ declare const provideComboboxRootContext: (useFactory: () => {
|
|
|
375
381
|
readonly: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
376
382
|
requiredState: _angular_core.Signal<boolean>;
|
|
377
383
|
invalidState: _angular_core.Signal<boolean>;
|
|
384
|
+
pendingState: _angular_core.Signal<boolean>;
|
|
385
|
+
validState: _angular_core.Signal<boolean | null>;
|
|
378
386
|
touchedState: _angular_core.Signal<boolean>;
|
|
379
387
|
dirtyState: _angular_core.Signal<boolean>;
|
|
380
388
|
openOnInputClick: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
@@ -514,6 +522,8 @@ declare class RdxComboboxRoot extends RdxFormUiControlBase implements ControlVal
|
|
|
514
522
|
* - `null`: built-in filtering disabled (the consumer controls which items exist).
|
|
515
523
|
*/
|
|
516
524
|
readonly filter: _angular_core.InputSignal<ComboboxFilter | null | undefined>;
|
|
525
|
+
/** Locale for the default `contains` filter's string comparison. Defaults to the runtime locale. */
|
|
526
|
+
readonly locale: _angular_core.InputSignal<Intl.LocalesArgument>;
|
|
517
527
|
/** Maximum number of matching items to show. `-1` (default) means no limit. */
|
|
518
528
|
readonly limit: _angular_core.InputSignalWithTransform<number, unknown>;
|
|
519
529
|
/**
|
|
@@ -557,6 +567,8 @@ declare class RdxComboboxRoot extends RdxFormUiControlBase implements ControlVal
|
|
|
557
567
|
readonly requiredState: _angular_core.Signal<boolean>;
|
|
558
568
|
/** @ignore */
|
|
559
569
|
readonly invalidState: _angular_core.Signal<boolean>;
|
|
570
|
+
readonly pendingState: _angular_core.Signal<boolean>;
|
|
571
|
+
readonly validState: _angular_core.Signal<boolean | null>;
|
|
560
572
|
/** @ignore */
|
|
561
573
|
readonly touchedState: _angular_core.Signal<boolean>;
|
|
562
574
|
/** @ignore */
|
|
@@ -648,7 +660,7 @@ declare class RdxComboboxRoot extends RdxFormUiControlBase implements ControlVal
|
|
|
648
660
|
registerOnTouched(fn: () => void): void;
|
|
649
661
|
setDisabledState(isDisabled: boolean): void;
|
|
650
662
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdxComboboxRoot, never>;
|
|
651
|
-
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxComboboxRoot, "[rdxComboboxRoot]", ["rdxComboboxRoot"], { "value": { "alias": "value"; "required": false; "isSignal": true; }; "defaultValue": { "alias": "defaultValue"; "required": false; "isSignal": true; }; "inputValue": { "alias": "inputValue"; "required": false; "isSignal": true; }; "open": { "alias": "open"; "required": false; "isSignal": true; }; "defaultOpen": { "alias": "defaultOpen"; "required": false; "isSignal": true; }; "multipleInput": { "alias": "multiple"; "required": false; "isSignal": true; }; "selectionMode": { "alias": "selectionMode"; "required": false; "isSignal": true; }; "fillInputOnItemPress": { "alias": "fillInputOnItemPress"; "required": false; "isSignal": true; }; "dirInput": { "alias": "dir"; "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; }; "loopFocus": { "alias": "loopFocus"; "required": false; "isSignal": true; }; "autoHighlight": { "alias": "autoHighlight"; "required": false; "isSignal": true; }; "highlightItemOnHover": { "alias": "highlightItemOnHover"; "required": false; "isSignal": true; }; "keepHighlight": { "alias": "keepHighlight"; "required": false; "isSignal": true; }; "openOnInputClick": { "alias": "openOnInputClick"; "required": false; "isSignal": true; }; "modal": { "alias": "modal"; "required": false; "isSignal": true; }; "submitOnItemClick": { "alias": "submitOnItemClick"; "required": false; "isSignal": true; }; "filter": { "alias": "filter"; "required": false; "isSignal": true; }; "limit": { "alias": "limit"; "required": false; "isSignal": true; }; "items": { "alias": "items"; "required": false; "isSignal": true; }; "virtualized": { "alias": "virtualized"; "required": false; "isSignal": true; }; "grid": { "alias": "grid"; "required": false; "isSignal": true; }; "isItemEqualToValue": { "alias": "isItemEqualToValue"; "required": false; "isSignal": true; }; "itemToStringLabel": { "alias": "itemToStringLabel"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "inputValue": "inputValueChange"; "open": "openChange"; "onValueChange": "onValueChange"; "onInputValueChange": "onInputValueChange"; "onOpenChange": "onOpenChange"; "onItemHighlighted": "onItemHighlighted"; "onOpenChangeComplete": "onOpenChangeComplete"; }, never, never, true, [{ directive: typeof i1.RdxPopper; inputs: {}; outputs: {}; }]>;
|
|
663
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxComboboxRoot, "[rdxComboboxRoot]", ["rdxComboboxRoot"], { "value": { "alias": "value"; "required": false; "isSignal": true; }; "defaultValue": { "alias": "defaultValue"; "required": false; "isSignal": true; }; "inputValue": { "alias": "inputValue"; "required": false; "isSignal": true; }; "open": { "alias": "open"; "required": false; "isSignal": true; }; "defaultOpen": { "alias": "defaultOpen"; "required": false; "isSignal": true; }; "multipleInput": { "alias": "multiple"; "required": false; "isSignal": true; }; "selectionMode": { "alias": "selectionMode"; "required": false; "isSignal": true; }; "fillInputOnItemPress": { "alias": "fillInputOnItemPress"; "required": false; "isSignal": true; }; "dirInput": { "alias": "dir"; "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; }; "loopFocus": { "alias": "loopFocus"; "required": false; "isSignal": true; }; "autoHighlight": { "alias": "autoHighlight"; "required": false; "isSignal": true; }; "highlightItemOnHover": { "alias": "highlightItemOnHover"; "required": false; "isSignal": true; }; "keepHighlight": { "alias": "keepHighlight"; "required": false; "isSignal": true; }; "openOnInputClick": { "alias": "openOnInputClick"; "required": false; "isSignal": true; }; "modal": { "alias": "modal"; "required": false; "isSignal": true; }; "submitOnItemClick": { "alias": "submitOnItemClick"; "required": false; "isSignal": true; }; "filter": { "alias": "filter"; "required": false; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; "limit": { "alias": "limit"; "required": false; "isSignal": true; }; "items": { "alias": "items"; "required": false; "isSignal": true; }; "virtualized": { "alias": "virtualized"; "required": false; "isSignal": true; }; "grid": { "alias": "grid"; "required": false; "isSignal": true; }; "isItemEqualToValue": { "alias": "isItemEqualToValue"; "required": false; "isSignal": true; }; "itemToStringLabel": { "alias": "itemToStringLabel"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "inputValue": "inputValueChange"; "open": "openChange"; "onValueChange": "onValueChange"; "onInputValueChange": "onInputValueChange"; "onOpenChange": "onOpenChange"; "onItemHighlighted": "onItemHighlighted"; "onOpenChangeComplete": "onOpenChangeComplete"; }, never, never, true, [{ directive: typeof i1.RdxPopper; inputs: {}; outputs: {}; }]>;
|
|
652
664
|
}
|
|
653
665
|
|
|
654
666
|
/**
|
|
@@ -687,6 +699,8 @@ declare class RdxComboboxInput {
|
|
|
687
699
|
readonly: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
688
700
|
requiredState: _angular_core.Signal<boolean>;
|
|
689
701
|
invalidState: _angular_core.Signal<boolean>;
|
|
702
|
+
pendingState: _angular_core.Signal<boolean>;
|
|
703
|
+
validState: _angular_core.Signal<boolean | null>;
|
|
690
704
|
touchedState: _angular_core.Signal<boolean>;
|
|
691
705
|
dirtyState: _angular_core.Signal<boolean>;
|
|
692
706
|
openOnInputClick: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
@@ -752,7 +766,6 @@ declare class RdxComboboxInput {
|
|
|
752
766
|
readonly id: _angular_core.InputSignal<string>;
|
|
753
767
|
/** Marks the input as invalid independently of any Field state. */
|
|
754
768
|
readonly invalid: _angular_core.InputSignalWithTransform<boolean, BooleanInput>;
|
|
755
|
-
protected readonly invalidState: _angular_core.Signal<boolean>;
|
|
756
769
|
/**
|
|
757
770
|
* Tri-state *displayed* validity: the enclosing Field's gated `validState` when inside a `rdxFieldRoot`
|
|
758
771
|
* (so a field whose `validationMode` defers display (e.g. `onBlur`) keeps the input neutral until revealed), else the input's
|
|
@@ -809,6 +822,8 @@ declare class RdxComboboxInputGroup {
|
|
|
809
822
|
readonly: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
810
823
|
requiredState: _angular_core.Signal<boolean>;
|
|
811
824
|
invalidState: _angular_core.Signal<boolean>;
|
|
825
|
+
pendingState: _angular_core.Signal<boolean>;
|
|
826
|
+
validState: _angular_core.Signal<boolean | null>;
|
|
812
827
|
touchedState: _angular_core.Signal<boolean>;
|
|
813
828
|
dirtyState: _angular_core.Signal<boolean>;
|
|
814
829
|
openOnInputClick: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
@@ -929,6 +944,8 @@ declare class RdxComboboxTrigger {
|
|
|
929
944
|
readonly: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
930
945
|
requiredState: _angular_core.Signal<boolean>;
|
|
931
946
|
invalidState: _angular_core.Signal<boolean>;
|
|
947
|
+
pendingState: _angular_core.Signal<boolean>;
|
|
948
|
+
validState: _angular_core.Signal<boolean | null>;
|
|
932
949
|
touchedState: _angular_core.Signal<boolean>;
|
|
933
950
|
dirtyState: _angular_core.Signal<boolean>;
|
|
934
951
|
openOnInputClick: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
@@ -1030,6 +1047,8 @@ declare class RdxComboboxClear {
|
|
|
1030
1047
|
readonly: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
1031
1048
|
requiredState: _angular_core.Signal<boolean>;
|
|
1032
1049
|
invalidState: _angular_core.Signal<boolean>;
|
|
1050
|
+
pendingState: _angular_core.Signal<boolean>;
|
|
1051
|
+
validState: _angular_core.Signal<boolean | null>;
|
|
1033
1052
|
touchedState: _angular_core.Signal<boolean>;
|
|
1034
1053
|
dirtyState: _angular_core.Signal<boolean>;
|
|
1035
1054
|
openOnInputClick: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
@@ -1160,6 +1179,8 @@ declare class RdxComboboxBackdrop {
|
|
|
1160
1179
|
readonly: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
1161
1180
|
requiredState: _angular_core.Signal<boolean>;
|
|
1162
1181
|
invalidState: _angular_core.Signal<boolean>;
|
|
1182
|
+
pendingState: _angular_core.Signal<boolean>;
|
|
1183
|
+
validState: _angular_core.Signal<boolean | null>;
|
|
1163
1184
|
touchedState: _angular_core.Signal<boolean>;
|
|
1164
1185
|
dirtyState: _angular_core.Signal<boolean>;
|
|
1165
1186
|
openOnInputClick: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
@@ -1262,6 +1283,8 @@ declare class RdxComboboxPopup {
|
|
|
1262
1283
|
readonly: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
1263
1284
|
requiredState: _angular_core.Signal<boolean>;
|
|
1264
1285
|
invalidState: _angular_core.Signal<boolean>;
|
|
1286
|
+
pendingState: _angular_core.Signal<boolean>;
|
|
1287
|
+
validState: _angular_core.Signal<boolean | null>;
|
|
1265
1288
|
touchedState: _angular_core.Signal<boolean>;
|
|
1266
1289
|
dirtyState: _angular_core.Signal<boolean>;
|
|
1267
1290
|
openOnInputClick: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
@@ -1371,6 +1394,8 @@ declare class RdxComboboxList {
|
|
|
1371
1394
|
readonly: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
1372
1395
|
requiredState: _angular_core.Signal<boolean>;
|
|
1373
1396
|
invalidState: _angular_core.Signal<boolean>;
|
|
1397
|
+
pendingState: _angular_core.Signal<boolean>;
|
|
1398
|
+
validState: _angular_core.Signal<boolean | null>;
|
|
1374
1399
|
touchedState: _angular_core.Signal<boolean>;
|
|
1375
1400
|
dirtyState: _angular_core.Signal<boolean>;
|
|
1376
1401
|
openOnInputClick: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
@@ -1621,6 +1646,8 @@ declare class RdxComboboxEmpty {
|
|
|
1621
1646
|
readonly: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
1622
1647
|
requiredState: _angular_core.Signal<boolean>;
|
|
1623
1648
|
invalidState: _angular_core.Signal<boolean>;
|
|
1649
|
+
pendingState: _angular_core.Signal<boolean>;
|
|
1650
|
+
validState: _angular_core.Signal<boolean | null>;
|
|
1624
1651
|
touchedState: _angular_core.Signal<boolean>;
|
|
1625
1652
|
dirtyState: _angular_core.Signal<boolean>;
|
|
1626
1653
|
openOnInputClick: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
@@ -77,14 +77,43 @@ declare const provideRdxCompositeListContext: (useFactory: () => RdxCompositeLis
|
|
|
77
77
|
*/
|
|
78
78
|
declare class RdxCompositeList {
|
|
79
79
|
readonly elementRef: ElementRef<HTMLElement>;
|
|
80
|
-
|
|
80
|
+
/**
|
|
81
|
+
* Stable element → registration map. Kept as a plain (mutable) Map so a registration is an O(1)
|
|
82
|
+
* `set`/`delete` instead of re-creating the whole array on every mount — with N items each
|
|
83
|
+
* registering, an array copy per item is an O(n^2) mount. `registrationTick` is the reactive
|
|
84
|
+
* trigger: bumped on every register/unregister so `items` re-derives. Mirrors Base UI's composite
|
|
85
|
+
* list (stable map + `mapTick`).
|
|
86
|
+
*/
|
|
87
|
+
private readonly registrations;
|
|
88
|
+
private readonly registrationTick;
|
|
89
|
+
/**
|
|
90
|
+
* Bumped when registered items are moved in the DOM without re-registering
|
|
91
|
+
* (e.g. an `@for` reorder that reuses views). Angular does not re-run the item
|
|
92
|
+
* registration effect on such moves, so `registeredItems` is unchanged and the
|
|
93
|
+
* document-order sort would go stale; a MutationObserver detects the move and
|
|
94
|
+
* bumps this tick to force `items` to re-sort. Mirrors Base UI's composite list.
|
|
95
|
+
*/
|
|
96
|
+
private readonly reorderTick;
|
|
81
97
|
/** Emits when the ordered item map changes. */
|
|
82
98
|
readonly onMapChange: _angular_core.OutputEmitterRef<Map<HTMLElement, RdxCompositeMetadata>>;
|
|
83
99
|
/** Items registered with this list, sorted in DOM order. */
|
|
84
100
|
readonly items: _angular_core.Signal<RdxCompositeItemRegistration<RdxCompositeItemMetadata>[]>;
|
|
101
|
+
/**
|
|
102
|
+
* Element → document-order index. Depends only on `items()` (not on any item's metadata), so
|
|
103
|
+
* `indexOf` is an O(1) lookup and rebuilds only when the item set/order changes — the mount hot
|
|
104
|
+
* path where N items each read their index. Keeping metadata out of it avoids invalidating every
|
|
105
|
+
* item's index when a single item's metadata changes.
|
|
106
|
+
*/
|
|
107
|
+
private readonly indexMap;
|
|
85
108
|
/** Ordered metadata keyed by item element. */
|
|
86
109
|
readonly itemMap: _angular_core.Signal<Map<HTMLElement, RdxCompositeMetadata>>;
|
|
87
110
|
constructor();
|
|
111
|
+
/**
|
|
112
|
+
* Watches the smallest containers that bound the registered items and re-sorts
|
|
113
|
+
* when a move inverts their document order. Re-established whenever the item set
|
|
114
|
+
* changes; a no-op where `MutationObserver` is unavailable (SSR).
|
|
115
|
+
*/
|
|
116
|
+
private observeItemReordering;
|
|
88
117
|
registerItem<Metadata extends RdxCompositeItemMetadata>(item: RdxCompositeItemRegistration<Metadata>): () => void;
|
|
89
118
|
indexOf(element: HTMLElement): number;
|
|
90
119
|
elements(): HTMLElement[];
|
|
@@ -139,6 +168,8 @@ declare class RdxCompositeRoot {
|
|
|
139
168
|
readonly items: _angular_core.Signal<_radix_ng_primitives_composite.RdxCompositeItemRegistration<_radix_ng_primitives_composite.RdxCompositeItemMetadata>[]>;
|
|
140
169
|
readonly itemMap: _angular_core.Signal<Map<HTMLElement, RdxCompositeMetadata>>;
|
|
141
170
|
constructor();
|
|
171
|
+
/** Move the roving tab stop to the first enabled item when the highlighted one is disabled. */
|
|
172
|
+
private moveHighlightOffDisabledItem;
|
|
142
173
|
indexOf(element: HTMLElement): number;
|
|
143
174
|
setOrientation(value: RdxCompositeOrientation): void;
|
|
144
175
|
setLoopFocus(value: boolean): void;
|
|
@@ -163,9 +194,24 @@ declare const ACTIVE_COMPOSITE_ITEM = "data-composite-item-active";
|
|
|
163
194
|
declare const ARROW_KEYS: Set<string>;
|
|
164
195
|
declare const COMPOSITE_KEYS: Set<string>;
|
|
165
196
|
declare const MODIFIER_KEYS: RdxCompositeModifierKey[];
|
|
197
|
+
declare function compareNodeDocumentPosition(a: Node, b: Node): number;
|
|
166
198
|
declare function sortByDocumentPosition<T extends {
|
|
167
199
|
element: HTMLElement;
|
|
168
200
|
}>(items: readonly T[]): T[];
|
|
201
|
+
/**
|
|
202
|
+
* Smallest set of container elements whose child order can change the relative
|
|
203
|
+
* order of the given (already document-sorted) nodes. Observing each adjacent
|
|
204
|
+
* pair's common ancestor catches both direct item moves and wrapper moves at the
|
|
205
|
+
* boundary, mirroring Base UI's composite list observer.
|
|
206
|
+
*/
|
|
207
|
+
declare function getAdjacentNodeRoots(nodes: readonly Element[]): Set<Element>;
|
|
208
|
+
/**
|
|
209
|
+
* Whether a batch of mutations moved a node (removed then re-added in the same
|
|
210
|
+
* batch, or reparented so a removed node is still connected) rather than a pure
|
|
211
|
+
* add/remove. Pure adds/removals re-sort through register/unregister and cannot
|
|
212
|
+
* change the relative order of the remaining items.
|
|
213
|
+
*/
|
|
214
|
+
declare function hasMovedNode(entries: readonly MutationRecord[]): boolean;
|
|
169
215
|
declare function isModifierKeySet(event: KeyboardEvent, allowedModifierKeys: readonly RdxCompositeModifierKey[]): boolean;
|
|
170
216
|
declare function isNativeTextInput(target: EventTarget | null): target is HTMLInputElement | HTMLTextAreaElement;
|
|
171
217
|
declare function getCompositeNavigationKeys(orientation: RdxCompositeOrientation, dir: Direction): {
|
|
@@ -193,5 +239,5 @@ declare class RdxCompositeModule {
|
|
|
193
239
|
static ɵinj: _angular_core.ɵɵInjectorDeclaration<RdxCompositeModule>;
|
|
194
240
|
}
|
|
195
241
|
|
|
196
|
-
export { ACTIVE_COMPOSITE_ITEM, ARROW_KEYS, COMPOSITE_KEYS, MODIFIER_KEYS, RdxCompositeItem, RdxCompositeList, RdxCompositeListItem, RdxCompositeModule, RdxCompositeRoot, compositeImports, findNonDisabledListIndex, getCompositeNavigationKeys, getMaxListIndex, getMinListIndex, injectRdxCompositeListContext, injectRdxCompositeRootContext, isElementDisabled, isElementVisible, isIndexOutOfListBounds, isListIndexDisabled, isModifierKeySet, isNativeTextInput, provideRdxCompositeListContext, provideRdxCompositeRootContext, scrollIntoViewIfNeeded, shouldKeepNativeTextInputBehavior, sortByDocumentPosition };
|
|
242
|
+
export { ACTIVE_COMPOSITE_ITEM, ARROW_KEYS, COMPOSITE_KEYS, MODIFIER_KEYS, RdxCompositeItem, RdxCompositeList, RdxCompositeListItem, RdxCompositeModule, RdxCompositeRoot, compareNodeDocumentPosition, compositeImports, findNonDisabledListIndex, getAdjacentNodeRoots, getCompositeNavigationKeys, getMaxListIndex, getMinListIndex, hasMovedNode, injectRdxCompositeListContext, injectRdxCompositeRootContext, isElementDisabled, isElementVisible, isIndexOutOfListBounds, isListIndexDisabled, isModifierKeySet, isNativeTextInput, provideRdxCompositeListContext, provideRdxCompositeRootContext, scrollIntoViewIfNeeded, shouldKeepNativeTextInputBehavior, sortByDocumentPosition };
|
|
197
243
|
export type { RdxCompositeItemMetadata, RdxCompositeItemRegistration, RdxCompositeListContext, RdxCompositeMetadata, RdxCompositeModifierKey, RdxCompositeOrientation, RdxCompositeRootContext };
|