package main import ( "embed" "io/fs" "net/http" "git.dev.alexdunmow.com/block/core/plugin" ) //go:embed assets/* var assetsFS embed.FS //go:embed schemas/* var schemasFS embed.FS //go:embed presets.json var presetsData []byte //go:embed fonts.json var fontsData []byte //go:embed plugin.mod var pluginModBytes []byte // Assets returns the embedded assets filesystem. func Assets() fs.FS { sub, _ := fs.Sub(assetsFS, "assets") return sub } // Schemas returns the embedded schemas filesystem. func Schemas() fs.FS { sub, _ := fs.Sub(schemasFS, "schemas") return sub } // AssetsHandler returns an http.Handler that serves the embedded assets. func AssetsHandler() http.Handler { return http.FileServer(http.FS(Assets())) } // ThemePresets returns the embedded theme presets JSON. func ThemePresets() []byte { return presetsData } // BundledFonts returns the embedded fonts manifest JSON. // Coffee ships fonts.json = [] per FONTS.md wave-1 policy; recommended fonts // (Fraunces, Inter, JetBrains Mono) are documented in RECOMMENDED_FONTS.md. func BundledFonts() []byte { return fontsData } // ThemeCSSManifest returns the additional CSS that Tailwind should include // when this theme is active (paper texture, torn-edge mask, kraft-tag button, // drop-cap, font-family variable fallbacks). func ThemeCSSManifest() *plugin.CSSManifest { css, err := assetsFS.ReadFile("assets/style.css") if err != nil { return &plugin.CSSManifest{} } return &plugin.CSSManifest{ InputCSSAppend: string(css), } }