themes-kindergarten/numbers_counter.go
Alex Dunmow ffe46a146c initial: theme plugin kindergarten
Bootstrapped during the 2026-06-06 BlockNinja consolidation. Was previously
an unversioned directory inside ~/src/blockninja-themes/kindergarten.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-06 14:11:35 +08:00

48 lines
1.1 KiB
Go

package main
import (
"bytes"
"context"
"git.dev.alexdunmow.com/block/core/blocks"
)
// NumbersCounterBlockMeta defines metadata for the numbers counter block.
var NumbersCounterBlockMeta = blocks.BlockMeta{
Key: "numbers_counter",
Title: "Numbers Counter",
Description: "Big circular numeral badges for stats (e.g. '12 teachers').",
Category: blocks.CategoryContent,
Source: "kindergarten",
}
// NumberItem is a single numeral + label pair.
type NumberItem struct {
Number int
Label string
}
// NumbersData is the renderer input.
type NumbersData struct {
Items []NumberItem
}
// NumbersCounterBlock renders the round numeral grid.
// Content shape: {items:[{number,label}]}.
func NumbersCounterBlock(ctx context.Context, content map[string]any) string {
raw := getSlice(content, "items")
items := make([]NumberItem, 0, len(raw))
for _, m := range raw {
items = append(items, NumberItem{
Number: getInt(m, "number", 0),
Label: getString(m, "label"),
})
}
data := NumbersData{Items: items}
var buf bytes.Buffer
_ = numbersCounterComponent(data).Render(ctx, &buf)
return buf.String()
}