Documentation
¶
Overview ¶
Package style is the stylesheet engine for visual components.
It is excluded from WebAssembly by `//go:build !wasm` so it can never reach the client binary.
Index ¶
- type Aspect
- type ColumnWidth
- type Elevation
- type IconSize
- type Motion
- type Option
- func Animate(m Motion) Option
- func As(s Surface) Option
- func Backdrop(s Scope) Option
- func Center(max ...Size) Option
- func Cover() Option
- func Drawer(side Side, size Size) Option
- func EdgeToEdge() Option
- func Fill() Option
- func FillCentered() Option
- func FontSize(ts TextSize) Option
- func FontWeight(w Weight) Option
- func Grid(min ColumnWidth, gap Space) Option
- func HideOverflow() Option
- func IconBox(s IconSize) Option
- func Interactive(s Surface) Option
- func KeepSize() Option
- func MediaBox(a Aspect) Option
- func Pad(s Space) Option
- func Raise(e Elevation) Option
- func RevealedBy(st widget.State) Option
- func Round(rad Radius) Option
- func Row(gap Space) Option
- func Scroll() Option
- func ScrollRow(gap Space) Option
- func Sidebar(side Side, width RailWidth, gap Space) Option
- func Split(ratio SplitRatio, gap Space) Option
- func Stack(gap Space) Option
- func Veil() Option
- func Width(s Size) Option
- type Radius
- type RailWidth
- type Scope
- type Sheet
- func (s *Sheet) Cue(c widget.Cue, p widget.Part, opts ...Option) *Sheet
- func (s *Sheet) On(d css.Device, p widget.Part, opts ...Option) *Sheet
- func (s *Sheet) OnlyOn(d css.Device, p widget.Part, opts ...Option) *Sheet
- func (s *Sheet) Part(p widget.Part, opts ...Option) *Sheet
- func (s *Sheet) Parts() []widget.Part
- func (s *Sheet) Root(opts ...Option) *Sheet
- func (s *Sheet) StateAttrs() []fmt.KeyValue
- func (s *Sheet) Stylesheet() *css.Stylesheet
- func (s *Sheet) Validate() []error
- func (s *Sheet) When(st widget.State, p widget.Part, opts ...Option) *Sheet
- type Side
- type Size
- type Space
- type SplitRatio
- type Surface
- type TextSize
- type Weight
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type ColumnWidth ¶ added in v0.4.0
type ColumnWidth uint8
ColumnWidth represents minimum column width for grids.
const ( ColumnNarrow ColumnWidth = iota ColumnMedium ColumnWide )
type IconSize ¶ added in v0.4.4
type IconSize uint8
IconSize is the square size scale for icon-sized parts. The steps are relative to the inherited font size, so an icon tracks the text it sits with.
type Motion ¶ added in v0.3.1
type Motion uint8
Motion is the transition scale. Duration is owned by CSS; here we only select the level.
type Option ¶ added in v0.4.0
type Option func(*rule)
Option is a visual option that configures a rule.
func As ¶ added in v0.4.0
As sets the surface decision (background, text, border, and radius default).
func Backdrop ¶ added in v0.3.0
Backdrop removes the element from the normal flow and stretches it over its Scope.
Example ¶
package main
import (
"github.com/tinywasm/widget"
"github.com/tinywasm/widget/style"
)
type myButton struct{}
func (b *myButton) WidgetName() widget.Name { return widget.Name("btn") }
func (b *myButton) WidgetKind() widget.Kind { return widget.Region }
func main() {
btn := &myButton{}
_ = style.For(btn).
Part("overlay", style.Backdrop(style.Viewport), style.Veil())
}
Output:
func Center ¶
Center defines a centered column with an optional maximum size (defaults to Readable).
func Cover ¶
func Cover() Option
Cover locks the frame to the viewport height and stacks its children vertically. It is the outermost frame of an application shell: use KeepSize() on the children that must not shrink (a header) and Fill() on the one that takes the remaining height. Do not nest one Cover inside another.
The height is definite, not a floor, so a Fill() descendant resolves against it and a HideOverflow() or Scroll() descendant actually clips. A shell whose content can exceed the viewport must therefore give that descendant Scroll(); otherwise the overflow is unreachable.
func Drawer ¶ added in v0.4.3
Drawer anchors the element to one inline edge of the viewport, full height, at the widget kind's stacking layer. It is the slide-in panel of a mobile navigation; pair it with RevealedBy(widget.Open) to control visibility and with a sibling Backdrop(Viewport)+Veil() for the dimmed page behind it.
Drawer sets the element's width. Do NOT also pass Width() — Validate rejects it.
func EdgeToEdge ¶ added in v0.4.0
func EdgeToEdge() Option
EdgeToEdge has no border radius or margin: flush against parent container.
func FillCentered ¶ added in v0.4.0
func FillCentered() Option
FillCentered fills the container with a centered child.
func Grid ¶
func Grid(min ColumnWidth, gap Space) Option
Grid defines auto-fit + minmax without a fixed number of columns.
func HideOverflow ¶ added in v0.4.0
func HideOverflow() Option
HideOverflow clips descendants (overflow: hidden).
func IconBox ¶ added in v0.4.4
IconBox sizes a part as a square that never shrinks — the shape an icon needs. A bare <svg> with no width or height falls back to the replaced-element default of 300x150 and blows the layout apart, so every part that renders one must declare its box here.
func Interactive ¶ added in v0.4.0
Interactive applies s and derives its hover, focus, and press treatments.
Example ¶
package main
import (
"github.com/tinywasm/widget"
"github.com/tinywasm/widget/style"
)
type myButton struct{}
func (b *myButton) WidgetName() widget.Name { return widget.Name("btn") }
func (b *myButton) WidgetKind() widget.Kind { return widget.Region }
func main() {
btn := &myButton{}
_ = style.For(btn).
Root(style.Interactive(style.Primary))
}
Output:
func KeepSize ¶ added in v0.4.0
func KeepSize() Option
KeepSize does NOT reflow: maintains its size under any width.
func RevealedBy ¶ added in v0.4.0
RevealedBy binds hiding/showing the element to a widget State.
Example ¶
package main
import (
"github.com/tinywasm/widget"
"github.com/tinywasm/widget/style"
)
type myButton struct{}
func (b *myButton) WidgetName() widget.Name { return widget.Name("btn") }
func (b *myButton) WidgetKind() widget.Kind { return widget.Region }
func main() {
btn := &myButton{}
_ = style.For(btn).
Part("menu", style.RevealedBy(widget.Open))
}
Output:
func Scroll ¶ added in v0.4.0
func Scroll() Option
Scroll overflows internally instead of growing. Implies Fill().
func Sidebar ¶ added in v0.4.3
Sidebar places a fixed-width rail beside a fluid content area. The rail keeps its width; the content takes everything else. Below the point where the content can no longer hold its minimum width the two reflow into a single column, with no media query involved.
The container MUST have exactly two element children. Which one is the rail is decided by side, not by DOM order: SideEnd makes the LAST child the rail.
func Split ¶
func Split(ratio SplitRatio, gap Space) Option
Split defines two panels that stack below their own width.
Example ¶
package main
import (
"github.com/tinywasm/widget"
"github.com/tinywasm/widget/style"
)
type myButton struct{}
func (b *myButton) WidgetName() widget.Name { return widget.Name("btn") }
func (b *myButton) WidgetKind() widget.Kind { return widget.Region }
func main() {
btn := &myButton{}
_ = style.For(btn).
Root(style.Split(style.SplitTwoThirds, style.Space3))
}
Output:
func Stack ¶
Stack defines a vertical rhythm with children at full width.
Example ¶
package main
import (
"github.com/tinywasm/widget"
"github.com/tinywasm/widget/style"
)
type myButton struct{}
func (b *myButton) WidgetName() widget.Name { return widget.Name("btn") }
func (b *myButton) WidgetKind() widget.Kind { return widget.Region }
func main() {
btn := &myButton{}
_ = style.For(btn).
Root(style.Stack(style.Space4))
}
Output:
type RailWidth ¶ added in v0.4.3
type RailWidth uint8
RailWidth is the closed scale for a Sidebar's fixed column.
type Sheet ¶
type Sheet struct {
// contains filtered or unexported fields
}
Sheet represents a scoped stylesheet for a widget.
func For ¶ added in v0.4.0
For opens the styling block for a widget.
Example ¶
package main
import (
"fmt"
"github.com/tinywasm/widget"
"github.com/tinywasm/widget/style"
)
type myButton struct{}
func (b *myButton) WidgetName() widget.Name { return widget.Name("btn") }
func (b *myButton) WidgetKind() widget.Kind { return widget.Region }
func main() {
btn := &myButton{}
sheet := style.For(btn).
Root(style.As(style.Primary))
fmt.Println(sheet.Parts())
}
Output: []
func (*Sheet) Cue ¶
Cue defines the style for a part (or Root if p is "") when the browser has a cue.
func (*Sheet) On ¶ added in v0.4.3
On defines the style for a part (or Root if p is "") only on the given viewport class. It is the single sanctioned way to vary a widget by device: the query strings live in tinywasm/css and are exhaustively tested there.
Reach for a flow primitive first — Split, Grid and Sidebar already reflow on their own. Use On only when the ARRANGEMENT itself differs, e.g. a nav rail that becomes a drawer.
func (*Sheet) OnlyOn ¶ added in v0.4.3
OnlyOn declares a part that exists on one viewport class and nowhere else: it is display:none by default and takes the given options only on d.
Use it for chrome that is genuinely device-specific — a hamburger button, a drawer's backdrop. If the element merely CHANGES between devices rather than disappearing, declare it with Part() and refine it with On().
func (*Sheet) StateAttrs ¶ added in v0.4.3
func (*Sheet) Stylesheet ¶
func (s *Sheet) Stylesheet() *css.Stylesheet
type Side ¶ added in v0.4.3
type Side uint8
Side names which edge a Sidebar's rail or a Drawer's panel is anchored to. Logical, not physical: it follows writing direction.
type SplitRatio ¶ added in v0.4.0
type SplitRatio uint8
SplitRatio is the flex-grow ratio for Split partitions.
const ( SplitHalf SplitRatio = iota SplitTwoThirds SplitThreeQuarters )
type Surface ¶
type Surface uint8
Surface is a complete visual decision: background, text, and border resolved together.