graphix-package-gui 0.8.0

A dataflow language for UIs and network programming, GUI package
Documentation
type Palette = {
  background: Color,
  danger: Color,
  primary: Color,
  success: Color,
  text: Color,
  warning: Color
};

/// Per-widget style types for custom theming.
/// All fields are optional — null fields inherit the theme default.
type ButtonStyle = {
  background: [Color, null],
  border_color: [Color, null],
  border_radius: [f64, null],
  border_width: [f64, null],
  text_color: [Color, null]
};

type CheckboxStyle = {
  accent: [Color, null],
  background: [Color, null],
  border_color: [Color, null],
  border_radius: [f64, null],
  border_width: [f64, null],
  icon_color: [Color, null],
  text_color: [Color, null]
};

type ContainerStyle = {
  background: [Color, null],
  border_color: [Color, null],
  border_radius: [f64, null],
  border_width: [f64, null],
  text_color: [Color, null]
};

type MenuStyle = {
  background: [Color, null],
  border_color: [Color, null],
  border_radius: [f64, null],
  border_width: [f64, null],
  selected_background: [Color, null],
  selected_text_color: [Color, null],
  text_color: [Color, null]
};

type PickListStyle = {
  background: [Color, null],
  border_color: [Color, null],
  border_radius: [f64, null],
  border_width: [f64, null],
  handle_color: [Color, null],
  placeholder_color: [Color, null],
  text_color: [Color, null]
};

type ProgressBarStyle = {
  background: [Color, null],
  bar_color: [Color, null],
  border_radius: [f64, null]
};

type RadioStyle = {
  background: [Color, null],
  border_color: [Color, null],
  border_width: [f64, null],
  dot_color: [Color, null],
  text_color: [Color, null]
};

type RuleStyle = { color: [Color, null], radius: [f64, null], width: [f64, null] };

type ScrollableStyle = {
  background: [Color, null],
  border_color: [Color, null],
  border_radius: [f64, null],
  border_width: [f64, null],
  scroller_color: [Color, null]
};

type SliderStyle = {
  handle_border_color: [Color, null],
  handle_border_width: [f64, null],
  handle_color: [Color, null],
  handle_radius: [f64, null],
  rail_color: [Color, null],
  rail_fill_color: [Color, null],
  rail_width: [f64, null]
};

type TextEditorStyle = {
  background: [Color, null],
  border_color: [Color, null],
  border_radius: [f64, null],
  border_width: [f64, null],
  placeholder_color: [Color, null],
  selection_color: [Color, null],
  value_color: [Color, null]
};

type TextInputStyle = {
  background: [Color, null],
  border_color: [Color, null],
  border_radius: [f64, null],
  border_width: [f64, null],
  icon_color: [Color, null],
  placeholder_color: [Color, null],
  selection_color: [Color, null],
  value_color: [Color, null]
};

type TogglerStyle = {
  background: [Color, null],
  background_border_color: [Color, null],
  border_radius: [f64, null],
  foreground: [Color, null],
  foreground_border_color: [Color, null],
  text_color: [Color, null]
};

/// Build a ButtonStyle with optional overrides
val button_style: fn(
  ?#background: [Color, null],
  ?#border_color: [Color, null],
  ?#border_radius: [f64, null],
  ?#border_width: [f64, null],
  ?#text_color: [Color, null]
) -> ButtonStyle;

/// Build a CheckboxStyle with optional overrides
val checkbox_style: fn(
  ?#accent: [Color, null],
  ?#background: [Color, null],
  ?#border_color: [Color, null],
  ?#border_radius: [f64, null],
  ?#border_width: [f64, null],
  ?#icon_color: [Color, null],
  ?#text_color: [Color, null]
) -> CheckboxStyle;

/// Build a ContainerStyle with optional overrides
val container_style: fn(
  ?#background: [Color, null],
  ?#border_color: [Color, null],
  ?#border_radius: [f64, null],
  ?#border_width: [f64, null],
  ?#text_color: [Color, null]
) -> ContainerStyle;

/// Build a MenuStyle with optional overrides
val menu_style: fn(
  ?#background: [Color, null],
  ?#border_color: [Color, null],
  ?#border_radius: [f64, null],
  ?#border_width: [f64, null],
  ?#selected_background: [Color, null],
  ?#selected_text_color: [Color, null],
  ?#text_color: [Color, null]
) -> MenuStyle;

/// Build a PickListStyle with optional overrides
val pick_list_style: fn(
  ?#background: [Color, null],
  ?#border_color: [Color, null],
  ?#border_radius: [f64, null],
  ?#border_width: [f64, null],
  ?#handle_color: [Color, null],
  ?#placeholder_color: [Color, null],
  ?#text_color: [Color, null]
) -> PickListStyle;

/// Build a ProgressBarStyle with optional overrides
val progress_bar_style: fn(
  ?#background: [Color, null],
  ?#bar_color: [Color, null],
  ?#border_radius: [f64, null]
) -> ProgressBarStyle;

/// Build a RadioStyle with optional overrides
val radio_style: fn(
  ?#background: [Color, null],
  ?#border_color: [Color, null],
  ?#border_width: [f64, null],
  ?#dot_color: [Color, null],
  ?#text_color: [Color, null]
) -> RadioStyle;

/// Build a RuleStyle with optional overrides
val rule_style: fn(
  ?#color: [Color, null],
  ?#radius: [f64, null],
  ?#width: [f64, null]
) -> RuleStyle;

/// Build a ScrollableStyle with optional overrides
val scrollable_style: fn(
  ?#background: [Color, null],
  ?#border_color: [Color, null],
  ?#border_radius: [f64, null],
  ?#border_width: [f64, null],
  ?#scroller_color: [Color, null]
) -> ScrollableStyle;

/// Build a SliderStyle with optional overrides
val slider_style: fn(
  ?#handle_border_color: [Color, null],
  ?#handle_border_width: [f64, null],
  ?#handle_color: [Color, null],
  ?#handle_radius: [f64, null],
  ?#rail_color: [Color, null],
  ?#rail_fill_color: [Color, null],
  ?#rail_width: [f64, null]
) -> SliderStyle;

/// Build a TextEditorStyle with optional overrides
val text_editor_style: fn(
  ?#background: [Color, null],
  ?#border_color: [Color, null],
  ?#border_radius: [f64, null],
  ?#border_width: [f64, null],
  ?#placeholder_color: [Color, null],
  ?#selection_color: [Color, null],
  ?#value_color: [Color, null]
) -> TextEditorStyle;

/// Build a TextInputStyle with optional overrides
val text_input_style: fn(
  ?#background: [Color, null],
  ?#border_color: [Color, null],
  ?#border_radius: [f64, null],
  ?#border_width: [f64, null],
  ?#icon_color: [Color, null],
  ?#placeholder_color: [Color, null],
  ?#selection_color: [Color, null],
  ?#value_color: [Color, null]
) -> TextInputStyle;

/// Build a TogglerStyle with optional overrides
val toggler_style: fn(
  ?#background: [Color, null],
  ?#background_border_color: [Color, null],
  ?#border_radius: [f64, null],
  ?#foreground: [Color, null],
  ?#foreground_border_color: [Color, null],
  ?#text_color: [Color, null]
) -> TogglerStyle;

/// Full custom theme with optional per-widget style overrides
type StyleSheet = {
  button: [ButtonStyle, null],
  checkbox: [CheckboxStyle, null],
  container: [ContainerStyle, null],
  menu: [MenuStyle, null],
  palette: Palette,
  pick_list: [PickListStyle, null],
  progress_bar: [ProgressBarStyle, null],
  radio: [RadioStyle, null],
  rule: [RuleStyle, null],
  scrollable: [ScrollableStyle, null],
  slider: [SliderStyle, null],
  text_editor: [TextEditorStyle, null],
  text_input: [TextInputStyle, null],
  toggler: [TogglerStyle, null]
};

/// Build a full custom theme from a palette and optional per-widget styles.
/// Omitted widget styles default to the theme's built-in palette-derived style.
val stylesheet: fn(
  #palette: Palette,
  ?#button: [ButtonStyle, null],
  ?#checkbox: [CheckboxStyle, null],
  ?#container: [ContainerStyle, null],
  ?#menu: [MenuStyle, null],
  ?#pick_list: [PickListStyle, null],
  ?#progress_bar: [ProgressBarStyle, null],
  ?#radio: [RadioStyle, null],
  ?#rule: [RuleStyle, null],
  ?#scrollable: [ScrollableStyle, null],
  ?#slider: [SliderStyle, null],
  ?#text_editor: [TextEditorStyle, null],
  ?#text_input: [TextInputStyle, null],
  ?#toggler: [TogglerStyle, null]
) -> StyleSheet;