1 line
90 KiB
Plaintext
1 line
90 KiB
Plaintext
{"version":3,"file":"index.mjs","sources":["../src/utils/cursor.ts","../../../node_modules/.pnpm/fast-string-truncated-width@1.2.1/node_modules/fast-string-truncated-width/dist/utils.js","../../../node_modules/.pnpm/fast-string-truncated-width@1.2.1/node_modules/fast-string-truncated-width/dist/index.js","../../../node_modules/.pnpm/fast-string-width@1.1.0/node_modules/fast-string-width/dist/index.js","../../../node_modules/.pnpm/fast-wrap-ansi@0.1.3/node_modules/fast-wrap-ansi/lib/main.js","../src/utils/settings.ts","../src/utils/string.ts","../src/utils/index.ts","../src/prompts/prompt.ts","../src/prompts/autocomplete.ts","../src/prompts/confirm.ts","../src/prompts/group-multiselect.ts","../src/prompts/multi-select.ts","../src/prompts/password.ts","../src/prompts/select.ts","../src/prompts/select-key.ts","../src/prompts/text.ts"],"sourcesContent":["export function findCursor<T extends { disabled?: boolean }>(\n\tcursor: number,\n\tdelta: number,\n\toptions: T[]\n) {\n\tconst hasEnabledOptions = options.some((opt) => !opt.disabled);\n\tif (!hasEnabledOptions) {\n\t\treturn cursor;\n\t}\n\tconst newCursor = cursor + delta;\n\tconst maxCursor = Math.max(options.length - 1, 0);\n\tconst clampedCursor = newCursor < 0 ? maxCursor : newCursor > maxCursor ? 0 : newCursor;\n\tconst newOption = options[clampedCursor];\n\tif (newOption.disabled) {\n\t\treturn findCursor(clampedCursor, delta < 0 ? -1 : 1, options);\n\t}\n\treturn clampedCursor;\n}\n","/* MAIN */\n//URL: https://github.com/sindresorhus/get-east-asian-width/blob/main/lookup.js\n//LICENSE: https://github.com/sindresorhus/get-east-asian-width/blob/main/license\n//TODO: Replace these with some unicode property classes, if the ones we need exist\nconst isAmbiguous = (x) => {\n return x === 0xA1 || x === 0xA4 || x === 0xA7 || x === 0xA8 || x === 0xAA || x === 0xAD || x === 0xAE || x >= 0xB0 && x <= 0xB4 || x >= 0xB6 && x <= 0xBA || x >= 0xBC && x <= 0xBF || x === 0xC6 || x === 0xD0 || x === 0xD7 || x === 0xD8 || x >= 0xDE && x <= 0xE1 || x === 0xE6 || x >= 0xE8 && x <= 0xEA || x === 0xEC || x === 0xED || x === 0xF0 || x === 0xF2 || x === 0xF3 || x >= 0xF7 && x <= 0xFA || x === 0xFC || x === 0xFE || x === 0x101 || x === 0x111 || x === 0x113 || x === 0x11B || x === 0x126 || x === 0x127 || x === 0x12B || x >= 0x131 && x <= 0x133 || x === 0x138 || x >= 0x13F && x <= 0x142 || x === 0x144 || x >= 0x148 && x <= 0x14B || x === 0x14D || x === 0x152 || x === 0x153 || x === 0x166 || x === 0x167 || x === 0x16B || x === 0x1CE || x === 0x1D0 || x === 0x1D2 || x === 0x1D4 || x === 0x1D6 || x === 0x1D8 || x === 0x1DA || x === 0x1DC || x === 0x251 || x === 0x261 || x === 0x2C4 || x === 0x2C7 || x >= 0x2C9 && x <= 0x2CB || x === 0x2CD || x === 0x2D0 || x >= 0x2D8 && x <= 0x2DB || x === 0x2DD || x === 0x2DF || x >= 0x300 && x <= 0x36F || x >= 0x391 && x <= 0x3A1 || x >= 0x3A3 && x <= 0x3A9 || x >= 0x3B1 && x <= 0x3C1 || x >= 0x3C3 && x <= 0x3C9 || x === 0x401 || x >= 0x410 && x <= 0x44F || x === 0x451 || x === 0x2010 || x >= 0x2013 && x <= 0x2016 || x === 0x2018 || x === 0x2019 || x === 0x201C || x === 0x201D || x >= 0x2020 && x <= 0x2022 || x >= 0x2024 && x <= 0x2027 || x === 0x2030 || x === 0x2032 || x === 0x2033 || x === 0x2035 || x === 0x203B || x === 0x203E || x === 0x2074 || x === 0x207F || x >= 0x2081 && x <= 0x2084 || x === 0x20AC || x === 0x2103 || x === 0x2105 || x === 0x2109 || x === 0x2113 || x === 0x2116 || x === 0x2121 || x === 0x2122 || x === 0x2126 || x === 0x212B || x === 0x2153 || x === 0x2154 || x >= 0x215B && x <= 0x215E || x >= 0x2160 && x <= 0x216B || x >= 0x2170 && x <= 0x2179 || x === 0x2189 || x >= 0x2190 && x <= 0x2199 || x === 0x21B8 || x === 0x21B9 || x === 0x21D2 || x === 0x21D4 || x === 0x21E7 || x === 0x2200 || x === 0x2202 || x === 0x2203 || x === 0x2207 || x === 0x2208 || x === 0x220B || x === 0x220F || x === 0x2211 || x === 0x2215 || x === 0x221A || x >= 0x221D && x <= 0x2220 || x === 0x2223 || x === 0x2225 || x >= 0x2227 && x <= 0x222C || x === 0x222E || x >= 0x2234 && x <= 0x2237 || x === 0x223C || x === 0x223D || x === 0x2248 || x === 0x224C || x === 0x2252 || x === 0x2260 || x === 0x2261 || x >= 0x2264 && x <= 0x2267 || x === 0x226A || x === 0x226B || x === 0x226E || x === 0x226F || x === 0x2282 || x === 0x2283 || x === 0x2286 || x === 0x2287 || x === 0x2295 || x === 0x2299 || x === 0x22A5 || x === 0x22BF || x === 0x2312 || x >= 0x2460 && x <= 0x24E9 || x >= 0x24EB && x <= 0x254B || x >= 0x2550 && x <= 0x2573 || x >= 0x2580 && x <= 0x258F || x >= 0x2592 && x <= 0x2595 || x === 0x25A0 || x === 0x25A1 || x >= 0x25A3 && x <= 0x25A9 || x === 0x25B2 || x === 0x25B3 || x === 0x25B6 || x === 0x25B7 || x === 0x25BC || x === 0x25BD || x === 0x25C0 || x === 0x25C1 || x >= 0x25C6 && x <= 0x25C8 || x === 0x25CB || x >= 0x25CE && x <= 0x25D1 || x >= 0x25E2 && x <= 0x25E5 || x === 0x25EF || x === 0x2605 || x === 0x2606 || x === 0x2609 || x === 0x260E || x === 0x260F || x === 0x261C || x === 0x261E || x === 0x2640 || x === 0x2642 || x === 0x2660 || x === 0x2661 || x >= 0x2663 && x <= 0x2665 || x >= 0x2667 && x <= 0x266A || x === 0x266C || x === 0x266D || x === 0x266F || x === 0x269E || x === 0x269F || x === 0x26BF || x >= 0x26C6 && x <= 0x26CD || x >= 0x26CF && x <= 0x26D3 || x >= 0x26D5 && x <= 0x26E1 || x === 0x26E3 || x === 0x26E8 || x === 0x26E9 || x >= 0x26EB && x <= 0x26F1 || x === 0x26F4 || x >= 0x26F6 && x <= 0x26F9 || x === 0x26FB || x === 0x26FC || x === 0x26FE || x === 0x26FF || x === 0x273D || x >= 0x2776 && x <= 0x277F || x >= 0x2B56 && x <= 0x2B59 || x >= 0x3248 && x <= 0x324F || x >= 0xE000 && x <= 0xF8FF || x >= 0xFE00 && x <= 0xFE0F || x === 0xFFFD || x >= 0x1F100 && x <= 0x1F10A || x >= 0x1F110 && x <= 0x1F12D || x >= 0x1F130 && x <= 0x1F169 || x >= 0x1F170 && x <= 0x1F18D || x === 0x1F18F || x === 0x1F190 || x >= 0x1F19B && x <= 0x1F1AC || x >= 0xE0100 && x <= 0xE01EF || x >= 0xF0000 && x <= 0xFFFFD || x >= 0x100000 && x <= 0x10FFFD;\n};\nconst isFullWidth = (x) => {\n return x === 0x3000 || x >= 0xFF01 && x <= 0xFF60 || x >= 0xFFE0 && x <= 0xFFE6;\n};\nconst isWide = (x) => {\n return x >= 0x1100 && x <= 0x115F || x === 0x231A || x === 0x231B || x === 0x2329 || x === 0x232A || x >= 0x23E9 && x <= 0x23EC || x === 0x23F0 || x === 0x23F3 || x === 0x25FD || x === 0x25FE || x === 0x2614 || x === 0x2615 || x >= 0x2648 && x <= 0x2653 || x === 0x267F || x === 0x2693 || x === 0x26A1 || x === 0x26AA || x === 0x26AB || x === 0x26BD || x === 0x26BE || x === 0x26C4 || x === 0x26C5 || x === 0x26CE || x === 0x26D4 || x === 0x26EA || x === 0x26F2 || x === 0x26F3 || x === 0x26F5 || x === 0x26FA || x === 0x26FD || x === 0x2705 || x === 0x270A || x === 0x270B || x === 0x2728 || x === 0x274C || x === 0x274E || x >= 0x2753 && x <= 0x2755 || x === 0x2757 || x >= 0x2795 && x <= 0x2797 || x === 0x27B0 || x === 0x27BF || x === 0x2B1B || x === 0x2B1C || x === 0x2B50 || x === 0x2B55 || x >= 0x2E80 && x <= 0x2E99 || x >= 0x2E9B && x <= 0x2EF3 || x >= 0x2F00 && x <= 0x2FD5 || x >= 0x2FF0 && x <= 0x2FFF || x >= 0x3001 && x <= 0x303E || x >= 0x3041 && x <= 0x3096 || x >= 0x3099 && x <= 0x30FF || x >= 0x3105 && x <= 0x312F || x >= 0x3131 && x <= 0x318E || x >= 0x3190 && x <= 0x31E3 || x >= 0x31EF && x <= 0x321E || x >= 0x3220 && x <= 0x3247 || x >= 0x3250 && x <= 0x4DBF || x >= 0x4E00 && x <= 0xA48C || x >= 0xA490 && x <= 0xA4C6 || x >= 0xA960 && x <= 0xA97C || x >= 0xAC00 && x <= 0xD7A3 || x >= 0xF900 && x <= 0xFAFF || x >= 0xFE10 && x <= 0xFE19 || x >= 0xFE30 && x <= 0xFE52 || x >= 0xFE54 && x <= 0xFE66 || x >= 0xFE68 && x <= 0xFE6B || x >= 0x16FE0 && x <= 0x16FE4 || x === 0x16FF0 || x === 0x16FF1 || x >= 0x17000 && x <= 0x187F7 || x >= 0x18800 && x <= 0x18CD5 || x >= 0x18D00 && x <= 0x18D08 || x >= 0x1AFF0 && x <= 0x1AFF3 || x >= 0x1AFF5 && x <= 0x1AFFB || x === 0x1AFFD || x === 0x1AFFE || x >= 0x1B000 && x <= 0x1B122 || x === 0x1B132 || x >= 0x1B150 && x <= 0x1B152 || x === 0x1B155 || x >= 0x1B164 && x <= 0x1B167 || x >= 0x1B170 && x <= 0x1B2FB || x === 0x1F004 || x === 0x1F0CF || x === 0x1F18E || x >= 0x1F191 && x <= 0x1F19A || x >= 0x1F200 && x <= 0x1F202 || x >= 0x1F210 && x <= 0x1F23B || x >= 0x1F240 && x <= 0x1F248 || x === 0x1F250 || x === 0x1F251 || x >= 0x1F260 && x <= 0x1F265 || x >= 0x1F300 && x <= 0x1F320 || x >= 0x1F32D && x <= 0x1F335 || x >= 0x1F337 && x <= 0x1F37C || x >= 0x1F37E && x <= 0x1F393 || x >= 0x1F3A0 && x <= 0x1F3CA || x >= 0x1F3CF && x <= 0x1F3D3 || x >= 0x1F3E0 && x <= 0x1F3F0 || x === 0x1F3F4 || x >= 0x1F3F8 && x <= 0x1F43E || x === 0x1F440 || x >= 0x1F442 && x <= 0x1F4FC || x >= 0x1F4FF && x <= 0x1F53D || x >= 0x1F54B && x <= 0x1F54E || x >= 0x1F550 && x <= 0x1F567 || x === 0x1F57A || x === 0x1F595 || x === 0x1F596 || x === 0x1F5A4 || x >= 0x1F5FB && x <= 0x1F64F || x >= 0x1F680 && x <= 0x1F6C5 || x === 0x1F6CC || x >= 0x1F6D0 && x <= 0x1F6D2 || x >= 0x1F6D5 && x <= 0x1F6D7 || x >= 0x1F6DC && x <= 0x1F6DF || x === 0x1F6EB || x === 0x1F6EC || x >= 0x1F6F4 && x <= 0x1F6FC || x >= 0x1F7E0 && x <= 0x1F7EB || x === 0x1F7F0 || x >= 0x1F90C && x <= 0x1F93A || x >= 0x1F93C && x <= 0x1F945 || x >= 0x1F947 && x <= 0x1F9FF || x >= 0x1FA70 && x <= 0x1FA7C || x >= 0x1FA80 && x <= 0x1FA88 || x >= 0x1FA90 && x <= 0x1FABD || x >= 0x1FABF && x <= 0x1FAC5 || x >= 0x1FACE && x <= 0x1FADB || x >= 0x1FAE0 && x <= 0x1FAE8 || x >= 0x1FAF0 && x <= 0x1FAF8 || x >= 0x20000 && x <= 0x2FFFD || x >= 0x30000 && x <= 0x3FFFD;\n};\n/* EXPORT */\nexport { isAmbiguous, isFullWidth, isWide };\n","/* IMPORT */\nimport { isAmbiguous, isFullWidth, isWide } from './utils.js';\n/* HELPERS */\nconst ANSI_RE = /[\\u001b\\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/y;\nconst CONTROL_RE = /[\\x00-\\x08\\x0A-\\x1F\\x7F-\\x9F]{1,1000}/y;\nconst TAB_RE = /\\t{1,1000}/y;\nconst EMOJI_RE = /[\\u{1F1E6}-\\u{1F1FF}]{2}|\\u{1F3F4}[\\u{E0061}-\\u{E007A}]{2}[\\u{E0030}-\\u{E0039}\\u{E0061}-\\u{E007A}]{1,3}\\u{E007F}|(?:\\p{Emoji}\\uFE0F\\u20E3?|\\p{Emoji_Modifier_Base}\\p{Emoji_Modifier}?|\\p{Emoji_Presentation})(?:\\u200D(?:\\p{Emoji_Modifier_Base}\\p{Emoji_Modifier}?|\\p{Emoji_Presentation}|\\p{Emoji}\\uFE0F\\u20E3?))*/yu;\nconst LATIN_RE = /(?:[\\x20-\\x7E\\xA0-\\xFF](?!\\uFE0F)){1,1000}/y;\nconst MODIFIER_RE = /\\p{M}+/gu;\nconst NO_TRUNCATION = { limit: Infinity, ellipsis: '' };\n/* MAIN */\n//TODO: Optimize matching non-latin letters\nconst getStringTruncatedWidth = (input, truncationOptions = {}, widthOptions = {}) => {\n /* CONSTANTS */\n const LIMIT = truncationOptions.limit ?? Infinity;\n const ELLIPSIS = truncationOptions.ellipsis ?? '';\n const ELLIPSIS_WIDTH = truncationOptions?.ellipsisWidth ?? (ELLIPSIS ? getStringTruncatedWidth(ELLIPSIS, NO_TRUNCATION, widthOptions).width : 0);\n const ANSI_WIDTH = widthOptions.ansiWidth ?? 0;\n const CONTROL_WIDTH = widthOptions.controlWidth ?? 0;\n const TAB_WIDTH = widthOptions.tabWidth ?? 8;\n const AMBIGUOUS_WIDTH = widthOptions.ambiguousWidth ?? 1;\n const EMOJI_WIDTH = widthOptions.emojiWidth ?? 2;\n const FULL_WIDTH_WIDTH = widthOptions.fullWidthWidth ?? 2;\n const REGULAR_WIDTH = widthOptions.regularWidth ?? 1;\n const WIDE_WIDTH = widthOptions.wideWidth ?? 2;\n /* STATE */\n let indexPrev = 0;\n let index = 0;\n let length = input.length;\n let lengthExtra = 0;\n let truncationEnabled = false;\n let truncationIndex = length;\n let truncationLimit = Math.max(0, LIMIT - ELLIPSIS_WIDTH);\n let unmatchedStart = 0;\n let unmatchedEnd = 0;\n let width = 0;\n let widthExtra = 0;\n /* PARSE LOOP */\n outer: while (true) {\n /* UNMATCHED */\n if ((unmatchedEnd > unmatchedStart) || (index >= length && index > indexPrev)) {\n const unmatched = input.slice(unmatchedStart, unmatchedEnd) || input.slice(indexPrev, index);\n lengthExtra = 0;\n for (const char of unmatched.replaceAll(MODIFIER_RE, '')) {\n const codePoint = char.codePointAt(0) || 0;\n if (isFullWidth(codePoint)) {\n widthExtra = FULL_WIDTH_WIDTH;\n }\n else if (isWide(codePoint)) {\n widthExtra = WIDE_WIDTH;\n }\n else if (AMBIGUOUS_WIDTH !== REGULAR_WIDTH && isAmbiguous(codePoint)) {\n widthExtra = AMBIGUOUS_WIDTH;\n }\n else {\n widthExtra = REGULAR_WIDTH;\n }\n if ((width + widthExtra) > truncationLimit) {\n truncationIndex = Math.min(truncationIndex, Math.max(unmatchedStart, indexPrev) + lengthExtra);\n }\n if ((width + widthExtra) > LIMIT) {\n truncationEnabled = true;\n break outer;\n }\n lengthExtra += char.length;\n width += widthExtra;\n }\n unmatchedStart = unmatchedEnd = 0;\n }\n /* EXITING */\n if (index >= length)\n break;\n /* LATIN */\n LATIN_RE.lastIndex = index;\n if (LATIN_RE.test(input)) {\n lengthExtra = LATIN_RE.lastIndex - index;\n widthExtra = lengthExtra * REGULAR_WIDTH;\n if ((width + widthExtra) > truncationLimit) {\n truncationIndex = Math.min(truncationIndex, index + Math.floor((truncationLimit - width) / REGULAR_WIDTH));\n }\n if ((width + widthExtra) > LIMIT) {\n truncationEnabled = true;\n break;\n }\n width += widthExtra;\n unmatchedStart = indexPrev;\n unmatchedEnd = index;\n index = indexPrev = LATIN_RE.lastIndex;\n continue;\n }\n /* ANSI */\n ANSI_RE.lastIndex = index;\n if (ANSI_RE.test(input)) {\n if ((width + ANSI_WIDTH) > truncationLimit) {\n truncationIndex = Math.min(truncationIndex, index);\n }\n if ((width + ANSI_WIDTH) > LIMIT) {\n truncationEnabled = true;\n break;\n }\n width += ANSI_WIDTH;\n unmatchedStart = indexPrev;\n unmatchedEnd = index;\n index = indexPrev = ANSI_RE.lastIndex;\n continue;\n }\n /* CONTROL */\n CONTROL_RE.lastIndex = index;\n if (CONTROL_RE.test(input)) {\n lengthExtra = CONTROL_RE.lastIndex - index;\n widthExtra = lengthExtra * CONTROL_WIDTH;\n if ((width + widthExtra) > truncationLimit) {\n truncationIndex = Math.min(truncationIndex, index + Math.floor((truncationLimit - width) / CONTROL_WIDTH));\n }\n if ((width + widthExtra) > LIMIT) {\n truncationEnabled = true;\n break;\n }\n width += widthExtra;\n unmatchedStart = indexPrev;\n unmatchedEnd = index;\n index = indexPrev = CONTROL_RE.lastIndex;\n continue;\n }\n /* TAB */\n TAB_RE.lastIndex = index;\n if (TAB_RE.test(input)) {\n lengthExtra = TAB_RE.lastIndex - index;\n widthExtra = lengthExtra * TAB_WIDTH;\n if ((width + widthExtra) > truncationLimit) {\n truncationIndex = Math.min(truncationIndex, index + Math.floor((truncationLimit - width) / TAB_WIDTH));\n }\n if ((width + widthExtra) > LIMIT) {\n truncationEnabled = true;\n break;\n }\n width += widthExtra;\n unmatchedStart = indexPrev;\n unmatchedEnd = index;\n index = indexPrev = TAB_RE.lastIndex;\n continue;\n }\n /* EMOJI */\n EMOJI_RE.lastIndex = index;\n if (EMOJI_RE.test(input)) {\n if ((width + EMOJI_WIDTH) > truncationLimit) {\n truncationIndex = Math.min(truncationIndex, index);\n }\n if ((width + EMOJI_WIDTH) > LIMIT) {\n truncationEnabled = true;\n break;\n }\n width += EMOJI_WIDTH;\n unmatchedStart = indexPrev;\n unmatchedEnd = index;\n index = indexPrev = EMOJI_RE.lastIndex;\n continue;\n }\n /* UNMATCHED INDEX */\n index += 1;\n }\n /* RETURN */\n return {\n width: truncationEnabled ? truncationLimit : width,\n index: truncationEnabled ? truncationIndex : length,\n truncated: truncationEnabled,\n ellipsed: truncationEnabled && LIMIT >= ELLIPSIS_WIDTH\n };\n};\n/* EXPORT */\nexport default getStringTruncatedWidth;\n","/* IMPORT */\nimport fastStringTruncatedWidth from 'fast-string-truncated-width';\n/* HELPERS */\nconst NO_TRUNCATION = {\n limit: Infinity,\n ellipsis: '',\n ellipsisWidth: 0,\n};\n/* MAIN */\nconst fastStringWidth = (input, options = {}) => {\n return fastStringTruncatedWidth(input, NO_TRUNCATION, options).width;\n};\n/* EXPORT */\nexport default fastStringWidth;\n","import stringWidth from 'fast-string-width';\nconst ESC = '\\x1B';\nconst CSI = '\\x9B';\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;;`;\nconst GROUP_REGEX = new RegExp(`(?:\\\\${ANSI_CSI}(?<code>\\\\d+)m|\\\\${ANSI_ESCAPE_LINK}(?<uri>.*)${ANSI_ESCAPE_BELL})`, 'y');\nconst getClosingCode = (openingCode) => {\n if (openingCode >= 30 && openingCode <= 37)\n return 39;\n if (openingCode >= 90 && openingCode <= 97)\n return 39;\n if (openingCode >= 40 && openingCode <= 47)\n return 49;\n if (openingCode >= 100 && openingCode <= 107)\n return 49;\n if (openingCode === 1 || openingCode === 2)\n return 22;\n if (openingCode === 3)\n return 23;\n if (openingCode === 4)\n return 24;\n if (openingCode === 7)\n return 27;\n if (openingCode === 8)\n return 28;\n if (openingCode === 9)\n return 29;\n if (openingCode === 0)\n return 0;\n return undefined;\n};\nconst wrapAnsiCode = (code) => `${ESC}${ANSI_CSI}${code}${ANSI_SGR_TERMINATOR}`;\nconst wrapAnsiHyperlink = (url) => `${ESC}${ANSI_ESCAPE_LINK}${url}${ANSI_ESCAPE_BELL}`;\nconst wordLengths = (words) => words.map((character) => stringWidth(character));\nconst wrapWord = (rows, word, columns) => {\n const characters = word[Symbol.iterator]();\n let isInsideEscape = false;\n let isInsideLinkEscape = false;\n let lastRow = rows.at(-1);\n let visible = lastRow === undefined ? 0 : stringWidth(lastRow);\n let currentCharacter = characters.next();\n let nextCharacter = characters.next();\n let rawCharacterIndex = 0;\n while (!currentCharacter.done) {\n const character = currentCharacter.value;\n const characterLength = stringWidth(character);\n if (visible + characterLength <= columns) {\n rows[rows.length - 1] += character;\n }\n else {\n rows.push(character);\n visible = 0;\n }\n if (character === ESC || character === CSI) {\n isInsideEscape = true;\n isInsideLinkEscape = word.startsWith(ANSI_ESCAPE_LINK, rawCharacterIndex + 1);\n }\n if (isInsideEscape) {\n if (isInsideLinkEscape) {\n if (character === ANSI_ESCAPE_BELL) {\n isInsideEscape = false;\n isInsideLinkEscape = false;\n }\n }\n else if (character === ANSI_SGR_TERMINATOR) {\n isInsideEscape = false;\n }\n }\n else {\n visible += characterLength;\n if (visible === columns && !nextCharacter.done) {\n rows.push('');\n visible = 0;\n }\n }\n currentCharacter = nextCharacter;\n nextCharacter = characters.next();\n rawCharacterIndex += character.length;\n }\n lastRow = rows.at(-1);\n if (!visible &&\n lastRow !== undefined &&\n lastRow.length > 0 &&\n rows.length > 1) {\n rows[rows.length - 2] += rows.pop();\n }\n};\nconst stringVisibleTrimSpacesRight = (string) => {\n const words = string.split(' ');\n let last = words.length;\n while (last > 0) {\n if (stringWidth(words[last - 1]) > 0) {\n break;\n }\n last--;\n }\n if (last === words.length) {\n return string;\n }\n return words.slice(0, last).join(' ') + words.slice(last).join('');\n};\nconst exec = (string, columns, options = {}) => {\n if (options.trim !== false && string.trim() === '') {\n return '';\n }\n let returnValue = '';\n let escapeCode;\n let escapeUrl;\n const words = string.split(' ');\n const lengths = wordLengths(words);\n let rows = [''];\n for (const [index, word] of words.entries()) {\n if (options.trim !== false) {\n rows[rows.length - 1] = (rows.at(-1) ?? '').trimStart();\n }\n let rowLength = stringWidth(rows.at(-1) ?? '');\n if (index !== 0) {\n if (rowLength >= columns &&\n (options.wordWrap === false || options.trim === false)) {\n rows.push('');\n rowLength = 0;\n }\n if (rowLength > 0 || options.trim === false) {\n rows[rows.length - 1] += ' ';\n rowLength++;\n }\n }\n if (options.hard && lengths[index] > columns) {\n const remainingColumns = columns - rowLength;\n const breaksStartingThisLine = 1 + Math.floor((lengths[index] - remainingColumns - 1) / columns);\n const breaksStartingNextLine = Math.floor((lengths[index] - 1) / columns);\n if (breaksStartingNextLine < breaksStartingThisLine) {\n rows.push('');\n }\n wrapWord(rows, word, columns);\n continue;\n }\n if (rowLength + lengths[index] > columns &&\n rowLength > 0 &&\n lengths[index] > 0) {\n if (options.wordWrap === false && rowLength < columns) {\n wrapWord(rows, word, columns);\n continue;\n }\n rows.push('');\n }\n if (rowLength + lengths[index] > columns && options.wordWrap === false) {\n wrapWord(rows, word, columns);\n continue;\n }\n rows[rows.length - 1] += word;\n }\n if (options.trim !== false) {\n rows = rows.map((row) => stringVisibleTrimSpacesRight(row));\n }\n const preString = rows.join('\\n');\n const pre = preString[Symbol.iterator]();\n let currentPre = pre.next();\n let nextPre = pre.next();\n // We need to keep a separate index as `String#slice()` works on Unicode code units, while `pre` is an array of codepoints.\n let preStringIndex = 0;\n while (!currentPre.done) {\n const character = currentPre.value;\n const nextCharacter = nextPre.value;\n returnValue += character;\n if (character === ESC || character === CSI) {\n GROUP_REGEX.lastIndex = preStringIndex + 1;\n const groupsResult = GROUP_REGEX.exec(preString);\n const groups = groupsResult?.groups;\n if (groups?.code !== undefined) {\n const code = Number.parseFloat(groups.code);\n escapeCode = code === END_CODE ? undefined : code;\n }\n else if (groups?.uri !== undefined) {\n escapeUrl = groups.uri.length === 0 ? undefined : groups.uri;\n }\n }\n const closingCode = escapeCode ? getClosingCode(escapeCode) : undefined;\n if (nextCharacter === '\\n') {\n if (escapeUrl) {\n returnValue += wrapAnsiHyperlink('');\n }\n if (escapeCode && closingCode) {\n returnValue += wrapAnsiCode(closingCode);\n }\n }\n else if (character === '\\n') {\n if (escapeCode && closingCode) {\n returnValue += wrapAnsiCode(escapeCode);\n }\n if (escapeUrl) {\n returnValue += wrapAnsiHyperlink(escapeUrl);\n }\n }\n preStringIndex += character.length;\n currentPre = nextPre;\n nextPre = pre.next();\n }\n return returnValue;\n};\nexport function wrapAnsi(string, columns, options) {\n return String(string)\n .normalize()\n .replaceAll('\\r\\n', '\\n')\n .split('\\n')\n .map((line) => exec(line, columns, options))\n .join('\\n');\n}\n//# sourceMappingURL=main.js.map","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\tmessages: {\n\t\tcancel: string;\n\t\terror: string;\n\t};\n\twithGuide: boolean;\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\tmessages: {\n\t\tcancel: 'Canceled',\n\t\terror: 'Something went wrong',\n\t},\n\twithGuide: true,\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\t/**\n\t * Custom messages for prompts\n\t */\n\tmessages?: {\n\t\t/**\n\t\t * Custom message to display when a spinner is cancelled\n\t\t * @default \"Canceled\"\n\t\t */\n\t\tcancel?: string;\n\t\t/**\n\t\t * Custom message to display when a spinner encounters an error\n\t\t * @default \"Something went wrong\"\n\t\t */\n\t\terror?: string;\n\t};\n\n\twithGuide?: boolean;\n}\n\nexport function updateSettings(updates: ClackSettings) {\n\t// Handle each property in the updates\n\tif (updates.aliases !== undefined) {\n\t\tconst aliases = updates.aliases;\n\t\tfor (const alias in aliases) {\n\t\t\tif (!Object.hasOwn(aliases, alias)) continue;\n\n\t\t\tconst action = aliases[alias];\n\t\t\tif (!settings.actions.has(action)) continue;\n\n\t\t\tif (!settings.aliases.has(alias)) {\n\t\t\t\tsettings.aliases.set(alias, action);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (updates.messages !== undefined) {\n\t\tconst messages = updates.messages;\n\t\tif (messages.cancel !== undefined) {\n\t\t\tsettings.messages.cancel = messages.cancel;\n\t\t}\n\t\tif (messages.error !== undefined) {\n\t\t\tsettings.messages.error = messages.error;\n\t\t}\n\t}\n\n\tif (updates.withGuide !== undefined) {\n\t\tsettings.withGuide = updates.withGuide !== false;\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 numLines = Math.max(aLines.length, bLines.length);\n\tconst diff: number[] = [];\n\n\tfor (let i = 0; i < numLines; i++) {\n\t\tif (aLines[i] !== bLines[i]) diff.push(i);\n\t}\n\n\treturn {\n\t\tlines: diff,\n\t\tnumLinesBefore: aLines.length,\n\t\tnumLinesAfter: bLines.length,\n\t\tnumLines,\n\t};\n}\n","import { stdin, stdout } from 'node:process';\nimport type { Key } from 'node:readline';\nimport * as readline from 'node:readline';\nimport type { Readable, Writable } from 'node:stream';\nimport { ReadStream } from 'node:tty';\nimport { wrapAnsi } from 'fast-wrap-ansi';\nimport { cursor } from 'sisteransi';\nimport { isActionKey } from './settings.js';\n\nexport * from './settings.js';\nexport * from './string.js';\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\ninterface BlockOptions {\n\tinput?: Readable;\n\toutput?: Writable;\n\toverwrite?: boolean;\n\thideCursor?: boolean;\n}\n\nexport function block({\n\tinput = stdin,\n\toutput = stdout,\n\toverwrite = true,\n\thideCursor = true,\n}: BlockOptions = {}) {\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\n\tif (input instanceof ReadStream && input.isTTY) {\n\t\tinput.setRawMode(true);\n\t}\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 instanceof ReadStream && input.isTTY && !isWindows) {\n\t\t\tinput.setRawMode(false);\n\t\t}\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\nexport const getColumns = (output: Writable): number => {\n\tif ('columns' in output && typeof output.columns === 'number') {\n\t\treturn output.columns;\n\t}\n\treturn 80;\n};\n\nexport const getRows = (output: Writable): number => {\n\tif ('rows' in output && typeof output.rows === 'number') {\n\t\treturn output.rows;\n\t}\n\treturn 20;\n};\n\nexport function wrapTextWithPrefix(\n\toutput: Writable | undefined,\n\ttext: string,\n\tprefix: string,\n\tstartPrefix: string = prefix\n): string {\n\tconst columns = getColumns(output ?? stdout);\n\tconst wrapped = wrapAnsi(text, columns - prefix.length, {\n\t\thard: true,\n\t\ttrim: false,\n\t});\n\tconst lines = wrapped\n\t\t.split('\\n')\n\t\t.map((line, index) => {\n\t\t\treturn `${index === 0 ? startPrefix : prefix}${line}`;\n\t\t})\n\t\t.join('\\n');\n\treturn lines;\n}\n","import { stdin, stdout } from 'node:process';\nimport readline, { type Key, type ReadLine } from 'node:readline';\nimport type { Readable, Writable } from 'node:stream';\nimport { wrapAnsi } from 'fast-wrap-ansi';\nimport { cursor, erase } from 'sisteransi';\nimport type { ClackEvents, ClackState } from '../types.js';\nimport type { Action } from '../utils/index.js';\nimport {\n\tCANCEL_SYMBOL,\n\tdiffLines,\n\tgetRows,\n\tisActionKey,\n\tsetRawMode,\n\tsettings,\n} from '../utils/index.js';\n\nexport interface PromptOptions<TValue, Self extends Prompt<TValue>> {\n\trender(this: Omit<Self, 'prompt'>): string | undefined;\n\tinitialValue?: any;\n\tinitialUserInput?: string;\n\tvalidate?: ((value: TValue | undefined) => string | Error | undefined) | undefined;\n\tinput?: Readable;\n\toutput?: Writable;\n\tdebug?: boolean;\n\tsignal?: AbortSignal;\n}\n\nexport default class Prompt<TValue> {\n\tprotected input: Readable;\n\tprotected output: Writable;\n\tprivate _abortSignal?: AbortSignal;\n\n\tprivate rl: ReadLine | undefined;\n\tprivate opts: Omit<PromptOptions<TValue, Prompt<TValue>>, 'render' | 'input' | 'output'>;\n\tprivate _render: (context: Omit<Prompt<TValue>, '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: TValue | undefined;\n\tpublic userInput = '';\n\n\tconstructor(options: PromptOptions<TValue, Prompt<TValue>>, 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<TValue>>(\n\t\tevent: T,\n\t\topts: { cb: ClackEvents<TValue>[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<TValue>>(event: T, cb: ClackEvents<TValue>[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<TValue>>(event: T, cb: ClackEvents<TValue>[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<TValue>>(\n\t\tevent: T,\n\t\t...data: Parameters<ClackEvents<TValue>[T]>\n\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<TValue | symbol | undefined>((resolve) => {\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\tthis.rl = readline.createInterface({\n\t\t\t\tinput: this.input,\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\tthis.rl.prompt();\n\n\t\t\tif (this.opts.initialUserInput !== undefined) {\n\t\t\t\tthis._setUserInput(this.opts.initialUserInput, true);\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\tprotected _isActionKey(char: string | undefined, _key: Key): boolean {\n\t\treturn char === '\\t';\n\t}\n\n\tprotected _setValue(value: TValue | undefined): void {\n\t\tthis.value = value;\n\t\tthis.emit('value', this.value);\n\t}\n\n\tprotected _setUserInput(value: string | undefined, write?: boolean): void {\n\t\tthis.userInput = value ?? '';\n\t\tthis.emit('userInput', this.userInput);\n\t\tif (write && this._track && this.rl) {\n\t\t\tthis.rl.write(this.userInput);\n\t\t\tthis._cursor = this.rl.cursor;\n\t\t}\n\t}\n\n\tprotected _clearUserInput(): void {\n\t\tthis.rl?.write(null, { ctrl: true, name: 'u' });\n\t\tthis._setUserInput('');\n\t}\n\n\tprivate onKeypress(char: string | undefined, key: Key) {\n\t\tif (this._track && key.name !== 'return') {\n\t\t\tif (key.name && this._isActionKey(char, key)) {\n\t\t\t\tthis.rl?.write(null, { ctrl: true, name: 'h' });\n\t\t\t}\n\t\t\tthis._cursor = this.rl?.cursor ?? 0;\n\t\t\tthis._setUserInput(this.rl?.line);\n\t\t}\n\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\n\t\t// Call the key event handler and emit the key event\n\t\tthis.emit('key', char?.toLowerCase(), key);\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.userInput);\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\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\twrapAnsi(this._prevFrame, process.stdout.columns, { hard: true, trim: false }).split('\\n')\n\t\t\t\t.length - 1;\n\t\tthis.output.write(cursor.move(-999, lines * -1));\n\t}\n\n\tprivate render() {\n\t\tconst frame = wrapAnsi(this._render(this) ?? '', process.stdout.columns, {\n\t\t\thard: true,\n\t\t\ttrim: false,\n\t\t});\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\tconst rows = getRows(this.output);\n\t\t\tthis.restoreCursor();\n\t\t\tif (diff) {\n\t\t\t\tconst diffOffsetAfter = Math.max(0, diff.numLinesAfter - rows);\n\t\t\t\tconst diffOffsetBefore = Math.max(0, diff.numLinesBefore - rows);\n\t\t\t\tlet diffLine = diff.lines.find((line) => line >= diffOffsetAfter);\n\n\t\t\t\tif (diffLine === undefined) {\n\t\t\t\t\tthis._prevFrame = frame;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// If a single line has changed, only update that line\n\t\t\t\tif (diff.lines.length === 1) {\n\t\t\t\t\tthis.output.write(cursor.move(0, diffLine - diffOffsetBefore));\n\t\t\t\t\tthis.output.write(erase.lines(1));\n\t\t\t\t\tconst lines = frame.split('\\n');\n\t\t\t\t\tthis.output.write(lines[diffLine]);\n\t\t\t\t\tthis._prevFrame = frame;\n\t\t\t\t\tthis.output.write(cursor.move(0, lines.length - diffLine - 1));\n\t\t\t\t\treturn;\n\t\t\t\t\t// If many lines have changed, rerender everything past the first line\n\t\t\t\t} else if (diff.lines.length > 1) {\n\t\t\t\t\tif (diffOffsetAfter < diffOffsetBefore) {\n\t\t\t\t\t\tdiffLine = diffOffsetAfter;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst adjustedDiffLine = diffLine - diffOffsetBefore;\n\t\t\t\t\t\tif (adjustedDiffLine > 0) {\n\t\t\t\t\t\t\tthis.output.write(cursor.move(0, adjustedDiffLine));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis.output.write(erase.down());\n\t\t\t\t\tconst lines = frame.split('\\n');\n\t\t\t\t\tconst newLines = lines.slice(diffLine);\n\t\t\t\t\tthis.output.write(newLines.join('\\n'));\n\t\t\t\t\tthis._prevFrame = frame;\n\t\t\t\t\treturn;\n\t\t\t\t}\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 type { Key } from 'node:readline';\nimport color from 'picocolors';\nimport { findCursor } from '../utils/cursor.js';\nimport Prompt, { type PromptOptions } from './prompt.js';\n\ninterface OptionLike {\n\tvalue: unknown;\n\tlabel?: string;\n\tdisabled?: boolean;\n}\n\ntype FilterFunction<T extends OptionLike> = (search: string, opt: T) => boolean;\n\nfunction getCursorForValue<T extends OptionLike>(\n\tselected: T['value'] | undefined,\n\titems: T[]\n): number {\n\tif (selected === undefined) {\n\t\treturn 0;\n\t}\n\n\tconst currLength = items.length;\n\n\t// If filtering changed the available options, update cursor\n\tif (currLength === 0) {\n\t\treturn 0;\n\t}\n\n\t// Try to maintain the same selected item\n\tconst index = items.findIndex((item) => item.value === selected);\n\treturn index !== -1 ? index : 0;\n}\n\nfunction defaultFilter<T extends OptionLike>(input: string, option: T): boolean {\n\tconst label = option.label ?? String(option.value);\n\treturn label.toLowerCase().includes(input.toLowerCase());\n}\n\nfunction normalisedValue<T>(multiple: boolean, values: T[] | undefined): T | T[] | undefined {\n\tif (!values) {\n\t\treturn undefined;\n\t}\n\tif (multiple) {\n\t\treturn values;\n\t}\n\treturn values[0];\n}\n\nexport interface AutocompleteOptions<T extends OptionLike>\n\textends PromptOptions<T['value'] | T['value'][], AutocompletePrompt<T>> {\n\toptions: T[] | ((this: AutocompletePrompt<T>) => T[]);\n\tfilter?: FilterFunction<T>;\n\tmultiple?: boolean;\n}\n\nexport default class AutocompletePrompt<T extends OptionLike> extends Prompt<\n\tT['value'] | T['value'][]\n> {\n\tfilteredOptions: T[];\n\tmultiple: boolean;\n\tisNavigating = false;\n\tselectedValues: Array<T['value']> = [];\n\n\tfocusedValue: T['value'] | undefined;\n\t#cursor = 0;\n\t#lastUserInput = '';\n\t#filterFn: FilterFunction<T>;\n\t#options: T[] | (() => T[]);\n\n\tget cursor(): number {\n\t\treturn this.#cursor;\n\t}\n\n\tget userInputWithCursor() {\n\t\tif (!this.userInput) {\n\t\t\treturn color.inverse(color.hidden('_'));\n\t\t}\n\t\tif (this._cursor >= this.userInput.length) {\n\t\t\treturn `${this.userInput}█`;\n\t\t}\n\t\tconst s1 = this.userInput.slice(0, this._cursor);\n\t\tconst [s2, ...s3] = this.userInput.slice(this._cursor);\n\t\treturn `${s1}${color.inverse(s2)}${s3.join('')}`;\n\t}\n\n\tget options(): T[] {\n\t\tif (typeof this.#options === 'function') {\n\t\t\treturn this.#options();\n\t\t}\n\t\treturn this.#options;\n\t}\n\n\tconstructor(opts: AutocompleteOptions<T>) {\n\t\tsuper(opts);\n\n\t\tthis.#options = opts.options;\n\t\tconst options = this.options;\n\t\tthis.filteredOptions = [...options];\n\t\tthis.multiple = opts.multiple === true;\n\t\tthis.#filterFn = opts.filter ?? defaultFilter;\n\t\tlet initialValues: unknown[] | undefined;\n\t\tif (opts.initialValue && Array.isArray(opts.initialValue)) {\n\t\t\tif (this.multiple) {\n\t\t\t\tinitialValues = opts.initialValue;\n\t\t\t} else {\n\t\t\t\tinitialValues = opts.initialValue.slice(0, 1);\n\t\t\t}\n\t\t} else {\n\t\t\tif (!this.multiple && this.options.length > 0) {\n\t\t\t\tinitialValues = [this.options[0].value];\n\t\t\t}\n\t\t}\n\n\t\tif (initialValues) {\n\t\t\tfor (const selectedValue of initialValues) {\n\t\t\t\tconst selectedIndex = options.findIndex((opt) => opt.value === selectedValue);\n\t\t\t\tif (selectedIndex !== -1) {\n\t\t\t\t\tthis.toggleSelected(selectedValue);\n\t\t\t\t\tthis.#cursor = selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.focusedValue = this.options[this.#cursor]?.value;\n\n\t\tthis.on('key', (char, key) => this.#onKey(char, key));\n\t\tthis.on('userInput', (value) => this.#onUserInputChanged(value));\n\t}\n\n\tprotected override _isActionKey(char: string | undefined, key: Key): boolean {\n\t\treturn (\n\t\t\tchar === '\\t' ||\n\t\t\t(this.multiple &&\n\t\t\t\tthis.isNavigating &&\n\t\t\t\tkey.name === 'space' &&\n\t\t\t\tchar !== undefined &&\n\t\t\t\tchar !== '')\n\t\t);\n\t}\n\n\t#onKey(_char: string | undefined, key: Key): void {\n\t\tconst isUpKey = key.name === 'up';\n\t\tconst isDownKey = key.name === 'down';\n\t\tconst isReturnKey = key.name === 'return';\n\n\t\t// Start navigation mode with up/down arrows\n\t\tif (isUpKey || isDownKey) {\n\t\t\tthis.#cursor = findCursor(this.#cursor, isUpKey ? -1 : 1, this.filteredOptions);\n\t\t\tthis.focusedValue = this.filteredOptions[this.#cursor]?.value;\n\t\t\tif (!this.multiple) {\n\t\t\t\tthis.selectedValues = [this.focusedValue];\n\t\t\t}\n\t\t\tthis.isNavigating = true;\n\t\t} else if (isReturnKey) {\n\t\t\tthis.value = normalisedValue(this.multiple, this.selectedValues);\n\t\t} else {\n\t\t\tif (this.multiple) {\n\t\t\t\tif (\n\t\t\t\t\tthis.focusedValue !== undefined &&\n\t\t\t\t\t(key.name === 'tab' || (this.isNavigating && key.name === 'space'))\n\t\t\t\t) {\n\t\t\t\t\tthis.toggleSelected(this.focusedValue);\n\t\t\t\t} else {\n\t\t\t\t\tthis.isNavigating = false;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (this.focusedValue) {\n\t\t\t\t\tthis.selectedValues = [this.focusedValue];\n\t\t\t\t}\n\t\t\t\tthis.isNavigating = false;\n\t\t\t}\n\t\t}\n\t}\n\n\tdeselectAll() {\n\t\tthis.selectedValues = [];\n\t}\n\n\ttoggleSelected(value: T['value']) {\n\t\tif (this.filteredOptions.length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.multiple) {\n\t\t\tif (this.selectedValues.includes(value)) {\n\t\t\t\tthis.selectedValues = this.selectedValues.filter((v) => v !== value);\n\t\t\t} else {\n\t\t\t\tthis.selectedValues = [...this.selectedValues, value];\n\t\t\t}\n\t\t} else {\n\t\t\tthis.selectedValues = [value];\n\t\t}\n\t}\n\n\t#onUserInputChanged(value: string): void {\n\t\tif (value !== this.#lastUserInput) {\n\t\t\tthis.#lastUserInput = value;\n\n\t\t\tconst options = this.options;\n\n\t\t\tif (value) {\n\t\t\t\tthis.filteredOptions = options.filter((opt) => this.#filterFn(value, opt));\n\t\t\t} else {\n\t\t\t\tthis.filteredOptions = [...options];\n\t\t\t}\n\t\t\tconst valueCursor = getCursorForValue(this.focusedValue, this.filteredOptions);\n\t\t\tthis.#cursor = findCursor(valueCursor, 0, this.filteredOptions);\n\t\t\tconst focusedOption = this.filteredOptions[this.#cursor];\n\t\t\tif (focusedOption && !focusedOption.disabled) {\n\t\t\t\tthis.focusedValue = focusedOption.value;\n\t\t\t} else {\n\t\t\t\tthis.focusedValue = undefined;\n\t\t\t}\n\t\t\tif (!this.multiple) {\n\t\t\t\tif (this.focusedValue !== undefined) {\n\t\t\t\t\tthis.toggleSelected(this.focusedValue);\n\t\t\t\t} else {\n\t\t\t\t\tthis.deselectAll();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n","import { cursor } from 'sisteransi';\nimport Prompt, { type PromptOptions } from './prompt.js';\n\nexport interface ConfirmOptions extends PromptOptions<boolean, ConfirmPrompt> {\n\tactive: string;\n\tinactive: string;\n\tinitialValue?: boolean;\n}\n\nexport default class ConfirmPrompt extends Prompt<boolean> {\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('userInput', () => {\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.js';\n\nexport interface GroupMultiSelectOptions<T extends { value: any }>\n\textends PromptOptions<T['value'][], 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<T['value'][]> {\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\tconst value = this.value;\n\t\tif (value === undefined) {\n\t\t\treturn false;\n\t\t}\n\t\treturn items.every((i) => value.includes(i.value));\n\t}\n\n\tprivate toggleValue() {\n\t\tconst item = this.options[this.cursor];\n\t\tif (this.value === undefined) {\n\t\t\tthis.value = [];\n\t\t}\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 { findCursor } from '../utils/cursor.js';\nimport Prompt, { type PromptOptions } from './prompt.js';\n\ninterface OptionLike {\n\tvalue: any;\n\tdisabled?: boolean;\n}\n\nexport interface MultiSelectOptions<T extends OptionLike>\n\textends PromptOptions<T['value'][], MultiSelectPrompt<T>> {\n\toptions: T[];\n\tinitialValues?: T['value'][];\n\trequired?: boolean;\n\tcursorAt?: T['value'];\n}\nexport default class MultiSelectPrompt<T extends OptionLike> extends Prompt<T['value'][]> {\n\toptions: T[];\n\tcursor = 0;\n\n\tprivate get _value(): T['value'] {\n\t\treturn this.options[this.cursor].value;\n\t}\n\n\tprivate get _enabledOptions(): T[] {\n\t\treturn this.options.filter((option) => option.disabled !== true);\n\t}\n\n\tprivate toggleAll() {\n\t\tconst enabledOptions = this._enabledOptions;\n\t\tconst allSelected = this.value !== undefined && this.value.length === enabledOptions.length;\n\t\tthis.value = allSelected ? [] : enabledOptions.map((v) => v.value);\n\t}\n\n\tprivate toggleInvert() {\n\t\tconst value = this.value;\n\t\tif (!value) {\n\t\t\treturn;\n\t\t}\n\t\tconst notSelected = this._enabledOptions.filter((v) => !value.includes(v.value));\n\t\tthis.value = notSelected.map((v) => v.value);\n\t}\n\n\tprivate toggleValue() {\n\t\tif (this.value === undefined) {\n\t\t\tthis.value = [];\n\t\t}\n\t\tconst selected = this.value.includes(this._value);\n\t\tthis.value = selected\n\t\t\t? this.value.filter((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\tconst cursor = Math.max(\n\t\t\tthis.options.findIndex(({ value }) => value === opts.cursorAt),\n\t\t\t0\n\t\t);\n\t\tthis.cursor = this.options[cursor].disabled ? findCursor<T>(cursor, 1, this.options) : cursor;\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\tif (char === 'i') {\n\t\t\t\tthis.toggleInvert();\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 = findCursor<T>(this.cursor, -1, this.options);\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 = findCursor<T>(this.cursor, 1, this.options);\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.js';\n\nexport interface PasswordOptions extends PromptOptions<string, PasswordPrompt> {\n\tmask?: string;\n}\nexport default class PasswordPrompt extends Prompt<string> {\n\tprivate _mask = '•';\n\tget cursor() {\n\t\treturn this._cursor;\n\t}\n\tget masked() {\n\t\treturn this.userInput.replaceAll(/./g, this._mask);\n\t}\n\tget userInputWithCursor() {\n\t\tif (this.state === 'submit' || this.state === 'cancel') {\n\t\t\treturn this.masked;\n\t\t}\n\t\tconst userInput = this.userInput;\n\t\tif (this.cursor >= userInput.length) {\n\t\t\treturn `${this.masked}${color.inverse(color.hidden('_'))}`;\n\t\t}\n\t\tconst masked = this.masked;\n\t\tconst s1 = masked.slice(0, this.cursor);\n\t\tconst s2 = masked.slice(this.cursor);\n\t\treturn `${s1}${color.inverse(s2[0])}${s2.slice(1)}`;\n\t}\n\tclear() {\n\t\tthis._clearUserInput();\n\t}\n\tconstructor({ mask, ...opts }: PasswordOptions) {\n\t\tsuper(opts);\n\t\tthis._mask = mask ?? '•';\n\t\tthis.on('userInput', (input) => {\n\t\t\tthis._setValue(input);\n\t\t});\n\t}\n}\n","import { findCursor } from '../utils/cursor.js';\nimport Prompt, { type PromptOptions } from './prompt.js';\n\nexport interface SelectOptions<T extends { value: any; disabled?: boolean }>\n\textends PromptOptions<T['value'], SelectPrompt<T>> {\n\toptions: T[];\n\tinitialValue?: T['value'];\n}\nexport default class SelectPrompt<T extends { value: any; disabled?: boolean }> extends Prompt<\n\tT['value']\n> {\n\toptions: T[];\n\tcursor = 0;\n\n\tprivate get _selectedValue() {\n\t\treturn this.options[this.cursor];\n\t}\n\n\tprivate changeValue() {\n\t\tthis.value = this._selectedValue.value;\n\t}\n\n\tconstructor(opts: SelectOptions<T>) {\n\t\tsuper(opts, false);\n\n\t\tthis.options = opts.options;\n\n\t\tconst initialCursor = this.options.findIndex(({ value }) => value === opts.initialValue);\n\t\tconst cursor = initialCursor === -1 ? 0 : initialCursor;\n\t\tthis.cursor = this.options[cursor].disabled ? findCursor<T>(cursor, 1, this.options) : cursor;\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 = findCursor<T>(this.cursor, -1, this.options);\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 = findCursor<T>(this.cursor, 1, this.options);\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.js';\n\nexport interface SelectKeyOptions<T extends { value: string }>\n\textends PromptOptions<T['value'], SelectKeyPrompt<T>> {\n\toptions: T[];\n\tcaseSensitive?: boolean;\n}\nexport default class SelectKeyPrompt<T extends { value: string }> extends Prompt<T['value']> {\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 caseSensitive = opts.caseSensitive === true;\n\t\tconst keys = this.options.map(({ value: [initial] }) => {\n\t\t\treturn caseSensitive ? initial : initial?.toLowerCase();\n\t\t});\n\t\tthis.cursor = Math.max(keys.indexOf(opts.initialValue), 0);\n\n\t\tthis.on('key', (key, keyInfo) => {\n\t\t\tif (!key) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst casedKey = caseSensitive && keyInfo.shift ? key.toUpperCase() : key;\n\t\t\tif (!keys.includes(casedKey)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst value = this.options.find(({ value: [initial] }) => {\n\t\t\t\treturn caseSensitive ? initial === casedKey : initial?.toLowerCase() === key;\n\t\t\t});\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.js';\n\nexport interface TextOptions extends PromptOptions<string, TextPrompt> {\n\tplaceholder?: string;\n\tdefaultValue?: string;\n}\n\nexport default class TextPrompt extends Prompt<string> {\n\tget userInputWithCursor() {\n\t\tif (this.state === 'submit') {\n\t\t\treturn this.userInput;\n\t\t}\n\t\tconst userInput = this.userInput;\n\t\tif (this.cursor >= userInput.length) {\n\t\t\treturn `${this.userInput}█`;\n\t\t}\n\t\tconst s1 = userInput.slice(0, this.cursor);\n\t\tconst [s2, ...s3] = userInput.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({\n\t\t\t...opts,\n\t\t\tinitialUserInput: opts.initialUserInput ?? opts.initialValue,\n\t\t});\n\n\t\tthis.on('userInput', (input) => {\n\t\t\tthis._setValue(input);\n\t\t});\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\tif (this.value === undefined) {\n\t\t\t\tthis.value = '';\n\t\t\t}\n\t\t});\n\t}\n}\n"],"names":["findCursor","cursor","delta","options","opt","newCursor","maxCursor","clampedCursor","isAmbiguous","x","isFullWidth","isWide","ANSI_RE","CONTROL_RE","TAB_RE","EMOJI_RE","LATIN_RE","MODIFIER_RE","NO_TRUNCATION","getStringTruncatedWidth","input","truncationOptions","widthOptions","LIMIT","ELLIPSIS","ELLIPSIS_WIDTH","ANSI_WIDTH","CONTROL_WIDTH","TAB_WIDTH","AMBIGUOUS_WIDTH","EMOJI_WIDTH","FULL_WIDTH_WIDTH","REGULAR_WIDTH","WIDE_WIDTH","indexPrev","index","length","lengthExtra","truncationEnabled","truncationIndex","truncationLimit","unmatchedStart","unmatchedEnd","width","widthExtra","outer","unmatched","char","codePoint","fastStringWidth","fastStringTruncatedWidth","ESC","CSI","END_CODE","ANSI_ESCAPE_BELL","ANSI_CSI","ANSI_OSC","ANSI_SGR_TERMINATOR","ANSI_ESCAPE_LINK","GROUP_REGEX","getClosingCode","openingCode","wrapAnsiCode","code","wrapAnsiHyperlink","url","wordLengths","words","character","stringWidth","wrapWord","rows","word","columns","characters","isInsideEscape","isInsideLinkEscape","lastRow","visible","currentCharacter","nextCharacter","rawCharacterIndex","characterLength","stringVisibleTrimSpacesRight","string","last","exec","returnValue","escapeCode","escapeUrl","lengths","rowLength","remainingColumns","breaksStartingThisLine","row","preString","pre","currentPre","nextPre","preStringIndex","groups","closingCode","wrapAnsi","line","actions","settings","updateSettings","updates","aliases","alias","action","messages","isActionKey","key","value","diffLines","a","b","aLines","bLines","numLines","diff","i","isWindows","CANCEL_SYMBOL","isCancel","setRawMode","block","stdin","output","stdout","overwrite","hideCursor","rl","readline","ReadStream","clear","data","name","sequence","str","dx","dy","getColumns","getRows","wrapTextWithPrefix","text","prefix","startPrefix","Prompt","trackValue","render","signal","opts","event","params","cb","cbs","cleanup","subscriber","resolve","_key","write","problem","lines","frame","diffOffsetAfter","diffOffsetBefore","diffLine","erase","adjustedDiffLine","newLines","getCursorForValue","selected","items","item","defaultFilter","option","normalisedValue","multiple","values","AutocompletePrompt","#cursor","#lastUserInput","#filterFn","#options","color","s1","s2","s3","initialValues","selectedValue","selectedIndex","#onKey","#onUserInputChanged","_char","isUpKey","isDownKey","isReturnKey","v","valueCursor","focusedOption","ConfirmPrompt","confirm","GroupMultiSelectPrompt","#selectableGroups","group","o","groupedItems","currentIsGroup","MultiSelectPrompt","enabledOptions","allSelected","notSelected","userInput","masked","mask","SelectPrompt","initialCursor","SelectKeyPrompt","caseSensitive","keys","initial","keyInfo","casedKey","TextPrompt"],"mappings":"8NAAO,SAASA,EACfC,EACAC,EACAC,EACC,CAED,GAAI,CADsBA,EAAQ,KAAMC,GAAQ,CAACA,EAAI,QAAQ,EAE5D,OAAOH,EAER,MAAMI,EAAYJ,EAASC,EACrBI,EAAY,KAAK,IAAIH,EAAQ,OAAS,EAAG,CAAC,EAC1CI,EAAgBF,EAAY,EAAIC,EAAYD,EAAYC,EAAY,EAAID,EAE9E,OADkBF,EAAQI,CAAa,EACzB,SACNP,EAAWO,EAAeL,EAAQ,EAAI,GAAK,EAAGC,CAAO,EAEtDI,CACR,CCbA,MAAMC,GAAeC,GACVA,IAAM,KAAQA,IAAM,KAAQA,IAAM,KAAQA,IAAM,KAAQA,IAAM,KAAQA,IAAM,KAAQA,IAAM,KAAQA,GAAK,KAAQA,GAAK,KAAQA,GAAK,KAAQA,GAAK,KAAQA,GAAK,KAAQA,GAAK,KAAQA,IAAM,KAAQA,IAAM,KAAQA,IAAM,KAAQA,IAAM,KAAQA,GAAK,KAAQA,GAAK,KAAQA,IAAM,KAAQA,GAAK,KAAQA,GAAK,KAAQA,IAAM,KAAQA,IAAM,KAAQA,IAAM,KAAQA,IAAM,KAAQA,IAAM,KAAQA,GAAK,KAAQA,GAAK,KAAQA,IAAM,KAAQA,IAAM,KAAQA,IAAM,KAASA,IAAM,KAASA,IAAM,KAASA,IAAM,KAASA,IAAM,KAASA,IAAM,KAASA,IAAM,KAASA,GAAK,KAASA,GAAK,KAASA,IAAM,KAASA,GAAK,KAASA,GAAK,KAASA,IAAM,KAASA,GAAK,KAASA,GAAK,KAASA,IAAM,KAASA,IAAM,KAASA,IAAM,KAASA,IAAM,KAASA,IAAM,KAASA,IAAM,KAASA,IAAM,KAASA,IAAM,KAASA,IAAM,KAASA,IAAM,KAASA,IAAM,KAASA,IAAM,KAASA,IAAM,KAASA,IAAM,KAASA,IAAM,KAASA,IAAM,KAASA,IAAM,KAASA,IAAM,KAASA,GAAK,KAASA,GAAK,KAASA,IAAM,KAASA,IAAM,KAASA,GAAK,KAASA,GAAK,KAASA,IAAM,KAASA,IAAM,KAASA,GAAK,KAASA,GAAK,KAASA,GAAK,KAASA,GAAK,KAASA,GAAK,KAASA,GAAK,KAASA,GAAK,KAASA,GAAK,KAASA,GAAK,KAASA,GAAK,KAASA,IAAM,MAASA,GAAK,MAASA,GAAK,MAASA,IAAM,MAASA,IAAM,MAAUA,GAAK,MAAUA,GAAK,MAAUA,IAAM,MAAUA,IAAM,MAAUA,IAAM,MAAUA,IAAM,MAAUA,GAAK,MAAUA,GAAK,MAAUA,GAAK,MAAUA,GAAK,MAAUA,IAAM,MAAUA,IAAM,MAAUA,IAAM,MAAUA,IAAM,MAAUA,IAAM,MAAUA,IAAM,MAAUA,IAAM,MAAUA,IAAM,MAAUA,GAAK,MAAUA,GAAK,MAAUA,IAAM,MAAUA,IAAM,MAAUA,IAAM,MAAUA,IAAM,MAAUA,IAAM,MAAUA,IAAM,MAAUA,IAAM,MAAUA,IAAM,MAAUA,IAAM,MAAUA,IAAM,MAAUA,IAAM,MAAUA,IAAM,MAAUA,GAAK,MAAUA,GAAK,MAAUA,GAAK,MAAUA,GAAK,MAAUA,GAAK,MAAUA,GAAK,MAAUA,IAAM,MAAUA,GAAK,MAAUA,GAAK,MAAUA,IAAM,MAAUA,IAAM,MAAUA,IAAM,MAAUA,IAAM,MAAUA,IAAM,MAAUA,IAAM,MAAUA,IAAM,MAAUA,IAAM,MAAUA,IAAM,MAAUA,IAAM,MAAUA,IAAM,MAAUA,IAAM,MAAUA,IAAM,MAAUA,IAAM,MAAUA,IAAM,MAAUA,GAAK,MAAUA,GAAK,MAAUA,IAAM,MAAUA,IAAM,MAAUA,GAAK,MAAUA,GAAK,MAAUA,IAAM,MAAUA,GAAK,MAAUA,GAAK,MAAUA,IAAM,MAAUA,IAAM,MAAUA,IAAM,MAAUA,IAAM,MAAUA,IAAM,MAAUA,IAAM,MAAUA,IAAM,MAAUA,GAAK,MAAUA,GAAK,MAAUA,IAAM,MAAUA,IAAM,MAAUA,IAAM,MAAUA,IAAM,MAAUA,IAAM,MAAUA,IAAM,MAAUA,IAAM,MAAUA,IAAM,MAAUA,IAAM,MAAUA,IAAM,MAAUA,IAAM,MAAUA,IAAM,MAAUA,IAAM,MAAUA,GAAK,MAAUA,GAAK,MAAUA,GAAK,MAAUA,GAAK,MAAUA,GAAK,MAAUA,GAAK,MAAUA,GAAK,MAAUA,GAAK,MAAUA,GAAK,MAAUA,GAAK,MAAUA,IAAM,MAAUA,IAAM,MAAUA,GAAK,MAAUA,GAAK,MAAUA,IAAM,MAAUA,IAAM,MAAUA,IAAM,MAAUA,IAAM,MAAUA,IAAM,MAAUA,IAAM,MAAUA,IAAM,MAAUA,IAAM,MAAUA,GAAK,MAAUA,GAAK,MAAUA,IAAM,MAAUA,GAAK,MAAUA,GAAK,MAAUA,GAAK,MAAUA,GAAK,MAAUA,IAAM,MAAUA,IAAM,MAAUA,IAAM,MAAUA,IAAM,MAAUA,IAAM,MAAUA,IAAM,MAAUA,IAAM,MAAUA,IAAM,MAAUA,IAAM,MAAUA,IAAM,MAAUA,IAAM,MAAUA,IAAM,MAAUA,GAAK,MAAUA,GAAK,MAAUA,GAAK,MAAUA,GAAK,MAAUA,IAAM,MAAUA,IAAM,MAAUA,IAAM,MAAUA,IAAM,MAAUA,IAAM,MAAUA,IAAM,MAAUA,GAAK,MAAUA,GAAK,MAAUA,GAAK,MAAUA,GAAK,MAAUA,GAAK,MAAUA,GAAK,MAAUA,IAAM,MAAUA,IAAM,MAAUA,IAAM,MAAUA,GAAK,MAAUA,GAAK,MAAUA,IAAM,MAAUA,GAAK,MAAUA,GAAK,MAAUA,IAAM,MAAUA,IAAM,MAAUA,IAAM,MAAUA,IAAM,MAAUA,IAAM,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,IAAM,OAAUA,GAAK,QAAWA,GAAK,QAAWA,GAAK,QAAWA,GAAK,QAAWA,GAAK,QAAWA,GAAK,QAAWA,GAAK,QAAWA,GAAK,QAAWA,IAAM,QAAWA,IAAM,QAAWA,GAAK,QAAWA,GAAK,QAAWA,GAAK,QAAWA,GAAK,QAAWA,GAAK,QAAWA,GAAK,SAAWA,GAAK,SAAYA,GAAK,QAEpjIC,GAAeD,GACVA,IAAM,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,MAEvEE,GAAUF,GACLA,GAAK,MAAUA,GAAK,MAAUA,IAAM,MAAUA,IAAM,MAAUA,IAAM,MAAUA,IAAM,MAAUA,GAAK,MAAUA,GAAK,MAAUA,IAAM,MAAUA,IAAM,MAAUA,IAAM,MAAUA,IAAM,MAAUA,IAAM,MAAUA,IAAM,MAAUA,GAAK,MAAUA,GAAK,MAAUA,IAAM,MAAUA,IAAM,MAAUA,IAAM,MAAUA,IAAM,MAAUA,IAAM,MAAUA,IAAM,MAAUA,IAAM,MAAUA,IAAM,MAAUA,IAAM,MAAUA,IAAM,MAAUA,IAAM,MAAUA,IAAM,MAAUA,IAAM,MAAUA,IAAM,MAAUA,IAAM,MAAUA,IAAM,MAAUA,IAAM,MAAUA,IAAM,MAAUA,IAAM,MAAUA,IAAM,MAAUA,IAAM,OAAUA,IAAM,OAAUA,IAAM,OAAUA,GAAK,OAAUA,GAAK,OAAUA,IAAM,OAAUA,GAAK,OAAUA,GAAK,OAAUA,IAAM,OAAUA,IAAM,OAAUA,IAAM,OAAUA,IAAM,OAAUA,IAAM,OAAUA,IAAM,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAUA,GAAK,OAAWA,GAAK,OAAWA,IAAM,OAAWA,IAAM,OAAWA,GAAK,OAAWA,GAAK,QAAWA,GAAK,QAAWA,GAAK,QAAWA,GAAK,QAAWA,GAAK,QAAWA,GAAK,QAAWA,GAAK,QAAWA,GAAK,QAAWA,GAAK,QAAWA,IAAM,QAAWA,IAAM,QAAWA,GAAK,QAAWA,GAAK,QAAWA,IAAM,QAAWA,GAAK,QAAWA,GAAK,QAAWA,IAAM,QAAWA,GAAK,QAAWA,GAAK,QAAWA,GAAK,QAAWA,GAAK,QAAWA,IAAM,QAAWA,IAAM,QAAWA,IAAM,QAAWA,GAAK,QAAWA,GAAK,QAAWA,GAAK,QAAWA,GAAK,QAAWA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","x_google_ignoreList":[1,2,3,4]} |