refactor: ui lib (#1642)
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
local Config = require("avante.config")
|
local Config = require("avante.config")
|
||||||
local Utils = require("avante.utils")
|
local Utils = require("avante.utils")
|
||||||
local PromptInput = require("avante.prompt_input")
|
local PromptInput = require("avante.ui.prompt_input")
|
||||||
|
|
||||||
---@class avante.ApiToggle
|
---@class avante.ApiToggle
|
||||||
---@operator call(): boolean
|
---@operator call(): boolean
|
||||||
|
|||||||
@@ -21,16 +21,18 @@ end
|
|||||||
|
|
||||||
---@param message string
|
---@param message string
|
||||||
---@param callback fun(yes: boolean)
|
---@param callback fun(yes: boolean)
|
||||||
---@return NuiPopup | nil
|
---@return avante.ui.Confirm | nil
|
||||||
function M.confirm(message, callback)
|
function M.confirm(message, callback)
|
||||||
local UI = require("avante.ui")
|
local Confirm = require("avante.ui.confirm")
|
||||||
local sidebar = require("avante").get()
|
local sidebar = require("avante").get()
|
||||||
if not sidebar or not sidebar.input_container or not sidebar.input_container.winid then
|
if not sidebar or not sidebar.input_container or not sidebar.input_container.winid then
|
||||||
Utils.error("Avante sidebar not found", { title = "Avante" })
|
Utils.error("Avante sidebar not found", { title = "Avante" })
|
||||||
callback(false)
|
callback(false)
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
return UI.confirm(message, callback, { container_winid = sidebar.input_container.winid })
|
local confirm = Confirm:new(message, callback, { container_winid = sidebar.input_container.winid })
|
||||||
|
confirm:open()
|
||||||
|
return confirm
|
||||||
end
|
end
|
||||||
|
|
||||||
---@param abs_path string
|
---@param abs_path string
|
||||||
@@ -277,7 +279,7 @@ function M.str_replace_editor(opts, on_log, on_complete)
|
|||||||
vim.cmd("normal! zz")
|
vim.cmd("normal! zz")
|
||||||
vim.api.nvim_set_current_win(current_winid)
|
vim.api.nvim_set_current_win(current_winid)
|
||||||
local augroup = vim.api.nvim_create_augroup("avante_str_replace_editor", { clear = true })
|
local augroup = vim.api.nvim_create_augroup("avante_str_replace_editor", { clear = true })
|
||||||
local popup = M.confirm("Are you sure you want to apply this modification?", function(ok)
|
local confirm = M.confirm("Are you sure you want to apply this modification?", function(ok)
|
||||||
vim.api.nvim_del_augroup_by_id(augroup)
|
vim.api.nvim_del_augroup_by_id(augroup)
|
||||||
vim.api.nvim_set_current_win(sidebar.code.winid)
|
vim.api.nvim_set_current_win(sidebar.code.winid)
|
||||||
vim.api.nvim_feedkeys(vim.api.nvim_replace_termcodes("<Esc>", true, false, true), "n", true)
|
vim.api.nvim_feedkeys(vim.api.nvim_replace_termcodes("<Esc>", true, false, true), "n", true)
|
||||||
@@ -299,7 +301,7 @@ function M.str_replace_editor(opts, on_log, on_complete)
|
|||||||
local current_lines_content = table.concat(current_lines, "\n")
|
local current_lines_content = table.concat(current_lines, "\n")
|
||||||
if current_lines_content:find(patch_end_line_content) then return end
|
if current_lines_content:find(patch_end_line_content) then return end
|
||||||
vim.api.nvim_del_augroup_by_id(augroup)
|
vim.api.nvim_del_augroup_by_id(augroup)
|
||||||
if popup then popup:unmount() end
|
if confirm then confirm:close() end
|
||||||
if lines_content == current_lines_content then
|
if lines_content == current_lines_content then
|
||||||
on_complete(false, "User canceled")
|
on_complete(false, "User canceled")
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ local Config = require("avante.config")
|
|||||||
local Llm = require("avante.llm")
|
local Llm = require("avante.llm")
|
||||||
local Provider = require("avante.providers")
|
local Provider = require("avante.providers")
|
||||||
local RepoMap = require("avante.repo_map")
|
local RepoMap = require("avante.repo_map")
|
||||||
local PromptInput = require("avante.prompt_input")
|
local PromptInput = require("avante.ui.prompt_input")
|
||||||
|
|
||||||
local api = vim.api
|
local api = vim.api
|
||||||
local fn = vim.fn
|
local fn = vim.fn
|
||||||
@@ -19,7 +19,7 @@ local PRIORITY = vim.highlight.priorities.user
|
|||||||
---@field selected_code_extmark_id integer | nil
|
---@field selected_code_extmark_id integer | nil
|
||||||
---@field augroup integer | nil
|
---@field augroup integer | nil
|
||||||
---@field code_winid integer | nil
|
---@field code_winid integer | nil
|
||||||
---@field prompt_input PromptInput | nil
|
---@field prompt_input avante.ui.PromptInput | nil
|
||||||
local Selection = {}
|
local Selection = {}
|
||||||
Selection.__index = Selection
|
Selection.__index = Selection
|
||||||
|
|
||||||
|
|||||||
@@ -3,13 +3,31 @@ local NuiText = require("nui.text")
|
|||||||
local Highlights = require("avante.highlights")
|
local Highlights = require("avante.highlights")
|
||||||
local Utils = require("avante.utils")
|
local Utils = require("avante.utils")
|
||||||
|
|
||||||
|
---@class avante.ui.Confirm
|
||||||
|
---@field message string
|
||||||
|
---@field callback fun(yes: boolean)
|
||||||
|
---@field opts { container_winid: number }
|
||||||
|
---@field _popup NuiPopup | nil
|
||||||
local M = {}
|
local M = {}
|
||||||
|
M.__index = M
|
||||||
|
|
||||||
---@param message string
|
---@param message string
|
||||||
---@param callback fun(yes: boolean)
|
---@param callback fun(yes: boolean)
|
||||||
---@param opts { container_winid: number }
|
---@param opts { container_winid: number }
|
||||||
---@return NuiPopup
|
---@return avante.ui.Confirm
|
||||||
function M.confirm(message, callback, opts)
|
function M:new(message, callback, opts)
|
||||||
|
local this = setmetatable({}, M)
|
||||||
|
this.message = message
|
||||||
|
this.callback = callback
|
||||||
|
this.opts = opts
|
||||||
|
return this
|
||||||
|
end
|
||||||
|
|
||||||
|
function M:open()
|
||||||
|
local message = self.message
|
||||||
|
local callback = self.callback
|
||||||
|
local opts = self.opts
|
||||||
|
|
||||||
local focus_index = 2 -- 1 = Yes, 2 = No
|
local focus_index = 2 -- 1 = Yes, 2 = No
|
||||||
local yes_button_pos = { 23, 28 }
|
local yes_button_pos = { 23, 28 }
|
||||||
local no_button_pos = { 33, 37 }
|
local no_button_pos = { 33, 37 }
|
||||||
@@ -161,7 +179,16 @@ function M.confirm(message, callback, opts)
|
|||||||
|
|
||||||
popup:mount()
|
popup:mount()
|
||||||
render_buttons()
|
render_buttons()
|
||||||
return popup
|
self._popup = popup
|
||||||
|
end
|
||||||
|
|
||||||
|
function M:close()
|
||||||
|
if self._popup then
|
||||||
|
self._popup:unmount()
|
||||||
|
self._popup = nil
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
return false
|
||||||
end
|
end
|
||||||
|
|
||||||
return M
|
return M
|
||||||
@@ -3,7 +3,7 @@ local fn = vim.fn
|
|||||||
local Config = require("avante.config")
|
local Config = require("avante.config")
|
||||||
local Utils = require("avante.utils")
|
local Utils = require("avante.utils")
|
||||||
|
|
||||||
---@class PromptInput
|
---@class avante.ui.PromptInput
|
||||||
---@field bufnr integer | nil
|
---@field bufnr integer | nil
|
||||||
---@field winid integer | nil
|
---@field winid integer | nil
|
||||||
---@field win_opts table
|
---@field win_opts table
|
||||||
@@ -21,7 +21,7 @@ local Utils = require("avante.utils")
|
|||||||
local PromptInput = {}
|
local PromptInput = {}
|
||||||
PromptInput.__index = PromptInput
|
PromptInput.__index = PromptInput
|
||||||
|
|
||||||
---@class PromptInputOptions
|
---@class avante.ui.PromptInputOptions
|
||||||
---@field start_insert? boolean
|
---@field start_insert? boolean
|
||||||
---@field submit_callback? fun(input: string):nil
|
---@field submit_callback? fun(input: string):nil
|
||||||
---@field cancel_callback? fun():nil
|
---@field cancel_callback? fun():nil
|
||||||
@@ -29,7 +29,7 @@ PromptInput.__index = PromptInput
|
|||||||
---@field win_opts? table
|
---@field win_opts? table
|
||||||
---@field default_value? string
|
---@field default_value? string
|
||||||
|
|
||||||
---@param opts? PromptInputOptions
|
---@param opts? avante.ui.PromptInputOptions
|
||||||
function PromptInput:new(opts)
|
function PromptInput:new(opts)
|
||||||
opts = opts or {}
|
opts = opts or {}
|
||||||
local obj = setmetatable({}, PromptInput)
|
local obj = setmetatable({}, PromptInput)
|
||||||
Reference in New Issue
Block a user