{"version":3,"file":"forty-cdk-carousel.mjs","sources":["../../../projects/forty-cdk/carousel/src/carousel-context.ts","../../../projects/forty-cdk/carousel/src/carousel-defaults.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';\n\n/** Alignment of the active slide within the viewport. */\nexport type CarouselAlign = 'start' | 'center' | 'end';\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\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 { type Provider } from '@angular/core';\n\nimport { createDefaults } from 'forty-cdk/core';\nimport { type CarouselAlign } from './carousel-context';\n\n/**\n * Defaults inherited by descendant carousels in the surrounding injector scope.\n * Configure with `provideForCarouselDefaults` either at the application root\n * or in any component's `providers` array; partial overrides merge with\n * the parent scope.\n */\nexport interface ForCarouselDefaults {\n  /**\n   * Whether index wrap-around is enabled. When `true`, `next` past the last\n   * slide wraps to index 0 and `prev` before index 0 wraps to the last slide.\n   */\n  loop: boolean;\n  /**\n   * Alignment of the active slide within the viewport. `'start'` (default):\n   * the active slide's leading edge aligns with the viewport's leading edge.\n   * `'center'` / `'end'` offset accordingly.\n   */\n  align: CarouselAlign;\n  /**\n   * Number of slides visible simultaneously in the viewport. Slide width is\n   * set to `100% / slidesPerView` by the consumer's CSS.\n   */\n  slidesPerView: number;\n  /**\n   * When `true` (and the carousel is not looping), clamps the track offset so the\n   * trailing slides align flush to the viewport's trailing edge instead of\n   * overscrolling into empty space when `slidesPerView > 1`. The indicator/slide\n   * mapping is unchanged — only the visual offset is contained. Default `false`.\n   */\n  containScroll: boolean;\n  /** Whether the carousel auto-rotates on mount (when not under reduced-motion). Default `false`. */\n  autoplay: boolean;\n  /** Milliseconds between automatic slide advances. Default `5000`. */\n  autoplayInterval: number;\n  /**\n   * Builds the default positional `aria-label` for each slide (`\"N of M\"`).\n   * Override to localize centrally. `position` is the 1-based slide index and\n   * `total` is the slide count. A per-slide `ariaLabel` still takes precedence.\n   */\n  slideLabel: (position: number, total: number) => string;\n  /**\n   * Builds the default `aria-label` for each indicator dot (`\"Go to slide N\"`).\n   * Override to localize centrally. `position` is the 1-based slide index. A\n   * per-indicator `ariaLabel` still takes precedence.\n   */\n  indicatorLabel: (position: number) => string;\n  /**\n   * Accessible name for `[forCarouselRotationControl]` while rotation is\n   * **stopped** (activating the control starts it), for controls that don't set\n   * `[startLabel]` locally. Localize it here to translate every carousel\n   * rotation control in the scope.\n   */\n  rotationStartLabel: string;\n  /**\n   * Accessible name for `[forCarouselRotationControl]` while rotation is\n   * **playing** (activating the control stops it), for controls that don't set\n   * `[stopLabel]` locally. Localize it here to translate every carousel\n   * rotation control in the scope.\n   */\n  rotationStopLabel: string;\n}\n\n/**\n * Library fallback for carousel defaults, read at the root injector when no\n * consumer has called `provideForCarouselDefaults`. Exported for the shared\n * defaults contract spec; not re-exported from the primitive's public entry.\n */\nexport const FOR_CAROUSEL_FALLBACK_DEFAULTS: ForCarouselDefaults = {\n  loop: false,\n  align: 'start',\n  slidesPerView: 1,\n  containScroll: false,\n  autoplay: false,\n  autoplayInterval: 5000,\n  slideLabel: (position, total) => `${position} of ${total}`,\n  indicatorLabel: (position) => `Go to slide ${position}`,\n  rotationStartLabel: 'Start automatic slide show',\n  rotationStopLabel: 'Stop automatic slide show',\n};\n\nconst { token, provideDefaults } = createDefaults<ForCarouselDefaults>(\n  'FOR_CAROUSEL_DEFAULTS',\n  FOR_CAROUSEL_FALLBACK_DEFAULTS,\n);\n\n/** Token holding the resolved carousel defaults for the current scope. */\nexport const FOR_CAROUSEL_DEFAULTS = token;\n\n/**\n * Configures forty-cdk carousel defaults for this injector scope. Partial\n * overrides inherit unspecified keys from the parent scope (or library\n * defaults at the root).\n */\nexport function provideForCarouselDefaults(\n  defaults: Partial<ForCarouselDefaults> = {},\n): Provider[] {\n  return provideDefaults(defaults);\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  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 './carousel-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    'aria-roledescription': 'carousel',\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  /**\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  /** 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.\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    'aria-roledescription': 'slide',\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  /** 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 } from 'forty-cdk/core';\nimport { injectCarouselContext } from './carousel-context';\nimport { FOR_CAROUSEL_DEFAULTS } from './carousel-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>(this.#defaults.rotationStartLabel);\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>(this.#defaults.rotationStopLabel);\n\n  /** The current accessible name — `stopLabel` while playing, else `startLabel`. */\n  protected readonly label = computed(\n    () => (this.ctx.playing() ? this.stopLabel() : this.startLabel()) || 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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"}