-
Notifications
You must be signed in to change notification settings - Fork 41
example progress bar
<os-progress-bar> is a linear progress indicator with two modes
(determinate, indeterminate), four tones, and a built-in label /
percent header. Used by the OS-file-drop upload HUD and available
to any feature that needs a value-driven bar.
Status: Stable.
<os-progress-bar value="42"></os-progress-bar>
<os-progress-bar indeterminate label="Uploading…"></os-progress-bar>
<os-progress-bar
value="280"
max="320"
tone="success"
label="hero.jpg"
show-percent
></os-progress-bar>| Mode | When to use | How |
|---|---|---|
| Determinate | You have a running loaded / total. |
Set value (and optionally max, default 100). The fill width animates between updates. |
| Indeterminate | You don't know the total, or the work is open-ended. | Set the boolean indeterminate attribute. The default bar fills the whole track and runs the holo shimmer through it on a 2.4s loop — alive without pretending to advance. A toned bar has a flat fill with no mesh to travel, so it falls back to a 33%-wide block sweeping the track on a 1.1s linear loop. |
Switch modes live by toggling the indeterminate attribute — the
component repaints on every attribute change.
Tints the fill via the shell's status tokens — --os-ui-success-fg,
--os-ui-warning-fg, --os-ui-danger — so the bar reads the same
as toasts, ribbons, and notices.
<os-progress-bar value="80" tone="success"></os-progress-bar>
<os-progress-bar value="80" tone="warning"></os-progress-bar>
<os-progress-bar value="80" tone="danger"></os-progress-bar><os-progress-bar
value="42"
label="Uploading hero.jpg"
show-percent
></os-progress-bar>Renders the label on the left of a small header row and a
right-aligned 42% readout. The label is also wired into the
track's aria-label. show-percent is a boolean attribute.
const bar = document.createElement( 'os-progress-bar' );
bar.setAttribute( 'indeterminate', '' );
bar.setAttribute( 'show-percent', '' );
host.appendChild( bar );
// …a moment later, real progress arrives:
bar.removeAttribute( 'indeterminate' );
bar.setAttribute( 'max', String( total ) );
bar.setAttribute( 'value', String( loaded ) );Every surface is overridable via CSS variables on the host:
| Variable | Default | Purpose |
|---|---|---|
--os-ui-progress-track-bg |
var(--os-ui-surface-sunken, rgba(0,0,0,0.08)) |
Track background. |
--os-ui-progress-fill |
var(--wp-admin-theme-color, #2271b1) |
Fill color (overridden by the tone attribute). |
--os-ui-progress-height |
6px |
Track height. |
--os-ui-progress-radius |
999px |
Track + fill border-radius. |
--os-ui-progress-label-color |
inherit |
Header text color. |
--os-ui-progress-label-size |
12px |
Header font size. |
--os-ui-progress-label-gap |
4px |
Space between header and track. |
my-feature {
--os-ui-progress-height: 10px;
--os-ui-progress-radius: 4px;
--os-ui-progress-fill: #5e3aee;
}Determinate mode wires role="progressbar" with
aria-valuemin / aria-valuemax / aria-valuenow. Indeterminate
mode drops the aria-valuenow / aria-valuemax attributes (which
is the spec's signal for indeterminate state). label is mirrored
onto aria-label. prefers-reduced-motion: reduce disables the
indeterminate sweep and the fill-width transition.
- OS-file-drop upload HUD —
src/os-file-drop/progress-hud.ts(seedocs/examples/os-file-drop.md).
This wiki is generated from the docs/ directory — edits made here are overwritten by the next sync.
To change a page, open a pull request against docs/.
Guides
- Development guide
- Releasing openstation
- Agents security model
- API Index
- Architecture
- Bridge protocol — wiring overview
- <os-*> component reference
- Native Desktop Host — Experimental
- Desktop themes
- Dock customization — two registries, one mental model
- The event-driven framework
- Files on the Desktop
- Folder sharing
- Getting Started
- Hooks Reference
- Icons
- JavaScript Reference
- The Living Tree — algorithm definition
- Mio
- Native Windows & Framework Interop
- Plugin compatibility layer
- Progressive Web App (PWA)
- Station Home
- Using openstation from your own plugin
Migration notes
- Migration: built-in activity channels move to the os/ namespace
- Migration: window, wallpaper and widget bundles load on demand
- Migration — the navigation model
- Migration: a native window's tabs move to the window chrome
All examples
- AI Agents — extend and invoke from a plugin
- wp.os.ai.ask() — programmatic AI Copilot
- Tune the AI model config
- Custom arrange-menu action
- Open a child window its owner can't cover
- Style a specific admin page inside the iframe
- Code Blue — register your plugin's log file
- Open a file in the Code editor (deep-link from any window)
- Connect to a window — title-bar button + iframe pub/sub
- Content changes — live-refresh every window listing your type
- Custom window chrome (Experimental)
- Register a custom unfocused-window effect
- Example: render a data table
- Real file storage — react to uploads, gate policy, share from PHP
- React to a window being set free onto the real desktop
- Cross-window devtools — instrumentation primitives
- Add a dock item with a badge
- Decorate the dock without forking the renderer
- Replace the dock rail entirely
- Retune the Drafts widget's AI writing assistant
- Gate OpenStation by role
- Iframe-initiated window opens
- Build a feed reader without the bookkeeping
- Inject data into openStationConfig
- Render a list without losing clicks — renderKeyedList()
- Example: layout primitives (body → panel → row → col)
- Use <os-*> components from a plugin that ships as a zip
- Restyle and drive Mio
- Add an action that works on a whole selection
- WP Explorer — custom post types and their folder
- Add an action button to a WP Explorer preview pane
- Example: native Posts window
- Example: native window with tabs
- Native windows
- Customize note → post conversion
- Send a notification
- OAuth relay — connect to an external service
- OS-file drop
- <os-flyout> — window-scoped sliding card
- Plugins window — extras
- Track who's around — wp.os.presence
- Example: progress bar
- PWA install — surface your own button
- React to window events
- Example: extend the Trash
- Register a slash-command
- Register a desktop theme from a plugin
- Register a game
- Example: register a desktop icon (Jorvy)
- Register a wallpaper
- Register a widget
- Related entities — extend the title bar's "Related" menu
- The native-window render ctx
- Programmatic folder sharing
- Share state across multi-bundle plugins — wp.os.createSharedStore()
- Example: loading spinner
- Add an opt-in card to Station Home
- Accept drops on your desktop icon
- Give a tile two icons, one per state
- Add a row to a window's ⋯ menu
- Example: window activity & the status ring
- Window controls
- Subscribe to window lifecycle events
- Window links — relate windows and restyle the ties (Experimental)
- Window loading state — spinner overlay & ready signal
- Show a banner at the top of a window
- Pulse a window's icon — Window.requestAttention()
- Register a custom window reveal
- Window slots
- Window themes
- Native window with bundle-bound config