---@class Sandr.Input
---@field value? string
---@field mounted boolean
---@field nui_input? NuiInput
---@field source_win_id? number
---@field prompt string
---@field focused boolean

---@class Sandr.Keymap
---@field lhs string
---@field rhs function
---@field modes? string[]|string
---@field opts? any
---
---@class Sandr.Args
---@field visual boolean

---@class Sandr.ConfigKeymaps
---@field toggle string
---@field toggle_ignore_case string
---@field toggle_preserve_case string
---@field toggle_regex string
---@field jump string
---@field next_match string
---@field prev_match string
---
---@class Sandr.Config
---@field keymaps Sandr.ConfigKeymaps
---@field ignore_case boolean
---@field regex boolean
---@field replacement_preview boolean
---@field preserve_case boolean

---@class Sandr.ConfigUpdate
---@field keymaps? Sandr.ConfigKeymaps
---@field ignore_case? boolean
---@field regex? boolean
---@field replacement_preview? boolean
---@field preserve_case? boolean

--- @class Sandr.State
--- @field last_search_term string
--- @field last_search_terms string[]
--- @field search_term_completion_index number
--- @field last_replace_term string
--- @field last_replace_terms string[]
--- @field replace_term_completion_index number
--- @field config? Sandr.Config
--- @field matches? Sandr.Range[]
--- @field current_match? Sandr.Range
---
---@class Sandr.Position
---@field row number
---@field col number

---@class Sandr.Range
---@field start Sandr.Position
---@field finish Sandr.Position
