# Components API reference

> Exports of @dev-bench/components.

Source: https://components.n.yatsyk.com/docs/components/jsdoc

## Functions

### CommandPalette

```ts
CommandPalette({ actions, onClose, placeholder, maxResults, }: CommandPaletteProps): JSX.Element
```

### BottomDrawer

```ts
BottomDrawer({ open, onClose, title, children, heightPercent, closeOnEsc, }: BottomDrawerProps): JSX.Element | null
```

### ConsolePanel

```ts
ConsolePanel(props: ConsolePanelProps): JSX.Element
```

### entryKind

Resolves an entry to its row-rendering kind, defaulting to 'log'.

```ts
entryKind(e: ConsoleEntry): "log" | "group" | "table" | "count" | "time" | "error"
```

### resolveFeatures

Deep-merges a partial features bag into the defaults. Host is free to
pass `features={{ toolbar: { search: false } }}` and only override what
matters; everything else stays at default.

```ts
resolveFeatures(partial?: PartialConsoleFeatures): ConsoleFeatures
```

### resolveTraceFeatures

```ts
resolveTraceFeatures(partial?: PartialTraceFeatures): TraceFeatures
```

### TraceTree

```ts
TraceTree(props: TraceTreeProps): JSX.Element
```

### inferredAdapter

```ts
inferredAdapter(): SchemaAdapter
```

### inferKind

```ts
inferKind(v: unknown): ValueKind
```

### ObjectInspector

```ts
ObjectInspector(props: ObjectInspectorProps): JSX.Element
```

### zodAdapter

```ts
zodAdapter(rootSchema: ZodTypeAny): SchemaAdapter
```

### resolveInspectorFeatures

```ts
resolveInspectorFeatures(partial?: PartialInspectorFeatures): ObjectInspectorFeatures
```

### HttpInspector

```ts
HttpInspector({ requests, emptyText, }: HttpInspectorProps): JSX.Element
```

### Avatar

Generic colored-square avatar — used for app tiles, agents, etc.
App-agnostic: caller passes the initial + hue, no STATE lookup.

```ts
Avatar({ initial, hue, size, title }: AvatarProps): JSX.Element
```

### Chip

```ts
Chip({ children, on, onClick, onClose, title }: ChipProps): JSX.Element
```

### JsonTree

```ts
JsonTree({ value, indent }: JsonTreeProps): JSX.Element
```

### Pip

```ts
Pip({ kind, size, color, style }: PipProps): JSX.Element
```

### Sparkline

```ts
Sparkline({ values, width, height, color, strokeWidth, "aria-label": ariaLabel, }: SparklineProps): JSX.Element
```

### Spinner

```ts
Spinner({ size, color }: SpinnerProps): JSX.Element
```

### StatusIcon

```ts
StatusIcon({ status, size }: StatusIconProps): JSX.Element
```

### StatusPill

```ts
StatusPill({ status, label }: StatusPillProps): JSX.Element
```

### TweakRadio

```ts
TweakRadio({ label, value, options, onChange, }: { label: string; value: string; options: TweakRadioOption[]; onChange: (v: string) => void; }): JSX.Element
```

### TweakSection

```ts
TweakSection({ title, children, }: { title: string; children?: ReactNode; }): JSX.Element
```

### TweakSlider

```ts
TweakSlider({ label, value, min, max, step, unit, onChange, }: TweakSliderProps): JSX.Element
```

### TweaksPanel

```ts
TweaksPanel({ title, enabled, children, }: TweaksPanelProps): JSX.Element | null
```

### TweakToggle

```ts
TweakToggle({ label, value, onChange, }: { label: string; value: boolean; onChange: (v: boolean) => void; }): JSX.Element
```

### useTweaks

```ts
<T extends Record<string, unknown>>(defaults: T): UseTweaksReturn<T>
```

### useKey

Subscribe to a global keydown.
- 'cmdk' matches Cmd/Ctrl + K (and preventDefault)
- 'esc'  matches Escape
- any other string matches `e.key === key`

`deps` is forwarded to useEffect so consumers can opt into stale-closure
fixes; pass [] for once-on-mount.

```ts
useKey(key: UseKeySpec, fn: (e: KeyboardEvent) => void, deps?: ReadonlyArray<unknown>): void
```

### onActivateKey

```ts
onActivateKey(fn: () => void): (e: KeyboardEvent) => void
```

## Types

### CommandAction

```ts
type CommandAction = {
	id: string;
	label: string;
	cat?: string;
	hint?: string;
	kbd?: string;
	onRun: () => void;
}
```

### CommandPaletteProps

```ts
type CommandPaletteProps = {
	actions: CommandAction[];
	onClose: () => void;
	placeholder?: string;
	maxResults?: number;
}
```

### BottomDrawerProps

```ts
type BottomDrawerProps = {
	open: boolean;
	onClose: () => void;
	title?: string;
	children: ReactNode;
	heightPercent?: number;
	closeOnEsc?: boolean;
}
```

### ColumnsConfig

```ts
type ColumnsConfig = {
	timestamp: boolean;
	timestampFormat: TimestampFormat;
	source: boolean;
	level: boolean;
	traceChip: boolean;
	rowPrefix: boolean;
	rowExtra: boolean;
}
```

### ConsoleEntry

```ts
type ConsoleEntry = | ConsoleEntryLog
	| ConsoleEntryGroup
	| ConsoleEntryTable
	| ConsoleEntryCount
	| ConsoleEntryTime
	| ConsoleEntryError
```

### ConsoleEntryCount

```ts
type ConsoleEntryCount = ConsoleEntryBase & {
	kind: 'count';
	label: string;
	value: number;
}
```

### ConsoleEntryError

```ts
type ConsoleEntryError = ConsoleEntryBase & {
	kind: 'error';
	msg: string;
	stack?: string[];
	data?: unknown;
}
```

### ConsoleEntryGroup

```ts
type ConsoleEntryGroup = ConsoleEntryBase & {
	kind: 'group';
	label: string;
	durationMs?: number;
	status?: ConsoleGroupStatus;
	active?: boolean;
}
```

### ConsoleEntryLog

```ts
type ConsoleEntryLog = ConsoleEntryBase & {
	kind?: 'log';
	msg: string;
	data?: unknown;
	stack?: string[];
}
```

### ConsoleEntryTable

```ts
type ConsoleEntryTable = ConsoleEntryBase & {
	kind: 'table';
	label: string;
	columns: string[];
	rows: unknown[][];
}
```

### ConsoleEntryTime

```ts
type ConsoleEntryTime = ConsoleEntryBase & {
	kind: 'time';
	label: string;
	durationMs: number;
}
```

### ConsoleFeatures

```ts
type ConsoleFeatures = {
	columns: ColumnsConfig;
	toolbar: ToolbarConfig;
	footer: boolean;
	dataPreview: boolean;
	stackFrames: boolean;
	tableRows: boolean;
	groupAggregations: boolean;
	evalSlot: boolean;
	summarySlot: boolean;
	autoScroll: boolean;
	/** When true, clicking a row selects it and (if the host passes
	 * `renderEntryDetail`) the detail panel renders to the right. Hosts
	 * typically wire this to <ObjectInspector value={entry.data} />. */
	detailPanel: boolean;
	groupCollapseDefault: GroupCollapseDefault;
}
```

### ConsoleGroupStatus

```ts
type ConsoleGroupStatus = 'ok' | 'warn' | 'err'
```

### ConsoleLevel

```ts
type ConsoleLevel = 'info' | 'warn' | 'error' | 'debug'
```

### ConsoleLevelOrAll

```ts
type ConsoleLevelOrAll = ConsoleLevel | 'all'
```

### ConsolePanelProps

```ts
type ConsolePanelProps = {
	entries: ConsoleEntry[];

	emptyText?: string;

	/** Single switchable-features bag. Anything omitted falls back to
	 * DEFAULT_CONSOLE_FEATURES. */
	features?: PartialConsoleFeatures;

	level?: ConsoleLevelOrAll;
	onLevelChange?: (l: ConsoleLevelOrAll) => void;

	source?: string | null;
	onSourceChange?: (s: string | null) => void;

	query?: string;
	onQueryChange?: (q: string) => void;

	sources?: ConsoleSource[];

	paused?: boolean;
	onPausedChange?: (paused: boolean) => void;

	onClear?: () => void;

	collapsed?: Record<string, boolean>;
	onCollapsedChange?: (c: Record<string, boolean>) => void;

	renderRowPrefix?: (entry: ConsoleEntry) => ReactNode | null;
	renderRowExtra?: (entry: ConsoleEntry) => ReactNode | null;

	/** Side-panel content for the selected row. Host typically wires this
	 * to `<ObjectInspector value={entry.data} />`. Renders only when
	 * features.detailPanel === true and an entry is selected. */
	renderEntryDetail?: (entry: ConsoleEntry) => ReactNode | null;
	selectedEntryId?: string | number | null;
	onSelectEntry?: (id: string | number | null) => void;

	evalSlot?: ReactNode | null;
	summarySlot?: ReactNode | null;

	onTraceClick?: (traceId: string) => void;

	className?: string;
	style?: JSX.IntrinsicElements['div']['style'];
}
```

### ConsoleSource

Source descriptor used to render filter chips. `color` is a CSS color string
provided by the host (`var(--something)` or any literal). The reusable
component only spreads it; it never inspects the value.

```ts
type ConsoleSource = {
	id: string;
	label: string;
	color?: string;
}
```

### GroupCollapseDefault

```ts
type GroupCollapseDefault = | { kind: 'all-expanded' }
	| { kind: 'all-collapsed' }
	| { kind: 'first-n-expanded'; n: number }
```

### PartialConsoleFeatures

```ts
type PartialConsoleFeatures = Partial<
	Omit<ConsoleFeatures, 'columns' | 'toolbar' | 'groupCollapseDefault'>
> & {
	columns?: Partial<ColumnsConfig>;
	toolbar?: Partial<ToolbarConfig>;
	groupCollapseDefault?: GroupCollapseDefault;
}
```

### PartialTraceFeatures

```ts
type PartialTraceFeatures = Partial<TraceFeatures>
```

### Span

```ts
type Span = {
	id: string;
	parent?: string | null;
	name: string;
	start: number;
	dur: number;
	status?: SpanStatus;
	service?: string;
	tags?: Record<string, unknown>;
}
```

### SpanStatus

```ts
type SpanStatus = 'ok' | 'warn' | 'error'
```

### TimestampFormat

```ts
type TimestampFormat = 'absolute' | 'absolute-ms' | 'relative' | 'hms' | 'hms-ms'
```

### ToolbarConfig

```ts
type ToolbarConfig = {
	enabled: boolean;
	pause: boolean;
	clear: boolean;
	expandCollapseGroups: boolean;
	levelFilter: boolean;
	sourceFilter: boolean;
	search: boolean;
	searchPlaceholder: string;
}
```

### TraceFeatures

```ts
type TraceFeatures = {
	axis: boolean;
	axisTickCount: number;
	durationLabel: boolean;
	serviceLabel: boolean;
	statusColor: boolean;
	hierarchyRail: boolean;
	defaultExpansion: 'all-expanded' | 'roots-only';
	detailPanel: boolean;
}
```

### TraceTreeProps

```ts
type TraceTreeProps = {
	spans: Span[];
	selectedSpanId?: string;
	onSelectSpan?: (id: string) => void;
	emptyText?: string;
	renderSpanDetail?: (span: Span) => ReactNode | null;
	features?: PartialTraceFeatures;
	className?: string;
	style?: JSX.IntrinsicElements['div']['style'];
}
```

### CopyOption

```ts
type CopyOption = 'json' | 'path' | 'value'
```

### CustomRenderer

Custom renderer for one node. Applied BEFORE the schema-derived editor
(so hosts can fully override). When `match` returns true, the inspector
delegates rendering to `view` (read mode) or `edit` (edit mode); if a
renderer omits one mode, the inspector falls back to the built-in.

```ts
type CustomRenderer = {
	name: string;
	match: (ctx: RendererMatchContext) => boolean;
	view?: (ctx: RendererViewContext) => ReactNode | null;
	edit?: (ctx: RendererEditContext) => ReactNode | null;
}
```

### EditResult

Result of an in-place edit attempt. Discriminated so consumers can
react to validation failures without try/catch.

```ts
type EditResult = | { status: 'committed'; path: Path; oldValue: unknown; newValue: unknown }
	| { status: 'rejected'; path: Path; reason: 'validation' | 'type'; message: string }
```

### ObjectInspectorFeatures

```ts
type ObjectInspectorFeatures = {
	toolbar: boolean;
	search: boolean;
	searchPlaceholder: string;
	expandAllButton: boolean;
	collapseAllButton: boolean;
	sortKeysButton: boolean;
	breadcrumb: boolean;
	typeBadges: boolean;
	docTooltips: boolean;
	cyclicMarker: boolean;
	collapsedPreview: boolean;
	copyButtons: ReadonlyArray<CopyOption>;
	maxStringPreview: number;
	maxArrayPreviewItems: number;
	defaultExpandDepth: number;
	dense: boolean;
	/** Reserved for v2 — JSON / Table / Diff view modes. v1 ships only Tree. */
	viewModes: ReadonlyArray<'tree' | 'json' | 'table' | 'diff'>;
}
```

### ObjectInspectorMode

```ts
type ObjectInspectorMode = 'view' | 'edit'
```

### ObjectInspectorProps

Visual descriptor — held intentionally minimal so the next UI iteration
can change colors/spacing/icons without a prop migration.

```ts
type ObjectInspectorProps = {
	value: unknown;

	/** Adapter (preferred). If omitted, falls back to inferred. The bundled
	 * `zodAdapter(schema)` is a separate import so the package has no zod
	 * runtime dep. */
	adapter?: SchemaAdapter;

	mode?: ObjectInspectorMode;

	/** Required when mode === 'edit'. Called once per attempt with a
	 * discriminated EditResult so consumers can react to rejections without
	 * try/catch. */
	onEdit?: (result: EditResult) => void;

	/** Custom renderer registry — applied before built-in renderers in BOTH
	 * view and edit modes. Hosts get total control over per-type chrome
	 * (e.g. photoeditor's LayerNode preview, AAR's AppManifest pill). */
	customRenderers?: ReadonlyArray<CustomRenderer>;

	/** Reserved for v2 diff mode — ignored by v1. Documented now so adding
	 * diff later doesn't break consumers. */
	compareTo?: unknown;

	rootLabel?: string;
	emptyText?: string;

	features?: PartialInspectorFeatures;

	className?: string;
	style?: JSX.IntrinsicElements['div']['style'];
}
```

### Path

```ts
type Path = ReadonlyArray<string | number>
```

### PartialInspectorFeatures

```ts
type PartialInspectorFeatures = Partial<ObjectInspectorFeatures>
```

### RendererEditContext

```ts
type RendererEditContext = RendererMatchContext & {
	commit: (newValue: unknown) => void;
	cancel: () => void;
}
```

### RendererMatchContext

```ts
type RendererMatchContext = {
	value: unknown;
	node: SchemaNode;
	path: Path;
}
```

### RendererViewContext

```ts
type RendererViewContext = RendererMatchContext
```

### SchemaAdapter

Adapter contract — pluggable schema source. Inferred is the default;
the bundled zod adapter wraps a ZodSchema. Hosts may write their own.

```ts
type SchemaAdapter = {
	name: string;
	/** Resolve a SchemaNode for the value at `path`. */
	nodeFor: (value: unknown, path: Path) => SchemaNode;
	/** Validate a value against the schema at `path`. Returns null on success. */
	validate?: (value: unknown, path: Path) => ValidationError | null;
}
```

### SchemaNode

Type-info node returned by a SchemaAdapter. Drives both the type badge
and the editor selection.

```ts
type SchemaNode = {
	kind: ValueKind;
	label: string;
	doc?: string;
	enum?: ReadonlyArray<string | number | boolean>;
	range?: readonly [number, number];
	lenRange?: readonly [number, number];
	pattern?: string;
	format?: string;
	optional?: boolean;
	readOnly?: boolean;
	/** For discriminated-union: the discriminant property name. The host's
	 * adapter builds this; the inspector uses it to render a tag dropdown. */
	discriminator?: string;
	/** For discriminated-union: the variant labels keyed by discriminant value. */
	variants?: Record<string, SchemaNode>;
}
```

### ValidationError

```ts
type ValidationError = {
	message: string;
	path?: Path;
}
```

### ValueKind

Internal classification of a value. Adapters return one of these from
`nodeFor()`; renderers dispatch on `kind`. New kinds are non-breaking
additions because consumers always handle `'unknown'` as the fallback.

```ts
type ValueKind = | 'string'
	| 'number'
	| 'integer'
	| 'boolean'
	| 'null'
	| 'undefined'
	| 'date'
	| 'object'
	| 'array'
	| 'bigint'
	| 'symbol'
	| 'function'
	| 'enum'
	| 'discriminatedUnion'
	| 'unknown'
```

### HttpCache

```ts
type HttpCache = 'hit' | 'miss' | 'bypass'
```

### HttpInspectorProps

```ts
type HttpInspectorProps = {
	requests: HttpRequestRow[];
	emptyText?: string;
}
```

### HttpMethod

```ts
type HttpMethod = string
```

### HttpRequestRow

```ts
type HttpRequestRow = {
	ts: string;
	method: HttpMethod;
	url: string;
	status: number;
	type: string;
	cache: HttpCache;
	sizeBytes: number;
	ms: number;
	initiator: string;
}
```

### IconName

```ts
type IconName = "Box" | "Activity" | "Graph" | "Terminal" | "Clock" | "Robot" | "Hand" | "Key" | "Search" | "Sun" | "Moon" | "Cmd" | "Drawer" | "Check" | "X" | "Retry" | "Warn" | "Pause" | "Play" | "Chevron" | "ChevronD" | "Plus" | "ExternalLink" | "Copy" | "Filter" | "ArrowUp" | "Telegram" | "Cron" | "Inbox" | "Zap" | "Restart" | "Eye" | "Server"
```

### IconProps

```ts
type IconProps = {
	size?: number;
	stroke?: string;
	fill?: string;
	sw?: number;
	className?: string;
	style?: React.CSSProperties;
	title?: string;
}
```

### AvatarProps

```ts
type AvatarProps = {
	initial: string;
	hue?: number;
	size?: number;
	title?: string;
}
```

### ChipProps

```ts
type ChipProps = {
	children: ReactNode;
	on?: boolean;
	onClick?: (e: MouseEvent) => void;
	onClose?: () => void;
	title?: string;
}
```

### JsonTreeProps

```ts
type JsonTreeProps = {
	value: unknown;
	indent?: number;
}
```

### JsonValue

```ts
type JsonValue = | null
	| string
	| number
	| boolean
	| JsonValue[]
	| { [key: string]: JsonValue }
```

### PipKind

```ts
type PipKind = 'ok' | 'warn' | 'err' | 'plain'
```

### PipProps

```ts
type PipProps = {
	kind?: PipKind;
	size?: number;
	color?: string;
	style?: React.CSSProperties;
}
```

### SparklineProps

Sparkline — tiny inline-SVG line chart for at-a-glance trend display.

Single responsibility: render `values` as a normalized polyline inside a
fixed-size SVG. No axes, no labels, no chart library — just a polyline
suitable for embedding in a tile, row, or status strip.

Edge cases:
  - `values.length === 0` → empty <svg/> (no polyline, no crash).
  - `values.length === 1` → single dot at midpoint (a polyline of one
    point is a no-op in SVG, so we render a <circle> instead).
  - `max === min` → all points clamped to vertical midline (avoids
    divide-by-zero in normalization; common when every value is 0).

Coordinates are rounded to 2 decimals so snapshot/string assertions are
stable.

```ts
type SparklineProps = {
	values: readonly number[];
	width?: number;
	height?: number;
	/** CSS color (or var(--…)) used for the polyline stroke. */
	color?: string;
	strokeWidth?: number;
	/** Accessible label. Renders as <title> inside the SVG. */
	'aria-label'?: string;
}
```

### SpinnerProps

```ts
type SpinnerProps = {
	size?: number;
	color?: string;
}
```

### StatusIconProps

```ts
type StatusIconProps = {
	status: StatusKind;
	size?: number;
}
```

### StatusKind

```ts
type StatusKind = string
```

### StatusPillProps

```ts
type StatusPillProps = {
	status: StatusKind;
	label?: string;
}
```

### TweakRadioOption

```ts
type TweakRadioOption = { value: string; label: string }
```

### TweakSliderProps

```ts
type TweakSliderProps = {
	label: string;
	value: number;
	min?: number;
	max?: number;
	step?: number;
	unit?: string;
	onChange: (v: number) => void;
}
```

### TweaksPanelProps

```ts
type TweaksPanelProps = {
	title?: string;
	enabled?: boolean;
	children: ReactNode;
}
```

### UseTweaksReturn

```ts
type UseTweaksReturn = UseTweaksReturn<T>
```

### UseKeySpec

```ts
type UseKeySpec = string
```

## Constants

### DEFAULT_CONSOLE_FEATURES

Sensible defaults: everything visible, all toggles on, all-expanded groups.

```ts
const DEFAULT_CONSOLE_FEATURES: ConsoleFeatures
```

### DEFAULT_TRACE_FEATURES

```ts
const DEFAULT_TRACE_FEATURES: TraceFeatures
```

### DEFAULT_INSPECTOR_FEATURES

```ts
const DEFAULT_INSPECTOR_FEATURES: ObjectInspectorFeatures
```

### Icon

```ts
const Icon: { readonly Box: (p: IconProps) => import("/home/runner/work/components/components/node_modules/.pnpm/@types+react@18.3.28/node_modules/@types/react/jsx-runtime").JSX.Element; readonly Activity: (p: IconProps) => import("/home/runner/work/components/components/node_modules/.pnpm/@types+react@18.3.28/node_modules/@types/react/jsx-runtime").JSX.Element; readonly Graph: (p: IconProps) => import("/home/runner/work/components/components/node_modules/.pnpm/@types+react@18.3.28/node_modules/@types/react/jsx-runtime").JSX.Element; readonly Terminal: (p: IconProps) => import("/home/runner/work/components/components/node_modules/.pnpm/@types+react@18.3.28/node_modules/@types/react/jsx-runtime").JSX.Element; readonly Clock: (p: IconProps) => import("/home/runner/work/components/components/node_modules/.pnpm/@types+react@18.3.28/node_modules/@types/react/jsx-runtime").JSX.Element; readonly Robot: (p: IconProps) => import("/home/runner/work/components/components/node_modules/.pnpm/@types+react@18.3.28/node_modules/@types/react/jsx-runtime").JSX.Element; readonly Hand: (p: IconProps) => import("/home/runner/work/components/components/node_modules/.pnpm/@types+react@18.3.28/node_modules/@types/react/jsx-runtime").JSX.Element; readonly Key: (p: IconProps) => import("/home/runner/work/components/components/node_modules/.pnpm/@types+react@18.3.28/node_modules/@types/react/jsx-runtime").JSX.Element; readonly Search: (p: IconProps) => import("/home/runner/work/components/components/node_modules/.pnpm/@types+react@18.3.28/node_modules/@types/react/jsx-runtime").JSX.Element; readonly Sun: (p: IconProps) => import("/home/runner/work/components/components/node_modules/.pnpm/@types+react@18.3.28/node_modules/@types/react/jsx-runtime").JSX.Element; readonly Moon: (p: IconProps) => import("/home/runner/work/components/components/node_modules/.pnpm/@types+react@18.3.28/node_modules/@types/react/jsx-runtime").JSX.Element; readonly Cmd: (p: IconProps) => import("/home/runner/work/components/components/node_modules/.pnpm/@types+react@18.3.28/node_modules/@types/react/jsx-runtime").JSX.Element; readonly Drawer: (p: IconProps) => import("/home/runner/work/components/components/node_modules/.pnpm/@types+react@18.3.28/node_modules/@types/react/jsx-runtime").JSX.Element; readonly Check: (p: IconProps) => import("/home/runner/work/components/components/node_modules/.pnpm/@types+react@18.3.28/node_modules/@types/react/jsx-runtime").JSX.Element; readonly X: (p: IconProps) => import("/home/runner/work/components/components/node_modules/.pnpm/@types+react@18.3.28/node_modules/@types/react/jsx-runtime").JSX.Element; readonly Retry: (p: IconProps) => import("/home/runner/work/components/components/node_modules/.pnpm/@types+react@18.3.28/node_modules/@types/react/jsx-runtime").JSX.Element; readonly Warn: (p: IconProps) => import("/home/runner/work/components/components/node_modules/.pnpm/@types+react@18.3.28/node_modules/@types/react/jsx-runtime").JSX.Element; readonly Pause: (p: IconProps) => import("/home/runner/work/components/components/node_modules/.pnpm/@types+react@18.3.28/node_modules/@types/react/jsx-runtime").JSX.Element; readonly Play: (p: IconProps) => import("/home/runner/work/components/components/node_modules/.pnpm/@types+react@18.3.28/node_modules/@types/react/jsx-runtime").JSX.Element; readonly Chevron: (p: IconProps) => import("/home/runner/work/components/components/node_modules/.pnpm/@types+react@18.3.28/node_modules/@types/react/jsx-runtime").JSX.Element; readonly ChevronD: (p: IconProps) => import("/home/runner/work/components/components/node_modules/.pnpm/@types+react@18.3.28/node_modules/@types/react/jsx-runtime").JSX.Element; readonly Plus: (p: IconProps) => import("/home/runner/work/components/components/node_modules/.pnpm/@types+react@18.3.28/node_modules/@types/react/jsx-runtime").JSX.Element; readonly ExternalLink: (p: IconProps) => import("/home/runner/work/components/components/node_modules/.pnpm/@types+react@18.3.28/node_modules/@types/react/jsx-runtime").JSX.Element; readonly Copy: (p: IconProps) => import("/home/runner/work/components/components/node_modules/.pnpm/@types+react@18.3.28/node_modules/@types/react/jsx-runtime").JSX.Element; readonly Filter: (p: IconProps) => import("/home/runner/work/components/components/node_modules/.pnpm/@types+react@18.3.28/node_modules/@types/react/jsx-runtime").JSX.Element; readonly ArrowUp: (p: IconProps) => import("/home/runner/work/components/components/node_modules/.pnpm/@types+react@18.3.28/node_modules/@types/react/jsx-runtime").JSX.Element; readonly Telegram: (p: IconProps) => import("/home/runner/work/components/components/node_modules/.pnpm/@types+react@18.3.28/node_modules/@types/react/jsx-runtime").JSX.Element; readonly Cron: (p: IconProps) => import("/home/runner/work/components/components/node_modules/.pnpm/@types+react@18.3.28/node_modules/@types/react/jsx-runtime").JSX.Element; readonly Inbox: (p: IconProps) => import("/home/runner/work/components/components/node_modules/.pnpm/@types+react@18.3.28/node_modules/@types/react/jsx-runtime").JSX.Element; readonly Zap: (p: IconProps) => import("/home/runner/work/components/components/node_modules/.pnpm/@types+react@18.3.28/node_modules/@types/react/jsx-runtime").JSX.Element; readonly Restart: (p: IconProps) => import("/home/runner/work/components/components/node_modules/.pnpm/@types+react@18.3.28/node_modules/@types/react/jsx-runtime").JSX.Element; readonly Eye: (p: IconProps) => import("/home/runner/work/components/components/node_modules/.pnpm/@types+react@18.3.28/node_modules/@types/react/jsx-runtime").JSX.Element; readonly Server: (p: IconProps) => import("/home/runner/work/components/components/node_modules/.pnpm/@types+react@18.3.28/node_modules/@types/react/jsx-runtime").JSX.Element; }
```
