Liking cljdoc? Tell your friends :D

Spinner

Animated loading indicators with 15 built-in animation styles.

Quick Example

(require '[charm.core :as charm])

(def my-spinner (charm/spinner :dots))

;; Initialize to start animation
(let [[spinner cmd] (charm/spinner-init my-spinner)]
  ;; spinner is ready, cmd starts the tick loop
  )

;; In update function
(let [[spinner cmd] (charm/spinner-update spinner msg)]
  ;; Handle spinner tick messages
  )

;; In view function
(charm/spinner-view spinner)  ; => "⠋" (animates)

Creation Options

(charm/spinner type & options)
OptionTypeDefaultDescription
typekeyword/map:dotsSpinner type or custom {:frames [...] :interval ms}
:stylestylenilStyle to apply to spinner frames
:idanyrandomUnique identifier for tick messages

Spinner Types

TypeFramesIntervalPreview
:line\| / - \100msClassic line spinner
:dotsBraille dots80msSmooth dot animation
:dotBraille patterns100msRotating dot
:jumpBraille jump100msJumping dot
:pulse█ ▓ ▒ ░125msPulsing block
:points∙∙∙ ●∙∙ ∙●∙ ∙∙●140msMoving point
:globe🌍 🌎 🌏250msRotating globe
:moonMoon phases125msMoon cycle
:monkey🙈 🙉 🙊300msThree monkeys
:meter▱▱▱ to ▰▰▰140msLoading meter
:hamburger☱ ☲ ☴300msTrigram animation
:ellipsis. .. ...300msGrowing dots
:arrows← ↖ ↑ ↗ → ↘ ↓ ↙100msRotating arrow
:bouncing-bar[= ]100msBouncing bar
:clockClock faces100msClock animation

Custom Spinner

(charm/spinner {:frames ["◐" "◓" "◑" "◒"]
                :interval 150})

Functions

spinner-init

(charm/spinner-init spinner) ; => [spinner cmd]

Initialize the spinner and start the tick loop. Returns [spinner cmd] where cmd triggers the first tick.

spinner-update

(charm/spinner-update spinner msg) ; => [spinner cmd]

Handle tick messages. Returns [spinner cmd] to continue animation, or [spinner nil] if message not handled.

spinner-view

(charm/spinner-view spinner) ; => "⠋"

Render current frame as a string.

spinning?

(charm/spinning? spinner msg) ; => boolean

Check if a message is a tick for this spinner.

Full Example

(ns my-app
  (:require [charm.core :as charm]))

(defn init []
  (let [[spinner cmd] (charm/spinner-init (charm/spinner :dots))]
    [{:spinner spinner
      :loading true}
     cmd]))

(defn update-fn [state msg]
  (cond
    (charm/key-match? msg "q")
    [state charm/quit-cmd]

    :else
    (let [[spinner cmd] (charm/spinner-update (:spinner state) msg)]
      [(assoc state :spinner spinner) cmd])))

(defn view [state]
  (str (charm/spinner-view (:spinner state))
       " Loading data..."))

(charm/run {:init init
            :update update-fn
            :view view})

Styled Spinner

(charm/spinner :dots
               :style (charm/style :fg charm/cyan :bold true))

Can you improve this documentation?Edit on GitHub

cljdoc builds & hosts documentation for Clojure/Script libraries

Keyboard shortcuts
Ctrl+kJump to recent docs
Move to previous article
Move to next article
Ctrl+/Jump to the search field
× close