mepcli 2.0.0-beta.1 → 2.0.0-beta.2

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 CHANGED
@@ -215,20 +215,42 @@ tasks.success('download', 'Downloaded');
215
215
  tasks.stop();
216
216
  ```
217
217
 
218
- ## Pipeline (Workflow Engine) <sub style="color:orange">(Experimental)</sub>
218
+ ## Pipeline (Workflow Engine)
219
219
 
220
- The **Pipeline** API allows you to orchestrate a sequence of prompts that share a common context. It follows the **Enter-and-Forget** philosophy (exceptions stop the flow) and uses a fluent Builder pattern.
220
+ Pipelines provide a powerful, sequential workflow engine. Based on the philosophy of **Enter-and-Forget (EAF)**, **Zero-Dependency**, and **Method Chaining**, Pipelines allow you to chain actions, prompts, and tasks sequentially, accumulating their results into a Context object.
221
221
 
222
222
  ```typescript
223
- const result = await MepCLI.pipeline()
224
- .step('name', () => MepCLI.text({ message: 'Name:' }))
223
+ import { MepCLI, Pipeline } from 'mepcli';
224
+ import { z } from 'zod';
225
+
226
+ interface Context {
227
+ name: string;
228
+ age: number;
229
+ email?: string;
230
+ parentalConsent?: boolean;
231
+ }
232
+
233
+ const result = await new Pipeline<Context>()
234
+ .step('name', async () => {
235
+ return await MepCLI.text({ message: 'What is your name?' });
236
+ }, {
237
+ validate: (val) => val.length > 0 || 'Name is required'
238
+ })
239
+ .step('age', async () => {
240
+ return await MepCLI.number({ message: 'How old are you?' });
241
+ }, {
242
+ transform: (val) => Number(val),
243
+ validate: z.number().min(0, "Age must be positive")
244
+ })
225
245
  .stepIf(
226
- (ctx) => ctx.name === 'admin',
227
- 'role',
228
- () => MepCLI.select({
229
- message: 'Role:',
230
- choices: ['SuperUser', 'Maintainer']
231
- })
246
+ (ctx) => ctx.age < 18,
247
+ 'parentalConsent',
248
+ async () => {
249
+ return await MepCLI.confirm({ message: 'Do you have parental consent?' });
250
+ },
251
+ {
252
+ validate: (val) => val === true || 'Parental consent is required'
253
+ }
232
254
  )
233
255
  .run();
234
256
  ```
package/dist/src/core.js CHANGED
@@ -127,7 +127,6 @@ let MepCLI = class MepCLI {
127
127
  }
128
128
  /**
129
129
  * Creates a new Pipeline instance for sequential workflow execution.
130
- * @experimental
131
130
  * @example
132
131
  * const context = await MepCLI.pipeline()
133
132
  * .step('ask-name', async (ctx) => {
@@ -1024,7 +1023,6 @@ let MepCLI = class MepCLI {
1024
1023
  }
1025
1024
  /**
1026
1025
  * Execute shell command with output streaming.
1027
- * @experimental
1028
1026
  * @example
1029
1027
  * await MepCLI.exec({
1030
1028
  * message: 'Running build...',
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/core.ts"],"sourcesContent":["import {\n TextOptions, SelectOptions, ConfirmOptions, CheckboxOptions, ThemeConfig, NumberOptions, ToggleOptions, ListOptions, SliderOptions,\n DateOptions, FileOptions, MultiSelectOptions, RatingOptions, AutocompleteOptions, SortOptions, TableOptions, EditorOptions, TreeOptions,\n KeypressOptions, FormOptions, SnippetOptions, SpamOptions, WaitOptions, CodeOptions, TreeSelectOptions, RangeOptions, TransferOptions, CronOptions,\n ColorOptions, GridOptions, CalendarOptions, MapOptions, SemVerOptions, IPOptions, OTPOptions, QuizSelectOptions, QuizTextOptions,\n KanbanOptions, KanbanItem, TimeOptions, HeatmapOptions, ByteOptions, PatternOptions, RegionOptions, SpreadsheetOptions, SelectRangeOptions, SortGridOptions\n} from './types';\nimport { SlotOptions, GaugeOptions, CalculatorOptions, EmojiOptions, MatchOptions, DiffOptions, DialOptions, DrawOptions, MultiColumnSelectOptions, FuzzySelectOptions, MillerOptions, ScrollOptions, BreadcrumbOptions, ScheduleOptions, ScheduleTask, DataInspectorOptions, ExecOptions, ShortcutOptions, ShortcutResult, SeatOptions, DependencyOptions, LicenseOptions, RegexOptions, BoxOptions, PhoneOptions } from './types';\nimport { theme } from './theme';\nimport { Spinner } from './spinner';\nimport { TextPrompt } from './prompts/text';\nimport { SelectPrompt } from './prompts/select';\nimport { CheckboxPrompt } from './prompts/checkbox';\nimport { ConfirmPrompt } from './prompts/confirm';\nimport { TogglePrompt } from './prompts/toggle';\nimport { NumberPrompt } from './prompts/number';\nimport { ListPrompt } from './prompts/list';\nimport { SliderPrompt } from './prompts/slider';\nimport { RangePrompt } from './prompts/range';\nimport { TransferPrompt } from './prompts/transfer';\nimport { CronPrompt } from './prompts/cron';\nimport { DatePrompt } from './prompts/date';\nimport { FilePrompt } from './prompts/file';\nimport { MultiSelectPrompt } from './prompts/multi-select';\nimport { RatingPrompt } from './prompts/rating';\nimport { AutocompletePrompt } from './prompts/autocomplete';\nimport { SortPrompt } from './prompts/sort';\nimport { TablePrompt } from './prompts/table';\nimport { EditorPrompt } from './prompts/editor';\nimport { TreePrompt } from './prompts/tree';\nimport { KeypressPrompt } from './prompts/keypress';\nimport { FormPrompt } from './prompts/form';\nimport { SnippetPrompt } from './prompts/snippet';\nimport { SpamPrompt } from './prompts/spam';\nimport { WaitPrompt } from './prompts/wait';\nimport { CodePrompt } from './prompts/code';\nimport { TreeSelectPrompt } from './prompts/tree-select';\nimport { ColorPrompt } from './prompts/color';\nimport { GridPrompt } from './prompts/grid';\nimport { CalendarPrompt } from './prompts/calendar';\nimport { MapPrompt } from './prompts/map';\nimport { SemVerPrompt } from './prompts/semver';\nimport { IPPrompt } from './prompts/ip';\nimport { OTPPrompt } from './prompts/otp';\nimport { QuizSelectPrompt } from './prompts/quiz-select';\nimport { QuizTextPrompt } from './prompts/quiz-text';\nimport { KanbanPrompt } from './prompts/kanban';\nimport { TimePrompt } from './prompts/time';\nimport { HeatmapPrompt } from './prompts/heatmap';\nimport { BytePrompt } from './prompts/byte';\nimport { SlotPrompt } from './prompts/slot';\nimport { GaugePrompt } from './prompts/gauge';\nimport { CalculatorPrompt } from './prompts/calculator';\nimport { EmojiPrompt } from './prompts/emoji';\nimport { MatchPrompt } from './prompts/match';\nimport { DiffPrompt } from './prompts/diff';\nimport { DialPrompt } from './prompts/dial';\nimport { DrawPrompt } from './prompts/draw';\nimport { MultiColumnSelectPrompt } from './prompts/multi-column-select';\nimport { FuzzySelectPrompt } from './prompts/fuzzy';\nimport { MillerPrompt } from './prompts/miller';\nimport { PatternPrompt } from './prompts/pattern';\nimport { RegionPrompt } from './prompts/region';\nimport { SpreadsheetPrompt } from './prompts/spreadsheet';\nimport { ScrollPrompt } from './prompts/scroll';\nimport { BreadcrumbPrompt } from './prompts/breadcrumb';\nimport { SchedulePrompt } from './prompts/schedule';\nimport { DataInspectorPrompt } from './prompts/data-inspector';\nimport { ExecPrompt } from './prompts/exec';\nimport { ShortcutPrompt } from './prompts/shortcut';\nimport { SeatPrompt } from './prompts/seat';\nimport { SelectRangePrompt } from './prompts/select-range';\nimport { SortGridPrompt } from './prompts/sort-grid';\nimport { DependencyPrompt } from './prompts/dependency';\nimport { LicensePrompt } from './prompts/license';\nimport { RegexPrompt } from './prompts/regex';\nimport { BoxPrompt } from './prompts/box';\nimport { PhonePrompt } from './prompts/phone';\nimport { FuzzyMultiColumnPrompt } from './prompts/fuzzy-multi-column';\nimport { MultiRangePrompt } from './prompts/multi-range';\nimport { BreadcrumbSearchPrompt } from './prompts/breadcrumb-search';\nimport { connectionString, ConnectionStringOptions, ConnectionStringResult } from './prompts/connection-string';\nimport { CurlPrompt, CurlOptions, CurlResult } from './prompts/curl';\nimport { Pipeline } from './pipeline';\nimport { TaskRunner } from './tasks';\nimport { TaskGroupOptions } from './types';\n\n/**\n * Public Facade for Mep\n */\nexport class MepCLI {\n public static theme: ThemeConfig = theme;\n\n /**\n * Creates a new Spinner instance to indicate background activity.\n * @example\n * const spinner = MepCLI.spinner('Loading data...');\n * spinner.start();\n * await someAsyncOperation();\n * spinner.stop('Done!');\n * @param message - The initial text to display next to the spinner.\n * @returns A Spinner instance to control the animation.\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/spinner.ts}\n */\n static spinner(message: string): Spinner {\n return new Spinner(message);\n }\n\n /**\n * Creates a new TaskRunner for managing multiple concurrent tasks (spinners/progress bars).\n * @example\n * const tasks = MepCLI.tasks({ concurrency: 2 });\n * tasks.add('Task 1', async () => { ... });\n * tasks.add('Task 2', async () => { ... });\n * await tasks.run();\n * @param options - Configuration for concurrency and renderer style.\n * @returns A TaskRunner instance.\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/task-runner.ts}\n */\n static tasks(options?: TaskGroupOptions): TaskRunner {\n return new TaskRunner(options);\n }\n\n /**\n * Creates a new Pipeline instance for sequential workflow execution.\n * @experimental\n * @example\n * const context = await MepCLI.pipeline()\n * .step('ask-name', async (ctx) => {\n * ctx.name = await MepCLI.text({ message: 'Name?' });\n * })\n * .run();\n * @returns A fluent Pipeline builder.\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/pipeline-demo.ts}\n */\n static pipeline<Ctx extends Record<string, any> = Record<string, any>>(): Pipeline<Ctx> {\n return new Pipeline<Ctx>();\n }\n\n /**\n * Standard text input prompt.\n * @example\n * const name = await MepCLI.text({\n * message: 'What is your GitHub username?',\n * placeholder: 'e.g., octocat',\n * validate: (val) => val.length > 0 ? true : 'Username is required!'\n * });\n * @param options - Configuration options including validation and placeholder.\n * @returns A promise resolving to the user's input string.\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/basic-prompts.ts}\n */\n static text(options: TextOptions): Promise<string> {\n return new TextPrompt(options).run();\n }\n\n /**\n * Single selection prompt from a list of choices.\n * @example\n * const framework = await MepCLI.select({\n * message: 'Pick a framework',\n * choices: [\n * { title: 'React', value: 'react', description: 'Meta' },\n * { title: 'Vue', value: 'vue', description: 'Community' },\n * ]\n * });\n * @param options - Choices and configuration.\n * @returns A promise resolving to the selected value (V).\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/selection-prompts.ts}\n */\n static select<const V>(options: SelectOptions<V>): Promise<V> {\n return new SelectPrompt(options).run();\n }\n\n /**\n * Multiple selection prompt with checkboxes.\n * @example\n * const toppings = await MepCLI.checkbox({\n * message: 'Select toppings',\n * choices: [\n * { title: 'Cheese', value: 'cheese', selected: true },\n * { title: 'Pepperoni', value: 'pepperoni' },\n * ],\n * min: 1\n * });\n * @param options - Choices, limits (min/max), and initial state.\n * @returns A promise resolving to an array of selected values (V[]).\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/selection-prompts.ts}\n */\n static checkbox<const V>(options: CheckboxOptions<V>): Promise<V[]> {\n return new CheckboxPrompt(options).run();\n }\n\n /**\n * Boolean confirmation prompt (Y/n).\n * @example\n * const proceed = await MepCLI.confirm({\n * message: 'Delete production database?',\n * initial: false\n * });\n * @param options - Message and initial boolean state.\n * @returns A promise resolving to true or false.\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/basic-prompts.ts}\n */\n static confirm(options: ConfirmOptions): Promise<boolean> {\n return new ConfirmPrompt(options).run();\n }\n\n /**\n * Secure password input (masked with *).\n * @example\n * const password = await MepCLI.password({\n * message: 'Enter password',\n * validate: (val) => val.length >= 8 || 'Must be 8+ chars'\n * });\n * @param options - Same as TextOptions but defaults to hidden input.\n * @returns A promise resolving to the password string.\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/basic-prompts.ts}\n */\n static password(options: TextOptions): Promise<string> {\n return new TextPrompt({ ...options, isPassword: true }).run();\n }\n\n /**\n * Secret input prompt (no visual feedback).\n * @example\n * const apiKey = await MepCLI.secret({\n * message: 'Paste API Key (hidden)'\n * });\n * @param options - Same as TextOptions, visual output is suppressed.\n * @returns A promise resolving to the secret string.\n * @see {@link https://github.com/CodeTease/mep/blob/main/example.ts}\n */\n static secret(options: TextOptions): Promise<string> {\n return new TextPrompt({ ...options, mask: '' }).run();\n }\n\n /**\n * Numeric input prompt with increments.\n * @example\n * const age = await MepCLI.number({\n * message: 'How old are you?',\n * min: 18,\n * max: 99,\n * initial: 25\n * });\n * @param options - Min, max, step, and initial value.\n * @returns A promise resolving to the entered number.\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/basic-prompts.ts}\n */\n static number(options: NumberOptions): Promise<number> {\n return new NumberPrompt(options).run();\n }\n\n /**\n * Binary toggle switch.\n * @example\n * const isDarkMode = await MepCLI.toggle({\n * message: 'Enable Dark Mode?',\n * activeText: 'On',\n * inactiveText: 'Off',\n * initial: true\n * });\n * @param options - Text labels for states and initial value.\n * @returns A promise resolving to the boolean state.\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/basic-prompts.ts}\n */\n static toggle(options: ToggleOptions): Promise<boolean> {\n return new TogglePrompt(options).run();\n }\n\n /**\n * Tag list input (comma separated or enter to add).\n * @example\n * const tags = await MepCLI.list({\n * message: 'Enter keywords (comma separated)',\n * initial: ['js', 'ts'],\n * placeholder: 'react, vue, svelte'\n * });\n * @param options - Placeholder and initial list.\n * @returns A promise resolving to an array of strings.\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/form-prompts.ts}\n */\n static list(options: ListOptions): Promise<string[]> {\n return new ListPrompt(options).run();\n }\n\n /**\n * Slider input for selecting a number within a range.\n * @example\n * const volume = await MepCLI.slider({\n * message: 'Set volume',\n * min: 0,\n * max: 100,\n * step: 5,\n * initial: 50\n * });\n * @param options - Min/max range, step, and unit label.\n * @returns A promise resolving to the selected number.\n * @see {@link https://github.com/CodeTease/mep/blob/main/example.ts}\n */\n static slider(options: SliderOptions): Promise<number> {\n return new SliderPrompt(options).run();\n }\n\n /**\n * Dual-handle slider for selecting a numeric range.\n * @example\n * const priceRange = await MepCLI.range({\n * message: 'Filter by price',\n * min: 0,\n * max: 1000,\n * initial: [100, 500]\n * });\n * @param options - Range bounds and initial start/end values.\n * @returns A promise resolving to a tuple `[start, end]`.\n * @see {@link https://github.com/CodeTease/mep/blob/main/example.ts}\n */\n static range(options: RangeOptions): Promise<[number, number]> {\n return new RangePrompt(options).run();\n }\n\n /**\n * Transfer list for moving items between two lists.\n * @example\n * const [left, right] = await MepCLI.transfer({\n * message: 'Assign users to team',\n * source: ['Alice', 'Bob', 'Charlie'],\n * target: ['Dave']\n * });\n * @param options - Source and target lists.\n * @returns A promise resolving to `[sourceItems, targetItems]`.\n * @see {@link https://github.com/CodeTease/mep/blob/main/example.ts}\n */\n static transfer<const V>(options: TransferOptions<V>): Promise<[V[], V[]]> {\n return new TransferPrompt(options).run();\n }\n\n /**\n * Cron expression generator/validator.\n * @example\n * const schedule = await MepCLI.cron({\n * message: 'Schedule backup',\n * initial: '0 0 * * *'\n * });\n * @param options - Initial cron string and placeholder.\n * @returns A promise resolving to the valid cron string.\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/cron-prompt.ts}\n */\n static cron(options: CronOptions): Promise<string> {\n return new CronPrompt(options).run();\n }\n\n /**\n * Interactive date picker.\n * @example\n * const birthday = await MepCLI.date({\n * message: 'When is your birthday?',\n * min: new Date(1900, 0, 1),\n * max: new Date()\n * });\n * @param options - Min/max dates and localization.\n * @returns A promise resolving to the selected Date object.\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/calendar-prompt.ts}\n */\n static date(options: DateOptions): Promise<Date> {\n return new DatePrompt(options).run();\n }\n\n /**\n * File system explorer.\n * @example\n * const configPath = await MepCLI.file({\n * message: 'Select config file',\n * basePath: './src',\n * extensions: ['json', 'yaml'],\n * });\n * @param options - Root path, allowed extensions, and directory filtering.\n * @returns A promise resolving to the absolute path of the selected file.\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/filesystem-prompts.ts}\n */\n static file(options: FileOptions): Promise<string> {\n return new FilePrompt(options).run();\n }\n\n /**\n * Multi-select checkbox with search support (alias for checkbox logic).\n * @example\n * const features = await MepCLI.multiSelect({\n * message: 'Select features',\n * choices: [\n * { title: 'TypeScript', value: 'ts' },\n * { title: 'ESLint', value: 'lint' }\n * ]\n * });\n * @param options - Same as CheckboxOptions.\n * @returns A promise resolving to an array of selected values.\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/selection-prompts.ts}\n */\n static multiSelect<const V>(options: MultiSelectOptions<V>): Promise<V[]> {\n return new MultiSelectPrompt(options).run();\n }\n\n /**\n * Star rating input.\n * @example\n * const stars = await MepCLI.rating({\n * message: 'Rate this library',\n * min: 1,\n * max: 5,\n * initial: 5\n * });\n * @param options - Min/max stars.\n * @returns A promise resolving to the numeric rating.\n * @see {@link https://github.com/CodeTease/mep/blob/main/example.ts}\n */\n static rating(options: RatingOptions): Promise<number> {\n return new RatingPrompt(options).run();\n }\n\n /**\n * Autocomplete search with async data fetching.\n * @example\n * const city = await MepCLI.autocomplete({\n * message: 'Search city',\n * suggest: async (input) => {\n * const results = await fetchCities(input);\n * return results.map(c => ({ title: c.name, value: c.id }));\n * }\n * });\n * @param options - `suggest` callback to filter/fetch choices.\n * @returns A promise resolving to the selected value.\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/selection-prompts.ts}\n */\n static autocomplete<const V>(options: AutocompleteOptions<V>): Promise<V> {\n return new AutocompletePrompt(options).run();\n }\n\n /**\n * List sorting prompt.\n * @example\n * const priority = await MepCLI.sort({\n * message: 'Prioritize tasks',\n * items: ['Fix bugs', 'Add features', 'Write docs']\n * });\n * @param options - Array of strings to be reordered.\n * @returns A promise resolving to the reordered array of strings.\n * @see {@link https://github.com/CodeTease/mep/blob/main/example.ts}\n */\n static sort(options: SortOptions): Promise<string[]> {\n return new SortPrompt(options).run();\n }\n\n /**\n * Interactive data table with row selection.\n * @example\n * const selectedRow = await MepCLI.table({\n * message: 'Pick a user',\n * columns: ['Name', 'Role'],\n * data: [\n * { value: 1, row: ['Alice', 'Admin'] },\n * { value: 2, row: ['Bob', 'User'] }\n * ]\n * });\n * @param options - Columns definition and row data.\n * @returns A promise resolving to the `value` of the selected row.\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/data-visualization.ts}\n */\n static table<const V>(options: TableOptions<V>): Promise<V> {\n return new TablePrompt(options).run();\n }\n\n /**\n * Open external editor (vim/nano/code) for long input.\n * @example\n * const bio = await MepCLI.editor({\n * message: 'Write your biography',\n * extension: 'md'\n * });\n * @param options - File extension for syntax highlighting.\n * @returns A promise resolving to the saved content.\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/form-prompts.ts}\n */\n static editor(options: EditorOptions): Promise<string> {\n return new EditorPrompt(options).run();\n }\n\n /**\n * Hierarchical tree selection.\n * @example\n * const node = await MepCLI.tree({\n * message: 'Select component',\n * data: [\n * { title: 'src', value: 'src', children: [\n * { title: 'index.ts', value: 'src/index.ts' }\n * ]}\n * ]\n * });\n * @param options - Tree structure data.\n * @returns A promise resolving to the selected node's value.\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/tree-prompt.ts}\n */\n static tree<const V>(options: TreeOptions<V>): Promise<V> {\n return new TreePrompt(options).run();\n }\n\n /**\n * Detect single keypress event.\n * @example\n * const key = await MepCLI.keypress({\n * message: 'Press any key to continue...'\n * });\n * @param options - Optional allowed keys filter.\n * @returns A promise resolving to the pressed key name.\n * @see {@link https://github.com/CodeTease/mep/blob/main/example.ts}\n */\n static keypress(options: KeypressOptions): Promise<string> {\n return new KeypressPrompt(options).run();\n }\n\n /**\n * Multi-field form input.\n * @example\n * const user = await MepCLI.form({\n * message: 'User Registration',\n * fields: [\n * { name: 'first', message: 'First Name' },\n * { name: 'last', message: 'Last Name' },\n * { name: 'email', message: 'Email', validate: (v) => v.includes('@') }\n * ]\n * });\n * @param options - Array of field definitions.\n * @returns A promise resolving to an object with field names as keys.\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/form-prompts.ts}\n */\n static form(options: FormOptions): Promise<Record<string, string>> {\n return new FormPrompt(options).run();\n }\n\n /**\n * Templated snippet generator.\n * @example\n * const component = await MepCLI.snippet({\n * message: 'Create Component',\n * template: `export function {{name}}() {\n * return <div>{{content}}</div>;\n * }`,\n * fields: {\n * name: { message: 'Component Name' },\n * content: { message: 'Content' }\n * }\n * });\n * @param options - Template string with {{variables}} and field config.\n * @returns A promise resolving to the compiled string.\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/snippet-prompt.ts}\n */\n static snippet(options: SnippetOptions): Promise<string> {\n return new SnippetPrompt(options).run();\n }\n\n /**\n * Anti-spam / Bot detection prompt.\n * @example\n * const isHuman = await MepCLI.spam({\n * message: 'Press Space 5 times quickly!',\n * threshold: 5,\n * spamKey: ' '\n * });\n * @param options - Threshold frequency and key to mash.\n * @returns A promise resolving to true (pass) or false (fail).\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/spam-prompt.ts}\n */\n static spam(options: SpamOptions): Promise<boolean> {\n return new SpamPrompt(options).run();\n }\n\n /**\n * Pause execution for a set time (with progress).\n * @example\n * await MepCLI.wait({\n * message: 'Processing...',\n * seconds: 3\n * });\n * @param options - Duration in seconds.\n * @returns A promise resolving after the delay.\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/wait-prompt.ts}\n */\n static wait(options: WaitOptions): Promise<void> {\n return new WaitPrompt(options).run();\n }\n\n /**\n * Source code editor with syntax highlighting.\n * @example\n * const json = await MepCLI.code({\n * message: 'Edit Configuration',\n * language: 'json',\n * template: '{\\n \"name\": \"project\"\\n}'\n * });\n * @param options - Language, initial template, and syntax highlighting.\n * @returns A promise resolving to the edited code string.\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/code-prompt.ts}\n */\n static code(options: CodeOptions): Promise<string> {\n return new CodePrompt(options).run();\n }\n\n /**\n * Tree Select Prompt (Multi-selection).\n * @example\n * const selectedPaths = await MepCLI.treeSelect({\n * message: 'Select files to include',\n * data: [\n * { title: 'src', value: 'src', children: [\n * { title: 'core.ts', value: 'src/core.ts' }\n * ]}\n * ]\n * });\n * @param options - Tree structure and initial selections.\n * @returns A promise that resolves to an array of selected values.\n * @see {@link https://github.com/CodeTease/mep/blob/main/example.ts}\n *\n * @notice Windows Compatibility:\n * When used in a long sequence of prompts, this component may experience\n * an input delay. If it feels \"blocked\", simply press 'Enter' once\n * to refresh the TTY stream.\n */\n static treeSelect<const V>(options: TreeSelectOptions<V>): Promise<V[]> {\n return new TreeSelectPrompt(options).run();\n }\n\n /**\n * Color picker (Hex, RGB, HSL).\n * @example\n * const color = await MepCLI.color({\n * message: 'Pick a theme color',\n * format: 'hex',\n * initial: '#3B82F6'\n * });\n * @param options - Format preference and initial value.\n * @returns A promise resolving to the color string.\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/color-prompt.ts}\n */\n static color(options: ColorOptions): Promise<string> {\n return new ColorPrompt(options).run();\n }\n\n /**\n * 2D Grid Checkbox (Boolean Matrix).\n * @example\n * const availability = await MepCLI.grid({\n * message: 'Select availability',\n * rows: ['Mon', 'Tue'],\n * columns: ['AM', 'PM']\n * });\n * @param options - Row/Column labels.\n * @returns A promise resolving to a 2D boolean array.\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/grid-prompt.ts}\n */\n static grid(options: GridOptions): Promise<boolean[][]> {\n return new GridPrompt(options).run();\n }\n\n /**\n * Calendar picker for dates or ranges.\n * @example\n * const range = await MepCLI.calendar({\n * message: 'Select vacation dates',\n * mode: 'range'\n * });\n * @param options - Selection mode (single/range) and bounds.\n * @returns A promise resolving to a Date or [Date, Date].\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/calendar-prompt.ts}\n */\n static calendar(options: CalendarOptions): Promise<Date | [Date, Date]> {\n return new CalendarPrompt(options).run() as Promise<Date | [Date, Date]>;\n }\n\n /**\n * Key-Value Map editor.\n * @example\n * const envVars = await MepCLI.map({\n * message: 'Environment Variables',\n * initial: { NODE_ENV: 'development', PORT: '3000' }\n * });\n * @param options - Initial key-value pairs.\n * @returns A promise resolving to a record of strings.\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/map-prompt.ts}\n */\n static map(options: MapOptions): Promise<Record<string, string>> {\n return new MapPrompt(options).run();\n }\n\n /**\n * Semantic Versioning incrementer.\n * @example\n * const nextVersion = await MepCLI.semver({\n * message: 'Bump version',\n * currentVersion: '1.0.0'\n * });\n * @param options - The current version string.\n * @returns A promise resolving to the new version string.\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/semver-prompt.ts}\n */\n static semver(options: SemVerOptions): Promise<string> {\n return new SemVerPrompt(options).run();\n }\n\n /**\n * IP Address input validator.\n * @example\n * const ip = await MepCLI.ip({\n * message: 'Enter Server IP',\n * initial: '127.0.0.1'\n * });\n * @param options - Initial value.\n * @returns A promise resolving to the valid IP string.\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/ip-prompt.ts}\n */\n static ip(options: IPOptions): Promise<string> {\n return new IPPrompt(options).run();\n }\n\n /**\n * One-Time Password / Pin Code input.\n * @example\n * const otp = await MepCLI.otp({\n * message: 'Enter 2FA Code',\n * length: 6\n * });\n * @param options - Length and masking options.\n * @returns A promise resolving to the entered code.\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/otp-prompt.ts}\n */\n static otp(options: OTPOptions): Promise<string> {\n return new OTPPrompt(options).run();\n }\n\n /**\n * Multiple choice quiz.\n * @example\n * const answer = await MepCLI.quizSelect({\n * message: 'What is 2 + 2?',\n * choices: [\n * { title: '3', value: 3 },\n * { title: '4', value: 4 }\n * ],\n * correctValue: 4\n * });\n * @param options - Choices and correct answer logic.\n * @returns A promise resolving to the selected value.\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/quiz-select-prompt.ts}\n */\n static quizSelect<const V>(options: QuizSelectOptions<V>): Promise<V> {\n return new QuizSelectPrompt(options).run();\n }\n\n /**\n * Text-based quiz with verification.\n * @example\n * const answer = await MepCLI.quizText({\n * message: 'Who is the author of Harry Potter?',\n * correctAnswer: 'J.K. Rowling',\n * verify: (val) => val.includes('Rowling')\n * });\n * @param options - Correct answer string or validation function.\n * @returns A promise resolving to the input string.\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/quiz-text-prompt.ts}\n */\n static quizText(options: QuizTextOptions): Promise<string> {\n return new QuizTextPrompt(options).run();\n }\n\n /**\n * Kanban board for organizing items.\n * @example\n * const board = await MepCLI.kanban({\n * message: 'Project Status',\n * columns: [\n * { id: 'todo', title: 'To Do', items: [{ id: '1', title: 'Task A' }] },\n * { id: 'done', title: 'Done', items: [] }\n * ]\n * });\n * @param options - Columns and their items.\n * @returns A promise resolving to the final column state.\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/kanban-prompt.ts}\n */\n static kanban<V extends KanbanItem>(options: KanbanOptions<V>): Promise<Record<string, V[]>> {\n return new KanbanPrompt(options).run();\n }\n\n /**\n * Time picker (HH:MM AM/PM).\n * @example\n * const time = await MepCLI.time({\n * message: 'Wake up time',\n * initial: '08:00 AM'\n * });\n * @param options - 12h/24h format and step intervals.\n * @returns A promise resolving to the time string.\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/time-prompt.ts}\n */\n static time(options: TimeOptions): Promise<string> {\n return new TimePrompt(options).run();\n }\n\n /**\n * Heatmap/Weekly schedule selector.\n * @example\n * const schedule = await MepCLI.heatmap({\n * message: 'When are you free?',\n * rows: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri'],\n * columns: ['Morning', 'Afternoon', 'Evening'],\n * legend: [\n * { value: 0, char: ' ', color: (t) => t },\n * { value: 1, char: '■', color: (t) => t }\n * ]\n * });\n * @param options - Grid labels and color scale legend.\n * @returns A promise resolving to a 2D array of values.\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/heatmap-prompt.ts}\n */\n static heatmap(options: HeatmapOptions): Promise<number[][]> {\n return new HeatmapPrompt(options).run();\n }\n\n /**\n * Byte size input (KB, MB, GB).\n * @example\n * const memory = await MepCLI.byte({\n * message: 'Allocate memory',\n * initial: 1024 * 1024 // 1MB\n * });\n * @param options - Min/Max bytes.\n * @returns A promise resolving to the number of bytes.\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/byte-prompt.ts}\n */\n static byte(options: ByteOptions): Promise<number> {\n return new BytePrompt(options).run();\n }\n\n /**\n * Slot machine style spinner.\n * @example\n * const fruit = await MepCLI.slot({\n * message: 'Spin to win!',\n * choices: ['🍒', '🍋', '🍇', '🍉'],\n * rows: 3\n * });\n * @param options - Items to cycle through.\n * @returns A promise resolving to the selected item string.\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/slot-prompt.ts}\n */\n static slot(options: SlotOptions): Promise<string> {\n return new SlotPrompt(options).run();\n }\n\n /**\n * Rhythm game style gauge input.\n * @example\n * const result = await MepCLI.gauge({\n * message: 'Hit the target!',\n * safeZone: 0.2 // 20%\n * });\n * @param options - Width and difficulty (safeZone).\n * @returns A promise resolving to 'success' or 'fail'.\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/gauge-prompt.ts}\n */\n static gauge(options: GaugeOptions): Promise<string> {\n return new GaugePrompt(options).run();\n }\n\n /**\n * Interactive calculator.\n * @example\n * const result = await MepCLI.calculator({\n * message: 'Calculate total',\n * initial: '10 + 5'\n * });\n * @param options - Initial expression.\n * @returns A promise resolving to the numeric result.\n * @see {@link https://github.com/CodeTease/mep/blob/main/example.ts}\n */\n static calculator(options: CalculatorOptions): Promise<number> {\n return new CalculatorPrompt(options).run();\n }\n\n /**\n * Emoji picker.\n * @example\n * const mood = await MepCLI.emoji({\n * message: 'How are you feeling?',\n * emojis: [\n * { name: 'Happy', char: '😀' },\n * { name: 'Sad', char: '😢' }\n * ]\n * });\n * @param options - List of emojis and recent history.\n * @returns A promise resolving to the selected emoji name/char.\n * @see {@link https://github.com/CodeTease/mep/blob/main/example.ts}\n */\n static emoji(options: EmojiOptions): Promise<string> {\n return new EmojiPrompt(options).run();\n }\n\n /**\n * Match/Connect items from two lists.\n * @example\n * const pairs = await MepCLI.match({\n * message: 'Match Capital to Country',\n * source: ['Paris', 'London'],\n * target: ['France', 'UK']\n * });\n * @param options - Source and Target lists.\n * @returns A promise resolving to linked pairs.\n * @see {@link https://github.com/CodeTease/mep/blob/main/example.ts}\n */\n static match(options: MatchOptions): Promise<Record<string, any[]>> {\n return new MatchPrompt(options).run();\n }\n\n /**\n * Git-style diff viewer.\n * @example\n * await MepCLI.diff({\n * message: 'Review changes',\n * original: 'foo\\nbar',\n * modified: 'foo\\nbaz'\n * });\n * @param options - Original and Modified strings.\n * @returns A promise resolving to a confirmation string.\n * @see {@link https://github.com/CodeTease/mep/blob/main/example.ts}\n */\n static diff(options: DiffOptions): Promise<string> {\n return new DiffPrompt(options).run();\n }\n\n /**\n * Rotary dial input.\n * @example\n * const volume = await MepCLI.dial({\n * message: 'Adjust Volume',\n * min: 0,\n * max: 100\n * });\n * @param options - Range and radius.\n * @returns A promise resolving to the number.\n * @see {@link https://github.com/CodeTease/mep/blob/main/example.ts}\n */\n static dial(options: DialOptions): Promise<number> {\n return new DialPrompt(options).run();\n }\n\n /**\n * Canvas drawing input.\n * @example\n * const art = await MepCLI.draw({\n * message: 'Draw your signature',\n * width: 20,\n * height: 10\n * });\n * @param options - Canvas dimensions and export type.\n * @returns A promise resolving to the raw matrix or text.\n * @see {@link https://github.com/CodeTease/mep/blob/main/example.ts}\n */\n static draw(options: DrawOptions): Promise<string | boolean[][]> {\n return new DrawPrompt(options).run();\n }\n\n /**\n * Multi-column selection (Grid layout).\n * @example\n * const choice = await MepCLI.multiColumnSelect({\n * message: 'Pick an option',\n * choices: [\n * { title: 'Option 1', value: 1 },\n * { title: 'Option 2', value: 2 },\n * { title: 'Option 3', value: 3 }\n * ],\n * cols: 3\n * });\n * @param options - Choices and column count.\n * @returns A promise resolving to the selected value.\n * @see {@link https://github.com/CodeTease/mep/blob/main/example.ts}\n */\n static multiColumnSelect<V>(options: MultiColumnSelectOptions<V>): Promise<V> {\n return new MultiColumnSelectPrompt(options).run();\n }\n\n /**\n * Fuzzy search selection.\n * @example\n * const pkg = await MepCLI.fuzzySelect({\n * message: 'Search package',\n * choices: [\n * { title: 'react', value: 'react' },\n * { title: 'react-dom', value: 'react-dom' }\n * ]\n * });\n * @param options - Choices to fuzzy search against.\n * @returns A promise resolving to the selected value.\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/selection-prompts.ts}\n */\n static fuzzySelect<V>(options: FuzzySelectOptions<V>): Promise<V> {\n return new FuzzySelectPrompt(options).run();\n }\n\n /**\n * Miller Columns (Cascading lists).\n * @example\n * const path = await MepCLI.miller({\n * message: 'Navigate file structure',\n * data: [\n * { title: 'src', value: 'src', children: [...] }\n * ]\n * });\n * @param options - Hierarchical data and separator.\n * @returns A promise resolving to the selected path array.\n * @see {@link https://github.com/CodeTease/mep/blob/main/example.ts}\n */\n static miller<V>(options: MillerOptions<V>): Promise<V[]> {\n return new MillerPrompt(options).run();\n }\n\n /**\n * Pattern Lock (Android style).\n * @example\n * const pattern = await MepCLI.pattern({\n * message: 'Draw unlock pattern',\n * rows: 3,\n * cols: 3\n * });\n * @param options - Grid dimensions.\n * @returns A promise resolving to an array of point indices.\n * @see {@link https://github.com/CodeTease/mep/blob/main/example.ts}\n */\n static pattern(options: PatternOptions): Promise<number[]> {\n return new PatternPrompt(options).run();\n }\n\n /**\n * Region/Map Selector (ASCII Art).\n * @example\n * const zone = await MepCLI.region({\n * message: 'Select Server Region',\n * mapArt: `...ascii map...`,\n * regions: [\n * { id: 'us-east', label: 'US East', x: 10, y: 5 }\n * ]\n * });\n * @param options - ASCII map string and interactive points.\n * @returns A promise resolving to the selected region ID.\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/map-prompt.ts}\n */\n static region(options: RegionOptions): Promise<string> {\n return new RegionPrompt(options).run();\n }\n\n /**\n * Spreadsheet/Grid Editor.\n * @example\n * const data = await MepCLI.spreadsheet({\n * message: 'Edit CSV Data',\n * columns: [{ name: 'Name', key: 'name' }, { name: 'Age', key: 'age' }],\n * data: [{ name: 'Alice', age: 25 }]\n * });\n * @param options - Column definitions and initial data rows.\n * @returns A promise resolving to the modified data array.\n * @see {@link https://github.com/CodeTease/mep/blob/main/example.ts}\n */\n static spreadsheet(options: SpreadsheetOptions): Promise<Record<string, any>[]> {\n return new SpreadsheetPrompt(options).run();\n }\n\n /**\n * Text Scroller (EULA/Terms).\n * @example\n * const accepted = await MepCLI.scroll({\n * message: 'Read Terms & Conditions',\n * content: 'Long text here...',\n * requireScrollToBottom: true\n * });\n * @param options - Text content and scroll enforcement.\n * @returns A promise resolving to a boolean (accepted).\n * @see {@link https://github.com/CodeTease/mep/blob/main/example.ts}\n */\n static scroll(options: ScrollOptions): Promise<boolean> {\n return new ScrollPrompt(options).run();\n }\n\n /**\n * Breadcrumb navigation.\n * @example\n * const path = await MepCLI.breadcrumb({\n * message: 'Navigate',\n * root: 'Home'\n * });\n * @param options - Initial path and separator.\n * @returns A promise resolving to the final path string.\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/breadcrumb-search-prompt.ts}\n */\n static breadcrumb(options: BreadcrumbOptions): Promise<string> {\n return new BreadcrumbPrompt(options).run();\n }\n\n /**\n * Schedule Planner (Gantt-like).\n * @example\n * const tasks = await MepCLI.schedule({\n * message: 'Plan your day',\n * data: [\n * { name: 'Meeting', start: new Date(), end: new Date() }\n * ]\n * });\n * @param options - List of scheduled tasks.\n * @returns A promise resolving to the modified task list.\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/schedule-prompt.ts}\n */\n static schedule(options: ScheduleOptions): Promise<ScheduleTask[]> {\n return new SchedulePrompt(options).run();\n }\n\n /**\n * JSON Data Inspector.\n * @example\n * await MepCLI.inspector({\n * message: 'Inspect Response',\n * data: { user: { id: 1, name: 'Alice' } }\n * });\n * @param options - Data object to explore.\n * @returns A promise resolving to the viewed data.\n * @see {@link https://github.com/CodeTease/mep/blob/main/example.ts}\n */\n static inspector(options: DataInspectorOptions): Promise<any> {\n return new DataInspectorPrompt(options).run();\n }\n\n /**\n * Execute shell command with output streaming.\n * @experimental\n * @example\n * await MepCLI.exec({\n * message: 'Running build...',\n * command: 'npm run build'\n * });\n * @param options - Command string and streaming preferences.\n * @returns A promise resolving when execution completes.\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/exec-prompt.ts}\n */\n static exec(options: ExecOptions): Promise<void> {\n return new ExecPrompt(options).run();\n }\n\n /**\n * Keyboard Shortcut recorder.\n * @example\n * const shortcut = await MepCLI.shortcut({\n * message: 'Press a key combination'\n * });\n * // Returns: { name: 'c', ctrl: true, shift: false, ... }\n * @param options - Initial value.\n * @returns A promise resolving to the captured key event.\n * @see {@link https://github.com/CodeTease/mep/blob/main/example.ts}\n */\n static shortcut(options: ShortcutOptions): Promise<ShortcutResult> {\n return new ShortcutPrompt(options).run();\n }\n\n /**\n * Seat Booking/Reservation selector.\n * @example\n * const seats = await MepCLI.seat({\n * message: 'Choose seats',\n * layout: [\n * 'aa_aa',\n * 'bb_bb'\n * ],\n * rows: ['A', 'B'],\n * cols: ['1', '2', '', '3', '4']\n * });\n * @param options - Layout string array and labelling.\n * @returns A promise resolving to selected seat IDs.\n * @see {@link https://github.com/CodeTease/mep/blob/main/example.ts}\n */\n static seat(options: SeatOptions): Promise<string[]> {\n return new SeatPrompt(options).run();\n }\n\n /**\n * Range selection within a list (Shift+Click style).\n * @example\n * const chunk = await MepCLI.selectRange({\n * message: 'Select commits to squash',\n * choices: [\n * { title: 'feat: A', value: 'a' },\n * { title: 'fix: B', value: 'b' },\n * { title: 'chore: C', value: 'c' }\n * ]\n * });\n * @param options - Choices list.\n * @returns A promise resolving to the sub-array of values.\n * @see {@link https://github.com/CodeTease/mep/blob/main/example.ts}\n */\n static selectRange<const V>(options: SelectRangeOptions<V>): Promise<V[]> {\n return new SelectRangePrompt(options).run();\n }\n\n /**\n * 2D Grid Sorting.\n * @example\n * const layout = await MepCLI.sortGrid({\n * message: 'Arrange Dashboard Widgets',\n * data: [\n * ['Clock', 'Weather'],\n * ['News', 'Calendar']\n * ]\n * });\n * @param options - 2D array of strings.\n * @returns A promise resolving to the reordered 2D array.\n * @see {@link https://github.com/CodeTease/mep/blob/main/example.ts}\n */\n static sortGrid(options: SortGridOptions): Promise<string[][]> {\n return new SortGridPrompt(options).run();\n }\n\n /**\n * Dependency Management (Resolves conflicts/requirements).\n * @example\n * const plugins = await MepCLI.dependency({\n * message: 'Install Plugins',\n * choices: [\n * { title: 'Plugin A', value: 'a' },\n * { title: 'Plugin B (Requires A)', value: 'b', dependsOn: ['a'] }\n * ]\n * });\n * @param options - Choices with dependency rules.\n * @returns A promise resolving to the valid set of selections.\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/dependency-prompts.ts}\n */\n static dependency<V>(options: DependencyOptions<V>): Promise<V[]> {\n return new DependencyPrompt(options).run();\n }\n\n /**\n * Open Source License selector.\n * @example\n * const license = await MepCLI.license({\n * message: 'Choose a license'\n * });\n * @param options - Default license.\n * @returns A promise resolving to the SPDX ID.\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/license-prompts.ts}\n */\n static license(options: LicenseOptions): Promise<string> {\n return new LicensePrompt(options).run();\n }\n\n /**\n * Regex Builder & Tester.\n * @example\n * const regex = await MepCLI.regex({\n * message: 'Create email regex',\n * tests: ['test@example.com', 'invalid-email']\n * });\n * @param options - Test cases to validate against.\n * @returns A promise resolving to the RegExp object.\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/regex-prompt.ts}\n */\n static regex(options: RegexOptions): Promise<RegExp> {\n return new RegexPrompt(options).run();\n }\n\n /**\n * Box Model Editor (CSS style).\n * @example\n * const margin = await MepCLI.box({\n * message: 'Set Margins',\n * initial: { top: 10, right: 20, bottom: 10, left: 20 }\n * });\n * @param options - Initial dimensions.\n * @returns A promise resolving to the box object.\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/box-prompt.ts}\n */\n static box(options: BoxOptions): Promise<{ top: number, right: number, bottom: number, left: number }> {\n return new BoxPrompt(options).run();\n }\n\n /**\n * Database Connection String Builder.\n * @example\n * const conn = await MepCLI.connectionString({\n * message: 'Configure Database',\n * initial: 'postgres://localhost:5432/mydb'\n * });\n * @param options - Initial URL.\n * @returns A promise resolving to parsed connection details.\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/connection-string-prompt.ts}\n */\n static connectionString(options: ConnectionStringOptions): Promise<ConnectionStringResult> {\n return connectionString(options);\n }\n\n /**\n * cURL Command Builder.\n * @example\n * const request = await MepCLI.curl({\n * message: 'Build API Request',\n * initial: 'curl -X POST https://api.example.com/v1/resource'\n * });\n * @param options - Initial command.\n * @returns A promise resolving to the parsed request object.\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/curl-prompt.ts}\n */\n static curl(options: CurlOptions): Promise<CurlResult> {\n return new CurlPrompt(options).run();\n }\n\n /**\n * Phone Number input (with country codes).\n * @example\n * const phone = await MepCLI.phone({\n * message: 'Enter phone number',\n * defaultCountry: 'US'\n * });\n * @param options - Default country ISO code.\n * @returns A promise resolving to the formatted number.\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/phone-prompt.ts}\n */\n static phone(options: PhoneOptions): Promise<string> {\n return new PhonePrompt(options).run();\n }\n\n /**\n * Fuzzy Multi-Column Selection.\n * @example\n * const user = await MepCLI.fuzzyMultiColumn({\n * message: 'Select User',\n * choices: [\n * { title: 'Alice', value: 1, description: 'Admin' },\n * { title: 'Bob', value: 2, description: 'User' }\n * ],\n * cols: 2\n * });\n * @param options - Choices and layout columns.\n * @returns A promise resolving to the selected value.\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/fuzzy-multi-column-prompt.ts}\n */\n static fuzzyMultiColumn<V>(options: MultiColumnSelectOptions<V>): Promise<V> {\n return new FuzzyMultiColumnPrompt(options).run();\n }\n\n /**\n * Multi-Range Selection (Discontinuous).\n * @example\n * const ranges = await MepCLI.multiRange({\n * message: 'Select lines to delete',\n * choices: lines.map((l, i) => ({ title: l, value: i }))\n * });\n * @param options - Choices.\n * @returns A promise resolving to selected values.\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/multi-range-prompt.ts}\n */\n static multiRange<V>(options: SelectRangeOptions<V>): Promise<V[]> {\n return new MultiRangePrompt(options).run();\n }\n\n /**\n * Breadcrumb Search (Navigator + Fuzzy Search).\n * @example\n * const file = await MepCLI.breadcrumbSearch({\n * message: 'Find file',\n * root: 'src'\n * });\n * @param options - Root path.\n * @returns A promise resolving to the selected path.\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/breadcrumb-search-prompt.ts}\n */\n static breadcrumbSearch(options: BreadcrumbOptions): Promise<string> {\n return new BreadcrumbSearchPrompt(options).run();\n }\n}\n"],"names":["MepCLI","spinner","message","Spinner","tasks","options","TaskRunner","pipeline","Pipeline","text","TextPrompt","run","select","SelectPrompt","checkbox","CheckboxPrompt","confirm","ConfirmPrompt","password","isPassword","secret","mask","number","NumberPrompt","toggle","TogglePrompt","list","ListPrompt","slider","SliderPrompt","range","RangePrompt","transfer","TransferPrompt","cron","CronPrompt","date","DatePrompt","file","FilePrompt","multiSelect","MultiSelectPrompt","rating","RatingPrompt","autocomplete","AutocompletePrompt","sort","SortPrompt","table","TablePrompt","editor","EditorPrompt","tree","TreePrompt","keypress","KeypressPrompt","form","FormPrompt","snippet","SnippetPrompt","spam","SpamPrompt","wait","WaitPrompt","code","CodePrompt","treeSelect","TreeSelectPrompt","color","ColorPrompt","grid","GridPrompt","calendar","CalendarPrompt","map","MapPrompt","semver","SemVerPrompt","ip","IPPrompt","otp","OTPPrompt","quizSelect","QuizSelectPrompt","quizText","QuizTextPrompt","kanban","KanbanPrompt","time","TimePrompt","heatmap","HeatmapPrompt","byte","BytePrompt","slot","SlotPrompt","gauge","GaugePrompt","calculator","CalculatorPrompt","emoji","EmojiPrompt","match","MatchPrompt","diff","DiffPrompt","dial","DialPrompt","draw","DrawPrompt","multiColumnSelect","MultiColumnSelectPrompt","fuzzySelect","FuzzySelectPrompt","miller","MillerPrompt","pattern","PatternPrompt","region","RegionPrompt","spreadsheet","SpreadsheetPrompt","scroll","ScrollPrompt","breadcrumb","BreadcrumbPrompt","schedule","SchedulePrompt","inspector","DataInspectorPrompt","exec","ExecPrompt","shortcut","ShortcutPrompt","seat","SeatPrompt","selectRange","SelectRangePrompt","sortGrid","SortGridPrompt","dependency","DependencyPrompt","license","LicensePrompt","regex","RegexPrompt","box","BoxPrompt","connectionString","curl","CurlPrompt","phone","PhonePrompt","fuzzyMultiColumn","FuzzyMultiColumnPrompt","multiRange","MultiRangePrompt","breadcrumbSearch","BreadcrumbSearchPrompt","theme"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/core.ts"],"sourcesContent":["import {\n TextOptions, SelectOptions, ConfirmOptions, CheckboxOptions, ThemeConfig, NumberOptions, ToggleOptions, ListOptions, SliderOptions,\n DateOptions, FileOptions, MultiSelectOptions, RatingOptions, AutocompleteOptions, SortOptions, TableOptions, EditorOptions, TreeOptions,\n KeypressOptions, FormOptions, SnippetOptions, SpamOptions, WaitOptions, CodeOptions, TreeSelectOptions, RangeOptions, TransferOptions, CronOptions,\n ColorOptions, GridOptions, CalendarOptions, MapOptions, SemVerOptions, IPOptions, OTPOptions, QuizSelectOptions, QuizTextOptions,\n KanbanOptions, KanbanItem, TimeOptions, HeatmapOptions, ByteOptions, PatternOptions, RegionOptions, SpreadsheetOptions, SelectRangeOptions, SortGridOptions\n} from './types';\nimport { SlotOptions, GaugeOptions, CalculatorOptions, EmojiOptions, MatchOptions, DiffOptions, DialOptions, DrawOptions, MultiColumnSelectOptions, FuzzySelectOptions, MillerOptions, ScrollOptions, BreadcrumbOptions, ScheduleOptions, ScheduleTask, DataInspectorOptions, ExecOptions, ShortcutOptions, ShortcutResult, SeatOptions, DependencyOptions, LicenseOptions, RegexOptions, BoxOptions, PhoneOptions } from './types';\nimport { theme } from './theme';\nimport { Spinner } from './spinner';\nimport { TextPrompt } from './prompts/text';\nimport { SelectPrompt } from './prompts/select';\nimport { CheckboxPrompt } from './prompts/checkbox';\nimport { ConfirmPrompt } from './prompts/confirm';\nimport { TogglePrompt } from './prompts/toggle';\nimport { NumberPrompt } from './prompts/number';\nimport { ListPrompt } from './prompts/list';\nimport { SliderPrompt } from './prompts/slider';\nimport { RangePrompt } from './prompts/range';\nimport { TransferPrompt } from './prompts/transfer';\nimport { CronPrompt } from './prompts/cron';\nimport { DatePrompt } from './prompts/date';\nimport { FilePrompt } from './prompts/file';\nimport { MultiSelectPrompt } from './prompts/multi-select';\nimport { RatingPrompt } from './prompts/rating';\nimport { AutocompletePrompt } from './prompts/autocomplete';\nimport { SortPrompt } from './prompts/sort';\nimport { TablePrompt } from './prompts/table';\nimport { EditorPrompt } from './prompts/editor';\nimport { TreePrompt } from './prompts/tree';\nimport { KeypressPrompt } from './prompts/keypress';\nimport { FormPrompt } from './prompts/form';\nimport { SnippetPrompt } from './prompts/snippet';\nimport { SpamPrompt } from './prompts/spam';\nimport { WaitPrompt } from './prompts/wait';\nimport { CodePrompt } from './prompts/code';\nimport { TreeSelectPrompt } from './prompts/tree-select';\nimport { ColorPrompt } from './prompts/color';\nimport { GridPrompt } from './prompts/grid';\nimport { CalendarPrompt } from './prompts/calendar';\nimport { MapPrompt } from './prompts/map';\nimport { SemVerPrompt } from './prompts/semver';\nimport { IPPrompt } from './prompts/ip';\nimport { OTPPrompt } from './prompts/otp';\nimport { QuizSelectPrompt } from './prompts/quiz-select';\nimport { QuizTextPrompt } from './prompts/quiz-text';\nimport { KanbanPrompt } from './prompts/kanban';\nimport { TimePrompt } from './prompts/time';\nimport { HeatmapPrompt } from './prompts/heatmap';\nimport { BytePrompt } from './prompts/byte';\nimport { SlotPrompt } from './prompts/slot';\nimport { GaugePrompt } from './prompts/gauge';\nimport { CalculatorPrompt } from './prompts/calculator';\nimport { EmojiPrompt } from './prompts/emoji';\nimport { MatchPrompt } from './prompts/match';\nimport { DiffPrompt } from './prompts/diff';\nimport { DialPrompt } from './prompts/dial';\nimport { DrawPrompt } from './prompts/draw';\nimport { MultiColumnSelectPrompt } from './prompts/multi-column-select';\nimport { FuzzySelectPrompt } from './prompts/fuzzy';\nimport { MillerPrompt } from './prompts/miller';\nimport { PatternPrompt } from './prompts/pattern';\nimport { RegionPrompt } from './prompts/region';\nimport { SpreadsheetPrompt } from './prompts/spreadsheet';\nimport { ScrollPrompt } from './prompts/scroll';\nimport { BreadcrumbPrompt } from './prompts/breadcrumb';\nimport { SchedulePrompt } from './prompts/schedule';\nimport { DataInspectorPrompt } from './prompts/data-inspector';\nimport { ExecPrompt } from './prompts/exec';\nimport { ShortcutPrompt } from './prompts/shortcut';\nimport { SeatPrompt } from './prompts/seat';\nimport { SelectRangePrompt } from './prompts/select-range';\nimport { SortGridPrompt } from './prompts/sort-grid';\nimport { DependencyPrompt } from './prompts/dependency';\nimport { LicensePrompt } from './prompts/license';\nimport { RegexPrompt } from './prompts/regex';\nimport { BoxPrompt } from './prompts/box';\nimport { PhonePrompt } from './prompts/phone';\nimport { FuzzyMultiColumnPrompt } from './prompts/fuzzy-multi-column';\nimport { MultiRangePrompt } from './prompts/multi-range';\nimport { BreadcrumbSearchPrompt } from './prompts/breadcrumb-search';\nimport { connectionString, ConnectionStringOptions, ConnectionStringResult } from './prompts/connection-string';\nimport { CurlPrompt, CurlOptions, CurlResult } from './prompts/curl';\nimport { Pipeline } from './pipeline';\nimport { TaskRunner } from './tasks';\nimport { TaskGroupOptions } from './types';\n\n/**\n * Public Facade for Mep\n */\nexport class MepCLI {\n public static theme: ThemeConfig = theme;\n\n /**\n * Creates a new Spinner instance to indicate background activity.\n * @example\n * const spinner = MepCLI.spinner('Loading data...');\n * spinner.start();\n * await someAsyncOperation();\n * spinner.stop('Done!');\n * @param message - The initial text to display next to the spinner.\n * @returns A Spinner instance to control the animation.\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/spinner.ts}\n */\n static spinner(message: string): Spinner {\n return new Spinner(message);\n }\n\n /**\n * Creates a new TaskRunner for managing multiple concurrent tasks (spinners/progress bars).\n * @example\n * const tasks = MepCLI.tasks({ concurrency: 2 });\n * tasks.add('Task 1', async () => { ... });\n * tasks.add('Task 2', async () => { ... });\n * await tasks.run();\n * @param options - Configuration for concurrency and renderer style.\n * @returns A TaskRunner instance.\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/task-runner.ts}\n */\n static tasks(options?: TaskGroupOptions): TaskRunner {\n return new TaskRunner(options);\n }\n\n /**\n * Creates a new Pipeline instance for sequential workflow execution.\n * @example\n * const context = await MepCLI.pipeline()\n * .step('ask-name', async (ctx) => {\n * ctx.name = await MepCLI.text({ message: 'Name?' });\n * })\n * .run();\n * @returns A fluent Pipeline builder.\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/pipeline-demo.ts}\n */\n static pipeline<Ctx extends Record<string, any> = Record<string, any>>(): Pipeline<Ctx> {\n return new Pipeline<Ctx>();\n }\n\n /**\n * Standard text input prompt.\n * @example\n * const name = await MepCLI.text({\n * message: 'What is your GitHub username?',\n * placeholder: 'e.g., octocat',\n * validate: (val) => val.length > 0 ? true : 'Username is required!'\n * });\n * @param options - Configuration options including validation and placeholder.\n * @returns A promise resolving to the user's input string.\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/basic-prompts.ts}\n */\n static text(options: TextOptions): Promise<string> {\n return new TextPrompt(options).run();\n }\n\n /**\n * Single selection prompt from a list of choices.\n * @example\n * const framework = await MepCLI.select({\n * message: 'Pick a framework',\n * choices: [\n * { title: 'React', value: 'react', description: 'Meta' },\n * { title: 'Vue', value: 'vue', description: 'Community' },\n * ]\n * });\n * @param options - Choices and configuration.\n * @returns A promise resolving to the selected value (V).\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/selection-prompts.ts}\n */\n static select<const V>(options: SelectOptions<V>): Promise<V> {\n return new SelectPrompt(options).run();\n }\n\n /**\n * Multiple selection prompt with checkboxes.\n * @example\n * const toppings = await MepCLI.checkbox({\n * message: 'Select toppings',\n * choices: [\n * { title: 'Cheese', value: 'cheese', selected: true },\n * { title: 'Pepperoni', value: 'pepperoni' },\n * ],\n * min: 1\n * });\n * @param options - Choices, limits (min/max), and initial state.\n * @returns A promise resolving to an array of selected values (V[]).\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/selection-prompts.ts}\n */\n static checkbox<const V>(options: CheckboxOptions<V>): Promise<V[]> {\n return new CheckboxPrompt(options).run();\n }\n\n /**\n * Boolean confirmation prompt (Y/n).\n * @example\n * const proceed = await MepCLI.confirm({\n * message: 'Delete production database?',\n * initial: false\n * });\n * @param options - Message and initial boolean state.\n * @returns A promise resolving to true or false.\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/basic-prompts.ts}\n */\n static confirm(options: ConfirmOptions): Promise<boolean> {\n return new ConfirmPrompt(options).run();\n }\n\n /**\n * Secure password input (masked with *).\n * @example\n * const password = await MepCLI.password({\n * message: 'Enter password',\n * validate: (val) => val.length >= 8 || 'Must be 8+ chars'\n * });\n * @param options - Same as TextOptions but defaults to hidden input.\n * @returns A promise resolving to the password string.\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/basic-prompts.ts}\n */\n static password(options: TextOptions): Promise<string> {\n return new TextPrompt({ ...options, isPassword: true }).run();\n }\n\n /**\n * Secret input prompt (no visual feedback).\n * @example\n * const apiKey = await MepCLI.secret({\n * message: 'Paste API Key (hidden)'\n * });\n * @param options - Same as TextOptions, visual output is suppressed.\n * @returns A promise resolving to the secret string.\n * @see {@link https://github.com/CodeTease/mep/blob/main/example.ts}\n */\n static secret(options: TextOptions): Promise<string> {\n return new TextPrompt({ ...options, mask: '' }).run();\n }\n\n /**\n * Numeric input prompt with increments.\n * @example\n * const age = await MepCLI.number({\n * message: 'How old are you?',\n * min: 18,\n * max: 99,\n * initial: 25\n * });\n * @param options - Min, max, step, and initial value.\n * @returns A promise resolving to the entered number.\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/basic-prompts.ts}\n */\n static number(options: NumberOptions): Promise<number> {\n return new NumberPrompt(options).run();\n }\n\n /**\n * Binary toggle switch.\n * @example\n * const isDarkMode = await MepCLI.toggle({\n * message: 'Enable Dark Mode?',\n * activeText: 'On',\n * inactiveText: 'Off',\n * initial: true\n * });\n * @param options - Text labels for states and initial value.\n * @returns A promise resolving to the boolean state.\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/basic-prompts.ts}\n */\n static toggle(options: ToggleOptions): Promise<boolean> {\n return new TogglePrompt(options).run();\n }\n\n /**\n * Tag list input (comma separated or enter to add).\n * @example\n * const tags = await MepCLI.list({\n * message: 'Enter keywords (comma separated)',\n * initial: ['js', 'ts'],\n * placeholder: 'react, vue, svelte'\n * });\n * @param options - Placeholder and initial list.\n * @returns A promise resolving to an array of strings.\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/form-prompts.ts}\n */\n static list(options: ListOptions): Promise<string[]> {\n return new ListPrompt(options).run();\n }\n\n /**\n * Slider input for selecting a number within a range.\n * @example\n * const volume = await MepCLI.slider({\n * message: 'Set volume',\n * min: 0,\n * max: 100,\n * step: 5,\n * initial: 50\n * });\n * @param options - Min/max range, step, and unit label.\n * @returns A promise resolving to the selected number.\n * @see {@link https://github.com/CodeTease/mep/blob/main/example.ts}\n */\n static slider(options: SliderOptions): Promise<number> {\n return new SliderPrompt(options).run();\n }\n\n /**\n * Dual-handle slider for selecting a numeric range.\n * @example\n * const priceRange = await MepCLI.range({\n * message: 'Filter by price',\n * min: 0,\n * max: 1000,\n * initial: [100, 500]\n * });\n * @param options - Range bounds and initial start/end values.\n * @returns A promise resolving to a tuple `[start, end]`.\n * @see {@link https://github.com/CodeTease/mep/blob/main/example.ts}\n */\n static range(options: RangeOptions): Promise<[number, number]> {\n return new RangePrompt(options).run();\n }\n\n /**\n * Transfer list for moving items between two lists.\n * @example\n * const [left, right] = await MepCLI.transfer({\n * message: 'Assign users to team',\n * source: ['Alice', 'Bob', 'Charlie'],\n * target: ['Dave']\n * });\n * @param options - Source and target lists.\n * @returns A promise resolving to `[sourceItems, targetItems]`.\n * @see {@link https://github.com/CodeTease/mep/blob/main/example.ts}\n */\n static transfer<const V>(options: TransferOptions<V>): Promise<[V[], V[]]> {\n return new TransferPrompt(options).run();\n }\n\n /**\n * Cron expression generator/validator.\n * @example\n * const schedule = await MepCLI.cron({\n * message: 'Schedule backup',\n * initial: '0 0 * * *'\n * });\n * @param options - Initial cron string and placeholder.\n * @returns A promise resolving to the valid cron string.\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/cron-prompt.ts}\n */\n static cron(options: CronOptions): Promise<string> {\n return new CronPrompt(options).run();\n }\n\n /**\n * Interactive date picker.\n * @example\n * const birthday = await MepCLI.date({\n * message: 'When is your birthday?',\n * min: new Date(1900, 0, 1),\n * max: new Date()\n * });\n * @param options - Min/max dates and localization.\n * @returns A promise resolving to the selected Date object.\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/calendar-prompt.ts}\n */\n static date(options: DateOptions): Promise<Date> {\n return new DatePrompt(options).run();\n }\n\n /**\n * File system explorer.\n * @example\n * const configPath = await MepCLI.file({\n * message: 'Select config file',\n * basePath: './src',\n * extensions: ['json', 'yaml'],\n * });\n * @param options - Root path, allowed extensions, and directory filtering.\n * @returns A promise resolving to the absolute path of the selected file.\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/filesystem-prompts.ts}\n */\n static file(options: FileOptions): Promise<string> {\n return new FilePrompt(options).run();\n }\n\n /**\n * Multi-select checkbox with search support (alias for checkbox logic).\n * @example\n * const features = await MepCLI.multiSelect({\n * message: 'Select features',\n * choices: [\n * { title: 'TypeScript', value: 'ts' },\n * { title: 'ESLint', value: 'lint' }\n * ]\n * });\n * @param options - Same as CheckboxOptions.\n * @returns A promise resolving to an array of selected values.\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/selection-prompts.ts}\n */\n static multiSelect<const V>(options: MultiSelectOptions<V>): Promise<V[]> {\n return new MultiSelectPrompt(options).run();\n }\n\n /**\n * Star rating input.\n * @example\n * const stars = await MepCLI.rating({\n * message: 'Rate this library',\n * min: 1,\n * max: 5,\n * initial: 5\n * });\n * @param options - Min/max stars.\n * @returns A promise resolving to the numeric rating.\n * @see {@link https://github.com/CodeTease/mep/blob/main/example.ts}\n */\n static rating(options: RatingOptions): Promise<number> {\n return new RatingPrompt(options).run();\n }\n\n /**\n * Autocomplete search with async data fetching.\n * @example\n * const city = await MepCLI.autocomplete({\n * message: 'Search city',\n * suggest: async (input) => {\n * const results = await fetchCities(input);\n * return results.map(c => ({ title: c.name, value: c.id }));\n * }\n * });\n * @param options - `suggest` callback to filter/fetch choices.\n * @returns A promise resolving to the selected value.\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/selection-prompts.ts}\n */\n static autocomplete<const V>(options: AutocompleteOptions<V>): Promise<V> {\n return new AutocompletePrompt(options).run();\n }\n\n /**\n * List sorting prompt.\n * @example\n * const priority = await MepCLI.sort({\n * message: 'Prioritize tasks',\n * items: ['Fix bugs', 'Add features', 'Write docs']\n * });\n * @param options - Array of strings to be reordered.\n * @returns A promise resolving to the reordered array of strings.\n * @see {@link https://github.com/CodeTease/mep/blob/main/example.ts}\n */\n static sort(options: SortOptions): Promise<string[]> {\n return new SortPrompt(options).run();\n }\n\n /**\n * Interactive data table with row selection.\n * @example\n * const selectedRow = await MepCLI.table({\n * message: 'Pick a user',\n * columns: ['Name', 'Role'],\n * data: [\n * { value: 1, row: ['Alice', 'Admin'] },\n * { value: 2, row: ['Bob', 'User'] }\n * ]\n * });\n * @param options - Columns definition and row data.\n * @returns A promise resolving to the `value` of the selected row.\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/data-visualization.ts}\n */\n static table<const V>(options: TableOptions<V>): Promise<V> {\n return new TablePrompt(options).run();\n }\n\n /**\n * Open external editor (vim/nano/code) for long input.\n * @example\n * const bio = await MepCLI.editor({\n * message: 'Write your biography',\n * extension: 'md'\n * });\n * @param options - File extension for syntax highlighting.\n * @returns A promise resolving to the saved content.\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/form-prompts.ts}\n */\n static editor(options: EditorOptions): Promise<string> {\n return new EditorPrompt(options).run();\n }\n\n /**\n * Hierarchical tree selection.\n * @example\n * const node = await MepCLI.tree({\n * message: 'Select component',\n * data: [\n * { title: 'src', value: 'src', children: [\n * { title: 'index.ts', value: 'src/index.ts' }\n * ]}\n * ]\n * });\n * @param options - Tree structure data.\n * @returns A promise resolving to the selected node's value.\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/tree-prompt.ts}\n */\n static tree<const V>(options: TreeOptions<V>): Promise<V> {\n return new TreePrompt(options).run();\n }\n\n /**\n * Detect single keypress event.\n * @example\n * const key = await MepCLI.keypress({\n * message: 'Press any key to continue...'\n * });\n * @param options - Optional allowed keys filter.\n * @returns A promise resolving to the pressed key name.\n * @see {@link https://github.com/CodeTease/mep/blob/main/example.ts}\n */\n static keypress(options: KeypressOptions): Promise<string> {\n return new KeypressPrompt(options).run();\n }\n\n /**\n * Multi-field form input.\n * @example\n * const user = await MepCLI.form({\n * message: 'User Registration',\n * fields: [\n * { name: 'first', message: 'First Name' },\n * { name: 'last', message: 'Last Name' },\n * { name: 'email', message: 'Email', validate: (v) => v.includes('@') }\n * ]\n * });\n * @param options - Array of field definitions.\n * @returns A promise resolving to an object with field names as keys.\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/form-prompts.ts}\n */\n static form(options: FormOptions): Promise<Record<string, string>> {\n return new FormPrompt(options).run();\n }\n\n /**\n * Templated snippet generator.\n * @example\n * const component = await MepCLI.snippet({\n * message: 'Create Component',\n * template: `export function {{name}}() {\n * return <div>{{content}}</div>;\n * }`,\n * fields: {\n * name: { message: 'Component Name' },\n * content: { message: 'Content' }\n * }\n * });\n * @param options - Template string with {{variables}} and field config.\n * @returns A promise resolving to the compiled string.\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/snippet-prompt.ts}\n */\n static snippet(options: SnippetOptions): Promise<string> {\n return new SnippetPrompt(options).run();\n }\n\n /**\n * Anti-spam / Bot detection prompt.\n * @example\n * const isHuman = await MepCLI.spam({\n * message: 'Press Space 5 times quickly!',\n * threshold: 5,\n * spamKey: ' '\n * });\n * @param options - Threshold frequency and key to mash.\n * @returns A promise resolving to true (pass) or false (fail).\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/spam-prompt.ts}\n */\n static spam(options: SpamOptions): Promise<boolean> {\n return new SpamPrompt(options).run();\n }\n\n /**\n * Pause execution for a set time (with progress).\n * @example\n * await MepCLI.wait({\n * message: 'Processing...',\n * seconds: 3\n * });\n * @param options - Duration in seconds.\n * @returns A promise resolving after the delay.\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/wait-prompt.ts}\n */\n static wait(options: WaitOptions): Promise<void> {\n return new WaitPrompt(options).run();\n }\n\n /**\n * Source code editor with syntax highlighting.\n * @example\n * const json = await MepCLI.code({\n * message: 'Edit Configuration',\n * language: 'json',\n * template: '{\\n \"name\": \"project\"\\n}'\n * });\n * @param options - Language, initial template, and syntax highlighting.\n * @returns A promise resolving to the edited code string.\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/code-prompt.ts}\n */\n static code(options: CodeOptions): Promise<string> {\n return new CodePrompt(options).run();\n }\n\n /**\n * Tree Select Prompt (Multi-selection).\n * @example\n * const selectedPaths = await MepCLI.treeSelect({\n * message: 'Select files to include',\n * data: [\n * { title: 'src', value: 'src', children: [\n * { title: 'core.ts', value: 'src/core.ts' }\n * ]}\n * ]\n * });\n * @param options - Tree structure and initial selections.\n * @returns A promise that resolves to an array of selected values.\n * @see {@link https://github.com/CodeTease/mep/blob/main/example.ts}\n *\n * @notice Windows Compatibility:\n * When used in a long sequence of prompts, this component may experience\n * an input delay. If it feels \"blocked\", simply press 'Enter' once\n * to refresh the TTY stream.\n */\n static treeSelect<const V>(options: TreeSelectOptions<V>): Promise<V[]> {\n return new TreeSelectPrompt(options).run();\n }\n\n /**\n * Color picker (Hex, RGB, HSL).\n * @example\n * const color = await MepCLI.color({\n * message: 'Pick a theme color',\n * format: 'hex',\n * initial: '#3B82F6'\n * });\n * @param options - Format preference and initial value.\n * @returns A promise resolving to the color string.\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/color-prompt.ts}\n */\n static color(options: ColorOptions): Promise<string> {\n return new ColorPrompt(options).run();\n }\n\n /**\n * 2D Grid Checkbox (Boolean Matrix).\n * @example\n * const availability = await MepCLI.grid({\n * message: 'Select availability',\n * rows: ['Mon', 'Tue'],\n * columns: ['AM', 'PM']\n * });\n * @param options - Row/Column labels.\n * @returns A promise resolving to a 2D boolean array.\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/grid-prompt.ts}\n */\n static grid(options: GridOptions): Promise<boolean[][]> {\n return new GridPrompt(options).run();\n }\n\n /**\n * Calendar picker for dates or ranges.\n * @example\n * const range = await MepCLI.calendar({\n * message: 'Select vacation dates',\n * mode: 'range'\n * });\n * @param options - Selection mode (single/range) and bounds.\n * @returns A promise resolving to a Date or [Date, Date].\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/calendar-prompt.ts}\n */\n static calendar(options: CalendarOptions): Promise<Date | [Date, Date]> {\n return new CalendarPrompt(options).run() as Promise<Date | [Date, Date]>;\n }\n\n /**\n * Key-Value Map editor.\n * @example\n * const envVars = await MepCLI.map({\n * message: 'Environment Variables',\n * initial: { NODE_ENV: 'development', PORT: '3000' }\n * });\n * @param options - Initial key-value pairs.\n * @returns A promise resolving to a record of strings.\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/map-prompt.ts}\n */\n static map(options: MapOptions): Promise<Record<string, string>> {\n return new MapPrompt(options).run();\n }\n\n /**\n * Semantic Versioning incrementer.\n * @example\n * const nextVersion = await MepCLI.semver({\n * message: 'Bump version',\n * currentVersion: '1.0.0'\n * });\n * @param options - The current version string.\n * @returns A promise resolving to the new version string.\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/semver-prompt.ts}\n */\n static semver(options: SemVerOptions): Promise<string> {\n return new SemVerPrompt(options).run();\n }\n\n /**\n * IP Address input validator.\n * @example\n * const ip = await MepCLI.ip({\n * message: 'Enter Server IP',\n * initial: '127.0.0.1'\n * });\n * @param options - Initial value.\n * @returns A promise resolving to the valid IP string.\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/ip-prompt.ts}\n */\n static ip(options: IPOptions): Promise<string> {\n return new IPPrompt(options).run();\n }\n\n /**\n * One-Time Password / Pin Code input.\n * @example\n * const otp = await MepCLI.otp({\n * message: 'Enter 2FA Code',\n * length: 6\n * });\n * @param options - Length and masking options.\n * @returns A promise resolving to the entered code.\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/otp-prompt.ts}\n */\n static otp(options: OTPOptions): Promise<string> {\n return new OTPPrompt(options).run();\n }\n\n /**\n * Multiple choice quiz.\n * @example\n * const answer = await MepCLI.quizSelect({\n * message: 'What is 2 + 2?',\n * choices: [\n * { title: '3', value: 3 },\n * { title: '4', value: 4 }\n * ],\n * correctValue: 4\n * });\n * @param options - Choices and correct answer logic.\n * @returns A promise resolving to the selected value.\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/quiz-select-prompt.ts}\n */\n static quizSelect<const V>(options: QuizSelectOptions<V>): Promise<V> {\n return new QuizSelectPrompt(options).run();\n }\n\n /**\n * Text-based quiz with verification.\n * @example\n * const answer = await MepCLI.quizText({\n * message: 'Who is the author of Harry Potter?',\n * correctAnswer: 'J.K. Rowling',\n * verify: (val) => val.includes('Rowling')\n * });\n * @param options - Correct answer string or validation function.\n * @returns A promise resolving to the input string.\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/quiz-text-prompt.ts}\n */\n static quizText(options: QuizTextOptions): Promise<string> {\n return new QuizTextPrompt(options).run();\n }\n\n /**\n * Kanban board for organizing items.\n * @example\n * const board = await MepCLI.kanban({\n * message: 'Project Status',\n * columns: [\n * { id: 'todo', title: 'To Do', items: [{ id: '1', title: 'Task A' }] },\n * { id: 'done', title: 'Done', items: [] }\n * ]\n * });\n * @param options - Columns and their items.\n * @returns A promise resolving to the final column state.\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/kanban-prompt.ts}\n */\n static kanban<V extends KanbanItem>(options: KanbanOptions<V>): Promise<Record<string, V[]>> {\n return new KanbanPrompt(options).run();\n }\n\n /**\n * Time picker (HH:MM AM/PM).\n * @example\n * const time = await MepCLI.time({\n * message: 'Wake up time',\n * initial: '08:00 AM'\n * });\n * @param options - 12h/24h format and step intervals.\n * @returns A promise resolving to the time string.\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/time-prompt.ts}\n */\n static time(options: TimeOptions): Promise<string> {\n return new TimePrompt(options).run();\n }\n\n /**\n * Heatmap/Weekly schedule selector.\n * @example\n * const schedule = await MepCLI.heatmap({\n * message: 'When are you free?',\n * rows: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri'],\n * columns: ['Morning', 'Afternoon', 'Evening'],\n * legend: [\n * { value: 0, char: ' ', color: (t) => t },\n * { value: 1, char: '■', color: (t) => t }\n * ]\n * });\n * @param options - Grid labels and color scale legend.\n * @returns A promise resolving to a 2D array of values.\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/heatmap-prompt.ts}\n */\n static heatmap(options: HeatmapOptions): Promise<number[][]> {\n return new HeatmapPrompt(options).run();\n }\n\n /**\n * Byte size input (KB, MB, GB).\n * @example\n * const memory = await MepCLI.byte({\n * message: 'Allocate memory',\n * initial: 1024 * 1024 // 1MB\n * });\n * @param options - Min/Max bytes.\n * @returns A promise resolving to the number of bytes.\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/byte-prompt.ts}\n */\n static byte(options: ByteOptions): Promise<number> {\n return new BytePrompt(options).run();\n }\n\n /**\n * Slot machine style spinner.\n * @example\n * const fruit = await MepCLI.slot({\n * message: 'Spin to win!',\n * choices: ['🍒', '🍋', '🍇', '🍉'],\n * rows: 3\n * });\n * @param options - Items to cycle through.\n * @returns A promise resolving to the selected item string.\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/slot-prompt.ts}\n */\n static slot(options: SlotOptions): Promise<string> {\n return new SlotPrompt(options).run();\n }\n\n /**\n * Rhythm game style gauge input.\n * @example\n * const result = await MepCLI.gauge({\n * message: 'Hit the target!',\n * safeZone: 0.2 // 20%\n * });\n * @param options - Width and difficulty (safeZone).\n * @returns A promise resolving to 'success' or 'fail'.\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/gauge-prompt.ts}\n */\n static gauge(options: GaugeOptions): Promise<string> {\n return new GaugePrompt(options).run();\n }\n\n /**\n * Interactive calculator.\n * @example\n * const result = await MepCLI.calculator({\n * message: 'Calculate total',\n * initial: '10 + 5'\n * });\n * @param options - Initial expression.\n * @returns A promise resolving to the numeric result.\n * @see {@link https://github.com/CodeTease/mep/blob/main/example.ts}\n */\n static calculator(options: CalculatorOptions): Promise<number> {\n return new CalculatorPrompt(options).run();\n }\n\n /**\n * Emoji picker.\n * @example\n * const mood = await MepCLI.emoji({\n * message: 'How are you feeling?',\n * emojis: [\n * { name: 'Happy', char: '😀' },\n * { name: 'Sad', char: '😢' }\n * ]\n * });\n * @param options - List of emojis and recent history.\n * @returns A promise resolving to the selected emoji name/char.\n * @see {@link https://github.com/CodeTease/mep/blob/main/example.ts}\n */\n static emoji(options: EmojiOptions): Promise<string> {\n return new EmojiPrompt(options).run();\n }\n\n /**\n * Match/Connect items from two lists.\n * @example\n * const pairs = await MepCLI.match({\n * message: 'Match Capital to Country',\n * source: ['Paris', 'London'],\n * target: ['France', 'UK']\n * });\n * @param options - Source and Target lists.\n * @returns A promise resolving to linked pairs.\n * @see {@link https://github.com/CodeTease/mep/blob/main/example.ts}\n */\n static match(options: MatchOptions): Promise<Record<string, any[]>> {\n return new MatchPrompt(options).run();\n }\n\n /**\n * Git-style diff viewer.\n * @example\n * await MepCLI.diff({\n * message: 'Review changes',\n * original: 'foo\\nbar',\n * modified: 'foo\\nbaz'\n * });\n * @param options - Original and Modified strings.\n * @returns A promise resolving to a confirmation string.\n * @see {@link https://github.com/CodeTease/mep/blob/main/example.ts}\n */\n static diff(options: DiffOptions): Promise<string> {\n return new DiffPrompt(options).run();\n }\n\n /**\n * Rotary dial input.\n * @example\n * const volume = await MepCLI.dial({\n * message: 'Adjust Volume',\n * min: 0,\n * max: 100\n * });\n * @param options - Range and radius.\n * @returns A promise resolving to the number.\n * @see {@link https://github.com/CodeTease/mep/blob/main/example.ts}\n */\n static dial(options: DialOptions): Promise<number> {\n return new DialPrompt(options).run();\n }\n\n /**\n * Canvas drawing input.\n * @example\n * const art = await MepCLI.draw({\n * message: 'Draw your signature',\n * width: 20,\n * height: 10\n * });\n * @param options - Canvas dimensions and export type.\n * @returns A promise resolving to the raw matrix or text.\n * @see {@link https://github.com/CodeTease/mep/blob/main/example.ts}\n */\n static draw(options: DrawOptions): Promise<string | boolean[][]> {\n return new DrawPrompt(options).run();\n }\n\n /**\n * Multi-column selection (Grid layout).\n * @example\n * const choice = await MepCLI.multiColumnSelect({\n * message: 'Pick an option',\n * choices: [\n * { title: 'Option 1', value: 1 },\n * { title: 'Option 2', value: 2 },\n * { title: 'Option 3', value: 3 }\n * ],\n * cols: 3\n * });\n * @param options - Choices and column count.\n * @returns A promise resolving to the selected value.\n * @see {@link https://github.com/CodeTease/mep/blob/main/example.ts}\n */\n static multiColumnSelect<V>(options: MultiColumnSelectOptions<V>): Promise<V> {\n return new MultiColumnSelectPrompt(options).run();\n }\n\n /**\n * Fuzzy search selection.\n * @example\n * const pkg = await MepCLI.fuzzySelect({\n * message: 'Search package',\n * choices: [\n * { title: 'react', value: 'react' },\n * { title: 'react-dom', value: 'react-dom' }\n * ]\n * });\n * @param options - Choices to fuzzy search against.\n * @returns A promise resolving to the selected value.\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/selection-prompts.ts}\n */\n static fuzzySelect<V>(options: FuzzySelectOptions<V>): Promise<V> {\n return new FuzzySelectPrompt(options).run();\n }\n\n /**\n * Miller Columns (Cascading lists).\n * @example\n * const path = await MepCLI.miller({\n * message: 'Navigate file structure',\n * data: [\n * { title: 'src', value: 'src', children: [...] }\n * ]\n * });\n * @param options - Hierarchical data and separator.\n * @returns A promise resolving to the selected path array.\n * @see {@link https://github.com/CodeTease/mep/blob/main/example.ts}\n */\n static miller<V>(options: MillerOptions<V>): Promise<V[]> {\n return new MillerPrompt(options).run();\n }\n\n /**\n * Pattern Lock (Android style).\n * @example\n * const pattern = await MepCLI.pattern({\n * message: 'Draw unlock pattern',\n * rows: 3,\n * cols: 3\n * });\n * @param options - Grid dimensions.\n * @returns A promise resolving to an array of point indices.\n * @see {@link https://github.com/CodeTease/mep/blob/main/example.ts}\n */\n static pattern(options: PatternOptions): Promise<number[]> {\n return new PatternPrompt(options).run();\n }\n\n /**\n * Region/Map Selector (ASCII Art).\n * @example\n * const zone = await MepCLI.region({\n * message: 'Select Server Region',\n * mapArt: `...ascii map...`,\n * regions: [\n * { id: 'us-east', label: 'US East', x: 10, y: 5 }\n * ]\n * });\n * @param options - ASCII map string and interactive points.\n * @returns A promise resolving to the selected region ID.\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/map-prompt.ts}\n */\n static region(options: RegionOptions): Promise<string> {\n return new RegionPrompt(options).run();\n }\n\n /**\n * Spreadsheet/Grid Editor.\n * @example\n * const data = await MepCLI.spreadsheet({\n * message: 'Edit CSV Data',\n * columns: [{ name: 'Name', key: 'name' }, { name: 'Age', key: 'age' }],\n * data: [{ name: 'Alice', age: 25 }]\n * });\n * @param options - Column definitions and initial data rows.\n * @returns A promise resolving to the modified data array.\n * @see {@link https://github.com/CodeTease/mep/blob/main/example.ts}\n */\n static spreadsheet(options: SpreadsheetOptions): Promise<Record<string, any>[]> {\n return new SpreadsheetPrompt(options).run();\n }\n\n /**\n * Text Scroller (EULA/Terms).\n * @example\n * const accepted = await MepCLI.scroll({\n * message: 'Read Terms & Conditions',\n * content: 'Long text here...',\n * requireScrollToBottom: true\n * });\n * @param options - Text content and scroll enforcement.\n * @returns A promise resolving to a boolean (accepted).\n * @see {@link https://github.com/CodeTease/mep/blob/main/example.ts}\n */\n static scroll(options: ScrollOptions): Promise<boolean> {\n return new ScrollPrompt(options).run();\n }\n\n /**\n * Breadcrumb navigation.\n * @example\n * const path = await MepCLI.breadcrumb({\n * message: 'Navigate',\n * root: 'Home'\n * });\n * @param options - Initial path and separator.\n * @returns A promise resolving to the final path string.\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/breadcrumb-search-prompt.ts}\n */\n static breadcrumb(options: BreadcrumbOptions): Promise<string> {\n return new BreadcrumbPrompt(options).run();\n }\n\n /**\n * Schedule Planner (Gantt-like).\n * @example\n * const tasks = await MepCLI.schedule({\n * message: 'Plan your day',\n * data: [\n * { name: 'Meeting', start: new Date(), end: new Date() }\n * ]\n * });\n * @param options - List of scheduled tasks.\n * @returns A promise resolving to the modified task list.\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/schedule-prompt.ts}\n */\n static schedule(options: ScheduleOptions): Promise<ScheduleTask[]> {\n return new SchedulePrompt(options).run();\n }\n\n /**\n * JSON Data Inspector.\n * @example\n * await MepCLI.inspector({\n * message: 'Inspect Response',\n * data: { user: { id: 1, name: 'Alice' } }\n * });\n * @param options - Data object to explore.\n * @returns A promise resolving to the viewed data.\n * @see {@link https://github.com/CodeTease/mep/blob/main/example.ts}\n */\n static inspector(options: DataInspectorOptions): Promise<any> {\n return new DataInspectorPrompt(options).run();\n }\n\n /**\n * Execute shell command with output streaming.\n * @example\n * await MepCLI.exec({\n * message: 'Running build...',\n * command: 'npm run build'\n * });\n * @param options - Command string and streaming preferences.\n * @returns A promise resolving when execution completes.\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/exec-prompt.ts}\n */\n static exec(options: ExecOptions): Promise<void> {\n return new ExecPrompt(options).run();\n }\n\n /**\n * Keyboard Shortcut recorder.\n * @example\n * const shortcut = await MepCLI.shortcut({\n * message: 'Press a key combination'\n * });\n * // Returns: { name: 'c', ctrl: true, shift: false, ... }\n * @param options - Initial value.\n * @returns A promise resolving to the captured key event.\n * @see {@link https://github.com/CodeTease/mep/blob/main/example.ts}\n */\n static shortcut(options: ShortcutOptions): Promise<ShortcutResult> {\n return new ShortcutPrompt(options).run();\n }\n\n /**\n * Seat Booking/Reservation selector.\n * @example\n * const seats = await MepCLI.seat({\n * message: 'Choose seats',\n * layout: [\n * 'aa_aa',\n * 'bb_bb'\n * ],\n * rows: ['A', 'B'],\n * cols: ['1', '2', '', '3', '4']\n * });\n * @param options - Layout string array and labelling.\n * @returns A promise resolving to selected seat IDs.\n * @see {@link https://github.com/CodeTease/mep/blob/main/example.ts}\n */\n static seat(options: SeatOptions): Promise<string[]> {\n return new SeatPrompt(options).run();\n }\n\n /**\n * Range selection within a list (Shift+Click style).\n * @example\n * const chunk = await MepCLI.selectRange({\n * message: 'Select commits to squash',\n * choices: [\n * { title: 'feat: A', value: 'a' },\n * { title: 'fix: B', value: 'b' },\n * { title: 'chore: C', value: 'c' }\n * ]\n * });\n * @param options - Choices list.\n * @returns A promise resolving to the sub-array of values.\n * @see {@link https://github.com/CodeTease/mep/blob/main/example.ts}\n */\n static selectRange<const V>(options: SelectRangeOptions<V>): Promise<V[]> {\n return new SelectRangePrompt(options).run();\n }\n\n /**\n * 2D Grid Sorting.\n * @example\n * const layout = await MepCLI.sortGrid({\n * message: 'Arrange Dashboard Widgets',\n * data: [\n * ['Clock', 'Weather'],\n * ['News', 'Calendar']\n * ]\n * });\n * @param options - 2D array of strings.\n * @returns A promise resolving to the reordered 2D array.\n * @see {@link https://github.com/CodeTease/mep/blob/main/example.ts}\n */\n static sortGrid(options: SortGridOptions): Promise<string[][]> {\n return new SortGridPrompt(options).run();\n }\n\n /**\n * Dependency Management (Resolves conflicts/requirements).\n * @example\n * const plugins = await MepCLI.dependency({\n * message: 'Install Plugins',\n * choices: [\n * { title: 'Plugin A', value: 'a' },\n * { title: 'Plugin B (Requires A)', value: 'b', dependsOn: ['a'] }\n * ]\n * });\n * @param options - Choices with dependency rules.\n * @returns A promise resolving to the valid set of selections.\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/dependency-prompts.ts}\n */\n static dependency<V>(options: DependencyOptions<V>): Promise<V[]> {\n return new DependencyPrompt(options).run();\n }\n\n /**\n * Open Source License selector.\n * @example\n * const license = await MepCLI.license({\n * message: 'Choose a license'\n * });\n * @param options - Default license.\n * @returns A promise resolving to the SPDX ID.\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/license-prompts.ts}\n */\n static license(options: LicenseOptions): Promise<string> {\n return new LicensePrompt(options).run();\n }\n\n /**\n * Regex Builder & Tester.\n * @example\n * const regex = await MepCLI.regex({\n * message: 'Create email regex',\n * tests: ['test@example.com', 'invalid-email']\n * });\n * @param options - Test cases to validate against.\n * @returns A promise resolving to the RegExp object.\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/regex-prompt.ts}\n */\n static regex(options: RegexOptions): Promise<RegExp> {\n return new RegexPrompt(options).run();\n }\n\n /**\n * Box Model Editor (CSS style).\n * @example\n * const margin = await MepCLI.box({\n * message: 'Set Margins',\n * initial: { top: 10, right: 20, bottom: 10, left: 20 }\n * });\n * @param options - Initial dimensions.\n * @returns A promise resolving to the box object.\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/box-prompt.ts}\n */\n static box(options: BoxOptions): Promise<{ top: number, right: number, bottom: number, left: number }> {\n return new BoxPrompt(options).run();\n }\n\n /**\n * Database Connection String Builder.\n * @example\n * const conn = await MepCLI.connectionString({\n * message: 'Configure Database',\n * initial: 'postgres://localhost:5432/mydb'\n * });\n * @param options - Initial URL.\n * @returns A promise resolving to parsed connection details.\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/connection-string-prompt.ts}\n */\n static connectionString(options: ConnectionStringOptions): Promise<ConnectionStringResult> {\n return connectionString(options);\n }\n\n /**\n * cURL Command Builder.\n * @example\n * const request = await MepCLI.curl({\n * message: 'Build API Request',\n * initial: 'curl -X POST https://api.example.com/v1/resource'\n * });\n * @param options - Initial command.\n * @returns A promise resolving to the parsed request object.\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/curl-prompt.ts}\n */\n static curl(options: CurlOptions): Promise<CurlResult> {\n return new CurlPrompt(options).run();\n }\n\n /**\n * Phone Number input (with country codes).\n * @example\n * const phone = await MepCLI.phone({\n * message: 'Enter phone number',\n * defaultCountry: 'US'\n * });\n * @param options - Default country ISO code.\n * @returns A promise resolving to the formatted number.\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/phone-prompt.ts}\n */\n static phone(options: PhoneOptions): Promise<string> {\n return new PhonePrompt(options).run();\n }\n\n /**\n * Fuzzy Multi-Column Selection.\n * @example\n * const user = await MepCLI.fuzzyMultiColumn({\n * message: 'Select User',\n * choices: [\n * { title: 'Alice', value: 1, description: 'Admin' },\n * { title: 'Bob', value: 2, description: 'User' }\n * ],\n * cols: 2\n * });\n * @param options - Choices and layout columns.\n * @returns A promise resolving to the selected value.\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/fuzzy-multi-column-prompt.ts}\n */\n static fuzzyMultiColumn<V>(options: MultiColumnSelectOptions<V>): Promise<V> {\n return new FuzzyMultiColumnPrompt(options).run();\n }\n\n /**\n * Multi-Range Selection (Discontinuous).\n * @example\n * const ranges = await MepCLI.multiRange({\n * message: 'Select lines to delete',\n * choices: lines.map((l, i) => ({ title: l, value: i }))\n * });\n * @param options - Choices.\n * @returns A promise resolving to selected values.\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/multi-range-prompt.ts}\n */\n static multiRange<V>(options: SelectRangeOptions<V>): Promise<V[]> {\n return new MultiRangePrompt(options).run();\n }\n\n /**\n * Breadcrumb Search (Navigator + Fuzzy Search).\n * @example\n * const file = await MepCLI.breadcrumbSearch({\n * message: 'Find file',\n * root: 'src'\n * });\n * @param options - Root path.\n * @returns A promise resolving to the selected path.\n * @see {@link https://github.com/CodeTease/mep/blob/main/examples/breadcrumb-search-prompt.ts}\n */\n static breadcrumbSearch(options: BreadcrumbOptions): Promise<string> {\n return new BreadcrumbSearchPrompt(options).run();\n }\n}\n"],"names":["MepCLI","spinner","message","Spinner","tasks","options","TaskRunner","pipeline","Pipeline","text","TextPrompt","run","select","SelectPrompt","checkbox","CheckboxPrompt","confirm","ConfirmPrompt","password","isPassword","secret","mask","number","NumberPrompt","toggle","TogglePrompt","list","ListPrompt","slider","SliderPrompt","range","RangePrompt","transfer","TransferPrompt","cron","CronPrompt","date","DatePrompt","file","FilePrompt","multiSelect","MultiSelectPrompt","rating","RatingPrompt","autocomplete","AutocompletePrompt","sort","SortPrompt","table","TablePrompt","editor","EditorPrompt","tree","TreePrompt","keypress","KeypressPrompt","form","FormPrompt","snippet","SnippetPrompt","spam","SpamPrompt","wait","WaitPrompt","code","CodePrompt","treeSelect","TreeSelectPrompt","color","ColorPrompt","grid","GridPrompt","calendar","CalendarPrompt","map","MapPrompt","semver","SemVerPrompt","ip","IPPrompt","otp","OTPPrompt","quizSelect","QuizSelectPrompt","quizText","QuizTextPrompt","kanban","KanbanPrompt","time","TimePrompt","heatmap","HeatmapPrompt","byte","BytePrompt","slot","SlotPrompt","gauge","GaugePrompt","calculator","CalculatorPrompt","emoji","EmojiPrompt","match","MatchPrompt","diff","DiffPrompt","dial","DialPrompt","draw","DrawPrompt","multiColumnSelect","MultiColumnSelectPrompt","fuzzySelect","FuzzySelectPrompt","miller","MillerPrompt","pattern","PatternPrompt","region","RegionPrompt","spreadsheet","SpreadsheetPrompt","scroll","ScrollPrompt","breadcrumb","BreadcrumbPrompt","schedule","SchedulePrompt","inspector","DataInspectorPrompt","exec","ExecPrompt","shortcut","ShortcutPrompt","seat","SeatPrompt","selectRange","SelectRangePrompt","sortGrid","SortGridPrompt","dependency","DependencyPrompt","license","LicensePrompt","regex","RegexPrompt","box","BoxPrompt","connectionString","curl","CurlPrompt","phone","PhonePrompt","fuzzyMultiColumn","FuzzyMultiColumnPrompt","multiRange","MultiRangePrompt","breadcrumbSearch","BreadcrumbSearchPrompt","theme"],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "mepcli",
3
- "version": "2.0.0-beta.1",
4
- "description": "Zero-dependency, interactive CLI prompt",
3
+ "version": "2.0.0-beta.2",
4
+ "description": "Zero-dependency interactive CLI prompt",
5
5
  "repository": {
6
6
  "type": "git",
7
7
  "url": "git+https://github.com/CodeTease/mep.git"
@@ -16,9 +16,9 @@
16
16
  "scripts": {
17
17
  "typecheck": "tsc --noEmit",
18
18
  "build": "swc src -d dist --config-file .swcrc",
19
- "prepublishOnly": "npm run build",
20
- "test": "jest",
21
- "demo": "ts-node example.ts",
19
+ "prepublishOnly": "bun run build",
20
+ "test": "bun test",
21
+ "demo": "bun example.ts",
22
22
  "lint": "eslint .",
23
23
  "lint:fix": "eslint . --fix"
24
24
  },
@@ -48,13 +48,9 @@
48
48
  "@eslint/js": "^9.39.3",
49
49
  "@swc/cli": "^0.8.0",
50
50
  "@swc/core": "^1.15.18",
51
- "@types/jest": "^30.0.0",
52
51
  "@types/node": "^22.19.13",
53
52
  "eslint": "^9.39.3",
54
53
  "globals": "^17.4.0",
55
- "jest": "^30.2.0",
56
- "ts-jest": "^29.4.6",
57
- "ts-node": "^10.9.2",
58
54
  "typescript": "^5.9.3",
59
55
  "typescript-eslint": "^8.56.1"
60
56
  }