Dynamic Values is a way to position or size your object based on the position/size of other objects. This makes it pretty easy to create programs where the terminal size
doesn't matter.
A dynamic value is always a string, and you can add anything you want in there. Here are some examples:
"5 + 2"
"(5 + 2) * 3"
"math.floor(5+2.2)"
"objectid.x + objectid.y + objectid.w + objectid+h"
"parent.w"
"self.w"
Parent always refers to it's parent object, self always refers to itself.
## Positioning
Here i will show you a example on how to position a button next to another button, doesn't matter which size it has.
```lua
local basalt = require("basalt")
local main = basalt.createFrame()
local button = main:addButton("firstBtn")
:setBackground(colors.black)
:setForeground(colors.lightGray)
:setPosition(2, 2)
local button2 = main:addButton()
:setBackground(colors.black)
:setForeground(colors.lightGray)
:setPosition("firstBtn.w + firstBtn.x + 2", "firstBtn.y")
basalt.autoUpdate()
```
Now, you can move the first button and the second button would also move. Doesn't matter how.
## Sizing
This is a example on how you can create buttons where the size is always based on it's parent frame
```lua
local basalt = require("basalt")
local main = basalt.createFrame()
local button = main:addButton("firstBtn")
:setBackground(colors.black)
:setForeground(colors.lightGray)
:setPosition(2, 2)
:setSize("parent.w - 2", 3)
local button2 = main:addButton()
:setBackground(colors.black)
:setForeground(colors.lightGray)
:setPosition(2, "firstBtn.y + firstBtn.h + 1")
:setSize("parent.w - 2", 3)
basalt.autoUpdate()
```