# Search

Maintains find/replace matches and transient highlights. Hosts can restrict scopes, guard replacement and reveal active matches.

Maintains find/replace matches and transient highlights. Hosts can restrict scopes, guard replacement and reveal active matches.

`@quirekit/extension-search` · **MIT**

## Editor compatibility
Layer：**Shared document capability**
| Editor | Status | Assembly and boundaries |
| --- | --- | --- |
| Classic | Supported | [classicEditorPreset](/en/plugins/reference/classic-editor-preset) — Use the product-neutral classicEditorPreset without duplicating installed capabilities. The Word preset replaces paragraphs, headings and container lists; do not stack generic structures onto that model. |
| Block | Supported | [createBlockEditorPreset](/en/plugins/reference/create-block-editor-preset) — The default createBlockEditor preset installs this capability. Configure the corresponding preset child; graphic editing uses the preset's workspace ports, while persistence and assets remain host-owned. Avoid duplicate extensions. |

“Supported” means the product assembly above exists; interaction, host services and file formats retain their own conditions. See [status and integration rules](/en/plugins/compatibility). Licensing is shown separately.

## Installation

```sh
pnpm add @quirekit/extension-search@alpha
```

Install in Editor extensions. The host supplies a view, container and persistence; see [Quick start](/en/guide/quick-start).

```ts
import { Search } from '@quirekit/extension-search'
```

Use compatible versions available from your distribution source. This site uses the Alpha workspace. License labels come from package metadata; see [support and licensing](/en/support).

## Integration by editor

These snippets use an existing host element named element. The host owns container sizing and persistence; call instance.destroy() on teardown. Avoid duplicating preset capabilities and supply required host ports before installation.

### Classic

Use the product-neutral classicEditorPreset without duplicating installed capabilities. The Word preset replaces paragraphs, headings and container lists; do not stack generic structures onto that model.

[classicEditorPreset](/en/plugins/reference/classic-editor-preset)

```ts
import { createClassicEditor } from '@quirekit/classic-editor'
import '@quirekit/classic-editor/styles.css'

const instance = createClassicEditor({ element })
```

### Block

The default createBlockEditor preset installs this capability. Configure the corresponding preset child; graphic editing uses the preset's workspace ports, while persistence and assets remain host-owned. Avoid duplicate extensions.

[createBlockEditorPreset](/en/plugins/reference/create-block-editor-preset)

```ts
import { createBlockEditor } from '@quirekit/block-editor'
import '@quirekit/block-editor/styles.css'

const instance = createBlockEditor({
  element,
  content: { type: 'doc', content: [{ type: 'paragraph' }] },
})
```

## Configuration

These are extension-level defaults. Presets can override them; they are distinct from current document attributes. See [configuration](/en/plugins/configuration).

### highlight

Highlight colors.

Type：`SearchHighlightStyle`

Default：`{ match: "rgba(255, 196, 0, 0.35)", active: "transparent", activeOutline: "#e8710a" }`

### resolveScope

Resolves ordered searchable intervals.

Type：`((state: EditorState) => readonly SearchScopeSegment[]) | undefined`

Default：`undefined`

### resolveExcludedScope

Resolves intervals deliberately left out of the scope, used only to count
matches the user cannot reach so the UI can say so.

Type：`((state: EditorState) => readonly SearchScopeSegment[]) | undefined`

Default：`undefined`

### checkReplaceable

Decides whether a match may be replaced.

Type：`((state: EditorState, match: SearchMatch) => SearchReplaceVerdict) | undefined`

Default：`undefined`

### reveal

Applies host-specific presentation for a newly active match.

Type：`((tr: Transaction, match: SearchMatch) => void) | undefined`

Default：`undefined`

## Commands and runtime

These commands are supplied directly by this extension. Availability depends on the installed schema, selection and protection policy; query editor.can() first.

| Command | Parameter signature |
| --- | --- |
| `setSearchQuery` | `setSearchQuery(text: string, queryOptions?: Partial<SearchOptions> \| undefined, limit?: SearchRange \| undefined)` |
| `clearSearch` | `clearSearch()` |
| `findNext` | `findNext()` |
| `findPrevious` | `findPrevious()` |
| `selectSearchMatch` | `selectSearchMatch(index: number)` |
| `replaceSearchMatch` | `replaceSearchMatch(text: string)` |
| `replaceAllSearchMatches` | `replaceAllSearchMatches(text: string)` |

These are parameter signatures. See [commands and controls](/en/build/commands) to connect UI while retaining one transaction/history authority.

## Next steps

Return to [all plugins](/en/plugins), or read [configuration](/en/plugins/configuration) to distinguish options, attributes and commands.

See [extension development](/en/build/extension) for custom capabilities and [Build a product](/en/build) for complete hosting.
