Skip to main content

spinoff/
spinners.rs

1#[allow(unused_imports)]
2use once_cell::sync::Lazy;
3use paste::paste;
4
5/// A Struct that contains the data for a spinner.
6/// Frames is a Vec of &str, each &str is a frame of the spinner.
7/// Interval is the number of milliseconds to wait before moving to the next frame.
8#[derive(Debug, Clone)]
9pub struct SpinnerFrames {
10    pub frames: Vec<&'static str>,
11    pub interval: u16,
12}
13
14macro_rules! spinner_frames {
15  ( $name:expr, [ $( $frame:expr ),* ], $interval:expr ) => {
16      paste! {
17          #[cfg(feature = $name)]
18          pub struct [< $name:camel >];
19
20          #[cfg(feature = $name)]
21          impl From<[< $name:camel >]> for SpinnerFrames {
22              fn from(_: [< $name:camel >]) -> SpinnerFrames {
23                  #[cfg(feature = $name)]
24                  [< $name:upper >].clone()
25              }
26          }
27
28          #[cfg(feature = $name)]
29          static [< $name:upper >]: Lazy<SpinnerFrames>
30              = Lazy::new(|| SpinnerFrames {
31                  interval: $interval,
32                  frames: vec![$($frame),*]
33          });
34      }
35  };
36}
37
38spinner_frames!(
39    "dots",
40    ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"],
41    80
42);
43
44spinner_frames!("dots2", ["⣾", "⣽", "⣻", "⢿", "⡿", "⣟", "⣯", "⣷"], 80);
45
46spinner_frames!(
47    "dots3",
48    ["⠋", "⠙", "⠚", "⠞", "⠖", "⠦", "⠴", "⠲", "⠳", "⠓"],
49    80
50);
51
52spinner_frames!(
53    "dots4",
54    [
55        "⠄", "⠆", "⠇", "⠋", "⠙", "⠸", "⠰", "⠠", "⠰", "⠸", "⠙", "⠋", "⠇", "⠆"
56    ],
57    80
58);
59
60spinner_frames!(
61    "dots5",
62    [
63        "⠋", "⠙", "⠚", "⠒", "⠂", "⠂", "⠒", "⠲", "⠴", "⠦", "⠖", "⠒", "⠐", "⠐", "⠒", "⠓", "⠋"
64    ],
65    80
66);
67
68spinner_frames!(
69    "dots6",
70    [
71        "⠁", "⠉", "⠙", "⠚", "⠒", "⠂", "⠂", "⠒", "⠲", "⠴", "⠤", "⠄", "⠄", "⠤", "⠴", "⠲", "⠒", "⠂",
72        "⠂", "⠒", "⠚", "⠙", "⠉", "⠁"
73    ],
74    80
75);
76
77spinner_frames!(
78    "dots7",
79    [
80        "⠈", "⠉", "⠋", "⠓", "⠒", "⠐", "⠐", "⠒", "⠖", "⠦", "⠤", "⠠", "⠠", "⠤", "⠦", "⠖", "⠒", "⠐",
81        "⠐", "⠒", "⠓", "⠋", "⠉", "⠈"
82    ],
83    80
84);
85spinner_frames!(
86    "dots8",
87    [
88        "⠁", "⠁", "⠉", "⠙", "⠚", "⠒", "⠂", "⠂", "⠒", "⠲", "⠴", "⠤", "⠄", "⠄", "⠤", "⠠", "⠠", "⠤",
89        "⠦", "⠖", "⠒", "⠐", "⠐", "⠒", "⠓", "⠋", "⠉", "⠈", "⠈"
90    ],
91    80
92);
93spinner_frames!("dots9", ["⢹", "⢺", "⢼", "⣸", "⣇", "⡧", "⡗", "⡏"], 80);
94spinner_frames!("dots10", ["⢄", "⢂", "⢁", "⡁", "⡈", "⡐", "⡠"], 80);
95spinner_frames!("dots11", ["⠁", "⠂", "⠄", "⡀", "⢀", "⠠", "⠐", "⠈"], 80);
96spinner_frames!(
97    "dots12",
98    [
99        "⢀⠀", "⡀⠀", "⠄⠀", "⢂⠀", "⡂⠀", "⠅⠀", "⢃⠀", "⡃⠀", "⠍⠀", "⢋⠀", "⡋⠀", "⠍⠁", "⢋⠁", "⡋⠁", "⠍⠉",
100        "⠋⠉", "⠋⠉", "⠉⠙", "⠉⠙", "⠉⠩", "⠈⢙", "⠈⡙", "⢈⠩", "⡀⢙", "⠄⡙", "⢂⠩", "⡂⢘", "⠅⡘", "⢃⠨", "⡃⢐",
101        "⠍⡐", "⢋⠠", "⡋⢀", "⠍⡁", "⢋⠁", "⡋⠁", "⠍⠉", "⠋⠉", "⠋⠉", "⠉⠙", "⠉⠙", "⠉⠩", "⠈⢙", "⠈⡙", "⠈⠩",
102        "⠀⢙", "⠀⡙", "⠀⠩", "⠀⢘", "⠀⡘", "⠀⠨", "⠀⢐", "⠀⡐", "⠀⠠", "⠀⢀", "⠀⡀"
103    ],
104    80
105);
106spinner_frames!(
107    "dots8bit",
108    [
109        "⠀", "⠁", "⠂", "⠃", "⠄", "⠅", "⠆", "⠇", "⡀", "⡁", "⡂", "⡃", "⡄", "⡅", "⡆", "⡇", "⠈", "⠉",
110        "⠊", "⠋", "⠌", "⠍", "⠎", "⠏", "⡈", "⡉", "⡊", "⡋", "⡌", "⡍", "⡎", "⡏", "⠐", "⠑", "⠒", "⠓",
111        "⠔", "⠕", "⠖", "⠗", "⡐", "⡑", "⡒", "⡓", "⡔", "⡕", "⡖", "⡗", "⠘", "⠙", "⠚", "⠛", "⠜", "⠝",
112        "⠞", "⠟", "⡘", "⡙", "⡚", "⡛", "⡜", "⡝", "⡞", "⡟", "⠠", "⠡", "⠢", "⠣", "⠤", "⠥", "⠦", "⠧",
113        "⡠", "⡡", "⡢", "⡣", "⡤", "⡥", "⡦", "⡧", "⠨", "⠩", "⠪", "⠫", "⠬", "⠭", "⠮", "⠯", "⡨", "⡩",
114        "⡪", "⡫", "⡬", "⡭", "⡮", "⡯", "⠰", "⠱", "⠲", "⠳", "⠴", "⠵", "⠶", "⠷", "⡰", "⡱", "⡲", "⡳",
115        "⡴", "⡵", "⡶", "⡷", "⠸", "⠹", "⠺", "⠻", "⠼", "⠽", "⠾", "⠿", "⡸", "⡹", "⡺", "⡻", "⡼", "⡽",
116        "⡾", "⡿", "⢀", "⢁", "⢂", "⢃", "⢄", "⢅", "⢆", "⢇", "⣀", "⣁", "⣂", "⣃", "⣄", "⣅", "⣆", "⣇",
117        "⢈", "⢉", "⢊", "⢋", "⢌", "⢍", "⢎", "⢏", "⣈", "⣉", "⣊", "⣋", "⣌", "⣍", "⣎", "⣏", "⢐", "⢑",
118        "⢒", "⢓", "⢔", "⢕", "⢖", "⢗", "⣐", "⣑", "⣒", "⣓", "⣔", "⣕", "⣖", "⣗", "⢘", "⢙", "⢚", "⢛",
119        "⢜", "⢝", "⢞", "⢟", "⣘", "⣙", "⣚", "⣛", "⣜", "⣝", "⣞", "⣟", "⢠", "⢡", "⢢", "⢣", "⢤", "⢥",
120        "⢦", "⢧", "⣠", "⣡", "⣢", "⣣", "⣤", "⣥", "⣦", "⣧", "⢨", "⢩", "⢪", "⢫", "⢬", "⢭", "⢮", "⢯",
121        "⣨", "⣩", "⣪", "⣫", "⣬", "⣭", "⣮", "⣯", "⢰", "⢱", "⢲", "⢳", "⢴", "⢵", "⢶", "⢷", "⣰", "⣱",
122        "⣲", "⣳", "⣴", "⣵", "⣶", "⣷", "⢸", "⢹", "⢺", "⢻", "⢼", "⢽", "⢾", "⢿", "⣸", "⣹", "⣺", "⣻",
123        "⣼", "⣽", "⣾", "⣿"
124    ],
125    80
126);
127
128spinner_frames!("line", ["-", "\\", "|", "/"], 130);
129
130spinner_frames!("line2", ["⠂", "-", "–", "—", "–", "-"], 100);
131
132spinner_frames!("pipe", ["┤", "┘", "┴", "└", "├", "┌", "┬", "┐"], 100);
133
134spinner_frames!("simple_dots", [".  ", ".. ", "...", "   "], 400);
135
136spinner_frames!(
137    "simple_dots_scrolling",
138    [".  ", ".. ", "...", " ..", "  .", "   "],
139    200
140);
141
142spinner_frames!("star", ["✶", "✸", "✹", "✺", "✹", "✷"], 70);
143
144spinner_frames!("star2", ["+", "x", "*"], 80);
145
146spinner_frames!(
147    "flip",
148    ["_", "_", "_", "-", "`", "`", "'", "´", "-", "_", "_", "_"],
149    70
150);
151
152spinner_frames!("hamburger", ["☱", "☲", "☴"], 100);
153
154spinner_frames!(
155    "grow_vertical",
156    ["▁", "▃", "▄", "▅", "▆", "▇", "▆", "▅", "▄", "▃"],
157    120
158);
159
160spinner_frames!(
161    "grow_horizontal",
162    ["▏", "▎", "▍", "▌", "▋", "▊", "▉", "▊", "▋", "▌", "▍", "▎"],
163    120
164);
165
166spinner_frames!("balloon", [" ", ".", "o", "O", "@", "*", " "], 140);
167
168spinner_frames!("balloon2", [".", "o", "O", "°", "O", "o", "."], 120);
169
170spinner_frames!("noise", ["▓", "▒", "░"], 100);
171
172spinner_frames!("bounce", ["⠁", "⠂", "⠄", "⠂"], 120);
173
174spinner_frames!("box_bounce", ["▖", "▘", "▝", "▗"], 120);
175
176spinner_frames!("box_bounce2", ["▌", "▀", "▐", "▄"], 100);
177
178spinner_frames!("triangle", ["◢", "◣", "◤", "◥"], 50);
179
180spinner_frames!("arc", ["◜", "◠", "◝", "◞", "◡", "◟"], 100);
181
182spinner_frames!("circle", ["◡", "⊙", "◠"], 120);
183
184spinner_frames!("square_corners", ["◰", "◳", "◲", "◱"], 180);
185
186spinner_frames!("circle_quarters", ["◴", "◷", "◶", "◵"], 120);
187
188spinner_frames!("circle_halves", ["◐", "◓", "◑", "◒"], 50);
189
190spinner_frames!("squish", ["╫", "╪"], 100);
191
192spinner_frames!("toggle", ["⊶", "⊷"], 250);
193
194spinner_frames!("toggle2", ["▫", "▪"], 80);
195
196spinner_frames!("toggle3", ["□", "■"], 120);
197
198spinner_frames!("toggle4", ["■", "□", "▪", "▫"], 100);
199
200spinner_frames!("toggle5", ["▮", "▯"], 100);
201
202spinner_frames!("toggle6", ["ဝ", "၀"], 300);
203
204spinner_frames!("toggle7", ["⦾", "⦿"], 80);
205
206spinner_frames!("toggle8", ["◍", "◌"], 100);
207
208spinner_frames!("toggle9", ["◉", "◎"], 100);
209
210spinner_frames!("toggle10", ["㊂", "㊀", "㊁"], 100);
211
212spinner_frames!("toggle11", ["⧇", "⧆"], 50);
213
214spinner_frames!("toggle12", ["☗", "☖"], 120);
215
216spinner_frames!("toggle13", ["=", "*", "-"], 80);
217
218spinner_frames!("arrow", ["←", "↖", "↑", "↗", "→", "↘", "↓", "↙"], 100);
219
220spinner_frames!(
221    "arrow2",
222    ["⬆️ ", "↗️ ", "➡️ ", "↘️ ", "⬇️ ", "↙️ ", "⬅️ ", "↖️ "],
223    80
224);
225
226spinner_frames!(
227    "arrow3",
228    ["▹▹▹▹▹", "▸▹▹▹▹", "▹▸▹▹▹", "▹▹▸▹▹", "▹▹▹▸▹", "▹▹▹▹▸"],
229    120
230);
231
232spinner_frames!(
233    "bouncing_bar",
234    [
235        "[    ]", "[=   ]", "[==  ]", "[=== ]", "[ ===]", "[  ==]", "[   =]", "[    ]", "[   =]",
236        "[  ==]", "[ ===]", "[====]", "[=== ]", "[==  ]", "[=   ]"
237    ],
238    80
239);
240
241spinner_frames!(
242    "bouncing_ball",
243    [
244        "( ●    )",
245        "(  ●   )",
246        "(   ●  )",
247        "(    ● )",
248        "(     ●)",
249        "(    ● )",
250        "(   ●  )",
251        "(  ●   )",
252        "( ●    )",
253        "(●     )"
254    ],
255    80
256);
257
258spinner_frames!("smiley", ["😄 ", "😝 "], 200);
259
260spinner_frames!("monkey", ["🙈 ", "🙈 ", "🙉 ", "🙊 "], 300);
261
262spinner_frames!("hearts", ["💛 ", "💙 ", "💜 ", "💚 ", "❤️ "], 100);
263
264spinner_frames!(
265    "clock",
266    ["🕛 ", "🕐 ", "🕑 ", "🕒 ", "🕓 ", "🕔 ", "🕕 "],
267    100
268);
269
270spinner_frames!(
271    "material",
272    [
273        "█▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁",
274        "██▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁",
275        "███▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁",
276        "████▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁",
277        "██████▁▁▁▁▁▁▁▁▁▁▁▁▁▁",
278        "██████▁▁▁▁▁▁▁▁▁▁▁▁▁▁",
279        "███████▁▁▁▁▁▁▁▁▁▁▁▁▁",
280        "████████▁▁▁▁▁▁▁▁▁▁▁▁",
281        "█████████▁▁▁▁▁▁▁▁▁▁▁",
282        "█████████▁▁▁▁▁▁▁▁▁▁▁",
283        "██████████▁▁▁▁▁▁▁▁▁▁",
284        "███████████▁▁▁▁▁▁▁▁▁",
285        "█████████████▁▁▁▁▁▁▁",
286        "██████████████▁▁▁▁▁▁",
287        "██████████████▁▁▁▁▁▁",
288        "▁██████████████▁▁▁▁▁",
289        "▁██████████████▁▁▁▁▁",
290        "▁██████████████▁▁▁▁▁",
291        "▁▁██████████████▁▁▁▁",
292        "▁▁▁██████████████▁▁▁",
293        "▁▁▁▁█████████████▁▁▁",
294        "▁▁▁▁██████████████▁▁",
295        "▁▁▁▁██████████████▁▁",
296        "▁▁▁▁▁██████████████▁",
297        "▁▁▁▁▁██████████████▁",
298        "▁▁▁▁▁██████████████▁",
299        "▁▁▁▁▁▁██████████████",
300        "▁▁▁▁▁▁██████████████",
301        "▁▁▁▁▁▁▁█████████████",
302        "▁▁▁▁▁▁▁█████████████",
303        "▁▁▁▁▁▁▁▁████████████",
304        "▁▁▁▁▁▁▁▁████████████",
305        "▁▁▁▁▁▁▁▁▁███████████",
306        "▁▁▁▁▁▁▁▁▁███████████",
307        "▁▁▁▁▁▁▁▁▁▁██████████",
308        "▁▁▁▁▁▁▁▁▁▁██████████",
309        "▁▁▁▁▁▁▁▁▁▁▁▁████████",
310        "▁▁▁▁▁▁▁▁▁▁▁▁▁███████",
311        "▁▁▁▁▁▁▁▁▁▁▁▁▁▁██████",
312        "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█████",
313        "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█████",
314        "█▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁████",
315        "██▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁███",
316        "██▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁███",
317        "███▁▁▁▁▁▁▁▁▁▁▁▁▁▁███",
318        "████▁▁▁▁▁▁▁▁▁▁▁▁▁▁██",
319        "█████▁▁▁▁▁▁▁▁▁▁▁▁▁▁█",
320        "█████▁▁▁▁▁▁▁▁▁▁▁▁▁▁█",
321        "██████▁▁▁▁▁▁▁▁▁▁▁▁▁█",
322        "████████▁▁▁▁▁▁▁▁▁▁▁▁",
323        "█████████▁▁▁▁▁▁▁▁▁▁▁",
324        "█████████▁▁▁▁▁▁▁▁▁▁▁",
325        "█████████▁▁▁▁▁▁▁▁▁▁▁",
326        "█████████▁▁▁▁▁▁▁▁▁▁▁",
327        "███████████▁▁▁▁▁▁▁▁▁",
328        "████████████▁▁▁▁▁▁▁▁",
329        "████████████▁▁▁▁▁▁▁▁",
330        "██████████████▁▁▁▁▁▁",
331        "██████████████▁▁▁▁▁▁",
332        "▁██████████████▁▁▁▁▁",
333        "▁██████████████▁▁▁▁▁",
334        "▁▁▁█████████████▁▁▁▁",
335        "▁▁▁▁▁████████████▁▁▁",
336        "▁▁▁▁▁████████████▁▁▁",
337        "▁▁▁▁▁▁███████████▁▁▁",
338        "▁▁▁▁▁▁▁▁█████████▁▁▁",
339        "▁▁▁▁▁▁▁▁█████████▁▁▁",
340        "▁▁▁▁▁▁▁▁▁█████████▁▁",
341        "▁▁▁▁▁▁▁▁▁█████████▁▁",
342        "▁▁▁▁▁▁▁▁▁▁█████████▁",
343        "▁▁▁▁▁▁▁▁▁▁▁████████▁",
344        "▁▁▁▁▁▁▁▁▁▁▁████████▁",
345        "▁▁▁▁▁▁▁▁▁▁▁▁███████▁",
346        "▁▁▁▁▁▁▁▁▁▁▁▁███████▁",
347        "▁▁▁▁▁▁▁▁▁▁▁▁▁███████",
348        "▁▁▁▁▁▁▁▁▁▁▁▁▁███████",
349        "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█████",
350        "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁████",
351        "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁████",
352        "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁████",
353        "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁███",
354        "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁███",
355        "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁██",
356        "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁██",
357        "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁██",
358        "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█",
359        "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█",
360        "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁█",
361        "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁",
362        "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁",
363        "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁",
364        "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁"
365    ],
366    17
367);
368
369spinner_frames!("earth", ["🌍 ", "🌎 ", "🌏 "], 180);
370
371spinner_frames!(
372    "moon",
373    ["🌑 ", "🌒 ", "🌓 ", "🌔 ", "🌕 ", "🌖 ", "🌗 ", "🌘 "],
374    80
375);
376
377spinner_frames!("runner", ["🚶 ", "🏃 "], 140);
378
379spinner_frames!(
380    "pong",
381    [
382        "▐⠂       ▌",
383        "▐⠈       ▌",
384        "▐ ⠂      ▌",
385        "▐ ⠠      ▌",
386        "▐  ⡀     ▌",
387        "▐  ⠠     ▌",
388        "▐   ⠂    ▌",
389        "▐   ⠈    ▌",
390        "▐    ⠂   ▌",
391        "▐    ⠠   ▌",
392        "▐     ⡀  ▌",
393        "▐     ⠠  ▌",
394        "▐      ⠂ ▌",
395        "▐      ⠈ ▌",
396        "▐       ⠂▌",
397        "▐       ⠠▌",
398        "▐       ⡀▌",
399        "▐      ⠠ ▌",
400        "▐      ⠂ ▌",
401        "▐     ⠈  ▌",
402        "▐     ⠂  ▌",
403        "▐    ⠠   ▌",
404        "▐    ⡀   ▌",
405        "▐   ⠠    ▌",
406        "▐   ⠂    ▌",
407        "▐  ⠈     ▌",
408        "▐  ⠂     ▌",
409        "▐ ⠠      ▌",
410        "▐ ⡀      ▌",
411        "▐⠠       ▌"
412    ],
413    80
414);
415
416spinner_frames!(
417    "shark",
418    [
419        "▐|\\____________▌",
420        "▐_|\\___________▌",
421        "▐__|\\__________▌",
422        "▐___|\\_________▌",
423        "▐____|\\________▌",
424        "▐_____|\\_______▌",
425        "▐______|\\______▌",
426        "▐_______|\\_____▌",
427        "▐________|\\____▌",
428        "▐_________|\\___▌",
429        "▐__________|\\__▌",
430        "▐___________|\\_▌",
431        "▐____________|\\▌",
432        "▐____________/|▌",
433        "▐___________/|_▌",
434        "▐__________/|__▌",
435        "▐_________/|___▌",
436        "▐________/|____▌",
437        "▐_______/|_____▌",
438        "▐______/|______▌",
439        "▐_____/|_______▌",
440        "▐____/|________▌",
441        "▐___/|_________▌",
442        "▐__/|__________▌",
443        "▐_/|___________▌",
444        "▐/|____________▌"
445    ],
446    120
447);
448
449spinner_frames!("dqpb", ["d", "q", "p", "b"], 100);
450
451spinner_frames!(
452    "weather",
453    [
454        "☀️ ", "☀️ ", "☀️ ", "🌤 ", "⛅️ ", "🌥 ", "☁️ ", "🌧 ", "🌨 ", "🌧 ", "🌨 ", "🌧 ", "🌨 ", "⛈ ", "🌨 ",
455        "🌧 ", "🌨 ", "☁️ ", "🌥 ", "⛅️ ", "🌤 ", "☀️ ", "☀️ "
456    ],
457    100
458);
459
460spinner_frames!("christmas", ["🌲", "🎄"], 400);
461
462spinner_frames!(
463    "grenade",
464    [
465        "،  ", "′  ", " ´ ", " ‾ ", "  ⸌", "  ⸊", "  |", "  ⁎", "  ⁕", " ෴ ", "  ⁓", "   ", "   ",
466        "   "
467    ],
468    80
469);
470
471spinner_frames!("point", ["∙∙∙", "●∙∙", "∙●∙", "∙∙●", "∙∙∙"], 125);
472
473spinner_frames!("layer", ["-", "=", "≡"], 150);
474
475spinner_frames!(
476    "beta_wave",
477    [
478        "ρββββββ",
479        "βρβββββ",
480        "ββρββββ",
481        "βββρβββ",
482        "ββββρββ",
483        "βββββρβ",
484        "ββββββρ"
485    ],
486    80
487);
488
489spinner_frames!(
490    "finger_dance",
491    ["🤘 ", "🤟 ", "🖖 ", "✋ ", "🤚 ", "👆 "],
492    160
493);
494
495spinner_frames!(
496    "fist_bump",
497    [
498        "🤜    🤛 ",
499        "🤜    🤛 ",
500        "🤜    🤛 ",
501        " 🤜  🤛  ",
502        "  🤜🤛   ",
503        " 🤜✨🤛   ",
504        "🤜 ✨ 🤛  "
505    ],
506    80
507);
508
509spinner_frames!(
510    "soccer_header",
511    [
512        " 🧑⚽️       🧑 ",
513        "🧑  ⚽️      🧑 ",
514        "🧑   ⚽️     🧑 ",
515        "🧑    ⚽️    🧑 ",
516        "🧑     ⚽️   🧑 ",
517        "🧑      ⚽️  🧑 ",
518        "🧑       ⚽️🧑  ",
519        "🧑      ⚽️  🧑 ",
520        "🧑     ⚽️   🧑 ",
521        "🧑    ⚽️    🧑 ",
522        "🧑   ⚽️     🧑 ",
523        "🧑  ⚽️      🧑 "
524    ],
525    80
526);
527
528spinner_frames!(
529    "mindblown",
530    [
531        "😐 ", "😐 ", "😮 ", "😮 ", "😦 ", "😦 ", "😧 ", "😧 ", "🤯 ", "💥 ", "✨ ", "  ", "  ",
532        "  "
533    ],
534    160
535);
536
537spinner_frames!("speaker", ["🔈 ", "🔉 ", "🔊 ", "🔉 "], 160);
538
539spinner_frames!("orange_pulse", ["🔸 ", "🔶 ", "🟠 ", "🟠 ", "🔶 "], 100);
540 
541spinner_frames!("blue_pulse", ["🔹 ", "🔷 ", "🔵 ", "🔵 ", "🔷 "], 100);
542
543spinner_frames!(
544    "orange_blue_pulse",
545    ["🔸 ", "🔶 ", "🟠 ", "🟠 ", "🔶 ", "🔹 ", "🔷 ", "🔵 ", "🔵 ", "🔷 "],
546    100
547);
548
549spinner_frames!(
550    "time_travel",
551    [
552        "🕛 ", "🕚 ", "🕙 ", "🕘 ", "🕗 ", "🕖 ", "🕕 ", "🕔 ", "🕓 ", "🕒 ", "🕑 ", "🕐 "
553    ],
554    100
555);
556
557spinner_frames!(
558    "aesthetic",
559    [
560        "▰▱▱▱▱▱▱",
561        "▰▰▱▱▱▱▱",
562        "▰▰▰▱▱▱▱",
563        "▰▰▰▰▱▱▱",
564        "▰▰▰▰▰▱▱",
565        "▰▰▰▰▰▰▱",
566        "▰▰▰▰▰▰▰",
567        "▰▱▱▱▱▱▱"
568    ],
569    80
570);
571
572spinner_frames!(
573    "binary",
574    ["010010", "001100", "100101", "111010", "111101", "010111"],
575    50
576);
577
578spinner_frames!(
579    "cute",
580    [
581        "( ´・ω・)",
582        "( ´・ω)",
583        "(  ´・)",
584        "(   ´)",
585        "(     )",
586        "(`   )",
587        "(・`   )",
588        "(ω・` )",
589        "(・ω・` )",
590        "(´・ω・`)"
591    ],
592    100
593);