The server owns the slides and may render an initial index and a loop/autoplay setting. The element is not form-associated and submits nothing. The current slide is viewer-owned: reflected to index and announced with hui-carousel-change. An hx-swap that replaces the carousel re-reads index, and a slide the reader moved to is discarded.
Accessibility
The viewport is a labelled role="region" with aria-roledescription="carousel".
Each slide is announced with its position through aria-roledescription="slide" and a generated label, unless the host set its own.
Autoplay is off unless asked for, and pauses on hover, on focus and under prefers-reduced-motion.
Keyboard
Keyboard
Keys
Action
Arrow Left/Right (or Up/Down)
Moves one slide.
Home, End
Moves to the first or last slide.
Tab
Reaches the previous, next and dot controls, each named.
Gotchas
Slides are light-DOM children; the element moves between them and does not clone or virtualise them.
Movement is CSS scroll snap plus scrolling the viewport, so touch and trackpad behaviour is the platform’s.