mirror of
https://github.com/onsonr/sonr.git
synced 2025-03-11 13:29:12 +00:00
* refactor: move database, navigator scripts to state package * feat: add Schema config for dwn * test: add unit tests for InitializeDatabase * feat: use templated index.html for the DWN frontend * feat: introduce templ generation for templ * chore(deps): update devbox.json to use latest packages * chore: update devbox to use bun * feat: introduce dwn config generation * feat: add motr.mjs for vault management * refactor: move front end from to (alert) * feat: implement devbox integration and devbox-based process management * feat: embed motr.mjs script for offline demo * refactor: embed motr.mjs data in embed.go * chore: update workflows to use actions/checkout@v4 * refactor: move process-compose.yaml to deploy directory * refactor: remove unnecessary JSON conversion
48 lines
896 B
Go
48 lines
896 B
Go
package blocks
|
|
|
|
import (
|
|
"strings"
|
|
|
|
"github.com/a-h/templ"
|
|
)
|
|
|
|
type Icon interface {
|
|
Render() templ.Component
|
|
}
|
|
|
|
type Variant interface {
|
|
Attributes() templ.Attributes
|
|
}
|
|
|
|
func clsxMerge(variants ...Variant) templ.Attributes {
|
|
combinedAttrs := templ.Attributes{}
|
|
var classElements []string
|
|
|
|
for _, variant := range variants {
|
|
attrs := variant.Attributes()
|
|
if class, ok := attrs["class"].(string); ok {
|
|
classElements = append(classElements, strings.Fields(class)...)
|
|
}
|
|
for key, value := range attrs {
|
|
if key != "class" {
|
|
combinedAttrs[key] = value
|
|
}
|
|
}
|
|
}
|
|
|
|
if len(classElements) > 0 {
|
|
combinedAttrs["class"] = strings.Join(classElements, " ")
|
|
}
|
|
return combinedAttrs
|
|
}
|
|
|
|
func clsxBuilder(classes ...string) templ.Attributes {
|
|
if len(classes) == 0 {
|
|
return templ.Attributes{}
|
|
}
|
|
class := strings.Join(classes, " ")
|
|
return templ.Attributes{
|
|
"class": class,
|
|
}
|
|
}
|