Alpine Tailwind Lightbox

Basic usage:

<a
    href="#"
    class="aspect-square flex rounded-md overflow-hidden hover:opacity-80 transition-opacity"
    x-data="{ url: './assets/0.jpg', thumb: './assets/0-thumb.jpg' }"
    x-lightbox="url"
>
    <img class="flex-1 object-cover object-center" :src="thumb" alt="">
</a>

Multiple images in x-for:

<div
    class="grid grid-cols-2 md:grid-cols-4 lg:grid-cols-6 gap-5 mb-6"
    x-data="{
    images: [
        { url: './assets/1.jpg', thumb: './assets/1-thumb.jpg' },
        { url: './assets/2.jpg', thumb: './assets/2-thumb.jpg' },
        { url: './assets/3.jpg', thumb: './assets/3-thumb.jpg' },
        { url: './assets/4.jpg', thumb: './assets/4-thumb.jpg' },
    ],
}"
>
    <template x-for="image in images">
        <a
            href="#"
            class="aspect-square flex rounded-md overflow-hidden hover:opacity-80 transition-opacity"
            x-lightbox="image.url"
            x-lightbox:group="multiple"
        >
            <img class="flex-1 object-cover object-center" :src="image.thumb" alt="">
        </a>
    </template>
</div>

Using a config object for alt tags & videos:

<div
    class="grid grid-cols-2 md:grid-cols-4 lg:grid-cols-6 gap-5 mb-6"
    x-data="{
    items: [
        {
            url: 'https://www.youtube.com/embed/7yLxxyzGiko?autoplay=1&mute=1',
            thumb: 'https://i.ytimg.com/vi/7yLxxyzGiko/hq720.jpg',
            type: 'embed',
        },
        {
            url: './assets/6.mp4',
            thumb: './assets/6-thumb.jpg',
            type: 'video',
            autoplay: true,
            muted: true,
        },
        {
            url: './assets/7.jpg',
            thumb: './assets/7-thumb.jpg',
            alt: 'Black & white cat on a bright yellow background',
        },
        {
            url: './assets/8.jpg',
            thumb: './assets/8-thumb.jpg',
            alt: 'Close-up shot of a tabby cat\'s face',
        },
    ],
}"
>
    <template x-for="item in items">
        <a
            href="#"
            class="aspect-square flex rounded-md overflow-hidden hover:opacity-80 transition-opacity"
            x-lightbox="item"
            x-lightbox:group="config"
        >
            <img class="flex-1 object-cover object-center" :src="item.thumb" :alt="item.alt">
        </a>
    </template>
</div>

Creating a lightbox with $lightbox():

<div
    class="mb-6"
    x-data="{ images: ['./assets/9.jpg', './assets/10.jpg', './assets/11.jpg'] }"
    x-init="$lightbox(images, 'kittens')"
>
    <button
        type="button"
        class="px-6 py-3 bg-violet-600 rounded-md"
        @click="$lightbox.open(images[2], 'kittens')"
    >
        Open Lightbox
    </button>
</div>