@radix-ng/primitives 1.0.0-beta.1 → 1.0.0-beta.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/README.md +76 -6
- package/fesm2022/radix-ng-primitives-accordion.mjs +2 -2
- package/fesm2022/radix-ng-primitives-accordion.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-alert-dialog.mjs +30 -24
- package/fesm2022/radix-ng-primitives-alert-dialog.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-autocomplete.mjs +1786 -0
- package/fesm2022/radix-ng-primitives-autocomplete.mjs.map +1 -0
- package/fesm2022/radix-ng-primitives-calendar.mjs +14 -1
- package/fesm2022/radix-ng-primitives-calendar.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-checkbox.mjs +2 -2
- package/fesm2022/radix-ng-primitives-checkbox.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-collapsible.mjs +1 -1
- package/fesm2022/radix-ng-primitives-collapsible.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-combobox.mjs +1983 -0
- package/fesm2022/radix-ng-primitives-combobox.mjs.map +1 -0
- package/fesm2022/radix-ng-primitives-context-menu.mjs +1 -1
- package/fesm2022/radix-ng-primitives-context-menu.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-core.mjs +480 -469
- package/fesm2022/radix-ng-primitives-core.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-cropper.mjs +1 -1
- package/fesm2022/radix-ng-primitives-cropper.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-date-field.mjs +11 -0
- package/fesm2022/radix-ng-primitives-date-field.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-dialog.mjs +44 -46
- package/fesm2022/radix-ng-primitives-dialog.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-drawer.mjs +154 -64
- package/fesm2022/radix-ng-primitives-drawer.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-editable.mjs +1 -1
- package/fesm2022/radix-ng-primitives-editable.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-field.mjs +86 -6
- package/fesm2022/radix-ng-primitives-field.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-fieldset.mjs +1 -1
- package/fesm2022/radix-ng-primitives-fieldset.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-focus-scope.mjs +1 -1
- package/fesm2022/radix-ng-primitives-focus-scope.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-form.mjs +207 -0
- package/fesm2022/radix-ng-primitives-form.mjs.map +1 -0
- package/fesm2022/radix-ng-primitives-input.mjs +85 -4
- package/fesm2022/radix-ng-primitives-input.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-menu.mjs +44 -24
- package/fesm2022/radix-ng-primitives-menu.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-menubar.mjs +1 -1
- package/fesm2022/radix-ng-primitives-menubar.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-meter.mjs +1 -1
- package/fesm2022/radix-ng-primitives-meter.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-navigation-menu.mjs +39 -55
- package/fesm2022/radix-ng-primitives-navigation-menu.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-number-field.mjs +2 -2
- package/fesm2022/radix-ng-primitives-number-field.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-popover.mjs +36 -51
- package/fesm2022/radix-ng-primitives-popover.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-popper.mjs +12 -6
- package/fesm2022/radix-ng-primitives-popper.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-portal.mjs +107 -17
- package/fesm2022/radix-ng-primitives-portal.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-presence.mjs +262 -79
- package/fesm2022/radix-ng-primitives-presence.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-preview-card.mjs +37 -51
- package/fesm2022/radix-ng-primitives-preview-card.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-progress.mjs +1 -1
- package/fesm2022/radix-ng-primitives-progress.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-roving-focus.mjs +1 -1
- package/fesm2022/radix-ng-primitives-roving-focus.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-scroll-area.mjs +3 -3
- package/fesm2022/radix-ng-primitives-scroll-area.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-select.mjs +469 -258
- package/fesm2022/radix-ng-primitives-select.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-slider.mjs +1 -1
- package/fesm2022/radix-ng-primitives-slider.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-switch.mjs +3 -2
- package/fesm2022/radix-ng-primitives-switch.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-tabs.mjs +1 -1
- package/fesm2022/radix-ng-primitives-tabs.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-time-field.mjs +27 -3
- package/fesm2022/radix-ng-primitives-time-field.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-toast.mjs +1 -1
- package/fesm2022/radix-ng-primitives-toast.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-toggle-group.mjs +1 -1
- package/fesm2022/radix-ng-primitives-toggle-group.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-toolbar.mjs +2 -2
- package/fesm2022/radix-ng-primitives-toolbar.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-tooltip.mjs +39 -42
- package/fesm2022/radix-ng-primitives-tooltip.mjs.map +1 -1
- package/package.json +13 -1
- package/schematics/ng-add/index.js +57 -0
- package/schematics/ng-add/index.js.map +1 -1
- package/schematics/ng-add/schema.d.ts +1 -0
- package/schematics/ng-add/schema.json +6 -0
- package/types/radix-ng-primitives-alert-dialog.d.ts +17 -11
- package/types/radix-ng-primitives-autocomplete.d.ts +596 -0
- package/types/radix-ng-primitives-combobox.d.ts +1310 -0
- package/types/radix-ng-primitives-core.d.ts +148 -56
- package/types/radix-ng-primitives-dialog.d.ts +32 -25
- package/types/radix-ng-primitives-drawer.d.ts +49 -22
- package/types/radix-ng-primitives-field.d.ts +71 -2
- package/types/radix-ng-primitives-form.d.ts +124 -0
- package/types/radix-ng-primitives-input.d.ts +75 -5
- package/types/radix-ng-primitives-menu.d.ts +19 -10
- package/types/radix-ng-primitives-navigation-menu.d.ts +24 -26
- package/types/radix-ng-primitives-popover.d.ts +23 -23
- package/types/radix-ng-primitives-popper.d.ts +7 -1
- package/types/radix-ng-primitives-portal.d.ts +53 -8
- package/types/radix-ng-primitives-presence.d.ts +98 -17
- package/types/radix-ng-primitives-preview-card.d.ts +24 -23
- package/types/radix-ng-primitives-select.d.ts +294 -137
- package/types/radix-ng-primitives-tooltip.d.ts +26 -19
|
@@ -166,11 +166,13 @@ interface InjectContext<T> {
|
|
|
166
166
|
* Creates a context with injector and provider functions for a given type
|
|
167
167
|
* @template T The type of the context value
|
|
168
168
|
* @param description Descriptive string for the context (used in token creation)
|
|
169
|
+
* @param docs Documentation path for the owning primitive (e.g. `'components/accordion'`),
|
|
170
|
+
* appended to the missing-context error as a link to the required anatomy
|
|
169
171
|
* @returns A tuple containing:
|
|
170
172
|
* - injectContext: Function to retrieve the context value
|
|
171
173
|
* - provideContext: Function to create a provider for the context
|
|
172
174
|
*/
|
|
173
|
-
declare function createContext<T>(description: string): readonly [injectContext: InjectContext<T>, provideContext: (useFactory: () => T) => Provider];
|
|
175
|
+
declare function createContext<T>(description: string, docs?: string): readonly [injectContext: InjectContext<T>, provideContext: (useFactory: () => T) => Provider];
|
|
174
176
|
|
|
175
177
|
declare const DATE_SEGMENT_PARTS: readonly ["day", "month", "year"];
|
|
176
178
|
declare const TIME_SEGMENT_PARTS: readonly ["hour", "minute", "second", "dayPeriod"];
|
|
@@ -343,6 +345,12 @@ declare function areAllDaysBetweenValid(start: DateValue, end: DateValue, isUnav
|
|
|
343
345
|
type TimeValue = Time | CalendarDateTime | ZonedDateTime;
|
|
344
346
|
type Granularity = 'day' | 'hour' | 'minute' | 'second';
|
|
345
347
|
type TimeGranularity = 'hour' | 'minute' | 'second';
|
|
348
|
+
/**
|
|
349
|
+
* The granularities that require a time component (and therefore a `CalendarDateTime`
|
|
350
|
+
* rather than a `CalendarDate`). Single source of truth — used by both the default-date
|
|
351
|
+
* builder and the segment-value initializer.
|
|
352
|
+
*/
|
|
353
|
+
declare const TIME_GRANULARITIES: readonly Granularity[];
|
|
346
354
|
type GetDefaultDateProps = {
|
|
347
355
|
defaultValue?: DateValue | DateValue[] | undefined;
|
|
348
356
|
defaultPlaceholder?: DateValue | undefined;
|
|
@@ -405,7 +413,7 @@ type SyncTimeSegmentValuesProps = {
|
|
|
405
413
|
formatter: Formatter;
|
|
406
414
|
};
|
|
407
415
|
declare function syncTimeSegmentValues(props: SyncTimeSegmentValuesProps): SegmentValueObj;
|
|
408
|
-
declare function initializeSegmentValues(granularity: Granularity): SegmentValueObj;
|
|
416
|
+
declare function initializeSegmentValues(granularity: Granularity, isTimeValue?: boolean): SegmentValueObj;
|
|
409
417
|
type SharedContentProps = {
|
|
410
418
|
granularity: Granularity;
|
|
411
419
|
dateRef: DateValue;
|
|
@@ -462,54 +470,9 @@ type SegmentAttrProps = {
|
|
|
462
470
|
placeholder: DateValue;
|
|
463
471
|
formatter: Formatter;
|
|
464
472
|
};
|
|
465
|
-
declare function daySegmentAttrs(props: SegmentAttrProps): {
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
'aria-valuemax': number;
|
|
469
|
-
'aria-valuenow': number;
|
|
470
|
-
'aria-valuetext': string;
|
|
471
|
-
'data-placeholder': string | undefined;
|
|
472
|
-
role: string;
|
|
473
|
-
contenteditable: boolean;
|
|
474
|
-
tabindex: number | undefined;
|
|
475
|
-
spellcheck: boolean;
|
|
476
|
-
inputmode: string;
|
|
477
|
-
autocorrect: string;
|
|
478
|
-
enterkeyhint: string;
|
|
479
|
-
style: string;
|
|
480
|
-
};
|
|
481
|
-
declare function monthSegmentAttrs(props: SegmentAttrProps): {
|
|
482
|
-
'aria-label': string;
|
|
483
|
-
contenteditable: boolean;
|
|
484
|
-
'aria-valuemin': number;
|
|
485
|
-
'aria-valuemax': number;
|
|
486
|
-
'aria-valuenow': number;
|
|
487
|
-
'aria-valuetext': string;
|
|
488
|
-
'data-placeholder': string | undefined;
|
|
489
|
-
role: string;
|
|
490
|
-
tabindex: number | undefined;
|
|
491
|
-
spellcheck: boolean;
|
|
492
|
-
inputmode: string;
|
|
493
|
-
autocorrect: string;
|
|
494
|
-
enterkeyhint: string;
|
|
495
|
-
style: string;
|
|
496
|
-
};
|
|
497
|
-
declare function yearSegmentAttrs(props: SegmentAttrProps): {
|
|
498
|
-
'aria-label': string;
|
|
499
|
-
'aria-valuemin': number;
|
|
500
|
-
'aria-valuemax': number;
|
|
501
|
-
'aria-valuenow': number;
|
|
502
|
-
'aria-valuetext': string;
|
|
503
|
-
'data-placeholder': string | undefined;
|
|
504
|
-
role: string;
|
|
505
|
-
contenteditable: boolean;
|
|
506
|
-
tabindex: number | undefined;
|
|
507
|
-
spellcheck: boolean;
|
|
508
|
-
inputmode: string;
|
|
509
|
-
autocorrect: string;
|
|
510
|
-
enterkeyhint: string;
|
|
511
|
-
style: string;
|
|
512
|
-
};
|
|
473
|
+
declare function daySegmentAttrs(props: SegmentAttrProps): {};
|
|
474
|
+
declare function monthSegmentAttrs(props: SegmentAttrProps): {};
|
|
475
|
+
declare function yearSegmentAttrs(props: SegmentAttrProps): {};
|
|
513
476
|
declare function hourSegmentAttrs(props: SegmentAttrProps): {};
|
|
514
477
|
declare function minuteSegmentAttrs(props: SegmentAttrProps): {};
|
|
515
478
|
declare function secondSegmentAttrs(props: SegmentAttrProps): {};
|
|
@@ -616,6 +579,36 @@ declare class RdxIdGenerator {
|
|
|
616
579
|
*/
|
|
617
580
|
declare function injectId(prefix: string): string;
|
|
618
581
|
|
|
582
|
+
/**
|
|
583
|
+
* A comparator for list-item values, aligned with Base UI's `isItemEqualToValue` naming.
|
|
584
|
+
*
|
|
585
|
+
* - a **function** `(a, b) => boolean` — full control over equality;
|
|
586
|
+
* - a **string** — an object key whose values are compared with {@link isEqual} (Reka-style `by`);
|
|
587
|
+
* - omitted — structural deep equality via {@link isEqual}.
|
|
588
|
+
*/
|
|
589
|
+
type ItemValueComparator<T = unknown> = ((a: T, b: T) => boolean) | string;
|
|
590
|
+
/**
|
|
591
|
+
* Converts an item value to the string shown to the user.
|
|
592
|
+
*
|
|
593
|
+
* Strings pass through unchanged; `null`/`undefined` become an empty string; everything else is
|
|
594
|
+
* coerced with `String()`. Primitives that hold object values (e.g. combobox) typically pass their
|
|
595
|
+
* own `itemToStringLabel` to render a field off the object instead.
|
|
596
|
+
*/
|
|
597
|
+
declare function itemToStringLabel(value: unknown): string;
|
|
598
|
+
/**
|
|
599
|
+
* Converts an item value to the string used for form serialization. Defaults to the same rules as
|
|
600
|
+
* {@link itemToStringLabel}; kept as a separate export so a primitive can diverge label vs. value.
|
|
601
|
+
*/
|
|
602
|
+
declare function itemToStringValue(value: unknown): string;
|
|
603
|
+
/**
|
|
604
|
+
* Compares two item values for equality using an optional {@link ItemValueComparator}.
|
|
605
|
+
*
|
|
606
|
+
* @example
|
|
607
|
+
* isItemEqualToValue({ id: 1 }, { id: 1 }, 'id'); // true — compares the `id` key
|
|
608
|
+
* isItemEqualToValue({ id: 1 }, { id: 1 }); // true — deep equality fallback
|
|
609
|
+
*/
|
|
610
|
+
declare function isItemEqualToValue<T>(a: T, b: T, comparator?: ItemValueComparator<T>): boolean;
|
|
611
|
+
|
|
619
612
|
declare const ALT = "Alt";
|
|
620
613
|
declare const ARROW_DOWN = "ArrowDown";
|
|
621
614
|
declare const ARROW_LEFT = "ArrowLeft";
|
|
@@ -756,15 +749,27 @@ interface RdxFormUiControl {
|
|
|
756
749
|
readonly invalid?: RdxFormStateInput<boolean>;
|
|
757
750
|
readonly hidden?: RdxFormStateInput<boolean>;
|
|
758
751
|
readonly pending?: RdxFormStateInput<boolean>;
|
|
759
|
-
|
|
752
|
+
/**
|
|
753
|
+
* Touched status the form writes into the control.
|
|
754
|
+
*
|
|
755
|
+
* The two API generations disagree on the notification half: the 21.x
|
|
756
|
+
* experimental implementation listens to a `touched` **model**'s
|
|
757
|
+
* `touchedChange` output, while stable Angular 22 reverted to a plain
|
|
758
|
+
* `touched` input plus a separate {@link touch} output. A `model()` set on
|
|
759
|
+
* blur **plus** an emitted `touch` output satisfies both (`ModelSignal`
|
|
760
|
+
* extends `InputSignalWithTransform`, so it type-checks as the 22 input).
|
|
761
|
+
*/
|
|
762
|
+
readonly touched?: ModelSignal<boolean> | RdxFormStateInput<boolean> | OutputRef<boolean>;
|
|
760
763
|
readonly dirty?: RdxFormStateInput<boolean>;
|
|
761
764
|
readonly name?: RdxFormStateInput<string | undefined>;
|
|
762
765
|
readonly errors?: RdxFormStateInput<readonly RdxValidationError[]>;
|
|
763
766
|
readonly minLength?: RdxFormStateInput<number | undefined>;
|
|
764
767
|
readonly maxLength?: RdxFormStateInput<number | undefined>;
|
|
765
768
|
readonly pattern?: RdxFormStateInput<readonly RegExp[]>;
|
|
766
|
-
/** Notifies the form
|
|
769
|
+
/** Notifies the form the control was touched (stable Angular 22 contract; ignored by 21.x). */
|
|
767
770
|
readonly touch?: OutputRef<void>;
|
|
771
|
+
/** Resets the control's UI state (optional method added in stable Angular 22). */
|
|
772
|
+
reset?(): void;
|
|
768
773
|
}
|
|
769
774
|
/**
|
|
770
775
|
* Mirror of `FormValueControl<TValue>` — a control that edits a single value via
|
|
@@ -813,8 +818,13 @@ declare function resizeEffect(options: {
|
|
|
813
818
|
}): EffectRef;
|
|
814
819
|
|
|
815
820
|
/**
|
|
816
|
-
* Locks
|
|
817
|
-
*
|
|
821
|
+
* Locks page scrolling while `active()` is `true`, and restores the original state when it becomes
|
|
822
|
+
* `false` or the calling context is destroyed.
|
|
823
|
+
*
|
|
824
|
+
* Locks **both** `<body>` and `<html>`: a `body { overflow: hidden }` lock alone does *not* stop the
|
|
825
|
+
* page when `<html>` is the scroller (e.g. a global `overflow-y: scroll`, as Storybook sets), because
|
|
826
|
+
* body-overflow only propagates to the viewport when `<html>`'s overflow is `visible`. The width of
|
|
827
|
+
* the removed scrollbar is added as `padding-right` on `<html>` so the page doesn't shift.
|
|
818
828
|
*
|
|
819
829
|
* Lock ownership is shared across all callers via a single module-level counter, so nested or
|
|
820
830
|
* concurrent overlays compose correctly. Must be called in an injection context.
|
|
@@ -885,6 +895,39 @@ interface ArrowNavigationOptions {
|
|
|
885
895
|
*/
|
|
886
896
|
declare function useArrowNavigation(e: KeyboardEvent, currentElement: HTMLElement, parentElement: HTMLElement | undefined, options?: ArrowNavigationOptions): HTMLElement | null;
|
|
887
897
|
|
|
898
|
+
/**
|
|
899
|
+
* Locale-aware string matching backed by `Intl.Collator`, mirroring Base UI's `useFilter`.
|
|
900
|
+
*
|
|
901
|
+
* The collator defaults to `sensitivity: 'base'`, so matching is both case-insensitive and
|
|
902
|
+
* diacritic-insensitive (`"Äpfel"` matches `"ap"`, `"résumé"` matches `"resume"`). Pass `locale`
|
|
903
|
+
* and/or any `Intl.Collator` options to override.
|
|
904
|
+
*/
|
|
905
|
+
interface UseFilterOptions extends Intl.CollatorOptions {
|
|
906
|
+
/** Locale(s) for the collator. Defaults to the runtime's default locale. */
|
|
907
|
+
locale?: Intl.LocalesArgument;
|
|
908
|
+
}
|
|
909
|
+
/** Predicates returned by {@link useFilter}. An empty `query` always matches. */
|
|
910
|
+
interface FilterPredicates {
|
|
911
|
+
/** Whether `text` contains `query`. */
|
|
912
|
+
contains: (text: string, query: string) => boolean;
|
|
913
|
+
/** Whether `text` starts with `query`. */
|
|
914
|
+
startsWith: (text: string, query: string) => boolean;
|
|
915
|
+
/** Whether `text` ends with `query`. */
|
|
916
|
+
endsWith: (text: string, query: string) => boolean;
|
|
917
|
+
}
|
|
918
|
+
/**
|
|
919
|
+
* Creates locale-aware `contains` / `startsWith` / `endsWith` predicates.
|
|
920
|
+
*
|
|
921
|
+
* Matching uses `Intl.Collator` with `sensitivity: 'base'` and `usage: 'search'` by default, so
|
|
922
|
+
* comparisons ignore case and diacritics. An empty (or whitespace-only) `query` matches everything,
|
|
923
|
+
* which is the natural "no filter applied" state for a combobox.
|
|
924
|
+
*
|
|
925
|
+
* @example
|
|
926
|
+
* const { contains } = useFilter();
|
|
927
|
+
* contains('Äpfel', 'ap'); // true
|
|
928
|
+
*/
|
|
929
|
+
declare function useFilter(options?: UseFilterOptions): FilterPredicates;
|
|
930
|
+
|
|
888
931
|
/**
|
|
889
932
|
* Keeps hover content open while the pointer crosses the gap between a trigger and a popup.
|
|
890
933
|
*/
|
|
@@ -893,6 +936,55 @@ declare function useGraceArea(triggerEl: Signal<HTMLElement | null | undefined>,
|
|
|
893
936
|
onPointerExit: (callback: (value: void) => void) => () => void;
|
|
894
937
|
};
|
|
895
938
|
|
|
939
|
+
/** Options for {@link useListHighlight}. */
|
|
940
|
+
interface UseListHighlightOptions<T> {
|
|
941
|
+
/** All items in DOM order (e.g. a collection provider's `items()`). */
|
|
942
|
+
items: Signal<readonly T[]>;
|
|
943
|
+
/**
|
|
944
|
+
* Whether an item can be highlighted — must return `false` for hidden (filtered-out) and
|
|
945
|
+
* disabled items. Navigation and self-healing both consult this.
|
|
946
|
+
*/
|
|
947
|
+
isNavigable: (item: T) => boolean;
|
|
948
|
+
/** Resolves the item's element id, exposed as {@link ListHighlight.activeId} for `aria-activedescendant`. */
|
|
949
|
+
getId: (item: T) => string | undefined;
|
|
950
|
+
/** Whether navigation wraps at the boundaries. Defaults to `true`. */
|
|
951
|
+
loop?: Signal<boolean>;
|
|
952
|
+
/** Injector to bind the self-healing effect to when not called in an injection context. */
|
|
953
|
+
injector?: Injector;
|
|
954
|
+
}
|
|
955
|
+
/** Highlight-model navigation API returned by {@link useListHighlight}. */
|
|
956
|
+
interface ListHighlight<T> {
|
|
957
|
+
/** The currently highlighted item, or `null`. DOM focus is never moved by this state. */
|
|
958
|
+
readonly highlightedItem: Signal<T | null>;
|
|
959
|
+
/** The highlighted item's element id, or `undefined`. Bind to `aria-activedescendant`. */
|
|
960
|
+
readonly activeId: Signal<string | undefined>;
|
|
961
|
+
/** Highlight the first navigable item. */
|
|
962
|
+
first(): void;
|
|
963
|
+
/** Highlight the last navigable item. */
|
|
964
|
+
last(): void;
|
|
965
|
+
/** Highlight the next navigable item (wraps when `loop`). */
|
|
966
|
+
next(): void;
|
|
967
|
+
/** Highlight the previous navigable item (wraps when `loop`). */
|
|
968
|
+
previous(): void;
|
|
969
|
+
/** Highlight a specific item (ignored if not navigable); pass `null` to clear. */
|
|
970
|
+
set(item: T | null): void;
|
|
971
|
+
/** Clear the highlight. */
|
|
972
|
+
clear(): void;
|
|
973
|
+
}
|
|
974
|
+
/**
|
|
975
|
+
* Highlight-model list navigation over a set of items, decoupled from DOM focus.
|
|
976
|
+
*
|
|
977
|
+
* Unlike roving `tabindex`, the highlight is pure state: callers move it with the keyboard while DOM
|
|
978
|
+
* focus stays on a single controlling element (e.g. a combobox `<input>`), which exposes
|
|
979
|
+
* {@link ListHighlight.activeId} as `aria-activedescendant`. Navigation only ever lands on items for
|
|
980
|
+
* which `isNavigable` returns `true`, so hidden (filtered-out) and disabled items are skipped. A
|
|
981
|
+
* self-healing effect clears the highlight if its item stops being navigable or leaves the list, so
|
|
982
|
+
* `activeId` never references a detached or hidden element.
|
|
983
|
+
*
|
|
984
|
+
* Must be called in an injection context, or given an `injector`.
|
|
985
|
+
*/
|
|
986
|
+
declare function useListHighlight<T>(options: UseListHighlightOptions<T>): ListHighlight<T>;
|
|
987
|
+
|
|
896
988
|
interface RdxPointerDragHandlers {
|
|
897
989
|
/** Whether a press may begin a drag (e.g. enabled, not on an opt-out element, at a scroll edge). */
|
|
898
990
|
canStart: (event: PointerEvent) => boolean;
|
|
@@ -1008,5 +1100,5 @@ declare enum RdxPositionAlign {
|
|
|
1008
1100
|
End = "end"
|
|
1009
1101
|
}
|
|
1010
1102
|
|
|
1011
|
-
export { A, ALT, ARROW_DOWN, ARROW_LEFT, ARROW_RIGHT, ARROW_UP, ASTERISK, BACKSPACE, CAPS_LOCK, CONTROL, CTRL, DELETE, END, ENTER, ESCAPE, F1, F10, F11, F12, F2, F3, F4, F5, F6, F7, F8, F9, HOME, META, P, PAGE_DOWN, PAGE_UP, RdxControlValueAccessor, RdxIdGenerator, RdxLiveAnnouncer, RdxPositionAlign, RdxPositionSide, SHIFT, SPACE, SPACE_CODE, TAB, a, areAllDaysBetweenValid, clamp, createContent, createContext, createFormatter, createMonth, createMonths, elementSize, getActiveElement, getDaysBetween, getDaysInMonth, getDefaultDate, getDefaultTime, getLastFirstDayOfWeek, getMaxTransitionDuration, getNextLastDayOfWeek, getOptsByGranularity, getPlaceholder, getSegmentElements, getWeekNumber, handleAndDispatchCustomEvent, handleCalendarInitialFocus, hasTime, initializeSegmentValues, injectControlValueAccessor, injectDocument, injectId, isAcceptableSegmentKey, isAfter, isAfterOrSame, isBefore, isBeforeOrSame, isBetween, isBetweenInclusive, isCalendarDateTime, isEqual, isNullish, isNumberString, isSegmentNavigationKey, isZonedDateTime, j, k, n, normalizeDateStep, normalizeHour12, normalizeHourCycle, p, provideToken, provideValueAccessor, resizeEffect, roundToStepPrecision, segmentBuilders, snapValueToStep, syncSegmentValues, syncTimeSegmentValues, toDate, useArrowNavigation, useDateField, useGraceArea, usePointerDrag, useScrollLock, useTransitionStatus, watch };
|
|
1012
|
-
export type { AcceptableValue, AnyExceptLiteral, AriaLivePoliteness, BooleanInput, CreateMonthProps, DataOrientation, DateAndTimeSegmentObj, DateFormatterOptions, DateMatcher, DateRange, DateSegmentObj, DateSegmentPart, DateStep, DayPeriod, Direction, EditableSegmentPart, Formatter, Granularity, HourCycle, InjectContext, Month, NonEditableSegmentPart, Nullable, NumberInput, PlaceholderMap, RdxFormCheckboxControl, RdxFormStateInput, RdxFormUiControl, RdxFormValueControl, RdxPointerDragHandlers, RdxTransitionStatus, RdxTransitionStatusRef, RdxValidationError, SafeFunction, SegmentContentObj, SegmentPart, SegmentValueObj, TimeGranularity, TimeSegmentObj, TimeSegmentPart, TimeValue, UseDateFieldProps };
|
|
1103
|
+
export { A, ALT, ARROW_DOWN, ARROW_LEFT, ARROW_RIGHT, ARROW_UP, ASTERISK, BACKSPACE, CAPS_LOCK, CONTROL, CTRL, DELETE, END, ENTER, ESCAPE, F1, F10, F11, F12, F2, F3, F4, F5, F6, F7, F8, F9, HOME, META, P, PAGE_DOWN, PAGE_UP, RdxControlValueAccessor, RdxIdGenerator, RdxLiveAnnouncer, RdxPositionAlign, RdxPositionSide, SHIFT, SPACE, SPACE_CODE, TAB, TIME_GRANULARITIES, a, areAllDaysBetweenValid, clamp, createContent, createContext, createFormatter, createMonth, createMonths, elementSize, getActiveElement, getDaysBetween, getDaysInMonth, getDefaultDate, getDefaultTime, getLastFirstDayOfWeek, getMaxTransitionDuration, getNextLastDayOfWeek, getOptsByGranularity, getPlaceholder, getSegmentElements, getWeekNumber, handleAndDispatchCustomEvent, handleCalendarInitialFocus, hasTime, initializeSegmentValues, injectControlValueAccessor, injectDocument, injectId, isAcceptableSegmentKey, isAfter, isAfterOrSame, isBefore, isBeforeOrSame, isBetween, isBetweenInclusive, isCalendarDateTime, isEqual, isItemEqualToValue, isNullish, isNumberString, isSegmentNavigationKey, isZonedDateTime, itemToStringLabel, itemToStringValue, j, k, n, normalizeDateStep, normalizeHour12, normalizeHourCycle, p, provideToken, provideValueAccessor, resizeEffect, roundToStepPrecision, segmentBuilders, snapValueToStep, syncSegmentValues, syncTimeSegmentValues, toDate, useArrowNavigation, useDateField, useFilter, useGraceArea, useListHighlight, usePointerDrag, useScrollLock, useTransitionStatus, watch };
|
|
1104
|
+
export type { AcceptableValue, AnyExceptLiteral, AriaLivePoliteness, BooleanInput, CreateMonthProps, DataOrientation, DateAndTimeSegmentObj, DateFormatterOptions, DateMatcher, DateRange, DateSegmentObj, DateSegmentPart, DateStep, DayPeriod, Direction, EditableSegmentPart, FilterPredicates, Formatter, Granularity, HourCycle, InjectContext, ItemValueComparator, ListHighlight, Month, NonEditableSegmentPart, Nullable, NumberInput, PlaceholderMap, RdxFormCheckboxControl, RdxFormStateInput, RdxFormUiControl, RdxFormValueControl, RdxPointerDragHandlers, RdxTransitionStatus, RdxTransitionStatusRef, RdxValidationError, SafeFunction, SegmentContentObj, SegmentPart, SegmentValueObj, TimeGranularity, TimeSegmentObj, TimeSegmentPart, TimeValue, UseDateFieldProps, UseFilterOptions, UseListHighlightOptions };
|
|
@@ -1,20 +1,40 @@
|
|
|
1
1
|
import * as _angular_core from '@angular/core';
|
|
2
2
|
import { InjectionToken, Provider, Signal, ElementRef } from '@angular/core';
|
|
3
|
-
import * as i1 from '@radix-ng/primitives/
|
|
3
|
+
import * as i1 from '@radix-ng/primitives/portal';
|
|
4
|
+
import { RdxPortalContainer } from '@radix-ng/primitives/portal';
|
|
4
5
|
import * as _radix_ng_primitives_core from '@radix-ng/primitives/core';
|
|
5
6
|
import { RdxTransitionStatus, BooleanInput } from '@radix-ng/primitives/core';
|
|
6
7
|
import * as _radix_ng_primitives_dialog from '@radix-ng/primitives/dialog';
|
|
7
|
-
import * as i1$1 from '@radix-ng/primitives/
|
|
8
|
-
import { RdxPortalContainer } from '@radix-ng/primitives/portal';
|
|
9
|
-
import * as i1$2 from '@radix-ng/primitives/dismissable-layer';
|
|
8
|
+
import * as i1$1 from '@radix-ng/primitives/dismissable-layer';
|
|
10
9
|
import * as i2 from '@radix-ng/primitives/focus-scope';
|
|
11
10
|
|
|
12
11
|
/**
|
|
13
|
-
*
|
|
12
|
+
* Structural directive that teleports the dialog content (backdrop + popup) into a container (default
|
|
13
|
+
* `document.body`) while the dialog is open, and keeps it mounted until the CSS exit `@keyframes` on
|
|
14
|
+
* every root element finish.
|
|
15
|
+
*
|
|
16
|
+
* Dialog has two root nodes (backdrop + popup), so use the explicit `<ng-template rdxDialogPortal>`
|
|
17
|
+
* form. Pass `[container]` to portal into a different element.
|
|
18
|
+
*/
|
|
19
|
+
declare class RdxDialogPortal {
|
|
20
|
+
/**
|
|
21
|
+
* Optional container to portal the content into. Defaults to `document.body`. Declared here (and
|
|
22
|
+
* forwarded to the composed {@link RdxPortalPresence}) so that the drawer and alert-dialog portals
|
|
23
|
+
* can re-expose it through their own `hostDirectives`.
|
|
24
|
+
*/
|
|
25
|
+
readonly container: _angular_core.InputSignal<RdxPortalContainer | undefined>;
|
|
26
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdxDialogPortal, never>;
|
|
27
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxDialogPortal, "ng-template[rdxDialogPortal]", ["rdxDialogPortal"], { "container": { "alias": "container"; "required": false; "isSignal": true; }; }, {}, never, never, true, [{ directive: typeof i1.RdxPortalPresence; inputs: { "container": "container"; }; outputs: {}; }]>;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Dev-mode guard: `rdxDialogPortal` used to be an attribute directive on a `<div>`. It is now
|
|
31
|
+
* structural, so the old `<div rdxDialogPortal>` markup would silently stop portaling — fail loudly
|
|
32
|
+
* instead.
|
|
14
33
|
*/
|
|
15
|
-
declare class
|
|
16
|
-
|
|
17
|
-
static
|
|
34
|
+
declare class RdxDialogPortalMisuseGuard {
|
|
35
|
+
constructor();
|
|
36
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdxDialogPortalMisuseGuard, never>;
|
|
37
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxDialogPortalMisuseGuard, "[rdxDialogPortal]:not(ng-template)", never, {}, {}, never, never, true, never>;
|
|
18
38
|
}
|
|
19
39
|
|
|
20
40
|
/**
|
|
@@ -210,19 +230,6 @@ declare class RdxDialogTrigger {
|
|
|
210
230
|
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxDialogTrigger, "button[rdxDialogTrigger]", ["rdxDialogTrigger"], { "handle": { "alias": "handle"; "required": false; "isSignal": true; }; "payload": { "alias": "payload"; "required": false; "isSignal": true; }; "id": { "alias": "id"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
211
231
|
}
|
|
212
232
|
|
|
213
|
-
/**
|
|
214
|
-
* Moves the dialog to a different part of the DOM.
|
|
215
|
-
*/
|
|
216
|
-
declare class RdxDialogPortal {
|
|
217
|
-
protected readonly rootContext: _radix_ng_primitives_dialog.RdxDialogRootContext;
|
|
218
|
-
/**
|
|
219
|
-
* Optional container to portal the content into. Defaults to `document.body`.
|
|
220
|
-
*/
|
|
221
|
-
readonly container: _angular_core.InputSignal<RdxPortalContainer | undefined>;
|
|
222
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdxDialogPortal, never>;
|
|
223
|
-
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxDialogPortal, "[rdxDialogPortal]", ["rdxDialogPortal"], { "container": { "alias": "container"; "required": false; "isSignal": true; }; }, {}, never, never, true, [{ directive: typeof i1$1.RdxPortal; inputs: { "container": "container"; }; outputs: {}; }]>;
|
|
224
|
-
}
|
|
225
|
-
|
|
226
233
|
/**
|
|
227
234
|
* An overlay displayed beneath the dialog popup.
|
|
228
235
|
*/
|
|
@@ -279,7 +286,7 @@ declare class RdxDialogPopup {
|
|
|
279
286
|
constructor();
|
|
280
287
|
private isEventOnTrigger;
|
|
281
288
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdxDialogPopup, never>;
|
|
282
|
-
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxDialogPopup, "[rdxDialogPopup]", ["rdxDialogPopup"], {}, { "escapeKeyDown": "escapeKeyDown"; "pointerDownOutside": "pointerDownOutside"; "focusOutside": "focusOutside"; "interactOutside": "interactOutside"; "openAutoFocus": "openAutoFocus"; "closeAutoFocus": "closeAutoFocus"; }, never, never, true, [{ directive: typeof i1$
|
|
289
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxDialogPopup, "[rdxDialogPopup]", ["rdxDialogPopup"], {}, { "escapeKeyDown": "escapeKeyDown"; "pointerDownOutside": "pointerDownOutside"; "focusOutside": "focusOutside"; "interactOutside": "interactOutside"; "openAutoFocus": "openAutoFocus"; "closeAutoFocus": "closeAutoFocus"; }, never, never, true, [{ directive: typeof i1$1.RdxDismissableLayer; inputs: {}; outputs: {}; }, { directive: typeof i2.RdxFocusScope; inputs: {}; outputs: {}; }]>;
|
|
283
290
|
}
|
|
284
291
|
|
|
285
292
|
/**
|
|
@@ -313,12 +320,12 @@ declare class RdxDialogClose {
|
|
|
313
320
|
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdxDialogClose, "button[rdxDialogClose]", ["rdxDialogClose"], {}, {}, never, never, true, never>;
|
|
314
321
|
}
|
|
315
322
|
|
|
316
|
-
declare const dialogImports: (typeof
|
|
323
|
+
declare const dialogImports: (typeof RdxDialogPortalMisuseGuard)[];
|
|
317
324
|
declare class RdxDialogModule {
|
|
318
325
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdxDialogModule, never>;
|
|
319
|
-
static ɵmod: _angular_core.ɵɵNgModuleDeclaration<RdxDialogModule, never, [typeof RdxDialogRoot, typeof RdxDialogTrigger, typeof
|
|
326
|
+
static ɵmod: _angular_core.ɵɵNgModuleDeclaration<RdxDialogModule, never, [typeof RdxDialogRoot, typeof RdxDialogTrigger, typeof RdxDialogPortal, typeof RdxDialogPortalMisuseGuard, typeof RdxDialogBackdrop, typeof RdxDialogViewport, typeof RdxDialogPopup, typeof RdxDialogTitle, typeof RdxDialogDescription, typeof RdxDialogClose], [typeof RdxDialogRoot, typeof RdxDialogTrigger, typeof RdxDialogPortal, typeof RdxDialogPortalMisuseGuard, typeof RdxDialogBackdrop, typeof RdxDialogViewport, typeof RdxDialogPopup, typeof RdxDialogTitle, typeof RdxDialogDescription, typeof RdxDialogClose]>;
|
|
320
327
|
static ɵinj: _angular_core.ɵɵInjectorDeclaration<RdxDialogModule>;
|
|
321
328
|
}
|
|
322
329
|
|
|
323
|
-
export { RDX_DIALOG_VARIANT, RdxDialogBackdrop, RdxDialogClose, RdxDialogDescription, RdxDialogHandle, RdxDialogModule, RdxDialogPopup, RdxDialogPortal,
|
|
330
|
+
export { RDX_DIALOG_VARIANT, RdxDialogBackdrop, RdxDialogClose, RdxDialogDescription, RdxDialogHandle, RdxDialogModule, RdxDialogPopup, RdxDialogPortal, RdxDialogPortalMisuseGuard, RdxDialogRoot, RdxDialogTitle, RdxDialogTrigger, RdxDialogViewport, createRdxDialogHandle, dialogImports, injectRdxDialogRootContext, provideRdxDialogRootContext, provideRdxDialogVariant };
|
|
324
331
|
export type { RdxDialogModal, RdxDialogOpenChange, RdxDialogOpenChangeReason, RdxDialogRole, RdxDialogRootContext, RdxDialogVariant };
|
|
@@ -13,6 +13,8 @@ interface RdxDrawerRegistration {
|
|
|
13
13
|
id: string;
|
|
14
14
|
/** The drawer popup's measured size (px) along its dismiss axis. */
|
|
15
15
|
height: Signal<number>;
|
|
16
|
+
/** 0..1 live dismiss progress of this drawer. */
|
|
17
|
+
swipeProgress: Signal<number>;
|
|
16
18
|
}
|
|
17
19
|
/**
|
|
18
20
|
* App-level coordinator that tracks every open drawer so background content can react to them
|
|
@@ -30,6 +32,8 @@ declare class RdxDrawerProvider {
|
|
|
30
32
|
readonly frontmost: Signal<RdxDrawerRegistration | null>;
|
|
31
33
|
/** The frontmost drawer's measured size (px), or `0` when none is open. */
|
|
32
34
|
readonly frontmostHeight: Signal<number>;
|
|
35
|
+
/** The frontmost drawer's live dismiss progress, or `0` when none is open. */
|
|
36
|
+
readonly swipeProgress: Signal<number>;
|
|
33
37
|
/** Register an open drawer; returns a disposer that removes it. */
|
|
34
38
|
register(registration: RdxDrawerRegistration): () => void;
|
|
35
39
|
static ɵfac: i0.ɵɵFactoryDeclaration<RdxDrawerProvider, never>;
|
|
@@ -62,6 +66,10 @@ type RdxDrawerRelease = {
|
|
|
62
66
|
interface RdxDrawerSwipeConfig {
|
|
63
67
|
/** The popup element the gesture lives on (CSS variables + data attributes are written here). */
|
|
64
68
|
element: () => HTMLElement;
|
|
69
|
+
/** Gesture boundary used to discover scrollable ancestors around the popup. */
|
|
70
|
+
boundary?: () => HTMLElement;
|
|
71
|
+
/** Visible size along the dismiss axis, used to normalize live swipe progress. */
|
|
72
|
+
size?: () => number;
|
|
65
73
|
/** Active swipe direction. */
|
|
66
74
|
direction: Signal<RdxDrawerSwipeDirection>;
|
|
67
75
|
/** Whether the gesture is currently armed (typically `open`). */
|
|
@@ -109,8 +117,8 @@ declare function useDrawerSwipe(config: RdxDrawerSwipeConfig): void;
|
|
|
109
117
|
* - a string — `'148px'` (pixels), `'30rem'` (root-em), `'40%'` (fraction of size), or a bare number
|
|
110
118
|
* as above.
|
|
111
119
|
*
|
|
112
|
-
* Order the `snapPoints` array ascending by openness; the
|
|
113
|
-
*
|
|
120
|
+
* Order the `snapPoints` array ascending by openness; the first entry is the default the drawer opens
|
|
121
|
+
* to when `defaultSnapPoint` is not set.
|
|
114
122
|
*/
|
|
115
123
|
type RdxDrawerSnapPoint = number | string;
|
|
116
124
|
/**
|
|
@@ -166,6 +174,12 @@ interface RdxDrawerRootContext {
|
|
|
166
174
|
swipeProgress: Signal<number>;
|
|
167
175
|
/** Reports gesture progress from the popup's swipe engine. */
|
|
168
176
|
setSwipeProgress: (value: number) => void;
|
|
177
|
+
/** Whether the drawer is currently being revealed from a SwipeArea. */
|
|
178
|
+
openingSwipeActive: Signal<boolean>;
|
|
179
|
+
/** Pointer travel (px) inward from the SwipeArea while revealing the drawer. */
|
|
180
|
+
openingSwipeDistance: Signal<number>;
|
|
181
|
+
/** Starts or updates the SwipeArea reveal gesture. */
|
|
182
|
+
setOpeningSwipe: (active: boolean, distance: number) => void;
|
|
169
183
|
/** Configured snap points (empty when the drawer has none). */
|
|
170
184
|
snapPoints: Signal<readonly RdxDrawerSnapPoint[]>;
|
|
171
185
|
/** Whether the drawer rests at discrete snap points. */
|
|
@@ -208,12 +222,12 @@ declare class RdxDrawerRoot {
|
|
|
208
222
|
readonly swipeDirection: i0.InputSignal<RdxDrawerSwipeDirection>;
|
|
209
223
|
/**
|
|
210
224
|
* Resting positions the drawer snaps to along the dismiss axis. Order ascending by openness; the
|
|
211
|
-
*
|
|
225
|
+
* first entry is the default the drawer opens to. Omit for a plain open/closed drawer.
|
|
212
226
|
*/
|
|
213
227
|
readonly snapPoints: i0.InputSignal<readonly RdxDrawerSnapPoint[] | undefined>;
|
|
214
228
|
/** The active snap point (controlled / uncontrolled with `[(snapPoint)]`). */
|
|
215
229
|
readonly snapPoint: i0.ModelSignal<RdxDrawerSnapPoint | null>;
|
|
216
|
-
/** The snap point the drawer opens to when uncontrolled; defaults to the
|
|
230
|
+
/** The snap point the drawer opens to when uncontrolled; defaults to the first point. */
|
|
217
231
|
readonly defaultSnapPoint: i0.InputSignal<RdxDrawerSnapPoint | undefined>;
|
|
218
232
|
/** Step at most one snap point per release instead of letting velocity skip points. */
|
|
219
233
|
readonly snapToSequentialPoints: i0.InputSignalWithTransform<boolean, BooleanInput>;
|
|
@@ -221,6 +235,9 @@ declare class RdxDrawerRoot {
|
|
|
221
235
|
readonly onSnapPointChange: i0.OutputEmitterRef<RdxDrawerSnapPoint>;
|
|
222
236
|
/** 0..1 progress of the active dismiss gesture, written by the popup's swipe engine. */
|
|
223
237
|
readonly swipeProgress: i0.WritableSignal<number>;
|
|
238
|
+
/** Live SwipeArea reveal state; the popup converts distance into its measured-axis movement. */
|
|
239
|
+
readonly openingSwipeActive: i0.WritableSignal<boolean>;
|
|
240
|
+
readonly openingSwipeDistance: i0.WritableSignal<number>;
|
|
224
241
|
readonly normalizedSnapPoints: Signal<readonly RdxDrawerSnapPoint[]>;
|
|
225
242
|
readonly hasSnapPoints: Signal<boolean>;
|
|
226
243
|
/** Whether a drawer nested inside this one is open (reuses the dialog's nesting detection). */
|
|
@@ -252,41 +269,47 @@ declare class RdxDrawerTrigger {
|
|
|
252
269
|
/**
|
|
253
270
|
* An off-canvas region (typically pinned to a screen edge) that opens the drawer when swiped inward.
|
|
254
271
|
*
|
|
255
|
-
*
|
|
256
|
-
*
|
|
257
|
-
* pointer-drag lifecycle so capture/cancel handling stays consistent with the popup gesture.
|
|
272
|
+
* Opens the drawer at the start of a drag so its popup can follow the pointer live. Releasing past
|
|
273
|
+
* the threshold settles open; releasing before it or cancelling animates the drawer back out.
|
|
258
274
|
*/
|
|
259
275
|
declare class RdxDrawerSwipeArea {
|
|
260
276
|
private readonly drawerContext;
|
|
261
277
|
private readonly dialogContext;
|
|
262
|
-
/** Direction the
|
|
278
|
+
/** Direction the opening gesture travels; defaults to the opposite of the root's dismiss direction. */
|
|
263
279
|
readonly swipeDirection: i0.InputSignal<RdxDrawerSwipeDirection | undefined>;
|
|
264
280
|
/** Whether the swipe area should ignore user interaction. */
|
|
265
281
|
readonly disabled: i0.InputSignalWithTransform<boolean, BooleanInput>;
|
|
266
282
|
protected readonly isOpen: i0.Signal<boolean>;
|
|
267
283
|
protected readonly direction: i0.Signal<RdxDrawerSwipeDirection>;
|
|
284
|
+
protected readonly resolvedTouchAction: i0.Signal<"pan-y" | "pan-x">;
|
|
268
285
|
protected readonly swiping: i0.WritableSignal<boolean>;
|
|
269
286
|
private startX;
|
|
270
287
|
private startY;
|
|
288
|
+
private distance;
|
|
271
289
|
constructor();
|
|
272
290
|
static ɵfac: i0.ɵɵFactoryDeclaration<RdxDrawerSwipeArea, never>;
|
|
273
291
|
static ɵdir: i0.ɵɵDirectiveDeclaration<RdxDrawerSwipeArea, "[rdxDrawerSwipeArea]", ["rdxDrawerSwipeArea"], { "swipeDirection": { "alias": "swipeDirection"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
274
292
|
}
|
|
275
293
|
|
|
276
294
|
/**
|
|
277
|
-
*
|
|
295
|
+
* Structural directive that teleports the drawer content (backdrop + popup) into a container (default
|
|
296
|
+
* `document.body`) while the drawer is open, keeping it mounted until its CSS exit `@keyframes`
|
|
297
|
+
* finish. It composes the structural {@link RdxDialogPortal}, inheriting the dialog presence context.
|
|
298
|
+
*
|
|
299
|
+
* Use the explicit `<ng-template rdxDrawerPortal>` form; pass `[container]` for a custom target.
|
|
278
300
|
*/
|
|
279
|
-
declare class
|
|
280
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<
|
|
281
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<
|
|
301
|
+
declare class RdxDrawerPortal {
|
|
302
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<RdxDrawerPortal, never>;
|
|
303
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<RdxDrawerPortal, "ng-template[rdxDrawerPortal]", ["rdxDrawerPortal"], {}, {}, never, never, true, [{ directive: typeof i1.RdxDialogPortal; inputs: { "container": "container"; }; outputs: {}; }]>;
|
|
282
304
|
}
|
|
283
|
-
|
|
284
305
|
/**
|
|
285
|
-
*
|
|
306
|
+
* Dev-mode guard: `rdxDrawerPortal` is now structural, so the old `<div rdxDrawerPortal>` markup would
|
|
307
|
+
* silently stop portaling — fail loudly instead.
|
|
286
308
|
*/
|
|
287
|
-
declare class
|
|
288
|
-
|
|
289
|
-
static
|
|
309
|
+
declare class RdxDrawerPortalMisuseGuard {
|
|
310
|
+
constructor();
|
|
311
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<RdxDrawerPortalMisuseGuard, never>;
|
|
312
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<RdxDrawerPortalMisuseGuard, "[rdxDrawerPortal]:not(ng-template)", never, {}, {}, never, never, true, never>;
|
|
290
313
|
}
|
|
291
314
|
|
|
292
315
|
/**
|
|
@@ -336,6 +359,9 @@ declare class RdxDrawerPopup {
|
|
|
336
359
|
protected readonly frontmostHeightPx: i0.Signal<string | null>;
|
|
337
360
|
constructor();
|
|
338
361
|
private axisSize;
|
|
362
|
+
private axisElementSize;
|
|
363
|
+
private swipeBoundary;
|
|
364
|
+
private visibleAxisSize;
|
|
339
365
|
private resolveRelease;
|
|
340
366
|
static ɵfac: i0.ɵɵFactoryDeclaration<RdxDrawerPopup, never>;
|
|
341
367
|
static ɵdir: i0.ɵɵDirectiveDeclaration<RdxDrawerPopup, "[rdxDrawerPopup]", ["rdxDrawerPopup"], {}, {}, never, never, true, [{ directive: typeof i1.RdxDialogPopup; inputs: {}; outputs: { "escapeKeyDown": "escapeKeyDown"; "pointerDownOutside": "pointerDownOutside"; "focusOutside": "focusOutside"; "interactOutside": "interactOutside"; "openAutoFocus": "openAutoFocus"; "closeAutoFocus": "closeAutoFocus"; }; }]>;
|
|
@@ -384,6 +410,7 @@ declare class RdxDrawerClose {
|
|
|
384
410
|
* Reads the nearest {@link RdxDrawerProvider} and exposes styling hooks; the visual transform is
|
|
385
411
|
* consumer CSS (headless):
|
|
386
412
|
* - `[data-active]` — present while at least one drawer is open.
|
|
413
|
+
* - `--drawer-swipe-progress` — 0..1 live dismiss progress of the frontmost drawer.
|
|
387
414
|
* - `--nested-drawers` — the number of open drawers.
|
|
388
415
|
* - `--drawer-frontmost-height` — the frontmost drawer's measured size, in pixels.
|
|
389
416
|
*/
|
|
@@ -396,9 +423,9 @@ declare class RdxDrawerIndent {
|
|
|
396
423
|
/**
|
|
397
424
|
* The page background layer that scales/indents while any drawer is open.
|
|
398
425
|
*
|
|
399
|
-
* Behaves like {@link RdxDrawerIndent} (same `[data-active]` / `--
|
|
400
|
-
* `--drawer-frontmost-height` contract); kept as a distinct part so the page
|
|
401
|
-
* indented content can be styled independently, mirroring Base UI.
|
|
426
|
+
* Behaves like {@link RdxDrawerIndent} (same `[data-active]` / `--drawer-swipe-progress` /
|
|
427
|
+
* `--nested-drawers` / `--drawer-frontmost-height` contract); kept as a distinct part so the page
|
|
428
|
+
* backdrop and the indented content can be styled independently, mirroring Base UI.
|
|
402
429
|
*/
|
|
403
430
|
declare class RdxDrawerIndentBackground {
|
|
404
431
|
protected readonly provider: RdxDrawerProvider | null;
|
|
@@ -418,9 +445,9 @@ declare function createRdxDrawerHandle<Payload = unknown>(): RdxDrawerHandle<Pay
|
|
|
418
445
|
declare const drawerImports: (typeof RdxDrawerProviderDirective)[];
|
|
419
446
|
declare class RdxDrawerModule {
|
|
420
447
|
static ɵfac: i0.ɵɵFactoryDeclaration<RdxDrawerModule, never>;
|
|
421
|
-
static ɵmod: i0.ɵɵNgModuleDeclaration<RdxDrawerModule, never, [typeof RdxDrawerProviderDirective, typeof RdxDrawerRoot, typeof RdxDrawerTrigger, typeof RdxDrawerSwipeArea, typeof
|
|
448
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<RdxDrawerModule, never, [typeof RdxDrawerProviderDirective, typeof RdxDrawerRoot, typeof RdxDrawerTrigger, typeof RdxDrawerSwipeArea, typeof RdxDrawerPortal, typeof RdxDrawerPortalMisuseGuard, typeof RdxDrawerBackdrop, typeof RdxDrawerViewport, typeof RdxDrawerPopup, typeof RdxDrawerContent, typeof RdxDrawerTitle, typeof RdxDrawerDescription, typeof RdxDrawerClose, typeof RdxDrawerIndent, typeof RdxDrawerIndentBackground], [typeof RdxDrawerProviderDirective, typeof RdxDrawerRoot, typeof RdxDrawerTrigger, typeof RdxDrawerSwipeArea, typeof RdxDrawerPortal, typeof RdxDrawerPortalMisuseGuard, typeof RdxDrawerBackdrop, typeof RdxDrawerViewport, typeof RdxDrawerPopup, typeof RdxDrawerContent, typeof RdxDrawerTitle, typeof RdxDrawerDescription, typeof RdxDrawerClose, typeof RdxDrawerIndent, typeof RdxDrawerIndentBackground]>;
|
|
422
449
|
static ɵinj: i0.ɵɵInjectorDeclaration<RdxDrawerModule>;
|
|
423
450
|
}
|
|
424
451
|
|
|
425
|
-
export { RdxDrawerBackdrop, RdxDrawerClose, RdxDrawerContent, RdxDrawerDescription, RdxDrawerHandle, RdxDrawerIndent, RdxDrawerIndentBackground, RdxDrawerModule, RdxDrawerPopup, RdxDrawerPortal,
|
|
452
|
+
export { RdxDrawerBackdrop, RdxDrawerClose, RdxDrawerContent, RdxDrawerDescription, RdxDrawerHandle, RdxDrawerIndent, RdxDrawerIndentBackground, RdxDrawerModule, RdxDrawerPopup, RdxDrawerPortal, RdxDrawerPortalMisuseGuard, RdxDrawerProvider, RdxDrawerProviderDirective, RdxDrawerRoot, RdxDrawerSwipeArea, RdxDrawerTitle, RdxDrawerTrigger, RdxDrawerViewport, buildSnapEntries, createRdxDrawerHandle, dismissUnitVector, drawerImports, injectRdxDrawerRootContext, provideRdxDrawerProvider, provideRdxDrawerRootContext, resolveSnapTarget, snapPointReveal, useDrawerSwipe };
|
|
426
453
|
export type { RdxDrawerRegistration, RdxDrawerRelease, RdxDrawerRootContext, RdxDrawerSnapEntry, RdxDrawerSnapPoint, RdxDrawerSnapResolveOptions, RdxDrawerSnapTarget, RdxDrawerSwipeConfig, RdxDrawerSwipeDirection };
|