cLib.DSearchBar
Search input with icon, debounce, and clear button.
Basic Usage
local search = vgui.Create("cLib.DSearchBar", parent)
search:SetSize(cLib.Scale(250), cLib.Scale(36))
search:Dock(TOP)
search.OnSearch = function(self, text)
FilterResults(text)
end
Methods
| Method | Description |
|---|
SetPlaceholder(string) | Placeholder text |
SetValue(string) | Set search text |
GetValue() | Get search text |
Clear() | Clear search |
Focus() | Focus input |
SetSearchDelay(number) | Debounce delay (seconds) |
Callbacks
| Callback | Description |
|---|
OnSearch(text) | Called after debounce |
OnValueChanged(text) | Called immediately |
OnEnter(text) | Called on Enter key |
OnClear() | Called when cleared |
With Debounce
local search = vgui.Create("cLib.DSearchBar", parent)
search:SetPlaceholder("Search items...")
search:SetSearchDelay(0.3) -- Wait 300ms after typing stops
search.OnSearch = function(self, text)
-- Called 300ms after user stops typing
-- Prevents excessive API calls/filtering
FilterItemList(text)
end
Live Search Example
local items = GetAllItems()
local filteredItems = items
local search = vgui.Create("cLib.DSearchBar", parent)
search:SetPlaceholder("Search...")
search:Dock(TOP)
search:DockMargin(0, 0, 0, cLib.Scale(10))
local itemList = vgui.Create("cLib.DListView", parent)
itemList:Dock(FILL)
itemList:AddColumn("Name")
itemList:AddColumn("Price")
local function RefreshList()
itemList:Clear()
for _, item in ipairs(filteredItems) do
itemList:AddLine(item.name, "$" .. item.price)
end
end
search.OnSearch = function(self, query)
query = query:lower()
if query == "" then
filteredItems = items
else
filteredItems = {}
for _, item in ipairs(items) do
if item.name:lower():find(query, 1, true) then
table.insert(filteredItems, item)
end
end
end
RefreshList()
end
search.OnClear = function(self)
filteredItems = items
RefreshList()
end
RefreshList()
Styling
local search = vgui.Create("cLib.DSearchBar", parent)
search:SetBackgroundColor(Color(50, 50, 55))
search:SetFocusColor(cLib.GetColor("cLib.accent"))
search:SetIconColor(Color(150, 150, 150))
search:SetPlaceholderColor(Color(100, 100, 100))