Command Bar
Always-visible search input designed to sit inside a top bar. Accent-primary bottom border on focus with glow ring.
<arc-command-bar> Overview
>
CommandBar is a persistent search-and-command input designed to live permanently inside a TopBar or toolbar region. Unlike CommandPalette, which is a modal overlay triggered by a keyboard shortcut, CommandBar is always visible and ready for input. This makes it ideal for applications where search is a primary workflow — admin dashboards, documentation sites, and developer tools that benefit from an always-accessible entry point.
When focused, the input reveals an accent-primary bottom border with a subtle glow ring, drawing the user's eye without disrupting the surrounding layout. The component dispatches `arc-input` on every keystroke for live filtering and `arc-submit` when the user presses Enter, making it easy to wire up search-as-you-type or explicit command submission patterns.
CommandBar is intentionally minimal — it handles the input chrome and events while leaving result rendering to your application. Pair it with a dropdown or popover to display search results, or route the submitted value to a dedicated search results page. For modal command experiences, use CommandPalette instead.Guidelines
When to use
- Place inside a TopBar or toolbar for consistent positioning
- Use a descriptive placeholder like "Search docs..." to hint at scope
- Listen to arc-input for search-as-you-type and arc-submit for explicit queries
- Pair with a dropdown or popover to display search results inline
- Constrain the width with max-width so the bar does not dominate the toolbar
When not to use
- Do not use CommandBar when search is secondary — prefer CommandPalette for on-demand access
- Do not place multiple CommandBars on the same page
- Do not omit the placeholder — an empty input gives no affordance
- Do not use CommandBar as a general-purpose text input — it is styled for search context only
- Do not forget to handle the arc-submit event — users expect Enter to do something
Features
- Always-visible search input for persistent toolbar placement
- Accent-primary bottom border with glow ring on focus
- `arc-input` event on every keystroke for live filtering
- `arc-submit` event on Enter for explicit command submission
- Customisable placeholder text
- Controlled value prop for external state management
- Keyboard accessible with standard input behavior
- Token-driven theming via CSS custom properties
Preview
Usage
This component requires JavaScript. No pure HTML/CSS version is available — use the Web Component directly or a framework wrapper.
<script type="module" src="@arclux/arc-ui"></script>
<arc-command-bar placeholder="Search..." id="search"></arc-command-bar>
<script>
const bar = document.querySelector('#search');
bar.addEventListener('arc-input', (e) => {
console.log('typing:', e.detail.value);
});
bar.addEventListener('arc-submit', (e) => {
console.log('submitted:', e.detail.value);
});
</script> import { CommandBar } from '@arclux/arc-ui-react';
export function AppSearch() {
return (
<CommandBar
placeholder="Search..."
onArcInput={(e) => console.log('typing:', e.detail.value)}
onArcSubmit={(e) => console.log('submitted:', e.detail.value)}
/>
);
} <script setup>
import { CommandBar } from '@arclux/arc-ui-vue';
function onInput(e) {
console.log('typing:', e.detail.value);
}
function onSubmit(e) {
console.log('submitted:', e.detail.value);
}
</script>
<template>
<CommandBar
placeholder="Search..."
@arc-input="onInput"
@arc-submit="onSubmit"
/>
</template> <script>
import { CommandBar } from '@arclux/arc-ui-svelte';
function handleInput(e) {
console.log('typing:', e.detail.value);
}
function handleSubmit(e) {
console.log('submitted:', e.detail.value);
}
</script>
<CommandBar
placeholder="Search..."
on:arc-input={handleInput}
on:arc-submit={handleSubmit}
/> import { Component } from '@angular/core';
import { CommandBar } from '@arclux/arc-ui-angular';
@Component({
imports: [CommandBar],
template: `
<arc-command-bar
placeholder="Search..."
(arc-input)="onInput($event)"
(arc-submit)="onSubmit($event)"
/>
`,
})
export class AppSearchComponent {
onInput(e: CustomEvent) {
console.log('typing:', e.detail.value);
}
onSubmit(e: CustomEvent) {
console.log('submitted:', e.detail.value);
}
} import { CommandBar } from '@arclux/arc-ui-solid';
export function AppSearch() {
return (
<CommandBar
placeholder="Search..."
onArcInput={(e) => console.log('typing:', e.detail.value)}
onArcSubmit={(e) => console.log('submitted:', e.detail.value)}
/>
);
} import { CommandBar } from '@arclux/arc-ui-preact';
export function AppSearch() {
return (
<CommandBar
placeholder="Search..."
onArcInput={(e) => console.log('typing:', e.detail.value)}
onArcSubmit={(e) => console.log('submitted:', e.detail.value)}
/>
);
} API
-
placeholderstring'Search…' - Placeholder text displayed when the input is empty. Use it to communicate the scope of the search.
-
valuestring'' - The current value of the input. Set externally to control the input state programmatically.
-
iconstring'magnifying-glass' - Icon name displayed before the input. Accepts any Phosphor icon name.
Events
-
arc-inputdetail: { value: string } - Fired on every keystroke with detail: { value }.
-
arc-submitdetail: { value: string } - Fired when the user presses Enter with detail: { value }.
See Also
- Command Palette Spotlight-style command palette with search and keyboard shortcuts.
- Search Search input with a magnifying glass icon, clear button, loading spinner, and autocomplete suggestions dropdown.
- Top Bar Fixed header bar that anchors every page with a brand slot on the left, an optional center navigation area, and a right-aligned actions region for user controls, search, and settings.