Dialog
shadcn-lit-registry/dialogFreeComponent
A modal dialog component that overlays content on the primary window. Uses native HTML dialog element with smooth animations, focus management, and accessibility features. Supports ESC key and backdrop click to close.
Install it
npx shadcn@latest add https://lit-registry.lloydrichards.dev/r/dialog.jsonSource
1import { css, html, LitElement, nothing, type PropertyValues } from "lit";2import { customElement, property, query, state } from "lit/decorators.js";3import { unsafeSVG } from "lit/directives/unsafe-svg.js";4import { X } from "lucide-static";5import { TW } from "@/registry/lib/tailwindMixin";6import { cn } from "@/registry/lib/utils";78const TwLitElement = TW(LitElement);910/**11 * Dialog component properties12 */13export interface DialogProperties {14 open?: boolean;15 modal?: boolean;16}1718export interface DialogTriggerProperties {19 disabled?: boolean;20}2122export interface DialogContentProperties {23 closeOnEscape?: boolean;24 closeOnBackdrop?: boolean;25}2627export interface DialogCloseEvent {28 reason: "escape" | "backdrop" | "close-button" | "programmatic";29}3031export interface DialogOpenChangeEvent extends CustomEvent {32 detail: { open: boolean };33}3435/**36 * Root dialog container managing state37 */38@customElement("ui-dialog")39export class Dialog extends TwLitElement implements DialogProperties {40 @property({ type: Boolean, reflect: true }) open = false;41 @property({ type: Boolean }) modal = true;4243 @query("ui-dialog-content") contentElement?: DialogContent;4445 render() {46 return html`47 <style>48 :host {49 display: contents;50 }51 </style>52 <slot name="trigger"></slot>53 <slot name="content"></slot>54 `;55 }5657 override connectedCallback() {58 super.connectedCallback();59 this.addEventListener(60 "trigger-click",61 this.handleTriggerClick as EventListener,62 );63 this.addEventListener(64 "content-close",65 this.handleContentClose as EventListener,66 );67 }6869 override disconnectedCallback() {70 super.disconnectedCallback();71 this.removeEventListener(72 "trigger-click",73 this.handleTriggerClick as EventListener,74 );75 this.removeEventListener(76 "content-close",77 this.handleContentClose as EventListener,78 );79 }8081 override updated(changedProperties: PropertyValues) {82 super.updated(changedProperties);8384 if (changedProperties.has("open")) {85 // Dispatch dialog-open-change event86 this.dispatchEvent(87 new CustomEvent("dialog-open-change", {88 detail: { open: this.open },89 bubbles: true,90 composed: true,91 }),92 );93 }94 }9596 private handleTriggerClick = () => {97 this.open = !this.open;98 };99100 private handleContentClose = (e: CustomEvent) => {101 this.open = false;102103 this.dispatchEvent(104// … truncated
What it pulls in
npm packages
Files it writes
More from shadcn-lit-registry
All 26 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| Accordionaccordion | shadcn-lit-registry | Components | Free | 1 dep · 2 files | |
| Avataravatar | shadcn-lit-registry | Components | Free | no deps · 2 files | |
| Badgebadge | shadcn-lit-registry | Components | Free | no deps · 2 files | |
| Buttonbutton | shadcn-lit-registry | Components | Free | 1 dep · 2 files | |
| Cardcard | shadcn-lit-registry | Components | Free | no deps · 2 files | |
| Checkboxcheckbox | shadcn-lit-registry | Components | Free | 1 dep · 2 files | |
| Collapsiblecollapsible | shadcn-lit-registry | Components | Free | 1 dep · 2 files | |
| Commandcommand | shadcn-lit-registry | Components | Free | 1 dep · 2 files |
