Implement toggle and dropdown components to docs crash course.

Added toggle, and dropdown with themes and event handling.
Fixed the order of components having menu.luau last.
This commit is contained in:
sindri 2026-03-03 12:41:01 +01:00 committed by GitHub
parent 610cf92d39
commit 09a98ab343
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -33,6 +33,143 @@ end
return Button
```
```luau [toggle.luau]
local toggle = vide.toggle
local source = vide.source
local enabled = source(true)
return function()
return toggle {
label = "Music",
description = "Enable background music",
value = enabled, -- Source<boolean>
onChanged = function(v)
print("Music:", v)
end,
-- optional theme (omit if you want defaults / neutral)
theme = {
onColor = Color3.fromRGB(80, 140, 255),
offColor = Color3.fromRGB(18, 20, 26),
knobColor = Color3.fromRGB(245, 247, 252),
strokeColor = Color3.fromRGB(255, 255, 255),
strokeTransparency = 0.88,
labelColor = Color3.fromRGB(245, 247, 252),
subLabelColor = Color3.fromRGB(190, 196, 210),
cornerRadius = 999,
},
}
end
```
```luau [dropdown.luau]
local dropdown = vide.dropdown
local source = vide.source
local selected = source("All")
local isOpen = source(false)
local options = {
"All",
"Public",
"Private",
"Friends",
"Full",
"Empty",
"Region: EU",
"Region: NA",
}
return function()
return dropdown {
size = UDim2.fromOffset(260, 44),
-- state
value = selected, -- Source<string>
open = isOpen, -- Source<boolean>
-- options
options = options,
placeholder = "Select…",
closeOnSelect = true,
-- scrolling
maxVisible = 4,
rowHeight = 36,
gap = 8,
scrollBarThickness = 6,
-- layering (recommended if you have other UI nearby)
baseZIndex = 200,
onChanged = function(v)
print("Selected:", v)
end,
-- optional theme
theme = {
boxBg = Color3.fromRGB(18, 20, 26),
boxBgTransparency = 0,
boxStroke = Color3.fromRGB(255, 255, 255),
boxStrokeTransparency = 0.88,
listBg = Color3.fromRGB(12, 13, 16),
listBgTransparency = 0,
listStroke = Color3.fromRGB(255, 255, 255),
listStrokeTransparency = 0.88,
textColor = Color3.fromRGB(245, 247, 252),
itemBg = Color3.fromRGB(18, 20, 26),
itemBgTransparency = 0,
cornerRadius = 12,
itemCornerRadius = 10,
},
}
end
```
```luau [slider.luau]
local source = vide.source
export type SliderTheme = {
trackColor: Color3?,
trackTransparency: number?,
fillColor: Color3?,
fillTransparency: number?,
knobColor: Color3?,
knobTransparency: number?,
strokeColor: Color3?,
strokeTransparency: number?,
cornerRadius: number?,
knobRadius: number?,
}
export type SliderProps = {
value: source.source<number>,
min: number?,
max: number?,
step: number?,
label: string?,
format: ((number) -> string)?,
onChanged: ((number) -> ())?,
size: UDim2?,
position: UDim2?,
anchorPoint: Vector2?,
layoutOrder: number?,
theme: SliderTheme?,
}
local function Slider(props: SliderProps)
return vide.slider(props)
end
return Slider
```
```luau [menu.luau]
local create = vide.create
@ -116,46 +253,4 @@ end
return Menu
```
```luau [slider.luau]
local source = vide.source
export type SliderTheme = {
trackColor: Color3?,
trackTransparency: number?,
fillColor: Color3?,
fillTransparency: number?,
knobColor: Color3?,
knobTransparency: number?,
strokeColor: Color3?,
strokeTransparency: number?,
cornerRadius: number?,
knobRadius: number?,
}
export type SliderProps = {
value: source.source<number>,
min: number?,
max: number?,
step: number?,
label: string?,
format: ((number) -> string)?,
onChanged: ((number) -> ())?,
size: UDim2?,
position: UDim2?,
anchorPoint: Vector2?,
layoutOrder: number?,
theme: SliderTheme?,
}
local function Slider(props: SliderProps)
return vide.slider(props)
end
return Slider
```
:::