forty-cdk 0.0.2 → 0.0.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.
@@ -277,7 +277,7 @@ declare class ForAccordion implements ForAccordionContext {
277
277
  * ArrowUp/Down to prev/next; `'horizontal'` maps ArrowLeft/Right (with RTL
278
278
  * swap when `dir='rtl'`).
279
279
  */
280
- readonly orientation: _angular_core.InputSignal<"horizontal" | "vertical">;
280
+ readonly orientation: _angular_core.InputSignal<"vertical" | "horizontal">;
281
281
  /**
282
282
  * Writing direction. Only relevant when `orientation='horizontal'`. When
283
283
  * unset (default `null`), the inherited ambient direction is resolved from
@@ -1477,7 +1477,7 @@ declare class ForRadioGroup extends FormUiControlBase implements FormValueContro
1477
1477
  /** Two-way bindable. Selected radio's value. Empty string = none selected. */
1478
1478
  readonly value: _angular_core.ModelSignal<string>;
1479
1479
  /** Layout direction for keyboard navigation. */
1480
- readonly orientation: _angular_core.InputSignal<"horizontal" | "vertical">;
1480
+ readonly orientation: _angular_core.InputSignal<"vertical" | "horizontal">;
1481
1481
  /**
1482
1482
  * Reading direction for horizontal orientation. When unset (default
1483
1483
  * `null`), the inherited ambient direction is resolved from the nearest
@@ -1769,7 +1769,7 @@ declare class ForTabs implements ForTabsContext {
1769
1769
  */
1770
1770
  readonly value: _angular_core.ModelSignal<string | null>;
1771
1771
  readonly activationMode: _angular_core.InputSignal<TabsActivationMode>;
1772
- readonly orientation: _angular_core.InputSignal<"horizontal" | "vertical">;
1772
+ readonly orientation: _angular_core.InputSignal<"vertical" | "horizontal">;
1773
1773
  /**
1774
1774
  * Writing direction. When unset (default `null`), the inherited ambient
1775
1775
  * direction is resolved from the nearest ancestor carrying a `dir` attribute
@@ -2084,7 +2084,7 @@ declare class ForListbox<T = string> extends FormUiControlBase implements FormVa
2084
2084
  * `null` (default) or empty value emits no attribute.
2085
2085
  */
2086
2086
  readonly ariaLabel: _angular_core.InputSignal<string | null>;
2087
- readonly orientation: _angular_core.InputSignal<"horizontal" | "vertical">;
2087
+ readonly orientation: _angular_core.InputSignal<"vertical" | "horizontal">;
2088
2088
  /**
2089
2089
  * When true (default), arrow navigation wraps at the ends — moving past the
2090
2090
  * last option focuses the first and vice versa. Set `false` to stop at the
@@ -2322,6 +2322,7 @@ interface ForTooltipContext {
2322
2322
  readonly arrowPadding: Signal<number>;
2323
2323
  readonly sticky: Signal<'partial' | 'always' | false>;
2324
2324
  readonly hideWhenDetached: Signal<boolean>;
2325
+ readonly clipUntilPositioned: Signal<boolean>;
2325
2326
  /** Trigger element id — a consumer-set host `id` is adopted, else a generated one. */
2326
2327
  readonly triggerId: Signal<string>;
2327
2328
  /** Content element id — a consumer-set host `id` is adopted, else a generated one. Referenced by the trigger's `aria-describedby` while open. */
@@ -2433,6 +2434,14 @@ declare class ForTooltip implements ForTooltipContext {
2433
2434
  * off all clipping ancestors.
2434
2435
  */
2435
2436
  readonly hideWhenDetached: _angular_core.InputSignalWithTransform<boolean, unknown>;
2437
+ /**
2438
+ * When `true` (default), the content is clipped until floating-ui resolves
2439
+ * its first position, preventing a flash at the viewport corner. Set to
2440
+ * `false` so a dramatic `animate.enter` plays from its first frame (the
2441
+ * surface may flash briefly at the unresolved position while positioning
2442
+ * computes).
2443
+ */
2444
+ readonly clipUntilPositioned: _angular_core.InputSignalWithTransform<boolean, unknown>;
2436
2445
  /**
2437
2446
  * Per-tooltip override for the open delay (ms). When `undefined`
2438
2447
  * (default), falls back to `ForTooltipDefaults.openDelay` from the
@@ -2474,7 +2483,7 @@ declare class ForTooltip implements ForTooltipContext {
2474
2483
  scheduleClose(reason: TooltipScheduleReason): void;
2475
2484
  cancelPending(): void;
2476
2485
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ForTooltip, never>;
2477
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForTooltip, "[forTooltip]", ["forTooltip"], { "open": { "alias": "open"; "required": false; "isSignal": true; }; "_sideInput": { "alias": "side"; "required": false; "isSignal": true; }; "_alignInput": { "alias": "align"; "required": false; "isSignal": true; }; "_sideOffsetInput": { "alias": "sideOffset"; "required": false; "isSignal": true; }; "alignOffset": { "alias": "alignOffset"; "required": false; "isSignal": true; }; "avoidCollisions": { "alias": "avoidCollisions"; "required": false; "isSignal": true; }; "_collisionPaddingInput": { "alias": "collisionPadding"; "required": false; "isSignal": true; }; "arrowPadding": { "alias": "arrowPadding"; "required": false; "isSignal": true; }; "sticky": { "alias": "sticky"; "required": false; "isSignal": true; }; "hideWhenDetached": { "alias": "hideWhenDetached"; "required": false; "isSignal": true; }; "openDelay": { "alias": "openDelay"; "required": false; "isSignal": true; }; "closeDelay": { "alias": "closeDelay"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, { "open": "openChange"; }, never, never, true, never>;
2486
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForTooltip, "[forTooltip]", ["forTooltip"], { "open": { "alias": "open"; "required": false; "isSignal": true; }; "_sideInput": { "alias": "side"; "required": false; "isSignal": true; }; "_alignInput": { "alias": "align"; "required": false; "isSignal": true; }; "_sideOffsetInput": { "alias": "sideOffset"; "required": false; "isSignal": true; }; "alignOffset": { "alias": "alignOffset"; "required": false; "isSignal": true; }; "avoidCollisions": { "alias": "avoidCollisions"; "required": false; "isSignal": true; }; "_collisionPaddingInput": { "alias": "collisionPadding"; "required": false; "isSignal": true; }; "arrowPadding": { "alias": "arrowPadding"; "required": false; "isSignal": true; }; "sticky": { "alias": "sticky"; "required": false; "isSignal": true; }; "hideWhenDetached": { "alias": "hideWhenDetached"; "required": false; "isSignal": true; }; "clipUntilPositioned": { "alias": "clipUntilPositioned"; "required": false; "isSignal": true; }; "openDelay": { "alias": "openDelay"; "required": false; "isSignal": true; }; "closeDelay": { "alias": "closeDelay"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, { "open": "openChange"; }, never, never, true, never>;
2478
2487
  }
2479
2488
 
2480
2489
  /**
@@ -2635,6 +2644,12 @@ interface ForDialogContext {
2635
2644
  readonly alert: Signal<boolean>;
2636
2645
  readonly labelledBy: Signal<string | null>;
2637
2646
  readonly describedBy: Signal<string | null>;
2647
+ /**
2648
+ * Portal target shared with the backdrop so both resolve the same
2649
+ * container. `null` ⇒ `document.body`. Set via the dialog's `container`
2650
+ * input; read once per mount.
2651
+ */
2652
+ readonly container: Signal<HTMLElement | null>;
2638
2653
  registerLabel(id: string): void;
2639
2654
  unregisterLabel(id: string): void;
2640
2655
  registerDescription(id: string): void;
@@ -2670,7 +2685,7 @@ declare const FOR_DIALOG_CONTEXT: InjectionToken<ForDialogContext>;
2670
2685
  *
2671
2686
  * ```html
2672
2687
  * @if (dialogOpen()) {
2673
- * <div forDialog (close)="dialogOpen.set(false)" animate.leave="fade-out">
2688
+ * <div forDialog (dismiss)="dialogOpen.set(false)" animate.leave="fade-out">
2674
2689
  * <h2 forDialogTitle>Confirm</h2>
2675
2690
  * <button forDialogClose>Cancel</button>
2676
2691
  * </div>
@@ -2693,7 +2708,7 @@ declare class ForDialog implements ForDialogContext {
2693
2708
  #private;
2694
2709
  /**
2695
2710
  * When true (default), Escape, backdrop click, pointer-down outside, and
2696
- * focus outside emit `(close)`. Disable for critical confirm flows that
2711
+ * focus outside emit `(dismiss)`. Disable for critical confirm flows that
2697
2712
  * must be answered explicitly via `[forDialogClose]`.
2698
2713
  */
2699
2714
  readonly dismissible: _angular_core.InputSignalWithTransform<boolean, unknown>;
@@ -2714,39 +2729,46 @@ declare class ForDialog implements ForDialogContext {
2714
2729
  readonly initialFocus: _angular_core.InputSignal<"first" | "container">;
2715
2730
  /** Manual `aria-label`. Use this when no visible title element exists. */
2716
2731
  readonly ariaLabel: _angular_core.InputSignal<string | null>;
2732
+ /**
2733
+ * Portal target for the dialog surface. Defaults to `document.body`. Pair
2734
+ * with `[modal]="false"` for a dialog scoped to a positioned region
2735
+ * instead of the viewport. Read once at mount. The backdrop portals to the
2736
+ * same container.
2737
+ */
2738
+ readonly container: _angular_core.InputSignal<HTMLElement | null>;
2717
2739
  /**
2718
2740
  * Emitted when the dialog wants to close. Consumers wire this to flip
2719
2741
  * the signal that gates the surrounding `@if`. Reasons: `'escape'`,
2720
2742
  * `'backdrop'`, `'pointerDownOutside'`, `'focusOutside'`,
2721
2743
  * `'closeButton'`, `'programmatic'`.
2722
2744
  */
2723
- readonly close: _angular_core.OutputEmitterRef<ForDialogCloseReason>;
2745
+ readonly dismiss: _angular_core.OutputEmitterRef<ForDialogCloseReason>;
2724
2746
  /**
2725
2747
  * Fires when the user presses Escape while this dialog is the topmost
2726
2748
  * dismissable layer. Call `preventDefault()` on the emitted veto to
2727
- * suppress the subsequent `(close)` emission (e.g. to ask for
2749
+ * suppress the subsequent `(dismiss)` emission (e.g. to ask for
2728
2750
  * confirmation first). The original `KeyboardEvent` is available on
2729
2751
  * `.event` for inspection.
2730
2752
  */
2731
2753
  readonly escapeKeyDown: _angular_core.OutputEmitterRef<VetoableNativeEvent<KeyboardEvent>>;
2732
2754
  /**
2733
2755
  * Fires when a pointer goes down outside the dialog. Call
2734
- * `preventDefault()` on the emitted veto to suppress the auto `(close)`.
2756
+ * `preventDefault()` on the emitted veto to suppress the auto `(dismiss)`.
2735
2757
  * The native `PointerEvent` is available on `.event`.
2736
2758
  */
2737
2759
  readonly pointerDownOutside: _angular_core.OutputEmitterRef<VetoableNativeEvent<PointerEvent>>;
2738
2760
  /**
2739
2761
  * Fires when focus moves outside the dialog (e.g. user tabs out of a
2740
2762
  * non-modal dialog). `preventDefault()` on the veto suppresses the auto
2741
- * `(close)`. The native `FocusEvent` is available on `.event`.
2763
+ * `(dismiss)`. The native `FocusEvent` is available on `.event`.
2742
2764
  */
2743
2765
  readonly focusOutside: _angular_core.OutputEmitterRef<VetoableNativeEvent<FocusEvent>>;
2744
2766
  /**
2745
2767
  * Composite event: fires alongside `pointerDownOutside` and
2746
2768
  * `focusOutside` and shares their veto state — `preventDefault()` on
2747
- * either one suppresses the auto `(close)`.
2769
+ * either one suppresses the auto `(dismiss)`.
2748
2770
  */
2749
- readonly interactOutside: _angular_core.OutputEmitterRef<VetoableNativeEvent<FocusEvent | PointerEvent>>;
2771
+ readonly interactOutside: _angular_core.OutputEmitterRef<VetoableNativeEvent<PointerEvent | FocusEvent>>;
2750
2772
  /**
2751
2773
  * Callback invoked just before the dialog moves focus into itself on
2752
2774
  * mount. Receives a `VetoableEvent`; call `event.preventDefault()` to
@@ -2770,7 +2792,7 @@ declare class ForDialog implements ForDialogContext {
2770
2792
  *
2771
2793
  * Bound as a function reference (`[autoFocusOnClose]="onClose"`), not
2772
2794
  * as an event binding. Fires reliably on both close paths: the
2773
- * `(close)` output flow AND a direct `open.set(false)` from the
2795
+ * `(dismiss)` output flow AND a direct `open.set(false)` from the
2774
2796
  * consumer. Symmetric with `ForDialogManager`'s
2775
2797
  * `config.autoFocusOnClose`.
2776
2798
  */
@@ -2784,7 +2806,7 @@ declare class ForDialog implements ForDialogContext {
2784
2806
  unregisterDescription(id: string): void;
2785
2807
  requestClose(reason: ForDialogCloseReason, value?: unknown): void;
2786
2808
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ForDialog, never>;
2787
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForDialog, "[forDialog]", ["forDialog"], { "dismissible": { "alias": "dismissible"; "required": false; "isSignal": true; }; "modal": { "alias": "modal"; "required": false; "isSignal": true; }; "alert": { "alias": "alert"; "required": false; "isSignal": true; }; "returnFocus": { "alias": "returnFocus"; "required": false; "isSignal": true; }; "initialFocus": { "alias": "initialFocus"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "autoFocusOnOpen": { "alias": "autoFocusOnOpen"; "required": false; "isSignal": true; }; "autoFocusOnClose": { "alias": "autoFocusOnClose"; "required": false; "isSignal": true; }; }, { "close": "close"; "escapeKeyDown": "escapeKeyDown"; "pointerDownOutside": "pointerDownOutside"; "focusOutside": "focusOutside"; "interactOutside": "interactOutside"; }, never, never, true, never>;
2809
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForDialog, "[forDialog]", ["forDialog"], { "dismissible": { "alias": "dismissible"; "required": false; "isSignal": true; }; "modal": { "alias": "modal"; "required": false; "isSignal": true; }; "alert": { "alias": "alert"; "required": false; "isSignal": true; }; "returnFocus": { "alias": "returnFocus"; "required": false; "isSignal": true; }; "initialFocus": { "alias": "initialFocus"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "container": { "alias": "container"; "required": false; "isSignal": true; }; "autoFocusOnOpen": { "alias": "autoFocusOnOpen"; "required": false; "isSignal": true; }; "autoFocusOnClose": { "alias": "autoFocusOnClose"; "required": false; "isSignal": true; }; }, { "dismiss": "dismiss"; "escapeKeyDown": "escapeKeyDown"; "pointerDownOutside": "pointerDownOutside"; "focusOutside": "focusOutside"; "interactOutside": "interactOutside"; }, never, never, true, never>;
2788
2810
  }
2789
2811
 
2790
2812
  /**
@@ -2801,7 +2823,7 @@ declare class ForDialog implements ForDialogContext {
2801
2823
  * ```html
2802
2824
  * <button forDialogTrigger [(open)]="dialogOpen" controls="my-dialog">Open</button>
2803
2825
  * @if (dialogOpen()) {
2804
- * <div forDialog id="my-dialog" (close)="dialogOpen.set(false)">…</div>
2826
+ * <div forDialog id="my-dialog" (dismiss)="dialogOpen.set(false)">…</div>
2805
2827
  * }
2806
2828
  * ```
2807
2829
  */
@@ -2879,16 +2901,24 @@ declare class ForDialogClose {
2879
2901
  }
2880
2902
 
2881
2903
  /**
2882
- * Optional backdrop overlay. Portaled to `document.body` so it sits
2883
- * underneath the dialog regardless of where it's declared. While mounted
2884
- * the backdrop is visible; mount/unmount it alongside the dialog with
2885
- * the same `@if` so `animate.enter` / `animate.leave` works on both.
2904
+ * Optional backdrop overlay. Portaled to the dialog's `container` (the same
2905
+ * target the surface uses) `document.body` by default. While mounted the
2906
+ * backdrop is visible; mount/unmount it alongside the dialog with the same
2907
+ * `@if` so `animate.enter` / `animate.leave` works on both.
2886
2908
  *
2887
2909
  * The directive applies no visual styles — set `position: fixed; inset: 0;
2888
- * background: rgba(0,0,0,0.5)` (or whatever) yourself.
2910
+ * background: rgba(0,0,0,0.5)` (or whatever) yourself. For a backdrop inside a
2911
+ * scoped `container`, use `position: absolute` so it is bounded to that box.
2889
2912
  */
2890
2913
  declare class ForDialogBackdrop {
2891
2914
  protected readonly ctx: forty_cdk.ForDialogContext;
2915
+ /**
2916
+ * Per-instance dialog id when opened through `ForDialogManager` (reflected
2917
+ * as `data-for-dialog-id` so the manager can pair this portaled backdrop
2918
+ * with its dialog and drive its exit animation). `null` in the declarative
2919
+ * path, where the host binding emits no attribute.
2920
+ */
2921
+ protected readonly instanceId: string | null;
2892
2922
  constructor();
2893
2923
  protected onClick(event: MouseEvent): void;
2894
2924
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ForDialogBackdrop, never>;
@@ -2951,6 +2981,12 @@ interface ForDialogOpenConfig<D = unknown> {
2951
2981
  initialFocus?: 'first' | 'container';
2952
2982
  /** Manual `aria-label`. Use when no visible title element is rendered. */
2953
2983
  ariaLabel?: string;
2984
+ /**
2985
+ * Portal target for the surface + backdrop. Defaults to `document.body`.
2986
+ * Pair with `modal: false` for a dialog scoped to a positioned region
2987
+ * instead of the viewport.
2988
+ */
2989
+ container?: HTMLElement | null;
2954
2990
  /**
2955
2991
  * CSS class applied (via `animate.enter`) to the overlay root the moment it
2956
2992
  * mounts, so a programmatic dialog plays an enter animation just like a
@@ -2969,6 +3005,22 @@ interface ForDialogOpenConfig<D = unknown> {
2969
3005
  * back to `provideForDialogDefaults({ animateLeave })`.
2970
3006
  */
2971
3007
  animateLeave?: string;
3008
+ /**
3009
+ * Exit-animation class for the portaled `[forDialogBackdrop]`: the manager
3010
+ * adds it when `close()` is called and keeps the backdrop mounted until the
3011
+ * animation finishes, so the backdrop fades out in lockstep with the host.
3012
+ *
3013
+ * The split with the enter animation is intentional, not an oversight.
3014
+ * Declare the backdrop's **enter** with `animate.enter="…"` on the element
3015
+ * itself — it fires on mount, which Angular runs normally even inside the
3016
+ * manager's `ngComponentOutlet` — and declare only its **leave** here. A
3017
+ * template `animate.leave` on the backdrop never fires under the manager:
3018
+ * Angular does not run leave animations across the `ngComponentOutlet` the
3019
+ * opened component is mounted through. (The host box is symmetric — both
3020
+ * `animateEnter` and `animateLeave` are config, since the manager owns that
3021
+ * element.) Falls back to `provideForDialogDefaults({ backdropAnimateLeave })`.
3022
+ */
3023
+ backdropAnimateLeave?: string;
2972
3024
  /**
2973
3025
  * Consumer CSS class(es) applied to the overlay root (the `[forDialog]`
2974
3026
  * host). Pass a single class (`'my-dialog'`) or a space-separated string
@@ -3080,6 +3132,15 @@ interface ForDialogDefaults {
3080
3132
  * an exit transition plays before teardown. No default (close is immediate).
3081
3133
  */
3082
3134
  animateLeave?: string;
3135
+ /**
3136
+ * CSS class applied to the portaled `[forDialogBackdrop]` when `close()` is
3137
+ * called, so the backdrop plays an exit animation in lockstep with the
3138
+ * host. Needed because a backdrop declared inside the opened component plays
3139
+ * its `animate.enter` on mount but cannot run its template `animate.leave` —
3140
+ * Angular does not process leave animations across the `ngComponentOutlet`
3141
+ * boundary the manager mounts the component through. No default.
3142
+ */
3143
+ backdropAnimateLeave?: string;
3083
3144
  }
3084
3145
  /** Token holding the resolved dialog defaults for the current scope. */
3085
3146
  declare const FOR_DIALOG_DEFAULTS: _angular_core.InjectionToken<ForDialogDefaults>;
@@ -3114,7 +3175,7 @@ type ForDrawerSide = 'top' | 'right' | 'bottom' | 'left';
3114
3175
  */
3115
3176
  type ForDrawerSnapPoint = number | `${number}%` | `${number}px`;
3116
3177
  /**
3117
- * Reasons emitted via the `(close)` output. A single drawer instance can
3178
+ * Reasons emitted via the `(dismiss)` output. A single drawer instance can
3118
3179
  * cycle through any of these — the consumer typically just flips its
3119
3180
  * `@if`-gating signal off, but may choose to skip the unmount on specific
3120
3181
  * reasons (e.g. ignore `'pointerDownOutside'` for a sticky drawer).
@@ -3160,6 +3221,12 @@ interface ForDrawerContext {
3160
3221
  readonly dragProgress: Signal<number>;
3161
3222
  readonly labelledBy: Signal<string | null>;
3162
3223
  readonly describedBy: Signal<string | null>;
3224
+ /**
3225
+ * Portal target shared with the backdrop so both resolve the same
3226
+ * container. `null` ⇒ `document.body`. Set via the drawer's `container`
3227
+ * input; read once per mount.
3228
+ */
3229
+ readonly container: Signal<HTMLElement | null>;
3163
3230
  /**
3164
3231
  * Host element of the drawer surface. Exposed so a nested child can
3165
3232
  * register its parent topology with `ForDrawerStack` without piercing
@@ -3202,7 +3269,7 @@ interface ForDrawerContext {
3202
3269
  }
3203
3270
  declare const FOR_DRAWER_CONTEXT: InjectionToken<ForDrawerContext>;
3204
3271
  /**
3205
- * Drag/release event payloads. Surfaced through `(drag)` / `(release)`
3272
+ * Drag/release event payloads. Surfaced through `(dragMove)` / `(release)`
3206
3273
  * so consumers can drive bespoke visualizations (e.g. a separate "scaled
3207
3274
  * background" effect, a debug HUD); the directive itself owns transform
3208
3275
  * application and snap resolution.
@@ -3248,7 +3315,7 @@ declare class ForDrawer implements ForDrawerContext {
3248
3315
  readonly side: _angular_core.InputSignal<ForDrawerSide>;
3249
3316
  /**
3250
3317
  * When true (default), Escape, backdrop click, pointer-down outside,
3251
- * focus outside, and a swipe past the close threshold all emit `(close)`.
3318
+ * focus outside, and a swipe past the close threshold all emit `(dismiss)`.
3252
3319
  * Disable for confirm flows that must be answered explicitly.
3253
3320
  */
3254
3321
  readonly dismissible: _angular_core.InputSignalWithTransform<boolean, unknown>;
@@ -3270,6 +3337,14 @@ declare class ForDrawer implements ForDrawerContext {
3270
3337
  readonly initialFocus: _angular_core.InputSignal<"first" | "container">;
3271
3338
  /** Manual `aria-label`. Use this when no visible title element exists. */
3272
3339
  readonly ariaLabel: _angular_core.InputSignal<string | null>;
3340
+ /**
3341
+ * Portal target for the surface. Defaults to `document.body`. Pass a
3342
+ * positioned (`position: relative`) container — paired with
3343
+ * `[modal]="false"` — for a drawer scoped to a region instead of the
3344
+ * viewport. Read once at mount (the portal moves the host once); changing
3345
+ * it after open has no effect. The backdrop portals to the same container.
3346
+ */
3347
+ readonly container: _angular_core.InputSignal<HTMLElement | null>;
3273
3348
  /**
3274
3349
  * Callback invoked just before focus moves into the drawer on mount.
3275
3350
  * `event.preventDefault()` skips the imperative move (Tab cycling and
@@ -3286,9 +3361,12 @@ declare class ForDrawer implements ForDrawerContext {
3286
3361
  /** When true (default), swipe toward the anchored edge dismisses past `closeThreshold`. */
3287
3362
  readonly swipeToDismiss: _angular_core.InputSignalWithTransform<boolean, unknown>;
3288
3363
  /**
3289
- * Fraction of the drawer's dimension along the dismissal axis past which
3290
- * a release dismisses instead of snapping back. Vaul-aligned default
3291
- * `0.25` (i.e. dragged > 25% of the surface size).
3364
+ * Fraction past which a release dismisses instead of snapping back.
3365
+ * Vaul-aligned default `0.25`. Without `snapPoints` it is a fraction of the
3366
+ * full drawer dimension along the dismissal axis (dragged > 25% of the
3367
+ * surface size toward the edge dismisses); with `snapPoints` it is a
3368
+ * fraction of the **lowest snap's** extent, so a small "peek" snap stays
3369
+ * dismissable without dragging it entirely off-screen.
3292
3370
  */
3293
3371
  readonly closeThreshold: _angular_core.InputSignal<number>;
3294
3372
  /**
@@ -3316,8 +3394,8 @@ declare class ForDrawer implements ForDrawerContext {
3316
3394
  * Snap points (Vaul semantics): each entry is a `number ∈ [0, 1]`,
3317
3395
  * a `'NN%'` string, or a `'NNpx'` string. Strictly increasing
3318
3396
  * (closest-to-edge first). The surface settles at the nearest snap on
3319
- * release; dragging past the lowest snap by `closeThreshold * dimension`
3320
- * dismisses.
3397
+ * release; dragging past the lowest snap by `closeThreshold` of that
3398
+ * snap's own extent dismisses.
3321
3399
  */
3322
3400
  readonly snapPoints: _angular_core.InputSignal<readonly ForDrawerSnapPoint[] | undefined>;
3323
3401
  /**
@@ -3339,21 +3417,21 @@ declare class ForDrawer implements ForDrawerContext {
3339
3417
  * Emitted when the drawer wants to close. Consumer wires this to flip
3340
3418
  * the signal that gates the surrounding `@if`.
3341
3419
  */
3342
- readonly close: _angular_core.OutputEmitterRef<ForDrawerCloseReason>;
3343
- /** Vetoable Escape. `preventDefault()` suppresses the auto `(close)`. */
3420
+ readonly dismiss: _angular_core.OutputEmitterRef<ForDrawerCloseReason>;
3421
+ /** Vetoable Escape. `preventDefault()` suppresses the auto `(dismiss)`. */
3344
3422
  readonly escapeKeyDown: _angular_core.OutputEmitterRef<VetoableNativeEvent<KeyboardEvent>>;
3345
- /** Vetoable pointer-down outside. `preventDefault()` suppresses the auto `(close)`. */
3423
+ /** Vetoable pointer-down outside. `preventDefault()` suppresses the auto `(dismiss)`. */
3346
3424
  readonly pointerDownOutside: _angular_core.OutputEmitterRef<VetoableNativeEvent<PointerEvent>>;
3347
- /** Vetoable focus-outside. `preventDefault()` suppresses the auto `(close)`. */
3425
+ /** Vetoable focus-outside. `preventDefault()` suppresses the auto `(dismiss)`. */
3348
3426
  readonly focusOutside: _angular_core.OutputEmitterRef<VetoableNativeEvent<FocusEvent>>;
3349
3427
  /**
3350
3428
  * Composite event: fires alongside `pointerDownOutside` and `focusOutside`
3351
3429
  * and shares their veto state — `preventDefault()` on either suppresses
3352
- * the auto `(close)`.
3430
+ * the auto `(dismiss)`.
3353
3431
  */
3354
- readonly interactOutside: _angular_core.OutputEmitterRef<VetoableNativeEvent<FocusEvent | PointerEvent>>;
3432
+ readonly interactOutside: _angular_core.OutputEmitterRef<VetoableNativeEvent<PointerEvent | FocusEvent>>;
3355
3433
  /** Drag stream. `percentageDragged` ∈ `[0, 1]`. */
3356
- readonly drag: _angular_core.OutputEmitterRef<ForDrawerDragEvent>;
3434
+ readonly dragMove: _angular_core.OutputEmitterRef<ForDrawerDragEvent>;
3357
3435
  /** Release event. The directive has already updated `activeSnapPoint` / requested close. */
3358
3436
  readonly release: _angular_core.OutputEmitterRef<ForDrawerReleaseEvent>;
3359
3437
  readonly labelledBy: _angular_core.Signal<string | null>;
@@ -3415,7 +3493,7 @@ declare class ForDrawer implements ForDrawerContext {
3415
3493
  registerBackdrop(el: HTMLElement | null): void;
3416
3494
  requestClose(reason: ForDrawerCloseReason, value?: unknown): void;
3417
3495
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ForDrawer, never>;
3418
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForDrawer, "[forDrawer]", ["forDrawer"], { "side": { "alias": "side"; "required": false; "isSignal": true; }; "dismissible": { "alias": "dismissible"; "required": false; "isSignal": true; }; "modal": { "alias": "modal"; "required": false; "isSignal": true; }; "alert": { "alias": "alert"; "required": false; "isSignal": true; }; "returnFocus": { "alias": "returnFocus"; "required": false; "isSignal": true; }; "initialFocus": { "alias": "initialFocus"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "autoFocusOnOpen": { "alias": "autoFocusOnOpen"; "required": false; "isSignal": true; }; "autoFocusOnClose": { "alias": "autoFocusOnClose"; "required": false; "isSignal": true; }; "swipeToDismiss": { "alias": "swipeToDismiss"; "required": false; "isSignal": true; }; "closeThreshold": { "alias": "closeThreshold"; "required": false; "isSignal": true; }; "handleOnly": { "alias": "handleOnly"; "required": false; "isSignal": true; }; "scaleBackground": { "alias": "scaleBackground"; "required": false; "isSignal": true; }; "setBackgroundColorOnScale": { "alias": "setBackgroundColorOnScale"; "required": false; "isSignal": true; }; "snapPoints": { "alias": "snapPoints"; "required": false; "isSignal": true; }; "activeSnapPoint": { "alias": "activeSnapPoint"; "required": false; "isSignal": true; }; "fadeFromIndex": { "alias": "fadeFromIndex"; "required": false; "isSignal": true; }; }, { "activeSnapPoint": "activeSnapPointChange"; "close": "close"; "escapeKeyDown": "escapeKeyDown"; "pointerDownOutside": "pointerDownOutside"; "focusOutside": "focusOutside"; "interactOutside": "interactOutside"; "drag": "drag"; "release": "release"; }, never, never, true, never>;
3496
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForDrawer, "[forDrawer]", ["forDrawer"], { "side": { "alias": "side"; "required": false; "isSignal": true; }; "dismissible": { "alias": "dismissible"; "required": false; "isSignal": true; }; "modal": { "alias": "modal"; "required": false; "isSignal": true; }; "alert": { "alias": "alert"; "required": false; "isSignal": true; }; "returnFocus": { "alias": "returnFocus"; "required": false; "isSignal": true; }; "initialFocus": { "alias": "initialFocus"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "container": { "alias": "container"; "required": false; "isSignal": true; }; "autoFocusOnOpen": { "alias": "autoFocusOnOpen"; "required": false; "isSignal": true; }; "autoFocusOnClose": { "alias": "autoFocusOnClose"; "required": false; "isSignal": true; }; "swipeToDismiss": { "alias": "swipeToDismiss"; "required": false; "isSignal": true; }; "closeThreshold": { "alias": "closeThreshold"; "required": false; "isSignal": true; }; "handleOnly": { "alias": "handleOnly"; "required": false; "isSignal": true; }; "scaleBackground": { "alias": "scaleBackground"; "required": false; "isSignal": true; }; "setBackgroundColorOnScale": { "alias": "setBackgroundColorOnScale"; "required": false; "isSignal": true; }; "snapPoints": { "alias": "snapPoints"; "required": false; "isSignal": true; }; "activeSnapPoint": { "alias": "activeSnapPoint"; "required": false; "isSignal": true; }; "fadeFromIndex": { "alias": "fadeFromIndex"; "required": false; "isSignal": true; }; }, { "activeSnapPoint": "activeSnapPointChange"; "dismiss": "dismiss"; "escapeKeyDown": "escapeKeyDown"; "pointerDownOutside": "pointerDownOutside"; "focusOutside": "focusOutside"; "interactOutside": "interactOutside"; "dragMove": "dragMove"; "release": "release"; }, never, never, true, never>;
3419
3497
  }
3420
3498
 
3421
3499
  /**
@@ -3431,7 +3509,7 @@ declare class ForDrawer implements ForDrawerContext {
3431
3509
  * ```html
3432
3510
  * <button forDrawerTrigger [(open)]="drawerOpen" controls="my-drawer">Open</button>
3433
3511
  * @if (drawerOpen()) {
3434
- * <div forDrawer id="my-drawer" (close)="drawerOpen.set(false)">…</div>
3512
+ * <div forDrawer id="my-drawer" (dismiss)="drawerOpen.set(false)">…</div>
3435
3513
  * }
3436
3514
  * ```
3437
3515
  */
@@ -3494,6 +3572,13 @@ declare class ForDrawerTrigger {
3494
3572
  declare class ForDrawerBackdrop {
3495
3573
  #private;
3496
3574
  protected readonly ctx: forty_cdk.ForDrawerContext;
3575
+ /**
3576
+ * Per-instance drawer id when opened through `ForDrawerManager` (reflected
3577
+ * as `data-for-drawer-id` so the manager can pair this portaled backdrop
3578
+ * with its drawer and drive its exit animation). `null` in the declarative
3579
+ * path, where the host binding emits no attribute.
3580
+ */
3581
+ protected readonly instanceId: string | null;
3497
3582
  constructor();
3498
3583
  protected onClick(event: MouseEvent): void;
3499
3584
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ForDrawerBackdrop, never>;
@@ -3638,6 +3723,12 @@ interface ForDrawerOpenConfig<D = unknown> {
3638
3723
  initialFocus?: 'first' | 'container';
3639
3724
  /** Manual `aria-label`. Use when no visible title element is rendered. */
3640
3725
  ariaLabel?: string;
3726
+ /**
3727
+ * Portal target for the surface + backdrop. Defaults to `document.body`.
3728
+ * Pair with `modal: false` for a drawer scoped to a positioned region
3729
+ * instead of the viewport.
3730
+ */
3731
+ container?: HTMLElement | null;
3641
3732
  /**
3642
3733
  * CSS class applied (via `animate.enter`) to the overlay root the moment it
3643
3734
  * mounts, so a programmatic drawer plays an enter animation just like a
@@ -3656,6 +3747,22 @@ interface ForDrawerOpenConfig<D = unknown> {
3656
3747
  * back to `provideForDrawerDefaults({ animateLeave })`.
3657
3748
  */
3658
3749
  animateLeave?: string;
3750
+ /**
3751
+ * Exit-animation class for the portaled `[forDrawerBackdrop]`: the manager
3752
+ * adds it when `close()` is called and keeps the backdrop mounted until the
3753
+ * animation finishes, so the backdrop fades out in lockstep with the host.
3754
+ *
3755
+ * The split with the enter animation is intentional, not an oversight.
3756
+ * Declare the backdrop's **enter** with `animate.enter="…"` on the element
3757
+ * itself — it fires on mount, which Angular runs normally even inside the
3758
+ * manager's `ngComponentOutlet` — and declare only its **leave** here. A
3759
+ * template `animate.leave` on the backdrop never fires under the manager:
3760
+ * Angular does not run leave animations across the `ngComponentOutlet` the
3761
+ * opened component is mounted through. (The host sheet is symmetric — both
3762
+ * `animateEnter` and `animateLeave` are config, since the manager owns that
3763
+ * element.) Falls back to `provideForDrawerDefaults({ backdropAnimateLeave })`.
3764
+ */
3765
+ backdropAnimateLeave?: string;
3659
3766
  /** When true (default), pointer drag past `closeThreshold` dismisses. */
3660
3767
  swipeToDismiss?: boolean;
3661
3768
  /** Vaul-style fraction of dimension past which a release dismisses. Default `0.25`. */
@@ -3743,7 +3850,7 @@ interface ForDrawerOpenConfig<D = unknown> {
3743
3850
  */
3744
3851
  interactOutside?: (event: VetoableNativeEvent<PointerEvent | FocusEvent>) => void;
3745
3852
  /**
3746
- * Mirrors the declarative `(drag)` output: invoked on every pointer-move
3853
+ * Mirrors the declarative `(dragMove)` output: invoked on every pointer-move
3747
3854
  * frame of a swipe gesture with `percentageDragged` ∈ `[0, 1]`. Lets a
3748
3855
  * programmatic consumer drive bespoke drag visualizations the way the
3749
3856
  * directive consumer can.
@@ -3804,9 +3911,10 @@ interface ForDrawerDefaults {
3804
3911
  /** Default `true`. Pointer drag gesture toward the anchored edge dismisses. */
3805
3912
  swipeToDismiss?: boolean;
3806
3913
  /**
3807
- * Default `0.25`. Fraction of the drawer's dimension along the dismissal
3808
- * axis past which a release dismisses instead of snapping back. Vaul
3809
- * semantics (see `_internal/swipe-dismiss/resolveSnapTarget`).
3914
+ * Default `0.25`. Fraction past which a release dismisses instead of
3915
+ * snapping back: of the full dimension without snap points, of the lowest
3916
+ * snap's extent with them. Vaul semantics (see
3917
+ * `_internal/swipe-dismiss/resolveSnapTarget`).
3810
3918
  */
3811
3919
  closeThreshold?: number;
3812
3920
  /** Default `'first'`. Where to send focus on mount. */
@@ -3871,6 +3979,15 @@ interface ForDrawerDefaults {
3871
3979
  * an exit transition plays before teardown. No default (close is immediate).
3872
3980
  */
3873
3981
  animateLeave?: string;
3982
+ /**
3983
+ * CSS class applied to the portaled `[forDrawerBackdrop]` when `close()` is
3984
+ * called, so the backdrop plays an exit animation in lockstep with the
3985
+ * host. Needed because a backdrop declared inside the opened component plays
3986
+ * its `animate.enter` on mount but cannot run its template `animate.leave` —
3987
+ * Angular does not process leave animations across the `ngComponentOutlet`
3988
+ * boundary the manager mounts the component through. No default.
3989
+ */
3990
+ backdropAnimateLeave?: string;
3874
3991
  }
3875
3992
  /** Token holding the resolved drawer defaults for the current scope. */
3876
3993
  declare const FOR_DRAWER_DEFAULTS: _angular_core.InjectionToken<ForDrawerDefaults>;
@@ -3906,6 +4023,7 @@ interface ForPopoverContext {
3906
4023
  readonly arrowPadding: Signal<number>;
3907
4024
  readonly sticky: Signal<'partial' | 'always' | false>;
3908
4025
  readonly hideWhenDetached: Signal<boolean>;
4026
+ readonly clipUntilPositioned: Signal<boolean>;
3909
4027
  readonly triggerId: Signal<string>;
3910
4028
  readonly contentId: Signal<string>;
3911
4029
  readonly ariaLabel: Signal<string | null>;
@@ -4075,6 +4193,14 @@ declare class ForPopover implements ForPopoverContext {
4075
4193
  * tied to scrolled-away triggers.
4076
4194
  */
4077
4195
  readonly hideWhenDetached: _angular_core.InputSignalWithTransform<boolean, unknown>;
4196
+ /**
4197
+ * When `true` (default), the content is clipped until floating-ui resolves
4198
+ * its first position, preventing a flash at the viewport corner. Set to
4199
+ * `false` so a dramatic `animate.enter` plays from its first frame (the
4200
+ * surface may flash briefly at the unresolved position while positioning
4201
+ * computes).
4202
+ */
4203
+ readonly clipUntilPositioned: _angular_core.InputSignalWithTransform<boolean, unknown>;
4078
4204
  /**
4079
4205
  * When true, trigger interaction is ignored and any open popover stays
4080
4206
  * open until the consumer flips `open` themselves. Disable on the trigger
@@ -4120,7 +4246,7 @@ declare class ForPopover implements ForPopoverContext {
4120
4246
  * `focusOutside` and shares their veto state — `preventDefault()` on
4121
4247
  * either one suppresses the automatic close.
4122
4248
  */
4123
- readonly interactOutside: _angular_core.OutputEmitterRef<VetoableNativeEvent<FocusEvent | PointerEvent>>;
4249
+ readonly interactOutside: _angular_core.OutputEmitterRef<VetoableNativeEvent<PointerEvent | FocusEvent>>;
4124
4250
  /**
4125
4251
  * Fires just before the popover sends focus into itself on mount.
4126
4252
  * Call `preventDefault()` on the veto to skip the imperative focus
@@ -4181,7 +4307,7 @@ declare class ForPopover implements ForPopoverContext {
4181
4307
  emitAutoFocusOnOpen(): boolean;
4182
4308
  emitAutoFocusOnClose(): boolean;
4183
4309
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ForPopover, never>;
4184
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForPopover, "[forPopover]", ["forPopover"], { "open": { "alias": "open"; "required": false; "isSignal": true; }; "_sideInput": { "alias": "side"; "required": false; "isSignal": true; }; "_alignInput": { "alias": "align"; "required": false; "isSignal": true; }; "_sideOffsetInput": { "alias": "sideOffset"; "required": false; "isSignal": true; }; "alignOffset": { "alias": "alignOffset"; "required": false; "isSignal": true; }; "avoidCollisions": { "alias": "avoidCollisions"; "required": false; "isSignal": true; }; "_collisionPaddingInput": { "alias": "collisionPadding"; "required": false; "isSignal": true; }; "arrowPadding": { "alias": "arrowPadding"; "required": false; "isSignal": true; }; "sticky": { "alias": "sticky"; "required": false; "isSignal": true; }; "hideWhenDetached": { "alias": "hideWhenDetached"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "dismissible": { "alias": "dismissible"; "required": false; "isSignal": true; }; "returnFocus": { "alias": "returnFocus"; "required": false; "isSignal": true; }; "initialFocus": { "alias": "initialFocus"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "open": "openChange"; "escapeKeyDown": "escapeKeyDown"; "pointerDownOutside": "pointerDownOutside"; "focusOutside": "focusOutside"; "interactOutside": "interactOutside"; "autoFocusOnOpen": "autoFocusOnOpen"; "autoFocusOnClose": "autoFocusOnClose"; }, never, never, true, never>;
4310
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForPopover, "[forPopover]", ["forPopover"], { "open": { "alias": "open"; "required": false; "isSignal": true; }; "_sideInput": { "alias": "side"; "required": false; "isSignal": true; }; "_alignInput": { "alias": "align"; "required": false; "isSignal": true; }; "_sideOffsetInput": { "alias": "sideOffset"; "required": false; "isSignal": true; }; "alignOffset": { "alias": "alignOffset"; "required": false; "isSignal": true; }; "avoidCollisions": { "alias": "avoidCollisions"; "required": false; "isSignal": true; }; "_collisionPaddingInput": { "alias": "collisionPadding"; "required": false; "isSignal": true; }; "arrowPadding": { "alias": "arrowPadding"; "required": false; "isSignal": true; }; "sticky": { "alias": "sticky"; "required": false; "isSignal": true; }; "hideWhenDetached": { "alias": "hideWhenDetached"; "required": false; "isSignal": true; }; "clipUntilPositioned": { "alias": "clipUntilPositioned"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "dismissible": { "alias": "dismissible"; "required": false; "isSignal": true; }; "returnFocus": { "alias": "returnFocus"; "required": false; "isSignal": true; }; "initialFocus": { "alias": "initialFocus"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "open": "openChange"; "escapeKeyDown": "escapeKeyDown"; "pointerDownOutside": "pointerDownOutside"; "focusOutside": "focusOutside"; "interactOutside": "interactOutside"; "autoFocusOnOpen": "autoFocusOnOpen"; "autoFocusOnClose": "autoFocusOnClose"; }, never, never, true, never>;
4185
4311
  }
4186
4312
 
4187
4313
  /**
@@ -4513,7 +4639,7 @@ declare class ForToggleGroup extends FormUiControlBase implements FormValueContr
4513
4639
  */
4514
4640
  readonly multiple: _angular_core.InputSignalWithTransform<boolean, unknown>;
4515
4641
  /** Layout direction for keyboard navigation. */
4516
- readonly orientation: _angular_core.InputSignal<"horizontal" | "vertical">;
4642
+ readonly orientation: _angular_core.InputSignal<"vertical" | "horizontal">;
4517
4643
  /**
4518
4644
  * Reading direction. RTL swaps ArrowLeft/ArrowRight. When unset (default
4519
4645
  * `null`), the inherited ambient direction is resolved from the nearest
@@ -4728,7 +4854,7 @@ declare class ForMenuContent {
4728
4854
  * A single action inside `[forMenuContent]`. Apply on a `<button>` so
4729
4855
  * Space / Enter activation come from native button semantics.
4730
4856
  *
4731
- * Activation emits `(select)` and then closes the menu. To keep the menu
4857
+ * Activation emits `(activate)` and then closes the menu. To keep the menu
4732
4858
  * open after activation (e.g. the action toggled something the user
4733
4859
  * wants to refine), call `event.preventDefault()` on the emitted event.
4734
4860
  *
@@ -4763,7 +4889,7 @@ declare class ForMenuItem {
4763
4889
  * Fires on click / Enter / Space activation. Call `preventDefault()`
4764
4890
  * on the emitted veto to keep the menu open after activation.
4765
4891
  */
4766
- readonly select: _angular_core.OutputEmitterRef<VetoableEvent>;
4892
+ readonly activate: _angular_core.OutputEmitterRef<VetoableEvent>;
4767
4893
  constructor();
4768
4894
  protected onClick(): void;
4769
4895
  protected onFocus(): void;
@@ -4771,7 +4897,7 @@ declare class ForMenuItem {
4771
4897
  protected onPointerMove(event: PointerEvent): void;
4772
4898
  protected onKeyDown(event: KeyboardEvent): void;
4773
4899
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ForMenuItem, never>;
4774
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForMenuItem, "[forMenuItem]", ["forMenuItem"], { "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "textValue": { "alias": "textValue"; "required": false; "isSignal": true; }; }, { "select": "select"; }, never, never, true, never>;
4900
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForMenuItem, "[forMenuItem]", ["forMenuItem"], { "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "textValue": { "alias": "textValue"; "required": false; "isSignal": true; }; }, { "activate": "activate"; }, never, never, true, never>;
4775
4901
  }
4776
4902
 
4777
4903
  /**
@@ -4785,9 +4911,9 @@ declare class ForMenuItem {
4785
4911
  declare const FOR_MENU_CHECKBOX_ITEM: InjectionToken<ForMenuCheckboxItem>;
4786
4912
  /**
4787
4913
  * Tri-state-free checkbox item. Click and Enter toggle `checked`, emit
4788
- * `(select)`, and close the menu — `event.preventDefault()` on the emitted
4914
+ * `(activate)`, and close the menu — `event.preventDefault()` on the emitted
4789
4915
  * event keeps the menu open. Per APG, **Space** toggles `checked` and
4790
- * emits `(select)` without closing the menu, so users can flip several
4916
+ * emits `(activate)` without closing the menu, so users can flip several
4791
4917
  * options in one open without consumer glue.
4792
4918
  */
4793
4919
  declare class ForMenuCheckboxItem {
@@ -4816,7 +4942,7 @@ declare class ForMenuCheckboxItem {
4816
4942
  * Fires on click / Enter / Space activation. Call `preventDefault()`
4817
4943
  * on the emitted veto to keep the menu open after activation.
4818
4944
  */
4819
- readonly select: _angular_core.OutputEmitterRef<VetoableEvent>;
4945
+ readonly activate: _angular_core.OutputEmitterRef<VetoableEvent>;
4820
4946
  constructor();
4821
4947
  protected onClick(): void;
4822
4948
  protected onFocus(): void;
@@ -4824,7 +4950,7 @@ declare class ForMenuCheckboxItem {
4824
4950
  protected onPointerMove(event: PointerEvent): void;
4825
4951
  protected onKeyDown(event: KeyboardEvent): void;
4826
4952
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ForMenuCheckboxItem, never>;
4827
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForMenuCheckboxItem, "[forMenuCheckboxItem]", ["forMenuCheckboxItem"], { "checked": { "alias": "checked"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "textValue": { "alias": "textValue"; "required": false; "isSignal": true; }; }, { "checked": "checkedChange"; "select": "select"; }, never, never, true, never>;
4953
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForMenuCheckboxItem, "[forMenuCheckboxItem]", ["forMenuCheckboxItem"], { "checked": { "alias": "checked"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "textValue": { "alias": "textValue"; "required": false; "isSignal": true; }; }, { "checked": "checkedChange"; "activate": "activate"; }, never, never, true, never>;
4828
4954
  }
4829
4955
 
4830
4956
  /**
@@ -4867,9 +4993,9 @@ declare class ForMenuRadioGroup implements ForMenuRadioGroupContext {
4867
4993
  declare const FOR_MENU_RADIO_ITEM: InjectionToken<ForMenuRadioItem>;
4868
4994
  /**
4869
4995
  * One radio option inside `[forMenuRadioGroup]`. Click and Enter set the
4870
- * group's `value` to this item's `value`, emit `(select)`, and close the
4996
+ * group's `value` to this item's `value`, emit `(activate)`, and close the
4871
4997
  * menu — call `event.preventDefault()` on the emitted event to keep the
4872
- * menu open. Per APG, **Space** sets the value and emits `(select)`
4998
+ * menu open. Per APG, **Space** sets the value and emits `(activate)`
4873
4999
  * without closing the menu.
4874
5000
  */
4875
5001
  declare class ForMenuRadioItem {
@@ -4900,7 +5026,7 @@ declare class ForMenuRadioItem {
4900
5026
  * Fires on click / Enter / Space activation. Call `preventDefault()`
4901
5027
  * on the emitted veto to keep the menu open after activation.
4902
5028
  */
4903
- readonly select: _angular_core.OutputEmitterRef<VetoableEvent>;
5029
+ readonly activate: _angular_core.OutputEmitterRef<VetoableEvent>;
4904
5030
  constructor();
4905
5031
  protected onClick(): void;
4906
5032
  protected onFocus(): void;
@@ -4908,7 +5034,7 @@ declare class ForMenuRadioItem {
4908
5034
  protected onPointerMove(event: PointerEvent): void;
4909
5035
  protected onKeyDown(event: KeyboardEvent): void;
4910
5036
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ForMenuRadioItem, never>;
4911
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForMenuRadioItem, "[forMenuRadioItem]", ["forMenuRadioItem"], { "value": { "alias": "value"; "required": true; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "textValue": { "alias": "textValue"; "required": false; "isSignal": true; }; }, { "select": "select"; }, never, never, true, never>;
5037
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForMenuRadioItem, "[forMenuRadioItem]", ["forMenuRadioItem"], { "value": { "alias": "value"; "required": true; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "textValue": { "alias": "textValue"; "required": false; "isSignal": true; }; }, { "activate": "activate"; }, never, never, true, never>;
4912
5038
  }
4913
5039
 
4914
5040
  /**
@@ -4960,7 +5086,7 @@ declare class ForMenuSeparator {
4960
5086
  * `horizontal` (default) splits items stacked vertically — the common case
4961
5087
  * in a vertical menu; `vertical` splits items laid out horizontally.
4962
5088
  */
4963
- readonly orientation: _angular_core.InputSignal<"horizontal" | "vertical">;
5089
+ readonly orientation: _angular_core.InputSignal<"vertical" | "horizontal">;
4964
5090
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ForMenuSeparator, never>;
4965
5091
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForMenuSeparator, "[forMenuSeparator]", never, { "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
4966
5092
  }
@@ -5366,6 +5492,7 @@ interface ForMenuContext {
5366
5492
  readonly arrowPadding: Signal<number>;
5367
5493
  readonly sticky: Signal<'partial' | 'always' | false>;
5368
5494
  readonly hideWhenDetached: Signal<boolean>;
5495
+ readonly clipUntilPositioned: Signal<boolean>;
5369
5496
  readonly loop: Signal<boolean>;
5370
5497
  /** Where focus should land after the menu mounts. Set by triggers before flipping `open`. */
5371
5498
  readonly initialFocus: Signal<'first' | 'last'>;
@@ -5589,6 +5716,12 @@ declare class ForMenuSub extends MenuOverlayHost implements ForMenuContext {
5589
5716
  readonly sticky: _angular_core.InputSignal<false | "partial" | "always">;
5590
5717
  /** When `true`, sets `data-detached=""` while the parent item is scrolled off-screen. */
5591
5718
  readonly hideWhenDetached: _angular_core.InputSignalWithTransform<boolean, unknown>;
5719
+ /**
5720
+ * When `true` (default), the menu is clipped until floating-ui resolves
5721
+ * its first position, preventing a flash at the viewport corner. Set to
5722
+ * `false` so a dramatic `animate.enter` plays from its first frame.
5723
+ */
5724
+ readonly clipUntilPositioned: _angular_core.InputSignalWithTransform<boolean, unknown>;
5592
5725
  /**
5593
5726
  * When `true` (default), arrow-key navigation wraps from the last enabled
5594
5727
  * item back to the first (and vice versa). When `false`, navigation stops
@@ -5630,7 +5763,7 @@ declare class ForMenuSub extends MenuOverlayHost implements ForMenuContext {
5630
5763
  * Call `preventDefault()` on the veto to keep the submenu open regardless of
5631
5764
  * which interaction triggered it.
5632
5765
  */
5633
- readonly interactOutside: _angular_core.OutputEmitterRef<VetoableNativeEvent<FocusEvent | PointerEvent>>;
5766
+ readonly interactOutside: _angular_core.OutputEmitterRef<VetoableNativeEvent<PointerEvent | FocusEvent>>;
5634
5767
  /**
5635
5768
  * Fires just before the submenu sends focus to its first / last
5636
5769
  * enabled item on mount. Call `preventDefault()` on the emitted veto
@@ -5674,7 +5807,7 @@ declare class ForMenuSub extends MenuOverlayHost implements ForMenuContext {
5674
5807
  emitAutoFocusOnOpen(): boolean;
5675
5808
  emitAutoFocusOnClose(): boolean;
5676
5809
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ForMenuSub, never>;
5677
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForMenuSub, "[forMenuSub]", ["forMenuSub"], { "open": { "alias": "open"; "required": false; "isSignal": true; }; "_dirInput": { "alias": "dir"; "required": false; "isSignal": true; }; "_sideInput": { "alias": "side"; "required": false; "isSignal": true; }; "sideOffset": { "alias": "sideOffset"; "required": false; "isSignal": true; }; "align": { "alias": "align"; "required": false; "isSignal": true; }; "alignOffset": { "alias": "alignOffset"; "required": false; "isSignal": true; }; "avoidCollisions": { "alias": "avoidCollisions"; "required": false; "isSignal": true; }; "collisionPadding": { "alias": "collisionPadding"; "required": false; "isSignal": true; }; "arrowPadding": { "alias": "arrowPadding"; "required": false; "isSignal": true; }; "sticky": { "alias": "sticky"; "required": false; "isSignal": true; }; "hideWhenDetached": { "alias": "hideWhenDetached"; "required": false; "isSignal": true; }; "loop": { "alias": "loop"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "dismissible": { "alias": "dismissible"; "required": false; "isSignal": true; }; "returnFocus": { "alias": "returnFocus"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "open": "openChange"; "escapeKeyDown": "escapeKeyDown"; "pointerDownOutside": "pointerDownOutside"; "focusOutside": "focusOutside"; "interactOutside": "interactOutside"; "autoFocusOnOpen": "autoFocusOnOpen"; "autoFocusOnClose": "autoFocusOnClose"; }, never, never, true, never>;
5810
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForMenuSub, "[forMenuSub]", ["forMenuSub"], { "open": { "alias": "open"; "required": false; "isSignal": true; }; "_dirInput": { "alias": "dir"; "required": false; "isSignal": true; }; "_sideInput": { "alias": "side"; "required": false; "isSignal": true; }; "sideOffset": { "alias": "sideOffset"; "required": false; "isSignal": true; }; "align": { "alias": "align"; "required": false; "isSignal": true; }; "alignOffset": { "alias": "alignOffset"; "required": false; "isSignal": true; }; "avoidCollisions": { "alias": "avoidCollisions"; "required": false; "isSignal": true; }; "collisionPadding": { "alias": "collisionPadding"; "required": false; "isSignal": true; }; "arrowPadding": { "alias": "arrowPadding"; "required": false; "isSignal": true; }; "sticky": { "alias": "sticky"; "required": false; "isSignal": true; }; "hideWhenDetached": { "alias": "hideWhenDetached"; "required": false; "isSignal": true; }; "clipUntilPositioned": { "alias": "clipUntilPositioned"; "required": false; "isSignal": true; }; "loop": { "alias": "loop"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "dismissible": { "alias": "dismissible"; "required": false; "isSignal": true; }; "returnFocus": { "alias": "returnFocus"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "open": "openChange"; "escapeKeyDown": "escapeKeyDown"; "pointerDownOutside": "pointerDownOutside"; "focusOutside": "focusOutside"; "interactOutside": "interactOutside"; "autoFocusOnOpen": "autoFocusOnOpen"; "autoFocusOnClose": "autoFocusOnClose"; }, never, never, true, never>;
5678
5811
  }
5679
5812
 
5680
5813
  /**
@@ -5801,13 +5934,13 @@ declare function provideForMenuDefaults(defaults?: Partial<ForMenuDefaults>): Pr
5801
5934
  * <div forDropdownMenu [(open)]="open">
5802
5935
  * <button forDropdownMenuTrigger>Options</button>
5803
5936
  * @if (open()) {
5804
- * <div forMenuContent (close)="open.set(false)">…</div>
5937
+ * <div forMenuContent>…</div>
5805
5938
  * }
5806
5939
  * </div>
5807
5940
  * ```
5808
5941
  *
5809
5942
  * Selecting a `[forMenuItem]` closes the menu (call `event.preventDefault()`
5810
- * on the item's `(select)` event to keep it open). Escape, pointer-down
5943
+ * on the item's `(activate)` event to keep it open). Escape, pointer-down
5811
5944
  * outside, and focus-outside also close — each emits a vetoable event.
5812
5945
  *
5813
5946
  * Most of the directive's body (id generation, item collection, typeahead,
@@ -5861,6 +5994,12 @@ declare class ForDropdownMenu extends MenuOverlayHost implements ForMenuContext
5861
5994
  readonly sticky: _angular_core.InputSignal<false | "partial" | "always">;
5862
5995
  /** When `true`, sets `data-detached=""` while the trigger is scrolled off-screen. */
5863
5996
  readonly hideWhenDetached: _angular_core.InputSignalWithTransform<boolean, unknown>;
5997
+ /**
5998
+ * When `true` (default), the menu is clipped until floating-ui resolves
5999
+ * its first position, preventing a flash at the viewport corner. Set to
6000
+ * `false` so a dramatic `animate.enter` plays from its first frame.
6001
+ */
6002
+ readonly clipUntilPositioned: _angular_core.InputSignalWithTransform<boolean, unknown>;
5864
6003
  /**
5865
6004
  * When `true` (default), arrow-key navigation wraps from the last enabled
5866
6005
  * item back to the first (and vice versa). When `false`, navigation stops
@@ -5913,7 +6052,7 @@ declare class ForDropdownMenu extends MenuOverlayHost implements ForMenuContext
5913
6052
  * Call `preventDefault()` on the veto to keep the menu open regardless of
5914
6053
  * which interaction triggered it.
5915
6054
  */
5916
- readonly interactOutside: _angular_core.OutputEmitterRef<VetoableNativeEvent<FocusEvent | PointerEvent>>;
6055
+ readonly interactOutside: _angular_core.OutputEmitterRef<VetoableNativeEvent<PointerEvent | FocusEvent>>;
5917
6056
  /**
5918
6057
  * Fires just before the menu sends focus to its first / last enabled
5919
6058
  * item on mount. Call `preventDefault()` on the emitted veto to skip
@@ -5932,7 +6071,7 @@ declare class ForDropdownMenu extends MenuOverlayHost implements ForMenuContext
5932
6071
  /** Top-level: no parent menu. */
5933
6072
  readonly parentMenu: null;
5934
6073
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ForDropdownMenu, never>;
5935
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForDropdownMenu, "[forDropdownMenu]", ["forDropdownMenu"], { "open": { "alias": "open"; "required": false; "isSignal": true; }; "side": { "alias": "side"; "required": false; "isSignal": true; }; "align": { "alias": "align"; "required": false; "isSignal": true; }; "sideOffset": { "alias": "sideOffset"; "required": false; "isSignal": true; }; "alignOffset": { "alias": "alignOffset"; "required": false; "isSignal": true; }; "avoidCollisions": { "alias": "avoidCollisions"; "required": false; "isSignal": true; }; "collisionPadding": { "alias": "collisionPadding"; "required": false; "isSignal": true; }; "arrowPadding": { "alias": "arrowPadding"; "required": false; "isSignal": true; }; "sticky": { "alias": "sticky"; "required": false; "isSignal": true; }; "hideWhenDetached": { "alias": "hideWhenDetached"; "required": false; "isSignal": true; }; "loop": { "alias": "loop"; "required": false; "isSignal": true; }; "_dirInput": { "alias": "dir"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "dismissible": { "alias": "dismissible"; "required": false; "isSignal": true; }; "returnFocus": { "alias": "returnFocus"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "open": "openChange"; "escapeKeyDown": "escapeKeyDown"; "pointerDownOutside": "pointerDownOutside"; "focusOutside": "focusOutside"; "interactOutside": "interactOutside"; "autoFocusOnOpen": "autoFocusOnOpen"; "autoFocusOnClose": "autoFocusOnClose"; }, never, never, true, never>;
6074
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForDropdownMenu, "[forDropdownMenu]", ["forDropdownMenu"], { "open": { "alias": "open"; "required": false; "isSignal": true; }; "side": { "alias": "side"; "required": false; "isSignal": true; }; "align": { "alias": "align"; "required": false; "isSignal": true; }; "sideOffset": { "alias": "sideOffset"; "required": false; "isSignal": true; }; "alignOffset": { "alias": "alignOffset"; "required": false; "isSignal": true; }; "avoidCollisions": { "alias": "avoidCollisions"; "required": false; "isSignal": true; }; "collisionPadding": { "alias": "collisionPadding"; "required": false; "isSignal": true; }; "arrowPadding": { "alias": "arrowPadding"; "required": false; "isSignal": true; }; "sticky": { "alias": "sticky"; "required": false; "isSignal": true; }; "hideWhenDetached": { "alias": "hideWhenDetached"; "required": false; "isSignal": true; }; "clipUntilPositioned": { "alias": "clipUntilPositioned"; "required": false; "isSignal": true; }; "loop": { "alias": "loop"; "required": false; "isSignal": true; }; "_dirInput": { "alias": "dir"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "dismissible": { "alias": "dismissible"; "required": false; "isSignal": true; }; "returnFocus": { "alias": "returnFocus"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "open": "openChange"; "escapeKeyDown": "escapeKeyDown"; "pointerDownOutside": "pointerDownOutside"; "focusOutside": "focusOutside"; "interactOutside": "interactOutside"; "autoFocusOnOpen": "autoFocusOnOpen"; "autoFocusOnClose": "autoFocusOnClose"; }, never, never, true, never>;
5936
6075
  }
5937
6076
 
5938
6077
  /**
@@ -6083,7 +6222,7 @@ declare const FOR_CONTEXT_MENU_CONTEXT: InjectionToken<ForContextMenuContext>;
6083
6222
  * <div forContextMenu [(open)]="open">
6084
6223
  * <div forContextMenuTrigger class="region">Right-click here</div>
6085
6224
  * @if (open()) {
6086
- * <div forMenuContent (close)="open.set(false)">…</div>
6225
+ * <div forMenuContent>…</div>
6087
6226
  * }
6088
6227
  * </div>
6089
6228
  * ```
@@ -6133,6 +6272,12 @@ declare class ForContextMenu extends MenuOverlayHost implements ForMenuContext,
6133
6272
  readonly sticky: _angular_core.InputSignal<false | "partial" | "always">;
6134
6273
  /** When `true`, sets `data-detached=""` while the virtual anchor is off-screen. */
6135
6274
  readonly hideWhenDetached: _angular_core.InputSignalWithTransform<boolean, unknown>;
6275
+ /**
6276
+ * When `true` (default), the menu is clipped until floating-ui resolves
6277
+ * its first position, preventing a flash at the viewport corner. Set to
6278
+ * `false` so a dramatic `animate.enter` plays from its first frame.
6279
+ */
6280
+ readonly clipUntilPositioned: _angular_core.InputSignalWithTransform<boolean, unknown>;
6136
6281
  /**
6137
6282
  * When `true` (default), arrow-key navigation wraps from the last enabled
6138
6283
  * item back to the first (and vice versa). When `false`, navigation stops
@@ -6184,7 +6329,7 @@ declare class ForContextMenu extends MenuOverlayHost implements ForMenuContext,
6184
6329
  * Call `preventDefault()` on the veto to keep the menu open regardless of
6185
6330
  * which interaction triggered it.
6186
6331
  */
6187
- readonly interactOutside: _angular_core.OutputEmitterRef<VetoableNativeEvent<FocusEvent | PointerEvent>>;
6332
+ readonly interactOutside: _angular_core.OutputEmitterRef<VetoableNativeEvent<PointerEvent | FocusEvent>>;
6188
6333
  /**
6189
6334
  * Fires just before the menu sends focus to its first / last enabled
6190
6335
  * item on mount. Call `preventDefault()` on the emitted veto to skip
@@ -6215,7 +6360,7 @@ declare class ForContextMenu extends MenuOverlayHost implements ForMenuContext,
6215
6360
  */
6216
6361
  setVirtualAnchorFromRect(rect: DOMRect): void;
6217
6362
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ForContextMenu, never>;
6218
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForContextMenu, "[forContextMenu]", ["forContextMenu"], { "open": { "alias": "open"; "required": false; "isSignal": true; }; "side": { "alias": "side"; "required": false; "isSignal": true; }; "align": { "alias": "align"; "required": false; "isSignal": true; }; "sideOffset": { "alias": "sideOffset"; "required": false; "isSignal": true; }; "alignOffset": { "alias": "alignOffset"; "required": false; "isSignal": true; }; "avoidCollisions": { "alias": "avoidCollisions"; "required": false; "isSignal": true; }; "collisionPadding": { "alias": "collisionPadding"; "required": false; "isSignal": true; }; "arrowPadding": { "alias": "arrowPadding"; "required": false; "isSignal": true; }; "sticky": { "alias": "sticky"; "required": false; "isSignal": true; }; "hideWhenDetached": { "alias": "hideWhenDetached"; "required": false; "isSignal": true; }; "loop": { "alias": "loop"; "required": false; "isSignal": true; }; "_dirInput": { "alias": "dir"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "dismissible": { "alias": "dismissible"; "required": false; "isSignal": true; }; "returnFocus": { "alias": "returnFocus"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "open": "openChange"; "escapeKeyDown": "escapeKeyDown"; "pointerDownOutside": "pointerDownOutside"; "focusOutside": "focusOutside"; "interactOutside": "interactOutside"; "autoFocusOnOpen": "autoFocusOnOpen"; "autoFocusOnClose": "autoFocusOnClose"; }, never, never, true, never>;
6363
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForContextMenu, "[forContextMenu]", ["forContextMenu"], { "open": { "alias": "open"; "required": false; "isSignal": true; }; "side": { "alias": "side"; "required": false; "isSignal": true; }; "align": { "alias": "align"; "required": false; "isSignal": true; }; "sideOffset": { "alias": "sideOffset"; "required": false; "isSignal": true; }; "alignOffset": { "alias": "alignOffset"; "required": false; "isSignal": true; }; "avoidCollisions": { "alias": "avoidCollisions"; "required": false; "isSignal": true; }; "collisionPadding": { "alias": "collisionPadding"; "required": false; "isSignal": true; }; "arrowPadding": { "alias": "arrowPadding"; "required": false; "isSignal": true; }; "sticky": { "alias": "sticky"; "required": false; "isSignal": true; }; "hideWhenDetached": { "alias": "hideWhenDetached"; "required": false; "isSignal": true; }; "clipUntilPositioned": { "alias": "clipUntilPositioned"; "required": false; "isSignal": true; }; "loop": { "alias": "loop"; "required": false; "isSignal": true; }; "_dirInput": { "alias": "dir"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "dismissible": { "alias": "dismissible"; "required": false; "isSignal": true; }; "returnFocus": { "alias": "returnFocus"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "open": "openChange"; "escapeKeyDown": "escapeKeyDown"; "pointerDownOutside": "pointerDownOutside"; "focusOutside": "focusOutside"; "interactOutside": "interactOutside"; "autoFocusOnOpen": "autoFocusOnOpen"; "autoFocusOnClose": "autoFocusOnClose"; }, never, never, true, never>;
6219
6364
  }
6220
6365
 
6221
6366
  /**
@@ -6335,6 +6480,7 @@ interface ForMenubarTriggerHandle extends CollectionHandle {
6335
6480
  readonly arrowPadding: Signal<number>;
6336
6481
  readonly sticky: Signal<'partial' | 'always' | false>;
6337
6482
  readonly hideWhenDetached: Signal<boolean>;
6483
+ readonly clipUntilPositioned: Signal<boolean>;
6338
6484
  readonly ariaLabel: Signal<string | null>;
6339
6485
  }
6340
6486
  /**
@@ -6464,6 +6610,7 @@ declare class MenubarMenuContext implements ForMenuContext {
6464
6610
  readonly arrowPadding: Signal<number>;
6465
6611
  readonly sticky: Signal<false | "partial" | "always">;
6466
6612
  readonly hideWhenDetached: Signal<boolean>;
6613
+ readonly clipUntilPositioned: Signal<boolean>;
6467
6614
  readonly loop: Signal<boolean>;
6468
6615
  readonly initialFocus: Signal<"first" | "last">;
6469
6616
  readonly lastCloseReason: Signal<ForMenuCloseReason | null>;
@@ -6533,7 +6680,7 @@ declare class MenubarMenuContext implements ForMenuContext {
6533
6680
  * <button forMenubarTrigger value="file">File</button>
6534
6681
  * @if (open() === 'file') {
6535
6682
  * <div forMenuContent>
6536
- * <button forMenuItem (select)="newDoc()">New</button>
6683
+ * <button forMenuItem (activate)="newDoc()">New</button>
6537
6684
  * </div>
6538
6685
  * }
6539
6686
  *
@@ -6559,7 +6706,7 @@ declare class ForMenubar implements ForMenubarContext {
6559
6706
  * dismissal, cross-menu nav), never on consumer writes via `[(value)]`.
6560
6707
  */
6561
6708
  readonly value: _angular_core.ModelSignal<string>;
6562
- readonly orientation: _angular_core.InputSignal<"horizontal" | "vertical">;
6709
+ readonly orientation: _angular_core.InputSignal<"vertical" | "horizontal">;
6563
6710
  /**
6564
6711
  * Writing direction. When unset (default `null`), the inherited ambient
6565
6712
  * direction is resolved from the nearest ancestor carrying a `dir` attribute
@@ -6697,6 +6844,14 @@ declare class ForMenubarTrigger {
6697
6844
  readonly arrowPadding: _angular_core.InputSignalWithTransform<number, unknown>;
6698
6845
  readonly sticky: _angular_core.InputSignal<false | "partial" | "always">;
6699
6846
  readonly hideWhenDetached: _angular_core.InputSignalWithTransform<boolean, unknown>;
6847
+ /**
6848
+ * When `true` (default), the content is clipped until floating-ui resolves
6849
+ * its first position, preventing a flash at the viewport corner. Set to
6850
+ * `false` so a dramatic `animate.enter` plays from its first frame (the
6851
+ * surface may flash briefly at the unresolved position while positioning
6852
+ * computes).
6853
+ */
6854
+ readonly clipUntilPositioned: _angular_core.InputSignalWithTransform<boolean, unknown>;
6700
6855
  /** Manual `aria-label` on `[forMenuContent]` when the trigger isn't a meaningful name. */
6701
6856
  readonly ariaLabel: _angular_core.InputSignal<string | null>;
6702
6857
  readonly triggerId: _angular_core.Signal<string>;
@@ -6711,7 +6866,7 @@ declare class ForMenubarTrigger {
6711
6866
  protected onFocus(): void;
6712
6867
  protected onPointerEnter(): void;
6713
6868
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ForMenubarTrigger, never>;
6714
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForMenubarTrigger, "[forMenubarTrigger]", ["forMenubarTrigger"], { "value": { "alias": "value"; "required": true; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "side": { "alias": "side"; "required": false; "isSignal": true; }; "align": { "alias": "align"; "required": false; "isSignal": true; }; "sideOffset": { "alias": "sideOffset"; "required": false; "isSignal": true; }; "alignOffset": { "alias": "alignOffset"; "required": false; "isSignal": true; }; "avoidCollisions": { "alias": "avoidCollisions"; "required": false; "isSignal": true; }; "collisionPadding": { "alias": "collisionPadding"; "required": false; "isSignal": true; }; "arrowPadding": { "alias": "arrowPadding"; "required": false; "isSignal": true; }; "sticky": { "alias": "sticky"; "required": false; "isSignal": true; }; "hideWhenDetached": { "alias": "hideWhenDetached"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
6869
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForMenubarTrigger, "[forMenubarTrigger]", ["forMenubarTrigger"], { "value": { "alias": "value"; "required": true; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "side": { "alias": "side"; "required": false; "isSignal": true; }; "align": { "alias": "align"; "required": false; "isSignal": true; }; "sideOffset": { "alias": "sideOffset"; "required": false; "isSignal": true; }; "alignOffset": { "alias": "alignOffset"; "required": false; "isSignal": true; }; "avoidCollisions": { "alias": "avoidCollisions"; "required": false; "isSignal": true; }; "collisionPadding": { "alias": "collisionPadding"; "required": false; "isSignal": true; }; "arrowPadding": { "alias": "arrowPadding"; "required": false; "isSignal": true; }; "sticky": { "alias": "sticky"; "required": false; "isSignal": true; }; "hideWhenDetached": { "alias": "hideWhenDetached"; "required": false; "isSignal": true; }; "clipUntilPositioned": { "alias": "clipUntilPositioned"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
6715
6870
  }
6716
6871
 
6717
6872
  /**
@@ -6804,7 +6959,7 @@ interface ForSelectContext<T = unknown> {
6804
6959
  * anchored placement; `'item-aligned'` overlays the listbox so the
6805
6960
  * selected option's center aligns with the trigger's center (macOS-style
6806
6961
  * native `<select>`). All `side`/`align`/`*Offset`/`sticky`/
6807
- * `hideWhenDetached`/`avoidCollisions` inputs are no-ops in
6962
+ * `hideWhenDetached`/`clipUntilPositioned`/`avoidCollisions` inputs are no-ops in
6808
6963
  * `'item-aligned'` mode (only `collisionPadding` is honored).
6809
6964
  */
6810
6965
  readonly position: Signal<'popper' | 'item-aligned'>;
@@ -6817,6 +6972,7 @@ interface ForSelectContext<T = unknown> {
6817
6972
  readonly arrowPadding: Signal<number>;
6818
6973
  readonly sticky: Signal<'partial' | 'always' | false>;
6819
6974
  readonly hideWhenDetached: Signal<boolean>;
6975
+ readonly clipUntilPositioned: Signal<boolean>;
6820
6976
  readonly loop: Signal<boolean>;
6821
6977
  readonly orientation: Signal<'horizontal' | 'vertical'>;
6822
6978
  readonly dir: Signal<WritingDirection>;
@@ -7018,7 +7174,7 @@ declare class ForSelect<T = string> extends FormUiControlBase implements FormVal
7018
7174
  * different; switching at runtime would need a remount, and the surface
7019
7175
  * mounts lazily via `@if (open())` well after `modal` settles). Every
7020
7176
  * anchored-positioning input — `position`, `side`, `align`, `sideOffset`,
7021
- * `alignOffset`, `sticky`, `hideWhenDetached`, `avoidCollisions`,
7177
+ * `alignOffset`, `sticky`, `hideWhenDetached`, `clipUntilPositioned`, `avoidCollisions`,
7022
7178
  * `collisionPadding`, `arrowPadding` — is a no-op in this mode. Default
7023
7179
  * `false` (non-breaking). The swipe / snap-point sheet is deliberately not
7024
7180
  * this mode — compose a `ForListbox` inside a `ForDrawer` for that.
@@ -7035,7 +7191,7 @@ declare class ForSelect<T = string> extends FormUiControlBase implements FormVal
7035
7191
  * — visually the menu "snaps over" the trigger when opened, mirroring
7036
7192
  * macOS native `<select>`. Falls back to the first enabled option when
7037
7193
  * nothing is selected. `side`, `align`, `sideOffset`, `alignOffset`,
7038
- * `sticky`, `hideWhenDetached`, and `avoidCollisions` are ignored in
7194
+ * `sticky`, `hideWhenDetached`, `clipUntilPositioned`, and `avoidCollisions` are ignored in
7039
7195
  * this mode; only `collisionPadding` is honored.
7040
7196
  */
7041
7197
  readonly position: _angular_core.InputSignal<"item-aligned" | "popper">;
@@ -7069,8 +7225,16 @@ declare class ForSelect<T = string> extends FormUiControlBase implements FormVal
7069
7225
  readonly sticky: _angular_core.InputSignal<false | "partial" | "always">;
7070
7226
  /** When `true`, sets `data-detached=""` while the trigger is scrolled off-screen. */
7071
7227
  readonly hideWhenDetached: _angular_core.InputSignalWithTransform<boolean, unknown>;
7228
+ /**
7229
+ * When `true` (default), the content is clipped until floating-ui resolves
7230
+ * its first position, preventing a flash at the viewport corner. Set to
7231
+ * `false` so a dramatic `animate.enter` plays from its first frame (the
7232
+ * surface may flash briefly at the unresolved position while positioning
7233
+ * computes).
7234
+ */
7235
+ readonly clipUntilPositioned: _angular_core.InputSignalWithTransform<boolean, unknown>;
7072
7236
  readonly loop: _angular_core.InputSignalWithTransform<boolean, unknown>;
7073
- readonly orientation: _angular_core.InputSignal<"horizontal" | "vertical">;
7237
+ readonly orientation: _angular_core.InputSignal<"vertical" | "horizontal">;
7074
7238
  /**
7075
7239
  * Writing direction. When unset (default `null`), the inherited ambient
7076
7240
  * direction is resolved from the nearest ancestor carrying a `dir` attribute
@@ -7096,7 +7260,7 @@ declare class ForSelect<T = string> extends FormUiControlBase implements FormVal
7096
7260
  readonly escapeKeyDown: _angular_core.OutputEmitterRef<VetoableNativeEvent<KeyboardEvent>>;
7097
7261
  readonly pointerDownOutside: _angular_core.OutputEmitterRef<VetoableNativeEvent<PointerEvent>>;
7098
7262
  readonly focusOutside: _angular_core.OutputEmitterRef<VetoableNativeEvent<FocusEvent>>;
7099
- readonly interactOutside: _angular_core.OutputEmitterRef<VetoableNativeEvent<FocusEvent | PointerEvent>>;
7263
+ readonly interactOutside: _angular_core.OutputEmitterRef<VetoableNativeEvent<PointerEvent | FocusEvent>>;
7100
7264
  /**
7101
7265
  * Fires just before the listbox sends focus to the selected option
7102
7266
  * (or first / last enabled) on mount. Call `preventDefault()` on the
@@ -7184,7 +7348,7 @@ declare class ForSelect<T = string> extends FormUiControlBase implements FormVal
7184
7348
  emitAutoFocusOnClose(): boolean;
7185
7349
  markTouched(): void;
7186
7350
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ForSelect<any>, never>;
7187
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForSelect<any>, "[forSelect]", ["forSelect"], { "value": { "alias": "value"; "required": false; "isSignal": true; }; "isItemEqualToValue": { "alias": "isItemEqualToValue"; "required": false; "isSignal": true; }; "itemToFormValue": { "alias": "itemToFormValue"; "required": false; "isSignal": true; }; "itemToLabel": { "alias": "itemToLabel"; "required": false; "isSignal": true; }; "open": { "alias": "open"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "modal": { "alias": "modal"; "required": false; "isSignal": true; }; "position": { "alias": "position"; "required": false; "isSignal": true; }; "side": { "alias": "side"; "required": false; "isSignal": true; }; "align": { "alias": "align"; "required": false; "isSignal": true; }; "sideOffset": { "alias": "sideOffset"; "required": false; "isSignal": true; }; "alignOffset": { "alias": "alignOffset"; "required": false; "isSignal": true; }; "avoidCollisions": { "alias": "avoidCollisions"; "required": false; "isSignal": true; }; "collisionPadding": { "alias": "collisionPadding"; "required": false; "isSignal": true; }; "arrowPadding": { "alias": "arrowPadding"; "required": false; "isSignal": true; }; "sticky": { "alias": "sticky"; "required": false; "isSignal": true; }; "hideWhenDetached": { "alias": "hideWhenDetached"; "required": false; "isSignal": true; }; "loop": { "alias": "loop"; "required": false; "isSignal": true; }; "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; "_dirInput": { "alias": "dir"; "required": false; "isSignal": true; }; "selectionFollowsFocus": { "alias": "selectionFollowsFocus"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "dismissible": { "alias": "dismissible"; "required": false; "isSignal": true; }; "returnFocus": { "alias": "returnFocus"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "open": "openChange"; "escapeKeyDown": "escapeKeyDown"; "pointerDownOutside": "pointerDownOutside"; "focusOutside": "focusOutside"; "interactOutside": "interactOutside"; "autoFocusOnOpen": "autoFocusOnOpen"; "autoFocusOnClose": "autoFocusOnClose"; }, never, never, true, never>;
7351
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForSelect<any>, "[forSelect]", ["forSelect"], { "value": { "alias": "value"; "required": false; "isSignal": true; }; "isItemEqualToValue": { "alias": "isItemEqualToValue"; "required": false; "isSignal": true; }; "itemToFormValue": { "alias": "itemToFormValue"; "required": false; "isSignal": true; }; "itemToLabel": { "alias": "itemToLabel"; "required": false; "isSignal": true; }; "open": { "alias": "open"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "modal": { "alias": "modal"; "required": false; "isSignal": true; }; "position": { "alias": "position"; "required": false; "isSignal": true; }; "side": { "alias": "side"; "required": false; "isSignal": true; }; "align": { "alias": "align"; "required": false; "isSignal": true; }; "sideOffset": { "alias": "sideOffset"; "required": false; "isSignal": true; }; "alignOffset": { "alias": "alignOffset"; "required": false; "isSignal": true; }; "avoidCollisions": { "alias": "avoidCollisions"; "required": false; "isSignal": true; }; "collisionPadding": { "alias": "collisionPadding"; "required": false; "isSignal": true; }; "arrowPadding": { "alias": "arrowPadding"; "required": false; "isSignal": true; }; "sticky": { "alias": "sticky"; "required": false; "isSignal": true; }; "hideWhenDetached": { "alias": "hideWhenDetached"; "required": false; "isSignal": true; }; "clipUntilPositioned": { "alias": "clipUntilPositioned"; "required": false; "isSignal": true; }; "loop": { "alias": "loop"; "required": false; "isSignal": true; }; "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; "_dirInput": { "alias": "dir"; "required": false; "isSignal": true; }; "selectionFollowsFocus": { "alias": "selectionFollowsFocus"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "dismissible": { "alias": "dismissible"; "required": false; "isSignal": true; }; "returnFocus": { "alias": "returnFocus"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "open": "openChange"; "escapeKeyDown": "escapeKeyDown"; "pointerDownOutside": "pointerDownOutside"; "focusOutside": "focusOutside"; "interactOutside": "interactOutside"; "autoFocusOnOpen": "autoFocusOnOpen"; "autoFocusOnClose": "autoFocusOnClose"; }, never, never, true, never>;
7188
7352
  }
7189
7353
 
7190
7354
  /**
@@ -7527,7 +7691,7 @@ declare function provideForSelectDefaults(defaults?: Partial<ForSelectDefaults>)
7527
7691
  * export class MySelect {}
7528
7692
  * ```
7529
7693
  */
7530
- declare const FOR_SELECT_HOST_DIRECTIVE_INPUTS: readonly ["value", "open", "align", "alignOffset", "ariaLabel", "arrowPadding", "avoidCollisions", "collisionPadding", "dir", "dirty", "disabled", "dismissible", "errors", "hideWhenDetached", "invalid", "isItemEqualToValue", "itemToFormValue", "itemToLabel", "loop", "modal", "multiple", "name", "orientation", "pending", "placeholder", "position", "readonly", "required", "returnFocus", "selectionFollowsFocus", "side", "sideOffset", "sticky", "touched"];
7694
+ declare const FOR_SELECT_HOST_DIRECTIVE_INPUTS: readonly ["value", "open", "align", "alignOffset", "ariaLabel", "arrowPadding", "avoidCollisions", "clipUntilPositioned", "collisionPadding", "dir", "dirty", "disabled", "dismissible", "errors", "hideWhenDetached", "invalid", "isItemEqualToValue", "itemToFormValue", "itemToLabel", "loop", "modal", "multiple", "name", "orientation", "pending", "placeholder", "position", "readonly", "required", "returnFocus", "selectionFollowsFocus", "side", "sideOffset", "sticky", "touched"];
7531
7695
  /**
7532
7696
  * Exact public names of every `ForSelect` output, the Signal Forms `touch` output
7533
7697
  * included. Spread it into the `outputs` array of the same `hostDirectives` entry as
@@ -7632,6 +7796,7 @@ interface ForComboboxContext<T = unknown> {
7632
7796
  readonly arrowPadding: Signal<number>;
7633
7797
  readonly sticky: Signal<'partial' | 'always' | false>;
7634
7798
  readonly hideWhenDetached: Signal<boolean>;
7799
+ readonly clipUntilPositioned: Signal<boolean>;
7635
7800
  readonly loop: Signal<boolean>;
7636
7801
  readonly inputId: Signal<string>;
7637
7802
  readonly contentId: Signal<string>;
@@ -7967,6 +8132,14 @@ declare class ForCombobox<T = string> extends FormUiControlBase implements FormV
7967
8132
  readonly sticky: _angular_core.InputSignal<false | "partial" | "always">;
7968
8133
  /** When `true`, sets `data-detached=""` while the input is scrolled off-screen. */
7969
8134
  readonly hideWhenDetached: _angular_core.InputSignalWithTransform<boolean, unknown>;
8135
+ /**
8136
+ * When `true` (default), the content is clipped until floating-ui resolves
8137
+ * its first position, preventing a flash at the viewport corner. Set to
8138
+ * `false` so a dramatic `animate.enter` plays from its first frame (the
8139
+ * surface may flash briefly at the unresolved position while positioning
8140
+ * computes).
8141
+ */
8142
+ readonly clipUntilPositioned: _angular_core.InputSignalWithTransform<boolean, unknown>;
7970
8143
  readonly loop: _angular_core.InputSignalWithTransform<boolean, unknown>;
7971
8144
  /** When true (default), Escape, pointer-down outside, and focus outside close the listbox. */
7972
8145
  readonly dismissible: _angular_core.InputSignalWithTransform<boolean, unknown>;
@@ -8007,7 +8180,7 @@ declare class ForCombobox<T = string> extends FormUiControlBase implements FormV
8007
8180
  readonly escapeKeyDown: _angular_core.OutputEmitterRef<VetoableNativeEvent<KeyboardEvent>>;
8008
8181
  readonly pointerDownOutside: _angular_core.OutputEmitterRef<VetoableNativeEvent<PointerEvent>>;
8009
8182
  readonly focusOutside: _angular_core.OutputEmitterRef<VetoableNativeEvent<FocusEvent>>;
8010
- readonly interactOutside: _angular_core.OutputEmitterRef<VetoableNativeEvent<FocusEvent | PointerEvent>>;
8183
+ readonly interactOutside: _angular_core.OutputEmitterRef<VetoableNativeEvent<PointerEvent | FocusEvent>>;
8011
8184
  /**
8012
8185
  * _(picker anatomy only)_ Fires just before focus moves into the input on
8013
8186
  * open. Call `preventDefault()` on the emitted veto to skip the imperative
@@ -8123,7 +8296,7 @@ declare class ForCombobox<T = string> extends FormUiControlBase implements FormV
8123
8296
  markTouched(): void;
8124
8297
  protected onFocusOut(event: FocusEvent): void;
8125
8298
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ForCombobox<any>, never>;
8126
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForCombobox<any>, "[forCombobox]", ["forCombobox"], { "query": { "alias": "query"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "isItemEqualToValue": { "alias": "isItemEqualToValue"; "required": false; "isSignal": true; }; "itemToStringLabel": { "alias": "itemToStringLabel"; "required": false; "isSignal": true; }; "itemToFormValue": { "alias": "itemToFormValue"; "required": false; "isSignal": true; }; "open": { "alias": "open"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "autocompleteMode": { "alias": "autocompleteMode"; "required": false; "isSignal": true; }; "openOnFocus": { "alias": "openOnFocus"; "required": false; "isSignal": true; }; "openOnQuery": { "alias": "openOnQuery"; "required": false; "isSignal": true; }; "commitOnSelect": { "alias": "commitOnSelect"; "required": false; "isSignal": true; }; "clearOnQueryChange": { "alias": "clearOnQueryChange"; "required": false; "isSignal": true; }; "autoHighlight": { "alias": "autoHighlight"; "required": false; "isSignal": true; }; "_dirInput": { "alias": "dir"; "required": false; "isSignal": true; }; "side": { "alias": "side"; "required": false; "isSignal": true; }; "_alignInput": { "alias": "align"; "required": false; "isSignal": true; }; "sideOffset": { "alias": "sideOffset"; "required": false; "isSignal": true; }; "alignOffset": { "alias": "alignOffset"; "required": false; "isSignal": true; }; "avoidCollisions": { "alias": "avoidCollisions"; "required": false; "isSignal": true; }; "collisionPadding": { "alias": "collisionPadding"; "required": false; "isSignal": true; }; "arrowPadding": { "alias": "arrowPadding"; "required": false; "isSignal": true; }; "sticky": { "alias": "sticky"; "required": false; "isSignal": true; }; "hideWhenDetached": { "alias": "hideWhenDetached"; "required": false; "isSignal": true; }; "loop": { "alias": "loop"; "required": false; "isSignal": true; }; "dismissible": { "alias": "dismissible"; "required": false; "isSignal": true; }; "returnFocus": { "alias": "returnFocus"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "totalCount": { "alias": "totalCount"; "required": false; "isSignal": true; }; "visibleRange": { "alias": "visibleRange"; "required": false; "isSignal": true; }; }, { "query": "queryChange"; "value": "valueChange"; "open": "openChange"; "scrollToIndex": "scrollToIndex"; "escapeKeyDown": "escapeKeyDown"; "pointerDownOutside": "pointerDownOutside"; "focusOutside": "focusOutside"; "interactOutside": "interactOutside"; "autoFocusOnOpen": "autoFocusOnOpen"; "autoFocusOnClose": "autoFocusOnClose"; }, never, never, true, never>;
8299
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForCombobox<any>, "[forCombobox]", ["forCombobox"], { "query": { "alias": "query"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "isItemEqualToValue": { "alias": "isItemEqualToValue"; "required": false; "isSignal": true; }; "itemToStringLabel": { "alias": "itemToStringLabel"; "required": false; "isSignal": true; }; "itemToFormValue": { "alias": "itemToFormValue"; "required": false; "isSignal": true; }; "open": { "alias": "open"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "autocompleteMode": { "alias": "autocompleteMode"; "required": false; "isSignal": true; }; "openOnFocus": { "alias": "openOnFocus"; "required": false; "isSignal": true; }; "openOnQuery": { "alias": "openOnQuery"; "required": false; "isSignal": true; }; "commitOnSelect": { "alias": "commitOnSelect"; "required": false; "isSignal": true; }; "clearOnQueryChange": { "alias": "clearOnQueryChange"; "required": false; "isSignal": true; }; "autoHighlight": { "alias": "autoHighlight"; "required": false; "isSignal": true; }; "_dirInput": { "alias": "dir"; "required": false; "isSignal": true; }; "side": { "alias": "side"; "required": false; "isSignal": true; }; "_alignInput": { "alias": "align"; "required": false; "isSignal": true; }; "sideOffset": { "alias": "sideOffset"; "required": false; "isSignal": true; }; "alignOffset": { "alias": "alignOffset"; "required": false; "isSignal": true; }; "avoidCollisions": { "alias": "avoidCollisions"; "required": false; "isSignal": true; }; "collisionPadding": { "alias": "collisionPadding"; "required": false; "isSignal": true; }; "arrowPadding": { "alias": "arrowPadding"; "required": false; "isSignal": true; }; "sticky": { "alias": "sticky"; "required": false; "isSignal": true; }; "hideWhenDetached": { "alias": "hideWhenDetached"; "required": false; "isSignal": true; }; "clipUntilPositioned": { "alias": "clipUntilPositioned"; "required": false; "isSignal": true; }; "loop": { "alias": "loop"; "required": false; "isSignal": true; }; "dismissible": { "alias": "dismissible"; "required": false; "isSignal": true; }; "returnFocus": { "alias": "returnFocus"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "totalCount": { "alias": "totalCount"; "required": false; "isSignal": true; }; "visibleRange": { "alias": "visibleRange"; "required": false; "isSignal": true; }; }, { "query": "queryChange"; "value": "valueChange"; "open": "openChange"; "scrollToIndex": "scrollToIndex"; "escapeKeyDown": "escapeKeyDown"; "pointerDownOutside": "pointerDownOutside"; "focusOutside": "focusOutside"; "interactOutside": "interactOutside"; "autoFocusOnOpen": "autoFocusOnOpen"; "autoFocusOnClose": "autoFocusOnClose"; }, never, never, true, never>;
8127
8300
  }
8128
8301
 
8129
8302
  /**
@@ -8745,7 +8918,7 @@ declare function provideForComboboxDefaults(defaults?: Partial<ForComboboxDefaul
8745
8918
  * export class MyCombobox {}
8746
8919
  * ```
8747
8920
  */
8748
- declare const FOR_COMBOBOX_HOST_DIRECTIVE_INPUTS: readonly ["query", "value", "open", "align", "alignOffset", "ariaLabel", "arrowPadding", "autoHighlight", "autocompleteMode", "avoidCollisions", "clearOnQueryChange", "collisionPadding", "commitOnSelect", "dir", "dirty", "disabled", "dismissible", "errors", "hideWhenDetached", "invalid", "isItemEqualToValue", "itemToFormValue", "itemToStringLabel", "loop", "multiple", "name", "openOnFocus", "openOnQuery", "pending", "readonly", "required", "returnFocus", "side", "sideOffset", "sticky", "totalCount", "visibleRange", "touched"];
8921
+ declare const FOR_COMBOBOX_HOST_DIRECTIVE_INPUTS: readonly ["query", "value", "open", "align", "alignOffset", "ariaLabel", "arrowPadding", "autoHighlight", "autocompleteMode", "avoidCollisions", "clearOnQueryChange", "clipUntilPositioned", "collisionPadding", "commitOnSelect", "dir", "dirty", "disabled", "dismissible", "errors", "hideWhenDetached", "invalid", "isItemEqualToValue", "itemToFormValue", "itemToStringLabel", "loop", "multiple", "name", "openOnFocus", "openOnQuery", "pending", "readonly", "required", "returnFocus", "side", "sideOffset", "sticky", "totalCount", "visibleRange", "touched"];
8749
8922
  /**
8750
8923
  * Exact public names of every `ForCombobox` output, the Signal Forms `touch` output
8751
8924
  * included. Spread it into the `outputs` array of the same `hostDirectives` entry as
@@ -8954,7 +9127,7 @@ declare class ForSlider extends FormUiControlBase implements Omit<FormValueContr
8954
9127
  readonly minValue: _angular_core.Signal<number>;
8955
9128
  /** Effective maximum (defaults `100`). Exposed to children via context. */
8956
9129
  readonly maxValue: _angular_core.Signal<number>;
8957
- readonly orientation: _angular_core.InputSignal<"horizontal" | "vertical">;
9130
+ readonly orientation: _angular_core.InputSignal<"vertical" | "horizontal">;
8958
9131
  /**
8959
9132
  * Writing direction. When unset (default `null`), the inherited ambient
8960
9133
  * direction is resolved from the nearest ancestor carrying a `dir` attribute
@@ -9392,7 +9565,7 @@ interface ForToastContext {
9392
9565
  */
9393
9566
  registerAction(handle: ForToastActionHandle): void;
9394
9567
  unregisterAction(handle: ForToastActionHandle): void;
9395
- /** Request close. Always honored — the directive emits `(close)` and the consumer unmounts. */
9568
+ /** Request close. Always honored — the directive emits `(dismiss)` and the consumer unmounts. */
9396
9569
  requestClose(reason: ForToastCloseReason): void;
9397
9570
  }
9398
9571
  declare const FOR_TOAST_CONTEXT: InjectionToken<ForToastContext>;
@@ -9407,7 +9580,7 @@ type SwipeState = 'start' | 'move' | 'cancel' | 'end';
9407
9580
  * The directive does **not** control its own visibility. The consumer
9408
9581
  * mounts it (typically through `<for-toast-viewport>` for programmatic
9409
9582
  * toasts, or directly with `@if` for declarative ones) and unmounts it
9410
- * when `(close)` fires. Pair the unmount with `animate.leave="…"` for
9583
+ * when `(dismiss)` fires. Pair the unmount with `animate.leave="…"` for
9411
9584
  * exit animations.
9412
9585
  *
9413
9586
  * Behavior:
@@ -9436,7 +9609,7 @@ declare class ForToast implements ForToastContext {
9436
9609
  * Set `false` for a sticky / forced-action toast: every ambient gesture is
9437
9610
  * suppressed, no auto-dismiss timer is scheduled, and a `[forToastClose]`
9438
9611
  * button (if present) becomes inert. The **action button stays live and is
9439
- * the sanctioned dismissal path** — `[forToastAction]` still emits `(close)`
9612
+ * the sanctioned dismissal path** — `[forToastAction]` still emits `(dismiss)`
9440
9613
  * with reason `'action'` so a forced-action toast (e.g. "Update available —
9441
9614
  * Reload") can be dismissed by the only control the user is meant to use.
9442
9615
  * Programmatic close via `ForToastRef.dismiss()` is also always honored.
@@ -9461,12 +9634,12 @@ declare class ForToast implements ForToastContext {
9461
9634
  */
9462
9635
  readonly swipeThreshold: _angular_core.InputSignalWithTransform<number, unknown>;
9463
9636
  /** Emitted when the toast wants to be unmounted. The consumer reacts by removing it from the rendered list. */
9464
- readonly close: _angular_core.OutputEmitterRef<ForToastCloseReason>;
9637
+ readonly dismiss: _angular_core.OutputEmitterRef<ForToastCloseReason>;
9465
9638
  /** Fired once on the move that arms the swipe. */
9466
9639
  readonly swipeStart: _angular_core.OutputEmitterRef<SwipeEventDetail>;
9467
9640
  /** Fired on every pointer move while the swipe is active. */
9468
9641
  readonly swipeMove: _angular_core.OutputEmitterRef<SwipeEventDetail>;
9469
- /** Fired on pointer-up after the threshold is crossed (immediately followed by `(close)`). */
9642
+ /** Fired on pointer-up after the threshold is crossed (immediately followed by `(dismiss)`). */
9470
9643
  readonly swipeEnd: _angular_core.OutputEmitterRef<SwipeEventDetail>;
9471
9644
  /** Fired on pointer-up before the threshold, or on `pointercancel`. */
9472
9645
  readonly swipeCancel: _angular_core.OutputEmitterRef<SwipeEventDetail>;
@@ -9478,7 +9651,7 @@ declare class ForToast implements ForToastContext {
9478
9651
  readonly labelledBy: _angular_core.Signal<string | null>;
9479
9652
  readonly describedBy: _angular_core.Signal<string | null>;
9480
9653
  protected readonly computedRole: _angular_core.Signal<"alert" | "status">;
9481
- protected readonly ariaLive: _angular_core.Signal<"off" | "polite" | "assertive">;
9654
+ protected readonly ariaLive: _angular_core.Signal<"off" | "assertive" | "polite">;
9482
9655
  constructor();
9483
9656
  registerLabel(handle: ForToastTextHandle): void;
9484
9657
  unregisterLabel(handle: ForToastTextHandle): void;
@@ -9502,7 +9675,7 @@ declare class ForToast implements ForToastContext {
9502
9675
  protected onMaybeResumeFocus(event: FocusEvent): void;
9503
9676
  protected onKeyDown(event: KeyboardEvent): void;
9504
9677
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ForToast, never>;
9505
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForToast, "[forToast]", ["forToast"], { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "duration": { "alias": "duration"; "required": false; "isSignal": true; }; "closable": { "alias": "closable"; "required": false; "isSignal": true; }; "swipeDirection": { "alias": "swipeDirection"; "required": false; "isSignal": true; }; "swipeThreshold": { "alias": "swipeThreshold"; "required": false; "isSignal": true; }; }, { "close": "close"; "swipeStart": "swipeStart"; "swipeMove": "swipeMove"; "swipeEnd": "swipeEnd"; "swipeCancel": "swipeCancel"; }, never, never, true, never>;
9678
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForToast, "[forToast]", ["forToast"], { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "duration": { "alias": "duration"; "required": false; "isSignal": true; }; "closable": { "alias": "closable"; "required": false; "isSignal": true; }; "swipeDirection": { "alias": "swipeDirection"; "required": false; "isSignal": true; }; "swipeThreshold": { "alias": "swipeThreshold"; "required": false; "isSignal": true; }; }, { "dismiss": "dismiss"; "swipeStart": "swipeStart"; "swipeMove": "swipeMove"; "swipeEnd": "swipeEnd"; "swipeCancel": "swipeCancel"; }, never, never, true, never>;
9506
9679
  }
9507
9680
 
9508
9681
  /**
@@ -9631,7 +9804,7 @@ declare class ForToastDescription {
9631
9804
  * Action button inside a toast (e.g. "Undo"). Apply on a
9632
9805
  * `<button type="button">` so Space / Enter dispatch a native click.
9633
9806
  *
9634
- * Clicking emits `(close)` from the parent `[forToast]` with reason
9807
+ * Clicking emits `(dismiss)` from the parent `[forToast]` with reason
9635
9808
  * `'action'`. Wire your action handler with `(click)` on this element
9636
9809
  * itself — the close fires after your handler runs (via event order).
9637
9810
  *
@@ -9664,7 +9837,7 @@ declare class ForToastAction {
9664
9837
 
9665
9838
  /**
9666
9839
  * Close button inside a toast. Apply on a `<button type="button">` so
9667
- * Space / Enter dispatch a native click. Clicking emits `(close)` from
9840
+ * Space / Enter dispatch a native click. Clicking emits `(dismiss)` from
9668
9841
  * the parent `[forToast]` with reason `'manual'`.
9669
9842
  *
9670
9843
  * The host carries `aria-label="Close"` by default; override with your
@@ -9797,7 +9970,7 @@ declare class ForSeparator {
9797
9970
  * vertically; `vertical` splits content arranged horizontally. Defaults to
9798
9971
  * `horizontal`, matching the `<hr>` element.
9799
9972
  */
9800
- readonly orientation: _angular_core.InputSignal<"horizontal" | "vertical">;
9973
+ readonly orientation: _angular_core.InputSignal<"vertical" | "horizontal">;
9801
9974
  /**
9802
9975
  * When true, the separator is purely visual: it gets `role="none"` and no
9803
9976
  * ARIA, so assistive tech treats surrounding content as a single flow. Use
@@ -9833,7 +10006,7 @@ declare function provideForSeparatorDefaults(defaults?: Partial<ForSeparatorDefa
9833
10006
  * the focusable divider between two resizable panes. Carries `role="separator"`
9834
10007
  * with live `aria-valuenow` / `aria-valuemin` / `aria-valuemax`, is tabbable,
9835
10008
  * handles arrow keys / Page Up-Down / Home / End / (optional) Enter, and
9836
- * supports pointer drag with `setPointerCapture`. Emits `(resize)` on every
10009
+ * supports pointer drag with `setPointerCapture`. Emits `(resizing)` on every
9837
10010
  * mutation and `(resizeCommit)` once per key release / drag end.
9838
10011
  *
9839
10012
  * It is essentially a 1-D slider wearing a separator role; the static
@@ -9842,7 +10015,7 @@ declare function provideForSeparatorDefaults(defaults?: Partial<ForSeparatorDefa
9842
10015
  *
9843
10016
  * Pointer drag arms only after the pointer travels past a small dead-zone (a
9844
10017
  * few px), so a plain click that fires a stray sub-threshold `pointermove`
9845
- * never mutates the value — `(resize)` won't fire on a jittery click.
10018
+ * never mutates the value — `(resizing)` won't fire on a jittery click.
9846
10019
  *
9847
10020
  * @example
9848
10021
  * ```html
@@ -9870,7 +10043,7 @@ declare class ForPaneResizer {
9870
10043
  * perpendicular to it. APG: a horizontal pane stack uses a vertical
9871
10044
  * separator, and arrow keys move along the resize axis.
9872
10045
  */
9873
- readonly orientation: _angular_core.InputSignal<"horizontal" | "vertical">;
10046
+ readonly orientation: _angular_core.InputSignal<"vertical" | "horizontal">;
9874
10047
  /**
9875
10048
  * Disables the resizer: it drops out of tab order, no keyboard or pointer
9876
10049
  * mutation fires, and `aria-disabled` / `data-disabled` are reflected.
@@ -9886,7 +10059,7 @@ declare class ForPaneResizer {
9886
10059
  * The `model()` change emitter (`(valueChange)`) follows the project-wide
9887
10060
  * contract: it fires only on internal updates (keyboard, drag), never on
9888
10061
  * consumer writes via `[(value)]` — observe transitions without binding
9889
- * back. `(resize)` carries the same value with a verb-named alias for
10062
+ * back. `(resizing)` carries the same value with a verb-named alias for
9890
10063
  * one-way wiring.
9891
10064
  */
9892
10065
  readonly value: _angular_core.ModelSignal<number>;
@@ -9933,11 +10106,11 @@ declare class ForPaneResizer {
9933
10106
  * `(valueChange)`; pick one or the other based on whether you want
9934
10107
  * two-way binding (`[(value)]`) or one-shot observation.
9935
10108
  */
9936
- readonly resize: _angular_core.OutputEmitterRef<number>;
10109
+ readonly resizing: _angular_core.OutputEmitterRef<number>;
9937
10110
  /**
9938
10111
  * Fires once at the end of a resize burst — when the user releases the
9939
10112
  * pointer (or it is cancelled) or releases an arrow / page key. Useful for
9940
- * persisting the final size after a drag, where `(resize)` may fire 60+
10113
+ * persisting the final size after a drag, where `(resizing)` may fire 60+
9941
10114
  * times per second.
9942
10115
  */
9943
10116
  readonly resizeCommit: _angular_core.OutputEmitterRef<number>;
@@ -9946,7 +10119,7 @@ declare class ForPaneResizer {
9946
10119
  protected onKeyUp(_event: KeyboardEvent): void;
9947
10120
  protected onPointerDown(event: PointerEvent): void;
9948
10121
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ForPaneResizer, never>;
9949
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForPaneResizer, "[forPaneResizer]", ["forPaneResizer"], { "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "step": { "alias": "step"; "required": false; "isSignal": true; }; "largeStep": { "alias": "largeStep"; "required": false; "isSignal": true; }; "valueText": { "alias": "valueText"; "required": false; "isSignal": true; }; "controls": { "alias": "controls"; "required": false; "isSignal": true; }; "collapsible": { "alias": "collapsible"; "required": false; "isSignal": true; }; "_dirInput": { "alias": "dir"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "resize": "resize"; "resizeCommit": "resizeCommit"; }, never, never, true, never>;
10122
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForPaneResizer, "[forPaneResizer]", ["forPaneResizer"], { "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "step": { "alias": "step"; "required": false; "isSignal": true; }; "largeStep": { "alias": "largeStep"; "required": false; "isSignal": true; }; "valueText": { "alias": "valueText"; "required": false; "isSignal": true; }; "controls": { "alias": "controls"; "required": false; "isSignal": true; }; "collapsible": { "alias": "collapsible"; "required": false; "isSignal": true; }; "_dirInput": { "alias": "dir"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "resizing": "resizing"; "resizeCommit": "resizeCommit"; }, never, never, true, never>;
9950
10123
  }
9951
10124
 
9952
10125
  /**
@@ -10537,7 +10710,7 @@ declare class ForToolbar implements ForToolbarContext {
10537
10710
  * input on `ForListbox` / `ForMenubar`.
10538
10711
  */
10539
10712
  readonly ariaLabel: _angular_core.InputSignal<string | null>;
10540
- readonly orientation: _angular_core.InputSignal<"horizontal" | "vertical">;
10713
+ readonly orientation: _angular_core.InputSignal<"vertical" | "horizontal">;
10541
10714
  /**
10542
10715
  * Writing direction. When unset (default `null`), the inherited ambient
10543
10716
  * direction is resolved from the nearest ancestor carrying a `dir` attribute
@@ -10642,7 +10815,7 @@ declare class ForToolbarSeparator {
10642
10815
  * cross-axis of the parent toolbar (horizontal toolbar → vertical
10643
10816
  * separator, and vice versa).
10644
10817
  */
10645
- readonly orientation: _angular_core.InputSignal<"horizontal" | "vertical" | undefined>;
10818
+ readonly orientation: _angular_core.InputSignal<"vertical" | "horizontal" | undefined>;
10646
10819
  /**
10647
10820
  * When true, the separator is purely visual: it gets `role="none"` and no
10648
10821
  * `aria-orientation`, so assistive tech treats surrounding content as a
@@ -10653,8 +10826,8 @@ declare class ForToolbarSeparator {
10653
10826
  * Cross-axis of the parent toolbar — the orientation an unconfigured
10654
10827
  * separator inherits.
10655
10828
  */
10656
- readonly defaultOrientation: _angular_core.Signal<"horizontal" | "vertical">;
10657
- protected readonly effectiveOrientation: _angular_core.Signal<"horizontal" | "vertical">;
10829
+ readonly defaultOrientation: _angular_core.Signal<"vertical" | "horizontal">;
10830
+ protected readonly effectiveOrientation: _angular_core.Signal<"vertical" | "horizontal">;
10658
10831
  protected ariaOrientation(): 'vertical' | null;
10659
10832
  constructor();
10660
10833
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ForToolbarSeparator, never>;
@@ -10697,6 +10870,7 @@ interface ForHoverCardContext {
10697
10870
  readonly arrowPadding: Signal<number>;
10698
10871
  readonly sticky: Signal<'partial' | 'always' | false>;
10699
10872
  readonly hideWhenDetached: Signal<boolean>;
10873
+ readonly clipUntilPositioned: Signal<boolean>;
10700
10874
  readonly trigger: Signal<HTMLElement | null>;
10701
10875
  readonly arrow: Signal<HTMLElement | null>;
10702
10876
  registerTrigger(el: HTMLElement): void;
@@ -10814,6 +10988,14 @@ declare class ForHoverCard implements ForHoverCardContext {
10814
10988
  readonly sticky: _angular_core.InputSignal<false | "partial" | "always">;
10815
10989
  /** When `true`, sets `data-detached=""` while the trigger is scrolled off-screen. */
10816
10990
  readonly hideWhenDetached: _angular_core.InputSignalWithTransform<boolean, unknown>;
10991
+ /**
10992
+ * When `true` (default), the content is clipped until floating-ui resolves
10993
+ * its first position, preventing a flash at the viewport corner. Set to
10994
+ * `false` so a dramatic `animate.enter` plays from its first frame (the
10995
+ * surface may flash briefly at the unresolved position while positioning
10996
+ * computes).
10997
+ */
10998
+ readonly clipUntilPositioned: _angular_core.InputSignalWithTransform<boolean, unknown>;
10817
10999
  /** Per-card override for open delay (ms). Falls back to coordinator (700ms). */
10818
11000
  readonly openDelay: _angular_core.InputSignal<number | undefined>;
10819
11001
  /** Per-card override for close delay (ms). Falls back to coordinator (300ms). */
@@ -10847,7 +11029,7 @@ declare class ForHoverCard implements ForHoverCardContext {
10847
11029
  */
10848
11030
  emitEscapeKeyDown(event: KeyboardEvent): void;
10849
11031
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ForHoverCard, never>;
10850
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForHoverCard, "[forHoverCard]", ["forHoverCard"], { "open": { "alias": "open"; "required": false; "isSignal": true; }; "_sideInput": { "alias": "side"; "required": false; "isSignal": true; }; "_alignInput": { "alias": "align"; "required": false; "isSignal": true; }; "_sideOffsetInput": { "alias": "sideOffset"; "required": false; "isSignal": true; }; "alignOffset": { "alias": "alignOffset"; "required": false; "isSignal": true; }; "avoidCollisions": { "alias": "avoidCollisions"; "required": false; "isSignal": true; }; "_collisionPaddingInput": { "alias": "collisionPadding"; "required": false; "isSignal": true; }; "arrowPadding": { "alias": "arrowPadding"; "required": false; "isSignal": true; }; "sticky": { "alias": "sticky"; "required": false; "isSignal": true; }; "hideWhenDetached": { "alias": "hideWhenDetached"; "required": false; "isSignal": true; }; "openDelay": { "alias": "openDelay"; "required": false; "isSignal": true; }; "closeDelay": { "alias": "closeDelay"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, { "open": "openChange"; "escapeKeyDown": "escapeKeyDown"; }, never, never, true, never>;
11032
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForHoverCard, "[forHoverCard]", ["forHoverCard"], { "open": { "alias": "open"; "required": false; "isSignal": true; }; "_sideInput": { "alias": "side"; "required": false; "isSignal": true; }; "_alignInput": { "alias": "align"; "required": false; "isSignal": true; }; "_sideOffsetInput": { "alias": "sideOffset"; "required": false; "isSignal": true; }; "alignOffset": { "alias": "alignOffset"; "required": false; "isSignal": true; }; "avoidCollisions": { "alias": "avoidCollisions"; "required": false; "isSignal": true; }; "_collisionPaddingInput": { "alias": "collisionPadding"; "required": false; "isSignal": true; }; "arrowPadding": { "alias": "arrowPadding"; "required": false; "isSignal": true; }; "sticky": { "alias": "sticky"; "required": false; "isSignal": true; }; "hideWhenDetached": { "alias": "hideWhenDetached"; "required": false; "isSignal": true; }; "clipUntilPositioned": { "alias": "clipUntilPositioned"; "required": false; "isSignal": true; }; "openDelay": { "alias": "openDelay"; "required": false; "isSignal": true; }; "closeDelay": { "alias": "closeDelay"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, { "open": "openChange"; "escapeKeyDown": "escapeKeyDown"; }, never, never, true, never>;
10851
11033
  }
10852
11034
 
10853
11035
  /**
@@ -11133,7 +11315,7 @@ declare class ForNavigationMenu implements ForNavigationMenuContext {
11133
11315
  * on consumer writes via `[(value)]`.
11134
11316
  */
11135
11317
  readonly value: _angular_core.ModelSignal<string>;
11136
- readonly orientation: _angular_core.InputSignal<"horizontal" | "vertical">;
11318
+ readonly orientation: _angular_core.InputSignal<"vertical" | "horizontal">;
11137
11319
  /**
11138
11320
  * Writing direction. When unset (default `null`), the inherited ambient
11139
11321
  * direction is resolved from the nearest ancestor carrying a `dir` attribute
@@ -11797,9 +11979,18 @@ interface ForTreeContext {
11797
11979
  readonly orientation: Signal<'horizontal' | 'vertical'>;
11798
11980
  readonly dir: Signal<WritingDirection>;
11799
11981
  readonly selectionFollowsFocus: Signal<boolean>;
11982
+ /** Selection presentation: `'highlight'` (aria-selected) or `'checkbox'` (aria-checked). */
11983
+ readonly selectionMode: Signal<'highlight' | 'checkbox'>;
11984
+ /** Whether cascade selection is enabled (checkbox mode only). */
11985
+ readonly cascade: Signal<boolean>;
11800
11986
  readonly roving: RovingTabindex;
11801
11987
  isExpanded(value: string): boolean;
11802
11988
  isSelected(value: string): boolean;
11989
+ /**
11990
+ * Tri-state check status of a node in checkbox mode: `'true'` / `'false'`, or
11991
+ * `'mixed'` for a cascade parent with some-but-not-all descendants checked.
11992
+ */
11993
+ checkState(value: string): 'true' | 'false' | 'mixed';
11803
11994
  /** Open or close a node, mutating the `expanded` array immutably. */
11804
11995
  setExpanded(value: string, open: boolean): void;
11805
11996
  /** Single mode replaces the selection; multi mode toggles the value. */
@@ -11872,6 +12063,10 @@ interface ForTreeItemContext {
11872
12063
  readonly level: Signal<number>;
11873
12064
  readonly expanded: Signal<boolean>;
11874
12065
  readonly expandable: Signal<boolean>;
12066
+ /** Whether this node is in the root's selection set (its `aria-checked` / `aria-selected` state). */
12067
+ readonly selected: Signal<boolean>;
12068
+ /** Tri-state checkbox status of this node (`'true'` / `'false'` / `'mixed'`). */
12069
+ readonly checkState: Signal<'true' | 'false' | 'mixed'>;
11875
12070
  /** Register a toggle. Presence makes the item expandable (D4). Returns an unregister fn. */
11876
12071
  registerToggle(): () => void;
11877
12072
  /** Set (or clear, on collapse) the nested `[forTreeGroup]` container. */
@@ -11932,7 +12127,27 @@ declare class ForTree implements ForTreeContext, ForTreeContainerContext {
11932
12127
  /** Disables the whole tree: nodes are not selectable and report `aria-disabled`. */
11933
12128
  readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
11934
12129
  /** Navigation axis. `'vertical'` (default) uses ArrowUp/Down for movement. */
11935
- readonly orientation: _angular_core.InputSignal<"horizontal" | "vertical">;
12130
+ readonly orientation: _angular_core.InputSignal<"vertical" | "horizontal">;
12131
+ /**
12132
+ * Selection presentation. `'highlight'` (default) keeps the `aria-selected`
12133
+ * contract; `'checkbox'` switches each `treeitem` to `aria-checked` and is
12134
+ * inherently multi-select (each node toggles independently).
12135
+ */
12136
+ readonly selectionMode: _angular_core.InputSignal<"checkbox" | "highlight">;
12137
+ /**
12138
+ * Enables cascade selection in `selectionMode="checkbox"`: checking or
12139
+ * unchecking a node propagates to all its descendants, and a parent derives
12140
+ * `aria-checked="mixed"` when only some descendants are checked. Ignored in
12141
+ * `'highlight'` mode. Requires {@link ForTree.descendantsOf}. Default `false`.
12142
+ */
12143
+ readonly cascade: _angular_core.InputSignalWithTransform<boolean, unknown>;
12144
+ /**
12145
+ * Returns the selectable descendant values of a node (excluding the node
12146
+ * itself), used to cascade selection and derive `'mixed'` across collapsed —
12147
+ * possibly unmounted — subtrees. **Required** when {@link ForTree.cascade} is
12148
+ * `true`; the tree throws a `[forty-cdk/tree]` error otherwise.
12149
+ */
12150
+ readonly descendantsOf: _angular_core.InputSignal<((value: string) => readonly string[]) | undefined>;
11936
12151
  /**
11937
12152
  * Manual `aria-label` for the tree. Use this when no visible label element
11938
12153
  * exists; otherwise prefer pointing `aria-labelledby` at one. A `null`
@@ -11967,6 +12182,13 @@ declare class ForTree implements ForTreeContext, ForTreeContainerContext {
11967
12182
  constructor();
11968
12183
  isExpanded(value: string): boolean;
11969
12184
  isSelected(value: string): boolean;
12185
+ /**
12186
+ * Tri-state check status of a node in `selectionMode="checkbox"`. Without
12187
+ * cascade (or in `'highlight'` mode) returns `'true'` / `'false'` by direct
12188
+ * membership. With cascade a parent returns `'true'` when all its descendants
12189
+ * are checked, `'false'` when none are, and `'mixed'` otherwise.
12190
+ */
12191
+ checkState(value: string): 'true' | 'false' | 'mixed';
11970
12192
  setExpanded(value: string, open: boolean): void;
11971
12193
  select(value: string): void;
11972
12194
  navigate(currentItem: HTMLElement, action: ListNavigationAction): void;
@@ -11982,7 +12204,7 @@ declare class ForTree implements ForTreeContext, ForTreeContainerContext {
11982
12204
  unregisterItem(handle: ForTreeItemHandle): void;
11983
12205
  indexOfHost(el: HTMLElement): number;
11984
12206
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ForTree, never>;
11985
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForTree, "[forTree]", ["forTree"], { "value": { "alias": "value"; "required": false; "isSignal": true; }; "expanded": { "alias": "expanded"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "_dirInput": { "alias": "dir"; "required": false; "isSignal": true; }; "selectionFollowsFocus": { "alias": "selectionFollowsFocus"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "expanded": "expandedChange"; }, never, never, true, never>;
12207
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForTree, "[forTree]", ["forTree"], { "value": { "alias": "value"; "required": false; "isSignal": true; }; "expanded": { "alias": "expanded"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; "selectionMode": { "alias": "selectionMode"; "required": false; "isSignal": true; }; "cascade": { "alias": "cascade"; "required": false; "isSignal": true; }; "descendantsOf": { "alias": "descendantsOf"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "_dirInput": { "alias": "dir"; "required": false; "isSignal": true; }; "selectionFollowsFocus": { "alias": "selectionFollowsFocus"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "expanded": "expandedChange"; }, never, never, true, never>;
11986
12208
  }
11987
12209
 
11988
12210
  /**
@@ -12010,6 +12232,14 @@ declare class ForTreeItem implements ForTreeItemContext {
12010
12232
  readonly expandable: _angular_core.Signal<boolean>;
12011
12233
  readonly expanded: _angular_core.Signal<boolean>;
12012
12234
  readonly selected: _angular_core.Signal<boolean>;
12235
+ /** True when the root tree is in `'checkbox'` selection mode. */
12236
+ readonly checkboxMode: _angular_core.Signal<boolean>;
12237
+ /**
12238
+ * Tri-state checkbox status of this node — `'true'` / `'false'`, or `'mixed'`
12239
+ * when cascade is on and only some descendants are checked. Drives the
12240
+ * checkbox anatomy; meaningful only in `selectionMode="checkbox"`.
12241
+ */
12242
+ readonly checkState: _angular_core.Signal<"true" | "false" | "mixed">;
12013
12243
  /** True when this node is the roving-tabindex active candidate. */
12014
12244
  readonly highlighted: _angular_core.Signal<boolean>;
12015
12245
  readonly effectiveDisabled: _angular_core.Signal<boolean>;
@@ -12113,6 +12343,64 @@ declare const FOR_TREE_DEFAULTS: _angular_core.InjectionToken<ForTreeDefaults>;
12113
12343
  */
12114
12344
  declare function provideForTreeDefaults(defaults?: Partial<ForTreeDefaults>): Provider[];
12115
12345
 
12346
+ /**
12347
+ * Visible checkbox surface inside a `ForTreeItem`, used in the tree's
12348
+ * `selectionMode="checkbox"` anatomy. Decorative for assistive tech — the
12349
+ * enclosing `treeitem` owns `aria-checked`, so this element is `aria-hidden`
12350
+ * and not separately focusable. Reflects `data-state="checked" | "unchecked" |
12351
+ * "indeterminate"` for styling. Clicking it toggles the node's selection and
12352
+ * moves roving focus to the node; place a `[forTreeItemCheckboxIndicator]`
12353
+ * inside for the glyph.
12354
+ */
12355
+ declare class ForTreeItemCheckbox {
12356
+ protected readonly item: forty_cdk.ForTreeItemContext;
12357
+ protected readonly dataState: _angular_core.Signal<"checked" | "unchecked" | "indeterminate">;
12358
+ protected onClick(event: MouseEvent): void;
12359
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ForTreeItemCheckbox, never>;
12360
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForTreeItemCheckbox, "[forTreeItemCheckbox]", ["forTreeItemCheckbox"], {}, {}, never, never, true, never>;
12361
+ }
12362
+
12363
+ /**
12364
+ * Optional glyph slot inside a `[forTreeItemCheckbox]`. Shows while the node
12365
+ * is checked or indeterminate (`data-state="checked"` or `"indeterminate"`);
12366
+ * self-hides only when fully unchecked. Hidden state is enforced with an inline
12367
+ * `display: none` (which beats any author `display` rule applied via a class)
12368
+ * in addition to the `hidden` attribute that removes it from the a11y tree.
12369
+ * Mirrors `data-state="checked" | "unchecked" | "indeterminate"` from the item.
12370
+ */
12371
+ declare class ForTreeItemCheckboxIndicator {
12372
+ protected readonly item: forty_cdk.ForTreeItemContext;
12373
+ protected readonly shown: _angular_core.Signal<boolean>;
12374
+ protected readonly dataState: _angular_core.Signal<"checked" | "unchecked" | "indeterminate">;
12375
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ForTreeItemCheckboxIndicator, never>;
12376
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForTreeItemCheckboxIndicator, "[forTreeItemCheckboxIndicator]", ["forTreeItemCheckboxIndicator"], {}, {}, never, never, true, never>;
12377
+ }
12378
+
12379
+ /**
12380
+ * Returns the de-duplicated ancestor values that must be added to a tree's
12381
+ * `expanded` set so every matched node becomes visible.
12382
+ *
12383
+ * Pure and headless: filtering stays consumer-owned — the consumer matches its
12384
+ * own data, re-renders the tree, and feeds its hierarchy through `ancestorsOf`.
12385
+ * Merge the result into `[(expanded)]`:
12386
+ *
12387
+ * ```ts
12388
+ * this.expanded.update((open) => [
12389
+ * ...new Set([...open, ...expandToReveal(matches, this.ancestorsOf)]),
12390
+ * ]);
12391
+ * ```
12392
+ *
12393
+ * The matched nodes themselves are not returned — a node is made visible by
12394
+ * expanding its ancestors, so a root-level match contributes nothing.
12395
+ *
12396
+ * @param matches The values of the nodes that matched the current filter.
12397
+ * @param ancestorsOf Returns a node's ancestor values (the node itself excluded);
12398
+ * order is irrelevant and a root node returns an empty list.
12399
+ * @returns The unique ancestor values to expand. Empty when `matches` is empty
12400
+ * or every match is a root.
12401
+ */
12402
+ declare function expandToReveal(matches: Iterable<string>, ancestorsOf: (value: string) => readonly string[]): readonly string[];
12403
+
12116
12404
  /**
12117
12405
  * The coordination surface a `[forNumberInput]` exposes to its siblings. The
12118
12406
  * auxiliary `[forNumberInputIncrement]` / `[forNumberInputDecrement]` buttons
@@ -12884,6 +13172,8 @@ declare function injectDateAdapter<D>(piece: string): DateAdapter<D>;
12884
13172
  */
12885
13173
  declare function assertTimeCapable<D>(adapter: DateAdapter<D>, piece: string): TimeCapableDateAdapter<D>;
12886
13174
 
13175
+ /** The active display mode of a `ForCalendar`. */
13176
+ type CalendarView = 'day' | 'month' | 'year';
12887
13177
  /**
12888
13178
  * An inclusive date range where `start <= end` (day-granular). Used by
12889
13179
  * `ForCalendar` and `ForDatePicker` in `selectionMode="range"`.
@@ -12896,6 +13186,56 @@ interface CalendarDateRange<D> {
12896
13186
  /** Inclusive end of the range (`>= start`). */
12897
13187
  readonly end: D;
12898
13188
  }
13189
+ /** A selectable year in the year picker grid. */
13190
+ interface CalendarYearOption {
13191
+ /** The full year (e.g. `2026`). */
13192
+ readonly value: number;
13193
+ /** Whether the entire year falls outside `[min, max]`. */
13194
+ readonly disabled: boolean;
13195
+ }
13196
+ /** A row of three months in the month picker grid. */
13197
+ interface CalendarMonthRow {
13198
+ /** Stable key for `@for` tracking. */
13199
+ readonly key: string;
13200
+ /** The (up to three) month options in this row. */
13201
+ readonly months: readonly CalendarMonthOption[];
13202
+ }
13203
+ /** A row of three years in the year picker grid. */
13204
+ interface CalendarYearRow {
13205
+ /** Stable key for `@for` tracking. */
13206
+ readonly key: string;
13207
+ /** The (up to three) year options in this row. */
13208
+ readonly years: readonly CalendarYearOption[];
13209
+ }
13210
+ /**
13211
+ * Handle a `ForCalendarMonthCell` registers with the root so the root can move
13212
+ * DOM focus to the correct cell during keyboard navigation and view switches.
13213
+ */
13214
+ interface ForCalendarMonthCellHandle {
13215
+ /** The `role="gridcell"` host element. */
13216
+ readonly host: HTMLElement;
13217
+ /** The month this cell represents, **1-12**. */
13218
+ readonly month: Signal<number>;
13219
+ }
13220
+ /**
13221
+ * Handle a `ForCalendarYearCell` registers with the root so the root can move
13222
+ * DOM focus to the correct cell during keyboard navigation and view switches.
13223
+ */
13224
+ interface ForCalendarYearCellHandle {
13225
+ /** The `role="gridcell"` host element. */
13226
+ readonly host: HTMLElement;
13227
+ /** The year this cell represents. */
13228
+ readonly year: Signal<number>;
13229
+ }
13230
+ /** A selectable month in the visible year, for building a month dropdown. */
13231
+ interface CalendarMonthOption {
13232
+ /** Month number, **1-12**. */
13233
+ readonly value: number;
13234
+ /** Localized month name via the adapter (e.g. `"June"`). */
13235
+ readonly label: string;
13236
+ /** Whether the whole month falls outside `[min, max]`. */
13237
+ readonly disabled: boolean;
13238
+ }
12899
13239
  /** A weekday column header in the calendar grid. */
12900
13240
  interface CalendarWeekday {
12901
13241
  /** Stable key for `@for` tracking (the **0-6** weekday index as a string). */
@@ -12988,6 +13328,66 @@ interface ForCalendarContext<D> {
12988
13328
  readonly isPreviousMonthDisabled: Signal<boolean>;
12989
13329
  /** Whether the next-month button should be disabled (bounded by `max`). */
12990
13330
  readonly isNextMonthDisabled: Signal<boolean>;
13331
+ /** The visible month's full year (e.g. `2026`). */
13332
+ readonly visibleYear: Signal<number>;
13333
+ /** The visible month, **1-12**. */
13334
+ readonly visibleMonthNumber: Signal<number>;
13335
+ /** Twelve localized, bounds-aware month options for the visible year. */
13336
+ readonly monthOptions: Signal<readonly CalendarMonthOption[]>;
13337
+ /** Set the visible month to (`year`, `month`) without selecting. `month` is **1-12**. */
13338
+ goTo(year: number, month: number): void;
13339
+ /** Set the visible month within the current visible year. `month` is **1-12**. */
13340
+ goToMonth(month: number): void;
13341
+ /** Set the visible year, keeping the current visible month. */
13342
+ goToYear(year: number): void;
13343
+ /** Whether every day of `month` (**1-12**) in the visible year is out of `[min, max]`. */
13344
+ isMonthDisabled(month: number): boolean;
13345
+ /** Whether every day of `year` is out of `[min, max]`. */
13346
+ isYearDisabled(year: number): boolean;
13347
+ /** Active calendar view; `'day'` (default), `'month'`, or `'year'`. */
13348
+ readonly view: Signal<CalendarView>;
13349
+ /** Number of years the year picker shows as an aligned block. Default `12`. */
13350
+ readonly yearBlockSize: Signal<number>;
13351
+ /** Rows of the month picker grid (3 columns) for the visible year. */
13352
+ readonly monthRows: Signal<readonly CalendarMonthRow[]>;
13353
+ /** Rows of the year picker grid (3 columns) for the aligned block containing the visible year. */
13354
+ readonly yearRows: Signal<readonly CalendarYearRow[]>;
13355
+ /** Label for the active view shown on the view-trigger button. */
13356
+ readonly viewTriggerLabel: Signal<string>;
13357
+ /** Whether the prev button should be disabled for the active view. */
13358
+ readonly isPreviousDisabled: Signal<boolean>;
13359
+ /** Whether the next button should be disabled for the active view. */
13360
+ readonly isNextDisabled: Signal<boolean>;
13361
+ /** Cycle the view one step coarser: `day → month → year`, clamped at `'year'`. */
13362
+ cycleView(): void;
13363
+ /** Drill into a month (1-12): navigate to it and switch to day view. No-op when disabled/read-only/out of bounds. */
13364
+ selectMonth(month: number): void;
13365
+ /** Drill into a year: navigate to it and switch to month view. No-op when disabled/read-only/out of bounds. */
13366
+ selectYear(year: number): void;
13367
+ /** Page backward by one month / year / block depending on the active view. */
13368
+ pagePrevious(): void;
13369
+ /** Page forward by one month / year / block depending on the active view. */
13370
+ pageNext(): void;
13371
+ /** Whether `month` (1-12) in the visible year is the selected date's month. */
13372
+ isMonthSelected(month: number): boolean;
13373
+ /** Whether `month` (1-12) is today's month in the visible year. */
13374
+ isMonthToday(month: number): boolean;
13375
+ /** Whether `month` (1-12) is the roving-tabindex focused month. */
13376
+ isMonthFocused(month: number): boolean;
13377
+ /** Whether `year` is the selected date's year. */
13378
+ isYearSelected(year: number): boolean;
13379
+ /** Whether `year` is today's year. */
13380
+ isYearToday(year: number): boolean;
13381
+ /** Whether `year` is the roving-tabindex focused year. */
13382
+ isYearFocused(year: number): boolean;
13383
+ /** Handle a keydown originating on a month cell. */
13384
+ handleMonthCellKeydown(event: KeyboardEvent, month: number): void;
13385
+ /** Handle a keydown originating on a year cell. */
13386
+ handleYearCellKeydown(event: KeyboardEvent, year: number): void;
13387
+ registerMonthCell(handle: ForCalendarMonthCellHandle): void;
13388
+ unregisterMonthCell(handle: ForCalendarMonthCellHandle): void;
13389
+ registerYearCell(handle: ForCalendarYearCellHandle): void;
13390
+ unregisterYearCell(handle: ForCalendarYearCellHandle): void;
12991
13391
  /** Whether `date` is the currently selected value. */
12992
13392
  isSelected(date: D): boolean;
12993
13393
  /** Whether `date` is today. */
@@ -13143,6 +13543,18 @@ declare class ForCalendar<D> implements ForCalendarContext<D> {
13143
13543
  * flow and exposes the result through `[(range)]`.
13144
13544
  */
13145
13545
  readonly selectionMode: _angular_core.InputSignal<"single" | "range">;
13546
+ /**
13547
+ * Active calendar view. `'day'` (default) shows the date grid; `'month'` and
13548
+ * `'year'` show the month / year picker grids. Two-way bindable; the `model()`
13549
+ * change emitter (`(viewChange)`) fires only when the calendar itself cycles
13550
+ * or drills the view, never on consumer writes via `[(view)]`.
13551
+ */
13552
+ readonly view: _angular_core.ModelSignal<CalendarView>;
13553
+ /**
13554
+ * Number of years the year view shows, as an aligned block containing the
13555
+ * visible year. Default `12`.
13556
+ */
13557
+ readonly yearBlockSize: _angular_core.InputSignalWithTransform<number, unknown>;
13146
13558
  /**
13147
13559
  * Two-way bindable committed date range, or `null`. Only used when
13148
13560
  * `selectionMode="range"`. The `model()` change emitter (`(rangeChange)`)
@@ -13189,10 +13601,44 @@ declare class ForCalendar<D> implements ForCalendarContext<D> {
13189
13601
  */
13190
13602
  adoptHeadingId(el: HTMLElement): void;
13191
13603
  readonly visibleMonthLabel: _angular_core.Signal<string>;
13604
+ /** The visible month's full year (e.g. `2026`). */
13605
+ readonly visibleYear: _angular_core.Signal<number>;
13606
+ /** The visible month, **1-12**. */
13607
+ readonly visibleMonthNumber: _angular_core.Signal<number>;
13608
+ /**
13609
+ * Twelve entries for the visible year — each a localized month name plus
13610
+ * whether the whole month falls outside `[min, max]`. Tracks {@link visibleYear}.
13611
+ * Build native `<select>` month dropdowns from it.
13612
+ */
13613
+ readonly monthOptions: _angular_core.Signal<readonly CalendarMonthOption[]>;
13614
+ /** Rows of the month picker grid (3 columns) for the visible year. */
13615
+ readonly monthRows: _angular_core.Signal<readonly CalendarMonthRow[]>;
13616
+ /** Rows of the year picker grid (3 columns) for the aligned block containing the visible year. */
13617
+ readonly yearRows: _angular_core.Signal<readonly CalendarYearRow[]>;
13618
+ /** Label for the view trigger / heading, reflecting the active view. */
13619
+ readonly viewTriggerLabel: _angular_core.Signal<string>;
13620
+ readonly isPreviousDisabled: _angular_core.Signal<boolean>;
13621
+ readonly isNextDisabled: _angular_core.Signal<boolean>;
13192
13622
  readonly weekDays: _angular_core.Signal<readonly CalendarWeekday[]>;
13193
13623
  readonly weeks: _angular_core.Signal<readonly CalendarWeek<D>[]>;
13194
13624
  readonly isPreviousMonthDisabled: _angular_core.Signal<boolean>;
13195
13625
  readonly isNextMonthDisabled: _angular_core.Signal<boolean>;
13626
+ /**
13627
+ * Whether every day of `month` (**1-12**) in the visible year falls outside
13628
+ * `[min, max]`. Use it to disable a month in a custom dropdown.
13629
+ */
13630
+ isMonthDisabled(month: number): boolean;
13631
+ /**
13632
+ * Whether every day of `year` falls outside `[min, max]`. Use it to disable a
13633
+ * year in a custom dropdown.
13634
+ */
13635
+ isYearDisabled(year: number): boolean;
13636
+ isMonthSelected(month: number): boolean;
13637
+ isMonthToday(month: number): boolean;
13638
+ isMonthFocused(month: number): boolean;
13639
+ isYearSelected(year: number): boolean;
13640
+ isYearToday(year: number): boolean;
13641
+ isYearFocused(year: number): boolean;
13196
13642
  isSelected(date: D): boolean;
13197
13643
  isRangeStart(date: D): boolean;
13198
13644
  isRangeEnd(date: D): boolean;
@@ -13206,20 +13652,58 @@ declare class ForCalendar<D> implements ForCalendarContext<D> {
13206
13652
  getDateLabel(date: D): string;
13207
13653
  selectDate(date: D): void;
13208
13654
  pageMonths(delta: number): void;
13655
+ /**
13656
+ * Set the visible month to (`year`, `month`) without selecting a date.
13657
+ * `month` is **1-12**. Re-applies the user's intended day-of-month (clamped to
13658
+ * the target month's length), clamps the result into `[min, max]`, and
13659
+ * announces the new period politely when the visible month changes. Keeps DOM
13660
+ * focus on the caller — it does not move focus into the grid. A no-op while the
13661
+ * calendar is disabled.
13662
+ */
13663
+ goTo(year: number, month: number): void;
13664
+ /** Set the visible month within the current visible year. `month` is **1-12**. */
13665
+ goToMonth(month: number): void;
13666
+ /** Set the visible year, keeping the current visible month. */
13667
+ goToYear(year: number): void;
13209
13668
  handleCellKeydown(event: KeyboardEvent, fromDate: D): void;
13669
+ /**
13670
+ * Cycle the view one step coarser: `day → month → year`, clamped at `'year'`.
13671
+ * No-op when the whole calendar is disabled.
13672
+ */
13673
+ cycleView(): void;
13674
+ /**
13675
+ * Select a whole month (1-12): navigate to it within the current visible year
13676
+ * and switch the view to `'day'`. No-op when the calendar is disabled /
13677
+ * read-only or the month is out of `[min, max]`.
13678
+ */
13679
+ selectMonth(month: number): void;
13680
+ /**
13681
+ * Select a whole year: navigate to it and switch the view to `'month'`. No-op
13682
+ * when the calendar is disabled / read-only or the year is out of `[min, max]`.
13683
+ */
13684
+ selectYear(year: number): void;
13685
+ /** Page backward by one month / year / block depending on the active view. */
13686
+ pagePrevious(): void;
13687
+ /** Page forward by one month / year / block depending on the active view. */
13688
+ pageNext(): void;
13210
13689
  /**
13211
13690
  * Move DOM focus to the roving cell — the gridcell carrying the tab stop,
13212
- * i.e. the one matching {@link focusedDate}. Returns `false` when no matching
13213
- * cell is currently rendered (empty grid, or the focused date paged out), so
13214
- * an overlay host wrapping the calendar can fall back to its own focus logic.
13215
- * The cell already exists when this runs, so it focuses synchronously without
13216
- * waiting for a render.
13691
+ * i.e. the one matching {@link focusedDate} (day view) or the highlighted
13692
+ * month / year cell (month / year view). Returns `false` when no matching
13693
+ * cell is currently rendered, so an overlay host wrapping the calendar can
13694
+ * fall back to its own focus logic.
13217
13695
  */
13218
13696
  focusActiveCell(): boolean;
13219
13697
  registerCell(handle: ForCalendarCellHandle<D>): void;
13220
13698
  unregisterCell(handle: ForCalendarCellHandle<D>): void;
13699
+ handleMonthCellKeydown(event: KeyboardEvent, fromMonth: number): void;
13700
+ handleYearCellKeydown(event: KeyboardEvent, fromYear: number): void;
13701
+ registerMonthCell(handle: ForCalendarMonthCellHandle): void;
13702
+ unregisterMonthCell(handle: ForCalendarMonthCellHandle): void;
13703
+ registerYearCell(handle: ForCalendarYearCellHandle): void;
13704
+ unregisterYearCell(handle: ForCalendarYearCellHandle): void;
13221
13705
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ForCalendar<any>, never>;
13222
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForCalendar<any>, "[forCalendar]", ["forCalendar"], { "value": { "alias": "value"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "isDateUnavailable": { "alias": "isDateUnavailable"; "required": false; "isSignal": true; }; "dateLabel": { "alias": "dateLabel"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "selectionMode": { "alias": "selectionMode"; "required": false; "isSignal": true; }; "range": { "alias": "range"; "required": false; "isSignal": true; }; "minRangeLength": { "alias": "minRangeLength"; "required": false; "isSignal": true; }; "maxRangeLength": { "alias": "maxRangeLength"; "required": false; "isSignal": true; }; "firstDayOfWeek": { "alias": "firstDayOfWeek"; "required": false; "isSignal": true; }; "_dirInput": { "alias": "dir"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "range": "rangeChange"; }, never, never, true, never>;
13706
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForCalendar<any>, "[forCalendar]", ["forCalendar"], { "value": { "alias": "value"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "isDateUnavailable": { "alias": "isDateUnavailable"; "required": false; "isSignal": true; }; "dateLabel": { "alias": "dateLabel"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "selectionMode": { "alias": "selectionMode"; "required": false; "isSignal": true; }; "view": { "alias": "view"; "required": false; "isSignal": true; }; "yearBlockSize": { "alias": "yearBlockSize"; "required": false; "isSignal": true; }; "range": { "alias": "range"; "required": false; "isSignal": true; }; "minRangeLength": { "alias": "minRangeLength"; "required": false; "isSignal": true; }; "maxRangeLength": { "alias": "maxRangeLength"; "required": false; "isSignal": true; }; "firstDayOfWeek": { "alias": "firstDayOfWeek"; "required": false; "isSignal": true; }; "_dirInput": { "alias": "dir"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "view": "viewChange"; "range": "rangeChange"; }, never, never, true, never>;
13223
13707
  }
13224
13708
 
13225
13709
  /**
@@ -13320,13 +13804,14 @@ declare class ForCalendarHeading {
13320
13804
  }
13321
13805
 
13322
13806
  /**
13323
- * Navigates the calendar to the previous month. Apply on a `<button>`. Keeps
13324
- * DOM focus on itself while paging; the `aria-live` heading announces the new
13325
- * month. Auto-disabled when paging back would leave the `min` bound, or when
13326
- * the whole calendar is disabled.
13807
+ * Pages the calendar backward. In `day` view pages by one month; in `month` view
13808
+ * pages by one year; in `year` view pages by one block. Apply on a `<button>`.
13809
+ * Keeps DOM focus on itself while paging; the `aria-live` heading announces the
13810
+ * new period. Auto-disabled at the view's bound, or when the whole calendar is
13811
+ * disabled.
13327
13812
  *
13328
13813
  * Provide an accessible name via the `[ariaLabel]` input (e.g.
13329
- * `[ariaLabel]="'Previous month'"`).
13814
+ * `[ariaLabel]="'Previous'"`).
13330
13815
  */
13331
13816
  declare class ForCalendarPrevButton {
13332
13817
  protected readonly ctx: forty_cdk.ForCalendarContext<unknown>;
@@ -13339,13 +13824,14 @@ declare class ForCalendarPrevButton {
13339
13824
  }
13340
13825
 
13341
13826
  /**
13342
- * Navigates the calendar to the next month. Apply on a `<button>`. Keeps DOM
13343
- * focus on itself while paging; the `aria-live` heading announces the new
13344
- * month. Auto-disabled when paging forward would leave the `max` bound, or
13345
- * when the whole calendar is disabled.
13827
+ * Pages the calendar forward. In `day` view pages by one month; in `month` view
13828
+ * pages by one year; in `year` view pages by one block. Apply on a `<button>`.
13829
+ * Keeps DOM focus on itself while paging; the `aria-live` heading announces the
13830
+ * new period. Auto-disabled at the view's bound, or when the whole calendar is
13831
+ * disabled.
13346
13832
  *
13347
13833
  * Provide an accessible name via the `[ariaLabel]` input (e.g.
13348
- * `[ariaLabel]="'Next month'"`).
13834
+ * `[ariaLabel]="'Next'"`).
13349
13835
  */
13350
13836
  declare class ForCalendarNextButton {
13351
13837
  protected readonly ctx: forty_cdk.ForCalendarContext<unknown>;
@@ -13357,6 +13843,172 @@ declare class ForCalendarNextButton {
13357
13843
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForCalendarNextButton, "[forCalendarNextButton]", ["forCalendarNextButton"], { "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
13358
13844
  }
13359
13845
 
13846
+ /**
13847
+ * The month picker grid (`role="grid"`). Apply on a `<table>`. Labelled by the
13848
+ * `[forCalendarHeading]` via `aria-labelledby`. Exposes `rows()` — iterate
13849
+ * rows then cells, binding each cell's `month` to `[forCalendarMonthCell]`.
13850
+ *
13851
+ * Shows the 12 months of the visible year in 3-column rows. Used when
13852
+ * `view === 'month'`.
13853
+ */
13854
+ declare class ForCalendarMonthGrid {
13855
+ protected readonly ctx: forty_cdk.ForCalendarContext<unknown>;
13856
+ /** Rows of the month picker grid (3 columns) for the visible year. */
13857
+ readonly rows: _angular_core.Signal<readonly forty_cdk.CalendarMonthRow[]>;
13858
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ForCalendarMonthGrid, never>;
13859
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForCalendarMonthGrid, "[forCalendarMonthGrid]", ["forCalendarMonthGrid"], {}, {}, never, never, true, never>;
13860
+ }
13861
+
13862
+ /**
13863
+ * A single month cell (`role="gridcell"`) in the month picker grid. Apply on
13864
+ * the `<td>` for each month and bind `[month]` to the month number (1-12) from
13865
+ * `rows()`.
13866
+ *
13867
+ * Carries the roving tab stop (`tabindex="0"` on the focused month), reflects
13868
+ * `aria-selected` (always emitted), `data-today`, `data-selected`,
13869
+ * `data-highlighted`, `data-disabled`. Click and `Enter` / `Space` drill down
13870
+ * to the day view for that month; arrow / paging keys move the roving cell.
13871
+ */
13872
+ declare class ForCalendarMonthCell {
13873
+ #private;
13874
+ protected readonly ctx: forty_cdk.ForCalendarContext<unknown>;
13875
+ /** The month this cell represents, **1-12**. */
13876
+ readonly month: _angular_core.InputSignal<number>;
13877
+ protected readonly selected: _angular_core.Signal<boolean>;
13878
+ protected readonly today: _angular_core.Signal<boolean>;
13879
+ protected readonly focused: _angular_core.Signal<boolean>;
13880
+ protected readonly disabled: _angular_core.Signal<boolean>;
13881
+ constructor();
13882
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ForCalendarMonthCell, never>;
13883
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForCalendarMonthCell, "[forCalendarMonthCell]", ["forCalendarMonthCell"], { "month": { "alias": "month"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
13884
+ }
13885
+
13886
+ /**
13887
+ * The year picker grid (`role="grid"`). Apply on a `<table>`. Labelled by the
13888
+ * `[forCalendarHeading]` via `aria-labelledby`. Exposes `rows()` — iterate
13889
+ * rows then cells, binding each cell's `year` to `[forCalendarYearCell]`.
13890
+ *
13891
+ * Shows an aligned block of `yearBlockSize` years in 3-column rows. Used when
13892
+ * `view === 'year'`.
13893
+ */
13894
+ declare class ForCalendarYearGrid {
13895
+ protected readonly ctx: forty_cdk.ForCalendarContext<unknown>;
13896
+ /** Rows of the year picker grid (3 columns) for the aligned block containing the visible year. */
13897
+ readonly rows: _angular_core.Signal<readonly forty_cdk.CalendarYearRow[]>;
13898
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ForCalendarYearGrid, never>;
13899
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForCalendarYearGrid, "[forCalendarYearGrid]", ["forCalendarYearGrid"], {}, {}, never, never, true, never>;
13900
+ }
13901
+
13902
+ /**
13903
+ * A single year cell (`role="gridcell"`) in the year picker grid. Apply on the
13904
+ * `<td>` for each year and bind `[year]` to the year number from `rows()`.
13905
+ *
13906
+ * Carries the roving tab stop (`tabindex="0"` on the focused year), reflects
13907
+ * `aria-selected` (always emitted), `data-today`, `data-selected`,
13908
+ * `data-highlighted`, `data-disabled`. Click and `Enter` / `Space` drill down
13909
+ * to the month view for that year; arrow / paging keys move the roving cell.
13910
+ */
13911
+ declare class ForCalendarYearCell {
13912
+ #private;
13913
+ protected readonly ctx: forty_cdk.ForCalendarContext<unknown>;
13914
+ /** The year this cell represents. */
13915
+ readonly year: _angular_core.InputSignal<number>;
13916
+ protected readonly selected: _angular_core.Signal<boolean>;
13917
+ protected readonly today: _angular_core.Signal<boolean>;
13918
+ protected readonly focused: _angular_core.Signal<boolean>;
13919
+ protected readonly disabled: _angular_core.Signal<boolean>;
13920
+ constructor();
13921
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ForCalendarYearCell, never>;
13922
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForCalendarYearCell, "[forCalendarYearCell]", ["forCalendarYearCell"], { "year": { "alias": "year"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
13923
+ }
13924
+
13925
+ /**
13926
+ * The view-cycle button in the calendar header. Apply on a `<button>`. Each
13927
+ * click advances the view one step coarser (`day → month → year`), clamped at
13928
+ * `'year'`. Reflects `data-view` so consumers can style it per view. Disabled
13929
+ * when the whole calendar is disabled.
13930
+ *
13931
+ * Bind the `label` signal to the button text to show the active view label
13932
+ * (e.g. `"June 2026"` in day view, `"2026"` in month view, `"2024 – 2035"` in
13933
+ * year view).
13934
+ */
13935
+ declare class ForCalendarViewTrigger {
13936
+ protected readonly ctx: forty_cdk.ForCalendarContext<unknown>;
13937
+ /** Label for the active view, e.g. `"June 2026"` / `"2026"` / `"2016 – 2027"`. */
13938
+ readonly label: _angular_core.Signal<string>;
13939
+ constructor();
13940
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ForCalendarViewTrigger, never>;
13941
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForCalendarViewTrigger, "[forCalendarViewTrigger]", ["forCalendarViewTrigger"], {}, {}, never, never, true, never>;
13942
+ }
13943
+
13944
+ /**
13945
+ * Wires a native `<select>` to a `ForCalendar`'s month navigation. Apply on a
13946
+ * `<select>` element inside `[forCalendar]`: the directive keeps the select
13947
+ * showing the visible month and navigates the calendar when the user picks a
13948
+ * different one, without mutating the selected date.
13949
+ *
13950
+ * Render the `<option>` elements yourself from {@link options} so you keep full
13951
+ * control over their markup, labels, and any placeholder:
13952
+ *
13953
+ * ```html
13954
+ * <select forCalendarMonthSelect #m="forCalendarMonthSelect">
13955
+ * @for (opt of m.options(); track opt.value) {
13956
+ * <option [value]="opt.value" [disabled]="opt.disabled">{{ opt.label }}</option>
13957
+ * }
13958
+ * </select>
13959
+ * ```
13960
+ */
13961
+ declare class ForCalendarMonthSelect {
13962
+ protected readonly ctx: forty_cdk.ForCalendarContext<unknown>;
13963
+ /** The twelve localized, bounds-aware month options for the visible year. */
13964
+ readonly options: _angular_core.Signal<readonly forty_cdk.CalendarMonthOption[]>;
13965
+ protected onChange(event: Event): void;
13966
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ForCalendarMonthSelect, never>;
13967
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForCalendarMonthSelect, "select[forCalendarMonthSelect]", ["forCalendarMonthSelect"], {}, {}, never, never, true, never>;
13968
+ }
13969
+
13970
+ /**
13971
+ * Wires a native `<select>` to a `ForCalendar`'s year navigation. Apply on a
13972
+ * `<select>` element inside `[forCalendar]`: the directive keeps the select
13973
+ * showing the visible year and navigates the calendar when the user picks a
13974
+ * different one, without mutating the selected date.
13975
+ *
13976
+ * Render the `<option>` elements yourself from {@link years} so you keep full
13977
+ * control over their markup:
13978
+ *
13979
+ * ```html
13980
+ * <select forCalendarYearSelect #y="forCalendarYearSelect" [minYear]="1900" [maxYear]="2100">
13981
+ * @for (opt of y.years(); track opt.value) {
13982
+ * <option [value]="opt.value" [disabled]="opt.disabled">{{ opt.value }}</option>
13983
+ * }
13984
+ * </select>
13985
+ * ```
13986
+ */
13987
+ declare class ForCalendarYearSelect {
13988
+ protected readonly ctx: forty_cdk.ForCalendarContext<unknown>;
13989
+ /**
13990
+ * Lowest year listed in {@link years}. Defaults to 100 years before the
13991
+ * current year when `null`.
13992
+ */
13993
+ readonly minYear: _angular_core.InputSignal<number | null>;
13994
+ /**
13995
+ * Highest year listed in {@link years}. Defaults to 10 years after the
13996
+ * current year when `null`.
13997
+ */
13998
+ readonly maxYear: _angular_core.InputSignal<number | null>;
13999
+ /**
14000
+ * The selectable years, from {@link minYear} to {@link maxYear} inclusive.
14001
+ * Each entry is `disabled` when the whole year falls outside the calendar's
14002
+ * `[min, max]`. The default window is anchored to the current year (not the
14003
+ * visible year), so navigating far away never drops the current year off the
14004
+ * list.
14005
+ */
14006
+ readonly years: _angular_core.Signal<readonly CalendarYearOption[]>;
14007
+ protected onChange(event: Event): void;
14008
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ForCalendarYearSelect, never>;
14009
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForCalendarYearSelect, "select[forCalendarYearSelect]", ["forCalendarYearSelect"], { "minYear": { "alias": "minYear"; "required": false; "isSignal": true; }; "maxYear": { "alias": "maxYear"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
14010
+ }
14011
+
13360
14012
  /**
13361
14013
  * Defaults inherited by descendant calendars in the surrounding injector
13362
14014
  * scope. Configure with `provideForCalendarDefaults` at the application root
@@ -13920,6 +14572,7 @@ interface ForDatePickerContext {
13920
14572
  readonly collisionPadding: Signal<number>;
13921
14573
  readonly sticky: Signal<'partial' | 'always' | false>;
13922
14574
  readonly hideWhenDetached: Signal<boolean>;
14575
+ readonly clipUntilPositioned: Signal<boolean>;
13923
14576
  readonly triggerId: Signal<string>;
13924
14577
  readonly contentId: Signal<string>;
13925
14578
  /** Accessible name for the dialog surface. Emits no `aria-label` while `null`. */
@@ -14164,6 +14817,14 @@ declare class ForDatePicker<D> extends FormUiControlBase implements FormValueCon
14164
14817
  readonly sticky: _angular_core.InputSignal<false | "partial" | "always">;
14165
14818
  /** When `true`, sets `data-detached=""` while the trigger is scrolled off-screen. */
14166
14819
  readonly hideWhenDetached: _angular_core.InputSignalWithTransform<boolean, unknown>;
14820
+ /**
14821
+ * When `true` (default), the content is clipped until floating-ui resolves
14822
+ * its first position, preventing a flash at the viewport corner. Set to
14823
+ * `false` so a dramatic `animate.enter` plays from its first frame (the
14824
+ * surface may flash briefly at the unresolved position while positioning
14825
+ * computes).
14826
+ */
14827
+ readonly clipUntilPositioned: _angular_core.InputSignalWithTransform<boolean, unknown>;
14167
14828
  /** Accessible name for the dialog surface. Emits no `aria-label` while `null`. */
14168
14829
  readonly ariaLabel: _angular_core.InputSignal<string | null>;
14169
14830
  /**
@@ -14185,7 +14846,7 @@ declare class ForDatePicker<D> extends FormUiControlBase implements FormValueCon
14185
14846
  /** Fires when focus moves outside the surface (and trigger). Vetoable. */
14186
14847
  readonly focusOutside: _angular_core.OutputEmitterRef<VetoableNativeEvent<FocusEvent>>;
14187
14848
  /** Composite event: shares veto state with `pointerDownOutside` / `focusOutside`. */
14188
- readonly interactOutside: _angular_core.OutputEmitterRef<VetoableNativeEvent<FocusEvent | PointerEvent>>;
14849
+ readonly interactOutside: _angular_core.OutputEmitterRef<VetoableNativeEvent<PointerEvent | FocusEvent>>;
14189
14850
  /** Fires just before the surface sends focus into itself on open. Vetoable. */
14190
14851
  readonly autoFocusOnOpen: _angular_core.OutputEmitterRef<VetoableEvent>;
14191
14852
  /** Fires just before focus returns to the trigger on close. Vetoable. */
@@ -14221,7 +14882,7 @@ declare class ForDatePicker<D> extends FormUiControlBase implements FormValueCon
14221
14882
  * `D | null` because `contentChild` erases the generic; a dev-mode assertion
14222
14883
  * guards the same-adapter contract.
14223
14884
  */
14224
- private readonly timeField;
14885
+ private readonly timeSource;
14225
14886
  constructor();
14226
14887
  registerTrigger(el: HTMLElement): void;
14227
14888
  unregisterTrigger(el: HTMLElement): void;
@@ -14254,7 +14915,7 @@ declare class ForDatePicker<D> extends FormUiControlBase implements FormValueCon
14254
14915
  emitAutoFocusOnOpen(): boolean;
14255
14916
  emitAutoFocusOnClose(): boolean;
14256
14917
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ForDatePicker<any>, never>;
14257
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForDatePicker<any>, "[forDatePicker]", ["forDatePicker"], { "value": { "alias": "value"; "required": false; "isSignal": true; }; "open": { "alias": "open"; "required": false; "isSignal": true; }; "minDate": { "alias": "minDate"; "required": false; "isSignal": true; }; "maxDate": { "alias": "maxDate"; "required": false; "isSignal": true; }; "isDateUnavailable": { "alias": "isDateUnavailable"; "required": false; "isSignal": true; }; "closeOnSelect": { "alias": "closeOnSelect"; "required": false; "isSignal": true; }; "granularity": { "alias": "granularity"; "required": false; "isSignal": true; }; "hourCycle": { "alias": "hourCycle"; "required": false; "isSignal": true; }; "modal": { "alias": "modal"; "required": false; "isSignal": true; }; "dismissible": { "alias": "dismissible"; "required": false; "isSignal": true; }; "returnFocus": { "alias": "returnFocus"; "required": false; "isSignal": true; }; "formatOptions": { "alias": "formatOptions"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "selectionMode": { "alias": "selectionMode"; "required": false; "isSignal": true; }; "range": { "alias": "range"; "required": false; "isSignal": true; }; "rangeSeparator": { "alias": "rangeSeparator"; "required": false; "isSignal": true; }; "side": { "alias": "side"; "required": false; "isSignal": true; }; "align": { "alias": "align"; "required": false; "isSignal": true; }; "sideOffset": { "alias": "sideOffset"; "required": false; "isSignal": true; }; "alignOffset": { "alias": "alignOffset"; "required": false; "isSignal": true; }; "avoidCollisions": { "alias": "avoidCollisions"; "required": false; "isSignal": true; }; "collisionPadding": { "alias": "collisionPadding"; "required": false; "isSignal": true; }; "sticky": { "alias": "sticky"; "required": false; "isSignal": true; }; "hideWhenDetached": { "alias": "hideWhenDetached"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "_dirInput": { "alias": "dir"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "open": "openChange"; "range": "rangeChange"; "escapeKeyDown": "escapeKeyDown"; "pointerDownOutside": "pointerDownOutside"; "focusOutside": "focusOutside"; "interactOutside": "interactOutside"; "autoFocusOnOpen": "autoFocusOnOpen"; "autoFocusOnClose": "autoFocusOnClose"; }, ["calendar", "timeField"], never, true, never>;
14918
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForDatePicker<any>, "[forDatePicker]", ["forDatePicker"], { "value": { "alias": "value"; "required": false; "isSignal": true; }; "open": { "alias": "open"; "required": false; "isSignal": true; }; "minDate": { "alias": "minDate"; "required": false; "isSignal": true; }; "maxDate": { "alias": "maxDate"; "required": false; "isSignal": true; }; "isDateUnavailable": { "alias": "isDateUnavailable"; "required": false; "isSignal": true; }; "closeOnSelect": { "alias": "closeOnSelect"; "required": false; "isSignal": true; }; "granularity": { "alias": "granularity"; "required": false; "isSignal": true; }; "hourCycle": { "alias": "hourCycle"; "required": false; "isSignal": true; }; "modal": { "alias": "modal"; "required": false; "isSignal": true; }; "dismissible": { "alias": "dismissible"; "required": false; "isSignal": true; }; "returnFocus": { "alias": "returnFocus"; "required": false; "isSignal": true; }; "formatOptions": { "alias": "formatOptions"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "selectionMode": { "alias": "selectionMode"; "required": false; "isSignal": true; }; "range": { "alias": "range"; "required": false; "isSignal": true; }; "rangeSeparator": { "alias": "rangeSeparator"; "required": false; "isSignal": true; }; "side": { "alias": "side"; "required": false; "isSignal": true; }; "align": { "alias": "align"; "required": false; "isSignal": true; }; "sideOffset": { "alias": "sideOffset"; "required": false; "isSignal": true; }; "alignOffset": { "alias": "alignOffset"; "required": false; "isSignal": true; }; "avoidCollisions": { "alias": "avoidCollisions"; "required": false; "isSignal": true; }; "collisionPadding": { "alias": "collisionPadding"; "required": false; "isSignal": true; }; "sticky": { "alias": "sticky"; "required": false; "isSignal": true; }; "hideWhenDetached": { "alias": "hideWhenDetached"; "required": false; "isSignal": true; }; "clipUntilPositioned": { "alias": "clipUntilPositioned"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "_dirInput": { "alias": "dir"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "open": "openChange"; "range": "rangeChange"; "escapeKeyDown": "escapeKeyDown"; "pointerDownOutside": "pointerDownOutside"; "focusOutside": "focusOutside"; "interactOutside": "interactOutside"; "autoFocusOnOpen": "autoFocusOnOpen"; "autoFocusOnClose": "autoFocusOnClose"; }, ["calendar", "timeSource"], never, true, never>;
14258
14919
  }
14259
14920
 
14260
14921
  /**
@@ -14410,7 +15071,7 @@ declare function provideForDatePickerDefaults(defaults?: Partial<ForDatePickerDe
14410
15071
  * export class MyDatePicker {}
14411
15072
  * ```
14412
15073
  */
14413
- declare const FOR_DATE_PICKER_HOST_DIRECTIVE_INPUTS: readonly ["value", "open", "range", "align", "alignOffset", "ariaLabel", "avoidCollisions", "closeOnSelect", "collisionPadding", "dir", "dirty", "disabled", "dismissible", "errors", "formatOptions", "granularity", "hideWhenDetached", "hourCycle", "invalid", "isDateUnavailable", "maxDate", "minDate", "modal", "name", "pending", "placeholder", "rangeSeparator", "readonly", "required", "returnFocus", "selectionMode", "side", "sideOffset", "sticky", "touched"];
15074
+ declare const FOR_DATE_PICKER_HOST_DIRECTIVE_INPUTS: readonly ["value", "open", "range", "align", "alignOffset", "ariaLabel", "avoidCollisions", "clipUntilPositioned", "closeOnSelect", "collisionPadding", "dir", "dirty", "disabled", "dismissible", "errors", "formatOptions", "granularity", "hideWhenDetached", "hourCycle", "invalid", "isDateUnavailable", "maxDate", "minDate", "modal", "name", "pending", "placeholder", "rangeSeparator", "readonly", "required", "returnFocus", "selectionMode", "side", "sideOffset", "sticky", "touched"];
14414
15075
  /**
14415
15076
  * Exact public names of every `ForDatePicker` output, the Signal Forms `touch` output
14416
15077
  * included. Spread it into the `outputs` array of the same `hostDirectives` entry as
@@ -14716,493 +15377,1992 @@ declare const FOR_TIME_FIELD_HOST_DIRECTIVE_INPUTS: readonly ["value", "ariaLabe
14716
15377
  */
14717
15378
  declare const FOR_TIME_FIELD_HOST_DIRECTIVE_OUTPUTS: readonly ["valueChange", "touchedChange", "touch"];
14718
15379
 
14719
- /** Alignment of the active slide within the viewport. */
14720
- type CarouselAlign = 'start' | 'center' | 'end';
14721
- /** Internal handle for a registered slide. */
14722
- interface ForCarouselSlideHandle {
14723
- readonly host: HTMLElement;
14724
- }
14725
- /** Internal handle for a registered indicator (dot). */
14726
- interface ForCarouselIndicatorHandle {
14727
- readonly host: HTMLElement;
14728
- readonly disabled: Signal<boolean>;
15380
+ /** The time granularity at which the picker operates. */
15381
+ type TimePickerGranularity = 'hour' | 'minute' | 'second';
15382
+ /**
15383
+ * A single generated time slot in the listbox.
15384
+ *
15385
+ * @typeParam D The adapter's date-time type.
15386
+ */
15387
+ interface ForTimeSlot<D> {
15388
+ /** Stable identifier for use as the `track` expression in `@for`. Value is `'slot-' + totalSeconds`. */
15389
+ readonly id: string;
15390
+ /** The date-time value this slot represents, anchored to the consumer's selected date (or a sentinel). */
15391
+ readonly value: D;
15392
+ /** Display label formatted via the active adapter and the resolved format options. */
15393
+ readonly label: string;
15394
+ /** Whether this slot is currently selected, compared at the configured granularity. */
15395
+ readonly selected: boolean;
15396
+ /** Whether this slot is disabled because its time-of-day falls outside `[minTime, maxTime]`. */
15397
+ readonly disabled: boolean;
14729
15398
  }
14730
15399
  /**
14731
- * Coordination contract owned by `ForCarousel`. Slides and indicators
14732
- * register with the root so index lookups, geometry computations, and
14733
- * keyboard navigation are all driven from a single source of truth.
15400
+ * Configuration bag for {@link buildTimeSlots}.
15401
+ *
15402
+ * @typeParam D The adapter's date-time type.
14734
15403
  */
14735
- interface ForCarouselContext {
14736
- readonly activeIndex: Signal<number>;
14737
- readonly orientation: Signal<'horizontal' | 'vertical'>;
14738
- readonly dir: Signal<WritingDirection>;
14739
- readonly loop: Signal<boolean>;
14740
- readonly align: Signal<CarouselAlign>;
14741
- readonly slidesPerView: Signal<number>;
14742
- readonly slideCount: Signal<number>;
14743
- readonly roving: RovingTabindex;
14744
- /** Whether auto-rotation is currently "on" (user intent). Drives the rotation control's label. */
14745
- readonly playing: Signal<boolean>;
14746
- /** Whether the carousel is actively auto-rotating right now (`playing && !paused`). Drives the viewport's `aria-live`. */
14747
- readonly rotating: Signal<boolean>;
14748
- canScrollPrev(): boolean;
14749
- canScrollNext(): boolean;
14750
- scrollPrev(): void;
14751
- scrollNext(): void;
14752
- scrollTo(index: number): void;
14753
- navigate(currentIndicator: HTMLElement, action: ListNavigationAction): void;
14754
- /** Toggle auto-rotation on/off (the explicit, sticky user choice). Called by the rotation control. */
14755
- toggleAutoplay(): void;
14756
- registerSlide(handle: ForCarouselSlideHandle): void;
14757
- unregisterSlide(handle: ForCarouselSlideHandle): void;
14758
- registerIndicator(handle: ForCarouselIndicatorHandle): void;
14759
- unregisterIndicator(handle: ForCarouselIndicatorHandle): void;
14760
- setViewport(el: HTMLElement, id: string): void;
14761
- viewportId(): string | null;
14762
- indexOfSlide(host: HTMLElement): number;
14763
- indexOfIndicator(host: HTMLElement): number;
14764
- isCurrent(index: number): boolean;
14765
- isInView(index: number): boolean;
14766
- isFirstEnabledIndicator(el: HTMLElement): boolean;
14767
- hasCurrentIndicator(): boolean;
15404
+ interface BuildTimeSlotsConfig<D> {
15405
+ readonly adapter: TimeCapableDateAdapter<D>;
15406
+ /** The date-time used as the date anchor for every slot value. Typically `value ?? sentinel`. */
15407
+ readonly anchor: D;
15408
+ /** The currently committed value, or `null` when nothing is selected. */
15409
+ readonly selected: D | null;
15410
+ /** Lower bound (inclusive). Only the time-of-day component is considered. `null` = start-of-day. */
15411
+ readonly minTime: D | null;
15412
+ /** Upper bound (inclusive). Only the time-of-day component is considered. `null` = end-of-day. */
15413
+ readonly maxTime: D | null;
15414
+ /** Slot interval in whole minutes. Clamped to ≥ 1. */
15415
+ readonly step: number;
15416
+ readonly granularity: TimePickerGranularity;
15417
+ /** `Intl.DateTimeFormat` options for the slot label. */
15418
+ readonly formatOptions: Intl.DateTimeFormatOptions;
14768
15419
  }
14769
- /** DI token providing the carousel context to descendant pieces. */
14770
- declare const FOR_CAROUSEL_CONTEXT: InjectionToken<ForCarouselContext>;
14771
-
14772
15420
  /**
14773
- * Root of the Carousel primitive. Owns the active index, slide collection,
14774
- * indicator collection, roving tabindex tracker, and computed geometry CSS
14775
- * variables. Provides the shared context to descendant pieces.
15421
+ * Generates the full-day slot list for a {@link ForTimePicker}.
14776
15422
  *
14777
- * Implements the [WAI-ARIA APG Carousel pattern](https://www.w3.org/WAI/ARIA/apg/patterns/carousel/).
15423
+ * Slots span the full 24-hour day (00:00:00 up to but not past 24:00). Each slot's
15424
+ * `disabled` flag is `true` when its time-of-day falls outside `[minTime, maxTime]`
15425
+ * — slots are never omitted, following the WAI-ARIA option convention for disabled
15426
+ * items.
14778
15427
  *
14779
- * With no `[forCarouselIndicators]` rendered this is a basic carousel driven
14780
- * by prev/next buttons only. Adding an indicator group enables APG picker
14781
- * semantics: roving tabindex, arrow/Home/End navigation with automatic
14782
- * activation.
15428
+ * Pure function: no signals, no DOM, no side effects.
14783
15429
  */
14784
- declare class ForCarousel implements ForCarouselContext {
14785
- #private;
14786
- /**
14787
- * Two-way bindable. The zero-based index of the current (leading) slide.
14788
- * The `model()` change emitter (`(activeIndexChange)`) fires only on internal
14789
- * navigation (prev/next button clicks, indicator arrow-key or click), never
14790
- * on consumer writes via `[(activeIndex)]`.
14791
- */
14792
- readonly activeIndex: _angular_core.ModelSignal<number>;
14793
- /** Scroll axis. `'horizontal'` (default) or `'vertical'`. */
14794
- readonly orientation: _angular_core.InputSignal<"horizontal" | "vertical">;
15430
+ declare function buildTimeSlots<D>(config: BuildTimeSlotsConfig<D>): readonly ForTimeSlot<D>[];
15431
+
15432
+ /**
15433
+ * Why a time picker requested close.
15434
+ */
15435
+ type ForTimePickerCloseReason = 'escape' | 'pointerDownOutside' | 'focusOutside' | 'select' | 'tab' | 'programmatic';
15436
+ /**
15437
+ * Where focus lands when the listbox opens.
15438
+ * `'selected'` snaps to the selected slot (or first enabled if none selected).
15439
+ */
15440
+ type ForTimePickerInitialFocus = 'first' | 'last' | 'selected';
15441
+ /**
15442
+ * Handle every `[forTimePickerOption]` registers with the root.
15443
+ */
15444
+ interface ForTimePickerOptionHandle extends CollectionHandle {
15445
+ readonly value: Signal<unknown>;
15446
+ readonly disabled: Signal<boolean>;
15447
+ }
15448
+ /**
15449
+ * Coordination contract owned by `[forTimePicker]`.
15450
+ *
15451
+ * @typeParam D The adapter's date-time type.
15452
+ */
15453
+ interface ForTimePickerContext<D = unknown> {
15454
+ readonly value: ModelSignal<D | null>;
15455
+ readonly open: ModelSignal<boolean>;
15456
+ readonly effectiveDisabled: Signal<boolean>;
15457
+ readonly readonly: Signal<boolean>;
15458
+ readonly required: Signal<boolean>;
15459
+ readonly invalid: Signal<boolean>;
15460
+ readonly pending: Signal<boolean>;
15461
+ readonly modal: Signal<boolean>;
15462
+ readonly dismissible: Signal<boolean>;
15463
+ readonly returnFocus: Signal<boolean>;
15464
+ readonly side: Signal<FloatingSide | undefined>;
15465
+ readonly align: Signal<FloatingAlign | undefined>;
15466
+ readonly sideOffset: Signal<number>;
15467
+ readonly alignOffset: Signal<number>;
15468
+ readonly avoidCollisions: Signal<boolean>;
15469
+ readonly collisionPadding: Signal<number>;
15470
+ readonly arrowPadding: Signal<number>;
15471
+ readonly sticky: Signal<'partial' | 'always' | false>;
15472
+ readonly hideWhenDetached: Signal<boolean>;
15473
+ readonly clipUntilPositioned: Signal<boolean>;
15474
+ readonly loop: Signal<boolean>;
15475
+ readonly orientation: Signal<'horizontal' | 'vertical'>;
15476
+ readonly dir: Signal<WritingDirection>;
15477
+ readonly placeholder: Signal<string>;
15478
+ readonly granularity: Signal<TimePickerGranularity>;
15479
+ readonly formattedValue: Signal<string | null>;
15480
+ readonly triggerId: Signal<string>;
15481
+ readonly contentId: Signal<string>;
15482
+ readonly ariaLabel: Signal<string | null>;
15483
+ readonly initialFocus: Signal<ForTimePickerInitialFocus>;
15484
+ setInitialFocus(target: ForTimePickerInitialFocus): void;
15485
+ readonly lastCloseReason: Signal<ForTimePickerCloseReason | null>;
15486
+ readonly anchor: Signal<ReferenceElement | null>;
15487
+ readonly trigger: Signal<HTMLElement | null>;
15488
+ registerTrigger(el: HTMLElement): void;
15489
+ unregisterTrigger(el: HTMLElement): void;
15490
+ readonly content: Signal<HTMLElement | null>;
15491
+ registerContent(el: HTMLElement): void;
15492
+ unregisterContent(el: HTMLElement): void;
15493
+ registerOption(handle: ForTimePickerOptionHandle): void;
15494
+ unregisterOption(handle: ForTimePickerOptionHandle): void;
15495
+ readonly options: Signal<readonly ForTimePickerOptionHandle[]>;
15496
+ readonly slots: Signal<readonly ForTimeSlot<D>[]>;
15497
+ isSelected(value: D): boolean;
15498
+ activate(value: D): void;
15499
+ navigate(currentOption: HTMLElement, action: ListNavigationAction): void;
15500
+ focusFirstEnabledOption(): boolean;
15501
+ focusLastEnabledOption(): boolean;
15502
+ focusSelectedOption(): boolean;
15503
+ toggle(initialFocus?: ForTimePickerInitialFocus): void;
15504
+ openMenu(initialFocus?: ForTimePickerInitialFocus): void;
15505
+ closeMenu(reason: ForTimePickerCloseReason): void;
15506
+ commitOnTab(value: D): void;
15507
+ emitEscapeKeyDown(event: KeyboardEvent): void;
15508
+ emitPointerDownOutside(veto: VetoableNativeEvent<PointerEvent>): void;
15509
+ emitFocusOutside(veto: VetoableNativeEvent<FocusEvent>): void;
15510
+ emitInteractOutside(veto: VetoableNativeEvent<PointerEvent | FocusEvent>): void;
15511
+ requestClose(reason: 'pointerDownOutside' | 'focusOutside'): void;
15512
+ forwardEscapeKeyDown(veto: VetoableNativeEvent<KeyboardEvent>): void;
15513
+ emitAutoFocusOnOpen(): boolean;
15514
+ emitAutoFocusOnClose(): boolean;
15515
+ markTouched(): void;
15516
+ }
15517
+ declare const FOR_TIME_PICKER_CONTEXT: InjectionToken<ForTimePickerContext<unknown>>;
15518
+
15519
+ /**
15520
+ * Root of the headless time picker, implementing the
15521
+ * [WAI-ARIA Listbox pattern](https://www.w3.org/WAI/ARIA/apg/patterns/listbox/)
15522
+ * for a slot-based time selection. Generates a full-day list of time slots at
15523
+ * a configurable `step` (in minutes), displayed in a floating listbox.
15524
+ *
15525
+ * Implements `FormValueControl<D | null>` from `@angular/forms/signals` for
15526
+ * `[formField]` auto-wiring. Requires a time-capable adapter
15527
+ * (`provideNativeDateAdapter()` or `provideInternationalizedDateTimeAdapter()`).
15528
+ *
15529
+ * @typeParam D The adapter's immutable date-time type.
15530
+ */
15531
+ declare class ForTimePicker<D> extends FormUiControlBase implements FormValueControl<D | null>, ForTimePickerContext<D> {
15532
+ #private;
15533
+ /**
15534
+ * The active, time-capable date adapter. Throws when the provided adapter is
15535
+ * day-only.
15536
+ */
15537
+ readonly adapter: TimeCapableDateAdapter<D>;
15538
+ /**
15539
+ * Two-way bindable selected time, or `null`. Required by
15540
+ * `FormValueControl<D | null>`. The `model()` change emitter
15541
+ * (`(valueChange)`) fires only on internal selection changes, never on
15542
+ * consumer writes via `[(value)]`.
15543
+ */
15544
+ readonly value: _angular_core.ModelSignal<D | null>;
15545
+ /**
15546
+ * Two-way bindable. Whether the listbox is currently shown. The `model()`
15547
+ * change emitter (`(openChange)`) fires only on internal transitions, never
15548
+ * on consumer writes via `[(open)]`.
15549
+ */
15550
+ readonly open: _angular_core.ModelSignal<boolean>;
15551
+ /**
15552
+ * Earliest selectable time-of-day (inclusive). Slots earlier in the day are
15553
+ * disabled. Named `minTime` (not `min`) because `FormUiControl.min` is
15554
+ * reserved for a numeric validator.
15555
+ */
15556
+ readonly minTime: _angular_core.InputSignal<D | null>;
15557
+ /**
15558
+ * Latest selectable time-of-day (inclusive). Slots later in the day are
15559
+ * disabled. Named `maxTime` for the same reason as {@link minTime}.
15560
+ */
15561
+ readonly maxTime: _angular_core.InputSignal<D | null>;
15562
+ /**
15563
+ * Slot interval in whole minutes. Default `30`. Clamped to ≥ 1 internally.
15564
+ * Use `60` for hourly slots, `15` for quarter-hour slots.
15565
+ */
15566
+ readonly step: _angular_core.InputSignalWithTransform<number, unknown>;
15567
+ /**
15568
+ * Finest time unit compared when determining if a slot is selected.
15569
+ * Default `'minute'`. Use `'second'` when the value carries seconds.
15570
+ */
15571
+ readonly granularity: _angular_core.InputSignal<TimePickerGranularity>;
15572
+ /**
15573
+ * 12- or 24-hour cycle for slot label formatting. When `null` (default) it
15574
+ * is derived from the runtime locale.
15575
+ */
15576
+ readonly hourCycle: _angular_core.InputSignal<12 | 24 | null>;
15577
+ /**
15578
+ * BCP 47 locale driving slot label formatting. Defaults to the runtime locale.
15579
+ */
15580
+ readonly locale: _angular_core.InputSignal<string | null>;
15581
+ /**
15582
+ * Close the listbox after a slot is selected. Default `true`.
15583
+ */
15584
+ readonly closeOnSelect: _angular_core.InputSignalWithTransform<boolean, unknown>;
15585
+ /**
15586
+ * When `true`, the listbox mounts as a trapped / inert / scroll-locked modal
15587
+ * surface instead of the default anchored popover. Read once when the content
15588
+ * mounts.
15589
+ */
15590
+ readonly modal: _angular_core.InputSignalWithTransform<boolean, unknown>;
15591
+ /** When `true` (default), Escape, pointer-down outside, and focus outside close the listbox. */
15592
+ readonly dismissible: _angular_core.InputSignalWithTransform<boolean, unknown>;
15593
+ /** When `true` (default), focus returns to the trigger on close. */
15594
+ readonly returnFocus: _angular_core.InputSignalWithTransform<boolean, unknown>;
15595
+ /** Placeholder shown by `[forTimePickerValue]` when no time is selected. */
15596
+ readonly placeholder: _angular_core.InputSignal<string>;
15597
+ /**
15598
+ * `Intl.DateTimeFormat` options driving slot label formatting. When none of
15599
+ * `hour` / `minute` / `second` are specified, sensible defaults are filled in
15600
+ * automatically based on `granularity` and `hourCycle`.
15601
+ */
15602
+ readonly formatOptions: _angular_core.InputSignal<Intl.DateTimeFormatOptions>;
15603
+ /** Manual `aria-label` on `[forTimePickerContent]` when the trigger isn't a meaningful name. */
15604
+ readonly ariaLabel: _angular_core.InputSignal<string | null>;
15605
+ /** When `true` (default), keyboard navigation wraps at the ends of the option list. */
15606
+ readonly loop: _angular_core.InputSignalWithTransform<boolean, unknown>;
15607
+ /** Orientation of the listbox for keyboard navigation. Default `'vertical'`. */
15608
+ readonly orientation: _angular_core.InputSignal<"vertical" | "horizontal">;
15609
+ /**
15610
+ * Side the listbox is anchored to. Defaults to `'bottom'`. Ignored in
15611
+ * `modal` mode.
15612
+ */
15613
+ readonly side: _angular_core.InputSignal<FloatingSide | undefined>;
15614
+ /** Alignment along the chosen `side`. Defaults to `'start'`. */
15615
+ readonly align: _angular_core.InputSignal<FloatingAlign | undefined>;
15616
+ /**
15617
+ * Gap (px) between trigger and listbox along the main axis. Default `4`.
15618
+ * The default is read from `provideForTimePickerDefaults` for the surrounding
15619
+ * scope.
15620
+ */
15621
+ readonly sideOffset: _angular_core.InputSignalWithTransform<number, unknown>;
15622
+ /** Gap (px) along the cross axis. Default `0`. */
15623
+ readonly alignOffset: _angular_core.InputSignalWithTransform<number, unknown>;
15624
+ /** When `true` (default), `flip` and `shift` keep the listbox inside the viewport. */
15625
+ readonly avoidCollisions: _angular_core.InputSignalWithTransform<boolean, unknown>;
15626
+ /**
15627
+ * Padding (px) applied uniformly to flip / shift / size. Default `8`.
15628
+ * The default is read from `provideForTimePickerDefaults` for the surrounding
15629
+ * scope.
15630
+ */
15631
+ readonly collisionPadding: _angular_core.InputSignalWithTransform<number, unknown>;
15632
+ /** Padding (px) for the `arrow` middleware. Default `0`. */
15633
+ readonly arrowPadding: _angular_core.InputSignalWithTransform<number, unknown>;
15634
+ /** Stickiness behaviour for `shift`. Default `'partial'`. */
15635
+ readonly sticky: _angular_core.InputSignal<false | "partial" | "always">;
15636
+ /** When `true`, sets `data-detached=""` while the trigger is scrolled off-screen. */
15637
+ readonly hideWhenDetached: _angular_core.InputSignalWithTransform<boolean, unknown>;
15638
+ /**
15639
+ * When `true` (default), the content is clipped until floating-ui resolves
15640
+ * its first position, preventing a flash at the viewport corner.
15641
+ */
15642
+ readonly clipUntilPositioned: _angular_core.InputSignalWithTransform<boolean, unknown>;
15643
+ /**
15644
+ * Writing direction. When unset (default `null`), the inherited ambient
15645
+ * direction is resolved from the nearest ancestor carrying a `dir` attribute
15646
+ * (or `<html dir>`), defaulting to `'ltr'`. An explicit `[dir]` always wins.
15647
+ */
15648
+ readonly _dirInput: _angular_core.InputSignal<WritingDirection | null>;
15649
+ readonly dir: _angular_core.Signal<WritingDirection>;
15650
+ /**
15651
+ * Fires when the user presses Escape while this listbox is the topmost
15652
+ * dismissable layer. Call `preventDefault()` on the veto to suppress the
15653
+ * automatic close.
15654
+ */
15655
+ readonly escapeKeyDown: _angular_core.OutputEmitterRef<VetoableNativeEvent<KeyboardEvent>>;
15656
+ /** Fires when a pointer goes down outside the listbox. Vetoable. */
15657
+ readonly pointerDownOutside: _angular_core.OutputEmitterRef<VetoableNativeEvent<PointerEvent>>;
15658
+ /** Fires when focus moves outside the listbox. Vetoable. */
15659
+ readonly focusOutside: _angular_core.OutputEmitterRef<VetoableNativeEvent<FocusEvent>>;
15660
+ /** Composite event: shares veto state with `pointerDownOutside` / `focusOutside`. */
15661
+ readonly interactOutside: _angular_core.OutputEmitterRef<VetoableNativeEvent<PointerEvent | FocusEvent>>;
15662
+ /**
15663
+ * Fires just before the listbox sends focus to the selected slot (or first
15664
+ * enabled) on open. Call `preventDefault()` on the veto to skip the focus
15665
+ * move.
15666
+ */
15667
+ readonly autoFocusOnOpen: _angular_core.OutputEmitterRef<VetoableEvent>;
15668
+ /**
15669
+ * Fires just before focus returns to the trigger on close. Call
15670
+ * `preventDefault()` on the veto to suppress the return-focus.
15671
+ */
15672
+ readonly autoFocusOnClose: _angular_core.OutputEmitterRef<VetoableEvent>;
15673
+ readonly triggerId: _angular_core.WritableSignal<string>;
15674
+ readonly contentId: _angular_core.WritableSignal<string>;
15675
+ readonly initialFocus: _angular_core.Signal<ForTimePickerInitialFocus>;
15676
+ readonly lastCloseReason: _angular_core.Signal<ForTimePickerCloseReason | null>;
15677
+ readonly trigger: _angular_core.Signal<HTMLElement | null>;
15678
+ readonly anchor: _angular_core.Signal<ReferenceElement | null>;
15679
+ readonly content: _angular_core.Signal<HTMLElement | null>;
15680
+ readonly options: _angular_core.Signal<readonly ForTimePickerOptionHandle[]>;
15681
+ /**
15682
+ * The generated list of time slots for the full day. Each slot's `value` is
15683
+ * anchored to the current `value()` date (or a sentinel), so selecting a
15684
+ * slot preserves the calendar date when used inside a date-time picker.
15685
+ *
15686
+ * Pure derivation — never written from inside an `effect()`.
15687
+ */
15688
+ readonly slots: _angular_core.Signal<readonly ForTimeSlot<D>[]>;
15689
+ /** Formatted display of the current value, or `null` when empty. */
15690
+ readonly formattedValue: _angular_core.Signal<string | null>;
15691
+ protected fieldLabelledElement(): HTMLElement | null;
15692
+ protected fieldLabelledElementId(): string;
15693
+ constructor();
15694
+ setInitialFocus(target: ForTimePickerInitialFocus): void;
15695
+ registerTrigger(el: HTMLElement): void;
15696
+ unregisterTrigger(el: HTMLElement): void;
15697
+ registerContent(el: HTMLElement): void;
15698
+ unregisterContent(el: HTMLElement): void;
15699
+ registerOption(handle: ForTimePickerOptionHandle): void;
15700
+ unregisterOption(handle: ForTimePickerOptionHandle): void;
15701
+ isSelected(v: D): boolean;
15702
+ activate(v: D): void;
15703
+ navigate(currentOption: HTMLElement, action: ListNavigationAction): void;
15704
+ focusFirstEnabledOption(): boolean;
15705
+ focusLastEnabledOption(): boolean;
15706
+ focusSelectedOption(): boolean;
15707
+ toggle(initialFocus?: ForTimePickerInitialFocus): void;
15708
+ openMenu(initialFocus?: ForTimePickerInitialFocus): void;
15709
+ closeMenu(reason: ForTimePickerCloseReason): void;
15710
+ commitOnTab(value: D): void;
15711
+ emitEscapeKeyDown(event: KeyboardEvent): void;
15712
+ emitPointerDownOutside(veto: VetoableNativeEvent<PointerEvent>): void;
15713
+ emitFocusOutside(veto: VetoableNativeEvent<FocusEvent>): void;
15714
+ emitInteractOutside(veto: VetoableNativeEvent<PointerEvent | FocusEvent>): void;
15715
+ forwardEscapeKeyDown(veto: VetoableNativeEvent<KeyboardEvent>): void;
15716
+ requestClose(reason: 'pointerDownOutside' | 'focusOutside'): void;
15717
+ emitAutoFocusOnOpen(): boolean;
15718
+ emitAutoFocusOnClose(): boolean;
15719
+ markTouched(): void;
15720
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ForTimePicker<any>, never>;
15721
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForTimePicker<any>, "[forTimePicker]", ["forTimePicker"], { "value": { "alias": "value"; "required": false; "isSignal": true; }; "open": { "alias": "open"; "required": false; "isSignal": true; }; "minTime": { "alias": "minTime"; "required": false; "isSignal": true; }; "maxTime": { "alias": "maxTime"; "required": false; "isSignal": true; }; "step": { "alias": "step"; "required": false; "isSignal": true; }; "granularity": { "alias": "granularity"; "required": false; "isSignal": true; }; "hourCycle": { "alias": "hourCycle"; "required": false; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; "closeOnSelect": { "alias": "closeOnSelect"; "required": false; "isSignal": true; }; "modal": { "alias": "modal"; "required": false; "isSignal": true; }; "dismissible": { "alias": "dismissible"; "required": false; "isSignal": true; }; "returnFocus": { "alias": "returnFocus"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "formatOptions": { "alias": "formatOptions"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "loop": { "alias": "loop"; "required": false; "isSignal": true; }; "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; "side": { "alias": "side"; "required": false; "isSignal": true; }; "align": { "alias": "align"; "required": false; "isSignal": true; }; "sideOffset": { "alias": "sideOffset"; "required": false; "isSignal": true; }; "alignOffset": { "alias": "alignOffset"; "required": false; "isSignal": true; }; "avoidCollisions": { "alias": "avoidCollisions"; "required": false; "isSignal": true; }; "collisionPadding": { "alias": "collisionPadding"; "required": false; "isSignal": true; }; "arrowPadding": { "alias": "arrowPadding"; "required": false; "isSignal": true; }; "sticky": { "alias": "sticky"; "required": false; "isSignal": true; }; "hideWhenDetached": { "alias": "hideWhenDetached"; "required": false; "isSignal": true; }; "clipUntilPositioned": { "alias": "clipUntilPositioned"; "required": false; "isSignal": true; }; "_dirInput": { "alias": "dir"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "open": "openChange"; "escapeKeyDown": "escapeKeyDown"; "pointerDownOutside": "pointerDownOutside"; "focusOutside": "focusOutside"; "interactOutside": "interactOutside"; "autoFocusOnOpen": "autoFocusOnOpen"; "autoFocusOnClose": "autoFocusOnClose"; }, never, never, true, never>;
15722
+ }
15723
+
15724
+ /**
15725
+ * Combobox button that opens the time picker listbox. Apply on a `<button>` so
15726
+ * Space / Enter dispatch native click events that toggle via `(click)`.
15727
+ *
15728
+ * Wires APG select-only combobox attributes: `role="combobox"`,
15729
+ * `aria-haspopup="listbox"`, `aria-expanded`, and `aria-controls` pointing to
15730
+ * the listbox. The button is exempt from the listbox's dismissable layer so
15731
+ * clicks on it toggle without dismissal racing.
15732
+ *
15733
+ * Keyboard:
15734
+ * - **Click / Enter / Space** — toggle (open focuses the selected slot, or first).
15735
+ * - **ArrowDown** — open + focus selected slot (or first).
15736
+ * - **ArrowUp** — open + focus selected slot (or last when none selected).
15737
+ */
15738
+ declare class ForTimePickerTrigger<D = unknown> {
15739
+ #private;
15740
+ /**
15741
+ * Optional explicit reference to the `[forTimePicker]` root, named after the
15742
+ * selector `routerLink`-style. The bare valueless attribute keeps resolving
15743
+ * the enclosing root via DI; pass the root explicitly
15744
+ * (`[forTimePickerTrigger]="root"`, with `#root="forTimePicker"`) when the
15745
+ * trigger is declared in an `ng-template` stamped inside the root.
15746
+ */
15747
+ readonly forTimePickerTrigger: _angular_core.InputSignal<"" | ForTimePickerContext<D>>;
15748
+ protected readonly ctx: _angular_core.Signal<ForTimePickerContext<D>>;
15749
+ constructor();
15750
+ protected onClick(): void;
15751
+ protected onKeyDown(event: KeyboardEvent): void;
15752
+ protected onFocusOut(event: FocusEvent): void;
15753
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ForTimePickerTrigger<any>, never>;
15754
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForTimePickerTrigger<any>, "[forTimePickerTrigger]", ["forTimePickerTrigger"], { "forTimePickerTrigger": { "alias": "forTimePickerTrigger"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
15755
+ }
15756
+
15757
+ /**
15758
+ * Renders the currently selected time slot's label — or the configured
15759
+ * placeholder when nothing is selected — into its host element via
15760
+ * `textContent`. Apply on a `<span>` (or any inline element) inside
15761
+ * `[forTimePickerTrigger]`:
15762
+ *
15763
+ * ```html
15764
+ * <button forTimePickerTrigger>
15765
+ * <span forTimePickerValue placeholder="Select a time…"></span>
15766
+ * </button>
15767
+ * ```
15768
+ */
15769
+ declare class ForTimePickerValue {
15770
+ #private;
15771
+ /** Text shown when nothing is selected. Falls back to `[forTimePicker][placeholder]`. */
15772
+ readonly placeholder: _angular_core.InputSignal<string>;
15773
+ protected readonly isPlaceholder: _angular_core.Signal<boolean>;
15774
+ protected readonly displayText: _angular_core.Signal<string>;
15775
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ForTimePickerValue, never>;
15776
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForTimePickerValue, "[forTimePickerValue]", ["forTimePickerValue"], { "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
15777
+ }
15778
+
15779
+ /**
15780
+ * The listbox surface of the time picker. Carries `role="listbox"`, is
15781
+ * portaled to `document.body`, and is positioned by `@floating-ui/dom`
15782
+ * against the trigger.
15783
+ *
15784
+ * Mount/unmount of the visible content is the consumer's responsibility —
15785
+ * wrap with `@if (open())` so `animate.enter` / `animate.leave` fire on the
15786
+ * natural mount cycle. While mounted, a `DismissableLayer` activates (Escape,
15787
+ * pointer-down outside, focus outside); the trigger element is exempt from
15788
+ * outside-pointer checks so trigger clicks toggle without dismissal racing.
15789
+ *
15790
+ * Initial focus is sent to the selected slot (`'selected'`), the first
15791
+ * enabled slot (`'first'`), or the last enabled slot (`'last'`) according to
15792
+ * the trigger's hint. On destroy, focus returns to the trigger when
15793
+ * `returnFocus` is true.
15794
+ */
15795
+ declare class ForTimePickerContent {
15796
+ #private;
15797
+ protected readonly ctx: forty_cdk.ForTimePickerContext<unknown>;
15798
+ constructor();
15799
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ForTimePickerContent, never>;
15800
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForTimePickerContent, "[forTimePickerContent]", ["forTimePickerContent"], {}, {}, never, never, true, never>;
15801
+ }
15802
+
15803
+ /**
15804
+ * One option inside a `[forTimePickerContent]`. Apply on a `<div>` (or any
15805
+ * non-button element) — the option handles Enter/Space activation itself in its
15806
+ * keydown handler because a `<div>` has no native keyboard click.
15807
+ *
15808
+ * @typeParam D The adapter's date-time type (inferred from `[value]`).
15809
+ *
15810
+ * Keyboard while focused:
15811
+ * - **Enter / Space** — activate (select the slot).
15812
+ * - **ArrowDown / ArrowUp / Home / End** — move focus inside the listbox.
15813
+ * - **Tab / Shift+Tab** — commit the focused slot and let the browser advance
15814
+ * focus to the next / previous focusable.
15815
+ * - **Escape** — routed through the content's keydown to close the listbox.
15816
+ */
15817
+ declare class ForTimePickerOption<D = unknown> {
15818
+ #private;
15819
+ /**
15820
+ * The date-time value this option represents. Provided by the parent
15821
+ * `[forTimePicker]`'s `slots()` computed.
15822
+ */
15823
+ readonly value: _angular_core.InputSignal<D>;
15824
+ /** When `true`, this option cannot be selected. */
15825
+ readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
15826
+ readonly id: _angular_core.Signal<string>;
15827
+ readonly selected: _angular_core.Signal<boolean>;
15828
+ readonly effectiveDisabled: _angular_core.Signal<boolean>;
15829
+ /** True while this option has DOM focus. Reflected as `data-highlighted`. */
15830
+ readonly highlighted: _angular_core.Signal<boolean>;
15831
+ constructor();
15832
+ protected onClick(): void;
15833
+ protected onFocus(): void;
15834
+ protected onBlur(): void;
15835
+ protected onKeyDown(event: KeyboardEvent): void;
15836
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ForTimePickerOption<any>, never>;
15837
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForTimePickerOption<any>, "[forTimePickerOption]", ["forTimePickerOption"], { "value": { "alias": "value"; "required": true; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
15838
+ }
15839
+
15840
+ /**
15841
+ * Defaults inherited by descendant time pickers in the surrounding injector
15842
+ * scope. Configure with `provideForTimePickerDefaults` either at the
15843
+ * application root or in any component's `providers` array; partial overrides
15844
+ * merge with the parent scope.
15845
+ */
15846
+ interface ForTimePickerDefaults {
15847
+ /**
15848
+ * Distance (px) between the time picker trigger and the floating content
15849
+ * along the resolved `side` axis. Mirrors Radix's `sideOffset`.
15850
+ */
15851
+ sideOffset: number;
15852
+ /**
15853
+ * Padding (px) added to the viewport edges for collision-aware positioning.
15854
+ * Higher values keep the floating content further from the edge when
15855
+ * `flip` / `shift` runs.
15856
+ */
15857
+ collisionPadding: number;
15858
+ }
15859
+ /** Token holding the resolved time picker defaults for the current scope. */
15860
+ declare const FOR_TIME_PICKER_DEFAULTS: _angular_core.InjectionToken<ForTimePickerDefaults>;
15861
+ /**
15862
+ * Configures forty-cdk time picker defaults for this injector scope. Partial
15863
+ * overrides inherit unspecified keys from the parent scope (or library defaults
15864
+ * at the root).
15865
+ */
15866
+ declare function provideForTimePickerDefaults(defaults?: Partial<ForTimePickerDefaults>): Provider[];
15867
+
15868
+ /**
15869
+ * Exact public names of every `ForTimePicker` input, its models included.
15870
+ * Spread it into the `inputs` array of a `hostDirectives` entry so a wrapper
15871
+ * component re-exposes the primitive's full surface — the Signal Forms members
15872
+ * `[formField]` binds among them — without hand-maintaining the list. Always
15873
+ * spread into an inline object literal so the entry is statically analyzable.
15874
+ * An anti-drift spec fails when this list no longer matches the directive's
15875
+ * actual API.
15876
+ *
15877
+ * @example
15878
+ * ```ts
15879
+ * @Component({
15880
+ * selector: 'div[myTimePicker]',
15881
+ * template: '',
15882
+ * hostDirectives: [
15883
+ * {
15884
+ * directive: ForTimePicker,
15885
+ * inputs: [...FOR_TIME_PICKER_HOST_DIRECTIVE_INPUTS],
15886
+ * outputs: [...FOR_TIME_PICKER_HOST_DIRECTIVE_OUTPUTS],
15887
+ * },
15888
+ * ],
15889
+ * })
15890
+ * export class MyTimePicker {}
15891
+ * ```
15892
+ */
15893
+ declare const FOR_TIME_PICKER_HOST_DIRECTIVE_INPUTS: readonly ["value", "open", "align", "alignOffset", "ariaLabel", "arrowPadding", "avoidCollisions", "clipUntilPositioned", "closeOnSelect", "collisionPadding", "dir", "dirty", "disabled", "dismissible", "errors", "formatOptions", "granularity", "hideWhenDetached", "hourCycle", "invalid", "locale", "loop", "maxTime", "minTime", "modal", "name", "orientation", "pending", "placeholder", "readonly", "required", "returnFocus", "side", "sideOffset", "step", "sticky", "touched"];
15894
+ /**
15895
+ * Exact public names of every `ForTimePicker` output, the Signal Forms `touch`
15896
+ * output included. Spread it into the `outputs` array of the same
15897
+ * `hostDirectives` entry as {@link FOR_TIME_PICKER_HOST_DIRECTIVE_INPUTS}.
15898
+ */
15899
+ declare const FOR_TIME_PICKER_HOST_DIRECTIVE_OUTPUTS: readonly ["valueChange", "openChange", "escapeKeyDown", "pointerDownOutside", "focusOutside", "interactOutside", "autoFocusOnOpen", "autoFocusOnClose", "touchedChange", "touch"];
15900
+
15901
+ /** Alignment of the active slide within the viewport. */
15902
+ type CarouselAlign = 'start' | 'center' | 'end';
15903
+ /** Internal handle for a registered slide. */
15904
+ interface ForCarouselSlideHandle {
15905
+ readonly host: HTMLElement;
15906
+ }
15907
+ /** Internal handle for a registered indicator (dot). */
15908
+ interface ForCarouselIndicatorHandle {
15909
+ readonly host: HTMLElement;
15910
+ readonly disabled: Signal<boolean>;
15911
+ }
15912
+ /**
15913
+ * Coordination contract owned by `ForCarousel`. Slides and indicators
15914
+ * register with the root so index lookups, geometry computations, and
15915
+ * keyboard navigation are all driven from a single source of truth.
15916
+ */
15917
+ interface ForCarouselContext {
15918
+ readonly activeIndex: Signal<number>;
15919
+ readonly orientation: Signal<'horizontal' | 'vertical'>;
15920
+ readonly dir: Signal<WritingDirection>;
15921
+ readonly loop: Signal<boolean>;
15922
+ readonly align: Signal<CarouselAlign>;
15923
+ readonly slidesPerView: Signal<number>;
15924
+ readonly slideCount: Signal<number>;
15925
+ readonly roving: RovingTabindex;
15926
+ /** Whether auto-rotation is currently "on" (user intent). Drives the rotation control's label. */
15927
+ readonly playing: Signal<boolean>;
15928
+ /** Whether the carousel is actively auto-rotating right now (`playing && !paused`). Drives the viewport's `aria-live`. */
15929
+ readonly rotating: Signal<boolean>;
15930
+ canScrollPrev(): boolean;
15931
+ canScrollNext(): boolean;
15932
+ scrollPrev(): void;
15933
+ scrollNext(): void;
15934
+ scrollTo(index: number): void;
15935
+ navigate(currentIndicator: HTMLElement, action: ListNavigationAction): void;
15936
+ /** Toggle auto-rotation on/off (the explicit, sticky user choice). Called by the rotation control. */
15937
+ toggleAutoplay(): void;
15938
+ registerSlide(handle: ForCarouselSlideHandle): void;
15939
+ unregisterSlide(handle: ForCarouselSlideHandle): void;
15940
+ registerIndicator(handle: ForCarouselIndicatorHandle): void;
15941
+ unregisterIndicator(handle: ForCarouselIndicatorHandle): void;
15942
+ setViewport(el: HTMLElement, id: string): void;
15943
+ viewportId(): string | null;
15944
+ indexOfSlide(host: HTMLElement): number;
15945
+ indexOfIndicator(host: HTMLElement): number;
15946
+ isCurrent(index: number): boolean;
15947
+ isInView(index: number): boolean;
15948
+ isFirstEnabledIndicator(el: HTMLElement): boolean;
15949
+ hasCurrentIndicator(): boolean;
15950
+ }
15951
+ /** DI token providing the carousel context to descendant pieces. */
15952
+ declare const FOR_CAROUSEL_CONTEXT: InjectionToken<ForCarouselContext>;
15953
+
15954
+ /**
15955
+ * Root of the Carousel primitive. Owns the active index, slide collection,
15956
+ * indicator collection, roving tabindex tracker, and computed geometry CSS
15957
+ * variables. Provides the shared context to descendant pieces.
15958
+ *
15959
+ * Implements the [WAI-ARIA APG Carousel pattern](https://www.w3.org/WAI/ARIA/apg/patterns/carousel/).
15960
+ *
15961
+ * With no `[forCarouselIndicators]` rendered this is a basic carousel driven
15962
+ * by prev/next buttons only. Adding an indicator group enables APG picker
15963
+ * semantics: roving tabindex, arrow/Home/End navigation with automatic
15964
+ * activation.
15965
+ */
15966
+ declare class ForCarousel implements ForCarouselContext {
15967
+ #private;
15968
+ /**
15969
+ * Two-way bindable. The zero-based index of the current (leading) slide.
15970
+ * The `model()` change emitter (`(activeIndexChange)`) fires only on internal
15971
+ * navigation (prev/next button clicks, indicator arrow-key or click), never
15972
+ * on consumer writes via `[(activeIndex)]`.
15973
+ */
15974
+ readonly activeIndex: _angular_core.ModelSignal<number>;
15975
+ /** Scroll axis. `'horizontal'` (default) or `'vertical'`. */
15976
+ readonly orientation: _angular_core.InputSignal<"vertical" | "horizontal">;
15977
+ /**
15978
+ * Whether index wrap-around is enabled. When `true`, `next` past the last
15979
+ * slide wraps to index 0; `prev` before index 0 wraps to the last. Default
15980
+ * comes from `provideForCarouselDefaults` or the library fallback (`false`).
15981
+ */
15982
+ readonly loop: _angular_core.InputSignalWithTransform<boolean, unknown>;
15983
+ /**
15984
+ * Alignment of the active slide within the viewport. Affects the
15985
+ * `--for-carousel-offset` computation. Default from `provideForCarouselDefaults`
15986
+ * or `'start'`.
15987
+ */
15988
+ readonly align: _angular_core.InputSignal<CarouselAlign>;
15989
+ /**
15990
+ * Number of slides simultaneously visible in the viewport. Slide width
15991
+ * should be set to `calc(100% / var(--for-carousel-slides-per-view))` in
15992
+ * the consumer's CSS. Default from `provideForCarouselDefaults` or `1`.
15993
+ */
15994
+ readonly slidesPerView: _angular_core.InputSignalWithTransform<number, unknown>;
15995
+ /**
15996
+ * When `true` and the carousel is not looping, clamps `--for-carousel-offset` so the
15997
+ * trailing slides align flush to the viewport's trailing edge instead of overscrolling
15998
+ * into empty space (relevant when `slidesPerView > 1`). The one-indicator-per-slide
15999
+ * mapping is preserved — `activeIndex` still reaches the last slide; only the visual
16000
+ * offset is contained. No effect when `loop` is enabled or `slidesPerView` is 1.
16001
+ * Default from `provideForCarouselDefaults` or `false`.
16002
+ */
16003
+ readonly containScroll: _angular_core.InputSignalWithTransform<boolean, unknown>;
16004
+ /**
16005
+ * Accessible label for the carousel root (`role="group"`). Should describe
16006
+ * the carousel's purpose without using the word "carousel" (APG guidance).
16007
+ * When null (default), no `aria-label` is emitted; use `aria-labelledby`
16008
+ * instead when a visible heading labels the carousel.
16009
+ */
16010
+ readonly ariaLabel: _angular_core.InputSignal<string | null>;
16011
+ /**
16012
+ * Whether the carousel auto-rotates. When `true` and the user has not
16013
+ * explicitly stopped it, rotation starts on mount — *unless*
16014
+ * `prefers-reduced-motion: reduce` is set, which suppresses auto-start
16015
+ * (the user can still start it via the rotation control). Default from
16016
+ * `provideForCarouselDefaults` or `false`.
16017
+ *
16018
+ * APG requires a `[forCarouselRotationControl]` to be present whenever
16019
+ * autoplay is enabled. The directive does not enforce this — see the README.
16020
+ */
16021
+ readonly autoplay: _angular_core.InputSignalWithTransform<boolean, unknown>;
16022
+ /**
16023
+ * Milliseconds between automatic slide advances while rotating. Values
16024
+ * `<= 0` disable the timer. Default from `provideForCarouselDefaults` or `5000`.
16025
+ */
16026
+ readonly autoplayInterval: _angular_core.InputSignalWithTransform<number, unknown>;
16027
+ /**
16028
+ * Writing direction. When unset (default `null`), the inherited ambient
16029
+ * direction is resolved from the nearest ancestor carrying a `dir` attribute
16030
+ * (or `<html dir>`), defaulting to `'ltr'`. An explicit `[dir]` always wins.
16031
+ * The resolved value is reflected to the host `dir` attribute and swaps
16032
+ * ArrowLeft / ArrowRight semantics on the indicator group in RTL.
16033
+ */
16034
+ readonly _dirInput: _angular_core.InputSignal<WritingDirection | null>;
16035
+ readonly dir: _angular_core.Signal<WritingDirection>;
16036
+ /** Roving tabindex tracker for the indicator group. */
16037
+ readonly roving: RovingTabindex;
16038
+ /** Whether auto-rotation is "on" (user intent). Sticky once the user decides. */
16039
+ readonly playing: _angular_core.Signal<boolean>;
16040
+ /** Whether the carousel is actively auto-rotating right now. */
16041
+ readonly rotating: _angular_core.Signal<boolean>;
16042
+ /** Total number of registered slides. Reactive. */
16043
+ readonly slideCount: _angular_core.Signal<number>;
16044
+ /**
16045
+ * The `--for-carousel-offset` value to apply via `transform` on the track.
16046
+ * Pure arithmetic — no layout measurement — so it is safe in Vitest.
16047
+ */
16048
+ readonly offset: _angular_core.Signal<string>;
16049
+ /** The measured viewport width, or `null` before first measurement / on the server. */
16050
+ readonly viewportWidth: _angular_core.Signal<string | null>;
16051
+ /** The measured viewport height, or `null` before first measurement / on the server. */
16052
+ readonly viewportHeight: _angular_core.Signal<string | null>;
16053
+ constructor();
16054
+ /** Returns `true` when scrolling backward is possible given the current loop/index state. */
16055
+ canScrollPrev(): boolean;
16056
+ /** Returns `true` when scrolling forward is possible given the current loop/index state. */
16057
+ canScrollNext(): boolean;
16058
+ /** Navigate to the previous slide. No-op at index 0 when not looping. */
16059
+ scrollPrev(): void;
16060
+ /** Navigate to the next slide. No-op at the last index when not looping. */
16061
+ scrollNext(): void;
16062
+ /**
16063
+ * Navigate to the slide at `index`. Clamps to `[0, slideCount-1]` when not
16064
+ * looping; wraps modulo `slideCount` when looping.
16065
+ */
16066
+ scrollTo(index: number): void;
16067
+ /**
16068
+ * Move focus from `currentIndicator` according to `action` and activate the
16069
+ * target slide (automatic activation). Used by `ForCarouselIndicator`'s
16070
+ * keydown handler.
16071
+ */
16072
+ navigate(currentIndicator: HTMLElement, action: ListNavigationAction): void;
16073
+ registerSlide(handle: ForCarouselSlideHandle): void;
16074
+ unregisterSlide(handle: ForCarouselSlideHandle): void;
16075
+ registerIndicator(handle: ForCarouselIndicatorHandle): void;
16076
+ unregisterIndicator(handle: ForCarouselIndicatorHandle): void;
16077
+ /** Called by `ForCarouselViewport` at construction to wire the geometry observer. */
16078
+ setViewport(el: HTMLElement, id: string): void;
16079
+ /** The id of the registered viewport element, or `null` if none is mounted. */
16080
+ viewportId(): string | null;
16081
+ /** DOM-order index of the registered slide whose host equals `host`, or -1. */
16082
+ indexOfSlide(host: HTMLElement): number;
16083
+ /** DOM-order index of the registered indicator whose host equals `host`, or -1. */
16084
+ indexOfIndicator(host: HTMLElement): number;
16085
+ /** Returns `true` when `index` is the current active slide index. */
16086
+ isCurrent(index: number): boolean;
16087
+ /**
16088
+ * Returns `true` when `index` falls within the visible window
16089
+ * `[activeIndex, activeIndex + slidesPerView - 1]`.
16090
+ */
16091
+ isInView(index: number): boolean;
16092
+ /**
16093
+ * Returns `true` when `el` is the host of the first non-disabled indicator
16094
+ * in DOM order. Used by the tabindex fallback when no indicator is current.
16095
+ */
16096
+ isFirstEnabledIndicator(el: HTMLElement): boolean;
16097
+ /**
16098
+ * Returns `true` when at least one registered, non-disabled indicator
16099
+ * matches the current `activeIndex`. Used by the tabindex ladder to decide
16100
+ * whether the first-enabled fallback must reclaim the tab stop.
16101
+ */
16102
+ hasCurrentIndicator(): boolean;
16103
+ /** Start auto-rotation (explicit, sticky). Overrides the reduced-motion auto-start gate. */
16104
+ play(): void;
16105
+ /** Stop auto-rotation (explicit, sticky). Hover/focus/visibility changes will not restart it. */
16106
+ pause(): void;
16107
+ /** Toggle auto-rotation. Called by `[forCarouselRotationControl]`. */
16108
+ toggleAutoplay(): void;
16109
+ protected onAutoplayPause(reason: 'hover' | 'focus'): void;
16110
+ protected onAutoplayResume(reason: 'hover' | 'focus'): void;
16111
+ protected onAutoplayFocusOut(event: FocusEvent): void;
16112
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ForCarousel, never>;
16113
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForCarousel, "[forCarousel]", ["forCarousel"], { "activeIndex": { "alias": "activeIndex"; "required": false; "isSignal": true; }; "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; "loop": { "alias": "loop"; "required": false; "isSignal": true; }; "align": { "alias": "align"; "required": false; "isSignal": true; }; "slidesPerView": { "alias": "slidesPerView"; "required": false; "isSignal": true; }; "containScroll": { "alias": "containScroll"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "autoplay": { "alias": "autoplay"; "required": false; "isSignal": true; }; "autoplayInterval": { "alias": "autoplayInterval"; "required": false; "isSignal": true; }; "_dirInput": { "alias": "dir"; "required": false; "isSignal": true; }; }, { "activeIndex": "activeIndexChange"; }, never, never, true, never>;
16114
+ }
16115
+
16116
+ /**
16117
+ * Clips the visible window of the carousel track. Acts as the APG-mandated
16118
+ * live region for screen-reader announcements. `aria-live` flips between
16119
+ * `"off"` while the carousel is actively auto-rotating (so advancing slides
16120
+ * do not bombard the screen reader) and `"polite"` at all other times so
16121
+ * manual navigation is announced. Also serves as the `aria-controls` target
16122
+ * for the prev/next buttons.
16123
+ *
16124
+ * Registers itself with the carousel root on construction so the root's
16125
+ * `injectElementSize` observer starts and prev/next's `aria-controls` resolves.
16126
+ * There must be exactly one viewport per carousel.
16127
+ */
16128
+ declare class ForCarouselViewport {
16129
+ #private;
16130
+ protected readonly ctx: forty_cdk.ForCarouselContext;
16131
+ /** The resolved id of this element — generated or adopted from a consumer-set static `id`. */
16132
+ readonly id: _angular_core.Signal<string>;
16133
+ constructor();
16134
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ForCarouselViewport, never>;
16135
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForCarouselViewport, "[forCarouselViewport]", ["forCarouselViewport"], {}, {}, never, never, true, never>;
16136
+ }
16137
+
16138
+ /**
16139
+ * The flex container of slides. The consumer's CSS reads
16140
+ * `--for-carousel-offset` (inherited from the root) and applies it as a
16141
+ * `transform: translateX(...)` / `translateY(...)` on this element.
16142
+ * The directive adds no animation or transform itself.
16143
+ *
16144
+ * Reflects `data-orientation` so the consumer can select the correct CSS
16145
+ * axis via `[data-orientation="vertical"] [forCarouselTrack] { ... }`.
16146
+ */
16147
+ declare class ForCarouselTrack {
16148
+ protected readonly ctx: forty_cdk.ForCarouselContext;
16149
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ForCarouselTrack, never>;
16150
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForCarouselTrack, "[forCarouselTrack]", ["forCarouselTrack"], {}, {}, never, never, true, never>;
16151
+ }
16152
+
16153
+ /**
16154
+ * One slide in the carousel track. Carries `role="group"` and
16155
+ * `aria-roledescription="slide"` per the WAI-ARIA APG Carousel pattern.
16156
+ *
16157
+ * The default `aria-label` is the positional `"N of M"` string (APG mandates
16158
+ * a positional label on each slide). Set `ariaLabel` to override with a
16159
+ * semantically richer label for the specific slide content.
16160
+ *
16161
+ * Off-view slides (outside `[activeIndex, activeIndex + slidesPerView - 1]`)
16162
+ * are hidden from the accessibility tree and focus order via
16163
+ * `aria-hidden="true"` + `inert`.
16164
+ */
16165
+ declare class ForCarouselSlide {
16166
+ #private;
16167
+ protected readonly ctx: forty_cdk.ForCarouselContext;
16168
+ /**
16169
+ * Override the default positional `aria-label` (`"N of M"`). Use this to
16170
+ * provide a semantically richer label when the slide's content has a
16171
+ * meaningful title (e.g. the product name). When `null` (default), the
16172
+ * positional label is used automatically.
16173
+ */
16174
+ readonly ariaLabel: _angular_core.InputSignal<string | null>;
16175
+ /** Whether this is the current (active) slide. */
16176
+ protected readonly current: _angular_core.Signal<boolean>;
16177
+ /** Whether this slide is within the visible window. */
16178
+ protected readonly inView: _angular_core.Signal<boolean>;
16179
+ /** The positional `"N of M"` label used when no explicit `ariaLabel` is set. */
16180
+ protected readonly positionLabel: _angular_core.Signal<string | null>;
16181
+ constructor();
16182
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ForCarouselSlide, never>;
16183
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForCarouselSlide, "[forCarouselSlide]", ["forCarouselSlide"], { "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
16184
+ }
16185
+
16186
+ /**
16187
+ * Previous-slide button. Apply on a `<button>` so Enter/Space activation is
16188
+ * native. Disabled (via the native `disabled` attribute) at index 0 when the
16189
+ * carousel is not looping. When `loop` is `true` it is never disabled.
16190
+ *
16191
+ * Points `aria-controls` at the viewport's id so screen readers announce the
16192
+ * relationship. Clicking does not move focus (APG).
16193
+ */
16194
+ declare class ForCarouselPrevious {
16195
+ protected readonly ctx: forty_cdk.ForCarouselContext;
16196
+ /**
16197
+ * Accessible label for this button (e.g. "Previous slide"). When `null`
16198
+ * (default), no `aria-label` is emitted — the consumer should supply a
16199
+ * visible label or set this input.
16200
+ */
16201
+ readonly ariaLabel: _angular_core.InputSignal<string | null>;
16202
+ protected readonly isDisabled: _angular_core.Signal<boolean>;
16203
+ constructor();
16204
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ForCarouselPrevious, never>;
16205
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForCarouselPrevious, "[forCarouselPrevious]", ["forCarouselPrevious"], { "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
16206
+ }
16207
+
16208
+ /**
16209
+ * Next-slide button. Apply on a `<button>` so Enter/Space activation is
16210
+ * native. Disabled (via the native `disabled` attribute) at the last index
16211
+ * when the carousel is not looping. When `loop` is `true` it is never disabled.
16212
+ *
16213
+ * Points `aria-controls` at the viewport's id so screen readers announce the
16214
+ * relationship. Clicking does not move focus (APG).
16215
+ */
16216
+ declare class ForCarouselNext {
16217
+ protected readonly ctx: forty_cdk.ForCarouselContext;
16218
+ /**
16219
+ * Accessible label for this button (e.g. "Next slide"). When `null`
16220
+ * (default), no `aria-label` is emitted — the consumer should supply a
16221
+ * visible label or set this input.
16222
+ */
16223
+ readonly ariaLabel: _angular_core.InputSignal<string | null>;
16224
+ protected readonly isDisabled: _angular_core.Signal<boolean>;
16225
+ constructor();
16226
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ForCarouselNext, never>;
16227
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForCarouselNext, "[forCarouselNext]", ["forCarouselNext"], { "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
16228
+ }
16229
+
16230
+ /**
16231
+ * The slide-picker group (dot navigation). Renders as `role="group"` and
16232
+ * should receive an `ariaLabel` describing its purpose (e.g. "Choose slide
16233
+ * to display") per the WAI-ARIA APG Carousel pattern.
16234
+ *
16235
+ * Keyboard navigation (ArrowLeft/Right, Home/End) and automatic activation
16236
+ * live on each `[forCarouselIndicator]` child, not on this container.
16237
+ */
16238
+ declare class ForCarouselIndicators {
16239
+ protected readonly ctx: forty_cdk.ForCarouselContext;
16240
+ /**
16241
+ * Accessible label for the picker group (e.g. "Choose slide to display").
16242
+ * APG recommends labelling the group so screen readers can distinguish it
16243
+ * from other landmarks.
16244
+ */
16245
+ readonly ariaLabel: _angular_core.InputSignal<string | null>;
16246
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ForCarouselIndicators, never>;
16247
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForCarouselIndicators, "[forCarouselIndicators]", ["forCarouselIndicators"], { "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
16248
+ }
16249
+
16250
+ /**
16251
+ * One indicator (dot) in the slide picker. Apply on a `<button>` so
16252
+ * Enter/Space activation is native. Uses roving tabindex — only the current
16253
+ * dot owns `tabindex=0`; all others have `tabindex=-1`. Arrow/Home/End
16254
+ * navigation activates the target slide automatically (APG "grouped/tabbed
16255
+ * picker" variant).
16256
+ *
16257
+ * The current indicator is marked with `aria-current="true"` (truthy-only).
16258
+ * Disabled indicators receive `aria-disabled="true"` and `data-disabled` but
16259
+ * stay focusable (custom-role rule) so assistive tech can announce them.
16260
+ */
16261
+ declare class ForCarouselIndicator {
16262
+ #private;
16263
+ protected readonly ctx: forty_cdk.ForCarouselContext;
16264
+ /**
16265
+ * Override the default positional `aria-label` (e.g. `"Go to slide 1"`).
16266
+ * Use this to provide a more descriptive label when the slide has a title.
16267
+ */
16268
+ readonly ariaLabel: _angular_core.InputSignal<string | null>;
16269
+ /**
16270
+ * Disables this indicator. Disabled indicators remain focusable (for
16271
+ * assistive tech) but ignore click and keyboard activation.
16272
+ */
16273
+ readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
16274
+ /** Whether this indicator corresponds to the current active slide. */
16275
+ protected readonly current: _angular_core.Signal<boolean>;
16276
+ /** Default positional label used when no explicit `ariaLabel` is set. */
16277
+ protected readonly positionLabel: _angular_core.Signal<string | null>;
16278
+ /**
16279
+ * APG roving tabindex: user-driven roving owns it once any indicator has
16280
+ * been focused. Before that, fall back to "current slide's indicator, else
16281
+ * first enabled".
16282
+ */
16283
+ protected readonly tabindex: _angular_core.Signal<0 | -1>;
16284
+ constructor();
16285
+ protected onClick(): void;
16286
+ protected onFocus(): void;
16287
+ protected onKeyDown(event: KeyboardEvent): void;
16288
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ForCarouselIndicator, never>;
16289
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForCarouselIndicator, "[forCarouselIndicator]", ["forCarouselIndicator"], { "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
16290
+ }
16291
+
16292
+ /**
16293
+ * Play/pause control for carousel auto-rotation. Apply on a `<button>` so
16294
+ * Enter/Space activation is native. Its accessible name swaps with the
16295
+ * rotation state — `stopLabel` while rotating, `startLabel` while stopped —
16296
+ * per the WAI-ARIA APG Carousel pattern, which forbids `aria-pressed` here.
16297
+ *
16298
+ * Place this control **first** in the carousel's DOM/tab order so assistive
16299
+ * technology users meet it before the rotating content (APG requirement).
16300
+ *
16301
+ * Reflects a boolean `data-playing` attribute (present while rotation is on)
16302
+ * as the styling hook for swapping a play/pause icon.
16303
+ */
16304
+ declare class ForCarouselRotationControl {
16305
+ protected readonly ctx: forty_cdk.ForCarouselContext;
16306
+ /** Accessible name shown while rotation is **stopped** (the button will start it). */
16307
+ readonly startLabel: _angular_core.InputSignal<string>;
16308
+ /** Accessible name shown while rotation is **playing** (the button will stop it). */
16309
+ readonly stopLabel: _angular_core.InputSignal<string>;
16310
+ /** The current accessible name — `stopLabel` while playing, else `startLabel`. */
16311
+ protected readonly label: _angular_core.Signal<string>;
16312
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ForCarouselRotationControl, never>;
16313
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForCarouselRotationControl, "[forCarouselRotationControl]", ["forCarouselRotationControl"], { "startLabel": { "alias": "startLabel"; "required": false; "isSignal": true; }; "stopLabel": { "alias": "stopLabel"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
16314
+ }
16315
+
16316
+ /**
16317
+ * Opt-in pointer drag / swipe directive for the Carousel viewport. Apply on the
16318
+ * `[forCarouselViewport]` element to enable horizontal or vertical drag-to-navigate.
16319
+ *
16320
+ * Publishes `--for-carousel-drag` (px) during the gesture so the consumer can
16321
+ * compose it with `--for-carousel-offset` for live track motion. Reflects
16322
+ * `data-dragging` while the gesture is armed. Sets `touch-action` automatically
16323
+ * to free the cross axis for page scrolling.
16324
+ *
16325
+ * Under `prefers-reduced-motion: reduce` the live offset is suppressed, but the
16326
+ * gesture still snaps `activeIndex` on release (D3).
16327
+ */
16328
+ declare class ForCarouselDrag {
16329
+ #private;
16330
+ protected readonly ctx: forty_cdk.ForCarouselContext;
16331
+ /** Disable pointer drag without removing the directive. Default `false`. */
16332
+ readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
16333
+ /** Whether a drag gesture is currently armed (reflected as `data-dragging`). */
16334
+ readonly dragging: _angular_core.Signal<boolean>;
16335
+ /** `touch-action` for the viewport: capture the primary axis, free the cross axis. */
16336
+ readonly touchAction: _angular_core.Signal<string | null>;
16337
+ /** Live offset CSS var; suppressed at rest and under reduced motion (D3). */
16338
+ readonly dragVar: _angular_core.Signal<string | null>;
16339
+ constructor();
16340
+ protected onDragStart(event: Event): void;
16341
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ForCarouselDrag, never>;
16342
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForCarouselDrag, "[forCarouselDrag]", ["forCarouselDrag"], { "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
16343
+ }
16344
+
16345
+ /**
16346
+ * Defaults inherited by descendant carousels in the surrounding injector scope.
16347
+ * Configure with `provideForCarouselDefaults` either at the application root
16348
+ * or in any component's `providers` array; partial overrides merge with
16349
+ * the parent scope.
16350
+ */
16351
+ interface ForCarouselDefaults {
16352
+ /**
16353
+ * Whether index wrap-around is enabled. When `true`, `next` past the last
16354
+ * slide wraps to index 0 and `prev` before index 0 wraps to the last slide.
16355
+ */
16356
+ loop: boolean;
16357
+ /**
16358
+ * Alignment of the active slide within the viewport. `'start'` (default):
16359
+ * the active slide's leading edge aligns with the viewport's leading edge.
16360
+ * `'center'` / `'end'` offset accordingly.
16361
+ */
16362
+ align: CarouselAlign;
16363
+ /**
16364
+ * Number of slides visible simultaneously in the viewport. Slide width is
16365
+ * set to `100% / slidesPerView` by the consumer's CSS.
16366
+ */
16367
+ slidesPerView: number;
16368
+ /**
16369
+ * When `true` (and the carousel is not looping), clamps the track offset so the
16370
+ * trailing slides align flush to the viewport's trailing edge instead of
16371
+ * overscrolling into empty space when `slidesPerView > 1`. The indicator/slide
16372
+ * mapping is unchanged — only the visual offset is contained. Default `false`.
16373
+ */
16374
+ containScroll: boolean;
16375
+ /** Whether the carousel auto-rotates on mount (when not under reduced-motion). Default `false`. */
16376
+ autoplay: boolean;
16377
+ /** Milliseconds between automatic slide advances. Default `5000`. */
16378
+ autoplayInterval: number;
16379
+ }
16380
+ /** Token holding the resolved carousel defaults for the current scope. */
16381
+ declare const FOR_CAROUSEL_DEFAULTS: _angular_core.InjectionToken<ForCarouselDefaults>;
16382
+ /**
16383
+ * Configures forty-cdk carousel defaults for this injector scope. Partial
16384
+ * overrides inherit unspecified keys from the parent scope (or library
16385
+ * defaults at the root).
16386
+ */
16387
+ declare function provideForCarouselDefaults(defaults?: Partial<ForCarouselDefaults>): Provider[];
16388
+
16389
+ /** A registered draggable item, as seen by its drop list. */
16390
+ interface ForDraggableHandle {
16391
+ readonly host: HTMLElement;
16392
+ /** The consumer-supplied data payload for this item. */
16393
+ readonly data: Signal<unknown>;
16394
+ /** Effective disabled (item's own `dragDisabled` OR the list being disabled). */
16395
+ readonly disabled: Signal<boolean>;
16396
+ }
16397
+ /**
16398
+ * Coordination contract owned by `ForDropList` and consumed by each `ForDraggable`. Also the
16399
+ * public handle type used by `[connectedTo]` and the `dragDrop` event's
16400
+ * `previousContainer` / `container` — advanced consumers may read `host` / `items`; the
16401
+ * interaction methods exist for the directive pieces.
16402
+ */
16403
+ interface ForDropListContext {
16404
+ readonly host: HTMLElement;
16405
+ readonly orientation: Signal<'horizontal' | 'vertical'>;
16406
+ readonly dir: Signal<WritingDirection>;
16407
+ /** Effective disabled of the whole list. */
16408
+ readonly disabled: Signal<boolean>;
16409
+ readonly items: Signal<readonly ForDraggableHandle[]>;
16410
+ /** Insertion index this list is the current drop target at, else `null`. */
16411
+ readonly dragOverIndex: Signal<number | null>;
16412
+ setDragOver(index: number | null): void;
16413
+ registerItem(handle: ForDraggableHandle): void;
16414
+ unregisterItem(handle: ForDraggableHandle): void;
16415
+ /** Roving tab-stop value for `el` before/after roving engages (mirror Listbox's pattern). */
16416
+ itemTabindex(el: HTMLElement): -1 | 0 | null;
16417
+ isFirstFocusableItem(el: HTMLElement): boolean;
16418
+ isItemHighlighted(el: HTMLElement): boolean;
16419
+ setActiveItem(el: HTMLElement): void;
16420
+ /** Idle roving focus move from `el`. */
16421
+ navigate(el: HTMLElement, action: ListNavigationAction): void;
16422
+ /** Start a keyboard drag for `el`; returns its source index, or `-1` if it could not lift. */
16423
+ lift(el: HTMLElement): number;
16424
+ /** Whether `el` is the currently lifted item. */
16425
+ isLifted(el: HTMLElement): boolean;
16426
+ /** Step the logical drop target while lifted. */
16427
+ moveLifted(action: ListNavigationAction): void;
16428
+ /** Commit the current drag (emits `dragDrop` on the source list). No-op if nothing lifted. */
16429
+ drop(): void;
16430
+ /** Abort the current drag without emitting `dragDrop`. */
16431
+ cancel(): void;
16432
+ /**
16433
+ * Begin a pointer drag for `el` at viewport point `point`. Sets up the same session state as a
16434
+ * keyboard lift. `preview` is the floating element supplied by the draggable (a consumer
16435
+ * `[forDragPreview]` template); when omitted, the list creates the default cloned preview.
16436
+ * Returns the source index, or `-1` if it could not lift.
16437
+ */
16438
+ pointerLift(el: HTMLElement, point: {
16439
+ x: number;
16440
+ y: number;
16441
+ }, preview?: {
16442
+ moveTo(x: number, y: number): void;
16443
+ destroy(): void;
16444
+ } | null): number;
16445
+ /** Update the live pointer drop target + preview position. No-op if nothing is lifted. */
16446
+ pointerMove(point: {
16447
+ x: number;
16448
+ y: number;
16449
+ }): void;
16450
+ /**
16451
+ * Register the rendered placeholder's root nodes with the source list so it can reposition
16452
+ * them to the live drop index during a `liveSort` pointer drag. Pass `null` to clear. The
16453
+ * list ignores the nodes when `liveSort` is off. Called by `ForDraggable`.
16454
+ */
16455
+ setLivePlaceholder(nodes: readonly Node[] | null): void;
16456
+ }
16457
+ declare const FOR_DRAG_DROP_CONTEXT: InjectionToken<ForDropListContext>;
16458
+ /** Emitted by the **source** `ForDropList` on a committed drop (keyboard or pointer). */
16459
+ interface ForDragDropEvent<T = unknown> {
16460
+ readonly item: T;
16461
+ readonly previousContainer: ForDropListContext;
16462
+ readonly container: ForDropListContext;
16463
+ readonly previousIndex: number;
16464
+ readonly currentIndex: number;
16465
+ }
16466
+ /** Emitted by `ForDraggable` when a drag (keyboard or pointer) starts. */
16467
+ interface ForDragStartEvent {
16468
+ readonly source: ForDropListContext;
16469
+ readonly index: number;
16470
+ }
16471
+ /** Emitted by `ForDraggable` when a drag ends (committed or cancelled). */
16472
+ interface ForDragEndEvent {
16473
+ /** `true` on a committed drop, `false` on cancel. */
16474
+ readonly dropped: boolean;
16475
+ }
16476
+ /** Internal coordination surface a `ForDraggable` exposes to its `[forDragHandle]` children. */
16477
+ interface ForDraggableContext {
16478
+ /** Register a handle element; while any handle is registered, pointer drags may only start on one. */
16479
+ registerHandle(el: HTMLElement): void;
16480
+ unregisterHandle(el: HTMLElement): void;
16481
+ }
16482
+
16483
+ /**
16484
+ * Root directive of the drag-drop primitive. Apply on any container element to
16485
+ * create a reorderable list. Items inside are declared with `[forDraggable]`.
16486
+ *
16487
+ * Supports both keyboard dragging and pointer (mouse / touch / pen) dragging.
16488
+ */
16489
+ declare class ForDropList implements ForDropListContext {
16490
+ #private;
16491
+ /** Layout orientation of the list. Affects which arrow keys move focus and the lifted item. */
16492
+ readonly orientation: _angular_core.InputSignal<"vertical" | "horizontal">;
14795
16493
  /**
14796
- * Whether index wrap-around is enabled. When `true`, `next` past the last
14797
- * slide wraps to index 0; `prev` before index 0 wraps to the last. Default
14798
- * comes from `provideForCarouselDefaults` or the library fallback (`false`).
16494
+ * Writing direction. When unset (default `null`), the inherited ambient direction is
16495
+ * resolved from the nearest ancestor carrying a `dir` attribute (or `<html dir>`),
16496
+ * defaulting to `'ltr'`.
14799
16497
  */
14800
- readonly loop: _angular_core.InputSignalWithTransform<boolean, unknown>;
16498
+ readonly _dirInput: _angular_core.InputSignal<WritingDirection | null>;
16499
+ readonly dir: _angular_core.Signal<WritingDirection>;
16500
+ /** When true, the entire list and all its items are disabled. */
16501
+ readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
14801
16502
  /**
14802
- * Alignment of the active slide within the viewport. Affects the
14803
- * `--for-carousel-offset` computation. Default from `provideForCarouselDefaults`
14804
- * or `'start'`.
16503
+ * Other lists this one can transfer items into. Union'd with any `[forDropListGroup]`
16504
+ * members. Disabled lists are excluded from the effective connected set.
14805
16505
  */
14806
- readonly align: _angular_core.InputSignal<CarouselAlign>;
16506
+ readonly connectedTo: _angular_core.InputSignal<readonly ForDropListContext[]>;
14807
16507
  /**
14808
- * Number of slides simultaneously visible in the viewport. Slide width
14809
- * should be set to `calc(100% / var(--for-carousel-slides-per-view))` in
14810
- * the consumer's CSS. Default from `provideForCarouselDefaults` or `1`.
16508
+ * When true (the default), a pointer drag that nears the edge of the nearest scrollable
16509
+ * container (the list, a scrollable ancestor, or the viewport) auto-scrolls it toward that
16510
+ * edge so off-screen drop targets become reachable. Set `false` to opt out. Edge size and
16511
+ * max speed are configured via `provideForDragDropDefaults`. Keyboard dragging is unaffected.
14811
16512
  */
14812
- readonly slidesPerView: _angular_core.InputSignalWithTransform<number, unknown>;
16513
+ readonly autoScroll: _angular_core.InputSignalWithTransform<boolean, unknown>;
14813
16514
  /**
14814
- * When `true` and the carousel is not looping, clamps `--for-carousel-offset` so the
14815
- * trailing slides align flush to the viewport's trailing edge instead of overscrolling
14816
- * into empty space (relevant when `slidesPerView > 1`). The one-indicator-per-slide
14817
- * mapping is preserved `activeIndex` still reaches the last slide; only the visual
14818
- * offset is contained. No effect when `loop` is enabled or `slidesPerView` is 1.
14819
- * Default from `provideForCarouselDefaults` or `false`.
16515
+ * When true, the `[forDragPlaceholder]` follows the live resolved drop index during a
16516
+ * **pointer** drag within this list and across connected lists so siblings part to
16517
+ * reveal where the item will land. When false (the default), the placeholder stays in the
16518
+ * dragged item's source slot (the #806 behaviour). Has no effect without a
16519
+ * `[forDragPlaceholder]` template, and none on keyboard dragging.
14820
16520
  */
14821
- readonly containScroll: _angular_core.InputSignalWithTransform<boolean, unknown>;
16521
+ readonly liveSort: _angular_core.InputSignalWithTransform<boolean, unknown>;
14822
16522
  /**
14823
- * Accessible label for the carousel root (`role="group"`). Should describe
14824
- * the carousel's purpose without using the word "carousel" (APG guidance).
14825
- * When null (default), no `aria-label` is emitted; use `aria-labelledby`
14826
- * instead when a visible heading labels the carousel.
16523
+ * When true, a committed drop (keyboard or pointer) animates: displaced sibling items
16524
+ * transition from their old positions to their new ones (FLIP), and — on a pointer drag — the
16525
+ * floating preview settles into the final slot before it is removed. Opt-in and default off.
16526
+ * Duration / easing are styled by the consumer via CSS on the published hooks
16527
+ * (`[data-drag-animating]` on items, `[data-settling]` on the preview); the library imposes
16528
+ * none. Fully skipped under `prefers-reduced-motion: reduce` (teardown stays instant).
14827
16529
  */
14828
- readonly ariaLabel: _angular_core.InputSignal<string | null>;
16530
+ readonly animateReorder: _angular_core.InputSignalWithTransform<boolean, unknown>;
14829
16531
  /**
14830
- * Whether the carousel auto-rotates. When `true` and the user has not
14831
- * explicitly stopped it, rotation starts on mount *unless*
14832
- * `prefers-reduced-motion: reduce` is set, which suppresses auto-start
14833
- * (the user can still start it via the rotation control). Default from
14834
- * `provideForCarouselDefaults` or `false`.
14835
- *
14836
- * APG requires a `[forCarouselRotationControl]` to be present whenever
14837
- * autoplay is enabled. The directive does not enforce this — see the README.
16532
+ * Emitted by the **source** list when a drop commits (keyboard or pointer) — whether
16533
+ * the item stays in this list (reorder) or moves to a connected list (transfer). Apply
16534
+ * `moveItemInArray` or `transferArrayItem` to your data signal inside the handler.
14838
16535
  */
14839
- readonly autoplay: _angular_core.InputSignalWithTransform<boolean, unknown>;
16536
+ readonly dragDrop: _angular_core.OutputEmitterRef<ForDragDropEvent<unknown>>;
16537
+ readonly host: HTMLElement;
16538
+ /** Effective disabled — the list's own `disabled` input (fieldset wiring deferred to v2). */
16539
+ readonly effectiveDisabled: _angular_core.Signal<boolean>;
16540
+ readonly roving: RovingTabindex;
16541
+ readonly items: _angular_core.Signal<readonly ForDraggableHandle[]>;
16542
+ /** Insertion index this list is the current drop target at, else `null`. */
16543
+ readonly dragOverIndex: _angular_core.Signal<number | null>;
16544
+ /** `true` while a drag originating from this list is in progress. */
16545
+ readonly isDragging: _angular_core.Signal<boolean>;
16546
+ constructor();
16547
+ registerItem(handle: ForDraggableHandle): void;
16548
+ unregisterItem(handle: ForDraggableHandle): void;
16549
+ itemTabindex(el: HTMLElement): -1 | 0 | null;
16550
+ isFirstFocusableItem(el: HTMLElement): boolean;
16551
+ isItemHighlighted(el: HTMLElement): boolean;
16552
+ setActiveItem(el: HTMLElement): void;
16553
+ navigate(el: HTMLElement, action: ListNavigationAction): void;
16554
+ lift(el: HTMLElement): number;
16555
+ pointerLift(el: HTMLElement, point: {
16556
+ x: number;
16557
+ y: number;
16558
+ }, preview?: {
16559
+ moveTo(x: number, y: number): void;
16560
+ destroy(): void;
16561
+ } | null): number;
16562
+ pointerMove(point: {
16563
+ x: number;
16564
+ y: number;
16565
+ }): void;
16566
+ isLifted(el: HTMLElement): boolean;
16567
+ moveLifted(action: ListNavigationAction): void;
16568
+ drop(): void;
16569
+ cancel(): void;
16570
+ setDragOver(index: number | null): void;
16571
+ setLivePlaceholder(nodes: readonly Node[] | null): void;
16572
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ForDropList, never>;
16573
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForDropList, "[forDropList]", ["forDropList"], { "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; "_dirInput": { "alias": "dir"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "connectedTo": { "alias": "connectedTo"; "required": false; "isSignal": true; }; "autoScroll": { "alias": "autoScroll"; "required": false; "isSignal": true; }; "liveSort": { "alias": "liveSort"; "required": false; "isSignal": true; }; "animateReorder": { "alias": "animateReorder"; "required": false; "isSignal": true; }; }, { "dragDrop": "dragDrop"; }, never, never, true, never>;
16574
+ }
16575
+
16576
+ /**
16577
+ * Optional custom drag preview. Apply `[forDragPreview]` on an `<ng-template>` inside a
16578
+ * `[forDraggable]`; its content renders as the floating element that follows the pointer during a
16579
+ * pointer drag, replacing the default cloned preview. Has no effect on keyboard dragging.
16580
+ */
16581
+ declare class ForDragPreview {
16582
+ /** The template rendered as the floating pointer-drag preview. */
16583
+ readonly templateRef: TemplateRef<unknown>;
16584
+ constructor();
16585
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ForDragPreview, never>;
16586
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForDragPreview, "ng-template[forDragPreview]", ["forDragPreview"], {}, {}, never, never, true, never>;
16587
+ }
16588
+
16589
+ /**
16590
+ * Optional custom drag placeholder. Apply `[forDragPlaceholder]` on an `<ng-template>` inside a
16591
+ * `[forDraggable]`; during a **pointer** drag the dragged item's host is hidden and this template
16592
+ * renders in its slot, preserving the gap. Keyboard dragging keeps the default (the lifted item
16593
+ * stays in place, reflecting `data-dragging`).
16594
+ */
16595
+ declare class ForDragPlaceholder {
16596
+ /** The template rendered in the dragged item's slot during a pointer drag. */
16597
+ readonly templateRef: TemplateRef<unknown>;
16598
+ constructor();
16599
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ForDragPlaceholder, never>;
16600
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForDragPlaceholder, "ng-template[forDragPlaceholder]", ["forDragPlaceholder"], {}, {}, never, never, true, never>;
16601
+ }
16602
+
16603
+ /**
16604
+ * Marks an element as a draggable item inside a `[forDropList]`. Handles
16605
+ * keyboard and pointer interaction for lift, move, drop, and cancel.
16606
+ */
16607
+ declare class ForDraggable implements ForDraggableContext {
16608
+ #private;
16609
+ protected readonly previewTpl: _angular_core.Signal<ForDragPreview | undefined>;
16610
+ protected readonly placeholderTpl: _angular_core.Signal<ForDragPlaceholder | undefined>;
16611
+ /** `true` while a pointer-drag placeholder template occupies this item's slot (host hidden). */
16612
+ protected readonly placeholderActive: _angular_core.WritableSignal<boolean>;
16613
+ /** Data payload handed back in the `dragDrop` event when this item is dropped. */
16614
+ readonly dragData: _angular_core.InputSignal<unknown>;
16615
+ /** When true, this item cannot be lifted. The item remains focusable. */
16616
+ readonly dragDisabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
16617
+ /** Emitted when a drag (keyboard or pointer) starts from this item. */
16618
+ readonly dragStart: _angular_core.OutputEmitterRef<ForDragStartEvent>;
16619
+ /** Emitted when a drag originating from this item ends (committed or cancelled). */
16620
+ readonly dragEnd: _angular_core.OutputEmitterRef<ForDragEndEvent>;
16621
+ readonly effectiveDisabled: _angular_core.Signal<boolean>;
16622
+ /** `true` when this item is the currently lifted draggable. Reflected as `data-dragging`. */
16623
+ readonly lifted: _angular_core.Signal<boolean>;
16624
+ /** `true` when this item is the roving-tabindex active candidate. */
16625
+ protected readonly highlighted: _angular_core.Signal<boolean>;
16626
+ /** `aria-roledescription` value from defaults. */
16627
+ protected readonly roleDescription: _angular_core.Signal<string>;
16628
+ protected readonly tabindex: _angular_core.Signal<0 | -1>;
16629
+ protected readonly touchAction: _angular_core.Signal<"none" | null>;
16630
+ constructor();
16631
+ registerHandle(el: HTMLElement): void;
16632
+ unregisterHandle(el: HTMLElement): void;
16633
+ protected onNativeDragStart(event: Event): void;
16634
+ protected onFocus(): void;
16635
+ protected onBlur(): void;
16636
+ protected onKeyDown(event: KeyboardEvent): void;
16637
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ForDraggable, never>;
16638
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForDraggable, "[forDraggable]", ["forDraggable"], { "dragData": { "alias": "dragData"; "required": true; "isSignal": true; }; "dragDisabled": { "alias": "dragDisabled"; "required": false; "isSignal": true; }; }, { "dragStart": "dragStart"; "dragEnd": "dragEnd"; }, ["previewTpl", "placeholderTpl"], never, true, never>;
16639
+ }
16640
+
16641
+ /**
16642
+ * Optional drag handle inside a `[forDraggable]`. When at least one handle is present on an item, a pointer
16643
+ * drag may only start from within a handle (keyboard dragging is unaffected). Apply on a child element.
16644
+ */
16645
+ declare class ForDragHandle {
16646
+ #private;
16647
+ constructor();
16648
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ForDragHandle, never>;
16649
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForDragHandle, "[forDragHandle]", ["forDragHandle"], {}, {}, never, never, true, never>;
16650
+ }
16651
+
16652
+ declare const FOR_DROP_LIST_GROUP: InjectionToken<ForDropListGroup>;
16653
+ /**
16654
+ * Groups sibling `[forDropList]` elements so items can be transferred between
16655
+ * them without hand-wiring `[connectedTo]` on each list. Every list nested
16656
+ * under `[forDropListGroup]` automatically becomes a connected transfer target
16657
+ * for every other member of the group.
16658
+ */
16659
+ declare class ForDropListGroup {
16660
+ #private;
16661
+ /** All registered drop lists in this group, in registration order. */
16662
+ readonly members: Signal<readonly ForDropListContext[]>;
16663
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ForDropListGroup, never>;
16664
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForDropListGroup, "[forDropListGroup]", ["forDropListGroup"], {}, {}, never, never, true, never>;
16665
+ }
16666
+
16667
+ /**
16668
+ * Returns a copy of `array` with the item at `from` moved to `to`. Indices are clamped to
16669
+ * the array bounds; an out-of-range or no-op move returns a shallow copy unchanged.
16670
+ */
16671
+ declare function moveItemInArray<T>(array: readonly T[], from: number, to: number): T[];
16672
+ /**
16673
+ * Moves the item at `fromIndex` of `from` into `to` at `toIndex`, returning new arrays for
16674
+ * both. Does not mutate the inputs. Indices are clamped (`toIndex` may equal `to.length`,
16675
+ * i.e. append).
16676
+ */
16677
+ declare function transferArrayItem<T>(from: readonly T[], to: readonly T[], fromIndex: number, toIndex: number): {
16678
+ from: T[];
16679
+ to: T[];
16680
+ };
16681
+
16682
+ /**
16683
+ * Defaults inherited by descendant drag-drop lists in the surrounding injector
16684
+ * scope. Configure with `provideForDragDropDefaults` either at the application
16685
+ * root or in any component's `providers` array; partial overrides merge with
16686
+ * the parent scope.
16687
+ */
16688
+ interface ForDragDropDefaults {
14840
16689
  /**
14841
- * Milliseconds between automatic slide advances while rotating. Values
14842
- * `<= 0` disable the timer. Default from `provideForCarouselDefaults` or `5000`.
16690
+ * `aria-roledescription` applied to each draggable item. Empty string disables
16691
+ * the attribute.
14843
16692
  */
14844
- readonly autoplayInterval: _angular_core.InputSignalWithTransform<number, unknown>;
16693
+ itemRoleDescription: string;
14845
16694
  /**
14846
- * Writing direction. When unset (default `null`), the inherited ambient
14847
- * direction is resolved from the nearest ancestor carrying a `dir` attribute
14848
- * (or `<html dir>`), defaulting to `'ltr'`. An explicit `[dir]` always wins.
14849
- * The resolved value is reflected to the host `dir` attribute and swaps
14850
- * ArrowLeft / ArrowRight semantics on the indicator group in RTL.
16695
+ * Announcement when an item is lifted. `index` and `total` describe the source
16696
+ * list and are 1-based.
14851
16697
  */
14852
- readonly _dirInput: _angular_core.InputSignal<WritingDirection | null>;
14853
- readonly dir: _angular_core.Signal<WritingDirection>;
14854
- /** Roving tabindex tracker for the indicator group. */
14855
- readonly roving: RovingTabindex;
14856
- /** Whether auto-rotation is "on" (user intent). Sticky once the user decides. */
14857
- readonly playing: _angular_core.Signal<boolean>;
14858
- /** Whether the carousel is actively auto-rotating right now. */
14859
- readonly rotating: _angular_core.Signal<boolean>;
14860
- /** Total number of registered slides. Reactive. */
14861
- readonly slideCount: _angular_core.Signal<number>;
16698
+ announceLift: (label: string, index: number, total: number) => string;
14862
16699
  /**
14863
- * The `--for-carousel-offset` value to apply via `transform` on the track.
14864
- * Pure arithmetic no layout measurement — so it is safe in Vitest.
16700
+ * Announcement when the drop target position changes. `index` and `total`
16701
+ * describe the target list and are 1-based.
14865
16702
  */
14866
- readonly offset: _angular_core.Signal<string>;
14867
- /** The measured viewport width, or `null` before first measurement / on the server. */
14868
- readonly viewportWidth: _angular_core.Signal<string | null>;
14869
- /** The measured viewport height, or `null` before first measurement / on the server. */
14870
- readonly viewportHeight: _angular_core.Signal<string | null>;
14871
- constructor();
14872
- /** Returns `true` when scrolling backward is possible given the current loop/index state. */
14873
- canScrollPrev(): boolean;
14874
- /** Returns `true` when scrolling forward is possible given the current loop/index state. */
14875
- canScrollNext(): boolean;
14876
- /** Navigate to the previous slide. No-op at index 0 when not looping. */
14877
- scrollPrev(): void;
14878
- /** Navigate to the next slide. No-op at the last index when not looping. */
14879
- scrollNext(): void;
16703
+ announceMove: (label: string, index: number, total: number) => string;
14880
16704
  /**
14881
- * Navigate to the slide at `index`. Clamps to `[0, slideCount-1]` when not
14882
- * looping; wraps modulo `slideCount` when looping.
16705
+ * Announcement on a committed drop. `index` and `total` describe the
16706
+ * destination list and are 1-based.
14883
16707
  */
14884
- scrollTo(index: number): void;
16708
+ announceDrop: (label: string, index: number, total: number) => string;
16709
+ /** Announcement when a drag is cancelled. */
16710
+ announceCancel: (label: string) => string;
16711
+ /** Distance in px from a scroll edge that arms auto-scroll during a pointer drag. */
16712
+ autoScrollEdgeSize: number;
16713
+ /** Maximum scroll delta in px applied per animation frame while auto-scrolling. */
16714
+ autoScrollMaxSpeed: number;
16715
+ }
16716
+ /** Token holding the resolved drag-drop defaults for the current scope. */
16717
+ declare const FOR_DRAG_DROP_DEFAULTS: _angular_core.InjectionToken<ForDragDropDefaults>;
16718
+ /**
16719
+ * Configures forty-cdk drag-drop defaults for this injector scope. Partial
16720
+ * overrides inherit unspecified keys from the parent scope (or library
16721
+ * defaults at the root).
16722
+ */
16723
+ declare function provideForDragDropDefaults(defaults?: Partial<ForDragDropDefaults>): Provider[];
16724
+
16725
+ /** Activation timing for interactive-mode arrow navigation. */
16726
+ type StepperActivationMode = 'automatic' | 'manual';
16727
+ /** Accessibility model: interactive Tabs pattern vs display-only progress list. */
16728
+ type StepperMode = 'interactive' | 'progress';
16729
+ /**
16730
+ * Registry entry for one step, owned by `ForStepperItem`. Drives index
16731
+ * derivation and linear gating.
16732
+ */
16733
+ interface ForStepperItemHandle {
16734
+ /** Host element, used for DOM-order sorting in the collection. */
16735
+ readonly host: HTMLElement;
16736
+ /** Whether this step has been marked as completed by the consumer. */
16737
+ readonly completed: Signal<boolean>;
16738
+ /** Whether this step can be skipped when the stepper is in linear mode. */
16739
+ readonly optional: Signal<boolean>;
16740
+ /** Whether this step is disabled (own `disabled` OR root `disabled`). */
16741
+ readonly effectiveDisabled: Signal<boolean>;
16742
+ /** Whether this step has an error condition. */
16743
+ readonly hasError: Signal<boolean>;
16744
+ /** The resolved `data-state` string for this step. */
16745
+ readonly resolvedState: Signal<string>;
16746
+ }
16747
+ /**
16748
+ * Registry entry for one trigger (roving participant and id source). Used by
16749
+ * the root to wire roving tabindex, id lookups, and navigation.
16750
+ */
16751
+ interface ForStepperTriggerHandle {
16752
+ /** Host element, used for DOM-order sorting and focus moves. */
16753
+ readonly host: HTMLElement;
16754
+ /** The trigger's own host id, for `aria-labelledby` on content panels. */
16755
+ readonly id: Signal<string>;
14885
16756
  /**
14886
- * Move focus from `currentIndicator` according to `action` and activate the
14887
- * target slide (automatic activation). Used by `ForCarouselIndicator`'s
14888
- * keydown handler.
16757
+ * Whether this trigger can be focused and activated. `false` when the step
16758
+ * is disabled or not yet reachable in linear mode.
14889
16759
  */
14890
- navigate(currentIndicator: HTMLElement, action: ListNavigationAction): void;
14891
- registerSlide(handle: ForCarouselSlideHandle): void;
14892
- unregisterSlide(handle: ForCarouselSlideHandle): void;
14893
- registerIndicator(handle: ForCarouselIndicatorHandle): void;
14894
- unregisterIndicator(handle: ForCarouselIndicatorHandle): void;
14895
- /** Called by `ForCarouselViewport` at construction to wire the geometry observer. */
14896
- setViewport(el: HTMLElement, id: string): void;
14897
- /** The id of the registered viewport element, or `null` if none is mounted. */
14898
- viewportId(): string | null;
14899
- /** DOM-order index of the registered slide whose host equals `host`, or -1. */
14900
- indexOfSlide(host: HTMLElement): number;
14901
- /** DOM-order index of the registered indicator whose host equals `host`, or -1. */
14902
- indexOfIndicator(host: HTMLElement): number;
14903
- /** Returns `true` when `index` is the current active slide index. */
16760
+ readonly selectable: Signal<boolean>;
16761
+ /**
16762
+ * Inverse of `selectable`. Required by `firstEnabledHost` and
16763
+ * `reconcileRovingActive`, which read a `disabled` signal per handle.
16764
+ */
16765
+ readonly disabled: Signal<boolean>;
16766
+ }
16767
+ /**
16768
+ * Registry entry for one content panel (id source; positional). The content's
16769
+ * position in this collection determines its associated step index.
16770
+ */
16771
+ interface ForStepperContentHandle {
16772
+ /** Host element, used for DOM-order sorting and index derivation. */
16773
+ readonly host: HTMLElement;
16774
+ /** The panel's own host id, for `aria-controls` on triggers. */
16775
+ readonly id: Signal<string>;
16776
+ }
16777
+ /**
16778
+ * Coordination contract owned by `ForStepper`. Triggers, items, and content
16779
+ * panels register here; navigation and selection flow back through these
16780
+ * methods.
16781
+ *
16782
+ * Implements the [WAI-ARIA Tabs pattern](https://www.w3.org/WAI/ARIA/apg/patterns/tabs/)
16783
+ * in `mode="interactive"` and a `<ol>`-based progress list with
16784
+ * `aria-current="step"` in `mode="progress"`.
16785
+ */
16786
+ interface ForStepperContext {
16787
+ /** Two-way bindable selected step index. */
16788
+ readonly selectedIndex: Signal<number>;
16789
+ /** When true, steps are only reachable after all preceding steps are completed or optional. */
16790
+ readonly linear: Signal<boolean>;
16791
+ /** Accessibility model — `'interactive'` (Tabs APG) or `'progress'` (progress list). */
16792
+ readonly mode: Signal<StepperMode>;
16793
+ /** Layout axis for the step list. */
16794
+ readonly orientation: Signal<'horizontal' | 'vertical'>;
16795
+ /** Arrow-key activation timing when in interactive mode. */
16796
+ readonly activationMode: Signal<StepperActivationMode>;
16797
+ /** Resolved writing direction (`'ltr'` or `'rtl'`). */
16798
+ readonly dir: Signal<WritingDirection>;
16799
+ /** Whether the entire stepper is disabled. */
16800
+ readonly disabled: Signal<boolean>;
16801
+ /** Total number of registered step items. */
16802
+ readonly count: Signal<number>;
16803
+ /**
16804
+ * True when the stepper has reached the terminal completed state
16805
+ * (`selectedIndex()` >= `count()`).
16806
+ */
16807
+ readonly isCompleted: Signal<boolean>;
16808
+ /** Roving tabindex tracker for interactive-mode triggers. */
16809
+ readonly roving: RovingTabindex;
16810
+ /** Returns the DOM-order index of `item` in the item collection, or -1 if not found. */
16811
+ indexOf(item: ForStepperItemHandle): number;
16812
+ /** Returns true when `index` matches the currently selected step. */
14904
16813
  isCurrent(index: number): boolean;
14905
16814
  /**
14906
- * Returns `true` when `index` falls within the visible window
14907
- * `[activeIndex, activeIndex + slidesPerView - 1]`.
16815
+ * Returns true when step `index` can be navigated to in linear mode. Index 0
16816
+ * is always reachable; subsequent steps require all preceding steps to be
16817
+ * completed or optional.
14908
16818
  */
14909
- isInView(index: number): boolean;
16819
+ isReachable(index: number): boolean;
16820
+ /** Returns the resolved `data-state` string for step at `index`. */
16821
+ resolvedStateFor(index: number): string;
14910
16822
  /**
14911
- * Returns `true` when `el` is the host of the first non-disabled indicator
14912
- * in DOM order. Used by the tabindex fallback when no indicator is current.
16823
+ * Selects step `index`. No-op when the root is disabled, when `index` is
16824
+ * out of range, or when the step is not reachable in linear mode.
14913
16825
  */
14914
- isFirstEnabledIndicator(el: HTMLElement): boolean;
16826
+ select(index: number): void;
14915
16827
  /**
14916
- * Returns `true` when at least one registered, non-disabled indicator
14917
- * matches the current `activeIndex`. Used by the tabindex ladder to decide
14918
- * whether the first-enabled fallback must reclaim the tab stop.
16828
+ * Advances to the next step, or into the terminal completed state when on
16829
+ * the last step. No-op when the root is disabled, when already in the terminal state, or
16830
+ * (in linear mode) when the current step is neither completed nor optional.
14919
16831
  */
14920
- hasCurrentIndicator(): boolean;
14921
- /** Start auto-rotation (explicit, sticky). Overrides the reduced-motion auto-start gate. */
14922
- play(): void;
14923
- /** Stop auto-rotation (explicit, sticky). Hover/focus/visibility changes will not restart it. */
14924
- pause(): void;
14925
- /** Toggle auto-rotation. Called by `[forCarouselRotationControl]`. */
14926
- toggleAutoplay(): void;
14927
- protected onAutoplayPause(reason: 'hover' | 'focus'): void;
14928
- protected onAutoplayResume(reason: 'hover' | 'focus'): void;
14929
- protected onAutoplayFocusOut(event: FocusEvent): void;
14930
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<ForCarousel, never>;
14931
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForCarousel, "[forCarousel]", ["forCarousel"], { "activeIndex": { "alias": "activeIndex"; "required": false; "isSignal": true; }; "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; "loop": { "alias": "loop"; "required": false; "isSignal": true; }; "align": { "alias": "align"; "required": false; "isSignal": true; }; "slidesPerView": { "alias": "slidesPerView"; "required": false; "isSignal": true; }; "containScroll": { "alias": "containScroll"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "autoplay": { "alias": "autoplay"; "required": false; "isSignal": true; }; "autoplayInterval": { "alias": "autoplayInterval"; "required": false; "isSignal": true; }; "_dirInput": { "alias": "dir"; "required": false; "isSignal": true; }; }, { "activeIndex": "activeIndexChange"; }, never, never, true, never>;
16832
+ next(): void;
16833
+ /**
16834
+ * Retreats to the previous step. No-op when the root is disabled or the
16835
+ * first step is already selected. Bypasses the linear reachability gate
16836
+ * going back always works.
16837
+ */
16838
+ previous(): void;
16839
+ /**
16840
+ * Returns true when the Next button can advance — including advancing the last
16841
+ * step into the terminal completed state. False when disabled, already in the
16842
+ * terminal state, or (in linear mode) the current step is not completed/optional.
16843
+ */
16844
+ canAdvance(): boolean;
16845
+ /** Returns true when the Previous button can retreat. False when disabled or at the first step. */
16846
+ canRetreat(): boolean;
16847
+ /**
16848
+ * Moves focus from `currentTrigger` according to `action` (interactive mode
16849
+ * only). In automatic activation mode, also selects the target step.
16850
+ * Disabled / unreachable triggers are skipped.
16851
+ */
16852
+ navigate(currentTrigger: HTMLElement, action: ListNavigationAction): void;
16853
+ /** Registers a step item handle into the item collection. */
16854
+ registerItem(h: ForStepperItemHandle): void;
16855
+ /** Unregisters a step item handle from the item collection. */
16856
+ unregisterItem(h: ForStepperItemHandle): void;
16857
+ /** Registers a trigger handle into the trigger collection. */
16858
+ registerTrigger(h: ForStepperTriggerHandle): void;
16859
+ /** Unregisters a trigger handle from the trigger collection and the roving tracker. */
16860
+ unregisterTrigger(h: ForStepperTriggerHandle): void;
16861
+ /** Registers a content panel handle into the content collection. */
16862
+ registerContent(h: ForStepperContentHandle): void;
16863
+ /** Unregisters a content panel handle from the content collection. */
16864
+ unregisterContent(h: ForStepperContentHandle): void;
16865
+ /**
16866
+ * Returns the id of the trigger at `index`, or `null` if there is no
16867
+ * registered trigger at that position.
16868
+ */
16869
+ triggerIdFor(index: number): string | null;
16870
+ /**
16871
+ * Returns the id of the content panel at `index`, or `null` if there is no
16872
+ * registered panel at that position.
16873
+ */
16874
+ contentIdFor(index: number): string | null;
16875
+ /**
16876
+ * Returns the DOM-order index of the content panel whose host is `host`, or
16877
+ * -1 if not registered. Used by `ForStepperContent` to derive its step index
16878
+ * reactively.
16879
+ */
16880
+ indexOfContent(host: HTMLElement): number;
16881
+ /**
16882
+ * True when `el` is the first selectable trigger (the roving entry-point
16883
+ * fallback when no step is selected or the roving pointer is stale).
16884
+ */
16885
+ isFirstSelectableTrigger(el: HTMLElement): boolean;
16886
+ /**
16887
+ * True when some registered trigger corresponds to the currently selected
16888
+ * step. Distinguishes "the current step owns the tab stop" from "the selected
16889
+ * index points at a missing or unreachable trigger" so the per-trigger
16890
+ * tabindex fallback can re-engage the first-selectable entry point.
16891
+ */
16892
+ hasCurrentTrigger(): boolean;
16893
+ }
16894
+ /**
16895
+ * Per-step state contract. Provided by `ForStepperItem`; consumed by
16896
+ * `ForStepperTrigger`, `ForStepperIndicator`, and `ForStepperSeparator`.
16897
+ */
16898
+ interface ForStepperItemContext {
16899
+ /** DOM-order index of this step within the stepper. */
16900
+ readonly index: Signal<number>;
16901
+ /** True when this step is the currently selected step. */
16902
+ readonly current: Signal<boolean>;
16903
+ /**
16904
+ * True when this step can be focused and activated (reachable and not
16905
+ * effectively disabled).
16906
+ */
16907
+ readonly selectable: Signal<boolean>;
16908
+ /** Whether this step has been marked as completed. */
16909
+ readonly completed: Signal<boolean>;
16910
+ /** Whether this step can be skipped when the stepper is in linear mode. */
16911
+ readonly optional: Signal<boolean>;
16912
+ /** Whether this step is disabled (own `disabled` OR root `disabled`). */
16913
+ readonly effectiveDisabled: Signal<boolean>;
16914
+ /** Whether this step has an error condition. */
16915
+ readonly hasError: Signal<boolean>;
16916
+ /** Resolved `data-state` string (precedence: custom state > error > active > completed > pending). */
16917
+ readonly resolvedState: Signal<string>;
16918
+ /**
16919
+ * Selects this step. Delegates to `ForStepperContext.select(index)` — the
16920
+ * linear reachability and disabled guards apply.
16921
+ */
16922
+ select(): void;
14932
16923
  }
16924
+ /** Injection token for the root stepper context (`ForStepper`). */
16925
+ declare const FOR_STEPPER_CONTEXT: InjectionToken<ForStepperContext>;
16926
+ /** Injection token for the per-step item context (`ForStepperItem`). */
16927
+ declare const FOR_STEPPER_ITEM_CONTEXT: InjectionToken<ForStepperItemContext>;
14933
16928
 
14934
16929
  /**
14935
- * Clips the visible window of the carousel track. Acts as the APG-mandated
14936
- * live region for screen-reader announcements. `aria-live` flips between
14937
- * `"off"` while the carousel is actively auto-rotating (so advancing slides
14938
- * do not bombard the screen reader) and `"polite"` at all other times so
14939
- * manual navigation is announced. Also serves as the `aria-controls` target
14940
- * for the prev/next buttons.
16930
+ * Root of the Stepper primitive. Owns the selected step index, linear
16931
+ * progression, accessibility mode, orientation, and disabled state. Provides
16932
+ * the shared context to descendant directives.
14941
16933
  *
14942
- * Registers itself with the carousel root on construction so the root's
14943
- * `injectElementSize` observer starts and prev/next's `aria-controls` resolves.
14944
- * There must be exactly one viewport per carousel.
16934
+ * Implements the [WAI-ARIA Tabs pattern](https://www.w3.org/WAI/ARIA/apg/patterns/tabs/)
16935
+ * in `mode="interactive"` (roving tabindex, `role="tablist"`, `aria-selected`)
16936
+ * and an ordered-list progress pattern with `aria-current="step"` in
16937
+ * `mode="progress"`.
16938
+ *
16939
+ * `activationMode='manual'` (default): arrow navigation only moves focus;
16940
+ * Space / Enter activates. Recommended for wizards where step activation
16941
+ * triggers validation. `activationMode='automatic'`: arrow navigation moves
16942
+ * focus AND selects the step.
14945
16943
  */
14946
- declare class ForCarouselViewport {
16944
+ declare class ForStepper implements ForStepperContext {
14947
16945
  #private;
14948
- protected readonly ctx: forty_cdk.ForCarouselContext;
14949
- /** The resolved id of this element generated or adopted from a consumer-set static `id`. */
14950
- readonly id: _angular_core.Signal<string>;
16946
+ /**
16947
+ * Two-way bindable selected step index in the inclusive range `0 count`.
16948
+ * Defaults to `0`. The terminal value `=== count()` (one past the last step) is
16949
+ * the **completed** state (see `isCompleted` / `complete`). The `model()` change
16950
+ * emitter (`(selectedIndexChange)`) fires only on internal selection changes
16951
+ * (trigger click, Next/Previous, automatic-mode arrow navigation), never on
16952
+ * consumer writes via `[(selectedIndex)]`.
16953
+ */
16954
+ readonly selectedIndex: _angular_core.ModelSignal<number>;
16955
+ /**
16956
+ * Emits once each time the stepper transitions **into** the completed terminal
16957
+ * state — i.e. when `selectedIndex()` reaches `count()`. Does not re-emit while
16958
+ * it stays completed; retreating via `previous()` and re-entering emits again.
16959
+ */
16960
+ readonly complete: _angular_core.OutputEmitterRef<void>;
16961
+ /**
16962
+ * When true, steps are only reachable after all preceding steps are completed
16963
+ * or optional. Navigating back (`previous()`) always works regardless of this
16964
+ * flag.
16965
+ */
16966
+ readonly linear: _angular_core.InputSignalWithTransform<boolean, unknown>;
16967
+ /**
16968
+ * Accessibility model. `'interactive'` (default): full WAI-ARIA Tabs pattern
16969
+ * — `role="tablist"`, `role="tab"`, `role="tabpanel"`, roving tabindex, arrow
16970
+ * navigation. `'progress'`: ordered list with `aria-current="step"` on the
16971
+ * active trigger — no tab stop manipulation.
16972
+ */
16973
+ readonly mode: _angular_core.InputSignal<StepperMode>;
16974
+ /**
16975
+ * Layout axis for the step list. Affects `aria-orientation` on the list and
16976
+ * which arrow keys navigate in interactive mode.
16977
+ */
16978
+ readonly orientation: _angular_core.InputSignal<"vertical" | "horizontal">;
16979
+ /**
16980
+ * Arrow-key activation timing in interactive mode. Defaults to the value from
16981
+ * `provideForStepperDefaults` for the surrounding scope (library default:
16982
+ * `'manual'`).
16983
+ */
16984
+ readonly activationMode: _angular_core.InputSignal<StepperActivationMode>;
16985
+ /**
16986
+ * Whether arrow navigation wraps around past the first / last selectable
16987
+ * trigger. Defaults to the value from `provideForStepperDefaults` for the
16988
+ * surrounding scope (library default: `true`).
16989
+ */
16990
+ readonly loop: _angular_core.InputSignalWithTransform<boolean, unknown>;
16991
+ /**
16992
+ * When true, all step triggers are non-interactive and the root carries
16993
+ * `data-disabled`.
16994
+ */
16995
+ readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
16996
+ /**
16997
+ * Writing direction. When unset (default `null`), the inherited ambient
16998
+ * direction is resolved from the nearest ancestor carrying a `dir` attribute
16999
+ * (or `<html dir>`), defaulting to `'ltr'`. An explicit `[dir]` always wins.
17000
+ * The resolved value is reflected to the host `dir` attribute and swaps
17001
+ * ArrowLeft / ArrowRight semantics in RTL.
17002
+ */
17003
+ readonly _dirInput: _angular_core.InputSignal<WritingDirection | null>;
17004
+ readonly dir: _angular_core.Signal<WritingDirection>;
17005
+ readonly roving: RovingTabindex;
17006
+ /** Total number of registered step items. */
17007
+ readonly count: _angular_core.Signal<number>;
17008
+ /**
17009
+ * True when the stepper is in the terminal **completed** state: `selectedIndex()`
17010
+ * has reached `count()` (one past the last step). No step is current and every
17011
+ * `[forStepperContent]` panel is inactive while this holds.
17012
+ */
17013
+ readonly isCompleted: _angular_core.Signal<boolean>;
14951
17014
  constructor();
14952
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<ForCarouselViewport, never>;
14953
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForCarouselViewport, "[forCarouselViewport]", ["forCarouselViewport"], {}, {}, never, never, true, never>;
17015
+ indexOf(item: ForStepperItemHandle): number;
17016
+ isCurrent(index: number): boolean;
17017
+ isReachable(index: number): boolean;
17018
+ resolvedStateFor(index: number): string;
17019
+ select(index: number): void;
17020
+ next(): void;
17021
+ previous(): void;
17022
+ canAdvance(): boolean;
17023
+ canRetreat(): boolean;
17024
+ navigate(currentTrigger: HTMLElement, action: ListNavigationAction): void;
17025
+ registerItem(h: ForStepperItemHandle): void;
17026
+ unregisterItem(h: ForStepperItemHandle): void;
17027
+ registerTrigger(h: ForStepperTriggerHandle): void;
17028
+ unregisterTrigger(h: ForStepperTriggerHandle): void;
17029
+ registerContent(h: ForStepperContentHandle): void;
17030
+ unregisterContent(h: ForStepperContentHandle): void;
17031
+ triggerIdFor(index: number): string | null;
17032
+ contentIdFor(index: number): string | null;
17033
+ indexOfContent(host: HTMLElement): number;
17034
+ isFirstSelectableTrigger(el: HTMLElement): boolean;
17035
+ hasCurrentTrigger(): boolean;
17036
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ForStepper, never>;
17037
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForStepper, "[forStepper]", ["forStepper"], { "selectedIndex": { "alias": "selectedIndex"; "required": false; "isSignal": true; }; "linear": { "alias": "linear"; "required": false; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; "activationMode": { "alias": "activationMode"; "required": false; "isSignal": true; }; "loop": { "alias": "loop"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "_dirInput": { "alias": "dir"; "required": false; "isSignal": true; }; }, { "selectedIndex": "selectedIndexChange"; "complete": "complete"; }, never, never, true, never>;
17038
+ }
17039
+
17040
+ /**
17041
+ * The step-list container. In `mode="interactive"` renders as `role="tablist"`
17042
+ * with `aria-orientation`; in `mode="progress"` renders as `role="list"`.
17043
+ *
17044
+ * Apply on an `<ol>` (recommended for semantic list markup) wrapping the
17045
+ * `[forStepperItem]` elements. The `[forStepperContent]` panels live as
17046
+ * siblings of the list.
17047
+ */
17048
+ declare class ForStepperList {
17049
+ protected readonly ctx: forty_cdk.ForStepperContext;
17050
+ /** Accessible name for the step list. Defers to a consumer `aria-labelledby`. */
17051
+ readonly ariaLabel: _angular_core.InputSignal<string | null>;
17052
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ForStepperList, never>;
17053
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForStepperList, "[forStepperList]", ["forStepperList"], { "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
14954
17054
  }
14955
17055
 
14956
17056
  /**
14957
- * The flex container of slides. The consumer's CSS reads
14958
- * `--for-carousel-offset` (inherited from the root) and applies it as a
14959
- * `transform: translateX(...)` / `translateY(...)` on this element.
14960
- * The directive adds no animation or transform itself.
17057
+ * One step within a `ForStepper`. Owns per-step state (`completed`, `optional`,
17058
+ * `disabled`, `hasError`, `state`) and exposes the `ForStepperItemContext` that
17059
+ * child `[forStepperTrigger]`, `[forStepperIndicator]`, and
17060
+ * `[forStepperSeparator]` directives consume.
14961
17061
  *
14962
- * Reflects `data-orientation` so the consumer can select the correct CSS
14963
- * axis via `[data-orientation="vertical"] [forCarouselTrack] { ... }`.
17062
+ * Apply on a list item element (e.g. `<li forStepperItem>`). The step's index
17063
+ * is derived reactively from its DOM position within the stepper via the root's
17064
+ * item collection.
14964
17065
  */
14965
- declare class ForCarouselTrack {
14966
- protected readonly ctx: forty_cdk.ForCarouselContext;
14967
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<ForCarouselTrack, never>;
14968
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForCarouselTrack, "[forCarouselTrack]", ["forCarouselTrack"], {}, {}, never, never, true, never>;
17066
+ declare class ForStepperItem implements ForStepperItemContext, ForStepperItemHandle {
17067
+ protected readonly ctx: forty_cdk.ForStepperContext;
17068
+ /** Host element — satisfies `ForStepperItemHandle.host` for collection registration. */
17069
+ readonly host: HTMLElement;
17070
+ /**
17071
+ * Manual completion flag. When `true`, the step is completed regardless of any
17072
+ * bound `field()`. Bind via `[completed]`.
17073
+ */
17074
+ readonly _completedInput: _angular_core.InputSignalWithTransform<boolean, unknown>;
17075
+ /** Marks this step as optional (can be skipped in linear mode). */
17076
+ readonly optional: _angular_core.InputSignalWithTransform<boolean, unknown>;
17077
+ /** When true, this step's trigger ignores clicks and the step is unreachable by keyboard. */
17078
+ readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
17079
+ /**
17080
+ * Manual error flag. When `true`, the step reflects the `'error'` resolved state
17081
+ * (unless current) regardless of any bound `field()`. Bind via `[hasError]`.
17082
+ */
17083
+ readonly _hasErrorInput: _angular_core.InputSignalWithTransform<boolean, unknown>;
17084
+ /**
17085
+ * Optional Signal Forms field. When bound, the step's `completed` and
17086
+ * `hasError` derive from the field's reactive validity: `completed` is `true`
17087
+ * when the field is valid and touched; `hasError` is `true` when the field is
17088
+ * touched and invalid. A manual `[completed]` / `[hasError]` input always wins
17089
+ * when set. Leave unset to drive completion manually.
17090
+ *
17091
+ * The `@angular/forms` peer is optional: the field *type* is imported with
17092
+ * `import type`, so binding `[field]` requires the peer but the primitive
17093
+ * compiles and tree-shakes without it for consumers who never use it.
17094
+ */
17095
+ readonly field: _angular_core.InputSignal<FieldTree<unknown> | null>;
17096
+ /**
17097
+ * Whether this step is completed. A manual `[completed]` input wins; otherwise,
17098
+ * when a `field()` is bound, derives `true` from `field` valid + touched.
17099
+ */
17100
+ readonly completed: _angular_core.Signal<boolean>;
17101
+ /**
17102
+ * Whether this step has an error. A manual `[hasError]` input wins; otherwise,
17103
+ * when a `field()` is bound, derives `true` from `field` touched + invalid.
17104
+ */
17105
+ readonly hasError: _angular_core.Signal<boolean>;
17106
+ /**
17107
+ * Custom state string override. When non-empty, wins over the derived resolved
17108
+ * state (`error`, `active`, `completed`, `pending`) and drives every
17109
+ * `data-state` attribute on this step.
17110
+ */
17111
+ readonly state: _angular_core.InputSignal<string | null>;
17112
+ /** Whether this step is disabled — own `disabled` OR the root stepper's `disabled`. */
17113
+ readonly effectiveDisabled: _angular_core.Signal<boolean>;
17114
+ /** DOM-order index of this step within the stepper. */
17115
+ readonly index: _angular_core.Signal<number>;
17116
+ /** True when this step is the currently selected step. */
17117
+ readonly current: _angular_core.Signal<boolean>;
17118
+ /**
17119
+ * True when this step can be focused and activated. False when the step is
17120
+ * effectively disabled or not yet reachable in linear mode.
17121
+ */
17122
+ readonly selectable: _angular_core.Signal<boolean>;
17123
+ /**
17124
+ * Resolved `data-state` string. Precedence:
17125
+ * 1. Custom `state()` when non-empty.
17126
+ * 2. `'error'` when `hasError()` and not current.
17127
+ * 3. `'active'` when current.
17128
+ * 4. `'completed'` when `completed()`.
17129
+ * 5. `'pending'` otherwise.
17130
+ */
17131
+ readonly resolvedState: _angular_core.Signal<string>;
17132
+ constructor();
17133
+ /** Selects this step. Delegates to `ForStepperContext.select(index)`. */
17134
+ select(): void;
17135
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ForStepperItem, never>;
17136
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForStepperItem, "[forStepperItem]", ["forStepperItem"], { "_completedInput": { "alias": "completed"; "required": false; "isSignal": true; }; "optional": { "alias": "optional"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "_hasErrorInput": { "alias": "hasError"; "required": false; "isSignal": true; }; "field": { "alias": "field"; "required": false; "isSignal": true; }; "state": { "alias": "state"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
14969
17137
  }
14970
17138
 
14971
17139
  /**
14972
- * One slide in the carousel track. Carries `role="group"` and
14973
- * `aria-roledescription="slide"` per the WAI-ARIA APG Carousel pattern.
17140
+ * Header for one step. In `mode="interactive"` carries `role="tab"`, participates
17141
+ * in the roving tabindex, and wires `aria-selected` / `aria-controls` /
17142
+ * `aria-disabled`. In `mode="progress"` carries `aria-current="step"` on the
17143
+ * active step only and is a static element (no tab-stop manipulation).
14974
17144
  *
14975
- * The default `aria-label` is the positional `"N of M"` string (APG mandates
14976
- * a positional label on each slide). Set `ariaLabel` to override with a
14977
- * semantically richer label for the specific slide content.
17145
+ * Apply on a `<button type="button">` for interactive mode so Enter / Space
17146
+ * activation is native. A static element (`<span>`) is acceptable for progress
17147
+ * mode.
14978
17148
  *
14979
- * Off-view slides (outside `[activeIndex, activeIndex + slidesPerView - 1]`)
14980
- * are hidden from the accessibility tree and focus order via
14981
- * `aria-hidden="true"` + `inert`.
17149
+ * Disabled triggers in interactive mode keep their tab stop (`aria-disabled`
17150
+ * instead of native `disabled`) so assistive tech can announce them.
14982
17151
  */
14983
- declare class ForCarouselSlide {
17152
+ declare class ForStepperTrigger {
14984
17153
  #private;
14985
- protected readonly ctx: forty_cdk.ForCarouselContext;
17154
+ protected readonly ctx: forty_cdk.ForStepperContext;
17155
+ protected readonly item: forty_cdk.ForStepperItemContext;
17156
+ /** Generated (or consumer-set static) id for this trigger. Used by content panels for `aria-labelledby`. */
17157
+ readonly id: _angular_core.Signal<string>;
17158
+ /** Id of the content panel this trigger controls (the matching panel by step index). */
17159
+ protected readonly controlsId: _angular_core.Signal<string | null>;
14986
17160
  /**
14987
- * Override the default positional `aria-label` (`"N of M"`). Use this to
14988
- * provide a semantically richer label when the slide's content has a
14989
- * meaningful title (e.g. the product name). When `null` (default), the
14990
- * positional label is used automatically.
17161
+ * APG tabindex cascade (interactive mode only). In progress mode returns
17162
+ * `null` so no tab-stop attribute is emitted. In interactive mode:
17163
+ * - `null` when not selectable (disabled or unreachable in linear mode).
17164
+ * - Roving-tracker value once any trigger has been focused.
17165
+ * - `0` when this step is current.
17166
+ * - `-1` when another trigger owns the current step.
17167
+ * - `0` if this is the first selectable trigger (fallback entry point).
17168
+ * - `-1` otherwise.
14991
17169
  */
14992
- readonly ariaLabel: _angular_core.InputSignal<string | null>;
14993
- /** Whether this is the current (active) slide. */
14994
- protected readonly current: _angular_core.Signal<boolean>;
14995
- /** Whether this slide is within the visible window. */
14996
- protected readonly inView: _angular_core.Signal<boolean>;
14997
- /** The positional `"N of M"` label used when no explicit `ariaLabel` is set. */
14998
- protected readonly positionLabel: _angular_core.Signal<string | null>;
17170
+ protected readonly tabindex: _angular_core.Signal<0 | -1 | null>;
14999
17171
  constructor();
15000
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<ForCarouselSlide, never>;
15001
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForCarouselSlide, "[forCarouselSlide]", ["forCarouselSlide"], { "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
17172
+ protected onClick(): void;
17173
+ protected onFocus(): void;
17174
+ protected onKeyDown(event: KeyboardEvent): void;
17175
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ForStepperTrigger, never>;
17176
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForStepperTrigger, "[forStepperTrigger]", ["forStepperTrigger"], {}, {}, never, never, true, never>;
15002
17177
  }
15003
17178
 
15004
17179
  /**
15005
- * Previous-slide button. Apply on a `<button>` so Enter/Space activation is
15006
- * native. Disabled (via the native `disabled` attribute) at index 0 when the
15007
- * carousel is not looping. When `loop` is `true` it is never disabled.
17180
+ * Decorative icon slot for a step. Hidden from the accessibility tree
17181
+ * (`aria-hidden="true"`). Reflects the step's resolved `data-state` so
17182
+ * consumers can swap icons via CSS `[data-state="completed"]`,
17183
+ * `[data-state="error"]`, etc., or with `@if` keyed on the exported
17184
+ * `#indicator="forStepperIndicator"` reference.
15008
17185
  *
15009
- * Points `aria-controls` at the viewport's id so screen readers announce the
15010
- * relationship. Clicking does not move focus (APG).
17186
+ * Must be used inside a `[forStepperItem]` element.
15011
17187
  */
15012
- declare class ForCarouselPrevious {
15013
- protected readonly ctx: forty_cdk.ForCarouselContext;
15014
- /**
15015
- * Accessible label for this button (e.g. "Previous slide"). When `null`
15016
- * (default), no `aria-label` is emitted — the consumer should supply a
15017
- * visible label or set this input.
15018
- */
15019
- readonly ariaLabel: _angular_core.InputSignal<string | null>;
15020
- protected readonly isDisabled: _angular_core.Signal<boolean>;
15021
- constructor();
15022
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<ForCarouselPrevious, never>;
15023
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForCarouselPrevious, "[forCarouselPrevious]", ["forCarouselPrevious"], { "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
17188
+ declare class ForStepperIndicator {
17189
+ protected readonly item: forty_cdk.ForStepperItemContext;
17190
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ForStepperIndicator, never>;
17191
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForStepperIndicator, "[forStepperIndicator]", ["forStepperIndicator"], {}, {}, never, never, true, never>;
15024
17192
  }
15025
17193
 
15026
17194
  /**
15027
- * Next-slide button. Apply on a `<button>` so Enter/Space activation is
15028
- * native. Disabled (via the native `disabled` attribute) at the last index
15029
- * when the carousel is not looping. When `loop` is `true` it is never disabled.
17195
+ * Decorative connector between steps. Hidden from the accessibility tree
17196
+ * (`aria-hidden="true"`). Reflects `data-state="completed"` when the preceding
17197
+ * step is marked completed, `data-state="pending"` otherwise. Also reflects
17198
+ * `data-orientation` so consumers can style horizontal vs vertical separators
17199
+ * differently.
15030
17200
  *
15031
- * Points `aria-controls` at the viewport's id so screen readers announce the
15032
- * relationship. Clicking does not move focus (APG).
17201
+ * Must be used inside a `[forStepperItem]` element.
15033
17202
  */
15034
- declare class ForCarouselNext {
15035
- protected readonly ctx: forty_cdk.ForCarouselContext;
15036
- /**
15037
- * Accessible label for this button (e.g. "Next slide"). When `null`
15038
- * (default), no `aria-label` is emitted the consumer should supply a
15039
- * visible label or set this input.
15040
- */
15041
- readonly ariaLabel: _angular_core.InputSignal<string | null>;
15042
- protected readonly isDisabled: _angular_core.Signal<boolean>;
15043
- constructor();
15044
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<ForCarouselNext, never>;
15045
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForCarouselNext, "[forCarouselNext]", ["forCarouselNext"], { "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
17203
+ declare class ForStepperSeparator {
17204
+ protected readonly ctx: forty_cdk.ForStepperContext;
17205
+ protected readonly item: forty_cdk.ForStepperItemContext;
17206
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ForStepperSeparator, never>;
17207
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForStepperSeparator, "[forStepperSeparator]", ["forStepperSeparator"], {}, {}, never, never, true, never>;
15046
17208
  }
15047
17209
 
15048
17210
  /**
15049
- * The slide-picker group (dot navigation). Renders as `role="group"` and
15050
- * should receive an `ariaLabel` describing its purpose (e.g. "Choose slide
15051
- * to display") per the WAI-ARIA APG Carousel pattern.
17211
+ * Panel for one step. Correlates to a step by **position** — the Nth
17212
+ * `[forStepperContent]` panel in registration (DOM document) order corresponds
17213
+ * to the Nth step.
15052
17214
  *
15053
- * Keyboard navigation (ArrowLeft/Right, Home/End) and automatic activation
15054
- * live on each `[forCarouselIndicator]` child, not on this container.
17215
+ * In `mode="interactive"` the panel carries `role="tabpanel"` and is a tab
17216
+ * stop (`tabindex="0"`) only when it has no focusable content of its own
17217
+ * (WAI-ARIA Tabs APG rule). In `mode="progress"` the panel carries
17218
+ * `role="group"` and is never a tab stop.
17219
+ *
17220
+ * While inactive the directive reflects `aria-hidden="true"` and `inert` so
17221
+ * mounted-but-inactive panels are removed from the accessibility tree and focus
17222
+ * order automatically. DOM presence is the consumer's responsibility — wrap
17223
+ * with `@if (current())` to unmount or leave mounted and toggle visibility with
17224
+ * CSS via `[data-state="inactive"]`.
15055
17225
  */
15056
- declare class ForCarouselIndicators {
15057
- protected readonly ctx: forty_cdk.ForCarouselContext;
17226
+ declare class ForStepperContent {
17227
+ #private;
17228
+ protected readonly ctx: forty_cdk.ForStepperContext;
17229
+ /** Generated (or consumer-set static) id for this panel. Used by triggers for `aria-controls`. */
17230
+ readonly id: _angular_core.Signal<string>;
17231
+ /** True when this panel corresponds to the currently selected step. */
17232
+ readonly current: _angular_core.Signal<boolean>;
17233
+ /** Id of the trigger that labels this panel (`aria-labelledby`). */
17234
+ protected readonly labelledBy: _angular_core.Signal<string | null>;
15058
17235
  /**
15059
- * Accessible label for the picker group (e.g. "Choose slide to display").
15060
- * APG recommends labelling the group so screen readers can distinguish it
15061
- * from other landmarks.
17236
+ * APG tabindex: `'0'` only when in interactive mode and the panel has no
17237
+ * focusable content of its own, so screen-reader users can reach the panel
17238
+ * itself. A panel containing buttons / links / form controls gets no
17239
+ * `tabindex`, avoiding a redundant tab stop.
15062
17240
  */
15063
- readonly ariaLabel: _angular_core.InputSignal<string | null>;
15064
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<ForCarouselIndicators, never>;
15065
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForCarouselIndicators, "[forCarouselIndicators]", ["forCarouselIndicators"], { "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
17241
+ protected readonly tabindex: _angular_core.Signal<"0" | null>;
17242
+ constructor();
17243
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ForStepperContent, never>;
17244
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForStepperContent, "[forStepperContent]", ["forStepperContent"], {}, {}, never, never, true, never>;
15066
17245
  }
15067
17246
 
15068
17247
  /**
15069
- * One indicator (dot) in the slide picker. Apply on a `<button>` so
15070
- * Enter/Space activation is native. Uses roving tabindex only the current
15071
- * dot owns `tabindex=0`; all others have `tabindex=-1`. Arrow/Home/End
15072
- * navigation activates the target slide automatically (APG "grouped/tabbed
15073
- * picker" variant).
17248
+ * Terminal "all steps complete" panel. Shown (active) only while the stepper is in
17249
+ * the completed state (`selectedIndex` has reached `count`); gated the same way as
17250
+ * `[forStepperContent]` `aria-hidden` / `inert` / `data-state` flip with
17251
+ * `isCompleted()`. The natural place for a wizard's final success panel.
15074
17252
  *
15075
- * The current indicator is marked with `aria-current="true"` (truthy-only).
15076
- * Disabled indicators receive `aria-disabled="true"` and `data-disabled` but
15077
- * stay focusable (custom-role rule) so assistive tech can announce them.
17253
+ * DOM presence is the consumer's responsibility — wrap with `@if` driven by the same
17254
+ * completed condition, or leave it mounted and toggle visibility with CSS via
17255
+ * `[data-state="active"]`.
15078
17256
  */
15079
- declare class ForCarouselIndicator {
15080
- #private;
15081
- protected readonly ctx: forty_cdk.ForCarouselContext;
15082
- /**
15083
- * Override the default positional `aria-label` (e.g. `"Go to slide 1"`).
15084
- * Use this to provide a more descriptive label when the slide has a title.
15085
- */
15086
- readonly ariaLabel: _angular_core.InputSignal<string | null>;
15087
- /**
15088
- * Disables this indicator. Disabled indicators remain focusable (for
15089
- * assistive tech) but ignore click and keyboard activation.
15090
- */
15091
- readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
15092
- /** Whether this indicator corresponds to the current active slide. */
15093
- protected readonly current: _angular_core.Signal<boolean>;
15094
- /** Default positional label used when no explicit `ariaLabel` is set. */
15095
- protected readonly positionLabel: _angular_core.Signal<string | null>;
15096
- /**
15097
- * APG roving tabindex: user-driven roving owns it once any indicator has
15098
- * been focused. Before that, fall back to "current slide's indicator, else
15099
- * first enabled".
15100
- */
15101
- protected readonly tabindex: _angular_core.Signal<0 | -1>;
15102
- constructor();
15103
- protected onClick(): void;
15104
- protected onFocus(): void;
15105
- protected onKeyDown(event: KeyboardEvent): void;
15106
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<ForCarouselIndicator, never>;
15107
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForCarouselIndicator, "[forCarouselIndicator]", ["forCarouselIndicator"], { "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
17257
+ declare class ForStepperCompletedContent {
17258
+ protected readonly ctx: forty_cdk.ForStepperContext;
17259
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ForStepperCompletedContent, never>;
17260
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForStepperCompletedContent, "[forStepperCompletedContent]", ["forStepperCompletedContent"], {}, {}, never, never, true, never>;
15108
17261
  }
15109
17262
 
15110
17263
  /**
15111
- * Play/pause control for carousel auto-rotation. Apply on a `<button>` so
15112
- * Enter/Space activation is native. Its accessible name swaps with the
15113
- * rotation state `stopLabel` while rotating, `startLabel` while stopped
15114
- * per the WAI-ARIA APG Carousel pattern, which forbids `aria-pressed` here.
17264
+ * "Next" button for the stepper. Apply on a `<button>` element. Reflects
17265
+ * `aria-disabled="true"` when `canAdvance()` is false (last step reached, root
17266
+ * disabled, or in linear mode the current step is not completed / optional).
15115
17267
  *
15116
- * Place this control **first** in the carousel's DOM/tab order so assistive
15117
- * technology users meet it before the rotating content (APG requirement).
17268
+ * The button retains its native `type="button"` attribute via the `type` host
17269
+ * binding to prevent accidental form submission.
15118
17270
  *
15119
- * Reflects a boolean `data-playing` attribute (present while rotation is on)
15120
- * as the styling hook for swapping a play/pause icon.
17271
+ * Clicking while `aria-disabled` is a no-op because `next()` guards internally.
15121
17272
  */
15122
- declare class ForCarouselRotationControl {
15123
- protected readonly ctx: forty_cdk.ForCarouselContext;
15124
- /** Accessible name shown while rotation is **stopped** (the button will start it). */
15125
- readonly startLabel: _angular_core.InputSignal<string>;
15126
- /** Accessible name shown while rotation is **playing** (the button will stop it). */
15127
- readonly stopLabel: _angular_core.InputSignal<string>;
15128
- /** The current accessible name — `stopLabel` while playing, else `startLabel`. */
15129
- protected readonly label: _angular_core.Signal<string>;
15130
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<ForCarouselRotationControl, never>;
15131
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForCarouselRotationControl, "[forCarouselRotationControl]", ["forCarouselRotationControl"], { "startLabel": { "alias": "startLabel"; "required": false; "isSignal": true; }; "stopLabel": { "alias": "stopLabel"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
17273
+ declare class ForStepperNext {
17274
+ protected readonly ctx: forty_cdk.ForStepperContext;
17275
+ protected onClick(): void;
17276
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ForStepperNext, never>;
17277
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForStepperNext, "button[forStepperNext]", ["forStepperNext"], {}, {}, never, never, true, never>;
15132
17278
  }
15133
17279
 
15134
17280
  /**
15135
- * Opt-in pointer drag / swipe directive for the Carousel viewport. Apply on the
15136
- * `[forCarouselViewport]` element to enable horizontal or vertical drag-to-navigate.
17281
+ * "Previous" button for the stepper. Apply on a `<button>` element. Reflects
17282
+ * `aria-disabled="true"` when `canRetreat()` is false (first step reached or
17283
+ * root disabled).
15137
17284
  *
15138
- * Publishes `--for-carousel-drag` (px) during the gesture so the consumer can
15139
- * compose it with `--for-carousel-offset` for live track motion. Reflects
15140
- * `data-dragging` while the gesture is armed. Sets `touch-action` automatically
15141
- * to free the cross axis for page scrolling.
17285
+ * The button retains its native `type="button"` attribute via the `type` host
17286
+ * binding to prevent accidental form submission.
15142
17287
  *
15143
- * Under `prefers-reduced-motion: reduce` the live offset is suppressed, but the
15144
- * gesture still snaps `activeIndex` on release (D3).
17288
+ * Clicking while `aria-disabled` is a no-op because `previous()` guards
17289
+ * internally.
15145
17290
  */
15146
- declare class ForCarouselDrag {
15147
- #private;
15148
- protected readonly ctx: forty_cdk.ForCarouselContext;
15149
- /** Disable pointer drag without removing the directive. Default `false`. */
15150
- readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
15151
- /** Whether a drag gesture is currently armed (reflected as `data-dragging`). */
15152
- readonly dragging: _angular_core.Signal<boolean>;
15153
- /** `touch-action` for the viewport: capture the primary axis, free the cross axis. */
15154
- readonly touchAction: _angular_core.Signal<string | null>;
15155
- /** Live offset CSS var; suppressed at rest and under reduced motion (D3). */
15156
- readonly dragVar: _angular_core.Signal<string | null>;
15157
- constructor();
15158
- protected onDragStart(event: Event): void;
15159
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<ForCarouselDrag, never>;
15160
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForCarouselDrag, "[forCarouselDrag]", ["forCarouselDrag"], { "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
17291
+ declare class ForStepperPrevious {
17292
+ protected readonly ctx: forty_cdk.ForStepperContext;
17293
+ protected onClick(): void;
17294
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ForStepperPrevious, never>;
17295
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForStepperPrevious, "button[forStepperPrevious]", ["forStepperPrevious"], {}, {}, never, never, true, never>;
15161
17296
  }
15162
17297
 
15163
17298
  /**
15164
- * Defaults inherited by descendant carousels in the surrounding injector scope.
15165
- * Configure with `provideForCarouselDefaults` either at the application root
15166
- * or in any component's `providers` array; partial overrides merge with
15167
- * the parent scope.
17299
+ * Optional progress indicator for the Stepper. Reads the stepper context and
17300
+ * reflects how far through the steps the user is as a WAI-ARIA
17301
+ * [`progressbar`](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Reference/Roles/progressbar_role):
17302
+ * `aria-valuemin="0"`, `aria-valuemax="100"`, `aria-valuenow` = the computed
17303
+ * percent, and an `aria-valuetext` describing the position. Publishes a
17304
+ * `--for-stepper-progress` (0–1) custom property for styling; ships no visuals.
17305
+ *
17306
+ * Must be used inside a `[forStepper]` element.
15168
17307
  */
15169
- interface ForCarouselDefaults {
17308
+ declare class ForStepperProgress {
17309
+ #private;
17310
+ protected readonly ctx: forty_cdk.ForStepperContext;
15170
17311
  /**
15171
- * Whether index wrap-around is enabled. When `true`, `next` past the last
15172
- * slide wraps to index 0 and `prev` before index 0 wraps to the last slide.
17312
+ * Basis for the reported percent. `'index'` (default) derives progress from
17313
+ * the current step index (matches Ark UI's `Steps.Progress`); `'completed'`
17314
+ * derives it from the count of steps whose resolved state is `completed`.
15173
17315
  */
15174
- loop: boolean;
17316
+ readonly valueBy: _angular_core.InputSignal<"index" | "completed">;
15175
17317
  /**
15176
- * Alignment of the active slide within the viewport. `'start'` (default):
15177
- * the active slide's leading edge aligns with the viewport's leading edge.
15178
- * `'center'` / `'end'` offset accordingly.
17318
+ * Accessible name for the progressbar. Defaults to `null`, emitting no
17319
+ * `aria-label`; prefer a visible label referenced via `aria-labelledby` when
17320
+ * one exists.
15179
17321
  */
15180
- align: CarouselAlign;
17322
+ readonly ariaLabel: _angular_core.InputSignal<string | null>;
15181
17323
  /**
15182
- * Number of slides visible simultaneously in the viewport. Slide width is
15183
- * set to `100% / slidesPerView` by the consumer's CSS.
17324
+ * Progress as a whole-number percent in `[0, 100]`, reflected to
17325
+ * `aria-valuenow` and (divided by 100) to the `--for-stepper-progress`
17326
+ * custom property.
15184
17327
  */
15185
- slidesPerView: number;
17328
+ readonly percent: _angular_core.Signal<number>;
15186
17329
  /**
15187
- * When `true` (and the carousel is not looping), clamps the track offset so the
15188
- * trailing slides align flush to the viewport's trailing edge instead of
15189
- * overscrolling into empty space when `slidesPerView > 1`. The indicator/slide
15190
- * mapping is unchanged — only the visual offset is contained. Default `false`.
17330
+ * Human-readable position string reflected to `aria-valuetext`: `"Step X of N"`
17331
+ * on the `'index'` basis, `"P% complete"` on the `'completed'` basis.
15191
17332
  */
15192
- containScroll: boolean;
15193
- /** Whether the carousel auto-rotates on mount (when not under reduced-motion). Default `false`. */
15194
- autoplay: boolean;
15195
- /** Milliseconds between automatic slide advances. Default `5000`. */
15196
- autoplayInterval: number;
17333
+ readonly valueText: _angular_core.Signal<string>;
17334
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ForStepperProgress, never>;
17335
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForStepperProgress, "[forStepperProgress]", ["forStepperProgress"], { "valueBy": { "alias": "valueBy"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
15197
17336
  }
15198
- /** Token holding the resolved carousel defaults for the current scope. */
15199
- declare const FOR_CAROUSEL_DEFAULTS: _angular_core.InjectionToken<ForCarouselDefaults>;
17337
+
15200
17338
  /**
15201
- * Configures forty-cdk carousel defaults for this injector scope. Partial
15202
- * overrides inherit unspecified keys from the parent scope (or library
15203
- * defaults at the root).
17339
+ * Defaults inherited by descendant steppers in the surrounding injector scope.
17340
+ * Configure with `provideForStepperDefaults` either at the application root or
17341
+ * in any component's `providers` array; partial overrides merge with the parent
17342
+ * scope.
15204
17343
  */
15205
- declare function provideForCarouselDefaults(defaults?: Partial<ForCarouselDefaults>): Provider[];
17344
+ interface ForStepperDefaults {
17345
+ /**
17346
+ * `'manual'` (default): arrow navigation only moves focus; the user must
17347
+ * press Space / Enter to activate. Recommended for wizards where step
17348
+ * activation often triggers validation. `'automatic'`: arrow navigation moves
17349
+ * focus AND selects the step.
17350
+ */
17351
+ activationMode: StepperActivationMode;
17352
+ /**
17353
+ * Whether arrow navigation wraps around past the first / last selectable
17354
+ * trigger.
17355
+ */
17356
+ loop: boolean;
17357
+ }
17358
+ /** Token holding the resolved stepper defaults for the current scope. */
17359
+ declare const FOR_STEPPER_DEFAULTS: _angular_core.InjectionToken<ForStepperDefaults>;
17360
+ /**
17361
+ * Configures forty-cdk stepper defaults for this injector scope. Partial
17362
+ * overrides inherit unspecified keys from the parent scope (or library defaults
17363
+ * at the root).
17364
+ */
17365
+ declare function provideForStepperDefaults(defaults?: Partial<ForStepperDefaults>): Provider[];
15206
17366
 
15207
- export { DEFAULT_DATE_FIELD_SEGMENT_LABELS, DEFAULT_TIME_FIELD_SEGMENT_LABELS, DEFAULT_TOAST_REGION, FOR_ACCORDION_CONTEXT, FOR_ACCORDION_DEFAULTS, FOR_ACCORDION_ITEM_CONTEXT, FOR_ASPECT_RATIO_DEFAULTS, FOR_AVATAR_CONTEXT, FOR_AVATAR_DEFAULTS, FOR_CALENDAR_CONTEXT, FOR_CALENDAR_DEFAULTS, FOR_CAROUSEL_CONTEXT, FOR_CAROUSEL_DEFAULTS, FOR_CHECKBOX, FOR_CHECKBOX_DEFAULTS, FOR_CHECKBOX_HOST_DIRECTIVE_INPUTS, FOR_CHECKBOX_HOST_DIRECTIVE_OUTPUTS, FOR_COMBOBOX_CONTEXT, FOR_COMBOBOX_DEFAULTS, FOR_COMBOBOX_HOST_DIRECTIVE_INPUTS, FOR_COMBOBOX_HOST_DIRECTIVE_OUTPUTS, FOR_COMBOBOX_OPTION, FOR_CONTEXT_MENU_CONTEXT, FOR_CONTEXT_MENU_DEFAULTS, FOR_DATE_ADAPTER, FOR_DATE_FIELD_CONTEXT, FOR_DATE_FIELD_DEFAULTS, FOR_DATE_FIELD_HOST_DIRECTIVE_INPUTS, FOR_DATE_FIELD_HOST_DIRECTIVE_OUTPUTS, FOR_DATE_PICKER_CONTEXT, FOR_DATE_PICKER_DEFAULTS, FOR_DATE_PICKER_HOST_DIRECTIVE_INPUTS, FOR_DATE_PICKER_HOST_DIRECTIVE_OUTPUTS, FOR_DIALOG_CONTEXT, FOR_DIALOG_DATA, FOR_DIALOG_DEFAULTS, FOR_DISCLOSURE_CONTEXT, FOR_DISCLOSURE_DEFAULTS, FOR_DRAWER_CONTEXT, FOR_DRAWER_DATA, FOR_DRAWER_DEFAULTS, FOR_DROPDOWN_MENU_DEFAULTS, FOR_FIELDSET_CONTEXT, FOR_FIELDSET_DEFAULTS, FOR_FIELD_CONTEXT, FOR_FIELD_DEFAULTS, FOR_HOVER_CARD_CONTEXT, FOR_HOVER_CARD_DEFAULTS, FOR_ID_SALT, FOR_INPUT_DEFAULTS, FOR_INPUT_HOST_DIRECTIVE_INPUTS, FOR_INPUT_HOST_DIRECTIVE_OUTPUTS, FOR_LISTBOX_CONTEXT, FOR_LISTBOX_DEFAULTS, FOR_LISTBOX_HOST_DIRECTIVE_INPUTS, FOR_LISTBOX_HOST_DIRECTIVE_OUTPUTS, FOR_LISTBOX_OPTION, FOR_MENUBAR_CONTEXT, FOR_MENUBAR_DEFAULTS, FOR_MENU_CHECKBOX_ITEM, FOR_MENU_CONTEXT, FOR_MENU_DEFAULTS, FOR_MENU_GROUP_CONTEXT, FOR_MENU_RADIO_GROUP_CONTEXT, FOR_MENU_RADIO_ITEM, FOR_METER_CONTEXT, FOR_METER_DEFAULTS, FOR_NAVIGATION_MENU_CONTEXT, FOR_NAVIGATION_MENU_DEFAULTS, FOR_NAVIGATION_MENU_ITEM_CONTEXT, FOR_NUMBER_INPUT_DEFAULTS, FOR_NUMBER_INPUT_GROUP, FOR_NUMBER_INPUT_HOST_DIRECTIVE_INPUTS, FOR_NUMBER_INPUT_HOST_DIRECTIVE_OUTPUTS, FOR_OTP_INPUT_CONTEXT, FOR_OTP_INPUT_DEFAULTS, FOR_OTP_INPUT_HOST_DIRECTIVE_INPUTS, FOR_OTP_INPUT_HOST_DIRECTIVE_OUTPUTS, FOR_PANE_RESIZER_DEFAULTS, FOR_POPOVER_CONTEXT, FOR_POPOVER_DEFAULTS, FOR_PROGRESS_CONTEXT, FOR_PROGRESS_DEFAULTS, FOR_RADIO, FOR_RADIO_GROUP_CONTEXT, FOR_RADIO_GROUP_DEFAULTS, FOR_RADIO_GROUP_HOST_DIRECTIVE_INPUTS, FOR_RADIO_GROUP_HOST_DIRECTIVE_OUTPUTS, FOR_SCROLL_AREA_CONTEXT, FOR_SCROLL_AREA_DEFAULTS, FOR_SELECT_CONTEXT, FOR_SELECT_DEFAULTS, FOR_SELECT_HOST_DIRECTIVE_INPUTS, FOR_SELECT_HOST_DIRECTIVE_OUTPUTS, FOR_SELECT_OPTION, FOR_SEPARATOR_DEFAULTS, FOR_SLIDER_CONTEXT, FOR_SLIDER_DEFAULTS, FOR_SLIDER_HOST_DIRECTIVE_INPUTS, FOR_SLIDER_HOST_DIRECTIVE_OUTPUTS, FOR_SWITCH_DEFAULTS, FOR_SWITCH_HOST_DIRECTIVE_INPUTS, FOR_SWITCH_HOST_DIRECTIVE_OUTPUTS, FOR_TABS_CONTEXT, FOR_TABS_DEFAULTS, FOR_TEXTAREA_HOST_DIRECTIVE_INPUTS, FOR_TEXTAREA_HOST_DIRECTIVE_OUTPUTS, FOR_TIME_FIELD_CONTEXT, FOR_TIME_FIELD_DEFAULTS, FOR_TIME_FIELD_HOST_DIRECTIVE_INPUTS, FOR_TIME_FIELD_HOST_DIRECTIVE_OUTPUTS, FOR_TOAST_CONTEXT, FOR_TOAST_DEFAULTS, FOR_TOGGLE_DEFAULTS, FOR_TOGGLE_GROUP_CONTEXT, FOR_TOGGLE_GROUP_HOST_DIRECTIVE_INPUTS, FOR_TOGGLE_GROUP_HOST_DIRECTIVE_OUTPUTS, FOR_TOGGLE_HOST_DIRECTIVE_INPUTS, FOR_TOGGLE_HOST_DIRECTIVE_OUTPUTS, FOR_TOOLBAR_CONTEXT, FOR_TOOLBAR_DEFAULTS, FOR_TOOLTIP_CONTEXT, FOR_TOOLTIP_DEFAULTS, FOR_TREE_CONTAINER_CONTEXT, FOR_TREE_CONTEXT, FOR_TREE_DEFAULTS, FOR_TREE_ITEM_CONTEXT, ForAccordion, ForAccordionContent, ForAccordionItem, ForAccordionTrigger, ForAspectRatio, ForAvatar, ForAvatarFallback, ForAvatarImage, ForCalendar, ForCalendarCell, ForCalendarGrid, ForCalendarGridHeader, ForCalendarHeading, ForCalendarNextButton, ForCalendarPrevButton, ForCarousel, ForCarouselDrag, ForCarouselIndicator, ForCarouselIndicators, ForCarouselNext, ForCarouselPrevious, ForCarouselRotationControl, ForCarouselSlide, ForCarouselTrack, ForCarouselViewport, ForCheckbox, ForCheckboxIndicator, ForCombobox, ForComboboxAnchor, ForComboboxChip, ForComboboxChipRemove, ForComboboxChips, ForComboboxClear, ForComboboxContent, ForComboboxEmpty, ForComboboxGroup, ForComboboxGroupLabel, ForComboboxIndicator, ForComboboxInput, ForComboboxList, ForComboboxOption, ForComboboxSeparator, ForComboboxStatus, ForComboboxTrigger, ForContextMenu, ForContextMenuTrigger, ForDateField, ForDateFieldLiteral, ForDateFieldSegment, ForDatePicker, ForDatePickerContent, ForDatePickerTrigger, ForDatePickerValue, ForDialog, ForDialogBackdrop, ForDialogClose, ForDialogDescription, ForDialogManager, ForDialogRef, ForDialogTitle, ForDialogTrigger, ForDisclosure, ForDisclosureContent, ForDisclosureTrigger, ForDrawer, ForDrawerBackdrop, ForDrawerClose, ForDrawerDescription, ForDrawerHandle, ForDrawerManager, ForDrawerRef, ForDrawerTitle, ForDrawerTrigger, ForDrawerWrapper, ForDropdownMenu, ForDropdownMenuTrigger, ForField, ForFieldControl, ForFieldDescription, ForFieldError, ForFieldset, ForFieldsetLegend, ForHoverCard, ForHoverCardArrow, ForHoverCardContent, ForHoverCardTrigger, ForInput, ForLabel, ForListbox, ForListboxGroup, ForListboxGroupLabel, ForListboxOption, ForListboxOptionIndicator, ForMenuCheckboxItem, ForMenuContent, ForMenuGroup, ForMenuGroupLabel, ForMenuItem, ForMenuItemIndicator, ForMenuRadioGroup, ForMenuRadioItem, ForMenuSeparator, ForMenuSub, ForMenuSubTrigger, ForMenubar, ForMenubarTrigger, ForMeter, ForMeterIndicator, ForNavigationMenu, ForNavigationMenuContent, ForNavigationMenuIndicator, ForNavigationMenuItem, ForNavigationMenuLink, ForNavigationMenuList, ForNavigationMenuTrigger, ForNavigationMenuViewport, ForNumberInput, ForNumberInputDecrement, ForNumberInputGroup, ForNumberInputIncrement, ForOtpInput, ForOtpInputSlot, ForPaneResizer, ForPopover, ForPopoverAnchor, ForPopoverArrow, ForPopoverClose, ForPopoverContent, ForPopoverDescription, ForPopoverTitle, ForPopoverTrigger, ForProgress, ForProgressIndicator, ForRadio, ForRadioGroup, ForRadioIndicator, ForScrollArea, ForScrollAreaContent, ForScrollAreaCorner, ForScrollAreaScrollbar, ForScrollAreaThumb, ForScrollAreaViewport, ForSelect, ForSelectAnchor, ForSelectContent, ForSelectGroup, ForSelectGroupLabel, ForSelectIndicator, ForSelectOption, ForSelectSeparator, ForSelectTrigger, ForSelectValue, ForSeparator, ForSlider, ForSliderRange, ForSliderThumb, ForSliderTrack, ForSwitch, ForTabs, ForTabsContent, ForTabsList, ForTabsTrigger, ForTextarea, ForTimeField, ForTimeFieldLiteral, ForTimeFieldSegment, ForToast, ForToastAction, ForToastClose, ForToastDescription, ForToastManager, ForToastRef, ForToastTitle, ForToastViewport, ForToggle, ForToggleGroup, ForToggleGroupItem, ForToolbar, ForToolbarButton, ForToolbarLink, ForToolbarSeparator, ForTooltip, ForTooltipArrow, ForTooltipContent, ForTooltipTrigger, ForTree, ForTreeGroup, ForTreeItem, ForTreeItemLabel, ForTreeItemToggle, NativeDateAdapter, OTP_REGEXP_ONLY_CHARS, OTP_REGEXP_ONLY_DIGITS, OTP_REGEXP_ONLY_DIGITS_AND_CHARS, assertTimeCapable, forSingleValueField, injectDateAdapter, injectDialogData, injectDrawerData, injectFieldWiring, injectNumberInputGroup, provideForAccordionDefaults, provideForAspectRatioDefaults, provideForAvatarDefaults, provideForCalendarDefaults, provideForCarouselDefaults, provideForCheckboxDefaults, provideForComboboxDefaults, provideForContextMenuDefaults, provideForDateFieldDefaults, provideForDatePickerDefaults, provideForDialogDefaults, provideForDisclosureDefaults, provideForDrawerDefaults, provideForDropdownMenuDefaults, provideForFieldDefaults, provideForFieldsetDefaults, provideForHoverCardDefaults, provideForIdSalt, provideForInputDefaults, provideForListboxDefaults, provideForMenuDefaults, provideForMenubarDefaults, provideForMeterDefaults, provideForNavigationMenuDefaults, provideForNumberInputDefaults, provideForOtpInputDefaults, provideForPaneResizerDefaults, provideForPopoverDefaults, provideForProgressDefaults, provideForRadioGroupDefaults, provideForScrollAreaDefaults, provideForSelectDefaults, provideForSeparatorDefaults, provideForSliderDefaults, provideForSwitchDefaults, provideForTabsDefaults, provideForTimeFieldDefaults, provideForToastDefaults, provideForToggleDefaults, provideForToolbarDefaults, provideForTooltipDefaults, provideForTreeDefaults, provideNativeDateAdapter };
15208
- export type { CalendarDateLabelFormatter, CalendarDateRange, CalendarDayCell, CalendarWeek, CalendarWeekday, CarouselAlign, DateAdapter, DateFieldSegment, DateSegmentType, SegmentType as DateTimeSegmentType, FieldControlHandle, FieldGranularity, ForAccordionContext, ForAccordionDefaults, ForAccordionItemContext, ForAspectRatioDefaults, ForAvatarContext, ForAvatarDefaults, ForAvatarStatus, ForCalendarCellHandle, ForCalendarContext, ForCalendarDefaults, ForCarouselContext, ForCarouselDefaults, ForCheckboxDefaults, ForComboboxAutocomplete, ForComboboxChipHandle, ForComboboxCloseReason, ForComboboxContext, ForComboboxDefaults, ForComboboxInitialFocus, ForComboboxOptionHandle, ForContextMenuContext, ForContextMenuDefaults, ForDateFieldContext, ForDateFieldDefaults, ForDateFieldSegmentHandle, ForDateFieldSegmentLabels, ForDatePickerContext, ForDatePickerDefaults, ForDialogCloseReason, ForDialogContext, ForDialogDefaults, ForDialogOpenConfig, ForDisclosureContext, ForDisclosureDefaults, ForDrawerCloseReason, ForDrawerContext, ForDrawerDefaults, ForDrawerDragEvent, ForDrawerOpenConfig, ForDrawerReleaseEvent, ForDrawerSide, ForDrawerSnapPoint, ForDropdownMenuDefaults, ForFieldContext, ForFieldDefaults, ForFieldsetContext, ForFieldsetDefaults, ForHoverCardContext, ForHoverCardDefaults, ForInputDefaults, ForListboxContext, ForListboxDefaults, ForMenuCloseReason, ForMenuContext, ForMenuDefaults, ForMenuGroupContext, ForMenuItemHandle, ForMenuRadioGroupContext, ForMenubarContext, ForMenubarDefaults, ForMenubarTriggerHandle, ForMeterContext, ForMeterDefaults, ForMeterQuality, ForNavigationMenuContentHandle, ForNavigationMenuContext, ForNavigationMenuDefaults, ForNavigationMenuItemContext, ForNavigationMenuMotion, ForNavigationMenuTriggerHandle, ForNavigationMenuViewportHandle, ForNumberInputContext, ForNumberInputDefaults, ForNumberInputGroupContext, ForOtpInputContext, ForOtpInputDefaults, ForPaneResizerDefaults, ForPopoverContext, ForPopoverDefaults, ForProgressContext, ForProgressDefaults, ForProgressState, ForRadioGroupContext, ForRadioGroupDefaults, ForScrollAreaContext, ForScrollAreaDefaults, ForScrollAreaType, ForScrollbarOrientation, ForSelectCloseReason, ForSelectContext, ForSelectDefaults, ForSelectInitialFocus, ForSelectOptionHandle, ForSeparatorDefaults, ForSliderContext, ForSliderDefaults, ForSliderThumbHandle, ForSwitchDefaults, ForTabsContext, ForTabsDefaults, ForTimeFieldContext, ForTimeFieldDefaults, ForTimeFieldSegmentHandle, ForTimeFieldSegmentLabels, ForToastCloseReason, ForToastConfig, ForToastContext, ForToastDefaults, ForToastInstance, ForToastSwipeDirection, ForToastTemplateContext, ForToastVariant, ForToggleDefaults, ForToggleGroupContext, ForToggleGroupItemHandle, ForToolbarContext, ForToolbarDefaults, ForToolbarItemHandle, ForTooltipContext, ForTooltipDefaults, ForTreeContainerContext, ForTreeContext, ForTreeDefaults, ForTreeItemContext, ForTreeItemHandle, HoverCardScheduleReason, MenuActivationModality, NavigationMenuScheduleReason, OtpInputType, SliderArrowKey, SwipeDirection, SwipeEventDetail, TabsActivationMode, TimeCapableDateAdapter, TimeFieldSegment, TimeGranularity, TimeSegmentType, TooltipScheduleReason, VetoableEvent, VetoableNativeEvent };
17367
+ export { DEFAULT_DATE_FIELD_SEGMENT_LABELS, DEFAULT_TIME_FIELD_SEGMENT_LABELS, DEFAULT_TOAST_REGION, FOR_ACCORDION_CONTEXT, FOR_ACCORDION_DEFAULTS, FOR_ACCORDION_ITEM_CONTEXT, FOR_ASPECT_RATIO_DEFAULTS, FOR_AVATAR_CONTEXT, FOR_AVATAR_DEFAULTS, FOR_CALENDAR_CONTEXT, FOR_CALENDAR_DEFAULTS, FOR_CAROUSEL_CONTEXT, FOR_CAROUSEL_DEFAULTS, FOR_CHECKBOX, FOR_CHECKBOX_DEFAULTS, FOR_CHECKBOX_HOST_DIRECTIVE_INPUTS, FOR_CHECKBOX_HOST_DIRECTIVE_OUTPUTS, FOR_COMBOBOX_CONTEXT, FOR_COMBOBOX_DEFAULTS, FOR_COMBOBOX_HOST_DIRECTIVE_INPUTS, FOR_COMBOBOX_HOST_DIRECTIVE_OUTPUTS, FOR_COMBOBOX_OPTION, FOR_CONTEXT_MENU_CONTEXT, FOR_CONTEXT_MENU_DEFAULTS, FOR_DATE_ADAPTER, FOR_DATE_FIELD_CONTEXT, FOR_DATE_FIELD_DEFAULTS, FOR_DATE_FIELD_HOST_DIRECTIVE_INPUTS, FOR_DATE_FIELD_HOST_DIRECTIVE_OUTPUTS, FOR_DATE_PICKER_CONTEXT, FOR_DATE_PICKER_DEFAULTS, FOR_DATE_PICKER_HOST_DIRECTIVE_INPUTS, FOR_DATE_PICKER_HOST_DIRECTIVE_OUTPUTS, FOR_DIALOG_CONTEXT, FOR_DIALOG_DATA, FOR_DIALOG_DEFAULTS, FOR_DISCLOSURE_CONTEXT, FOR_DISCLOSURE_DEFAULTS, FOR_DRAG_DROP_CONTEXT, FOR_DRAG_DROP_DEFAULTS, FOR_DRAWER_CONTEXT, FOR_DRAWER_DATA, FOR_DRAWER_DEFAULTS, FOR_DROPDOWN_MENU_DEFAULTS, FOR_DROP_LIST_GROUP, FOR_FIELDSET_CONTEXT, FOR_FIELDSET_DEFAULTS, FOR_FIELD_CONTEXT, FOR_FIELD_DEFAULTS, FOR_HOVER_CARD_CONTEXT, FOR_HOVER_CARD_DEFAULTS, FOR_ID_SALT, FOR_INPUT_DEFAULTS, FOR_INPUT_HOST_DIRECTIVE_INPUTS, FOR_INPUT_HOST_DIRECTIVE_OUTPUTS, FOR_LISTBOX_CONTEXT, FOR_LISTBOX_DEFAULTS, FOR_LISTBOX_HOST_DIRECTIVE_INPUTS, FOR_LISTBOX_HOST_DIRECTIVE_OUTPUTS, FOR_LISTBOX_OPTION, FOR_MENUBAR_CONTEXT, FOR_MENUBAR_DEFAULTS, FOR_MENU_CHECKBOX_ITEM, FOR_MENU_CONTEXT, FOR_MENU_DEFAULTS, FOR_MENU_GROUP_CONTEXT, FOR_MENU_RADIO_GROUP_CONTEXT, FOR_MENU_RADIO_ITEM, FOR_METER_CONTEXT, FOR_METER_DEFAULTS, FOR_NAVIGATION_MENU_CONTEXT, FOR_NAVIGATION_MENU_DEFAULTS, FOR_NAVIGATION_MENU_ITEM_CONTEXT, FOR_NUMBER_INPUT_DEFAULTS, FOR_NUMBER_INPUT_GROUP, FOR_NUMBER_INPUT_HOST_DIRECTIVE_INPUTS, FOR_NUMBER_INPUT_HOST_DIRECTIVE_OUTPUTS, FOR_OTP_INPUT_CONTEXT, FOR_OTP_INPUT_DEFAULTS, FOR_OTP_INPUT_HOST_DIRECTIVE_INPUTS, FOR_OTP_INPUT_HOST_DIRECTIVE_OUTPUTS, FOR_PANE_RESIZER_DEFAULTS, FOR_POPOVER_CONTEXT, FOR_POPOVER_DEFAULTS, FOR_PROGRESS_CONTEXT, FOR_PROGRESS_DEFAULTS, FOR_RADIO, FOR_RADIO_GROUP_CONTEXT, FOR_RADIO_GROUP_DEFAULTS, FOR_RADIO_GROUP_HOST_DIRECTIVE_INPUTS, FOR_RADIO_GROUP_HOST_DIRECTIVE_OUTPUTS, FOR_SCROLL_AREA_CONTEXT, FOR_SCROLL_AREA_DEFAULTS, FOR_SELECT_CONTEXT, FOR_SELECT_DEFAULTS, FOR_SELECT_HOST_DIRECTIVE_INPUTS, FOR_SELECT_HOST_DIRECTIVE_OUTPUTS, FOR_SELECT_OPTION, FOR_SEPARATOR_DEFAULTS, FOR_SLIDER_CONTEXT, FOR_SLIDER_DEFAULTS, FOR_SLIDER_HOST_DIRECTIVE_INPUTS, FOR_SLIDER_HOST_DIRECTIVE_OUTPUTS, FOR_STEPPER_CONTEXT, FOR_STEPPER_DEFAULTS, FOR_STEPPER_ITEM_CONTEXT, FOR_SWITCH_DEFAULTS, FOR_SWITCH_HOST_DIRECTIVE_INPUTS, FOR_SWITCH_HOST_DIRECTIVE_OUTPUTS, FOR_TABS_CONTEXT, FOR_TABS_DEFAULTS, FOR_TEXTAREA_HOST_DIRECTIVE_INPUTS, FOR_TEXTAREA_HOST_DIRECTIVE_OUTPUTS, FOR_TIME_FIELD_CONTEXT, FOR_TIME_FIELD_DEFAULTS, FOR_TIME_FIELD_HOST_DIRECTIVE_INPUTS, FOR_TIME_FIELD_HOST_DIRECTIVE_OUTPUTS, FOR_TIME_PICKER_CONTEXT, FOR_TIME_PICKER_DEFAULTS, FOR_TIME_PICKER_HOST_DIRECTIVE_INPUTS, FOR_TIME_PICKER_HOST_DIRECTIVE_OUTPUTS, FOR_TOAST_CONTEXT, FOR_TOAST_DEFAULTS, FOR_TOGGLE_DEFAULTS, FOR_TOGGLE_GROUP_CONTEXT, FOR_TOGGLE_GROUP_HOST_DIRECTIVE_INPUTS, FOR_TOGGLE_GROUP_HOST_DIRECTIVE_OUTPUTS, FOR_TOGGLE_HOST_DIRECTIVE_INPUTS, FOR_TOGGLE_HOST_DIRECTIVE_OUTPUTS, FOR_TOOLBAR_CONTEXT, FOR_TOOLBAR_DEFAULTS, FOR_TOOLTIP_CONTEXT, FOR_TOOLTIP_DEFAULTS, FOR_TREE_CONTAINER_CONTEXT, FOR_TREE_CONTEXT, FOR_TREE_DEFAULTS, FOR_TREE_ITEM_CONTEXT, ForAccordion, ForAccordionContent, ForAccordionItem, ForAccordionTrigger, ForAspectRatio, ForAvatar, ForAvatarFallback, ForAvatarImage, ForCalendar, ForCalendarCell, ForCalendarGrid, ForCalendarGridHeader, ForCalendarHeading, ForCalendarMonthCell, ForCalendarMonthGrid, ForCalendarMonthSelect, ForCalendarNextButton, ForCalendarPrevButton, ForCalendarViewTrigger, ForCalendarYearCell, ForCalendarYearGrid, ForCalendarYearSelect, ForCarousel, ForCarouselDrag, ForCarouselIndicator, ForCarouselIndicators, ForCarouselNext, ForCarouselPrevious, ForCarouselRotationControl, ForCarouselSlide, ForCarouselTrack, ForCarouselViewport, ForCheckbox, ForCheckboxIndicator, ForCombobox, ForComboboxAnchor, ForComboboxChip, ForComboboxChipRemove, ForComboboxChips, ForComboboxClear, ForComboboxContent, ForComboboxEmpty, ForComboboxGroup, ForComboboxGroupLabel, ForComboboxIndicator, ForComboboxInput, ForComboboxList, ForComboboxOption, ForComboboxSeparator, ForComboboxStatus, ForComboboxTrigger, ForContextMenu, ForContextMenuTrigger, ForDateField, ForDateFieldLiteral, ForDateFieldSegment, ForDatePicker, ForDatePickerContent, ForDatePickerTrigger, ForDatePickerValue, ForDialog, ForDialogBackdrop, ForDialogClose, ForDialogDescription, ForDialogManager, ForDialogRef, ForDialogTitle, ForDialogTrigger, ForDisclosure, ForDisclosureContent, ForDisclosureTrigger, ForDragHandle, ForDragPlaceholder, ForDragPreview, ForDraggable, ForDrawer, ForDrawerBackdrop, ForDrawerClose, ForDrawerDescription, ForDrawerHandle, ForDrawerManager, ForDrawerRef, ForDrawerTitle, ForDrawerTrigger, ForDrawerWrapper, ForDropList, ForDropListGroup, ForDropdownMenu, ForDropdownMenuTrigger, ForField, ForFieldControl, ForFieldDescription, ForFieldError, ForFieldset, ForFieldsetLegend, ForHoverCard, ForHoverCardArrow, ForHoverCardContent, ForHoverCardTrigger, ForInput, ForLabel, ForListbox, ForListboxGroup, ForListboxGroupLabel, ForListboxOption, ForListboxOptionIndicator, ForMenuCheckboxItem, ForMenuContent, ForMenuGroup, ForMenuGroupLabel, ForMenuItem, ForMenuItemIndicator, ForMenuRadioGroup, ForMenuRadioItem, ForMenuSeparator, ForMenuSub, ForMenuSubTrigger, ForMenubar, ForMenubarTrigger, ForMeter, ForMeterIndicator, ForNavigationMenu, ForNavigationMenuContent, ForNavigationMenuIndicator, ForNavigationMenuItem, ForNavigationMenuLink, ForNavigationMenuList, ForNavigationMenuTrigger, ForNavigationMenuViewport, ForNumberInput, ForNumberInputDecrement, ForNumberInputGroup, ForNumberInputIncrement, ForOtpInput, ForOtpInputSlot, ForPaneResizer, ForPopover, ForPopoverAnchor, ForPopoverArrow, ForPopoverClose, ForPopoverContent, ForPopoverDescription, ForPopoverTitle, ForPopoverTrigger, ForProgress, ForProgressIndicator, ForRadio, ForRadioGroup, ForRadioIndicator, ForScrollArea, ForScrollAreaContent, ForScrollAreaCorner, ForScrollAreaScrollbar, ForScrollAreaThumb, ForScrollAreaViewport, ForSelect, ForSelectAnchor, ForSelectContent, ForSelectGroup, ForSelectGroupLabel, ForSelectIndicator, ForSelectOption, ForSelectSeparator, ForSelectTrigger, ForSelectValue, ForSeparator, ForSlider, ForSliderRange, ForSliderThumb, ForSliderTrack, ForStepper, ForStepperCompletedContent, ForStepperContent, ForStepperIndicator, ForStepperItem, ForStepperList, ForStepperNext, ForStepperPrevious, ForStepperProgress, ForStepperSeparator, ForStepperTrigger, ForSwitch, ForTabs, ForTabsContent, ForTabsList, ForTabsTrigger, ForTextarea, ForTimeField, ForTimeFieldLiteral, ForTimeFieldSegment, ForTimePicker, ForTimePickerContent, ForTimePickerOption, ForTimePickerTrigger, ForTimePickerValue, ForToast, ForToastAction, ForToastClose, ForToastDescription, ForToastManager, ForToastRef, ForToastTitle, ForToastViewport, ForToggle, ForToggleGroup, ForToggleGroupItem, ForToolbar, ForToolbarButton, ForToolbarLink, ForToolbarSeparator, ForTooltip, ForTooltipArrow, ForTooltipContent, ForTooltipTrigger, ForTree, ForTreeGroup, ForTreeItem, ForTreeItemCheckbox, ForTreeItemCheckboxIndicator, ForTreeItemLabel, ForTreeItemToggle, NativeDateAdapter, OTP_REGEXP_ONLY_CHARS, OTP_REGEXP_ONLY_DIGITS, OTP_REGEXP_ONLY_DIGITS_AND_CHARS, assertTimeCapable, buildTimeSlots, expandToReveal, forSingleValueField, injectDateAdapter, injectDialogData, injectDrawerData, injectFieldWiring, injectNumberInputGroup, moveItemInArray, provideForAccordionDefaults, provideForAspectRatioDefaults, provideForAvatarDefaults, provideForCalendarDefaults, provideForCarouselDefaults, provideForCheckboxDefaults, provideForComboboxDefaults, provideForContextMenuDefaults, provideForDateFieldDefaults, provideForDatePickerDefaults, provideForDialogDefaults, provideForDisclosureDefaults, provideForDragDropDefaults, provideForDrawerDefaults, provideForDropdownMenuDefaults, provideForFieldDefaults, provideForFieldsetDefaults, provideForHoverCardDefaults, provideForIdSalt, provideForInputDefaults, provideForListboxDefaults, provideForMenuDefaults, provideForMenubarDefaults, provideForMeterDefaults, provideForNavigationMenuDefaults, provideForNumberInputDefaults, provideForOtpInputDefaults, provideForPaneResizerDefaults, provideForPopoverDefaults, provideForProgressDefaults, provideForRadioGroupDefaults, provideForScrollAreaDefaults, provideForSelectDefaults, provideForSeparatorDefaults, provideForSliderDefaults, provideForStepperDefaults, provideForSwitchDefaults, provideForTabsDefaults, provideForTimeFieldDefaults, provideForTimePickerDefaults, provideForToastDefaults, provideForToggleDefaults, provideForToolbarDefaults, provideForTooltipDefaults, provideForTreeDefaults, provideNativeDateAdapter, transferArrayItem };
17368
+ export type { CalendarDateLabelFormatter, CalendarDateRange, CalendarDayCell, CalendarMonthOption, CalendarMonthRow, CalendarView, CalendarWeek, CalendarWeekday, CalendarYearOption, CalendarYearRow, CarouselAlign, DateAdapter, DateFieldSegment, DateSegmentType, SegmentType as DateTimeSegmentType, FieldControlHandle, FieldGranularity, ForAccordionContext, ForAccordionDefaults, ForAccordionItemContext, ForAspectRatioDefaults, ForAvatarContext, ForAvatarDefaults, ForAvatarStatus, ForCalendarCellHandle, ForCalendarContext, ForCalendarDefaults, ForCalendarMonthCellHandle, ForCalendarYearCellHandle, ForCarouselContext, ForCarouselDefaults, ForCheckboxDefaults, ForComboboxAutocomplete, ForComboboxChipHandle, ForComboboxCloseReason, ForComboboxContext, ForComboboxDefaults, ForComboboxInitialFocus, ForComboboxOptionHandle, ForContextMenuContext, ForContextMenuDefaults, ForDateFieldContext, ForDateFieldDefaults, ForDateFieldSegmentHandle, ForDateFieldSegmentLabels, ForDatePickerContext, ForDatePickerDefaults, ForDialogCloseReason, ForDialogContext, ForDialogDefaults, ForDialogOpenConfig, ForDisclosureContext, ForDisclosureDefaults, ForDragDropDefaults, ForDragDropEvent, ForDragEndEvent, ForDragStartEvent, ForDraggableHandle, ForDrawerCloseReason, ForDrawerContext, ForDrawerDefaults, ForDrawerDragEvent, ForDrawerOpenConfig, ForDrawerReleaseEvent, ForDrawerSide, ForDrawerSnapPoint, ForDropListContext, ForDropdownMenuDefaults, ForFieldContext, ForFieldDefaults, ForFieldsetContext, ForFieldsetDefaults, ForHoverCardContext, ForHoverCardDefaults, ForInputDefaults, ForListboxContext, ForListboxDefaults, ForMenuCloseReason, ForMenuContext, ForMenuDefaults, ForMenuGroupContext, ForMenuItemHandle, ForMenuRadioGroupContext, ForMenubarContext, ForMenubarDefaults, ForMenubarTriggerHandle, ForMeterContext, ForMeterDefaults, ForMeterQuality, ForNavigationMenuContentHandle, ForNavigationMenuContext, ForNavigationMenuDefaults, ForNavigationMenuItemContext, ForNavigationMenuMotion, ForNavigationMenuTriggerHandle, ForNavigationMenuViewportHandle, ForNumberInputContext, ForNumberInputDefaults, ForNumberInputGroupContext, ForOtpInputContext, ForOtpInputDefaults, ForPaneResizerDefaults, ForPopoverContext, ForPopoverDefaults, ForProgressContext, ForProgressDefaults, ForProgressState, ForRadioGroupContext, ForRadioGroupDefaults, ForScrollAreaContext, ForScrollAreaDefaults, ForScrollAreaType, ForScrollbarOrientation, ForSelectCloseReason, ForSelectContext, ForSelectDefaults, ForSelectInitialFocus, ForSelectOptionHandle, ForSeparatorDefaults, ForSliderContext, ForSliderDefaults, ForSliderThumbHandle, ForStepperContentHandle, ForStepperContext, ForStepperDefaults, ForStepperItemContext, ForStepperItemHandle, ForStepperTriggerHandle, ForSwitchDefaults, ForTabsContext, ForTabsDefaults, ForTimeFieldContext, ForTimeFieldDefaults, ForTimeFieldSegmentHandle, ForTimeFieldSegmentLabels, ForTimePickerCloseReason, ForTimePickerContext, ForTimePickerDefaults, ForTimePickerInitialFocus, ForTimePickerOptionHandle, ForTimeSlot, ForToastCloseReason, ForToastConfig, ForToastContext, ForToastDefaults, ForToastInstance, ForToastSwipeDirection, ForToastTemplateContext, ForToastVariant, ForToggleDefaults, ForToggleGroupContext, ForToggleGroupItemHandle, ForToolbarContext, ForToolbarDefaults, ForToolbarItemHandle, ForTooltipContext, ForTooltipDefaults, ForTreeContainerContext, ForTreeContext, ForTreeDefaults, ForTreeItemContext, ForTreeItemHandle, HoverCardScheduleReason, MenuActivationModality, NavigationMenuScheduleReason, OtpInputType, SliderArrowKey, StepperActivationMode, StepperMode, SwipeDirection, SwipeEventDetail, TabsActivationMode, TimeCapableDateAdapter, TimeFieldSegment, TimeGranularity, TimePickerGranularity, TimeSegmentType, TooltipScheduleReason, VetoableEvent, VetoableNativeEvent };