Files
MujicaUI/icons/icons.go
T

58 lines
1.0 KiB
Go

// Package icons embeds the Lucide icons MujicaUI draws.
package icons
import (
"embed"
"path"
"slices"
"strings"
"github.com/egoist/mygo/ui"
)
//go:embed svg/*.svg
var files embed.FS
var set = load()
func load() map[string]*ui.SVG {
entries, err := files.ReadDir("svg")
if err != nil {
panic(err)
}
m := make(map[string]*ui.SVG, len(entries))
for _, e := range entries {
data, err := files.ReadFile(path.Join("svg", e.Name()))
if err != nil {
panic(err)
}
m[strings.TrimSuffix(e.Name(), ".svg")] = ui.MustParseSVG(data)
}
return m
}
// Get returns the icon named name.
func Get(name string) (*ui.SVG, bool) {
s, ok := set[name]
return s, ok
}
// Must returns the icon named name and panics when it is missing.
func Must(name string) *ui.SVG {
s, ok := set[name]
if !ok {
panic("icons: no icon " + name)
}
return s
}
// Names lists every icon name in order.
func Names() []string {
names := make([]string, 0, len(set))
for n := range set {
names = append(names, n)
}
slices.Sort(names)
return names
}