For AI agents: the complete documentation index is available at https://wallarm.github.io/design-system/llms.txt, the full documentation bundle is available at https://wallarm.github.io/design-system/llms-full.txt, and this page is available as Markdown at https://wallarm.github.io/design-system/components/search-modal.md.

SearchModal

A command-palette dialog opened with Cmd+K (Ctrl+K on Windows/Linux). Provides a search input, grouped item lists, keyboard navigation, and a footer with keyboard hints. Content is consumer-assembled: the component is a composable shell, not a hard-wired feature.

Source · Storybook

Usage

import { ChevronRight, Plus, Search, Users } from '@wallarm-org/design-system/icons';
import { SearchModal, SearchModalBody, SearchModalContent, SearchModalEmpty, SearchModalFooter, SearchModalGroup, SearchModalGroupLabel, SearchModalInput, SearchModalItem } from '@wallarm-org/design-system/SearchModal';
import { Text } from '@wallarm-org/design-system/Text';
import { WallyIcon } from '@wallarm-org/design-system/WallyIcon';

Examples

Empty recents

A new user with no history. The Recent section shows "Nothing recent yet" instead of items. Matches PRD state 2.

Sub list

A sub-list page pushed in place of the main body. Used for "Create\u2026" and "Switch tenant". The footer changes to show "esc back" and "enter to select". Demonstrates PRD states 6 and 7.

Items rendered as links via asChild, for cases where results navigate to a URL.

Disabled items

Disabled items are excluded from keyboard navigation and cannot be selected.

Close on select false

closeOnSelect={false} keeps the modal open after selecting an item, useful for multi-step flows like the sub-list mechanic.

Controlled

Controlled open state, driven entirely from outside the component. No SearchModalTrigger — the button calls setOpen directly.

Scrollable

The scrollable body when there are many items. The input and footer stay fixed while the body scrolls.

Props

PropTypeDefaultDescription
openboolean | undefined
onOpenChange((open: boolean) => void) | undefined
onQueryChange((query: string) => void) | undefined
data-testidstring | undefined

SearchModalBody

PropTypeDefaultDescription
defaultCheckedboolean | undefined
defaultValuestring | number | readonly string[] | undefined
autoFocusboolean | undefined
idstring | undefined
tabIndexnumber | undefined
titlestring | undefined
relstring | undefined
onChangeChangeEventHandler<T, Element> | undefined

SearchModalContent

PropTypeDefaultDescription
defaultCheckedboolean | undefined
defaultValuestring | number | readonly string[] | undefined
autoFocusboolean | undefined
idstring | undefined
tabIndexnumber | undefined
titlestring | undefined
relstring | undefined
onChangeChangeEventHandler<T, Element> | undefined

SearchModalEmpty

PropTypeDefaultDescription
defaultCheckedboolean | undefined
defaultValuestring | number | readonly string[] | undefined
autoFocusboolean | undefined
idstring | undefined
tabIndexnumber | undefined
titlestring | undefined
relstring | undefined
onChangeChangeEventHandler<T, Element> | undefined

SearchModalFooter

PropTypeDefaultDescription
defaultCheckedboolean | undefined
defaultValuestring | number | readonly string[] | undefined
autoFocusboolean | undefined
idstring | undefined
tabIndexnumber | undefined
titlestring | undefined
relstring | undefined
onChangeChangeEventHandler<T, Element> | undefined

SearchModalGroup

PropTypeDefaultDescription
defaultCheckedboolean | undefined
defaultValuestring | number | readonly string[] | undefined
autoFocusboolean | undefined
idstring | undefined
tabIndexnumber | undefined
titlestring | undefined
relstring | undefined
onChangeChangeEventHandler<T, Element> | undefined

SearchModalGroupLabel

PropTypeDefaultDescription
defaultCheckedboolean | undefined
defaultValuestring | number | readonly string[] | undefined
autoFocusboolean | undefined
idstring | undefined
tabIndexnumber | undefined
titlestring | undefined
relstring | undefined
onChangeChangeEventHandler<T, Element> | undefined

SearchModalInput

PropTypeDefaultDescription
loadingboolean | undefinedfalseShow a loading spinner replacing the search icon
titlestring | undefined
patternstring | undefined
defaultCheckedboolean | undefined
defaultValuestring | number | readonly string[] | undefined
autoFocusboolean | undefined
idstring | undefined
tabIndexnumber | undefined
relstring | undefined
typeHTMLInputTypeAttribute | undefined
disabledboolean | undefined
namestring | undefined
altstring | undefined
heightstring | number | undefined
srcstring | undefined
widthstring | number | undefined
autoCompleteHTMLInputAutoCompleteAttribute | undefined
maxLengthnumber | undefined
minLengthnumber | undefined
placeholderstring | undefined
readOnlyboolean | undefined
requiredboolean | undefined
checkedboolean | undefined
stepstring | number | undefined
acceptstring | undefined
maxstring | number | undefined
minstring | number | undefined
multipleboolean | undefined

SearchModalItem

PropTypeDefaultDescription
onSelect(() => void) | undefinedCalled when the item is selected (Enter key or click)
disabledboolean | undefinedfalseWhether this item is disabled
asChildboolean | undefinedfalseRender as child element (e.g. for <a> links)
closeOnSelectboolean | undefinedtrueWhether selecting this item closes the modal (default: true)
namestring | undefined
type"button" | "submit" | "reset" | undefined
valuestring | number | readonly string[] | undefined
defaultCheckedboolean | undefined
defaultValuestring | number | readonly string[] | undefined
autoFocusboolean | undefined
idstring | undefined
tabIndexnumber | undefined
titlestring | undefined
relstring | undefined
onChangeChangeEventHandler<T, Element> | undefined

SearchModalTrigger

PropTypeDefaultDescription
asChildboolean | undefinedRender as child element
valuestring | undefinedNative button value attribute (string only, matching Ark UI's Dialog.Trigger)
titlestring | undefined
defaultCheckedboolean | undefined
defaultValuestring | number | readonly string[] | undefined
autoFocusboolean | undefined
idstring | undefined
tabIndexnumber | undefined
relstring | undefined
onChangeChangeEventHandler<T, Element> | undefined
type"button" | "submit" | "reset" | undefined
disabledboolean | undefined
namestring | undefined

Explorer