forty-cdk 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/accordion/README.md +122 -0
- package/aspect-ratio/README.md +76 -0
- package/avatar/README.md +100 -0
- package/breadcrumbs/README.md +49 -0
- package/breakpoints/README.md +81 -0
- package/button/README.md +49 -0
- package/calendar/README.md +458 -0
- package/carousel/README.md +358 -0
- package/checkbox/README.md +146 -0
- package/combobox/README.md +535 -0
- package/context-menu/README.md +139 -0
- package/date-field/README.md +184 -0
- package/date-picker/README.md +338 -0
- package/dialog/README.md +388 -0
- package/disclosure/README.md +114 -0
- package/drag-drop/README.md +359 -0
- package/drawer/README.md +560 -0
- package/dropdown-menu/README.md +176 -0
- package/fesm2022/forty-cdk-accordion.mjs +348 -0
- package/fesm2022/forty-cdk-accordion.mjs.map +1 -0
- package/fesm2022/forty-cdk-aspect-ratio.mjs +74 -0
- package/fesm2022/forty-cdk-aspect-ratio.mjs.map +1 -0
- package/fesm2022/forty-cdk-avatar.mjs +308 -0
- package/fesm2022/forty-cdk-avatar.mjs.map +1 -0
- package/fesm2022/forty-cdk-breadcrumbs.mjs +125 -0
- package/fesm2022/forty-cdk-breadcrumbs.mjs.map +1 -0
- package/fesm2022/forty-cdk-breakpoints.mjs +117 -0
- package/fesm2022/forty-cdk-breakpoints.mjs.map +1 -0
- package/fesm2022/forty-cdk-button.mjs +134 -0
- package/fesm2022/forty-cdk-button.mjs.map +1 -0
- package/fesm2022/forty-cdk-calendar.mjs +2034 -0
- package/fesm2022/forty-cdk-calendar.mjs.map +1 -0
- package/fesm2022/forty-cdk-carousel.mjs +968 -0
- package/fesm2022/forty-cdk-carousel.mjs.map +1 -0
- package/fesm2022/forty-cdk-checkbox.mjs +226 -0
- package/fesm2022/forty-cdk-checkbox.mjs.map +1 -0
- package/fesm2022/forty-cdk-combobox.mjs +2596 -0
- package/fesm2022/forty-cdk-combobox.mjs.map +1 -0
- package/fesm2022/forty-cdk-context-menu.mjs +413 -0
- package/fesm2022/forty-cdk-context-menu.mjs.map +1 -0
- package/fesm2022/forty-cdk-core.mjs +9022 -0
- package/fesm2022/forty-cdk-core.mjs.map +1 -0
- package/fesm2022/forty-cdk-date-field.mjs +744 -0
- package/fesm2022/forty-cdk-date-field.mjs.map +1 -0
- package/fesm2022/forty-cdk-date-picker.mjs +1011 -0
- package/fesm2022/forty-cdk-date-picker.mjs.map +1 -0
- package/fesm2022/forty-cdk-dialog.mjs +707 -0
- package/fesm2022/forty-cdk-dialog.mjs.map +1 -0
- package/fesm2022/forty-cdk-disclosure.mjs +190 -0
- package/fesm2022/forty-cdk-disclosure.mjs.map +1 -0
- package/fesm2022/forty-cdk-drag-drop.mjs +1180 -0
- package/fesm2022/forty-cdk-drag-drop.mjs.map +1 -0
- package/fesm2022/forty-cdk-drawer.mjs +1641 -0
- package/fesm2022/forty-cdk-drawer.mjs.map +1 -0
- package/fesm2022/forty-cdk-dropdown-menu.mjs +350 -0
- package/fesm2022/forty-cdk-dropdown-menu.mjs.map +1 -0
- package/fesm2022/forty-cdk-field.mjs +425 -0
- package/fesm2022/forty-cdk-field.mjs.map +1 -0
- package/fesm2022/forty-cdk-fieldset.mjs +164 -0
- package/fesm2022/forty-cdk-fieldset.mjs.map +1 -0
- package/fesm2022/forty-cdk-file-upload.mjs +221 -0
- package/fesm2022/forty-cdk-file-upload.mjs.map +1 -0
- package/fesm2022/forty-cdk-hover-card.mjs +496 -0
- package/fesm2022/forty-cdk-hover-card.mjs.map +1 -0
- package/fesm2022/forty-cdk-input.mjs +274 -0
- package/fesm2022/forty-cdk-input.mjs.map +1 -0
- package/fesm2022/forty-cdk-internationalized-date.mjs +1 -1
- package/fesm2022/forty-cdk-internationalized-date.mjs.map +1 -1
- package/fesm2022/forty-cdk-listbox.mjs +1279 -0
- package/fesm2022/forty-cdk-listbox.mjs.map +1 -0
- package/fesm2022/forty-cdk-menu.mjs +1439 -0
- package/fesm2022/forty-cdk-menu.mjs.map +1 -0
- package/fesm2022/forty-cdk-menubar.mjs +787 -0
- package/fesm2022/forty-cdk-menubar.mjs.map +1 -0
- package/fesm2022/forty-cdk-meter.mjs +211 -0
- package/fesm2022/forty-cdk-meter.mjs.map +1 -0
- package/fesm2022/forty-cdk-navigation-menu.mjs +1145 -0
- package/fesm2022/forty-cdk-navigation-menu.mjs.map +1 -0
- package/fesm2022/forty-cdk-number-input.mjs +559 -0
- package/fesm2022/forty-cdk-number-input.mjs.map +1 -0
- package/fesm2022/forty-cdk-otp-input.mjs +527 -0
- package/fesm2022/forty-cdk-otp-input.mjs.map +1 -0
- package/fesm2022/forty-cdk-pagination.mjs +323 -0
- package/fesm2022/forty-cdk-pagination.mjs.map +1 -0
- package/fesm2022/forty-cdk-pane-resizer.mjs +297 -0
- package/fesm2022/forty-cdk-pane-resizer.mjs.map +1 -0
- package/fesm2022/forty-cdk-popover.mjs +698 -0
- package/fesm2022/forty-cdk-popover.mjs.map +1 -0
- package/fesm2022/forty-cdk-progress.mjs +226 -0
- package/fesm2022/forty-cdk-progress.mjs.map +1 -0
- package/fesm2022/forty-cdk-radio-group.mjs +378 -0
- package/fesm2022/forty-cdk-radio-group.mjs.map +1 -0
- package/fesm2022/forty-cdk-scroll-area.mjs +640 -0
- package/fesm2022/forty-cdk-scroll-area.mjs.map +1 -0
- package/fesm2022/forty-cdk-search.mjs +205 -0
- package/fesm2022/forty-cdk-search.mjs.map +1 -0
- package/fesm2022/forty-cdk-select.mjs +1661 -0
- package/fesm2022/forty-cdk-select.mjs.map +1 -0
- package/fesm2022/forty-cdk-separator.mjs +82 -0
- package/fesm2022/forty-cdk-separator.mjs.map +1 -0
- package/fesm2022/forty-cdk-signal-forms.mjs +97 -0
- package/fesm2022/forty-cdk-signal-forms.mjs.map +1 -0
- package/fesm2022/forty-cdk-slider.mjs +803 -0
- package/fesm2022/forty-cdk-slider.mjs.map +1 -0
- package/fesm2022/forty-cdk-stepper.mjs +886 -0
- package/fesm2022/forty-cdk-stepper.mjs.map +1 -0
- package/fesm2022/forty-cdk-switch.mjs +137 -0
- package/fesm2022/forty-cdk-switch.mjs.map +1 -0
- package/fesm2022/forty-cdk-table.mjs +1518 -0
- package/fesm2022/forty-cdk-table.mjs.map +1 -0
- package/fesm2022/forty-cdk-tabs.mjs +400 -0
- package/fesm2022/forty-cdk-tabs.mjs.map +1 -0
- package/fesm2022/forty-cdk-time-field.mjs +593 -0
- package/fesm2022/forty-cdk-time-field.mjs.map +1 -0
- package/fesm2022/forty-cdk-time-picker.mjs +1013 -0
- package/fesm2022/forty-cdk-time-picker.mjs.map +1 -0
- package/fesm2022/forty-cdk-toast.mjs +1153 -0
- package/fesm2022/forty-cdk-toast.mjs.map +1 -0
- package/fesm2022/forty-cdk-toggle.mjs +516 -0
- package/fesm2022/forty-cdk-toggle.mjs.map +1 -0
- package/fesm2022/forty-cdk-toolbar.mjs +374 -0
- package/fesm2022/forty-cdk-toolbar.mjs.map +1 -0
- package/fesm2022/forty-cdk-tooltip.mjs +672 -0
- package/fesm2022/forty-cdk-tooltip.mjs.map +1 -0
- package/fesm2022/forty-cdk-tree.mjs +2007 -0
- package/fesm2022/forty-cdk-tree.mjs.map +1 -0
- package/fesm2022/forty-cdk-virtualization.mjs +1 -1
- package/fesm2022/forty-cdk-virtualization.mjs.map +1 -1
- package/fesm2022/forty-cdk.mjs +0 -43310
- package/fesm2022/forty-cdk.mjs.map +1 -1
- package/field/README.md +97 -0
- package/fieldset/README.md +86 -0
- package/file-upload/README.md +73 -0
- package/hover-card/README.md +171 -0
- package/input/README.md +156 -0
- package/listbox/README.md +424 -0
- package/menu/README.md +181 -0
- package/menubar/README.md +140 -0
- package/meter/README.md +128 -0
- package/navigation-menu/README.md +253 -0
- package/number-input/README.md +171 -0
- package/otp-input/README.md +198 -0
- package/package.json +213 -1
- package/pagination/README.md +61 -0
- package/pane-resizer/README.md +136 -0
- package/popover/README.md +262 -0
- package/progress/README.md +115 -0
- package/radio-group/README.md +129 -0
- package/scroll-area/README.md +184 -0
- package/search/README.md +42 -0
- package/select/README.md +488 -0
- package/separator/README.md +84 -0
- package/signal-forms/README.md +72 -0
- package/slider/README.md +152 -0
- package/stepper/README.md +292 -0
- package/switch/README.md +116 -0
- package/table/README.md +769 -0
- package/tabs/README.md +130 -0
- package/time-field/README.md +157 -0
- package/time-picker/README.md +172 -0
- package/toast/README.md +398 -0
- package/toggle/README.md +224 -0
- package/toolbar/README.md +109 -0
- package/tooltip/README.md +274 -0
- package/tree/README.md +708 -0
- package/types/forty-cdk-accordion.d.ts +242 -0
- package/types/forty-cdk-aspect-ratio.d.ts +59 -0
- package/types/forty-cdk-avatar.d.ts +133 -0
- package/types/forty-cdk-breadcrumbs.d.ts +92 -0
- package/types/forty-cdk-breakpoints.d.ts +141 -0
- package/types/forty-cdk-button.d.ts +80 -0
- package/types/forty-cdk-calendar.d.ts +914 -0
- package/types/forty-cdk-carousel.d.ts +530 -0
- package/types/forty-cdk-checkbox.d.ts +141 -0
- package/types/forty-cdk-combobox.d.ts +1259 -0
- package/types/forty-cdk-context-menu.d.ts +313 -0
- package/types/forty-cdk-core.d.ts +5774 -0
- package/types/forty-cdk-date-field.d.ts +307 -0
- package/types/forty-cdk-date-picker.d.ts +622 -0
- package/types/forty-cdk-dialog.d.ts +546 -0
- package/types/forty-cdk-disclosure.d.ts +127 -0
- package/types/forty-cdk-drag-drop.d.ts +456 -0
- package/types/forty-cdk-drawer.d.ts +871 -0
- package/types/forty-cdk-dropdown-menu.d.ts +242 -0
- package/types/forty-cdk-field.d.ts +236 -0
- package/types/forty-cdk-fieldset.d.ts +119 -0
- package/types/forty-cdk-file-upload.d.ts +124 -0
- package/types/forty-cdk-hover-card.d.ts +320 -0
- package/types/forty-cdk-input.d.ts +169 -0
- package/types/forty-cdk-internationalized-date.d.ts +1 -1
- package/types/forty-cdk-listbox.d.ts +513 -0
- package/types/forty-cdk-menu.d.ts +629 -0
- package/types/forty-cdk-menubar.d.ts +451 -0
- package/types/forty-cdk-meter.d.ts +122 -0
- package/types/forty-cdk-navigation-menu.d.ts +514 -0
- package/types/forty-cdk-number-input.d.ts +319 -0
- package/types/forty-cdk-otp-input.d.ts +248 -0
- package/types/forty-cdk-pagination.d.ts +214 -0
- package/types/forty-cdk-pane-resizer.d.ts +145 -0
- package/types/forty-cdk-popover.d.ts +509 -0
- package/types/forty-cdk-progress.d.ts +143 -0
- package/types/forty-cdk-radio-group.d.ts +222 -0
- package/types/forty-cdk-scroll-area.d.ts +258 -0
- package/types/forty-cdk-search.d.ts +142 -0
- package/types/forty-cdk-select.d.ts +899 -0
- package/types/forty-cdk-separator.d.ts +59 -0
- package/types/forty-cdk-signal-forms.d.ts +58 -0
- package/types/forty-cdk-slider.d.ts +379 -0
- package/types/forty-cdk-stepper.d.ts +650 -0
- package/types/forty-cdk-switch.d.ts +87 -0
- package/types/forty-cdk-table.d.ts +723 -0
- package/types/forty-cdk-tabs.d.ts +235 -0
- package/types/forty-cdk-time-field.d.ts +307 -0
- package/types/forty-cdk-time-picker.d.ts +578 -0
- package/types/forty-cdk-toast.d.ts +598 -0
- package/types/forty-cdk-toggle.d.ts +310 -0
- package/types/forty-cdk-toolbar.d.ts +217 -0
- package/types/forty-cdk-tooltip.d.ts +436 -0
- package/types/forty-cdk-tree.d.ts +688 -0
- package/types/forty-cdk.d.ts +1 -19743
|
@@ -0,0 +1,530 @@
|
|
|
1
|
+
import * as _angular_core from '@angular/core';
|
|
2
|
+
import { InjectionToken, Signal, Provider } from '@angular/core';
|
|
3
|
+
import { WritingDirection, RovingTabindex, ListNavigationAction } from 'forty-cdk/core';
|
|
4
|
+
import * as forty_cdk_carousel from 'forty-cdk/carousel';
|
|
5
|
+
|
|
6
|
+
/** Alignment of the active slide within the viewport. */
|
|
7
|
+
type CarouselAlign = 'start' | 'center' | 'end';
|
|
8
|
+
/** Internal handle for a registered slide. */
|
|
9
|
+
interface ForCarouselSlideHandle {
|
|
10
|
+
readonly host: HTMLElement;
|
|
11
|
+
}
|
|
12
|
+
/** Internal handle for a registered indicator (dot). */
|
|
13
|
+
interface ForCarouselIndicatorHandle {
|
|
14
|
+
readonly host: HTMLElement;
|
|
15
|
+
readonly disabled: Signal<boolean>;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Coordination contract owned by `ForCarousel`. Slides and indicators
|
|
19
|
+
* register with the root so index lookups, geometry computations, and
|
|
20
|
+
* keyboard navigation are all driven from a single source of truth.
|
|
21
|
+
*/
|
|
22
|
+
interface ForCarouselContext {
|
|
23
|
+
readonly activeIndex: Signal<number>;
|
|
24
|
+
readonly orientation: Signal<'horizontal' | 'vertical'>;
|
|
25
|
+
readonly dir: Signal<WritingDirection>;
|
|
26
|
+
readonly loop: Signal<boolean>;
|
|
27
|
+
readonly align: Signal<CarouselAlign>;
|
|
28
|
+
readonly slidesPerView: Signal<number>;
|
|
29
|
+
readonly slideCount: Signal<number>;
|
|
30
|
+
readonly roving: RovingTabindex;
|
|
31
|
+
/** Whether auto-rotation is currently "on" (user intent). Drives the rotation control's label. */
|
|
32
|
+
readonly playing: Signal<boolean>;
|
|
33
|
+
/** Whether the carousel is actively auto-rotating right now (`playing && !paused`). Drives the viewport's `aria-live`. */
|
|
34
|
+
readonly rotating: Signal<boolean>;
|
|
35
|
+
canScrollPrev(): boolean;
|
|
36
|
+
canScrollNext(): boolean;
|
|
37
|
+
scrollPrev(): void;
|
|
38
|
+
scrollNext(): void;
|
|
39
|
+
scrollTo(index: number): void;
|
|
40
|
+
navigate(currentIndicator: HTMLElement, action: ListNavigationAction): void;
|
|
41
|
+
/** Toggle auto-rotation on/off (the explicit, sticky user choice). Called by the rotation control. */
|
|
42
|
+
toggleAutoplay(): void;
|
|
43
|
+
registerSlide(handle: ForCarouselSlideHandle): void;
|
|
44
|
+
unregisterSlide(handle: ForCarouselSlideHandle): void;
|
|
45
|
+
registerIndicator(handle: ForCarouselIndicatorHandle): void;
|
|
46
|
+
unregisterIndicator(handle: ForCarouselIndicatorHandle): void;
|
|
47
|
+
setViewport(el: HTMLElement, id: string): void;
|
|
48
|
+
viewportId(): string | null;
|
|
49
|
+
indexOfSlide(host: HTMLElement): number;
|
|
50
|
+
indexOfIndicator(host: HTMLElement): number;
|
|
51
|
+
/** Resolve the positional slide `aria-label` (`"N of M"` by default). `position` is 1-based. */
|
|
52
|
+
slideLabel(position: number): string;
|
|
53
|
+
/** Resolve the indicator `aria-label` (`"Go to slide N"` by default). `position` is 1-based. */
|
|
54
|
+
indicatorLabel(position: number): string;
|
|
55
|
+
isCurrent(index: number): boolean;
|
|
56
|
+
isInView(index: number): boolean;
|
|
57
|
+
isFirstEnabledIndicator(el: HTMLElement): boolean;
|
|
58
|
+
hasCurrentIndicator(): boolean;
|
|
59
|
+
}
|
|
60
|
+
/** DI token providing the carousel context to descendant pieces. */
|
|
61
|
+
declare const FOR_CAROUSEL_CONTEXT: InjectionToken<ForCarouselContext>;
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Root of the Carousel primitive. Owns the active index, slide collection,
|
|
65
|
+
* indicator collection, roving tabindex tracker, and computed geometry CSS
|
|
66
|
+
* variables. Provides the shared context to descendant pieces.
|
|
67
|
+
*
|
|
68
|
+
* Implements the [WAI-ARIA APG Carousel pattern](https://www.w3.org/WAI/ARIA/apg/patterns/carousel/).
|
|
69
|
+
*
|
|
70
|
+
* With no `[forCarouselIndicators]` rendered this is a basic carousel driven
|
|
71
|
+
* by prev/next buttons only. Adding an indicator group enables APG picker
|
|
72
|
+
* semantics: roving tabindex, arrow/Home/End navigation with automatic
|
|
73
|
+
* activation.
|
|
74
|
+
*/
|
|
75
|
+
declare class ForCarousel implements ForCarouselContext {
|
|
76
|
+
#private;
|
|
77
|
+
/**
|
|
78
|
+
* Two-way bindable. The zero-based index of the current (leading) slide.
|
|
79
|
+
* The `model()` change emitter (`(activeIndexChange)`) fires only on internal
|
|
80
|
+
* navigation (prev/next button clicks, indicator arrow-key or click), never
|
|
81
|
+
* on consumer writes via `[(activeIndex)]`.
|
|
82
|
+
*/
|
|
83
|
+
readonly activeIndex: _angular_core.ModelSignal<number>;
|
|
84
|
+
/** Scroll axis. `'horizontal'` (default) or `'vertical'`. */
|
|
85
|
+
readonly orientation: _angular_core.InputSignal<"horizontal" | "vertical">;
|
|
86
|
+
/**
|
|
87
|
+
* Whether index wrap-around is enabled. When `true`, `next` past the last
|
|
88
|
+
* slide wraps to index 0; `prev` before index 0 wraps to the last. Default
|
|
89
|
+
* comes from `provideForCarouselDefaults` or the library fallback (`false`).
|
|
90
|
+
*/
|
|
91
|
+
readonly loop: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
92
|
+
/**
|
|
93
|
+
* Alignment of the active slide within the viewport. Affects the
|
|
94
|
+
* `--for-carousel-offset` computation. Default from `provideForCarouselDefaults`
|
|
95
|
+
* or `'start'`.
|
|
96
|
+
*/
|
|
97
|
+
readonly align: _angular_core.InputSignal<CarouselAlign>;
|
|
98
|
+
/**
|
|
99
|
+
* Number of slides simultaneously visible in the viewport. Slide width
|
|
100
|
+
* should be set to `calc(100% / var(--for-carousel-slides-per-view))` in
|
|
101
|
+
* the consumer's CSS. Default from `provideForCarouselDefaults` or `1`.
|
|
102
|
+
*/
|
|
103
|
+
readonly slidesPerView: _angular_core.InputSignalWithTransform<number, unknown>;
|
|
104
|
+
/**
|
|
105
|
+
* When `true` and the carousel is not looping, clamps `--for-carousel-offset` so the
|
|
106
|
+
* trailing slides align flush to the viewport's trailing edge instead of overscrolling
|
|
107
|
+
* into empty space (relevant when `slidesPerView > 1`). The one-indicator-per-slide
|
|
108
|
+
* mapping is preserved — `activeIndex` still reaches the last slide; only the visual
|
|
109
|
+
* offset is contained. No effect when `loop` is enabled or `slidesPerView` is 1.
|
|
110
|
+
* Default from `provideForCarouselDefaults` or `false`.
|
|
111
|
+
*/
|
|
112
|
+
readonly containScroll: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
113
|
+
/**
|
|
114
|
+
* Accessible label for the carousel root (`role="group"`). Should describe
|
|
115
|
+
* the carousel's purpose without using the word "carousel" (APG guidance).
|
|
116
|
+
* When null (default), no `aria-label` is emitted; use `aria-labelledby`
|
|
117
|
+
* instead when a visible heading labels the carousel.
|
|
118
|
+
*/
|
|
119
|
+
readonly ariaLabel: _angular_core.InputSignal<string | null>;
|
|
120
|
+
/**
|
|
121
|
+
* Whether the carousel auto-rotates. When `true` and the user has not
|
|
122
|
+
* explicitly stopped it, rotation starts on mount — *unless*
|
|
123
|
+
* `prefers-reduced-motion: reduce` is set, which suppresses auto-start
|
|
124
|
+
* (the user can still start it via the rotation control). Default from
|
|
125
|
+
* `provideForCarouselDefaults` or `false`.
|
|
126
|
+
*
|
|
127
|
+
* APG requires a `[forCarouselRotationControl]` to be present whenever
|
|
128
|
+
* autoplay is enabled. The directive does not enforce this — see the README.
|
|
129
|
+
*/
|
|
130
|
+
readonly autoplay: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
131
|
+
/**
|
|
132
|
+
* Milliseconds between automatic slide advances while rotating. Values
|
|
133
|
+
* `<= 0` disable the timer. Default from `provideForCarouselDefaults` or `5000`.
|
|
134
|
+
*/
|
|
135
|
+
readonly autoplayInterval: _angular_core.InputSignalWithTransform<number, unknown>;
|
|
136
|
+
/**
|
|
137
|
+
* Writing direction. When unset (default `null`), the inherited ambient
|
|
138
|
+
* direction is resolved from the nearest ancestor carrying a `dir` attribute
|
|
139
|
+
* (or `<html dir>`), defaulting to `'ltr'`. An explicit `[dir]` always wins.
|
|
140
|
+
* The resolved value is reflected to the host `dir` attribute and swaps
|
|
141
|
+
* ArrowLeft / ArrowRight semantics on the indicator group in RTL.
|
|
142
|
+
*/
|
|
143
|
+
readonly _dirInput: _angular_core.InputSignal<WritingDirection | null>;
|
|
144
|
+
readonly dir: _angular_core.Signal<WritingDirection>;
|
|
145
|
+
/** Roving tabindex tracker for the indicator group. */
|
|
146
|
+
readonly roving: RovingTabindex;
|
|
147
|
+
/** Whether auto-rotation is "on" (user intent). Sticky once the user decides. */
|
|
148
|
+
readonly playing: _angular_core.Signal<boolean>;
|
|
149
|
+
/** Whether the carousel is actively auto-rotating right now. */
|
|
150
|
+
readonly rotating: _angular_core.Signal<boolean>;
|
|
151
|
+
/** Total number of registered slides. Reactive. */
|
|
152
|
+
readonly slideCount: _angular_core.Signal<number>;
|
|
153
|
+
/**
|
|
154
|
+
* The `--for-carousel-offset` value to apply via `transform` on the track.
|
|
155
|
+
* Pure arithmetic — no layout measurement — so it is safe in Vitest.
|
|
156
|
+
*/
|
|
157
|
+
readonly offset: _angular_core.Signal<string>;
|
|
158
|
+
/** The measured viewport width, or `null` before first measurement / on the server. */
|
|
159
|
+
readonly viewportWidth: _angular_core.Signal<string | null>;
|
|
160
|
+
/** The measured viewport height, or `null` before first measurement / on the server. */
|
|
161
|
+
readonly viewportHeight: _angular_core.Signal<string | null>;
|
|
162
|
+
constructor();
|
|
163
|
+
/** Returns `true` when scrolling backward is possible given the current loop/index state. */
|
|
164
|
+
canScrollPrev(): boolean;
|
|
165
|
+
/** Returns `true` when scrolling forward is possible given the current loop/index state. */
|
|
166
|
+
canScrollNext(): boolean;
|
|
167
|
+
/** Navigate to the previous slide. No-op at index 0 when not looping. */
|
|
168
|
+
scrollPrev(): void;
|
|
169
|
+
/** Navigate to the next slide. No-op at the last index when not looping. */
|
|
170
|
+
scrollNext(): void;
|
|
171
|
+
/**
|
|
172
|
+
* Navigate to the slide at `index`. Clamps to `[0, slideCount-1]` when not
|
|
173
|
+
* looping; wraps modulo `slideCount` when looping.
|
|
174
|
+
*/
|
|
175
|
+
scrollTo(index: number): void;
|
|
176
|
+
/**
|
|
177
|
+
* Move focus from `currentIndicator` according to `action` and activate the
|
|
178
|
+
* target slide (automatic activation). Used by `ForCarouselIndicator`'s
|
|
179
|
+
* keydown handler.
|
|
180
|
+
*/
|
|
181
|
+
navigate(currentIndicator: HTMLElement, action: ListNavigationAction): void;
|
|
182
|
+
registerSlide(handle: ForCarouselSlideHandle): void;
|
|
183
|
+
unregisterSlide(handle: ForCarouselSlideHandle): void;
|
|
184
|
+
registerIndicator(handle: ForCarouselIndicatorHandle): void;
|
|
185
|
+
unregisterIndicator(handle: ForCarouselIndicatorHandle): void;
|
|
186
|
+
/** Called by `ForCarouselViewport` at construction to wire the geometry observer. */
|
|
187
|
+
setViewport(el: HTMLElement, id: string): void;
|
|
188
|
+
/** The id of the registered viewport element, or `null` if none is mounted. */
|
|
189
|
+
viewportId(): string | null;
|
|
190
|
+
/** DOM-order index of the registered slide whose host equals `host`, or -1. */
|
|
191
|
+
indexOfSlide(host: HTMLElement): number;
|
|
192
|
+
/** DOM-order index of the registered indicator whose host equals `host`, or -1. */
|
|
193
|
+
indexOfIndicator(host: HTMLElement): number;
|
|
194
|
+
/**
|
|
195
|
+
* Resolve the positional slide `aria-label` from the scope's defaults
|
|
196
|
+
* (`"N of M"` unless localized via `provideForCarouselDefaults`).
|
|
197
|
+
* `position` is the 1-based slide index.
|
|
198
|
+
*/
|
|
199
|
+
slideLabel(position: number): string;
|
|
200
|
+
/**
|
|
201
|
+
* Resolve the indicator `aria-label` from the scope's defaults
|
|
202
|
+
* (`"Go to slide N"` unless localized via `provideForCarouselDefaults`).
|
|
203
|
+
* `position` is the 1-based slide index.
|
|
204
|
+
*/
|
|
205
|
+
indicatorLabel(position: number): string;
|
|
206
|
+
/** Returns `true` when `index` is the current active slide index. */
|
|
207
|
+
isCurrent(index: number): boolean;
|
|
208
|
+
/**
|
|
209
|
+
* Returns `true` when `index` falls within the visible window
|
|
210
|
+
* `[activeIndex, activeIndex + slidesPerView - 1]`.
|
|
211
|
+
*/
|
|
212
|
+
isInView(index: number): boolean;
|
|
213
|
+
/**
|
|
214
|
+
* Returns `true` when `el` is the host of the first non-disabled indicator
|
|
215
|
+
* in DOM order. Used by the tabindex fallback when no indicator is current.
|
|
216
|
+
*/
|
|
217
|
+
isFirstEnabledIndicator(el: HTMLElement): boolean;
|
|
218
|
+
/**
|
|
219
|
+
* Returns `true` when at least one registered, non-disabled indicator
|
|
220
|
+
* matches the current `activeIndex`. Used by the tabindex ladder to decide
|
|
221
|
+
* whether the first-enabled fallback must reclaim the tab stop.
|
|
222
|
+
*
|
|
223
|
+
* Assumes the one-indicator-per-slide mapping the rest of the picker is built
|
|
224
|
+
* on: the indicator at DOM index `i` targets slide `i`. A mismatched indicator
|
|
225
|
+
* count is dev-guarded by a `console.warn` at construction.
|
|
226
|
+
*/
|
|
227
|
+
hasCurrentIndicator(): boolean;
|
|
228
|
+
/** Start auto-rotation (explicit, sticky). Overrides the reduced-motion auto-start gate. */
|
|
229
|
+
play(): void;
|
|
230
|
+
/** Stop auto-rotation (explicit, sticky). Hover/focus/visibility changes will not restart it. */
|
|
231
|
+
pause(): void;
|
|
232
|
+
/** Toggle auto-rotation. Called by `[forCarouselRotationControl]`. */
|
|
233
|
+
toggleAutoplay(): void;
|
|
234
|
+
protected onAutoplayPause(reason: 'hover' | 'focus'): void;
|
|
235
|
+
protected onAutoplayResume(reason: 'hover' | 'focus'): void;
|
|
236
|
+
protected onAutoplayFocusOut(event: FocusEvent): void;
|
|
237
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ForCarousel, never>;
|
|
238
|
+
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>;
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
/**
|
|
242
|
+
* Clips the visible window of the carousel track. Acts as the APG-mandated
|
|
243
|
+
* live region for screen-reader announcements. `aria-live` flips between
|
|
244
|
+
* `"off"` while the carousel is actively auto-rotating (so advancing slides
|
|
245
|
+
* do not bombard the screen reader) and `"polite"` at all other times so
|
|
246
|
+
* manual navigation is announced. Also serves as the `aria-controls` target
|
|
247
|
+
* for the prev/next buttons.
|
|
248
|
+
*
|
|
249
|
+
* Registers itself with the carousel root on construction so the root's
|
|
250
|
+
* `injectElementSize` observer starts and prev/next's `aria-controls` resolves.
|
|
251
|
+
* There must be exactly one viewport per carousel.
|
|
252
|
+
*/
|
|
253
|
+
declare class ForCarouselViewport {
|
|
254
|
+
#private;
|
|
255
|
+
protected readonly ctx: forty_cdk_carousel.ForCarouselContext;
|
|
256
|
+
/** The resolved id of this element — generated or adopted from a consumer-set static `id`. */
|
|
257
|
+
readonly id: _angular_core.Signal<string>;
|
|
258
|
+
constructor();
|
|
259
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ForCarouselViewport, never>;
|
|
260
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForCarouselViewport, "[forCarouselViewport]", ["forCarouselViewport"], {}, {}, never, never, true, never>;
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
/**
|
|
264
|
+
* The flex container of slides. The consumer's CSS reads
|
|
265
|
+
* `--for-carousel-offset` (inherited from the root) and applies it as a
|
|
266
|
+
* `transform: translateX(...)` / `translateY(...)` on this element.
|
|
267
|
+
* The directive adds no animation or transform itself.
|
|
268
|
+
*
|
|
269
|
+
* Reflects `data-orientation` so the consumer can select the correct CSS
|
|
270
|
+
* axis via `[data-orientation="vertical"] [forCarouselTrack] { ... }`.
|
|
271
|
+
*/
|
|
272
|
+
declare class ForCarouselTrack {
|
|
273
|
+
protected readonly ctx: forty_cdk_carousel.ForCarouselContext;
|
|
274
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ForCarouselTrack, never>;
|
|
275
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForCarouselTrack, "[forCarouselTrack]", ["forCarouselTrack"], {}, {}, never, never, true, never>;
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
/**
|
|
279
|
+
* One slide in the carousel track. Carries `role="group"` and
|
|
280
|
+
* `aria-roledescription="slide"` per the WAI-ARIA APG Carousel pattern.
|
|
281
|
+
*
|
|
282
|
+
* The default `aria-label` is the positional `"N of M"` string (APG mandates
|
|
283
|
+
* a positional label on each slide). Set `ariaLabel` to override with a
|
|
284
|
+
* semantically richer label for the specific slide content.
|
|
285
|
+
*
|
|
286
|
+
* Off-view slides (outside `[activeIndex, activeIndex + slidesPerView - 1]`)
|
|
287
|
+
* are hidden from the accessibility tree and focus order via
|
|
288
|
+
* `aria-hidden="true"` + `inert`.
|
|
289
|
+
*/
|
|
290
|
+
declare class ForCarouselSlide {
|
|
291
|
+
#private;
|
|
292
|
+
protected readonly ctx: forty_cdk_carousel.ForCarouselContext;
|
|
293
|
+
/**
|
|
294
|
+
* Override the default positional `aria-label` (`"N of M"`). Use this to
|
|
295
|
+
* provide a semantically richer label when the slide's content has a
|
|
296
|
+
* meaningful title (e.g. the product name). When `null` (default), the
|
|
297
|
+
* positional label is used automatically. Localize that default format
|
|
298
|
+
* app-wide via `provideForCarouselDefaults`'s `slideLabel`.
|
|
299
|
+
*/
|
|
300
|
+
readonly ariaLabel: _angular_core.InputSignal<string | null>;
|
|
301
|
+
/** Whether this is the current (active) slide. */
|
|
302
|
+
protected readonly current: _angular_core.Signal<boolean>;
|
|
303
|
+
/** Whether this slide is within the visible window. */
|
|
304
|
+
protected readonly inView: _angular_core.Signal<boolean>;
|
|
305
|
+
/** The positional `"N of M"` label used when no explicit `ariaLabel` is set. */
|
|
306
|
+
protected readonly positionLabel: _angular_core.Signal<string | null>;
|
|
307
|
+
constructor();
|
|
308
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ForCarouselSlide, never>;
|
|
309
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForCarouselSlide, "[forCarouselSlide]", ["forCarouselSlide"], { "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
/**
|
|
313
|
+
* Previous-slide button. Apply on a `<button>` so Enter/Space activation is
|
|
314
|
+
* native. Disabled (via the native `disabled` attribute) at index 0 when the
|
|
315
|
+
* carousel is not looping. When `loop` is `true` it is never disabled.
|
|
316
|
+
*
|
|
317
|
+
* Points `aria-controls` at the viewport's id so screen readers announce the
|
|
318
|
+
* relationship. Clicking does not move focus (APG).
|
|
319
|
+
*/
|
|
320
|
+
declare class ForCarouselPrevious {
|
|
321
|
+
protected readonly ctx: forty_cdk_carousel.ForCarouselContext;
|
|
322
|
+
/**
|
|
323
|
+
* Accessible label for this button (e.g. "Previous slide"). When `null`
|
|
324
|
+
* (default), no `aria-label` is emitted — the consumer should supply a
|
|
325
|
+
* visible label or set this input.
|
|
326
|
+
*/
|
|
327
|
+
readonly ariaLabel: _angular_core.InputSignal<string | null>;
|
|
328
|
+
protected readonly isDisabled: _angular_core.Signal<boolean>;
|
|
329
|
+
constructor();
|
|
330
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ForCarouselPrevious, never>;
|
|
331
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForCarouselPrevious, "[forCarouselPrevious]", ["forCarouselPrevious"], { "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
/**
|
|
335
|
+
* Next-slide button. Apply on a `<button>` so Enter/Space activation is
|
|
336
|
+
* native. Disabled (via the native `disabled` attribute) at the last index
|
|
337
|
+
* when the carousel is not looping. When `loop` is `true` it is never disabled.
|
|
338
|
+
*
|
|
339
|
+
* Points `aria-controls` at the viewport's id so screen readers announce the
|
|
340
|
+
* relationship. Clicking does not move focus (APG).
|
|
341
|
+
*/
|
|
342
|
+
declare class ForCarouselNext {
|
|
343
|
+
protected readonly ctx: forty_cdk_carousel.ForCarouselContext;
|
|
344
|
+
/**
|
|
345
|
+
* Accessible label for this button (e.g. "Next slide"). When `null`
|
|
346
|
+
* (default), no `aria-label` is emitted — the consumer should supply a
|
|
347
|
+
* visible label or set this input.
|
|
348
|
+
*/
|
|
349
|
+
readonly ariaLabel: _angular_core.InputSignal<string | null>;
|
|
350
|
+
protected readonly isDisabled: _angular_core.Signal<boolean>;
|
|
351
|
+
constructor();
|
|
352
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ForCarouselNext, never>;
|
|
353
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForCarouselNext, "[forCarouselNext]", ["forCarouselNext"], { "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
/**
|
|
357
|
+
* The slide-picker group (dot navigation). Renders as `role="group"` and
|
|
358
|
+
* should receive an `ariaLabel` describing its purpose (e.g. "Choose slide
|
|
359
|
+
* to display") per the WAI-ARIA APG Carousel pattern.
|
|
360
|
+
*
|
|
361
|
+
* Keyboard navigation (ArrowLeft/Right, Home/End) and automatic activation
|
|
362
|
+
* live on each `[forCarouselIndicator]` child, not on this container.
|
|
363
|
+
*/
|
|
364
|
+
declare class ForCarouselIndicators {
|
|
365
|
+
protected readonly ctx: forty_cdk_carousel.ForCarouselContext;
|
|
366
|
+
/**
|
|
367
|
+
* Accessible label for the picker group (e.g. "Choose slide to display").
|
|
368
|
+
* APG recommends labelling the group so screen readers can distinguish it
|
|
369
|
+
* from other landmarks.
|
|
370
|
+
*/
|
|
371
|
+
readonly ariaLabel: _angular_core.InputSignal<string | null>;
|
|
372
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ForCarouselIndicators, never>;
|
|
373
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForCarouselIndicators, "[forCarouselIndicators]", ["forCarouselIndicators"], { "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
/**
|
|
377
|
+
* One indicator (dot) in the slide picker. Apply on a `<button>` so
|
|
378
|
+
* Enter/Space activation is native. Uses roving tabindex — only the current
|
|
379
|
+
* dot owns `tabindex=0`; all others have `tabindex=-1`. Arrow/Home/End
|
|
380
|
+
* navigation activates the target slide automatically (APG "grouped/tabbed
|
|
381
|
+
* picker" variant).
|
|
382
|
+
*
|
|
383
|
+
* The current indicator is marked with `aria-current="true"` (truthy-only).
|
|
384
|
+
* Disabled indicators receive `aria-disabled="true"` and `data-disabled` but
|
|
385
|
+
* stay focusable (custom-role rule) so assistive tech can announce them.
|
|
386
|
+
*/
|
|
387
|
+
declare class ForCarouselIndicator {
|
|
388
|
+
#private;
|
|
389
|
+
protected readonly ctx: forty_cdk_carousel.ForCarouselContext;
|
|
390
|
+
/**
|
|
391
|
+
* Override the default positional `aria-label` (e.g. `"Go to slide 1"`).
|
|
392
|
+
* Use this to provide a more descriptive label when the slide has a title.
|
|
393
|
+
* Localize that default format app-wide via `provideForCarouselDefaults`'s
|
|
394
|
+
* `indicatorLabel`.
|
|
395
|
+
*/
|
|
396
|
+
readonly ariaLabel: _angular_core.InputSignal<string | null>;
|
|
397
|
+
/**
|
|
398
|
+
* Disables this indicator. Disabled indicators remain focusable (for
|
|
399
|
+
* assistive tech) but ignore click and keyboard activation.
|
|
400
|
+
*/
|
|
401
|
+
readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
402
|
+
/** Whether this indicator corresponds to the current active slide. */
|
|
403
|
+
protected readonly current: _angular_core.Signal<boolean>;
|
|
404
|
+
/** Default positional label used when no explicit `ariaLabel` is set. */
|
|
405
|
+
protected readonly positionLabel: _angular_core.Signal<string | null>;
|
|
406
|
+
/**
|
|
407
|
+
* APG roving tabindex: user-driven roving owns it once any indicator has
|
|
408
|
+
* been focused. Before that, fall back to "current slide's indicator, else
|
|
409
|
+
* first enabled".
|
|
410
|
+
*/
|
|
411
|
+
protected readonly tabindex: _angular_core.Signal<0 | -1>;
|
|
412
|
+
constructor();
|
|
413
|
+
protected onClick(): void;
|
|
414
|
+
protected onFocus(): void;
|
|
415
|
+
protected onKeyDown(event: KeyboardEvent): void;
|
|
416
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ForCarouselIndicator, never>;
|
|
417
|
+
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>;
|
|
418
|
+
}
|
|
419
|
+
|
|
420
|
+
/**
|
|
421
|
+
* Play/pause control for carousel auto-rotation. Apply on a `<button>` so
|
|
422
|
+
* Enter/Space activation is native. Its accessible name swaps with the
|
|
423
|
+
* rotation state — `stopLabel` while rotating, `startLabel` while stopped —
|
|
424
|
+
* per the WAI-ARIA APG Carousel pattern, which forbids `aria-pressed` here.
|
|
425
|
+
*
|
|
426
|
+
* Place this control **first** in the carousel's DOM/tab order so assistive
|
|
427
|
+
* technology users meet it before the rotating content (APG requirement).
|
|
428
|
+
*
|
|
429
|
+
* Reflects a boolean `data-playing` attribute (present while rotation is on)
|
|
430
|
+
* as the styling hook for swapping a play/pause icon.
|
|
431
|
+
*/
|
|
432
|
+
declare class ForCarouselRotationControl {
|
|
433
|
+
protected readonly ctx: forty_cdk_carousel.ForCarouselContext;
|
|
434
|
+
/** Accessible name shown while rotation is **stopped** (the button will start it). */
|
|
435
|
+
readonly startLabel: _angular_core.InputSignal<string>;
|
|
436
|
+
/** Accessible name shown while rotation is **playing** (the button will stop it). */
|
|
437
|
+
readonly stopLabel: _angular_core.InputSignal<string>;
|
|
438
|
+
/** The current accessible name — `stopLabel` while playing, else `startLabel`. */
|
|
439
|
+
protected readonly label: _angular_core.Signal<string>;
|
|
440
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ForCarouselRotationControl, never>;
|
|
441
|
+
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>;
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
/**
|
|
445
|
+
* Opt-in pointer drag / swipe directive for the Carousel viewport. Apply on the
|
|
446
|
+
* `[forCarouselViewport]` element to enable horizontal or vertical drag-to-navigate.
|
|
447
|
+
*
|
|
448
|
+
* Publishes `--for-carousel-drag` (px) during the gesture so the consumer can
|
|
449
|
+
* compose it with `--for-carousel-offset` for live track motion. Reflects
|
|
450
|
+
* `data-dragging` while the gesture is armed. Sets `touch-action` automatically
|
|
451
|
+
* to free the cross axis for page scrolling.
|
|
452
|
+
*
|
|
453
|
+
* Under `prefers-reduced-motion: reduce` the live offset is suppressed, but the
|
|
454
|
+
* gesture still snaps `activeIndex` on release (D3).
|
|
455
|
+
*/
|
|
456
|
+
declare class ForCarouselDrag {
|
|
457
|
+
#private;
|
|
458
|
+
protected readonly ctx: forty_cdk_carousel.ForCarouselContext;
|
|
459
|
+
/** Disable pointer drag without removing the directive. Default `false`. */
|
|
460
|
+
readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
461
|
+
/** Whether a drag gesture is currently armed (reflected as `data-dragging`). */
|
|
462
|
+
readonly dragging: _angular_core.Signal<boolean>;
|
|
463
|
+
/** `touch-action` for the viewport: capture the primary axis, free the cross axis. */
|
|
464
|
+
readonly touchAction: _angular_core.Signal<string | null>;
|
|
465
|
+
/** Live offset CSS var; suppressed at rest and under reduced motion (D3). */
|
|
466
|
+
readonly dragVar: _angular_core.Signal<string | null>;
|
|
467
|
+
constructor();
|
|
468
|
+
protected onDragStart(event: Event): void;
|
|
469
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ForCarouselDrag, never>;
|
|
470
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForCarouselDrag, "[forCarouselDrag]", ["forCarouselDrag"], { "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
471
|
+
}
|
|
472
|
+
|
|
473
|
+
/**
|
|
474
|
+
* Defaults inherited by descendant carousels in the surrounding injector scope.
|
|
475
|
+
* Configure with `provideForCarouselDefaults` either at the application root
|
|
476
|
+
* or in any component's `providers` array; partial overrides merge with
|
|
477
|
+
* the parent scope.
|
|
478
|
+
*/
|
|
479
|
+
interface ForCarouselDefaults {
|
|
480
|
+
/**
|
|
481
|
+
* Whether index wrap-around is enabled. When `true`, `next` past the last
|
|
482
|
+
* slide wraps to index 0 and `prev` before index 0 wraps to the last slide.
|
|
483
|
+
*/
|
|
484
|
+
loop: boolean;
|
|
485
|
+
/**
|
|
486
|
+
* Alignment of the active slide within the viewport. `'start'` (default):
|
|
487
|
+
* the active slide's leading edge aligns with the viewport's leading edge.
|
|
488
|
+
* `'center'` / `'end'` offset accordingly.
|
|
489
|
+
*/
|
|
490
|
+
align: CarouselAlign;
|
|
491
|
+
/**
|
|
492
|
+
* Number of slides visible simultaneously in the viewport. Slide width is
|
|
493
|
+
* set to `100% / slidesPerView` by the consumer's CSS.
|
|
494
|
+
*/
|
|
495
|
+
slidesPerView: number;
|
|
496
|
+
/**
|
|
497
|
+
* When `true` (and the carousel is not looping), clamps the track offset so the
|
|
498
|
+
* trailing slides align flush to the viewport's trailing edge instead of
|
|
499
|
+
* overscrolling into empty space when `slidesPerView > 1`. The indicator/slide
|
|
500
|
+
* mapping is unchanged — only the visual offset is contained. Default `false`.
|
|
501
|
+
*/
|
|
502
|
+
containScroll: boolean;
|
|
503
|
+
/** Whether the carousel auto-rotates on mount (when not under reduced-motion). Default `false`. */
|
|
504
|
+
autoplay: boolean;
|
|
505
|
+
/** Milliseconds between automatic slide advances. Default `5000`. */
|
|
506
|
+
autoplayInterval: number;
|
|
507
|
+
/**
|
|
508
|
+
* Builds the default positional `aria-label` for each slide (`"N of M"`).
|
|
509
|
+
* Override to localize centrally. `position` is the 1-based slide index and
|
|
510
|
+
* `total` is the slide count. A per-slide `ariaLabel` still takes precedence.
|
|
511
|
+
*/
|
|
512
|
+
slideLabel: (position: number, total: number) => string;
|
|
513
|
+
/**
|
|
514
|
+
* Builds the default `aria-label` for each indicator dot (`"Go to slide N"`).
|
|
515
|
+
* Override to localize centrally. `position` is the 1-based slide index. A
|
|
516
|
+
* per-indicator `ariaLabel` still takes precedence.
|
|
517
|
+
*/
|
|
518
|
+
indicatorLabel: (position: number) => string;
|
|
519
|
+
}
|
|
520
|
+
/** Token holding the resolved carousel defaults for the current scope. */
|
|
521
|
+
declare const FOR_CAROUSEL_DEFAULTS: _angular_core.InjectionToken<ForCarouselDefaults>;
|
|
522
|
+
/**
|
|
523
|
+
* Configures forty-cdk carousel defaults for this injector scope. Partial
|
|
524
|
+
* overrides inherit unspecified keys from the parent scope (or library
|
|
525
|
+
* defaults at the root).
|
|
526
|
+
*/
|
|
527
|
+
declare function provideForCarouselDefaults(defaults?: Partial<ForCarouselDefaults>): Provider[];
|
|
528
|
+
|
|
529
|
+
export { FOR_CAROUSEL_CONTEXT, FOR_CAROUSEL_DEFAULTS, ForCarousel, ForCarouselDrag, ForCarouselIndicator, ForCarouselIndicators, ForCarouselNext, ForCarouselPrevious, ForCarouselRotationControl, ForCarouselSlide, ForCarouselTrack, ForCarouselViewport, provideForCarouselDefaults };
|
|
530
|
+
export type { CarouselAlign, ForCarouselContext, ForCarouselDefaults };
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import * as _angular_core from '@angular/core';
|
|
2
|
+
import { InjectionToken, Provider } from '@angular/core';
|
|
3
|
+
import { FormCheckboxControl } from '@angular/forms/signals';
|
|
4
|
+
import { FormUiControlBase } from 'forty-cdk/core';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Injection key the `[forCheckboxIndicator]` uses to resolve its parent
|
|
8
|
+
* checkbox, decoupled from the concrete `ForCheckbox` class. `ForCheckbox`
|
|
9
|
+
* provides itself under this token, so a design system wrapping the checkbox
|
|
10
|
+
* by subclassing re-points it at the subclass with a single provider
|
|
11
|
+
* (`{ provide: FOR_CHECKBOX, useExisting: MtxCheckbox }`) and the indicator
|
|
12
|
+
* keeps resolving — see `docs/wrapping-form-primitives.md`.
|
|
13
|
+
*/
|
|
14
|
+
declare const FOR_CHECKBOX: InjectionToken<ForCheckbox>;
|
|
15
|
+
/**
|
|
16
|
+
* Headless checkbox implementing the
|
|
17
|
+
* [WAI-ARIA Checkbox pattern](https://www.w3.org/WAI/ARIA/apg/patterns/checkbox/)
|
|
18
|
+
* with optional tri-state (`indeterminate`) support, plus Angular's
|
|
19
|
+
* `FormCheckboxControl` from `@angular/forms/signals` for `[formField]`
|
|
20
|
+
* auto-wiring.
|
|
21
|
+
*
|
|
22
|
+
* Apply on a `<button type="button">`. The directive forces `type="button"`
|
|
23
|
+
* to avoid accidental form submission; Enter and Space activation come from
|
|
24
|
+
* native button behavior (APG only mandates Space, and Enter is harmless on
|
|
25
|
+
* a non-submit button).
|
|
26
|
+
*
|
|
27
|
+
* Tri-state: when `indeterminate` is `true`, `aria-checked="mixed"` is
|
|
28
|
+
* announced regardless of `checked`. Activating an indeterminate checkbox
|
|
29
|
+
* clears `indeterminate` and toggles `checked` from its current value
|
|
30
|
+
* (matches native `<input type="checkbox">` behavior).
|
|
31
|
+
*
|
|
32
|
+
* The accessible name is the consumer's responsibility — wrap the button in a
|
|
33
|
+
* `<label>` or use `aria-labelledby` / `aria-label`.
|
|
34
|
+
*
|
|
35
|
+
* @example
|
|
36
|
+
* ```html
|
|
37
|
+
* <button forCheckbox [(checked)]="agreed">
|
|
38
|
+
* <span class="indicator"></span>
|
|
39
|
+
* </button>
|
|
40
|
+
* I agree to the terms.
|
|
41
|
+
*
|
|
42
|
+
* <!-- With Signal Forms: -->
|
|
43
|
+
* <button forCheckbox [formField]="form.acceptTerms"></button>
|
|
44
|
+
* ```
|
|
45
|
+
*/
|
|
46
|
+
declare class ForCheckbox extends FormUiControlBase implements FormCheckboxControl {
|
|
47
|
+
/** Two-way bindable on/off state. Required by `FormCheckboxControl`. */
|
|
48
|
+
readonly checked: _angular_core.ModelSignal<boolean>;
|
|
49
|
+
/**
|
|
50
|
+
* Two-way bindable indeterminate state. When true, `aria-checked="mixed"`
|
|
51
|
+
* is announced regardless of `checked`. Activation clears it.
|
|
52
|
+
*
|
|
53
|
+
* Not part of `FormCheckboxControl` — the field's value stays binary.
|
|
54
|
+
* Indeterminate is a UI-only concern (e.g. a parent "select all" reflecting
|
|
55
|
+
* children with mixed selection).
|
|
56
|
+
*/
|
|
57
|
+
readonly indeterminate: _angular_core.ModelSignal<boolean>;
|
|
58
|
+
protected readonly ariaChecked: _angular_core.Signal<"true" | "false" | "mixed">;
|
|
59
|
+
/**
|
|
60
|
+
* Logical state reflected on `data-state`: `'checked'`, `'unchecked'`, or
|
|
61
|
+
* `'indeterminate'`. Exposed so `ForCheckboxIndicator` can mirror it without
|
|
62
|
+
* re-deriving the same mapping.
|
|
63
|
+
*/
|
|
64
|
+
readonly dataState: _angular_core.Signal<"checked" | "indeterminate" | "unchecked">;
|
|
65
|
+
constructor();
|
|
66
|
+
protected onClick(): void;
|
|
67
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ForCheckbox, never>;
|
|
68
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForCheckbox, "[forCheckbox]", ["forCheckbox"], { "checked": { "alias": "checked"; "required": false; "isSignal": true; }; "indeterminate": { "alias": "indeterminate"; "required": false; "isSignal": true; }; }, { "checked": "checkedChange"; "indeterminate": "indeterminateChange"; }, never, never, true, never>;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Optional indicator slot inside a `ForCheckbox`. Apply on the element
|
|
73
|
+
* the consumer wants to show only while the checkbox is `checked` or
|
|
74
|
+
* `indeterminate` (typically a check icon, dash, or filled square). The
|
|
75
|
+
* directive mirrors `data-state` from the parent so the consumer can
|
|
76
|
+
* style transitions without per-state bindings; hide the unchecked state
|
|
77
|
+
* via `[data-state="unchecked"] { display: none }` or `@if`.
|
|
78
|
+
*
|
|
79
|
+
* Purely a styling convenience — consumers happy with CSS `:has`
|
|
80
|
+
* selectors or `[data-state]` checks on the parent can skip it entirely.
|
|
81
|
+
*/
|
|
82
|
+
declare class ForCheckboxIndicator {
|
|
83
|
+
protected readonly parent: ForCheckbox;
|
|
84
|
+
constructor();
|
|
85
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ForCheckboxIndicator, never>;
|
|
86
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ForCheckboxIndicator, "[forCheckboxIndicator]", ["forCheckboxIndicator"], {}, {}, never, never, true, never>;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Defaults inherited by descendant checkboxes in the surrounding injector
|
|
91
|
+
* scope. Configure with `provideForCheckboxDefaults`. The shape is a stub
|
|
92
|
+
* today — present so future per-scope tuning can land without churning the
|
|
93
|
+
* public surface.
|
|
94
|
+
*/
|
|
95
|
+
interface ForCheckboxDefaults {
|
|
96
|
+
}
|
|
97
|
+
/** Token holding the resolved checkbox defaults for the current scope. */
|
|
98
|
+
declare const FOR_CHECKBOX_DEFAULTS: _angular_core.InjectionToken<ForCheckboxDefaults>;
|
|
99
|
+
/**
|
|
100
|
+
* Configures forty-cdk checkbox defaults for this injector scope. Partial
|
|
101
|
+
* overrides inherit unspecified keys from the parent scope (or library
|
|
102
|
+
* defaults at the root).
|
|
103
|
+
*/
|
|
104
|
+
declare function provideForCheckboxDefaults(defaults?: Partial<ForCheckboxDefaults>): Provider[];
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* Exact public names of every `ForCheckbox` input, its models included. Spread it into the
|
|
108
|
+
* `inputs` array of a `hostDirectives` entry so a wrapper component re-exposes the
|
|
109
|
+
* primitive's full surface — the Signal Forms members `[formField]` binds among them —
|
|
110
|
+
* without hand-maintaining the list. Always spread into an inline object literal as shown
|
|
111
|
+
* below: the literal is what keeps the entry statically analyzable for consumers compiling
|
|
112
|
+
* against the published package. An anti-drift spec fails when this list no longer matches
|
|
113
|
+
* the directive's actual API. See `docs/wrapping-form-primitives.md` for both supported
|
|
114
|
+
* wrapping patterns.
|
|
115
|
+
*
|
|
116
|
+
* @example
|
|
117
|
+
* ```ts
|
|
118
|
+
* @Component({
|
|
119
|
+
* selector: 'button[myCheckbox]',
|
|
120
|
+
* template: '',
|
|
121
|
+
* hostDirectives: [
|
|
122
|
+
* {
|
|
123
|
+
* directive: ForCheckbox,
|
|
124
|
+
* inputs: [...FOR_CHECKBOX_HOST_DIRECTIVE_INPUTS],
|
|
125
|
+
* outputs: [...FOR_CHECKBOX_HOST_DIRECTIVE_OUTPUTS],
|
|
126
|
+
* },
|
|
127
|
+
* ],
|
|
128
|
+
* })
|
|
129
|
+
* export class MyCheckbox {}
|
|
130
|
+
* ```
|
|
131
|
+
*/
|
|
132
|
+
declare const FOR_CHECKBOX_HOST_DIRECTIVE_INPUTS: readonly ["checked", "indeterminate", "dirty", "disabled", "errors", "invalid", "name", "pending", "readonly", "required", "touched"];
|
|
133
|
+
/**
|
|
134
|
+
* Exact public names of every `ForCheckbox` output, the Signal Forms `touch` output
|
|
135
|
+
* included. Spread it into the `outputs` array of the same `hostDirectives` entry as
|
|
136
|
+
* {@link FOR_CHECKBOX_HOST_DIRECTIVE_INPUTS}.
|
|
137
|
+
*/
|
|
138
|
+
declare const FOR_CHECKBOX_HOST_DIRECTIVE_OUTPUTS: readonly ["checkedChange", "indeterminateChange", "touchedChange", "touch"];
|
|
139
|
+
|
|
140
|
+
export { FOR_CHECKBOX, FOR_CHECKBOX_DEFAULTS, FOR_CHECKBOX_HOST_DIRECTIVE_INPUTS, FOR_CHECKBOX_HOST_DIRECTIVE_OUTPUTS, ForCheckbox, ForCheckboxIndicator, provideForCheckboxDefaults };
|
|
141
|
+
export type { ForCheckboxDefaults };
|