Free
Pro

Lightbox Gallery

Project image, video, and PDF thumbs into ply-lightbox. They can share one gallery. Thumb size and aspect ratio stay on each thumb. Click a thumb to open that file in a focus-trapped overlay.

free

View source

Single image

A single thumb works the same way — no prev/next controls appear. Use Tailwind for ratio and max width on the thumb itself.

Laptop on a wooden desk

Multi grid (Tailwind size & ratio)

Put layout classes on ply-lightbox (applied to the thumbs wrapper). Each thumb keeps its own ratio — square, video, or portrait.

Vintage cameraCamera lensFilm cameraPolaroid cameraPhotography studioCamera on desk

Mixed ratios

Mix Tailwind aspect utilities on individual thumbs in the same gallery.

Vintage cameraCamera lensFilm camera

Images, video, and PDF

A poster image can open a clip when fullSrc is a video. A button can open a PDF. Leave mediaType empty when the viewer URL ends in .mp4, .webm, or .pdf.

Vintage camera
Flower clip

Broken image → alt initials

If a thumb (or the overlay image) fails to load, initials are taken from alt — e.g. "Jane Doe" → JD, "Coast" → CO. Disable with [initialsFallback]="false" on the thumb or the lightbox.

Jane DoeCoastVintage camera

Toolbar

Flip, rotate, and zoom apply to images. Video uses its own controls. PDF opens in the viewer. Download and fullscreen stay for every item. Keyboard: Esc closes, ←/→ move between items, +/− zoom an image.

HTML
<!-- Optional toggles -->
<ply-lightbox
  [loop]="true"
  [showToolbar]="true"
  [showCounter]="true"
  [closeOnBackdrop]="true"
  [initialsFallback]="true"
  dialogLabel="Photo gallery"
  (opened)="onOpened($event)"
  (closed)="onClosed()"
  (indexChange)="onIndex($event)"
>
  …
</ply-lightbox>

TypeScript

TypeScript
import { Component } from '@angular/core';

// Install: npx ply-ui-cli add lightbox
// Paths are relative to aliases.components (default: src/app/components)
import { LightboxThumbDirective } from './lightbox/lightbox-thumb.directive';
import { LightboxComponent } from './lightbox/lightbox.component';

@Component({
  selector: 'app-lightbox-example',
  imports: [
    LightboxComponent,
    LightboxThumbDirective
  ],
  template: `...`
})
export class LightboxExampleComponent {}

Install

bash
npx ply-ui-cli add lightbox

Installation

Run the following command to add this component to your project:

bash
npx ply-ui-cli add lightbox

API Reference

For AI agents

Copy a prompt with the registry name, CLI install, and import — or add the Ply MCP server.

bash
npx -y ply-ui-mcp

Ply provides standalone components. Import the exact elements you want to use into your component.

typescript (Example)
// Install: npx ply-ui-cli add lightbox
// Paths are relative to aliases.components (default: src/app/components)
import { LightboxThumbDirective } from './lightbox/lightbox-thumb.directive';
import { LightboxComponent } from './lightbox/lightbox.component';

@Component({
  selector: 'app-your-component',
  imports: [
    LightboxComponent,
    LightboxThumbDirective
  ],
  template: `...`
})
export class YourComponent {}

API for lightbox — generated from JSDoc in the library source.

API reference for lightbox
APIMemberTypeDefaultDescription
ply-lightboxclassstring''Classes for the thumbs layout wrapper (e.g. `grid grid-cols-3 gap-2`). Applied to an inner container so projected thumbs participate in that layout.
ply-lightboxloopbooleantrueWhen true, prev/next wrap around the ends of the gallery.
ply-lightboxshowToolbarbooleantrueWhether to show the transform / download toolbar.
ply-lightboxshowCounterbooleantrueWhether to show the "n / total" counter when there is more than one image.
ply-lightboxcloseOnBackdropbooleantrueClose the overlay when the backdrop is clicked.
ply-lightboxdialogLabelunknown'Media lightbox'Accessible name for the lightbox dialog.
ply-lightboxinitialsFallbackbooleantrueWhen true (default), a broken or missing viewer image shows initials from the thumb's `alt` / `imageAlt` instead of an empty stage.
ply-lightbox(opened)number — Emitted when the lightbox opens, with the active index.
ply-lightbox(closed)void — Emitted when the lightbox closes.
ply-lightbox(indexChange)number — Emitted whenever the active image index changes while open.
[ply-lightbox-thumb]mediaTypeLightboxMediaType | ''''Overlay kind. Leave empty to infer it from the viewer URL (`.mp4`, `.webm`, `.pdf`) or from a `<video>` host. Image, video, and PDF thumbs can share one gallery.
[ply-lightbox-thumb]fullSrcstring''Optional full-resolution URL shown in the overlay. Falls back to the element's native `src` (or `imageSrc`) when omitted. A poster `src` plus a video or PDF `fullSrc` keeps the thumb an image.
[ply-lightbox-thumb]imageSrcstring''Image URL for non-`<img>` hosts. Do **not** use this on `<img>` — bind the native `src` attribute instead so the thumbnail is visible.
[ply-lightbox-thumb]imageAltstring''Accessible label override for non-`<img>` hosts. On `<img>`, use native `alt`.
[ply-lightbox-thumb]downloadNamestring''Suggested filename for the download action.
[ply-lightbox-thumb]initialsFallbackbooleantrueWhen true (default), a broken or missing image is replaced by initials derived from `alt` / `imageAlt` (e.g. "Jane Doe" → "JD").