domflax 0.1.0 → 0.1.1

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.
Files changed (39) hide show
  1. package/README.md +159 -0
  2. package/dist/{chunk-4HHISSMR.js → chunk-DNHOGPYV.js} +2675 -1503
  3. package/dist/chunk-DNHOGPYV.js.map +1 -0
  4. package/dist/{chunk-ZJ2S36GY.js → chunk-DOQEBGWB.js} +33 -20
  5. package/dist/chunk-DOQEBGWB.js.map +1 -0
  6. package/dist/{chunk-77SLHRN6.js → chunk-DWLB7FRR.js} +341 -176
  7. package/dist/chunk-DWLB7FRR.js.map +1 -0
  8. package/dist/cli.cjs +2169 -760
  9. package/dist/cli.cjs.map +1 -1
  10. package/dist/cli.js +183 -91
  11. package/dist/cli.js.map +1 -1
  12. package/dist/index.cjs +3021 -1699
  13. package/dist/index.cjs.map +1 -1
  14. package/dist/index.d.cts +477 -54
  15. package/dist/index.d.ts +477 -54
  16. package/dist/index.js +49 -3
  17. package/dist/pattern-CV607P87.d.ts +547 -0
  18. package/dist/pattern-F5xBtIE-.d.cts +547 -0
  19. package/dist/pattern-kit.cjs +60 -39
  20. package/dist/pattern-kit.cjs.map +1 -1
  21. package/dist/pattern-kit.d.cts +3 -18
  22. package/dist/pattern-kit.d.ts +3 -18
  23. package/dist/pattern-kit.js +3 -1
  24. package/dist/pattern-kit.js.map +1 -1
  25. package/dist/{types-BQ7l6dVe.d.ts → resolve-ops-DIwEelH-.d.cts} +26 -251
  26. package/dist/{types-BQ7l6dVe.d.cts → resolve-ops-DIwEelH-.d.ts} +26 -251
  27. package/dist/verify.d.cts +1 -1
  28. package/dist/verify.d.ts +1 -1
  29. package/dist/webpack-loader.cjs +2975 -1699
  30. package/dist/webpack-loader.cjs.map +1 -1
  31. package/dist/webpack-loader.d.cts +2 -2
  32. package/dist/webpack-loader.d.ts +2 -2
  33. package/dist/webpack-loader.js +3 -3
  34. package/package.json +3 -6
  35. package/dist/chunk-4HHISSMR.js.map +0 -1
  36. package/dist/chunk-77SLHRN6.js.map +0 -1
  37. package/dist/chunk-ZJ2S36GY.js.map +0 -1
  38. package/dist/pattern-CX6iBzTD.d.ts +0 -237
  39. package/dist/pattern-P4FIKAUB.d.cts +0 -237
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../node_modules/sisteransi/src/index.js","../../../node_modules/picocolors/picocolors.js","../src/cli.ts","../../cli/src/index.ts","../../cli/src/options.ts","../../cli/src/safety.ts","../../cli/src/transform.ts","../../cli/src/walk.ts","../../cli/src/diff.ts","../../cli/src/wizard.ts","../../../node_modules/node_modules/.pnpm/ansi-regex@6.1.0/node_modules/ansi-regex/index.js","../../../node_modules/node_modules/.pnpm/strip-ansi@7.1.0/node_modules/strip-ansi/index.js","../../../node_modules/node_modules/.pnpm/eastasianwidth@0.2.0/node_modules/eastasianwidth/eastasianwidth.js","../../../node_modules/node_modules/.pnpm/emoji-regex@9.2.2/node_modules/emoji-regex/index.js","../../../node_modules/node_modules/.pnpm/string-width@5.1.2/node_modules/string-width/index.js","../../../node_modules/node_modules/.pnpm/ansi-styles@6.2.1/node_modules/ansi-styles/index.js","../../../node_modules/node_modules/.pnpm/wrap-ansi@8.1.0/node_modules/wrap-ansi/index.js","../../../node_modules/@clack/core/src/utils/settings.ts","../../../node_modules/@clack/core/src/utils/string.ts","../../../node_modules/@clack/core/src/utils/index.ts","../../../node_modules/@clack/core/src/prompts/prompt.ts","../../../node_modules/@clack/core/src/prompts/confirm.ts","../../../node_modules/@clack/core/src/prompts/group-multiselect.ts","../../../node_modules/@clack/core/src/prompts/multi-select.ts","../../../node_modules/@clack/core/src/prompts/password.ts","../../../node_modules/@clack/core/src/prompts/select.ts","../../../node_modules/@clack/core/src/prompts/select-key.ts","../../../node_modules/@clack/core/src/prompts/text.ts","../../../node_modules/node_modules/.pnpm/is-unicode-supported@1.3.0/node_modules/is-unicode-supported/index.js","../../../node_modules/@clack/prompts/src/index.ts"],"sourcesContent":["'use strict';\n\nconst ESC = '\\x1B';\nconst CSI = `${ESC}[`;\nconst beep = '\\u0007';\n\nconst cursor = {\n to(x, y) {\n if (!y) return `${CSI}${x + 1}G`;\n return `${CSI}${y + 1};${x + 1}H`;\n },\n move(x, y) {\n let ret = '';\n\n if (x < 0) ret += `${CSI}${-x}D`;\n else if (x > 0) ret += `${CSI}${x}C`;\n\n if (y < 0) ret += `${CSI}${-y}A`;\n else if (y > 0) ret += `${CSI}${y}B`;\n\n return ret;\n },\n up: (count = 1) => `${CSI}${count}A`,\n down: (count = 1) => `${CSI}${count}B`,\n forward: (count = 1) => `${CSI}${count}C`,\n backward: (count = 1) => `${CSI}${count}D`,\n nextLine: (count = 1) => `${CSI}E`.repeat(count),\n prevLine: (count = 1) => `${CSI}F`.repeat(count),\n left: `${CSI}G`,\n hide: `${CSI}?25l`,\n show: `${CSI}?25h`,\n save: `${ESC}7`,\n restore: `${ESC}8`\n}\n\nconst scroll = {\n up: (count = 1) => `${CSI}S`.repeat(count),\n down: (count = 1) => `${CSI}T`.repeat(count)\n}\n\nconst erase = {\n screen: `${CSI}2J`,\n up: (count = 1) => `${CSI}1J`.repeat(count),\n down: (count = 1) => `${CSI}J`.repeat(count),\n line: `${CSI}2K`,\n lineEnd: `${CSI}K`,\n lineStart: `${CSI}1K`,\n lines(count) {\n let clear = '';\n for (let i = 0; i < count; i++)\n clear += this.line + (i < count - 1 ? cursor.up() : '');\n if (count)\n clear += cursor.left;\n return clear;\n }\n}\n\nmodule.exports = { cursor, scroll, erase, beep };\n","let p = process || {}, argv = p.argv || [], env = p.env || {}\nlet isColorSupported =\n\t!(!!env.NO_COLOR || argv.includes(\"--no-color\")) &&\n\t(!!env.FORCE_COLOR || argv.includes(\"--color\") || p.platform === \"win32\" || ((p.stdout || {}).isTTY && env.TERM !== \"dumb\") || !!env.CI)\n\nlet formatter = (open, close, replace = open) =>\n\tinput => {\n\t\tlet string = \"\" + input, index = string.indexOf(close, open.length)\n\t\treturn ~index ? open + replaceClose(string, close, replace, index) + close : open + string + close\n\t}\n\nlet replaceClose = (string, close, replace, index) => {\n\tlet result = \"\", cursor = 0\n\tdo {\n\t\tresult += string.substring(cursor, index) + replace\n\t\tcursor = index + close.length\n\t\tindex = string.indexOf(close, cursor)\n\t} while (~index)\n\treturn result + string.substring(cursor)\n}\n\nlet createColors = (enabled = isColorSupported) => {\n\tlet f = enabled ? formatter : () => String\n\treturn {\n\t\tisColorSupported: enabled,\n\t\treset: f(\"\\x1b[0m\", \"\\x1b[0m\"),\n\t\tbold: f(\"\\x1b[1m\", \"\\x1b[22m\", \"\\x1b[22m\\x1b[1m\"),\n\t\tdim: f(\"\\x1b[2m\", \"\\x1b[22m\", \"\\x1b[22m\\x1b[2m\"),\n\t\titalic: f(\"\\x1b[3m\", \"\\x1b[23m\"),\n\t\tunderline: f(\"\\x1b[4m\", \"\\x1b[24m\"),\n\t\tinverse: f(\"\\x1b[7m\", \"\\x1b[27m\"),\n\t\thidden: f(\"\\x1b[8m\", \"\\x1b[28m\"),\n\t\tstrikethrough: f(\"\\x1b[9m\", \"\\x1b[29m\"),\n\n\t\tblack: f(\"\\x1b[30m\", \"\\x1b[39m\"),\n\t\tred: f(\"\\x1b[31m\", \"\\x1b[39m\"),\n\t\tgreen: f(\"\\x1b[32m\", \"\\x1b[39m\"),\n\t\tyellow: f(\"\\x1b[33m\", \"\\x1b[39m\"),\n\t\tblue: f(\"\\x1b[34m\", \"\\x1b[39m\"),\n\t\tmagenta: f(\"\\x1b[35m\", \"\\x1b[39m\"),\n\t\tcyan: f(\"\\x1b[36m\", \"\\x1b[39m\"),\n\t\twhite: f(\"\\x1b[37m\", \"\\x1b[39m\"),\n\t\tgray: f(\"\\x1b[90m\", \"\\x1b[39m\"),\n\n\t\tbgBlack: f(\"\\x1b[40m\", \"\\x1b[49m\"),\n\t\tbgRed: f(\"\\x1b[41m\", \"\\x1b[49m\"),\n\t\tbgGreen: f(\"\\x1b[42m\", \"\\x1b[49m\"),\n\t\tbgYellow: f(\"\\x1b[43m\", \"\\x1b[49m\"),\n\t\tbgBlue: f(\"\\x1b[44m\", \"\\x1b[49m\"),\n\t\tbgMagenta: f(\"\\x1b[45m\", \"\\x1b[49m\"),\n\t\tbgCyan: f(\"\\x1b[46m\", \"\\x1b[49m\"),\n\t\tbgWhite: f(\"\\x1b[47m\", \"\\x1b[49m\"),\n\n\t\tblackBright: f(\"\\x1b[90m\", \"\\x1b[39m\"),\n\t\tredBright: f(\"\\x1b[91m\", \"\\x1b[39m\"),\n\t\tgreenBright: f(\"\\x1b[92m\", \"\\x1b[39m\"),\n\t\tyellowBright: f(\"\\x1b[93m\", \"\\x1b[39m\"),\n\t\tblueBright: f(\"\\x1b[94m\", \"\\x1b[39m\"),\n\t\tmagentaBright: f(\"\\x1b[95m\", \"\\x1b[39m\"),\n\t\tcyanBright: f(\"\\x1b[96m\", \"\\x1b[39m\"),\n\t\twhiteBright: f(\"\\x1b[97m\", \"\\x1b[39m\"),\n\n\t\tbgBlackBright: f(\"\\x1b[100m\", \"\\x1b[49m\"),\n\t\tbgRedBright: f(\"\\x1b[101m\", \"\\x1b[49m\"),\n\t\tbgGreenBright: f(\"\\x1b[102m\", \"\\x1b[49m\"),\n\t\tbgYellowBright: f(\"\\x1b[103m\", \"\\x1b[49m\"),\n\t\tbgBlueBright: f(\"\\x1b[104m\", \"\\x1b[49m\"),\n\t\tbgMagentaBright: f(\"\\x1b[105m\", \"\\x1b[49m\"),\n\t\tbgCyanBright: f(\"\\x1b[106m\", \"\\x1b[49m\"),\n\t\tbgWhiteBright: f(\"\\x1b[107m\", \"\\x1b[49m\"),\n\t}\n}\n\nmodule.exports = createColors()\nmodule.exports.createColors = createColors\n","#!/usr/bin/env node\n/**\n * `domflax` CLI bin entry.\n *\n * Thin wrapper over the bundled (private) `@domflax/cli` `main()`. Invoked as `npx domflax …`.\n */\nimport { main } from '@domflax/cli';\n\nmain(process.argv.slice(2));\n","/**\n * @domflax/cli — the real command-line entry point.\n *\n * Wires the transform engine ({@link createTransform}, built from the lower @domflax/* packages — it\n * deliberately never imports the `domflax` meta package, which would create a cycle) to file\n * discovery, OUTPUT SAFETY (Q16), and an optional interactive wizard (Q17). Usable as `npx domflax`\n * via the meta package's bin, and directly as the `domflax-cli` bin.\n */\n\nimport { mkdirSync, readFileSync, writeFileSync } from 'node:fs';\nimport * as path from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nimport type { CliOptions } from './options';\nimport { parseInvocation, shouldPrompt, USAGE } from './options';\nimport { destinationFor, isGitClean, planWrites } from './safety';\nimport { createTransform } from './transform';\nimport type { FileStats } from './transform';\nimport { discoverInputs } from './walk';\nimport { unifiedDiff } from './diff';\nimport { runWizard, WIZARD_CANCELLED } from './wizard';\n\n// Re-export the public surface so consumers/tests reach it from the package root.\nexport type { CliOptions, ProviderOption } from './options';\nexport { parseInvocation, shouldPrompt, USAGE, DEFAULT_SAFETY } from './options';\nexport type { WritePlan, WriteMode } from './safety';\nexport { destinationFor, isDisposablePath, isGitClean, planWrites } from './safety';\nexport type { FileResult, FileStats, Transform } from './transform';\nexport { createTransform, buildResolver, builtinPatternNames } from './transform';\nexport { discoverInputs, SUPPORTED_EXTS } from './walk';\nexport { unifiedDiff } from './diff';\n\n/** Outcome of a {@link run}: the process exit code. */\nexport interface RunResult {\n readonly exitCode: number;\n}\n\ninterface Totals {\n files: number;\n changed: number;\n nodesRemoved: number;\n classesSaved: number;\n bytesSaved: number;\n}\n\nfunction addStats(totals: Totals, stats: FileStats, changed: boolean): void {\n totals.files += 1;\n if (changed) totals.changed += 1;\n totals.nodesRemoved += stats.nodesRemoved;\n totals.classesSaved += stats.classesSaved;\n totals.bytesSaved += stats.bytesSaved;\n}\n\nfunction printReport(totals: Totals): void {\n console.log('');\n console.log('domflax report');\n console.log(` files processed : ${totals.files}`);\n console.log(` files changed : ${totals.changed}`);\n console.log(` nodes removed : ${totals.nodesRemoved}`);\n console.log(` classes saved : ${totals.classesSaved}`);\n console.log(` bytes saved : ${totals.bytesSaved}`);\n}\n\n/**\n * Execute a fully-resolved {@link CliOptions}: discover inputs, enforce output safety, transform each\n * file, and either preview (dry-run), write to the mirrored output, or overwrite in place.\n */\nexport function execute(options: CliOptions): RunResult {\n const { files, inputRoot, warnings } = discoverInputs(options.paths);\n for (const w of warnings) console.error(`domflax: ${w}`);\n\n if (files.length === 0) {\n console.error('domflax: no .jsx/.tsx/.html files found for the given paths');\n return { exitCode: 1 };\n }\n\n const projectRoot = options.projectRoot ?? process.cwd();\n const gitClean =\n options.dangerouslyOverwriteSource && !options.noGitCheck ? isGitClean(projectRoot) : true;\n\n const planned = planWrites(options, gitClean);\n if (!planned.ok) {\n console.error(`domflax: ${planned.error}`);\n return { exitCode: 1 };\n }\n const plan = planned.value;\n\n const transform = createTransform(options);\n const totals: Totals = { files: 0, changed: 0, nodesRemoved: 0, classesSaved: 0, bytesSaved: 0 };\n let failures = 0;\n\n for (const file of files) {\n let code: string;\n try {\n code = readFileSync(file, 'utf8');\n } catch (err) {\n console.error(`domflax: cannot read ${file}: ${String((err as Error)?.message ?? err)}`);\n failures += 1;\n continue;\n }\n\n const result = transform.transformFile(code, file);\n addStats(totals, result.stats, result.changed);\n\n if (options.dryRun) {\n const rel = path.relative(inputRoot, file) || path.basename(file);\n if (result.changed) console.log(unifiedDiff(code, result.code, rel));\n else if (!options.report) console.log(` (unchanged) ${rel}`);\n continue;\n }\n\n if (!result.changed) continue;\n\n const target = destinationFor(file, inputRoot, plan);\n if (!target.ok) {\n console.error(`domflax: ${target.error}`);\n failures += 1;\n continue;\n }\n try {\n mkdirSync(path.dirname(target.value), { recursive: true });\n writeFileSync(target.value, result.code, 'utf8');\n console.log(`domflax: wrote ${path.relative(process.cwd(), target.value) || target.value}`);\n } catch (err) {\n console.error(`domflax: cannot write ${target.value}: ${String((err as Error)?.message ?? err)}`);\n failures += 1;\n }\n }\n\n if (options.report) printReport(totals);\n\n if (options.dryRun) console.log('\\ndomflax: dry run — no files were written.');\n\n return { exitCode: failures > 0 ? 1 : 0 };\n}\n\n/**\n * CLI entry point. Parses argv, optionally launches the wizard (TTY + no positionals only), and\n * executes. Sets `process.exitCode`; never throws.\n */\nexport async function main(argv: readonly string[] = process.argv.slice(2)): Promise<void> {\n let options: CliOptions;\n try {\n options = parseInvocation(argv);\n } catch (err) {\n console.error(err instanceof Error ? err.message : String(err));\n console.error(USAGE);\n process.exitCode = 2;\n return;\n }\n\n // Treat a CI environment as non-interactive even if it reports a TTY, so the wizard can never\n // block a pipeline (CI runners commonly set `CI`; cover the usual vendor flags too).\n const inCi =\n !!process.env.CI ||\n !!process.env.CONTINUOUS_INTEGRATION ||\n !!process.env.GITHUB_ACTIONS ||\n !!process.env.GITLAB_CI ||\n !!process.env.BUILDKITE ||\n !!process.env.TF_BUILD;\n const isTty = process.stdout.isTTY === true && !inCi;\n if (shouldPrompt(options, isTty)) {\n const wizardResult = await runWizard(options);\n if (wizardResult === WIZARD_CANCELLED) {\n process.exitCode = 0;\n return;\n }\n options = wizardResult;\n }\n\n if (options.paths.length === 0) {\n console.error('domflax: no input paths given (and not an interactive terminal).');\n console.error(USAGE);\n process.exitCode = 2;\n return;\n }\n\n try {\n const result = execute(options);\n process.exitCode = result.exitCode;\n } catch (err) {\n console.error(`domflax: ${err instanceof Error ? err.message : String(err)}`);\n process.exitCode = 1;\n }\n}\n\n/**\n * True only when this module is the process entry (the `domflax-cli` bin), not when imported. Paths\n * are normalized (and case-folded on win32) so the comparison survives drive-letter case and\n * separator differences between `import.meta.url` and `process.argv[1]`.\n */\nfunction isMainEntry(): boolean {\n const entry = process.argv[1];\n if (entry === undefined) return false;\n try {\n const self = path.resolve(fileURLToPath(import.meta.url));\n const argv = path.resolve(entry);\n return process.platform === 'win32' ? self.toLowerCase() === argv.toLowerCase() : self === argv;\n } catch {\n return false;\n }\n}\n\nif (isMainEntry()) {\n void main();\n}\n","/**\n * @domflax/cli — invocation parsing & the shared options object.\n *\n * Both the flag parser ({@link parseInvocation}) and the interactive wizard build the SAME\n * {@link CliOptions} object (DESIGN-DECISIONS Q17), so the rest of the CLI is agnostic to how the\n * user expressed their intent.\n */\n\nimport { parseArgs } from 'node:util';\n\nimport type { SafetyLevel } from '@domflax/core';\n\n/** How class names resolve to computed styles. */\nexport type ProviderOption = 'auto' | 'tailwind' | 'custom';\n\n/** The fully-resolved request the CLI executes — produced by flags OR the wizard. */\nexport interface CliOptions {\n /** Positional sources: folders (recursive), globs, or individual files. */\n readonly paths: readonly string[];\n /** Output directory (`--out`); `null` ⇒ default `./domflax-out` (unless overwriting source). */\n readonly out: string | null;\n /** Style provider to resolve author tokens against. */\n readonly provider: ProviderOption;\n /** Stylesheet files feeding the custom-CSS resolver (`--css`). */\n readonly css: readonly string[];\n /** Compute edits + print per-file diffs but write nothing. */\n readonly dryRun: boolean;\n /** Print a summary (files, nodes removed, classes saved, bytes saved). */\n readonly report: boolean;\n /** Permit overwriting source in place (still gated on a clean git tree). */\n readonly dangerouslyOverwriteSource: boolean;\n /** Skip the clean-git-tree gate guarding `--dangerously-overwrite-source`. */\n readonly noGitCheck: boolean;\n /** Whether the interactive wizard may launch (false for `--no-interactive`/`--yes`). */\n readonly interactive: boolean;\n /** Pass names to run; `null` ⇒ every built-in pattern (the flag path never narrows). */\n readonly passes: readonly string[] | null;\n /** Optimization aggressiveness handed to the pass manager (0 lint … 3 aggressive). */\n readonly safety: SafetyLevel;\n /** Root to resolve the Tailwind/postcss engines from; `null` ⇒ `process.cwd()`. */\n readonly projectRoot: string | null;\n}\n\n/** The CLI default optimization safety level (D-level 2 = default). */\nexport const DEFAULT_SAFETY: SafetyLevel = 2;\n\nconst DEFAULT_PROVIDER: ProviderOption = 'auto';\n\nfunction isProvider(value: string): value is ProviderOption {\n return value === 'auto' || value === 'tailwind' || value === 'custom';\n}\n\nfunction toSafety(raw: string | undefined): SafetyLevel {\n if (raw === undefined) return DEFAULT_SAFETY;\n const n = Number(raw);\n if (n === 0 || n === 1 || n === 2 || n === 3) return n;\n throw new Error(`domflax: invalid --safety \"${raw}\" (expected 0, 1, 2 or 3)`);\n}\n\n/**\n * Parse argv (excluding `node` + script path) into a validated {@link CliOptions}. A missing\n * positional is NOT an error here — a no-args TTY run is handled upstream by launching the wizard.\n */\nexport function parseInvocation(argv: readonly string[]): CliOptions {\n const { values, positionals } = parseArgs({\n args: argv as string[],\n allowPositionals: true,\n options: {\n out: { type: 'string' },\n provider: { type: 'string' },\n css: { type: 'string', multiple: true },\n 'dry-run': { type: 'boolean', default: false },\n report: { type: 'boolean', default: false },\n 'dangerously-overwrite-source': { type: 'boolean', default: false },\n 'no-git-check': { type: 'boolean', default: false },\n 'no-interactive': { type: 'boolean', default: false },\n yes: { type: 'boolean', short: 'y', default: false },\n safety: { type: 'string' },\n 'project-root': { type: 'string' },\n },\n });\n\n const provider = values.provider ?? DEFAULT_PROVIDER;\n if (!isProvider(provider)) {\n throw new Error(`domflax: unknown --provider \"${provider}\" (expected auto|tailwind|custom)`);\n }\n\n return {\n paths: positionals,\n out: values.out ?? null,\n provider,\n css: values.css ?? [],\n dryRun: values['dry-run'] === true,\n report: values.report === true,\n dangerouslyOverwriteSource: values['dangerously-overwrite-source'] === true,\n noGitCheck: values['no-git-check'] === true,\n interactive: values['no-interactive'] !== true && values.yes !== true,\n passes: null,\n safety: toSafety(values.safety),\n projectRoot: values['project-root'] ?? null,\n };\n}\n\n/** True iff the interactive wizard should launch: a TTY, no positionals, and not opted out. */\nexport function shouldPrompt(options: CliOptions, isTty: boolean): boolean {\n return isTty && options.interactive && options.paths.length === 0;\n}\n\nexport const USAGE: string = [\n 'Usage: domflax [paths...] [options]',\n '',\n 'Optimizes .jsx/.tsx files (flatten redundant wrappers + compress class sets).',\n 'Source is READ-ONLY by default — output goes to --out or ./domflax-out.',\n '',\n 'Arguments:',\n ' paths folders (recursive), globs, or files',\n '',\n 'Options:',\n ' --out <dir> write optimized files here, mirroring structure',\n ' --provider <auto|tailwind|custom> style resolver (default: auto)',\n ' --css <file...> stylesheets feeding the custom-CSS provider',\n ' --dry-run print per-file diffs; write nothing',\n ' --report print a summary of what changed',\n ' --dangerously-overwrite-source overwrite source in place (needs a clean git tree)',\n ' --no-git-check skip the clean-git-tree gate',\n ' --safety <0|1|2|3> optimization aggressiveness (default: 2)',\n ' --yes, --no-interactive never launch the wizard (CI-safe)',\n '',\n 'With no paths in an interactive terminal, a guided wizard launches.',\n].join('\\n');\n","/**\n * @domflax/cli — OUTPUT SAFETY (DESIGN-DECISIONS Q16, ARCHITECTURE §16.10).\n *\n * Source is READ-ONLY by default. Writes land in `--out`/`./domflax-out` (mirroring structure), or in\n * place ONLY inside disposable build dirs (dist/build/out/.next). Overwriting real source in place\n * requires `--dangerously-overwrite-source` AND a clean git tree (skippable with `--no-git-check`).\n * `--dry-run` writes nothing.\n */\n\nimport { execFileSync } from 'node:child_process';\nimport * as path from 'node:path';\n\nimport type { CliOptions } from './options';\n\n/** Disposable build directories where in-place overwrite is always safe (they are regenerated). */\nconst DISPOSABLE_DIRS: ReadonlySet<string> = new Set(['dist', 'build', 'out', '.next']);\n\n/** True when any path segment is a disposable build dir, so the file is a regenerable artifact. */\nexport function isDisposablePath(file: string): boolean {\n return path\n .resolve(file)\n .split(path.sep)\n .some((seg) => DISPOSABLE_DIRS.has(seg));\n}\n\nexport type WriteMode = 'out-dir' | 'overwrite-source';\n\n/** Invocation-level write plan shared by every file. */\nexport interface WritePlan {\n readonly mode: WriteMode;\n /** Resolved absolute output dir for `out-dir` mode; `null` when overwriting source in place. */\n readonly outDir: string | null;\n}\n\nexport type Result<T> = { readonly ok: true; readonly value: T } | { readonly ok: false; readonly error: string };\n\n/** Run `git status --porcelain`; clean ⇒ true. A non-repo / missing git ⇒ false (fail safe). */\nexport function isGitClean(cwd: string): boolean {\n try {\n const out = execFileSync('git', ['status', '--porcelain'], {\n cwd,\n encoding: 'utf8',\n stdio: ['ignore', 'pipe', 'ignore'],\n });\n return out.trim().length === 0;\n } catch {\n return false;\n }\n}\n\n/**\n * Resolve the invocation-level {@link WritePlan}. In-place source overwrite is refused unless the\n * danger flag is set and (the git tree is clean OR the git check is waived).\n */\nexport function planWrites(options: CliOptions, gitClean: boolean): Result<WritePlan> {\n if (options.dangerouslyOverwriteSource) {\n if (!options.noGitCheck && !gitClean) {\n return {\n ok: false,\n error:\n 'refusing --dangerously-overwrite-source: git working tree is not clean. ' +\n 'Commit or stash first, or pass --no-git-check to override.',\n };\n }\n return { ok: true, value: { mode: 'overwrite-source', outDir: null } };\n }\n const outDir = path.resolve(options.out ?? 'domflax-out');\n return { ok: true, value: { mode: 'out-dir', outDir } };\n}\n\n/**\n * Compute the destination path for one source file under a {@link WritePlan}. Refuses when an\n * `out-dir` destination resolves onto the source file itself and that file is NOT a disposable build\n * artifact — that would be an unsanctioned in-place source overwrite (the Q16 guard).\n */\nexport function destinationFor(file: string, inputRoot: string, plan: WritePlan): Result<string> {\n const absFile = path.resolve(file);\n\n if (plan.mode === 'overwrite-source') {\n // Already gated by planWrites (danger flag + clean-git / waiver).\n return { ok: true, value: absFile };\n }\n\n const outDir = plan.outDir!;\n const rel = path.relative(inputRoot, absFile);\n // Inputs outside the mirror root collapse to their basename so we never escape outDir with `..`.\n const safeRel = rel === '' || rel.startsWith('..') || path.isAbsolute(rel) ? path.basename(absFile) : rel;\n const dest = path.join(outDir, safeRel);\n\n if (path.resolve(dest) === absFile && !isDisposablePath(absFile)) {\n return {\n ok: false,\n error:\n `refusing to overwrite source file ${absFile}: the output path resolves onto the source. ` +\n 'Choose a different --out, or pass --dangerously-overwrite-source (with a clean git tree).',\n };\n }\n return { ok: true, value: dest };\n}\n","/**\n * @domflax/cli — the single-file transform engine.\n *\n * Built directly from the LOWER packages (core + frontend-jsx + resolver-tailwind/resolver-css +\n * patterns + pattern-kit). It deliberately does NOT import the `domflax` meta package: domflax's bin\n * imports `@domflax/cli`, so importing domflax here would form a dependency cycle. The pipeline\n * mirrors domflax's own: parse (JSX→IR, resolving each element's static classes through the chosen\n * resolver) → runPasses(builtinPatterns) → reverse-emit computed styles back to class tokens → print.\n *\n * Non-jsx/tsx files (including `.html`, which has no wired frontend yet) pass through unchanged.\n */\n\nimport {\n buildSelectorIndex,\n createSyntheticSink,\n runPasses,\n syncClassesFromComputed,\n} from '@domflax/core';\nimport type {\n ApplyContext,\n FileKind,\n IRDocument,\n Pass,\n PassCategory,\n PassPhase,\n Pattern,\n SafetyLevel,\n StyleResolver,\n} from '@domflax/core';\nimport { createJsxBackend, createJsxFrontend } from '@domflax/frontend-jsx';\nimport { normalizer } from '@domflax/pattern-kit';\nimport { builtinPatterns } from '@domflax/patterns';\nimport { createCssResolver } from '@domflax/resolver-css';\nimport { createTailwindResolver } from '@domflax/resolver-tailwind';\n\nimport type { CliOptions, ProviderOption } from './options';\n\n/* ───────────────────────── per-file result + stats ───────────────────────── */\n\nexport interface FileStats {\n readonly nodesIn: number;\n readonly nodesOut: number;\n readonly nodesRemoved: number;\n readonly classesBefore: number;\n readonly classesAfter: number;\n readonly classesSaved: number;\n readonly bytesBefore: number;\n readonly bytesAfter: number;\n readonly bytesSaved: number;\n}\n\nexport interface FileResult {\n readonly code: string;\n readonly changed: boolean;\n readonly passthrough: boolean;\n readonly stats: FileStats;\n}\n\n/** A configured transform — holds the resolver (and its cached engine) across files. */\nexport interface Transform {\n readonly resolver: StyleResolver;\n transformFile(code: string, id: string): FileResult;\n}\n\n/* ───────────────────────── resolver wiring ───────────────────────── */\n\n/**\n * Build the {@link StyleResolver} for the chosen provider. The heavy engine each wraps (Tailwind v3 /\n * postcss) is loaded LAZILY at construction and resolved from the user's PROJECT via the factories'\n * `projectRoot` option — never from where the CLI bundle happens to live.\n */\nexport function buildResolver(provider: ProviderOption, css: readonly string[], projectRoot: string): StyleResolver {\n if (provider === 'custom') {\n return createCssResolver([], { files: css, projectRoot });\n }\n // 'auto' and 'tailwind' both resolve against the project's Tailwind engine.\n return createTailwindResolver({ projectRoot });\n}\n\n/* ───────────────────────── pass assembly ───────────────────────── */\n\n/** Group the flat pattern list into one {@link Pass} per {@link PassPhase} (derived from category). */\nfunction buildPasses(patterns: readonly Pattern[]): Pass[] {\n const byPhase = new Map<PassPhase, Pattern[]>();\n for (const p of patterns) {\n const phase = (p.category.split('/', 1)[0] ?? 'flatten') as PassPhase;\n let bucket = byPhase.get(phase);\n if (!bucket) {\n bucket = [];\n byPhase.set(phase, bucket);\n }\n bucket.push(p);\n }\n const passes: Pass[] = [];\n for (const [phase, pats] of byPhase) {\n passes.push({ phase, category: `${phase}/builtin` as PassCategory, patterns: pats });\n }\n return passes;\n}\n\n/** Select the active patterns: every built-in unless the caller narrowed by name (the wizard does). */\nfunction selectPatterns(names: readonly string[] | null): readonly Pattern[] {\n if (names === null) return builtinPatterns;\n const set = new Set(names);\n return builtinPatterns.filter((p) => set.has(p.name));\n}\n\n/* ───────────────────────── file kind + token counting ───────────────────────── */\n\n/** `.tsx`/`.jsx` ⇒ the matching {@link FileKind}; anything else ⇒ null (no JSX frontend). */\nfunction jsxKindOf(id: string): FileKind | null {\n const clean = id.split('?', 1)[0] ?? id;\n const lower = clean.toLowerCase();\n if (lower.endsWith('.tsx')) return 'tsx';\n if (lower.endsWith('.jsx')) return 'jsx';\n return null;\n}\n\n/** Rough class-token count for the `--report` summary (provider-independent, string-level). */\nfunction countClassTokens(code: string): number {\n let total = 0;\n const re = /\\b(?:className|class)\\s*=\\s*\"([^\"]*)\"/g;\n let m: RegExpExecArray | null;\n while ((m = re.exec(code)) !== null) {\n total += m[1]!.split(/\\s+/).filter((t) => t.length > 0).length;\n }\n return total;\n}\n\nfunction bytes(s: string): number {\n return Buffer.byteLength(s, 'utf8');\n}\n\nfunction passthroughResult(code: string): FileResult {\n return {\n code,\n changed: false,\n passthrough: true,\n stats: {\n nodesIn: 0,\n nodesOut: 0,\n nodesRemoved: 0,\n classesBefore: 0,\n classesAfter: 0,\n classesSaved: 0,\n bytesBefore: bytes(code),\n bytesAfter: bytes(code),\n bytesSaved: 0,\n },\n };\n}\n\n/* ───────────────────────── the transform ───────────────────────── */\n\n/**\n * Construct a transform for the given options. The resolver (and its engine) is built once and reused\n * across every file. With `provider: 'tailwind'|'auto'`, if Tailwind cannot be resolved from the\n * project the resolver degrades to resolving nothing — transforms then pass through unchanged.\n */\nexport function createTransform(options: CliOptions): Transform {\n const projectRoot = options.projectRoot ?? process.cwd();\n const resolver = buildResolver(options.provider, options.css, projectRoot);\n const patterns = selectPatterns(options.passes);\n\n return {\n resolver,\n transformFile(code: string, id: string): FileResult {\n const kind = jsxKindOf(id);\n if (kind === null) return passthroughResult(code);\n\n // 1. PARSE — JSX → IR; the frontend resolves each element's static classes into `el.computed`.\n const parsed = createJsxFrontend().parse(code, {\n id,\n kind,\n resolver,\n normalizer,\n config: {},\n onDiagnostic: () => {},\n });\n const doc = parsed.doc;\n const nodesIn = doc.nodes.size;\n\n // 2. AUTHORIZE — open every node's safety floor; the ceiling + pattern opacity guards gate.\n for (const node of doc.nodes.values()) node.meta.safetyFloor = 3;\n\n // 3. PASSES — drive the built-ins to a fixpoint via the core pass manager.\n const ctx: ApplyContext = {\n doc,\n safetyCeiling: options.safety as SafetyLevel,\n normalizer,\n // Real CSS-selector-safety index from the active resolver (custom-CSS reports combinator /\n // structural-pseudo coupling; Tailwind has none → null index, behaviour unchanged).\n selectors: buildSelectorIndex(doc, resolver),\n resolver,\n };\n const { doc: optimized } = runPasses(doc, buildPasses(patterns), ctx);\n\n // 4. REVERSE-EMIT — fold optimized computed styles back into class tokens.\n syncClassesFromComputed(optimized, resolver, normalizer);\n\n // 5. PRINT — IR → JSX/TSX text.\n const printed = createJsxBackend().print(\n optimized,\n { moduleId: id, ops: [], provenance: new Map() },\n {\n normalizer,\n resolver,\n sink: createSyntheticSink(),\n eol: '\\n',\n onDiagnostic: () => {},\n },\n );\n\n const out = printed.code;\n const nodesOut = optimized.nodes.size;\n const classesBefore = countClassTokens(code);\n const classesAfter = countClassTokens(out);\n return {\n code: out,\n changed: out !== code,\n passthrough: false,\n stats: {\n nodesIn,\n nodesOut,\n nodesRemoved: Math.max(0, nodesIn - nodesOut),\n classesBefore,\n classesAfter,\n classesSaved: Math.max(0, classesBefore - classesAfter),\n bytesBefore: bytes(code),\n bytesAfter: bytes(out),\n bytesSaved: bytes(code) - bytes(out),\n },\n };\n },\n };\n}\n\n/** The names of every built-in pattern, for the wizard's multiselect. */\nexport function builtinPatternNames(): readonly string[] {\n return builtinPatterns.map((p) => p.name);\n}\n","/**\n * @domflax/cli — input discovery.\n *\n * A positional may be a folder (recursively scanned for .jsx/.tsx/.html), a literal file, or a glob.\n * The `inputRoot` is the folder when a single directory is given (so `--out` can mirror structure),\n * otherwise `process.cwd()`.\n */\n\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\n\n/** Extensions the CLI will attempt to optimize (`.html` currently passes through). */\nexport const SUPPORTED_EXTS: readonly string[] = ['.jsx', '.tsx', '.html', '.htm'];\n\n/** Directories never descended into during a recursive folder scan. */\nconst SKIP_DIRS: ReadonlySet<string> = new Set(['node_modules', '.git', 'domflax-out']);\n\nfunction isSupported(file: string): boolean {\n const lower = file.toLowerCase();\n return SUPPORTED_EXTS.some((ext) => lower.endsWith(ext));\n}\n\nfunction hasGlobMagic(p: string): boolean {\n return /[*?[\\]{}]/.test(p);\n}\n\n/** Recursively collect supported files under a directory. */\nfunction walkDir(dir: string, out: string[]): void {\n let entries: fs.Dirent[];\n try {\n entries = fs.readdirSync(dir, { withFileTypes: true });\n } catch {\n return;\n }\n for (const entry of entries) {\n const full = path.join(dir, entry.name);\n if (entry.isDirectory()) {\n if (SKIP_DIRS.has(entry.name)) continue;\n walkDir(full, out);\n } else if (entry.isFile() && isSupported(entry.name)) {\n out.push(full);\n }\n }\n}\n\n/** Optional `fs.globSync` (Node 22+); accessed defensively so older runtimes degrade gracefully. */\ntype GlobSync = (pattern: string) => string[];\nfunction globSyncMaybe(): GlobSync | null {\n const g = (fs as { globSync?: GlobSync }).globSync;\n return typeof g === 'function' ? g : null;\n}\n\nexport interface Discovery {\n readonly files: readonly string[];\n readonly inputRoot: string;\n readonly warnings: readonly string[];\n}\n\n/**\n * Resolve positionals into a concrete, de-duplicated file list plus the mirror root for `--out`.\n */\nexport function discoverInputs(paths: readonly string[]): Discovery {\n const files: string[] = [];\n const warnings: string[] = [];\n const seen = new Set<string>();\n const push = (f: string): void => {\n const abs = path.resolve(f);\n if (!seen.has(abs)) {\n seen.add(abs);\n files.push(abs);\n }\n };\n\n let inputRoot = process.cwd();\n if (paths.length === 1) {\n try {\n if (fs.statSync(paths[0]!).isDirectory()) inputRoot = path.resolve(paths[0]!);\n } catch {\n /* not a directory / missing — handled per-path below */\n }\n }\n\n for (const p of paths) {\n let stat: fs.Stats | null = null;\n try {\n stat = fs.statSync(p);\n } catch {\n stat = null;\n }\n\n if (stat?.isDirectory()) {\n // walkDir pushes directly; the final de-dupe pass below collapses any overlap.\n walkDir(path.resolve(p), files);\n continue;\n }\n if (stat?.isFile()) {\n push(p);\n continue;\n }\n if (hasGlobMagic(p)) {\n const glob = globSyncMaybe();\n if (!glob) {\n warnings.push(`glob not supported on this Node version, skipped: ${p}`);\n continue;\n }\n const matches = glob(p).filter(isSupported);\n if (matches.length === 0) warnings.push(`no files matched: ${p}`);\n for (const m of matches) push(m);\n continue;\n }\n warnings.push(`no such file or directory: ${p}`);\n }\n\n // De-duplicate (walkDir bypassed `push`).\n const deduped: string[] = [];\n const finalSeen = new Set<string>();\n for (const f of files) {\n const abs = path.resolve(f);\n if (!finalSeen.has(abs)) {\n finalSeen.add(abs);\n deduped.push(abs);\n }\n }\n\n return { files: deduped, inputRoot, warnings };\n}\n","/**\n * @domflax/cli — a tiny, dependency-free unified-ish diff for `--dry-run` previews.\n *\n * Trims the common leading/trailing lines and prints the differing middle as `-old` / `+new`. This is\n * a readable preview, not a minimal edit script (the backend re-prints rather than splices).\n */\n\nexport function unifiedDiff(before: string, after: string, label: string): string {\n if (before === after) return ` (unchanged) ${label}`;\n\n const a = before.split('\\n');\n const b = after.split('\\n');\n\n let prefix = 0;\n while (prefix < a.length && prefix < b.length && a[prefix] === b[prefix]) prefix += 1;\n\n let suffix = 0;\n while (\n suffix < a.length - prefix &&\n suffix < b.length - prefix &&\n a[a.length - 1 - suffix] === b[b.length - 1 - suffix]\n ) {\n suffix += 1;\n }\n\n const removed = a.slice(prefix, a.length - suffix);\n const added = b.slice(prefix, b.length - suffix);\n\n const lines: string[] = [`--- a/${label}`, `+++ b/${label}`];\n if (prefix > 0) lines.push(`@@ -${prefix + 1} +${prefix + 1} @@`);\n for (const r of removed) lines.push(`-${r}`);\n for (const ad of added) lines.push(`+${ad}`);\n return lines.join('\\n');\n}\n","/**\n * @domflax/cli — the interactive wizard (DESIGN-DECISIONS Q17).\n *\n * Launched only on a no-args run in a TTY (gated by the caller via {@link shouldPrompt}); it NEVER\n * runs under `--no-interactive`/`--yes` or a non-TTY, so it can't hang CI. It produces the SAME\n * {@link CliOptions} object the flag parser does. A cancel at any step aborts cleanly.\n */\n\nimport { cancel, intro, isCancel, multiselect, outro, select, text } from '@clack/prompts';\n\nimport type { CliOptions, ProviderOption } from './options';\nimport { DEFAULT_SAFETY } from './options';\nimport { builtinPatternNames } from './transform';\n\n/** Sentinel returned when the user cancels the wizard. */\nexport const WIZARD_CANCELLED = Symbol('domflax.wizard.cancelled');\n\nfunction cancelled<T>(value: T | symbol): value is symbol {\n return isCancel(value);\n}\n\n/**\n * Run the guided wizard, returning a fully-built {@link CliOptions} or {@link WIZARD_CANCELLED}.\n * `base` carries any flags the user also passed (defaults preserved for everything not asked).\n */\nexport async function runWizard(base: CliOptions): Promise<CliOptions | typeof WIZARD_CANCELLED> {\n intro('domflax — optimize your markup');\n\n const pathInput = await text({\n message: 'Which folder, glob, or file should domflax optimize?',\n placeholder: 'src',\n defaultValue: 'src',\n });\n if (cancelled(pathInput)) return done();\n\n const outputMode = await select({\n message: 'Where should the optimized files go?',\n options: [\n { value: 'out', label: 'A new ./domflax-out folder', hint: 'safe default' },\n { value: 'out-custom', label: 'A custom output folder' },\n { value: 'dry-run', label: 'Preview only (dry run)', hint: 'writes nothing' },\n { value: 'overwrite', label: 'Overwrite the source in place', hint: 'dangerous — needs clean git' },\n ],\n initialValue: 'out',\n });\n if (cancelled(outputMode)) return done();\n\n let out: string | null = null;\n let dryRun = false;\n let dangerouslyOverwriteSource = false;\n if (outputMode === 'out-custom') {\n const dir = await text({\n message: 'Output folder:',\n placeholder: 'domflax-out',\n defaultValue: 'domflax-out',\n });\n if (cancelled(dir)) return done();\n out = String(dir);\n } else if (outputMode === 'dry-run') {\n dryRun = true;\n } else if (outputMode === 'overwrite') {\n dangerouslyOverwriteSource = true;\n }\n\n const allPasses = builtinPatternNames();\n const passSelection = await multiselect({\n message: 'Which optimization passes should run?',\n options: allPasses.map((name) => ({ value: name, label: name })),\n initialValues: [...allPasses],\n required: true,\n });\n if (cancelled(passSelection)) return done();\n const passes = passSelection as string[];\n\n const provider = await select<ProviderOption>({\n message: 'How should class names resolve to styles?',\n options: [\n { value: 'auto', label: 'Auto (Tailwind)', hint: 'default' },\n { value: 'tailwind', label: 'Tailwind' },\n { value: 'custom', label: 'Custom CSS files' },\n ],\n initialValue: 'auto',\n });\n if (cancelled(provider)) return done();\n\n let css: readonly string[] = base.css;\n if (provider === 'custom') {\n const cssInput = await text({\n message: 'CSS files (space-separated):',\n placeholder: 'src/styles.css',\n });\n if (cancelled(cssInput)) return done();\n css = String(cssInput)\n .split(/\\s+/)\n .filter((s) => s.length > 0);\n }\n\n outro('Ready — running domflax.');\n\n return {\n ...base,\n paths: [String(pathInput)],\n out,\n provider: provider as ProviderOption,\n css,\n dryRun,\n dangerouslyOverwriteSource,\n passes: passes.length === allPasses.length ? null : passes,\n safety: base.safety ?? DEFAULT_SAFETY,\n };\n\n function done(): typeof WIZARD_CANCELLED {\n cancel('Cancelled — nothing was written.');\n return WIZARD_CANCELLED;\n }\n}\n","export default function ansiRegex({onlyFirst = false} = {}) {\n\t// Valid string terminator sequences are BEL, ESC\\, and 0x9c\n\tconst ST = '(?:\\\\u0007|\\\\u001B\\\\u005C|\\\\u009C)';\n\tconst pattern = [\n\t\t`[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]+)*|[a-zA-Z\\\\d]+(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?${ST})`,\n\t\t'(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PR-TZcf-nq-uy=><~]))',\n\t].join('|');\n\n\treturn new RegExp(pattern, onlyFirst ? undefined : 'g');\n}\n","import ansiRegex from 'ansi-regex';\n\nconst regex = ansiRegex();\n\nexport default function stripAnsi(string) {\n\tif (typeof string !== 'string') {\n\t\tthrow new TypeError(`Expected a \\`string\\`, got \\`${typeof string}\\``);\n\t}\n\n\t// Even though the regex is global, we don't need to reset the `.lastIndex`\n\t// because unlike `.exec()` and `.test()`, `.replace()` does it automatically\n\t// and doing it manually has a performance penalty.\n\treturn string.replace(regex, '');\n}\n","var eaw = {};\n\nif ('undefined' == typeof module) {\n window.eastasianwidth = eaw;\n} else {\n module.exports = eaw;\n}\n\neaw.eastAsianWidth = function(character) {\n var x = character.charCodeAt(0);\n var y = (character.length == 2) ? character.charCodeAt(1) : 0;\n var codePoint = x;\n if ((0xD800 <= x && x <= 0xDBFF) && (0xDC00 <= y && y <= 0xDFFF)) {\n x &= 0x3FF;\n y &= 0x3FF;\n codePoint = (x << 10) | y;\n codePoint += 0x10000;\n }\n\n if ((0x3000 == codePoint) ||\n (0xFF01 <= codePoint && codePoint <= 0xFF60) ||\n (0xFFE0 <= codePoint && codePoint <= 0xFFE6)) {\n return 'F';\n }\n if ((0x20A9 == codePoint) ||\n (0xFF61 <= codePoint && codePoint <= 0xFFBE) ||\n (0xFFC2 <= codePoint && codePoint <= 0xFFC7) ||\n (0xFFCA <= codePoint && codePoint <= 0xFFCF) ||\n (0xFFD2 <= codePoint && codePoint <= 0xFFD7) ||\n (0xFFDA <= codePoint && codePoint <= 0xFFDC) ||\n (0xFFE8 <= codePoint && codePoint <= 0xFFEE)) {\n return 'H';\n }\n if ((0x1100 <= codePoint && codePoint <= 0x115F) ||\n (0x11A3 <= codePoint && codePoint <= 0x11A7) ||\n (0x11FA <= codePoint && codePoint <= 0x11FF) ||\n (0x2329 <= codePoint && codePoint <= 0x232A) ||\n (0x2E80 <= codePoint && codePoint <= 0x2E99) ||\n (0x2E9B <= codePoint && codePoint <= 0x2EF3) ||\n (0x2F00 <= codePoint && codePoint <= 0x2FD5) ||\n (0x2FF0 <= codePoint && codePoint <= 0x2FFB) ||\n (0x3001 <= codePoint && codePoint <= 0x303E) ||\n (0x3041 <= codePoint && codePoint <= 0x3096) ||\n (0x3099 <= codePoint && codePoint <= 0x30FF) ||\n (0x3105 <= codePoint && codePoint <= 0x312D) ||\n (0x3131 <= codePoint && codePoint <= 0x318E) ||\n (0x3190 <= codePoint && codePoint <= 0x31BA) ||\n (0x31C0 <= codePoint && codePoint <= 0x31E3) ||\n (0x31F0 <= codePoint && codePoint <= 0x321E) ||\n (0x3220 <= codePoint && codePoint <= 0x3247) ||\n (0x3250 <= codePoint && codePoint <= 0x32FE) ||\n (0x3300 <= codePoint && codePoint <= 0x4DBF) ||\n (0x4E00 <= codePoint && codePoint <= 0xA48C) ||\n (0xA490 <= codePoint && codePoint <= 0xA4C6) ||\n (0xA960 <= codePoint && codePoint <= 0xA97C) ||\n (0xAC00 <= codePoint && codePoint <= 0xD7A3) ||\n (0xD7B0 <= codePoint && codePoint <= 0xD7C6) ||\n (0xD7CB <= codePoint && codePoint <= 0xD7FB) ||\n (0xF900 <= codePoint && codePoint <= 0xFAFF) ||\n (0xFE10 <= codePoint && codePoint <= 0xFE19) ||\n (0xFE30 <= codePoint && codePoint <= 0xFE52) ||\n (0xFE54 <= codePoint && codePoint <= 0xFE66) ||\n (0xFE68 <= codePoint && codePoint <= 0xFE6B) ||\n (0x1B000 <= codePoint && codePoint <= 0x1B001) ||\n (0x1F200 <= codePoint && codePoint <= 0x1F202) ||\n (0x1F210 <= codePoint && codePoint <= 0x1F23A) ||\n (0x1F240 <= codePoint && codePoint <= 0x1F248) ||\n (0x1F250 <= codePoint && codePoint <= 0x1F251) ||\n (0x20000 <= codePoint && codePoint <= 0x2F73F) ||\n (0x2B740 <= codePoint && codePoint <= 0x2FFFD) ||\n (0x30000 <= codePoint && codePoint <= 0x3FFFD)) {\n return 'W';\n }\n if ((0x0020 <= codePoint && codePoint <= 0x007E) ||\n (0x00A2 <= codePoint && codePoint <= 0x00A3) ||\n (0x00A5 <= codePoint && codePoint <= 0x00A6) ||\n (0x00AC == codePoint) ||\n (0x00AF == codePoint) ||\n (0x27E6 <= codePoint && codePoint <= 0x27ED) ||\n (0x2985 <= codePoint && codePoint <= 0x2986)) {\n return 'Na';\n }\n if ((0x00A1 == codePoint) ||\n (0x00A4 == codePoint) ||\n (0x00A7 <= codePoint && codePoint <= 0x00A8) ||\n (0x00AA == codePoint) ||\n (0x00AD <= codePoint && codePoint <= 0x00AE) ||\n (0x00B0 <= codePoint && codePoint <= 0x00B4) ||\n (0x00B6 <= codePoint && codePoint <= 0x00BA) ||\n (0x00BC <= codePoint && codePoint <= 0x00BF) ||\n (0x00C6 == codePoint) ||\n (0x00D0 == codePoint) ||\n (0x00D7 <= codePoint && codePoint <= 0x00D8) ||\n (0x00DE <= codePoint && codePoint <= 0x00E1) ||\n (0x00E6 == codePoint) ||\n (0x00E8 <= codePoint && codePoint <= 0x00EA) ||\n (0x00EC <= codePoint && codePoint <= 0x00ED) ||\n (0x00F0 == codePoint) ||\n (0x00F2 <= codePoint && codePoint <= 0x00F3) ||\n (0x00F7 <= codePoint && codePoint <= 0x00FA) ||\n (0x00FC == codePoint) ||\n (0x00FE == codePoint) ||\n (0x0101 == codePoint) ||\n (0x0111 == codePoint) ||\n (0x0113 == codePoint) ||\n (0x011B == codePoint) ||\n (0x0126 <= codePoint && codePoint <= 0x0127) ||\n (0x012B == codePoint) ||\n (0x0131 <= codePoint && codePoint <= 0x0133) ||\n (0x0138 == codePoint) ||\n (0x013F <= codePoint && codePoint <= 0x0142) ||\n (0x0144 == codePoint) ||\n (0x0148 <= codePoint && codePoint <= 0x014B) ||\n (0x014D == codePoint) ||\n (0x0152 <= codePoint && codePoint <= 0x0153) ||\n (0x0166 <= codePoint && codePoint <= 0x0167) ||\n (0x016B == codePoint) ||\n (0x01CE == codePoint) ||\n (0x01D0 == codePoint) ||\n (0x01D2 == codePoint) ||\n (0x01D4 == codePoint) ||\n (0x01D6 == codePoint) ||\n (0x01D8 == codePoint) ||\n (0x01DA == codePoint) ||\n (0x01DC == codePoint) ||\n (0x0251 == codePoint) ||\n (0x0261 == codePoint) ||\n (0x02C4 == codePoint) ||\n (0x02C7 == codePoint) ||\n (0x02C9 <= codePoint && codePoint <= 0x02CB) ||\n (0x02CD == codePoint) ||\n (0x02D0 == codePoint) ||\n (0x02D8 <= codePoint && codePoint <= 0x02DB) ||\n (0x02DD == codePoint) ||\n (0x02DF == codePoint) ||\n (0x0300 <= codePoint && codePoint <= 0x036F) ||\n (0x0391 <= codePoint && codePoint <= 0x03A1) ||\n (0x03A3 <= codePoint && codePoint <= 0x03A9) ||\n (0x03B1 <= codePoint && codePoint <= 0x03C1) ||\n (0x03C3 <= codePoint && codePoint <= 0x03C9) ||\n (0x0401 == codePoint) ||\n (0x0410 <= codePoint && codePoint <= 0x044F) ||\n (0x0451 == codePoint) ||\n (0x2010 == codePoint) ||\n (0x2013 <= codePoint && codePoint <= 0x2016) ||\n (0x2018 <= codePoint && codePoint <= 0x2019) ||\n (0x201C <= codePoint && codePoint <= 0x201D) ||\n (0x2020 <= codePoint && codePoint <= 0x2022) ||\n (0x2024 <= codePoint && codePoint <= 0x2027) ||\n (0x2030 == codePoint) ||\n (0x2032 <= codePoint && codePoint <= 0x2033) ||\n (0x2035 == codePoint) ||\n (0x203B == codePoint) ||\n (0x203E == codePoint) ||\n (0x2074 == codePoint) ||\n (0x207F == codePoint) ||\n (0x2081 <= codePoint && codePoint <= 0x2084) ||\n (0x20AC == codePoint) ||\n (0x2103 == codePoint) ||\n (0x2105 == codePoint) ||\n (0x2109 == codePoint) ||\n (0x2113 == codePoint) ||\n (0x2116 == codePoint) ||\n (0x2121 <= codePoint && codePoint <= 0x2122) ||\n (0x2126 == codePoint) ||\n (0x212B == codePoint) ||\n (0x2153 <= codePoint && codePoint <= 0x2154) ||\n (0x215B <= codePoint && codePoint <= 0x215E) ||\n (0x2160 <= codePoint && codePoint <= 0x216B) ||\n (0x2170 <= codePoint && codePoint <= 0x2179) ||\n (0x2189 == codePoint) ||\n (0x2190 <= codePoint && codePoint <= 0x2199) ||\n (0x21B8 <= codePoint && codePoint <= 0x21B9) ||\n (0x21D2 == codePoint) ||\n (0x21D4 == codePoint) ||\n (0x21E7 == codePoint) ||\n (0x2200 == codePoint) ||\n (0x2202 <= codePoint && codePoint <= 0x2203) ||\n (0x2207 <= codePoint && codePoint <= 0x2208) ||\n (0x220B == codePoint) ||\n (0x220F == codePoint) ||\n (0x2211 == codePoint) ||\n (0x2215 == codePoint) ||\n (0x221A == codePoint) ||\n (0x221D <= codePoint && codePoint <= 0x2220) ||\n (0x2223 == codePoint) ||\n (0x2225 == codePoint) ||\n (0x2227 <= codePoint && codePoint <= 0x222C) ||\n (0x222E == codePoint) ||\n (0x2234 <= codePoint && codePoint <= 0x2237) ||\n (0x223C <= codePoint && codePoint <= 0x223D) ||\n (0x2248 == codePoint) ||\n (0x224C == codePoint) ||\n (0x2252 == codePoint) ||\n (0x2260 <= codePoint && codePoint <= 0x2261) ||\n (0x2264 <= codePoint && codePoint <= 0x2267) ||\n (0x226A <= codePoint && codePoint <= 0x226B) ||\n (0x226E <= codePoint && codePoint <= 0x226F) ||\n (0x2282 <= codePoint && codePoint <= 0x2283) ||\n (0x2286 <= codePoint && codePoint <= 0x2287) ||\n (0x2295 == codePoint) ||\n (0x2299 == codePoint) ||\n (0x22A5 == codePoint) ||\n (0x22BF == codePoint) ||\n (0x2312 == codePoint) ||\n (0x2460 <= codePoint && codePoint <= 0x24E9) ||\n (0x24EB <= codePoint && codePoint <= 0x254B) ||\n (0x2550 <= codePoint && codePoint <= 0x2573) ||\n (0x2580 <= codePoint && codePoint <= 0x258F) ||\n (0x2592 <= codePoint && codePoint <= 0x2595) ||\n (0x25A0 <= codePoint && codePoint <= 0x25A1) ||\n (0x25A3 <= codePoint && codePoint <= 0x25A9) ||\n (0x25B2 <= codePoint && codePoint <= 0x25B3) ||\n (0x25B6 <= codePoint && codePoint <= 0x25B7) ||\n (0x25BC <= codePoint && codePoint <= 0x25BD) ||\n (0x25C0 <= codePoint && codePoint <= 0x25C1) ||\n (0x25C6 <= codePoint && codePoint <= 0x25C8) ||\n (0x25CB == codePoint) ||\n (0x25CE <= codePoint && codePoint <= 0x25D1) ||\n (0x25E2 <= codePoint && codePoint <= 0x25E5) ||\n (0x25EF == codePoint) ||\n (0x2605 <= codePoint && codePoint <= 0x2606) ||\n (0x2609 == codePoint) ||\n (0x260E <= codePoint && codePoint <= 0x260F) ||\n (0x2614 <= codePoint && codePoint <= 0x2615) ||\n (0x261C == codePoint) ||\n (0x261E == codePoint) ||\n (0x2640 == codePoint) ||\n (0x2642 == codePoint) ||\n (0x2660 <= codePoint && codePoint <= 0x2661) ||\n (0x2663 <= codePoint && codePoint <= 0x2665) ||\n (0x2667 <= codePoint && codePoint <= 0x266A) ||\n (0x266C <= codePoint && codePoint <= 0x266D) ||\n (0x266F == codePoint) ||\n (0x269E <= codePoint && codePoint <= 0x269F) ||\n (0x26BE <= codePoint && codePoint <= 0x26BF) ||\n (0x26C4 <= codePoint && codePoint <= 0x26CD) ||\n (0x26CF <= codePoint && codePoint <= 0x26E1) ||\n (0x26E3 == codePoint) ||\n (0x26E8 <= codePoint && codePoint <= 0x26FF) ||\n (0x273D == codePoint) ||\n (0x2757 == codePoint) ||\n (0x2776 <= codePoint && codePoint <= 0x277F) ||\n (0x2B55 <= codePoint && codePoint <= 0x2B59) ||\n (0x3248 <= codePoint && codePoint <= 0x324F) ||\n (0xE000 <= codePoint && codePoint <= 0xF8FF) ||\n (0xFE00 <= codePoint && codePoint <= 0xFE0F) ||\n (0xFFFD == codePoint) ||\n (0x1F100 <= codePoint && codePoint <= 0x1F10A) ||\n (0x1F110 <= codePoint && codePoint <= 0x1F12D) ||\n (0x1F130 <= codePoint && codePoint <= 0x1F169) ||\n (0x1F170 <= codePoint && codePoint <= 0x1F19A) ||\n (0xE0100 <= codePoint && codePoint <= 0xE01EF) ||\n (0xF0000 <= codePoint && codePoint <= 0xFFFFD) ||\n (0x100000 <= codePoint && codePoint <= 0x10FFFD)) {\n return 'A';\n }\n\n return 'N';\n};\n\neaw.characterLength = function(character) {\n var code = this.eastAsianWidth(character);\n if (code == 'F' || code == 'W' || code == 'A') {\n return 2;\n } else {\n return 1;\n }\n};\n\n// Split a string considering surrogate-pairs.\nfunction stringToArray(string) {\n return string.match(/[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[^\\uD800-\\uDFFF]/g) || [];\n}\n\neaw.length = function(string) {\n var characters = stringToArray(string);\n var len = 0;\n for (var i = 0; i < characters.length; i++) {\n len = len + this.characterLength(characters[i]);\n }\n return len;\n};\n\neaw.slice = function(text, start, end) {\n textLen = eaw.length(text)\n start = start ? start : 0;\n end = end ? end : 1;\n if (start < 0) {\n start = textLen + start;\n }\n if (end < 0) {\n end = textLen + end;\n }\n var result = '';\n var eawLen = 0;\n var chars = stringToArray(text);\n for (var i = 0; i < chars.length; i++) {\n var char = chars[i];\n var charLen = eaw.length(char);\n if (eawLen >= start - (charLen == 2 ? 1 : 0)) {\n if (eawLen + charLen <= end) {\n result += char;\n } else {\n break;\n }\n }\n eawLen += charLen;\n }\n return result;\n};\n","\"use strict\";\n\nmodule.exports = function () {\n // https://mths.be/emoji\n return /\\uD83C\\uDFF4\\uDB40\\uDC67\\uDB40\\uDC62(?:\\uDB40\\uDC77\\uDB40\\uDC6C\\uDB40\\uDC73|\\uDB40\\uDC73\\uDB40\\uDC63\\uDB40\\uDC74|\\uDB40\\uDC65\\uDB40\\uDC6E\\uDB40\\uDC67)\\uDB40\\uDC7F|(?:\\uD83E\\uDDD1\\uD83C\\uDFFF\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFF\\u200D\\uD83E\\uDD1D\\u200D(?:\\uD83D[\\uDC68\\uDC69]))(?:\\uD83C[\\uDFFB-\\uDFFE])|(?:\\uD83E\\uDDD1\\uD83C\\uDFFE\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFE\\u200D\\uD83E\\uDD1D\\u200D(?:\\uD83D[\\uDC68\\uDC69]))(?:\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])|(?:\\uD83E\\uDDD1\\uD83C\\uDFFD\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFD\\u200D\\uD83E\\uDD1D\\u200D(?:\\uD83D[\\uDC68\\uDC69]))(?:\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])|(?:\\uD83E\\uDDD1\\uD83C\\uDFFC\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFC\\u200D\\uD83E\\uDD1D\\u200D(?:\\uD83D[\\uDC68\\uDC69]))(?:\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])|(?:\\uD83E\\uDDD1\\uD83C\\uDFFB\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFB\\u200D\\uD83E\\uDD1D\\u200D(?:\\uD83D[\\uDC68\\uDC69]))(?:\\uD83C[\\uDFFC-\\uDFFF])|\\uD83D\\uDC68(?:\\uD83C\\uDFFB(?:\\u200D(?:\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFF])|\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFF]))|\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFC-\\uDFFF])|[\\u2695\\u2696\\u2708]\\uFE0F|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]))?|(?:\\uD83C[\\uDFFC-\\uDFFF])\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFF])|\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFF]))|\\u200D(?:\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83D\\uDC68|(?:\\uD83D[\\uDC68\\uDC69])\\u200D(?:\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67]))|\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67])|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFF\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFE])|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFE\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFD\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFC\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|(?:\\uD83C\\uDFFF\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFE\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFD\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFC\\u200D[\\u2695\\u2696\\u2708]|\\u200D[\\u2695\\u2696\\u2708])\\uFE0F|\\u200D(?:(?:\\uD83D[\\uDC68\\uDC69])\\u200D(?:\\uD83D[\\uDC66\\uDC67])|\\uD83D[\\uDC66\\uDC67])|\\uD83C\\uDFFF|\\uD83C\\uDFFE|\\uD83C\\uDFFD|\\uD83C\\uDFFC)?|(?:\\uD83D\\uDC69(?:\\uD83C\\uDFFB\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D(?:\\uD83D[\\uDC68\\uDC69])|\\uD83D[\\uDC68\\uDC69])|(?:\\uD83C[\\uDFFC-\\uDFFF])\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D(?:\\uD83D[\\uDC68\\uDC69])|\\uD83D[\\uDC68\\uDC69]))|\\uD83E\\uDDD1(?:\\uD83C[\\uDFFB-\\uDFFF])\\u200D\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1)(?:\\uD83C[\\uDFFB-\\uDFFF])|\\uD83D\\uDC69\\u200D\\uD83D\\uDC69\\u200D(?:\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67]))|\\uD83D\\uDC69(?:\\u200D(?:\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D(?:\\uD83D[\\uDC68\\uDC69])|\\uD83D[\\uDC68\\uDC69])|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFF\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFE\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFD\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFC\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFB\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]))|\\uD83E\\uDDD1(?:\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFF\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFE\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFD\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFC\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFB\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]))|\\uD83D\\uDC69\\u200D\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC69\\u200D\\uD83D\\uDC69\\u200D(?:\\uD83D[\\uDC66\\uDC67])|\\uD83D\\uDC69\\u200D\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67])|(?:\\uD83D\\uDC41\\uFE0F\\u200D\\uD83D\\uDDE8|\\uD83E\\uDDD1(?:\\uD83C\\uDFFF\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFE\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFD\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFC\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFB\\u200D[\\u2695\\u2696\\u2708]|\\u200D[\\u2695\\u2696\\u2708])|\\uD83D\\uDC69(?:\\uD83C\\uDFFF\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFE\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFD\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFC\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFB\\u200D[\\u2695\\u2696\\u2708]|\\u200D[\\u2695\\u2696\\u2708])|\\uD83D\\uDE36\\u200D\\uD83C\\uDF2B|\\uD83C\\uDFF3\\uFE0F\\u200D\\u26A7|\\uD83D\\uDC3B\\u200D\\u2744|(?:(?:\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC70\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD35\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD4\\uDDD6-\\uDDDD])(?:\\uD83C[\\uDFFB-\\uDFFF])|\\uD83D\\uDC6F|\\uD83E[\\uDD3C\\uDDDE\\uDDDF])\\u200D[\\u2640\\u2642]|(?:\\u26F9|\\uD83C[\\uDFCB\\uDFCC]|\\uD83D\\uDD75)(?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])\\u200D[\\u2640\\u2642]|\\uD83C\\uDFF4\\u200D\\u2620|(?:\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC70\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD35\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD4\\uDDD6-\\uDDDD])\\u200D[\\u2640\\u2642]|[\\xA9\\xAE\\u203C\\u2049\\u2122\\u2139\\u2194-\\u2199\\u21A9\\u21AA\\u2328\\u23CF\\u23ED-\\u23EF\\u23F1\\u23F2\\u23F8-\\u23FA\\u24C2\\u25AA\\u25AB\\u25B6\\u25C0\\u25FB\\u25FC\\u2600-\\u2604\\u260E\\u2611\\u2618\\u2620\\u2622\\u2623\\u2626\\u262A\\u262E\\u262F\\u2638-\\u263A\\u2640\\u2642\\u265F\\u2660\\u2663\\u2665\\u2666\\u2668\\u267B\\u267E\\u2692\\u2694-\\u2697\\u2699\\u269B\\u269C\\u26A0\\u26A7\\u26B0\\u26B1\\u26C8\\u26CF\\u26D1\\u26D3\\u26E9\\u26F0\\u26F1\\u26F4\\u26F7\\u26F8\\u2702\\u2708\\u2709\\u270F\\u2712\\u2714\\u2716\\u271D\\u2721\\u2733\\u2734\\u2744\\u2747\\u2763\\u27A1\\u2934\\u2935\\u2B05-\\u2B07\\u3030\\u303D\\u3297\\u3299]|\\uD83C[\\uDD70\\uDD71\\uDD7E\\uDD7F\\uDE02\\uDE37\\uDF21\\uDF24-\\uDF2C\\uDF36\\uDF7D\\uDF96\\uDF97\\uDF99-\\uDF9B\\uDF9E\\uDF9F\\uDFCD\\uDFCE\\uDFD4-\\uDFDF\\uDFF5\\uDFF7]|\\uD83D[\\uDC3F\\uDCFD\\uDD49\\uDD4A\\uDD6F\\uDD70\\uDD73\\uDD76-\\uDD79\\uDD87\\uDD8A-\\uDD8D\\uDDA5\\uDDA8\\uDDB1\\uDDB2\\uDDBC\\uDDC2-\\uDDC4\\uDDD1-\\uDDD3\\uDDDC-\\uDDDE\\uDDE1\\uDDE3\\uDDE8\\uDDEF\\uDDF3\\uDDFA\\uDECB\\uDECD-\\uDECF\\uDEE0-\\uDEE5\\uDEE9\\uDEF0\\uDEF3])\\uFE0F|\\uD83C\\uDFF3\\uFE0F\\u200D\\uD83C\\uDF08|\\uD83D\\uDC69\\u200D\\uD83D\\uDC67|\\uD83D\\uDC69\\u200D\\uD83D\\uDC66|\\uD83D\\uDE35\\u200D\\uD83D\\uDCAB|\\uD83D\\uDE2E\\u200D\\uD83D\\uDCA8|\\uD83D\\uDC15\\u200D\\uD83E\\uDDBA|\\uD83E\\uDDD1(?:\\uD83C\\uDFFF|\\uD83C\\uDFFE|\\uD83C\\uDFFD|\\uD83C\\uDFFC|\\uD83C\\uDFFB)?|\\uD83D\\uDC69(?:\\uD83C\\uDFFF|\\uD83C\\uDFFE|\\uD83C\\uDFFD|\\uD83C\\uDFFC|\\uD83C\\uDFFB)?|\\uD83C\\uDDFD\\uD83C\\uDDF0|\\uD83C\\uDDF6\\uD83C\\uDDE6|\\uD83C\\uDDF4\\uD83C\\uDDF2|\\uD83D\\uDC08\\u200D\\u2B1B|\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDD25|\\uD83E\\uDE79)|\\uD83D\\uDC41\\uFE0F|\\uD83C\\uDFF3\\uFE0F|\\uD83C\\uDDFF(?:\\uD83C[\\uDDE6\\uDDF2\\uDDFC])|\\uD83C\\uDDFE(?:\\uD83C[\\uDDEA\\uDDF9])|\\uD83C\\uDDFC(?:\\uD83C[\\uDDEB\\uDDF8])|\\uD83C\\uDDFB(?:\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDEE\\uDDF3\\uDDFA])|\\uD83C\\uDDFA(?:\\uD83C[\\uDDE6\\uDDEC\\uDDF2\\uDDF3\\uDDF8\\uDDFE\\uDDFF])|\\uD83C\\uDDF9(?:\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDED\\uDDEF-\\uDDF4\\uDDF7\\uDDF9\\uDDFB\\uDDFC\\uDDFF])|\\uD83C\\uDDF8(?:\\uD83C[\\uDDE6-\\uDDEA\\uDDEC-\\uDDF4\\uDDF7-\\uDDF9\\uDDFB\\uDDFD-\\uDDFF])|\\uD83C\\uDDF7(?:\\uD83C[\\uDDEA\\uDDF4\\uDDF8\\uDDFA\\uDDFC])|\\uD83C\\uDDF5(?:\\uD83C[\\uDDE6\\uDDEA-\\uDDED\\uDDF0-\\uDDF3\\uDDF7-\\uDDF9\\uDDFC\\uDDFE])|\\uD83C\\uDDF3(?:\\uD83C[\\uDDE6\\uDDE8\\uDDEA-\\uDDEC\\uDDEE\\uDDF1\\uDDF4\\uDDF5\\uDDF7\\uDDFA\\uDDFF])|\\uD83C\\uDDF2(?:\\uD83C[\\uDDE6\\uDDE8-\\uDDED\\uDDF0-\\uDDFF])|\\uD83C\\uDDF1(?:\\uD83C[\\uDDE6-\\uDDE8\\uDDEE\\uDDF0\\uDDF7-\\uDDFB\\uDDFE])|\\uD83C\\uDDF0(?:\\uD83C[\\uDDEA\\uDDEC-\\uDDEE\\uDDF2\\uDDF3\\uDDF5\\uDDF7\\uDDFC\\uDDFE\\uDDFF])|\\uD83C\\uDDEF(?:\\uD83C[\\uDDEA\\uDDF2\\uDDF4\\uDDF5])|\\uD83C\\uDDEE(?:\\uD83C[\\uDDE8-\\uDDEA\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9])|\\uD83C\\uDDED(?:\\uD83C[\\uDDF0\\uDDF2\\uDDF3\\uDDF7\\uDDF9\\uDDFA])|\\uD83C\\uDDEC(?:\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEE\\uDDF1-\\uDDF3\\uDDF5-\\uDDFA\\uDDFC\\uDDFE])|\\uD83C\\uDDEB(?:\\uD83C[\\uDDEE-\\uDDF0\\uDDF2\\uDDF4\\uDDF7])|\\uD83C\\uDDEA(?:\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDED\\uDDF7-\\uDDFA])|\\uD83C\\uDDE9(?:\\uD83C[\\uDDEA\\uDDEC\\uDDEF\\uDDF0\\uDDF2\\uDDF4\\uDDFF])|\\uD83C\\uDDE8(?:\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDEE\\uDDF0-\\uDDF5\\uDDF7\\uDDFA-\\uDDFF])|\\uD83C\\uDDE7(?:\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEF\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9\\uDDFB\\uDDFC\\uDDFE\\uDDFF])|\\uD83C\\uDDE6(?:\\uD83C[\\uDDE8-\\uDDEC\\uDDEE\\uDDF1\\uDDF2\\uDDF4\\uDDF6-\\uDDFA\\uDDFC\\uDDFD\\uDDFF])|[#\\*0-9]\\uFE0F\\u20E3|\\u2764\\uFE0F|(?:\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC70\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD35\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD4\\uDDD6-\\uDDDD])(?:\\uD83C[\\uDFFB-\\uDFFF])|(?:\\u26F9|\\uD83C[\\uDFCB\\uDFCC]|\\uD83D\\uDD75)(?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])|\\uD83C\\uDFF4|(?:[\\u270A\\u270B]|\\uD83C[\\uDF85\\uDFC2\\uDFC7]|\\uD83D[\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66\\uDC67\\uDC6B-\\uDC6D\\uDC72\\uDC74-\\uDC76\\uDC78\\uDC7C\\uDC83\\uDC85\\uDC8F\\uDC91\\uDCAA\\uDD7A\\uDD95\\uDD96\\uDE4C\\uDE4F\\uDEC0\\uDECC]|\\uD83E[\\uDD0C\\uDD0F\\uDD18-\\uDD1C\\uDD1E\\uDD1F\\uDD30-\\uDD34\\uDD36\\uDD77\\uDDB5\\uDDB6\\uDDBB\\uDDD2\\uDDD3\\uDDD5])(?:\\uD83C[\\uDFFB-\\uDFFF])|(?:[\\u261D\\u270C\\u270D]|\\uD83D[\\uDD74\\uDD90])(?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])|[\\u270A\\u270B]|\\uD83C[\\uDF85\\uDFC2\\uDFC7]|\\uD83D[\\uDC08\\uDC15\\uDC3B\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66\\uDC67\\uDC6B-\\uDC6D\\uDC72\\uDC74-\\uDC76\\uDC78\\uDC7C\\uDC83\\uDC85\\uDC8F\\uDC91\\uDCAA\\uDD7A\\uDD95\\uDD96\\uDE2E\\uDE35\\uDE36\\uDE4C\\uDE4F\\uDEC0\\uDECC]|\\uD83E[\\uDD0C\\uDD0F\\uDD18-\\uDD1C\\uDD1E\\uDD1F\\uDD30-\\uDD34\\uDD36\\uDD77\\uDDB5\\uDDB6\\uDDBB\\uDDD2\\uDDD3\\uDDD5]|\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC70\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD35\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD4\\uDDD6-\\uDDDD]|\\uD83D\\uDC6F|\\uD83E[\\uDD3C\\uDDDE\\uDDDF]|[\\u231A\\u231B\\u23E9-\\u23EC\\u23F0\\u23F3\\u25FD\\u25FE\\u2614\\u2615\\u2648-\\u2653\\u267F\\u2693\\u26A1\\u26AA\\u26AB\\u26BD\\u26BE\\u26C4\\u26C5\\u26CE\\u26D4\\u26EA\\u26F2\\u26F3\\u26F5\\u26FA\\u26FD\\u2705\\u2728\\u274C\\u274E\\u2753-\\u2755\\u2757\\u2795-\\u2797\\u27B0\\u27BF\\u2B1B\\u2B1C\\u2B50\\u2B55]|\\uD83C[\\uDC04\\uDCCF\\uDD8E\\uDD91-\\uDD9A\\uDE01\\uDE1A\\uDE2F\\uDE32-\\uDE36\\uDE38-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF20\\uDF2D-\\uDF35\\uDF37-\\uDF7C\\uDF7E-\\uDF84\\uDF86-\\uDF93\\uDFA0-\\uDFC1\\uDFC5\\uDFC6\\uDFC8\\uDFC9\\uDFCF-\\uDFD3\\uDFE0-\\uDFF0\\uDFF8-\\uDFFF]|\\uD83D[\\uDC00-\\uDC07\\uDC09-\\uDC14\\uDC16-\\uDC3A\\uDC3C-\\uDC3E\\uDC40\\uDC44\\uDC45\\uDC51-\\uDC65\\uDC6A\\uDC79-\\uDC7B\\uDC7D-\\uDC80\\uDC84\\uDC88-\\uDC8E\\uDC90\\uDC92-\\uDCA9\\uDCAB-\\uDCFC\\uDCFF-\\uDD3D\\uDD4B-\\uDD4E\\uDD50-\\uDD67\\uDDA4\\uDDFB-\\uDE2D\\uDE2F-\\uDE34\\uDE37-\\uDE44\\uDE48-\\uDE4A\\uDE80-\\uDEA2\\uDEA4-\\uDEB3\\uDEB7-\\uDEBF\\uDEC1-\\uDEC5\\uDED0-\\uDED2\\uDED5-\\uDED7\\uDEEB\\uDEEC\\uDEF4-\\uDEFC\\uDFE0-\\uDFEB]|\\uD83E[\\uDD0D\\uDD0E\\uDD10-\\uDD17\\uDD1D\\uDD20-\\uDD25\\uDD27-\\uDD2F\\uDD3A\\uDD3F-\\uDD45\\uDD47-\\uDD76\\uDD78\\uDD7A-\\uDDB4\\uDDB7\\uDDBA\\uDDBC-\\uDDCB\\uDDD0\\uDDE0-\\uDDFF\\uDE70-\\uDE74\\uDE78-\\uDE7A\\uDE80-\\uDE86\\uDE90-\\uDEA8\\uDEB0-\\uDEB6\\uDEC0-\\uDEC2\\uDED0-\\uDED6]|(?:[\\u231A\\u231B\\u23E9-\\u23EC\\u23F0\\u23F3\\u25FD\\u25FE\\u2614\\u2615\\u2648-\\u2653\\u267F\\u2693\\u26A1\\u26AA\\u26AB\\u26BD\\u26BE\\u26C4\\u26C5\\u26CE\\u26D4\\u26EA\\u26F2\\u26F3\\u26F5\\u26FA\\u26FD\\u2705\\u270A\\u270B\\u2728\\u274C\\u274E\\u2753-\\u2755\\u2757\\u2795-\\u2797\\u27B0\\u27BF\\u2B1B\\u2B1C\\u2B50\\u2B55]|\\uD83C[\\uDC04\\uDCCF\\uDD8E\\uDD91-\\uDD9A\\uDDE6-\\uDDFF\\uDE01\\uDE1A\\uDE2F\\uDE32-\\uDE36\\uDE38-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF20\\uDF2D-\\uDF35\\uDF37-\\uDF7C\\uDF7E-\\uDF93\\uDFA0-\\uDFCA\\uDFCF-\\uDFD3\\uDFE0-\\uDFF0\\uDFF4\\uDFF8-\\uDFFF]|\\uD83D[\\uDC00-\\uDC3E\\uDC40\\uDC42-\\uDCFC\\uDCFF-\\uDD3D\\uDD4B-\\uDD4E\\uDD50-\\uDD67\\uDD7A\\uDD95\\uDD96\\uDDA4\\uDDFB-\\uDE4F\\uDE80-\\uDEC5\\uDECC\\uDED0-\\uDED2\\uDED5-\\uDED7\\uDEEB\\uDEEC\\uDEF4-\\uDEFC\\uDFE0-\\uDFEB]|\\uD83E[\\uDD0C-\\uDD3A\\uDD3C-\\uDD45\\uDD47-\\uDD78\\uDD7A-\\uDDCB\\uDDCD-\\uDDFF\\uDE70-\\uDE74\\uDE78-\\uDE7A\\uDE80-\\uDE86\\uDE90-\\uDEA8\\uDEB0-\\uDEB6\\uDEC0-\\uDEC2\\uDED0-\\uDED6])|(?:[#\\*0-9\\xA9\\xAE\\u203C\\u2049\\u2122\\u2139\\u2194-\\u2199\\u21A9\\u21AA\\u231A\\u231B\\u2328\\u23CF\\u23E9-\\u23F3\\u23F8-\\u23FA\\u24C2\\u25AA\\u25AB\\u25B6\\u25C0\\u25FB-\\u25FE\\u2600-\\u2604\\u260E\\u2611\\u2614\\u2615\\u2618\\u261D\\u2620\\u2622\\u2623\\u2626\\u262A\\u262E\\u262F\\u2638-\\u263A\\u2640\\u2642\\u2648-\\u2653\\u265F\\u2660\\u2663\\u2665\\u2666\\u2668\\u267B\\u267E\\u267F\\u2692-\\u2697\\u2699\\u269B\\u269C\\u26A0\\u26A1\\u26A7\\u26AA\\u26AB\\u26B0\\u26B1\\u26BD\\u26BE\\u26C4\\u26C5\\u26C8\\u26CE\\u26CF\\u26D1\\u26D3\\u26D4\\u26E9\\u26EA\\u26F0-\\u26F5\\u26F7-\\u26FA\\u26FD\\u2702\\u2705\\u2708-\\u270D\\u270F\\u2712\\u2714\\u2716\\u271D\\u2721\\u2728\\u2733\\u2734\\u2744\\u2747\\u274C\\u274E\\u2753-\\u2755\\u2757\\u2763\\u2764\\u2795-\\u2797\\u27A1\\u27B0\\u27BF\\u2934\\u2935\\u2B05-\\u2B07\\u2B1B\\u2B1C\\u2B50\\u2B55\\u3030\\u303D\\u3297\\u3299]|\\uD83C[\\uDC04\\uDCCF\\uDD70\\uDD71\\uDD7E\\uDD7F\\uDD8E\\uDD91-\\uDD9A\\uDDE6-\\uDDFF\\uDE01\\uDE02\\uDE1A\\uDE2F\\uDE32-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF21\\uDF24-\\uDF93\\uDF96\\uDF97\\uDF99-\\uDF9B\\uDF9E-\\uDFF0\\uDFF3-\\uDFF5\\uDFF7-\\uDFFF]|\\uD83D[\\uDC00-\\uDCFD\\uDCFF-\\uDD3D\\uDD49-\\uDD4E\\uDD50-\\uDD67\\uDD6F\\uDD70\\uDD73-\\uDD7A\\uDD87\\uDD8A-\\uDD8D\\uDD90\\uDD95\\uDD96\\uDDA4\\uDDA5\\uDDA8\\uDDB1\\uDDB2\\uDDBC\\uDDC2-\\uDDC4\\uDDD1-\\uDDD3\\uDDDC-\\uDDDE\\uDDE1\\uDDE3\\uDDE8\\uDDEF\\uDDF3\\uDDFA-\\uDE4F\\uDE80-\\uDEC5\\uDECB-\\uDED2\\uDED5-\\uDED7\\uDEE0-\\uDEE5\\uDEE9\\uDEEB\\uDEEC\\uDEF0\\uDEF3-\\uDEFC\\uDFE0-\\uDFEB]|\\uD83E[\\uDD0C-\\uDD3A\\uDD3C-\\uDD45\\uDD47-\\uDD78\\uDD7A-\\uDDCB\\uDDCD-\\uDDFF\\uDE70-\\uDE74\\uDE78-\\uDE7A\\uDE80-\\uDE86\\uDE90-\\uDEA8\\uDEB0-\\uDEB6\\uDEC0-\\uDEC2\\uDED0-\\uDED6])\\uFE0F|(?:[\\u261D\\u26F9\\u270A-\\u270D]|\\uD83C[\\uDF85\\uDFC2-\\uDFC4\\uDFC7\\uDFCA-\\uDFCC]|\\uD83D[\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66-\\uDC78\\uDC7C\\uDC81-\\uDC83\\uDC85-\\uDC87\\uDC8F\\uDC91\\uDCAA\\uDD74\\uDD75\\uDD7A\\uDD90\\uDD95\\uDD96\\uDE45-\\uDE47\\uDE4B-\\uDE4F\\uDEA3\\uDEB4-\\uDEB6\\uDEC0\\uDECC]|\\uD83E[\\uDD0C\\uDD0F\\uDD18-\\uDD1F\\uDD26\\uDD30-\\uDD39\\uDD3C-\\uDD3E\\uDD77\\uDDB5\\uDDB6\\uDDB8\\uDDB9\\uDDBB\\uDDCD-\\uDDCF\\uDDD1-\\uDDDD])/g;\n};\n","import stripAnsi from 'strip-ansi';\nimport eastAsianWidth from 'eastasianwidth';\nimport emojiRegex from 'emoji-regex';\n\nexport default function stringWidth(string, options = {}) {\n\tif (typeof string !== 'string' || string.length === 0) {\n\t\treturn 0;\n\t}\n\n\toptions = {\n\t\tambiguousIsNarrow: true,\n\t\t...options\n\t};\n\n\tstring = stripAnsi(string);\n\n\tif (string.length === 0) {\n\t\treturn 0;\n\t}\n\n\tstring = string.replace(emojiRegex(), ' ');\n\n\tconst ambiguousCharacterWidth = options.ambiguousIsNarrow ? 1 : 2;\n\tlet width = 0;\n\n\tfor (const character of string) {\n\t\tconst codePoint = character.codePointAt(0);\n\n\t\t// Ignore control characters\n\t\tif (codePoint <= 0x1F || (codePoint >= 0x7F && codePoint <= 0x9F)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Ignore combining characters\n\t\tif (codePoint >= 0x300 && codePoint <= 0x36F) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst code = eastAsianWidth.eastAsianWidth(character);\n\t\tswitch (code) {\n\t\t\tcase 'F':\n\t\t\tcase 'W':\n\t\t\t\twidth += 2;\n\t\t\t\tbreak;\n\t\t\tcase 'A':\n\t\t\t\twidth += ambiguousCharacterWidth;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\twidth += 1;\n\t\t}\n\t}\n\n\treturn width;\n}\n","const ANSI_BACKGROUND_OFFSET = 10;\n\nconst wrapAnsi16 = (offset = 0) => code => `\\u001B[${code + offset}m`;\n\nconst wrapAnsi256 = (offset = 0) => code => `\\u001B[${38 + offset};5;${code}m`;\n\nconst wrapAnsi16m = (offset = 0) => (red, green, blue) => `\\u001B[${38 + offset};2;${red};${green};${blue}m`;\n\nconst styles = {\n\tmodifier: {\n\t\treset: [0, 0],\n\t\t// 21 isn't widely supported and 22 does the same thing\n\t\tbold: [1, 22],\n\t\tdim: [2, 22],\n\t\titalic: [3, 23],\n\t\tunderline: [4, 24],\n\t\toverline: [53, 55],\n\t\tinverse: [7, 27],\n\t\thidden: [8, 28],\n\t\tstrikethrough: [9, 29],\n\t},\n\tcolor: {\n\t\tblack: [30, 39],\n\t\tred: [31, 39],\n\t\tgreen: [32, 39],\n\t\tyellow: [33, 39],\n\t\tblue: [34, 39],\n\t\tmagenta: [35, 39],\n\t\tcyan: [36, 39],\n\t\twhite: [37, 39],\n\n\t\t// Bright color\n\t\tblackBright: [90, 39],\n\t\tgray: [90, 39], // Alias of `blackBright`\n\t\tgrey: [90, 39], // Alias of `blackBright`\n\t\tredBright: [91, 39],\n\t\tgreenBright: [92, 39],\n\t\tyellowBright: [93, 39],\n\t\tblueBright: [94, 39],\n\t\tmagentaBright: [95, 39],\n\t\tcyanBright: [96, 39],\n\t\twhiteBright: [97, 39],\n\t},\n\tbgColor: {\n\t\tbgBlack: [40, 49],\n\t\tbgRed: [41, 49],\n\t\tbgGreen: [42, 49],\n\t\tbgYellow: [43, 49],\n\t\tbgBlue: [44, 49],\n\t\tbgMagenta: [45, 49],\n\t\tbgCyan: [46, 49],\n\t\tbgWhite: [47, 49],\n\n\t\t// Bright color\n\t\tbgBlackBright: [100, 49],\n\t\tbgGray: [100, 49], // Alias of `bgBlackBright`\n\t\tbgGrey: [100, 49], // Alias of `bgBlackBright`\n\t\tbgRedBright: [101, 49],\n\t\tbgGreenBright: [102, 49],\n\t\tbgYellowBright: [103, 49],\n\t\tbgBlueBright: [104, 49],\n\t\tbgMagentaBright: [105, 49],\n\t\tbgCyanBright: [106, 49],\n\t\tbgWhiteBright: [107, 49],\n\t},\n};\n\nexport const modifierNames = Object.keys(styles.modifier);\nexport const foregroundColorNames = Object.keys(styles.color);\nexport const backgroundColorNames = Object.keys(styles.bgColor);\nexport const colorNames = [...foregroundColorNames, ...backgroundColorNames];\n\nfunction assembleStyles() {\n\tconst codes = new Map();\n\n\tfor (const [groupName, group] of Object.entries(styles)) {\n\t\tfor (const [styleName, style] of Object.entries(group)) {\n\t\t\tstyles[styleName] = {\n\t\t\t\topen: `\\u001B[${style[0]}m`,\n\t\t\t\tclose: `\\u001B[${style[1]}m`,\n\t\t\t};\n\n\t\t\tgroup[styleName] = styles[styleName];\n\n\t\t\tcodes.set(style[0], style[1]);\n\t\t}\n\n\t\tObject.defineProperty(styles, groupName, {\n\t\t\tvalue: group,\n\t\t\tenumerable: false,\n\t\t});\n\t}\n\n\tObject.defineProperty(styles, 'codes', {\n\t\tvalue: codes,\n\t\tenumerable: false,\n\t});\n\n\tstyles.color.close = '\\u001B[39m';\n\tstyles.bgColor.close = '\\u001B[49m';\n\n\tstyles.color.ansi = wrapAnsi16();\n\tstyles.color.ansi256 = wrapAnsi256();\n\tstyles.color.ansi16m = wrapAnsi16m();\n\tstyles.bgColor.ansi = wrapAnsi16(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi256 = wrapAnsi256(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi16m = wrapAnsi16m(ANSI_BACKGROUND_OFFSET);\n\n\t// From https://github.com/Qix-/color-convert/blob/3f0e0d4e92e235796ccb17f6e85c72094a651f49/conversions.js\n\tObject.defineProperties(styles, {\n\t\trgbToAnsi256: {\n\t\t\tvalue: (red, green, blue) => {\n\t\t\t\t// We use the extended greyscale palette here, with the exception of\n\t\t\t\t// black and white. normal palette only has 4 greyscale shades.\n\t\t\t\tif (red === green && green === blue) {\n\t\t\t\t\tif (red < 8) {\n\t\t\t\t\t\treturn 16;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (red > 248) {\n\t\t\t\t\t\treturn 231;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn Math.round(((red - 8) / 247) * 24) + 232;\n\t\t\t\t}\n\n\t\t\t\treturn 16\n\t\t\t\t\t+ (36 * Math.round(red / 255 * 5))\n\t\t\t\t\t+ (6 * Math.round(green / 255 * 5))\n\t\t\t\t\t+ Math.round(blue / 255 * 5);\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToRgb: {\n\t\t\tvalue: hex => {\n\t\t\t\tconst matches = /[a-f\\d]{6}|[a-f\\d]{3}/i.exec(hex.toString(16));\n\t\t\t\tif (!matches) {\n\t\t\t\t\treturn [0, 0, 0];\n\t\t\t\t}\n\n\t\t\t\tlet [colorString] = matches;\n\n\t\t\t\tif (colorString.length === 3) {\n\t\t\t\t\tcolorString = [...colorString].map(character => character + character).join('');\n\t\t\t\t}\n\n\t\t\t\tconst integer = Number.parseInt(colorString, 16);\n\n\t\t\t\treturn [\n\t\t\t\t\t/* eslint-disable no-bitwise */\n\t\t\t\t\t(integer >> 16) & 0xFF,\n\t\t\t\t\t(integer >> 8) & 0xFF,\n\t\t\t\t\tinteger & 0xFF,\n\t\t\t\t\t/* eslint-enable no-bitwise */\n\t\t\t\t];\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi256: {\n\t\t\tvalue: hex => styles.rgbToAnsi256(...styles.hexToRgb(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t\tansi256ToAnsi: {\n\t\t\tvalue: code => {\n\t\t\t\tif (code < 8) {\n\t\t\t\t\treturn 30 + code;\n\t\t\t\t}\n\n\t\t\t\tif (code < 16) {\n\t\t\t\t\treturn 90 + (code - 8);\n\t\t\t\t}\n\n\t\t\t\tlet red;\n\t\t\t\tlet green;\n\t\t\t\tlet blue;\n\n\t\t\t\tif (code >= 232) {\n\t\t\t\t\tred = (((code - 232) * 10) + 8) / 255;\n\t\t\t\t\tgreen = red;\n\t\t\t\t\tblue = red;\n\t\t\t\t} else {\n\t\t\t\t\tcode -= 16;\n\n\t\t\t\t\tconst remainder = code % 36;\n\n\t\t\t\t\tred = Math.floor(code / 36) / 5;\n\t\t\t\t\tgreen = Math.floor(remainder / 6) / 5;\n\t\t\t\t\tblue = (remainder % 6) / 5;\n\t\t\t\t}\n\n\t\t\t\tconst value = Math.max(red, green, blue) * 2;\n\n\t\t\t\tif (value === 0) {\n\t\t\t\t\treturn 30;\n\t\t\t\t}\n\n\t\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t\tlet result = 30 + ((Math.round(blue) << 2) | (Math.round(green) << 1) | Math.round(red));\n\n\t\t\t\tif (value === 2) {\n\t\t\t\t\tresult += 60;\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\trgbToAnsi: {\n\t\t\tvalue: (red, green, blue) => styles.ansi256ToAnsi(styles.rgbToAnsi256(red, green, blue)),\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi: {\n\t\t\tvalue: hex => styles.ansi256ToAnsi(styles.hexToAnsi256(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t});\n\n\treturn styles;\n}\n\nconst ansiStyles = assembleStyles();\n\nexport default ansiStyles;\n","import stringWidth from 'string-width';\nimport stripAnsi from 'strip-ansi';\nimport ansiStyles from 'ansi-styles';\n\nconst ESCAPES = new Set([\n\t'\\u001B',\n\t'\\u009B',\n]);\n\nconst END_CODE = 39;\nconst ANSI_ESCAPE_BELL = '\\u0007';\nconst ANSI_CSI = '[';\nconst ANSI_OSC = ']';\nconst ANSI_SGR_TERMINATOR = 'm';\nconst ANSI_ESCAPE_LINK = `${ANSI_OSC}8;;`;\n\nconst wrapAnsiCode = code => `${ESCAPES.values().next().value}${ANSI_CSI}${code}${ANSI_SGR_TERMINATOR}`;\nconst wrapAnsiHyperlink = uri => `${ESCAPES.values().next().value}${ANSI_ESCAPE_LINK}${uri}${ANSI_ESCAPE_BELL}`;\n\n// Calculate the length of words split on ' ', ignoring\n// the extra characters added by ansi escape codes\nconst wordLengths = string => string.split(' ').map(character => stringWidth(character));\n\n// Wrap a long word across multiple rows\n// Ansi escape codes do not count towards length\nconst wrapWord = (rows, word, columns) => {\n\tconst characters = [...word];\n\n\tlet isInsideEscape = false;\n\tlet isInsideLinkEscape = false;\n\tlet visible = stringWidth(stripAnsi(rows[rows.length - 1]));\n\n\tfor (const [index, character] of characters.entries()) {\n\t\tconst characterLength = stringWidth(character);\n\n\t\tif (visible + characterLength <= columns) {\n\t\t\trows[rows.length - 1] += character;\n\t\t} else {\n\t\t\trows.push(character);\n\t\t\tvisible = 0;\n\t\t}\n\n\t\tif (ESCAPES.has(character)) {\n\t\t\tisInsideEscape = true;\n\t\t\tisInsideLinkEscape = characters.slice(index + 1).join('').startsWith(ANSI_ESCAPE_LINK);\n\t\t}\n\n\t\tif (isInsideEscape) {\n\t\t\tif (isInsideLinkEscape) {\n\t\t\t\tif (character === ANSI_ESCAPE_BELL) {\n\t\t\t\t\tisInsideEscape = false;\n\t\t\t\t\tisInsideLinkEscape = false;\n\t\t\t\t}\n\t\t\t} else if (character === ANSI_SGR_TERMINATOR) {\n\t\t\t\tisInsideEscape = false;\n\t\t\t}\n\n\t\t\tcontinue;\n\t\t}\n\n\t\tvisible += characterLength;\n\n\t\tif (visible === columns && index < characters.length - 1) {\n\t\t\trows.push('');\n\t\t\tvisible = 0;\n\t\t}\n\t}\n\n\t// It's possible that the last row we copy over is only\n\t// ansi escape characters, handle this edge-case\n\tif (!visible && rows[rows.length - 1].length > 0 && rows.length > 1) {\n\t\trows[rows.length - 2] += rows.pop();\n\t}\n};\n\n// Trims spaces from a string ignoring invisible sequences\nconst stringVisibleTrimSpacesRight = string => {\n\tconst words = string.split(' ');\n\tlet last = words.length;\n\n\twhile (last > 0) {\n\t\tif (stringWidth(words[last - 1]) > 0) {\n\t\t\tbreak;\n\t\t}\n\n\t\tlast--;\n\t}\n\n\tif (last === words.length) {\n\t\treturn string;\n\t}\n\n\treturn words.slice(0, last).join(' ') + words.slice(last).join('');\n};\n\n// The wrap-ansi module can be invoked in either 'hard' or 'soft' wrap mode\n//\n// 'hard' will never allow a string to take up more than columns characters\n//\n// 'soft' allows long words to expand past the column length\nconst exec = (string, columns, options = {}) => {\n\tif (options.trim !== false && string.trim() === '') {\n\t\treturn '';\n\t}\n\n\tlet returnValue = '';\n\tlet escapeCode;\n\tlet escapeUrl;\n\n\tconst lengths = wordLengths(string);\n\tlet rows = [''];\n\n\tfor (const [index, word] of string.split(' ').entries()) {\n\t\tif (options.trim !== false) {\n\t\t\trows[rows.length - 1] = rows[rows.length - 1].trimStart();\n\t\t}\n\n\t\tlet rowLength = stringWidth(rows[rows.length - 1]);\n\n\t\tif (index !== 0) {\n\t\t\tif (rowLength >= columns && (options.wordWrap === false || options.trim === false)) {\n\t\t\t\t// If we start with a new word but the current row length equals the length of the columns, add a new row\n\t\t\t\trows.push('');\n\t\t\t\trowLength = 0;\n\t\t\t}\n\n\t\t\tif (rowLength > 0 || options.trim === false) {\n\t\t\t\trows[rows.length - 1] += ' ';\n\t\t\t\trowLength++;\n\t\t\t}\n\t\t}\n\n\t\t// In 'hard' wrap mode, the length of a line is never allowed to extend past 'columns'\n\t\tif (options.hard && lengths[index] > columns) {\n\t\t\tconst remainingColumns = (columns - rowLength);\n\t\t\tconst breaksStartingThisLine = 1 + Math.floor((lengths[index] - remainingColumns - 1) / columns);\n\t\t\tconst breaksStartingNextLine = Math.floor((lengths[index] - 1) / columns);\n\t\t\tif (breaksStartingNextLine < breaksStartingThisLine) {\n\t\t\t\trows.push('');\n\t\t\t}\n\n\t\t\twrapWord(rows, word, columns);\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (rowLength + lengths[index] > columns && rowLength > 0 && lengths[index] > 0) {\n\t\t\tif (options.wordWrap === false && rowLength < columns) {\n\t\t\t\twrapWord(rows, word, columns);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\trows.push('');\n\t\t}\n\n\t\tif (rowLength + lengths[index] > columns && options.wordWrap === false) {\n\t\t\twrapWord(rows, word, columns);\n\t\t\tcontinue;\n\t\t}\n\n\t\trows[rows.length - 1] += word;\n\t}\n\n\tif (options.trim !== false) {\n\t\trows = rows.map(row => stringVisibleTrimSpacesRight(row));\n\t}\n\n\tconst pre = [...rows.join('\\n')];\n\n\tfor (const [index, character] of pre.entries()) {\n\t\treturnValue += character;\n\n\t\tif (ESCAPES.has(character)) {\n\t\t\tconst {groups} = new RegExp(`(?:\\\\${ANSI_CSI}(?<code>\\\\d+)m|\\\\${ANSI_ESCAPE_LINK}(?<uri>.*)${ANSI_ESCAPE_BELL})`).exec(pre.slice(index).join('')) || {groups: {}};\n\t\t\tif (groups.code !== undefined) {\n\t\t\t\tconst code = Number.parseFloat(groups.code);\n\t\t\t\tescapeCode = code === END_CODE ? undefined : code;\n\t\t\t} else if (groups.uri !== undefined) {\n\t\t\t\tescapeUrl = groups.uri.length === 0 ? undefined : groups.uri;\n\t\t\t}\n\t\t}\n\n\t\tconst code = ansiStyles.codes.get(Number(escapeCode));\n\n\t\tif (pre[index + 1] === '\\n') {\n\t\t\tif (escapeUrl) {\n\t\t\t\treturnValue += wrapAnsiHyperlink('');\n\t\t\t}\n\n\t\t\tif (escapeCode && code) {\n\t\t\t\treturnValue += wrapAnsiCode(code);\n\t\t\t}\n\t\t} else if (character === '\\n') {\n\t\t\tif (escapeCode && code) {\n\t\t\t\treturnValue += wrapAnsiCode(escapeCode);\n\t\t\t}\n\n\t\t\tif (escapeUrl) {\n\t\t\t\treturnValue += wrapAnsiHyperlink(escapeUrl);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn returnValue;\n};\n\n// For each newline, invoke the method separately\nexport default function wrapAnsi(string, columns, options) {\n\treturn String(string)\n\t\t.normalize()\n\t\t.replace(/\\r\\n/g, '\\n')\n\t\t.split('\\n')\n\t\t.map(line => exec(line, columns, options))\n\t\t.join('\\n');\n}\n","const actions = ['up', 'down', 'left', 'right', 'space', 'enter', 'cancel'] as const;\nexport type Action = (typeof actions)[number];\n\n/** Global settings for Clack programs, stored in memory */\ninterface InternalClackSettings {\n\tactions: Set<Action>;\n\taliases: Map<string, Action>;\n}\n\nexport const settings: InternalClackSettings = {\n\tactions: new Set(actions),\n\taliases: new Map<string, Action>([\n\t\t// vim support\n\t\t['k', 'up'],\n\t\t['j', 'down'],\n\t\t['h', 'left'],\n\t\t['l', 'right'],\n\t\t['\\x03', 'cancel'],\n\t\t// opinionated defaults!\n\t\t['escape', 'cancel'],\n\t]),\n};\n\nexport interface ClackSettings {\n\t/**\n\t * Set custom global aliases for the default actions.\n\t * This will not overwrite existing aliases, it will only add new ones!\n\t *\n\t * @param aliases - An object that maps aliases to actions\n\t * @default { k: 'up', j: 'down', h: 'left', l: 'right', '\\x03': 'cancel', 'escape': 'cancel' }\n\t */\n\taliases: Record<string, Action>;\n}\n\nexport function updateSettings(updates: ClackSettings) {\n\tfor (const _key in updates) {\n\t\tconst key = _key as keyof ClackSettings;\n\t\tif (!Object.hasOwn(updates, key)) continue;\n\t\tconst value = updates[key];\n\n\t\tswitch (key) {\n\t\t\tcase 'aliases': {\n\t\t\t\tfor (const alias in value) {\n\t\t\t\t\tif (!Object.hasOwn(value, alias)) continue;\n\t\t\t\t\tif (!settings.aliases.has(alias)) {\n\t\t\t\t\t\tsettings.aliases.set(alias, value[alias]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * Check if a key is an alias for a default action\n * @param key - The raw key which might match to an action\n * @param action - The action to match\n * @returns boolean\n */\nexport function isActionKey(key: string | Array<string | undefined>, action: Action) {\n\tif (typeof key === 'string') {\n\t\treturn settings.aliases.get(key) === action;\n\t}\n\n\tfor (const value of key) {\n\t\tif (value === undefined) continue;\n\t\tif (isActionKey(value, action)) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n","export function diffLines(a: string, b: string) {\n\tif (a === b) return;\n\n\tconst aLines = a.split('\\n');\n\tconst bLines = b.split('\\n');\n\tconst diff: number[] = [];\n\n\tfor (let i = 0; i < Math.max(aLines.length, bLines.length); i++) {\n\t\tif (aLines[i] !== bLines[i]) diff.push(i);\n\t}\n\n\treturn diff;\n}\n","import { stdin, stdout } from 'node:process';\nimport type { Key } from 'node:readline';\nimport * as readline from 'node:readline';\nimport type { Readable } from 'node:stream';\nimport { cursor } from 'sisteransi';\nimport { isActionKey } from './settings';\n\nexport * from './string';\nexport * from './settings';\n\nconst isWindows = globalThis.process.platform.startsWith('win');\n\nexport const CANCEL_SYMBOL = Symbol('clack:cancel');\n\nexport function isCancel(value: unknown): value is symbol {\n\treturn value === CANCEL_SYMBOL;\n}\n\nexport function setRawMode(input: Readable, value: boolean) {\n\tconst i = input as typeof stdin;\n\n\tif (i.isTTY) i.setRawMode(value);\n}\n\nexport function block({\n\tinput = stdin,\n\toutput = stdout,\n\toverwrite = true,\n\thideCursor = true,\n} = {}) {\n\tconst rl = readline.createInterface({\n\t\tinput,\n\t\toutput,\n\t\tprompt: '',\n\t\ttabSize: 1,\n\t});\n\treadline.emitKeypressEvents(input, rl);\n\tif (input.isTTY) input.setRawMode(true);\n\n\tconst clear = (data: Buffer, { name, sequence }: Key) => {\n\t\tconst str = String(data);\n\t\tif (isActionKey([str, name, sequence], 'cancel')) {\n\t\t\tif (hideCursor) output.write(cursor.show);\n\t\t\tprocess.exit(0);\n\t\t\treturn;\n\t\t}\n\t\tif (!overwrite) return;\n\t\tconst dx = name === 'return' ? 0 : -1;\n\t\tconst dy = name === 'return' ? -1 : 0;\n\n\t\treadline.moveCursor(output, dx, dy, () => {\n\t\t\treadline.clearLine(output, 1, () => {\n\t\t\t\tinput.once('keypress', clear);\n\t\t\t});\n\t\t});\n\t};\n\tif (hideCursor) output.write(cursor.hide);\n\tinput.once('keypress', clear);\n\n\treturn () => {\n\t\tinput.off('keypress', clear);\n\t\tif (hideCursor) output.write(cursor.show);\n\n\t\t// Prevent Windows specific issues: https://github.com/bombshell-dev/clack/issues/176\n\t\tif (input.isTTY && !isWindows) input.setRawMode(false);\n\n\t\t// @ts-expect-error fix for https://github.com/nodejs/node/issues/31762#issuecomment-1441223907\n\t\trl.terminal = false;\n\t\trl.close();\n\t};\n}\n","import { stdin, stdout } from 'node:process';\nimport readline, { type Key, type ReadLine } from 'node:readline';\nimport type { Readable } from 'node:stream';\nimport { Writable } from 'node:stream';\nimport { cursor, erase } from 'sisteransi';\nimport wrap from 'wrap-ansi';\n\nimport { CANCEL_SYMBOL, diffLines, isActionKey, setRawMode, settings } from '../utils';\n\nimport type { ClackEvents, ClackState } from '../types';\nimport type { Action } from '../utils';\n\nexport interface PromptOptions<Self extends Prompt> {\n\trender(this: Omit<Self, 'prompt'>): string | undefined;\n\tplaceholder?: string;\n\tinitialValue?: any;\n\tvalidate?: ((value: any) => string | Error | undefined) | undefined;\n\tinput?: Readable;\n\toutput?: Writable;\n\tdebug?: boolean;\n\tsignal?: AbortSignal;\n}\n\nexport default class Prompt {\n\tprotected input: Readable;\n\tprotected output: Writable;\n\tprivate _abortSignal?: AbortSignal;\n\n\tprivate rl: ReadLine | undefined;\n\tprivate opts: Omit<PromptOptions<Prompt>, 'render' | 'input' | 'output'>;\n\tprivate _render: (context: Omit<Prompt, 'prompt'>) => string | undefined;\n\tprivate _track = false;\n\tprivate _prevFrame = '';\n\tprivate _subscribers = new Map<string, { cb: (...args: any) => any; once?: boolean }[]>();\n\tprotected _cursor = 0;\n\n\tpublic state: ClackState = 'initial';\n\tpublic error = '';\n\tpublic value: any;\n\n\tconstructor(options: PromptOptions<Prompt>, trackValue = true) {\n\t\tconst { input = stdin, output = stdout, render, signal, ...opts } = options;\n\n\t\tthis.opts = opts;\n\t\tthis.onKeypress = this.onKeypress.bind(this);\n\t\tthis.close = this.close.bind(this);\n\t\tthis.render = this.render.bind(this);\n\t\tthis._render = render.bind(this);\n\t\tthis._track = trackValue;\n\t\tthis._abortSignal = signal;\n\n\t\tthis.input = input;\n\t\tthis.output = output;\n\t}\n\n\t/**\n\t * Unsubscribe all listeners\n\t */\n\tprotected unsubscribe() {\n\t\tthis._subscribers.clear();\n\t}\n\n\t/**\n\t * Set a subscriber with opts\n\t * @param event - The event name\n\t */\n\tprivate setSubscriber<T extends keyof ClackEvents>(\n\t\tevent: T,\n\t\topts: { cb: ClackEvents[T]; once?: boolean }\n\t) {\n\t\tconst params = this._subscribers.get(event) ?? [];\n\t\tparams.push(opts);\n\t\tthis._subscribers.set(event, params);\n\t}\n\n\t/**\n\t * Subscribe to an event\n\t * @param event - The event name\n\t * @param cb - The callback\n\t */\n\tpublic on<T extends keyof ClackEvents>(event: T, cb: ClackEvents[T]) {\n\t\tthis.setSubscriber(event, { cb });\n\t}\n\n\t/**\n\t * Subscribe to an event once\n\t * @param event - The event name\n\t * @param cb - The callback\n\t */\n\tpublic once<T extends keyof ClackEvents>(event: T, cb: ClackEvents[T]) {\n\t\tthis.setSubscriber(event, { cb, once: true });\n\t}\n\n\t/**\n\t * Emit an event with data\n\t * @param event - The event name\n\t * @param data - The data to pass to the callback\n\t */\n\tpublic emit<T extends keyof ClackEvents>(event: T, ...data: Parameters<ClackEvents[T]>) {\n\t\tconst cbs = this._subscribers.get(event) ?? [];\n\t\tconst cleanup: (() => void)[] = [];\n\n\t\tfor (const subscriber of cbs) {\n\t\t\tsubscriber.cb(...data);\n\n\t\t\tif (subscriber.once) {\n\t\t\t\tcleanup.push(() => cbs.splice(cbs.indexOf(subscriber), 1));\n\t\t\t}\n\t\t}\n\n\t\tfor (const cb of cleanup) {\n\t\t\tcb();\n\t\t}\n\t}\n\n\tpublic prompt() {\n\t\treturn new Promise<string | symbol>((resolve, reject) => {\n\t\t\tif (this._abortSignal) {\n\t\t\t\tif (this._abortSignal.aborted) {\n\t\t\t\t\tthis.state = 'cancel';\n\n\t\t\t\t\tthis.close();\n\t\t\t\t\treturn resolve(CANCEL_SYMBOL);\n\t\t\t\t}\n\n\t\t\t\tthis._abortSignal.addEventListener(\n\t\t\t\t\t'abort',\n\t\t\t\t\t() => {\n\t\t\t\t\t\tthis.state = 'cancel';\n\t\t\t\t\t\tthis.close();\n\t\t\t\t\t},\n\t\t\t\t\t{ once: true }\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst sink = new Writable();\n\t\t\tsink._write = (chunk, encoding, done) => {\n\t\t\t\tif (this._track) {\n\t\t\t\t\tthis.value = this.rl?.line.replace(/\\t/g, '');\n\t\t\t\t\tthis._cursor = this.rl?.cursor ?? 0;\n\t\t\t\t\tthis.emit('value', this.value);\n\t\t\t\t}\n\t\t\t\tdone();\n\t\t\t};\n\t\t\tthis.input.pipe(sink);\n\n\t\t\tthis.rl = readline.createInterface({\n\t\t\t\tinput: this.input,\n\t\t\t\toutput: sink,\n\t\t\t\ttabSize: 2,\n\t\t\t\tprompt: '',\n\t\t\t\tescapeCodeTimeout: 50,\n\t\t\t\tterminal: true,\n\t\t\t});\n\t\t\treadline.emitKeypressEvents(this.input, this.rl);\n\t\t\tthis.rl.prompt();\n\t\t\tif (this.opts.initialValue !== undefined && this._track) {\n\t\t\t\tthis.rl.write(this.opts.initialValue);\n\t\t\t}\n\n\t\t\tthis.input.on('keypress', this.onKeypress);\n\t\t\tsetRawMode(this.input, true);\n\t\t\tthis.output.on('resize', this.render);\n\n\t\t\tthis.render();\n\n\t\t\tthis.once('submit', () => {\n\t\t\t\tthis.output.write(cursor.show);\n\t\t\t\tthis.output.off('resize', this.render);\n\t\t\t\tsetRawMode(this.input, false);\n\t\t\t\tresolve(this.value);\n\t\t\t});\n\t\t\tthis.once('cancel', () => {\n\t\t\t\tthis.output.write(cursor.show);\n\t\t\t\tthis.output.off('resize', this.render);\n\t\t\t\tsetRawMode(this.input, false);\n\t\t\t\tresolve(CANCEL_SYMBOL);\n\t\t\t});\n\t\t});\n\t}\n\n\tprivate onKeypress(char: string, key?: Key) {\n\t\tif (this.state === 'error') {\n\t\t\tthis.state = 'active';\n\t\t}\n\t\tif (key?.name) {\n\t\t\tif (!this._track && settings.aliases.has(key.name)) {\n\t\t\t\tthis.emit('cursor', settings.aliases.get(key.name));\n\t\t\t}\n\t\t\tif (settings.actions.has(key.name as Action)) {\n\t\t\t\tthis.emit('cursor', key.name as Action);\n\t\t\t}\n\t\t}\n\t\tif (char && (char.toLowerCase() === 'y' || char.toLowerCase() === 'n')) {\n\t\t\tthis.emit('confirm', char.toLowerCase() === 'y');\n\t\t}\n\t\tif (char === '\\t' && this.opts.placeholder) {\n\t\t\tif (!this.value) {\n\t\t\t\tthis.rl?.write(this.opts.placeholder);\n\t\t\t\tthis.emit('value', this.opts.placeholder);\n\t\t\t}\n\t\t}\n\t\tif (char) {\n\t\t\tthis.emit('key', char.toLowerCase());\n\t\t}\n\n\t\tif (key?.name === 'return') {\n\t\t\tif (this.opts.validate) {\n\t\t\t\tconst problem = this.opts.validate(this.value);\n\t\t\t\tif (problem) {\n\t\t\t\t\tthis.error = problem instanceof Error ? problem.message : problem;\n\t\t\t\t\tthis.state = 'error';\n\t\t\t\t\tthis.rl?.write(this.value);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.state !== 'error') {\n\t\t\t\tthis.state = 'submit';\n\t\t\t}\n\t\t}\n\n\t\tif (isActionKey([char, key?.name, key?.sequence], 'cancel')) {\n\t\t\tthis.state = 'cancel';\n\t\t}\n\t\tif (this.state === 'submit' || this.state === 'cancel') {\n\t\t\tthis.emit('finalize');\n\t\t}\n\t\tthis.render();\n\t\tif (this.state === 'submit' || this.state === 'cancel') {\n\t\t\tthis.close();\n\t\t}\n\t}\n\n\tprotected close() {\n\t\tthis.input.unpipe();\n\t\tthis.input.removeListener('keypress', this.onKeypress);\n\t\tthis.output.write('\\n');\n\t\tsetRawMode(this.input, false);\n\t\tthis.rl?.close();\n\t\tthis.rl = undefined;\n\t\tthis.emit(`${this.state}`, this.value);\n\t\tthis.unsubscribe();\n\t}\n\n\tprivate restoreCursor() {\n\t\tconst lines =\n\t\t\twrap(this._prevFrame, process.stdout.columns, { hard: true }).split('\\n').length - 1;\n\t\tthis.output.write(cursor.move(-999, lines * -1));\n\t}\n\n\tprivate render() {\n\t\tconst frame = wrap(this._render(this) ?? '', process.stdout.columns, { hard: true });\n\t\tif (frame === this._prevFrame) return;\n\n\t\tif (this.state === 'initial') {\n\t\t\tthis.output.write(cursor.hide);\n\t\t} else {\n\t\t\tconst diff = diffLines(this._prevFrame, frame);\n\t\t\tthis.restoreCursor();\n\t\t\t// If a single line has changed, only update that line\n\t\t\tif (diff && diff?.length === 1) {\n\t\t\t\tconst diffLine = diff[0];\n\t\t\t\tthis.output.write(cursor.move(0, diffLine));\n\t\t\t\tthis.output.write(erase.lines(1));\n\t\t\t\tconst lines = frame.split('\\n');\n\t\t\t\tthis.output.write(lines[diffLine]);\n\t\t\t\tthis._prevFrame = frame;\n\t\t\t\tthis.output.write(cursor.move(0, lines.length - diffLine - 1));\n\t\t\t\treturn;\n\t\t\t\t// If many lines have changed, rerender everything past the first line\n\t\t\t}\n\t\t\tif (diff && diff?.length > 1) {\n\t\t\t\tconst diffLine = diff[0];\n\t\t\t\tthis.output.write(cursor.move(0, diffLine));\n\t\t\t\tthis.output.write(erase.down());\n\t\t\t\tconst lines = frame.split('\\n');\n\t\t\t\tconst newLines = lines.slice(diffLine);\n\t\t\t\tthis.output.write(newLines.join('\\n'));\n\t\t\t\tthis._prevFrame = frame;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.output.write(erase.down());\n\t\t}\n\n\t\tthis.output.write(frame);\n\t\tif (this.state === 'initial') {\n\t\t\tthis.state = 'active';\n\t\t}\n\t\tthis._prevFrame = frame;\n\t}\n}\n","import { cursor } from 'sisteransi';\nimport Prompt, { type PromptOptions } from './prompt';\n\ninterface ConfirmOptions extends PromptOptions<ConfirmPrompt> {\n\tactive: string;\n\tinactive: string;\n\tinitialValue?: boolean;\n}\nexport default class ConfirmPrompt extends Prompt {\n\tget cursor() {\n\t\treturn this.value ? 0 : 1;\n\t}\n\n\tprivate get _value() {\n\t\treturn this.cursor === 0;\n\t}\n\n\tconstructor(opts: ConfirmOptions) {\n\t\tsuper(opts, false);\n\t\tthis.value = !!opts.initialValue;\n\n\t\tthis.on('value', () => {\n\t\t\tthis.value = this._value;\n\t\t});\n\n\t\tthis.on('confirm', (confirm) => {\n\t\t\tthis.output.write(cursor.move(0, -1));\n\t\t\tthis.value = confirm;\n\t\t\tthis.state = 'submit';\n\t\t\tthis.close();\n\t\t});\n\n\t\tthis.on('cursor', () => {\n\t\t\tthis.value = !this.value;\n\t\t});\n\t}\n}\n","import Prompt, { type PromptOptions } from './prompt';\n\ninterface GroupMultiSelectOptions<T extends { value: any }>\n\textends PromptOptions<GroupMultiSelectPrompt<T>> {\n\toptions: Record<string, T[]>;\n\tinitialValues?: T['value'][];\n\trequired?: boolean;\n\tcursorAt?: T['value'];\n\tselectableGroups?: boolean;\n}\nexport default class GroupMultiSelectPrompt<T extends { value: any }> extends Prompt {\n\toptions: (T & { group: string | boolean })[];\n\tcursor = 0;\n\t#selectableGroups: boolean;\n\n\tgetGroupItems(group: string): T[] {\n\t\treturn this.options.filter((o) => o.group === group);\n\t}\n\n\tisGroupSelected(group: string) {\n\t\tconst items = this.getGroupItems(group);\n\t\treturn items.every((i) => this.value.includes(i.value));\n\t}\n\n\tprivate toggleValue() {\n\t\tconst item = this.options[this.cursor];\n\t\tif (item.group === true) {\n\t\t\tconst group = item.value;\n\t\t\tconst groupedItems = this.getGroupItems(group);\n\t\t\tif (this.isGroupSelected(group)) {\n\t\t\t\tthis.value = this.value.filter(\n\t\t\t\t\t(v: string) => groupedItems.findIndex((i) => i.value === v) === -1\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tthis.value = [...this.value, ...groupedItems.map((i) => i.value)];\n\t\t\t}\n\t\t\tthis.value = Array.from(new Set(this.value));\n\t\t} else {\n\t\t\tconst selected = this.value.includes(item.value);\n\t\t\tthis.value = selected\n\t\t\t\t? this.value.filter((v: T['value']) => v !== item.value)\n\t\t\t\t: [...this.value, item.value];\n\t\t}\n\t}\n\n\tconstructor(opts: GroupMultiSelectOptions<T>) {\n\t\tsuper(opts, false);\n\t\tconst { options } = opts;\n\t\tthis.#selectableGroups = opts.selectableGroups !== false;\n\t\tthis.options = Object.entries(options).flatMap(([key, option]) => [\n\t\t\t{ value: key, group: true, label: key },\n\t\t\t...option.map((opt) => ({ ...opt, group: key })),\n\t\t]) as any;\n\t\tthis.value = [...(opts.initialValues ?? [])];\n\t\tthis.cursor = Math.max(\n\t\t\tthis.options.findIndex(({ value }) => value === opts.cursorAt),\n\t\t\tthis.#selectableGroups ? 0 : 1\n\t\t);\n\n\t\tthis.on('cursor', (key) => {\n\t\t\tswitch (key) {\n\t\t\t\tcase 'left':\n\t\t\t\tcase 'up': {\n\t\t\t\t\tthis.cursor = this.cursor === 0 ? this.options.length - 1 : this.cursor - 1;\n\t\t\t\t\tconst currentIsGroup = this.options[this.cursor]?.group === true;\n\t\t\t\t\tif (!this.#selectableGroups && currentIsGroup) {\n\t\t\t\t\t\tthis.cursor = this.cursor === 0 ? this.options.length - 1 : this.cursor - 1;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'down':\n\t\t\t\tcase 'right': {\n\t\t\t\t\tthis.cursor = this.cursor === this.options.length - 1 ? 0 : this.cursor + 1;\n\t\t\t\t\tconst currentIsGroup = this.options[this.cursor]?.group === true;\n\t\t\t\t\tif (!this.#selectableGroups && currentIsGroup) {\n\t\t\t\t\t\tthis.cursor = this.cursor === this.options.length - 1 ? 0 : this.cursor + 1;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'space':\n\t\t\t\t\tthis.toggleValue();\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t});\n\t}\n}\n","import Prompt, { type PromptOptions } from './prompt';\n\ninterface MultiSelectOptions<T extends { value: any }> extends PromptOptions<MultiSelectPrompt<T>> {\n\toptions: T[];\n\tinitialValues?: T['value'][];\n\trequired?: boolean;\n\tcursorAt?: T['value'];\n}\nexport default class MultiSelectPrompt<T extends { value: any }> extends Prompt {\n\toptions: T[];\n\tcursor = 0;\n\n\tprivate get _value() {\n\t\treturn this.options[this.cursor].value;\n\t}\n\n\tprivate toggleAll() {\n\t\tconst allSelected = this.value.length === this.options.length;\n\t\tthis.value = allSelected ? [] : this.options.map((v) => v.value);\n\t}\n\n\tprivate toggleValue() {\n\t\tconst selected = this.value.includes(this._value);\n\t\tthis.value = selected\n\t\t\t? this.value.filter((value: T['value']) => value !== this._value)\n\t\t\t: [...this.value, this._value];\n\t}\n\n\tconstructor(opts: MultiSelectOptions<T>) {\n\t\tsuper(opts, false);\n\n\t\tthis.options = opts.options;\n\t\tthis.value = [...(opts.initialValues ?? [])];\n\t\tthis.cursor = Math.max(\n\t\t\tthis.options.findIndex(({ value }) => value === opts.cursorAt),\n\t\t\t0\n\t\t);\n\t\tthis.on('key', (char) => {\n\t\t\tif (char === 'a') {\n\t\t\t\tthis.toggleAll();\n\t\t\t}\n\t\t});\n\n\t\tthis.on('cursor', (key) => {\n\t\t\tswitch (key) {\n\t\t\t\tcase 'left':\n\t\t\t\tcase 'up':\n\t\t\t\t\tthis.cursor = this.cursor === 0 ? this.options.length - 1 : this.cursor - 1;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'down':\n\t\t\t\tcase 'right':\n\t\t\t\t\tthis.cursor = this.cursor === this.options.length - 1 ? 0 : this.cursor + 1;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'space':\n\t\t\t\t\tthis.toggleValue();\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t});\n\t}\n}\n","import color from 'picocolors';\nimport Prompt, { type PromptOptions } from './prompt';\n\ninterface PasswordOptions extends PromptOptions<PasswordPrompt> {\n\tmask?: string;\n}\nexport default class PasswordPrompt extends Prompt {\n\tvalueWithCursor = '';\n\tprivate _mask = '•';\n\tget cursor() {\n\t\treturn this._cursor;\n\t}\n\tget masked() {\n\t\treturn this.value.replaceAll(/./g, this._mask);\n\t}\n\tconstructor({ mask, ...opts }: PasswordOptions) {\n\t\tsuper(opts);\n\t\tthis._mask = mask ?? '•';\n\n\t\tthis.on('finalize', () => {\n\t\t\tthis.valueWithCursor = this.masked;\n\t\t});\n\t\tthis.on('value', () => {\n\t\t\tif (this.cursor >= this.value.length) {\n\t\t\t\tthis.valueWithCursor = `${this.masked}${color.inverse(color.hidden('_'))}`;\n\t\t\t} else {\n\t\t\t\tconst s1 = this.masked.slice(0, this.cursor);\n\t\t\t\tconst s2 = this.masked.slice(this.cursor);\n\t\t\t\tthis.valueWithCursor = `${s1}${color.inverse(s2[0])}${s2.slice(1)}`;\n\t\t\t}\n\t\t});\n\t}\n}\n","import Prompt, { type PromptOptions } from './prompt';\n\ninterface SelectOptions<T extends { value: any }> extends PromptOptions<SelectPrompt<T>> {\n\toptions: T[];\n\tinitialValue?: T['value'];\n}\nexport default class SelectPrompt<T extends { value: any }> extends Prompt {\n\toptions: T[];\n\tcursor = 0;\n\n\tprivate get _value() {\n\t\treturn this.options[this.cursor];\n\t}\n\n\tprivate changeValue() {\n\t\tthis.value = this._value.value;\n\t}\n\n\tconstructor(opts: SelectOptions<T>) {\n\t\tsuper(opts, false);\n\n\t\tthis.options = opts.options;\n\t\tthis.cursor = this.options.findIndex(({ value }) => value === opts.initialValue);\n\t\tif (this.cursor === -1) this.cursor = 0;\n\t\tthis.changeValue();\n\n\t\tthis.on('cursor', (key) => {\n\t\t\tswitch (key) {\n\t\t\t\tcase 'left':\n\t\t\t\tcase 'up':\n\t\t\t\t\tthis.cursor = this.cursor === 0 ? this.options.length - 1 : this.cursor - 1;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'down':\n\t\t\t\tcase 'right':\n\t\t\t\t\tthis.cursor = this.cursor === this.options.length - 1 ? 0 : this.cursor + 1;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tthis.changeValue();\n\t\t});\n\t}\n}\n","import Prompt, { type PromptOptions } from './prompt';\n\ninterface SelectKeyOptions<T extends { value: any }> extends PromptOptions<SelectKeyPrompt<T>> {\n\toptions: T[];\n}\nexport default class SelectKeyPrompt<T extends { value: any }> extends Prompt {\n\toptions: T[];\n\tcursor = 0;\n\n\tconstructor(opts: SelectKeyOptions<T>) {\n\t\tsuper(opts, false);\n\n\t\tthis.options = opts.options;\n\t\tconst keys = this.options.map(({ value: [initial] }) => initial?.toLowerCase());\n\t\tthis.cursor = Math.max(keys.indexOf(opts.initialValue), 0);\n\n\t\tthis.on('key', (key) => {\n\t\t\tif (!keys.includes(key)) return;\n\t\t\tconst value = this.options.find(({ value: [initial] }) => initial?.toLowerCase() === key);\n\t\t\tif (value) {\n\t\t\t\tthis.value = value.value;\n\t\t\t\tthis.state = 'submit';\n\t\t\t\tthis.emit('submit');\n\t\t\t}\n\t\t});\n\t}\n}\n","import color from 'picocolors';\nimport Prompt, { type PromptOptions } from './prompt';\n\nexport interface TextOptions extends PromptOptions<TextPrompt> {\n\tplaceholder?: string;\n\tdefaultValue?: string;\n}\n\nexport default class TextPrompt extends Prompt {\n\tget valueWithCursor() {\n\t\tif (this.state === 'submit') {\n\t\t\treturn this.value;\n\t\t}\n\t\tif (this.cursor >= this.value.length) {\n\t\t\treturn `${this.value}█`;\n\t\t}\n\t\tconst s1 = this.value.slice(0, this.cursor);\n\t\tconst [s2, ...s3] = this.value.slice(this.cursor);\n\t\treturn `${s1}${color.inverse(s2)}${s3.join('')}`;\n\t}\n\tget cursor() {\n\t\treturn this._cursor;\n\t}\n\tconstructor(opts: TextOptions) {\n\t\tsuper(opts);\n\n\t\tthis.on('finalize', () => {\n\t\t\tif (!this.value) {\n\t\t\t\tthis.value = opts.defaultValue;\n\t\t\t}\n\t\t});\n\t}\n}\n","import process from 'node:process';\n\nexport default function isUnicodeSupported() {\n\tif (process.platform !== 'win32') {\n\t\treturn process.env.TERM !== 'linux'; // Linux console (kernel)\n\t}\n\n\treturn Boolean(process.env.CI)\n\t\t|| Boolean(process.env.WT_SESSION) // Windows Terminal\n\t\t|| Boolean(process.env.TERMINUS_SUBLIME) // Terminus (<0.2.27)\n\t\t|| process.env.ConEmuTask === '{cmd::Cmder}' // ConEmu and cmder\n\t\t|| process.env.TERM_PROGRAM === 'Terminus-Sublime'\n\t\t|| process.env.TERM_PROGRAM === 'vscode'\n\t\t|| process.env.TERM === 'xterm-256color'\n\t\t|| process.env.TERM === 'alacritty'\n\t\t|| process.env.TERMINAL_EMULATOR === 'JetBrains-JediTerm';\n}\n","import { stripVTControlCharacters as strip } from 'node:util';\nimport {\n\tConfirmPrompt,\n\tGroupMultiSelectPrompt,\n\tMultiSelectPrompt,\n\tPasswordPrompt,\n\tSelectKeyPrompt,\n\tSelectPrompt,\n\ttype State,\n\tTextPrompt,\n\tblock,\n\tisCancel,\n} from '@clack/core';\nimport isUnicodeSupported from 'is-unicode-supported';\nimport color from 'picocolors';\nimport { cursor, erase } from 'sisteransi';\n\nexport { isCancel } from '@clack/core';\nexport { updateSettings, type ClackSettings } from '@clack/core';\n\nconst unicode = isUnicodeSupported();\nconst s = (c: string, fallback: string) => (unicode ? c : fallback);\nconst S_STEP_ACTIVE = s('◆', '*');\nconst S_STEP_CANCEL = s('■', 'x');\nconst S_STEP_ERROR = s('▲', 'x');\nconst S_STEP_SUBMIT = s('◇', 'o');\n\nconst S_BAR_START = s('┌', 'T');\nconst S_BAR = s('│', '|');\nconst S_BAR_END = s('└', '—');\n\nconst S_RADIO_ACTIVE = s('●', '>');\nconst S_RADIO_INACTIVE = s('○', ' ');\nconst S_CHECKBOX_ACTIVE = s('◻', '[•]');\nconst S_CHECKBOX_SELECTED = s('◼', '[+]');\nconst S_CHECKBOX_INACTIVE = s('◻', '[ ]');\nconst S_PASSWORD_MASK = s('▪', '•');\n\nconst S_BAR_H = s('─', '-');\nconst S_CORNER_TOP_RIGHT = s('╮', '+');\nconst S_CONNECT_LEFT = s('├', '+');\nconst S_CORNER_BOTTOM_RIGHT = s('╯', '+');\n\nconst S_INFO = s('●', '•');\nconst S_SUCCESS = s('◆', '*');\nconst S_WARN = s('▲', '!');\nconst S_ERROR = s('■', 'x');\n\nconst symbol = (state: State) => {\n\tswitch (state) {\n\t\tcase 'initial':\n\t\tcase 'active':\n\t\t\treturn color.cyan(S_STEP_ACTIVE);\n\t\tcase 'cancel':\n\t\t\treturn color.red(S_STEP_CANCEL);\n\t\tcase 'error':\n\t\t\treturn color.yellow(S_STEP_ERROR);\n\t\tcase 'submit':\n\t\t\treturn color.green(S_STEP_SUBMIT);\n\t}\n};\n\ninterface LimitOptionsParams<TOption> {\n\toptions: TOption[];\n\tmaxItems: number | undefined;\n\tcursor: number;\n\tstyle: (option: TOption, active: boolean) => string;\n}\n\nconst limitOptions = <TOption>(params: LimitOptionsParams<TOption>): string[] => {\n\tconst { cursor, options, style } = params;\n\n\tconst paramMaxItems = params.maxItems ?? Number.POSITIVE_INFINITY;\n\tconst outputMaxItems = Math.max(process.stdout.rows - 4, 0);\n\t// We clamp to minimum 5 because anything less doesn't make sense UX wise\n\tconst maxItems = Math.min(outputMaxItems, Math.max(paramMaxItems, 5));\n\tlet slidingWindowLocation = 0;\n\n\tif (cursor >= slidingWindowLocation + maxItems - 3) {\n\t\tslidingWindowLocation = Math.max(Math.min(cursor - maxItems + 3, options.length - maxItems), 0);\n\t} else if (cursor < slidingWindowLocation + 2) {\n\t\tslidingWindowLocation = Math.max(cursor - 2, 0);\n\t}\n\n\tconst shouldRenderTopEllipsis = maxItems < options.length && slidingWindowLocation > 0;\n\tconst shouldRenderBottomEllipsis =\n\t\tmaxItems < options.length && slidingWindowLocation + maxItems < options.length;\n\n\treturn options\n\t\t.slice(slidingWindowLocation, slidingWindowLocation + maxItems)\n\t\t.map((option, i, arr) => {\n\t\t\tconst isTopLimit = i === 0 && shouldRenderTopEllipsis;\n\t\t\tconst isBottomLimit = i === arr.length - 1 && shouldRenderBottomEllipsis;\n\t\t\treturn isTopLimit || isBottomLimit\n\t\t\t\t? color.dim('...')\n\t\t\t\t: style(option, i + slidingWindowLocation === cursor);\n\t\t});\n};\n\nexport interface TextOptions {\n\tmessage: string;\n\tplaceholder?: string;\n\tdefaultValue?: string;\n\tinitialValue?: string;\n\tvalidate?: (value: string) => string | Error | undefined;\n}\nexport const text = (opts: TextOptions) => {\n\treturn new TextPrompt({\n\t\tvalidate: opts.validate,\n\t\tplaceholder: opts.placeholder,\n\t\tdefaultValue: opts.defaultValue,\n\t\tinitialValue: opts.initialValue,\n\t\trender() {\n\t\t\tconst title = `${color.gray(S_BAR)}\\n${symbol(this.state)} ${opts.message}\\n`;\n\t\t\tconst placeholder = opts.placeholder\n\t\t\t\t? color.inverse(opts.placeholder[0]) + color.dim(opts.placeholder.slice(1))\n\t\t\t\t: color.inverse(color.hidden('_'));\n\t\t\tconst value = !this.value ? placeholder : this.valueWithCursor;\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'error':\n\t\t\t\t\treturn `${title.trim()}\\n${color.yellow(S_BAR)} ${value}\\n${color.yellow(\n\t\t\t\t\t\tS_BAR_END\n\t\t\t\t\t)} ${color.yellow(this.error)}\\n`;\n\t\t\t\tcase 'submit':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${color.dim(this.value || opts.placeholder)}`;\n\t\t\t\tcase 'cancel':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${color.strikethrough(\n\t\t\t\t\t\tcolor.dim(this.value ?? '')\n\t\t\t\t\t)}${this.value?.trim() ? `\\n${color.gray(S_BAR)}` : ''}`;\n\t\t\t\tdefault:\n\t\t\t\t\treturn `${title}${color.cyan(S_BAR)} ${value}\\n${color.cyan(S_BAR_END)}\\n`;\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise<string | symbol>;\n};\n\nexport interface PasswordOptions {\n\tmessage: string;\n\tmask?: string;\n\tvalidate?: (value: string) => string | Error | undefined;\n}\nexport const password = (opts: PasswordOptions) => {\n\treturn new PasswordPrompt({\n\t\tvalidate: opts.validate,\n\t\tmask: opts.mask ?? S_PASSWORD_MASK,\n\t\trender() {\n\t\t\tconst title = `${color.gray(S_BAR)}\\n${symbol(this.state)} ${opts.message}\\n`;\n\t\t\tconst value = this.valueWithCursor;\n\t\t\tconst masked = this.masked;\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'error':\n\t\t\t\t\treturn `${title.trim()}\\n${color.yellow(S_BAR)} ${masked}\\n${color.yellow(\n\t\t\t\t\t\tS_BAR_END\n\t\t\t\t\t)} ${color.yellow(this.error)}\\n`;\n\t\t\t\tcase 'submit':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${color.dim(masked)}`;\n\t\t\t\tcase 'cancel':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${color.strikethrough(color.dim(masked ?? ''))}${\n\t\t\t\t\t\tmasked ? `\\n${color.gray(S_BAR)}` : ''\n\t\t\t\t\t}`;\n\t\t\t\tdefault:\n\t\t\t\t\treturn `${title}${color.cyan(S_BAR)} ${value}\\n${color.cyan(S_BAR_END)}\\n`;\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise<string | symbol>;\n};\n\nexport interface ConfirmOptions {\n\tmessage: string;\n\tactive?: string;\n\tinactive?: string;\n\tinitialValue?: boolean;\n}\nexport const confirm = (opts: ConfirmOptions) => {\n\tconst active = opts.active ?? 'Yes';\n\tconst inactive = opts.inactive ?? 'No';\n\treturn new ConfirmPrompt({\n\t\tactive,\n\t\tinactive,\n\t\tinitialValue: opts.initialValue ?? true,\n\t\trender() {\n\t\t\tconst title = `${color.gray(S_BAR)}\\n${symbol(this.state)} ${opts.message}\\n`;\n\t\t\tconst value = this.value ? active : inactive;\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'submit':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${color.dim(value)}`;\n\t\t\t\tcase 'cancel':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${color.strikethrough(\n\t\t\t\t\t\tcolor.dim(value)\n\t\t\t\t\t)}\\n${color.gray(S_BAR)}`;\n\t\t\t\tdefault: {\n\t\t\t\t\treturn `${title}${color.cyan(S_BAR)} ${\n\t\t\t\t\t\tthis.value\n\t\t\t\t\t\t\t? `${color.green(S_RADIO_ACTIVE)} ${active}`\n\t\t\t\t\t\t\t: `${color.dim(S_RADIO_INACTIVE)} ${color.dim(active)}`\n\t\t\t\t\t} ${color.dim('/')} ${\n\t\t\t\t\t\t!this.value\n\t\t\t\t\t\t\t? `${color.green(S_RADIO_ACTIVE)} ${inactive}`\n\t\t\t\t\t\t\t: `${color.dim(S_RADIO_INACTIVE)} ${color.dim(inactive)}`\n\t\t\t\t\t}\\n${color.cyan(S_BAR_END)}\\n`;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise<boolean | symbol>;\n};\n\ntype Primitive = Readonly<string | boolean | number>;\n\nexport type Option<Value> = Value extends Primitive\n\t? {\n\t\t\t/**\n\t\t\t * Internal data for this option.\n\t\t\t */\n\t\t\tvalue: Value;\n\t\t\t/**\n\t\t\t * The optional, user-facing text for this option.\n\t\t\t *\n\t\t\t * By default, the `value` is converted to a string.\n\t\t\t */\n\t\t\tlabel?: string;\n\t\t\t/**\n\t\t\t * An optional hint to display to the user when\n\t\t\t * this option might be selected.\n\t\t\t *\n\t\t\t * By default, no `hint` is displayed.\n\t\t\t */\n\t\t\thint?: string;\n\t\t}\n\t: {\n\t\t\t/**\n\t\t\t * Internal data for this option.\n\t\t\t */\n\t\t\tvalue: Value;\n\t\t\t/**\n\t\t\t * Required. The user-facing text for this option.\n\t\t\t */\n\t\t\tlabel: string;\n\t\t\t/**\n\t\t\t * An optional hint to display to the user when\n\t\t\t * this option might be selected.\n\t\t\t *\n\t\t\t * By default, no `hint` is displayed.\n\t\t\t */\n\t\t\thint?: string;\n\t\t};\n\nexport interface SelectOptions<Value> {\n\tmessage: string;\n\toptions: Option<Value>[];\n\tinitialValue?: Value;\n\tmaxItems?: number;\n}\n\nexport const select = <Value>(opts: SelectOptions<Value>) => {\n\tconst opt = (option: Option<Value>, state: 'inactive' | 'active' | 'selected' | 'cancelled') => {\n\t\tconst label = option.label ?? String(option.value);\n\t\tswitch (state) {\n\t\t\tcase 'selected':\n\t\t\t\treturn `${color.dim(label)}`;\n\t\t\tcase 'active':\n\t\t\t\treturn `${color.green(S_RADIO_ACTIVE)} ${label} ${\n\t\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t\t}`;\n\t\t\tcase 'cancelled':\n\t\t\t\treturn `${color.strikethrough(color.dim(label))}`;\n\t\t\tdefault:\n\t\t\t\treturn `${color.dim(S_RADIO_INACTIVE)} ${color.dim(label)}`;\n\t\t}\n\t};\n\n\treturn new SelectPrompt({\n\t\toptions: opts.options,\n\t\tinitialValue: opts.initialValue,\n\t\trender() {\n\t\t\tconst title = `${color.gray(S_BAR)}\\n${symbol(this.state)} ${opts.message}\\n`;\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'submit':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${opt(this.options[this.cursor], 'selected')}`;\n\t\t\t\tcase 'cancel':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${opt(\n\t\t\t\t\t\tthis.options[this.cursor],\n\t\t\t\t\t\t'cancelled'\n\t\t\t\t\t)}\\n${color.gray(S_BAR)}`;\n\t\t\t\tdefault: {\n\t\t\t\t\treturn `${title}${color.cyan(S_BAR)} ${limitOptions({\n\t\t\t\t\t\tcursor: this.cursor,\n\t\t\t\t\t\toptions: this.options,\n\t\t\t\t\t\tmaxItems: opts.maxItems,\n\t\t\t\t\t\tstyle: (item, active) => opt(item, active ? 'active' : 'inactive'),\n\t\t\t\t\t}).join(`\\n${color.cyan(S_BAR)} `)}\\n${color.cyan(S_BAR_END)}\\n`;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise<Value | symbol>;\n};\n\nexport const selectKey = <Value extends string>(opts: SelectOptions<Value>) => {\n\tconst opt = (\n\t\toption: Option<Value>,\n\t\tstate: 'inactive' | 'active' | 'selected' | 'cancelled' = 'inactive'\n\t) => {\n\t\tconst label = option.label ?? String(option.value);\n\t\tif (state === 'selected') {\n\t\t\treturn `${color.dim(label)}`;\n\t\t}\n\t\tif (state === 'cancelled') {\n\t\t\treturn `${color.strikethrough(color.dim(label))}`;\n\t\t}\n\t\tif (state === 'active') {\n\t\t\treturn `${color.bgCyan(color.gray(` ${option.value} `))} ${label} ${\n\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t}`;\n\t\t}\n\t\treturn `${color.gray(color.bgWhite(color.inverse(` ${option.value} `)))} ${label} ${\n\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t}`;\n\t};\n\n\treturn new SelectKeyPrompt({\n\t\toptions: opts.options,\n\t\tinitialValue: opts.initialValue,\n\t\trender() {\n\t\t\tconst title = `${color.gray(S_BAR)}\\n${symbol(this.state)} ${opts.message}\\n`;\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'submit':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${opt(\n\t\t\t\t\t\tthis.options.find((opt) => opt.value === this.value) ?? opts.options[0],\n\t\t\t\t\t\t'selected'\n\t\t\t\t\t)}`;\n\t\t\t\tcase 'cancel':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${opt(this.options[0], 'cancelled')}\\n${color.gray(\n\t\t\t\t\t\tS_BAR\n\t\t\t\t\t)}`;\n\t\t\t\tdefault: {\n\t\t\t\t\treturn `${title}${color.cyan(S_BAR)} ${this.options\n\t\t\t\t\t\t.map((option, i) => opt(option, i === this.cursor ? 'active' : 'inactive'))\n\t\t\t\t\t\t.join(`\\n${color.cyan(S_BAR)} `)}\\n${color.cyan(S_BAR_END)}\\n`;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise<Value | symbol>;\n};\n\nexport interface MultiSelectOptions<Value> {\n\tmessage: string;\n\toptions: Option<Value>[];\n\tinitialValues?: Value[];\n\tmaxItems?: number;\n\trequired?: boolean;\n\tcursorAt?: Value;\n}\nexport const multiselect = <Value>(opts: MultiSelectOptions<Value>) => {\n\tconst opt = (\n\t\toption: Option<Value>,\n\t\tstate: 'inactive' | 'active' | 'selected' | 'active-selected' | 'submitted' | 'cancelled'\n\t) => {\n\t\tconst label = option.label ?? String(option.value);\n\t\tif (state === 'active') {\n\t\t\treturn `${color.cyan(S_CHECKBOX_ACTIVE)} ${label} ${\n\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t}`;\n\t\t}\n\t\tif (state === 'selected') {\n\t\t\treturn `${color.green(S_CHECKBOX_SELECTED)} ${color.dim(label)} ${\n\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t}`;\n\t\t}\n\t\tif (state === 'cancelled') {\n\t\t\treturn `${color.strikethrough(color.dim(label))}`;\n\t\t}\n\t\tif (state === 'active-selected') {\n\t\t\treturn `${color.green(S_CHECKBOX_SELECTED)} ${label} ${\n\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t}`;\n\t\t}\n\t\tif (state === 'submitted') {\n\t\t\treturn `${color.dim(label)}`;\n\t\t}\n\t\treturn `${color.dim(S_CHECKBOX_INACTIVE)} ${color.dim(label)}`;\n\t};\n\n\treturn new MultiSelectPrompt({\n\t\toptions: opts.options,\n\t\tinitialValues: opts.initialValues,\n\t\trequired: opts.required ?? true,\n\t\tcursorAt: opts.cursorAt,\n\t\tvalidate(selected: Value[]) {\n\t\t\tif (this.required && selected.length === 0)\n\t\t\t\treturn `Please select at least one option.\\n${color.reset(\n\t\t\t\t\tcolor.dim(\n\t\t\t\t\t\t`Press ${color.gray(color.bgWhite(color.inverse(' space ')))} to select, ${color.gray(\n\t\t\t\t\t\t\tcolor.bgWhite(color.inverse(' enter '))\n\t\t\t\t\t\t)} to submit`\n\t\t\t\t\t)\n\t\t\t\t)}`;\n\t\t},\n\t\trender() {\n\t\t\tconst title = `${color.gray(S_BAR)}\\n${symbol(this.state)} ${opts.message}\\n`;\n\n\t\t\tconst styleOption = (option: Option<Value>, active: boolean) => {\n\t\t\t\tconst selected = this.value.includes(option.value);\n\t\t\t\tif (active && selected) {\n\t\t\t\t\treturn opt(option, 'active-selected');\n\t\t\t\t}\n\t\t\t\tif (selected) {\n\t\t\t\t\treturn opt(option, 'selected');\n\t\t\t\t}\n\t\t\t\treturn opt(option, active ? 'active' : 'inactive');\n\t\t\t};\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'submit': {\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${\n\t\t\t\t\t\tthis.options\n\t\t\t\t\t\t\t.filter(({ value }) => this.value.includes(value))\n\t\t\t\t\t\t\t.map((option) => opt(option, 'submitted'))\n\t\t\t\t\t\t\t.join(color.dim(', ')) || color.dim('none')\n\t\t\t\t\t}`;\n\t\t\t\t}\n\t\t\t\tcase 'cancel': {\n\t\t\t\t\tconst label = this.options\n\t\t\t\t\t\t.filter(({ value }) => this.value.includes(value))\n\t\t\t\t\t\t.map((option) => opt(option, 'cancelled'))\n\t\t\t\t\t\t.join(color.dim(', '));\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${\n\t\t\t\t\t\tlabel.trim() ? `${label}\\n${color.gray(S_BAR)}` : ''\n\t\t\t\t\t}`;\n\t\t\t\t}\n\t\t\t\tcase 'error': {\n\t\t\t\t\tconst footer = this.error\n\t\t\t\t\t\t.split('\\n')\n\t\t\t\t\t\t.map((ln, i) =>\n\t\t\t\t\t\t\ti === 0 ? `${color.yellow(S_BAR_END)} ${color.yellow(ln)}` : ` ${ln}`\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.join('\\n');\n\t\t\t\t\treturn `${title + color.yellow(S_BAR)} ${limitOptions({\n\t\t\t\t\t\toptions: this.options,\n\t\t\t\t\t\tcursor: this.cursor,\n\t\t\t\t\t\tmaxItems: opts.maxItems,\n\t\t\t\t\t\tstyle: styleOption,\n\t\t\t\t\t}).join(`\\n${color.yellow(S_BAR)} `)}\\n${footer}\\n`;\n\t\t\t\t}\n\t\t\t\tdefault: {\n\t\t\t\t\treturn `${title}${color.cyan(S_BAR)} ${limitOptions({\n\t\t\t\t\t\toptions: this.options,\n\t\t\t\t\t\tcursor: this.cursor,\n\t\t\t\t\t\tmaxItems: opts.maxItems,\n\t\t\t\t\t\tstyle: styleOption,\n\t\t\t\t\t}).join(`\\n${color.cyan(S_BAR)} `)}\\n${color.cyan(S_BAR_END)}\\n`;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise<Value[] | symbol>;\n};\n\nexport interface GroupMultiSelectOptions<Value> {\n\tmessage: string;\n\toptions: Record<string, Option<Value>[]>;\n\tinitialValues?: Value[];\n\trequired?: boolean;\n\tcursorAt?: Value;\n\tselectableGroups?: boolean;\n}\nexport const groupMultiselect = <Value>(opts: GroupMultiSelectOptions<Value>) => {\n\tconst { selectableGroups = true } = opts;\n\tconst opt = (\n\t\toption: Option<Value>,\n\t\tstate:\n\t\t\t| 'inactive'\n\t\t\t| 'active'\n\t\t\t| 'selected'\n\t\t\t| 'active-selected'\n\t\t\t| 'group-active'\n\t\t\t| 'group-active-selected'\n\t\t\t| 'submitted'\n\t\t\t| 'cancelled',\n\t\toptions: Option<Value>[] = []\n\t) => {\n\t\tconst label = option.label ?? String(option.value);\n\t\tconst isItem = typeof (option as any).group === 'string';\n\t\tconst next = isItem && (options[options.indexOf(option) + 1] ?? { group: true });\n\t\tconst isLast = isItem && (next as any).group === true;\n\t\tconst prefix = isItem ? (selectableGroups ? `${isLast ? S_BAR_END : S_BAR} ` : ' ') : '';\n\n\t\tif (state === 'active') {\n\t\t\treturn `${color.dim(prefix)}${color.cyan(S_CHECKBOX_ACTIVE)} ${label} ${\n\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t}`;\n\t\t}\n\t\tif (state === 'group-active') {\n\t\t\treturn `${prefix}${color.cyan(S_CHECKBOX_ACTIVE)} ${color.dim(label)}`;\n\t\t}\n\t\tif (state === 'group-active-selected') {\n\t\t\treturn `${prefix}${color.green(S_CHECKBOX_SELECTED)} ${color.dim(label)}`;\n\t\t}\n\t\tif (state === 'selected') {\n\t\t\tconst selectedCheckbox = isItem || selectableGroups ? color.green(S_CHECKBOX_SELECTED) : '';\n\t\t\treturn `${color.dim(prefix)}${selectedCheckbox} ${color.dim(label)} ${\n\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t}`;\n\t\t}\n\t\tif (state === 'cancelled') {\n\t\t\treturn `${color.strikethrough(color.dim(label))}`;\n\t\t}\n\t\tif (state === 'active-selected') {\n\t\t\treturn `${color.dim(prefix)}${color.green(S_CHECKBOX_SELECTED)} ${label} ${\n\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t}`;\n\t\t}\n\t\tif (state === 'submitted') {\n\t\t\treturn `${color.dim(label)}`;\n\t\t}\n\t\tconst unselectedCheckbox = isItem || selectableGroups ? color.dim(S_CHECKBOX_INACTIVE) : '';\n\t\treturn `${color.dim(prefix)}${unselectedCheckbox} ${color.dim(label)}`;\n\t};\n\n\treturn new GroupMultiSelectPrompt({\n\t\toptions: opts.options,\n\t\tinitialValues: opts.initialValues,\n\t\trequired: opts.required ?? true,\n\t\tcursorAt: opts.cursorAt,\n\t\tselectableGroups,\n\t\tvalidate(selected: Value[]) {\n\t\t\tif (this.required && selected.length === 0)\n\t\t\t\treturn `Please select at least one option.\\n${color.reset(\n\t\t\t\t\tcolor.dim(\n\t\t\t\t\t\t`Press ${color.gray(color.bgWhite(color.inverse(' space ')))} to select, ${color.gray(\n\t\t\t\t\t\t\tcolor.bgWhite(color.inverse(' enter '))\n\t\t\t\t\t\t)} to submit`\n\t\t\t\t\t)\n\t\t\t\t)}`;\n\t\t},\n\t\trender() {\n\t\t\tconst title = `${color.gray(S_BAR)}\\n${symbol(this.state)} ${opts.message}\\n`;\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'submit': {\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${this.options\n\t\t\t\t\t\t.filter(({ value }) => this.value.includes(value))\n\t\t\t\t\t\t.map((option) => opt(option, 'submitted'))\n\t\t\t\t\t\t.join(color.dim(', '))}`;\n\t\t\t\t}\n\t\t\t\tcase 'cancel': {\n\t\t\t\t\tconst label = this.options\n\t\t\t\t\t\t.filter(({ value }) => this.value.includes(value))\n\t\t\t\t\t\t.map((option) => opt(option, 'cancelled'))\n\t\t\t\t\t\t.join(color.dim(', '));\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${\n\t\t\t\t\t\tlabel.trim() ? `${label}\\n${color.gray(S_BAR)}` : ''\n\t\t\t\t\t}`;\n\t\t\t\t}\n\t\t\t\tcase 'error': {\n\t\t\t\t\tconst footer = this.error\n\t\t\t\t\t\t.split('\\n')\n\t\t\t\t\t\t.map((ln, i) =>\n\t\t\t\t\t\t\ti === 0 ? `${color.yellow(S_BAR_END)} ${color.yellow(ln)}` : ` ${ln}`\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.join('\\n');\n\t\t\t\t\treturn `${title}${color.yellow(S_BAR)} ${this.options\n\t\t\t\t\t\t.map((option, i, options) => {\n\t\t\t\t\t\t\tconst selected =\n\t\t\t\t\t\t\t\tthis.value.includes(option.value) ||\n\t\t\t\t\t\t\t\t(option.group === true && this.isGroupSelected(`${option.value}`));\n\t\t\t\t\t\t\tconst active = i === this.cursor;\n\t\t\t\t\t\t\tconst groupActive =\n\t\t\t\t\t\t\t\t!active &&\n\t\t\t\t\t\t\t\ttypeof option.group === 'string' &&\n\t\t\t\t\t\t\t\tthis.options[this.cursor].value === option.group;\n\t\t\t\t\t\t\tif (groupActive) {\n\t\t\t\t\t\t\t\treturn opt(option, selected ? 'group-active-selected' : 'group-active', options);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (active && selected) {\n\t\t\t\t\t\t\t\treturn opt(option, 'active-selected', options);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (selected) {\n\t\t\t\t\t\t\t\treturn opt(option, 'selected', options);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn opt(option, active ? 'active' : 'inactive', options);\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.join(`\\n${color.yellow(S_BAR)} `)}\\n${footer}\\n`;\n\t\t\t\t}\n\t\t\t\tdefault: {\n\t\t\t\t\treturn `${title}${color.cyan(S_BAR)} ${this.options\n\t\t\t\t\t\t.map((option, i, options) => {\n\t\t\t\t\t\t\tconst selected =\n\t\t\t\t\t\t\t\tthis.value.includes(option.value) ||\n\t\t\t\t\t\t\t\t(option.group === true && this.isGroupSelected(`${option.value}`));\n\t\t\t\t\t\t\tconst active = i === this.cursor;\n\t\t\t\t\t\t\tconst groupActive =\n\t\t\t\t\t\t\t\t!active &&\n\t\t\t\t\t\t\t\ttypeof option.group === 'string' &&\n\t\t\t\t\t\t\t\tthis.options[this.cursor].value === option.group;\n\t\t\t\t\t\t\tif (groupActive) {\n\t\t\t\t\t\t\t\treturn opt(option, selected ? 'group-active-selected' : 'group-active', options);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (active && selected) {\n\t\t\t\t\t\t\t\treturn opt(option, 'active-selected', options);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (selected) {\n\t\t\t\t\t\t\t\treturn opt(option, 'selected', options);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn opt(option, active ? 'active' : 'inactive', options);\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.join(`\\n${color.cyan(S_BAR)} `)}\\n${color.cyan(S_BAR_END)}\\n`;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise<Value[] | symbol>;\n};\n\nexport const note = (message = '', title = '') => {\n\tconst lines = `\\n${message}\\n`.split('\\n');\n\tconst titleLen = strip(title).length;\n\tconst len =\n\t\tMath.max(\n\t\t\tlines.reduce((sum, ln) => {\n\t\t\t\tconst line = strip(ln);\n\t\t\t\treturn line.length > sum ? line.length : sum;\n\t\t\t}, 0),\n\t\t\ttitleLen\n\t\t) + 2;\n\tconst msg = lines\n\t\t.map(\n\t\t\t(ln) =>\n\t\t\t\t`${color.gray(S_BAR)} ${color.dim(ln)}${' '.repeat(len - strip(ln).length)}${color.gray(\n\t\t\t\t\tS_BAR\n\t\t\t\t)}`\n\t\t)\n\t\t.join('\\n');\n\tprocess.stdout.write(\n\t\t`${color.gray(S_BAR)}\\n${color.green(S_STEP_SUBMIT)} ${color.reset(title)} ${color.gray(\n\t\t\tS_BAR_H.repeat(Math.max(len - titleLen - 1, 1)) + S_CORNER_TOP_RIGHT\n\t\t)}\\n${msg}\\n${color.gray(S_CONNECT_LEFT + S_BAR_H.repeat(len + 2) + S_CORNER_BOTTOM_RIGHT)}\\n`\n\t);\n};\n\nexport const cancel = (message = '') => {\n\tprocess.stdout.write(`${color.gray(S_BAR_END)} ${color.red(message)}\\n\\n`);\n};\n\nexport const intro = (title = '') => {\n\tprocess.stdout.write(`${color.gray(S_BAR_START)} ${title}\\n`);\n};\n\nexport const outro = (message = '') => {\n\tprocess.stdout.write(`${color.gray(S_BAR)}\\n${color.gray(S_BAR_END)} ${message}\\n\\n`);\n};\n\nexport type LogMessageOptions = {\n\tsymbol?: string;\n};\nexport const log = {\n\tmessage: (message = '', { symbol = color.gray(S_BAR) }: LogMessageOptions = {}) => {\n\t\tconst parts = [`${color.gray(S_BAR)}`];\n\t\tif (message) {\n\t\t\tconst [firstLine, ...lines] = message.split('\\n');\n\t\t\tparts.push(`${symbol} ${firstLine}`, ...lines.map((ln) => `${color.gray(S_BAR)} ${ln}`));\n\t\t}\n\t\tprocess.stdout.write(`${parts.join('\\n')}\\n`);\n\t},\n\tinfo: (message: string) => {\n\t\tlog.message(message, { symbol: color.blue(S_INFO) });\n\t},\n\tsuccess: (message: string) => {\n\t\tlog.message(message, { symbol: color.green(S_SUCCESS) });\n\t},\n\tstep: (message: string) => {\n\t\tlog.message(message, { symbol: color.green(S_STEP_SUBMIT) });\n\t},\n\twarn: (message: string) => {\n\t\tlog.message(message, { symbol: color.yellow(S_WARN) });\n\t},\n\t/** alias for `log.warn()`. */\n\twarning: (message: string) => {\n\t\tlog.warn(message);\n\t},\n\terror: (message: string) => {\n\t\tlog.message(message, { symbol: color.red(S_ERROR) });\n\t},\n};\n\nconst prefix = `${color.gray(S_BAR)} `;\nexport const stream = {\n\tmessage: async (\n\t\titerable: Iterable<string> | AsyncIterable<string>,\n\t\t{ symbol = color.gray(S_BAR) }: LogMessageOptions = {}\n\t) => {\n\t\tprocess.stdout.write(`${color.gray(S_BAR)}\\n${symbol} `);\n\t\tlet lineWidth = 3;\n\t\tfor await (let chunk of iterable) {\n\t\t\tchunk = chunk.replace(/\\n/g, `\\n${prefix}`);\n\t\t\tif (chunk.includes('\\n')) {\n\t\t\t\tlineWidth = 3 + strip(chunk.slice(chunk.lastIndexOf('\\n'))).length;\n\t\t\t}\n\t\t\tconst chunkLen = strip(chunk).length;\n\t\t\tif (lineWidth + chunkLen < process.stdout.columns) {\n\t\t\t\tlineWidth += chunkLen;\n\t\t\t\tprocess.stdout.write(chunk);\n\t\t\t} else {\n\t\t\t\tprocess.stdout.write(`\\n${prefix}${chunk.trimStart()}`);\n\t\t\t\tlineWidth = 3 + strip(chunk.trimStart()).length;\n\t\t\t}\n\t\t}\n\t\tprocess.stdout.write('\\n');\n\t},\n\tinfo: (iterable: Iterable<string> | AsyncIterable<string>) => {\n\t\treturn stream.message(iterable, { symbol: color.blue(S_INFO) });\n\t},\n\tsuccess: (iterable: Iterable<string> | AsyncIterable<string>) => {\n\t\treturn stream.message(iterable, { symbol: color.green(S_SUCCESS) });\n\t},\n\tstep: (iterable: Iterable<string> | AsyncIterable<string>) => {\n\t\treturn stream.message(iterable, { symbol: color.green(S_STEP_SUBMIT) });\n\t},\n\twarn: (iterable: Iterable<string> | AsyncIterable<string>) => {\n\t\treturn stream.message(iterable, { symbol: color.yellow(S_WARN) });\n\t},\n\t/** alias for `log.warn()`. */\n\twarning: (iterable: Iterable<string> | AsyncIterable<string>) => {\n\t\treturn stream.warn(iterable);\n\t},\n\terror: (iterable: Iterable<string> | AsyncIterable<string>) => {\n\t\treturn stream.message(iterable, { symbol: color.red(S_ERROR) });\n\t},\n};\n\nexport interface SpinnerOptions {\n\tindicator?: 'dots' | 'timer';\n}\n\nexport const spinner = ({ indicator = 'dots' }: SpinnerOptions = {}) => {\n\tconst frames = unicode ? ['◒', '◐', '◓', '◑'] : ['•', 'o', 'O', '0'];\n\tconst delay = unicode ? 80 : 120;\n\tconst isCI = process.env.CI === 'true';\n\n\tlet unblock: () => void;\n\tlet loop: NodeJS.Timeout;\n\tlet isSpinnerActive = false;\n\tlet _message = '';\n\tlet _prevMessage: string | undefined = undefined;\n\tlet _origin: number = performance.now();\n\n\tconst handleExit = (code: number) => {\n\t\tconst msg = code > 1 ? 'Something went wrong' : 'Canceled';\n\t\tif (isSpinnerActive) stop(msg, code);\n\t};\n\n\tconst errorEventHandler = () => handleExit(2);\n\tconst signalEventHandler = () => handleExit(1);\n\n\tconst registerHooks = () => {\n\t\t// Reference: https://nodejs.org/api/process.html#event-uncaughtexception\n\t\tprocess.on('uncaughtExceptionMonitor', errorEventHandler);\n\t\t// Reference: https://nodejs.org/api/process.html#event-unhandledrejection\n\t\tprocess.on('unhandledRejection', errorEventHandler);\n\t\t// Reference Signal Events: https://nodejs.org/api/process.html#signal-events\n\t\tprocess.on('SIGINT', signalEventHandler);\n\t\tprocess.on('SIGTERM', signalEventHandler);\n\t\tprocess.on('exit', handleExit);\n\t};\n\n\tconst clearHooks = () => {\n\t\tprocess.removeListener('uncaughtExceptionMonitor', errorEventHandler);\n\t\tprocess.removeListener('unhandledRejection', errorEventHandler);\n\t\tprocess.removeListener('SIGINT', signalEventHandler);\n\t\tprocess.removeListener('SIGTERM', signalEventHandler);\n\t\tprocess.removeListener('exit', handleExit);\n\t};\n\n\tconst clearPrevMessage = () => {\n\t\tif (_prevMessage === undefined) return;\n\t\tif (isCI) process.stdout.write('\\n');\n\t\tconst prevLines = _prevMessage.split('\\n');\n\t\tprocess.stdout.write(cursor.move(-999, prevLines.length - 1));\n\t\tprocess.stdout.write(erase.down(prevLines.length));\n\t};\n\n\tconst parseMessage = (msg: string): string => {\n\t\treturn msg.replace(/\\.+$/, '');\n\t};\n\n\tconst formatTimer = (origin: number): string => {\n\t\tconst duration = (performance.now() - origin) / 1000;\n\t\tconst min = Math.floor(duration / 60);\n\t\tconst secs = Math.floor(duration % 60);\n\t\treturn min > 0 ? `[${min}m ${secs}s]` : `[${secs}s]`;\n\t};\n\n\tconst start = (msg = ''): void => {\n\t\tisSpinnerActive = true;\n\t\tunblock = block();\n\t\t_message = parseMessage(msg);\n\t\t_origin = performance.now();\n\t\tprocess.stdout.write(`${color.gray(S_BAR)}\\n`);\n\t\tlet frameIndex = 0;\n\t\tlet indicatorTimer = 0;\n\t\tregisterHooks();\n\t\tloop = setInterval(() => {\n\t\t\tif (isCI && _message === _prevMessage) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tclearPrevMessage();\n\t\t\t_prevMessage = _message;\n\t\t\tconst frame = color.magenta(frames[frameIndex]);\n\n\t\t\tif (isCI) {\n\t\t\t\tprocess.stdout.write(`${frame} ${_message}...`);\n\t\t\t} else if (indicator === 'timer') {\n\t\t\t\tprocess.stdout.write(`${frame} ${_message} ${formatTimer(_origin)}`);\n\t\t\t} else {\n\t\t\t\tconst loadingDots = '.'.repeat(Math.floor(indicatorTimer)).slice(0, 3);\n\t\t\t\tprocess.stdout.write(`${frame} ${_message}${loadingDots}`);\n\t\t\t}\n\n\t\t\tframeIndex = frameIndex + 1 < frames.length ? frameIndex + 1 : 0;\n\t\t\tindicatorTimer = indicatorTimer < frames.length ? indicatorTimer + 0.125 : 0;\n\t\t}, delay);\n\t};\n\n\tconst stop = (msg = '', code = 0): void => {\n\t\tisSpinnerActive = false;\n\t\tclearInterval(loop);\n\t\tclearPrevMessage();\n\t\tconst step =\n\t\t\tcode === 0\n\t\t\t\t? color.green(S_STEP_SUBMIT)\n\t\t\t\t: code === 1\n\t\t\t\t\t? color.red(S_STEP_CANCEL)\n\t\t\t\t\t: color.red(S_STEP_ERROR);\n\t\t_message = parseMessage(msg ?? _message);\n\t\tif (indicator === 'timer') {\n\t\t\tprocess.stdout.write(`${step} ${_message} ${formatTimer(_origin)}\\n`);\n\t\t} else {\n\t\t\tprocess.stdout.write(`${step} ${_message}\\n`);\n\t\t}\n\t\tclearHooks();\n\t\tunblock();\n\t};\n\n\tconst message = (msg = ''): void => {\n\t\t_message = parseMessage(msg ?? _message);\n\t};\n\n\treturn {\n\t\tstart,\n\t\tstop,\n\t\tmessage,\n\t};\n};\n\nexport type PromptGroupAwaitedReturn<T> = {\n\t[P in keyof T]: Exclude<Awaited<T[P]>, symbol>;\n};\n\nexport interface PromptGroupOptions<T> {\n\t/**\n\t * Control how the group can be canceled\n\t * if one of the prompts is canceled.\n\t */\n\tonCancel?: (opts: { results: Prettify<Partial<PromptGroupAwaitedReturn<T>>> }) => void;\n}\n\ntype Prettify<T> = {\n\t[P in keyof T]: T[P];\n} & {};\n\nexport type PromptGroup<T> = {\n\t[P in keyof T]: (opts: {\n\t\tresults: Prettify<Partial<PromptGroupAwaitedReturn<Omit<T, P>>>>;\n\t}) => undefined | Promise<T[P] | undefined>;\n};\n\n/**\n * Define a group of prompts to be displayed\n * and return a results of objects within the group\n */\nexport const group = async <T>(\n\tprompts: PromptGroup<T>,\n\topts?: PromptGroupOptions<T>\n): Promise<Prettify<PromptGroupAwaitedReturn<T>>> => {\n\tconst results = {} as any;\n\tconst promptNames = Object.keys(prompts);\n\n\tfor (const name of promptNames) {\n\t\tconst prompt = prompts[name as keyof T];\n\t\tconst result = await prompt({ results })?.catch((e) => {\n\t\t\tthrow e;\n\t\t});\n\n\t\t// Pass the results to the onCancel function\n\t\t// so the user can decide what to do with the results\n\t\t// TODO: Switch to callback within core to avoid isCancel Fn\n\t\tif (typeof opts?.onCancel === 'function' && isCancel(result)) {\n\t\t\tresults[name] = 'canceled';\n\t\t\topts.onCancel({ results });\n\t\t\tcontinue;\n\t\t}\n\n\t\tresults[name] = result;\n\t}\n\n\treturn results;\n};\n\nexport type Task = {\n\t/**\n\t * Task title\n\t */\n\ttitle: string;\n\t/**\n\t * Task function\n\t */\n\ttask: (message: (string: string) => void) => string | Promise<string> | void | Promise<void>;\n\n\t/**\n\t * If enabled === false the task will be skipped\n\t */\n\tenabled?: boolean;\n};\n\n/**\n * Define a group of tasks to be executed\n */\nexport const tasks = async (tasks: Task[]) => {\n\tfor (const task of tasks) {\n\t\tif (task.enabled === false) continue;\n\n\t\tconst s = spinner();\n\t\ts.start(task.title);\n\t\tconst result = await task.task(s.message);\n\t\ts.stop(result || task.title);\n\t}\n};\n"],"mappings":"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MAAaA,MAAa,QAC1BA,MAAV,QACUA,MAAV,QACUA,MAAV,QACUA,MAAV,QACA,QAAUA,MAAaA,MAAa,QACpC,QAAUA,MAAaA,MAAa,QAC1BA,MAAV,QACUA,MAAV,QACUA,MAAV,QACUA,MAAV,QACUA,MAAV,QACA,QAAUA,MAAaA,MAAa,QAC1BA,MAAV,QACUA,MAAV,QACA,QAAUA,MAAaA,MAAa,QAC1BA,MAAV,QACA,QAAUA,MAAaA,MAAa,QACpC,QAAUA,MAAaA,MAAa,QAC1BA,MAAV,QACUA,MAAV,QACUA,MAAV,QACA,QAAUA,MAAaA,MAAa,QACpC,QAAUA,MAAaA,MAAa,QACpC,QAAUA,MAAaA,MAAa,QACpC,QAAUA,MAAaA,MAAa,QACpC,QAAUA,MAAaA,MAAa,QACpC,QAAUA,MAAaA,MAAa,QAC1BA,MAAV,QACUA,MAAV,QACUA,MAAV,QACUA,MAAV,QACUA,MAAV,QACA,QAAUA,MAAaA,MAAa,QACpC,QAAUA,MAAaA,MAAa,QACpC,QAAUA,MAAaA,MAAa,QACpC,QAAUA,MAAaA,MAAa,QACpC,QAAUA,MAAaA,MAAa,QACpC,QAAUA,MAAaA,MAAa,QACpC,QAAUA,MAAaA,MAAa,QACpC,QAAUA,MAAaA,MAAa,QACpC,QAAUA,MAAaA,MAAa,QACpC,QAAUA,MAAaA,MAAa,QACpC,QAAUA,MAAaA,MAAa,QACpC,QAAUA,MAAaA,MAAa,QAC1BA,MAAV,QACA,QAAUA,MAAaA,MAAa,QACpC,QAAUA,MAAaA,MAAa,QAC1BA,MAAV,QACA,QAAUA,MAAaA,MAAa,QAC1BA,MAAV,QACA,QAAUA,MAAaA,MAAa,QACpC,QAAUA,MAAaA,MAAa,QAC1BA,MAAV,QACUA,MAAV,QACUA,MAAV,QACUA,MAAV,QACA,QAAUA,MAAaA,MAAa,QACpC,QAAUA,MAAaA,MAAa,QACpC,QAAUA,MAAaA,MAAa,QACpC,QAAUA,MAAaA,MAAa,QAC1BA,MAAV,QACA,QAAUA,MAAaA,MAAa,QACpC,QAAUA,MAAaA,MAAa,QACpC,QAAUA,MAAaA,MAAa,QACpC,QAAUA,MAAaA,MAAa,QAC1BA,MAAV,QACA,QAAUA,MAAaA,M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","names":["x","y","p","path","p","m","path","p","g","m","b","r","ansiRegex","onlyFirst","pattern","regex","stripAnsi","string","e","eaw","module","character","x","y","codePoint","code","stringToArray","characters","len","i","text","start","end","result","eawLen","chars","char","charLen","emojiRegex","stringWidth","options","ambiguousCharacterWidth","width","eastAsianWidth","ANSI_BACKGROUND_OFFSET","wrapAnsi16","offset","wrapAnsi256","wrapAnsi16m","red","green","blue","styles","foregroundColorNames","backgroundColorNames","assembleStyles","codes","groupName","group","styleName","style","hex","matches","colorString","integer","remainder","value","ansiStyles","ESCAPES","END_CODE","ANSI_ESCAPE_BELL","ANSI_CSI","ANSI_OSC","ANSI_SGR_TERMINATOR","ANSI_ESCAPE_LINK","wrapAnsiCode","wrapAnsiHyperlink","uri","wordLengths","wrapWord","rows","word","columns","isInsideEscape","isInsideLinkEscape","visible","index","characterLength","stringVisibleTrimSpacesRight","words","last","exec","returnValue","escapeCode","escapeUrl","lengths","rowLength","remainingColumns","breaksStartingThisLine","row","pre","groups","wrapAnsi","line","actions","settings","isActionKey","key","action","settings","value","diffLines","a","b","aLines","bLines","diff","i","isWindows","CANCEL_SYMBOL","isCancel","setRawMode","input","b","v","a","t","e","s","Prompt","options","trackValue","__publicField","input","stdin","output","stdout","render","signal","opts","event","params","cb","data","cbs","cleanup","subscriber","resolve","reject","CANCEL_SYMBOL","sink","Writable","chunk","encoding","done","readline","setRawMode","cursor","char","key","settings","problem","isActionKey","lines","wrap","frame","diff","diffLines","diffLine","erase","newLines","_selectableGroups","_selectableGroups","o","a","i","s","l","Prompt","opts","__publicField","value","char","key","allSelected","v","selected","e","u","SelectPrompt","Prompt","opts","__publicField","value","key","TextPrompt","Prompt","s1","s2","s3","color","opts","isUnicodeSupported","process","unicode","s","c","fallback","S_STEP_ACTIVE","S_STEP_CANCEL","S_STEP_ERROR","S_STEP_SUBMIT","S_BAR_START","S_BAR","S_BAR_END","S_RADIO_ACTIVE","S_RADIO_INACTIVE","S_CHECKBOX_ACTIVE","S_CHECKBOX_SELECTED","S_CHECKBOX_INACTIVE","S_PASSWORD_MASK","S_BAR_H","S_CORNER_TOP_RIGHT","S_CONNECT_LEFT","S_CORNER_BOTTOM_RIGHT","S_INFO","S_SUCCESS","S_WARN","S_ERROR","symbol","state","color","limitOptions","params","cursor","options","style","paramMaxItems","outputMaxItems","maxItems","slidingWindowLocation","shouldRenderTopEllipsis","shouldRenderBottomEllipsis","option","i","arr","isTopLimit","isBottomLimit","text","opts","TextPrompt","title","placeholder","value","select","opts","opt","option","state","label","color","S_RADIO_ACTIVE","S_RADIO_INACTIVE","SelectPrompt","title","S_BAR","symbol","limitOptions","item","active","S_BAR_END","multiselect","opts","opt","option","state","label","color","S_CHECKBOX_ACTIVE","S_CHECKBOX_SELECTED","S_CHECKBOX_INACTIVE","MultiSelectPrompt","selected","title","S_BAR","symbol","styleOption","active","value","footer","ln","i","S_BAR_END","limitOptions","cancel","message","color","S_BAR_END","intro","title","S_BAR_START","outro","S_BAR","prefix","color","S_BAR","w"]}
1
+ {"version":3,"sources":["../../../node_modules/sisteransi/src/index.js","../../../node_modules/picocolors/picocolors.js","../src/cli.ts","../../cli/src/index.ts","../../cli/src/options.ts","../../cli/src/safety.ts","../../cli/src/transform.ts","../../cli/src/walk.ts","../../cli/src/diff.ts","../../cli/src/wizard.ts","../../../node_modules/node_modules/.pnpm/ansi-regex@6.1.0/node_modules/ansi-regex/index.js","../../../node_modules/node_modules/.pnpm/strip-ansi@7.1.0/node_modules/strip-ansi/index.js","../../../node_modules/node_modules/.pnpm/eastasianwidth@0.2.0/node_modules/eastasianwidth/eastasianwidth.js","../../../node_modules/node_modules/.pnpm/emoji-regex@9.2.2/node_modules/emoji-regex/index.js","../../../node_modules/node_modules/.pnpm/string-width@5.1.2/node_modules/string-width/index.js","../../../node_modules/node_modules/.pnpm/ansi-styles@6.2.1/node_modules/ansi-styles/index.js","../../../node_modules/node_modules/.pnpm/wrap-ansi@8.1.0/node_modules/wrap-ansi/index.js","../../../node_modules/@clack/core/src/utils/settings.ts","../../../node_modules/@clack/core/src/utils/string.ts","../../../node_modules/@clack/core/src/utils/index.ts","../../../node_modules/@clack/core/src/prompts/prompt.ts","../../../node_modules/@clack/core/src/prompts/confirm.ts","../../../node_modules/@clack/core/src/prompts/group-multiselect.ts","../../../node_modules/@clack/core/src/prompts/multi-select.ts","../../../node_modules/@clack/core/src/prompts/password.ts","../../../node_modules/@clack/core/src/prompts/select.ts","../../../node_modules/@clack/core/src/prompts/select-key.ts","../../../node_modules/@clack/core/src/prompts/text.ts","../../../node_modules/node_modules/.pnpm/is-unicode-supported@1.3.0/node_modules/is-unicode-supported/index.js","../../../node_modules/@clack/prompts/src/index.ts","../../cli/src/detect.ts"],"sourcesContent":["'use strict';\n\nconst ESC = '\\x1B';\nconst CSI = `${ESC}[`;\nconst beep = '\\u0007';\n\nconst cursor = {\n to(x, y) {\n if (!y) return `${CSI}${x + 1}G`;\n return `${CSI}${y + 1};${x + 1}H`;\n },\n move(x, y) {\n let ret = '';\n\n if (x < 0) ret += `${CSI}${-x}D`;\n else if (x > 0) ret += `${CSI}${x}C`;\n\n if (y < 0) ret += `${CSI}${-y}A`;\n else if (y > 0) ret += `${CSI}${y}B`;\n\n return ret;\n },\n up: (count = 1) => `${CSI}${count}A`,\n down: (count = 1) => `${CSI}${count}B`,\n forward: (count = 1) => `${CSI}${count}C`,\n backward: (count = 1) => `${CSI}${count}D`,\n nextLine: (count = 1) => `${CSI}E`.repeat(count),\n prevLine: (count = 1) => `${CSI}F`.repeat(count),\n left: `${CSI}G`,\n hide: `${CSI}?25l`,\n show: `${CSI}?25h`,\n save: `${ESC}7`,\n restore: `${ESC}8`\n}\n\nconst scroll = {\n up: (count = 1) => `${CSI}S`.repeat(count),\n down: (count = 1) => `${CSI}T`.repeat(count)\n}\n\nconst erase = {\n screen: `${CSI}2J`,\n up: (count = 1) => `${CSI}1J`.repeat(count),\n down: (count = 1) => `${CSI}J`.repeat(count),\n line: `${CSI}2K`,\n lineEnd: `${CSI}K`,\n lineStart: `${CSI}1K`,\n lines(count) {\n let clear = '';\n for (let i = 0; i < count; i++)\n clear += this.line + (i < count - 1 ? cursor.up() : '');\n if (count)\n clear += cursor.left;\n return clear;\n }\n}\n\nmodule.exports = { cursor, scroll, erase, beep };\n","let p = process || {}, argv = p.argv || [], env = p.env || {}\nlet isColorSupported =\n\t!(!!env.NO_COLOR || argv.includes(\"--no-color\")) &&\n\t(!!env.FORCE_COLOR || argv.includes(\"--color\") || p.platform === \"win32\" || ((p.stdout || {}).isTTY && env.TERM !== \"dumb\") || !!env.CI)\n\nlet formatter = (open, close, replace = open) =>\n\tinput => {\n\t\tlet string = \"\" + input, index = string.indexOf(close, open.length)\n\t\treturn ~index ? open + replaceClose(string, close, replace, index) + close : open + string + close\n\t}\n\nlet replaceClose = (string, close, replace, index) => {\n\tlet result = \"\", cursor = 0\n\tdo {\n\t\tresult += string.substring(cursor, index) + replace\n\t\tcursor = index + close.length\n\t\tindex = string.indexOf(close, cursor)\n\t} while (~index)\n\treturn result + string.substring(cursor)\n}\n\nlet createColors = (enabled = isColorSupported) => {\n\tlet f = enabled ? formatter : () => String\n\treturn {\n\t\tisColorSupported: enabled,\n\t\treset: f(\"\\x1b[0m\", \"\\x1b[0m\"),\n\t\tbold: f(\"\\x1b[1m\", \"\\x1b[22m\", \"\\x1b[22m\\x1b[1m\"),\n\t\tdim: f(\"\\x1b[2m\", \"\\x1b[22m\", \"\\x1b[22m\\x1b[2m\"),\n\t\titalic: f(\"\\x1b[3m\", \"\\x1b[23m\"),\n\t\tunderline: f(\"\\x1b[4m\", \"\\x1b[24m\"),\n\t\tinverse: f(\"\\x1b[7m\", \"\\x1b[27m\"),\n\t\thidden: f(\"\\x1b[8m\", \"\\x1b[28m\"),\n\t\tstrikethrough: f(\"\\x1b[9m\", \"\\x1b[29m\"),\n\n\t\tblack: f(\"\\x1b[30m\", \"\\x1b[39m\"),\n\t\tred: f(\"\\x1b[31m\", \"\\x1b[39m\"),\n\t\tgreen: f(\"\\x1b[32m\", \"\\x1b[39m\"),\n\t\tyellow: f(\"\\x1b[33m\", \"\\x1b[39m\"),\n\t\tblue: f(\"\\x1b[34m\", \"\\x1b[39m\"),\n\t\tmagenta: f(\"\\x1b[35m\", \"\\x1b[39m\"),\n\t\tcyan: f(\"\\x1b[36m\", \"\\x1b[39m\"),\n\t\twhite: f(\"\\x1b[37m\", \"\\x1b[39m\"),\n\t\tgray: f(\"\\x1b[90m\", \"\\x1b[39m\"),\n\n\t\tbgBlack: f(\"\\x1b[40m\", \"\\x1b[49m\"),\n\t\tbgRed: f(\"\\x1b[41m\", \"\\x1b[49m\"),\n\t\tbgGreen: f(\"\\x1b[42m\", \"\\x1b[49m\"),\n\t\tbgYellow: f(\"\\x1b[43m\", \"\\x1b[49m\"),\n\t\tbgBlue: f(\"\\x1b[44m\", \"\\x1b[49m\"),\n\t\tbgMagenta: f(\"\\x1b[45m\", \"\\x1b[49m\"),\n\t\tbgCyan: f(\"\\x1b[46m\", \"\\x1b[49m\"),\n\t\tbgWhite: f(\"\\x1b[47m\", \"\\x1b[49m\"),\n\n\t\tblackBright: f(\"\\x1b[90m\", \"\\x1b[39m\"),\n\t\tredBright: f(\"\\x1b[91m\", \"\\x1b[39m\"),\n\t\tgreenBright: f(\"\\x1b[92m\", \"\\x1b[39m\"),\n\t\tyellowBright: f(\"\\x1b[93m\", \"\\x1b[39m\"),\n\t\tblueBright: f(\"\\x1b[94m\", \"\\x1b[39m\"),\n\t\tmagentaBright: f(\"\\x1b[95m\", \"\\x1b[39m\"),\n\t\tcyanBright: f(\"\\x1b[96m\", \"\\x1b[39m\"),\n\t\twhiteBright: f(\"\\x1b[97m\", \"\\x1b[39m\"),\n\n\t\tbgBlackBright: f(\"\\x1b[100m\", \"\\x1b[49m\"),\n\t\tbgRedBright: f(\"\\x1b[101m\", \"\\x1b[49m\"),\n\t\tbgGreenBright: f(\"\\x1b[102m\", \"\\x1b[49m\"),\n\t\tbgYellowBright: f(\"\\x1b[103m\", \"\\x1b[49m\"),\n\t\tbgBlueBright: f(\"\\x1b[104m\", \"\\x1b[49m\"),\n\t\tbgMagentaBright: f(\"\\x1b[105m\", \"\\x1b[49m\"),\n\t\tbgCyanBright: f(\"\\x1b[106m\", \"\\x1b[49m\"),\n\t\tbgWhiteBright: f(\"\\x1b[107m\", \"\\x1b[49m\"),\n\t}\n}\n\nmodule.exports = createColors()\nmodule.exports.createColors = createColors\n","#!/usr/bin/env node\n/**\n * `domflax` CLI bin entry.\n *\n * Thin wrapper over the bundled (private) `@domflax/cli` `main()`. Invoked as `npx domflax …`.\n */\nimport { main } from '@domflax/cli';\n\nmain(process.argv.slice(2));\n","/**\n * @domflax/cli — the real command-line entry point.\n *\n * Wires the transform engine ({@link createTransform}, built from the lower @domflax/* packages — it\n * deliberately never imports the `domflax` meta package, which would create a cycle) to file\n * discovery, OUTPUT SAFETY (Q16), and an optional interactive wizard (Q17). Usable as `npx domflax`\n * via the meta package's bin, and directly as the `domflax-cli` bin.\n */\n\nimport { mkdirSync, readFileSync, writeFileSync } from 'node:fs';\nimport * as path from 'node:path';\n\nimport type { CliOptions } from './options';\nimport { parseInvocation, shouldPrompt, USAGE } from './options';\nimport { destinationFor, isGitClean, planWrites } from './safety';\nimport { createTransform } from './transform';\nimport type { FileStats } from './transform';\nimport { discoverInputs } from './walk';\nimport { unifiedDiff } from './diff';\nimport { runWizard, WIZARD_CANCELLED } from './wizard';\n\n// Re-export the public surface so consumers/tests reach it from the package root.\nexport type { CliOptions, ProviderOption } from './options';\nexport { parseInvocation, shouldPrompt, USAGE, DEFAULT_SAFETY } from './options';\nexport type { WritePlan, WriteMode } from './safety';\nexport { destinationFor, isDisposablePath, isGitClean, planWrites } from './safety';\nexport type { FileResult, FileStats, Transform } from './transform';\nexport { createTransform, buildResolver, builtinPatternNames } from './transform';\nexport { discoverInputs, SUPPORTED_EXTS } from './walk';\nexport { unifiedDiff } from './diff';\n\n/** Outcome of a {@link run}: the process exit code. */\nexport interface RunResult {\n readonly exitCode: number;\n}\n\ninterface Totals {\n files: number;\n changed: number;\n nodesRemoved: number;\n classesSaved: number;\n bytesSaved: number;\n}\n\nfunction addStats(totals: Totals, stats: FileStats, changed: boolean): void {\n totals.files += 1;\n if (changed) totals.changed += 1;\n totals.nodesRemoved += stats.nodesRemoved;\n totals.classesSaved += stats.classesSaved;\n totals.bytesSaved += stats.bytesSaved;\n}\n\nfunction printReport(totals: Totals): void {\n console.log('');\n console.log('domflax report');\n console.log(` files processed : ${totals.files}`);\n console.log(` files changed : ${totals.changed}`);\n console.log(` nodes removed : ${totals.nodesRemoved}`);\n console.log(` classes saved : ${totals.classesSaved}`);\n console.log(` bytes saved : ${totals.bytesSaved}`);\n}\n\n/**\n * Execute a fully-resolved {@link CliOptions}: discover inputs, enforce output safety, transform each\n * file, and either preview (dry-run), write to the mirrored output, or overwrite in place.\n */\nexport async function execute(options: CliOptions): Promise<RunResult> {\n const { files, inputRoot, warnings } = discoverInputs(options.paths);\n for (const w of warnings) console.error(`domflax: ${w}`);\n\n if (files.length === 0) {\n console.error('domflax: no .jsx/.tsx/.html files found for the given paths');\n return { exitCode: 1 };\n }\n\n const projectRoot = options.projectRoot ?? process.cwd();\n const gitClean =\n options.dangerouslyOverwriteSource && !options.noGitCheck ? isGitClean(projectRoot) : true;\n\n const planned = planWrites(options, gitClean);\n if (!planned.ok) {\n console.error(`domflax: ${planned.error}`);\n return { exitCode: 1 };\n }\n const plan = planned.value;\n\n const transform = createTransform(options);\n const totals: Totals = { files: 0, changed: 0, nodesRemoved: 0, classesSaved: 0, bytesSaved: 0 };\n let failures = 0;\n\n for (const file of files) {\n let code: string;\n try {\n code = readFileSync(file, 'utf8');\n } catch (err) {\n console.error(`domflax: cannot read ${file}: ${String((err as Error)?.message ?? err)}`);\n failures += 1;\n continue;\n }\n\n const result = transform.transformFile(code, file);\n addStats(totals, result.stats, result.changed);\n\n if (options.dryRun) {\n const rel = path.relative(inputRoot, file) || path.basename(file);\n if (result.changed) console.log(unifiedDiff(code, result.code, rel));\n else if (!options.report) console.log(` (unchanged) ${rel}`);\n continue;\n }\n\n if (!result.changed) continue;\n\n const target = destinationFor(file, inputRoot, plan);\n if (!target.ok) {\n console.error(`domflax: ${target.error}`);\n failures += 1;\n continue;\n }\n try {\n mkdirSync(path.dirname(target.value), { recursive: true });\n writeFileSync(target.value, result.code, 'utf8');\n console.log(`domflax: wrote ${path.relative(process.cwd(), target.value) || target.value}`);\n } catch (err) {\n console.error(`domflax: cannot write ${target.value}: ${String((err as Error)?.message ?? err)}`);\n failures += 1;\n }\n }\n\n if (options.report) printReport(totals);\n\n if (options.dryRun) console.log('\\ndomflax: dry run — no files were written.');\n\n return { exitCode: failures > 0 ? 1 : 0 };\n}\n\n/**\n * CLI entry point. Parses argv, optionally launches the wizard (TTY + no positionals only), and\n * executes. Sets `process.exitCode`; never throws.\n */\nexport async function main(argv: readonly string[] = process.argv.slice(2)): Promise<void> {\n let options: CliOptions;\n try {\n options = parseInvocation(argv);\n } catch (err) {\n console.error(err instanceof Error ? err.message : String(err));\n console.error(USAGE);\n process.exitCode = 2;\n return;\n }\n\n // Treat a CI environment as non-interactive even if it reports a TTY, so the wizard can never\n // block a pipeline (CI runners commonly set `CI`; cover the usual vendor flags too).\n const inCi =\n !!process.env.CI ||\n !!process.env.CONTINUOUS_INTEGRATION ||\n !!process.env.GITHUB_ACTIONS ||\n !!process.env.GITLAB_CI ||\n !!process.env.BUILDKITE ||\n !!process.env.TF_BUILD;\n const isTty = process.stdout.isTTY === true && !inCi;\n if (shouldPrompt(options, isTty)) {\n const wizardResult = await runWizard(options);\n if (wizardResult === WIZARD_CANCELLED) {\n process.exitCode = 0;\n return;\n }\n options = wizardResult;\n }\n\n if (options.paths.length === 0) {\n console.error('domflax: no input paths given (and not an interactive terminal).');\n console.error(USAGE);\n process.exitCode = 2;\n return;\n }\n\n try {\n const result = await execute(options);\n process.exitCode = result.exitCode;\n } catch (err) {\n console.error(`domflax: ${err instanceof Error ? err.message : String(err)}`);\n process.exitCode = 1;\n }\n}\n\n// NOTE: no self-invocation here. `main()` is invoked exactly once by the published\n// bin wrapper (packages/domflax/src/cli.ts). Auto-running on import caused the CLI\n// to execute twice when this module is bundled into the `domflax` bin.\n","/**\n * @domflax/cli — invocation parsing & the shared options object.\n *\n * Both the flag parser ({@link parseInvocation}) and the interactive wizard build the SAME\n * {@link CliOptions} object (DESIGN-DECISIONS Q17), so the rest of the CLI is agnostic to how the\n * user expressed their intent.\n */\n\nimport { parseArgs } from 'node:util';\n\nimport type { SafetyLevel } from '@domflax/core';\n\n/** How class names resolve to computed styles. */\nexport type ProviderOption = 'auto' | 'tailwind' | 'custom';\n\n/** The fully-resolved request the CLI executes — produced by flags OR the wizard. */\nexport interface CliOptions {\n /** Positional sources: folders (recursive), globs, or individual files. */\n readonly paths: readonly string[];\n /** Output directory (`--out`); `null` ⇒ default `./domflax-out` (unless overwriting source). */\n readonly out: string | null;\n /** Style provider to resolve author tokens against. */\n readonly provider: ProviderOption;\n /** Stylesheet files feeding the custom-CSS resolver (`--css`). */\n readonly css: readonly string[];\n /** Compute edits + print per-file diffs but write nothing. */\n readonly dryRun: boolean;\n /** Print a summary (files, nodes removed, classes saved, bytes saved). */\n readonly report: boolean;\n /** Permit overwriting source in place (still gated on a clean git tree). */\n readonly dangerouslyOverwriteSource: boolean;\n /** Skip the clean-git-tree gate guarding `--dangerously-overwrite-source`. */\n readonly noGitCheck: boolean;\n /** Whether the interactive wizard may launch (false for `--no-interactive`/`--yes`). */\n readonly interactive: boolean;\n /** Pass names to run; `null` ⇒ every built-in pattern (the flag path never narrows). */\n readonly passes: readonly string[] | null;\n /** Optimization aggressiveness handed to the pass manager (0 lint … 3 aggressive). */\n readonly safety: SafetyLevel;\n /** Root to resolve the Tailwind/postcss engines from; `null` ⇒ `process.cwd()`. */\n readonly projectRoot: string | null;\n}\n\n/** The CLI default optimization safety level (D-level 2 = default). */\nexport const DEFAULT_SAFETY: SafetyLevel = 2;\n\nconst DEFAULT_PROVIDER: ProviderOption = 'auto';\n\nfunction isProvider(value: string): value is ProviderOption {\n return value === 'auto' || value === 'tailwind' || value === 'custom';\n}\n\nfunction toSafety(raw: string | undefined): SafetyLevel {\n if (raw === undefined) return DEFAULT_SAFETY;\n const n = Number(raw);\n if (n === 0 || n === 1 || n === 2 || n === 3) return n;\n throw new Error(`domflax: invalid --safety \"${raw}\" (expected 0, 1, 2 or 3)`);\n}\n\n/**\n * Parse argv (excluding `node` + script path) into a validated {@link CliOptions}. A missing\n * positional is NOT an error here — a no-args TTY run is handled upstream by launching the wizard.\n */\nexport function parseInvocation(argv: readonly string[]): CliOptions {\n const { values, positionals } = parseArgs({\n args: argv as string[],\n allowPositionals: true,\n options: {\n out: { type: 'string' },\n provider: { type: 'string' },\n css: { type: 'string', multiple: true },\n 'dry-run': { type: 'boolean', default: false },\n report: { type: 'boolean', default: false },\n 'dangerously-overwrite-source': { type: 'boolean', default: false },\n 'no-git-check': { type: 'boolean', default: false },\n 'no-interactive': { type: 'boolean', default: false },\n yes: { type: 'boolean', short: 'y', default: false },\n safety: { type: 'string' },\n 'project-root': { type: 'string' },\n },\n });\n\n const provider = values.provider ?? DEFAULT_PROVIDER;\n if (!isProvider(provider)) {\n throw new Error(`domflax: unknown --provider \"${provider}\" (expected auto|tailwind|custom)`);\n }\n\n return {\n paths: positionals,\n out: values.out ?? null,\n provider,\n css: values.css ?? [],\n dryRun: values['dry-run'] === true,\n report: values.report === true,\n dangerouslyOverwriteSource: values['dangerously-overwrite-source'] === true,\n noGitCheck: values['no-git-check'] === true,\n interactive: values['no-interactive'] !== true && values.yes !== true,\n passes: null,\n safety: toSafety(values.safety),\n projectRoot: values['project-root'] ?? null,\n };\n}\n\n/** True iff the interactive wizard should launch: a TTY, no positionals, and not opted out. */\nexport function shouldPrompt(options: CliOptions, isTty: boolean): boolean {\n return isTty && options.interactive && options.paths.length === 0;\n}\n\nexport const USAGE: string = [\n 'Usage: domflax [paths...] [options]',\n '',\n 'Optimizes .jsx/.tsx files (flatten redundant wrappers + compress class sets).',\n 'Source is READ-ONLY by default — output goes to --out or ./domflax-out.',\n '',\n 'Arguments:',\n ' paths folders (recursive), globs, or files',\n '',\n 'Options:',\n ' --out <dir> write optimized files here, mirroring structure',\n ' --provider <auto|tailwind|custom> style resolver (default: auto)',\n ' --css <file...> stylesheets feeding the custom-CSS provider',\n ' --dry-run print per-file diffs; write nothing',\n ' --report print a summary of what changed',\n ' --dangerously-overwrite-source overwrite source in place (needs a clean git tree)',\n ' --no-git-check skip the clean-git-tree gate',\n ' --safety <0|1|2|3> optimization aggressiveness (default: 2)',\n ' --yes, --no-interactive never launch the wizard (CI-safe)',\n '',\n 'With no paths in an interactive terminal, a guided wizard launches.',\n].join('\\n');\n","/**\n * @domflax/cli — OUTPUT SAFETY (DESIGN-DECISIONS Q16, ARCHITECTURE §16.10).\n *\n * Source is READ-ONLY by default. Writes land in `--out`/`./domflax-out` (mirroring structure), or in\n * place ONLY inside disposable build dirs (dist/build/out/.next). Overwriting real source in place\n * requires `--dangerously-overwrite-source` AND a clean git tree (skippable with `--no-git-check`).\n * `--dry-run` writes nothing.\n */\n\nimport { execFileSync } from 'node:child_process';\nimport * as path from 'node:path';\n\nimport type { CliOptions } from './options';\n\n/** Disposable build directories where in-place overwrite is always safe (they are regenerated). */\nconst DISPOSABLE_DIRS: ReadonlySet<string> = new Set(['dist', 'build', 'out', '.next']);\n\n/** True when any path segment is a disposable build dir, so the file is a regenerable artifact. */\nexport function isDisposablePath(file: string): boolean {\n return path\n .resolve(file)\n .split(path.sep)\n .some((seg) => DISPOSABLE_DIRS.has(seg));\n}\n\nexport type WriteMode = 'out-dir' | 'overwrite-source';\n\n/** Invocation-level write plan shared by every file. */\nexport interface WritePlan {\n readonly mode: WriteMode;\n /** Resolved absolute output dir for `out-dir` mode; `null` when overwriting source in place. */\n readonly outDir: string | null;\n}\n\nexport type Result<T> = { readonly ok: true; readonly value: T } | { readonly ok: false; readonly error: string };\n\n/** Run `git status --porcelain`; clean ⇒ true. A non-repo / missing git ⇒ false (fail safe). */\nexport function isGitClean(cwd: string): boolean {\n try {\n const out = execFileSync('git', ['status', '--porcelain'], {\n cwd,\n encoding: 'utf8',\n stdio: ['ignore', 'pipe', 'ignore'],\n });\n return out.trim().length === 0;\n } catch {\n return false;\n }\n}\n\n/**\n * Resolve the invocation-level {@link WritePlan}. In-place source overwrite is refused unless the\n * danger flag is set and (the git tree is clean OR the git check is waived).\n */\nexport function planWrites(options: CliOptions, gitClean: boolean): Result<WritePlan> {\n if (options.dangerouslyOverwriteSource) {\n if (!options.noGitCheck && !gitClean) {\n return {\n ok: false,\n error:\n 'refusing --dangerously-overwrite-source: git working tree is not clean. ' +\n 'Commit or stash first, or pass --no-git-check to override.',\n };\n }\n return { ok: true, value: { mode: 'overwrite-source', outDir: null } };\n }\n const outDir = path.resolve(options.out ?? 'domflax-out');\n return { ok: true, value: { mode: 'out-dir', outDir } };\n}\n\n/**\n * Compute the destination path for one source file under a {@link WritePlan}. Refuses when an\n * `out-dir` destination resolves onto the source file itself and that file is NOT a disposable build\n * artifact — that would be an unsanctioned in-place source overwrite (the Q16 guard).\n */\nexport function destinationFor(file: string, inputRoot: string, plan: WritePlan): Result<string> {\n const absFile = path.resolve(file);\n\n if (plan.mode === 'overwrite-source') {\n // Already gated by planWrites (danger flag + clean-git / waiver).\n return { ok: true, value: absFile };\n }\n\n const outDir = plan.outDir!;\n const rel = path.relative(inputRoot, absFile);\n // Inputs outside the mirror root collapse to their basename so we never escape outDir with `..`.\n const safeRel = rel === '' || rel.startsWith('..') || path.isAbsolute(rel) ? path.basename(absFile) : rel;\n const dest = path.join(outDir, safeRel);\n\n if (path.resolve(dest) === absFile && !isDisposablePath(absFile)) {\n return {\n ok: false,\n error:\n `refusing to overwrite source file ${absFile}: the output path resolves onto the source. ` +\n 'Choose a different --out, or pass --dangerously-overwrite-source (with a clean git tree).',\n };\n }\n return { ok: true, value: dest };\n}\n","/**\n * @domflax/cli — the single-file transform engine.\n *\n * Built directly from the LOWER packages (core + frontend-jsx + resolver-tailwind/resolver-css +\n * patterns + pattern-kit). It deliberately does NOT import the `domflax` meta package: domflax's bin\n * imports `@domflax/cli`, so importing domflax here would form a dependency cycle. The pipeline\n * mirrors domflax's own: parse (JSX→IR, resolving each element's static classes through the chosen\n * resolver) → runPasses(builtinPatterns) → reverse-emit computed styles back to class tokens → print.\n *\n * Non-jsx/tsx files (including `.html`, which has no wired frontend yet) pass through unchanged.\n */\n\nimport {\n buildSelectorIndex,\n createSyntheticSink,\n runPasses,\n syncClassesFromComputed,\n} from '@domflax/core';\nimport type {\n ApplyContext,\n FileKind,\n FlattenGate,\n IRDocument,\n Pass,\n PassCategory,\n PassPhase,\n Pattern,\n SafetyLevel,\n StyleResolver,\n} from '@domflax/core';\nimport { createJsxBackend, createJsxFrontend } from '@domflax/frontend-jsx';\nimport { normalizer } from '@domflax/pattern-kit';\nimport { builtinPatterns } from '@domflax/patterns';\nimport { createCssResolver } from '@domflax/resolver-css';\nimport { createTailwindResolver } from '@domflax/resolver-tailwind';\n\nimport type { CliOptions, ProviderOption } from './options';\n\n/* ───────────────────────── per-file result + stats ───────────────────────── */\n\nexport interface FileStats {\n readonly nodesIn: number;\n readonly nodesOut: number;\n readonly nodesRemoved: number;\n readonly classesBefore: number;\n readonly classesAfter: number;\n readonly classesSaved: number;\n readonly bytesBefore: number;\n readonly bytesAfter: number;\n readonly bytesSaved: number;\n}\n\nexport interface FileResult {\n readonly code: string;\n readonly changed: boolean;\n readonly passthrough: boolean;\n readonly stats: FileStats;\n}\n\n/** A configured transform — holds the resolver (and its cached engine) across files. */\nexport interface Transform {\n readonly resolver: StyleResolver;\n /**\n * SYNC transform — fully static (gate `'provably-safe'`); never changes rendering and never launches\n * a browser. Only provably layout-neutral flattens are applied.\n */\n transformFile(code: string, id: string): FileResult;\n}\n\n/* ───────────────────────── resolver wiring ───────────────────────── */\n\n/**\n * Build the {@link StyleResolver} for the chosen provider. The heavy engine each wraps (Tailwind v3 /\n * postcss) is loaded LAZILY at construction and resolved from the user's PROJECT via the factories'\n * `projectRoot` option — never from where the CLI bundle happens to live.\n */\nexport function buildResolver(provider: ProviderOption, css: readonly string[], projectRoot: string): StyleResolver {\n if (provider === 'custom') {\n return createCssResolver([], { files: css, projectRoot });\n }\n // 'auto' and 'tailwind' both resolve against the project's Tailwind engine.\n return createTailwindResolver({ projectRoot });\n}\n\n/* ───────────────────────── pass assembly ───────────────────────── */\n\n/** Group the flat pattern list into one {@link Pass} per {@link PassPhase} (derived from category). */\nfunction buildPasses(patterns: readonly Pattern[]): Pass[] {\n const byPhase = new Map<PassPhase, Pattern[]>();\n for (const p of patterns) {\n const phase = (p.category.split('/', 1)[0] ?? 'flatten') as PassPhase;\n let bucket = byPhase.get(phase);\n if (!bucket) {\n bucket = [];\n byPhase.set(phase, bucket);\n }\n bucket.push(p);\n }\n const passes: Pass[] = [];\n for (const [phase, pats] of byPhase) {\n passes.push({ phase, category: `${phase}/builtin` as PassCategory, patterns: pats });\n }\n return passes;\n}\n\n/** Select the active patterns: every built-in unless the caller narrowed by name (the wizard does). */\nfunction selectPatterns(names: readonly string[] | null): readonly Pattern[] {\n if (names === null) return builtinPatterns;\n const set = new Set(names);\n return builtinPatterns.filter((p) => set.has(p.name));\n}\n\n/* ───────────────────────── file kind + token counting ───────────────────────── */\n\n/** `.tsx`/`.jsx` ⇒ the matching {@link FileKind}; anything else ⇒ null (no JSX frontend). */\nfunction jsxKindOf(id: string): FileKind | null {\n const clean = id.split('?', 1)[0] ?? id;\n const lower = clean.toLowerCase();\n if (lower.endsWith('.tsx')) return 'tsx';\n if (lower.endsWith('.jsx')) return 'jsx';\n return null;\n}\n\n/** Rough class-token count for the `--report` summary (provider-independent, string-level). */\nfunction countClassTokens(code: string): number {\n let total = 0;\n const re = /\\b(?:className|class)\\s*=\\s*\"([^\"]*)\"/g;\n let m: RegExpExecArray | null;\n while ((m = re.exec(code)) !== null) {\n total += m[1]!.split(/\\s+/).filter((t) => t.length > 0).length;\n }\n return total;\n}\n\nfunction bytes(s: string): number {\n return Buffer.byteLength(s, 'utf8');\n}\n\nfunction passthroughResult(code: string): FileResult {\n return {\n code,\n changed: false,\n passthrough: true,\n stats: {\n nodesIn: 0,\n nodesOut: 0,\n nodesRemoved: 0,\n classesBefore: 0,\n classesAfter: 0,\n classesSaved: 0,\n bytesBefore: bytes(code),\n bytesAfter: bytes(code),\n bytesSaved: 0,\n },\n };\n}\n\n/* ───────────────────────── the transform ───────────────────────── */\n\n/**\n * Construct a transform for the given options. The resolver (and its engine) is built once and reused\n * across every file. With `provider: 'tailwind'|'auto'`, if Tailwind cannot be resolved from the\n * project the resolver degrades to resolving nothing — transforms then pass through unchanged.\n */\n/** Parsed + authorized doc and the apply context, shared by the sync + async transform paths. */\ninterface PreparedFile {\n readonly doc: IRDocument;\n readonly ctx: ApplyContext;\n readonly passes: readonly Pass[];\n readonly nodesIn: number;\n}\n\nexport function createTransform(options: CliOptions): Transform {\n const projectRoot = options.projectRoot ?? process.cwd();\n const resolver = buildResolver(options.provider, options.css, projectRoot);\n const patterns = selectPatterns(options.passes);\n\n /** PARSE (JSX → IR, classes onto `computed`) + AUTHORIZE + build the apply context for `gate`. */\n function prepare(code: string, id: string, kind: FileKind, gate: FlattenGate): PreparedFile {\n const parsed = createJsxFrontend().parse(code, {\n id,\n kind,\n resolver,\n normalizer,\n config: {},\n onDiagnostic: () => {},\n });\n const doc = parsed.doc;\n const nodesIn = doc.nodes.size;\n for (const node of doc.nodes.values()) node.meta.safetyFloor = 3;\n const ctx: ApplyContext = {\n doc,\n safetyCeiling: options.safety as SafetyLevel,\n normalizer,\n // Real CSS-selector-safety index from the active resolver (custom-CSS reports combinator /\n // structural-pseudo coupling; Tailwind has none → null index, behaviour unchanged).\n selectors: buildSelectorIndex(doc, resolver),\n resolver,\n gate,\n };\n return { doc, ctx, passes: buildPasses(patterns), nodesIn };\n }\n\n /** REVERSE-EMIT + PRINT the optimized doc, then assemble the per-file result + stats. */\n function finish(code: string, optimized: IRDocument, id: string, nodesIn: number): FileResult {\n syncClassesFromComputed(optimized, resolver, normalizer);\n const printed = createJsxBackend().print(\n optimized,\n { moduleId: id, ops: [], provenance: new Map() },\n { normalizer, resolver, sink: createSyntheticSink(), eol: '\\n', onDiagnostic: () => {} },\n );\n const out = printed.code;\n const nodesOut = optimized.nodes.size;\n const classesBefore = countClassTokens(code);\n const classesAfter = countClassTokens(out);\n return {\n code: out,\n changed: out !== code,\n passthrough: false,\n stats: {\n nodesIn,\n nodesOut,\n nodesRemoved: Math.max(0, nodesIn - nodesOut),\n classesBefore,\n classesAfter,\n classesSaved: Math.max(0, classesBefore - classesAfter),\n bytesBefore: bytes(code),\n bytesAfter: bytes(out),\n bytesSaved: bytes(code) - bytes(out),\n },\n };\n }\n\n return {\n resolver,\n transformFile(code: string, id: string): FileResult {\n const kind = jsxKindOf(id);\n if (kind === null) return passthroughResult(code);\n const { doc, ctx, passes, nodesIn } = prepare(code, id, kind, 'provably-safe');\n const { doc: optimized } = runPasses(doc, passes, ctx);\n return finish(code, optimized, id, nodesIn);\n },\n };\n}\n\n/** The names of every built-in pattern, for the wizard's multiselect. */\nexport function builtinPatternNames(): readonly string[] {\n return builtinPatterns.map((p) => p.name);\n}\n","/**\n * @domflax/cli — input discovery.\n *\n * A positional may be a folder (recursively scanned for .jsx/.tsx/.html), a literal file, or a glob.\n * The `inputRoot` is the folder when a single directory is given (so `--out` can mirror structure),\n * otherwise `process.cwd()`.\n */\n\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\n\n/** Extensions the CLI will attempt to optimize (`.html` currently passes through). */\nexport const SUPPORTED_EXTS: readonly string[] = ['.jsx', '.tsx', '.html', '.htm'];\n\n/** Directories never descended into during a recursive folder scan. */\nconst SKIP_DIRS: ReadonlySet<string> = new Set(['node_modules', '.git', 'domflax-out']);\n\nfunction isSupported(file: string): boolean {\n const lower = file.toLowerCase();\n return SUPPORTED_EXTS.some((ext) => lower.endsWith(ext));\n}\n\nfunction hasGlobMagic(p: string): boolean {\n return /[*?[\\]{}]/.test(p);\n}\n\n/** Recursively collect supported files under a directory. */\nfunction walkDir(dir: string, out: string[]): void {\n let entries: fs.Dirent[];\n try {\n entries = fs.readdirSync(dir, { withFileTypes: true });\n } catch {\n return;\n }\n for (const entry of entries) {\n const full = path.join(dir, entry.name);\n if (entry.isDirectory()) {\n if (SKIP_DIRS.has(entry.name)) continue;\n walkDir(full, out);\n } else if (entry.isFile() && isSupported(entry.name)) {\n out.push(full);\n }\n }\n}\n\n/** Optional `fs.globSync` (Node 22+); accessed defensively so older runtimes degrade gracefully. */\ntype GlobSync = (pattern: string) => string[];\nfunction globSyncMaybe(): GlobSync | null {\n const g = (fs as { globSync?: GlobSync }).globSync;\n return typeof g === 'function' ? g : null;\n}\n\nexport interface Discovery {\n readonly files: readonly string[];\n readonly inputRoot: string;\n readonly warnings: readonly string[];\n}\n\n/**\n * Resolve positionals into a concrete, de-duplicated file list plus the mirror root for `--out`.\n */\nexport function discoverInputs(paths: readonly string[]): Discovery {\n const files: string[] = [];\n const warnings: string[] = [];\n const seen = new Set<string>();\n const push = (f: string): void => {\n const abs = path.resolve(f);\n if (!seen.has(abs)) {\n seen.add(abs);\n files.push(abs);\n }\n };\n\n let inputRoot = process.cwd();\n if (paths.length === 1) {\n try {\n if (fs.statSync(paths[0]!).isDirectory()) inputRoot = path.resolve(paths[0]!);\n } catch {\n /* not a directory / missing — handled per-path below */\n }\n }\n\n for (const p of paths) {\n let stat: fs.Stats | null = null;\n try {\n stat = fs.statSync(p);\n } catch {\n stat = null;\n }\n\n if (stat?.isDirectory()) {\n // walkDir pushes directly; the final de-dupe pass below collapses any overlap.\n walkDir(path.resolve(p), files);\n continue;\n }\n if (stat?.isFile()) {\n push(p);\n continue;\n }\n if (hasGlobMagic(p)) {\n const glob = globSyncMaybe();\n if (!glob) {\n warnings.push(`glob not supported on this Node version, skipped: ${p}`);\n continue;\n }\n const matches = glob(p).filter(isSupported);\n if (matches.length === 0) warnings.push(`no files matched: ${p}`);\n for (const m of matches) push(m);\n continue;\n }\n warnings.push(`no such file or directory: ${p}`);\n }\n\n // De-duplicate (walkDir bypassed `push`).\n const deduped: string[] = [];\n const finalSeen = new Set<string>();\n for (const f of files) {\n const abs = path.resolve(f);\n if (!finalSeen.has(abs)) {\n finalSeen.add(abs);\n deduped.push(abs);\n }\n }\n\n return { files: deduped, inputRoot, warnings };\n}\n","/**\n * @domflax/cli — a tiny, dependency-free unified-ish diff for `--dry-run` previews.\n *\n * Trims the common leading/trailing lines and prints the differing middle as `-old` / `+new`. This is\n * a readable preview, not a minimal edit script (the backend re-prints rather than splices).\n */\n\nexport function unifiedDiff(before: string, after: string, label: string): string {\n if (before === after) return ` (unchanged) ${label}`;\n\n const a = before.split('\\n');\n const b = after.split('\\n');\n\n let prefix = 0;\n while (prefix < a.length && prefix < b.length && a[prefix] === b[prefix]) prefix += 1;\n\n let suffix = 0;\n while (\n suffix < a.length - prefix &&\n suffix < b.length - prefix &&\n a[a.length - 1 - suffix] === b[b.length - 1 - suffix]\n ) {\n suffix += 1;\n }\n\n const removed = a.slice(prefix, a.length - suffix);\n const added = b.slice(prefix, b.length - suffix);\n\n const lines: string[] = [`--- a/${label}`, `+++ b/${label}`];\n if (prefix > 0) lines.push(`@@ -${prefix + 1} +${prefix + 1} @@`);\n for (const r of removed) lines.push(`-${r}`);\n for (const ad of added) lines.push(`+${ad}`);\n return lines.join('\\n');\n}\n","/**\n * @domflax/cli — the interactive wizard (DESIGN-DECISIONS Q17).\n *\n * Launched only on a no-args run in a TTY (gated by the caller via {@link shouldPrompt}); it NEVER\n * runs under `--no-interactive`/`--yes` or a non-TTY, so it can't hang CI. It produces the SAME\n * {@link CliOptions} object the flag parser does. A cancel at any step aborts cleanly.\n */\n\nimport { cancel, intro, isCancel, multiselect, outro, select, text } from '@clack/prompts';\n\nimport { detectCssFiles, detectInputDirs } from './detect';\nimport type { CliOptions, ProviderOption } from './options';\nimport { DEFAULT_SAFETY } from './options';\nimport { builtinPatternNames } from './transform';\n\n/**\n * Sentinel option value for \"let me type a path instead\" in the suggested-input select. A string\n * (not a Symbol) so it survives the {@link cancelled} symbol-narrowing guard; the leading space\n * makes it impossible to collide with a real detected directory name (always from a fixed list).\n */\nconst OTHER_INPUT = '\u0000domflax.other';\n\n/** Sentinel returned when the user cancels the wizard. */\nexport const WIZARD_CANCELLED = Symbol('domflax.wizard.cancelled');\n\nfunction cancelled<T>(value: T | symbol): value is symbol {\n return isCancel(value);\n}\n\n/**\n * Run the guided wizard, returning a fully-built {@link CliOptions} or {@link WIZARD_CANCELLED}.\n * `base` carries any flags the user also passed (defaults preserved for everything not asked).\n */\nexport async function runWizard(base: CliOptions): Promise<CliOptions | typeof WIZARD_CANCELLED> {\n intro('domflax — optimize your markup');\n\n const root = base.projectRoot ?? process.cwd();\n\n // Offer auto-detected source folders as a pick-list (with a free-text escape); otherwise ask\n // for a path directly. Detection is a convenience only — the result is still a plain path string.\n const detectedInputs = detectInputDirs(root);\n let inputPath: string;\n if (detectedInputs.length > 0) {\n const defaultInput = detectedInputs.includes('src') ? 'src' : detectedInputs[0]!;\n const choice = await select<string>({\n message: 'Which folder should domflax optimize?',\n options: [\n ...detectedInputs.map((dir) => ({ value: dir, label: dir, hint: 'detected' })),\n { value: OTHER_INPUT, label: 'Other (type a path)…' },\n ],\n initialValue: defaultInput,\n });\n if (cancelled(choice)) return done();\n if (choice === OTHER_INPUT) {\n const typed = await text({\n message: 'Which folder, glob, or file should domflax optimize?',\n placeholder: 'src',\n defaultValue: 'src',\n });\n if (cancelled(typed)) return done();\n inputPath = String(typed);\n } else {\n inputPath = String(choice);\n }\n } else {\n const typed = await text({\n message: 'Which folder, glob, or file should domflax optimize?',\n placeholder: 'src',\n defaultValue: 'src',\n });\n if (cancelled(typed)) return done();\n inputPath = String(typed);\n }\n\n const outputMode = await select({\n message: 'Where should the optimized files go?',\n options: [\n { value: 'out', label: 'A new ./domflax-out folder', hint: 'safe default' },\n { value: 'out-custom', label: 'A custom output folder' },\n { value: 'dry-run', label: 'Preview only (dry run)', hint: 'writes nothing' },\n { value: 'overwrite', label: 'Overwrite the source in place', hint: 'dangerous — needs clean git' },\n ],\n initialValue: 'out',\n });\n if (cancelled(outputMode)) return done();\n\n let out: string | null = null;\n let dryRun = false;\n let dangerouslyOverwriteSource = false;\n if (outputMode === 'out-custom') {\n const dir = await text({\n message: 'Output folder:',\n placeholder: 'domflax-out',\n defaultValue: 'domflax-out',\n });\n if (cancelled(dir)) return done();\n out = String(dir);\n } else if (outputMode === 'dry-run') {\n dryRun = true;\n } else if (outputMode === 'overwrite') {\n dangerouslyOverwriteSource = true;\n }\n\n const allPasses = builtinPatternNames();\n const passSelection = await multiselect({\n message: 'Which optimization passes should run?',\n options: allPasses.map((name) => ({ value: name, label: name })),\n initialValues: [...allPasses],\n required: true,\n });\n if (cancelled(passSelection)) return done();\n const passes = passSelection as string[];\n\n const provider = await select<ProviderOption>({\n message: 'How should class names resolve to styles?',\n options: [\n { value: 'auto', label: 'Auto (Tailwind)', hint: 'default' },\n { value: 'tailwind', label: 'Tailwind' },\n { value: 'custom', label: 'Custom CSS files' },\n ],\n initialValue: 'auto',\n });\n if (cancelled(provider)) return done();\n\n let css: readonly string[] = base.css;\n if (provider === 'custom') {\n // Auto-detect stylesheets and pre-check them all (auto-used by default); the user unchecks any\n // they want to exclude. With nothing detected, fall back to free-text entry.\n const detectedCss = detectCssFiles(root);\n if (detectedCss.length > 0) {\n const picked = await multiselect({\n message: 'Which CSS files should resolve your classes? (all detected files are pre-selected)',\n options: detectedCss.map((file) => ({ value: file, label: file })),\n initialValues: [...detectedCss],\n required: false,\n });\n if (cancelled(picked)) return done();\n css = picked as string[];\n } else {\n const cssInput = await text({\n message: 'CSS files (space-separated):',\n placeholder: 'src/styles.css',\n });\n if (cancelled(cssInput)) return done();\n css = String(cssInput)\n .split(/\\s+/)\n .filter((s) => s.length > 0);\n }\n }\n\n outro('Ready — running domflax.');\n\n return {\n ...base,\n paths: [inputPath],\n out,\n provider: provider as ProviderOption,\n css,\n dryRun,\n dangerouslyOverwriteSource,\n passes: passes.length === allPasses.length ? null : passes,\n safety: base.safety ?? DEFAULT_SAFETY,\n };\n\n function done(): typeof WIZARD_CANCELLED {\n cancel('Cancelled — nothing was written.');\n return WIZARD_CANCELLED;\n }\n}\n","export default function ansiRegex({onlyFirst = false} = {}) {\n\t// Valid string terminator sequences are BEL, ESC\\, and 0x9c\n\tconst ST = '(?:\\\\u0007|\\\\u001B\\\\u005C|\\\\u009C)';\n\tconst pattern = [\n\t\t`[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]+)*|[a-zA-Z\\\\d]+(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?${ST})`,\n\t\t'(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PR-TZcf-nq-uy=><~]))',\n\t].join('|');\n\n\treturn new RegExp(pattern, onlyFirst ? undefined : 'g');\n}\n","import ansiRegex from 'ansi-regex';\n\nconst regex = ansiRegex();\n\nexport default function stripAnsi(string) {\n\tif (typeof string !== 'string') {\n\t\tthrow new TypeError(`Expected a \\`string\\`, got \\`${typeof string}\\``);\n\t}\n\n\t// Even though the regex is global, we don't need to reset the `.lastIndex`\n\t// because unlike `.exec()` and `.test()`, `.replace()` does it automatically\n\t// and doing it manually has a performance penalty.\n\treturn string.replace(regex, '');\n}\n","var eaw = {};\n\nif ('undefined' == typeof module) {\n window.eastasianwidth = eaw;\n} else {\n module.exports = eaw;\n}\n\neaw.eastAsianWidth = function(character) {\n var x = character.charCodeAt(0);\n var y = (character.length == 2) ? character.charCodeAt(1) : 0;\n var codePoint = x;\n if ((0xD800 <= x && x <= 0xDBFF) && (0xDC00 <= y && y <= 0xDFFF)) {\n x &= 0x3FF;\n y &= 0x3FF;\n codePoint = (x << 10) | y;\n codePoint += 0x10000;\n }\n\n if ((0x3000 == codePoint) ||\n (0xFF01 <= codePoint && codePoint <= 0xFF60) ||\n (0xFFE0 <= codePoint && codePoint <= 0xFFE6)) {\n return 'F';\n }\n if ((0x20A9 == codePoint) ||\n (0xFF61 <= codePoint && codePoint <= 0xFFBE) ||\n (0xFFC2 <= codePoint && codePoint <= 0xFFC7) ||\n (0xFFCA <= codePoint && codePoint <= 0xFFCF) ||\n (0xFFD2 <= codePoint && codePoint <= 0xFFD7) ||\n (0xFFDA <= codePoint && codePoint <= 0xFFDC) ||\n (0xFFE8 <= codePoint && codePoint <= 0xFFEE)) {\n return 'H';\n }\n if ((0x1100 <= codePoint && codePoint <= 0x115F) ||\n (0x11A3 <= codePoint && codePoint <= 0x11A7) ||\n (0x11FA <= codePoint && codePoint <= 0x11FF) ||\n (0x2329 <= codePoint && codePoint <= 0x232A) ||\n (0x2E80 <= codePoint && codePoint <= 0x2E99) ||\n (0x2E9B <= codePoint && codePoint <= 0x2EF3) ||\n (0x2F00 <= codePoint && codePoint <= 0x2FD5) ||\n (0x2FF0 <= codePoint && codePoint <= 0x2FFB) ||\n (0x3001 <= codePoint && codePoint <= 0x303E) ||\n (0x3041 <= codePoint && codePoint <= 0x3096) ||\n (0x3099 <= codePoint && codePoint <= 0x30FF) ||\n (0x3105 <= codePoint && codePoint <= 0x312D) ||\n (0x3131 <= codePoint && codePoint <= 0x318E) ||\n (0x3190 <= codePoint && codePoint <= 0x31BA) ||\n (0x31C0 <= codePoint && codePoint <= 0x31E3) ||\n (0x31F0 <= codePoint && codePoint <= 0x321E) ||\n (0x3220 <= codePoint && codePoint <= 0x3247) ||\n (0x3250 <= codePoint && codePoint <= 0x32FE) ||\n (0x3300 <= codePoint && codePoint <= 0x4DBF) ||\n (0x4E00 <= codePoint && codePoint <= 0xA48C) ||\n (0xA490 <= codePoint && codePoint <= 0xA4C6) ||\n (0xA960 <= codePoint && codePoint <= 0xA97C) ||\n (0xAC00 <= codePoint && codePoint <= 0xD7A3) ||\n (0xD7B0 <= codePoint && codePoint <= 0xD7C6) ||\n (0xD7CB <= codePoint && codePoint <= 0xD7FB) ||\n (0xF900 <= codePoint && codePoint <= 0xFAFF) ||\n (0xFE10 <= codePoint && codePoint <= 0xFE19) ||\n (0xFE30 <= codePoint && codePoint <= 0xFE52) ||\n (0xFE54 <= codePoint && codePoint <= 0xFE66) ||\n (0xFE68 <= codePoint && codePoint <= 0xFE6B) ||\n (0x1B000 <= codePoint && codePoint <= 0x1B001) ||\n (0x1F200 <= codePoint && codePoint <= 0x1F202) ||\n (0x1F210 <= codePoint && codePoint <= 0x1F23A) ||\n (0x1F240 <= codePoint && codePoint <= 0x1F248) ||\n (0x1F250 <= codePoint && codePoint <= 0x1F251) ||\n (0x20000 <= codePoint && codePoint <= 0x2F73F) ||\n (0x2B740 <= codePoint && codePoint <= 0x2FFFD) ||\n (0x30000 <= codePoint && codePoint <= 0x3FFFD)) {\n return 'W';\n }\n if ((0x0020 <= codePoint && codePoint <= 0x007E) ||\n (0x00A2 <= codePoint && codePoint <= 0x00A3) ||\n (0x00A5 <= codePoint && codePoint <= 0x00A6) ||\n (0x00AC == codePoint) ||\n (0x00AF == codePoint) ||\n (0x27E6 <= codePoint && codePoint <= 0x27ED) ||\n (0x2985 <= codePoint && codePoint <= 0x2986)) {\n return 'Na';\n }\n if ((0x00A1 == codePoint) ||\n (0x00A4 == codePoint) ||\n (0x00A7 <= codePoint && codePoint <= 0x00A8) ||\n (0x00AA == codePoint) ||\n (0x00AD <= codePoint && codePoint <= 0x00AE) ||\n (0x00B0 <= codePoint && codePoint <= 0x00B4) ||\n (0x00B6 <= codePoint && codePoint <= 0x00BA) ||\n (0x00BC <= codePoint && codePoint <= 0x00BF) ||\n (0x00C6 == codePoint) ||\n (0x00D0 == codePoint) ||\n (0x00D7 <= codePoint && codePoint <= 0x00D8) ||\n (0x00DE <= codePoint && codePoint <= 0x00E1) ||\n (0x00E6 == codePoint) ||\n (0x00E8 <= codePoint && codePoint <= 0x00EA) ||\n (0x00EC <= codePoint && codePoint <= 0x00ED) ||\n (0x00F0 == codePoint) ||\n (0x00F2 <= codePoint && codePoint <= 0x00F3) ||\n (0x00F7 <= codePoint && codePoint <= 0x00FA) ||\n (0x00FC == codePoint) ||\n (0x00FE == codePoint) ||\n (0x0101 == codePoint) ||\n (0x0111 == codePoint) ||\n (0x0113 == codePoint) ||\n (0x011B == codePoint) ||\n (0x0126 <= codePoint && codePoint <= 0x0127) ||\n (0x012B == codePoint) ||\n (0x0131 <= codePoint && codePoint <= 0x0133) ||\n (0x0138 == codePoint) ||\n (0x013F <= codePoint && codePoint <= 0x0142) ||\n (0x0144 == codePoint) ||\n (0x0148 <= codePoint && codePoint <= 0x014B) ||\n (0x014D == codePoint) ||\n (0x0152 <= codePoint && codePoint <= 0x0153) ||\n (0x0166 <= codePoint && codePoint <= 0x0167) ||\n (0x016B == codePoint) ||\n (0x01CE == codePoint) ||\n (0x01D0 == codePoint) ||\n (0x01D2 == codePoint) ||\n (0x01D4 == codePoint) ||\n (0x01D6 == codePoint) ||\n (0x01D8 == codePoint) ||\n (0x01DA == codePoint) ||\n (0x01DC == codePoint) ||\n (0x0251 == codePoint) ||\n (0x0261 == codePoint) ||\n (0x02C4 == codePoint) ||\n (0x02C7 == codePoint) ||\n (0x02C9 <= codePoint && codePoint <= 0x02CB) ||\n (0x02CD == codePoint) ||\n (0x02D0 == codePoint) ||\n (0x02D8 <= codePoint && codePoint <= 0x02DB) ||\n (0x02DD == codePoint) ||\n (0x02DF == codePoint) ||\n (0x0300 <= codePoint && codePoint <= 0x036F) ||\n (0x0391 <= codePoint && codePoint <= 0x03A1) ||\n (0x03A3 <= codePoint && codePoint <= 0x03A9) ||\n (0x03B1 <= codePoint && codePoint <= 0x03C1) ||\n (0x03C3 <= codePoint && codePoint <= 0x03C9) ||\n (0x0401 == codePoint) ||\n (0x0410 <= codePoint && codePoint <= 0x044F) ||\n (0x0451 == codePoint) ||\n (0x2010 == codePoint) ||\n (0x2013 <= codePoint && codePoint <= 0x2016) ||\n (0x2018 <= codePoint && codePoint <= 0x2019) ||\n (0x201C <= codePoint && codePoint <= 0x201D) ||\n (0x2020 <= codePoint && codePoint <= 0x2022) ||\n (0x2024 <= codePoint && codePoint <= 0x2027) ||\n (0x2030 == codePoint) ||\n (0x2032 <= codePoint && codePoint <= 0x2033) ||\n (0x2035 == codePoint) ||\n (0x203B == codePoint) ||\n (0x203E == codePoint) ||\n (0x2074 == codePoint) ||\n (0x207F == codePoint) ||\n (0x2081 <= codePoint && codePoint <= 0x2084) ||\n (0x20AC == codePoint) ||\n (0x2103 == codePoint) ||\n (0x2105 == codePoint) ||\n (0x2109 == codePoint) ||\n (0x2113 == codePoint) ||\n (0x2116 == codePoint) ||\n (0x2121 <= codePoint && codePoint <= 0x2122) ||\n (0x2126 == codePoint) ||\n (0x212B == codePoint) ||\n (0x2153 <= codePoint && codePoint <= 0x2154) ||\n (0x215B <= codePoint && codePoint <= 0x215E) ||\n (0x2160 <= codePoint && codePoint <= 0x216B) ||\n (0x2170 <= codePoint && codePoint <= 0x2179) ||\n (0x2189 == codePoint) ||\n (0x2190 <= codePoint && codePoint <= 0x2199) ||\n (0x21B8 <= codePoint && codePoint <= 0x21B9) ||\n (0x21D2 == codePoint) ||\n (0x21D4 == codePoint) ||\n (0x21E7 == codePoint) ||\n (0x2200 == codePoint) ||\n (0x2202 <= codePoint && codePoint <= 0x2203) ||\n (0x2207 <= codePoint && codePoint <= 0x2208) ||\n (0x220B == codePoint) ||\n (0x220F == codePoint) ||\n (0x2211 == codePoint) ||\n (0x2215 == codePoint) ||\n (0x221A == codePoint) ||\n (0x221D <= codePoint && codePoint <= 0x2220) ||\n (0x2223 == codePoint) ||\n (0x2225 == codePoint) ||\n (0x2227 <= codePoint && codePoint <= 0x222C) ||\n (0x222E == codePoint) ||\n (0x2234 <= codePoint && codePoint <= 0x2237) ||\n (0x223C <= codePoint && codePoint <= 0x223D) ||\n (0x2248 == codePoint) ||\n (0x224C == codePoint) ||\n (0x2252 == codePoint) ||\n (0x2260 <= codePoint && codePoint <= 0x2261) ||\n (0x2264 <= codePoint && codePoint <= 0x2267) ||\n (0x226A <= codePoint && codePoint <= 0x226B) ||\n (0x226E <= codePoint && codePoint <= 0x226F) ||\n (0x2282 <= codePoint && codePoint <= 0x2283) ||\n (0x2286 <= codePoint && codePoint <= 0x2287) ||\n (0x2295 == codePoint) ||\n (0x2299 == codePoint) ||\n (0x22A5 == codePoint) ||\n (0x22BF == codePoint) ||\n (0x2312 == codePoint) ||\n (0x2460 <= codePoint && codePoint <= 0x24E9) ||\n (0x24EB <= codePoint && codePoint <= 0x254B) ||\n (0x2550 <= codePoint && codePoint <= 0x2573) ||\n (0x2580 <= codePoint && codePoint <= 0x258F) ||\n (0x2592 <= codePoint && codePoint <= 0x2595) ||\n (0x25A0 <= codePoint && codePoint <= 0x25A1) ||\n (0x25A3 <= codePoint && codePoint <= 0x25A9) ||\n (0x25B2 <= codePoint && codePoint <= 0x25B3) ||\n (0x25B6 <= codePoint && codePoint <= 0x25B7) ||\n (0x25BC <= codePoint && codePoint <= 0x25BD) ||\n (0x25C0 <= codePoint && codePoint <= 0x25C1) ||\n (0x25C6 <= codePoint && codePoint <= 0x25C8) ||\n (0x25CB == codePoint) ||\n (0x25CE <= codePoint && codePoint <= 0x25D1) ||\n (0x25E2 <= codePoint && codePoint <= 0x25E5) ||\n (0x25EF == codePoint) ||\n (0x2605 <= codePoint && codePoint <= 0x2606) ||\n (0x2609 == codePoint) ||\n (0x260E <= codePoint && codePoint <= 0x260F) ||\n (0x2614 <= codePoint && codePoint <= 0x2615) ||\n (0x261C == codePoint) ||\n (0x261E == codePoint) ||\n (0x2640 == codePoint) ||\n (0x2642 == codePoint) ||\n (0x2660 <= codePoint && codePoint <= 0x2661) ||\n (0x2663 <= codePoint && codePoint <= 0x2665) ||\n (0x2667 <= codePoint && codePoint <= 0x266A) ||\n (0x266C <= codePoint && codePoint <= 0x266D) ||\n (0x266F == codePoint) ||\n (0x269E <= codePoint && codePoint <= 0x269F) ||\n (0x26BE <= codePoint && codePoint <= 0x26BF) ||\n (0x26C4 <= codePoint && codePoint <= 0x26CD) ||\n (0x26CF <= codePoint && codePoint <= 0x26E1) ||\n (0x26E3 == codePoint) ||\n (0x26E8 <= codePoint && codePoint <= 0x26FF) ||\n (0x273D == codePoint) ||\n (0x2757 == codePoint) ||\n (0x2776 <= codePoint && codePoint <= 0x277F) ||\n (0x2B55 <= codePoint && codePoint <= 0x2B59) ||\n (0x3248 <= codePoint && codePoint <= 0x324F) ||\n (0xE000 <= codePoint && codePoint <= 0xF8FF) ||\n (0xFE00 <= codePoint && codePoint <= 0xFE0F) ||\n (0xFFFD == codePoint) ||\n (0x1F100 <= codePoint && codePoint <= 0x1F10A) ||\n (0x1F110 <= codePoint && codePoint <= 0x1F12D) ||\n (0x1F130 <= codePoint && codePoint <= 0x1F169) ||\n (0x1F170 <= codePoint && codePoint <= 0x1F19A) ||\n (0xE0100 <= codePoint && codePoint <= 0xE01EF) ||\n (0xF0000 <= codePoint && codePoint <= 0xFFFFD) ||\n (0x100000 <= codePoint && codePoint <= 0x10FFFD)) {\n return 'A';\n }\n\n return 'N';\n};\n\neaw.characterLength = function(character) {\n var code = this.eastAsianWidth(character);\n if (code == 'F' || code == 'W' || code == 'A') {\n return 2;\n } else {\n return 1;\n }\n};\n\n// Split a string considering surrogate-pairs.\nfunction stringToArray(string) {\n return string.match(/[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[^\\uD800-\\uDFFF]/g) || [];\n}\n\neaw.length = function(string) {\n var characters = stringToArray(string);\n var len = 0;\n for (var i = 0; i < characters.length; i++) {\n len = len + this.characterLength(characters[i]);\n }\n return len;\n};\n\neaw.slice = function(text, start, end) {\n textLen = eaw.length(text)\n start = start ? start : 0;\n end = end ? end : 1;\n if (start < 0) {\n start = textLen + start;\n }\n if (end < 0) {\n end = textLen + end;\n }\n var result = '';\n var eawLen = 0;\n var chars = stringToArray(text);\n for (var i = 0; i < chars.length; i++) {\n var char = chars[i];\n var charLen = eaw.length(char);\n if (eawLen >= start - (charLen == 2 ? 1 : 0)) {\n if (eawLen + charLen <= end) {\n result += char;\n } else {\n break;\n }\n }\n eawLen += charLen;\n }\n return result;\n};\n","\"use strict\";\n\nmodule.exports = function () {\n // https://mths.be/emoji\n return /\\uD83C\\uDFF4\\uDB40\\uDC67\\uDB40\\uDC62(?:\\uDB40\\uDC77\\uDB40\\uDC6C\\uDB40\\uDC73|\\uDB40\\uDC73\\uDB40\\uDC63\\uDB40\\uDC74|\\uDB40\\uDC65\\uDB40\\uDC6E\\uDB40\\uDC67)\\uDB40\\uDC7F|(?:\\uD83E\\uDDD1\\uD83C\\uDFFF\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFF\\u200D\\uD83E\\uDD1D\\u200D(?:\\uD83D[\\uDC68\\uDC69]))(?:\\uD83C[\\uDFFB-\\uDFFE])|(?:\\uD83E\\uDDD1\\uD83C\\uDFFE\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFE\\u200D\\uD83E\\uDD1D\\u200D(?:\\uD83D[\\uDC68\\uDC69]))(?:\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])|(?:\\uD83E\\uDDD1\\uD83C\\uDFFD\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFD\\u200D\\uD83E\\uDD1D\\u200D(?:\\uD83D[\\uDC68\\uDC69]))(?:\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])|(?:\\uD83E\\uDDD1\\uD83C\\uDFFC\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFC\\u200D\\uD83E\\uDD1D\\u200D(?:\\uD83D[\\uDC68\\uDC69]))(?:\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])|(?:\\uD83E\\uDDD1\\uD83C\\uDFFB\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFB\\u200D\\uD83E\\uDD1D\\u200D(?:\\uD83D[\\uDC68\\uDC69]))(?:\\uD83C[\\uDFFC-\\uDFFF])|\\uD83D\\uDC68(?:\\uD83C\\uDFFB(?:\\u200D(?:\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFF])|\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFF]))|\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFC-\\uDFFF])|[\\u2695\\u2696\\u2708]\\uFE0F|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]))?|(?:\\uD83C[\\uDFFC-\\uDFFF])\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFF])|\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFF]))|\\u200D(?:\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83D\\uDC68|(?:\\uD83D[\\uDC68\\uDC69])\\u200D(?:\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67]))|\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67])|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFF\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFE])|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFE\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFD\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFC\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|(?:\\uD83C\\uDFFF\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFE\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFD\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFC\\u200D[\\u2695\\u2696\\u2708]|\\u200D[\\u2695\\u2696\\u2708])\\uFE0F|\\u200D(?:(?:\\uD83D[\\uDC68\\uDC69])\\u200D(?:\\uD83D[\\uDC66\\uDC67])|\\uD83D[\\uDC66\\uDC67])|\\uD83C\\uDFFF|\\uD83C\\uDFFE|\\uD83C\\uDFFD|\\uD83C\\uDFFC)?|(?:\\uD83D\\uDC69(?:\\uD83C\\uDFFB\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D(?:\\uD83D[\\uDC68\\uDC69])|\\uD83D[\\uDC68\\uDC69])|(?:\\uD83C[\\uDFFC-\\uDFFF])\\u200D\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D(?:\\uD83D[\\uDC68\\uDC69])|\\uD83D[\\uDC68\\uDC69]))|\\uD83E\\uDDD1(?:\\uD83C[\\uDFFB-\\uDFFF])\\u200D\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1)(?:\\uD83C[\\uDFFB-\\uDFFF])|\\uD83D\\uDC69\\u200D\\uD83D\\uDC69\\u200D(?:\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67]))|\\uD83D\\uDC69(?:\\u200D(?:\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D(?:\\uD83D[\\uDC68\\uDC69])|\\uD83D[\\uDC68\\uDC69])|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFF\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFE\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFD\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFC\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFB\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]))|\\uD83E\\uDDD1(?:\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1|\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFF\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFE\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFD\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFC\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFB\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF7C\\uDF84\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]))|\\uD83D\\uDC69\\u200D\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC69\\u200D\\uD83D\\uDC69\\u200D(?:\\uD83D[\\uDC66\\uDC67])|\\uD83D\\uDC69\\u200D\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67])|(?:\\uD83D\\uDC41\\uFE0F\\u200D\\uD83D\\uDDE8|\\uD83E\\uDDD1(?:\\uD83C\\uDFFF\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFE\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFD\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFC\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFB\\u200D[\\u2695\\u2696\\u2708]|\\u200D[\\u2695\\u2696\\u2708])|\\uD83D\\uDC69(?:\\uD83C\\uDFFF\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFE\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFD\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFC\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFB\\u200D[\\u2695\\u2696\\u2708]|\\u200D[\\u2695\\u2696\\u2708])|\\uD83D\\uDE36\\u200D\\uD83C\\uDF2B|\\uD83C\\uDFF3\\uFE0F\\u200D\\u26A7|\\uD83D\\uDC3B\\u200D\\u2744|(?:(?:\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC70\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD35\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD4\\uDDD6-\\uDDDD])(?:\\uD83C[\\uDFFB-\\uDFFF])|\\uD83D\\uDC6F|\\uD83E[\\uDD3C\\uDDDE\\uDDDF])\\u200D[\\u2640\\u2642]|(?:\\u26F9|\\uD83C[\\uDFCB\\uDFCC]|\\uD83D\\uDD75)(?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])\\u200D[\\u2640\\u2642]|\\uD83C\\uDFF4\\u200D\\u2620|(?:\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC70\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD35\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD4\\uDDD6-\\uDDDD])\\u200D[\\u2640\\u2642]|[\\xA9\\xAE\\u203C\\u2049\\u2122\\u2139\\u2194-\\u2199\\u21A9\\u21AA\\u2328\\u23CF\\u23ED-\\u23EF\\u23F1\\u23F2\\u23F8-\\u23FA\\u24C2\\u25AA\\u25AB\\u25B6\\u25C0\\u25FB\\u25FC\\u2600-\\u2604\\u260E\\u2611\\u2618\\u2620\\u2622\\u2623\\u2626\\u262A\\u262E\\u262F\\u2638-\\u263A\\u2640\\u2642\\u265F\\u2660\\u2663\\u2665\\u2666\\u2668\\u267B\\u267E\\u2692\\u2694-\\u2697\\u2699\\u269B\\u269C\\u26A0\\u26A7\\u26B0\\u26B1\\u26C8\\u26CF\\u26D1\\u26D3\\u26E9\\u26F0\\u26F1\\u26F4\\u26F7\\u26F8\\u2702\\u2708\\u2709\\u270F\\u2712\\u2714\\u2716\\u271D\\u2721\\u2733\\u2734\\u2744\\u2747\\u2763\\u27A1\\u2934\\u2935\\u2B05-\\u2B07\\u3030\\u303D\\u3297\\u3299]|\\uD83C[\\uDD70\\uDD71\\uDD7E\\uDD7F\\uDE02\\uDE37\\uDF21\\uDF24-\\uDF2C\\uDF36\\uDF7D\\uDF96\\uDF97\\uDF99-\\uDF9B\\uDF9E\\uDF9F\\uDFCD\\uDFCE\\uDFD4-\\uDFDF\\uDFF5\\uDFF7]|\\uD83D[\\uDC3F\\uDCFD\\uDD49\\uDD4A\\uDD6F\\uDD70\\uDD73\\uDD76-\\uDD79\\uDD87\\uDD8A-\\uDD8D\\uDDA5\\uDDA8\\uDDB1\\uDDB2\\uDDBC\\uDDC2-\\uDDC4\\uDDD1-\\uDDD3\\uDDDC-\\uDDDE\\uDDE1\\uDDE3\\uDDE8\\uDDEF\\uDDF3\\uDDFA\\uDECB\\uDECD-\\uDECF\\uDEE0-\\uDEE5\\uDEE9\\uDEF0\\uDEF3])\\uFE0F|\\uD83C\\uDFF3\\uFE0F\\u200D\\uD83C\\uDF08|\\uD83D\\uDC69\\u200D\\uD83D\\uDC67|\\uD83D\\uDC69\\u200D\\uD83D\\uDC66|\\uD83D\\uDE35\\u200D\\uD83D\\uDCAB|\\uD83D\\uDE2E\\u200D\\uD83D\\uDCA8|\\uD83D\\uDC15\\u200D\\uD83E\\uDDBA|\\uD83E\\uDDD1(?:\\uD83C\\uDFFF|\\uD83C\\uDFFE|\\uD83C\\uDFFD|\\uD83C\\uDFFC|\\uD83C\\uDFFB)?|\\uD83D\\uDC69(?:\\uD83C\\uDFFF|\\uD83C\\uDFFE|\\uD83C\\uDFFD|\\uD83C\\uDFFC|\\uD83C\\uDFFB)?|\\uD83C\\uDDFD\\uD83C\\uDDF0|\\uD83C\\uDDF6\\uD83C\\uDDE6|\\uD83C\\uDDF4\\uD83C\\uDDF2|\\uD83D\\uDC08\\u200D\\u2B1B|\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDD25|\\uD83E\\uDE79)|\\uD83D\\uDC41\\uFE0F|\\uD83C\\uDFF3\\uFE0F|\\uD83C\\uDDFF(?:\\uD83C[\\uDDE6\\uDDF2\\uDDFC])|\\uD83C\\uDDFE(?:\\uD83C[\\uDDEA\\uDDF9])|\\uD83C\\uDDFC(?:\\uD83C[\\uDDEB\\uDDF8])|\\uD83C\\uDDFB(?:\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDEE\\uDDF3\\uDDFA])|\\uD83C\\uDDFA(?:\\uD83C[\\uDDE6\\uDDEC\\uDDF2\\uDDF3\\uDDF8\\uDDFE\\uDDFF])|\\uD83C\\uDDF9(?:\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDED\\uDDEF-\\uDDF4\\uDDF7\\uDDF9\\uDDFB\\uDDFC\\uDDFF])|\\uD83C\\uDDF8(?:\\uD83C[\\uDDE6-\\uDDEA\\uDDEC-\\uDDF4\\uDDF7-\\uDDF9\\uDDFB\\uDDFD-\\uDDFF])|\\uD83C\\uDDF7(?:\\uD83C[\\uDDEA\\uDDF4\\uDDF8\\uDDFA\\uDDFC])|\\uD83C\\uDDF5(?:\\uD83C[\\uDDE6\\uDDEA-\\uDDED\\uDDF0-\\uDDF3\\uDDF7-\\uDDF9\\uDDFC\\uDDFE])|\\uD83C\\uDDF3(?:\\uD83C[\\uDDE6\\uDDE8\\uDDEA-\\uDDEC\\uDDEE\\uDDF1\\uDDF4\\uDDF5\\uDDF7\\uDDFA\\uDDFF])|\\uD83C\\uDDF2(?:\\uD83C[\\uDDE6\\uDDE8-\\uDDED\\uDDF0-\\uDDFF])|\\uD83C\\uDDF1(?:\\uD83C[\\uDDE6-\\uDDE8\\uDDEE\\uDDF0\\uDDF7-\\uDDFB\\uDDFE])|\\uD83C\\uDDF0(?:\\uD83C[\\uDDEA\\uDDEC-\\uDDEE\\uDDF2\\uDDF3\\uDDF5\\uDDF7\\uDDFC\\uDDFE\\uDDFF])|\\uD83C\\uDDEF(?:\\uD83C[\\uDDEA\\uDDF2\\uDDF4\\uDDF5])|\\uD83C\\uDDEE(?:\\uD83C[\\uDDE8-\\uDDEA\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9])|\\uD83C\\uDDED(?:\\uD83C[\\uDDF0\\uDDF2\\uDDF3\\uDDF7\\uDDF9\\uDDFA])|\\uD83C\\uDDEC(?:\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEE\\uDDF1-\\uDDF3\\uDDF5-\\uDDFA\\uDDFC\\uDDFE])|\\uD83C\\uDDEB(?:\\uD83C[\\uDDEE-\\uDDF0\\uDDF2\\uDDF4\\uDDF7])|\\uD83C\\uDDEA(?:\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDED\\uDDF7-\\uDDFA])|\\uD83C\\uDDE9(?:\\uD83C[\\uDDEA\\uDDEC\\uDDEF\\uDDF0\\uDDF2\\uDDF4\\uDDFF])|\\uD83C\\uDDE8(?:\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDEE\\uDDF0-\\uDDF5\\uDDF7\\uDDFA-\\uDDFF])|\\uD83C\\uDDE7(?:\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEF\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9\\uDDFB\\uDDFC\\uDDFE\\uDDFF])|\\uD83C\\uDDE6(?:\\uD83C[\\uDDE8-\\uDDEC\\uDDEE\\uDDF1\\uDDF2\\uDDF4\\uDDF6-\\uDDFA\\uDDFC\\uDDFD\\uDDFF])|[#\\*0-9]\\uFE0F\\u20E3|\\u2764\\uFE0F|(?:\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC70\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD35\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD4\\uDDD6-\\uDDDD])(?:\\uD83C[\\uDFFB-\\uDFFF])|(?:\\u26F9|\\uD83C[\\uDFCB\\uDFCC]|\\uD83D\\uDD75)(?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])|\\uD83C\\uDFF4|(?:[\\u270A\\u270B]|\\uD83C[\\uDF85\\uDFC2\\uDFC7]|\\uD83D[\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66\\uDC67\\uDC6B-\\uDC6D\\uDC72\\uDC74-\\uDC76\\uDC78\\uDC7C\\uDC83\\uDC85\\uDC8F\\uDC91\\uDCAA\\uDD7A\\uDD95\\uDD96\\uDE4C\\uDE4F\\uDEC0\\uDECC]|\\uD83E[\\uDD0C\\uDD0F\\uDD18-\\uDD1C\\uDD1E\\uDD1F\\uDD30-\\uDD34\\uDD36\\uDD77\\uDDB5\\uDDB6\\uDDBB\\uDDD2\\uDDD3\\uDDD5])(?:\\uD83C[\\uDFFB-\\uDFFF])|(?:[\\u261D\\u270C\\u270D]|\\uD83D[\\uDD74\\uDD90])(?:\\uFE0F|\\uD83C[\\uDFFB-\\uDFFF])|[\\u270A\\u270B]|\\uD83C[\\uDF85\\uDFC2\\uDFC7]|\\uD83D[\\uDC08\\uDC15\\uDC3B\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66\\uDC67\\uDC6B-\\uDC6D\\uDC72\\uDC74-\\uDC76\\uDC78\\uDC7C\\uDC83\\uDC85\\uDC8F\\uDC91\\uDCAA\\uDD7A\\uDD95\\uDD96\\uDE2E\\uDE35\\uDE36\\uDE4C\\uDE4F\\uDEC0\\uDECC]|\\uD83E[\\uDD0C\\uDD0F\\uDD18-\\uDD1C\\uDD1E\\uDD1F\\uDD30-\\uDD34\\uDD36\\uDD77\\uDDB5\\uDDB6\\uDDBB\\uDDD2\\uDDD3\\uDDD5]|\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC70\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD35\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD4\\uDDD6-\\uDDDD]|\\uD83D\\uDC6F|\\uD83E[\\uDD3C\\uDDDE\\uDDDF]|[\\u231A\\u231B\\u23E9-\\u23EC\\u23F0\\u23F3\\u25FD\\u25FE\\u2614\\u2615\\u2648-\\u2653\\u267F\\u2693\\u26A1\\u26AA\\u26AB\\u26BD\\u26BE\\u26C4\\u26C5\\u26CE\\u26D4\\u26EA\\u26F2\\u26F3\\u26F5\\u26FA\\u26FD\\u2705\\u2728\\u274C\\u274E\\u2753-\\u2755\\u2757\\u2795-\\u2797\\u27B0\\u27BF\\u2B1B\\u2B1C\\u2B50\\u2B55]|\\uD83C[\\uDC04\\uDCCF\\uDD8E\\uDD91-\\uDD9A\\uDE01\\uDE1A\\uDE2F\\uDE32-\\uDE36\\uDE38-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF20\\uDF2D-\\uDF35\\uDF37-\\uDF7C\\uDF7E-\\uDF84\\uDF86-\\uDF93\\uDFA0-\\uDFC1\\uDFC5\\uDFC6\\uDFC8\\uDFC9\\uDFCF-\\uDFD3\\uDFE0-\\uDFF0\\uDFF8-\\uDFFF]|\\uD83D[\\uDC00-\\uDC07\\uDC09-\\uDC14\\uDC16-\\uDC3A\\uDC3C-\\uDC3E\\uDC40\\uDC44\\uDC45\\uDC51-\\uDC65\\uDC6A\\uDC79-\\uDC7B\\uDC7D-\\uDC80\\uDC84\\uDC88-\\uDC8E\\uDC90\\uDC92-\\uDCA9\\uDCAB-\\uDCFC\\uDCFF-\\uDD3D\\uDD4B-\\uDD4E\\uDD50-\\uDD67\\uDDA4\\uDDFB-\\uDE2D\\uDE2F-\\uDE34\\uDE37-\\uDE44\\uDE48-\\uDE4A\\uDE80-\\uDEA2\\uDEA4-\\uDEB3\\uDEB7-\\uDEBF\\uDEC1-\\uDEC5\\uDED0-\\uDED2\\uDED5-\\uDED7\\uDEEB\\uDEEC\\uDEF4-\\uDEFC\\uDFE0-\\uDFEB]|\\uD83E[\\uDD0D\\uDD0E\\uDD10-\\uDD17\\uDD1D\\uDD20-\\uDD25\\uDD27-\\uDD2F\\uDD3A\\uDD3F-\\uDD45\\uDD47-\\uDD76\\uDD78\\uDD7A-\\uDDB4\\uDDB7\\uDDBA\\uDDBC-\\uDDCB\\uDDD0\\uDDE0-\\uDDFF\\uDE70-\\uDE74\\uDE78-\\uDE7A\\uDE80-\\uDE86\\uDE90-\\uDEA8\\uDEB0-\\uDEB6\\uDEC0-\\uDEC2\\uDED0-\\uDED6]|(?:[\\u231A\\u231B\\u23E9-\\u23EC\\u23F0\\u23F3\\u25FD\\u25FE\\u2614\\u2615\\u2648-\\u2653\\u267F\\u2693\\u26A1\\u26AA\\u26AB\\u26BD\\u26BE\\u26C4\\u26C5\\u26CE\\u26D4\\u26EA\\u26F2\\u26F3\\u26F5\\u26FA\\u26FD\\u2705\\u270A\\u270B\\u2728\\u274C\\u274E\\u2753-\\u2755\\u2757\\u2795-\\u2797\\u27B0\\u27BF\\u2B1B\\u2B1C\\u2B50\\u2B55]|\\uD83C[\\uDC04\\uDCCF\\uDD8E\\uDD91-\\uDD9A\\uDDE6-\\uDDFF\\uDE01\\uDE1A\\uDE2F\\uDE32-\\uDE36\\uDE38-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF20\\uDF2D-\\uDF35\\uDF37-\\uDF7C\\uDF7E-\\uDF93\\uDFA0-\\uDFCA\\uDFCF-\\uDFD3\\uDFE0-\\uDFF0\\uDFF4\\uDFF8-\\uDFFF]|\\uD83D[\\uDC00-\\uDC3E\\uDC40\\uDC42-\\uDCFC\\uDCFF-\\uDD3D\\uDD4B-\\uDD4E\\uDD50-\\uDD67\\uDD7A\\uDD95\\uDD96\\uDDA4\\uDDFB-\\uDE4F\\uDE80-\\uDEC5\\uDECC\\uDED0-\\uDED2\\uDED5-\\uDED7\\uDEEB\\uDEEC\\uDEF4-\\uDEFC\\uDFE0-\\uDFEB]|\\uD83E[\\uDD0C-\\uDD3A\\uDD3C-\\uDD45\\uDD47-\\uDD78\\uDD7A-\\uDDCB\\uDDCD-\\uDDFF\\uDE70-\\uDE74\\uDE78-\\uDE7A\\uDE80-\\uDE86\\uDE90-\\uDEA8\\uDEB0-\\uDEB6\\uDEC0-\\uDEC2\\uDED0-\\uDED6])|(?:[#\\*0-9\\xA9\\xAE\\u203C\\u2049\\u2122\\u2139\\u2194-\\u2199\\u21A9\\u21AA\\u231A\\u231B\\u2328\\u23CF\\u23E9-\\u23F3\\u23F8-\\u23FA\\u24C2\\u25AA\\u25AB\\u25B6\\u25C0\\u25FB-\\u25FE\\u2600-\\u2604\\u260E\\u2611\\u2614\\u2615\\u2618\\u261D\\u2620\\u2622\\u2623\\u2626\\u262A\\u262E\\u262F\\u2638-\\u263A\\u2640\\u2642\\u2648-\\u2653\\u265F\\u2660\\u2663\\u2665\\u2666\\u2668\\u267B\\u267E\\u267F\\u2692-\\u2697\\u2699\\u269B\\u269C\\u26A0\\u26A1\\u26A7\\u26AA\\u26AB\\u26B0\\u26B1\\u26BD\\u26BE\\u26C4\\u26C5\\u26C8\\u26CE\\u26CF\\u26D1\\u26D3\\u26D4\\u26E9\\u26EA\\u26F0-\\u26F5\\u26F7-\\u26FA\\u26FD\\u2702\\u2705\\u2708-\\u270D\\u270F\\u2712\\u2714\\u2716\\u271D\\u2721\\u2728\\u2733\\u2734\\u2744\\u2747\\u274C\\u274E\\u2753-\\u2755\\u2757\\u2763\\u2764\\u2795-\\u2797\\u27A1\\u27B0\\u27BF\\u2934\\u2935\\u2B05-\\u2B07\\u2B1B\\u2B1C\\u2B50\\u2B55\\u3030\\u303D\\u3297\\u3299]|\\uD83C[\\uDC04\\uDCCF\\uDD70\\uDD71\\uDD7E\\uDD7F\\uDD8E\\uDD91-\\uDD9A\\uDDE6-\\uDDFF\\uDE01\\uDE02\\uDE1A\\uDE2F\\uDE32-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF21\\uDF24-\\uDF93\\uDF96\\uDF97\\uDF99-\\uDF9B\\uDF9E-\\uDFF0\\uDFF3-\\uDFF5\\uDFF7-\\uDFFF]|\\uD83D[\\uDC00-\\uDCFD\\uDCFF-\\uDD3D\\uDD49-\\uDD4E\\uDD50-\\uDD67\\uDD6F\\uDD70\\uDD73-\\uDD7A\\uDD87\\uDD8A-\\uDD8D\\uDD90\\uDD95\\uDD96\\uDDA4\\uDDA5\\uDDA8\\uDDB1\\uDDB2\\uDDBC\\uDDC2-\\uDDC4\\uDDD1-\\uDDD3\\uDDDC-\\uDDDE\\uDDE1\\uDDE3\\uDDE8\\uDDEF\\uDDF3\\uDDFA-\\uDE4F\\uDE80-\\uDEC5\\uDECB-\\uDED2\\uDED5-\\uDED7\\uDEE0-\\uDEE5\\uDEE9\\uDEEB\\uDEEC\\uDEF0\\uDEF3-\\uDEFC\\uDFE0-\\uDFEB]|\\uD83E[\\uDD0C-\\uDD3A\\uDD3C-\\uDD45\\uDD47-\\uDD78\\uDD7A-\\uDDCB\\uDDCD-\\uDDFF\\uDE70-\\uDE74\\uDE78-\\uDE7A\\uDE80-\\uDE86\\uDE90-\\uDEA8\\uDEB0-\\uDEB6\\uDEC0-\\uDEC2\\uDED0-\\uDED6])\\uFE0F|(?:[\\u261D\\u26F9\\u270A-\\u270D]|\\uD83C[\\uDF85\\uDFC2-\\uDFC4\\uDFC7\\uDFCA-\\uDFCC]|\\uD83D[\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66-\\uDC78\\uDC7C\\uDC81-\\uDC83\\uDC85-\\uDC87\\uDC8F\\uDC91\\uDCAA\\uDD74\\uDD75\\uDD7A\\uDD90\\uDD95\\uDD96\\uDE45-\\uDE47\\uDE4B-\\uDE4F\\uDEA3\\uDEB4-\\uDEB6\\uDEC0\\uDECC]|\\uD83E[\\uDD0C\\uDD0F\\uDD18-\\uDD1F\\uDD26\\uDD30-\\uDD39\\uDD3C-\\uDD3E\\uDD77\\uDDB5\\uDDB6\\uDDB8\\uDDB9\\uDDBB\\uDDCD-\\uDDCF\\uDDD1-\\uDDDD])/g;\n};\n","import stripAnsi from 'strip-ansi';\nimport eastAsianWidth from 'eastasianwidth';\nimport emojiRegex from 'emoji-regex';\n\nexport default function stringWidth(string, options = {}) {\n\tif (typeof string !== 'string' || string.length === 0) {\n\t\treturn 0;\n\t}\n\n\toptions = {\n\t\tambiguousIsNarrow: true,\n\t\t...options\n\t};\n\n\tstring = stripAnsi(string);\n\n\tif (string.length === 0) {\n\t\treturn 0;\n\t}\n\n\tstring = string.replace(emojiRegex(), ' ');\n\n\tconst ambiguousCharacterWidth = options.ambiguousIsNarrow ? 1 : 2;\n\tlet width = 0;\n\n\tfor (const character of string) {\n\t\tconst codePoint = character.codePointAt(0);\n\n\t\t// Ignore control characters\n\t\tif (codePoint <= 0x1F || (codePoint >= 0x7F && codePoint <= 0x9F)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Ignore combining characters\n\t\tif (codePoint >= 0x300 && codePoint <= 0x36F) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst code = eastAsianWidth.eastAsianWidth(character);\n\t\tswitch (code) {\n\t\t\tcase 'F':\n\t\t\tcase 'W':\n\t\t\t\twidth += 2;\n\t\t\t\tbreak;\n\t\t\tcase 'A':\n\t\t\t\twidth += ambiguousCharacterWidth;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\twidth += 1;\n\t\t}\n\t}\n\n\treturn width;\n}\n","const ANSI_BACKGROUND_OFFSET = 10;\n\nconst wrapAnsi16 = (offset = 0) => code => `\\u001B[${code + offset}m`;\n\nconst wrapAnsi256 = (offset = 0) => code => `\\u001B[${38 + offset};5;${code}m`;\n\nconst wrapAnsi16m = (offset = 0) => (red, green, blue) => `\\u001B[${38 + offset};2;${red};${green};${blue}m`;\n\nconst styles = {\n\tmodifier: {\n\t\treset: [0, 0],\n\t\t// 21 isn't widely supported and 22 does the same thing\n\t\tbold: [1, 22],\n\t\tdim: [2, 22],\n\t\titalic: [3, 23],\n\t\tunderline: [4, 24],\n\t\toverline: [53, 55],\n\t\tinverse: [7, 27],\n\t\thidden: [8, 28],\n\t\tstrikethrough: [9, 29],\n\t},\n\tcolor: {\n\t\tblack: [30, 39],\n\t\tred: [31, 39],\n\t\tgreen: [32, 39],\n\t\tyellow: [33, 39],\n\t\tblue: [34, 39],\n\t\tmagenta: [35, 39],\n\t\tcyan: [36, 39],\n\t\twhite: [37, 39],\n\n\t\t// Bright color\n\t\tblackBright: [90, 39],\n\t\tgray: [90, 39], // Alias of `blackBright`\n\t\tgrey: [90, 39], // Alias of `blackBright`\n\t\tredBright: [91, 39],\n\t\tgreenBright: [92, 39],\n\t\tyellowBright: [93, 39],\n\t\tblueBright: [94, 39],\n\t\tmagentaBright: [95, 39],\n\t\tcyanBright: [96, 39],\n\t\twhiteBright: [97, 39],\n\t},\n\tbgColor: {\n\t\tbgBlack: [40, 49],\n\t\tbgRed: [41, 49],\n\t\tbgGreen: [42, 49],\n\t\tbgYellow: [43, 49],\n\t\tbgBlue: [44, 49],\n\t\tbgMagenta: [45, 49],\n\t\tbgCyan: [46, 49],\n\t\tbgWhite: [47, 49],\n\n\t\t// Bright color\n\t\tbgBlackBright: [100, 49],\n\t\tbgGray: [100, 49], // Alias of `bgBlackBright`\n\t\tbgGrey: [100, 49], // Alias of `bgBlackBright`\n\t\tbgRedBright: [101, 49],\n\t\tbgGreenBright: [102, 49],\n\t\tbgYellowBright: [103, 49],\n\t\tbgBlueBright: [104, 49],\n\t\tbgMagentaBright: [105, 49],\n\t\tbgCyanBright: [106, 49],\n\t\tbgWhiteBright: [107, 49],\n\t},\n};\n\nexport const modifierNames = Object.keys(styles.modifier);\nexport const foregroundColorNames = Object.keys(styles.color);\nexport const backgroundColorNames = Object.keys(styles.bgColor);\nexport const colorNames = [...foregroundColorNames, ...backgroundColorNames];\n\nfunction assembleStyles() {\n\tconst codes = new Map();\n\n\tfor (const [groupName, group] of Object.entries(styles)) {\n\t\tfor (const [styleName, style] of Object.entries(group)) {\n\t\t\tstyles[styleName] = {\n\t\t\t\topen: `\\u001B[${style[0]}m`,\n\t\t\t\tclose: `\\u001B[${style[1]}m`,\n\t\t\t};\n\n\t\t\tgroup[styleName] = styles[styleName];\n\n\t\t\tcodes.set(style[0], style[1]);\n\t\t}\n\n\t\tObject.defineProperty(styles, groupName, {\n\t\t\tvalue: group,\n\t\t\tenumerable: false,\n\t\t});\n\t}\n\n\tObject.defineProperty(styles, 'codes', {\n\t\tvalue: codes,\n\t\tenumerable: false,\n\t});\n\n\tstyles.color.close = '\\u001B[39m';\n\tstyles.bgColor.close = '\\u001B[49m';\n\n\tstyles.color.ansi = wrapAnsi16();\n\tstyles.color.ansi256 = wrapAnsi256();\n\tstyles.color.ansi16m = wrapAnsi16m();\n\tstyles.bgColor.ansi = wrapAnsi16(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi256 = wrapAnsi256(ANSI_BACKGROUND_OFFSET);\n\tstyles.bgColor.ansi16m = wrapAnsi16m(ANSI_BACKGROUND_OFFSET);\n\n\t// From https://github.com/Qix-/color-convert/blob/3f0e0d4e92e235796ccb17f6e85c72094a651f49/conversions.js\n\tObject.defineProperties(styles, {\n\t\trgbToAnsi256: {\n\t\t\tvalue: (red, green, blue) => {\n\t\t\t\t// We use the extended greyscale palette here, with the exception of\n\t\t\t\t// black and white. normal palette only has 4 greyscale shades.\n\t\t\t\tif (red === green && green === blue) {\n\t\t\t\t\tif (red < 8) {\n\t\t\t\t\t\treturn 16;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (red > 248) {\n\t\t\t\t\t\treturn 231;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn Math.round(((red - 8) / 247) * 24) + 232;\n\t\t\t\t}\n\n\t\t\t\treturn 16\n\t\t\t\t\t+ (36 * Math.round(red / 255 * 5))\n\t\t\t\t\t+ (6 * Math.round(green / 255 * 5))\n\t\t\t\t\t+ Math.round(blue / 255 * 5);\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToRgb: {\n\t\t\tvalue: hex => {\n\t\t\t\tconst matches = /[a-f\\d]{6}|[a-f\\d]{3}/i.exec(hex.toString(16));\n\t\t\t\tif (!matches) {\n\t\t\t\t\treturn [0, 0, 0];\n\t\t\t\t}\n\n\t\t\t\tlet [colorString] = matches;\n\n\t\t\t\tif (colorString.length === 3) {\n\t\t\t\t\tcolorString = [...colorString].map(character => character + character).join('');\n\t\t\t\t}\n\n\t\t\t\tconst integer = Number.parseInt(colorString, 16);\n\n\t\t\t\treturn [\n\t\t\t\t\t/* eslint-disable no-bitwise */\n\t\t\t\t\t(integer >> 16) & 0xFF,\n\t\t\t\t\t(integer >> 8) & 0xFF,\n\t\t\t\t\tinteger & 0xFF,\n\t\t\t\t\t/* eslint-enable no-bitwise */\n\t\t\t\t];\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi256: {\n\t\t\tvalue: hex => styles.rgbToAnsi256(...styles.hexToRgb(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t\tansi256ToAnsi: {\n\t\t\tvalue: code => {\n\t\t\t\tif (code < 8) {\n\t\t\t\t\treturn 30 + code;\n\t\t\t\t}\n\n\t\t\t\tif (code < 16) {\n\t\t\t\t\treturn 90 + (code - 8);\n\t\t\t\t}\n\n\t\t\t\tlet red;\n\t\t\t\tlet green;\n\t\t\t\tlet blue;\n\n\t\t\t\tif (code >= 232) {\n\t\t\t\t\tred = (((code - 232) * 10) + 8) / 255;\n\t\t\t\t\tgreen = red;\n\t\t\t\t\tblue = red;\n\t\t\t\t} else {\n\t\t\t\t\tcode -= 16;\n\n\t\t\t\t\tconst remainder = code % 36;\n\n\t\t\t\t\tred = Math.floor(code / 36) / 5;\n\t\t\t\t\tgreen = Math.floor(remainder / 6) / 5;\n\t\t\t\t\tblue = (remainder % 6) / 5;\n\t\t\t\t}\n\n\t\t\t\tconst value = Math.max(red, green, blue) * 2;\n\n\t\t\t\tif (value === 0) {\n\t\t\t\t\treturn 30;\n\t\t\t\t}\n\n\t\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t\tlet result = 30 + ((Math.round(blue) << 2) | (Math.round(green) << 1) | Math.round(red));\n\n\t\t\t\tif (value === 2) {\n\t\t\t\t\tresult += 60;\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t},\n\t\t\tenumerable: false,\n\t\t},\n\t\trgbToAnsi: {\n\t\t\tvalue: (red, green, blue) => styles.ansi256ToAnsi(styles.rgbToAnsi256(red, green, blue)),\n\t\t\tenumerable: false,\n\t\t},\n\t\thexToAnsi: {\n\t\t\tvalue: hex => styles.ansi256ToAnsi(styles.hexToAnsi256(hex)),\n\t\t\tenumerable: false,\n\t\t},\n\t});\n\n\treturn styles;\n}\n\nconst ansiStyles = assembleStyles();\n\nexport default ansiStyles;\n","import stringWidth from 'string-width';\nimport stripAnsi from 'strip-ansi';\nimport ansiStyles from 'ansi-styles';\n\nconst ESCAPES = new Set([\n\t'\\u001B',\n\t'\\u009B',\n]);\n\nconst END_CODE = 39;\nconst ANSI_ESCAPE_BELL = '\\u0007';\nconst ANSI_CSI = '[';\nconst ANSI_OSC = ']';\nconst ANSI_SGR_TERMINATOR = 'm';\nconst ANSI_ESCAPE_LINK = `${ANSI_OSC}8;;`;\n\nconst wrapAnsiCode = code => `${ESCAPES.values().next().value}${ANSI_CSI}${code}${ANSI_SGR_TERMINATOR}`;\nconst wrapAnsiHyperlink = uri => `${ESCAPES.values().next().value}${ANSI_ESCAPE_LINK}${uri}${ANSI_ESCAPE_BELL}`;\n\n// Calculate the length of words split on ' ', ignoring\n// the extra characters added by ansi escape codes\nconst wordLengths = string => string.split(' ').map(character => stringWidth(character));\n\n// Wrap a long word across multiple rows\n// Ansi escape codes do not count towards length\nconst wrapWord = (rows, word, columns) => {\n\tconst characters = [...word];\n\n\tlet isInsideEscape = false;\n\tlet isInsideLinkEscape = false;\n\tlet visible = stringWidth(stripAnsi(rows[rows.length - 1]));\n\n\tfor (const [index, character] of characters.entries()) {\n\t\tconst characterLength = stringWidth(character);\n\n\t\tif (visible + characterLength <= columns) {\n\t\t\trows[rows.length - 1] += character;\n\t\t} else {\n\t\t\trows.push(character);\n\t\t\tvisible = 0;\n\t\t}\n\n\t\tif (ESCAPES.has(character)) {\n\t\t\tisInsideEscape = true;\n\t\t\tisInsideLinkEscape = characters.slice(index + 1).join('').startsWith(ANSI_ESCAPE_LINK);\n\t\t}\n\n\t\tif (isInsideEscape) {\n\t\t\tif (isInsideLinkEscape) {\n\t\t\t\tif (character === ANSI_ESCAPE_BELL) {\n\t\t\t\t\tisInsideEscape = false;\n\t\t\t\t\tisInsideLinkEscape = false;\n\t\t\t\t}\n\t\t\t} else if (character === ANSI_SGR_TERMINATOR) {\n\t\t\t\tisInsideEscape = false;\n\t\t\t}\n\n\t\t\tcontinue;\n\t\t}\n\n\t\tvisible += characterLength;\n\n\t\tif (visible === columns && index < characters.length - 1) {\n\t\t\trows.push('');\n\t\t\tvisible = 0;\n\t\t}\n\t}\n\n\t// It's possible that the last row we copy over is only\n\t// ansi escape characters, handle this edge-case\n\tif (!visible && rows[rows.length - 1].length > 0 && rows.length > 1) {\n\t\trows[rows.length - 2] += rows.pop();\n\t}\n};\n\n// Trims spaces from a string ignoring invisible sequences\nconst stringVisibleTrimSpacesRight = string => {\n\tconst words = string.split(' ');\n\tlet last = words.length;\n\n\twhile (last > 0) {\n\t\tif (stringWidth(words[last - 1]) > 0) {\n\t\t\tbreak;\n\t\t}\n\n\t\tlast--;\n\t}\n\n\tif (last === words.length) {\n\t\treturn string;\n\t}\n\n\treturn words.slice(0, last).join(' ') + words.slice(last).join('');\n};\n\n// The wrap-ansi module can be invoked in either 'hard' or 'soft' wrap mode\n//\n// 'hard' will never allow a string to take up more than columns characters\n//\n// 'soft' allows long words to expand past the column length\nconst exec = (string, columns, options = {}) => {\n\tif (options.trim !== false && string.trim() === '') {\n\t\treturn '';\n\t}\n\n\tlet returnValue = '';\n\tlet escapeCode;\n\tlet escapeUrl;\n\n\tconst lengths = wordLengths(string);\n\tlet rows = [''];\n\n\tfor (const [index, word] of string.split(' ').entries()) {\n\t\tif (options.trim !== false) {\n\t\t\trows[rows.length - 1] = rows[rows.length - 1].trimStart();\n\t\t}\n\n\t\tlet rowLength = stringWidth(rows[rows.length - 1]);\n\n\t\tif (index !== 0) {\n\t\t\tif (rowLength >= columns && (options.wordWrap === false || options.trim === false)) {\n\t\t\t\t// If we start with a new word but the current row length equals the length of the columns, add a new row\n\t\t\t\trows.push('');\n\t\t\t\trowLength = 0;\n\t\t\t}\n\n\t\t\tif (rowLength > 0 || options.trim === false) {\n\t\t\t\trows[rows.length - 1] += ' ';\n\t\t\t\trowLength++;\n\t\t\t}\n\t\t}\n\n\t\t// In 'hard' wrap mode, the length of a line is never allowed to extend past 'columns'\n\t\tif (options.hard && lengths[index] > columns) {\n\t\t\tconst remainingColumns = (columns - rowLength);\n\t\t\tconst breaksStartingThisLine = 1 + Math.floor((lengths[index] - remainingColumns - 1) / columns);\n\t\t\tconst breaksStartingNextLine = Math.floor((lengths[index] - 1) / columns);\n\t\t\tif (breaksStartingNextLine < breaksStartingThisLine) {\n\t\t\t\trows.push('');\n\t\t\t}\n\n\t\t\twrapWord(rows, word, columns);\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (rowLength + lengths[index] > columns && rowLength > 0 && lengths[index] > 0) {\n\t\t\tif (options.wordWrap === false && rowLength < columns) {\n\t\t\t\twrapWord(rows, word, columns);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\trows.push('');\n\t\t}\n\n\t\tif (rowLength + lengths[index] > columns && options.wordWrap === false) {\n\t\t\twrapWord(rows, word, columns);\n\t\t\tcontinue;\n\t\t}\n\n\t\trows[rows.length - 1] += word;\n\t}\n\n\tif (options.trim !== false) {\n\t\trows = rows.map(row => stringVisibleTrimSpacesRight(row));\n\t}\n\n\tconst pre = [...rows.join('\\n')];\n\n\tfor (const [index, character] of pre.entries()) {\n\t\treturnValue += character;\n\n\t\tif (ESCAPES.has(character)) {\n\t\t\tconst {groups} = new RegExp(`(?:\\\\${ANSI_CSI}(?<code>\\\\d+)m|\\\\${ANSI_ESCAPE_LINK}(?<uri>.*)${ANSI_ESCAPE_BELL})`).exec(pre.slice(index).join('')) || {groups: {}};\n\t\t\tif (groups.code !== undefined) {\n\t\t\t\tconst code = Number.parseFloat(groups.code);\n\t\t\t\tescapeCode = code === END_CODE ? undefined : code;\n\t\t\t} else if (groups.uri !== undefined) {\n\t\t\t\tescapeUrl = groups.uri.length === 0 ? undefined : groups.uri;\n\t\t\t}\n\t\t}\n\n\t\tconst code = ansiStyles.codes.get(Number(escapeCode));\n\n\t\tif (pre[index + 1] === '\\n') {\n\t\t\tif (escapeUrl) {\n\t\t\t\treturnValue += wrapAnsiHyperlink('');\n\t\t\t}\n\n\t\t\tif (escapeCode && code) {\n\t\t\t\treturnValue += wrapAnsiCode(code);\n\t\t\t}\n\t\t} else if (character === '\\n') {\n\t\t\tif (escapeCode && code) {\n\t\t\t\treturnValue += wrapAnsiCode(escapeCode);\n\t\t\t}\n\n\t\t\tif (escapeUrl) {\n\t\t\t\treturnValue += wrapAnsiHyperlink(escapeUrl);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn returnValue;\n};\n\n// For each newline, invoke the method separately\nexport default function wrapAnsi(string, columns, options) {\n\treturn String(string)\n\t\t.normalize()\n\t\t.replace(/\\r\\n/g, '\\n')\n\t\t.split('\\n')\n\t\t.map(line => exec(line, columns, options))\n\t\t.join('\\n');\n}\n","const actions = ['up', 'down', 'left', 'right', 'space', 'enter', 'cancel'] as const;\nexport type Action = (typeof actions)[number];\n\n/** Global settings for Clack programs, stored in memory */\ninterface InternalClackSettings {\n\tactions: Set<Action>;\n\taliases: Map<string, Action>;\n}\n\nexport const settings: InternalClackSettings = {\n\tactions: new Set(actions),\n\taliases: new Map<string, Action>([\n\t\t// vim support\n\t\t['k', 'up'],\n\t\t['j', 'down'],\n\t\t['h', 'left'],\n\t\t['l', 'right'],\n\t\t['\\x03', 'cancel'],\n\t\t// opinionated defaults!\n\t\t['escape', 'cancel'],\n\t]),\n};\n\nexport interface ClackSettings {\n\t/**\n\t * Set custom global aliases for the default actions.\n\t * This will not overwrite existing aliases, it will only add new ones!\n\t *\n\t * @param aliases - An object that maps aliases to actions\n\t * @default { k: 'up', j: 'down', h: 'left', l: 'right', '\\x03': 'cancel', 'escape': 'cancel' }\n\t */\n\taliases: Record<string, Action>;\n}\n\nexport function updateSettings(updates: ClackSettings) {\n\tfor (const _key in updates) {\n\t\tconst key = _key as keyof ClackSettings;\n\t\tif (!Object.hasOwn(updates, key)) continue;\n\t\tconst value = updates[key];\n\n\t\tswitch (key) {\n\t\t\tcase 'aliases': {\n\t\t\t\tfor (const alias in value) {\n\t\t\t\t\tif (!Object.hasOwn(value, alias)) continue;\n\t\t\t\t\tif (!settings.aliases.has(alias)) {\n\t\t\t\t\t\tsettings.aliases.set(alias, value[alias]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * Check if a key is an alias for a default action\n * @param key - The raw key which might match to an action\n * @param action - The action to match\n * @returns boolean\n */\nexport function isActionKey(key: string | Array<string | undefined>, action: Action) {\n\tif (typeof key === 'string') {\n\t\treturn settings.aliases.get(key) === action;\n\t}\n\n\tfor (const value of key) {\n\t\tif (value === undefined) continue;\n\t\tif (isActionKey(value, action)) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n","export function diffLines(a: string, b: string) {\n\tif (a === b) return;\n\n\tconst aLines = a.split('\\n');\n\tconst bLines = b.split('\\n');\n\tconst diff: number[] = [];\n\n\tfor (let i = 0; i < Math.max(aLines.length, bLines.length); i++) {\n\t\tif (aLines[i] !== bLines[i]) diff.push(i);\n\t}\n\n\treturn diff;\n}\n","import { stdin, stdout } from 'node:process';\nimport type { Key } from 'node:readline';\nimport * as readline from 'node:readline';\nimport type { Readable } from 'node:stream';\nimport { cursor } from 'sisteransi';\nimport { isActionKey } from './settings';\n\nexport * from './string';\nexport * from './settings';\n\nconst isWindows = globalThis.process.platform.startsWith('win');\n\nexport const CANCEL_SYMBOL = Symbol('clack:cancel');\n\nexport function isCancel(value: unknown): value is symbol {\n\treturn value === CANCEL_SYMBOL;\n}\n\nexport function setRawMode(input: Readable, value: boolean) {\n\tconst i = input as typeof stdin;\n\n\tif (i.isTTY) i.setRawMode(value);\n}\n\nexport function block({\n\tinput = stdin,\n\toutput = stdout,\n\toverwrite = true,\n\thideCursor = true,\n} = {}) {\n\tconst rl = readline.createInterface({\n\t\tinput,\n\t\toutput,\n\t\tprompt: '',\n\t\ttabSize: 1,\n\t});\n\treadline.emitKeypressEvents(input, rl);\n\tif (input.isTTY) input.setRawMode(true);\n\n\tconst clear = (data: Buffer, { name, sequence }: Key) => {\n\t\tconst str = String(data);\n\t\tif (isActionKey([str, name, sequence], 'cancel')) {\n\t\t\tif (hideCursor) output.write(cursor.show);\n\t\t\tprocess.exit(0);\n\t\t\treturn;\n\t\t}\n\t\tif (!overwrite) return;\n\t\tconst dx = name === 'return' ? 0 : -1;\n\t\tconst dy = name === 'return' ? -1 : 0;\n\n\t\treadline.moveCursor(output, dx, dy, () => {\n\t\t\treadline.clearLine(output, 1, () => {\n\t\t\t\tinput.once('keypress', clear);\n\t\t\t});\n\t\t});\n\t};\n\tif (hideCursor) output.write(cursor.hide);\n\tinput.once('keypress', clear);\n\n\treturn () => {\n\t\tinput.off('keypress', clear);\n\t\tif (hideCursor) output.write(cursor.show);\n\n\t\t// Prevent Windows specific issues: https://github.com/bombshell-dev/clack/issues/176\n\t\tif (input.isTTY && !isWindows) input.setRawMode(false);\n\n\t\t// @ts-expect-error fix for https://github.com/nodejs/node/issues/31762#issuecomment-1441223907\n\t\trl.terminal = false;\n\t\trl.close();\n\t};\n}\n","import { stdin, stdout } from 'node:process';\nimport readline, { type Key, type ReadLine } from 'node:readline';\nimport type { Readable } from 'node:stream';\nimport { Writable } from 'node:stream';\nimport { cursor, erase } from 'sisteransi';\nimport wrap from 'wrap-ansi';\n\nimport { CANCEL_SYMBOL, diffLines, isActionKey, setRawMode, settings } from '../utils';\n\nimport type { ClackEvents, ClackState } from '../types';\nimport type { Action } from '../utils';\n\nexport interface PromptOptions<Self extends Prompt> {\n\trender(this: Omit<Self, 'prompt'>): string | undefined;\n\tplaceholder?: string;\n\tinitialValue?: any;\n\tvalidate?: ((value: any) => string | Error | undefined) | undefined;\n\tinput?: Readable;\n\toutput?: Writable;\n\tdebug?: boolean;\n\tsignal?: AbortSignal;\n}\n\nexport default class Prompt {\n\tprotected input: Readable;\n\tprotected output: Writable;\n\tprivate _abortSignal?: AbortSignal;\n\n\tprivate rl: ReadLine | undefined;\n\tprivate opts: Omit<PromptOptions<Prompt>, 'render' | 'input' | 'output'>;\n\tprivate _render: (context: Omit<Prompt, 'prompt'>) => string | undefined;\n\tprivate _track = false;\n\tprivate _prevFrame = '';\n\tprivate _subscribers = new Map<string, { cb: (...args: any) => any; once?: boolean }[]>();\n\tprotected _cursor = 0;\n\n\tpublic state: ClackState = 'initial';\n\tpublic error = '';\n\tpublic value: any;\n\n\tconstructor(options: PromptOptions<Prompt>, trackValue = true) {\n\t\tconst { input = stdin, output = stdout, render, signal, ...opts } = options;\n\n\t\tthis.opts = opts;\n\t\tthis.onKeypress = this.onKeypress.bind(this);\n\t\tthis.close = this.close.bind(this);\n\t\tthis.render = this.render.bind(this);\n\t\tthis._render = render.bind(this);\n\t\tthis._track = trackValue;\n\t\tthis._abortSignal = signal;\n\n\t\tthis.input = input;\n\t\tthis.output = output;\n\t}\n\n\t/**\n\t * Unsubscribe all listeners\n\t */\n\tprotected unsubscribe() {\n\t\tthis._subscribers.clear();\n\t}\n\n\t/**\n\t * Set a subscriber with opts\n\t * @param event - The event name\n\t */\n\tprivate setSubscriber<T extends keyof ClackEvents>(\n\t\tevent: T,\n\t\topts: { cb: ClackEvents[T]; once?: boolean }\n\t) {\n\t\tconst params = this._subscribers.get(event) ?? [];\n\t\tparams.push(opts);\n\t\tthis._subscribers.set(event, params);\n\t}\n\n\t/**\n\t * Subscribe to an event\n\t * @param event - The event name\n\t * @param cb - The callback\n\t */\n\tpublic on<T extends keyof ClackEvents>(event: T, cb: ClackEvents[T]) {\n\t\tthis.setSubscriber(event, { cb });\n\t}\n\n\t/**\n\t * Subscribe to an event once\n\t * @param event - The event name\n\t * @param cb - The callback\n\t */\n\tpublic once<T extends keyof ClackEvents>(event: T, cb: ClackEvents[T]) {\n\t\tthis.setSubscriber(event, { cb, once: true });\n\t}\n\n\t/**\n\t * Emit an event with data\n\t * @param event - The event name\n\t * @param data - The data to pass to the callback\n\t */\n\tpublic emit<T extends keyof ClackEvents>(event: T, ...data: Parameters<ClackEvents[T]>) {\n\t\tconst cbs = this._subscribers.get(event) ?? [];\n\t\tconst cleanup: (() => void)[] = [];\n\n\t\tfor (const subscriber of cbs) {\n\t\t\tsubscriber.cb(...data);\n\n\t\t\tif (subscriber.once) {\n\t\t\t\tcleanup.push(() => cbs.splice(cbs.indexOf(subscriber), 1));\n\t\t\t}\n\t\t}\n\n\t\tfor (const cb of cleanup) {\n\t\t\tcb();\n\t\t}\n\t}\n\n\tpublic prompt() {\n\t\treturn new Promise<string | symbol>((resolve, reject) => {\n\t\t\tif (this._abortSignal) {\n\t\t\t\tif (this._abortSignal.aborted) {\n\t\t\t\t\tthis.state = 'cancel';\n\n\t\t\t\t\tthis.close();\n\t\t\t\t\treturn resolve(CANCEL_SYMBOL);\n\t\t\t\t}\n\n\t\t\t\tthis._abortSignal.addEventListener(\n\t\t\t\t\t'abort',\n\t\t\t\t\t() => {\n\t\t\t\t\t\tthis.state = 'cancel';\n\t\t\t\t\t\tthis.close();\n\t\t\t\t\t},\n\t\t\t\t\t{ once: true }\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst sink = new Writable();\n\t\t\tsink._write = (chunk, encoding, done) => {\n\t\t\t\tif (this._track) {\n\t\t\t\t\tthis.value = this.rl?.line.replace(/\\t/g, '');\n\t\t\t\t\tthis._cursor = this.rl?.cursor ?? 0;\n\t\t\t\t\tthis.emit('value', this.value);\n\t\t\t\t}\n\t\t\t\tdone();\n\t\t\t};\n\t\t\tthis.input.pipe(sink);\n\n\t\t\tthis.rl = readline.createInterface({\n\t\t\t\tinput: this.input,\n\t\t\t\toutput: sink,\n\t\t\t\ttabSize: 2,\n\t\t\t\tprompt: '',\n\t\t\t\tescapeCodeTimeout: 50,\n\t\t\t\tterminal: true,\n\t\t\t});\n\t\t\treadline.emitKeypressEvents(this.input, this.rl);\n\t\t\tthis.rl.prompt();\n\t\t\tif (this.opts.initialValue !== undefined && this._track) {\n\t\t\t\tthis.rl.write(this.opts.initialValue);\n\t\t\t}\n\n\t\t\tthis.input.on('keypress', this.onKeypress);\n\t\t\tsetRawMode(this.input, true);\n\t\t\tthis.output.on('resize', this.render);\n\n\t\t\tthis.render();\n\n\t\t\tthis.once('submit', () => {\n\t\t\t\tthis.output.write(cursor.show);\n\t\t\t\tthis.output.off('resize', this.render);\n\t\t\t\tsetRawMode(this.input, false);\n\t\t\t\tresolve(this.value);\n\t\t\t});\n\t\t\tthis.once('cancel', () => {\n\t\t\t\tthis.output.write(cursor.show);\n\t\t\t\tthis.output.off('resize', this.render);\n\t\t\t\tsetRawMode(this.input, false);\n\t\t\t\tresolve(CANCEL_SYMBOL);\n\t\t\t});\n\t\t});\n\t}\n\n\tprivate onKeypress(char: string, key?: Key) {\n\t\tif (this.state === 'error') {\n\t\t\tthis.state = 'active';\n\t\t}\n\t\tif (key?.name) {\n\t\t\tif (!this._track && settings.aliases.has(key.name)) {\n\t\t\t\tthis.emit('cursor', settings.aliases.get(key.name));\n\t\t\t}\n\t\t\tif (settings.actions.has(key.name as Action)) {\n\t\t\t\tthis.emit('cursor', key.name as Action);\n\t\t\t}\n\t\t}\n\t\tif (char && (char.toLowerCase() === 'y' || char.toLowerCase() === 'n')) {\n\t\t\tthis.emit('confirm', char.toLowerCase() === 'y');\n\t\t}\n\t\tif (char === '\\t' && this.opts.placeholder) {\n\t\t\tif (!this.value) {\n\t\t\t\tthis.rl?.write(this.opts.placeholder);\n\t\t\t\tthis.emit('value', this.opts.placeholder);\n\t\t\t}\n\t\t}\n\t\tif (char) {\n\t\t\tthis.emit('key', char.toLowerCase());\n\t\t}\n\n\t\tif (key?.name === 'return') {\n\t\t\tif (this.opts.validate) {\n\t\t\t\tconst problem = this.opts.validate(this.value);\n\t\t\t\tif (problem) {\n\t\t\t\t\tthis.error = problem instanceof Error ? problem.message : problem;\n\t\t\t\t\tthis.state = 'error';\n\t\t\t\t\tthis.rl?.write(this.value);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.state !== 'error') {\n\t\t\t\tthis.state = 'submit';\n\t\t\t}\n\t\t}\n\n\t\tif (isActionKey([char, key?.name, key?.sequence], 'cancel')) {\n\t\t\tthis.state = 'cancel';\n\t\t}\n\t\tif (this.state === 'submit' || this.state === 'cancel') {\n\t\t\tthis.emit('finalize');\n\t\t}\n\t\tthis.render();\n\t\tif (this.state === 'submit' || this.state === 'cancel') {\n\t\t\tthis.close();\n\t\t}\n\t}\n\n\tprotected close() {\n\t\tthis.input.unpipe();\n\t\tthis.input.removeListener('keypress', this.onKeypress);\n\t\tthis.output.write('\\n');\n\t\tsetRawMode(this.input, false);\n\t\tthis.rl?.close();\n\t\tthis.rl = undefined;\n\t\tthis.emit(`${this.state}`, this.value);\n\t\tthis.unsubscribe();\n\t}\n\n\tprivate restoreCursor() {\n\t\tconst lines =\n\t\t\twrap(this._prevFrame, process.stdout.columns, { hard: true }).split('\\n').length - 1;\n\t\tthis.output.write(cursor.move(-999, lines * -1));\n\t}\n\n\tprivate render() {\n\t\tconst frame = wrap(this._render(this) ?? '', process.stdout.columns, { hard: true });\n\t\tif (frame === this._prevFrame) return;\n\n\t\tif (this.state === 'initial') {\n\t\t\tthis.output.write(cursor.hide);\n\t\t} else {\n\t\t\tconst diff = diffLines(this._prevFrame, frame);\n\t\t\tthis.restoreCursor();\n\t\t\t// If a single line has changed, only update that line\n\t\t\tif (diff && diff?.length === 1) {\n\t\t\t\tconst diffLine = diff[0];\n\t\t\t\tthis.output.write(cursor.move(0, diffLine));\n\t\t\t\tthis.output.write(erase.lines(1));\n\t\t\t\tconst lines = frame.split('\\n');\n\t\t\t\tthis.output.write(lines[diffLine]);\n\t\t\t\tthis._prevFrame = frame;\n\t\t\t\tthis.output.write(cursor.move(0, lines.length - diffLine - 1));\n\t\t\t\treturn;\n\t\t\t\t// If many lines have changed, rerender everything past the first line\n\t\t\t}\n\t\t\tif (diff && diff?.length > 1) {\n\t\t\t\tconst diffLine = diff[0];\n\t\t\t\tthis.output.write(cursor.move(0, diffLine));\n\t\t\t\tthis.output.write(erase.down());\n\t\t\t\tconst lines = frame.split('\\n');\n\t\t\t\tconst newLines = lines.slice(diffLine);\n\t\t\t\tthis.output.write(newLines.join('\\n'));\n\t\t\t\tthis._prevFrame = frame;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.output.write(erase.down());\n\t\t}\n\n\t\tthis.output.write(frame);\n\t\tif (this.state === 'initial') {\n\t\t\tthis.state = 'active';\n\t\t}\n\t\tthis._prevFrame = frame;\n\t}\n}\n","import { cursor } from 'sisteransi';\nimport Prompt, { type PromptOptions } from './prompt';\n\ninterface ConfirmOptions extends PromptOptions<ConfirmPrompt> {\n\tactive: string;\n\tinactive: string;\n\tinitialValue?: boolean;\n}\nexport default class ConfirmPrompt extends Prompt {\n\tget cursor() {\n\t\treturn this.value ? 0 : 1;\n\t}\n\n\tprivate get _value() {\n\t\treturn this.cursor === 0;\n\t}\n\n\tconstructor(opts: ConfirmOptions) {\n\t\tsuper(opts, false);\n\t\tthis.value = !!opts.initialValue;\n\n\t\tthis.on('value', () => {\n\t\t\tthis.value = this._value;\n\t\t});\n\n\t\tthis.on('confirm', (confirm) => {\n\t\t\tthis.output.write(cursor.move(0, -1));\n\t\t\tthis.value = confirm;\n\t\t\tthis.state = 'submit';\n\t\t\tthis.close();\n\t\t});\n\n\t\tthis.on('cursor', () => {\n\t\t\tthis.value = !this.value;\n\t\t});\n\t}\n}\n","import Prompt, { type PromptOptions } from './prompt';\n\ninterface GroupMultiSelectOptions<T extends { value: any }>\n\textends PromptOptions<GroupMultiSelectPrompt<T>> {\n\toptions: Record<string, T[]>;\n\tinitialValues?: T['value'][];\n\trequired?: boolean;\n\tcursorAt?: T['value'];\n\tselectableGroups?: boolean;\n}\nexport default class GroupMultiSelectPrompt<T extends { value: any }> extends Prompt {\n\toptions: (T & { group: string | boolean })[];\n\tcursor = 0;\n\t#selectableGroups: boolean;\n\n\tgetGroupItems(group: string): T[] {\n\t\treturn this.options.filter((o) => o.group === group);\n\t}\n\n\tisGroupSelected(group: string) {\n\t\tconst items = this.getGroupItems(group);\n\t\treturn items.every((i) => this.value.includes(i.value));\n\t}\n\n\tprivate toggleValue() {\n\t\tconst item = this.options[this.cursor];\n\t\tif (item.group === true) {\n\t\t\tconst group = item.value;\n\t\t\tconst groupedItems = this.getGroupItems(group);\n\t\t\tif (this.isGroupSelected(group)) {\n\t\t\t\tthis.value = this.value.filter(\n\t\t\t\t\t(v: string) => groupedItems.findIndex((i) => i.value === v) === -1\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tthis.value = [...this.value, ...groupedItems.map((i) => i.value)];\n\t\t\t}\n\t\t\tthis.value = Array.from(new Set(this.value));\n\t\t} else {\n\t\t\tconst selected = this.value.includes(item.value);\n\t\t\tthis.value = selected\n\t\t\t\t? this.value.filter((v: T['value']) => v !== item.value)\n\t\t\t\t: [...this.value, item.value];\n\t\t}\n\t}\n\n\tconstructor(opts: GroupMultiSelectOptions<T>) {\n\t\tsuper(opts, false);\n\t\tconst { options } = opts;\n\t\tthis.#selectableGroups = opts.selectableGroups !== false;\n\t\tthis.options = Object.entries(options).flatMap(([key, option]) => [\n\t\t\t{ value: key, group: true, label: key },\n\t\t\t...option.map((opt) => ({ ...opt, group: key })),\n\t\t]) as any;\n\t\tthis.value = [...(opts.initialValues ?? [])];\n\t\tthis.cursor = Math.max(\n\t\t\tthis.options.findIndex(({ value }) => value === opts.cursorAt),\n\t\t\tthis.#selectableGroups ? 0 : 1\n\t\t);\n\n\t\tthis.on('cursor', (key) => {\n\t\t\tswitch (key) {\n\t\t\t\tcase 'left':\n\t\t\t\tcase 'up': {\n\t\t\t\t\tthis.cursor = this.cursor === 0 ? this.options.length - 1 : this.cursor - 1;\n\t\t\t\t\tconst currentIsGroup = this.options[this.cursor]?.group === true;\n\t\t\t\t\tif (!this.#selectableGroups && currentIsGroup) {\n\t\t\t\t\t\tthis.cursor = this.cursor === 0 ? this.options.length - 1 : this.cursor - 1;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'down':\n\t\t\t\tcase 'right': {\n\t\t\t\t\tthis.cursor = this.cursor === this.options.length - 1 ? 0 : this.cursor + 1;\n\t\t\t\t\tconst currentIsGroup = this.options[this.cursor]?.group === true;\n\t\t\t\t\tif (!this.#selectableGroups && currentIsGroup) {\n\t\t\t\t\t\tthis.cursor = this.cursor === this.options.length - 1 ? 0 : this.cursor + 1;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase 'space':\n\t\t\t\t\tthis.toggleValue();\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t});\n\t}\n}\n","import Prompt, { type PromptOptions } from './prompt';\n\ninterface MultiSelectOptions<T extends { value: any }> extends PromptOptions<MultiSelectPrompt<T>> {\n\toptions: T[];\n\tinitialValues?: T['value'][];\n\trequired?: boolean;\n\tcursorAt?: T['value'];\n}\nexport default class MultiSelectPrompt<T extends { value: any }> extends Prompt {\n\toptions: T[];\n\tcursor = 0;\n\n\tprivate get _value() {\n\t\treturn this.options[this.cursor].value;\n\t}\n\n\tprivate toggleAll() {\n\t\tconst allSelected = this.value.length === this.options.length;\n\t\tthis.value = allSelected ? [] : this.options.map((v) => v.value);\n\t}\n\n\tprivate toggleValue() {\n\t\tconst selected = this.value.includes(this._value);\n\t\tthis.value = selected\n\t\t\t? this.value.filter((value: T['value']) => value !== this._value)\n\t\t\t: [...this.value, this._value];\n\t}\n\n\tconstructor(opts: MultiSelectOptions<T>) {\n\t\tsuper(opts, false);\n\n\t\tthis.options = opts.options;\n\t\tthis.value = [...(opts.initialValues ?? [])];\n\t\tthis.cursor = Math.max(\n\t\t\tthis.options.findIndex(({ value }) => value === opts.cursorAt),\n\t\t\t0\n\t\t);\n\t\tthis.on('key', (char) => {\n\t\t\tif (char === 'a') {\n\t\t\t\tthis.toggleAll();\n\t\t\t}\n\t\t});\n\n\t\tthis.on('cursor', (key) => {\n\t\t\tswitch (key) {\n\t\t\t\tcase 'left':\n\t\t\t\tcase 'up':\n\t\t\t\t\tthis.cursor = this.cursor === 0 ? this.options.length - 1 : this.cursor - 1;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'down':\n\t\t\t\tcase 'right':\n\t\t\t\t\tthis.cursor = this.cursor === this.options.length - 1 ? 0 : this.cursor + 1;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'space':\n\t\t\t\t\tthis.toggleValue();\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t});\n\t}\n}\n","import color from 'picocolors';\nimport Prompt, { type PromptOptions } from './prompt';\n\ninterface PasswordOptions extends PromptOptions<PasswordPrompt> {\n\tmask?: string;\n}\nexport default class PasswordPrompt extends Prompt {\n\tvalueWithCursor = '';\n\tprivate _mask = '•';\n\tget cursor() {\n\t\treturn this._cursor;\n\t}\n\tget masked() {\n\t\treturn this.value.replaceAll(/./g, this._mask);\n\t}\n\tconstructor({ mask, ...opts }: PasswordOptions) {\n\t\tsuper(opts);\n\t\tthis._mask = mask ?? '•';\n\n\t\tthis.on('finalize', () => {\n\t\t\tthis.valueWithCursor = this.masked;\n\t\t});\n\t\tthis.on('value', () => {\n\t\t\tif (this.cursor >= this.value.length) {\n\t\t\t\tthis.valueWithCursor = `${this.masked}${color.inverse(color.hidden('_'))}`;\n\t\t\t} else {\n\t\t\t\tconst s1 = this.masked.slice(0, this.cursor);\n\t\t\t\tconst s2 = this.masked.slice(this.cursor);\n\t\t\t\tthis.valueWithCursor = `${s1}${color.inverse(s2[0])}${s2.slice(1)}`;\n\t\t\t}\n\t\t});\n\t}\n}\n","import Prompt, { type PromptOptions } from './prompt';\n\ninterface SelectOptions<T extends { value: any }> extends PromptOptions<SelectPrompt<T>> {\n\toptions: T[];\n\tinitialValue?: T['value'];\n}\nexport default class SelectPrompt<T extends { value: any }> extends Prompt {\n\toptions: T[];\n\tcursor = 0;\n\n\tprivate get _value() {\n\t\treturn this.options[this.cursor];\n\t}\n\n\tprivate changeValue() {\n\t\tthis.value = this._value.value;\n\t}\n\n\tconstructor(opts: SelectOptions<T>) {\n\t\tsuper(opts, false);\n\n\t\tthis.options = opts.options;\n\t\tthis.cursor = this.options.findIndex(({ value }) => value === opts.initialValue);\n\t\tif (this.cursor === -1) this.cursor = 0;\n\t\tthis.changeValue();\n\n\t\tthis.on('cursor', (key) => {\n\t\t\tswitch (key) {\n\t\t\t\tcase 'left':\n\t\t\t\tcase 'up':\n\t\t\t\t\tthis.cursor = this.cursor === 0 ? this.options.length - 1 : this.cursor - 1;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'down':\n\t\t\t\tcase 'right':\n\t\t\t\t\tthis.cursor = this.cursor === this.options.length - 1 ? 0 : this.cursor + 1;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tthis.changeValue();\n\t\t});\n\t}\n}\n","import Prompt, { type PromptOptions } from './prompt';\n\ninterface SelectKeyOptions<T extends { value: any }> extends PromptOptions<SelectKeyPrompt<T>> {\n\toptions: T[];\n}\nexport default class SelectKeyPrompt<T extends { value: any }> extends Prompt {\n\toptions: T[];\n\tcursor = 0;\n\n\tconstructor(opts: SelectKeyOptions<T>) {\n\t\tsuper(opts, false);\n\n\t\tthis.options = opts.options;\n\t\tconst keys = this.options.map(({ value: [initial] }) => initial?.toLowerCase());\n\t\tthis.cursor = Math.max(keys.indexOf(opts.initialValue), 0);\n\n\t\tthis.on('key', (key) => {\n\t\t\tif (!keys.includes(key)) return;\n\t\t\tconst value = this.options.find(({ value: [initial] }) => initial?.toLowerCase() === key);\n\t\t\tif (value) {\n\t\t\t\tthis.value = value.value;\n\t\t\t\tthis.state = 'submit';\n\t\t\t\tthis.emit('submit');\n\t\t\t}\n\t\t});\n\t}\n}\n","import color from 'picocolors';\nimport Prompt, { type PromptOptions } from './prompt';\n\nexport interface TextOptions extends PromptOptions<TextPrompt> {\n\tplaceholder?: string;\n\tdefaultValue?: string;\n}\n\nexport default class TextPrompt extends Prompt {\n\tget valueWithCursor() {\n\t\tif (this.state === 'submit') {\n\t\t\treturn this.value;\n\t\t}\n\t\tif (this.cursor >= this.value.length) {\n\t\t\treturn `${this.value}█`;\n\t\t}\n\t\tconst s1 = this.value.slice(0, this.cursor);\n\t\tconst [s2, ...s3] = this.value.slice(this.cursor);\n\t\treturn `${s1}${color.inverse(s2)}${s3.join('')}`;\n\t}\n\tget cursor() {\n\t\treturn this._cursor;\n\t}\n\tconstructor(opts: TextOptions) {\n\t\tsuper(opts);\n\n\t\tthis.on('finalize', () => {\n\t\t\tif (!this.value) {\n\t\t\t\tthis.value = opts.defaultValue;\n\t\t\t}\n\t\t});\n\t}\n}\n","import process from 'node:process';\n\nexport default function isUnicodeSupported() {\n\tif (process.platform !== 'win32') {\n\t\treturn process.env.TERM !== 'linux'; // Linux console (kernel)\n\t}\n\n\treturn Boolean(process.env.CI)\n\t\t|| Boolean(process.env.WT_SESSION) // Windows Terminal\n\t\t|| Boolean(process.env.TERMINUS_SUBLIME) // Terminus (<0.2.27)\n\t\t|| process.env.ConEmuTask === '{cmd::Cmder}' // ConEmu and cmder\n\t\t|| process.env.TERM_PROGRAM === 'Terminus-Sublime'\n\t\t|| process.env.TERM_PROGRAM === 'vscode'\n\t\t|| process.env.TERM === 'xterm-256color'\n\t\t|| process.env.TERM === 'alacritty'\n\t\t|| process.env.TERMINAL_EMULATOR === 'JetBrains-JediTerm';\n}\n","import { stripVTControlCharacters as strip } from 'node:util';\nimport {\n\tConfirmPrompt,\n\tGroupMultiSelectPrompt,\n\tMultiSelectPrompt,\n\tPasswordPrompt,\n\tSelectKeyPrompt,\n\tSelectPrompt,\n\ttype State,\n\tTextPrompt,\n\tblock,\n\tisCancel,\n} from '@clack/core';\nimport isUnicodeSupported from 'is-unicode-supported';\nimport color from 'picocolors';\nimport { cursor, erase } from 'sisteransi';\n\nexport { isCancel } from '@clack/core';\nexport { updateSettings, type ClackSettings } from '@clack/core';\n\nconst unicode = isUnicodeSupported();\nconst s = (c: string, fallback: string) => (unicode ? c : fallback);\nconst S_STEP_ACTIVE = s('◆', '*');\nconst S_STEP_CANCEL = s('■', 'x');\nconst S_STEP_ERROR = s('▲', 'x');\nconst S_STEP_SUBMIT = s('◇', 'o');\n\nconst S_BAR_START = s('┌', 'T');\nconst S_BAR = s('│', '|');\nconst S_BAR_END = s('└', '—');\n\nconst S_RADIO_ACTIVE = s('●', '>');\nconst S_RADIO_INACTIVE = s('○', ' ');\nconst S_CHECKBOX_ACTIVE = s('◻', '[•]');\nconst S_CHECKBOX_SELECTED = s('◼', '[+]');\nconst S_CHECKBOX_INACTIVE = s('◻', '[ ]');\nconst S_PASSWORD_MASK = s('▪', '•');\n\nconst S_BAR_H = s('─', '-');\nconst S_CORNER_TOP_RIGHT = s('╮', '+');\nconst S_CONNECT_LEFT = s('├', '+');\nconst S_CORNER_BOTTOM_RIGHT = s('╯', '+');\n\nconst S_INFO = s('●', '•');\nconst S_SUCCESS = s('◆', '*');\nconst S_WARN = s('▲', '!');\nconst S_ERROR = s('■', 'x');\n\nconst symbol = (state: State) => {\n\tswitch (state) {\n\t\tcase 'initial':\n\t\tcase 'active':\n\t\t\treturn color.cyan(S_STEP_ACTIVE);\n\t\tcase 'cancel':\n\t\t\treturn color.red(S_STEP_CANCEL);\n\t\tcase 'error':\n\t\t\treturn color.yellow(S_STEP_ERROR);\n\t\tcase 'submit':\n\t\t\treturn color.green(S_STEP_SUBMIT);\n\t}\n};\n\ninterface LimitOptionsParams<TOption> {\n\toptions: TOption[];\n\tmaxItems: number | undefined;\n\tcursor: number;\n\tstyle: (option: TOption, active: boolean) => string;\n}\n\nconst limitOptions = <TOption>(params: LimitOptionsParams<TOption>): string[] => {\n\tconst { cursor, options, style } = params;\n\n\tconst paramMaxItems = params.maxItems ?? Number.POSITIVE_INFINITY;\n\tconst outputMaxItems = Math.max(process.stdout.rows - 4, 0);\n\t// We clamp to minimum 5 because anything less doesn't make sense UX wise\n\tconst maxItems = Math.min(outputMaxItems, Math.max(paramMaxItems, 5));\n\tlet slidingWindowLocation = 0;\n\n\tif (cursor >= slidingWindowLocation + maxItems - 3) {\n\t\tslidingWindowLocation = Math.max(Math.min(cursor - maxItems + 3, options.length - maxItems), 0);\n\t} else if (cursor < slidingWindowLocation + 2) {\n\t\tslidingWindowLocation = Math.max(cursor - 2, 0);\n\t}\n\n\tconst shouldRenderTopEllipsis = maxItems < options.length && slidingWindowLocation > 0;\n\tconst shouldRenderBottomEllipsis =\n\t\tmaxItems < options.length && slidingWindowLocation + maxItems < options.length;\n\n\treturn options\n\t\t.slice(slidingWindowLocation, slidingWindowLocation + maxItems)\n\t\t.map((option, i, arr) => {\n\t\t\tconst isTopLimit = i === 0 && shouldRenderTopEllipsis;\n\t\t\tconst isBottomLimit = i === arr.length - 1 && shouldRenderBottomEllipsis;\n\t\t\treturn isTopLimit || isBottomLimit\n\t\t\t\t? color.dim('...')\n\t\t\t\t: style(option, i + slidingWindowLocation === cursor);\n\t\t});\n};\n\nexport interface TextOptions {\n\tmessage: string;\n\tplaceholder?: string;\n\tdefaultValue?: string;\n\tinitialValue?: string;\n\tvalidate?: (value: string) => string | Error | undefined;\n}\nexport const text = (opts: TextOptions) => {\n\treturn new TextPrompt({\n\t\tvalidate: opts.validate,\n\t\tplaceholder: opts.placeholder,\n\t\tdefaultValue: opts.defaultValue,\n\t\tinitialValue: opts.initialValue,\n\t\trender() {\n\t\t\tconst title = `${color.gray(S_BAR)}\\n${symbol(this.state)} ${opts.message}\\n`;\n\t\t\tconst placeholder = opts.placeholder\n\t\t\t\t? color.inverse(opts.placeholder[0]) + color.dim(opts.placeholder.slice(1))\n\t\t\t\t: color.inverse(color.hidden('_'));\n\t\t\tconst value = !this.value ? placeholder : this.valueWithCursor;\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'error':\n\t\t\t\t\treturn `${title.trim()}\\n${color.yellow(S_BAR)} ${value}\\n${color.yellow(\n\t\t\t\t\t\tS_BAR_END\n\t\t\t\t\t)} ${color.yellow(this.error)}\\n`;\n\t\t\t\tcase 'submit':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${color.dim(this.value || opts.placeholder)}`;\n\t\t\t\tcase 'cancel':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${color.strikethrough(\n\t\t\t\t\t\tcolor.dim(this.value ?? '')\n\t\t\t\t\t)}${this.value?.trim() ? `\\n${color.gray(S_BAR)}` : ''}`;\n\t\t\t\tdefault:\n\t\t\t\t\treturn `${title}${color.cyan(S_BAR)} ${value}\\n${color.cyan(S_BAR_END)}\\n`;\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise<string | symbol>;\n};\n\nexport interface PasswordOptions {\n\tmessage: string;\n\tmask?: string;\n\tvalidate?: (value: string) => string | Error | undefined;\n}\nexport const password = (opts: PasswordOptions) => {\n\treturn new PasswordPrompt({\n\t\tvalidate: opts.validate,\n\t\tmask: opts.mask ?? S_PASSWORD_MASK,\n\t\trender() {\n\t\t\tconst title = `${color.gray(S_BAR)}\\n${symbol(this.state)} ${opts.message}\\n`;\n\t\t\tconst value = this.valueWithCursor;\n\t\t\tconst masked = this.masked;\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'error':\n\t\t\t\t\treturn `${title.trim()}\\n${color.yellow(S_BAR)} ${masked}\\n${color.yellow(\n\t\t\t\t\t\tS_BAR_END\n\t\t\t\t\t)} ${color.yellow(this.error)}\\n`;\n\t\t\t\tcase 'submit':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${color.dim(masked)}`;\n\t\t\t\tcase 'cancel':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${color.strikethrough(color.dim(masked ?? ''))}${\n\t\t\t\t\t\tmasked ? `\\n${color.gray(S_BAR)}` : ''\n\t\t\t\t\t}`;\n\t\t\t\tdefault:\n\t\t\t\t\treturn `${title}${color.cyan(S_BAR)} ${value}\\n${color.cyan(S_BAR_END)}\\n`;\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise<string | symbol>;\n};\n\nexport interface ConfirmOptions {\n\tmessage: string;\n\tactive?: string;\n\tinactive?: string;\n\tinitialValue?: boolean;\n}\nexport const confirm = (opts: ConfirmOptions) => {\n\tconst active = opts.active ?? 'Yes';\n\tconst inactive = opts.inactive ?? 'No';\n\treturn new ConfirmPrompt({\n\t\tactive,\n\t\tinactive,\n\t\tinitialValue: opts.initialValue ?? true,\n\t\trender() {\n\t\t\tconst title = `${color.gray(S_BAR)}\\n${symbol(this.state)} ${opts.message}\\n`;\n\t\t\tconst value = this.value ? active : inactive;\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'submit':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${color.dim(value)}`;\n\t\t\t\tcase 'cancel':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${color.strikethrough(\n\t\t\t\t\t\tcolor.dim(value)\n\t\t\t\t\t)}\\n${color.gray(S_BAR)}`;\n\t\t\t\tdefault: {\n\t\t\t\t\treturn `${title}${color.cyan(S_BAR)} ${\n\t\t\t\t\t\tthis.value\n\t\t\t\t\t\t\t? `${color.green(S_RADIO_ACTIVE)} ${active}`\n\t\t\t\t\t\t\t: `${color.dim(S_RADIO_INACTIVE)} ${color.dim(active)}`\n\t\t\t\t\t} ${color.dim('/')} ${\n\t\t\t\t\t\t!this.value\n\t\t\t\t\t\t\t? `${color.green(S_RADIO_ACTIVE)} ${inactive}`\n\t\t\t\t\t\t\t: `${color.dim(S_RADIO_INACTIVE)} ${color.dim(inactive)}`\n\t\t\t\t\t}\\n${color.cyan(S_BAR_END)}\\n`;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise<boolean | symbol>;\n};\n\ntype Primitive = Readonly<string | boolean | number>;\n\nexport type Option<Value> = Value extends Primitive\n\t? {\n\t\t\t/**\n\t\t\t * Internal data for this option.\n\t\t\t */\n\t\t\tvalue: Value;\n\t\t\t/**\n\t\t\t * The optional, user-facing text for this option.\n\t\t\t *\n\t\t\t * By default, the `value` is converted to a string.\n\t\t\t */\n\t\t\tlabel?: string;\n\t\t\t/**\n\t\t\t * An optional hint to display to the user when\n\t\t\t * this option might be selected.\n\t\t\t *\n\t\t\t * By default, no `hint` is displayed.\n\t\t\t */\n\t\t\thint?: string;\n\t\t}\n\t: {\n\t\t\t/**\n\t\t\t * Internal data for this option.\n\t\t\t */\n\t\t\tvalue: Value;\n\t\t\t/**\n\t\t\t * Required. The user-facing text for this option.\n\t\t\t */\n\t\t\tlabel: string;\n\t\t\t/**\n\t\t\t * An optional hint to display to the user when\n\t\t\t * this option might be selected.\n\t\t\t *\n\t\t\t * By default, no `hint` is displayed.\n\t\t\t */\n\t\t\thint?: string;\n\t\t};\n\nexport interface SelectOptions<Value> {\n\tmessage: string;\n\toptions: Option<Value>[];\n\tinitialValue?: Value;\n\tmaxItems?: number;\n}\n\nexport const select = <Value>(opts: SelectOptions<Value>) => {\n\tconst opt = (option: Option<Value>, state: 'inactive' | 'active' | 'selected' | 'cancelled') => {\n\t\tconst label = option.label ?? String(option.value);\n\t\tswitch (state) {\n\t\t\tcase 'selected':\n\t\t\t\treturn `${color.dim(label)}`;\n\t\t\tcase 'active':\n\t\t\t\treturn `${color.green(S_RADIO_ACTIVE)} ${label} ${\n\t\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t\t}`;\n\t\t\tcase 'cancelled':\n\t\t\t\treturn `${color.strikethrough(color.dim(label))}`;\n\t\t\tdefault:\n\t\t\t\treturn `${color.dim(S_RADIO_INACTIVE)} ${color.dim(label)}`;\n\t\t}\n\t};\n\n\treturn new SelectPrompt({\n\t\toptions: opts.options,\n\t\tinitialValue: opts.initialValue,\n\t\trender() {\n\t\t\tconst title = `${color.gray(S_BAR)}\\n${symbol(this.state)} ${opts.message}\\n`;\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'submit':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${opt(this.options[this.cursor], 'selected')}`;\n\t\t\t\tcase 'cancel':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${opt(\n\t\t\t\t\t\tthis.options[this.cursor],\n\t\t\t\t\t\t'cancelled'\n\t\t\t\t\t)}\\n${color.gray(S_BAR)}`;\n\t\t\t\tdefault: {\n\t\t\t\t\treturn `${title}${color.cyan(S_BAR)} ${limitOptions({\n\t\t\t\t\t\tcursor: this.cursor,\n\t\t\t\t\t\toptions: this.options,\n\t\t\t\t\t\tmaxItems: opts.maxItems,\n\t\t\t\t\t\tstyle: (item, active) => opt(item, active ? 'active' : 'inactive'),\n\t\t\t\t\t}).join(`\\n${color.cyan(S_BAR)} `)}\\n${color.cyan(S_BAR_END)}\\n`;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise<Value | symbol>;\n};\n\nexport const selectKey = <Value extends string>(opts: SelectOptions<Value>) => {\n\tconst opt = (\n\t\toption: Option<Value>,\n\t\tstate: 'inactive' | 'active' | 'selected' | 'cancelled' = 'inactive'\n\t) => {\n\t\tconst label = option.label ?? String(option.value);\n\t\tif (state === 'selected') {\n\t\t\treturn `${color.dim(label)}`;\n\t\t}\n\t\tif (state === 'cancelled') {\n\t\t\treturn `${color.strikethrough(color.dim(label))}`;\n\t\t}\n\t\tif (state === 'active') {\n\t\t\treturn `${color.bgCyan(color.gray(` ${option.value} `))} ${label} ${\n\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t}`;\n\t\t}\n\t\treturn `${color.gray(color.bgWhite(color.inverse(` ${option.value} `)))} ${label} ${\n\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t}`;\n\t};\n\n\treturn new SelectKeyPrompt({\n\t\toptions: opts.options,\n\t\tinitialValue: opts.initialValue,\n\t\trender() {\n\t\t\tconst title = `${color.gray(S_BAR)}\\n${symbol(this.state)} ${opts.message}\\n`;\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'submit':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${opt(\n\t\t\t\t\t\tthis.options.find((opt) => opt.value === this.value) ?? opts.options[0],\n\t\t\t\t\t\t'selected'\n\t\t\t\t\t)}`;\n\t\t\t\tcase 'cancel':\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${opt(this.options[0], 'cancelled')}\\n${color.gray(\n\t\t\t\t\t\tS_BAR\n\t\t\t\t\t)}`;\n\t\t\t\tdefault: {\n\t\t\t\t\treturn `${title}${color.cyan(S_BAR)} ${this.options\n\t\t\t\t\t\t.map((option, i) => opt(option, i === this.cursor ? 'active' : 'inactive'))\n\t\t\t\t\t\t.join(`\\n${color.cyan(S_BAR)} `)}\\n${color.cyan(S_BAR_END)}\\n`;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise<Value | symbol>;\n};\n\nexport interface MultiSelectOptions<Value> {\n\tmessage: string;\n\toptions: Option<Value>[];\n\tinitialValues?: Value[];\n\tmaxItems?: number;\n\trequired?: boolean;\n\tcursorAt?: Value;\n}\nexport const multiselect = <Value>(opts: MultiSelectOptions<Value>) => {\n\tconst opt = (\n\t\toption: Option<Value>,\n\t\tstate: 'inactive' | 'active' | 'selected' | 'active-selected' | 'submitted' | 'cancelled'\n\t) => {\n\t\tconst label = option.label ?? String(option.value);\n\t\tif (state === 'active') {\n\t\t\treturn `${color.cyan(S_CHECKBOX_ACTIVE)} ${label} ${\n\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t}`;\n\t\t}\n\t\tif (state === 'selected') {\n\t\t\treturn `${color.green(S_CHECKBOX_SELECTED)} ${color.dim(label)} ${\n\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t}`;\n\t\t}\n\t\tif (state === 'cancelled') {\n\t\t\treturn `${color.strikethrough(color.dim(label))}`;\n\t\t}\n\t\tif (state === 'active-selected') {\n\t\t\treturn `${color.green(S_CHECKBOX_SELECTED)} ${label} ${\n\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t}`;\n\t\t}\n\t\tif (state === 'submitted') {\n\t\t\treturn `${color.dim(label)}`;\n\t\t}\n\t\treturn `${color.dim(S_CHECKBOX_INACTIVE)} ${color.dim(label)}`;\n\t};\n\n\treturn new MultiSelectPrompt({\n\t\toptions: opts.options,\n\t\tinitialValues: opts.initialValues,\n\t\trequired: opts.required ?? true,\n\t\tcursorAt: opts.cursorAt,\n\t\tvalidate(selected: Value[]) {\n\t\t\tif (this.required && selected.length === 0)\n\t\t\t\treturn `Please select at least one option.\\n${color.reset(\n\t\t\t\t\tcolor.dim(\n\t\t\t\t\t\t`Press ${color.gray(color.bgWhite(color.inverse(' space ')))} to select, ${color.gray(\n\t\t\t\t\t\t\tcolor.bgWhite(color.inverse(' enter '))\n\t\t\t\t\t\t)} to submit`\n\t\t\t\t\t)\n\t\t\t\t)}`;\n\t\t},\n\t\trender() {\n\t\t\tconst title = `${color.gray(S_BAR)}\\n${symbol(this.state)} ${opts.message}\\n`;\n\n\t\t\tconst styleOption = (option: Option<Value>, active: boolean) => {\n\t\t\t\tconst selected = this.value.includes(option.value);\n\t\t\t\tif (active && selected) {\n\t\t\t\t\treturn opt(option, 'active-selected');\n\t\t\t\t}\n\t\t\t\tif (selected) {\n\t\t\t\t\treturn opt(option, 'selected');\n\t\t\t\t}\n\t\t\t\treturn opt(option, active ? 'active' : 'inactive');\n\t\t\t};\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'submit': {\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${\n\t\t\t\t\t\tthis.options\n\t\t\t\t\t\t\t.filter(({ value }) => this.value.includes(value))\n\t\t\t\t\t\t\t.map((option) => opt(option, 'submitted'))\n\t\t\t\t\t\t\t.join(color.dim(', ')) || color.dim('none')\n\t\t\t\t\t}`;\n\t\t\t\t}\n\t\t\t\tcase 'cancel': {\n\t\t\t\t\tconst label = this.options\n\t\t\t\t\t\t.filter(({ value }) => this.value.includes(value))\n\t\t\t\t\t\t.map((option) => opt(option, 'cancelled'))\n\t\t\t\t\t\t.join(color.dim(', '));\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${\n\t\t\t\t\t\tlabel.trim() ? `${label}\\n${color.gray(S_BAR)}` : ''\n\t\t\t\t\t}`;\n\t\t\t\t}\n\t\t\t\tcase 'error': {\n\t\t\t\t\tconst footer = this.error\n\t\t\t\t\t\t.split('\\n')\n\t\t\t\t\t\t.map((ln, i) =>\n\t\t\t\t\t\t\ti === 0 ? `${color.yellow(S_BAR_END)} ${color.yellow(ln)}` : ` ${ln}`\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.join('\\n');\n\t\t\t\t\treturn `${title + color.yellow(S_BAR)} ${limitOptions({\n\t\t\t\t\t\toptions: this.options,\n\t\t\t\t\t\tcursor: this.cursor,\n\t\t\t\t\t\tmaxItems: opts.maxItems,\n\t\t\t\t\t\tstyle: styleOption,\n\t\t\t\t\t}).join(`\\n${color.yellow(S_BAR)} `)}\\n${footer}\\n`;\n\t\t\t\t}\n\t\t\t\tdefault: {\n\t\t\t\t\treturn `${title}${color.cyan(S_BAR)} ${limitOptions({\n\t\t\t\t\t\toptions: this.options,\n\t\t\t\t\t\tcursor: this.cursor,\n\t\t\t\t\t\tmaxItems: opts.maxItems,\n\t\t\t\t\t\tstyle: styleOption,\n\t\t\t\t\t}).join(`\\n${color.cyan(S_BAR)} `)}\\n${color.cyan(S_BAR_END)}\\n`;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise<Value[] | symbol>;\n};\n\nexport interface GroupMultiSelectOptions<Value> {\n\tmessage: string;\n\toptions: Record<string, Option<Value>[]>;\n\tinitialValues?: Value[];\n\trequired?: boolean;\n\tcursorAt?: Value;\n\tselectableGroups?: boolean;\n}\nexport const groupMultiselect = <Value>(opts: GroupMultiSelectOptions<Value>) => {\n\tconst { selectableGroups = true } = opts;\n\tconst opt = (\n\t\toption: Option<Value>,\n\t\tstate:\n\t\t\t| 'inactive'\n\t\t\t| 'active'\n\t\t\t| 'selected'\n\t\t\t| 'active-selected'\n\t\t\t| 'group-active'\n\t\t\t| 'group-active-selected'\n\t\t\t| 'submitted'\n\t\t\t| 'cancelled',\n\t\toptions: Option<Value>[] = []\n\t) => {\n\t\tconst label = option.label ?? String(option.value);\n\t\tconst isItem = typeof (option as any).group === 'string';\n\t\tconst next = isItem && (options[options.indexOf(option) + 1] ?? { group: true });\n\t\tconst isLast = isItem && (next as any).group === true;\n\t\tconst prefix = isItem ? (selectableGroups ? `${isLast ? S_BAR_END : S_BAR} ` : ' ') : '';\n\n\t\tif (state === 'active') {\n\t\t\treturn `${color.dim(prefix)}${color.cyan(S_CHECKBOX_ACTIVE)} ${label} ${\n\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t}`;\n\t\t}\n\t\tif (state === 'group-active') {\n\t\t\treturn `${prefix}${color.cyan(S_CHECKBOX_ACTIVE)} ${color.dim(label)}`;\n\t\t}\n\t\tif (state === 'group-active-selected') {\n\t\t\treturn `${prefix}${color.green(S_CHECKBOX_SELECTED)} ${color.dim(label)}`;\n\t\t}\n\t\tif (state === 'selected') {\n\t\t\tconst selectedCheckbox = isItem || selectableGroups ? color.green(S_CHECKBOX_SELECTED) : '';\n\t\t\treturn `${color.dim(prefix)}${selectedCheckbox} ${color.dim(label)} ${\n\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t}`;\n\t\t}\n\t\tif (state === 'cancelled') {\n\t\t\treturn `${color.strikethrough(color.dim(label))}`;\n\t\t}\n\t\tif (state === 'active-selected') {\n\t\t\treturn `${color.dim(prefix)}${color.green(S_CHECKBOX_SELECTED)} ${label} ${\n\t\t\t\toption.hint ? color.dim(`(${option.hint})`) : ''\n\t\t\t}`;\n\t\t}\n\t\tif (state === 'submitted') {\n\t\t\treturn `${color.dim(label)}`;\n\t\t}\n\t\tconst unselectedCheckbox = isItem || selectableGroups ? color.dim(S_CHECKBOX_INACTIVE) : '';\n\t\treturn `${color.dim(prefix)}${unselectedCheckbox} ${color.dim(label)}`;\n\t};\n\n\treturn new GroupMultiSelectPrompt({\n\t\toptions: opts.options,\n\t\tinitialValues: opts.initialValues,\n\t\trequired: opts.required ?? true,\n\t\tcursorAt: opts.cursorAt,\n\t\tselectableGroups,\n\t\tvalidate(selected: Value[]) {\n\t\t\tif (this.required && selected.length === 0)\n\t\t\t\treturn `Please select at least one option.\\n${color.reset(\n\t\t\t\t\tcolor.dim(\n\t\t\t\t\t\t`Press ${color.gray(color.bgWhite(color.inverse(' space ')))} to select, ${color.gray(\n\t\t\t\t\t\t\tcolor.bgWhite(color.inverse(' enter '))\n\t\t\t\t\t\t)} to submit`\n\t\t\t\t\t)\n\t\t\t\t)}`;\n\t\t},\n\t\trender() {\n\t\t\tconst title = `${color.gray(S_BAR)}\\n${symbol(this.state)} ${opts.message}\\n`;\n\n\t\t\tswitch (this.state) {\n\t\t\t\tcase 'submit': {\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${this.options\n\t\t\t\t\t\t.filter(({ value }) => this.value.includes(value))\n\t\t\t\t\t\t.map((option) => opt(option, 'submitted'))\n\t\t\t\t\t\t.join(color.dim(', '))}`;\n\t\t\t\t}\n\t\t\t\tcase 'cancel': {\n\t\t\t\t\tconst label = this.options\n\t\t\t\t\t\t.filter(({ value }) => this.value.includes(value))\n\t\t\t\t\t\t.map((option) => opt(option, 'cancelled'))\n\t\t\t\t\t\t.join(color.dim(', '));\n\t\t\t\t\treturn `${title}${color.gray(S_BAR)} ${\n\t\t\t\t\t\tlabel.trim() ? `${label}\\n${color.gray(S_BAR)}` : ''\n\t\t\t\t\t}`;\n\t\t\t\t}\n\t\t\t\tcase 'error': {\n\t\t\t\t\tconst footer = this.error\n\t\t\t\t\t\t.split('\\n')\n\t\t\t\t\t\t.map((ln, i) =>\n\t\t\t\t\t\t\ti === 0 ? `${color.yellow(S_BAR_END)} ${color.yellow(ln)}` : ` ${ln}`\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.join('\\n');\n\t\t\t\t\treturn `${title}${color.yellow(S_BAR)} ${this.options\n\t\t\t\t\t\t.map((option, i, options) => {\n\t\t\t\t\t\t\tconst selected =\n\t\t\t\t\t\t\t\tthis.value.includes(option.value) ||\n\t\t\t\t\t\t\t\t(option.group === true && this.isGroupSelected(`${option.value}`));\n\t\t\t\t\t\t\tconst active = i === this.cursor;\n\t\t\t\t\t\t\tconst groupActive =\n\t\t\t\t\t\t\t\t!active &&\n\t\t\t\t\t\t\t\ttypeof option.group === 'string' &&\n\t\t\t\t\t\t\t\tthis.options[this.cursor].value === option.group;\n\t\t\t\t\t\t\tif (groupActive) {\n\t\t\t\t\t\t\t\treturn opt(option, selected ? 'group-active-selected' : 'group-active', options);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (active && selected) {\n\t\t\t\t\t\t\t\treturn opt(option, 'active-selected', options);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (selected) {\n\t\t\t\t\t\t\t\treturn opt(option, 'selected', options);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn opt(option, active ? 'active' : 'inactive', options);\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.join(`\\n${color.yellow(S_BAR)} `)}\\n${footer}\\n`;\n\t\t\t\t}\n\t\t\t\tdefault: {\n\t\t\t\t\treturn `${title}${color.cyan(S_BAR)} ${this.options\n\t\t\t\t\t\t.map((option, i, options) => {\n\t\t\t\t\t\t\tconst selected =\n\t\t\t\t\t\t\t\tthis.value.includes(option.value) ||\n\t\t\t\t\t\t\t\t(option.group === true && this.isGroupSelected(`${option.value}`));\n\t\t\t\t\t\t\tconst active = i === this.cursor;\n\t\t\t\t\t\t\tconst groupActive =\n\t\t\t\t\t\t\t\t!active &&\n\t\t\t\t\t\t\t\ttypeof option.group === 'string' &&\n\t\t\t\t\t\t\t\tthis.options[this.cursor].value === option.group;\n\t\t\t\t\t\t\tif (groupActive) {\n\t\t\t\t\t\t\t\treturn opt(option, selected ? 'group-active-selected' : 'group-active', options);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (active && selected) {\n\t\t\t\t\t\t\t\treturn opt(option, 'active-selected', options);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (selected) {\n\t\t\t\t\t\t\t\treturn opt(option, 'selected', options);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn opt(option, active ? 'active' : 'inactive', options);\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.join(`\\n${color.cyan(S_BAR)} `)}\\n${color.cyan(S_BAR_END)}\\n`;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t}).prompt() as Promise<Value[] | symbol>;\n};\n\nexport const note = (message = '', title = '') => {\n\tconst lines = `\\n${message}\\n`.split('\\n');\n\tconst titleLen = strip(title).length;\n\tconst len =\n\t\tMath.max(\n\t\t\tlines.reduce((sum, ln) => {\n\t\t\t\tconst line = strip(ln);\n\t\t\t\treturn line.length > sum ? line.length : sum;\n\t\t\t}, 0),\n\t\t\ttitleLen\n\t\t) + 2;\n\tconst msg = lines\n\t\t.map(\n\t\t\t(ln) =>\n\t\t\t\t`${color.gray(S_BAR)} ${color.dim(ln)}${' '.repeat(len - strip(ln).length)}${color.gray(\n\t\t\t\t\tS_BAR\n\t\t\t\t)}`\n\t\t)\n\t\t.join('\\n');\n\tprocess.stdout.write(\n\t\t`${color.gray(S_BAR)}\\n${color.green(S_STEP_SUBMIT)} ${color.reset(title)} ${color.gray(\n\t\t\tS_BAR_H.repeat(Math.max(len - titleLen - 1, 1)) + S_CORNER_TOP_RIGHT\n\t\t)}\\n${msg}\\n${color.gray(S_CONNECT_LEFT + S_BAR_H.repeat(len + 2) + S_CORNER_BOTTOM_RIGHT)}\\n`\n\t);\n};\n\nexport const cancel = (message = '') => {\n\tprocess.stdout.write(`${color.gray(S_BAR_END)} ${color.red(message)}\\n\\n`);\n};\n\nexport const intro = (title = '') => {\n\tprocess.stdout.write(`${color.gray(S_BAR_START)} ${title}\\n`);\n};\n\nexport const outro = (message = '') => {\n\tprocess.stdout.write(`${color.gray(S_BAR)}\\n${color.gray(S_BAR_END)} ${message}\\n\\n`);\n};\n\nexport type LogMessageOptions = {\n\tsymbol?: string;\n};\nexport const log = {\n\tmessage: (message = '', { symbol = color.gray(S_BAR) }: LogMessageOptions = {}) => {\n\t\tconst parts = [`${color.gray(S_BAR)}`];\n\t\tif (message) {\n\t\t\tconst [firstLine, ...lines] = message.split('\\n');\n\t\t\tparts.push(`${symbol} ${firstLine}`, ...lines.map((ln) => `${color.gray(S_BAR)} ${ln}`));\n\t\t}\n\t\tprocess.stdout.write(`${parts.join('\\n')}\\n`);\n\t},\n\tinfo: (message: string) => {\n\t\tlog.message(message, { symbol: color.blue(S_INFO) });\n\t},\n\tsuccess: (message: string) => {\n\t\tlog.message(message, { symbol: color.green(S_SUCCESS) });\n\t},\n\tstep: (message: string) => {\n\t\tlog.message(message, { symbol: color.green(S_STEP_SUBMIT) });\n\t},\n\twarn: (message: string) => {\n\t\tlog.message(message, { symbol: color.yellow(S_WARN) });\n\t},\n\t/** alias for `log.warn()`. */\n\twarning: (message: string) => {\n\t\tlog.warn(message);\n\t},\n\terror: (message: string) => {\n\t\tlog.message(message, { symbol: color.red(S_ERROR) });\n\t},\n};\n\nconst prefix = `${color.gray(S_BAR)} `;\nexport const stream = {\n\tmessage: async (\n\t\titerable: Iterable<string> | AsyncIterable<string>,\n\t\t{ symbol = color.gray(S_BAR) }: LogMessageOptions = {}\n\t) => {\n\t\tprocess.stdout.write(`${color.gray(S_BAR)}\\n${symbol} `);\n\t\tlet lineWidth = 3;\n\t\tfor await (let chunk of iterable) {\n\t\t\tchunk = chunk.replace(/\\n/g, `\\n${prefix}`);\n\t\t\tif (chunk.includes('\\n')) {\n\t\t\t\tlineWidth = 3 + strip(chunk.slice(chunk.lastIndexOf('\\n'))).length;\n\t\t\t}\n\t\t\tconst chunkLen = strip(chunk).length;\n\t\t\tif (lineWidth + chunkLen < process.stdout.columns) {\n\t\t\t\tlineWidth += chunkLen;\n\t\t\t\tprocess.stdout.write(chunk);\n\t\t\t} else {\n\t\t\t\tprocess.stdout.write(`\\n${prefix}${chunk.trimStart()}`);\n\t\t\t\tlineWidth = 3 + strip(chunk.trimStart()).length;\n\t\t\t}\n\t\t}\n\t\tprocess.stdout.write('\\n');\n\t},\n\tinfo: (iterable: Iterable<string> | AsyncIterable<string>) => {\n\t\treturn stream.message(iterable, { symbol: color.blue(S_INFO) });\n\t},\n\tsuccess: (iterable: Iterable<string> | AsyncIterable<string>) => {\n\t\treturn stream.message(iterable, { symbol: color.green(S_SUCCESS) });\n\t},\n\tstep: (iterable: Iterable<string> | AsyncIterable<string>) => {\n\t\treturn stream.message(iterable, { symbol: color.green(S_STEP_SUBMIT) });\n\t},\n\twarn: (iterable: Iterable<string> | AsyncIterable<string>) => {\n\t\treturn stream.message(iterable, { symbol: color.yellow(S_WARN) });\n\t},\n\t/** alias for `log.warn()`. */\n\twarning: (iterable: Iterable<string> | AsyncIterable<string>) => {\n\t\treturn stream.warn(iterable);\n\t},\n\terror: (iterable: Iterable<string> | AsyncIterable<string>) => {\n\t\treturn stream.message(iterable, { symbol: color.red(S_ERROR) });\n\t},\n};\n\nexport interface SpinnerOptions {\n\tindicator?: 'dots' | 'timer';\n}\n\nexport const spinner = ({ indicator = 'dots' }: SpinnerOptions = {}) => {\n\tconst frames = unicode ? ['◒', '◐', '◓', '◑'] : ['•', 'o', 'O', '0'];\n\tconst delay = unicode ? 80 : 120;\n\tconst isCI = process.env.CI === 'true';\n\n\tlet unblock: () => void;\n\tlet loop: NodeJS.Timeout;\n\tlet isSpinnerActive = false;\n\tlet _message = '';\n\tlet _prevMessage: string | undefined = undefined;\n\tlet _origin: number = performance.now();\n\n\tconst handleExit = (code: number) => {\n\t\tconst msg = code > 1 ? 'Something went wrong' : 'Canceled';\n\t\tif (isSpinnerActive) stop(msg, code);\n\t};\n\n\tconst errorEventHandler = () => handleExit(2);\n\tconst signalEventHandler = () => handleExit(1);\n\n\tconst registerHooks = () => {\n\t\t// Reference: https://nodejs.org/api/process.html#event-uncaughtexception\n\t\tprocess.on('uncaughtExceptionMonitor', errorEventHandler);\n\t\t// Reference: https://nodejs.org/api/process.html#event-unhandledrejection\n\t\tprocess.on('unhandledRejection', errorEventHandler);\n\t\t// Reference Signal Events: https://nodejs.org/api/process.html#signal-events\n\t\tprocess.on('SIGINT', signalEventHandler);\n\t\tprocess.on('SIGTERM', signalEventHandler);\n\t\tprocess.on('exit', handleExit);\n\t};\n\n\tconst clearHooks = () => {\n\t\tprocess.removeListener('uncaughtExceptionMonitor', errorEventHandler);\n\t\tprocess.removeListener('unhandledRejection', errorEventHandler);\n\t\tprocess.removeListener('SIGINT', signalEventHandler);\n\t\tprocess.removeListener('SIGTERM', signalEventHandler);\n\t\tprocess.removeListener('exit', handleExit);\n\t};\n\n\tconst clearPrevMessage = () => {\n\t\tif (_prevMessage === undefined) return;\n\t\tif (isCI) process.stdout.write('\\n');\n\t\tconst prevLines = _prevMessage.split('\\n');\n\t\tprocess.stdout.write(cursor.move(-999, prevLines.length - 1));\n\t\tprocess.stdout.write(erase.down(prevLines.length));\n\t};\n\n\tconst parseMessage = (msg: string): string => {\n\t\treturn msg.replace(/\\.+$/, '');\n\t};\n\n\tconst formatTimer = (origin: number): string => {\n\t\tconst duration = (performance.now() - origin) / 1000;\n\t\tconst min = Math.floor(duration / 60);\n\t\tconst secs = Math.floor(duration % 60);\n\t\treturn min > 0 ? `[${min}m ${secs}s]` : `[${secs}s]`;\n\t};\n\n\tconst start = (msg = ''): void => {\n\t\tisSpinnerActive = true;\n\t\tunblock = block();\n\t\t_message = parseMessage(msg);\n\t\t_origin = performance.now();\n\t\tprocess.stdout.write(`${color.gray(S_BAR)}\\n`);\n\t\tlet frameIndex = 0;\n\t\tlet indicatorTimer = 0;\n\t\tregisterHooks();\n\t\tloop = setInterval(() => {\n\t\t\tif (isCI && _message === _prevMessage) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tclearPrevMessage();\n\t\t\t_prevMessage = _message;\n\t\t\tconst frame = color.magenta(frames[frameIndex]);\n\n\t\t\tif (isCI) {\n\t\t\t\tprocess.stdout.write(`${frame} ${_message}...`);\n\t\t\t} else if (indicator === 'timer') {\n\t\t\t\tprocess.stdout.write(`${frame} ${_message} ${formatTimer(_origin)}`);\n\t\t\t} else {\n\t\t\t\tconst loadingDots = '.'.repeat(Math.floor(indicatorTimer)).slice(0, 3);\n\t\t\t\tprocess.stdout.write(`${frame} ${_message}${loadingDots}`);\n\t\t\t}\n\n\t\t\tframeIndex = frameIndex + 1 < frames.length ? frameIndex + 1 : 0;\n\t\t\tindicatorTimer = indicatorTimer < frames.length ? indicatorTimer + 0.125 : 0;\n\t\t}, delay);\n\t};\n\n\tconst stop = (msg = '', code = 0): void => {\n\t\tisSpinnerActive = false;\n\t\tclearInterval(loop);\n\t\tclearPrevMessage();\n\t\tconst step =\n\t\t\tcode === 0\n\t\t\t\t? color.green(S_STEP_SUBMIT)\n\t\t\t\t: code === 1\n\t\t\t\t\t? color.red(S_STEP_CANCEL)\n\t\t\t\t\t: color.red(S_STEP_ERROR);\n\t\t_message = parseMessage(msg ?? _message);\n\t\tif (indicator === 'timer') {\n\t\t\tprocess.stdout.write(`${step} ${_message} ${formatTimer(_origin)}\\n`);\n\t\t} else {\n\t\t\tprocess.stdout.write(`${step} ${_message}\\n`);\n\t\t}\n\t\tclearHooks();\n\t\tunblock();\n\t};\n\n\tconst message = (msg = ''): void => {\n\t\t_message = parseMessage(msg ?? _message);\n\t};\n\n\treturn {\n\t\tstart,\n\t\tstop,\n\t\tmessage,\n\t};\n};\n\nexport type PromptGroupAwaitedReturn<T> = {\n\t[P in keyof T]: Exclude<Awaited<T[P]>, symbol>;\n};\n\nexport interface PromptGroupOptions<T> {\n\t/**\n\t * Control how the group can be canceled\n\t * if one of the prompts is canceled.\n\t */\n\tonCancel?: (opts: { results: Prettify<Partial<PromptGroupAwaitedReturn<T>>> }) => void;\n}\n\ntype Prettify<T> = {\n\t[P in keyof T]: T[P];\n} & {};\n\nexport type PromptGroup<T> = {\n\t[P in keyof T]: (opts: {\n\t\tresults: Prettify<Partial<PromptGroupAwaitedReturn<Omit<T, P>>>>;\n\t}) => undefined | Promise<T[P] | undefined>;\n};\n\n/**\n * Define a group of prompts to be displayed\n * and return a results of objects within the group\n */\nexport const group = async <T>(\n\tprompts: PromptGroup<T>,\n\topts?: PromptGroupOptions<T>\n): Promise<Prettify<PromptGroupAwaitedReturn<T>>> => {\n\tconst results = {} as any;\n\tconst promptNames = Object.keys(prompts);\n\n\tfor (const name of promptNames) {\n\t\tconst prompt = prompts[name as keyof T];\n\t\tconst result = await prompt({ results })?.catch((e) => {\n\t\t\tthrow e;\n\t\t});\n\n\t\t// Pass the results to the onCancel function\n\t\t// so the user can decide what to do with the results\n\t\t// TODO: Switch to callback within core to avoid isCancel Fn\n\t\tif (typeof opts?.onCancel === 'function' && isCancel(result)) {\n\t\t\tresults[name] = 'canceled';\n\t\t\topts.onCancel({ results });\n\t\t\tcontinue;\n\t\t}\n\n\t\tresults[name] = result;\n\t}\n\n\treturn results;\n};\n\nexport type Task = {\n\t/**\n\t * Task title\n\t */\n\ttitle: string;\n\t/**\n\t * Task function\n\t */\n\ttask: (message: (string: string) => void) => string | Promise<string> | void | Promise<void>;\n\n\t/**\n\t * If enabled === false the task will be skipped\n\t */\n\tenabled?: boolean;\n};\n\n/**\n * Define a group of tasks to be executed\n */\nexport const tasks = async (tasks: Task[]) => {\n\tfor (const task of tasks) {\n\t\tif (task.enabled === false) continue;\n\n\t\tconst s = spinner();\n\t\ts.start(task.title);\n\t\tconst result = await task.task(s.message);\n\t\ts.stop(result || task.title);\n\t}\n};\n","/**\n * @domflax/cli — project auto-detection for the interactive wizard (Q17 convenience).\n *\n * Pure, root-relative scanners used to PRE-FILL wizard prompts so the user doesn't have to type\n * CSS paths or source folders by hand. These are wizard conveniences only — the flag/non-interactive\n * path never calls them, so detection can never change a scripted invocation's behavior.\n */\n\nimport * as fs from 'node:fs';\nimport * as path from 'node:path';\n\n/** Directories never descended into when scanning for CSS (build output, vendored deps, VCS). */\nconst SKIP_DIRS: ReadonlySet<string> = new Set([\n 'node_modules',\n 'dist',\n 'build',\n '.next',\n 'out',\n 'coverage',\n '.git',\n 'domflax-out',\n]);\n\n/** Common source folders we suggest as inputs, in the order they're offered. */\nconst COMMON_INPUT_DIRS: readonly string[] = ['src', 'app', 'components', 'pages', 'lib', 'ui', 'public'];\n\n/** Upper bound on detected CSS files surfaced in the wizard, so huge repos stay responsive. */\nconst CSS_FILE_CAP = 200;\n\n/** Normalize an absolute path to a forward-slash, root-relative path (stable across platforms). */\nfunction toRelative(root: string, abs: string): string {\n const rel = path.relative(root, abs);\n return rel.split(path.sep).join('/');\n}\n\n/**\n * Recursively collect `*.css` files under `root` (excluding {@link SKIP_DIRS}), returning\n * root-relative, forward-slashed, sorted paths. Capped at {@link CSS_FILE_CAP} — logs to stderr if\n * the cap truncates the list. Missing/unreadable dirs yield an empty list (never throws).\n */\nexport function detectCssFiles(root: string): string[] {\n const found: string[] = [];\n let capped = false;\n\n const walk = (dir: string): void => {\n if (capped) return;\n let entries: fs.Dirent[];\n try {\n entries = fs.readdirSync(dir, { withFileTypes: true });\n } catch {\n return;\n }\n for (const entry of entries) {\n const full = path.join(dir, entry.name);\n if (entry.isDirectory()) {\n if (SKIP_DIRS.has(entry.name)) continue;\n walk(full);\n if (capped) return;\n } else if (entry.isFile() && entry.name.toLowerCase().endsWith('.css')) {\n found.push(toRelative(root, full));\n if (found.length >= CSS_FILE_CAP) {\n capped = true;\n return;\n }\n }\n }\n };\n\n walk(path.resolve(root));\n found.sort((a, b) => a.localeCompare(b));\n if (capped) {\n console.error(`domflax: more than ${CSS_FILE_CAP} CSS files found; showing the first ${CSS_FILE_CAP}.`);\n }\n return found;\n}\n\n/**\n * Return the subset of {@link COMMON_INPUT_DIRS} that exist as directories directly under `root`,\n * as root-relative paths (preserving the suggestion order). Never throws.\n */\nexport function detectInputDirs(root: string): string[] {\n const resolved = path.resolve(root);\n return COMMON_INPUT_DIRS.filter((name) => {\n try {\n return fs.statSync(path.join(resolved, name)).isDirectory();\n } catch {\n return false;\n }\n });\n}\n"],"mappings":"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A,MAAV,QACUA,MAAV,QACA,QAAUA,MAAaA,MAAa,QAC1BA,MAAV,QACUA,MAAV,QACA,QAAUA,MAAaA,MAAa,QACpC,QAAUA,MAAaA,MAAa,QACpC,QAAUA,MAAaA,MAAa,QACpC,QAAUA,MAAaA,MAAa,QAC1BA,MAAV,QACA,QAAUA,MAAaA,MAAa,QACpC,QAAUA,MAAaA,MAAa,QAC1BA,MAAV,QACUA,MAAV,QACUA,MAAV,QACUA,MAAV,QACA,QAAUA,MAAaA,MAAa,QACpC,QAAUA,MAAaA,MAAa,QAC1BA,MAAV,QACUA,MAAV,QACUA,MAAV,QACUA,MAAV,QACUA,MAAV,QACA,QAAUA,MAAaA,MAAa,QAC1BA,MAAV,QACUA,MAAV,QACA,QAAUA,MAAaA,MAAa,QAC1BA,MAAV,QACA,QAAUA,MAAaA,MAAa,QACpC,QAAUA,MAAaA,MAAa,QAC1BA,MAAV,QACUA,MAAV,QACUA,MAAV,QACA,QAAUA,MAAaA,MAAa,QACpC,QAAUA,MAAaA,MAAa,QACpC,QAAUA,MAAaA,MAAa,QACpC,QAAUA,MAAaA,MAAa,QACpC,QAAUA,MAAaA,MAAa,QACpC,QAAUA,MAAaA,MAAa,QAC1BA,MAAV,QACUA,MAAV,QACUA,MAAV,QACUA,MAAV,QACUA,MAAV,QACA,QAAUA,MAAaA,MAAa,QACpC,QAAUA,MAAaA,MAAa,QACpC,QAAUA,MAAaA,MAAa,QACpC,QAAUA,MAAaA,MAAa,QACpC,QAAUA,MAAaA,MAAa,QACpC,QAAUA,MAAaA,MAAa,QACpC,QAAUA,MAAaA,MAAa,QACpC,QAAUA,MAAaA,MAAa,QACpC,QAAUA,MAAaA,MAAa,QACpC,QAAUA,MAAaA,MAAa,QACpC,QAAUA,MAAaA,MAAa,QACpC,QAAUA,MAAaA,MAAa,QAC1BA,MAAV,QACA,QAAUA,MAAaA,MAAa,QACpC,QAAUA,MAAaA,MAAa,QAC1BA,MAAV,QACA,QAAUA,MAAaA,MAAa,QAC1BA,MAAV,QACA,QAAUA,MAAaA,MAAa,QACpC,QAAUA,MAAaA,MAAa,QAC1BA,MAAV,QACUA,MAAV,QACUA,MAAV,QACUA,MAAV,QACA,QAAUA,MAAaA,MAAa,QA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","names":["x","y","p","path","p","m","path","p","g","m","b","r","ansiRegex","onlyFirst","pattern","regex","stripAnsi","string","e","eaw","module","character","x","y","codePoint","code","stringToArray","characters","len","i","text","start","end","result","eawLen","chars","char","charLen","emojiRegex","stringWidth","options","ambiguousCharacterWidth","width","eastAsianWidth","ANSI_BACKGROUND_OFFSET","wrapAnsi16","offset","wrapAnsi256","wrapAnsi16m","red","green","blue","styles","foregroundColorNames","backgroundColorNames","assembleStyles","codes","groupName","group","styleName","style","hex","matches","colorString","integer","remainder","value","ansiStyles","ESCAPES","END_CODE","ANSI_ESCAPE_BELL","ANSI_CSI","ANSI_OSC","ANSI_SGR_TERMINATOR","ANSI_ESCAPE_LINK","wrapAnsiCode","wrapAnsiHyperlink","uri","wordLengths","wrapWord","rows","word","columns","isInsideEscape","isInsideLinkEscape","visible","index","characterLength","stringVisibleTrimSpacesRight","words","last","exec","returnValue","escapeCode","escapeUrl","lengths","rowLength","remainingColumns","breaksStartingThisLine","row","pre","groups","wrapAnsi","line","actions","settings","isActionKey","key","action","settings","value","diffLines","a","b","aLines","bLines","diff","i","isWindows","CANCEL_SYMBOL","isCancel","setRawMode","input","b","v","a","t","e","s","Prompt","options","trackValue","__publicField","input","stdin","output","stdout","render","signal","opts","event","params","cb","data","cbs","cleanup","subscriber","resolve","reject","CANCEL_SYMBOL","sink","Writable","chunk","encoding","done","readline","setRawMode","cursor","char","key","settings","problem","isActionKey","lines","wrap","frame","diff","diffLines","diffLine","erase","newLines","_selectableGroups","_selectableGroups","o","a","i","s","l","Prompt","opts","__publicField","value","char","key","allSelected","v","selected","e","u","SelectPrompt","Prompt","opts","__publicField","value","key","TextPrompt","Prompt","s1","s2","s3","color","opts","isUnicodeSupported","process","unicode","s","c","fallback","S_STEP_ACTIVE","S_STEP_CANCEL","S_STEP_ERROR","S_STEP_SUBMIT","S_BAR_START","S_BAR","S_BAR_END","S_RADIO_ACTIVE","S_RADIO_INACTIVE","S_CHECKBOX_ACTIVE","S_CHECKBOX_SELECTED","S_CHECKBOX_INACTIVE","S_PASSWORD_MASK","S_BAR_H","S_CORNER_TOP_RIGHT","S_CONNECT_LEFT","S_CORNER_BOTTOM_RIGHT","S_INFO","S_SUCCESS","S_WARN","S_ERROR","symbol","state","color","limitOptions","params","cursor","options","style","paramMaxItems","outputMaxItems","maxItems","slidingWindowLocation","shouldRenderTopEllipsis","shouldRenderBottomEllipsis","option","i","arr","isTopLimit","isBottomLimit","text","opts","TextPrompt","title","placeholder","value","select","opts","opt","option","state","label","color","S_RADIO_ACTIVE","S_RADIO_INACTIVE","SelectPrompt","title","S_BAR","symbol","limitOptions","item","active","S_BAR_END","multiselect","opts","opt","option","state","label","color","S_CHECKBOX_ACTIVE","S_CHECKBOX_SELECTED","S_CHECKBOX_INACTIVE","MultiSelectPrompt","selected","title","S_BAR","symbol","styleOption","active","value","footer","ln","i","S_BAR_END","limitOptions","cancel","message","color","S_BAR_END","intro","title","S_BAR_START","outro","S_BAR","prefix","color","S_BAR","fs","path","SKIP_DIRS","b","w"]}