Complete residential site build with Docker Compose & Gitea Actions deployment
This commit is contained in:
+494
@@ -0,0 +1,494 @@
|
||||
import { State, AutocompletePrompt, DateFormat } from '@clack/core';
|
||||
export { ClackSettings, DateFormat, isCancel, settings, updateSettings } from '@clack/core';
|
||||
import { Readable, Writable } from 'node:stream';
|
||||
|
||||
declare const unicode: boolean;
|
||||
declare const isCI: () => boolean;
|
||||
declare const isTTY: (output: Writable) => boolean;
|
||||
declare const unicodeOr: (c: string, fallback: string) => string;
|
||||
declare const S_STEP_ACTIVE: string;
|
||||
declare const S_STEP_CANCEL: string;
|
||||
declare const S_STEP_ERROR: string;
|
||||
declare const S_STEP_SUBMIT: string;
|
||||
declare const S_BAR_START: string;
|
||||
declare const S_BAR: string;
|
||||
declare const S_BAR_END: string;
|
||||
declare const S_BAR_START_RIGHT: string;
|
||||
declare const S_BAR_END_RIGHT: string;
|
||||
declare const S_RADIO_ACTIVE: string;
|
||||
declare const S_RADIO_INACTIVE: string;
|
||||
declare const S_CHECKBOX_ACTIVE: string;
|
||||
declare const S_CHECKBOX_SELECTED: string;
|
||||
declare const S_CHECKBOX_INACTIVE: string;
|
||||
declare const S_PASSWORD_MASK: string;
|
||||
declare const S_BAR_H: string;
|
||||
declare const S_CORNER_TOP_RIGHT: string;
|
||||
declare const S_CONNECT_LEFT: string;
|
||||
declare const S_CORNER_BOTTOM_RIGHT: string;
|
||||
declare const S_CORNER_BOTTOM_LEFT: string;
|
||||
declare const S_CORNER_TOP_LEFT: string;
|
||||
declare const S_INFO: string;
|
||||
declare const S_SUCCESS: string;
|
||||
declare const S_WARN: string;
|
||||
declare const S_ERROR: string;
|
||||
declare const symbol: (state: State) => string;
|
||||
declare const symbolBar: (state: State) => string;
|
||||
interface CommonOptions {
|
||||
input?: Readable;
|
||||
output?: Writable;
|
||||
signal?: AbortSignal;
|
||||
withGuide?: boolean;
|
||||
}
|
||||
|
||||
type Primitive = Readonly<string | boolean | number>;
|
||||
type Option<Value> = Value extends Primitive ? {
|
||||
/**
|
||||
* Internal data for this option.
|
||||
*/
|
||||
value: Value;
|
||||
/**
|
||||
* The optional, user-facing text for this option.
|
||||
*
|
||||
* By default, the `value` is converted to a string.
|
||||
*/
|
||||
label?: string;
|
||||
/**
|
||||
* An optional hint to display to the user when
|
||||
* this option might be selected.
|
||||
*
|
||||
* By default, no `hint` is displayed.
|
||||
*/
|
||||
hint?: string;
|
||||
/**
|
||||
* Whether this option is disabled.
|
||||
* Disabled options are visible but cannot be selected.
|
||||
*
|
||||
* By default, options are not disabled.
|
||||
*/
|
||||
disabled?: boolean;
|
||||
} : {
|
||||
/**
|
||||
* Internal data for this option.
|
||||
*/
|
||||
value: Value;
|
||||
/**
|
||||
* Required. The user-facing text for this option.
|
||||
*/
|
||||
label: string;
|
||||
/**
|
||||
* An optional hint to display to the user when
|
||||
* this option might be selected.
|
||||
*
|
||||
* By default, no `hint` is displayed.
|
||||
*/
|
||||
hint?: string;
|
||||
/**
|
||||
* Whether this option is disabled.
|
||||
* Disabled options are visible but cannot be selected.
|
||||
*
|
||||
* By default, options are not disabled.
|
||||
*/
|
||||
disabled?: boolean;
|
||||
};
|
||||
interface SelectOptions<Value> extends CommonOptions {
|
||||
message: string;
|
||||
options: Option<Value>[];
|
||||
initialValue?: Value;
|
||||
maxItems?: number;
|
||||
}
|
||||
declare const select: <Value>(opts: SelectOptions<Value>) => Promise<Value | symbol>;
|
||||
|
||||
interface AutocompleteSharedOptions<Value> extends CommonOptions {
|
||||
/**
|
||||
* The message to display to the user.
|
||||
*/
|
||||
message: string;
|
||||
/**
|
||||
* Available options for the autocomplete prompt.
|
||||
*/
|
||||
options: Option<Value>[] | ((this: AutocompletePrompt<Option<Value>>) => Option<Value>[]);
|
||||
/**
|
||||
* Maximum number of items to display at once.
|
||||
*/
|
||||
maxItems?: number;
|
||||
/**
|
||||
* Placeholder text to display when no input is provided.
|
||||
*/
|
||||
placeholder?: string;
|
||||
/**
|
||||
* Validates the value
|
||||
*/
|
||||
validate?: (value: Value | Value[] | undefined) => string | Error | undefined;
|
||||
/**
|
||||
* Custom filter function to match options against search input.
|
||||
* If not provided, a default filter that matches label, hint, and value is used.
|
||||
*/
|
||||
filter?: (search: string, option: Option<Value>) => boolean;
|
||||
}
|
||||
interface AutocompleteOptions<Value> extends AutocompleteSharedOptions<Value> {
|
||||
/**
|
||||
* The initial selected value.
|
||||
*/
|
||||
initialValue?: Value;
|
||||
/**
|
||||
* The initial user input
|
||||
*/
|
||||
initialUserInput?: string;
|
||||
}
|
||||
declare const autocomplete: <Value>(opts: AutocompleteOptions<Value>) => Promise<Value | symbol>;
|
||||
interface AutocompleteMultiSelectOptions<Value> extends AutocompleteSharedOptions<Value> {
|
||||
/**
|
||||
* The initial selected values
|
||||
*/
|
||||
initialValues?: Value[];
|
||||
/**
|
||||
* If true, at least one option must be selected
|
||||
*/
|
||||
required?: boolean;
|
||||
}
|
||||
/**
|
||||
* Integrated autocomplete multiselect - combines type-ahead filtering with multiselect in one UI
|
||||
*/
|
||||
declare const autocompleteMultiselect: <Value>(opts: AutocompleteMultiSelectOptions<Value>) => Promise<Value[] | symbol>;
|
||||
|
||||
type BoxAlignment = 'left' | 'center' | 'right';
|
||||
interface BoxOptions extends CommonOptions {
|
||||
contentAlign?: BoxAlignment;
|
||||
titleAlign?: BoxAlignment;
|
||||
width?: number | 'auto';
|
||||
titlePadding?: number;
|
||||
contentPadding?: number;
|
||||
rounded?: boolean;
|
||||
formatBorder?: (text: string) => string;
|
||||
}
|
||||
declare const box: (message?: string, title?: string, opts?: BoxOptions) => void;
|
||||
|
||||
interface ConfirmOptions extends CommonOptions {
|
||||
message: string;
|
||||
active?: string;
|
||||
inactive?: string;
|
||||
initialValue?: boolean;
|
||||
vertical?: boolean;
|
||||
}
|
||||
declare const confirm: (opts: ConfirmOptions) => Promise<boolean | symbol>;
|
||||
|
||||
interface DateOptions extends CommonOptions {
|
||||
message: string;
|
||||
format?: DateFormat;
|
||||
locale?: string;
|
||||
defaultValue?: Date;
|
||||
initialValue?: Date;
|
||||
minDate?: Date;
|
||||
maxDate?: Date;
|
||||
validate?: (value: Date | undefined) => string | Error | undefined;
|
||||
}
|
||||
declare const date: (opts: DateOptions) => Promise<Date | symbol>;
|
||||
|
||||
type Prettify<T> = {
|
||||
[P in keyof T]: T[P];
|
||||
} & {};
|
||||
type PromptGroupAwaitedReturn<T> = {
|
||||
[P in keyof T]: Exclude<Awaited<T[P]>, symbol>;
|
||||
};
|
||||
interface PromptGroupOptions<T> {
|
||||
/**
|
||||
* Control how the group can be canceled
|
||||
* if one of the prompts is canceled.
|
||||
*/
|
||||
onCancel?: (opts: {
|
||||
results: Prettify<Partial<PromptGroupAwaitedReturn<T>>>;
|
||||
}) => void;
|
||||
}
|
||||
type PromptGroup<T> = {
|
||||
[P in keyof T]: (opts: {
|
||||
results: Prettify<Partial<PromptGroupAwaitedReturn<Omit<T, P>>>>;
|
||||
}) => undefined | Promise<T[P] | undefined>;
|
||||
};
|
||||
/**
|
||||
* Define a group of prompts to be displayed
|
||||
* and return a results of objects within the group
|
||||
*/
|
||||
declare const group: <T>(prompts: PromptGroup<T>, opts?: PromptGroupOptions<T>) => Promise<Prettify<PromptGroupAwaitedReturn<T>>>;
|
||||
|
||||
interface GroupMultiSelectOptions<Value> extends CommonOptions {
|
||||
message: string;
|
||||
options: Record<string, Option<Value>[]>;
|
||||
initialValues?: Value[];
|
||||
maxItems?: number;
|
||||
required?: boolean;
|
||||
cursorAt?: Value;
|
||||
selectableGroups?: boolean;
|
||||
groupSpacing?: number;
|
||||
}
|
||||
declare const groupMultiselect: <Value>(opts: GroupMultiSelectOptions<Value>) => Promise<Value[] | symbol>;
|
||||
|
||||
interface LimitOptionsParams<TOption> extends CommonOptions {
|
||||
options: TOption[];
|
||||
cursor: number;
|
||||
style: (option: TOption, active: boolean) => string;
|
||||
maxItems?: number;
|
||||
columnPadding?: number;
|
||||
rowPadding?: number;
|
||||
}
|
||||
declare const limitOptions: <TOption>({ cursor, options, style, output, maxItems, columnPadding, rowPadding, }: LimitOptionsParams<TOption>) => string[];
|
||||
|
||||
interface LogMessageOptions extends CommonOptions {
|
||||
symbol?: string;
|
||||
spacing?: number;
|
||||
secondarySymbol?: string;
|
||||
}
|
||||
declare const log: {
|
||||
message: (message?: string | string[], { symbol, secondarySymbol, output, spacing, withGuide, }?: LogMessageOptions) => void;
|
||||
info: (message: string, opts?: LogMessageOptions) => void;
|
||||
success: (message: string, opts?: LogMessageOptions) => void;
|
||||
step: (message: string, opts?: LogMessageOptions) => void;
|
||||
warn: (message: string, opts?: LogMessageOptions) => void;
|
||||
/** alias for `log.warn()`. */
|
||||
warning: (message: string, opts?: LogMessageOptions) => void;
|
||||
error: (message: string, opts?: LogMessageOptions) => void;
|
||||
};
|
||||
|
||||
declare const cancel: (message?: string, opts?: CommonOptions) => void;
|
||||
declare const intro: (title?: string, opts?: CommonOptions) => void;
|
||||
declare const outro: (message?: string, opts?: CommonOptions) => void;
|
||||
|
||||
/**
|
||||
* Options for the {@link text} prompt
|
||||
*/
|
||||
interface TextOptions extends CommonOptions {
|
||||
/**
|
||||
* The prompt message or question shown to the user above the input.
|
||||
*/
|
||||
message: string;
|
||||
/**
|
||||
* A visual hint shown when the field has no content.
|
||||
*/
|
||||
placeholder?: string;
|
||||
/**
|
||||
* A fallback value returned when the user provides nothing (empty input).
|
||||
*/
|
||||
defaultValue?: string;
|
||||
/**
|
||||
* The starting value shown when the prompt first renders.
|
||||
* Users can edit this value before submitting.
|
||||
*/
|
||||
initialValue?: string;
|
||||
/**
|
||||
* A function that validates user input. Return a `string` or `Error` to show as a
|
||||
* validation error, or `undefined` to accept the result.
|
||||
*/
|
||||
validate?: (value: string | undefined) => string | Error | undefined;
|
||||
}
|
||||
/**
|
||||
* The text prompt accepts a single line of text.
|
||||
*
|
||||
* @see https://bomb.sh/docs/clack/packages/prompts/#text-input
|
||||
*
|
||||
* @example
|
||||
* ```ts
|
||||
* import { text } from '@clack/prompts';
|
||||
*
|
||||
* const name = await text({
|
||||
* message: 'What is your name?',
|
||||
* placeholder: 'John Doe',
|
||||
* validate: (value) => {
|
||||
* if (!value || value.length < 2) return 'Name must be at least 2 characters';
|
||||
* return undefined;
|
||||
* },
|
||||
* });
|
||||
* ```
|
||||
*/
|
||||
declare const text: (opts: TextOptions) => Promise<string | symbol>;
|
||||
|
||||
/**
|
||||
* Options for the {@link multiline} prompt
|
||||
*/
|
||||
interface MultiLineOptions extends TextOptions {
|
||||
/**
|
||||
* When enabled it shows a `[ submit ]` button that can be focused with tab.
|
||||
* By default, pressing `Enter` twice submits the input
|
||||
*
|
||||
* @default false
|
||||
*/
|
||||
showSubmit?: boolean;
|
||||
}
|
||||
/**
|
||||
* The multi-line prompt accepts multiple lines of text input.
|
||||
* By default, pressing `Enter` twice submits the input.
|
||||
*
|
||||
* @see https://bomb.sh/docs/clack/packages/prompts/#multi-line-text
|
||||
*
|
||||
* @example
|
||||
* ```ts
|
||||
* import { multiline } from '@clack/prompts';
|
||||
*
|
||||
* const bio = await multiline({
|
||||
* message: 'Enter your bio',
|
||||
* placeholder: 'Tell us about yourself...',
|
||||
* showSubmit: true,
|
||||
* });
|
||||
* ```
|
||||
*/
|
||||
declare const multiline: (opts: MultiLineOptions) => Promise<string | symbol>;
|
||||
|
||||
interface MultiSelectOptions<Value> extends CommonOptions {
|
||||
message: string;
|
||||
options: Option<Value>[];
|
||||
initialValues?: Value[];
|
||||
maxItems?: number;
|
||||
required?: boolean;
|
||||
cursorAt?: Value;
|
||||
}
|
||||
declare const multiselect: <Value>(opts: MultiSelectOptions<Value>) => Promise<Value[] | symbol>;
|
||||
|
||||
type FormatFn = (line: string) => string;
|
||||
interface NoteOptions extends CommonOptions {
|
||||
format?: FormatFn;
|
||||
}
|
||||
declare const note: (message?: string, title?: string, opts?: NoteOptions) => void;
|
||||
|
||||
/**
|
||||
* Options for the {@link password} prompt
|
||||
*/
|
||||
interface PasswordOptions extends CommonOptions {
|
||||
/**
|
||||
* The prompt message or question shown to the user above the input.
|
||||
*/
|
||||
message: string;
|
||||
/**
|
||||
* Character to use for masking input.
|
||||
* @default ▪/•
|
||||
*/
|
||||
mask?: string;
|
||||
/**
|
||||
* A function that validates user input. Return a `string` or `Error` to show as a
|
||||
* validation error, or `undefined` to accept the result.
|
||||
*/
|
||||
validate?: (value: string | undefined) => string | Error | undefined;
|
||||
/**
|
||||
* When enabled it causes the input to be cleared if/when validation fails.
|
||||
* @default false
|
||||
*/
|
||||
clearOnError?: boolean;
|
||||
}
|
||||
/**
|
||||
* The password prompt behaves like the {@link text} prompt, but the input is masked.
|
||||
*
|
||||
* @see https://bomb.sh/docs/clack/packages/prompts/#password-input
|
||||
*
|
||||
* @example
|
||||
* ```ts
|
||||
* import { password } from '@clack/prompts';
|
||||
*
|
||||
* const result = await password({
|
||||
* message: 'Enter your password',
|
||||
* });
|
||||
* ```
|
||||
*/
|
||||
declare const password: (opts: PasswordOptions) => Promise<string | symbol>;
|
||||
|
||||
interface PathOptions extends CommonOptions {
|
||||
root?: string;
|
||||
directory?: boolean;
|
||||
initialValue?: string;
|
||||
message: string;
|
||||
validate?: (value: string | undefined) => string | Error | undefined;
|
||||
}
|
||||
declare const path: (opts: PathOptions) => Promise<string | symbol>;
|
||||
|
||||
interface SpinnerOptions extends CommonOptions {
|
||||
indicator?: 'dots' | 'timer';
|
||||
onCancel?: () => void;
|
||||
cancelMessage?: string;
|
||||
errorMessage?: string;
|
||||
frames?: string[];
|
||||
delay?: number;
|
||||
styleFrame?: (frame: string) => string;
|
||||
}
|
||||
interface SpinnerResult {
|
||||
start(msg?: string): void;
|
||||
stop(msg?: string): void;
|
||||
cancel(msg?: string): void;
|
||||
error(msg?: string): void;
|
||||
message(msg?: string): void;
|
||||
clear(): void;
|
||||
readonly isCancelled: boolean;
|
||||
}
|
||||
declare const spinner: ({ indicator, onCancel, output, cancelMessage, errorMessage, frames, delay, signal, ...opts }?: SpinnerOptions) => SpinnerResult;
|
||||
|
||||
interface ProgressOptions extends SpinnerOptions {
|
||||
style?: 'light' | 'heavy' | 'block';
|
||||
max?: number;
|
||||
size?: number;
|
||||
}
|
||||
interface ProgressResult extends SpinnerResult {
|
||||
advance(step?: number, msg?: string): void;
|
||||
}
|
||||
declare function progress({ style, max: userMax, size: userSize, ...spinnerOptions }?: ProgressOptions): ProgressResult;
|
||||
|
||||
interface SelectKeyOptions<Value extends string> extends CommonOptions {
|
||||
message: string;
|
||||
options: Option<Value>[];
|
||||
initialValue?: Value;
|
||||
caseSensitive?: boolean;
|
||||
}
|
||||
declare const selectKey: <Value extends string>(opts: SelectKeyOptions<Value>) => Promise<Value | symbol>;
|
||||
|
||||
declare const stream: {
|
||||
message: (iterable: Iterable<string> | AsyncIterable<string>, { symbol }?: LogMessageOptions) => Promise<void>;
|
||||
info: (iterable: Iterable<string> | AsyncIterable<string>) => Promise<void>;
|
||||
success: (iterable: Iterable<string> | AsyncIterable<string>) => Promise<void>;
|
||||
step: (iterable: Iterable<string> | AsyncIterable<string>) => Promise<void>;
|
||||
warn: (iterable: Iterable<string> | AsyncIterable<string>) => Promise<void>;
|
||||
/** alias for `log.warn()`. */
|
||||
warning: (iterable: Iterable<string> | AsyncIterable<string>) => Promise<void>;
|
||||
error: (iterable: Iterable<string> | AsyncIterable<string>) => Promise<void>;
|
||||
};
|
||||
|
||||
type Task = {
|
||||
/**
|
||||
* Task title
|
||||
*/
|
||||
title: string;
|
||||
/**
|
||||
* Task function
|
||||
*/
|
||||
task: (message: (string: string) => void) => string | Promise<string> | void | Promise<void>;
|
||||
/**
|
||||
* If enabled === false the task will be skipped
|
||||
*/
|
||||
enabled?: boolean;
|
||||
};
|
||||
/**
|
||||
* Define a group of tasks to be executed
|
||||
*/
|
||||
declare const tasks: (tasks: Task[], opts?: CommonOptions) => Promise<void>;
|
||||
|
||||
interface TaskLogOptions extends CommonOptions {
|
||||
title: string;
|
||||
limit?: number;
|
||||
spacing?: number;
|
||||
retainLog?: boolean;
|
||||
}
|
||||
interface TaskLogMessageOptions {
|
||||
raw?: boolean;
|
||||
}
|
||||
interface TaskLogCompletionOptions {
|
||||
showLog?: boolean;
|
||||
}
|
||||
/**
|
||||
* Renders a log which clears on success and remains on failure
|
||||
*/
|
||||
declare const taskLog: (opts: TaskLogOptions) => {
|
||||
message(msg: string, mopts?: TaskLogMessageOptions): void;
|
||||
group(name: string): {
|
||||
message(msg: string, mopts?: TaskLogMessageOptions): void;
|
||||
error(message: string): void;
|
||||
success(message: string): void;
|
||||
};
|
||||
error(message: string, opts?: TaskLogCompletionOptions): void;
|
||||
success(message: string, opts?: TaskLogCompletionOptions): void;
|
||||
};
|
||||
|
||||
export { S_BAR, S_BAR_END, S_BAR_END_RIGHT, S_BAR_H, S_BAR_START, S_BAR_START_RIGHT, S_CHECKBOX_ACTIVE, S_CHECKBOX_INACTIVE, S_CHECKBOX_SELECTED, S_CONNECT_LEFT, S_CORNER_BOTTOM_LEFT, S_CORNER_BOTTOM_RIGHT, S_CORNER_TOP_LEFT, S_CORNER_TOP_RIGHT, S_ERROR, S_INFO, S_PASSWORD_MASK, S_RADIO_ACTIVE, S_RADIO_INACTIVE, S_STEP_ACTIVE, S_STEP_CANCEL, S_STEP_ERROR, S_STEP_SUBMIT, S_SUCCESS, S_WARN, autocomplete, autocompleteMultiselect, box, cancel, confirm, date, group, groupMultiselect, intro, isCI, isTTY, limitOptions, log, multiline, multiselect, note, outro, password, path, progress, select, selectKey, spinner, stream, symbol, symbolBar, taskLog, tasks, text, unicode, unicodeOr };
|
||||
export type { AutocompleteMultiSelectOptions, AutocompleteOptions, BoxAlignment, BoxOptions, CommonOptions, ConfirmOptions, DateOptions, GroupMultiSelectOptions, LimitOptionsParams, LogMessageOptions, MultiLineOptions, MultiSelectOptions, NoteOptions, Option, PasswordOptions, PathOptions, ProgressOptions, ProgressResult, PromptGroup, PromptGroupAwaitedReturn, PromptGroupOptions, SelectKeyOptions, SelectOptions, SpinnerOptions, SpinnerResult, Task, TaskLogCompletionOptions, TaskLogMessageOptions, TaskLogOptions, TextOptions };
|
||||
+145
@@ -0,0 +1,145 @@
|
||||
import{getColumns as X,getRows as Lt,AutocompletePrompt as vt,settings as T,ConfirmPrompt as Dt,wrapTextWithPrefix as E,DatePrompt as Wt,isCancel as Ft,GroupMultiSelectPrompt as Ht,MultiLinePrompt as Ut,MultiSelectPrompt as Kt,PasswordPrompt as qt,block as Jt,SelectPrompt as Yt,SelectKeyPrompt as Xt,TextPrompt as zt}from"@clack/core";export{isCancel,settings,updateSettings}from"@clack/core";import{styleText as e,stripVTControlCharacters as nt}from"node:util";import V from"node:process";import{wrapAnsi as J}from"fast-wrap-ansi";import B from"fast-string-width";import{existsSync as Qt,lstatSync as wt,readdirSync as Zt}from"node:fs";import{dirname as bt,join as te}from"node:path";import{cursor as St,erase as Ct}from"sisteransi";function ee(){return V.platform!=="win32"?V.env.TERM!=="linux":!!V.env.CI||!!V.env.WT_SESSION||!!V.env.TERMINUS_SUBLIME||V.env.ConEmuTask==="{cmd::Cmder}"||V.env.TERM_PROGRAM==="Terminus-Sublime"||V.env.TERM_PROGRAM==="vscode"||V.env.TERM==="xterm-256color"||V.env.TERM==="alacritty"||V.env.TERMINAL_EMULATOR==="JetBrains-JediTerm"}const tt=ee(),ot=()=>process.env.CI==="true",It=t=>t.isTTY===!0,w=(t,i)=>tt?t:i,Tt=w("\u25C6","*"),at=w("\u25A0","x"),ut=w("\u25B2","x"),H=w("\u25C7","o"),lt=w("\u250C","T"),$=w("\u2502","|"),x=w("\u2514","\u2014"),_t=w("\u2510","T"),xt=w("\u2518","\u2014"),z=w("\u25CF",">"),U=w("\u25CB"," "),et=w("\u25FB","[\u2022]"),K=w("\u25FC","[+]"),Y=w("\u25FB","[ ]"),Et=w("\u25AA","\u2022"),st=w("\u2500","-"),ct=w("\u256E","+"),Gt=w("\u251C","+"),$t=w("\u256F","+"),dt=w("\u2570","+"),Mt=w("\u256D","+"),ht=w("\u25CF","\u2022"),pt=w("\u25C6","*"),mt=w("\u25B2","!"),gt=w("\u25A0","x"),P=t=>{switch(t){case"initial":case"active":return e("cyan",Tt);case"cancel":return e("red",at);case"error":return e("yellow",ut);case"submit":return e("green",H)}},yt=t=>{switch(t){case"initial":case"active":return e("cyan",$);case"cancel":return e("red",$);case"error":return e("yellow",$);case"submit":return e("green",$)}},Ot=(t,i,s,r,u,n=!1)=>{let a=i,c=0;if(n)for(let o=r-1;o>=s&&(a-=t[o].length,c++,!(a<=u));o--);else for(let o=s;o<r&&(a-=t[o].length,c++,!(a<=u));o++);return{lineCount:a,removals:c}},F=({cursor:t,options:i,style:s,output:r=process.stdout,maxItems:u=Number.POSITIVE_INFINITY,columnPadding:n=0,rowPadding:a=4})=>{const c=X(r)-n,o=Lt(r),l=e("dim","..."),d=Math.max(o-a,0),g=Math.max(Math.min(u,d),5);let p=0;t>=g-3&&(p=Math.max(Math.min(t-g+3,i.length-g),0));let f=g<i.length&&p>0,h=g<i.length&&p+g<i.length;const I=Math.min(p+g,i.length),m=[];let y=0;f&&y++,h&&y++;const v=p+(f?1:0),C=I-(h?1:0);for(let b=v;b<C;b++){const G=J(s(i[b],b===t),c,{hard:!0,trim:!1}).split(`
|
||||
`);m.push(G),y+=G.length}if(y>d){let b=0,G=0,M=y;const N=t-v;let O=d;const j=()=>Ot(m,M,0,N,O),k=()=>Ot(m,M,N+1,m.length,O,!0);f?({lineCount:M,removals:b}=j(),M>O&&(h||(O-=1),{lineCount:M,removals:G}=k())):(h||(O-=1),{lineCount:M,removals:G}=k(),M>O&&(O-=1,{lineCount:M,removals:b}=j())),b>0&&(f=!0,m.splice(0,b)),G>0&&(h=!0,m.splice(m.length-G,G))}const S=[];f&&S.push(l);for(const b of m)for(const G of b)S.push(G);return h&&S.push(l),S};function Pt(t){return t.label??String(t.value??"")}function Rt(t,i){if(!t)return!0;const s=(i.label??String(i.value??"")).toLowerCase(),r=(i.hint??"").toLowerCase(),u=String(i.value).toLowerCase(),n=t.toLowerCase();return s.includes(n)||r.includes(n)||u.includes(n)}function se(t,i){const s=[];for(const r of i)t.includes(r.value)&&s.push(r);return s}const At=t=>new vt({options:t.options,initialValue:t.initialValue?[t.initialValue]:void 0,initialUserInput:t.initialUserInput,placeholder:t.placeholder,filter:t.filter??((i,s)=>Rt(i,s)),signal:t.signal,input:t.input,output:t.output,validate:t.validate,render(){const i=t.withGuide??T.withGuide,s=i?[`${e("gray",$)}`,`${P(this.state)} ${t.message}`]:[`${P(this.state)} ${t.message}`],r=this.userInput,u=this.options,n=t.placeholder,a=r===""&&n!==void 0,c=(o,l)=>{const d=Pt(o),g=o.hint&&o.value===this.focusedValue?e("dim",` (${o.hint})`):"";switch(l){case"active":return`${e("green",z)} ${d}${g}`;case"inactive":return`${e("dim",U)} ${e("dim",d)}`;case"disabled":return`${e("gray",U)} ${e(["strikethrough","gray"],d)}`}};switch(this.state){case"submit":{const o=se(this.selectedValues,u),l=o.length>0?` ${e("dim",o.map(Pt).join(", "))}`:"",d=i?e("gray",$):"";return`${s.join(`
|
||||
`)}
|
||||
${d}${l}`}case"cancel":{const o=r?` ${e(["strikethrough","dim"],r)}`:"",l=i?e("gray",$):"";return`${s.join(`
|
||||
`)}
|
||||
${l}${o}`}default:{const o=this.state==="error"?"yellow":"cyan",l=i?`${e(o,$)} `:"",d=i?e(o,x):"";let g="";if(this.isNavigating||a){const v=a?n:r;g=v!==""?` ${e("dim",v)}`:""}else g=` ${this.userInputWithCursor}`;const p=this.filteredOptions.length!==u.length?e("dim",` (${this.filteredOptions.length} match${this.filteredOptions.length===1?"":"es"})`):"",f=this.filteredOptions.length===0&&r?[`${l}${e("yellow","No matches found")}`]:[],h=this.state==="error"?[`${l}${e("yellow",this.error)}`]:[];i&&s.push(`${l.trimEnd()}`),s.push(`${l}${e("dim","Search:")}${g}${p}`,...f,...h);const I=[`${e("dim","\u2191/\u2193")} to select`,`${e("dim","Enter:")} confirm`,`${e("dim","Type:")} to search`],m=[`${l}${I.join(" \u2022 ")}`,d],y=this.filteredOptions.length===0?[]:F({cursor:this.cursor,options:this.filteredOptions,columnPadding:i?3:0,rowPadding:s.length+m.length,style:(v,C)=>c(v,v.disabled?"disabled":C?"active":"inactive"),maxItems:t.maxItems,output:t.output});return[...s,...y.map(v=>`${l}${v}`),...m].join(`
|
||||
`)}}}}).prompt(),ie=t=>{const i=(r,u,n,a)=>{const c=n.includes(r.value),o=r.label??String(r.value??""),l=r.hint&&a!==void 0&&r.value===a?e("dim",` (${r.hint})`):"",d=c?e("green",K):e("dim",Y);return r.disabled?`${e("gray",Y)} ${e(["strikethrough","gray"],o)}`:u?`${d} ${o}${l}`:`${d} ${e("dim",o)}`},s=new vt({options:t.options,multiple:!0,placeholder:t.placeholder,filter:t.filter??((r,u)=>Rt(r,u)),validate:()=>{if(t.required&&s.selectedValues.length===0)return"Please select at least one item"},initialValue:t.initialValues,signal:t.signal,input:t.input,output:t.output,render(){const r=t.withGuide??T.withGuide,u=`${r?`${e("gray",$)}
|
||||
`:""}${P(this.state)} ${t.message}
|
||||
`,n=this.userInput,a=t.placeholder,c=n===""&&a!==void 0,o=this.isNavigating||c?e("dim",c?a:n):this.userInputWithCursor,l=this.options,d=this.filteredOptions.length!==l.length?e("dim",` (${this.filteredOptions.length} match${this.filteredOptions.length===1?"":"es"})`):"";switch(this.state){case"submit":return`${u}${r?`${e("gray",$)} `:""}${e("dim",`${this.selectedValues.length} items selected`)}`;case"cancel":return`${u}${r?`${e("gray",$)} `:""}${e(["strikethrough","dim"],n)}`;default:{const g=this.state==="error"?"yellow":"cyan",p=r?`${e(g,$)} `:"",f=r?e(g,x):"",h=[`${e("dim","\u2191/\u2193")} to navigate`,`${e("dim",this.isNavigating?"Space/Tab:":"Tab:")} select`,`${e("dim","Enter:")} confirm`,`${e("dim","Type:")} to search`],I=this.filteredOptions.length===0&&n?[`${p}${e("yellow","No matches found")}`]:[],m=this.state==="error"?[`${p}${e("yellow",this.error)}`]:[],y=[...`${u}${r?e(g,$):""}`.split(`
|
||||
`),`${p}${e("dim","Search:")} ${o}${d}`,...I,...m],v=[`${p}${h.join(" \u2022 ")}`,f],C=F({cursor:this.cursor,options:this.filteredOptions,style:(S,b)=>i(S,b,this.selectedValues,this.focusedValue),maxItems:t.maxItems,output:t.output,rowPadding:y.length+v.length});return[...y,...C.map(S=>`${p}${S}`),...v].join(`
|
||||
`)}}}});return s.prompt()},re=[Mt,ct,dt,$t],ne=[lt,_t,x,xt];function Vt(t,i,s,r){let u=s,n=s;return r==="center"?u=Math.floor((i-t)/2):r==="right"&&(u=i-t-s),n=i-u-t,[u,n]}const oe=t=>t,ae=(t="",i="",s)=>{const r=s?.output??process.stdout,u=X(r),n=2,a=s?.titlePadding??1,c=s?.contentPadding??2,o=s?.width===void 0||s.width==="auto"?1:Math.min(1,s.width),l=s?.withGuide??T.withGuide?`${$} `:"",d=s?.formatBorder??oe,g=(s?.rounded?re:ne).map(d),p=d(st),f=d($),h=B(l),I=B(i),m=u-h;let y=Math.floor(u*o)-h;if(s?.width==="auto"){const O=t.split(`
|
||||
`);let j=I+a*2;for(const rt of O){const W=B(rt)+c*2;W>j&&(j=W)}const k=j+n;k<y&&(y=k)}y%2!==0&&(y<m?y++:y--);const v=y-n,C=v-a*2,S=I>C?`${i.slice(0,C-3)}...`:i,[b,G]=Vt(B(S),v,a,s?.titleAlign),M=J(t,v-c*2,{hard:!0,trim:!1});r.write(`${l}${g[0]}${p.repeat(b)}${S}${p.repeat(G)}${g[1]}
|
||||
`);const N=M.split(`
|
||||
`);for(const O of N){const[j,k]=Vt(B(O),v,c,s?.contentAlign);r.write(`${l}${f}${" ".repeat(j)}${O}${" ".repeat(k)}${f}
|
||||
`)}r.write(`${l}${g[2]}${p.repeat(v)}${g[3]}
|
||||
`)},ue=t=>{const i=t.active??"Yes",s=t.inactive??"No";return new Dt({active:i,inactive:s,signal:t.signal,input:t.input,output:t.output,initialValue:t.initialValue??!0,render(){const r=t.withGuide??T.withGuide,u=`${P(this.state)} `,n=r?`${e("gray",$)} `:"",a=E(t.output,t.message,n,u),c=`${r?`${e("gray",$)}
|
||||
`:""}${a}
|
||||
`,o=this.value?i:s;switch(this.state){case"submit":{const l=r?`${e("gray",$)} `:"";return`${c}${l}${e("dim",o)}`}case"cancel":{const l=r?`${e("gray",$)} `:"";return`${c}${l}${e(["strikethrough","dim"],o)}${r?`
|
||||
${e("gray",$)}`:""}`}default:{const l=r?`${e("cyan",$)} `:"",d=r?e("cyan",x):"";return`${c}${l}${this.value?`${e("green",z)} ${i}`:`${e("dim",U)} ${e("dim",i)}`}${t.vertical?r?`
|
||||
${e("cyan",$)} `:`
|
||||
`:` ${e("dim","/")} `}${this.value?`${e("dim",U)} ${e("dim",s)}`:`${e("green",z)} ${s}`}
|
||||
${d}
|
||||
`}}}}).prompt()},le=t=>{const i=t.validate;return new Wt({...t,validate(s){if(s===void 0)return t.defaultValue!==void 0?void 0:i?i(s):T.date.messages.required;const r=u=>u.toISOString().slice(0,10);if(t.minDate&&r(s)<r(t.minDate))return T.date.messages.afterMin(t.minDate);if(t.maxDate&&r(s)>r(t.maxDate))return T.date.messages.beforeMax(t.maxDate);if(i)return i(s)},render(){const s=(t?.withGuide??T.withGuide)!==!1,r=`${`${s?`${e("gray",$)}
|
||||
`:""}${P(this.state)} `}${t.message}
|
||||
`,u=this.state!=="initial"?this.state:"active",n=ce(this,u),a=this.value instanceof Date?this.formattedValue:"";switch(this.state){case"error":{const c=this.error?` ${e("yellow",this.error)}`:"",o=s?`${e("yellow",$)} `:"",l=s?e("yellow",x):"";return`${r.trim()}
|
||||
${o}${n}
|
||||
${l}${c}
|
||||
`}case"submit":{const c=a?` ${e("dim",a)}`:"",o=s?e("gray",$):"";return`${r}${o}${c}`}case"cancel":{const c=a?` ${e(["strikethrough","dim"],a)}`:"",o=s?e("gray",$):"";return`${r}${o}${c}${a.trim()?`
|
||||
${o}`:""}`}default:{const c=s?`${e("cyan",$)} `:"",o=s?e("cyan",x):"",l=s?`${e("cyan",$)} `:"",d=this.inlineError?`
|
||||
${l}${e("yellow",this.inlineError)}`:"";return`${r}${c}${n}${d}
|
||||
${o}
|
||||
`}}}}).prompt()};function ce(t,i){const s=t.segmentValues,r=t.segmentCursor;if(i==="submit"||i==="cancel")return t.formattedValue;const u=e("gray",t.separator);return t.segments.map((n,a)=>{const c=a===r.segmentIndex&&!["submit","cancel"].includes(i),o=de[n.type];return $e(s[n.type],{isActive:c,label:o})}).join(u)}function $e(t,i){const s=!t||t.replace(/_/g,"")==="";return i.isActive?e("inverse",s?i.label:t.replace(/_/g," ")):s?e("dim",i.label):t.replace(/_/g,e("dim"," "))}const de={year:"yyyy",month:"mm",day:"dd"},he=async(t,i)=>{const s={},r=Object.keys(t);for(const u of r){const n=t[u],a=await n({results:s})?.catch(c=>{throw c});if(typeof i?.onCancel=="function"&&Ft(a)){s[u]="canceled",i.onCancel({results:s});continue}s[u]=a}return s},pe=t=>{const{selectableGroups:i=!0,groupSpacing:s=0}=t,r=(n,a,c=[])=>{const o=n.label??String(n.value),l=typeof n.group=="string",d=l&&(c[c.indexOf(n)+1]??{group:!0}),g=l&&d&&d.group===!0;let p="",f="";l&&(i?(p=g?`${x} `:`${$} `,f=g?" ":`${$} `):p=" ");let h="";if(s>0&&!l&&(h=`
|
||||
`.repeat(s)),a==="active")return E(t.output,`${o}${n.hint?` ${e("dim",`(${n.hint})`)}`:""}`,`${h}${e("dim",p)} `,`${h}${e("dim",p)}${e("cyan",et)} `,`${h}${e("dim",f)} `);if(a==="group-active")return E(t.output,o,`${h}${p} `,`${h}${p}${e("cyan",et)} `,`${h}${f} `,m=>e("dim",m));if(a==="group-active-selected")return E(t.output,o,`${h}${p} `,`${h}${p}${e("green",K)} `,`${h}${f} `,m=>e("dim",m));if(a==="selected"){const m=l||i?e("green",K):"";return E(t.output,`${o}${n.hint?` (${n.hint})`:""}`,`${h}${e("dim",p)} `,`${h}${e("dim",p)}${m} `,`${h}${e("dim",f)} `,y=>e("dim",y))}if(a==="cancelled")return`${e(["strikethrough","dim"],o)}`;if(a==="active-selected")return E(t.output,`${o}${n.hint?` ${e("dim",`(${n.hint})`)}`:""}`,`${h}${e("dim",p)} `,`${h}${e("dim",p)}${e("green",K)} `,`${h}${e("dim",f)} `);if(a==="submitted")return`${e("dim",o)}`;const I=l||i?e("dim",Y):"";return E(t.output,o,`${h}${e("dim",p)} `,`${h}${e("dim",p)}${I} `,`${h}${e("dim",f)} `,m=>e("dim",m))},u=t.required??!0;return new Ht({options:t.options,signal:t.signal,input:t.input,output:t.output,initialValues:t.initialValues,required:u,cursorAt:t.cursorAt,selectableGroups:i,validate(n){if(u&&(n===void 0||n.length===0))return`Please select at least one option.
|
||||
${e("reset",e("dim",`Press ${e(["gray","bgWhite","inverse"]," space ")} to select, ${e("gray",e(["bgWhite","inverse"]," enter "))} to submit`))}`},render(){const n=t.withGuide??T.withGuide,a=`${n?`${e("gray",$)}
|
||||
`:""}${P(this.state)} ${t.message}
|
||||
`,c=this.value??[],o=(l,d)=>{const g=this.options,p=c.includes(l.value)||l.group===!0&&this.isGroupSelected(`${l.value}`);return!d&&typeof l.group=="string"&&this.options[this.cursor].value===l.group?r(l,p?"group-active-selected":"group-active",g):d&&p?r(l,"active-selected",g):p?r(l,"selected",g):r(l,d?"active":"inactive",g)};switch(this.state){case"submit":{const l=this.options.filter(({value:g})=>c.includes(g)).map(g=>r(g,"submitted")),d=l.length===0?"":` ${l.join(e("dim",", "))}`;return`${a}${n?e("gray",$):""}${d}`}case"cancel":{const l=this.options.filter(({value:d})=>c.includes(d)).map(d=>r(d,"cancelled")).join(e("dim",", "));return`${a}${n?`${e("gray",$)} `:""}${l.trim()?`${l}${n?`
|
||||
${e("gray",$)}`:""}`:""}`}case"error":{const l=n?`${e("yellow",$)} `:"",d=this.error.split(`
|
||||
`).map((h,I)=>I===0?`${n?`${e("yellow",x)} `:""}${e("yellow",h)}`:` ${h}`).join(`
|
||||
`),g=a.split(`
|
||||
`).length,p=d.split(`
|
||||
`).length+1,f=F({output:t.output,options:this.options,cursor:this.cursor,maxItems:t.maxItems,columnPadding:l.length,rowPadding:g+p,style:o}).join(`
|
||||
${l}`);return`${a}${l}${f}
|
||||
${d}
|
||||
`}default:{const l=n?`${e("cyan",$)} `:"",d=a.split(`
|
||||
`).length,g=(n?1:0)+1,p=F({output:t.output,options:this.options,cursor:this.cursor,maxItems:t.maxItems,columnPadding:l.length,rowPadding:d+g,style:o}).join(`
|
||||
${l}`);return`${a}${l}${p}
|
||||
${n?e("cyan",x):""}
|
||||
`}}}}).prompt()},R={message:(t=[],{symbol:i=e("gray",$),secondarySymbol:s=e("gray",$),output:r=process.stdout,spacing:u=1,withGuide:n}={})=>{const a=[],c=n??T.withGuide,o=c?s:"",l=c?`${i} `:"",d=c?`${s} `:"";for(let p=0;p<u;p++)a.push(o);const g=Array.isArray(t)?t:t.split(`
|
||||
`);if(g.length>0){const[p,...f]=g;p.length>0?a.push(`${l}${p}`):a.push(c?i:"");for(const h of f)h.length>0?a.push(`${d}${h}`):a.push(c?s:"")}r.write(`${a.join(`
|
||||
`)}
|
||||
`)},info:(t,i)=>{R.message(t,{...i,symbol:e("blue",ht)})},success:(t,i)=>{R.message(t,{...i,symbol:e("green",pt)})},step:(t,i)=>{R.message(t,{...i,symbol:e("green",H)})},warn:(t,i)=>{R.message(t,{...i,symbol:e("yellow",mt)})},warning:(t,i)=>{R.warn(t,i)},error:(t,i)=>{R.message(t,{...i,symbol:e("red",gt)})}},me=(t="",i)=>{const s=i?.output??process.stdout,r=i?.withGuide??T.withGuide?`${e("gray",x)} `:"";s.write(`${r}${e("red",t)}
|
||||
|
||||
`)},ge=(t="",i)=>{const s=i?.output??process.stdout,r=i?.withGuide??T.withGuide?`${e("gray",lt)} `:"";s.write(`${r}${t}
|
||||
`)},ye=(t="",i)=>{const s=i?.output??process.stdout,r=i?.withGuide??T.withGuide?`${e("gray",$)}
|
||||
${e("gray",x)} `:"";s.write(`${r}${t}
|
||||
|
||||
`)},fe=t=>new Ut({validate:t.validate,placeholder:t.placeholder,defaultValue:t.defaultValue,initialValue:t.initialValue,showSubmit:t.showSubmit,output:t.output,signal:t.signal,input:t.input,render(){const i=t?.withGuide??T.withGuide,s=`${`${i?`${e("gray",$)}
|
||||
`:""}${P(this.state)} `}${t.message}
|
||||
`,r=t.placeholder?e("inverse",t.placeholder[0])+e("dim",t.placeholder.slice(1)):e(["inverse","hidden"],"_"),u=this.userInput?this.userInputWithCursor:r,n=this.value??"",a=t.showSubmit?`
|
||||
${e(this.focused==="submit"?"cyan":"dim","[ submit ]")}`:"";switch(this.state){case"error":{const c=`${e("yellow",$)} `,o=i?E(t.output,u,c,void 0):u,l=e("yellow",x);return`${s}${o}
|
||||
${l} ${e("yellow",this.error)}${a}
|
||||
`}case"submit":{const c=`${e("gray",$)} `,o=i?E(t.output,n,c,void 0,void 0,l=>e("dim",l)):n?e("dim",n):"";return`${s}${o}`}case"cancel":{const c=`${e("gray",$)} `,o=i?E(t.output,n,c,void 0,void 0,l=>e(["strikethrough","dim"],l)):n?e(["strikethrough","dim"],n):"";return`${s}${o}`}default:{const c=i?`${e("cyan",$)} `:"",o=i?e("cyan",x):"",l=i?E(t.output,u,c):u;return`${s}${l}
|
||||
${o}${a}
|
||||
`}}}}).prompt(),Q=(t,i)=>t.split(`
|
||||
`).map(s=>i(s)).join(`
|
||||
`),ve=t=>{const i=(r,u)=>{const n=r.label??String(r.value);return u==="disabled"?`${e("gray",Y)} ${Q(n,a=>e(["strikethrough","gray"],a))}${r.hint?` ${e("dim",`(${r.hint??"disabled"})`)}`:""}`:u==="active"?`${e("cyan",et)} ${n}${r.hint?` ${e("dim",`(${r.hint})`)}`:""}`:u==="selected"?`${e("green",K)} ${Q(n,a=>e("dim",a))}${r.hint?` ${e("dim",`(${r.hint})`)}`:""}`:u==="cancelled"?`${Q(n,a=>e(["strikethrough","dim"],a))}`:u==="active-selected"?`${e("green",K)} ${n}${r.hint?` ${e("dim",`(${r.hint})`)}`:""}`:u==="submitted"?`${Q(n,a=>e("dim",a))}`:`${e("dim",Y)} ${Q(n,a=>e("dim",a))}`},s=t.required??!0;return new Kt({options:t.options,signal:t.signal,input:t.input,output:t.output,initialValues:t.initialValues,required:s,cursorAt:t.cursorAt,validate(r){if(s&&(r===void 0||r.length===0))return`Please select at least one option.
|
||||
${e("reset",e("dim",`Press ${e(["gray","bgWhite","inverse"]," space ")} to select, ${e("gray",e("bgWhite",e("inverse"," enter ")))} to submit`))}`},render(){const r=t.withGuide??T.withGuide,u=E(t.output,t.message,r?`${yt(this.state)} `:"",`${P(this.state)} `),n=`${r?`${e("gray",$)}
|
||||
`:""}${u}
|
||||
`,a=this.value??[],c=(o,l)=>{if(o.disabled)return i(o,"disabled");const d=a.includes(o.value);return l&&d?i(o,"active-selected"):d?i(o,"selected"):i(o,l?"active":"inactive")};switch(this.state){case"submit":{const o=this.options.filter(({value:d})=>a.includes(d)).map(d=>i(d,"submitted")).join(e("dim",", "))||e("dim","none"),l=E(t.output,o,r?`${e("gray",$)} `:"");return`${n}${l}`}case"cancel":{const o=this.options.filter(({value:d})=>a.includes(d)).map(d=>i(d,"cancelled")).join(e("dim",", "));if(o.trim()==="")return`${n}${e("gray",$)}`;const l=E(t.output,o,r?`${e("gray",$)} `:"");return`${n}${l}${r?`
|
||||
${e("gray",$)}`:""}`}case"error":{const o=r?`${e("yellow",$)} `:"",l=this.error.split(`
|
||||
`).map((p,f)=>f===0?`${r?`${e("yellow",x)} `:""}${e("yellow",p)}`:` ${p}`).join(`
|
||||
`),d=n.split(`
|
||||
`).length,g=l.split(`
|
||||
`).length+1;return`${n}${o}${F({output:t.output,options:this.options,cursor:this.cursor,maxItems:t.maxItems,columnPadding:o.length,rowPadding:d+g,style:c}).join(`
|
||||
${o}`)}
|
||||
${l}
|
||||
`}default:{const o=r?`${e("cyan",$)} `:"",l=n.split(`
|
||||
`).length,d=r?2:1;return`${n}${o}${F({output:t.output,options:this.options,cursor:this.cursor,maxItems:t.maxItems,columnPadding:o.length,rowPadding:l+d,style:c}).join(`
|
||||
${o}`)}
|
||||
${r?e("cyan",x):""}
|
||||
`}}}}).prompt()},we=t=>e("dim",t),be=(t,i,s)=>{const r={hard:!0,trim:!1},u=J(t,i,r).split(`
|
||||
`),n=u.reduce((o,l)=>Math.max(B(l),o),0),a=u.map(s).reduce((o,l)=>Math.max(B(l),o),0),c=i-(a-n);return J(t,c,r)},Se=(t="",i="",s)=>{const r=s?.output??V.stdout,u=s?.withGuide??T.withGuide,n=s?.format??we,a=["",...be(t,X(r)-6,n).split(`
|
||||
`).map(n),""],c=B(i),o=Math.max(a.reduce((p,f)=>{const h=B(f);return h>p?h:p},0),c)+2,l=a.map(p=>`${e("gray",$)} ${p}${" ".repeat(o-B(p))}${e("gray",$)}`).join(`
|
||||
`),d=u?`${e("gray",$)}
|
||||
`:"",g=u?Gt:dt;r.write(`${d}${e("green",H)} ${e("reset",i)} ${e("gray",st.repeat(Math.max(o-c-1,1))+ct)}
|
||||
${l}
|
||||
${e("gray",g+st.repeat(o+2)+$t)}
|
||||
`)},Ce=t=>new qt({validate:t.validate,mask:t.mask??Et,signal:t.signal,input:t.input,output:t.output,render(){const i=t.withGuide??T.withGuide,s=`${i?`${e("gray",$)}
|
||||
`:""}${P(this.state)} ${t.message}
|
||||
`,r=this.userInputWithCursor,u=this.masked;switch(this.state){case"error":{const n=i?`${e("yellow",$)} `:"",a=i?`${e("yellow",x)} `:"",c=u??"";return t.clearOnError&&this.clear(),`${s.trim()}
|
||||
${n}${c}
|
||||
${a}${e("yellow",this.error)}
|
||||
`}case"submit":{const n=i?`${e("gray",$)} `:"",a=u?e("dim",u):"";return`${s}${n}${a}`}case"cancel":{const n=i?`${e("gray",$)} `:"",a=u?e(["strikethrough","dim"],u):"";return`${s}${n}${a}${u&&i?`
|
||||
${e("gray",$)}`:""}`}default:{const n=i?`${e("cyan",$)} `:"",a=i?e("cyan",x):"";return`${s}${n}${r}
|
||||
${a}
|
||||
`}}}}).prompt(),Ie=t=>{const i=t.validate;return At({...t,initialUserInput:t.initialValue??t.root??process.cwd(),maxItems:5,validate(s){if(!Array.isArray(s)){if(!s)return"Please select a path";if(i)return i(s)}},options(){const s=this.userInput;if(s==="")return[];try{let r;Qt(s)?wt(s).isDirectory()&&(!t.directory||s.endsWith("/"))?r=s:r=bt(s):r=bt(s);const u=s.length>1&&s.endsWith("/")?s.slice(0,-1):s;return Zt(r).map(n=>{const a=te(r,n),c=wt(a);return{name:n,path:a,isDirectory:c.isDirectory()}}).filter(({path:n,isDirectory:a})=>n.startsWith(u)&&(a||!t.directory)).map(n=>({value:n.path}))}catch{return[]}}})},Te=t=>e("magenta",t),ft=({indicator:t="dots",onCancel:i,output:s=process.stdout,cancelMessage:r,errorMessage:u,frames:n=tt?["\u25D2","\u25D0","\u25D3","\u25D1"]:["\u2022","o","O","0"],delay:a=tt?80:120,signal:c,...o}={})=>{const l=ot();let d,g,p=!1,f=!1,h="",I,m=performance.now();const y=X(s),v=o?.styleFrame??Te,C=_=>{const A=_>1?u??T.messages.error:r??T.messages.cancel;f=_===1,p&&(W(A,_),f&&typeof i=="function"&&i())},S=()=>C(2),b=()=>C(1),G=()=>{process.on("uncaughtExceptionMonitor",S),process.on("unhandledRejection",S),process.on("SIGINT",b),process.on("SIGTERM",b),process.on("exit",C),c&&c.addEventListener("abort",b)},M=()=>{process.removeListener("uncaughtExceptionMonitor",S),process.removeListener("unhandledRejection",S),process.removeListener("SIGINT",b),process.removeListener("SIGTERM",b),process.removeListener("exit",C),c&&c.removeEventListener("abort",b)},N=()=>{if(I===void 0)return;l&&s.write(`
|
||||
`);const _=J(I,y,{hard:!0,trim:!1}).split(`
|
||||
`);_.length>1&&s.write(St.up(_.length-1)),s.write(St.to(0)),s.write(Ct.down())},O=_=>_.replace(/\.+$/,""),j=_=>{const A=(performance.now()-_)/1e3,L=Math.floor(A/60),D=Math.floor(A%60);return L>0?`[${L}m ${D}s]`:`[${D}s]`},k=o.withGuide??T.withGuide,rt=(_="")=>{p=!0,d=Jt({output:s}),h=O(_),m=performance.now(),k&&s.write(`${e("gray",$)}
|
||||
`);let A=0,L=0;G(),g=setInterval(()=>{if(l&&h===I)return;N(),I=h;const D=v(n[A]);let Z;if(l)Z=`${D} ${h}...`;else if(t==="timer")Z=`${D} ${h} ${j(m)}`;else{const kt=".".repeat(Math.floor(L)).slice(0,3);Z=`${D} ${h}${kt}`}const Bt=J(Z,y,{hard:!0,trim:!1});s.write(Bt),A=A+1<n.length?A+1:0,L=L<4?L+.125:0},a)},W=(_="",A=0,L=!1)=>{if(!p)return;p=!1,clearInterval(g),N();const D=A===0?e("green",H):A===1?e("red",at):e("red",ut);h=_??h,L||(t==="timer"?s.write(`${D} ${h} ${j(m)}
|
||||
`):s.write(`${D} ${h}
|
||||
`)),M(),d()};return{start:rt,stop:(_="")=>W(_,0),message:(_="")=>{h=O(_??h)},cancel:(_="")=>W(_,1),error:(_="")=>W(_,2),clear:()=>W("",0,!0),get isCancelled(){return f}}},jt={light:w("\u2500","-"),heavy:w("\u2501","="),block:w("\u2588","#")};function _e({style:t="heavy",max:i=100,size:s=40,...r}={}){const u=ft(r);let n=0,a="";const c=Math.max(1,i),o=Math.max(1,s),l=f=>{switch(f){case"initial":case"active":return h=>e("magenta",h);case"error":case"cancel":return h=>e("red",h);case"submit":return h=>e("green",h);default:return h=>e("magenta",h)}},d=(f,h)=>{const I=Math.floor(n/c*o);return`${l(f)(jt[t].repeat(I))}${e("dim",jt[t].repeat(o-I))} ${h}`},g=(f="")=>{a=f,u.start(d("initial",f))},p=(f=1,h)=>{n=Math.min(c,f+n),u.message(d("active",h??a)),a=h??a};return{start:g,stop:u.stop,cancel:u.cancel,error:u.error,clear:u.clear,advance:p,isCancelled:u.isCancelled,message:f=>p(0,f)}}const it=(t,i)=>t.includes(`
|
||||
`)?t.split(`
|
||||
`).map(s=>i(s)).join(`
|
||||
`):i(t),xe=t=>{const i=(s,r)=>{const u=s.label??String(s.value);switch(r){case"disabled":return`${e("gray",U)} ${it(u,n=>e("gray",n))}${s.hint?` ${e("dim",`(${s.hint??"disabled"})`)}`:""}`;case"selected":return`${it(u,n=>e("dim",n))}`;case"active":return`${e("green",z)} ${u}${s.hint?` ${e("dim",`(${s.hint})`)}`:""}`;case"cancelled":return`${it(u,n=>e(["strikethrough","dim"],n))}`;default:return`${e("dim",U)} ${it(u,n=>e("dim",n))}`}};return new Yt({options:t.options,signal:t.signal,input:t.input,output:t.output,initialValue:t.initialValue,render(){const s=t.withGuide??T.withGuide,r=`${P(this.state)} `,u=`${yt(this.state)} `,n=E(t.output,t.message,u,r),a=`${s?`${e("gray",$)}
|
||||
`:""}${n}
|
||||
`;switch(this.state){case"submit":{const c=s?`${e("gray",$)} `:"",o=E(t.output,i(this.options[this.cursor],"selected"),c);return`${a}${o}`}case"cancel":{const c=s?`${e("gray",$)} `:"",o=E(t.output,i(this.options[this.cursor],"cancelled"),c);return`${a}${o}${s?`
|
||||
${e("gray",$)}`:""}`}default:{const c=s?`${e("cyan",$)} `:"",o=s?e("cyan",x):"",l=a.split(`
|
||||
`).length,d=s?2:1;return`${a}${c}${F({output:t.output,cursor:this.cursor,options:this.options,maxItems:t.maxItems,columnPadding:c.length,rowPadding:l+d,style:(g,p)=>i(g,g.disabled?"disabled":p?"active":"inactive")}).join(`
|
||||
${c}`)}
|
||||
${o}
|
||||
`}}}}).prompt()},Ee=t=>{const i=(s,r="inactive")=>{const u=s.label??String(s.value);return r==="selected"?`${e("dim",u)}`:r==="cancelled"?`${e(["strikethrough","dim"],u)}`:r==="active"?`${e(["bgCyan","gray"],` ${s.value} `)} ${u}${s.hint?` ${e("dim",`(${s.hint})`)}`:""}`:`${e(["gray","bgWhite","inverse"],` ${s.value} `)} ${u}${s.hint?` ${e("dim",`(${s.hint})`)}`:""}`};return new Xt({options:t.options,signal:t.signal,input:t.input,output:t.output,initialValue:t.initialValue,caseSensitive:t.caseSensitive,render(){const s=t.withGuide??T.withGuide,r=`${s?`${e("gray",$)}
|
||||
`:""}${P(this.state)} ${t.message}
|
||||
`;switch(this.state){case"submit":{const u=s?`${e("gray",$)} `:"",n=this.options.find(c=>c.value===this.value)??t.options[0],a=E(t.output,i(n,"selected"),u);return`${r}${a}`}case"cancel":{const u=s?`${e("gray",$)} `:"",n=E(t.output,i(this.options[0],"cancelled"),u);return`${r}${n}${s?`
|
||||
${e("gray",$)}`:""}`}default:{const u=s?`${e("cyan",$)} `:"",n=s?e("cyan",x):"",a=this.options.map((c,o)=>E(t.output,i(c,o===this.cursor?"active":"inactive"),u)).join(`
|
||||
`);return`${r}${a}
|
||||
${n}
|
||||
`}}}}).prompt()},Nt=`${e("gray",$)} `,q={message:async(t,{symbol:i=e("gray",$)}={})=>{process.stdout.write(`${e("gray",$)}
|
||||
${i} `);let s=3;for await(let r of t){r=r.replace(/\n/g,`
|
||||
${Nt}`),r.includes(`
|
||||
`)&&(s=3+nt(r.slice(r.lastIndexOf(`
|
||||
`))).length);const u=nt(r).length;s+u<process.stdout.columns?(s+=u,process.stdout.write(r)):(process.stdout.write(`
|
||||
${Nt}${r.trimStart()}`),s=3+nt(r.trimStart()).length)}process.stdout.write(`
|
||||
`)},info:t=>q.message(t,{symbol:e("blue",ht)}),success:t=>q.message(t,{symbol:e("green",pt)}),step:t=>q.message(t,{symbol:e("green",H)}),warn:t=>q.message(t,{symbol:e("yellow",mt)}),warning:t=>q.warn(t),error:t=>q.message(t,{symbol:e("red",gt)})},Ge=async(t,i)=>{for(const s of t){if(s.enabled===!1)continue;const r=ft(i);r.start(s.title);const u=await s.task(r.message);r.stop(u||s.title)}},Me=t=>t.replace(/\x1b\[(?:\d+;)*\d*[ABCDEFGHfJKSTsu]|\x1b\[(s|u)/g,""),Oe=t=>{const i=t.output??process.stdout,s=X(i),r=e("gray",$),u=t.spacing??1,n=3,a=t.retainLog===!0,c=!ot()&&It(i);i.write(`${r}
|
||||
`),i.write(`${e("green",H)} ${t.title}
|
||||
`);for(let m=0;m<u;m++)i.write(`${r}
|
||||
`);const o=[{value:"",full:""}];let l=!1;const d=m=>{if(o.length===0)return;let y=0;m&&(y+=u+2);for(const v of o){const{value:C,result:S}=v;let b=S?.message??C;if(b.length===0)continue;S===void 0&&v.header!==void 0&&v.header!==""&&(b+=`
|
||||
${v.header}`);const G=b.split(`
|
||||
`).reduce((M,N)=>N===""?M+1:M+Math.ceil((N.length+n)/s),0);y+=G}y>0&&(y+=1,i.write(Ct.lines(y)))},g=(m,y,v)=>{const C=v?`${m.full}
|
||||
${m.value}`:m.value;m.header!==void 0&&m.header!==""&&R.message(m.header.split(`
|
||||
`).map(S=>e("bold",S)),{output:i,secondarySymbol:r,symbol:r,spacing:0}),R.message(C.split(`
|
||||
`).map(S=>e("dim",S)),{output:i,secondarySymbol:r,symbol:r,spacing:y??u})},p=()=>{for(const m of o){const{header:y,value:v,full:C}=m;(y===void 0||y.length===0)&&v.length===0||g(m,void 0,a===!0&&C.length>0)}},f=(m,y,v)=>{if(d(!1),(v?.raw!==!0||!l)&&m.value!==""&&(m.value+=`
|
||||
`),m.value+=Me(y),l=v?.raw===!0,t.limit!==void 0){const C=m.value.split(`
|
||||
`),S=C.length-t.limit;if(S>0){const b=C.splice(0,S);a&&(m.full+=(m.full===""?"":`
|
||||
`)+b.join(`
|
||||
`))}m.value=C.join(`
|
||||
`)}c&&h()},h=()=>{for(const m of o)m.result?m.result.status==="error"?R.error(m.result.message,{output:i,secondarySymbol:r,spacing:0}):R.success(m.result.message,{output:i,secondarySymbol:r,spacing:0}):m.value!==""&&g(m,0)},I=(m,y)=>{d(!1),m.result=y,c&&h()};return{message(m,y){f(o[0],m,y)},group(m){const y={header:m,value:"",full:""};return o.push(y),{message(v,C){f(y,v,C)},error(v){I(y,{status:"error",message:v})},success(v){I(y,{status:"success",message:v})}}},error(m,y){d(!0),R.error(m,{output:i,secondarySymbol:r,spacing:1}),y?.showLog!==!1&&p(),o.splice(1,o.length-1),o[0].value="",o[0].full=""},success(m,y){d(!0),R.success(m,{output:i,secondarySymbol:r,spacing:1}),y?.showLog===!0&&p(),o.splice(1,o.length-1),o[0].value="",o[0].full=""}}},Pe=t=>new zt({validate:t.validate,placeholder:t.placeholder,defaultValue:t.defaultValue,initialValue:t.initialValue,output:t.output,signal:t.signal,input:t.input,render(){const i=t?.withGuide??T.withGuide,s=`${`${i?`${e("gray",$)}
|
||||
`:""}${P(this.state)} `}${t.message}
|
||||
`,r=t.placeholder?e("inverse",t.placeholder[0])+e("dim",t.placeholder.slice(1)):e(["inverse","hidden"],"_"),u=this.userInput?this.userInputWithCursor:r,n=this.value??"";switch(this.state){case"error":{const a=this.error?` ${e("yellow",this.error)}`:"",c=i?`${e("yellow",$)} `:"",o=i?e("yellow",x):"";return`${s.trim()}
|
||||
${c}${u}
|
||||
${o}${a}
|
||||
`}case"submit":{const a=n?` ${e("dim",n)}`:"",c=i?e("gray",$):"";return`${s}${c}${a}`}case"cancel":{const a=n?` ${e(["strikethrough","dim"],n)}`:"",c=i?e("gray",$):"";return`${s}${c}${a}${n.trim()?`
|
||||
${c}`:""}`}default:{const a=i?`${e("cyan",$)} `:"",c=i?e("cyan",x):"";return`${s}${a}${u}
|
||||
${c}
|
||||
`}}}}).prompt();export{$ as S_BAR,x as S_BAR_END,xt as S_BAR_END_RIGHT,st as S_BAR_H,lt as S_BAR_START,_t as S_BAR_START_RIGHT,et as S_CHECKBOX_ACTIVE,Y as S_CHECKBOX_INACTIVE,K as S_CHECKBOX_SELECTED,Gt as S_CONNECT_LEFT,dt as S_CORNER_BOTTOM_LEFT,$t as S_CORNER_BOTTOM_RIGHT,Mt as S_CORNER_TOP_LEFT,ct as S_CORNER_TOP_RIGHT,gt as S_ERROR,ht as S_INFO,Et as S_PASSWORD_MASK,z as S_RADIO_ACTIVE,U as S_RADIO_INACTIVE,Tt as S_STEP_ACTIVE,at as S_STEP_CANCEL,ut as S_STEP_ERROR,H as S_STEP_SUBMIT,pt as S_SUCCESS,mt as S_WARN,At as autocomplete,ie as autocompleteMultiselect,ae as box,me as cancel,ue as confirm,le as date,he as group,pe as groupMultiselect,ge as intro,ot as isCI,It as isTTY,F as limitOptions,R as log,fe as multiline,ve as multiselect,Se as note,ye as outro,Ce as password,Ie as path,_e as progress,xe as select,Ee as selectKey,ft as spinner,q as stream,P as symbol,yt as symbolBar,Oe as taskLog,Ge as tasks,Pe as text,tt as unicode,w as unicodeOr};
|
||||
//# sourceMappingURL=index.mjs.map
|
||||
+1
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user