Search bar audit

AID-696 — what hosts the search field on each screen, and what each one overrides.

TL;DR

The primitives

InputField sizes

packages/ui/src/components/Input/Field/styles.ts:6

sizeheightpaddingicon
small32 px1014 px
base40 px1420 px
large48 px1422 px
xlarge56 px1622 px

Strata PNB searchSlot

apps/mobile/src/features/persistent-nav-bar/slots/Search.tsx:30

<InputField
  size="base"           // 40 px
  showLabel={false}
  autoCapitalize="none"
  autoCorrect={false}
  label={placeholder ?? t("commandSearch")}
  placeholder={placeholder ?? t("commandSearch")}
  value={value}
  setValue={setValue}
/>

Consumers can only override value, setValue, placeholder, autoFocus, testID. No way to add an icon, clear button, or cancel button from the call site.

Per-screen overrides

Screen Host Underlying Height Icon Clear Cancel
Swap asset select Strata useNavBar({ search }) InputField 40 — — —
Validator list Strata useNavBar({ search }) InputField 40 — — —
Trending Perps ExploreSearchInput wrapper InputField 40 mag 20 — —
Collectibles list ExploreSearchInput wrapper InputField 40 mag 20 — —
Search tab bespoke SearchScreenHeader InputField 32 mag 20 / arrow 24 while-editing always
Manage Tokens bespoke SearchField InputField 32 mag 16 onClear —
Fiat onramp token select SelectTokenSheet raw TextInput 36 40 px header btn — —
Send token select SelectTokenSheet raw TextInput 36 40 px header btn — —

The offenders, with JSX

Money-Mover token sheets (fiat onramp + send)

packages/money-mover-ui/src/sheets/SelectTokenSheet.native.tsx:264

<TextInput
  value={query ?? ""}
  onChangeText={onQueryChange}
  placeholder={t("commandSearch")}
  placeholderTextColor={colors.textIncidental}
  returnKeyType="search"
  autoCorrect={false}
  autoCapitalize="none"
  style={{
    color: colors.textBase,
    backgroundColor: colors.areaAccent,
    borderRadius: 12,
    paddingHorizontal: 12,
    height: 36,             // hard-coded, not in InputField DIMS
  }}
/>

Search tab

apps/mobile/src/features/search/components/SearchScreenHeader.tsx:77

<InputField
  size="small"              // 32 px
  clearButton="while-editing"
  cancelButton="always"
  onCancel={goBack}
  autoFocus={true}
  ...
>
  {searchIcon /* mag 20 px on iOS, arrow 24 px on Android */}
</InputField>

Manage Tokens

apps/mobile/src/app/(fungible)/fungible/FungiblesVisibility.tsx:63

<SearchField
  size="small"              // 32 px
  showLabel={false}
  onChangeText={handleSearch}
  onClear={onClearSearch}
>
  <IconMagnifyingGlass size={16} />   {/* 16, not 20 */}
</SearchField>

Trending Perps / Collectibles (the consistent ones)

apps/mobile/src/pages/explore/ExplorePerpsTrendingPage.tsx:36
apps/mobile/src/features/collectibles/components/CollectionsList/index.tsx

<ExploreSearchInput
  id={SEARCH_INPUT_ID}
  value={searchText}
  onChangeText={onChangeSearchText}
/>
// → InputField with default size="base" (40 px) + mag 20 px icon

Swap / Validator (the slim-looking ones)

apps/mobile/src/pages/swapper/SwapAssetSelectPage.tsx:268
apps/mobile/src/pages/staking/native/ValidatorListPage.tsx:23

useNavBar({
  search: { value, setValue, placeholder, autoFocus, testID },
});
// → Strata searchSlot → InputField size="base" (40 px), NO icon

What to fix