trace
{#if trace.length === 0}
press Enter or clear the field to see events
{:else}
{#each trace.slice(0, 3) as entry}
{entry.event}
· {entry.family}{entry.intent ? ' · ' + entry.intent : ''}
{fmtTime(entry.at)}
{/each}
{/if}
value{isEmpty ? 'empty' : value}·onChange{lastValueChange}
{#if lastValueChangeAt !== null}
{fmtTime(lastValueChangeAt)}
{/if}
·last
{lastSubmit}
{#if tab === 'live'}
Controls
soma owns value, clear and submit.
eidos owns visual treatment.
soma props · search behavior
{#each ['clearOnEscape', 'disabled', 'readonly', 'required', 'invalid', 'loading'] as flag}
{/each}
eidos props · visual treatment
somaheadless · search behaviorsvelte
{somaSnippet}
eidosvisual · size, variant and intent colorsvelte
{eidosSnippet}
{/if}
{#if tab === 'api'}
API + reference comparison
Feature
Air
Radix
Bits
Ark
React Aria
UIX
Decision
Native search input
❌
❌
❌
⚠️
✅
✅
Soma owns `type="search"` and `role="searchbox"`.
Clear trigger
❌
❌
❌
⚠️
✅
✅
Covered with translated label and disabled state.
Escape clears
❌
❌
❌
⚠️
✅
✅
Covered via `clearOnEscape`.
Submit on Enter
❌
❌
❌
⚠️
✅
✅
Covered with `commit-submit` event.
Field state integration
⚠️
✅
⚠️
✅
✅
✅
UIX delegates label/error/description to Field.
Prop
Owner
Default
Notes
value
soma
''
Bindable search text
onValueChange
soma
noop
Live filtering path
onSubmit
soma
noop
Enter key path
onClear
soma
noop
Clear trigger / Escape path
clearOnEscape
soma
true
Escape clears the input
disabled / readonly / invalid
soma
false
Field integration flags
size
eidos
md
sm | md | lg
variant
eidos
surface
surface | outline | ghost.
color
eidos
primary
Intent palette for focus and clear trigger hover.
{/if}
{#if tab === 'morfo'}
Morfo contract
Part
Marker
Element
Role
Optional
{#each partsList as part}
{part.kebab}
[{part.marker}]
<{part.defaultElement}>
{part.role ?? '—'}
{part.optional ? 'yes' : 'no'}
{/each}
Keyboard
Key
Action
{#each (searchFieldMorfo.parts.find((p) => p.kebab === 'input')?.keyboard) ?? [] as key}
{key.key}
{key.action}
{/each}
{/if}
{#if tab === 'sema'}
sema · events + perceptual signature
SearchField splits submit and reset so Enter and Clear/Escape can carry different perceptual
hooks while the value mutation remains owned by Soma.
Name
Family
Verb
Sequence
Target
Play
{#each events as action}
{action.name}
{action.semantic.family}
{action.semantic.verb ?? '—'}
{action.semantic.sequence ?? 'pre'}
{action.target}
{/each}
{/if}
{#if tab === 'recipe'}
Eidos recipe
Selectors live in src/uix/eidos/components/search-field/search-field.css
and consume Soma empty/focus state plus Eidos data-size,
data-variant and data-color.