PaperForge.DesignSystem (PaperForge v1.4.1)

Copy Markdown View Source

Immutable design-system registry for declarative PaperForge documents.

A design system groups tokens, styles, visual components, shared layouts, and named themes. Themes may inherit from another theme and override only the values that differ.

Summary

Types

definition()

@type definition() :: map()

name()

@type name() :: atom() | binary()

t()

@type t() :: %PaperForge.DesignSystem{
  components: map(),
  layouts: map(),
  styles: map(),
  themes: map(),
  tokens: map()
}

Functions

component(system, name, definition)

@spec component(t(), name(), definition()) :: t()

layout(system, name, definition)

@spec layout(t(), name(), definition()) :: t()

merge(left, right)

@spec merge(t(), t()) :: t()

Merges two libraries. Values from right take precedence.

new(options \\ %{})

@spec new(keyword() | map()) :: t()

resolve(system, name)

@spec resolve(t(), name() | nil) :: {:ok, t()} | {:error, term()}

Resolves a theme and its inheritance chain into a complete library.

style(system, name, definition)

@spec style(t(), name(), map() | keyword()) :: t()

theme(system, name, definition)

@spec theme(t(), name(), definition()) :: t()

token(system, name, value)

@spec token(t(), name(), term()) :: t()