 Command

Pranesh Nikhar's personal site. Vim-style keybinds for navigation; theme + font pickers below.

Theme
 Font Body Code
Reader
Keybinds
Navigation
j / ↓ Next item k / ↑ Previous item g First item in region G Last item in region zz Center focused item h / l Move left/right region ] / [ Next/previous heading } / { Next/previous block d / u Half-page down/up
Layout
<zh> / <zl> Toggle left/right sidebar <zr> Toggle reader view <zj> / <zk> Focus main/navbar <S-h/j/k/l> Focus left/main/navbar/right ⌃H / ⌃L Focus left/right sidebar ⌃J / ⌃K Focus main/navbar ⇧C / ⇧E Collapse / expand all sections
Dialogs
⌃P / : Command palette ⌃X Theme picker / Search ? Show keybinds Esc / ⌃C Close dialog
History
n Next document b Previous document ⌃O History back ⌃I History forward
 Search
about: Pranesh Nikhar about/more: 🪪 More docs/test: Docs Test ideas: 💡 Ideas more: ➕ More now: Now posts: 📬 Posts projects: 📚 Projects webtui: Style posts/agentic-eda: 📊 AgenticEDA — Automated Exploratory Data Analysis with LangGraph posts/cap-theorem-outage-story: 🌐 CAP Theorem with a Real Outage Story posts/codepilot: ✈️ CodePilot — From Requirements to Deployable FastAPI Backend posts/common-auth-mistakes: 🔐 Common Auth Mistakes Developers Make posts/compiled-vs-jit-vs-interpreted: ⚡ Why Is X Language Fast or Slow? — Compiled vs JIT vs Interpreted posts/cs-degree-gaps: 🎓 Things CS Degrees Don't Teach You posts/cve-2025-breach-analysis: 🛡️ CVE-2025 Breach Analysis — Midnight Blizzard and the 16 Billion Credential Leak posts/fixloop: 🔄 FixLoop — AI Agent Loop for Self-Correcting Code posts/functional-vs-oop: ⚡ Functional vs OOP — Same Problem, Both Ways posts/getman: 🦾 Getman — Declarative API Tester for CLI & TUI posts/how-compilers-optimize: ⚙️ How Compilers Actually Optimize Your Code posts/http3-quic: ⚡ HTTP/3 and QUIC — Why They Matter posts/leetcode-vs-engineering: 🧩 LeetCode vs Real Engineering Skills posts/llm-from-scratch: 🧠 LLM from Scratch — GPT-Style Transformer in PyTorch posts/lsm-trees-bloom-filters: 🌳 LSM Trees & Bloom Filters — Production Deep Dive posts/mcp-workflow-builder: 🔧 MCP Workflow Builder — Visual DAG for MCP Tools posts/persistent-memory: 🧠 Persistent Memory — Long-Term Memory for AI Agents via MCP posts/playcli: 🎬 PlayCLI — Terminal Video Player posts/postgres-mvcc: 🗄️ How PostgreSQL MVCC Works — Multi-Version Concurrency Control Deep Dive posts/raft-consensus: ⛵ Raft Consensus Algorithm Explained posts/rust-borrow-checker: 🦀 Rust Borrow Checker — Catches Real Bugs posts/titan: 🤖 Titan — Terminal AI Coding Agent posts/what-happens-url: 🌐 What Happens Between Typing a URL and Seeing the Page posts/what-happens-when-you-run-a-program: ⚙️ What Actually Happens When You Run a Program posts/zero-knowledge-proofs: 🔐 Zero-Knowledge Proofs Explained Simply webtui/components/accordion: Accordion webtui/components/badge: Badge webtui/components/button: Button webtui/components/checkbox: Checkbox webtui/components/dialog: Dialog webtui/components/input: Input webtui/components/popover: Popover webtui/components/pre: Pre webtui/components/progress: Progress webtui/components/radio: Radio webtui/components/range: Range webtui/components/separator: Separator webtui/components/spinner: Spinner webtui/components/switch: Switch webtui/components/table: Table webtui/components/textarea: Textarea webtui/components/tooltip: Popover webtui/components/typography: Typography webtui/components/view: View webtui/contributing/contributing: Contributing webtui/contributing/contributing: ## Local Development webtui/contributing/contributing: ## Issues webtui/contributing/contributing: ## Pull Requests webtui/contributing/style-guide: Style Guide webtui/contributing/style-guide: ## CSS Units webtui/contributing/style-guide: ## Selectors webtui/contributing/style-guide: ## Documentation webtui/installation/astro: Astro webtui/installation/astro: ## Scoping webtui/installation/astro: ### Frontmatter Imports webtui/installation/astro: ### ‹style› tag webtui/installation/astro: ### Full Library Import webtui/installation/nextjs: Next.js webtui/installation/vite: Vite webtui/plugins/plugin-dev: Developing Plugins webtui/plugins/plugin-dev: ### Style Layers webtui/plugins/plugin-nf: Nerd Font Plugin webtui/plugins/theme-catppuccin: Catppuccin Theme webtui/plugins/theme-custom: Custom Theme webtui/plugins/theme-everforest: Everforest Theme webtui/plugins/theme-gruvbox: Gruvbox Theme webtui/plugins/theme-nord: Nord Theme webtui/plugins/theme-vitesse: Vitesse Theme webtui/start/ascii-boxes: ASCII Boxes webtui/start/changelog: Changelog webtui/start/installation: Installation webtui/start/installation: ## Installation webtui/start/installation: ## Using CSS webtui/start/installation: ## Using ESM webtui/start/installation: ## Using a CDN webtui/start/installation: ## Full Library Import webtui/start/installation: ### CSS webtui/start/installation: ### ESM webtui/start/installation: ### CDN webtui/start/intro: Introduction webtui/start/intro: ## Features webtui/start/plugins: Plugins webtui/start/plugins: ## Official Plugins webtui/start/plugins: ### Themes webtui/start/plugins: ## Community Plugins webtui/start/theming: Theming webtui/start/theming: ## CSS Variables webtui/start/theming: ### Font Styles webtui/start/theming: ### Colors webtui/start/theming: ### Light & Dark webtui/start/theming: ## Theme Plugins webtui/start/theming: ### Using Multiple Theme Accents webtui/start/tuis-vs-guis: TUIs vs GUIs webtui/start/tuis-vs-guis: ## Monospace Fonts webtui/start/tuis-vs-guis: ## Character Cells
 Theme Current: Light j/k or ↑/↓ + Enter

Dialog

A dialog

1 <dialog id="dialog" popover>
2 <div box-="round" id="content">
3 <p>Are you sure you want to delete this?</p>
4 <div id="buttons">
5 <button box-="round">Cancel</button>
6 <button box-="round">Delete</button>
7 </div>
8 </div>
9 </dialog>
10 <button popovertarget="dialog">Open Dialog</button>
1
2 dialog::backdrop {
3 background-color: rgba(0, 0, 0, 0.5);
4 }
5 #content {
6 display: flex;
7 flex-direction: column;
8 gap: 1lh;
9 padding: 2lh 2ch 1lh 2ch;
10 background-color: var(--background1);
11 }
12 #buttons {
13 display: flex;
14 gap: 1ch;
15 justify-content: flex-end;
16 }
17

Import

@import '@webtui/css/components/dialog.css';

Usage

<dialog>
    <div>Dialog content</div>
</dialog>

See the MDN Reference on how to show and hide <dialog> elements

Examples

Positioning

Use the position- property to control the position of the dialog

Pass two values into position- to set the horizontal and vertical position anchor

<dialog position-="<anchor>"></dialog>
<dialog position-="<x-anchor> <y-anchor>"></dialog>

<dialog position-="center"></dialog>
<dialog position-="start end"></dialog>
1 <div class="row">
2 <dialog id="start" position-="start" popover>start</dialog>
3 <button popovertarget="start">start</button>
4
5 <dialog id="center-start" position-="center start" popover>center start</dialog>
6 <button popovertarget="center-start">center start</button>
7
8 <dialog id="end-start" position-="end start" popover>end start</dialog>
9 <button popovertarget="end-start">end start</button>
10
11 </div>
12
13 <div class="row">
14 <dialog id="start-center" position-="start center" popover>start center</dialog>
15 <button popovertarget="start-center">start center</button>
16
17 <dialog id="center" position-="center" popover>center</dialog>
18 <button popovertarget="center">center</button>
19
20 <dialog id="end-center" position-="end center" popover>end center</dialog>
21 <button popovertarget="end-center">end center</button>
22
23 </div>
24
25 <div class="row">
26 <dialog id="start-end" position-="start end" popover>start end</dialog>
27 <button popovertarget="start-end">start end</button>
28
29 <dialog id="center-end" position-="center end" popover>center end</dialog>
30 <button popovertarget="center-end">center end</button>
31
32 <dialog id="end" position-="end" popover>end</dialog>
33 <button popovertarget="end">end</button>
34
35 </div>
1
2 dialog::backdrop {
3 background-color: rgba(0, 0, 0, 0.5);
4 }
5 dialog {
6 padding: 1lh 2ch;
7 background-color: var(--background1);
8 }
9 .row {
10 display: flex;
11 gap: 1ch;
12 }
13

Container

Use the container- property to control the container sizing behavior

1 <div class="row">
2 <dialog id="auto" container-="auto" popover>auto</dialog>
3 <button popovertarget="auto">auto</button>
4
5 <dialog id="fill" container-="fill" popover>fill</dialog>
6 <button popovertarget="fill">fill</button>
7
8 </div>
1
2 dialog::backdrop {
3 background-color: rgba(0, 0, 0, 0.5);
4 }
5 dialog {
6 padding: 1lh 2ch;
7 background-color: var(--background1);
8 }
9

Sizing

Use the size- property to control the max size of the dialog

1 <div class="row">
2 <dialog id="small" size-="small" container-="fill" popover>small</dialog>
3 <button popovertarget="small">small</button>
4
5 <dialog id="default" container-="fill" popover>default</dialog>
6 <button popovertarget="default">default</button>
7
8 <dialog id="full" size-="full" container-="fill" popover>full (esc to close)</dialog>
9 <button popovertarget="full">full</button>
10
11 </div>
1
2 dialog::backdrop {
3 background-color: rgba(0, 0, 0, 0.5);
4 }
5 dialog {
6 padding: 1lh 2ch;
7 background-color: var(--background1);
8 }
9

Offset

Use the --dialog-offset-x and --dialog-offset-y CSS properties to control the offset of the dialog

1 <div class="row">
2 <dialog id="full" size-="full" container-="fill" popover>no offsets (esc to close)</dialog>
3 <button popovertarget="full">no offsets</button>
4
5 <dialog id="offset" size-="full" container-="fill" popover>offsets (esc or click on backdrop to close)</dialog>
6 <button popovertarget="offset">offsets</button>
7
8 </div>
1
2 dialog::backdrop {
3 background-color: rgba(0, 0, 0, 0.5);
4 }
5 dialog {
6 padding: 1lh 2ch;
7 background-color: var(--background1);
8 }
9 #offset {
10 --dialog-offset-x: 2ch;
11 --dialog-offset-y: 2lh;
12 }
13

Reference

Properties

  • --dialog-offset-x: The horizontal offset of the dialog
  • --dialog-offset-y: The vertical offset of the dialog
  • --dialog-max-width: The maximum width of the dialog
  • --dialog-max-height: The maximum height of the dialog
#my-custom-dialog {
    --dialog-offset-x: 1ch;
    --dialog-offset-y: 1lh;
}

The --dialog-max-width and --dialog-max-height CSS properties are automatically controlled by the size- variant but can be overridden

Extending

To extend the Dialog stylesheet, define a CSS rule on the components layer

@layer components {
    dialog {
        &[size-='tiny'] {
            /* ... */
        }

        /* ... */
    }
}

Scope

dialog {
    /* ... */
}
 praneshnikhar.site / webtui / components / dialog · Top 1:1