import { LitElement, html, css } from "lit"; import { customElement, state } from "lit/decorators.js"; import "../components/ui-button"; import "../components/ui-button-secondary"; import "../components/ui-badge"; import "../components/ui-card"; import "../components/card-backdrop"; import "../components/card-header"; import "../components/auth-card"; import "../components/stat-card"; import "../components/icon-card"; import "../components/form-input"; import "../components/horizontal-divider"; import "../components/notify-bar"; import "../components/ui-link"; import "../components/circle-chart"; import "../components/loading-bar"; import "../components/line-chart"; import { Icons } from "../components/icons"; @customElement("dev-page") export class DevPage extends LitElement { static styles = css` :host { flex: 1; display: flex; flex-direction: column; background: var(--color-bg); } .container { max-width: 1100px; width: 100%; margin: 0 auto; padding: 2.5rem 1.5rem 4rem; display: flex; flex-direction: column; gap: 3rem; } .page-header { display: flex; flex-direction: column; gap: 0.35rem; padding-bottom: 1.5rem; border-bottom: 1px solid var(--color-border); } .page-header h1 { margin: 0; font-size: 2rem; font-weight: 800; letter-spacing: -0.03em; color: var(--color-text); } .page-header p { margin: 0; font-size: 0.95rem; color: color-mix(in srgb, var(--color-text) 55%, transparent); } .section { display: flex; flex-direction: column; gap: 1.25rem; } .section-head { display: flex; flex-direction: column; gap: 0.2rem; } .section-head h2 { margin: 0; font-size: 1.25rem; font-weight: 700; letter-spacing: -0.01em; color: var(--color-text); } .section-head p { margin: 0; font-size: 0.85rem; color: color-mix(in srgb, var(--color-text) 50%, transparent); } .component-group { background: var(--color-bg-nav); border: 1px solid var(--color-border); border-radius: 0.75rem; overflow: hidden; } .component-label { padding: 0.6rem 1.25rem; font-size: 0.75rem; font-weight: 600; letter-spacing: 0.04em; text-transform: uppercase; color: color-mix(in srgb, var(--color-text) 45%, transparent); background: color-mix(in srgb, var(--color-text) 4%, transparent); border-bottom: 1px solid var(--color-border); } .component-preview { padding: 1.5rem 1.25rem; display: flex; flex-wrap: wrap; align-items: center; gap: 0.75rem; } .component-preview.col { flex-direction: column; align-items: stretch; } .component-preview.grid-2 { display: grid; grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); } .component-preview.grid-4 { display: grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); } .component-preview + .component-label { border-top: 1px solid var(--color-border); } .spacer { width: 1px; height: 1.5rem; background: var(--color-border); margin: 0 0.25rem; } .input-row { max-width: 360px; width: 100%; display: flex; flex-direction: column; gap: 0.75rem; } .card-demo { display: flex; justify-content: center; padding: 2rem; background: radial-gradient( ellipse at 30% 20%, color-mix(in srgb, var(--color-accent) 8%, transparent) 0%, transparent 50% ), var(--color-bg); border-radius: 0 0 0.75rem 0.75rem; } .toggle-row { display: flex; align-items: center; gap: 0.5rem; } .toggle-label { font-size: 0.85rem; color: color-mix(in srgb, var(--color-text) 60%, transparent); } `; @state() inputValue = ""; @state() notifyVisible = true; render() { return html`
All available UI components with variants and states
Primary and secondary action buttons
Status and category indicators
Inline feedback messages
Navigation links with underline animation
Text input fields with labels
Metric display cards
Feature highlight cards
Container cards and layout primitives
This is the default card layout with a header component inside.
404
Visual separator for content sections
Content above
Content below
Pre-composed card for authentication flows
No account?
Progress indicators with variants and states
Trend lines with optional area fill
Donut chart for proportional data