ui

package
v0.0.5 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 6, 2026 License: MIT Imports: 7 Imported by: 0

Documentation

Overview

Package ui defines bounded author-owned presentation assets shared by the build pipeline and host. It has no dependency on a rendering library.

Index

Constants

View Source
const (
	LengthAuto uint8 = iota
	LengthPixels
	LengthPercent
)
View Source
const (
	PercentScale       = 10000
	MaxDimensionPixels = 2048
)
View Source
const (
	MaxAssetBytes                    = 64 * 1024
	MaxElements                      = 64
	MaxTextBytes                     = 4096
	MaxNameBytes                     = 128
	MaxRows                          = 256
	MaxTransitionMilliseconds        = 2000
	BackElementID             uint32 = MaxElements + 1
	AssetPrefix                      = "karty.ui/"
	FontAssetPrefix                  = "karty.font/"
	SectionName                      = "karty.ui.v1"
	SchemaComposition         uint32 = 2
	SchemaStyle               uint32 = 3
	SchemaImageStyle          uint32 = 4
	SchemaLayout              uint32 = 5
	SchemaResponsive          uint32 = 6
	SchemaControlTransition   uint32 = 7
	SchemaVisualHierarchy     uint32 = 8
	SchemaInteractionPolish   uint32 = 9
	SchemaWidgets             uint32 = 10
	SchemaSizing              uint32 = 11
	MinResponsiveWidth               = 240
	MaxResponsiveWidth               = 1024
)
View Source
const (
	StyleBackground uint32 = 1 << iota
	StyleBackgroundHover
	StyleBackgroundPressed
	StyleColor
	StylePadding
	StyleGap
	StyleFontSize
	StyleMinHeight
	StyleBackgroundImage
	StyleBackgroundImageHover
	StyleBackgroundImagePressed
	StyleBackgroundDisabled
	StyleBackgroundImageDisabled
	StyleColorHover
	StyleColorPressed
	StyleColorDisabled
	StyleFlexDirection
	StyleAlignItems
	StyleMinWidth
	StyleMaxWidth
	StyleMaxHeight
	StyleJustifyContent
	StyleFlexGrow
	StyleMargin
	StyleOverflow
	StyleTransitionDuration
	StyleTransitionEnter
	StyleTransitionExit
	StyleTextAlign
	StyleFontFamily
	StyleContentImage
)
View Source
const (
	Style2BackgroundFocus uint32 = 1 << iota
	Style2BackgroundImageFocus
	Style2ColorFocus
	Style2TransitionDelay
	Style2TransitionEasing
	Style2Position
	Style2Left
	Style2Right
	Style2Top
	Style2Bottom
	Style2ImageFit
	Style2Tint
	Style2Icon
	Style2IconSize
	Style2IconPosition
	Style2IconGap
	Style2Width
	Style2Height
)
View Source
const (
	FlexDirectionColumn uint8 = iota + 1
	FlexDirectionRow
)
View Source
const (
	AlignItemsStart uint8 = iota + 1
	AlignItemsCenter
	AlignItemsEnd
	AlignItemsStretch
)
View Source
const (
	JustifyContentStart uint8 = iota + 1
	JustifyContentCenter
	JustifyContentEnd
	JustifyContentSpaceBetween
)
View Source
const (
	OverflowVisible uint8 = iota + 1
	OverflowScroll
)
View Source
const (
	TransitionNone uint8 = iota
	TransitionLeft
	TransitionRight
	TransitionTop
	TransitionBottom
)
View Source
const (
	TransitionEasingLinear uint8 = iota + 1
	TransitionEasingOut
	TransitionEasingInOut
)
View Source
const (
	ImageFitStretch uint8 = iota + 1
	ImageFitContain
	ImageFitCover
)
View Source
const (
	IconPositionStart uint8 = iota + 1
	IconPositionEnd
)
View Source
const (
	TextAlignStart uint8 = iota + 1
	TextAlignCenter
	TextAlignEnd
)
View Source
const (
	FontFamilyBody uint8 = iota + 1
	FontFamilyDisplay
	FontFamilyMono
)
View Source
const (
	ImageScopeGame uint8 = iota + 1
	ImageScopeLevel
)
View Source
const PositionOverlay uint8 = 1

Variables

View Source
var ErrTemplate = errors.New("invalid UI template")

Functions

func Encode

func Encode(template Template) ([]byte, error)

Encode canonicalizes legacy schema-1 authoring JSON for embedding.

func EncodeComposition

func EncodeComposition(template Template) ([]byte, error)

func ValidateStyle added in v0.0.5

func ValidateStyle(style Style, kind string) error

ValidateStyle checks a resolved style against a widget's complete current presentation contract. Authoring compilers may use this to omit invalid declarations; serialized templates still undergo strict versioned validation.

Types

type Element

type Element struct {
	ID          uint32 `json:"id"`
	Parent      uint32 `json:"parent,omitempty"`
	Name        string `json:"name"`
	Kind        string `json:"kind"`
	Text        string `json:"text"`
	Action      uint32 `json:"action,omitempty"`
	Value       string `json:"value,omitempty"`
	Min         int32  `json:"min,omitempty"`
	Max         int32  `json:"max,omitempty"`
	Placeholder string `json:"placeholder,omitempty"`
	Tooltip     string `json:"tooltip,omitempty"`
	Style       Style  `json:"style,omitzero"`
	// ResponsiveStyle is the fully resolved style selected at or below the
	// template's ResponsiveMaxWidth. A zero Set inherits Style unchanged.
	ResponsiveStyle Style `json:"responsiveStyle,omitzero"`
}

func (Element) ValidValue added in v0.0.5

func (element Element) ValidValue(value string) bool

ValidValue checks a control's canonical wire value. Selection membership is checked by the host against the complete staged tree and its current rows.

type Image

type Image struct {
	Scope   uint8  `json:"scope"`
	Name    string `json:"name,omitempty"`
	AssetID uint32 `json:"assetId,omitempty"`
	Top     uint16 `json:"top,omitempty"`
	Right   uint16 `json:"right,omitempty"`
	Bottom  uint16 `json:"bottom,omitempty"`
	Left    uint16 `json:"left,omitempty"`
}

Image is a compiler-resolved nine-slice reference. Game images use a logical name; level images use the stable numeric ID from their owning .kld.

type Length added in v0.0.5

type Length struct {
	Unit  uint8  `json:"unit,omitempty"`
	Value uint16 `json:"value,omitempty"`
}

Length stores logical pixels or hundredths of a percent; zero means auto. A style presence bit distinguishes an explicit auto override from omission.

type Style

type Style struct {
	Set                     uint32 `json:"set,omitempty"`
	Set2                    uint32 `json:"set2,omitempty"`
	Background              uint32 `json:"background,omitempty"`
	BackgroundHover         uint32 `json:"backgroundHover,omitempty"`
	BackgroundPressed       uint32 `json:"backgroundPressed,omitempty"`
	Color                   uint32 `json:"color,omitempty"`
	Padding                 uint16 `json:"padding,omitempty"`
	Gap                     uint16 `json:"gap,omitempty"`
	FontSize                uint16 `json:"fontSize,omitempty"`
	MinHeight               uint16 `json:"minHeight,omitempty"`
	BackgroundImage         Image  `json:"backgroundImage,omitzero"`
	BackgroundImageHover    Image  `json:"backgroundImageHover,omitzero"`
	BackgroundImagePressed  Image  `json:"backgroundImagePressed,omitzero"`
	BackgroundDisabled      uint32 `json:"backgroundDisabled,omitempty"`
	BackgroundImageDisabled Image  `json:"backgroundImageDisabled,omitzero"`
	ColorHover              uint32 `json:"colorHover,omitempty"`
	ColorPressed            uint32 `json:"colorPressed,omitempty"`
	ColorDisabled           uint32 `json:"colorDisabled,omitempty"`
	FlexDirection           uint8  `json:"flexDirection,omitempty"`
	AlignItems              uint8  `json:"alignItems,omitempty"`
	MinWidth                uint16 `json:"minWidth,omitempty"`
	MaxWidth                uint16 `json:"maxWidth,omitempty"`
	MaxHeight               uint16 `json:"maxHeight,omitempty"`
	JustifyContent          uint8  `json:"justifyContent,omitempty"`
	FlexGrow                uint8  `json:"flexGrow,omitempty"`
	Margin                  uint16 `json:"margin,omitempty"`
	Overflow                uint8  `json:"overflow,omitempty"`
	TransitionDuration      uint16 `json:"transitionDuration,omitempty"`
	TransitionEnter         uint8  `json:"transitionEnter,omitempty"`
	TransitionExit          uint8  `json:"transitionExit,omitempty"`
	TextAlign               uint8  `json:"textAlign,omitempty"`
	FontFamily              uint8  `json:"fontFamily,omitempty"`
	ContentImage            Image  `json:"contentImage,omitzero"`
	BackgroundFocus         uint32 `json:"backgroundFocus,omitempty"`
	BackgroundImageFocus    Image  `json:"backgroundImageFocus,omitzero"`
	ColorFocus              uint32 `json:"colorFocus,omitempty"`
	TransitionDelay         uint16 `json:"transitionDelay,omitempty"`
	TransitionEasing        uint8  `json:"transitionEasing,omitempty"`
	Position                uint8  `json:"position,omitempty"`
	Left                    uint16 `json:"left,omitempty"`
	Right                   uint16 `json:"right,omitempty"`
	Top                     uint16 `json:"top,omitempty"`
	Bottom                  uint16 `json:"bottom,omitempty"`
	ImageFit                uint8  `json:"imageFit,omitempty"`
	Tint                    uint32 `json:"tint,omitempty"`
	Icon                    Image  `json:"icon,omitzero"`
	IconSize                uint16 `json:"iconSize,omitempty"`
	IconPosition            uint8  `json:"iconPosition,omitempty"`
	IconGap                 uint16 `json:"iconGap,omitempty"`
	Width                   Length `json:"width,omitzero"`
	Height                  Length `json:"height,omitzero"`
}

Style is a compact, compiler-resolved presentation value. Set distinguishes an authored zero/transparent value from an omitted property.

type Template

type Template struct {
	Version            uint32    `json:"version"`
	Modal              bool      `json:"modal"`
	Back               bool      `json:"back,omitempty"`
	Panel              Style     `json:"panel,omitzero"`
	ResponsiveMaxWidth uint16    `json:"responsiveMaxWidth,omitempty"`
	ResponsivePanel    Style     `json:"responsivePanel,omitzero"`
	Elements           []Element `json:"elements"`
}

Template version 1 is a vertical panel of named labels, buttons, and lists. A modal panel captures game input. Schema 9 also permits actionable nonmodal HUD controls; older nonmodal templates retain their noninteractive contract.

func Decode

func Decode(data []byte) (Template, error)

func DecodeComposition

func DecodeComposition(data []byte) (Template, error)

DecodeComposition accepts all versioned retained-tree presentation schemas.

func (Template) Validate

func (template Template) Validate() error

func (Template) ValidateComposition

func (template Template) ValidateComposition() error

ValidateComposition also accepts composition, style, layout, and responsive schemas. Legacy packaging continues using Validate, which accepts schema 1 only.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL