Carousel
Default

<script>
import { Carousel } from "flowbite-svelte";
import images from "./imageData/images.json";
</script>
<Carousel {images} duration={3000} />
Controls

<script>
import { Carousel, Controls } from "flowbite-svelte";
import images from "./imageData/images.json";
</script>
<div class="max-w-4xl">
<Carousel {images}>
<Controls />
</Carousel>
</div>
Indicators

<script>
import { Carousel, CarouselIndicators } from "flowbite-svelte";
import images from "./imageData/images.json";
</script>
<div class="max-w-4xl">
<Carousel {images}>
<CarouselIndicators />
</Carousel>
</div>
Thumbnails

<script lang="ts">
import { Carousel, Controls, CarouselIndicators, Thumbnails } from "flowbite-svelte";
import images from "./imageData/images.json";
let index = $state(0);
</script>
<div class="max-w-4xl space-y-4">
<Carousel {images} bind:index>
<Controls />
<CarouselIndicators />
</Carousel>
<Thumbnails {images} bind:index />
</div>
Caption

<script lang="ts">
import { Carousel, Controls, CarouselIndicators } from "flowbite-svelte";
import images from "./imageData/images.json";
import type { HTMLImgAttributes } from "svelte/elements";
let index = $state(0);
let image: HTMLImgAttributes | undefined = $state();
</script>
<div class="max-w-4xl space-y-4">
<Carousel {images} onchange={(detail) => (image = detail)}>
<Controls />
<CarouselIndicators />
</Carousel>
<div class="my-2 h-10 rounded-sm bg-gray-300 p-2 text-center dark:bg-gray-700 dark:text-white">
{image?.alt}
</div>
</div>
Links
<script>
import { Carousel } from "flowbite-svelte";
import images from "./imageData/images.json";
</script>
<div class="max-w-4xl space-y-4">
<Carousel {images} duration={3900}>
{#snippet slide({ index, Slide })}
<a href="http://google.com/search?q={images[index]?.title}" target="_blank">
<Slide image={images[index]} />
</a>
{/snippet}
<!-- Indicators / -->
</Carousel>
</div>
Basic
<script>
import { Carousel } from "flowbite-svelte";
import images from "./imageData/images.json";
</script>
<div class="max-w-4xl space-y-4">
<Carousel {images} duration={3900}>
{#snippet slide({ index, Slide })}
<a href="http://google.com/search?q={images[index]?.title}" target="_blank">
<Slide image={images[index]} />
</a>
{/snippet}
<!-- Indicators / -->
</Carousel>
</div>
Advanced

<script>
import { Button, Carousel, ControlButton, Controls, Indicator, CarouselIndicators, Thumbnails } from "flowbite-svelte";
import { CaretRightOutline } from "flowbite-svelte-icons";
import images from "./imageData/images.json";
let index = $state(0);
</script>
<div class="max-w-4xl space-y-4">
<Carousel {images} bind:index>
<CarouselIndicators>
{#snippet children({ selected, index })}
<Indicator color={selected ? "red" : "green"} class="h-5 w-5 border border-white text-white {selected ? 'opacity-100' : 'opacity-80'}">
{index}
</Indicator>
{/snippet}
</CarouselIndicators>
<Controls>
{#snippet children(changeSlide)}
<ControlButton name="Previous" forward={false} onclick={() => changeSlide(false)} />
<Button pill class="absolute end-4 top-1/2 -translate-y-1/2 p-2 font-bold" onclick={() => changeSlide(true)}>
<CaretRightOutline />
</Button>
{/snippet}
</Controls>
</Carousel>
<Thumbnails class="mt-4 gap-3 bg-transparent" {images} bind:index>
{#snippet children({ image, selected, Thumbnail })}
<Thumbnail {selected} {...image} class="hover:outline-primary-500 rounded-md shadow-xl hover:outline {selected ? 'outline-primary-400 outline-4' : ''}" />
{/snippet}
</Thumbnails>
</div>
Transition

<script lang="ts">
import { Carousel, Controls, CarouselIndicators } from "flowbite-svelte";
import images from "./imageData/images.json";
import { scale } from "svelte/transition";
import { quintOut } from "svelte/easing";
const scaleAnimation = (node: HTMLElement) => scale(node, { duration: 500, easing: quintOut });
</script>
<div class="max-w-4xl">
<Carousel {images} transition={scaleAnimation}>
<Controls />
<CarouselIndicators />
</Carousel>
</div>