charm
                                
                                 charm copied to clipboard
                                
                                    charm copied to clipboard
                            
                            
                            
                        Immediate mode layout library for LÖVE.
For now, Charm is deprecated. While I like the idea of an immediate-mode UI builder, I've never been satisfied with the result. Future UI exploration will likely focus on retained mode UI, and it will be with a separate library in a separate repo.
Charm
Charm is a library for LÖVE that makes it easier to arrange and draw graphics, such as shapes, images, and text. It's great for managing complex layouts with specific alignment and grouping needs.
Example

function love.draw()
	layout
		:new 'transform'
			:beginChildren()
				:new('rectangle', 0, 0, 300, 250)
					:beginChildren()
						:new('paragraph', font, text, 280, 'left', 10, 10 - textScrollY)
							:color(0, 0, 0)
						textHeight = layout:get('@current', 'height')
					layout:endChildren()
					:fillColor(.8, .8, .8)
					:clip()
			:endChildren()
			:left(100):top(100)
			:scale(animationProgress)
			:angle((1 + animationProgress) * math.pi)
		:draw()
end
This is a snippet from the dialog demo.
Installation
To use Charm, place charm.lua in your project, and then require it in each file where you need to use it:
local charm = require 'charm' -- if your charm.lua is in the root directory
local charm = require 'path.to.charm' -- if it's in subfolders
Demos
To see a demo, run love on the charm folder with the name of a demo as an argument:
love . dialog
love . menu
Documentation
Tutorial | API Reference
Contributing
Charm is in very early development. Feel free to ask questions, point out bugs, and even make some pull requests! If you use this library in a game, let me know how it goes.