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`

Buttons

Primary and secondary action buttons

Primary
Default With Icon Disabled
Primary Full Width
Full Width Button
Secondary
Default With Icon Disabled
Secondary Full Width
Full Width Secondary

Badges

Status and category indicators

Variants
Accent Success Warning Error Muted
With Icon
${Icons.icons.stack} Platform ${Icons.icons.success} Live ${Icons.icons.error} Offline

Notification Bars

Inline feedback messages

Types
Non-Dismissible

Links

Navigation links with underline animation

States
Default Link
Active Link

Form Inputs

Text input fields with labels

Types
(this.inputValue = e.detail.value)} >
Live Value
Current value: "${this.inputValue}"

Stat Cards

Metric display cards

Grid

Icon Cards

Feature highlight cards

Grid
${Icons.icons.clock} ${Icons.icons.map_pin}

Cards

Container cards and layout primitives

ui-card (default)

This is the default card layout with a header component inside.

Action
ui-card (centered)

404

Action

Divider

Visual separator for content sections

horizontal-divider

Content above

Content below

Composed: Auth Card

Pre-composed card for authentication flows

Login Example
Sign in

No account? Create one

Loading Bars

Progress indicators with variants and states

Variants
Sizes
Indeterminate

Line Chart

Trend lines with optional area fill

Multi-Series

Circle Chart

Donut chart for proportional data

Example
`; } }