@cdevhub/ngx-tw 0.2.1 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (139) hide show
  1. package/README.md +264 -49
  2. package/fesm2022/cdevhub-ngx-tw-accordion.mjs +11 -7
  3. package/fesm2022/cdevhub-ngx-tw-accordion.mjs.map +1 -1
  4. package/fesm2022/cdevhub-ngx-tw-alert.mjs +43 -29
  5. package/fesm2022/cdevhub-ngx-tw-alert.mjs.map +1 -1
  6. package/fesm2022/cdevhub-ngx-tw-aspect-ratio.mjs +103 -0
  7. package/fesm2022/cdevhub-ngx-tw-aspect-ratio.mjs.map +1 -0
  8. package/fesm2022/cdevhub-ngx-tw-avatar.mjs +56 -31
  9. package/fesm2022/cdevhub-ngx-tw-avatar.mjs.map +1 -1
  10. package/fesm2022/cdevhub-ngx-tw-badge.mjs +61 -35
  11. package/fesm2022/cdevhub-ngx-tw-badge.mjs.map +1 -1
  12. package/fesm2022/cdevhub-ngx-tw-breadcrumbs.mjs +154 -93
  13. package/fesm2022/cdevhub-ngx-tw-breadcrumbs.mjs.map +1 -1
  14. package/fesm2022/cdevhub-ngx-tw-button.mjs +24 -15
  15. package/fesm2022/cdevhub-ngx-tw-button.mjs.map +1 -1
  16. package/fesm2022/cdevhub-ngx-tw-calendar-luxon.mjs +3 -3
  17. package/fesm2022/cdevhub-ngx-tw-calendar-luxon.mjs.map +1 -1
  18. package/fesm2022/cdevhub-ngx-tw-calendar.mjs +408 -215
  19. package/fesm2022/cdevhub-ngx-tw-calendar.mjs.map +1 -1
  20. package/fesm2022/cdevhub-ngx-tw-card.mjs +33 -24
  21. package/fesm2022/cdevhub-ngx-tw-card.mjs.map +1 -1
  22. package/fesm2022/cdevhub-ngx-tw-carousel.mjs +144 -79
  23. package/fesm2022/cdevhub-ngx-tw-carousel.mjs.map +1 -1
  24. package/fesm2022/cdevhub-ngx-tw-checkbox.mjs +99 -47
  25. package/fesm2022/cdevhub-ngx-tw-checkbox.mjs.map +1 -1
  26. package/fesm2022/cdevhub-ngx-tw-code-block.mjs +34 -20
  27. package/fesm2022/cdevhub-ngx-tw-code-block.mjs.map +1 -1
  28. package/fesm2022/cdevhub-ngx-tw-collapsible.mjs +46 -29
  29. package/fesm2022/cdevhub-ngx-tw-collapsible.mjs.map +1 -1
  30. package/fesm2022/cdevhub-ngx-tw-combobox.mjs +195 -110
  31. package/fesm2022/cdevhub-ngx-tw-combobox.mjs.map +1 -1
  32. package/fesm2022/cdevhub-ngx-tw-command-palette.mjs +140 -73
  33. package/fesm2022/cdevhub-ngx-tw-command-palette.mjs.map +1 -1
  34. package/fesm2022/cdevhub-ngx-tw-core.mjs +16 -11
  35. package/fesm2022/cdevhub-ngx-tw-core.mjs.map +1 -1
  36. package/fesm2022/cdevhub-ngx-tw-date-picker.mjs +393 -149
  37. package/fesm2022/cdevhub-ngx-tw-date-picker.mjs.map +1 -1
  38. package/fesm2022/cdevhub-ngx-tw-date-range-picker.mjs +305 -150
  39. package/fesm2022/cdevhub-ngx-tw-date-range-picker.mjs.map +1 -1
  40. package/fesm2022/cdevhub-ngx-tw-dialog.mjs +56 -43
  41. package/fesm2022/cdevhub-ngx-tw-dialog.mjs.map +1 -1
  42. package/fesm2022/cdevhub-ngx-tw-empty-state.mjs +51 -33
  43. package/fesm2022/cdevhub-ngx-tw-empty-state.mjs.map +1 -1
  44. package/fesm2022/cdevhub-ngx-tw-file-upload.mjs +905 -0
  45. package/fesm2022/cdevhub-ngx-tw-file-upload.mjs.map +1 -0
  46. package/fesm2022/cdevhub-ngx-tw-flip-card.mjs +49 -26
  47. package/fesm2022/cdevhub-ngx-tw-flip-card.mjs.map +1 -1
  48. package/fesm2022/cdevhub-ngx-tw-form-field.mjs +133 -74
  49. package/fesm2022/cdevhub-ngx-tw-form-field.mjs.map +1 -1
  50. package/fesm2022/cdevhub-ngx-tw-icon-lucide.mjs +2 -2
  51. package/fesm2022/cdevhub-ngx-tw-icon-lucide.mjs.map +1 -1
  52. package/fesm2022/cdevhub-ngx-tw-icon.mjs +28 -17
  53. package/fesm2022/cdevhub-ngx-tw-icon.mjs.map +1 -1
  54. package/fesm2022/cdevhub-ngx-tw-input.mjs +37 -21
  55. package/fesm2022/cdevhub-ngx-tw-input.mjs.map +1 -1
  56. package/fesm2022/cdevhub-ngx-tw-item.mjs +33 -24
  57. package/fesm2022/cdevhub-ngx-tw-item.mjs.map +1 -1
  58. package/fesm2022/cdevhub-ngx-tw-menu.mjs +63 -48
  59. package/fesm2022/cdevhub-ngx-tw-menu.mjs.map +1 -1
  60. package/fesm2022/cdevhub-ngx-tw-number-input.mjs +622 -0
  61. package/fesm2022/cdevhub-ngx-tw-number-input.mjs.map +1 -0
  62. package/fesm2022/cdevhub-ngx-tw-paginator.mjs +137 -71
  63. package/fesm2022/cdevhub-ngx-tw-paginator.mjs.map +1 -1
  64. package/fesm2022/cdevhub-ngx-tw-popover.mjs +101 -46
  65. package/fesm2022/cdevhub-ngx-tw-popover.mjs.map +1 -1
  66. package/fesm2022/cdevhub-ngx-tw-progress-bar.mjs +57 -30
  67. package/fesm2022/cdevhub-ngx-tw-progress-bar.mjs.map +1 -1
  68. package/fesm2022/cdevhub-ngx-tw-radio.mjs +108 -57
  69. package/fesm2022/cdevhub-ngx-tw-radio.mjs.map +1 -1
  70. package/fesm2022/cdevhub-ngx-tw-segmented-control.mjs +46 -26
  71. package/fesm2022/cdevhub-ngx-tw-segmented-control.mjs.map +1 -1
  72. package/fesm2022/cdevhub-ngx-tw-select.mjs +217 -122
  73. package/fesm2022/cdevhub-ngx-tw-select.mjs.map +1 -1
  74. package/fesm2022/cdevhub-ngx-tw-separator.mjs +21 -12
  75. package/fesm2022/cdevhub-ngx-tw-separator.mjs.map +1 -1
  76. package/fesm2022/cdevhub-ngx-tw-sheet.mjs +58 -44
  77. package/fesm2022/cdevhub-ngx-tw-sheet.mjs.map +1 -1
  78. package/fesm2022/cdevhub-ngx-tw-skeleton.mjs +25 -14
  79. package/fesm2022/cdevhub-ngx-tw-skeleton.mjs.map +1 -1
  80. package/fesm2022/cdevhub-ngx-tw-slider.mjs +155 -79
  81. package/fesm2022/cdevhub-ngx-tw-slider.mjs.map +1 -1
  82. package/fesm2022/cdevhub-ngx-tw-sort.mjs +44 -25
  83. package/fesm2022/cdevhub-ngx-tw-sort.mjs.map +1 -1
  84. package/fesm2022/cdevhub-ngx-tw-spinner.mjs +29 -16
  85. package/fesm2022/cdevhub-ngx-tw-spinner.mjs.map +1 -1
  86. package/fesm2022/cdevhub-ngx-tw-split.mjs +72 -42
  87. package/fesm2022/cdevhub-ngx-tw-split.mjs.map +1 -1
  88. package/fesm2022/cdevhub-ngx-tw-stat.mjs +107 -64
  89. package/fesm2022/cdevhub-ngx-tw-stat.mjs.map +1 -1
  90. package/fesm2022/cdevhub-ngx-tw-stepper.mjs +113 -47
  91. package/fesm2022/cdevhub-ngx-tw-stepper.mjs.map +1 -1
  92. package/fesm2022/cdevhub-ngx-tw-switch.mjs +61 -32
  93. package/fesm2022/cdevhub-ngx-tw-switch.mjs.map +1 -1
  94. package/fesm2022/cdevhub-ngx-tw-tab-nav.mjs +88 -42
  95. package/fesm2022/cdevhub-ngx-tw-tab-nav.mjs.map +1 -1
  96. package/fesm2022/cdevhub-ngx-tw-table.mjs +266 -118
  97. package/fesm2022/cdevhub-ngx-tw-table.mjs.map +1 -1
  98. package/fesm2022/cdevhub-ngx-tw-tabs.mjs +101 -51
  99. package/fesm2022/cdevhub-ngx-tw-tabs.mjs.map +1 -1
  100. package/fesm2022/cdevhub-ngx-tw-tags-input.mjs +798 -0
  101. package/fesm2022/cdevhub-ngx-tw-tags-input.mjs.map +1 -0
  102. package/fesm2022/cdevhub-ngx-tw-textarea.mjs +11 -7
  103. package/fesm2022/cdevhub-ngx-tw-textarea.mjs.map +1 -1
  104. package/fesm2022/cdevhub-ngx-tw-theme.mjs +22 -14
  105. package/fesm2022/cdevhub-ngx-tw-theme.mjs.map +1 -1
  106. package/fesm2022/cdevhub-ngx-tw-time-picker.mjs +243 -95
  107. package/fesm2022/cdevhub-ngx-tw-time-picker.mjs.map +1 -1
  108. package/fesm2022/cdevhub-ngx-tw-timeline.mjs +149 -82
  109. package/fesm2022/cdevhub-ngx-tw-timeline.mjs.map +1 -1
  110. package/fesm2022/cdevhub-ngx-tw-toast.mjs +89 -55
  111. package/fesm2022/cdevhub-ngx-tw-toast.mjs.map +1 -1
  112. package/fesm2022/cdevhub-ngx-tw-tooltip.mjs +50 -28
  113. package/fesm2022/cdevhub-ngx-tw-tooltip.mjs.map +1 -1
  114. package/fesm2022/cdevhub-ngx-tw-transfer.mjs +1129 -0
  115. package/fesm2022/cdevhub-ngx-tw-transfer.mjs.map +1 -0
  116. package/fesm2022/cdevhub-ngx-tw-tree.mjs +554 -0
  117. package/fesm2022/cdevhub-ngx-tw-tree.mjs.map +1 -0
  118. package/fesm2022/cdevhub-ngx-tw.mjs +7 -0
  119. package/fesm2022/cdevhub-ngx-tw.mjs.map +1 -1
  120. package/package.json +45 -20
  121. package/theme/index.css +10 -2
  122. package/types/cdevhub-ngx-tw-aspect-ratio.d.ts +40 -0
  123. package/types/cdevhub-ngx-tw-calendar.d.ts +39 -8
  124. package/types/cdevhub-ngx-tw-command-palette.d.ts +7 -0
  125. package/types/cdevhub-ngx-tw-date-picker.d.ts +36 -10
  126. package/types/cdevhub-ngx-tw-file-upload.d.ts +250 -0
  127. package/types/cdevhub-ngx-tw-form-field.d.ts +22 -3
  128. package/types/cdevhub-ngx-tw-icon-lucide.d.ts +21 -3
  129. package/types/cdevhub-ngx-tw-number-input.d.ts +130 -0
  130. package/types/cdevhub-ngx-tw-popover.d.ts +8 -0
  131. package/types/cdevhub-ngx-tw-stepper.d.ts +30 -2
  132. package/types/cdevhub-ngx-tw-tab-nav.d.ts +8 -0
  133. package/types/cdevhub-ngx-tw-table.d.ts +30 -1
  134. package/types/cdevhub-ngx-tw-tabs.d.ts +8 -0
  135. package/types/cdevhub-ngx-tw-tags-input.d.ts +217 -0
  136. package/types/cdevhub-ngx-tw-time-picker.d.ts +31 -6
  137. package/types/cdevhub-ngx-tw-transfer.d.ts +330 -0
  138. package/types/cdevhub-ngx-tw-tree.d.ts +189 -0
  139. package/types/cdevhub-ngx-tw.d.ts +7 -0
@@ -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 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 effect(() => {\n const slides = this.slides();\n this._reobserveSlides(slides);\n const count = slides.length;\n if (count > 0 && this.activeIndex() > count - 1) {\n this.activeIndex.set(count - 1);\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.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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"}