# Copyright Kevin Deldycke <kevin@deldycke.com> and contributors.
#
# This program is Free Software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
"""The bundled catalog of terminal spinner presets.
Ported from [cli-spinners](https://github.com/sindresorhus/cli-spinners),
with frame intervals converted from milliseconds to seconds.
"""
from __future__ import annotations
from typing import NamedTuple
TYPE_CHECKING = False
if TYPE_CHECKING:
from typing import Final
ASCII_SPINNER_FRAMES: Final = ("-", "\\", "|", "/")
"""Plain ASCII animation frames, for terminals or fonts lacking Unicode glyphs."""
SPINNER_FRAMES: Final = ("⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏")
"""Default animation frames: the ubiquitous Braille-dots spinner.
Ten frames give a smooth rotation in any UTF-8 terminal. Fall back to
{data}`ASCII_SPINNER_FRAMES` where Braille glyphs are unavailable.
"""
[docs]
class SpinnerPreset(NamedTuple):
"""A named spinner animation: its frames and the interval they look best at.
The {data}`~click_extra.spinner_presets.SPINNERS` catalog is ported from
[cli-spinners](https://github.com/sindresorhus/cli-spinners), with intervals
converted from milliseconds to seconds. Pass one to
{class}`~click_extra.spinner.Spinner` via its `spinner` argument.
"""
frames: tuple[str, ...]
"""The animation frames, cycled in order."""
interval: float
"""Seconds between two frames, tuned per spinner upstream."""
# Single-code-point animations are packed as `tuple("frames")` to stay
# one-liners; animations with multi-character frames keep an explicit tuple.
SPINNERS: Final = {
"dots": SpinnerPreset(SPINNER_FRAMES, 0.08),
"dots2": SpinnerPreset(tuple("⣾⣽⣻⢿⡿⣟⣯⣷"), 0.08),
"dots3": SpinnerPreset(tuple("⠋⠙⠚⠞⠖⠦⠴⠲⠳⠓"), 0.08),
"dots4": SpinnerPreset(tuple("⠄⠆⠇⠋⠙⠸⠰⠠⠰⠸⠙⠋⠇⠆"), 0.08),
"dots5": SpinnerPreset(tuple("⠋⠙⠚⠒⠂⠂⠒⠲⠴⠦⠖⠒⠐⠐⠒⠓⠋"), 0.08),
"dots6": SpinnerPreset(tuple("⠁⠉⠙⠚⠒⠂⠂⠒⠲⠴⠤⠄⠄⠤⠴⠲⠒⠂⠂⠒⠚⠙⠉⠁"), 0.08),
"dots7": SpinnerPreset(tuple("⠈⠉⠋⠓⠒⠐⠐⠒⠖⠦⠤⠠⠠⠤⠦⠖⠒⠐⠐⠒⠓⠋⠉⠈"), 0.08),
"dots8": SpinnerPreset(tuple("⠁⠁⠉⠙⠚⠒⠂⠂⠒⠲⠴⠤⠄⠄⠤⠠⠠⠤⠦⠖⠒⠐⠐⠒⠓⠋⠉⠈⠈"), 0.08),
"dots9": SpinnerPreset(tuple("⢹⢺⢼⣸⣇⡧⡗⡏"), 0.08),
"dots10": SpinnerPreset(tuple("⢄⢂⢁⡁⡈⡐⡠"), 0.08),
"dots11": SpinnerPreset(tuple("⠁⠂⠄⡀⢀⠠⠐⠈"), 0.1),
"dots12": SpinnerPreset(
(
"⢀⠀",
"⡀⠀",
"⠄⠀",
"⢂⠀",
"⡂⠀",
"⠅⠀",
"⢃⠀",
"⡃⠀",
"⠍⠀",
"⢋⠀",
"⡋⠀",
"⠍⠁",
"⢋⠁",
"⡋⠁",
"⠍⠉",
"⠋⠉",
"⠋⠉",
"⠉⠙",
"⠉⠙",
"⠉⠩",
"⠈⢙",
"⠈⡙",
"⢈⠩",
"⡀⢙",
"⠄⡙",
"⢂⠩",
"⡂⢘",
"⠅⡘",
"⢃⠨",
"⡃⢐",
"⠍⡐",
"⢋⠠",
"⡋⢀",
"⠍⡁",
"⢋⠁",
"⡋⠁",
"⠍⠉",
"⠋⠉",
"⠋⠉",
"⠉⠙",
"⠉⠙",
"⠉⠩",
"⠈⢙",
"⠈⡙",
"⠈⠩",
"⠀⢙",
"⠀⡙",
"⠀⠩",
"⠀⢘",
"⠀⡘",
"⠀⠨",
"⠀⢐",
"⠀⡐",
"⠀⠠",
"⠀⢀",
"⠀⡀",
),
0.08,
),
"dots13": SpinnerPreset(tuple("⣼⣹⢻⠿⡟⣏⣧⣶"), 0.08),
"dots14": SpinnerPreset(
("⠉⠉", "⠈⠙", "⠀⠹", "⠀⢸", "⠀⣰", "⢀⣠", "⣀⣀", "⣄⡀", "⣆⠀", "⡇⠀", "⠏⠀", "⠋⠁"), 0.08
),
"dots8Bit": SpinnerPreset(
tuple(
"⠀⠁⠂⠃⠄⠅⠆⠇⡀⡁⡂⡃⡄⡅⡆⡇⠈⠉⠊⠋⠌⠍⠎⠏⡈⡉⡊⡋⡌⡍⡎⡏⠐⠑⠒⠓⠔⠕⠖⠗⡐⡑⡒⡓⡔⡕⡖⡗⠘⠙⠚⠛⠜⠝⠞⠟⡘⡙⡚⡛⡜⡝⡞⡟⠠⠡⠢⠣⠤⠥⠦⠧⡠⡡⡢⡣⡤⡥⡦⡧⠨⠩⠪⠫⠬⠭⠮⠯⡨⡩⡪⡫⡬⡭⡮⡯⠰⠱⠲⠳⠴⠵⠶⠷⡰⡱⡲⡳⡴⡵⡶⡷⠸⠹⠺⠻⠼⠽⠾⠿⡸⡹⡺⡻⡼⡽⡾⡿⢀⢁⢂⢃⢄⢅⢆⢇⣀⣁⣂⣃⣄⣅⣆⣇⢈⢉⢊⢋⢌⢍⢎⢏⣈⣉⣊⣋⣌⣍⣎⣏⢐⢑⢒⢓⢔⢕⢖⢗⣐⣑⣒⣓⣔⣕⣖⣗⢘⢙⢚⢛⢜⢝⢞⢟⣘⣙⣚⣛⣜⣝⣞⣟⢠⢡⢢⢣⢤⢥⢦⢧⣠⣡⣢⣣⣤⣥⣦⣧⢨⢩⢪⢫⢬⢭⢮⢯⣨⣩⣪⣫⣬⣭⣮⣯⢰⢱⢲⢳⢴⢵⢶⢷⣰⣱⣲⣳⣴⣵⣶⣷⢸⢹⢺⢻⢼⢽⢾⢿⣸⣹⣺⣻⣼⣽⣾⣿"
),
0.08,
),
"dotsCircle": SpinnerPreset(("⢎ ", "⠎⠁", "⠊⠑", "⠈⠱", " ⡱", "⢀⡰", "⢄⡠", "⢆⡀"), 0.08),
"sand": SpinnerPreset(tuple("⠁⠂⠄⡀⡈⡐⡠⣀⣁⣂⣄⣌⣔⣤⣥⣦⣮⣶⣷⣿⡿⠿⢟⠟⡛⠛⠫⢋⠋⠍⡉⠉⠑⠡⢁"), 0.08),
"line": SpinnerPreset(ASCII_SPINNER_FRAMES, 0.13),
"line2": SpinnerPreset(tuple("⠂-–—–-"), 0.1),
"rollingLine": SpinnerPreset(
("/ ", " - ", " \\ ", " |", " |", " \\ ", " - ", "/ "), 0.08
),
"pipe": SpinnerPreset(tuple("┤┘┴└├┌┬┐"), 0.1),
"simpleDots": SpinnerPreset((". ", ".. ", "...", " "), 0.4),
"simpleDotsScrolling": SpinnerPreset(
(". ", ".. ", "...", " ..", " .", " "), 0.2
),
"star": SpinnerPreset(tuple("✶✸✹✺✹✷"), 0.07),
"star2": SpinnerPreset(tuple("+x*"), 0.08),
"flip": SpinnerPreset(tuple("___-``'´-___"), 0.07),
"hamburger": SpinnerPreset(tuple("☱☲☴"), 0.1),
"growVertical": SpinnerPreset(tuple("▁▃▄▅▆▇▆▅▄▃"), 0.12),
"growHorizontal": SpinnerPreset(tuple("▏▎▍▌▋▊▉▊▋▌▍▎"), 0.12),
"balloon": SpinnerPreset(tuple(" .oO@* "), 0.14),
"balloon2": SpinnerPreset(tuple(".oO°Oo."), 0.12),
"noise": SpinnerPreset(tuple("▓▒░"), 0.1),
"bounce": SpinnerPreset(tuple("⠁⠂⠄⠂"), 0.12),
"boxBounce": SpinnerPreset(tuple("▖▘▝▗"), 0.12),
"boxBounce2": SpinnerPreset(tuple("▌▀▐▄"), 0.1),
"triangle": SpinnerPreset(tuple("◢◣◤◥"), 0.05),
"binary": SpinnerPreset(
(
"010010",
"001100",
"100101",
"111010",
"111101",
"010111",
"101011",
"111000",
"110011",
"110101",
),
0.08,
),
"arc": SpinnerPreset(tuple("◜◠◝◞◡◟"), 0.1),
"circle": SpinnerPreset(tuple("◡⊙◠"), 0.12),
"squareCorners": SpinnerPreset(tuple("◰◳◲◱"), 0.18),
"circleQuarters": SpinnerPreset(tuple("◴◷◶◵"), 0.12),
"circleHalves": SpinnerPreset(tuple("◐◓◑◒"), 0.05),
"squish": SpinnerPreset(tuple("╫╪"), 0.1),
"toggle": SpinnerPreset(tuple("⊶⊷"), 0.25),
"toggle2": SpinnerPreset(tuple("▫▪"), 0.08),
"toggle3": SpinnerPreset(tuple("□■"), 0.12),
"toggle4": SpinnerPreset(tuple("■□▪▫"), 0.1),
"toggle5": SpinnerPreset(tuple("▮▯"), 0.1),
"toggle6": SpinnerPreset(tuple("ဝ၀"), 0.3),
"toggle7": SpinnerPreset(tuple("⦾⦿"), 0.08),
"toggle8": SpinnerPreset(tuple("◍◌"), 0.1),
"toggle9": SpinnerPreset(tuple("◉◎"), 0.1),
"toggle10": SpinnerPreset(tuple("㊂㊀㊁"), 0.1),
"toggle11": SpinnerPreset(tuple("⧇⧆"), 0.05),
"toggle12": SpinnerPreset(tuple("☗☖"), 0.12),
"toggle13": SpinnerPreset(tuple("=*-"), 0.08),
"arrow": SpinnerPreset(tuple("←↖↑↗→↘↓↙"), 0.1),
"arrow2": SpinnerPreset(("⬆️ ", "↗️ ", "➡️ ", "↘️ ", "⬇️ ", "↙️ ", "⬅️ ", "↖️ "), 0.08),
"arrow3": SpinnerPreset(
("▹▹▹▹▹", "▸▹▹▹▹", "▹▸▹▹▹", "▹▹▸▹▹", "▹▹▹▸▹", "▹▹▹▹▸"), 0.12
),
"bouncingBar": SpinnerPreset(
(
"[ ]",
"[= ]",
"[== ]",
"[=== ]",
"[====]",
"[ ===]",
"[ ==]",
"[ =]",
"[ ]",
"[ =]",
"[ ==]",
"[ ===]",
"[====]",
"[=== ]",
"[== ]",
"[= ]",
),
0.08,
),
"bouncingBall": SpinnerPreset(
(
"( ● )",
"( ● )",
"( ● )",
"( ● )",
"( ●)",
"( ● )",
"( ● )",
"( ● )",
"( ● )",
"(● )",
),
0.08,
),
"smiley": SpinnerPreset(("😄 ", "😝 "), 0.2),
"monkey": SpinnerPreset(("🙈 ", "🙈 ", "🙉 ", "🙊 "), 0.3),
"hearts": SpinnerPreset(("💛 ", "💙 ", "💜 ", "💚 ", "💗 "), 0.1),
"clock": SpinnerPreset(
(
"🕛 ",
"🕐 ",
"🕑 ",
"🕒 ",
"🕓 ",
"🕔 ",
"🕕 ",
"🕖 ",
"🕗 ",
"🕘 ",
"🕙 ",
"🕚 ",
),
0.1,
),
"earth": SpinnerPreset(("🌍 ", "🌎 ", "🌏 "), 0.18),
"material": SpinnerPreset(
(
"█▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁",
"██▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁",
"███▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁",
"████▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁",
"██████▁▁▁▁▁▁▁▁▁▁▁▁▁▁",
"██████▁▁▁▁▁▁▁▁▁▁▁▁▁▁",
"███████▁▁▁▁▁▁▁▁▁▁▁▁▁",
"████████▁▁▁▁▁▁▁▁▁▁▁▁",
"█████████▁▁▁▁▁▁▁▁▁▁▁",
"█████████▁▁▁▁▁▁▁▁▁▁▁",
"██████████▁▁▁▁▁▁▁▁▁▁",
"███████████▁▁▁▁▁▁▁▁▁",
"█████████████▁▁▁▁▁▁▁",
"██████████████▁▁▁▁▁▁",
"██████████████▁▁▁▁▁▁",
"▁██████████████▁▁▁▁▁",
"▁██████████████▁▁▁▁▁",
"▁██████████████▁▁▁▁▁",
"▁▁██████████████▁▁▁▁",
"▁▁▁██████████████▁▁▁",
"▁▁▁▁█████████████▁▁▁",
"▁▁▁▁██████████████▁▁",
"▁▁▁▁██████████████▁▁",
"▁▁▁▁▁██████████████▁",
"▁▁▁▁▁██████████████▁",
"▁▁▁▁▁██████████████▁",
"▁▁▁▁▁▁██████████████",
"▁▁▁▁▁▁██████████████",
"▁▁▁▁▁▁▁█████████████",
"▁▁▁▁▁▁▁█████████████",
"▁▁▁▁▁▁▁▁████████████",
"▁▁▁▁▁▁▁▁████████████",
"▁▁▁▁▁▁▁▁▁███████████",
"▁▁▁▁▁▁▁▁▁███████████",
"▁▁▁▁▁▁▁▁▁▁██████████",
"▁▁▁▁▁▁▁▁▁▁██████████",
"▁▁▁▁▁▁▁▁▁▁▁▁████████",
"▁▁▁▁▁▁▁▁▁▁▁▁▁███████",
"▁▁▁▁▁▁▁▁▁▁▁▁▁▁██████",
"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█████",
"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█████",
"█▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁████",
"██▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁███",
"██▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁███",
"███▁▁▁▁▁▁▁▁▁▁▁▁▁▁███",
"████▁▁▁▁▁▁▁▁▁▁▁▁▁▁██",
"█████▁▁▁▁▁▁▁▁▁▁▁▁▁▁█",
"█████▁▁▁▁▁▁▁▁▁▁▁▁▁▁█",
"██████▁▁▁▁▁▁▁▁▁▁▁▁▁█",
"████████▁▁▁▁▁▁▁▁▁▁▁▁",
"█████████▁▁▁▁▁▁▁▁▁▁▁",
"█████████▁▁▁▁▁▁▁▁▁▁▁",
"█████████▁▁▁▁▁▁▁▁▁▁▁",
"█████████▁▁▁▁▁▁▁▁▁▁▁",
"███████████▁▁▁▁▁▁▁▁▁",
"████████████▁▁▁▁▁▁▁▁",
"████████████▁▁▁▁▁▁▁▁",
"██████████████▁▁▁▁▁▁",
"██████████████▁▁▁▁▁▁",
"▁██████████████▁▁▁▁▁",
"▁██████████████▁▁▁▁▁",
"▁▁▁█████████████▁▁▁▁",
"▁▁▁▁▁████████████▁▁▁",
"▁▁▁▁▁████████████▁▁▁",
"▁▁▁▁▁▁███████████▁▁▁",
"▁▁▁▁▁▁▁▁█████████▁▁▁",
"▁▁▁▁▁▁▁▁█████████▁▁▁",
"▁▁▁▁▁▁▁▁▁█████████▁▁",
"▁▁▁▁▁▁▁▁▁█████████▁▁",
"▁▁▁▁▁▁▁▁▁▁█████████▁",
"▁▁▁▁▁▁▁▁▁▁▁████████▁",
"▁▁▁▁▁▁▁▁▁▁▁████████▁",
"▁▁▁▁▁▁▁▁▁▁▁▁███████▁",
"▁▁▁▁▁▁▁▁▁▁▁▁███████▁",
"▁▁▁▁▁▁▁▁▁▁▁▁▁███████",
"▁▁▁▁▁▁▁▁▁▁▁▁▁███████",
"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█████",
"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁████",
"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁████",
"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁████",
"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁███",
"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁███",
"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁██",
"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁██",
"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁██",
"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█",
"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█",
"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█",
"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁",
"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁",
"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁",
"▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁",
),
0.017,
),
"moon": SpinnerPreset(
("🌑 ", "🌒 ", "🌓 ", "🌔 ", "🌕 ", "🌖 ", "🌗 ", "🌘 "), 0.08
),
"runner": SpinnerPreset(("🚶 ", "🏃 "), 0.14),
"pong": SpinnerPreset(
(
"▐⠂ ▌",
"▐⠈ ▌",
"▐ ⠂ ▌",
"▐ ⠠ ▌",
"▐ ⡀ ▌",
"▐ ⠠ ▌",
"▐ ⠂ ▌",
"▐ ⠈ ▌",
"▐ ⠂ ▌",
"▐ ⠠ ▌",
"▐ ⡀ ▌",
"▐ ⠠ ▌",
"▐ ⠂ ▌",
"▐ ⠈ ▌",
"▐ ⠂▌",
"▐ ⠠▌",
"▐ ⡀▌",
"▐ ⠠ ▌",
"▐ ⠂ ▌",
"▐ ⠈ ▌",
"▐ ⠂ ▌",
"▐ ⠠ ▌",
"▐ ⡀ ▌",
"▐ ⠠ ▌",
"▐ ⠂ ▌",
"▐ ⠈ ▌",
"▐ ⠂ ▌",
"▐ ⠠ ▌",
"▐ ⡀ ▌",
"▐⠠ ▌",
),
0.08,
),
"shark": SpinnerPreset(
(
"▐|\\____________▌",
"▐_|\\___________▌",
"▐__|\\__________▌",
"▐___|\\_________▌",
"▐____|\\________▌",
"▐_____|\\_______▌",
"▐______|\\______▌",
"▐_______|\\_____▌",
"▐________|\\____▌",
"▐_________|\\___▌",
"▐__________|\\__▌",
"▐___________|\\_▌",
"▐____________|\\▌",
"▐____________/|▌",
"▐___________/|_▌",
"▐__________/|__▌",
"▐_________/|___▌",
"▐________/|____▌",
"▐_______/|_____▌",
"▐______/|______▌",
"▐_____/|_______▌",
"▐____/|________▌",
"▐___/|_________▌",
"▐__/|__________▌",
"▐_/|___________▌",
"▐/|____________▌",
),
0.12,
),
"dqpb": SpinnerPreset(tuple("dqpb"), 0.1),
"weather": SpinnerPreset(
(
"☀️ ",
"☀️ ",
"☀️ ",
"🌤 ",
"⛅️ ",
"🌥 ",
"☁️ ",
"🌧 ",
"🌨 ",
"🌧 ",
"🌨 ",
"🌧 ",
"🌨 ",
"⛈ ",
"🌨 ",
"🌧 ",
"🌨 ",
"☁️ ",
"🌥 ",
"⛅️ ",
"🌤 ",
"☀️ ",
"☀️ ",
),
0.1,
),
"christmas": SpinnerPreset(tuple("🌲🎄"), 0.4),
"grenade": SpinnerPreset(
(
"، ",
"′ ",
" ´ ",
" ‾ ",
" ⸌",
" ⸊",
" |",
" ⁎",
" ⁕",
" ෴ ",
" ⁓",
" ",
" ",
" ",
),
0.08,
),
"point": SpinnerPreset(("∙∙∙", "●∙∙", "∙●∙", "∙∙●", "∙∙∙"), 0.125),
"layer": SpinnerPreset(tuple("-=≡"), 0.15),
"betaWave": SpinnerPreset(
("ρββββββ", "βρβββββ", "ββρββββ", "βββρβββ", "ββββρββ", "βββββρβ", "ββββββρ"),
0.08,
),
"fingerDance": SpinnerPreset(("🤘 ", "🤟 ", "🖖 ", "✋ ", "🤚 ", "👆 "), 0.16),
"fistBump": SpinnerPreset(
(
"🤜\u3000\u3000\u3000\u3000🤛 ",
"🤜\u3000\u3000\u3000\u3000🤛 ",
"🤜\u3000\u3000\u3000\u3000🤛 ",
"\u3000🤜\u3000\u3000🤛\u3000 ",
"\u3000\u3000🤜🤛\u3000\u3000 ",
"\u3000🤜✨🤛\u3000\u3000 ",
"🤜\u3000✨\u3000🤛\u3000 ",
),
0.08,
),
"soccerHeader": SpinnerPreset(
(
" 🧑⚽️ 🧑 ",
"🧑 ⚽️ 🧑 ",
"🧑 ⚽️ 🧑 ",
"🧑 ⚽️ 🧑 ",
"🧑 ⚽️ 🧑 ",
"🧑 ⚽️ 🧑 ",
"🧑 ⚽️🧑 ",
"🧑 ⚽️ 🧑 ",
"🧑 ⚽️ 🧑 ",
"🧑 ⚽️ 🧑 ",
"🧑 ⚽️ 🧑 ",
"🧑 ⚽️ 🧑 ",
),
0.08,
),
"mindblown": SpinnerPreset(
(
"😐 ",
"😐 ",
"😮 ",
"😮 ",
"😦 ",
"😦 ",
"😧 ",
"😧 ",
"🤯 ",
"💥 ",
"✨ ",
"\u3000 ",
"\u3000 ",
"\u3000 ",
),
0.16,
),
"speaker": SpinnerPreset(("🔈 ", "🔉 ", "🔊 ", "🔉 "), 0.16),
"orangePulse": SpinnerPreset(("🔸 ", "🔶 ", "🟠 ", "🟠 ", "🔶 "), 0.1),
"bluePulse": SpinnerPreset(("🔹 ", "🔷 ", "🔵 ", "🔵 ", "🔷 "), 0.1),
"orangeBluePulse": SpinnerPreset(
("🔸 ", "🔶 ", "🟠 ", "🟠 ", "🔶 ", "🔹 ", "🔷 ", "🔵 ", "🔵 ", "🔷 "), 0.1
),
"timeTravel": SpinnerPreset(
(
"🕛 ",
"🕚 ",
"🕙 ",
"🕘 ",
"🕗 ",
"🕖 ",
"🕕 ",
"🕔 ",
"🕓 ",
"🕒 ",
"🕑 ",
"🕐 ",
),
0.1,
),
"aesthetic": SpinnerPreset(
(
"▰▱▱▱▱▱▱",
"▰▰▱▱▱▱▱",
"▰▰▰▱▱▱▱",
"▰▰▰▰▱▱▱",
"▰▰▰▰▰▱▱",
"▰▰▰▰▰▰▱",
"▰▰▰▰▰▰▰",
"▰▱▱▱▱▱▱",
),
0.08,
),
"dwarfFortress": SpinnerPreset(
(
" ██████£££ ",
"☺██████£££ ",
"☺██████£££ ",
"☺▓█████£££ ",
"☺▓█████£££ ",
"☺▒█████£££ ",
"☺▒█████£££ ",
"☺░█████£££ ",
"☺░█████£££ ",
"☺ █████£££ ",
" ☺█████£££ ",
" ☺█████£££ ",
" ☺▓████£££ ",
" ☺▓████£££ ",
" ☺▒████£££ ",
" ☺▒████£££ ",
" ☺░████£££ ",
" ☺░████£££ ",
" ☺ ████£££ ",
" ☺████£££ ",
" ☺████£££ ",
" ☺▓███£££ ",
" ☺▓███£££ ",
" ☺▒███£££ ",
" ☺▒███£££ ",
" ☺░███£££ ",
" ☺░███£££ ",
" ☺ ███£££ ",
" ☺███£££ ",
" ☺███£££ ",
" ☺▓██£££ ",
" ☺▓██£££ ",
" ☺▒██£££ ",
" ☺▒██£££ ",
" ☺░██£££ ",
" ☺░██£££ ",
" ☺ ██£££ ",
" ☺██£££ ",
" ☺██£££ ",
" ☺▓█£££ ",
" ☺▓█£££ ",
" ☺▒█£££ ",
" ☺▒█£££ ",
" ☺░█£££ ",
" ☺░█£££ ",
" ☺ █£££ ",
" ☺█£££ ",
" ☺█£££ ",
" ☺▓£££ ",
" ☺▓£££ ",
" ☺▒£££ ",
" ☺▒£££ ",
" ☺░£££ ",
" ☺░£££ ",
" ☺ £££ ",
" ☺£££ ",
" ☺£££ ",
" ☺▓££ ",
" ☺▓££ ",
" ☺▒££ ",
" ☺▒££ ",
" ☺░££ ",
" ☺░££ ",
" ☺ ££ ",
" ☺££ ",
" ☺££ ",
" ☺▓£ ",
" ☺▓£ ",
" ☺▒£ ",
" ☺▒£ ",
" ☺░£ ",
" ☺░£ ",
" ☺ £ ",
" ☺£ ",
" ☺£ ",
" ☺▓ ",
" ☺▓ ",
" ☺▒ ",
" ☺▒ ",
" ☺░ ",
" ☺░ ",
" ☺ ",
" ☺ &",
" ☺ ☼&",
" ☺ ☼ &",
" ☺☼ &",
" ☺☼ & ",
" ‼ & ",
" ☺ & ",
" ‼ & ",
" ☺ & ",
" ‼ & ",
" ☺ & ",
"‼ & ",
" & ",
" & ",
" & ░ ",
" & ▒ ",
" & ▓ ",
" & £ ",
" & ░£ ",
" & ▒£ ",
" & ▓£ ",
" & ££ ",
" & ░££ ",
" & ▒££ ",
"& ▓££ ",
"& £££ ",
" ░£££ ",
" ▒£££ ",
" ▓£££ ",
" █£££ ",
" ░█£££ ",
" ▒█£££ ",
" ▓█£££ ",
" ██£££ ",
" ░██£££ ",
" ▒██£££ ",
" ▓██£££ ",
" ███£££ ",
" ░███£££ ",
" ▒███£££ ",
" ▓███£££ ",
" ████£££ ",
" ░████£££ ",
" ▒████£££ ",
" ▓████£££ ",
" █████£££ ",
" ░█████£££ ",
" ▒█████£££ ",
" ▓█████£££ ",
" ██████£££ ",
" ██████£££ ",
),
0.08,
),
"fish": SpinnerPreset(
(
"~~~~~~~~~~~~~~~~~~~~",
"> ~~~~~~~~~~~~~~~~~~",
"º> ~~~~~~~~~~~~~~~~~",
"(º> ~~~~~~~~~~~~~~~~",
"((º> ~~~~~~~~~~~~~~~",
"<((º> ~~~~~~~~~~~~~~",
"><((º> ~~~~~~~~~~~~~",
" ><((º> ~~~~~~~~~~~~",
"~ ><((º> ~~~~~~~~~~~",
"~~ <>((º> ~~~~~~~~~~",
"~~~ ><((º> ~~~~~~~~~",
"~~~~ <>((º> ~~~~~~~~",
"~~~~~ ><((º> ~~~~~~~",
"~~~~~~ <>((º> ~~~~~~",
"~~~~~~~ ><((º> ~~~~~",
"~~~~~~~~ <>((º> ~~~~",
"~~~~~~~~~ ><((º> ~~~",
"~~~~~~~~~~ <>((º> ~~",
"~~~~~~~~~~~ ><((º> ~",
"~~~~~~~~~~~~ <>((º> ",
"~~~~~~~~~~~~~ ><((º>",
"~~~~~~~~~~~~~~ <>((º",
"~~~~~~~~~~~~~~~ ><((",
"~~~~~~~~~~~~~~~~ <>(",
"~~~~~~~~~~~~~~~~~ ><",
"~~~~~~~~~~~~~~~~~~ <",
"~~~~~~~~~~~~~~~~~~~~",
),
0.08,
),
}
"""Named spinner animations ported from cli-spinners, keyed by name.
Each value is a {class}`SpinnerPreset` bundling frames and a tuned interval.
Select one with {class}`~click_extra.spinner.Spinner`'s `spinner` argument::
from click_extra import Spinner, SPINNERS
with Spinner("Brewing tea", spinner=SPINNERS["moon"]):
...
Unlike the upstream `\\b`-based renderers, {class}`~click_extra.spinner.Spinner` redraws the whole
line, so the multi-character animations (`bouncingBar`, `pong`, `shark`, …)
render correctly here.
"""