@reliverse/rempts 1.7.56 → 1.7.58
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -7
- package/bin/libs/input/input-mod.js +1 -1
- package/bin/libs/intro/intro-mod.js +1 -1
- package/bin/libs/msg-fmt/messages.js +1 -1
- package/bin/libs/select/select-prompt.js +3 -0
- package/bin/libs/spinner/spinner-mod.d.ts +255 -101
- package/bin/libs/spinner/spinner-mod.js +430 -231
- package/bin/libs/utils/prompt-end.js +3 -1
- package/bin/libs/utils/system.d.ts +1 -1
- package/bin/libs/utils/system.js +1 -1
- package/bin/mod.d.ts +2 -5
- package/bin/mod.js +25 -9
- package/bin/types.d.ts +4 -3
- package/package.json +6 -4
- package/bin/libs/msg-fmt/logger.d.ts +0 -17
- package/bin/libs/msg-fmt/logger.js +0 -103
- package/bin/libs/spinner/spinner-alias.d.ts +0 -2
- package/bin/libs/spinner/spinner-alias.js +0 -2
- package/bin/libs/task/progress.d.ts +0 -2
- package/bin/libs/task/progress.js +0 -57
- package/bin/libs/task/task-spin.d.ts +0 -15
- package/bin/libs/task/task-spin.js +0 -106
package/README.md
CHANGED
|
@@ -52,10 +52,10 @@ All main prompts APIs are available from the package root:
|
|
|
52
52
|
import {
|
|
53
53
|
// ...prompts
|
|
54
54
|
inputPrompt, selectPrompt, multiselectPrompt, numberPrompt,
|
|
55
|
-
confirmPrompt, togglePrompt,
|
|
55
|
+
confirmPrompt, togglePrompt,
|
|
56
56
|
startPrompt, endPrompt, resultPrompt, nextStepsPrompt,
|
|
57
57
|
// ...hooks
|
|
58
|
-
|
|
58
|
+
createSpinner,
|
|
59
59
|
// ...launcher
|
|
60
60
|
createCli, defineCommand, defineArgs,
|
|
61
61
|
// ...types
|
|
@@ -71,18 +71,16 @@ import {
|
|
|
71
71
|
|
|
72
72
|
| Prompt | Description |
|
|
73
73
|
|---------------------------|-----------------------------------------------------------|
|
|
74
|
-
| `
|
|
74
|
+
| `createSpinner` | Start/stop spinner |
|
|
75
75
|
| `inputPrompt` | Single-line input (with mask support, e.g. for passwords) |
|
|
76
76
|
| `selectPrompt` | Single-choice radio menu |
|
|
77
77
|
| `multiselectPrompt` | Multi-choice checkbox menu |
|
|
78
78
|
| `numberPrompt` | Type-safe number input |
|
|
79
79
|
| `confirmPrompt` | Yes/No toggle |
|
|
80
80
|
| `togglePrompt` | Custom on/off toggles |
|
|
81
|
-
| `taskProgressPrompt` | Progress bar for async tasks |
|
|
82
81
|
| `resultPrompt` | Show results in a styled box |
|
|
83
82
|
| `nextStepsPrompt` | Show next steps in a styled list |
|
|
84
83
|
| `startPrompt`/`endPrompt` | Makes CLI start/end flows look nice |
|
|
85
|
-
| `taskSpinPrompt` | Async loader with spinner (possibly will be deprecated) |
|
|
86
84
|
| `datePrompt` | Date input with format validation |
|
|
87
85
|
| `anykeyPrompt` | Wait for any keypress |
|
|
88
86
|
|
|
@@ -95,7 +93,7 @@ To help you migrate from the different CLI frameworks, `@reliverse/rempts` has s
|
|
|
95
93
|
| `createCli` | `runMain` |
|
|
96
94
|
| `onCmdInit` | `setup` |
|
|
97
95
|
| `onCmdExit` | `cleanup` |
|
|
98
|
-
| `
|
|
96
|
+
| `createSpinner` | `spinner` |
|
|
99
97
|
| `selectPrompt` | `select` |
|
|
100
98
|
| `multiselectPrompt` | `multiselect` |
|
|
101
99
|
| `inputPrompt` | `text`, `input` |
|
|
@@ -125,7 +123,7 @@ async function main() {
|
|
|
125
123
|
defaultValue: "my-cool-project",
|
|
126
124
|
});
|
|
127
125
|
|
|
128
|
-
const spinner =
|
|
126
|
+
const spinner = createSpinner({
|
|
129
127
|
text: "Loading...",
|
|
130
128
|
indicator: "timer", // or "dots"
|
|
131
129
|
frames: ["◒", "◐", "◓", "◑"], // custom frames
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import readline from "node:readline/promises";
|
|
2
2
|
import { re } from "@reliverse/relico";
|
|
3
|
-
import { isUnicodeSupported } from "@reliverse/
|
|
3
|
+
import { isUnicodeSupported } from "@reliverse/reltime";
|
|
4
4
|
import { bar, msg, msgUndoAll } from "../msg-fmt/messages.js";
|
|
5
5
|
import { deleteLastLine } from "../msg-fmt/terminal.js";
|
|
6
6
|
import { completePrompt } from "../utils/prompt-end.js";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { relinka } from "@reliverse/relinka";
|
|
2
|
-
import { getCurrentTerminalName } from "@reliverse/
|
|
2
|
+
import { getCurrentTerminalName } from "@reliverse/reltime";
|
|
3
3
|
import { msg } from "../msg-fmt/messages.js";
|
|
4
4
|
import { getExactTerminalWidth, getTerminalHeight, getTerminalWidth } from "../msg-fmt/terminal.js";
|
|
5
5
|
import {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { re } from "@reliverse/relico";
|
|
2
2
|
import { relinka } from "@reliverse/relinka";
|
|
3
|
-
import { isUnicodeSupported } from "@reliverse/
|
|
3
|
+
import { isUnicodeSupported } from "@reliverse/reltime";
|
|
4
4
|
import wrapAnsi from "wrap-ansi";
|
|
5
5
|
import { colorMap, typographyMap } from "./mapping.js";
|
|
6
6
|
import { deleteLastLines, getExactTerminalWidth, getTerminalWidth } from "./terminal.js";
|
|
@@ -225,6 +225,8 @@ export async function selectPrompt(params) {
|
|
|
225
225
|
void confirmSelection();
|
|
226
226
|
} else if (key.name === "c" && key.ctrl) {
|
|
227
227
|
void endPrompt(true);
|
|
228
|
+
} else {
|
|
229
|
+
void endPrompt(true);
|
|
228
230
|
}
|
|
229
231
|
}
|
|
230
232
|
function moveSelectionUp() {
|
|
@@ -279,6 +281,7 @@ export async function selectPrompt(params) {
|
|
|
279
281
|
);
|
|
280
282
|
}
|
|
281
283
|
async function endPrompt(isCtrlC = false) {
|
|
284
|
+
deleteLastLine();
|
|
282
285
|
await completePrompt(
|
|
283
286
|
"select",
|
|
284
287
|
isCtrlC,
|
|
@@ -1,106 +1,260 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Environment toggles:
|
|
3
|
+
* - Disable by setting CLI_NO_SPINNER=1 or CLI_NO_COLOR=1
|
|
4
|
+
* - Auto-disables in CI and when not a TTY; override with isEnabled: true
|
|
5
|
+
* - Respect env behavior can be bypassed with respectEnv: false
|
|
6
|
+
* Defaults:
|
|
7
|
+
* - spinner: "dots", color: "cyan", hideCursor: true, discardStdin: true, stream defaults to stderr.
|
|
8
|
+
*/
|
|
9
|
+
import { randomSpinner } from "cli-spinners";
|
|
10
|
+
import { type Ora, type Options as OraOptions, type PromiseOptions as OraPromiseOptions } from "ora";
|
|
11
|
+
import prettyBytes from "pretty-bytes";
|
|
12
|
+
import prettyMilliseconds from "pretty-ms";
|
|
13
|
+
export interface SpinnerOptions extends OraOptions {
|
|
14
|
+
readonly respectEnv?: boolean;
|
|
15
|
+
readonly showTiming?: boolean;
|
|
16
|
+
readonly defaultSuccess?: string;
|
|
17
|
+
readonly defaultFail?: string;
|
|
18
|
+
readonly textColor?: string | ((text: string) => string);
|
|
19
|
+
readonly prefixColor?: string | ((text: string) => string);
|
|
20
|
+
readonly suffixColor?: string | ((text: string) => string);
|
|
21
|
+
readonly successColor?: string | ((text: string) => string);
|
|
22
|
+
readonly failColor?: string | ((text: string) => string);
|
|
23
|
+
readonly theme?: {
|
|
24
|
+
readonly info?: (text: string) => string;
|
|
25
|
+
readonly success?: (text: string) => string;
|
|
26
|
+
readonly error?: (text: string) => string;
|
|
27
|
+
readonly dim?: (text: string) => string;
|
|
28
|
+
readonly progress?: (text: string) => string;
|
|
29
|
+
readonly rate?: (text: string) => string;
|
|
30
|
+
readonly bytes?: (text: string) => string;
|
|
31
|
+
readonly percentage?: (text: string) => string;
|
|
32
|
+
};
|
|
17
33
|
}
|
|
18
|
-
interface
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
format?: "percentage" | "count" | "both";
|
|
34
|
+
export interface SpinnerGroupOptions extends SpinnerOptions {
|
|
35
|
+
readonly items: readonly string[];
|
|
36
|
+
readonly concurrent?: boolean;
|
|
22
37
|
}
|
|
23
|
-
interface
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
setProgress: (progress: ProgressOptions) => void;
|
|
28
|
-
succeed: (text?: string) => void;
|
|
29
|
-
fail: (text?: string) => void;
|
|
30
|
-
warn: (text?: string) => void;
|
|
31
|
-
info: (text?: string) => void;
|
|
32
|
-
isSpinning: () => boolean;
|
|
33
|
-
clear: () => void;
|
|
34
|
-
getElapsedTime: () => number;
|
|
35
|
-
pause: () => void;
|
|
36
|
-
resume: () => void;
|
|
37
|
-
dispose: () => void;
|
|
38
|
-
isCancelled: boolean;
|
|
38
|
+
export interface FileProgressOptions {
|
|
39
|
+
readonly totalBytes?: number;
|
|
40
|
+
readonly showBytes?: boolean;
|
|
41
|
+
readonly showRate?: boolean;
|
|
39
42
|
}
|
|
43
|
+
export type SimpleSpinner = Ora;
|
|
44
|
+
export declare const defaultSpinnerOptions: Readonly<SpinnerOptions>;
|
|
45
|
+
export declare function isSpinnerEnabled(options?: {
|
|
46
|
+
stream?: NodeJS.WriteStream;
|
|
47
|
+
respectEnv?: boolean;
|
|
48
|
+
isEnabled?: boolean;
|
|
49
|
+
}): boolean;
|
|
50
|
+
export declare function createSpinner(input?: string | SpinnerOptions): SimpleSpinner;
|
|
51
|
+
export declare function withSpinnerPromise<T>(action: Promise<T> | ((spinner: Ora) => Promise<T>), options?: string | (OraPromiseOptions<T> & SpinnerOptions)): Promise<T>;
|
|
52
|
+
export declare function withSpinner<T>(textOrOptions: string | SpinnerOptions, action: (spinner: Ora) => Promise<T>, onSuccessText?: string | ((result: T) => string), onFailText?: string | ((error: Error) => string)): Promise<T>;
|
|
40
53
|
/**
|
|
41
|
-
*
|
|
42
|
-
*
|
|
43
|
-
* @example
|
|
44
|
-
* ```typescript
|
|
45
|
-
* // Basic usage
|
|
46
|
-
* const spinner = useSpinner({ text: "Loading..." }).start();
|
|
47
|
-
* spinner.stop();
|
|
48
|
-
*
|
|
49
|
-
* // With progress tracking
|
|
50
|
-
* const spinner = useSpinner({ text: "Processing files..." }).start();
|
|
51
|
-
* for (let i = 0; i < files.length; i++) {
|
|
52
|
-
* spinner.setProgress({ current: i + 1, total: files.length });
|
|
53
|
-
* await processFile(files[i]);
|
|
54
|
-
* }
|
|
55
|
-
* spinner.succeed();
|
|
56
|
-
*
|
|
57
|
-
* // With custom color and spinner
|
|
58
|
-
* const spinner = useSpinner({
|
|
59
|
-
* text: "Processing...",
|
|
60
|
-
* color: "cyan",
|
|
61
|
-
* spinner: "dots"
|
|
62
|
-
* }).start();
|
|
63
|
-
*
|
|
64
|
-
* // With success/failure states
|
|
65
|
-
* const spinner = useSpinner({
|
|
66
|
-
* text: "Uploading...",
|
|
67
|
-
* successText: "Upload complete!",
|
|
68
|
-
* failText: "Upload failed!"
|
|
69
|
-
* }).start();
|
|
70
|
-
* try {
|
|
71
|
-
* await uploadFile();
|
|
72
|
-
* spinner.succeed();
|
|
73
|
-
* } catch (error) {
|
|
74
|
-
* spinner.fail();
|
|
75
|
-
* }
|
|
76
|
-
*
|
|
77
|
-
* // Using the wrapper for async operations
|
|
78
|
-
* await useSpinner.promise(
|
|
79
|
-
* async (spinner) => {
|
|
80
|
-
* await longOperation();
|
|
81
|
-
* spinner.setProgress({ current: 50, total: 100 });
|
|
82
|
-
* },
|
|
83
|
-
* {
|
|
84
|
-
* text: "Working...",
|
|
85
|
-
* successText: "Done!",
|
|
86
|
-
* failText: "Failed!"
|
|
87
|
-
* }
|
|
88
|
-
* );
|
|
89
|
-
* ```
|
|
54
|
+
* Update spinner text with optional prefix/suffix
|
|
90
55
|
*/
|
|
91
|
-
export declare function
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
56
|
+
export declare function updateSpinnerText(spinner: SimpleSpinner, text: string, options?: {
|
|
57
|
+
prefix?: string;
|
|
58
|
+
suffix?: string;
|
|
59
|
+
}): void;
|
|
60
|
+
/**
|
|
61
|
+
* Stop spinner and persist with custom symbol and text
|
|
62
|
+
*/
|
|
63
|
+
export declare function stopAndPersist(spinner: SimpleSpinner, options: {
|
|
64
|
+
symbol?: string;
|
|
65
|
+
text?: string;
|
|
66
|
+
prefixText?: string | (() => string);
|
|
67
|
+
suffixText?: string | (() => string);
|
|
68
|
+
}): void;
|
|
69
|
+
/**
|
|
70
|
+
* Create a spinner with timing that automatically shows elapsed time
|
|
71
|
+
*/
|
|
72
|
+
export declare function createTimedSpinner(input?: string | Omit<SpinnerOptions, "showTiming">): {
|
|
73
|
+
spinner: SimpleSpinner;
|
|
74
|
+
getElapsed: () => number;
|
|
75
|
+
succeedWithTiming: (text?: string) => void;
|
|
76
|
+
failWithTiming: (text?: string) => void;
|
|
77
|
+
};
|
|
78
|
+
/**
|
|
79
|
+
* Create multiple spinners for concurrent operations
|
|
80
|
+
*/
|
|
81
|
+
export declare function createSpinnerGroup(options: SpinnerGroupOptions): {
|
|
82
|
+
spinners: SimpleSpinner[];
|
|
83
|
+
updateAll: (text: string) => void;
|
|
84
|
+
succeedAll: (text?: string) => void;
|
|
85
|
+
failAll: (text?: string) => void;
|
|
86
|
+
stopAll: () => void;
|
|
87
|
+
};
|
|
88
|
+
/**
|
|
89
|
+
* Enhanced withSpinner that includes common patterns used in the codebase
|
|
90
|
+
*/
|
|
91
|
+
export declare function withEnhancedSpinner<T>(textOrOptions: string | (SpinnerOptions & {
|
|
92
|
+
successText?: string;
|
|
93
|
+
failText?: string;
|
|
94
|
+
showTiming?: boolean;
|
|
95
|
+
}), action: (spinner: SimpleSpinner & {
|
|
96
|
+
updateText: (text: string, options?: {
|
|
97
|
+
prefix?: string;
|
|
98
|
+
suffix?: string;
|
|
99
|
+
}) => void;
|
|
100
|
+
setProgress: (current: number, total: number, text?: string) => void;
|
|
101
|
+
}) => Promise<T>): Promise<T>;
|
|
102
|
+
/**
|
|
103
|
+
* Check if a spinner is currently running
|
|
104
|
+
*/
|
|
105
|
+
export declare function isSpinnerRunning(spinner: SimpleSpinner): boolean;
|
|
106
|
+
/**
|
|
107
|
+
* Safely stop a spinner if it's running
|
|
108
|
+
*/
|
|
109
|
+
export declare function safeStopSpinner(spinner: SimpleSpinner | null): void;
|
|
110
|
+
/**
|
|
111
|
+
* Create a spinner that automatically handles common build/publish patterns
|
|
112
|
+
*/
|
|
113
|
+
export declare function createBuildSpinner(operation: string, options?: Omit<SpinnerOptions, "text">): {
|
|
114
|
+
spinner: SimpleSpinner;
|
|
115
|
+
complete: (message?: string) => void;
|
|
116
|
+
error: (error: Error | string) => void;
|
|
117
|
+
updateProgress: (step: string) => void;
|
|
118
|
+
};
|
|
119
|
+
/**
|
|
120
|
+
* Create a spinner with file progress tracking
|
|
121
|
+
*/
|
|
122
|
+
export declare function createFileProgressSpinner(operation: string, options?: SpinnerOptions & FileProgressOptions): {
|
|
123
|
+
spinner: SimpleSpinner;
|
|
124
|
+
updateProgress: (bytesProcessed: number, fileName?: string) => void;
|
|
125
|
+
updateRate: (bytesPerSecond: number) => void;
|
|
126
|
+
complete: (message?: string) => void;
|
|
127
|
+
error: (error: Error | string) => void;
|
|
128
|
+
};
|
|
129
|
+
/**
|
|
130
|
+
* Create a multi-step operation spinner with automatic timing
|
|
131
|
+
*/
|
|
132
|
+
export declare function createMultiStepSpinner(operationName: string, steps: readonly string[], options?: SpinnerOptions): {
|
|
133
|
+
spinner: SimpleSpinner;
|
|
134
|
+
nextStep: (stepIndex?: number) => void;
|
|
135
|
+
complete: (message?: string) => void;
|
|
136
|
+
error: (error: Error | string, stepIndex?: number) => void;
|
|
137
|
+
getCurrentStep: () => number;
|
|
138
|
+
};
|
|
139
|
+
/**
|
|
140
|
+
* Enhanced timing utility using pretty-ms
|
|
141
|
+
*/
|
|
142
|
+
export declare function formatSpinnerTiming(startTime: number, options?: {
|
|
143
|
+
verbose?: boolean;
|
|
144
|
+
}): string;
|
|
145
|
+
/**
|
|
146
|
+
* Format bytes for spinner display using pretty-bytes
|
|
147
|
+
*/
|
|
148
|
+
export declare function formatSpinnerBytes(bytes: number, options?: {
|
|
149
|
+
binary?: boolean;
|
|
150
|
+
}): string;
|
|
151
|
+
/**
|
|
152
|
+
* Format elapsed time for spinner display using pretty-ms
|
|
153
|
+
*/
|
|
154
|
+
export declare function formatSpinnerElapsed(elapsed: number, options?: {
|
|
155
|
+
verbose?: boolean;
|
|
156
|
+
}): string;
|
|
157
|
+
/**
|
|
158
|
+
* Create a spinner for download/upload operations with byte tracking
|
|
159
|
+
*/
|
|
160
|
+
export declare function createTransferSpinner(operation: string, options?: SpinnerOptions & {
|
|
161
|
+
totalBytes?: number;
|
|
162
|
+
showRate?: boolean;
|
|
163
|
+
}): {
|
|
164
|
+
spinner: SimpleSpinner;
|
|
165
|
+
updateBytes: (bytesTransferred: number, fileName?: string) => void;
|
|
166
|
+
updateRate: (bytesPerSecond: number) => void;
|
|
167
|
+
complete: (message?: string, totalBytesTransferred?: number) => void;
|
|
168
|
+
error: (error: Error | string) => void;
|
|
169
|
+
};
|
|
170
|
+
export declare const spinners: {
|
|
171
|
+
readonly toggle: import("cli-spinners").Spinner;
|
|
172
|
+
readonly line: import("cli-spinners").Spinner;
|
|
173
|
+
readonly dots: import("cli-spinners").Spinner;
|
|
174
|
+
readonly dots2: import("cli-spinners").Spinner;
|
|
175
|
+
readonly dots3: import("cli-spinners").Spinner;
|
|
176
|
+
readonly dots4: import("cli-spinners").Spinner;
|
|
177
|
+
readonly dots5: import("cli-spinners").Spinner;
|
|
178
|
+
readonly dots6: import("cli-spinners").Spinner;
|
|
179
|
+
readonly dots7: import("cli-spinners").Spinner;
|
|
180
|
+
readonly dots8: import("cli-spinners").Spinner;
|
|
181
|
+
readonly dots9: import("cli-spinners").Spinner;
|
|
182
|
+
readonly dots10: import("cli-spinners").Spinner;
|
|
183
|
+
readonly dots11: import("cli-spinners").Spinner;
|
|
184
|
+
readonly dots12: import("cli-spinners").Spinner;
|
|
185
|
+
readonly dots8Bit: import("cli-spinners").Spinner;
|
|
186
|
+
readonly sand: import("cli-spinners").Spinner;
|
|
187
|
+
readonly line2: import("cli-spinners").Spinner;
|
|
188
|
+
readonly pipe: import("cli-spinners").Spinner;
|
|
189
|
+
readonly simpleDots: import("cli-spinners").Spinner;
|
|
190
|
+
readonly simpleDotsScrolling: import("cli-spinners").Spinner;
|
|
191
|
+
readonly star: import("cli-spinners").Spinner;
|
|
192
|
+
readonly star2: import("cli-spinners").Spinner;
|
|
193
|
+
readonly flip: import("cli-spinners").Spinner;
|
|
194
|
+
readonly hamburger: import("cli-spinners").Spinner;
|
|
195
|
+
readonly growVertical: import("cli-spinners").Spinner;
|
|
196
|
+
readonly growHorizontal: import("cli-spinners").Spinner;
|
|
197
|
+
readonly balloon: import("cli-spinners").Spinner;
|
|
198
|
+
readonly balloon2: import("cli-spinners").Spinner;
|
|
199
|
+
readonly noise: import("cli-spinners").Spinner;
|
|
200
|
+
readonly bounce: import("cli-spinners").Spinner;
|
|
201
|
+
readonly boxBounce: import("cli-spinners").Spinner;
|
|
202
|
+
readonly boxBounce2: import("cli-spinners").Spinner;
|
|
203
|
+
readonly binary: import("cli-spinners").Spinner;
|
|
204
|
+
readonly triangle: import("cli-spinners").Spinner;
|
|
205
|
+
readonly arc: import("cli-spinners").Spinner;
|
|
206
|
+
readonly circle: import("cli-spinners").Spinner;
|
|
207
|
+
readonly squareCorners: import("cli-spinners").Spinner;
|
|
208
|
+
readonly circleQuarters: import("cli-spinners").Spinner;
|
|
209
|
+
readonly circleHalves: import("cli-spinners").Spinner;
|
|
210
|
+
readonly squish: import("cli-spinners").Spinner;
|
|
211
|
+
readonly toggle2: import("cli-spinners").Spinner;
|
|
212
|
+
readonly toggle3: import("cli-spinners").Spinner;
|
|
213
|
+
readonly toggle4: import("cli-spinners").Spinner;
|
|
214
|
+
readonly toggle5: import("cli-spinners").Spinner;
|
|
215
|
+
readonly toggle6: import("cli-spinners").Spinner;
|
|
216
|
+
readonly toggle7: import("cli-spinners").Spinner;
|
|
217
|
+
readonly toggle8: import("cli-spinners").Spinner;
|
|
218
|
+
readonly toggle9: import("cli-spinners").Spinner;
|
|
219
|
+
readonly toggle10: import("cli-spinners").Spinner;
|
|
220
|
+
readonly toggle11: import("cli-spinners").Spinner;
|
|
221
|
+
readonly toggle12: import("cli-spinners").Spinner;
|
|
222
|
+
readonly toggle13: import("cli-spinners").Spinner;
|
|
223
|
+
readonly arrow: import("cli-spinners").Spinner;
|
|
224
|
+
readonly arrow2: import("cli-spinners").Spinner;
|
|
225
|
+
readonly arrow3: import("cli-spinners").Spinner;
|
|
226
|
+
readonly bouncingBar: import("cli-spinners").Spinner;
|
|
227
|
+
readonly bouncingBall: import("cli-spinners").Spinner;
|
|
228
|
+
readonly smiley: import("cli-spinners").Spinner;
|
|
229
|
+
readonly monkey: import("cli-spinners").Spinner;
|
|
230
|
+
readonly hearts: import("cli-spinners").Spinner;
|
|
231
|
+
readonly clock: import("cli-spinners").Spinner;
|
|
232
|
+
readonly earth: import("cli-spinners").Spinner;
|
|
233
|
+
readonly material: import("cli-spinners").Spinner;
|
|
234
|
+
readonly moon: import("cli-spinners").Spinner;
|
|
235
|
+
readonly runner: import("cli-spinners").Spinner;
|
|
236
|
+
readonly pong: import("cli-spinners").Spinner;
|
|
237
|
+
readonly shark: import("cli-spinners").Spinner;
|
|
238
|
+
readonly dqpb: import("cli-spinners").Spinner;
|
|
239
|
+
readonly weather: import("cli-spinners").Spinner;
|
|
240
|
+
readonly christmas: import("cli-spinners").Spinner;
|
|
241
|
+
readonly grenade: import("cli-spinners").Spinner;
|
|
242
|
+
readonly point: import("cli-spinners").Spinner;
|
|
243
|
+
readonly layer: import("cli-spinners").Spinner;
|
|
244
|
+
readonly betaWave: import("cli-spinners").Spinner;
|
|
245
|
+
readonly fingerDance: import("cli-spinners").Spinner;
|
|
246
|
+
readonly fistBump: import("cli-spinners").Spinner;
|
|
247
|
+
readonly soccerHeader: import("cli-spinners").Spinner;
|
|
248
|
+
readonly mindblown: import("cli-spinners").Spinner;
|
|
249
|
+
readonly speaker: import("cli-spinners").Spinner;
|
|
250
|
+
readonly orangePulse: import("cli-spinners").Spinner;
|
|
251
|
+
readonly bluePulse: import("cli-spinners").Spinner;
|
|
252
|
+
readonly orangeBluePulse: import("cli-spinners").Spinner;
|
|
253
|
+
readonly timeTravel: import("cli-spinners").Spinner;
|
|
254
|
+
readonly aesthetic: import("cli-spinners").Spinner;
|
|
255
|
+
readonly dwarfFortress: import("cli-spinners").Spinner;
|
|
256
|
+
readonly dots13: import("cli-spinners").Spinner;
|
|
257
|
+
readonly dots14: import("cli-spinners").Spinner;
|
|
258
|
+
readonly dotsCircle: import("cli-spinners").Spinner;
|
|
259
|
+
};
|
|
260
|
+
export { randomSpinner, prettyBytes, prettyMilliseconds };
|