📚 TUI Framework

Animated Spinner Example

This example demonstrates how to build a state-reactive animated spinner component using YAML classes and a simple JavaScript controller.


1. Component Definition (spinner.yaml)

classes:
  spinnerStyle:
    type: text
    bold: true
    fg: '#ff9e64'

main:
  type: layout
  direction: horizontal
  inner:
    - type: text
      class: spinnerStyle
      text: '@spinner-controller.js:getFrame'
    - type: text
      margin: { l: 1 }
      text: 'Loading assets...'

2. Controller Logic (spinner-controller.js)

const frames = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏']
let currentFrame = 0

// Cycle spinner frame on every redraw pass
exports.getFrame = () => {
  const frame = frames[currentFrame]
  currentFrame = (currentFrame + 1) % frames.length
  return frame
}

3. Usage in View Markup

inner:
  - type: '@spinner.yaml:main'