58 lines
1.0 KiB
Go
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
|
|
}
|