@cdevhub/ngx-tw 0.5.0 → 0.6.1
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/README.md +78 -15
- package/fesm2022/cdevhub-ngx-tw-accordion.mjs +16 -5
- package/fesm2022/cdevhub-ngx-tw-accordion.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-avatar.mjs +26 -15
- package/fesm2022/cdevhub-ngx-tw-avatar.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-badge.mjs +17 -5
- package/fesm2022/cdevhub-ngx-tw-badge.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-breadcrumbs.mjs +27 -6
- package/fesm2022/cdevhub-ngx-tw-breadcrumbs.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-button.mjs +23 -11
- package/fesm2022/cdevhub-ngx-tw-button.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-calendar-luxon.mjs +5 -5
- package/fesm2022/cdevhub-ngx-tw-calendar-luxon.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-calendar-testing.mjs +3 -3
- package/fesm2022/cdevhub-ngx-tw-calendar-testing.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-calendar.mjs +427 -122
- package/fesm2022/cdevhub-ngx-tw-calendar.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-card.mjs +21 -11
- package/fesm2022/cdevhub-ngx-tw-card.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-carousel.mjs +215 -96
- package/fesm2022/cdevhub-ngx-tw-carousel.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-checkbox.mjs +108 -64
- package/fesm2022/cdevhub-ngx-tw-checkbox.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-code-block.mjs +18 -6
- package/fesm2022/cdevhub-ngx-tw-code-block.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-collapsible.mjs +55 -30
- package/fesm2022/cdevhub-ngx-tw-collapsible.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-combobox-testing.mjs +218 -0
- package/fesm2022/cdevhub-ngx-tw-combobox-testing.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-combobox.mjs +236 -211
- package/fesm2022/cdevhub-ngx-tw-combobox.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-command-palette-testing.mjs +200 -0
- package/fesm2022/cdevhub-ngx-tw-command-palette-testing.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-command-palette.mjs +34 -7
- package/fesm2022/cdevhub-ngx-tw-command-palette.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-core.mjs +135 -15
- package/fesm2022/cdevhub-ngx-tw-core.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-date-picker-testing.mjs +203 -0
- package/fesm2022/cdevhub-ngx-tw-date-picker-testing.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-date-picker.mjs +160 -102
- package/fesm2022/cdevhub-ngx-tw-date-picker.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-date-range-picker-testing.mjs +209 -0
- package/fesm2022/cdevhub-ngx-tw-date-range-picker-testing.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-date-range-picker.mjs +182 -107
- package/fesm2022/cdevhub-ngx-tw-date-range-picker.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-dialog-testing.mjs +122 -0
- package/fesm2022/cdevhub-ngx-tw-dialog-testing.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-dialog.mjs +11 -2
- package/fesm2022/cdevhub-ngx-tw-dialog.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-empty-state.mjs +1 -1
- package/fesm2022/cdevhub-ngx-tw-empty-state.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-file-upload-testing.mjs +149 -0
- package/fesm2022/cdevhub-ngx-tw-file-upload-testing.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-file-upload.mjs +57 -67
- package/fesm2022/cdevhub-ngx-tw-file-upload.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-flip-card.mjs +42 -24
- package/fesm2022/cdevhub-ngx-tw-flip-card.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-form-field.mjs +114 -21
- package/fesm2022/cdevhub-ngx-tw-form-field.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-icon.mjs +16 -6
- package/fesm2022/cdevhub-ngx-tw-icon.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-input.mjs +52 -61
- package/fesm2022/cdevhub-ngx-tw-input.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-item.mjs +28 -4
- package/fesm2022/cdevhub-ngx-tw-item.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-menu-testing.mjs +168 -0
- package/fesm2022/cdevhub-ngx-tw-menu-testing.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-menu.mjs +58 -21
- package/fesm2022/cdevhub-ngx-tw-menu.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-number-input.mjs +34 -1
- package/fesm2022/cdevhub-ngx-tw-number-input.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-paginator.mjs +95 -45
- package/fesm2022/cdevhub-ngx-tw-paginator.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-popover.mjs +81 -32
- package/fesm2022/cdevhub-ngx-tw-popover.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-progress-bar.mjs +1 -1
- package/fesm2022/cdevhub-ngx-tw-progress-bar.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-radio.mjs +131 -98
- package/fesm2022/cdevhub-ngx-tw-radio.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-segmented-control.mjs +207 -42
- package/fesm2022/cdevhub-ngx-tw-segmented-control.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-select-testing.mjs +165 -0
- package/fesm2022/cdevhub-ngx-tw-select-testing.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-select.mjs +386 -210
- package/fesm2022/cdevhub-ngx-tw-select.mjs.map +1 -1
- package/fesm2022/{cdevhub-ngx-tw-sheet-sheet-renderer-ByyNluUd.mjs → cdevhub-ngx-tw-sheet-sheet-renderer-CqVJwgmp.mjs} +3 -3
- package/fesm2022/cdevhub-ngx-tw-sheet-sheet-renderer-CqVJwgmp.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-sheet-testing.mjs +129 -0
- package/fesm2022/cdevhub-ngx-tw-sheet-testing.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-sheet.mjs +23 -7
- package/fesm2022/cdevhub-ngx-tw-sheet.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-slider.mjs +89 -54
- package/fesm2022/cdevhub-ngx-tw-slider.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-sort.mjs +122 -17
- package/fesm2022/cdevhub-ngx-tw-sort.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-split.mjs +72 -19
- package/fesm2022/cdevhub-ngx-tw-split.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-stat.mjs +63 -25
- package/fesm2022/cdevhub-ngx-tw-stat.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-stepper.mjs +35 -8
- package/fesm2022/cdevhub-ngx-tw-stepper.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-switch.mjs +54 -48
- package/fesm2022/cdevhub-ngx-tw-switch.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-tab-nav.mjs +12 -15
- package/fesm2022/cdevhub-ngx-tw-tab-nav.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-table.mjs +74 -13
- package/fesm2022/cdevhub-ngx-tw-table.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-tabs.mjs +84 -30
- package/fesm2022/cdevhub-ngx-tw-tabs.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-tags-input-testing.mjs +172 -0
- package/fesm2022/cdevhub-ngx-tw-tags-input-testing.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-tags-input.mjs +107 -71
- package/fesm2022/cdevhub-ngx-tw-tags-input.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-textarea.mjs +41 -9
- package/fesm2022/cdevhub-ngx-tw-textarea.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-theme.mjs +257 -45
- package/fesm2022/cdevhub-ngx-tw-theme.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-time-picker-testing.mjs +201 -0
- package/fesm2022/cdevhub-ngx-tw-time-picker-testing.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-time-picker.mjs +184 -77
- package/fesm2022/cdevhub-ngx-tw-time-picker.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-timeline.mjs +110 -27
- package/fesm2022/cdevhub-ngx-tw-timeline.mjs.map +1 -1
- package/fesm2022/{cdevhub-ngx-tw-toast-toast-renderer-DSu4YoTy.mjs → cdevhub-ngx-tw-toast-toast-renderer-BlDxemsU.mjs} +107 -19
- package/fesm2022/cdevhub-ngx-tw-toast-toast-renderer-BlDxemsU.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-toast.mjs +21 -13
- package/fesm2022/cdevhub-ngx-tw-toast.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-tooltip.mjs +102 -15
- package/fesm2022/cdevhub-ngx-tw-tooltip.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-transfer-testing.mjs +219 -0
- package/fesm2022/cdevhub-ngx-tw-transfer-testing.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-transfer.mjs +88 -69
- package/fesm2022/cdevhub-ngx-tw-transfer.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-tree.mjs +68 -19
- package/fesm2022/cdevhub-ngx-tw-tree.mjs.map +1 -1
- package/index.json +1 -1
- package/package.json +63 -2
- package/theme/_base.css +13 -0
- package/theme/_dark.css +111 -36
- package/theme/_high-contrast-dark.css +367 -0
- package/theme/_high-contrast.css +13 -2
- package/theme/_light.css +332 -0
- package/theme/_semantic.css +60 -26
- package/theme/_typography.css +17 -0
- package/theme/index.css +86 -7
- package/types/cdevhub-ngx-tw-accordion.d.ts +12 -4
- package/types/cdevhub-ngx-tw-avatar.d.ts +10 -3
- package/types/cdevhub-ngx-tw-button.d.ts +1 -0
- package/types/cdevhub-ngx-tw-calendar-luxon.d.ts +2 -2
- package/types/cdevhub-ngx-tw-calendar-testing.d.ts +1 -1
- package/types/cdevhub-ngx-tw-calendar.d.ts +179 -73
- package/types/cdevhub-ngx-tw-card.d.ts +11 -3
- package/types/cdevhub-ngx-tw-carousel.d.ts +89 -20
- package/types/cdevhub-ngx-tw-checkbox.d.ts +40 -12
- package/types/cdevhub-ngx-tw-code-block.d.ts +11 -2
- package/types/cdevhub-ngx-tw-collapsible.d.ts +32 -5
- package/types/cdevhub-ngx-tw-combobox-testing.d.ts +157 -0
- package/types/cdevhub-ngx-tw-combobox.d.ts +94 -53
- package/types/cdevhub-ngx-tw-command-palette-testing.d.ts +136 -0
- package/types/cdevhub-ngx-tw-command-palette.d.ts +33 -5
- package/types/cdevhub-ngx-tw-core.d.ts +152 -21
- package/types/cdevhub-ngx-tw-date-picker-testing.d.ts +141 -0
- package/types/cdevhub-ngx-tw-date-picker.d.ts +37 -29
- package/types/cdevhub-ngx-tw-date-range-picker-testing.d.ts +148 -0
- package/types/cdevhub-ngx-tw-date-range-picker.d.ts +36 -29
- package/types/cdevhub-ngx-tw-dialog-testing.d.ts +98 -0
- package/types/cdevhub-ngx-tw-dialog.d.ts +12 -3
- package/types/cdevhub-ngx-tw-file-upload-testing.d.ts +120 -0
- package/types/cdevhub-ngx-tw-file-upload.d.ts +8 -10
- package/types/cdevhub-ngx-tw-flip-card.d.ts +18 -11
- package/types/cdevhub-ngx-tw-form-field.d.ts +19 -2
- package/types/cdevhub-ngx-tw-icon.d.ts +3 -3
- package/types/cdevhub-ngx-tw-input.d.ts +5 -8
- package/types/cdevhub-ngx-tw-item.d.ts +2 -0
- package/types/cdevhub-ngx-tw-menu-testing.d.ts +131 -0
- package/types/cdevhub-ngx-tw-menu.d.ts +2 -2
- package/types/cdevhub-ngx-tw-number-input.d.ts +20 -0
- package/types/cdevhub-ngx-tw-paginator.d.ts +58 -24
- package/types/cdevhub-ngx-tw-popover.d.ts +41 -10
- package/types/cdevhub-ngx-tw-progress-bar.d.ts +1 -1
- package/types/cdevhub-ngx-tw-radio.d.ts +68 -25
- package/types/cdevhub-ngx-tw-segmented-control.d.ts +79 -16
- package/types/cdevhub-ngx-tw-select-testing.d.ts +114 -0
- package/types/cdevhub-ngx-tw-select.d.ts +104 -33
- package/types/cdevhub-ngx-tw-sheet-testing.d.ts +104 -0
- package/types/cdevhub-ngx-tw-sheet.d.ts +19 -3
- package/types/cdevhub-ngx-tw-slider.d.ts +79 -25
- package/types/cdevhub-ngx-tw-sort.d.ts +45 -4
- package/types/cdevhub-ngx-tw-split.d.ts +32 -2
- package/types/cdevhub-ngx-tw-stat.d.ts +14 -4
- package/types/cdevhub-ngx-tw-stepper.d.ts +16 -2
- package/types/cdevhub-ngx-tw-switch.d.ts +35 -13
- package/types/cdevhub-ngx-tw-tab-nav.d.ts +7 -6
- package/types/cdevhub-ngx-tw-table.d.ts +53 -10
- package/types/cdevhub-ngx-tw-tabs.d.ts +41 -10
- package/types/cdevhub-ngx-tw-tags-input-testing.d.ts +135 -0
- package/types/cdevhub-ngx-tw-tags-input.d.ts +26 -11
- package/types/cdevhub-ngx-tw-textarea.d.ts +3 -2
- package/types/cdevhub-ngx-tw-theme.d.ts +245 -39
- package/types/cdevhub-ngx-tw-time-picker-testing.d.ts +129 -0
- package/types/cdevhub-ngx-tw-time-picker.d.ts +76 -19
- package/types/cdevhub-ngx-tw-timeline.d.ts +36 -12
- package/types/cdevhub-ngx-tw-toast.d.ts +20 -6
- package/types/cdevhub-ngx-tw-tooltip.d.ts +28 -6
- package/types/cdevhub-ngx-tw-transfer-testing.d.ts +152 -0
- package/types/cdevhub-ngx-tw-transfer.d.ts +21 -8
- package/types/cdevhub-ngx-tw-tree.d.ts +6 -1
- package/fesm2022/cdevhub-ngx-tw-sheet-sheet-renderer-ByyNluUd.mjs.map +0 -1
- package/fesm2022/cdevhub-ngx-tw-toast-toast-renderer-DSu4YoTy.mjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cdevhub-ngx-tw-carousel.mjs","sources":["../../../projects/ngx-tw/carousel/carousel.ts","../../../projects/ngx-tw/carousel/cdevhub-ngx-tw-carousel.ts"],"sourcesContent":["// `CarouselComponent` is the canonical \"structural-layout primitive\" exception\n// to CLAUDE.md's 5–6 input cap (precedent: `SplitComponent`). The 17 inputs\n// here are each an independent geometry/behavior axis (orientation, slides\n// math, gap, loop, autoplay knobs, drag, keyboard, snap, active index, ARIA\n// label sources, i18n) — removing any would force consumers to coordinate two\n// carousels or replicate logic externally. Documented in\n// docs/requirements/carousel.requirements.md § 2.2 and § 12.\n\nimport {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChildren,\n DestroyRef,\n Directive,\n effect,\n ElementRef,\n inject,\n input,\n isDevMode,\n model,\n output,\n signal,\n type Signal,\n untracked,\n viewChild,\n} from '@angular/core';\nimport { tv } from 'tailwind-variants';\nimport type { TwColor, TwOrientation, TwSize } from '@cdevhub/ngx-tw/core';\n\n// ── Public types ──────────────────────────────────────────────────\n\n/** Visual style of the indicators row rendered by `<tw-carousel-indicators>`. */\nexport type TwCarouselIndicatorVariant = 'dots' | 'lines' | 'numbers';\n\n/** Where the indicators sit relative to the carousel viewport. */\nexport type TwCarouselIndicatorPosition = 'overlay' | 'below';\n\n/** What triggered an `activeIndex` change. */\nexport type TwCarouselSlideChangeTrigger =\n | 'pointer'\n | 'keyboard'\n | 'autoplay'\n | 'indicator'\n | 'button'\n | 'programmatic';\n\n/** Payload emitted by `CarouselComponent.slideChange`. */\nexport interface TwCarouselSlideChangeEvent {\n /** Previous active slide index (0-based). */\n from: number;\n /** New active slide index (0-based). */\n to: number;\n /** What triggered the change. */\n trigger: TwCarouselSlideChangeTrigger;\n}\n\n/** Reason emitted when autoplay transitions running → paused. */\nexport type TwCarouselAutoplayReason =\n | 'hover'\n | 'focus'\n | 'interaction'\n | 'visibility'\n | 'manual';\n\n/** Localizable strings for the carousel. */\nexport interface TwCarouselLabels {\n /** Accessible label for the Previous-slide directive host. Default: `'Previous slide'`. */\n previous: string;\n /** Accessible label for the Next-slide directive host. Default: `'Next slide'`. */\n next: string;\n /** Accessible label for the autoplay pause control. Default: `'Pause autoplay'`. */\n pauseAutoplay: string;\n /** Accessible label for the autoplay resume control. Default: `'Resume autoplay'`. */\n resumeAutoplay: string;\n /** Template for indicator-button accessible names. Variable: `{page}` (1-based). Default: `'Go to slide {page}'`. */\n indicator: string;\n /** Template for per-slide accessible names with a custom label. Variables: `{index}` (1-based), `{total}`, `{label}`. Default: `'{index} of {total}: {label}'`. */\n slideOfWithLabel: string;\n /** Template for per-slide accessible names without a custom label. Variables: `{index}` (1-based), `{total}`. Default: `'{index} of {total}'`. */\n slideOf: string;\n}\n\n/** Default English labels used when consumers do not override via the `labels` input. */\nexport const DEFAULT_CAROUSEL_LABELS: Readonly<TwCarouselLabels> = {\n previous: 'Previous slide',\n next: 'Next slide',\n pauseAutoplay: 'Pause autoplay',\n resumeAutoplay: 'Resume autoplay',\n indicator: 'Go to slide {page}',\n slideOfWithLabel: '{index} of {total}: {label}',\n slideOf: '{index} of {total}',\n};\n\n// ── Helpers ────────────────────────────────────────────────────────\n\n/** Replaces `{key}` placeholders in `template` with values from `vars`. Ported from paginator. */\nfunction formatLabel(\n template: string,\n vars: Readonly<Record<string, string | number>>,\n): string {\n return template.replace(/\\{(\\w+)\\}/g, (match, key: string) =>\n Object.prototype.hasOwnProperty.call(vars, key) ? String(vars[key]) : match,\n );\n}\n\n/** Pixel value of the inter-slide gap, used to compute the slide-basis CSS variable. */\nconst GAP_PX: Record<TwSize, number> = {\n xs: 8,\n sm: 12,\n md: 16,\n lg: 24,\n xl: 32,\n};\n\n// ── Static color × state class lookups ──\n// Tailwind v4 only resolves statically-written class names. Per the stepper\n// precedent, every color × active/inactive indicator combination is enumerated.\n// Active indicators are also distinguishable by more than color (WCAG 1.4.1):\n// `dots` scale 1.5×; `lines` widen to w-12; `numbers` gain a filled background.\n\nconst INDICATOR_ACTIVE_DOTS: Record<TwColor, string> = {\n primary: 'bg-primary-solid scale-150',\n secondary: 'bg-secondary-solid scale-150',\n accent: 'bg-accent-solid scale-150',\n neutral: 'bg-neutral-solid scale-150',\n info: 'bg-info-solid scale-150',\n success: 'bg-success-solid scale-150',\n warning: 'bg-warning-solid scale-150',\n error: 'bg-error-solid scale-150',\n};\n\nconst INDICATOR_ACTIVE_LINES: Record<TwColor, string> = {\n primary: 'bg-primary-solid w-12',\n secondary: 'bg-secondary-solid w-12',\n accent: 'bg-accent-solid w-12',\n neutral: 'bg-neutral-solid w-12',\n info: 'bg-info-solid w-12',\n success: 'bg-success-solid w-12',\n warning: 'bg-warning-solid w-12',\n error: 'bg-error-solid w-12',\n};\n\nconst INDICATOR_ACTIVE_NUMBERS: Record<TwColor, string> = {\n primary: 'bg-primary-solid text-primary-solid-fg',\n secondary: 'bg-secondary-solid text-secondary-solid-fg',\n accent: 'bg-accent-solid text-accent-solid-fg',\n neutral: 'bg-neutral-solid text-neutral-solid-fg',\n info: 'bg-info-solid text-info-solid-fg',\n success: 'bg-success-solid text-success-solid-fg',\n warning: 'bg-warning-solid text-warning-solid-fg',\n error: 'bg-error-solid text-error-solid-fg',\n};\n\nconst INDICATOR_INACTIVE_DOTS = 'bg-fg-muted opacity-50 hover:opacity-100';\nconst INDICATOR_INACTIVE_LINES = 'bg-fg-muted opacity-50 hover:opacity-100';\nconst INDICATOR_INACTIVE_NUMBERS = 'bg-surface-muted text-fg hover:bg-surface-sunken';\n\nfunction resolveIndicatorActiveClasses(\n variant: TwCarouselIndicatorVariant,\n color: TwColor,\n): string {\n switch (variant) {\n case 'dots':\n return INDICATOR_ACTIVE_DOTS[color];\n case 'lines':\n return INDICATOR_ACTIVE_LINES[color];\n case 'numbers':\n return INDICATOR_ACTIVE_NUMBERS[color];\n }\n}\n\nfunction resolveIndicatorInactiveClasses(variant: TwCarouselIndicatorVariant): string {\n switch (variant) {\n case 'dots':\n return INDICATOR_INACTIVE_DOTS;\n case 'lines':\n return INDICATOR_INACTIVE_LINES;\n case 'numbers':\n return INDICATOR_INACTIVE_NUMBERS;\n }\n}\n\n// ── tv() config ───────────────────────────────────────────────────\n\nconst carouselVariants = tv(\n {\n slots: {\n // `relative` anchors the absolutely-positioned pause control and the\n // overlay-position indicators.\n root: 'relative flex w-full',\n // The scrollable viewport. `tw-scrollbar-none` is the existing utility in\n // theme/_base.css (the requirements doc names this `.tw-scrollbar-hidden`\n // but the codebase ships `.tw-scrollbar-none` — reusing it).\n viewport:\n 'flex min-w-0 w-full snap-mandatory scroll-smooth motion-reduce:scroll-auto tw-scrollbar-none ' +\n 'focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary-500',\n // Per-slide. `flex-basis` is applied via host style binding on\n // `CarouselSlideComponent` (reads `carousel.slideBasis()`).\n slide:\n 'flex-none snap-always min-w-0 transition-opacity duration-150 motion-reduce:transition-none',\n // Component-rendered pause control. `bg-overlay-control` /\n // `hover:bg-overlay-control-hover` resolve through\n // `--color-overlay-control{,-hover}` in `theme/_semantic.css`: a fixed\n // translucent dark capsule whose contrast contract is against the\n // *consumer's slide content underneath*, not the surface palette. See\n // requirements § 12.\n pauseControl:\n 'absolute z-10 inline-flex items-center justify-center size-6 rounded-full bg-overlay-control ' +\n 'text-white hover:bg-overlay-control-hover transition-colors duration-200 motion-reduce:transition-none ' +\n 'focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary-500',\n indicators: 'flex items-center justify-center',\n indicator:\n 'inline-block transition-colors duration-200 motion-reduce:transition-none cursor-pointer ' +\n 'focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary-500',\n },\n variants: {\n orientation: {\n horizontal: {\n root: 'flex-col',\n viewport: 'flex-row overflow-x-auto overflow-y-hidden snap-x',\n indicators: 'flex-row',\n pauseControl: 'bottom-2 start-2',\n },\n vertical: {\n root: 'flex-row',\n viewport: 'flex-col overflow-y-auto overflow-x-hidden snap-y',\n indicators: 'flex-col',\n pauseControl: 'top-2 start-2',\n },\n },\n snapAlign: {\n start: { slide: 'snap-start' },\n center: { slide: 'snap-center' },\n end: { slide: 'snap-end' },\n },\n gap: {\n xs: {},\n sm: {},\n md: {},\n lg: {},\n xl: {},\n },\n variant: {\n dots: { indicator: 'rounded-full' },\n lines: { indicator: 'rounded-full' },\n numbers: {\n indicator: 'rounded-md inline-flex items-center justify-center font-medium',\n },\n },\n size: {\n xs: {},\n sm: {},\n md: {},\n lg: {},\n xl: {},\n },\n position: {\n below: {},\n overlay: {\n // `bg-overlay-control` capsule — same translucent dark token as the\n // pause control. See the `pauseControl` slot above for the rationale.\n indicators: 'absolute z-10 px-2 py-1 rounded-full bg-overlay-control',\n },\n },\n },\n compoundVariants: [\n // Indicator geometry per variant × size.\n { variant: 'dots', size: 'xs', class: { indicator: 'size-2' } },\n { variant: 'dots', size: 'sm', class: { indicator: 'size-2.5' } },\n { variant: 'dots', size: 'md', class: { indicator: 'size-3' } },\n { variant: 'dots', size: 'lg', class: { indicator: 'size-3' } },\n { variant: 'dots', size: 'xl', class: { indicator: 'size-3' } },\n\n { variant: 'lines', size: 'xs', class: { indicator: 'h-1 w-4' } },\n { variant: 'lines', size: 'sm', class: { indicator: 'h-1 w-5' } },\n { variant: 'lines', size: 'md', class: { indicator: 'h-1.5 w-6' } },\n { variant: 'lines', size: 'lg', class: { indicator: 'h-1.5 w-8' } },\n { variant: 'lines', size: 'xl', class: { indicator: 'h-2 w-10' } },\n\n { variant: 'numbers', size: 'xs', class: { indicator: 'size-5 text-2xs' } },\n { variant: 'numbers', size: 'sm', class: { indicator: 'size-6 text-xs' } },\n { variant: 'numbers', size: 'md', class: { indicator: 'size-7 text-xs' } },\n { variant: 'numbers', size: 'lg', class: { indicator: 'size-8 text-sm' } },\n { variant: 'numbers', size: 'xl', class: { indicator: 'size-9 text-sm' } },\n\n // Indicator gap per size — flex-direction is set by the orientation\n // variant so plain `gap-*` works for both row and column.\n { size: 'xs', class: { indicators: 'gap-1' } },\n { size: 'sm', class: { indicators: 'gap-1.5' } },\n { size: 'md', class: { indicators: 'gap-2' } },\n { size: 'lg', class: { indicators: 'gap-2' } },\n { size: 'xl', class: { indicators: 'gap-3' } },\n\n // \"below\" position spacing for indicators relative to the viewport.\n { orientation: 'horizontal', position: 'below', class: { indicators: 'mt-3' } },\n { orientation: 'vertical', position: 'below', class: { indicators: 'ms-3' } },\n\n // Overlay placement — centered along the axis, offset from the edge.\n {\n orientation: 'horizontal',\n position: 'overlay',\n class: { indicators: 'bottom-3 start-1/2 -translate-x-1/2' },\n },\n {\n orientation: 'vertical',\n position: 'overlay',\n class: { indicators: 'top-1/2 -translate-y-1/2 end-3' },\n },\n\n // Per-orientation flex gap on the viewport (slide spacing).\n { orientation: 'horizontal', gap: 'xs', class: { viewport: 'gap-x-2' } },\n { orientation: 'horizontal', gap: 'sm', class: { viewport: 'gap-x-3' } },\n { orientation: 'horizontal', gap: 'md', class: { viewport: 'gap-x-4' } },\n { orientation: 'horizontal', gap: 'lg', class: { viewport: 'gap-x-6' } },\n { orientation: 'horizontal', gap: 'xl', class: { viewport: 'gap-x-8' } },\n { orientation: 'vertical', gap: 'xs', class: { viewport: 'gap-y-2' } },\n { orientation: 'vertical', gap: 'sm', class: { viewport: 'gap-y-3' } },\n { orientation: 'vertical', gap: 'md', class: { viewport: 'gap-y-4' } },\n { orientation: 'vertical', gap: 'lg', class: { viewport: 'gap-y-6' } },\n { orientation: 'vertical', gap: 'xl', class: { viewport: 'gap-y-8' } },\n ],\n defaultVariants: {\n orientation: 'horizontal',\n snapAlign: 'start',\n gap: 'md',\n variant: 'dots',\n size: 'md',\n position: 'below',\n },\n },\n { twMerge: true },\n);\n\n// ── CarouselSlideComponent ────────────────────────────────────────\n\n/**\n * A single slide inside a `<tw-carousel>`. Projects arbitrary content via its\n * default slot. Reports its visibility back to the carousel container via a\n * shared `IntersectionObserver`; hidden slides receive `aria-hidden=\"true\"` and\n * the `inert` attribute so their focusable descendants are removed from the tab\n * order.\n */\n@Component({\n selector: 'tw-carousel-slide',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n role: 'group',\n '[attr.aria-roledescription]': '\"slide\"',\n '[attr.aria-label]': 'accessibleName()',\n '[attr.aria-hidden]': '_isHidden() ? \"true\" : null',\n '[attr.inert]': '_isHidden() ? \"\" : null',\n '[class]': 'slideClasses()',\n '[style.flex-basis]': '_basis()',\n },\n template: `<ng-content />`,\n})\nexport class CarouselSlideComponent {\n /** Optional human-readable label for the slide. When provided, used in the slide's `aria-label` as `\"{index + 1} of {total}: {label}\"`. When `null`, uses `\"{index + 1} of {total}\"` only. Defaults to `null`. */\n readonly label = input<string | null>(null);\n\n /** When `true`, the slide is rendered but skipped by Prev/Next, Indicators, keyboard nav, and autoplay. Programmatic `scrollTo` still lands on it. Visually muted (`opacity-50`, `cursor-not-allowed`). Defaults to `false`. */\n readonly disabled = input<boolean>(false);\n\n /** @internal Direct parent carousel. A `tw-carousel-slide` outside a `tw-carousel` is a programmer error — the DI failure throws naturally. */\n readonly carousel = inject(CarouselComponent);\n\n /** @internal Host element reference used by the carousel's `IntersectionObserver`. */\n readonly _hostEl = inject(ElementRef<HTMLElement>).nativeElement;\n\n /** @internal Visibility flag set by the carousel's IntersectionObserver. Initial value is `true` so the first paint does not flash `inert` on every slide. */\n readonly _isVisible = signal(true);\n\n readonly _isHidden = computed(() => !this._isVisible());\n\n /** @internal 0-based index in the parent carousel's slide content. -1 until contentChildren materialises. */\n readonly index = computed(() => this.carousel.slides().indexOf(this));\n\n /** @internal Resolved `aria-label` per the `slideOf` / `slideOfWithLabel` template. */\n readonly accessibleName = computed<string>(() => {\n const labels = this.carousel.resolvedLabels();\n const idx = this.index();\n const total = this.carousel.slides().length;\n const oneBasedIndex = idx < 0 ? 1 : idx + 1;\n const label = this.label();\n if (label !== null && label !== '') {\n return formatLabel(labels.slideOfWithLabel, {\n index: oneBasedIndex,\n total,\n label,\n });\n }\n return formatLabel(labels.slideOf, {\n index: oneBasedIndex,\n total,\n });\n });\n\n readonly slideClasses = computed(() => {\n const base = this.carousel._slotClasses().slide();\n return this.disabled() ? `${base} opacity-50 cursor-not-allowed` : base;\n });\n\n /** @internal Per-slide `flex-basis`. Reads from the carousel so each slide sizes along the viewport's main axis (width for horizontal, height for vertical via `flex-direction`). */\n readonly _basis = computed<string>(() => this.carousel.slideBasis());\n}\n\n// ── CarouselComponent ─────────────────────────────────────────────\n\n/**\n * Slide / swipe gallery primitive. Renders projected `<tw-carousel-slide>`\n * children in a horizontally (or vertically) scrolling viewport with native\n * CSS scroll-snap, optional autoplay, mouse-pointer drag, keyboard navigation,\n * prev/next directive hosts, and an `<tw-carousel-indicators>` companion.\n * Implements the W3C APG carousel pattern: `role=\"region\"` +\n * `aria-roledescription=\"carousel\"` on the host; the inner viewport carries\n * `tabindex=\"0\"` and a polite `aria-live` region when autoplay is off.\n */\n@Component({\n selector: 'tw-carousel',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n role: 'region',\n '[attr.aria-roledescription]': '\"carousel\"',\n '[attr.aria-label]': 'ariaLabel()',\n '[attr.aria-labelledby]': 'ariaLabelledBy()',\n '[class]': 'rootClasses()',\n '(pointerenter)': '_onPointerEnter()',\n '(pointerleave)': '_onPointerLeave()',\n '(focusin)': '_onFocusIn()',\n '(focusout)': '_onFocusOut($event)',\n },\n template: `\n <div\n #viewport\n data-tw-carousel-viewport\n tabindex=\"0\"\n [class]=\"viewportClasses()\"\n [attr.aria-live]=\"autoplay() ? 'off' : 'polite'\"\n (pointerdown)=\"_onPointerDown($event)\"\n (keydown)=\"_onKeydown($event)\"\n >\n <ng-content select=\"tw-carousel-slide\" />\n </div>\n\n <!--\n Pause/play glyphs are inline SVG (not <tw-icon>) to avoid coupling the\n carousel entry point to ngx-tw/icon's registry. The carousel must work\n without consumer icon registration; two structural primitives should\n not couple through an icon registry (audit (h)).\n -->\n @if (autoplay()) {\n <button\n type=\"button\"\n [class]=\"pauseControlClasses()\"\n [attr.aria-label]=\"_pauseControlAriaLabel()\"\n (click)=\"_togglePauseControl()\"\n >\n @if (_isManuallyPausedView()) {\n <svg viewBox=\"0 0 24 24\" class=\"size-3 shrink-0\" aria-hidden=\"true\">\n <path d=\"M8 5v14l11-7L8 5z\" fill=\"currentColor\" />\n </svg>\n } @else {\n <svg viewBox=\"0 0 24 24\" class=\"size-3 shrink-0\" aria-hidden=\"true\">\n <path d=\"M6 5h4v14H6V5zm8 0h4v14h-4V5z\" fill=\"currentColor\" />\n </svg>\n }\n </button>\n }\n\n <ng-content select=\"[twCarouselPrev], [twCarouselNext], tw-carousel-indicators\" />\n <!-- Default slot: catches arbitrary footer content (custom control rows,\n captions, secondary buttons). Render after the named-selector slot so\n dedicated controls keep their canonical position. -->\n <ng-content />\n `,\n})\nexport class CarouselComponent {\n // ── Inputs (17, cap-exempt: structural-layout primitive — precedent SplitComponent) ──\n\n /** Axis along which slides flow. `'horizontal'` is the canonical case; `'vertical'` is supported for tickers and feature lists. Defaults to `'horizontal'`. */\n readonly orientation = input<TwOrientation>('horizontal');\n\n /** Number of slides visible in the viewport. May be fractional (e.g. `1.2` for a \"peek\" of the next slide). Values below `0.5` are clamped to `0.5`; values above the slide count are clamped to the slide count. Defaults to `1`. */\n readonly slidesPerView = input<number>(1);\n\n /** Number of slides advanced per navigation action (button click, keyboard, indicator). Non-integer values are floored. Defaults to `1`. */\n readonly slidesToScroll = input<number>(1);\n\n /** Inter-slide gap on the scroll axis. Mapped via the canonical spacing scale. Defaults to `'md'`. */\n readonly gap = input<TwSize>('md');\n\n /** When `true`, navigation wraps around at the boundaries. Prev at slide 0 jumps to the last page; Next at the last page jumps to slide 0. Implementation is jumpless via a brief opacity mask. Defaults to `false`. */\n readonly loop = input<boolean>(false);\n\n /** When `true`, the carousel auto-advances by `slidesToScroll` every `autoplayInterval` ms. Pauses on hover, focus-in, drag, document hidden, or user interaction. Defaults to `false`. */\n readonly autoplay = input<boolean>(false);\n\n /** Milliseconds between autoplay advances. Values below `1000` are clamped to `1000` per WCAG 2.2.2. Defaults to `5000`. */\n readonly autoplayInterval = input<number>(5000);\n\n /** Pauses autoplay while the pointer is over the container. Defaults to `true` because losing autoplay on hover is the expected gallery behavior — opt-out is the special case. */\n readonly pauseOnHover = input<boolean>(true);\n\n /** Pauses autoplay while keyboard focus is anywhere inside the container. Defaults to `true` for WCAG 2.2.2 compliance — opt-out is the special case. */\n readonly pauseOnFocusIn = input<boolean>(true);\n\n /** When `true`, the user may pan the slides via mouse pointer drag; touch is left to native scroll. Pointer events are intercepted only when the drag exceeds a 6-pixel threshold so clicks inside slides still work. Defaults to `true` because galleries are draggable by user expectation — opt-out is the special case. */\n readonly draggable = input<boolean>(true);\n\n /** When `true`, the viewport responds to Arrow / Home / End / PageUp / PageDown when focus is inside it. Defaults to `true` for keyboard accessibility — opt-out is the special case. */\n readonly keyboard = input<boolean>(true);\n\n /** CSS `scroll-snap-align` value applied to each slide. `'start'` is the standard gallery behavior; `'center'` is used for peek/preview layouts. Defaults to `'start'`. */\n readonly snapAlign = input<'start' | 'center' | 'end'>('start');\n\n /** Two-way bound 0-based index of the first visible slide in the current page. Setting from the parent scrolls the viewport smoothly to align that slide; reading reflects user-driven scroll position after `scrollend`. Defaults to `0`. */\n readonly activeIndex = model<number>(0);\n\n /** Accessible name for the carousel region. If both this and `ariaLabelledBy` are `null`, a one-time dev-mode `console.warn` is logged (production builds never log). Defaults to `null`. */\n readonly ariaLabel = input<string | null>(null);\n\n /** ID of an element labeling the carousel. Either `ariaLabel` or `ariaLabelledBy` SHOULD be provided. Defaults to `null`. */\n readonly ariaLabelledBy = input<string | null>(null);\n\n /** Localizable strings for prev/next/pause/resume/indicator/slide-of templates. Unset keys fall back to the English defaults in `DEFAULT_CAROUSEL_LABELS`. Defaults to `{}`. */\n readonly labels = input<Partial<TwCarouselLabels>>({});\n\n // ── Outputs ───────────────────────────────────────────────────\n\n /** Fires when the active index changes. Payload identifies the previous and new index plus the trigger source. */\n readonly slideChange = output<TwCarouselSlideChangeEvent>();\n\n /** Fires when autoplay transitions from running to paused. Payload is the pause reason. */\n readonly autoplayPaused = output<TwCarouselAutoplayReason>();\n\n /** Fires when autoplay transitions from paused to running. */\n readonly autoplayResumed = output<void>();\n\n // ── Internal references ────────────────────────────────────────\n\n private readonly _destroyRef = inject(DestroyRef);\n\n /** @internal The scrollable viewport element. */\n readonly _viewportRef = viewChild.required<ElementRef<HTMLDivElement>>('viewport');\n\n /** @internal Projected slides in DOM order. */\n readonly slides = contentChildren(CarouselSlideComponent, { descendants: false });\n\n // ── Resolved configuration ─────────────────────────────────────\n\n /** @internal Resolved label record with English defaults filled in. */\n readonly resolvedLabels = computed<TwCarouselLabels>(() => ({\n ...DEFAULT_CAROUSEL_LABELS,\n ...this.labels(),\n }));\n\n /** @internal Effective `slidesPerView` clamped to `[0.5, slideCount]`. */\n readonly _effectiveSlidesPerView = computed<number>(() => {\n const count = this.slides().length;\n const raw = this.slidesPerView();\n if (count === 0) return Math.max(0.5, raw);\n return Math.max(0.5, Math.min(raw, count));\n });\n\n /** @internal Effective `slidesToScroll` floored to a positive integer. Read by child indicators directive (`CarouselIndicatorsComponent._onClick`) as a signal. */\n readonly _effectiveSlidesToScroll = computed<number>(() => {\n return Math.max(1, Math.floor(this.slidesToScroll()));\n });\n\n /** @internal Autoplay interval clamped to ≥ 1000 ms per WCAG 2.2.2. */\n readonly _effectiveAutoplayInterval = computed<number>(() => {\n return Math.max(1000, this.autoplayInterval());\n });\n\n /** Number of distinct pages (groups of `slidesToScroll` slides) the carousel can land on. Reactive. */\n readonly pageCount: Signal<number> = computed<number>(() => {\n const count = this.slides().length;\n if (count === 0) return 1;\n const perView = this._effectiveSlidesPerView();\n const toScroll = this._effectiveSlidesToScroll();\n return Math.max(1, Math.ceil((count - perView) / toScroll) + 1);\n });\n\n /** 0-based page index that contains `activeIndex`. Reactive. */\n readonly activePage: Signal<number> = computed<number>(() => {\n return Math.floor(this.activeIndex() / this._effectiveSlidesToScroll());\n });\n\n /** The highest slide index the carousel can land on given the current `slidesPerView`. Equals `max(0, slideCount - ceil(effectiveSlidesPerView))`. Reactive. Every site that asks \"where is the last legal landing position?\" goes through this signal. */\n readonly lastReachableIndex: Signal<number> = computed<number>(() => {\n const count = this.slides().length;\n if (count === 0) return 0;\n return Math.max(0, count - Math.ceil(this._effectiveSlidesPerView()));\n });\n\n /** @internal `true` when the carousel is at slide 0 (drives prev directive `disabled`). */\n readonly isAtStart: Signal<boolean> = computed<boolean>(() => this.activeIndex() <= 0);\n\n /** @internal `true` when the carousel is at the last reachable slide (drives next directive `disabled`). */\n readonly isAtEnd: Signal<boolean> = computed<boolean>(\n () => this.activeIndex() >= this.lastReachableIndex(),\n );\n\n /** @internal Per-slide `flex-basis`. Read by each `CarouselSlideComponent` host style binding to size slides along the viewport's main axis. Reactive. */\n readonly slideBasis = computed<string>(() => {\n const perView = this._effectiveSlidesPerView();\n const gapPx = GAP_PX[this.gap()];\n // calc((100% - ((perView - 1) * gap-px)) / perView)\n return `calc((100% - ${(perView - 1) * gapPx}px) / ${perView})`;\n });\n\n // ── tv() resolution ────────────────────────────────────────────\n\n private readonly _variantResult = computed(() =>\n carouselVariants({\n orientation: this.orientation(),\n snapAlign: this.snapAlign(),\n gap: this.gap(),\n }),\n );\n\n /** @internal Slot-class accessor used by child slides and indicators. */\n readonly _slotClasses = computed(() => this._variantResult());\n\n readonly rootClasses = computed(() => this._variantResult().root());\n readonly viewportClasses = computed(() => this._variantResult().viewport());\n readonly pauseControlClasses = computed(() => this._variantResult().pauseControl());\n\n // ── State signals ──────────────────────────────────────────────\n\n /** @internal Last interaction source — written before any navigation triggers scroll, read by the settle handler. */\n private readonly _lastInteractionSource = signal<TwCarouselSlideChangeTrigger | null>(\n null,\n );\n\n /** @internal Suppresses the scroll-end recompute during a loop-jump. */\n private readonly _isLoopJumping = signal(false);\n\n private readonly _isHovered = signal(false);\n private readonly _hasFocusInside = signal(false);\n private readonly _isTabVisible = signal(true);\n private readonly _isDragging = signal(false);\n private readonly _isManuallyPaused = signal(false);\n private readonly _postInteractionPauseUntil = signal<number | null>(null);\n\n /** @internal RTL sign factor applied to scroll-position math. `+1` LTR, `-1` RTL. */\n private readonly _rtlSign = signal<1 | -1>(1);\n\n // ── Resolved pause-control labels ──────────────────────────────\n\n readonly _pauseControlAriaLabel = computed<string>(() => {\n const labels = this.resolvedLabels();\n return this._isManuallyPaused() ? labels.resumeAutoplay : labels.pauseAutoplay;\n });\n\n /** @internal Public accessor for the template. */\n readonly _isManuallyPausedView = this._isManuallyPaused.asReadonly();\n\n // ── Internal API used by child directives / indicators ─────────\n\n /**\n * @internal Sets the \"last interaction source\" signal so the upcoming\n * navigation call emits `slideChange` with the correct trigger. Called by\n * `[twCarouselPrev]`, `[twCarouselNext]`, and the indicators before they\n * invoke `next()` / `prev()` / `scrollTo()`.\n */\n _setLastInteractionSource(source: TwCarouselSlideChangeTrigger): void {\n this._lastInteractionSource.set(source);\n }\n\n // ── Lifecycle ──────────────────────────────────────────────────\n\n constructor() {\n // One-time dev warnings.\n afterNextRender(() => {\n this._setupViewport();\n });\n\n // Dev-mode warnings. Each one is deduped per component instance so they\n // re-evaluate when consumer inputs change but never spam the console. The\n // earlier implementation used `afterNextRender` which fires once at\n // construction — if a consumer later set `slidesPerView = 0.1`, the\n // threshold warning never surfaced (audit (i)).\n if (isDevMode()) {\n let warnedMissingLabel = false;\n let warnedLowInterval = false;\n let warnedLowPerView = false;\n effect(() => {\n if (\n !warnedMissingLabel &&\n this.ariaLabel() === null &&\n this.ariaLabelledBy() === null\n ) {\n warnedMissingLabel = true;\n console.warn(\n '[tw-carousel] Provide either `ariaLabel` or `ariaLabelledBy` so the carousel region has an accessible name (WCAG 4.1.2).',\n );\n }\n if (!warnedLowInterval && this.autoplayInterval() < 1000) {\n warnedLowInterval = true;\n console.warn(\n `[tw-carousel] autoplayInterval=${this.autoplayInterval()} is below the 1000 ms WCAG 2.2.2 floor; clamped to 1000.`,\n );\n }\n if (!warnedLowPerView && this.slidesPerView() < 0.5) {\n warnedLowPerView = true;\n console.warn(\n `[tw-carousel] slidesPerView=${this.slidesPerView()} is below the 0.5 floor; clamped.`,\n );\n }\n });\n }\n\n // Autoplay state machine — start/stop the interval based on inputs + pause state.\n effect((onCleanup) => {\n const autoplay = this.autoplay();\n const paused = this._isPaused();\n const interval = this._effectiveAutoplayInterval();\n\n if (!autoplay || paused) return;\n\n const handle = setInterval(() => {\n this._lastInteractionSource.set('autoplay');\n this.next();\n }, interval);\n onCleanup(() => clearInterval(handle));\n });\n\n // Pause/resume transition emissions. Track previous state across effect\n // invocations and emit on actual transitions while autoplay is on.\n // The initial `false` is correct ONLY because `autoplay` defaults to\n // `false`: the first effect run sees `autoplay=false` and short-circuits\n // without emitting, regardless of the pause state. If the default ever\n // flips to `true`, this needs rethinking (audit (f)).\n let prevPaused = false;\n effect(() => {\n const autoplay = this.autoplay();\n const paused = this._isPaused();\n if (autoplay) {\n if (paused && !prevPaused) {\n const reason = this._currentPauseReason();\n if (reason !== null) this.autoplayPaused.emit(reason);\n } else if (!paused && prevPaused) {\n this.autoplayResumed.emit();\n }\n }\n prevPaused = paused;\n });\n\n // Slide-set changes: re-observe with IntersectionObserver, clamp activeIndex.\n // Only `slides()` is a reactive trigger. The activeIndex read+write is wrapped\n // in `untracked` so the clamp does not register `activeIndex` as a dependency —\n // otherwise the `.set` would re-trigger this effect (read→write signal cycle).\n effect(() => {\n const slides = this.slides();\n this._reobserveSlides(slides);\n const count = slides.length;\n untracked(() => {\n if (count > 0 && this.activeIndex() > count - 1) {\n this.activeIndex.set(count - 1);\n }\n });\n });\n\n this._destroyRef.onDestroy(() => {\n this._teardownViewport();\n });\n }\n\n // ── Pause state aggregation ────────────────────────────────────\n\n private readonly _isPaused = computed<boolean>(() => {\n if (this.pauseOnHover() && this._isHovered()) return true;\n if (this.pauseOnFocusIn() && this._hasFocusInside()) return true;\n if (!this._isTabVisible()) return true;\n if (this._isDragging()) return true;\n if (this._isManuallyPaused()) return true;\n const until = this._postInteractionPauseUntil();\n if (until !== null && Date.now() < until) return true;\n return false;\n });\n\n private _currentPauseReason(): TwCarouselAutoplayReason | null {\n if (this._isManuallyPaused()) return 'manual';\n if (!this._isTabVisible()) return 'visibility';\n if (this._isDragging()) return 'interaction';\n const until = this._postInteractionPauseUntil();\n if (until !== null && Date.now() < until) return 'interaction';\n if (this.pauseOnFocusIn() && this._hasFocusInside()) return 'focus';\n if (this.pauseOnHover() && this._isHovered()) return 'hover';\n return null;\n }\n\n // ── Viewport / observer setup ───────────────────────────────────\n\n private _intersectionObserver: IntersectionObserver | null = null;\n private _resizeObserver: ResizeObserver | null = null;\n private _onScrollEndBound: (() => void) | null = null;\n private _onScrollDebouncedBound: (() => void) | null = null;\n private _scrollDebounceTimer: ReturnType<typeof setTimeout> | null = null;\n private _onVisibilityChangeBound: (() => void) | null = null;\n\n private _setupViewport(): void {\n const viewport = this._viewportRef().nativeElement;\n\n // RTL detection (read once; consumers needing dynamic dir changes can\n // re-render the host).\n try {\n const direction = getComputedStyle(viewport).direction;\n this._rtlSign.set(direction === 'rtl' ? -1 : 1);\n } catch {\n this._rtlSign.set(1);\n }\n\n // Active-index detection: scrollend if available, debounced scroll fallback.\n const hasScrollEnd = 'onscrollend' in window;\n if (hasScrollEnd) {\n this._onScrollEndBound = () => this._handleScrollSettled();\n viewport.addEventListener('scrollend', this._onScrollEndBound, { passive: true });\n } else {\n this._onScrollDebouncedBound = () => {\n if (this._scrollDebounceTimer !== null) {\n clearTimeout(this._scrollDebounceTimer);\n }\n this._scrollDebounceTimer = setTimeout(() => {\n this._scrollDebounceTimer = null;\n this._handleScrollSettled();\n }, 150);\n };\n viewport.addEventListener('scroll', this._onScrollDebouncedBound, {\n passive: true,\n });\n }\n\n // Tab visibility for autoplay gating.\n if (typeof document !== 'undefined') {\n this._isTabVisible.set(document.visibilityState !== 'hidden');\n this._onVisibilityChangeBound = () => {\n this._isTabVisible.set(document.visibilityState !== 'hidden');\n };\n document.addEventListener('visibilitychange', this._onVisibilityChangeBound, {\n passive: true,\n });\n }\n\n // Observers for slide visibility and viewport-size changes.\n if (typeof IntersectionObserver !== 'undefined') {\n this._intersectionObserver = new IntersectionObserver(\n (entries) => {\n for (const entry of entries) {\n const slide = (entry.target as HTMLElement & { _twSlide?: CarouselSlideComponent })\n ._twSlide;\n if (slide) {\n slide._isVisible.set(\n entry.isIntersecting && entry.intersectionRatio >= 0.5,\n );\n }\n }\n },\n { root: viewport, threshold: 0.5 },\n );\n this._reobserveSlides(this.slides());\n }\n\n if (typeof ResizeObserver !== 'undefined') {\n this._resizeObserver = new ResizeObserver(() => {\n // Reflow: keep activeIndex aligned to its slide position.\n this._scrollToIndex(this.activeIndex(), 'instant');\n });\n this._resizeObserver.observe(viewport);\n }\n }\n\n private _teardownViewport(): void {\n const viewport = this._viewportRef()?.nativeElement;\n if (viewport && this._onScrollEndBound) {\n viewport.removeEventListener('scrollend', this._onScrollEndBound);\n }\n if (viewport && this._onScrollDebouncedBound) {\n viewport.removeEventListener('scroll', this._onScrollDebouncedBound);\n }\n if (this._scrollDebounceTimer !== null) {\n clearTimeout(this._scrollDebounceTimer);\n this._scrollDebounceTimer = null;\n }\n if (typeof document !== 'undefined' && this._onVisibilityChangeBound) {\n document.removeEventListener('visibilitychange', this._onVisibilityChangeBound);\n }\n this._intersectionObserver?.disconnect();\n this._intersectionObserver = null;\n this._resizeObserver?.disconnect();\n this._resizeObserver = null;\n if (this._loopJumpHandle !== null) {\n clearTimeout(this._loopJumpHandle);\n this._loopJumpHandle = null;\n }\n if (this._loopJumpSafetyHandle !== null) {\n clearTimeout(this._loopJumpSafetyHandle);\n this._loopJumpSafetyHandle = null;\n }\n if (this._dragCleanup !== null) {\n this._dragCleanup();\n this._dragCleanup = null;\n }\n }\n\n private _reobserveSlides(slides: readonly CarouselSlideComponent[]): void {\n const observer = this._intersectionObserver;\n if (!observer) return;\n observer.disconnect();\n for (const slide of slides) {\n // Locate the slide host element via document inspection. The host element\n // is the first ancestor with the `tw-carousel-slide` tag — but with\n // `contentChildren` we don't have direct ElementRef access on each slide.\n // Use the public `_hostEl` set in the slide constructor.\n const el = (slide as unknown as { _hostEl: HTMLElement | null })._hostEl;\n if (el) {\n (el as HTMLElement & { _twSlide?: CarouselSlideComponent })._twSlide = slide;\n observer.observe(el);\n }\n }\n }\n\n // ── Scroll/active-index logic ───────────────────────────────────\n\n // The scroll-math contract: both reads (`_handleScrollSettled`) and writes\n // (`_scrollToIndex`) consult the actually-rendered slide geometry via each\n // slide host's `offsetLeft` / `offsetTop`. The synthetic\n // `step = (dimension + gap) / perView` from earlier revisions has been\n // removed — fractional `slidesPerView`, container resize, or sub-pixel gap\n // rounding could cause that step to land between snap points and the\n // browser would snap back to the previously-visible tile. Offsets are\n // authoritative.\n //\n // RTL: in modern browsers (negative-scroll model) `viewport.scrollLeft` is\n // 0 at the logical start and decreases toward `-(scrollWidth - clientWidth)`\n // as the user scrolls toward the logical end. Slide DOM order is preserved\n // but layout is mirrored: `slide[0].offsetLeft` is the largest, not zero.\n // We normalize by transforming each slide's offset into a \"logical offset\"\n // that increases monotonically along the scroll axis, and read the current\n // scroll as `Math.abs(scrollLeft)`. `_rtlSign()` is applied **at most once**\n // — on writes (`viewport.scrollTo({ left: -logicalOffset })`).\n\n private _logicalOffset(slideEl: HTMLElement): number {\n const viewport = this._viewportRef().nativeElement;\n if (this.orientation() === 'horizontal') {\n const isRtl = this._rtlSign() === -1;\n return isRtl\n ? viewport.scrollWidth - slideEl.offsetLeft - slideEl.offsetWidth\n : slideEl.offsetLeft;\n }\n return slideEl.offsetTop;\n }\n\n private _currentLogicalScroll(): number {\n const viewport = this._viewportRef().nativeElement;\n if (this.orientation() === 'horizontal') {\n // `Math.abs` is the single sign normalization on reads. Works for both\n // LTR (scrollLeft ≥ 0) and RTL negative-scroll (scrollLeft ≤ 0).\n return Math.abs(viewport.scrollLeft);\n }\n return viewport.scrollTop;\n }\n\n private _findClosestSlideIndex(targetLogicalScroll: number): number {\n const slides = this.slides();\n if (slides.length === 0) return 0;\n let bestIndex = 0;\n let bestDistance = Number.POSITIVE_INFINITY;\n for (let i = 0; i < slides.length; i++) {\n const el = (slides[i] as unknown as { _hostEl: HTMLElement | null })._hostEl;\n if (!el) continue;\n const distance = Math.abs(this._logicalOffset(el) - targetLogicalScroll);\n if (distance < bestDistance) {\n bestDistance = distance;\n bestIndex = i;\n }\n }\n return bestIndex;\n }\n\n private _handleScrollSettled(): void {\n if (this._isLoopJumping()) return;\n if (this.slides().length === 0) {\n this._lastInteractionSource.set(null);\n return;\n }\n const closest = this._findClosestSlideIndex(this._currentLogicalScroll());\n const clamped = Math.max(0, Math.min(closest, this.lastReachableIndex()));\n const from = this.activeIndex();\n if (clamped !== from) {\n this._emitSlideChange(from, clamped, this._lastInteractionSource() ?? 'pointer');\n this.activeIndex.set(clamped);\n }\n this._lastInteractionSource.set(null);\n }\n\n private _emitSlideChange(\n from: number,\n to: number,\n trigger: TwCarouselSlideChangeTrigger,\n ): void {\n this.slideChange.emit({ from, to, trigger });\n }\n\n // ── Navigation methods (imperative API) ─────────────────────────\n\n /** Advance by `slidesToScroll`. Wraps if `loop` is `true`; no-op at the last page when `loop` is `false`. Emits `slideChange` with trigger `'programmatic'` when called externally. */\n next(): void {\n const trigger = this._lastInteractionSource() ?? 'programmatic';\n this._lastInteractionSource.set(trigger);\n const count = this.slides().length;\n if (count === 0) return;\n const toScroll = this._effectiveSlidesToScroll();\n const lastReachable = this.lastReachableIndex();\n let target = this._findNextEnabled(this.activeIndex() + toScroll, +1);\n if (target > lastReachable) {\n // Past the last reachable index.\n if (this.loop()) {\n this._loopJumpTo(0);\n return;\n }\n target = lastReachable;\n if (target === this.activeIndex()) {\n this._lastInteractionSource.set(null);\n return;\n }\n }\n this._scrollToIndex(target);\n }\n\n /** Retreat by `slidesToScroll`. Wraps if `loop` is `true`; no-op at slide 0 when `loop` is `false`. Emits `slideChange` with trigger `'programmatic'` when called externally. */\n prev(): void {\n const trigger = this._lastInteractionSource() ?? 'programmatic';\n this._lastInteractionSource.set(trigger);\n const count = this.slides().length;\n if (count === 0) return;\n const toScroll = this._effectiveSlidesToScroll();\n let target = this._findNextEnabled(this.activeIndex() - toScroll, -1);\n if (target < 0) {\n if (this.loop()) {\n this._loopJumpTo(this.lastReachableIndex());\n return;\n }\n target = 0;\n if (target === this.activeIndex()) {\n this._lastInteractionSource.set(null);\n return;\n }\n }\n this._scrollToIndex(target);\n }\n\n /** Jump to a specific 0-based slide index. `opts.behavior` is `'smooth' | 'instant'`; default is `'smooth'` unless `prefers-reduced-motion: reduce` is set, in which case the default is `'instant'`. */\n scrollTo(index: number, opts?: { behavior?: 'smooth' | 'instant' }): void {\n const trigger = this._lastInteractionSource() ?? 'programmatic';\n this._lastInteractionSource.set(trigger);\n this._scrollToIndex(index, this._resolveBehavior(opts));\n }\n\n /** Pause autoplay. `reason` defaults to `'manual'`. */\n pause(_reason: TwCarouselAutoplayReason = 'manual'): void {\n this._isManuallyPaused.set(true);\n }\n\n /** Resume autoplay if `autoplay` input is `true`. */\n resume(): void {\n this._isManuallyPaused.set(false);\n }\n\n private _findNextEnabled(start: number, direction: 1 | -1): number {\n const slides = this.slides();\n const count = slides.length;\n if (count === 0) return 0;\n let idx = start;\n while (idx >= 0 && idx < count) {\n if (!slides[idx].disabled()) return idx;\n idx += direction;\n }\n return start;\n }\n\n private _scrollToIndex(\n index: number,\n behavior: 'smooth' | 'instant' = 'smooth',\n ): void {\n const viewport = this._viewportRef()?.nativeElement;\n if (!viewport) return;\n const slides = this.slides();\n const count = slides.length;\n if (count === 0) return;\n const clamped = Math.max(0, Math.min(index, count - 1));\n const from = this.activeIndex();\n\n const targetEl = (slides[clamped] as unknown as { _hostEl: HTMLElement | null })\n ._hostEl;\n const horizontal = this.orientation() === 'horizontal';\n // Map our public `'instant'` to the DOM-standard `'auto'` literal.\n const domBehavior: ScrollBehavior = behavior === 'instant' ? 'auto' : 'smooth';\n\n if (targetEl) {\n const logicalOffset = this._logicalOffset(targetEl);\n if (typeof viewport.scrollTo === 'function') {\n // RTL writes apply `_rtlSign()` exactly once — no double-multiplication\n // anywhere on the read/write paths (see audit (a)).\n const opts: ScrollToOptions = horizontal\n ? { left: logicalOffset * this._rtlSign(), behavior: domBehavior }\n : { top: logicalOffset, behavior: domBehavior };\n viewport.scrollTo(opts);\n } else if (horizontal) {\n viewport.scrollLeft = logicalOffset * this._rtlSign();\n } else {\n viewport.scrollTop = logicalOffset;\n }\n }\n\n if (clamped !== from) {\n this._emitSlideChange(\n from,\n clamped,\n this._lastInteractionSource() ?? 'programmatic',\n );\n this.activeIndex.set(clamped);\n }\n // Clear the source — `_handleScrollSettled` will not re-emit because the\n // index already matches.\n this._lastInteractionSource.set(null);\n }\n\n /**\n * @internal Resolves the effective scroll behavior. Explicit caller-supplied\n * values are honoured verbatim; otherwise checks\n * `matchMedia('(prefers-reduced-motion: reduce)')` and returns `'instant'`\n * when the user has reduced-motion enabled, `'smooth'` otherwise. See B(d).\n */\n private _resolveBehavior(\n opts?: { behavior?: 'smooth' | 'instant' },\n ): 'smooth' | 'instant' {\n if (opts?.behavior) return opts.behavior;\n if (typeof window !== 'undefined' && typeof window.matchMedia === 'function') {\n try {\n if (window.matchMedia('(prefers-reduced-motion: reduce)').matches) {\n return 'instant';\n }\n } catch {\n // matchMedia may throw in non-browser environments; fall through.\n }\n }\n return 'smooth';\n }\n\n private _loopJumpHandle: ReturnType<typeof setTimeout> | null = null;\n private _loopJumpSafetyHandle: ReturnType<typeof setTimeout> | null = null;\n\n private _loopJumpTo(index: number): void {\n this._isLoopJumping.set(true);\n const viewport = this._viewportRef().nativeElement;\n viewport.classList.add('tw-carousel-loop-jump');\n\n // If a previous loop-jump is still pending, drop its timers — the new\n // jump supersedes it.\n if (this._loopJumpHandle !== null) clearTimeout(this._loopJumpHandle);\n if (this._loopJumpSafetyHandle !== null) clearTimeout(this._loopJumpSafetyHandle);\n\n // Sequencing the opacity mask. The keyframe in `theme/_base.css`\n // (`tw-carousel-loop-jump`) runs 0% → 40% → 100% over 200ms with the\n // opacity nadir (0.55) at 40% — i.e. 80ms in. We defer the instant scroll\n // until ~80ms after class-add so the swap happens at peak occlusion,\n // *under* the mask, rather than before the dip starts (audit (e)). Under\n // `prefers-reduced-motion: reduce`, `_base.css:361` zeroes the animation\n // duration; the scroll still fires at +80ms, which is a negligible delay\n // and avoids a code branch.\n this._loopJumpHandle = setTimeout(() => {\n this._loopJumpHandle = null;\n // _scrollToIndex handles the slideChange emission and the activeIndex\n // update; we just need the loop-jump flag set so the scrollend\n // recompute does not re-emit.\n this._scrollToIndex(index, 'instant');\n }, 80);\n\n const cleanup = () => {\n viewport.classList.remove('tw-carousel-loop-jump');\n this._isLoopJumping.set(false);\n viewport.removeEventListener('animationend', cleanup);\n if (this._loopJumpSafetyHandle !== null) {\n clearTimeout(this._loopJumpSafetyHandle);\n this._loopJumpSafetyHandle = null;\n }\n };\n viewport.addEventListener('animationend', cleanup, { once: true });\n // Safety net — if the animation never fires (reduced-motion override,\n // jsdom environment), clear after the keyframe duration.\n this._loopJumpSafetyHandle = setTimeout(cleanup, 220);\n }\n\n // ── Host event handlers ─────────────────────────────────────────\n\n _onPointerEnter(): void {\n this._isHovered.set(true);\n }\n\n _onPointerLeave(): void {\n this._isHovered.set(false);\n }\n\n _onFocusIn(): void {\n this._hasFocusInside.set(true);\n }\n\n _onFocusOut(event: FocusEvent): void {\n const root = (event.currentTarget as HTMLElement) ?? null;\n const next = event.relatedTarget as Node | null;\n if (root && next && root.contains(next)) {\n return;\n }\n this._hasFocusInside.set(false);\n }\n\n // ── Pointer drag handler ───────────────────────────────────────\n\n private _dragStart: {\n x: number;\n y: number;\n scrollLeft: number;\n scrollTop: number;\n pointerId: number;\n } | null = null;\n\n // Per-drag cleanup closure. Set in `_onPointerDown`, invoked from\n // `_onPointerUp` AND from `_teardownViewport` (the DestroyRef hook) — that\n // covers the destroy-mid-drag race where the component is torn down before\n // the `pointerup`/`pointercancel` listeners fire (audit (g)). The closure\n // nulls the field itself so a second invocation is a no-op.\n private _dragCleanup: (() => void) | null = null;\n\n _onPointerDown(event: PointerEvent): void {\n if (!this.draggable()) return;\n if (!event.isPrimary || event.pointerType === 'touch') return;\n const viewport = this._viewportRef().nativeElement;\n this._dragStart = {\n x: event.clientX,\n y: event.clientY,\n scrollLeft: viewport.scrollLeft,\n scrollTop: viewport.scrollTop,\n pointerId: event.pointerId,\n };\n const moveHandler = (e: PointerEvent) => this._onPointerMove(e);\n const upHandler = (e: PointerEvent) => {\n // Invoke the unified cleanup so the destroy path and the natural-up\n // path go through the same code.\n if (this._dragCleanup !== null) this._dragCleanup();\n this._onPointerUp(e);\n };\n window.addEventListener('pointermove', moveHandler);\n window.addEventListener('pointerup', upHandler);\n window.addEventListener('pointercancel', upHandler);\n this._dragCleanup = () => {\n window.removeEventListener('pointermove', moveHandler);\n window.removeEventListener('pointerup', upHandler);\n window.removeEventListener('pointercancel', upHandler);\n this._dragCleanup = null;\n };\n }\n\n private _onPointerMove(event: PointerEvent): void {\n const start = this._dragStart;\n if (!start) return;\n const horizontal = this.orientation() === 'horizontal';\n const delta = horizontal ? event.clientX - start.x : event.clientY - start.y;\n if (!this._isDragging() && Math.abs(delta) <= 6) return;\n const viewport = this._viewportRef().nativeElement;\n if (!this._isDragging()) {\n this._isDragging.set(true);\n viewport.style.scrollSnapType = 'none';\n viewport.classList.add('cursor-grabbing');\n try {\n viewport.setPointerCapture(start.pointerId);\n } catch {\n // setPointerCapture may throw if the element isn't focusable in some browsers.\n }\n }\n if (horizontal) {\n viewport.scrollLeft = start.scrollLeft - delta * this._rtlSign();\n } else {\n viewport.scrollTop = start.scrollTop - delta;\n }\n }\n\n private _onPointerUp(_event: PointerEvent): void {\n // Capture `_dragStart` into a local *before* nulling the field so the\n // `releasePointerCapture` call below still has the pointerId. Order\n // matters: a re-entrant pointer event (some browsers fire `pointercancel`\n // synchronously inside `releasePointerCapture`) must see `_dragStart === null`\n // and bail at the `!this._isDragging()` guard or via `_dragCleanup` no-op.\n const start = this._dragStart;\n this._dragStart = null;\n if (!this._isDragging()) return;\n const viewport = this._viewportRef().nativeElement;\n viewport.style.scrollSnapType = '';\n viewport.classList.remove('cursor-grabbing');\n try {\n if (start) viewport.releasePointerCapture(start.pointerId);\n } catch {\n // ignore\n }\n this._isDragging.set(false);\n this._lastInteractionSource.set('pointer');\n // Suppress the click that immediately follows a drag-release.\n const swallowClick = (e: MouseEvent) => {\n e.stopPropagation();\n e.preventDefault();\n viewport.removeEventListener('click', swallowClick, true);\n };\n viewport.addEventListener('click', swallowClick, true);\n queueMicrotask(() => {\n viewport.removeEventListener('click', swallowClick, true);\n });\n // Post-interaction autoplay pause.\n this._postInteractionPauseUntil.set(\n Date.now() + this._effectiveAutoplayInterval() * 2,\n );\n setTimeout(() => {\n if (\n this._postInteractionPauseUntil() !== null &&\n Date.now() >= (this._postInteractionPauseUntil() ?? 0)\n ) {\n this._postInteractionPauseUntil.set(null);\n }\n }, this._effectiveAutoplayInterval() * 2 + 16);\n }\n\n // ── Keyboard handler ───────────────────────────────────────────\n\n _onKeydown(event: KeyboardEvent): void {\n if (!this.keyboard()) return;\n const horizontal = this.orientation() === 'horizontal';\n const rtl = this._rtlSign() === -1;\n let handled = false;\n switch (event.key) {\n case 'ArrowLeft':\n if (horizontal) {\n this._lastInteractionSource.set('keyboard');\n if (rtl) this.next();\n else this.prev();\n handled = true;\n }\n break;\n case 'ArrowRight':\n if (horizontal) {\n this._lastInteractionSource.set('keyboard');\n if (rtl) this.prev();\n else this.next();\n handled = true;\n }\n break;\n case 'ArrowUp':\n this._lastInteractionSource.set('keyboard');\n this.prev();\n handled = true;\n break;\n case 'ArrowDown':\n this._lastInteractionSource.set('keyboard');\n this.next();\n handled = true;\n break;\n case 'Home':\n this._lastInteractionSource.set('keyboard');\n this.scrollTo(0);\n handled = true;\n break;\n case 'End': {\n this._lastInteractionSource.set('keyboard');\n const lastIndex = Math.max(0, this.slides().length - 1);\n this.scrollTo(lastIndex);\n handled = true;\n break;\n }\n case 'PageUp':\n this._lastInteractionSource.set('keyboard');\n this.prev();\n handled = true;\n break;\n case 'PageDown':\n this._lastInteractionSource.set('keyboard');\n this.next();\n handled = true;\n break;\n }\n if (handled) {\n event.preventDefault();\n }\n }\n\n // ── Pause control toggle ───────────────────────────────────────\n\n _togglePauseControl(): void {\n const next = !this._isManuallyPaused();\n this._isManuallyPaused.set(next);\n }\n}\n\n// ── CarouselIndicatorsComponent ───────────────────────────────────\n\n/**\n * Renders one button per **page** (not per slide) inside a `<tw-carousel>`.\n * The active button is marked with `aria-current=\"true\"` and a distinguishing\n * scale / width / fill so it is identifiable beyond color alone (WCAG 1.4.1).\n */\n@Component({\n selector: 'tw-carousel-indicators',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n role: 'group',\n '[class]': 'rootClasses()',\n },\n template: `\n @for (page of _pages(); track page) {\n <button\n type=\"button\"\n [class]=\"_buttonClasses(page)\"\n [attr.aria-label]=\"_buttonLabel(page)\"\n [attr.aria-current]=\"page === carousel.activePage() ? 'true' : null\"\n (click)=\"_onClick(page)\"\n >\n @if (variant() === 'numbers') {\n {{ page + 1 }}\n }\n </button>\n }\n `,\n})\nexport class CarouselIndicatorsComponent {\n /** Visual style. `'dots'` = small filled circles; `'lines'` = short horizontal/vertical bars; `'numbers'` = text 1, 2, 3 inside small pills. Defaults to `'dots'`. */\n readonly variant = input<TwCarouselIndicatorVariant>('dots');\n\n /** Color of the active indicator. Inactive indicators use neutral `fg-muted` tokens. Defaults to `'primary'`. */\n readonly color = input<TwColor>('primary');\n\n /** Indicator size (diameter/length and gap between indicators). Defaults to `'md'`. */\n readonly size = input<TwSize>('md');\n\n /** When `'overlay'`, the indicators float absolutely-positioned over the carousel with a `bg-overlay-control` translucent capsule backdrop for contrast. When `'below'`, they sit below the carousel as a normal block. Defaults to `'below'`. */\n readonly position = input<TwCarouselIndicatorPosition>('below');\n\n /** @internal Direct parent carousel. */\n readonly carousel = inject(CarouselComponent);\n\n private readonly _variantResult = computed(() =>\n carouselVariants({\n orientation: this.carousel.orientation(),\n variant: this.variant(),\n size: this.size(),\n position: this.position(),\n gap: this.carousel.gap(),\n snapAlign: this.carousel.snapAlign(),\n }),\n );\n\n readonly rootClasses = computed(() => this._variantResult().indicators());\n\n /**\n * @internal Sequence of page indices to render. Returns `[]` when the\n * parent carousel's `slidesPerView` is not `1` — a single dot can never\n * match a viewport that shows two or more slides, so the indicator UX is\n * unambiguously broken at multi-item display (issue A1). The host element\n * stays mounted so layout doesn't reflow if the consumer toggles\n * `slidesPerView` back to `1` — the buttons reappear at that point without\n * a remount.\n */\n readonly _pages = computed<number[]>(() => {\n if (this.carousel.slidesPerView() !== 1) return [];\n const count = this.carousel.pageCount();\n const out: number[] = new Array(count);\n for (let i = 0; i < count; i++) out[i] = i;\n return out;\n });\n\n constructor() {\n if (isDevMode()) {\n let warned = false;\n effect(() => {\n if (!warned && this.carousel.slidesPerView() !== 1) {\n warned = true;\n console.warn(\n `[tw-carousel-indicators] Indicators are only shown when slidesPerView === 1. Got slidesPerView=${this.carousel.slidesPerView()}; indicators are hidden until slidesPerView returns to 1.`,\n );\n }\n });\n }\n }\n\n _buttonClasses(page: number): string {\n const base = this._variantResult().indicator();\n const active = page === this.carousel.activePage();\n const stateClasses = active\n ? resolveIndicatorActiveClasses(this.variant(), this.color())\n : resolveIndicatorInactiveClasses(this.variant());\n return `${base} ${stateClasses}`;\n }\n\n _buttonLabel(page: number): string {\n return formatLabel(this.carousel.resolvedLabels().indicator, {\n page: page + 1,\n });\n }\n\n _onClick(page: number): void {\n const toScroll = this.carousel._effectiveSlidesToScroll();\n const targetIndex = page * toScroll;\n this.carousel._setLastInteractionSource('indicator');\n this.carousel.scrollTo(targetIndex);\n }\n}\n\n// ── Prev / Next directives ────────────────────────────────────────\n\n/**\n * Apply to any focusable element (typically `<button>`) inside a `<tw-carousel>`\n * to navigate to the previous page. Auto-disables at the first slide when the\n * carousel is not looping. Sets `aria-label` to `labels.previous` unless the\n * host already carries `aria-label` or `aria-labelledby`.\n */\n@Directive({\n selector: '[twCarouselPrev]',\n host: {\n '(click)': '_onClick($event)',\n '[attr.aria-label]': '_ariaLabel()',\n '[attr.disabled]': '_isButtonDisabled()',\n '[attr.aria-disabled]': '_isDisabled() ? \"true\" : null',\n '[attr.tabindex]': '_isTabindex()',\n },\n})\nexport class CarouselPrevDirective {\n /** @internal Parent carousel. */\n readonly carousel = inject(CarouselComponent);\n\n private readonly _hostEl = inject(ElementRef<HTMLElement>).nativeElement;\n private readonly _consumerLabel = this._hostEl.getAttribute('aria-label');\n private readonly _hasLabelledBy = this._hostEl.hasAttribute('aria-labelledby');\n private readonly _isButton = this._hostEl.tagName === 'BUTTON';\n\n /** @internal True when prev is unavailable (at start and !loop). */\n readonly _isDisabled = computed<boolean>(\n () => !this.carousel.loop() && this.carousel.isAtStart(),\n );\n\n _ariaLabel(): string | null {\n // Consumer-provided aria-label wins outright. Consumer-provided\n // aria-labelledby suppresses our binding so the two labels don't compete.\n if (this._consumerLabel !== null) return this._consumerLabel;\n if (this._hasLabelledBy) return null;\n return this.carousel.resolvedLabels().previous;\n }\n\n _isButtonDisabled(): string | null {\n return this._isButton && this._isDisabled() ? '' : null;\n }\n\n _isTabindex(): string | null {\n return !this._isButton && this._isDisabled() ? '-1' : null;\n }\n\n _onClick(event: Event): void {\n if (this._isDisabled()) {\n event.preventDefault();\n return;\n }\n this.carousel._setLastInteractionSource('button');\n this.carousel.prev();\n }\n}\n\n/**\n * Apply to any focusable element (typically `<button>`) inside a `<tw-carousel>`\n * to navigate to the next page. Auto-disables at the last page when the\n * carousel is not looping. Sets `aria-label` to `labels.next` unless the host\n * already carries `aria-label` or `aria-labelledby`.\n */\n@Directive({\n selector: '[twCarouselNext]',\n host: {\n '(click)': '_onClick($event)',\n '[attr.aria-label]': '_ariaLabel()',\n '[attr.disabled]': '_isButtonDisabled()',\n '[attr.aria-disabled]': '_isDisabled() ? \"true\" : null',\n '[attr.tabindex]': '_isTabindex()',\n },\n})\nexport class CarouselNextDirective {\n /** @internal Parent carousel. */\n readonly carousel = inject(CarouselComponent);\n\n private readonly _hostEl = inject(ElementRef<HTMLElement>).nativeElement;\n private readonly _consumerLabel = this._hostEl.getAttribute('aria-label');\n private readonly _hasLabelledBy = this._hostEl.hasAttribute('aria-labelledby');\n private readonly _isButton = this._hostEl.tagName === 'BUTTON';\n\n readonly _isDisabled = computed<boolean>(\n () => !this.carousel.loop() && this.carousel.isAtEnd(),\n );\n\n _ariaLabel(): string | null {\n if (this._consumerLabel !== null) return this._consumerLabel;\n if (this._hasLabelledBy) return null;\n return this.carousel.resolvedLabels().next;\n }\n\n _isButtonDisabled(): string | null {\n return this._isButton && this._isDisabled() ? '' : null;\n }\n\n _isTabindex(): string | null {\n return !this._isButton && this._isDisabled() ? '-1' : null;\n }\n\n _onClick(event: Event): void {\n if (this._isDisabled()) {\n event.preventDefault();\n return;\n }\n this.carousel._setLastInteractionSource('button');\n this.carousel.next();\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cdevhub-ngx-tw-carousel.mjs","sources":["../../../projects/ngx-tw/carousel/carousel-labels.ts","../../../projects/ngx-tw/carousel/carousel-variants.ts","../../../projects/ngx-tw/carousel/carousel.ts","../../../projects/ngx-tw/carousel/carousel-indicators.ts","../../../projects/ngx-tw/carousel/carousel-nav.ts","../../../projects/ngx-tw/carousel/cdevhub-ngx-tw-carousel.ts"],"sourcesContent":["/**\n * Carousel label resolution — the English defaults and the `{placeholder}`\n * interpolation both `CarouselSlideComponent` (per-slide `aria-label`) and\n * `CarouselIndicatorsComponent` (per-page `aria-label`) read.\n *\n * `formatLabel` is exported so those two files can share one implementation;\n * it is deliberately **not** re-exported from `index.ts` and carries no\n * compatibility promise.\n */\n\nimport type { TwCarouselLabels } from './carousel.types';\n\n/**\n * Default English labels used when consumers do not override via the `labels`\n * input. Typed `Required<TwCarouselLabels>` so readers keep a non-optional\n * `string` for every key even though the interface itself is all-optional.\n */\nexport const DEFAULT_CAROUSEL_LABELS: Readonly<Required<TwCarouselLabels>> = {\n previous: 'Previous slide',\n next: 'Next slide',\n pauseAutoplay: 'Pause autoplay',\n resumeAutoplay: 'Resume autoplay',\n indicator: 'Go to slide {page}',\n slideOfWithLabel: '{index} of {total}: {label}',\n slideOf: '{index} of {total}',\n};\n\n/** @internal Replaces `{key}` placeholders in `template` with values from `vars`. Ported from paginator. */\nexport function formatLabel(\n template: string,\n vars: Readonly<Record<string, string | number>>,\n): string {\n // Defence in depth. `resolvedLabels()` already filters explicitly-undefined\n // consumer keys, so a non-string cannot reach here through the public\n // `labels` input today. The guard exists so a future regression in that\n // merge degrades to a missing label instead of throwing inside a `computed`\n // and taking the render down.\n if (typeof template !== 'string') return '';\n return template.replace(/\\{(\\w+)\\}/g, (match, key: string) =>\n Object.prototype.hasOwnProperty.call(vars, key) ? String(vars[key]) : match,\n );\n}\n","/**\n * Carousel styling source of truth — the `tv()` slot config plus the pixel\n * mirror of its gap scale.\n *\n * Shared by `carousel.ts` and `carousel-indicators.ts`, which is the only\n * reason it is a separate file; it is **not** exported from `index.ts` and is\n * not consumer API (CLAUDE.md: \"Do not export variant configs\").\n *\n * `GAP_PX` lives here rather than beside `slideBasis()` because it is the\n * numeric mirror of the `gap-x-*` / `gap-y-*` compound variants below —\n * editing the `md` row from `gap-x-4` to `gap-x-5` without editing `GAP_PX`\n * from 16 to 20 silently miscomputes every slide's `flex-basis`. Co-locating\n * them makes this file the single place a reviewer edits carousel gap\n * geometry.\n */\n\nimport { tv } from 'tailwind-variants';\nimport type { TwSize } from '@cdevhub/ngx-tw/core';\n\n/** @internal Pixel value of the inter-slide gap, used to compute the slide-basis CSS variable. */\nexport const GAP_PX: Record<TwSize, number> = {\n xs: 8,\n sm: 12,\n md: 16,\n lg: 24,\n xl: 32,\n};\n\n// ── tv() config ───────────────────────────────────────────────────\n\nexport const carouselVariants = tv(\n {\n slots: {\n // `relative` anchors the absolutely-positioned pause control and the\n // overlay-position indicators.\n root: 'relative flex w-full',\n // The scrollable viewport. `tw-scrollbar-none` is the existing utility in\n // theme/_base.css (the requirements doc names this `.tw-scrollbar-hidden`\n // but the codebase ships `.tw-scrollbar-none` — reusing it).\n viewport:\n 'flex min-w-0 w-full snap-mandatory scroll-smooth motion-reduce:scroll-auto tw-scrollbar-none ' +\n 'focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary-500',\n // Per-slide. `flex-basis` is applied via host style binding on\n // `CarouselSlideComponent` (reads `carousel.slideBasis()`).\n slide:\n 'flex-none snap-always min-w-0 transition-opacity duration-150 motion-reduce:transition-none',\n // Component-rendered pause control. `bg-overlay-control` /\n // `hover:bg-overlay-control-hover` resolve through\n // `--color-overlay-control{,-hover}` in `theme/_semantic.css`: a fixed\n // translucent dark capsule whose contrast contract is against the\n // *consumer's slide content underneath*, not the surface palette. See\n // requirements § 12.\n pauseControl:\n 'absolute z-10 inline-flex items-center justify-center size-6 rounded-full bg-overlay-control ' +\n 'text-white hover:bg-overlay-control-hover transition-colors duration-200 motion-reduce:transition-none ' +\n 'focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary-500',\n indicators: 'flex items-center justify-center',\n // The indicator <button> — the pointer/keyboard target. WCAG 2.2\n // SC 2.5.8 wants 24x24 CSS px and the spacing exception is unavailable\n // (indicators sit in a row, a 24px circle on each would intersect its\n // neighbour). A 12px dot cannot be the target, so the target and the\n // painted mark are two elements: this one is floored at 24x24 at every\n // size and stays transparent; `indicator` below is the visible mark and\n // keeps the whole size axis. Targets wider than the floor (numbers at\n // lg/xl, an active line at `w-12`) grow from the mark inside.\n indicatorTarget:\n 'inline-flex shrink-0 items-center justify-center min-h-6 min-w-6 cursor-pointer ' +\n 'focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary-500',\n // The painted mark inside the target. Never focusable — the focus ring\n // lives on `indicatorTarget`, the color transition lives here because\n // this is the element whose `bg-*` changes.\n indicator: 'block transition-colors duration-200 motion-reduce:transition-none',\n },\n variants: {\n orientation: {\n horizontal: {\n root: 'flex-col',\n viewport: 'flex-row overflow-x-auto overflow-y-hidden snap-x',\n indicators: 'flex-row',\n pauseControl: 'bottom-2 start-2',\n },\n vertical: {\n root: 'flex-row',\n viewport: 'flex-col overflow-y-auto overflow-x-hidden snap-y',\n indicators: 'flex-col',\n pauseControl: 'top-2 start-2',\n },\n },\n snapAlign: {\n start: { slide: 'snap-start' },\n center: { slide: 'snap-center' },\n end: { slide: 'snap-end' },\n },\n gap: {\n xs: {},\n sm: {},\n md: {},\n lg: {},\n xl: {},\n },\n variant: {\n dots: { indicator: 'rounded-full' },\n lines: { indicator: 'rounded-full' },\n numbers: {\n indicator: 'rounded-md inline-flex items-center justify-center font-medium',\n },\n },\n size: {\n xs: {},\n sm: {},\n md: {},\n lg: {},\n xl: {},\n },\n position: {\n below: {},\n overlay: {\n // `bg-overlay-control` capsule — same translucent dark token as the\n // pause control. See the `pauseControl` slot above for the rationale.\n indicators: 'absolute z-10 px-2 py-1 rounded-full bg-overlay-control',\n },\n },\n },\n compoundVariants: [\n // Indicator geometry per variant × size.\n //\n // `dots` follows CLAUDE.md's **dot indicator** sub-scale — 2 / 2.5 / 3 /\n // 3.5 / 4, the five-step 2px cadence `badge-dot` was corrected onto. It\n // previously rendered 2/2.5/3/3/3, freezing md/lg/xl at 12px so two of\n // the five advertised steps were dead on the *default* indicator\n // variant. The active-state `scale-150` is a CSS transform, so it\n // composes multiplicatively with every base value here.\n { variant: 'dots', size: 'xs', class: { indicator: 'size-2' } },\n { variant: 'dots', size: 'sm', class: { indicator: 'size-2.5' } },\n { variant: 'dots', size: 'md', class: { indicator: 'size-3' } },\n { variant: 'dots', size: 'lg', class: { indicator: 'size-3.5' } },\n { variant: 'dots', size: 'xl', class: { indicator: 'size-4' } },\n\n { variant: 'lines', size: 'xs', class: { indicator: 'h-1 w-4' } },\n { variant: 'lines', size: 'sm', class: { indicator: 'h-1 w-5' } },\n { variant: 'lines', size: 'md', class: { indicator: 'h-1.5 w-6' } },\n { variant: 'lines', size: 'lg', class: { indicator: 'h-1.5 w-8' } },\n { variant: 'lines', size: 'xl', class: { indicator: 'h-2 w-10' } },\n\n { variant: 'numbers', size: 'xs', class: { indicator: 'size-5 text-2xs' } },\n { variant: 'numbers', size: 'sm', class: { indicator: 'size-6 text-xs' } },\n { variant: 'numbers', size: 'md', class: { indicator: 'size-7 text-xs' } },\n { variant: 'numbers', size: 'lg', class: { indicator: 'size-8 text-sm' } },\n { variant: 'numbers', size: 'xl', class: { indicator: 'size-9 text-sm' } },\n\n // Indicator gap per size — flex-direction is set by the orientation\n // variant so plain `gap-*` works for both row and column.\n { size: 'xs', class: { indicators: 'gap-1' } },\n { size: 'sm', class: { indicators: 'gap-1.5' } },\n { size: 'md', class: { indicators: 'gap-2' } },\n { size: 'lg', class: { indicators: 'gap-2' } },\n { size: 'xl', class: { indicators: 'gap-3' } },\n\n // \"below\" position spacing for indicators relative to the viewport.\n { orientation: 'horizontal', position: 'below', class: { indicators: 'mt-3' } },\n { orientation: 'vertical', position: 'below', class: { indicators: 'ms-3' } },\n\n // Overlay placement — centered along the axis, offset from the edge.\n {\n orientation: 'horizontal',\n position: 'overlay',\n class: { indicators: 'bottom-3 start-1/2 -translate-x-1/2' },\n },\n {\n orientation: 'vertical',\n position: 'overlay',\n class: { indicators: 'top-1/2 -translate-y-1/2 end-3' },\n },\n\n // Per-orientation flex gap on the viewport (slide spacing).\n { orientation: 'horizontal', gap: 'xs', class: { viewport: 'gap-x-2' } },\n { orientation: 'horizontal', gap: 'sm', class: { viewport: 'gap-x-3' } },\n { orientation: 'horizontal', gap: 'md', class: { viewport: 'gap-x-4' } },\n { orientation: 'horizontal', gap: 'lg', class: { viewport: 'gap-x-6' } },\n { orientation: 'horizontal', gap: 'xl', class: { viewport: 'gap-x-8' } },\n { orientation: 'vertical', gap: 'xs', class: { viewport: 'gap-y-2' } },\n { orientation: 'vertical', gap: 'sm', class: { viewport: 'gap-y-3' } },\n { orientation: 'vertical', gap: 'md', class: { viewport: 'gap-y-4' } },\n { orientation: 'vertical', gap: 'lg', class: { viewport: 'gap-y-6' } },\n { orientation: 'vertical', gap: 'xl', class: { viewport: 'gap-y-8' } },\n ],\n defaultVariants: {\n orientation: 'horizontal',\n snapAlign: 'start',\n gap: 'md',\n variant: 'dots',\n size: 'md',\n position: 'below',\n },\n },\n { twMerge: true },\n);\n","// `CarouselComponent` is the canonical \"structural-layout primitive\" exception\n// to CLAUDE.md's 5–6 input cap (precedent: `SplitComponent`). The 17 inputs\n// here are each an independent geometry/behavior axis (orientation, slides\n// math, gap, loop, autoplay knobs, drag, keyboard, snap, active index, ARIA\n// label sources, i18n) — removing any would force consumers to coordinate two\n// carousels or replicate logic externally. Documented in\n// docs/requirements/carousel.requirements.md § 2.2 and § 12.\n\nimport {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChildren,\n DestroyRef,\n effect,\n ElementRef,\n inject,\n input,\n isDevMode,\n model,\n output,\n signal,\n type Signal,\n untracked,\n viewChild,\n} from '@angular/core';\nimport type { TwOrientation, TwSize } from '@cdevhub/ngx-tw/core';\n\nimport { DEFAULT_CAROUSEL_LABELS, formatLabel } from './carousel-labels';\nimport { carouselVariants, GAP_PX } from './carousel-variants';\nimport type {\n TwCarouselAutoplayReason,\n TwCarouselLabels,\n TwCarouselSlideChangeEvent,\n TwCarouselSlideChangeTrigger,\n} from './carousel.types';\n\n// ── CarouselSlideComponent ────────────────────────────────────────\n//\n// This class stays in the same file as `CarouselComponent` **on purpose** —\n// do not \"finish the split\" by moving it out.\n//\n// The two form a true bidirectional dependency: `CarouselComponent` queries\n// the slides with `contentChildren(CarouselSlideComponent)` while every slide\n// resolves its parent with `inject(CarouselComponent)`. Both edges are value\n// edges (a query token and a DI token), so neither is erased at compile time —\n// splitting them across two files produces a circular import at runtime, and\n// whichever module the bundler evaluates second sees `undefined` for the other\n// class. Breaking it needs an injection token or a shared base class first,\n// which is a behavioural change, not a move.\n//\n// The three classes that used to sit below `CarouselComponent` did NOT have\n// this problem — they only inject the parent, never the reverse — and they now\n// live in `carousel-indicators.ts` and `carousel-nav.ts`.\n\n/**\n * A single slide inside a `<tw-carousel>`. Projects arbitrary content via its\n * default slot. Reports its visibility back to the carousel container via a\n * shared `IntersectionObserver`; hidden slides receive `aria-hidden=\"true\"` and\n * the `inert` attribute so their focusable descendants are removed from the tab\n * order.\n */\n@Component({\n selector: 'tw-carousel-slide',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n role: 'group',\n '[attr.aria-roledescription]': '\"slide\"',\n '[attr.aria-label]': 'accessibleName()',\n '[attr.aria-hidden]': '_isHidden() ? \"true\" : null',\n '[attr.inert]': '_isHidden() ? \"\" : null',\n '[class]': 'slideClasses()',\n '[style.flex-basis]': '_basis()',\n },\n template: `<ng-content />`,\n})\nexport class CarouselSlideComponent {\n /** Optional human-readable label for the slide. When provided, used in the slide's `aria-label` as `\"{index + 1} of {total}: {label}\"`. When `null`, uses `\"{index + 1} of {total}\"` only. Defaults to `null`. */\n readonly label = input<string | null>(null);\n\n /** When `true`, the slide is rendered but skipped by Prev/Next, Indicators, keyboard nav, and autoplay. Programmatic `scrollTo` still lands on it. Visually muted (`opacity-50`, `cursor-not-allowed`). Defaults to `false`. */\n readonly disabled = input<boolean>(false);\n\n /** @internal Direct parent carousel. A `tw-carousel-slide` outside a `tw-carousel` is a programmer error — the DI failure throws naturally. */\n readonly carousel = inject(CarouselComponent);\n\n /** @internal Host element reference used by the carousel's `IntersectionObserver`. */\n readonly _hostEl = inject(ElementRef<HTMLElement>).nativeElement;\n\n /** @internal Visibility flag set by the carousel's IntersectionObserver. Initial value is `true` so the first paint does not flash `inert` on every slide. */\n readonly _isVisible = signal(true);\n\n readonly _isHidden = computed(() => !this._isVisible());\n\n /** @internal 0-based index in the parent carousel's slide content. -1 until contentChildren materialises. */\n readonly index = computed(() => this.carousel.slides().indexOf(this));\n\n /** @internal Resolved `aria-label` per the `slideOf` / `slideOfWithLabel` template. */\n readonly accessibleName = computed<string>(() => {\n const labels = this.carousel.resolvedLabels();\n const idx = this.index();\n const total = this.carousel.slides().length;\n const oneBasedIndex = idx < 0 ? 1 : idx + 1;\n const label = this.label();\n if (label !== null && label !== '') {\n return formatLabel(labels.slideOfWithLabel, {\n index: oneBasedIndex,\n total,\n label,\n });\n }\n return formatLabel(labels.slideOf, {\n index: oneBasedIndex,\n total,\n });\n });\n\n readonly slideClasses = computed(() => {\n const base = this.carousel._slotClasses().slide();\n return this.disabled() ? `${base} opacity-50 cursor-not-allowed` : base;\n });\n\n /** @internal Per-slide `flex-basis`. Reads from the carousel so each slide sizes along the viewport's main axis (width for horizontal, height for vertical via `flex-direction`). */\n readonly _basis = computed<string>(() => this.carousel.slideBasis());\n}\n\n// ── CarouselComponent ─────────────────────────────────────────────\n\n/**\n * Slide / swipe gallery primitive. Renders projected `<tw-carousel-slide>`\n * children in a horizontally (or vertically) scrolling viewport with native\n * CSS scroll-snap, optional autoplay, mouse-pointer drag, keyboard navigation,\n * prev/next directive hosts, and an `<tw-carousel-indicators>` companion.\n * Implements the W3C APG carousel pattern: `role=\"region\"` +\n * `aria-roledescription=\"carousel\"` on the host; the inner viewport carries\n * `tabindex=\"0\"` and a polite `aria-live` region when autoplay is off.\n */\n@Component({\n selector: 'tw-carousel',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n role: 'region',\n '[attr.aria-roledescription]': '\"carousel\"',\n '[attr.aria-label]': 'ariaLabel()',\n '[attr.aria-labelledby]': 'ariaLabelledBy()',\n '[class]': 'rootClasses()',\n '(pointerenter)': '_onPointerEnter()',\n '(pointerleave)': '_onPointerLeave()',\n '(focusin)': '_onFocusIn()',\n '(focusout)': '_onFocusOut($event)',\n },\n template: `\n <div\n #viewport\n data-tw-carousel-viewport\n tabindex=\"0\"\n [class]=\"viewportClasses()\"\n [attr.aria-live]=\"autoplay() ? 'off' : 'polite'\"\n (pointerdown)=\"_onPointerDown($event)\"\n (keydown)=\"_onKeydown($event)\"\n >\n <ng-content select=\"tw-carousel-slide\" />\n </div>\n\n <!--\n Pause/play glyphs are inline SVG (not <tw-icon>) to avoid coupling the\n carousel entry point to ngx-tw/icon's registry. The carousel must work\n without consumer icon registration; two structural primitives should\n not couple through an icon registry (audit (h)).\n -->\n @if (autoplay()) {\n <button\n type=\"button\"\n [class]=\"pauseControlClasses()\"\n [attr.aria-label]=\"_pauseControlAriaLabel()\"\n (click)=\"_togglePauseControl()\"\n >\n @if (_isManuallyPausedView()) {\n <svg viewBox=\"0 0 24 24\" class=\"size-3 shrink-0\" aria-hidden=\"true\">\n <path d=\"M8 5v14l11-7L8 5z\" fill=\"currentColor\" />\n </svg>\n } @else {\n <svg viewBox=\"0 0 24 24\" class=\"size-3 shrink-0\" aria-hidden=\"true\">\n <path d=\"M6 5h4v14H6V5zm8 0h4v14h-4V5z\" fill=\"currentColor\" />\n </svg>\n }\n </button>\n }\n\n <ng-content select=\"[twCarouselPrev], [twCarouselNext], tw-carousel-indicators\" />\n <!-- Default slot: catches arbitrary footer content (custom control rows,\n captions, secondary buttons). Render after the named-selector slot so\n dedicated controls keep their canonical position. -->\n <ng-content />\n `,\n})\nexport class CarouselComponent {\n // ── Inputs (17, cap-exempt: structural-layout primitive — precedent SplitComponent) ──\n\n /** Axis along which slides flow. `'horizontal'` is the canonical case; `'vertical'` is supported for tickers and feature lists. Defaults to `'horizontal'`. */\n readonly orientation = input<TwOrientation>('horizontal');\n\n /** Number of slides visible in the viewport. May be fractional (e.g. `1.2` for a \"peek\" of the next slide). Values below `0.5` are clamped to `0.5`; values above the slide count are clamped to the slide count. Defaults to `1`. */\n readonly slidesPerView = input<number>(1);\n\n /** Number of slides advanced per navigation action (button click, keyboard, indicator). Non-integer values are floored. Defaults to `1`. */\n readonly slidesToScroll = input<number>(1);\n\n /** Inter-slide gap on the scroll axis. Mapped via the canonical spacing scale. Defaults to `'md'`. */\n readonly gap = input<TwSize>('md');\n\n /** When `true`, navigation wraps around at the boundaries. Prev at slide 0 jumps to the last page; Next at the last page jumps to slide 0. Implementation is jumpless via a brief opacity mask. Defaults to `false`. */\n readonly loop = input<boolean>(false);\n\n /** When `true`, the carousel auto-advances by `slidesToScroll` every `autoplayInterval` ms. Pauses on hover, focus-in, drag, document hidden, or user interaction. Defaults to `false`. */\n readonly autoplay = input<boolean>(false);\n\n /** Milliseconds between autoplay advances. Values below `1000` are clamped to `1000` per WCAG 2.2.2. Defaults to `5000`. */\n readonly autoplayInterval = input<number>(5000);\n\n /** Pauses autoplay while the pointer is over the container. Defaults to `true` because losing autoplay on hover is the expected gallery behavior — opt-out is the special case. */\n readonly pauseOnHover = input<boolean>(true);\n\n /** Pauses autoplay while keyboard focus is anywhere inside the container. Defaults to `true` for WCAG 2.2.2 compliance — opt-out is the special case. */\n readonly pauseOnFocusIn = input<boolean>(true);\n\n /** When `true`, the user may pan the slides via mouse pointer drag; touch is left to native scroll. Pointer events are intercepted only when the drag exceeds a 6-pixel threshold so clicks inside slides still work. Defaults to `true` because galleries are draggable by user expectation — opt-out is the special case. */\n readonly draggable = input<boolean>(true);\n\n /** When `true`, the viewport responds to Arrow / Home / End / PageUp / PageDown when focus is inside it. Defaults to `true` for keyboard accessibility — opt-out is the special case. */\n readonly keyboard = input<boolean>(true);\n\n /** CSS `scroll-snap-align` value applied to each slide. `'start'` is the standard gallery behavior; `'center'` is used for peek/preview layouts. Defaults to `'start'`. */\n readonly snapAlign = input<'start' | 'center' | 'end'>('start');\n\n /** Two-way bound 0-based index of the first visible slide in the current page. Setting from the parent scrolls the viewport smoothly to align that slide; reading reflects user-driven scroll position after `scrollend`. Defaults to `0`. */\n readonly activeIndex = model<number>(0);\n\n /** Accessible name for the carousel region. Mirrored to `aria-label`. If both this and `aria-labelledby` are `null`, a one-time dev-mode `console.warn` is logged (production builds never log). Defaults to `null`. */\n readonly ariaLabel = input<string | null>(null, { alias: 'aria-label' });\n\n /** ID of an element labeling the carousel. Mirrored to `aria-labelledby`. Either `aria-label` or `aria-labelledby` SHOULD be provided. Defaults to `null`. */\n readonly ariaLabelledBy = input<string | null>(null, { alias: 'aria-labelledby' });\n\n /** Localizable strings for prev/next/pause/resume/indicator/slide-of templates. Unset keys fall back to the English defaults in `DEFAULT_CAROUSEL_LABELS`. Defaults to `{}`. */\n readonly labels = input<Partial<TwCarouselLabels>>({});\n\n // ── Outputs ───────────────────────────────────────────────────\n\n /** Fires when the active index changes. Payload identifies the previous and new index plus the trigger source. */\n readonly slideChange = output<TwCarouselSlideChangeEvent>();\n\n /** Fires when autoplay transitions from running to paused. Payload is the pause reason. */\n readonly autoplayPaused = output<TwCarouselAutoplayReason>();\n\n /** Fires when autoplay transitions from paused to running. */\n readonly autoplayResumed = output<void>();\n\n // ── Internal references ────────────────────────────────────────\n\n private readonly _destroyRef = inject(DestroyRef);\n\n /** @internal The scrollable viewport element. */\n readonly _viewportRef = viewChild.required<ElementRef<HTMLDivElement>>('viewport');\n\n /** @internal Projected slides in DOM order. */\n readonly slides = contentChildren(CarouselSlideComponent, { descendants: false });\n\n // ── Resolved configuration ─────────────────────────────────────\n\n /**\n * @internal Resolved label record with English defaults filled in.\n *\n * Explicitly-undefined keys are dropped before merging. Root `tsconfig.json`\n * does not set `exactOptionalPropertyTypes`, so `[labels]=\"{ indicator:\n * t('carousel.indicator') }\"` type-checks even when `t()` returns\n * `string | undefined` — and a plain spread would then overwrite the default\n * with `undefined`, which reaches `formatLabel()` and throws\n * `Cannot read properties of undefined (reading 'replace')` inside a\n * `computed`, taking the whole render down. Same filter `table.ts` and\n * `timeline.ts` already use; `Required<>` then guarantees a string per key.\n */\n readonly resolvedLabels = computed<Required<TwCarouselLabels>>(() => {\n const overrides = Object.fromEntries(\n Object.entries(this.labels() ?? {}).filter(([, value]) => value !== undefined),\n );\n return { ...DEFAULT_CAROUSEL_LABELS, ...overrides } as Required<TwCarouselLabels>;\n });\n\n /** @internal Effective `slidesPerView` clamped to `[0.5, slideCount]`. */\n readonly _effectiveSlidesPerView = computed<number>(() => {\n const count = this.slides().length;\n const raw = this.slidesPerView();\n if (count === 0) return Math.max(0.5, raw);\n return Math.max(0.5, Math.min(raw, count));\n });\n\n /** @internal Effective `slidesToScroll` floored to a positive integer. Read by child indicators directive (`CarouselIndicatorsComponent._onClick`) as a signal. */\n readonly _effectiveSlidesToScroll = computed<number>(() => {\n return Math.max(1, Math.floor(this.slidesToScroll()));\n });\n\n /** @internal Autoplay interval clamped to ≥ 1000 ms per WCAG 2.2.2. */\n readonly _effectiveAutoplayInterval = computed<number>(() => {\n return Math.max(1000, this.autoplayInterval());\n });\n\n /** Number of distinct pages (groups of `slidesToScroll` slides) the carousel can land on. Reactive. */\n readonly pageCount: Signal<number> = computed<number>(() => {\n const count = this.slides().length;\n if (count === 0) return 1;\n const perView = this._effectiveSlidesPerView();\n const toScroll = this._effectiveSlidesToScroll();\n return Math.max(1, Math.ceil((count - perView) / toScroll) + 1);\n });\n\n /** 0-based page index that contains `activeIndex`. Reactive. */\n readonly activePage: Signal<number> = computed<number>(() => {\n return Math.floor(this.activeIndex() / this._effectiveSlidesToScroll());\n });\n\n /** The highest slide index the carousel can land on given the current `slidesPerView`. Equals `max(0, slideCount - ceil(effectiveSlidesPerView))`. Reactive. Every site that asks \"where is the last legal landing position?\" goes through this signal. */\n readonly lastReachableIndex: Signal<number> = computed<number>(() => {\n const count = this.slides().length;\n if (count === 0) return 0;\n return Math.max(0, count - Math.ceil(this._effectiveSlidesPerView()));\n });\n\n /** @internal `true` when the carousel is at slide 0 (drives prev directive `disabled`). */\n readonly isAtStart: Signal<boolean> = computed<boolean>(() => this.activeIndex() <= 0);\n\n /** @internal `true` when the carousel is at the last reachable slide (drives next directive `disabled`). */\n readonly isAtEnd: Signal<boolean> = computed<boolean>(\n () => this.activeIndex() >= this.lastReachableIndex(),\n );\n\n /** @internal Per-slide `flex-basis`. Read by each `CarouselSlideComponent` host style binding to size slides along the viewport's main axis. Reactive. */\n readonly slideBasis = computed<string>(() => {\n const perView = this._effectiveSlidesPerView();\n const gapPx = GAP_PX[this.gap()];\n // calc((100% - ((perView - 1) * gap-px)) / perView)\n return `calc((100% - ${(perView - 1) * gapPx}px) / ${perView})`;\n });\n\n // ── tv() resolution ────────────────────────────────────────────\n\n private readonly _variantResult = computed(() =>\n carouselVariants({\n orientation: this.orientation(),\n snapAlign: this.snapAlign(),\n gap: this.gap(),\n }),\n );\n\n /** @internal Slot-class accessor used by child slides and indicators. */\n readonly _slotClasses = computed(() => this._variantResult());\n\n readonly rootClasses = computed(() => this._variantResult().root());\n readonly viewportClasses = computed(() => this._variantResult().viewport());\n readonly pauseControlClasses = computed(() => this._variantResult().pauseControl());\n\n // ── State signals ──────────────────────────────────────────────\n\n /** @internal Last interaction source — written before any navigation triggers scroll, read by the settle handler. */\n private readonly _lastInteractionSource = signal<TwCarouselSlideChangeTrigger | null>(\n null,\n );\n\n /** @internal Suppresses the scroll-end recompute during a loop-jump. */\n private readonly _isLoopJumping = signal(false);\n\n private readonly _isHovered = signal(false);\n private readonly _hasFocusInside = signal(false);\n private readonly _isTabVisible = signal(true);\n private readonly _isDragging = signal(false);\n private readonly _isManuallyPaused = signal(false);\n private readonly _postInteractionPauseUntil = signal<number | null>(null);\n\n /** @internal RTL sign factor applied to scroll-position math. `+1` LTR, `-1` RTL. */\n private readonly _rtlSign = signal<1 | -1>(1);\n\n // ── Resolved pause-control labels ──────────────────────────────\n\n readonly _pauseControlAriaLabel = computed<string>(() => {\n const labels = this.resolvedLabels();\n return this._isManuallyPaused() ? labels.resumeAutoplay : labels.pauseAutoplay;\n });\n\n /** @internal Public accessor for the template. */\n readonly _isManuallyPausedView = this._isManuallyPaused.asReadonly();\n\n // ── Internal API used by child directives / indicators ─────────\n\n /**\n * @internal Sets the \"last interaction source\" signal so the upcoming\n * navigation call emits `slideChange` with the correct trigger. Called by\n * `[twCarouselPrev]`, `[twCarouselNext]`, and the indicators before they\n * invoke `next()` / `prev()` / `scrollTo()`.\n */\n _setLastInteractionSource(source: TwCarouselSlideChangeTrigger): void {\n this._lastInteractionSource.set(source);\n }\n\n // ── Lifecycle ──────────────────────────────────────────────────\n\n constructor() {\n // One-time dev warnings.\n afterNextRender(() => {\n this._setupViewport();\n });\n\n // Dev-mode warnings. Each one is deduped per component instance so they\n // re-evaluate when consumer inputs change but never spam the console. The\n // earlier implementation used `afterNextRender` which fires once at\n // construction — if a consumer later set `slidesPerView = 0.1`, the\n // threshold warning never surfaced (audit (i)).\n if (isDevMode()) {\n let warnedMissingLabel = false;\n let warnedLowInterval = false;\n let warnedLowPerView = false;\n effect(() => {\n if (\n !warnedMissingLabel &&\n this.ariaLabel() === null &&\n this.ariaLabelledBy() === null\n ) {\n warnedMissingLabel = true;\n console.warn(\n '[tw-carousel] Provide either `aria-label` or `aria-labelledby` so the carousel region has an accessible name (WCAG 4.1.2).',\n );\n }\n if (!warnedLowInterval && this.autoplayInterval() < 1000) {\n warnedLowInterval = true;\n console.warn(\n `[tw-carousel] autoplayInterval=${this.autoplayInterval()} is below the 1000 ms WCAG 2.2.2 floor; clamped to 1000.`,\n );\n }\n if (!warnedLowPerView && this.slidesPerView() < 0.5) {\n warnedLowPerView = true;\n console.warn(\n `[tw-carousel] slidesPerView=${this.slidesPerView()} is below the 0.5 floor; clamped.`,\n );\n }\n });\n }\n\n // Autoplay state machine — start/stop the interval based on inputs + pause state.\n effect((onCleanup) => {\n const autoplay = this.autoplay();\n const paused = this._isPaused();\n const interval = this._effectiveAutoplayInterval();\n\n if (!autoplay || paused) return;\n\n const handle = setInterval(() => {\n this._lastInteractionSource.set('autoplay');\n this.next();\n }, interval);\n onCleanup(() => clearInterval(handle));\n });\n\n // Pause/resume transition emissions. Track previous state across effect\n // invocations and emit on actual transitions while autoplay is on.\n // The initial `false` is correct ONLY because `autoplay` defaults to\n // `false`: the first effect run sees `autoplay=false` and short-circuits\n // without emitting, regardless of the pause state. If the default ever\n // flips to `true`, this needs rethinking (audit (f)).\n let prevPaused = false;\n effect(() => {\n const autoplay = this.autoplay();\n const paused = this._isPaused();\n if (autoplay) {\n if (paused && !prevPaused) {\n const reason = this._currentPauseReason();\n if (reason !== null) this.autoplayPaused.emit(reason);\n } else if (!paused && prevPaused) {\n this.autoplayResumed.emit();\n }\n }\n prevPaused = paused;\n });\n\n // Slide-set changes: re-observe with IntersectionObserver, clamp activeIndex.\n // Only `slides()` is a reactive trigger. The activeIndex read+write is wrapped\n // in `untracked` so the clamp does not register `activeIndex` as a dependency —\n // otherwise the `.set` would re-trigger this effect (read→write signal cycle).\n effect(() => {\n const slides = this.slides();\n this._reobserveSlides(slides);\n const count = slides.length;\n untracked(() => {\n if (count > 0 && this.activeIndex() > count - 1) {\n this.activeIndex.set(count - 1);\n }\n });\n });\n\n this._destroyRef.onDestroy(() => {\n this._teardownViewport();\n });\n }\n\n // ── Pause state aggregation ────────────────────────────────────\n\n private readonly _isPaused = computed<boolean>(() => {\n if (this.pauseOnHover() && this._isHovered()) return true;\n if (this.pauseOnFocusIn() && this._hasFocusInside()) return true;\n if (!this._isTabVisible()) return true;\n if (this._isDragging()) return true;\n if (this._isManuallyPaused()) return true;\n const until = this._postInteractionPauseUntil();\n if (until !== null && Date.now() < until) return true;\n return false;\n });\n\n private _currentPauseReason(): TwCarouselAutoplayReason | null {\n if (this._isManuallyPaused()) return 'manual';\n if (!this._isTabVisible()) return 'visibility';\n if (this._isDragging()) return 'interaction';\n const until = this._postInteractionPauseUntil();\n if (until !== null && Date.now() < until) return 'interaction';\n if (this.pauseOnFocusIn() && this._hasFocusInside()) return 'focus';\n if (this.pauseOnHover() && this._isHovered()) return 'hover';\n return null;\n }\n\n // ── Viewport / observer setup ───────────────────────────────────\n\n private _intersectionObserver: IntersectionObserver | null = null;\n private _resizeObserver: ResizeObserver | null = null;\n private _onScrollEndBound: (() => void) | null = null;\n private _onScrollDebouncedBound: (() => void) | null = null;\n private _scrollDebounceTimer: ReturnType<typeof setTimeout> | null = null;\n /** Handle for the post-interaction autoplay-pause expiry (see `_onPointerUp`). */\n private _postInteractionPauseTimer: ReturnType<typeof setTimeout> | null = null;\n private _onVisibilityChangeBound: (() => void) | null = null;\n\n private _setupViewport(): void {\n const viewport = this._viewportRef().nativeElement;\n\n // RTL detection (read once; consumers needing dynamic dir changes can\n // re-render the host).\n try {\n const direction = getComputedStyle(viewport).direction;\n this._rtlSign.set(direction === 'rtl' ? -1 : 1);\n } catch {\n this._rtlSign.set(1);\n }\n\n // Active-index detection: scrollend if available, debounced scroll fallback.\n const hasScrollEnd = 'onscrollend' in window;\n if (hasScrollEnd) {\n this._onScrollEndBound = () => this._handleScrollSettled();\n viewport.addEventListener('scrollend', this._onScrollEndBound, { passive: true });\n } else {\n this._onScrollDebouncedBound = () => {\n if (this._scrollDebounceTimer !== null) {\n clearTimeout(this._scrollDebounceTimer);\n }\n this._scrollDebounceTimer = setTimeout(() => {\n this._scrollDebounceTimer = null;\n this._handleScrollSettled();\n }, 150);\n };\n viewport.addEventListener('scroll', this._onScrollDebouncedBound, {\n passive: true,\n });\n }\n\n // Tab visibility for autoplay gating.\n if (typeof document !== 'undefined') {\n this._isTabVisible.set(document.visibilityState !== 'hidden');\n this._onVisibilityChangeBound = () => {\n this._isTabVisible.set(document.visibilityState !== 'hidden');\n };\n document.addEventListener('visibilitychange', this._onVisibilityChangeBound, {\n passive: true,\n });\n }\n\n // Observers for slide visibility and viewport-size changes.\n if (typeof IntersectionObserver !== 'undefined') {\n this._intersectionObserver = new IntersectionObserver(\n (entries) => {\n for (const entry of entries) {\n const slide = (entry.target as HTMLElement & { _twSlide?: CarouselSlideComponent })\n ._twSlide;\n if (slide) {\n slide._isVisible.set(\n entry.isIntersecting && entry.intersectionRatio >= 0.5,\n );\n }\n }\n },\n { root: viewport, threshold: 0.5 },\n );\n this._reobserveSlides(this.slides());\n }\n\n if (typeof ResizeObserver !== 'undefined') {\n this._resizeObserver = new ResizeObserver(() => {\n // Reflow: keep activeIndex aligned to its slide position.\n this._scrollToIndex(this.activeIndex(), 'instant');\n });\n this._resizeObserver.observe(viewport);\n }\n }\n\n private _teardownViewport(): void {\n const viewport = this._viewportRef()?.nativeElement;\n if (viewport && this._onScrollEndBound) {\n viewport.removeEventListener('scrollend', this._onScrollEndBound);\n }\n if (viewport && this._onScrollDebouncedBound) {\n viewport.removeEventListener('scroll', this._onScrollDebouncedBound);\n }\n if (this._scrollDebounceTimer !== null) {\n clearTimeout(this._scrollDebounceTimer);\n this._scrollDebounceTimer = null;\n }\n if (typeof document !== 'undefined' && this._onVisibilityChangeBound) {\n document.removeEventListener('visibilitychange', this._onVisibilityChangeBound);\n }\n this._intersectionObserver?.disconnect();\n this._intersectionObserver = null;\n this._resizeObserver?.disconnect();\n this._resizeObserver = null;\n if (this._postInteractionPauseTimer !== null) {\n clearTimeout(this._postInteractionPauseTimer);\n this._postInteractionPauseTimer = null;\n }\n if (this._loopJumpHandle !== null) {\n clearTimeout(this._loopJumpHandle);\n this._loopJumpHandle = null;\n }\n if (this._loopJumpSafetyHandle !== null) {\n clearTimeout(this._loopJumpSafetyHandle);\n this._loopJumpSafetyHandle = null;\n }\n if (this._dragCleanup !== null) {\n this._dragCleanup();\n this._dragCleanup = null;\n }\n }\n\n private _reobserveSlides(slides: readonly CarouselSlideComponent[]): void {\n const observer = this._intersectionObserver;\n if (!observer) return;\n observer.disconnect();\n for (const slide of slides) {\n // Locate the slide host element via document inspection. The host element\n // is the first ancestor with the `tw-carousel-slide` tag — but with\n // `contentChildren` we don't have direct ElementRef access on each slide.\n // Use the public `_hostEl` set in the slide constructor.\n const el = (slide as unknown as { _hostEl: HTMLElement | null })._hostEl;\n if (el) {\n (el as HTMLElement & { _twSlide?: CarouselSlideComponent })._twSlide = slide;\n observer.observe(el);\n }\n }\n }\n\n // ── Scroll/active-index logic ───────────────────────────────────\n\n // The scroll-math contract: both reads (`_handleScrollSettled`) and writes\n // (`_scrollToIndex`) consult the actually-rendered slide geometry via each\n // slide host's `offsetLeft` / `offsetTop`. The synthetic\n // `step = (dimension + gap) / perView` from earlier revisions has been\n // removed — fractional `slidesPerView`, container resize, or sub-pixel gap\n // rounding could cause that step to land between snap points and the\n // browser would snap back to the previously-visible tile. Offsets are\n // authoritative.\n //\n // RTL: in modern browsers (negative-scroll model) `viewport.scrollLeft` is\n // 0 at the logical start and decreases toward `-(scrollWidth - clientWidth)`\n // as the user scrolls toward the logical end. Slide DOM order is preserved\n // but layout is mirrored: `slide[0].offsetLeft` is the largest, not zero.\n // We normalize by transforming each slide's offset into a \"logical offset\"\n // that increases monotonically along the scroll axis, and read the current\n // scroll as `Math.abs(scrollLeft)`. `_rtlSign()` is applied **at most once**\n // — on writes (`viewport.scrollTo({ left: -logicalOffset })`).\n\n private _logicalOffset(slideEl: HTMLElement): number {\n const viewport = this._viewportRef().nativeElement;\n if (this.orientation() === 'horizontal') {\n const isRtl = this._rtlSign() === -1;\n return isRtl\n ? viewport.scrollWidth - slideEl.offsetLeft - slideEl.offsetWidth\n : slideEl.offsetLeft;\n }\n return slideEl.offsetTop;\n }\n\n private _currentLogicalScroll(): number {\n const viewport = this._viewportRef().nativeElement;\n if (this.orientation() === 'horizontal') {\n // `Math.abs` is the single sign normalization on reads. Works for both\n // LTR (scrollLeft ≥ 0) and RTL negative-scroll (scrollLeft ≤ 0).\n return Math.abs(viewport.scrollLeft);\n }\n return viewport.scrollTop;\n }\n\n private _findClosestSlideIndex(targetLogicalScroll: number): number {\n const slides = this.slides();\n if (slides.length === 0) return 0;\n let bestIndex = 0;\n let bestDistance = Number.POSITIVE_INFINITY;\n for (let i = 0; i < slides.length; i++) {\n const el = (slides[i] as unknown as { _hostEl: HTMLElement | null })._hostEl;\n if (!el) continue;\n const distance = Math.abs(this._logicalOffset(el) - targetLogicalScroll);\n if (distance < bestDistance) {\n bestDistance = distance;\n bestIndex = i;\n }\n }\n return bestIndex;\n }\n\n private _handleScrollSettled(): void {\n if (this._isLoopJumping()) return;\n if (this.slides().length === 0) {\n this._lastInteractionSource.set(null);\n return;\n }\n const closest = this._findClosestSlideIndex(this._currentLogicalScroll());\n const clamped = Math.max(0, Math.min(closest, this.lastReachableIndex()));\n const from = this.activeIndex();\n if (clamped !== from) {\n this._emitSlideChange(from, clamped, this._lastInteractionSource() ?? 'pointer');\n this.activeIndex.set(clamped);\n }\n this._lastInteractionSource.set(null);\n }\n\n private _emitSlideChange(\n from: number,\n to: number,\n trigger: TwCarouselSlideChangeTrigger,\n ): void {\n this.slideChange.emit({ from, to, trigger });\n }\n\n // ── Navigation methods (imperative API) ─────────────────────────\n\n /** Advance by `slidesToScroll`. Wraps if `loop` is `true`; no-op at the last page when `loop` is `false`. Emits `slideChange` with trigger `'programmatic'` when called externally. */\n next(): void {\n const trigger = this._lastInteractionSource() ?? 'programmatic';\n this._lastInteractionSource.set(trigger);\n const count = this.slides().length;\n if (count === 0) return;\n const toScroll = this._effectiveSlidesToScroll();\n const lastReachable = this.lastReachableIndex();\n let target = this._findNextEnabled(this.activeIndex() + toScroll, +1);\n if (target > lastReachable) {\n // Past the last reachable index.\n if (this.loop()) {\n this._loopJumpTo(0);\n return;\n }\n target = lastReachable;\n if (target === this.activeIndex()) {\n this._lastInteractionSource.set(null);\n return;\n }\n }\n this._scrollToIndex(target);\n }\n\n /** Retreat by `slidesToScroll`. Wraps if `loop` is `true`; no-op at slide 0 when `loop` is `false`. Emits `slideChange` with trigger `'programmatic'` when called externally. */\n prev(): void {\n const trigger = this._lastInteractionSource() ?? 'programmatic';\n this._lastInteractionSource.set(trigger);\n const count = this.slides().length;\n if (count === 0) return;\n const toScroll = this._effectiveSlidesToScroll();\n let target = this._findNextEnabled(this.activeIndex() - toScroll, -1);\n if (target < 0) {\n if (this.loop()) {\n this._loopJumpTo(this.lastReachableIndex());\n return;\n }\n target = 0;\n if (target === this.activeIndex()) {\n this._lastInteractionSource.set(null);\n return;\n }\n }\n this._scrollToIndex(target);\n }\n\n /** Jump to a specific 0-based slide index. `opts.behavior` is `'smooth' | 'instant'`; default is `'smooth'` unless `prefers-reduced-motion: reduce` is set, in which case the default is `'instant'`. */\n scrollTo(index: number, opts?: { behavior?: 'smooth' | 'instant' }): void {\n const trigger = this._lastInteractionSource() ?? 'programmatic';\n this._lastInteractionSource.set(trigger);\n this._scrollToIndex(index, this._resolveBehavior(opts));\n }\n\n /** Pause autoplay. `reason` defaults to `'manual'`. */\n pause(_reason: TwCarouselAutoplayReason = 'manual'): void {\n this._isManuallyPaused.set(true);\n }\n\n /** Resume autoplay if `autoplay` input is `true`. */\n resume(): void {\n this._isManuallyPaused.set(false);\n }\n\n private _findNextEnabled(start: number, direction: 1 | -1): number {\n const slides = this.slides();\n const count = slides.length;\n if (count === 0) return 0;\n let idx = start;\n while (idx >= 0 && idx < count) {\n if (!slides[idx].disabled()) return idx;\n idx += direction;\n }\n return start;\n }\n\n private _scrollToIndex(\n index: number,\n behavior: 'smooth' | 'instant' = 'smooth',\n ): void {\n const viewport = this._viewportRef()?.nativeElement;\n if (!viewport) return;\n const slides = this.slides();\n const count = slides.length;\n if (count === 0) return;\n const clamped = Math.max(0, Math.min(index, count - 1));\n const from = this.activeIndex();\n\n const targetEl = (slides[clamped] as unknown as { _hostEl: HTMLElement | null })\n ._hostEl;\n const horizontal = this.orientation() === 'horizontal';\n // Map our public `'instant'` to the DOM-standard `'auto'` literal.\n const domBehavior: ScrollBehavior = behavior === 'instant' ? 'auto' : 'smooth';\n\n if (targetEl) {\n const logicalOffset = this._logicalOffset(targetEl);\n if (typeof viewport.scrollTo === 'function') {\n // RTL writes apply `_rtlSign()` exactly once — no double-multiplication\n // anywhere on the read/write paths (see audit (a)).\n const opts: ScrollToOptions = horizontal\n ? { left: logicalOffset * this._rtlSign(), behavior: domBehavior }\n : { top: logicalOffset, behavior: domBehavior };\n viewport.scrollTo(opts);\n } else if (horizontal) {\n viewport.scrollLeft = logicalOffset * this._rtlSign();\n } else {\n viewport.scrollTop = logicalOffset;\n }\n }\n\n if (clamped !== from) {\n this._emitSlideChange(\n from,\n clamped,\n this._lastInteractionSource() ?? 'programmatic',\n );\n this.activeIndex.set(clamped);\n }\n // Clear the source — `_handleScrollSettled` will not re-emit because the\n // index already matches.\n this._lastInteractionSource.set(null);\n }\n\n /**\n * @internal Resolves the effective scroll behavior. Explicit caller-supplied\n * values are honoured verbatim; otherwise checks\n * `matchMedia('(prefers-reduced-motion: reduce)')` and returns `'instant'`\n * when the user has reduced-motion enabled, `'smooth'` otherwise. See B(d).\n */\n private _resolveBehavior(\n opts?: { behavior?: 'smooth' | 'instant' },\n ): 'smooth' | 'instant' {\n if (opts?.behavior) return opts.behavior;\n if (typeof window !== 'undefined' && typeof window.matchMedia === 'function') {\n try {\n if (window.matchMedia('(prefers-reduced-motion: reduce)').matches) {\n return 'instant';\n }\n } catch {\n // matchMedia may throw in non-browser environments; fall through.\n }\n }\n return 'smooth';\n }\n\n private _loopJumpHandle: ReturnType<typeof setTimeout> | null = null;\n private _loopJumpSafetyHandle: ReturnType<typeof setTimeout> | null = null;\n\n private _loopJumpTo(index: number): void {\n this._isLoopJumping.set(true);\n const viewport = this._viewportRef().nativeElement;\n viewport.classList.add('tw-carousel-loop-jump');\n\n // If a previous loop-jump is still pending, drop its timers — the new\n // jump supersedes it.\n if (this._loopJumpHandle !== null) clearTimeout(this._loopJumpHandle);\n if (this._loopJumpSafetyHandle !== null) clearTimeout(this._loopJumpSafetyHandle);\n\n // Sequencing the opacity mask. The keyframe in `theme/_base.css`\n // (`tw-carousel-loop-jump`) runs 0% → 40% → 100% over 200ms with the\n // opacity nadir (0.55) at 40% — i.e. 80ms in. We defer the instant scroll\n // until ~80ms after class-add so the swap happens at peak occlusion,\n // *under* the mask, rather than before the dip starts (audit (e)). Under\n // `prefers-reduced-motion: reduce`, `_base.css:361` zeroes the animation\n // duration; the scroll still fires at +80ms, which is a negligible delay\n // and avoids a code branch.\n this._loopJumpHandle = setTimeout(() => {\n this._loopJumpHandle = null;\n // _scrollToIndex handles the slideChange emission and the activeIndex\n // update; we just need the loop-jump flag set so the scrollend\n // recompute does not re-emit.\n this._scrollToIndex(index, 'instant');\n }, 80);\n\n const cleanup = () => {\n viewport.classList.remove('tw-carousel-loop-jump');\n this._isLoopJumping.set(false);\n viewport.removeEventListener('animationend', cleanup);\n if (this._loopJumpSafetyHandle !== null) {\n clearTimeout(this._loopJumpSafetyHandle);\n this._loopJumpSafetyHandle = null;\n }\n };\n viewport.addEventListener('animationend', cleanup, { once: true });\n // Safety net — if the animation never fires (reduced-motion override,\n // jsdom environment), clear after the keyframe duration.\n this._loopJumpSafetyHandle = setTimeout(cleanup, 220);\n }\n\n // ── Host event handlers ─────────────────────────────────────────\n\n _onPointerEnter(): void {\n this._isHovered.set(true);\n }\n\n _onPointerLeave(): void {\n this._isHovered.set(false);\n }\n\n _onFocusIn(): void {\n this._hasFocusInside.set(true);\n }\n\n _onFocusOut(event: FocusEvent): void {\n const root = (event.currentTarget as HTMLElement) ?? null;\n const next = event.relatedTarget as Node | null;\n if (root && next && root.contains(next)) {\n return;\n }\n this._hasFocusInside.set(false);\n }\n\n // ── Pointer drag handler ───────────────────────────────────────\n\n private _dragStart: {\n x: number;\n y: number;\n scrollLeft: number;\n scrollTop: number;\n pointerId: number;\n } | null = null;\n\n // Per-drag cleanup closure. Set in `_onPointerDown`, invoked from\n // `_onPointerUp` AND from `_teardownViewport` (the DestroyRef hook) — that\n // covers the destroy-mid-drag race where the component is torn down before\n // the `pointerup`/`pointercancel` listeners fire (audit (g)). The closure\n // nulls the field itself so a second invocation is a no-op.\n private _dragCleanup: (() => void) | null = null;\n\n _onPointerDown(event: PointerEvent): void {\n if (!this.draggable()) return;\n if (!event.isPrimary || event.pointerType === 'touch') return;\n const viewport = this._viewportRef().nativeElement;\n this._dragStart = {\n x: event.clientX,\n y: event.clientY,\n scrollLeft: viewport.scrollLeft,\n scrollTop: viewport.scrollTop,\n pointerId: event.pointerId,\n };\n const moveHandler = (e: PointerEvent) => this._onPointerMove(e);\n const upHandler = (e: PointerEvent) => {\n // Invoke the unified cleanup so the destroy path and the natural-up\n // path go through the same code.\n if (this._dragCleanup !== null) this._dragCleanup();\n this._onPointerUp(e);\n };\n window.addEventListener('pointermove', moveHandler);\n window.addEventListener('pointerup', upHandler);\n window.addEventListener('pointercancel', upHandler);\n this._dragCleanup = () => {\n window.removeEventListener('pointermove', moveHandler);\n window.removeEventListener('pointerup', upHandler);\n window.removeEventListener('pointercancel', upHandler);\n this._dragCleanup = null;\n };\n }\n\n private _onPointerMove(event: PointerEvent): void {\n const start = this._dragStart;\n if (!start) return;\n const horizontal = this.orientation() === 'horizontal';\n const delta = horizontal ? event.clientX - start.x : event.clientY - start.y;\n if (!this._isDragging() && Math.abs(delta) <= 6) return;\n const viewport = this._viewportRef().nativeElement;\n if (!this._isDragging()) {\n this._isDragging.set(true);\n viewport.style.scrollSnapType = 'none';\n viewport.classList.add('cursor-grabbing');\n try {\n viewport.setPointerCapture(start.pointerId);\n } catch {\n // setPointerCapture may throw if the element isn't focusable in some browsers.\n }\n }\n if (horizontal) {\n viewport.scrollLeft = start.scrollLeft - delta * this._rtlSign();\n } else {\n viewport.scrollTop = start.scrollTop - delta;\n }\n }\n\n private _onPointerUp(_event: PointerEvent): void {\n // Capture `_dragStart` into a local *before* nulling the field so the\n // `releasePointerCapture` call below still has the pointerId. Order\n // matters: a re-entrant pointer event (some browsers fire `pointercancel`\n // synchronously inside `releasePointerCapture`) must see `_dragStart === null`\n // and bail at the `!this._isDragging()` guard or via `_dragCleanup` no-op.\n const start = this._dragStart;\n this._dragStart = null;\n if (!this._isDragging()) return;\n const viewport = this._viewportRef().nativeElement;\n viewport.style.scrollSnapType = '';\n viewport.classList.remove('cursor-grabbing');\n try {\n if (start) viewport.releasePointerCapture(start.pointerId);\n } catch {\n // ignore\n }\n this._isDragging.set(false);\n this._lastInteractionSource.set('pointer');\n // Suppress the click that immediately follows a drag-release.\n const swallowClick = (e: MouseEvent) => {\n e.stopPropagation();\n e.preventDefault();\n viewport.removeEventListener('click', swallowClick, true);\n };\n viewport.addEventListener('click', swallowClick, true);\n queueMicrotask(() => {\n viewport.removeEventListener('click', swallowClick, true);\n });\n // Post-interaction autoplay pause.\n this._postInteractionPauseUntil.set(\n Date.now() + this._effectiveAutoplayInterval() * 2,\n );\n // Held in a field so `_teardownViewport` can clear it. Unstored, this\n // fires at least two autoplay intervals after destroy and writes a signal\n // on a torn-down component.\n if (this._postInteractionPauseTimer !== null) {\n clearTimeout(this._postInteractionPauseTimer);\n }\n this._postInteractionPauseTimer = setTimeout(() => {\n this._postInteractionPauseTimer = null;\n if (\n this._postInteractionPauseUntil() !== null &&\n Date.now() >= (this._postInteractionPauseUntil() ?? 0)\n ) {\n this._postInteractionPauseUntil.set(null);\n }\n }, this._effectiveAutoplayInterval() * 2 + 16);\n }\n\n // ── Keyboard handler ───────────────────────────────────────────\n\n _onKeydown(event: KeyboardEvent): void {\n if (!this.keyboard()) return;\n const horizontal = this.orientation() === 'horizontal';\n const rtl = this._rtlSign() === -1;\n let handled = false;\n switch (event.key) {\n case 'ArrowLeft':\n if (horizontal) {\n this._lastInteractionSource.set('keyboard');\n if (rtl) this.next();\n else this.prev();\n handled = true;\n }\n break;\n case 'ArrowRight':\n if (horizontal) {\n this._lastInteractionSource.set('keyboard');\n if (rtl) this.prev();\n else this.next();\n handled = true;\n }\n break;\n case 'ArrowUp':\n this._lastInteractionSource.set('keyboard');\n this.prev();\n handled = true;\n break;\n case 'ArrowDown':\n this._lastInteractionSource.set('keyboard');\n this.next();\n handled = true;\n break;\n case 'Home':\n this._lastInteractionSource.set('keyboard');\n this.scrollTo(0);\n handled = true;\n break;\n case 'End': {\n this._lastInteractionSource.set('keyboard');\n const lastIndex = Math.max(0, this.slides().length - 1);\n this.scrollTo(lastIndex);\n handled = true;\n break;\n }\n case 'PageUp':\n this._lastInteractionSource.set('keyboard');\n this.prev();\n handled = true;\n break;\n case 'PageDown':\n this._lastInteractionSource.set('keyboard');\n this.next();\n handled = true;\n break;\n }\n if (handled) {\n event.preventDefault();\n }\n }\n\n // ── Pause control toggle ───────────────────────────────────────\n\n _togglePauseControl(): void {\n const next = !this._isManuallyPaused();\n this._isManuallyPaused.set(next);\n }\n}\n","/**\n * `<tw-carousel-indicators>` — the per-page indicator row companion to\n * `<tw-carousel>`.\n *\n * Depends on `CarouselComponent` one-way (it injects the parent; the parent\n * never references this class), so this file imports `./carousel` and never\n * the reverse. The static color x state class tables live here because nothing\n * outside the indicators reads them.\n */\n\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n input,\n isDevMode,\n} from '@angular/core';\nimport type { TwColor, TwSize } from '@cdevhub/ngx-tw/core';\n\nimport { CarouselComponent } from './carousel';\nimport { formatLabel } from './carousel-labels';\nimport { carouselVariants } from './carousel-variants';\nimport type {\n TwCarouselIndicatorPosition,\n TwCarouselIndicatorVariant,\n} from './carousel.types';\n\n// ── Static color × state class lookups ──\n// Tailwind v4 only resolves statically-written class names. Per the stepper\n// precedent, every color × active/inactive indicator combination is enumerated.\n// Active indicators are also distinguishable by more than color (WCAG 1.4.1):\n// `dots` scale 1.5×; `lines` widen to w-12; `numbers` gain a filled background.\n\nconst INDICATOR_ACTIVE_DOTS: Record<TwColor, string> = {\n primary: 'bg-primary-solid scale-150',\n secondary: 'bg-secondary-solid scale-150',\n accent: 'bg-accent-solid scale-150',\n neutral: 'bg-neutral-solid scale-150',\n info: 'bg-info-solid scale-150',\n success: 'bg-success-solid scale-150',\n warning: 'bg-warning-solid scale-150',\n error: 'bg-error-solid scale-150',\n};\n\nconst INDICATOR_ACTIVE_LINES: Record<TwColor, string> = {\n primary: 'bg-primary-solid w-12',\n secondary: 'bg-secondary-solid w-12',\n accent: 'bg-accent-solid w-12',\n neutral: 'bg-neutral-solid w-12',\n info: 'bg-info-solid w-12',\n success: 'bg-success-solid w-12',\n warning: 'bg-warning-solid w-12',\n error: 'bg-error-solid w-12',\n};\n\nconst INDICATOR_ACTIVE_NUMBERS: Record<TwColor, string> = {\n primary: 'bg-primary-solid text-primary-solid-fg',\n secondary: 'bg-secondary-solid text-secondary-solid-fg',\n accent: 'bg-accent-solid text-accent-solid-fg',\n neutral: 'bg-neutral-solid text-neutral-solid-fg',\n info: 'bg-info-solid text-info-solid-fg',\n success: 'bg-success-solid text-success-solid-fg',\n warning: 'bg-warning-solid text-warning-solid-fg',\n error: 'bg-error-solid text-error-solid-fg',\n};\n\nconst INDICATOR_INACTIVE_DOTS = 'bg-fg-muted opacity-50 hover:opacity-100';\nconst INDICATOR_INACTIVE_LINES = 'bg-fg-muted opacity-50 hover:opacity-100';\nconst INDICATOR_INACTIVE_NUMBERS = 'bg-surface-muted text-fg hover:bg-surface-sunken';\n\nfunction resolveIndicatorActiveClasses(\n variant: TwCarouselIndicatorVariant,\n color: TwColor,\n): string {\n switch (variant) {\n case 'dots':\n return INDICATOR_ACTIVE_DOTS[color];\n case 'lines':\n return INDICATOR_ACTIVE_LINES[color];\n case 'numbers':\n return INDICATOR_ACTIVE_NUMBERS[color];\n }\n}\n\nfunction resolveIndicatorInactiveClasses(variant: TwCarouselIndicatorVariant): string {\n switch (variant) {\n case 'dots':\n return INDICATOR_INACTIVE_DOTS;\n case 'lines':\n return INDICATOR_INACTIVE_LINES;\n case 'numbers':\n return INDICATOR_INACTIVE_NUMBERS;\n }\n}\n\n// ── CarouselIndicatorsComponent ───────────────────────────────────\n\n/**\n * Renders one button per **page** (not per slide) inside a `<tw-carousel>`.\n * The active button is marked with `aria-current=\"true\"` and a distinguishing\n * scale / width / fill so it is identifiable beyond color alone (WCAG 1.4.1).\n */\n@Component({\n selector: 'tw-carousel-indicators',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n role: 'group',\n '[class]': 'rootClasses()',\n },\n template: `\n @for (page of _pages(); track page) {\n <button\n type=\"button\"\n [class]=\"_buttonClasses()\"\n [attr.aria-label]=\"_buttonLabel(page)\"\n [attr.aria-current]=\"page === carousel.activePage() ? 'true' : null\"\n (click)=\"_onClick(page)\"\n >\n <span [class]=\"_indicatorClasses(page)\">\n @if (variant() === 'numbers') {\n {{ page + 1 }}\n }\n </span>\n </button>\n }\n `,\n})\nexport class CarouselIndicatorsComponent {\n /** Visual style. `'dots'` = small filled circles; `'lines'` = short horizontal/vertical bars; `'numbers'` = text 1, 2, 3 inside small pills. Defaults to `'dots'`. */\n readonly variant = input<TwCarouselIndicatorVariant>('dots');\n\n /** Color of the active indicator. Inactive indicators use neutral `fg-muted` tokens. Defaults to `'primary'`. */\n readonly color = input<TwColor>('primary');\n\n /** Indicator size (diameter/length and gap between indicators). Defaults to `'md'`. */\n readonly size = input<TwSize>('md');\n\n /** When `'overlay'`, the indicators float absolutely-positioned over the carousel with a `bg-overlay-control` translucent capsule backdrop for contrast. When `'below'`, they sit below the carousel as a normal block. Defaults to `'below'`. */\n readonly position = input<TwCarouselIndicatorPosition>('below');\n\n /** @internal Direct parent carousel. */\n readonly carousel = inject(CarouselComponent);\n\n private readonly _variantResult = computed(() =>\n carouselVariants({\n orientation: this.carousel.orientation(),\n variant: this.variant(),\n size: this.size(),\n position: this.position(),\n gap: this.carousel.gap(),\n snapAlign: this.carousel.snapAlign(),\n }),\n );\n\n readonly rootClasses = computed(() => this._variantResult().indicators());\n\n /**\n * @internal Sequence of page indices to render. Returns `[]` when the\n * parent carousel's `slidesPerView` is not `1` — a single dot can never\n * match a viewport that shows two or more slides, so the indicator UX is\n * unambiguously broken at multi-item display (issue A1). The host element\n * stays mounted so layout doesn't reflow if the consumer toggles\n * `slidesPerView` back to `1` — the buttons reappear at that point without\n * a remount.\n */\n readonly _pages = computed<number[]>(() => {\n if (this.carousel.slidesPerView() !== 1) return [];\n const count = this.carousel.pageCount();\n const out: number[] = new Array(count);\n for (let i = 0; i < count; i++) out[i] = i;\n return out;\n });\n\n constructor() {\n if (isDevMode()) {\n let warned = false;\n effect(() => {\n if (!warned && this.carousel.slidesPerView() !== 1) {\n warned = true;\n console.warn(\n `[tw-carousel-indicators] Indicators are only shown when slidesPerView === 1. Got slidesPerView=${this.carousel.slidesPerView()}; indicators are hidden until slidesPerView returns to 1.`,\n );\n }\n });\n }\n }\n\n /** @internal Classes for the indicator `<button>` — the 24x24-floored hit target (SC 2.5.8). Identical for every page, so it is a computed rather than a per-page call. */\n readonly _buttonClasses = computed(() => this._variantResult().indicatorTarget());\n\n /** @internal Classes for the painted mark inside the target: geometry from the `variant` × `size` compound variants, fill from the active/inactive lookup. */\n _indicatorClasses(page: number): string {\n const base = this._variantResult().indicator();\n const active = page === this.carousel.activePage();\n const stateClasses = active\n ? resolveIndicatorActiveClasses(this.variant(), this.color())\n : resolveIndicatorInactiveClasses(this.variant());\n return `${base} ${stateClasses}`;\n }\n\n _buttonLabel(page: number): string {\n return formatLabel(this.carousel.resolvedLabels().indicator, {\n page: page + 1,\n });\n }\n\n _onClick(page: number): void {\n const toScroll = this.carousel._effectiveSlidesToScroll();\n const targetIndex = page * toScroll;\n this.carousel._setLastInteractionSource('indicator');\n this.carousel.scrollTo(targetIndex);\n }\n}\n","/**\n * `[twCarouselPrev]` / `[twCarouselNext]` — the prev/next navigation\n * directives applied to a consumer's own button primitive.\n *\n * Both inject `CarouselComponent` and are never referenced by it, so the\n * import edge to `./carousel` is strictly one-way.\n */\n\nimport { computed, Directive, ElementRef, inject } from '@angular/core';\n\nimport { CarouselComponent } from './carousel';\n\n// ── Prev / Next directives ────────────────────────────────────────\n\n/**\n * Apply to any focusable element (typically `<button>`) inside a `<tw-carousel>`\n * to navigate to the previous page. Auto-disables at the first slide when the\n * carousel is not looping. Sets `aria-label` to `labels.previous` unless the\n * host already carries `aria-label` or `aria-labelledby`.\n */\n@Directive({\n selector: '[twCarouselPrev]',\n host: {\n '(click)': '_onClick($event)',\n '[attr.aria-label]': '_ariaLabel()',\n '[attr.disabled]': '_isButtonDisabled()',\n '[attr.aria-disabled]': '_isDisabled() ? \"true\" : null',\n '[attr.tabindex]': '_isTabindex()',\n },\n})\nexport class CarouselPrevDirective {\n /** @internal Parent carousel. */\n readonly carousel = inject(CarouselComponent);\n\n private readonly _hostEl = inject(ElementRef<HTMLElement>).nativeElement;\n private readonly _consumerLabel = this._hostEl.getAttribute('aria-label');\n private readonly _hasLabelledBy = this._hostEl.hasAttribute('aria-labelledby');\n private readonly _isButton = this._hostEl.tagName === 'BUTTON';\n\n /** @internal True when prev is unavailable (at start and !loop). */\n readonly _isDisabled = computed<boolean>(\n () => !this.carousel.loop() && this.carousel.isAtStart(),\n );\n\n _ariaLabel(): string | null {\n // Consumer-provided aria-label wins outright. Consumer-provided\n // aria-labelledby suppresses our binding so the two labels don't compete.\n if (this._consumerLabel !== null) return this._consumerLabel;\n if (this._hasLabelledBy) return null;\n return this.carousel.resolvedLabels().previous;\n }\n\n _isButtonDisabled(): string | null {\n return this._isButton && this._isDisabled() ? '' : null;\n }\n\n _isTabindex(): string | null {\n return !this._isButton && this._isDisabled() ? '-1' : null;\n }\n\n _onClick(event: Event): void {\n if (this._isDisabled()) {\n event.preventDefault();\n return;\n }\n this.carousel._setLastInteractionSource('button');\n this.carousel.prev();\n }\n}\n\n/**\n * Apply to any focusable element (typically `<button>`) inside a `<tw-carousel>`\n * to navigate to the next page. Auto-disables at the last page when the\n * carousel is not looping. Sets `aria-label` to `labels.next` unless the host\n * already carries `aria-label` or `aria-labelledby`.\n */\n@Directive({\n selector: '[twCarouselNext]',\n host: {\n '(click)': '_onClick($event)',\n '[attr.aria-label]': '_ariaLabel()',\n '[attr.disabled]': '_isButtonDisabled()',\n '[attr.aria-disabled]': '_isDisabled() ? \"true\" : null',\n '[attr.tabindex]': '_isTabindex()',\n },\n})\nexport class CarouselNextDirective {\n /** @internal Parent carousel. */\n readonly carousel = inject(CarouselComponent);\n\n private readonly _hostEl = inject(ElementRef<HTMLElement>).nativeElement;\n private readonly _consumerLabel = this._hostEl.getAttribute('aria-label');\n private readonly _hasLabelledBy = this._hostEl.hasAttribute('aria-labelledby');\n private readonly _isButton = this._hostEl.tagName === 'BUTTON';\n\n readonly _isDisabled = computed<boolean>(\n () => !this.carousel.loop() && this.carousel.isAtEnd(),\n );\n\n _ariaLabel(): string | null {\n if (this._consumerLabel !== null) return this._consumerLabel;\n if (this._hasLabelledBy) return null;\n return this.carousel.resolvedLabels().next;\n }\n\n _isButtonDisabled(): string | null {\n return this._isButton && this._isDisabled() ? '' : null;\n }\n\n _isTabindex(): string | null {\n return !this._isButton && this._isDisabled() ? '-1' : null;\n }\n\n _onClick(event: Event): void {\n if (this._isDisabled()) {\n event.preventDefault();\n return;\n }\n this.carousel._setLastInteractionSource('button');\n this.carousel.next();\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|