forty-cdk 0.30.0 → 0.31.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/combobox/README.md +3 -2
- package/dialog/README.md +2 -2
- package/drag-drop/README.md +6 -1
- package/drawer/README.md +1 -1
- package/fesm2022/forty-cdk-carousel.mjs +4 -10
- package/fesm2022/forty-cdk-carousel.mjs.map +1 -1
- package/fesm2022/forty-cdk-combobox.mjs +27 -26
- package/fesm2022/forty-cdk-combobox.mjs.map +1 -1
- package/fesm2022/forty-cdk-core-overlay.mjs +70 -4
- package/fesm2022/forty-cdk-core-overlay.mjs.map +1 -1
- package/fesm2022/forty-cdk-core.mjs +565 -227
- package/fesm2022/forty-cdk-core.mjs.map +1 -1
- package/fesm2022/forty-cdk-defaults.mjs +1 -1
- package/fesm2022/forty-cdk-defaults.mjs.map +1 -1
- package/fesm2022/forty-cdk-dialog.mjs +12 -18
- package/fesm2022/forty-cdk-dialog.mjs.map +1 -1
- package/fesm2022/forty-cdk-drag-drop.mjs +131 -64
- package/fesm2022/forty-cdk-drag-drop.mjs.map +1 -1
- package/fesm2022/forty-cdk-drawer.mjs +12 -20
- package/fesm2022/forty-cdk-drawer.mjs.map +1 -1
- package/fesm2022/forty-cdk-field.mjs +3 -8
- package/fesm2022/forty-cdk-field.mjs.map +1 -1
- package/fesm2022/forty-cdk-listbox.mjs +88 -28
- package/fesm2022/forty-cdk-listbox.mjs.map +1 -1
- package/fesm2022/forty-cdk-menu.mjs +2 -6
- package/fesm2022/forty-cdk-menu.mjs.map +1 -1
- package/fesm2022/forty-cdk-menubar.mjs +19 -11
- package/fesm2022/forty-cdk-menubar.mjs.map +1 -1
- package/fesm2022/forty-cdk-navigation-menu.mjs +2 -2
- package/fesm2022/forty-cdk-navigation-menu.mjs.map +1 -1
- package/fesm2022/forty-cdk-radio-group.mjs +4 -10
- package/fesm2022/forty-cdk-radio-group.mjs.map +1 -1
- package/fesm2022/forty-cdk-search.mjs +2 -2
- package/fesm2022/forty-cdk-search.mjs.map +1 -1
- package/fesm2022/forty-cdk-select.mjs +63 -22
- package/fesm2022/forty-cdk-select.mjs.map +1 -1
- package/fesm2022/forty-cdk-stepper.mjs +4 -10
- package/fesm2022/forty-cdk-stepper.mjs.map +1 -1
- package/fesm2022/forty-cdk-table.mjs +123 -55
- package/fesm2022/forty-cdk-table.mjs.map +1 -1
- package/fesm2022/forty-cdk-tabs.mjs +4 -7
- package/fesm2022/forty-cdk-tabs.mjs.map +1 -1
- package/fesm2022/forty-cdk-testing.mjs +2 -0
- package/fesm2022/forty-cdk-testing.mjs.map +1 -1
- package/fesm2022/forty-cdk-time-picker.mjs +13 -2
- package/fesm2022/forty-cdk-time-picker.mjs.map +1 -1
- package/fesm2022/forty-cdk-toast.mjs +2 -2
- package/fesm2022/forty-cdk-toast.mjs.map +1 -1
- package/fesm2022/forty-cdk-toggle.mjs +6 -11
- package/fesm2022/forty-cdk-toggle.mjs.map +1 -1
- package/fesm2022/forty-cdk-toolbar.mjs +7 -19
- package/fesm2022/forty-cdk-toolbar.mjs.map +1 -1
- package/fesm2022/forty-cdk-tree.mjs +106 -74
- package/fesm2022/forty-cdk-tree.mjs.map +1 -1
- package/fesm2022/forty-cdk-virtual-reorder.mjs +136 -43
- package/fesm2022/forty-cdk-virtual-reorder.mjs.map +1 -1
- package/listbox/README.md +19 -19
- package/package.json +1 -1
- package/select/README.md +5 -4
- package/table/README.md +21 -8
- package/time-picker/README.md +1 -0
- package/toolbar/README.md +1 -1
- package/tree/README.md +12 -11
- package/types/forty-cdk-combobox.d.ts +26 -17
- package/types/forty-cdk-core-overlay.d.ts +75 -11
- package/types/forty-cdk-core.d.ts +251 -51
- package/types/forty-cdk-defaults.d.ts +9 -9
- package/types/forty-cdk-dialog.d.ts +10 -7
- package/types/forty-cdk-drag-drop.d.ts +65 -17
- package/types/forty-cdk-drawer.d.ts +10 -7
- package/types/forty-cdk-field.d.ts +0 -1
- package/types/forty-cdk-listbox.d.ts +12 -5
- package/types/forty-cdk-menubar.d.ts +3 -3
- package/types/forty-cdk-select.d.ts +19 -10
- package/types/forty-cdk-table.d.ts +45 -3
- package/types/forty-cdk-time-picker.d.ts +9 -1
- package/types/forty-cdk-tree.d.ts +19 -7
- package/types/forty-cdk-virtual-reorder.d.ts +22 -4
- package/virtual-reorder/README.md +13 -10
package/combobox/README.md
CHANGED
|
@@ -220,7 +220,7 @@ Input tables are not yet tabulated for this primitive. See the feature sections
|
|
|
220
220
|
| `[forComboboxChip]` | `data-disabled` | present / absent |
|
|
221
221
|
| `[forComboboxSeparator]` | `data-orientation` | `horizontal` \| `vertical` |
|
|
222
222
|
|
|
223
|
-
Focus stays on the `<input>` the whole time the listbox is open, so options never get `:focus`. `data-highlighted` is the canonical hook for styling the keyboard-active option.
|
|
223
|
+
Focus stays on the `<input>` the whole time the listbox is open, so options never get `:focus`. `data-highlighted` is the canonical hook for styling the keyboard-active option. A mouse press anywhere on the popup that lands on no focusable element (padding, a group label, an empty or status row) does not move focus either, so typing and the arrow keys keep working after it; the trade-off is that popup text cannot be selected with the mouse, as in a native combobox. A press on a focusable element inside the popup, such as a `[forComboboxAction]` or your own `<button>`, still focuses it.
|
|
224
224
|
|
|
225
225
|
## Mount/visibility convention
|
|
226
226
|
|
|
@@ -718,7 +718,7 @@ When `[totalCount]` is omitted, the directive falls back to `options().length` a
|
|
|
718
718
|
`[forCombobox]` exposes a `dir: 'ltr' | 'rtl'` input (default `'ltr'`). It drives:
|
|
719
719
|
|
|
720
720
|
- **Chip keyboard navigation**: ArrowLeft / ArrowRight roles swap so they follow the visual order of the chip cluster, not the DOM order. See _Chip keyboard_ above.
|
|
721
|
-
- **Default popover placement**: `align` defaults to `'start'`
|
|
721
|
+
- **Default popover placement**: `align` defaults to `'start'` and `side` to `'bottom'`. `start` and `end` resolve against the writing direction, so the default anchors the listbox to the visually-leading edge of the input in both LTR and RTL, and a consumer-provided `[align]` follows the direction the same way. `provideForComboboxDefaults({ align, side })` sets either for a whole scope.
|
|
722
722
|
|
|
723
723
|
The native `<input>` handles caret movement and BiDi from the document's CSS `direction` already, so there's nothing extra to do for the typed text itself.
|
|
724
724
|
|
|
@@ -804,6 +804,7 @@ Implements the [WAI-ARIA Combobox pattern](https://www.w3.org/WAI/ARIA/apg/patte
|
|
|
804
804
|
- `role="listbox"` lives on `[forComboboxContent]` in the editable anatomy and on `[forComboboxList]` in the picker anatomy; the input's `aria-controls` targets whichever carries it. In the picker anatomy the popup surface (`[forComboboxContent]`) is role-less so it can hold the input next to the list without an `aria-required-owned-elements` violation.
|
|
805
805
|
- `aria-multiselectable="true"` (multi mode) and the labelled role (`aria-label` / `aria-labelledby`, pointing at the input) sit on whichever element carries `role="listbox"`: content in the editable anatomy, the list in the picker anatomy.
|
|
806
806
|
- `[forComboboxTrigger]` (picker anatomy) is a real `<button>` reflecting `aria-haspopup="listbox"`, `aria-expanded`, `aria-controls` (the popup surface, while open), and native `disabled` from the combobox's effective disabled. It is exempt from the popup's outside-pointer dismissal layer, like the input.
|
|
807
|
+
- `[forComboboxContent]` and `[forComboboxList]` cancel a `mousedown` that would otherwise move focus onto the surface or blur the input, so a press between options leaves focus in the input. A press on a focusable descendant is let through.
|
|
807
808
|
- `[forComboboxToggle]` (editable anatomy) is a real `<button>` with `tabindex="-1"`, a localizable `aria-label`, `aria-expanded`, `aria-controls` (the listbox, while open) and native `disabled`. It cancels `mousedown` so focus stays in the input, and it is exempt from the outside-pointer dismissal layer.
|
|
808
809
|
- In single mode, `aria-selected="true"` follows the activedescendant (the option Enter would activate). In multi mode it follows membership in `value()`, so every selected option carries `aria-selected="true"` simultaneously.
|
|
809
810
|
- `data-state="checked" | "unchecked"` always reflects membership in `value()`, so consumers can paint a checkmark icon with pure CSS regardless of mode.
|
package/dialog/README.md
CHANGED
|
@@ -334,9 +334,9 @@ The four dismiss callbacks mirror the declarative `(escapeKeyDown)` / `(pointerD
|
|
|
334
334
|
|
|
335
335
|
## Keyboard
|
|
336
336
|
|
|
337
|
-
- **Escape** requests close (reason `'escape'`) when `dismissible`.
|
|
337
|
+
- **Escape** requests close (reason `'escape'`) when `dismissible`. An Escape that cancels an IME composition is left to the IME.
|
|
338
338
|
- **Tab / Shift+Tab** cycles focus inside the dialog (focus trap, only when `modal`).
|
|
339
|
-
- **Click** on `[forDialogBackdrop]` requests close (reason `'backdrop'`) when `dismissible
|
|
339
|
+
- **Click** on `[forDialogBackdrop]` requests close (reason `'backdrop'`) when `dismissible` and the dialog was the topmost layer as the press began. A press that closes a stacked dialog or a popover open above it leaves this dialog open.
|
|
340
340
|
|
|
341
341
|
## Accessibility
|
|
342
342
|
|
package/drag-drop/README.md
CHANGED
|
@@ -149,7 +149,7 @@ than starting through `[forDraggable]` itself: the keyboard lift of `[forVirtual
|
|
|
149
149
|
the virtualized branch of `[forTableRowReorder]`. Those intercept the lift key before the item
|
|
150
150
|
sees it, so the list carries no lift state for the gesture, and the coordinator marks the item
|
|
151
151
|
instead. Styling keyed off either attribute therefore behaves the same whether the collection is
|
|
152
|
-
windowed or not.
|
|
152
|
+
windowed or not, and the item's `(dragStart)` / `(dragEnd)` fire for those gestures too.
|
|
153
153
|
|
|
154
154
|
The `data-for-drag-preview` row is also the supported hook for **keeping the clone out of element
|
|
155
155
|
queries**. The default preview is a `cloneNode(true)` copy appended to `document.body`, so for the
|
|
@@ -515,6 +515,11 @@ additionally engages **windowed scrub**: the scroll viewport maps onto the whole
|
|
|
515
515
|
dataset (top edge → first item, bottom edge → last), so one gesture drops the
|
|
516
516
|
lifted row at an arbitrary far item without auto-scroll having to reach it.
|
|
517
517
|
|
|
518
|
+
Every lift, move and drop announcement of either companion, pointer or keyboard,
|
|
519
|
+
counts dataset positions against the dataset size. Both keep their list **closed**
|
|
520
|
+
to transfers: inside a `[forDropListGroup]` it joins nothing and connects to no
|
|
521
|
+
other list, because their reorder output describes a move within one dataset.
|
|
522
|
+
|
|
518
523
|
```html
|
|
519
524
|
<div
|
|
520
525
|
forVirtualViewport
|
package/drawer/README.md
CHANGED
|
@@ -725,7 +725,7 @@ Implements the [WAI-ARIA Modal Dialog pattern](https://www.w3.org/WAI/ARIA/apg/p
|
|
|
725
725
|
|
|
726
726
|
A drawer that mounts with neither a `[forDrawerTitle]` nor an `ariaLabel` logs a dev-mode warning (`FORCDK-CORE-011`) after its first render. To land focus somewhere other than the first focusable element on open, such as the least destructive action or a static heading carrying `tabindex="-1"`, mark it with [`[forDrawerInitialFocus]`](#fordrawerinitialfocus).
|
|
727
727
|
|
|
728
|
-
Keyboard: **Escape** closes the topmost drawer when `dismissible
|
|
728
|
+
Keyboard: **Escape** closes the topmost drawer when `dismissible`, unless it cancels an IME composition; **Tab / Shift+Tab** cycles focus inside the drawer when `modal`; **Click** on `[forDrawerBackdrop]` closes when `dismissible` and the drawer was the topmost layer as the press began, so a press on a parent's backdrop closes only the child drawer above it.
|
|
729
729
|
|
|
730
730
|
## Styling
|
|
731
731
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
2
|
import { InjectionToken, inject, model, input, booleanAttribute, numberAttribute, computed, DestroyRef, PLATFORM_ID, ElementRef, signal, effect, untracked, isDevMode, Directive } from '@angular/core';
|
|
3
3
|
import { isPlatformBrowser } from '@angular/common';
|
|
4
|
-
import { orphanContextError, assertRootContext, hostAriaLabel, resolveText, injectTextDirection, RovingTabindex, injectPrefersReducedMotion, injectPauseController, Collection, createSingleSlot, injectElementSize, firstEnabledHost, fortyWarn, moveIndex, hostId, registerHandle, hostButtonType, rovingTabStop,
|
|
4
|
+
import { orphanContextError, assertRootContext, hostAriaLabel, resolveText, injectTextDirection, RovingTabindex, injectPrefersReducedMotion, injectPauseController, Collection, createSingleSlot, injectElementSize, firstEnabledHost, fortyWarn, moveIndex, hostId, registerHandle, hostButtonType, rovingTabStop, navigateFromRovingItem, resolveTextInput, attachSwipeDismiss, isScrollableAtEdge, FLICK_STALE_VELOCITY_MS, flickVelocity, FLICK_VELOCITY_PX_PER_MS } from 'forty-cdk/core';
|
|
5
5
|
import { FOR_CAROUSEL_DEFAULTS } from 'forty-cdk/defaults';
|
|
6
6
|
export { FOR_CAROUSEL_DEFAULTS, provideForCarouselDefaults } from 'forty-cdk/defaults';
|
|
7
7
|
|
|
@@ -771,18 +771,12 @@ class ForCarouselIndicator {
|
|
|
771
771
|
this.ctx.roving.setActive(this.#host.nativeElement);
|
|
772
772
|
}
|
|
773
773
|
onKeyDown(event) {
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
}
|
|
777
|
-
const action = resolveListNavigation(event, {
|
|
774
|
+
navigateFromRovingItem(event, {
|
|
775
|
+
groupDisabled: false,
|
|
778
776
|
orientation: this.ctx.orientation(),
|
|
779
777
|
dir: this.ctx.dir(),
|
|
778
|
+
navigate: (action) => this.ctx.navigate(this.#host.nativeElement, action),
|
|
780
779
|
});
|
|
781
|
-
if (!action) {
|
|
782
|
-
return;
|
|
783
|
-
}
|
|
784
|
-
event.preventDefault();
|
|
785
|
-
this.ctx.navigate(this.#host.nativeElement, action);
|
|
786
780
|
}
|
|
787
781
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: ForCarouselIndicator, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
788
782
|
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.2", type: ForCarouselIndicator, isStandalone: true, selector: "[forCarouselIndicator]", inputs: { ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "click": "onClick()", "focus": "onFocus()", "keydown": "onKeyDown($event)" }, properties: { "attr.type": "buttonType()", "attr.aria-label": "ariaLabel() || positionLabel()", "attr.aria-current": "current() ? \"true\" : null", "attr.data-state": "current() ? \"active\" : \"inactive\"", "attr.data-disabled": "disabled() ? \"\" : null", "attr.aria-disabled": "disabled() ? \"true\" : null", "attr.tabindex": "tabindex()" } }, exportAs: ["forCarouselIndicator"], ngImport: i0 });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"forty-cdk-carousel.mjs","sources":["../../../projects/forty-cdk/carousel/src/carousel-context.ts","../../../projects/forty-cdk/carousel/src/carousel.ts","../../../projects/forty-cdk/carousel/src/carousel-viewport.ts","../../../projects/forty-cdk/carousel/src/carousel-track.ts","../../../projects/forty-cdk/carousel/src/carousel-slide.ts","../../../projects/forty-cdk/carousel/src/carousel-previous.ts","../../../projects/forty-cdk/carousel/src/carousel-next.ts","../../../projects/forty-cdk/carousel/src/carousel-indicators.ts","../../../projects/forty-cdk/carousel/src/carousel-indicator.ts","../../../projects/forty-cdk/carousel/src/carousel-rotation-control.ts","../../../projects/forty-cdk/carousel/src/carousel-drag.ts","../../../projects/forty-cdk/carousel/src/forty-cdk-carousel.ts"],"sourcesContent":["import { inject, InjectionToken, type Signal } from '@angular/core';\n\nimport {\n assertRootContext,\n type ListNavigationAction,\n orphanContextError,\n type RovingTabindex,\n type WritingDirection,\n} from 'forty-cdk/core';\nimport { type CarouselAlign } from 'forty-cdk/defaults';\n\nexport { type CarouselAlign };\n\n/**\n * Internal handle for a registered slide. Part of the registration protocol, so\n * it is never exported from `public-api.ts` — see {@link CarouselContext}.\n */\nexport interface ForCarouselSlideHandle {\n readonly host: HTMLElement;\n}\n\n/**\n * Internal handle for a registered indicator (dot). Part of the registration\n * protocol, so it is never exported from `public-api.ts` — see\n * {@link CarouselContext}.\n */\nexport interface ForCarouselIndicatorHandle {\n readonly host: HTMLElement;\n readonly disabled: Signal<boolean>;\n}\n\n/**\n * Internal handle for the registered viewport. Part of the registration\n * protocol, so it is never exported from `public-api.ts` — see\n * {@link CarouselContext}.\n */\nexport interface ForCarouselViewportHandle {\n readonly host: HTMLElement;\n readonly id: string;\n}\n\n/**\n * Coordination contract owned by `ForCarousel`. Slides and indicators\n * register with the root so index lookups, geometry computations, and\n * keyboard navigation are all driven from a single source of truth.\n */\nexport interface ForCarouselContext {\n readonly activeIndex: Signal<number>;\n readonly orientation: Signal<'horizontal' | 'vertical'>;\n readonly dir: Signal<WritingDirection>;\n readonly loop: Signal<boolean>;\n readonly align: Signal<CarouselAlign>;\n readonly slidesPerView: Signal<number>;\n readonly slideCount: Signal<number>;\n\n /** Whether auto-rotation is currently \"on\" (user intent). Drives the rotation control's label. */\n readonly playing: Signal<boolean>;\n /** Whether the carousel is actively auto-rotating right now (`playing && !paused`). Drives the viewport's `aria-live`. */\n readonly rotating: Signal<boolean>;\n\n canScrollPrev(): boolean;\n canScrollNext(): boolean;\n scrollPrev(): void;\n scrollNext(): void;\n scrollTo(index: number): void;\n\n /** Toggle auto-rotation on/off (the explicit, sticky user choice). Called by the rotation control. */\n toggleAutoplay(): void;\n\n isCurrent(index: number): boolean;\n isFirstEnabledIndicator(el: HTMLElement): boolean;\n hasCurrentIndicator(): boolean;\n}\n\n/**\n * The carousel's piece-coordination surface: the roving tracker the indicators\n * share, the DOM-order index lookups, the viewport id the rotation control\n * points `aria-controls` at, and the localizable positional labels.\n *\n * **Not** part of {@link ForCarouselContext} and never exported\n * from `public-api.ts` — a consumer drives the carousel through `scrollTo` /\n * `scrollNext`, never through the indicators' shared tab stop.\n */\nexport interface CarouselPieceContext {\n readonly roving: RovingTabindex;\n\n navigate(currentIndicator: HTMLElement, action: ListNavigationAction): void;\n\n viewportId(): string | null;\n\n indexOfSlide(host: HTMLElement): number;\n indexOfIndicator(host: HTMLElement): number;\n\n /** Resolve the positional slide `aria-label` (`\"N of M\"` by default). `position` is 1-based. */\n slideLabel(position: number): string;\n /** Resolve the indicator `aria-label` (`\"Go to slide N\"` by default). `position` is 1-based. */\n indicatorLabel(position: number): string;\n slideRoleDescription(): string | null;\n\n isInView(index: number): boolean;\n}\n\n/**\n * DI token providing the carousel context to descendant pieces.\n *\n * Publicly typed as the read surface {@link ForCarouselContext}, which is the whole of\n * what the token promises a consumer. The pieces read the same token at an internal type\n * that adds the slide / indicator / viewport registration protocol, so a wrapper\n * re-providing it must alias it to the root: `{ provide: FOR_CAROUSEL_CONTEXT,\n * useExisting: MyCarousel }`, where `MyCarousel` extends `ForCarousel`. A value that\n * merely satisfies the declared type resolves too, and is rejected in dev mode by the\n * first piece to reach the protocol.\n */\nexport const FOR_CAROUSEL_CONTEXT = new InjectionToken<ForCarouselContext>('FOR_CAROUSEL_CONTEXT');\n\n/**\n * The carousel's internal coordination surface: everything\n * {@link ForCarouselContext} publishes plus the {@link CarouselPieceContext}\n * members and the slide / indicator / viewport registration protocol the index\n * lookups, geometry observer and roving tabindex are driven from.\n *\n * Never exported from `public-api.ts`. It is the type the pieces read\n * {@link FOR_CAROUSEL_CONTEXT} at, so a consumer who injects that token gets the\n * read surface while the pieces get the wiring protocol. `ForCarousel` declares\n * the protocol members TS-`private`, which keeps them out of the emitted\n * `.d.ts` while `useExisting` still satisfies this contract at runtime.\n */\nexport interface CarouselContext extends ForCarouselContext, CarouselPieceContext {\n registerSlide(handle: ForCarouselSlideHandle): void;\n unregisterSlide(handle: ForCarouselSlideHandle): void;\n registerIndicator(handle: ForCarouselIndicatorHandle): void;\n unregisterIndicator(handle: ForCarouselIndicatorHandle): void;\n registerViewport(handle: ForCarouselViewportHandle): void;\n unregisterViewport(handle: ForCarouselViewportHandle): void;\n}\n\nexport function injectCarouselContext(piece: string): CarouselContext {\n const ctx = inject(FOR_CAROUSEL_CONTEXT, { optional: true }) as CarouselContext | null;\n if (!ctx) {\n throw orphanContextError({\n code: 'FORCDK-CAROUSEL-001',\n piece,\n root: '[forCarousel]',\n token: 'FOR_CAROUSEL_CONTEXT',\n });\n }\n assertRootContext({\n entryPoint: 'carousel',\n token: 'FOR_CAROUSEL_CONTEXT',\n root: '[forCarousel]',\n piece,\n probe: () => ctx.registerSlide,\n });\n return ctx;\n}\n","import {\n booleanAttribute,\n computed,\n DestroyRef,\n Directive,\n effect,\n ElementRef,\n inject,\n input,\n isDevMode,\n model,\n numberAttribute,\n PLATFORM_ID,\n signal,\n untracked,\n} from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\n\nimport {\n Collection,\n createSingleSlot,\n firstEnabledHost,\n fortyWarn,\n hostAriaLabel,\n injectElementSize,\n injectPauseController,\n injectPrefersReducedMotion,\n injectTextDirection,\n type ListNavigationAction,\n moveIndex,\n type PauseController,\n resolveText,\n RovingTabindex,\n type WritingDirection,\n} from 'forty-cdk/core';\nimport {\n type CarouselAlign,\n FOR_CAROUSEL_CONTEXT,\n type ForCarouselContext,\n type ForCarouselIndicatorHandle,\n type ForCarouselSlideHandle,\n type ForCarouselViewportHandle,\n} from './carousel-context';\nimport { FOR_CAROUSEL_DEFAULTS } from 'forty-cdk/defaults';\n\n/**\n * Root of the Carousel primitive. Owns the active index, slide collection,\n * indicator collection, roving tabindex tracker, and computed geometry CSS\n * variables. Provides the shared context to descendant pieces.\n *\n * Implements the [WAI-ARIA APG Carousel pattern](https://www.w3.org/WAI/ARIA/apg/patterns/carousel/).\n *\n * With no `[forCarouselIndicators]` rendered this is a basic carousel driven\n * by prev/next buttons only. Adding an indicator group enables APG picker\n * semantics: roving tabindex, arrow/Home/End navigation with automatic\n * activation.\n */\n@Directive({\n selector: '[forCarousel]',\n exportAs: 'forCarousel',\n host: {\n role: 'group',\n '[attr.aria-roledescription]': 'roleDescription()',\n '[attr.aria-label]': 'resolvedAriaLabel()',\n '[attr.data-orientation]': 'orientation()',\n '[attr.data-align]': 'align()',\n '[attr.dir]': 'dir()',\n '[style.--for-carousel-offset]': 'offset()',\n '[style.--for-carousel-active-index]': 'activeIndex()',\n '[style.--for-carousel-slide-count]': 'slideCount()',\n '[style.--for-carousel-slides-per-view]': 'slidesPerView()',\n '[style.--for-carousel-viewport-width]': 'viewportWidth()',\n '[style.--for-carousel-viewport-height]': 'viewportHeight()',\n '[attr.data-autoplay]': 'autoplay() ? \"\" : null',\n '[attr.data-rotating]': 'rotating() ? \"\" : null',\n '(pointerenter)': 'onAutoplayPause(\"hover\")',\n '(pointerleave)': 'onAutoplayResume(\"hover\")',\n '(focusin)': 'onAutoplayPause(\"focus\")',\n '(focusout)': 'onAutoplayFocusOut($event)',\n },\n providers: [{ provide: FOR_CAROUSEL_CONTEXT, useExisting: ForCarousel }],\n})\nexport class ForCarousel implements ForCarouselContext {\n readonly #defaults = inject(FOR_CAROUSEL_DEFAULTS);\n\n /**\n * Two-way bindable. The zero-based index of the current (leading) slide.\n * The `model()` change emitter (`(activeIndexChange)`) fires only on internal\n * navigation (prev/next button clicks, indicator arrow-key or click), never\n * on consumer writes via `[(activeIndex)]`.\n */\n readonly activeIndex = model<number>(0);\n\n /** Scroll axis. `'horizontal'` (default) or `'vertical'`. */\n readonly orientation = input<'horizontal' | 'vertical'>('horizontal');\n\n /**\n * Whether index wrap-around is enabled. When `true`, `next` past the last\n * slide wraps to index 0; `prev` before index 0 wraps to the last. Default\n * comes from `provideForCarouselDefaults` or the library fallback (`false`).\n */\n readonly loop = input(this.#defaults.loop, { transform: booleanAttribute });\n\n /**\n * Alignment of the active slide within the viewport. Affects the\n * `--for-carousel-offset` computation. Default from `provideForCarouselDefaults`\n * or `'start'`.\n */\n readonly align = input<CarouselAlign>(this.#defaults.align);\n\n /**\n * Number of slides simultaneously visible in the viewport. Slide width\n * should be set to `calc(100% / var(--for-carousel-slides-per-view))` in\n * the consumer's CSS. Default from `provideForCarouselDefaults` or `1`.\n */\n readonly slidesPerView = input(this.#defaults.slidesPerView, { transform: numberAttribute });\n\n /**\n * When `true` and the carousel is not looping, clamps `--for-carousel-offset` so the\n * trailing slides align flush to the viewport's trailing edge instead of overscrolling\n * into empty space (relevant when `slidesPerView > 1`). The one-indicator-per-slide\n * mapping is preserved — `activeIndex` still reaches the last slide; only the visual\n * offset is contained. No effect when `loop` is enabled or `slidesPerView` is 1.\n * Default from `provideForCarouselDefaults` or `false`.\n */\n readonly containScroll = input(this.#defaults.containScroll, { transform: booleanAttribute });\n\n /**\n * Accessible label for the carousel root (`role=\"group\"`). Should describe\n * the carousel's purpose without using the word \"carousel\" (APG guidance).\n * When null (default), no `aria-label` is emitted; use `aria-labelledby`\n * instead when a visible heading labels the carousel.\n */\n readonly ariaLabel = input<string | null>(null);\n\n protected readonly resolvedAriaLabel = hostAriaLabel(() => this.ariaLabel() || null);\n\n protected readonly roleDescription = computed(\n () => resolveText(this.#defaults.roleDescription) || null,\n );\n\n /**\n * Whether the carousel auto-rotates. When `true` and the user has not\n * explicitly stopped it, rotation starts on mount — *unless*\n * `prefers-reduced-motion: reduce` is set, which suppresses auto-start\n * (the user can still start it via the rotation control). Default from\n * `provideForCarouselDefaults` or `false`.\n *\n * APG requires a `[forCarouselRotationControl]` to be present whenever\n * autoplay is enabled. The directive does not enforce this — see the README.\n */\n readonly autoplay = input(this.#defaults.autoplay, { transform: booleanAttribute });\n\n /**\n * Milliseconds between automatic slide advances while rotating. Values\n * `<= 0` disable the timer. Default from `provideForCarouselDefaults` or `5000`.\n */\n readonly autoplayInterval = input(this.#defaults.autoplayInterval, {\n transform: numberAttribute,\n });\n\n /**\n * Writing direction. When unset (default `null`), the inherited ambient\n * direction is resolved from the nearest ancestor carrying a `dir` attribute\n * (or `<html dir>`), defaulting to `'ltr'`. An explicit `[dir]` always wins.\n * The resolved value is reflected to the host `dir` attribute and swaps\n * ArrowLeft / ArrowRight semantics on the indicator group in RTL.\n */\n readonly _dirInput = input<WritingDirection | null>(null, { alias: 'dir' });\n readonly dir = injectTextDirection(this._dirInput);\n\n /** Roving tabindex tracker for the indicator group. */\n private readonly roving = new RovingTabindex(() => this.#indicators.items());\n\n readonly #destroyRef = inject(DestroyRef);\n readonly #isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n readonly #element = inject<ElementRef<HTMLElement>>(ElementRef);\n readonly #prefersReducedMotion = injectPrefersReducedMotion();\n\n readonly #userPlaying = signal<boolean | null>(null);\n\n /** Whether auto-rotation is \"on\" (user intent). Sticky once the user decides. */\n readonly playing = computed(\n () => this.#userPlaying() ?? (this.autoplay() && !this.#prefersReducedMotion()),\n );\n\n readonly #pause: PauseController<'hover' | 'focus' | 'visibility'> = injectPauseController();\n\n /** Whether the carousel is actively auto-rotating right now. */\n readonly rotating = computed(() => this.playing() && !this.#pause.paused());\n\n #timerHandle: ReturnType<typeof setInterval> | null = null;\n\n readonly #slides = new Collection<ForCarouselSlideHandle>();\n readonly #indicators = new Collection<ForCarouselIndicatorHandle>();\n\n readonly #viewport = createSingleSlot<ForCarouselViewportHandle>({\n primitive: 'carousel',\n owner: '[forCarousel]',\n claimant: '[forCarouselViewport]',\n });\n readonly #viewportEl = computed(() => this.#viewport.value()?.host ?? null);\n readonly #viewportBox = injectElementSize(this.#viewportEl);\n\n /** Total number of registered slides. Reactive. */\n readonly slideCount = computed(() => this.#slides.items().length);\n\n readonly #firstEnabledIndicatorHost = computed(() => firstEnabledHost(this.#indicators.items()));\n\n /**\n * The `--for-carousel-offset` value to apply via `transform` on the track.\n * Pure arithmetic — no layout measurement — so it is safe in Vitest.\n */\n readonly offset = computed(() => {\n const perView = Math.max(1, this.slidesPerView());\n const slideSizePct = 100 / perView;\n const base = -(this.activeIndex() * slideSizePct);\n const align = this.align();\n const adjust =\n align === 'center' ? (100 - slideSizePct) / 2 : align === 'end' ? 100 - slideSizePct : 0;\n const raw = base + adjust;\n if (this.containScroll() && !this.loop()) {\n const minOffset = -(Math.max(0, this.slideCount() - perView) * slideSizePct);\n return `${Math.min(0, Math.max(minOffset, raw))}%`;\n }\n return `${raw}%`;\n });\n\n /** The measured viewport width, or `null` before first measurement / on the server. */\n readonly viewportWidth = computed(() => {\n const box = this.#viewportBox();\n return box ? `${box.width}px` : null;\n });\n\n /** The measured viewport height, or `null` before first measurement / on the server. */\n readonly viewportHeight = computed(() => {\n const box = this.#viewportBox();\n return box ? `${box.height}px` : null;\n });\n\n constructor() {\n effect(() => {\n const rotating = this.rotating();\n const interval = this.autoplayInterval();\n untracked(() => this.#syncTimer(rotating, interval));\n });\n this.#destroyRef.onDestroy(() => this.#clearTimer());\n\n if (isDevMode()) {\n let warned = false;\n effect(() => {\n const slides = this.slideCount();\n const indicators = this.#indicators.items().length;\n if (indicators === 0 || indicators === slides) {\n warned = false;\n } else if (!warned) {\n warned = true;\n fortyWarn({\n code: 'FORCDK-CAROUSEL-002',\n message: `${indicators} [forCarouselIndicator] element(s) are registered for ${slides} slide(s).`,\n cause:\n 'The picker targets slide i from the indicator at DOM index i, so a mismatched count ' +\n 'desynchronizes the active-indicator state.',\n fix: 'Render exactly one [forCarouselIndicator] per [forCarouselSlide].',\n });\n }\n });\n }\n }\n\n /** Returns `true` when scrolling backward is possible given the current loop/index state. */\n canScrollPrev(): boolean {\n return moveIndex(this.activeIndex(), this.slideCount(), 'prev', { loop: this.loop() }) !== null;\n }\n\n /** Returns `true` when scrolling forward is possible given the current loop/index state. */\n canScrollNext(): boolean {\n return moveIndex(this.activeIndex(), this.slideCount(), 'next', { loop: this.loop() }) !== null;\n }\n\n /** Navigate to the previous slide. No-op at index 0 when not looping. */\n scrollPrev(): void {\n this.#move('prev');\n }\n\n /** Navigate to the next slide. No-op at the last index when not looping. */\n scrollNext(): void {\n this.#move('next');\n }\n\n /**\n * Navigate to the slide at `index`. Clamps to `[0, slideCount-1]` when not\n * looping; wraps modulo `slideCount` when looping.\n */\n scrollTo(index: number): void {\n const count = this.slideCount();\n if (count === 0) {\n return;\n }\n const target = this.loop()\n ? ((index % count) + count) % count\n : Math.max(0, Math.min(index, count - 1));\n this.activeIndex.set(target);\n }\n\n /**\n * Move focus from `currentIndicator` according to `action` and activate the\n * target slide (automatic activation). Used by `ForCarouselIndicator`'s\n * keydown handler.\n */\n private navigate(currentIndicator: HTMLElement, action: ListNavigationAction): void {\n const indicators = this.#indicators.items();\n if (indicators.length === 0) {\n return;\n }\n const currentIndex = indicators.findIndex((i) => i.host === currentIndicator);\n const next = moveIndex(currentIndex < 0 ? 0 : currentIndex, indicators.length, action, {\n loop: this.loop(),\n isDisabled: (i) => indicators[i]!.disabled(),\n });\n if (next === null) {\n return;\n }\n indicators[next]!.host.focus();\n this.scrollTo(next);\n }\n\n private registerSlide(handle: ForCarouselSlideHandle): void {\n this.#slides.register(handle);\n }\n\n private unregisterSlide(handle: ForCarouselSlideHandle): void {\n this.#slides.unregister(handle);\n }\n\n private registerIndicator(handle: ForCarouselIndicatorHandle): void {\n this.#indicators.register(handle);\n }\n\n private unregisterIndicator(handle: ForCarouselIndicatorHandle): void {\n this.#indicators.unregister(handle);\n this.roving.unregister(handle.host);\n }\n\n /** Called by `ForCarouselViewport` at construction to wire the geometry observer. */\n private registerViewport(handle: ForCarouselViewportHandle): void {\n this.#viewport.register(handle);\n }\n\n /**\n * Called by `ForCarouselViewport` on destroy so an unmounted viewport stops\n * being observed and prev / next drop their stale `aria-controls`.\n */\n private unregisterViewport(handle: ForCarouselViewportHandle): void {\n this.#viewport.unregister(handle);\n }\n\n /** The id of the registered viewport element, or `null` if none is mounted. */\n private viewportId(): string | null {\n return this.#viewport.value()?.id ?? null;\n }\n\n /** DOM-order index of the registered slide whose host equals `host`, or -1. */\n private indexOfSlide(host: HTMLElement): number {\n return this.#slides.indexOfHost(host);\n }\n\n /** DOM-order index of the registered indicator whose host equals `host`, or -1. */\n private indexOfIndicator(host: HTMLElement): number {\n return this.#indicators.indexOfHost(host);\n }\n\n /**\n * Resolve the positional slide `aria-label` from the scope's defaults\n * (`\"N of M\"` unless localized via `provideForCarouselDefaults`).\n * `position` is the 1-based slide index.\n */\n private slideLabel(position: number): string {\n return this.#defaults.slideLabel(position, this.slideCount());\n }\n\n /**\n * Resolve the indicator `aria-label` from the scope's defaults\n * (`\"Go to slide N\"` unless localized via `provideForCarouselDefaults`).\n * `position` is the 1-based slide index.\n */\n private indicatorLabel(position: number): string {\n return this.#defaults.indicatorLabel(position);\n }\n\n private slideRoleDescription(): string | null {\n return resolveText(this.#defaults.slideRoleDescription) || null;\n }\n\n /** Returns `true` when `index` is the current active slide index. */\n isCurrent(index: number): boolean {\n return index === this.activeIndex();\n }\n\n /**\n * Returns `true` when `index` falls within the visible window\n * `[activeIndex, activeIndex + slidesPerView - 1]`.\n */\n private isInView(index: number): boolean {\n const start = this.activeIndex();\n return index >= start && index < start + Math.max(1, this.slidesPerView());\n }\n\n /**\n * Returns `true` when `el` is the host of the first non-disabled indicator\n * in DOM order. Used by the tabindex fallback when no indicator is current.\n */\n isFirstEnabledIndicator(el: HTMLElement): boolean {\n return this.#firstEnabledIndicatorHost() === el;\n }\n\n /**\n * Returns `true` when at least one registered, non-disabled indicator\n * matches the current `activeIndex`. Used by the tabindex ladder to decide\n * whether the first-enabled fallback must reclaim the tab stop.\n *\n * Assumes the one-indicator-per-slide mapping the rest of the picker is built\n * on: the indicator at DOM index `i` targets slide `i`. A mismatched indicator\n * count is dev-guarded at construction by the `FORCDK-CAROUSEL-002` warning.\n */\n hasCurrentIndicator(): boolean {\n const active = this.activeIndex();\n return this.#indicators.items().some((i, idx) => idx === active && !i.disabled());\n }\n\n /** Start auto-rotation (explicit, sticky). Overrides the reduced-motion auto-start gate. */\n play(): void {\n this.#userPlaying.set(true);\n }\n\n /** Stop auto-rotation (explicit, sticky). Hover/focus/visibility changes will not restart it. */\n pause(): void {\n this.#userPlaying.set(false);\n }\n\n /** Toggle auto-rotation. Called by `[forCarouselRotationControl]`. */\n toggleAutoplay(): void {\n this.#userPlaying.set(!this.playing());\n }\n\n protected onAutoplayPause(reason: 'hover' | 'focus'): void {\n this.#pause.apply(reason);\n }\n\n protected onAutoplayResume(reason: 'hover' | 'focus'): void {\n this.#pause.release(reason);\n }\n\n protected onAutoplayFocusOut(event: FocusEvent): void {\n const next = event.relatedTarget as Node | null;\n if (next && this.#element.nativeElement.contains(next)) {\n return;\n }\n this.#pause.release('focus');\n }\n\n #syncTimer(rotating: boolean, interval: number): void {\n this.#clearTimer();\n if (this.#isBrowser && rotating && interval > 0) {\n this.#timerHandle = setInterval(() => this.#advance(), interval);\n }\n }\n\n #advance(): void {\n const count = this.slideCount();\n if (count > 0) {\n this.activeIndex.set((this.activeIndex() + 1) % count);\n }\n }\n\n #clearTimer(): void {\n if (this.#timerHandle !== null) {\n clearInterval(this.#timerHandle);\n this.#timerHandle = null;\n }\n }\n\n #move(action: ListNavigationAction): void {\n const next = moveIndex(this.activeIndex(), this.slideCount(), action, { loop: this.loop() });\n if (next !== null) {\n this.activeIndex.set(next);\n }\n }\n}\n","import { Directive, ElementRef, inject } from '@angular/core';\n\nimport { hostId, registerHandle } from 'forty-cdk/core';\nimport { type ForCarouselViewportHandle, injectCarouselContext } from './carousel-context';\n\n/**\n * Clips the visible window of the carousel track. Acts as the APG-mandated\n * live region for screen-reader announcements. `aria-live` flips between\n * `\"off\"` while the carousel is actively auto-rotating (so advancing slides\n * do not bombard the screen reader) and `\"polite\"` at all other times so\n * manual navigation is announced. Also serves as the `aria-controls` target\n * for the prev/next buttons.\n *\n * Registers itself with the carousel root on construction so the root's\n * `injectElementSize` observer starts and prev/next's `aria-controls` resolves.\n * There must be exactly one viewport per carousel. Unregisters on destroy, so\n * an unmounted viewport stops being observed and prev / next stop pointing\n * `aria-controls` at a dead id.\n */\n@Directive({\n selector: '[forCarouselViewport]',\n exportAs: 'forCarouselViewport',\n host: {\n '[id]': 'id()',\n 'aria-atomic': 'false',\n '[attr.aria-live]': 'ctx.rotating() ? \"off\" : \"polite\"',\n '[attr.data-orientation]': 'ctx.orientation()',\n },\n})\nexport class ForCarouselViewport {\n protected readonly ctx = injectCarouselContext('ForCarouselViewport');\n readonly #host = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /** The resolved id of this element — generated or adopted from a consumer-set static `id`. */\n readonly id = hostId('for-carousel-viewport');\n\n constructor() {\n const handle: ForCarouselViewportHandle = { host: this.#host.nativeElement, id: this.id() };\n registerHandle(\n handle,\n (h) => this.ctx.registerViewport(h),\n (h) => this.ctx.unregisterViewport(h),\n );\n }\n}\n","import { Directive } from '@angular/core';\n\nimport { injectCarouselContext } from './carousel-context';\n\n/**\n * The flex container of slides. The consumer's CSS reads\n * `--for-carousel-offset` (inherited from the root) and applies it as a\n * `transform: translateX(...)` / `translateY(...)` on this element.\n * The directive adds no animation or transform itself.\n *\n * Reflects `data-orientation` so the consumer can select the correct CSS\n * axis via `[data-orientation=\"vertical\"] [forCarouselTrack] { ... }`.\n */\n@Directive({\n selector: '[forCarouselTrack]',\n exportAs: 'forCarouselTrack',\n host: {\n '[attr.data-orientation]': 'ctx.orientation()',\n },\n})\nexport class ForCarouselTrack {\n protected readonly ctx = injectCarouselContext('ForCarouselTrack');\n}\n","import { computed, Directive, ElementRef, inject, input } from '@angular/core';\n\nimport { registerHandle } from 'forty-cdk/core';\nimport { injectCarouselContext } from './carousel-context';\n\n/**\n * One slide in the carousel track. Carries `role=\"group\"` and\n * `aria-roledescription=\"slide\"` per the WAI-ARIA APG Carousel pattern; the\n * role description is localizable through `provideForCarouselDefaults`'s\n * `slideRoleDescription`.\n *\n * The default `aria-label` is the positional `\"N of M\"` string (APG mandates\n * a positional label on each slide). Set `ariaLabel` to override with a\n * semantically richer label for the specific slide content.\n *\n * Off-view slides (outside `[activeIndex, activeIndex + slidesPerView - 1]`)\n * are hidden from the accessibility tree and focus order via\n * `aria-hidden=\"true\"` + `inert`.\n */\n@Directive({\n selector: '[forCarouselSlide]',\n exportAs: 'forCarouselSlide',\n host: {\n role: 'group',\n '[attr.aria-roledescription]': 'roleDescription()',\n '[attr.aria-label]': 'ariaLabel() || positionLabel()',\n '[attr.data-state]': 'current() ? \"active\" : \"inactive\"',\n '[attr.data-in-view]': 'inView() ? \"\" : null',\n '[attr.aria-hidden]': 'inView() ? null : \"true\"',\n '[attr.inert]': 'inView() ? null : \"\"',\n },\n})\nexport class ForCarouselSlide {\n protected readonly ctx = injectCarouselContext('ForCarouselSlide');\n readonly #host = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /**\n * Override the default positional `aria-label` (`\"N of M\"`). Use this to\n * provide a semantically richer label when the slide's content has a\n * meaningful title (e.g. the product name). When `null` (default), the\n * positional label is used automatically. Localize that default format\n * app-wide via `provideForCarouselDefaults`'s `slideLabel`.\n */\n readonly ariaLabel = input<string | null>(null);\n\n readonly #index = computed(() => this.ctx.indexOfSlide(this.#host.nativeElement));\n\n /** Whether this is the current (active) slide. */\n protected readonly current = computed(() => this.ctx.isCurrent(this.#index()));\n\n /** Whether this slide is within the visible window. */\n protected readonly inView = computed(() => this.ctx.isInView(this.#index()));\n\n protected readonly roleDescription = computed(() => this.ctx.slideRoleDescription());\n\n /** The positional `\"N of M\"` label used when no explicit `ariaLabel` is set. */\n protected readonly positionLabel = computed(() => {\n const i = this.#index();\n return i < 0 ? null : this.ctx.slideLabel(i + 1);\n });\n\n constructor() {\n const handle = { host: this.#host.nativeElement };\n registerHandle(\n handle,\n (h) => this.ctx.registerSlide(h),\n (h) => this.ctx.unregisterSlide(h),\n );\n }\n}\n","import { computed, Directive, input } from '@angular/core';\n\nimport { hostButtonType, hostAriaLabel } from 'forty-cdk/core';\nimport { injectCarouselContext } from './carousel-context';\n\n/**\n * Previous-slide button. Apply on a `<button>` so Enter/Space activation is\n * native. Disabled at index 0 when the carousel is not looping; when `loop` is\n * `true` it is never disabled.\n *\n * Reflects the disabled state through `aria-disabled` + `data-disabled` only —\n * never the native `disabled` attribute — so a button that auto-disables at\n * index 0 while focused keeps DOM focus instead of being ejected from the focus\n * order. Activation is a no-op while disabled.\n *\n * Points `aria-controls` at the viewport's id so screen readers announce the\n * relationship. Clicking does not move focus (APG).\n */\n@Directive({\n selector: '[forCarouselPrevious]',\n exportAs: 'forCarouselPrevious',\n host: {\n '[attr.type]': 'buttonType()',\n '[attr.aria-label]': 'resolvedAriaLabel()',\n '[attr.aria-controls]': 'ctx.viewportId()',\n '[attr.aria-disabled]': 'isDisabled() ? \"true\" : null',\n '[attr.data-disabled]': 'isDisabled() ? \"\" : null',\n '(click)': 'activate()',\n },\n})\nexport class ForCarouselPrevious {\n protected readonly buttonType = hostButtonType();\n\n protected readonly ctx = injectCarouselContext('ForCarouselPrevious');\n\n /**\n * Accessible label for this button (e.g. \"Previous slide\"). When `null`\n * (default), no `aria-label` is emitted — the consumer should supply a\n * visible label or set this input.\n */\n readonly ariaLabel = input<string | null>(null);\n\n protected readonly resolvedAriaLabel = hostAriaLabel(() => this.ariaLabel() || null);\n\n protected readonly isDisabled = computed(() => !this.ctx.canScrollPrev());\n\n protected activate(): void {\n if (this.isDisabled()) {\n return;\n }\n this.ctx.scrollPrev();\n }\n}\n","import { computed, Directive, input } from '@angular/core';\n\nimport { hostButtonType, hostAriaLabel } from 'forty-cdk/core';\nimport { injectCarouselContext } from './carousel-context';\n\n/**\n * Next-slide button. Apply on a `<button>` so Enter/Space activation is\n * native. Disabled at the last index when the carousel is not looping; when\n * `loop` is `true` it is never disabled.\n *\n * Reflects the disabled state through `aria-disabled` + `data-disabled` only —\n * never the native `disabled` attribute — so a button that auto-disables at the\n * last slide while focused keeps DOM focus instead of being ejected from the\n * focus order. Activation is a no-op while disabled.\n *\n * Points `aria-controls` at the viewport's id so screen readers announce the\n * relationship. Clicking does not move focus (APG).\n */\n@Directive({\n selector: '[forCarouselNext]',\n exportAs: 'forCarouselNext',\n host: {\n '[attr.type]': 'buttonType()',\n '[attr.aria-label]': 'resolvedAriaLabel()',\n '[attr.aria-controls]': 'ctx.viewportId()',\n '[attr.aria-disabled]': 'isDisabled() ? \"true\" : null',\n '[attr.data-disabled]': 'isDisabled() ? \"\" : null',\n '(click)': 'activate()',\n },\n})\nexport class ForCarouselNext {\n protected readonly buttonType = hostButtonType();\n\n protected readonly ctx = injectCarouselContext('ForCarouselNext');\n\n /**\n * Accessible label for this button (e.g. \"Next slide\"). When `null`\n * (default), no `aria-label` is emitted — the consumer should supply a\n * visible label or set this input.\n */\n readonly ariaLabel = input<string | null>(null);\n\n protected readonly resolvedAriaLabel = hostAriaLabel(() => this.ariaLabel() || null);\n\n protected readonly isDisabled = computed(() => !this.ctx.canScrollNext());\n\n protected activate(): void {\n if (this.isDisabled()) {\n return;\n }\n this.ctx.scrollNext();\n }\n}\n","import { Directive, input } from '@angular/core';\n\nimport { hostAriaLabel } from 'forty-cdk/core';\n\nimport { injectCarouselContext } from './carousel-context';\n\n/**\n * The slide-picker group (dot navigation). Renders as `role=\"group\"` and\n * should receive an `ariaLabel` describing its purpose (e.g. \"Choose slide\n * to display\") per the WAI-ARIA APG Carousel pattern.\n *\n * Keyboard navigation (ArrowLeft/Right, Home/End) and automatic activation\n * live on each `[forCarouselIndicator]` child, not on this container.\n */\n@Directive({\n selector: '[forCarouselIndicators]',\n exportAs: 'forCarouselIndicators',\n host: {\n role: 'group',\n '[attr.aria-label]': 'resolvedAriaLabel()',\n '[attr.data-orientation]': 'ctx.orientation()',\n },\n})\nexport class ForCarouselIndicators {\n protected readonly ctx = injectCarouselContext('ForCarouselIndicators');\n\n /**\n * Accessible label for the picker group (e.g. \"Choose slide to display\").\n * APG recommends labelling the group so screen readers can distinguish it\n * from other landmarks.\n */\n readonly ariaLabel = input<string | null>(null);\n\n protected readonly resolvedAriaLabel = hostAriaLabel(() => this.ariaLabel() || null);\n}\n","import { booleanAttribute, computed, Directive, ElementRef, inject, input } from '@angular/core';\n\nimport {\n hostButtonType,\n registerHandle,\n resolveListNavigation,\n rovingTabStop,\n} from 'forty-cdk/core';\nimport { injectCarouselContext } from './carousel-context';\n\n/**\n * One indicator (dot) in the slide picker. Apply on a `<button>` so\n * Enter/Space activation is native. Uses roving tabindex — only the current\n * dot owns `tabindex=0`; all others have `tabindex=-1`. Arrow/Home/End\n * navigation activates the target slide automatically (APG \"grouped/tabbed\n * picker\" variant).\n *\n * The current indicator is marked with `aria-current=\"true\"` (truthy-only).\n * Disabled indicators receive `aria-disabled=\"true\"` and `data-disabled` but\n * stay focusable (custom-role rule) so assistive tech can announce them.\n */\n@Directive({\n selector: '[forCarouselIndicator]',\n exportAs: 'forCarouselIndicator',\n host: {\n '[attr.type]': 'buttonType()',\n '[attr.aria-label]': 'ariaLabel() || positionLabel()',\n '[attr.aria-current]': 'current() ? \"true\" : null',\n '[attr.data-state]': 'current() ? \"active\" : \"inactive\"',\n '[attr.data-disabled]': 'disabled() ? \"\" : null',\n '[attr.aria-disabled]': 'disabled() ? \"true\" : null',\n '[attr.tabindex]': 'tabindex()',\n '(click)': 'onClick()',\n '(focus)': 'onFocus()',\n '(keydown)': 'onKeyDown($event)',\n },\n})\nexport class ForCarouselIndicator {\n protected readonly buttonType = hostButtonType();\n\n protected readonly ctx = injectCarouselContext('ForCarouselIndicator');\n readonly #host = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /**\n * Override the default positional `aria-label` (e.g. `\"Go to slide 1\"`).\n * Use this to provide a more descriptive label when the slide has a title.\n * Localize that default format app-wide via `provideForCarouselDefaults`'s\n * `indicatorLabel`.\n */\n readonly ariaLabel = input<string | null>(null);\n\n /**\n * Disables this indicator. Disabled indicators remain focusable (for\n * assistive tech) but ignore click and keyboard activation.\n */\n readonly disabled = input(false, { transform: booleanAttribute });\n\n readonly #index = computed(() => this.ctx.indexOfIndicator(this.#host.nativeElement));\n\n /** Whether this indicator corresponds to the current active slide. */\n protected readonly current = computed(() => this.ctx.isCurrent(this.#index()));\n\n /** Default positional label used when no explicit `ariaLabel` is set. */\n protected readonly positionLabel = computed(() => {\n const i = this.#index();\n return i < 0 ? null : this.ctx.indicatorLabel(i + 1);\n });\n\n /**\n * APG roving tabindex: user-driven roving owns it once any indicator has\n * been focused. Before that, fall back to \"current slide's indicator, else\n * first enabled\".\n */\n protected readonly tabindex = computed<-1 | 0>(() =>\n rovingTabStop({\n disabled: this.disabled(),\n selected: this.current(),\n hasSelected: this.ctx.hasCurrentIndicator(),\n isFirstEnabled: this.ctx.isFirstEnabledIndicator(this.#host.nativeElement),\n roving: this.ctx.roving,\n host: this.#host.nativeElement,\n }),\n );\n\n constructor() {\n const handle = { host: this.#host.nativeElement, disabled: this.disabled };\n registerHandle(\n handle,\n (h) => this.ctx.registerIndicator(h),\n (h) => this.ctx.unregisterIndicator(h),\n );\n }\n\n protected onClick(): void {\n if (this.disabled()) {\n return;\n }\n this.ctx.scrollTo(this.#index());\n }\n\n protected onFocus(): void {\n if (this.disabled()) {\n return;\n }\n this.ctx.roving.setActive(this.#host.nativeElement);\n }\n\n protected onKeyDown(event: KeyboardEvent): void {\n if (this.disabled()) {\n return;\n }\n const action = resolveListNavigation(event, {\n orientation: this.ctx.orientation(),\n dir: this.ctx.dir(),\n });\n if (!action) {\n return;\n }\n event.preventDefault();\n this.ctx.navigate(this.#host.nativeElement, action);\n }\n}\n","import { computed, Directive, inject, input } from '@angular/core';\n\nimport { hostButtonType, resolveTextInput } from 'forty-cdk/core';\nimport { injectCarouselContext } from './carousel-context';\nimport { FOR_CAROUSEL_DEFAULTS } from 'forty-cdk/defaults';\n\n/**\n * Play/pause control for carousel auto-rotation. Apply on a `<button>` so\n * Enter/Space activation is native. Its accessible name swaps with the\n * rotation state — `stopLabel` while rotating, `startLabel` while stopped —\n * per the WAI-ARIA APG Carousel pattern, which forbids `aria-pressed` here.\n * Both labels default to the scope's `rotationStopLabel` / `rotationStartLabel`\n * (`provideForCarouselDefaults`), so they can be localized centrally.\n *\n * Place this control **first** in the carousel's DOM/tab order so assistive\n * technology users meet it before the rotating content (APG requirement).\n *\n * Reflects a boolean `data-playing` attribute (present while rotation is on)\n * as the styling hook for swapping a play/pause icon.\n */\n@Directive({\n selector: '[forCarouselRotationControl]',\n exportAs: 'forCarouselRotationControl',\n host: {\n '[attr.type]': 'buttonType()',\n '[attr.aria-label]': 'label()',\n '[attr.data-playing]': 'ctx.playing() ? \"\" : null',\n '(click)': 'ctx.toggleAutoplay()',\n },\n})\nexport class ForCarouselRotationControl {\n protected readonly buttonType = hostButtonType();\n\n protected readonly ctx = injectCarouselContext('ForCarouselRotationControl');\n readonly #defaults = inject(FOR_CAROUSEL_DEFAULTS);\n\n /**\n * Accessible name shown while rotation is **stopped** (the button will start\n * it). Defaults to the scope's `rotationStartLabel` (`'Start automatic slide\n * show'` unless overridden via `provideForCarouselDefaults`); set `null` to\n * drop `aria-label` when the button already carries a visible text label.\n */\n readonly startLabel = input<string | null>();\n\n /**\n * Accessible name shown while rotation is **playing** (the button will stop\n * it). Defaults to the scope's `rotationStopLabel` (`'Stop automatic slide\n * show'` unless overridden via `provideForCarouselDefaults`); set `null` to\n * drop `aria-label` when the button already carries a visible text label.\n */\n readonly stopLabel = input<string | null>();\n\n /** The current accessible name — `stopLabel` while playing, else `startLabel`. */\n protected readonly label = computed(\n () =>\n (this.ctx.playing()\n ? resolveTextInput(this.stopLabel(), this.#defaults.rotationStopLabel)\n : resolveTextInput(this.startLabel(), this.#defaults.rotationStartLabel)) || null,\n );\n}\n","import {\n booleanAttribute,\n computed,\n DestroyRef,\n Directive,\n ElementRef,\n inject,\n input,\n PLATFORM_ID,\n signal,\n} from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\n\nimport {\n attachSwipeDismiss,\n type SwipeDirection,\n type SwipeEventDetail,\n isScrollableAtEdge,\n injectPrefersReducedMotion,\n flickVelocity,\n FLICK_STALE_VELOCITY_MS,\n FLICK_VELOCITY_PX_PER_MS,\n} from 'forty-cdk/core';\nimport { injectCarouselContext } from './carousel-context';\n\n/**\n * Opt-in pointer drag / swipe directive for the Carousel viewport. Apply on the\n * `[forCarouselViewport]` element to enable horizontal or vertical drag-to-navigate.\n *\n * Publishes `--for-carousel-swipe-movement-x` (horizontal) or\n * `--for-carousel-swipe-movement-y` (vertical) in px during the gesture — only\n * the property matching `orientation` is written — so the consumer can\n * compose it with `--for-carousel-offset` for live track motion. Reflects\n * `data-dragging` while the gesture is armed. Sets `touch-action` automatically\n * to free the cross axis for page scrolling.\n *\n * Under `prefers-reduced-motion: reduce` the live offset is suppressed, but the\n * gesture still snaps `activeIndex` on release (D3).\n */\n@Directive({\n selector: '[forCarouselDrag]',\n exportAs: 'forCarouselDrag',\n host: {\n '[style.--for-carousel-swipe-movement-x]': 'swipeMovementX()',\n '[style.--for-carousel-swipe-movement-y]': 'swipeMovementY()',\n '[attr.data-dragging]': \"dragging() ? '' : null\",\n '[style.touch-action]': 'touchAction()',\n '(dragstart)': 'onDragStart($event)',\n },\n})\nexport class ForCarouselDrag {\n protected readonly ctx = injectCarouselContext('ForCarouselDrag');\n\n /** Disable pointer drag without removing the directive. Default `false`. */\n readonly disabled = input(false, { transform: booleanAttribute });\n\n readonly #host = inject<ElementRef<HTMLElement>>(ElementRef);\n readonly #destroyRef = inject(DestroyRef);\n readonly #isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n readonly #prefersReducedMotion = injectPrefersReducedMotion();\n\n readonly #dragging = signal(false);\n readonly #dragPx = signal(0);\n\n /** Whether a drag gesture is currently armed (reflected as `data-dragging`). */\n readonly dragging = this.#dragging.asReadonly();\n\n /** `touch-action` for the viewport: capture the primary axis, free the cross axis. */\n readonly touchAction = computed<string | null>(() => {\n if (this.disabled()) return null;\n return this.ctx.orientation() === 'vertical' ? 'pan-x' : 'pan-y';\n });\n\n /** Live px displacement along the primary axis; `null` at rest and under reduced motion (D3). */\n readonly #swipeMovement = computed<string | null>(() => {\n if (this.#prefersReducedMotion()) return null;\n const px = this.#dragPx();\n return this.#dragging() && px !== 0 ? `${px}px` : null;\n });\n\n /** Live px displacement published as `--for-carousel-swipe-movement-x`; `null` on a vertical carousel. */\n readonly swipeMovementX = computed<string | null>(() =>\n this.ctx.orientation() === 'vertical' ? null : this.#swipeMovement(),\n );\n\n /** Live px displacement published as `--for-carousel-swipe-movement-y`; `null` on a horizontal carousel. */\n readonly swipeMovementY = computed<string | null>(() =>\n this.ctx.orientation() === 'vertical' ? this.#swipeMovement() : null,\n );\n\n #startPrimary = 0;\n #lastPrimary = 0;\n #lastTime = 0;\n #velocity = 0;\n #slideSizePx = 0;\n\n constructor() {\n if (!this.#isBrowser) return;\n const cleanup = attachSwipeDismiss({\n element: this.#host.nativeElement,\n getDirections: () => this.#directions(),\n getThreshold: () => 1,\n canBegin: (d) => this.#canBegin(d),\n onSwipeStart: (d) => this.#onStart(d),\n onSwipeMove: (d) => this.#onMove(d),\n onSwipeEnd: (d) => this.#onRelease(d),\n onSwipeCancel: (d) => this.#onRelease(d),\n });\n this.#destroyRef.onDestroy(cleanup);\n }\n\n protected onDragStart(event: Event): void {\n if (this.#dragging()) event.preventDefault();\n }\n\n #directions(): readonly SwipeDirection[] {\n if (this.disabled()) return [];\n return this.ctx.orientation() === 'vertical' ? ['up', 'down'] : ['left', 'right'];\n }\n\n #primary(event: PointerEvent): number {\n return this.ctx.orientation() === 'vertical' ? event.clientY : event.clientX;\n }\n\n /** +1 if a positive primary-axis delta moves toward a higher index, else -1. */\n #nextPerPx(): number {\n // horizontal LTR: finger left (clientX↓) → next → -1\n // horizontal RTL: finger right (clientX↑) → next → +1\n // vertical: finger up (clientY↓) → next → -1\n return this.ctx.orientation() === 'horizontal' && this.ctx.dir() === 'rtl' ? 1 : -1;\n }\n\n #canBegin(detail: SwipeEventDetail): boolean {\n const target = detail.originalEvent.target as Element | null;\n return !(target && isScrollableAtEdge(target, detail.direction, this.#host.nativeElement));\n }\n\n #onStart(detail: SwipeEventDetail): void {\n const rect = this.#host.nativeElement.getBoundingClientRect();\n const axisSize = this.ctx.orientation() === 'vertical' ? rect.height : rect.width;\n this.#slideSizePx = axisSize / Math.max(1, this.ctx.slidesPerView());\n\n const p = this.#primary(detail.originalEvent);\n this.#startPrimary = p;\n this.#lastPrimary = p;\n this.#lastTime = detail.originalEvent.timeStamp || 0;\n this.#velocity = 0;\n this.#dragPx.set(0);\n this.#dragging.set(true);\n }\n\n #onMove(detail: SwipeEventDetail): void {\n if (!this.#dragging()) return;\n const event = detail.originalEvent;\n const p = this.#primary(event);\n const now = event.timeStamp || this.#lastTime + 1;\n const dt = Math.max(1, now - this.#lastTime);\n this.#velocity = (p - this.#lastPrimary) / dt;\n this.#lastPrimary = p;\n this.#lastTime = now;\n this.#dragPx.set(p - this.#startPrimary);\n }\n\n #onRelease(detail: SwipeEventDetail): void {\n if (!this.#dragging()) return;\n const dragPx = this.#dragPx();\n const releaseTime = detail.originalEvent.timeStamp || this.#lastTime;\n const staleVelocity = releaseTime - this.#lastTime > FLICK_STALE_VELOCITY_MS;\n this.#dragging.set(false);\n this.#dragPx.set(0);\n\n if (this.#slideSizePx <= 0) return;\n\n const sign = this.#nextPerPx();\n const slidesDragged = (dragPx * sign) / this.#slideSizePx;\n const velocityTowardNext = flickVelocity(this.#velocity * sign, staleVelocity);\n const target = resolveDragIndex(this.ctx.activeIndex(), slidesDragged, velocityTowardNext);\n this.ctx.scrollTo(target);\n }\n}\n\n/**\n * Pure nearest-index snap with velocity bias. `slidesDragged` is signed (positive\n * toward a higher index); `velocityTowardNext` is px/ms (positive toward a higher\n * index). A fast flick rounds toward the flick direction instead of to nearest.\n * Returns a raw (possibly out-of-range) index; the caller's `scrollTo` normalizes it.\n */\nexport function resolveDragIndex(\n activeIndex: number,\n slidesDragged: number,\n velocityTowardNext: number,\n): number {\n const float = activeIndex + slidesDragged;\n if (velocityTowardNext >= FLICK_VELOCITY_PX_PER_MS) return Math.ceil(float);\n if (velocityTowardNext <= -FLICK_VELOCITY_PX_PER_MS) return Math.floor(float);\n return Math.round(float);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"forty-cdk-carousel.mjs","sources":["../../../projects/forty-cdk/carousel/src/carousel-context.ts","../../../projects/forty-cdk/carousel/src/carousel.ts","../../../projects/forty-cdk/carousel/src/carousel-viewport.ts","../../../projects/forty-cdk/carousel/src/carousel-track.ts","../../../projects/forty-cdk/carousel/src/carousel-slide.ts","../../../projects/forty-cdk/carousel/src/carousel-previous.ts","../../../projects/forty-cdk/carousel/src/carousel-next.ts","../../../projects/forty-cdk/carousel/src/carousel-indicators.ts","../../../projects/forty-cdk/carousel/src/carousel-indicator.ts","../../../projects/forty-cdk/carousel/src/carousel-rotation-control.ts","../../../projects/forty-cdk/carousel/src/carousel-drag.ts","../../../projects/forty-cdk/carousel/src/forty-cdk-carousel.ts"],"sourcesContent":["import { inject, InjectionToken, type Signal } from '@angular/core';\n\nimport {\n assertRootContext,\n type ListNavigationAction,\n orphanContextError,\n type RovingTabindex,\n type WritingDirection,\n} from 'forty-cdk/core';\nimport { type CarouselAlign } from 'forty-cdk/defaults';\n\nexport { type CarouselAlign };\n\n/**\n * Internal handle for a registered slide. Part of the registration protocol, so\n * it is never exported from `public-api.ts` — see {@link CarouselContext}.\n */\nexport interface ForCarouselSlideHandle {\n readonly host: HTMLElement;\n}\n\n/**\n * Internal handle for a registered indicator (dot). Part of the registration\n * protocol, so it is never exported from `public-api.ts` — see\n * {@link CarouselContext}.\n */\nexport interface ForCarouselIndicatorHandle {\n readonly host: HTMLElement;\n readonly disabled: Signal<boolean>;\n}\n\n/**\n * Internal handle for the registered viewport. Part of the registration\n * protocol, so it is never exported from `public-api.ts` — see\n * {@link CarouselContext}.\n */\nexport interface ForCarouselViewportHandle {\n readonly host: HTMLElement;\n readonly id: string;\n}\n\n/**\n * Coordination contract owned by `ForCarousel`. Slides and indicators\n * register with the root so index lookups, geometry computations, and\n * keyboard navigation are all driven from a single source of truth.\n */\nexport interface ForCarouselContext {\n readonly activeIndex: Signal<number>;\n readonly orientation: Signal<'horizontal' | 'vertical'>;\n readonly dir: Signal<WritingDirection>;\n readonly loop: Signal<boolean>;\n readonly align: Signal<CarouselAlign>;\n readonly slidesPerView: Signal<number>;\n readonly slideCount: Signal<number>;\n\n /** Whether auto-rotation is currently \"on\" (user intent). Drives the rotation control's label. */\n readonly playing: Signal<boolean>;\n /** Whether the carousel is actively auto-rotating right now (`playing && !paused`). Drives the viewport's `aria-live`. */\n readonly rotating: Signal<boolean>;\n\n canScrollPrev(): boolean;\n canScrollNext(): boolean;\n scrollPrev(): void;\n scrollNext(): void;\n scrollTo(index: number): void;\n\n /** Toggle auto-rotation on/off (the explicit, sticky user choice). Called by the rotation control. */\n toggleAutoplay(): void;\n\n isCurrent(index: number): boolean;\n isFirstEnabledIndicator(el: HTMLElement): boolean;\n hasCurrentIndicator(): boolean;\n}\n\n/**\n * The carousel's piece-coordination surface: the roving tracker the indicators\n * share, the DOM-order index lookups, the viewport id the rotation control\n * points `aria-controls` at, and the localizable positional labels.\n *\n * **Not** part of {@link ForCarouselContext} and never exported\n * from `public-api.ts` — a consumer drives the carousel through `scrollTo` /\n * `scrollNext`, never through the indicators' shared tab stop.\n */\nexport interface CarouselPieceContext {\n readonly roving: RovingTabindex;\n\n navigate(currentIndicator: HTMLElement, action: ListNavigationAction): void;\n\n viewportId(): string | null;\n\n indexOfSlide(host: HTMLElement): number;\n indexOfIndicator(host: HTMLElement): number;\n\n /** Resolve the positional slide `aria-label` (`\"N of M\"` by default). `position` is 1-based. */\n slideLabel(position: number): string;\n /** Resolve the indicator `aria-label` (`\"Go to slide N\"` by default). `position` is 1-based. */\n indicatorLabel(position: number): string;\n slideRoleDescription(): string | null;\n\n isInView(index: number): boolean;\n}\n\n/**\n * DI token providing the carousel context to descendant pieces.\n *\n * Publicly typed as the read surface {@link ForCarouselContext}, which is the whole of\n * what the token promises a consumer. The pieces read the same token at an internal type\n * that adds the slide / indicator / viewport registration protocol, so a wrapper\n * re-providing it must alias it to the root: `{ provide: FOR_CAROUSEL_CONTEXT,\n * useExisting: MyCarousel }`, where `MyCarousel` extends `ForCarousel`. A value that\n * merely satisfies the declared type resolves too, and is rejected in dev mode by the\n * first piece to reach the protocol.\n */\nexport const FOR_CAROUSEL_CONTEXT = new InjectionToken<ForCarouselContext>('FOR_CAROUSEL_CONTEXT');\n\n/**\n * The carousel's internal coordination surface: everything\n * {@link ForCarouselContext} publishes plus the {@link CarouselPieceContext}\n * members and the slide / indicator / viewport registration protocol the index\n * lookups, geometry observer and roving tabindex are driven from.\n *\n * Never exported from `public-api.ts`. It is the type the pieces read\n * {@link FOR_CAROUSEL_CONTEXT} at, so a consumer who injects that token gets the\n * read surface while the pieces get the wiring protocol. `ForCarousel` declares\n * the protocol members TS-`private`, which keeps them out of the emitted\n * `.d.ts` while `useExisting` still satisfies this contract at runtime.\n */\nexport interface CarouselContext extends ForCarouselContext, CarouselPieceContext {\n registerSlide(handle: ForCarouselSlideHandle): void;\n unregisterSlide(handle: ForCarouselSlideHandle): void;\n registerIndicator(handle: ForCarouselIndicatorHandle): void;\n unregisterIndicator(handle: ForCarouselIndicatorHandle): void;\n registerViewport(handle: ForCarouselViewportHandle): void;\n unregisterViewport(handle: ForCarouselViewportHandle): void;\n}\n\nexport function injectCarouselContext(piece: string): CarouselContext {\n const ctx = inject(FOR_CAROUSEL_CONTEXT, { optional: true }) as CarouselContext | null;\n if (!ctx) {\n throw orphanContextError({\n code: 'FORCDK-CAROUSEL-001',\n piece,\n root: '[forCarousel]',\n token: 'FOR_CAROUSEL_CONTEXT',\n });\n }\n assertRootContext({\n entryPoint: 'carousel',\n token: 'FOR_CAROUSEL_CONTEXT',\n root: '[forCarousel]',\n piece,\n probe: () => ctx.registerSlide,\n });\n return ctx;\n}\n","import {\n booleanAttribute,\n computed,\n DestroyRef,\n Directive,\n effect,\n ElementRef,\n inject,\n input,\n isDevMode,\n model,\n numberAttribute,\n PLATFORM_ID,\n signal,\n untracked,\n} from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\n\nimport {\n Collection,\n createSingleSlot,\n firstEnabledHost,\n fortyWarn,\n hostAriaLabel,\n injectElementSize,\n injectPauseController,\n injectPrefersReducedMotion,\n injectTextDirection,\n type ListNavigationAction,\n moveIndex,\n type PauseController,\n resolveText,\n RovingTabindex,\n type WritingDirection,\n} from 'forty-cdk/core';\nimport {\n type CarouselAlign,\n FOR_CAROUSEL_CONTEXT,\n type ForCarouselContext,\n type ForCarouselIndicatorHandle,\n type ForCarouselSlideHandle,\n type ForCarouselViewportHandle,\n} from './carousel-context';\nimport { FOR_CAROUSEL_DEFAULTS } from 'forty-cdk/defaults';\n\n/**\n * Root of the Carousel primitive. Owns the active index, slide collection,\n * indicator collection, roving tabindex tracker, and computed geometry CSS\n * variables. Provides the shared context to descendant pieces.\n *\n * Implements the [WAI-ARIA APG Carousel pattern](https://www.w3.org/WAI/ARIA/apg/patterns/carousel/).\n *\n * With no `[forCarouselIndicators]` rendered this is a basic carousel driven\n * by prev/next buttons only. Adding an indicator group enables APG picker\n * semantics: roving tabindex, arrow/Home/End navigation with automatic\n * activation.\n */\n@Directive({\n selector: '[forCarousel]',\n exportAs: 'forCarousel',\n host: {\n role: 'group',\n '[attr.aria-roledescription]': 'roleDescription()',\n '[attr.aria-label]': 'resolvedAriaLabel()',\n '[attr.data-orientation]': 'orientation()',\n '[attr.data-align]': 'align()',\n '[attr.dir]': 'dir()',\n '[style.--for-carousel-offset]': 'offset()',\n '[style.--for-carousel-active-index]': 'activeIndex()',\n '[style.--for-carousel-slide-count]': 'slideCount()',\n '[style.--for-carousel-slides-per-view]': 'slidesPerView()',\n '[style.--for-carousel-viewport-width]': 'viewportWidth()',\n '[style.--for-carousel-viewport-height]': 'viewportHeight()',\n '[attr.data-autoplay]': 'autoplay() ? \"\" : null',\n '[attr.data-rotating]': 'rotating() ? \"\" : null',\n '(pointerenter)': 'onAutoplayPause(\"hover\")',\n '(pointerleave)': 'onAutoplayResume(\"hover\")',\n '(focusin)': 'onAutoplayPause(\"focus\")',\n '(focusout)': 'onAutoplayFocusOut($event)',\n },\n providers: [{ provide: FOR_CAROUSEL_CONTEXT, useExisting: ForCarousel }],\n})\nexport class ForCarousel implements ForCarouselContext {\n readonly #defaults = inject(FOR_CAROUSEL_DEFAULTS);\n\n /**\n * Two-way bindable. The zero-based index of the current (leading) slide.\n * The `model()` change emitter (`(activeIndexChange)`) fires only on internal\n * navigation (prev/next button clicks, indicator arrow-key or click), never\n * on consumer writes via `[(activeIndex)]`.\n */\n readonly activeIndex = model<number>(0);\n\n /** Scroll axis. `'horizontal'` (default) or `'vertical'`. */\n readonly orientation = input<'horizontal' | 'vertical'>('horizontal');\n\n /**\n * Whether index wrap-around is enabled. When `true`, `next` past the last\n * slide wraps to index 0; `prev` before index 0 wraps to the last. Default\n * comes from `provideForCarouselDefaults` or the library fallback (`false`).\n */\n readonly loop = input(this.#defaults.loop, { transform: booleanAttribute });\n\n /**\n * Alignment of the active slide within the viewport. Affects the\n * `--for-carousel-offset` computation. Default from `provideForCarouselDefaults`\n * or `'start'`.\n */\n readonly align = input<CarouselAlign>(this.#defaults.align);\n\n /**\n * Number of slides simultaneously visible in the viewport. Slide width\n * should be set to `calc(100% / var(--for-carousel-slides-per-view))` in\n * the consumer's CSS. Default from `provideForCarouselDefaults` or `1`.\n */\n readonly slidesPerView = input(this.#defaults.slidesPerView, { transform: numberAttribute });\n\n /**\n * When `true` and the carousel is not looping, clamps `--for-carousel-offset` so the\n * trailing slides align flush to the viewport's trailing edge instead of overscrolling\n * into empty space (relevant when `slidesPerView > 1`). The one-indicator-per-slide\n * mapping is preserved — `activeIndex` still reaches the last slide; only the visual\n * offset is contained. No effect when `loop` is enabled or `slidesPerView` is 1.\n * Default from `provideForCarouselDefaults` or `false`.\n */\n readonly containScroll = input(this.#defaults.containScroll, { transform: booleanAttribute });\n\n /**\n * Accessible label for the carousel root (`role=\"group\"`). Should describe\n * the carousel's purpose without using the word \"carousel\" (APG guidance).\n * When null (default), no `aria-label` is emitted; use `aria-labelledby`\n * instead when a visible heading labels the carousel.\n */\n readonly ariaLabel = input<string | null>(null);\n\n protected readonly resolvedAriaLabel = hostAriaLabel(() => this.ariaLabel() || null);\n\n protected readonly roleDescription = computed(\n () => resolveText(this.#defaults.roleDescription) || null,\n );\n\n /**\n * Whether the carousel auto-rotates. When `true` and the user has not\n * explicitly stopped it, rotation starts on mount — *unless*\n * `prefers-reduced-motion: reduce` is set, which suppresses auto-start\n * (the user can still start it via the rotation control). Default from\n * `provideForCarouselDefaults` or `false`.\n *\n * APG requires a `[forCarouselRotationControl]` to be present whenever\n * autoplay is enabled. The directive does not enforce this — see the README.\n */\n readonly autoplay = input(this.#defaults.autoplay, { transform: booleanAttribute });\n\n /**\n * Milliseconds between automatic slide advances while rotating. Values\n * `<= 0` disable the timer. Default from `provideForCarouselDefaults` or `5000`.\n */\n readonly autoplayInterval = input(this.#defaults.autoplayInterval, {\n transform: numberAttribute,\n });\n\n /**\n * Writing direction. When unset (default `null`), the inherited ambient\n * direction is resolved from the nearest ancestor carrying a `dir` attribute\n * (or `<html dir>`), defaulting to `'ltr'`. An explicit `[dir]` always wins.\n * The resolved value is reflected to the host `dir` attribute and swaps\n * ArrowLeft / ArrowRight semantics on the indicator group in RTL.\n */\n readonly _dirInput = input<WritingDirection | null>(null, { alias: 'dir' });\n readonly dir = injectTextDirection(this._dirInput);\n\n /** Roving tabindex tracker for the indicator group. */\n private readonly roving = new RovingTabindex(() => this.#indicators.items());\n\n readonly #destroyRef = inject(DestroyRef);\n readonly #isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n readonly #element = inject<ElementRef<HTMLElement>>(ElementRef);\n readonly #prefersReducedMotion = injectPrefersReducedMotion();\n\n readonly #userPlaying = signal<boolean | null>(null);\n\n /** Whether auto-rotation is \"on\" (user intent). Sticky once the user decides. */\n readonly playing = computed(\n () => this.#userPlaying() ?? (this.autoplay() && !this.#prefersReducedMotion()),\n );\n\n readonly #pause: PauseController<'hover' | 'focus' | 'visibility'> = injectPauseController();\n\n /** Whether the carousel is actively auto-rotating right now. */\n readonly rotating = computed(() => this.playing() && !this.#pause.paused());\n\n #timerHandle: ReturnType<typeof setInterval> | null = null;\n\n readonly #slides = new Collection<ForCarouselSlideHandle>();\n readonly #indicators = new Collection<ForCarouselIndicatorHandle>();\n\n readonly #viewport = createSingleSlot<ForCarouselViewportHandle>({\n primitive: 'carousel',\n owner: '[forCarousel]',\n claimant: '[forCarouselViewport]',\n });\n readonly #viewportEl = computed(() => this.#viewport.value()?.host ?? null);\n readonly #viewportBox = injectElementSize(this.#viewportEl);\n\n /** Total number of registered slides. Reactive. */\n readonly slideCount = computed(() => this.#slides.items().length);\n\n readonly #firstEnabledIndicatorHost = computed(() => firstEnabledHost(this.#indicators.items()));\n\n /**\n * The `--for-carousel-offset` value to apply via `transform` on the track.\n * Pure arithmetic — no layout measurement — so it is safe in Vitest.\n */\n readonly offset = computed(() => {\n const perView = Math.max(1, this.slidesPerView());\n const slideSizePct = 100 / perView;\n const base = -(this.activeIndex() * slideSizePct);\n const align = this.align();\n const adjust =\n align === 'center' ? (100 - slideSizePct) / 2 : align === 'end' ? 100 - slideSizePct : 0;\n const raw = base + adjust;\n if (this.containScroll() && !this.loop()) {\n const minOffset = -(Math.max(0, this.slideCount() - perView) * slideSizePct);\n return `${Math.min(0, Math.max(minOffset, raw))}%`;\n }\n return `${raw}%`;\n });\n\n /** The measured viewport width, or `null` before first measurement / on the server. */\n readonly viewportWidth = computed(() => {\n const box = this.#viewportBox();\n return box ? `${box.width}px` : null;\n });\n\n /** The measured viewport height, or `null` before first measurement / on the server. */\n readonly viewportHeight = computed(() => {\n const box = this.#viewportBox();\n return box ? `${box.height}px` : null;\n });\n\n constructor() {\n effect(() => {\n const rotating = this.rotating();\n const interval = this.autoplayInterval();\n untracked(() => this.#syncTimer(rotating, interval));\n });\n this.#destroyRef.onDestroy(() => this.#clearTimer());\n\n if (isDevMode()) {\n let warned = false;\n effect(() => {\n const slides = this.slideCount();\n const indicators = this.#indicators.items().length;\n if (indicators === 0 || indicators === slides) {\n warned = false;\n } else if (!warned) {\n warned = true;\n fortyWarn({\n code: 'FORCDK-CAROUSEL-002',\n message: `${indicators} [forCarouselIndicator] element(s) are registered for ${slides} slide(s).`,\n cause:\n 'The picker targets slide i from the indicator at DOM index i, so a mismatched count ' +\n 'desynchronizes the active-indicator state.',\n fix: 'Render exactly one [forCarouselIndicator] per [forCarouselSlide].',\n });\n }\n });\n }\n }\n\n /** Returns `true` when scrolling backward is possible given the current loop/index state. */\n canScrollPrev(): boolean {\n return moveIndex(this.activeIndex(), this.slideCount(), 'prev', { loop: this.loop() }) !== null;\n }\n\n /** Returns `true` when scrolling forward is possible given the current loop/index state. */\n canScrollNext(): boolean {\n return moveIndex(this.activeIndex(), this.slideCount(), 'next', { loop: this.loop() }) !== null;\n }\n\n /** Navigate to the previous slide. No-op at index 0 when not looping. */\n scrollPrev(): void {\n this.#move('prev');\n }\n\n /** Navigate to the next slide. No-op at the last index when not looping. */\n scrollNext(): void {\n this.#move('next');\n }\n\n /**\n * Navigate to the slide at `index`. Clamps to `[0, slideCount-1]` when not\n * looping; wraps modulo `slideCount` when looping.\n */\n scrollTo(index: number): void {\n const count = this.slideCount();\n if (count === 0) {\n return;\n }\n const target = this.loop()\n ? ((index % count) + count) % count\n : Math.max(0, Math.min(index, count - 1));\n this.activeIndex.set(target);\n }\n\n /**\n * Move focus from `currentIndicator` according to `action` and activate the\n * target slide (automatic activation). Used by `ForCarouselIndicator`'s\n * keydown handler.\n */\n private navigate(currentIndicator: HTMLElement, action: ListNavigationAction): void {\n const indicators = this.#indicators.items();\n if (indicators.length === 0) {\n return;\n }\n const currentIndex = indicators.findIndex((i) => i.host === currentIndicator);\n const next = moveIndex(currentIndex < 0 ? 0 : currentIndex, indicators.length, action, {\n loop: this.loop(),\n isDisabled: (i) => indicators[i]!.disabled(),\n });\n if (next === null) {\n return;\n }\n indicators[next]!.host.focus();\n this.scrollTo(next);\n }\n\n private registerSlide(handle: ForCarouselSlideHandle): void {\n this.#slides.register(handle);\n }\n\n private unregisterSlide(handle: ForCarouselSlideHandle): void {\n this.#slides.unregister(handle);\n }\n\n private registerIndicator(handle: ForCarouselIndicatorHandle): void {\n this.#indicators.register(handle);\n }\n\n private unregisterIndicator(handle: ForCarouselIndicatorHandle): void {\n this.#indicators.unregister(handle);\n this.roving.unregister(handle.host);\n }\n\n /** Called by `ForCarouselViewport` at construction to wire the geometry observer. */\n private registerViewport(handle: ForCarouselViewportHandle): void {\n this.#viewport.register(handle);\n }\n\n /**\n * Called by `ForCarouselViewport` on destroy so an unmounted viewport stops\n * being observed and prev / next drop their stale `aria-controls`.\n */\n private unregisterViewport(handle: ForCarouselViewportHandle): void {\n this.#viewport.unregister(handle);\n }\n\n /** The id of the registered viewport element, or `null` if none is mounted. */\n private viewportId(): string | null {\n return this.#viewport.value()?.id ?? null;\n }\n\n /** DOM-order index of the registered slide whose host equals `host`, or -1. */\n private indexOfSlide(host: HTMLElement): number {\n return this.#slides.indexOfHost(host);\n }\n\n /** DOM-order index of the registered indicator whose host equals `host`, or -1. */\n private indexOfIndicator(host: HTMLElement): number {\n return this.#indicators.indexOfHost(host);\n }\n\n /**\n * Resolve the positional slide `aria-label` from the scope's defaults\n * (`\"N of M\"` unless localized via `provideForCarouselDefaults`).\n * `position` is the 1-based slide index.\n */\n private slideLabel(position: number): string {\n return this.#defaults.slideLabel(position, this.slideCount());\n }\n\n /**\n * Resolve the indicator `aria-label` from the scope's defaults\n * (`\"Go to slide N\"` unless localized via `provideForCarouselDefaults`).\n * `position` is the 1-based slide index.\n */\n private indicatorLabel(position: number): string {\n return this.#defaults.indicatorLabel(position);\n }\n\n private slideRoleDescription(): string | null {\n return resolveText(this.#defaults.slideRoleDescription) || null;\n }\n\n /** Returns `true` when `index` is the current active slide index. */\n isCurrent(index: number): boolean {\n return index === this.activeIndex();\n }\n\n /**\n * Returns `true` when `index` falls within the visible window\n * `[activeIndex, activeIndex + slidesPerView - 1]`.\n */\n private isInView(index: number): boolean {\n const start = this.activeIndex();\n return index >= start && index < start + Math.max(1, this.slidesPerView());\n }\n\n /**\n * Returns `true` when `el` is the host of the first non-disabled indicator\n * in DOM order. Used by the tabindex fallback when no indicator is current.\n */\n isFirstEnabledIndicator(el: HTMLElement): boolean {\n return this.#firstEnabledIndicatorHost() === el;\n }\n\n /**\n * Returns `true` when at least one registered, non-disabled indicator\n * matches the current `activeIndex`. Used by the tabindex ladder to decide\n * whether the first-enabled fallback must reclaim the tab stop.\n *\n * Assumes the one-indicator-per-slide mapping the rest of the picker is built\n * on: the indicator at DOM index `i` targets slide `i`. A mismatched indicator\n * count is dev-guarded at construction by the `FORCDK-CAROUSEL-002` warning.\n */\n hasCurrentIndicator(): boolean {\n const active = this.activeIndex();\n return this.#indicators.items().some((i, idx) => idx === active && !i.disabled());\n }\n\n /** Start auto-rotation (explicit, sticky). Overrides the reduced-motion auto-start gate. */\n play(): void {\n this.#userPlaying.set(true);\n }\n\n /** Stop auto-rotation (explicit, sticky). Hover/focus/visibility changes will not restart it. */\n pause(): void {\n this.#userPlaying.set(false);\n }\n\n /** Toggle auto-rotation. Called by `[forCarouselRotationControl]`. */\n toggleAutoplay(): void {\n this.#userPlaying.set(!this.playing());\n }\n\n protected onAutoplayPause(reason: 'hover' | 'focus'): void {\n this.#pause.apply(reason);\n }\n\n protected onAutoplayResume(reason: 'hover' | 'focus'): void {\n this.#pause.release(reason);\n }\n\n protected onAutoplayFocusOut(event: FocusEvent): void {\n const next = event.relatedTarget as Node | null;\n if (next && this.#element.nativeElement.contains(next)) {\n return;\n }\n this.#pause.release('focus');\n }\n\n #syncTimer(rotating: boolean, interval: number): void {\n this.#clearTimer();\n if (this.#isBrowser && rotating && interval > 0) {\n this.#timerHandle = setInterval(() => this.#advance(), interval);\n }\n }\n\n #advance(): void {\n const count = this.slideCount();\n if (count > 0) {\n this.activeIndex.set((this.activeIndex() + 1) % count);\n }\n }\n\n #clearTimer(): void {\n if (this.#timerHandle !== null) {\n clearInterval(this.#timerHandle);\n this.#timerHandle = null;\n }\n }\n\n #move(action: ListNavigationAction): void {\n const next = moveIndex(this.activeIndex(), this.slideCount(), action, { loop: this.loop() });\n if (next !== null) {\n this.activeIndex.set(next);\n }\n }\n}\n","import { Directive, ElementRef, inject } from '@angular/core';\n\nimport { hostId, registerHandle } from 'forty-cdk/core';\nimport { type ForCarouselViewportHandle, injectCarouselContext } from './carousel-context';\n\n/**\n * Clips the visible window of the carousel track. Acts as the APG-mandated\n * live region for screen-reader announcements. `aria-live` flips between\n * `\"off\"` while the carousel is actively auto-rotating (so advancing slides\n * do not bombard the screen reader) and `\"polite\"` at all other times so\n * manual navigation is announced. Also serves as the `aria-controls` target\n * for the prev/next buttons.\n *\n * Registers itself with the carousel root on construction so the root's\n * `injectElementSize` observer starts and prev/next's `aria-controls` resolves.\n * There must be exactly one viewport per carousel. Unregisters on destroy, so\n * an unmounted viewport stops being observed and prev / next stop pointing\n * `aria-controls` at a dead id.\n */\n@Directive({\n selector: '[forCarouselViewport]',\n exportAs: 'forCarouselViewport',\n host: {\n '[id]': 'id()',\n 'aria-atomic': 'false',\n '[attr.aria-live]': 'ctx.rotating() ? \"off\" : \"polite\"',\n '[attr.data-orientation]': 'ctx.orientation()',\n },\n})\nexport class ForCarouselViewport {\n protected readonly ctx = injectCarouselContext('ForCarouselViewport');\n readonly #host = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /** The resolved id of this element — generated or adopted from a consumer-set static `id`. */\n readonly id = hostId('for-carousel-viewport');\n\n constructor() {\n const handle: ForCarouselViewportHandle = { host: this.#host.nativeElement, id: this.id() };\n registerHandle(\n handle,\n (h) => this.ctx.registerViewport(h),\n (h) => this.ctx.unregisterViewport(h),\n );\n }\n}\n","import { Directive } from '@angular/core';\n\nimport { injectCarouselContext } from './carousel-context';\n\n/**\n * The flex container of slides. The consumer's CSS reads\n * `--for-carousel-offset` (inherited from the root) and applies it as a\n * `transform: translateX(...)` / `translateY(...)` on this element.\n * The directive adds no animation or transform itself.\n *\n * Reflects `data-orientation` so the consumer can select the correct CSS\n * axis via `[data-orientation=\"vertical\"] [forCarouselTrack] { ... }`.\n */\n@Directive({\n selector: '[forCarouselTrack]',\n exportAs: 'forCarouselTrack',\n host: {\n '[attr.data-orientation]': 'ctx.orientation()',\n },\n})\nexport class ForCarouselTrack {\n protected readonly ctx = injectCarouselContext('ForCarouselTrack');\n}\n","import { computed, Directive, ElementRef, inject, input } from '@angular/core';\n\nimport { registerHandle } from 'forty-cdk/core';\nimport { injectCarouselContext } from './carousel-context';\n\n/**\n * One slide in the carousel track. Carries `role=\"group\"` and\n * `aria-roledescription=\"slide\"` per the WAI-ARIA APG Carousel pattern; the\n * role description is localizable through `provideForCarouselDefaults`'s\n * `slideRoleDescription`.\n *\n * The default `aria-label` is the positional `\"N of M\"` string (APG mandates\n * a positional label on each slide). Set `ariaLabel` to override with a\n * semantically richer label for the specific slide content.\n *\n * Off-view slides (outside `[activeIndex, activeIndex + slidesPerView - 1]`)\n * are hidden from the accessibility tree and focus order via\n * `aria-hidden=\"true\"` + `inert`.\n */\n@Directive({\n selector: '[forCarouselSlide]',\n exportAs: 'forCarouselSlide',\n host: {\n role: 'group',\n '[attr.aria-roledescription]': 'roleDescription()',\n '[attr.aria-label]': 'ariaLabel() || positionLabel()',\n '[attr.data-state]': 'current() ? \"active\" : \"inactive\"',\n '[attr.data-in-view]': 'inView() ? \"\" : null',\n '[attr.aria-hidden]': 'inView() ? null : \"true\"',\n '[attr.inert]': 'inView() ? null : \"\"',\n },\n})\nexport class ForCarouselSlide {\n protected readonly ctx = injectCarouselContext('ForCarouselSlide');\n readonly #host = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /**\n * Override the default positional `aria-label` (`\"N of M\"`). Use this to\n * provide a semantically richer label when the slide's content has a\n * meaningful title (e.g. the product name). When `null` (default), the\n * positional label is used automatically. Localize that default format\n * app-wide via `provideForCarouselDefaults`'s `slideLabel`.\n */\n readonly ariaLabel = input<string | null>(null);\n\n readonly #index = computed(() => this.ctx.indexOfSlide(this.#host.nativeElement));\n\n /** Whether this is the current (active) slide. */\n protected readonly current = computed(() => this.ctx.isCurrent(this.#index()));\n\n /** Whether this slide is within the visible window. */\n protected readonly inView = computed(() => this.ctx.isInView(this.#index()));\n\n protected readonly roleDescription = computed(() => this.ctx.slideRoleDescription());\n\n /** The positional `\"N of M\"` label used when no explicit `ariaLabel` is set. */\n protected readonly positionLabel = computed(() => {\n const i = this.#index();\n return i < 0 ? null : this.ctx.slideLabel(i + 1);\n });\n\n constructor() {\n const handle = { host: this.#host.nativeElement };\n registerHandle(\n handle,\n (h) => this.ctx.registerSlide(h),\n (h) => this.ctx.unregisterSlide(h),\n );\n }\n}\n","import { computed, Directive, input } from '@angular/core';\n\nimport { hostButtonType, hostAriaLabel } from 'forty-cdk/core';\nimport { injectCarouselContext } from './carousel-context';\n\n/**\n * Previous-slide button. Apply on a `<button>` so Enter/Space activation is\n * native. Disabled at index 0 when the carousel is not looping; when `loop` is\n * `true` it is never disabled.\n *\n * Reflects the disabled state through `aria-disabled` + `data-disabled` only —\n * never the native `disabled` attribute — so a button that auto-disables at\n * index 0 while focused keeps DOM focus instead of being ejected from the focus\n * order. Activation is a no-op while disabled.\n *\n * Points `aria-controls` at the viewport's id so screen readers announce the\n * relationship. Clicking does not move focus (APG).\n */\n@Directive({\n selector: '[forCarouselPrevious]',\n exportAs: 'forCarouselPrevious',\n host: {\n '[attr.type]': 'buttonType()',\n '[attr.aria-label]': 'resolvedAriaLabel()',\n '[attr.aria-controls]': 'ctx.viewportId()',\n '[attr.aria-disabled]': 'isDisabled() ? \"true\" : null',\n '[attr.data-disabled]': 'isDisabled() ? \"\" : null',\n '(click)': 'activate()',\n },\n})\nexport class ForCarouselPrevious {\n protected readonly buttonType = hostButtonType();\n\n protected readonly ctx = injectCarouselContext('ForCarouselPrevious');\n\n /**\n * Accessible label for this button (e.g. \"Previous slide\"). When `null`\n * (default), no `aria-label` is emitted — the consumer should supply a\n * visible label or set this input.\n */\n readonly ariaLabel = input<string | null>(null);\n\n protected readonly resolvedAriaLabel = hostAriaLabel(() => this.ariaLabel() || null);\n\n protected readonly isDisabled = computed(() => !this.ctx.canScrollPrev());\n\n protected activate(): void {\n if (this.isDisabled()) {\n return;\n }\n this.ctx.scrollPrev();\n }\n}\n","import { computed, Directive, input } from '@angular/core';\n\nimport { hostButtonType, hostAriaLabel } from 'forty-cdk/core';\nimport { injectCarouselContext } from './carousel-context';\n\n/**\n * Next-slide button. Apply on a `<button>` so Enter/Space activation is\n * native. Disabled at the last index when the carousel is not looping; when\n * `loop` is `true` it is never disabled.\n *\n * Reflects the disabled state through `aria-disabled` + `data-disabled` only —\n * never the native `disabled` attribute — so a button that auto-disables at the\n * last slide while focused keeps DOM focus instead of being ejected from the\n * focus order. Activation is a no-op while disabled.\n *\n * Points `aria-controls` at the viewport's id so screen readers announce the\n * relationship. Clicking does not move focus (APG).\n */\n@Directive({\n selector: '[forCarouselNext]',\n exportAs: 'forCarouselNext',\n host: {\n '[attr.type]': 'buttonType()',\n '[attr.aria-label]': 'resolvedAriaLabel()',\n '[attr.aria-controls]': 'ctx.viewportId()',\n '[attr.aria-disabled]': 'isDisabled() ? \"true\" : null',\n '[attr.data-disabled]': 'isDisabled() ? \"\" : null',\n '(click)': 'activate()',\n },\n})\nexport class ForCarouselNext {\n protected readonly buttonType = hostButtonType();\n\n protected readonly ctx = injectCarouselContext('ForCarouselNext');\n\n /**\n * Accessible label for this button (e.g. \"Next slide\"). When `null`\n * (default), no `aria-label` is emitted — the consumer should supply a\n * visible label or set this input.\n */\n readonly ariaLabel = input<string | null>(null);\n\n protected readonly resolvedAriaLabel = hostAriaLabel(() => this.ariaLabel() || null);\n\n protected readonly isDisabled = computed(() => !this.ctx.canScrollNext());\n\n protected activate(): void {\n if (this.isDisabled()) {\n return;\n }\n this.ctx.scrollNext();\n }\n}\n","import { Directive, input } from '@angular/core';\n\nimport { hostAriaLabel } from 'forty-cdk/core';\n\nimport { injectCarouselContext } from './carousel-context';\n\n/**\n * The slide-picker group (dot navigation). Renders as `role=\"group\"` and\n * should receive an `ariaLabel` describing its purpose (e.g. \"Choose slide\n * to display\") per the WAI-ARIA APG Carousel pattern.\n *\n * Keyboard navigation (ArrowLeft/Right, Home/End) and automatic activation\n * live on each `[forCarouselIndicator]` child, not on this container.\n */\n@Directive({\n selector: '[forCarouselIndicators]',\n exportAs: 'forCarouselIndicators',\n host: {\n role: 'group',\n '[attr.aria-label]': 'resolvedAriaLabel()',\n '[attr.data-orientation]': 'ctx.orientation()',\n },\n})\nexport class ForCarouselIndicators {\n protected readonly ctx = injectCarouselContext('ForCarouselIndicators');\n\n /**\n * Accessible label for the picker group (e.g. \"Choose slide to display\").\n * APG recommends labelling the group so screen readers can distinguish it\n * from other landmarks.\n */\n readonly ariaLabel = input<string | null>(null);\n\n protected readonly resolvedAriaLabel = hostAriaLabel(() => this.ariaLabel() || null);\n}\n","import { booleanAttribute, computed, Directive, ElementRef, inject, input } from '@angular/core';\n\nimport {\n hostButtonType,\n navigateFromRovingItem,\n registerHandle,\n rovingTabStop,\n} from 'forty-cdk/core';\nimport { injectCarouselContext } from './carousel-context';\n\n/**\n * One indicator (dot) in the slide picker. Apply on a `<button>` so\n * Enter/Space activation is native. Uses roving tabindex — only the current\n * dot owns `tabindex=0`; all others have `tabindex=-1`. Arrow/Home/End\n * navigation activates the target slide automatically (APG \"grouped/tabbed\n * picker\" variant).\n *\n * The current indicator is marked with `aria-current=\"true\"` (truthy-only).\n * Disabled indicators receive `aria-disabled=\"true\"` and `data-disabled` but\n * stay focusable (custom-role rule) so assistive tech can announce them.\n */\n@Directive({\n selector: '[forCarouselIndicator]',\n exportAs: 'forCarouselIndicator',\n host: {\n '[attr.type]': 'buttonType()',\n '[attr.aria-label]': 'ariaLabel() || positionLabel()',\n '[attr.aria-current]': 'current() ? \"true\" : null',\n '[attr.data-state]': 'current() ? \"active\" : \"inactive\"',\n '[attr.data-disabled]': 'disabled() ? \"\" : null',\n '[attr.aria-disabled]': 'disabled() ? \"true\" : null',\n '[attr.tabindex]': 'tabindex()',\n '(click)': 'onClick()',\n '(focus)': 'onFocus()',\n '(keydown)': 'onKeyDown($event)',\n },\n})\nexport class ForCarouselIndicator {\n protected readonly buttonType = hostButtonType();\n\n protected readonly ctx = injectCarouselContext('ForCarouselIndicator');\n readonly #host = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /**\n * Override the default positional `aria-label` (e.g. `\"Go to slide 1\"`).\n * Use this to provide a more descriptive label when the slide has a title.\n * Localize that default format app-wide via `provideForCarouselDefaults`'s\n * `indicatorLabel`.\n */\n readonly ariaLabel = input<string | null>(null);\n\n /**\n * Disables this indicator. Disabled indicators remain focusable (for\n * assistive tech) but ignore click and keyboard activation.\n */\n readonly disabled = input(false, { transform: booleanAttribute });\n\n readonly #index = computed(() => this.ctx.indexOfIndicator(this.#host.nativeElement));\n\n /** Whether this indicator corresponds to the current active slide. */\n protected readonly current = computed(() => this.ctx.isCurrent(this.#index()));\n\n /** Default positional label used when no explicit `ariaLabel` is set. */\n protected readonly positionLabel = computed(() => {\n const i = this.#index();\n return i < 0 ? null : this.ctx.indicatorLabel(i + 1);\n });\n\n /**\n * APG roving tabindex: user-driven roving owns it once any indicator has\n * been focused. Before that, fall back to \"current slide's indicator, else\n * first enabled\".\n */\n protected readonly tabindex = computed<-1 | 0>(() =>\n rovingTabStop({\n disabled: this.disabled(),\n selected: this.current(),\n hasSelected: this.ctx.hasCurrentIndicator(),\n isFirstEnabled: this.ctx.isFirstEnabledIndicator(this.#host.nativeElement),\n roving: this.ctx.roving,\n host: this.#host.nativeElement,\n }),\n );\n\n constructor() {\n const handle = { host: this.#host.nativeElement, disabled: this.disabled };\n registerHandle(\n handle,\n (h) => this.ctx.registerIndicator(h),\n (h) => this.ctx.unregisterIndicator(h),\n );\n }\n\n protected onClick(): void {\n if (this.disabled()) {\n return;\n }\n this.ctx.scrollTo(this.#index());\n }\n\n protected onFocus(): void {\n if (this.disabled()) {\n return;\n }\n this.ctx.roving.setActive(this.#host.nativeElement);\n }\n\n protected onKeyDown(event: KeyboardEvent): void {\n navigateFromRovingItem(event, {\n groupDisabled: false,\n orientation: this.ctx.orientation(),\n dir: this.ctx.dir(),\n navigate: (action) => this.ctx.navigate(this.#host.nativeElement, action),\n });\n }\n}\n","import { computed, Directive, inject, input } from '@angular/core';\n\nimport { hostButtonType, resolveTextInput } from 'forty-cdk/core';\nimport { injectCarouselContext } from './carousel-context';\nimport { FOR_CAROUSEL_DEFAULTS } from 'forty-cdk/defaults';\n\n/**\n * Play/pause control for carousel auto-rotation. Apply on a `<button>` so\n * Enter/Space activation is native. Its accessible name swaps with the\n * rotation state — `stopLabel` while rotating, `startLabel` while stopped —\n * per the WAI-ARIA APG Carousel pattern, which forbids `aria-pressed` here.\n * Both labels default to the scope's `rotationStopLabel` / `rotationStartLabel`\n * (`provideForCarouselDefaults`), so they can be localized centrally.\n *\n * Place this control **first** in the carousel's DOM/tab order so assistive\n * technology users meet it before the rotating content (APG requirement).\n *\n * Reflects a boolean `data-playing` attribute (present while rotation is on)\n * as the styling hook for swapping a play/pause icon.\n */\n@Directive({\n selector: '[forCarouselRotationControl]',\n exportAs: 'forCarouselRotationControl',\n host: {\n '[attr.type]': 'buttonType()',\n '[attr.aria-label]': 'label()',\n '[attr.data-playing]': 'ctx.playing() ? \"\" : null',\n '(click)': 'ctx.toggleAutoplay()',\n },\n})\nexport class ForCarouselRotationControl {\n protected readonly buttonType = hostButtonType();\n\n protected readonly ctx = injectCarouselContext('ForCarouselRotationControl');\n readonly #defaults = inject(FOR_CAROUSEL_DEFAULTS);\n\n /**\n * Accessible name shown while rotation is **stopped** (the button will start\n * it). Defaults to the scope's `rotationStartLabel` (`'Start automatic slide\n * show'` unless overridden via `provideForCarouselDefaults`); set `null` to\n * drop `aria-label` when the button already carries a visible text label.\n */\n readonly startLabel = input<string | null>();\n\n /**\n * Accessible name shown while rotation is **playing** (the button will stop\n * it). Defaults to the scope's `rotationStopLabel` (`'Stop automatic slide\n * show'` unless overridden via `provideForCarouselDefaults`); set `null` to\n * drop `aria-label` when the button already carries a visible text label.\n */\n readonly stopLabel = input<string | null>();\n\n /** The current accessible name — `stopLabel` while playing, else `startLabel`. */\n protected readonly label = computed(\n () =>\n (this.ctx.playing()\n ? resolveTextInput(this.stopLabel(), this.#defaults.rotationStopLabel)\n : resolveTextInput(this.startLabel(), this.#defaults.rotationStartLabel)) || null,\n );\n}\n","import {\n booleanAttribute,\n computed,\n DestroyRef,\n Directive,\n ElementRef,\n inject,\n input,\n PLATFORM_ID,\n signal,\n} from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\n\nimport {\n attachSwipeDismiss,\n type SwipeDirection,\n type SwipeEventDetail,\n isScrollableAtEdge,\n injectPrefersReducedMotion,\n flickVelocity,\n FLICK_STALE_VELOCITY_MS,\n FLICK_VELOCITY_PX_PER_MS,\n} from 'forty-cdk/core';\nimport { injectCarouselContext } from './carousel-context';\n\n/**\n * Opt-in pointer drag / swipe directive for the Carousel viewport. Apply on the\n * `[forCarouselViewport]` element to enable horizontal or vertical drag-to-navigate.\n *\n * Publishes `--for-carousel-swipe-movement-x` (horizontal) or\n * `--for-carousel-swipe-movement-y` (vertical) in px during the gesture — only\n * the property matching `orientation` is written — so the consumer can\n * compose it with `--for-carousel-offset` for live track motion. Reflects\n * `data-dragging` while the gesture is armed. Sets `touch-action` automatically\n * to free the cross axis for page scrolling.\n *\n * Under `prefers-reduced-motion: reduce` the live offset is suppressed, but the\n * gesture still snaps `activeIndex` on release (D3).\n */\n@Directive({\n selector: '[forCarouselDrag]',\n exportAs: 'forCarouselDrag',\n host: {\n '[style.--for-carousel-swipe-movement-x]': 'swipeMovementX()',\n '[style.--for-carousel-swipe-movement-y]': 'swipeMovementY()',\n '[attr.data-dragging]': \"dragging() ? '' : null\",\n '[style.touch-action]': 'touchAction()',\n '(dragstart)': 'onDragStart($event)',\n },\n})\nexport class ForCarouselDrag {\n protected readonly ctx = injectCarouselContext('ForCarouselDrag');\n\n /** Disable pointer drag without removing the directive. Default `false`. */\n readonly disabled = input(false, { transform: booleanAttribute });\n\n readonly #host = inject<ElementRef<HTMLElement>>(ElementRef);\n readonly #destroyRef = inject(DestroyRef);\n readonly #isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n readonly #prefersReducedMotion = injectPrefersReducedMotion();\n\n readonly #dragging = signal(false);\n readonly #dragPx = signal(0);\n\n /** Whether a drag gesture is currently armed (reflected as `data-dragging`). */\n readonly dragging = this.#dragging.asReadonly();\n\n /** `touch-action` for the viewport: capture the primary axis, free the cross axis. */\n readonly touchAction = computed<string | null>(() => {\n if (this.disabled()) return null;\n return this.ctx.orientation() === 'vertical' ? 'pan-x' : 'pan-y';\n });\n\n /** Live px displacement along the primary axis; `null` at rest and under reduced motion (D3). */\n readonly #swipeMovement = computed<string | null>(() => {\n if (this.#prefersReducedMotion()) return null;\n const px = this.#dragPx();\n return this.#dragging() && px !== 0 ? `${px}px` : null;\n });\n\n /** Live px displacement published as `--for-carousel-swipe-movement-x`; `null` on a vertical carousel. */\n readonly swipeMovementX = computed<string | null>(() =>\n this.ctx.orientation() === 'vertical' ? null : this.#swipeMovement(),\n );\n\n /** Live px displacement published as `--for-carousel-swipe-movement-y`; `null` on a horizontal carousel. */\n readonly swipeMovementY = computed<string | null>(() =>\n this.ctx.orientation() === 'vertical' ? this.#swipeMovement() : null,\n );\n\n #startPrimary = 0;\n #lastPrimary = 0;\n #lastTime = 0;\n #velocity = 0;\n #slideSizePx = 0;\n\n constructor() {\n if (!this.#isBrowser) return;\n const cleanup = attachSwipeDismiss({\n element: this.#host.nativeElement,\n getDirections: () => this.#directions(),\n getThreshold: () => 1,\n canBegin: (d) => this.#canBegin(d),\n onSwipeStart: (d) => this.#onStart(d),\n onSwipeMove: (d) => this.#onMove(d),\n onSwipeEnd: (d) => this.#onRelease(d),\n onSwipeCancel: (d) => this.#onRelease(d),\n });\n this.#destroyRef.onDestroy(cleanup);\n }\n\n protected onDragStart(event: Event): void {\n if (this.#dragging()) event.preventDefault();\n }\n\n #directions(): readonly SwipeDirection[] {\n if (this.disabled()) return [];\n return this.ctx.orientation() === 'vertical' ? ['up', 'down'] : ['left', 'right'];\n }\n\n #primary(event: PointerEvent): number {\n return this.ctx.orientation() === 'vertical' ? event.clientY : event.clientX;\n }\n\n /** +1 if a positive primary-axis delta moves toward a higher index, else -1. */\n #nextPerPx(): number {\n // horizontal LTR: finger left (clientX↓) → next → -1\n // horizontal RTL: finger right (clientX↑) → next → +1\n // vertical: finger up (clientY↓) → next → -1\n return this.ctx.orientation() === 'horizontal' && this.ctx.dir() === 'rtl' ? 1 : -1;\n }\n\n #canBegin(detail: SwipeEventDetail): boolean {\n const target = detail.originalEvent.target as Element | null;\n return !(target && isScrollableAtEdge(target, detail.direction, this.#host.nativeElement));\n }\n\n #onStart(detail: SwipeEventDetail): void {\n const rect = this.#host.nativeElement.getBoundingClientRect();\n const axisSize = this.ctx.orientation() === 'vertical' ? rect.height : rect.width;\n this.#slideSizePx = axisSize / Math.max(1, this.ctx.slidesPerView());\n\n const p = this.#primary(detail.originalEvent);\n this.#startPrimary = p;\n this.#lastPrimary = p;\n this.#lastTime = detail.originalEvent.timeStamp || 0;\n this.#velocity = 0;\n this.#dragPx.set(0);\n this.#dragging.set(true);\n }\n\n #onMove(detail: SwipeEventDetail): void {\n if (!this.#dragging()) return;\n const event = detail.originalEvent;\n const p = this.#primary(event);\n const now = event.timeStamp || this.#lastTime + 1;\n const dt = Math.max(1, now - this.#lastTime);\n this.#velocity = (p - this.#lastPrimary) / dt;\n this.#lastPrimary = p;\n this.#lastTime = now;\n this.#dragPx.set(p - this.#startPrimary);\n }\n\n #onRelease(detail: SwipeEventDetail): void {\n if (!this.#dragging()) return;\n const dragPx = this.#dragPx();\n const releaseTime = detail.originalEvent.timeStamp || this.#lastTime;\n const staleVelocity = releaseTime - this.#lastTime > FLICK_STALE_VELOCITY_MS;\n this.#dragging.set(false);\n this.#dragPx.set(0);\n\n if (this.#slideSizePx <= 0) return;\n\n const sign = this.#nextPerPx();\n const slidesDragged = (dragPx * sign) / this.#slideSizePx;\n const velocityTowardNext = flickVelocity(this.#velocity * sign, staleVelocity);\n const target = resolveDragIndex(this.ctx.activeIndex(), slidesDragged, velocityTowardNext);\n this.ctx.scrollTo(target);\n }\n}\n\n/**\n * Pure nearest-index snap with velocity bias. `slidesDragged` is signed (positive\n * toward a higher index); `velocityTowardNext` is px/ms (positive toward a higher\n * index). A fast flick rounds toward the flick direction instead of to nearest.\n * Returns a raw (possibly out-of-range) index; the caller's `scrollTo` normalizes it.\n */\nexport function resolveDragIndex(\n activeIndex: number,\n slidesDragged: number,\n velocityTowardNext: number,\n): number {\n const float = activeIndex + slidesDragged;\n if (velocityTowardNext >= FLICK_VELOCITY_PX_PER_MS) return Math.ceil(float);\n if (velocityTowardNext <= -FLICK_VELOCITY_PX_PER_MS) return Math.floor(float);\n return Math.round(float);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|