mepcli 2.0.0-beta.2 → 2.0.0-beta.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ansi.d.ts +36 -0
- package/dist/ansi.js +1 -0
- package/dist/base.d.ts +60 -0
- package/dist/base.js +1 -0
- package/dist/{src/core.js → core.d.ts} +175 -345
- package/dist/core.js +1 -0
- package/dist/data/countries.d.ts +2 -0
- package/dist/data/countries.js +1 -0
- package/dist/data/licenses.d.ts +2 -0
- package/dist/data/licenses.js +1 -0
- package/dist/highlight.d.ts +7 -0
- package/dist/highlight.js +1 -0
- package/dist/index.d.ts +48 -0
- package/dist/index.js +1 -0
- package/dist/input.d.ts +14 -0
- package/dist/input.js +1 -0
- package/dist/pipeline.d.ts +90 -0
- package/dist/pipeline.js +1 -0
- package/dist/prompts/autocomplete.d.ts +22 -0
- package/dist/prompts/autocomplete.js +1 -0
- package/dist/prompts/box.d.ts +21 -0
- package/dist/prompts/box.js +4 -0
- package/dist/prompts/breadcrumb-search.d.ts +14 -0
- package/dist/prompts/breadcrumb-search.js +2 -0
- package/dist/prompts/breadcrumb.d.ts +32 -0
- package/dist/prompts/breadcrumb.js +3 -0
- package/dist/prompts/byte.d.ts +13 -0
- package/dist/prompts/byte.js +5 -0
- package/dist/prompts/calculator.d.ts +17 -0
- package/dist/prompts/calculator.js +3 -0
- package/dist/prompts/calendar.d.ts +33 -0
- package/dist/prompts/calendar.js +3 -0
- package/dist/prompts/checkbox.d.ts +13 -0
- package/dist/prompts/checkbox.js +2 -0
- package/dist/prompts/code.d.ts +19 -0
- package/dist/prompts/code.js +4 -0
- package/dist/prompts/color.d.ts +14 -0
- package/dist/prompts/color.js +10 -0
- package/dist/prompts/confirm.d.ts +8 -0
- package/dist/prompts/confirm.js +1 -0
- package/dist/prompts/connection-string.d.ts +18 -0
- package/dist/prompts/connection-string.js +1 -0
- package/dist/prompts/cron.d.ts +13 -0
- package/dist/prompts/cron.js +4 -0
- package/dist/prompts/curl-utils.d.ts +25 -0
- package/dist/prompts/curl-utils.js +1 -0
- package/dist/prompts/curl.d.ts +41 -0
- package/dist/prompts/curl.js +12 -0
- package/dist/prompts/data-inspector.d.ts +22 -0
- package/dist/prompts/data-inspector.js +5 -0
- package/dist/prompts/date.d.ts +12 -0
- package/dist/prompts/date.js +2 -0
- package/dist/prompts/dependency.d.ts +16 -0
- package/dist/prompts/dependency.js +3 -0
- package/dist/prompts/dial.d.ts +10 -0
- package/dist/prompts/dial.js +3 -0
- package/dist/prompts/diff.d.ts +10 -0
- package/dist/prompts/diff.js +10 -0
- package/dist/prompts/draw.d.ts +20 -0
- package/dist/prompts/draw.js +6 -0
- package/dist/prompts/editor.d.ts +14 -0
- package/dist/prompts/editor.js +2 -0
- package/dist/prompts/emoji.d.ts +18 -0
- package/dist/prompts/emoji.js +5 -0
- package/dist/prompts/exec.d.ts +17 -0
- package/dist/prompts/exec.js +1 -0
- package/dist/prompts/file.d.ts +21 -0
- package/dist/prompts/file.js +2 -0
- package/dist/prompts/form.d.ts +18 -0
- package/dist/prompts/form.js +1 -0
- package/dist/prompts/fuzzy-multi-column.d.ts +12 -0
- package/dist/prompts/fuzzy-multi-column.js +2 -0
- package/dist/prompts/fuzzy.d.ts +12 -0
- package/dist/prompts/fuzzy.js +2 -0
- package/dist/prompts/gauge.d.ts +21 -0
- package/dist/prompts/gauge.js +4 -0
- package/dist/prompts/grid.d.ts +14 -0
- package/dist/prompts/grid.js +2 -0
- package/dist/prompts/heatmap.d.ts +13 -0
- package/dist/prompts/heatmap.js +2 -0
- package/dist/prompts/ip.d.ts +11 -0
- package/dist/prompts/ip.js +3 -0
- package/dist/prompts/kanban.d.ts +17 -0
- package/dist/prompts/kanban.js +4 -0
- package/dist/prompts/keypress.d.ts +7 -0
- package/dist/prompts/keypress.js +1 -0
- package/dist/prompts/license.d.ts +9 -0
- package/dist/prompts/license.js +13 -0
- package/dist/prompts/list.d.ts +9 -0
- package/dist/prompts/list.js +1 -0
- package/dist/prompts/map.d.ts +17 -0
- package/dist/prompts/map.js +5 -0
- package/dist/prompts/match.d.ts +19 -0
- package/dist/prompts/match.js +7 -0
- package/dist/prompts/miller.d.ts +15 -0
- package/dist/prompts/miller.js +2 -0
- package/dist/prompts/multi-column-select.d.ts +10 -0
- package/dist/prompts/multi-column-select.js +2 -0
- package/dist/prompts/multi-range.d.ts +9 -0
- package/dist/prompts/multi-range.js +3 -0
- package/dist/prompts/multi-select.d.ts +15 -0
- package/dist/prompts/multi-select.js +4 -0
- package/dist/prompts/number.d.ts +11 -0
- package/dist/prompts/number.js +2 -0
- package/dist/prompts/otp.d.ts +10 -0
- package/dist/prompts/otp.js +2 -0
- package/dist/prompts/pattern.d.ts +22 -0
- package/dist/prompts/pattern.js +4 -0
- package/dist/prompts/phone.d.ts +41 -0
- package/dist/prompts/phone.js +3 -0
- package/dist/prompts/quiz-select.d.ts +10 -0
- package/dist/prompts/quiz-select.js +7 -0
- package/dist/prompts/quiz-text.d.ts +11 -0
- package/dist/prompts/quiz-text.js +8 -0
- package/dist/prompts/range.d.ts +9 -0
- package/dist/prompts/range.js +1 -0
- package/dist/prompts/rating.d.ts +8 -0
- package/dist/prompts/rating.js +1 -0
- package/dist/prompts/regex.d.ts +13 -0
- package/dist/prompts/regex.js +5 -0
- package/dist/prompts/region.d.ts +11 -0
- package/dist/prompts/region.js +5 -0
- package/dist/prompts/schedule.d.ts +20 -0
- package/dist/prompts/schedule.js +5 -0
- package/dist/prompts/scroll.d.ts +13 -0
- package/dist/prompts/scroll.js +1 -0
- package/dist/prompts/seat.d.ts +17 -0
- package/dist/prompts/seat.js +5 -0
- package/dist/prompts/select-range.d.ts +8 -0
- package/dist/prompts/select-range.js +3 -0
- package/dist/prompts/select.d.ts +15 -0
- package/dist/prompts/select.js +2 -0
- package/dist/prompts/semver.d.ts +6 -0
- package/dist/prompts/semver.js +1 -0
- package/dist/prompts/shortcut.d.ts +9 -0
- package/dist/prompts/shortcut.js +1 -0
- package/dist/prompts/slider.d.ts +8 -0
- package/dist/prompts/slider.js +1 -0
- package/dist/prompts/slot.d.ts +16 -0
- package/dist/prompts/slot.js +8 -0
- package/dist/prompts/snippet.d.ts +19 -0
- package/dist/prompts/snippet.js +4 -0
- package/dist/prompts/sort-grid.d.ts +16 -0
- package/dist/prompts/sort-grid.js +2 -0
- package/dist/prompts/sort.d.ts +14 -0
- package/dist/prompts/sort.js +2 -0
- package/dist/prompts/spam.d.ts +17 -0
- package/dist/prompts/spam.js +2 -0
- package/dist/prompts/spreadsheet.d.ts +21 -0
- package/dist/prompts/spreadsheet.js +7 -0
- package/dist/prompts/table.d.ts +14 -0
- package/dist/prompts/table.js +3 -0
- package/dist/prompts/text.d.ts +17 -0
- package/dist/prompts/text.js +2 -0
- package/dist/prompts/time.d.ts +12 -0
- package/dist/prompts/time.js +2 -0
- package/dist/prompts/toggle.d.ts +8 -0
- package/dist/prompts/toggle.js +1 -0
- package/dist/prompts/transfer.d.ts +18 -0
- package/dist/prompts/transfer.js +5 -0
- package/dist/prompts/tree-select.d.ts +31 -0
- package/dist/prompts/tree-select.js +3 -0
- package/dist/prompts/tree.d.ts +20 -0
- package/dist/prompts/tree.js +3 -0
- package/dist/prompts/wait.d.ts +18 -0
- package/dist/prompts/wait.js +1 -0
- package/dist/spinner.d.ts +33 -0
- package/dist/spinner.js +3 -0
- package/dist/symbols.d.ts +33 -0
- package/dist/symbols.js +1 -0
- package/dist/tasks.d.ts +57 -0
- package/dist/tasks.js +1 -0
- package/dist/theme.d.ts +2 -0
- package/dist/theme.js +1 -0
- package/dist/types.d.ts +503 -0
- package/dist/types.js +1 -0
- package/dist/utils.d.ts +81 -0
- package/dist/utils.js +1 -0
- package/package.json +8 -9
- package/dist/src/ansi.js +0 -50
- package/dist/src/ansi.js.map +0 -1
- package/dist/src/base.js +0 -258
- package/dist/src/base.js.map +0 -1
- package/dist/src/core.js.map +0 -1
- package/dist/src/data/countries.js +0 -569
- package/dist/src/data/countries.js.map +0 -1
- package/dist/src/data/licenses.js +0 -480
- package/dist/src/data/licenses.js.map +0 -1
- package/dist/src/highlight.js +0 -185
- package/dist/src/highlight.js.map +0 -1
- package/dist/src/index.js +0 -66
- package/dist/src/index.js.map +0 -1
- package/dist/src/input.js +0 -158
- package/dist/src/input.js.map +0 -1
- package/dist/src/pipeline.js +0 -273
- package/dist/src/pipeline.js.map +0 -1
- package/dist/src/prompts/autocomplete.js +0 -171
- package/dist/src/prompts/autocomplete.js.map +0 -1
- package/dist/src/prompts/box.js +0 -225
- package/dist/src/prompts/box.js.map +0 -1
- package/dist/src/prompts/breadcrumb-search.js +0 -260
- package/dist/src/prompts/breadcrumb-search.js.map +0 -1
- package/dist/src/prompts/breadcrumb.js +0 -307
- package/dist/src/prompts/breadcrumb.js.map +0 -1
- package/dist/src/prompts/byte.js +0 -176
- package/dist/src/prompts/byte.js.map +0 -1
- package/dist/src/prompts/calculator.js +0 -243
- package/dist/src/prompts/calculator.js.map +0 -1
- package/dist/src/prompts/calendar.js +0 -430
- package/dist/src/prompts/calendar.js.map +0 -1
- package/dist/src/prompts/checkbox.js +0 -159
- package/dist/src/prompts/checkbox.js.map +0 -1
- package/dist/src/prompts/code.js +0 -271
- package/dist/src/prompts/code.js.map +0 -1
- package/dist/src/prompts/color.js +0 -165
- package/dist/src/prompts/color.js.map +0 -1
- package/dist/src/prompts/confirm.js +0 -55
- package/dist/src/prompts/confirm.js.map +0 -1
- package/dist/src/prompts/connection-string.js +0 -120
- package/dist/src/prompts/connection-string.js.map +0 -1
- package/dist/src/prompts/cron.js +0 -207
- package/dist/src/prompts/cron.js.map +0 -1
- package/dist/src/prompts/curl-utils.js +0 -71
- package/dist/src/prompts/curl-utils.js.map +0 -1
- package/dist/src/prompts/curl.js +0 -431
- package/dist/src/prompts/curl.js.map +0 -1
- package/dist/src/prompts/data-inspector.js +0 -261
- package/dist/src/prompts/data-inspector.js.map +0 -1
- package/dist/src/prompts/date.js +0 -185
- package/dist/src/prompts/date.js.map +0 -1
- package/dist/src/prompts/dependency.js +0 -283
- package/dist/src/prompts/dependency.js.map +0 -1
- package/dist/src/prompts/dial.js +0 -124
- package/dist/src/prompts/dial.js.map +0 -1
- package/dist/src/prompts/diff.js +0 -118
- package/dist/src/prompts/diff.js.map +0 -1
- package/dist/src/prompts/draw.js +0 -191
- package/dist/src/prompts/draw.js.map +0 -1
- package/dist/src/prompts/editor.js +0 -234
- package/dist/src/prompts/editor.js.map +0 -1
- package/dist/src/prompts/emoji.js +0 -226
- package/dist/src/prompts/emoji.js.map +0 -1
- package/dist/src/prompts/exec.js +0 -151
- package/dist/src/prompts/exec.js.map +0 -1
- package/dist/src/prompts/file.js +0 -217
- package/dist/src/prompts/file.js.map +0 -1
- package/dist/src/prompts/form.js +0 -241
- package/dist/src/prompts/form.js.map +0 -1
- package/dist/src/prompts/fuzzy-multi-column.js +0 -161
- package/dist/src/prompts/fuzzy-multi-column.js.map +0 -1
- package/dist/src/prompts/fuzzy.js +0 -147
- package/dist/src/prompts/fuzzy.js.map +0 -1
- package/dist/src/prompts/gauge.js +0 -137
- package/dist/src/prompts/gauge.js.map +0 -1
- package/dist/src/prompts/grid.js +0 -191
- package/dist/src/prompts/grid.js.map +0 -1
- package/dist/src/prompts/heatmap.js +0 -147
- package/dist/src/prompts/heatmap.js.map +0 -1
- package/dist/src/prompts/ip.js +0 -138
- package/dist/src/prompts/ip.js.map +0 -1
- package/dist/src/prompts/kanban.js +0 -233
- package/dist/src/prompts/kanban.js.map +0 -1
- package/dist/src/prompts/keypress.js +0 -54
- package/dist/src/prompts/keypress.js.map +0 -1
- package/dist/src/prompts/license.js +0 -144
- package/dist/src/prompts/license.js.map +0 -1
- package/dist/src/prompts/list.js +0 -124
- package/dist/src/prompts/list.js.map +0 -1
- package/dist/src/prompts/map.js +0 -262
- package/dist/src/prompts/map.js.map +0 -1
- package/dist/src/prompts/match.js +0 -271
- package/dist/src/prompts/match.js.map +0 -1
- package/dist/src/prompts/miller.js +0 -228
- package/dist/src/prompts/miller.js.map +0 -1
- package/dist/src/prompts/multi-column-select.js +0 -176
- package/dist/src/prompts/multi-column-select.js.map +0 -1
- package/dist/src/prompts/multi-range.js +0 -189
- package/dist/src/prompts/multi-range.js.map +0 -1
- package/dist/src/prompts/multi-select.js +0 -183
- package/dist/src/prompts/multi-select.js.map +0 -1
- package/dist/src/prompts/number.js +0 -166
- package/dist/src/prompts/number.js.map +0 -1
- package/dist/src/prompts/otp.js +0 -107
- package/dist/src/prompts/otp.js.map +0 -1
- package/dist/src/prompts/pattern.js +0 -252
- package/dist/src/prompts/pattern.js.map +0 -1
- package/dist/src/prompts/phone.js +0 -398
- package/dist/src/prompts/phone.js.map +0 -1
- package/dist/src/prompts/quiz-select.js +0 -114
- package/dist/src/prompts/quiz-select.js.map +0 -1
- package/dist/src/prompts/quiz-text.js +0 -98
- package/dist/src/prompts/quiz-text.js.map +0 -1
- package/dist/src/prompts/range.js +0 -164
- package/dist/src/prompts/range.js.map +0 -1
- package/dist/src/prompts/rating.js +0 -83
- package/dist/src/prompts/rating.js.map +0 -1
- package/dist/src/prompts/regex.js +0 -145
- package/dist/src/prompts/regex.js.map +0 -1
- package/dist/src/prompts/region.js +0 -170
- package/dist/src/prompts/region.js.map +0 -1
- package/dist/src/prompts/schedule.js +0 -270
- package/dist/src/prompts/schedule.js.map +0 -1
- package/dist/src/prompts/scroll.js +0 -155
- package/dist/src/prompts/scroll.js.map +0 -1
- package/dist/src/prompts/seat.js +0 -164
- package/dist/src/prompts/seat.js.map +0 -1
- package/dist/src/prompts/select-range.js +0 -148
- package/dist/src/prompts/select-range.js.map +0 -1
- package/dist/src/prompts/select.js +0 -163
- package/dist/src/prompts/select.js.map +0 -1
- package/dist/src/prompts/semver.js +0 -43
- package/dist/src/prompts/semver.js.map +0 -1
- package/dist/src/prompts/shortcut.js +0 -133
- package/dist/src/prompts/shortcut.js.map +0 -1
- package/dist/src/prompts/slider.js +0 -69
- package/dist/src/prompts/slider.js.map +0 -1
- package/dist/src/prompts/slot.js +0 -117
- package/dist/src/prompts/slot.js.map +0 -1
- package/dist/src/prompts/snippet.js +0 -228
- package/dist/src/prompts/snippet.js.map +0 -1
- package/dist/src/prompts/sort-grid.js +0 -151
- package/dist/src/prompts/sort-grid.js.map +0 -1
- package/dist/src/prompts/sort.js +0 -166
- package/dist/src/prompts/sort.js.map +0 -1
- package/dist/src/prompts/spam.js +0 -80
- package/dist/src/prompts/spam.js.map +0 -1
- package/dist/src/prompts/spreadsheet.js +0 -240
- package/dist/src/prompts/spreadsheet.js.map +0 -1
- package/dist/src/prompts/table.js +0 -120
- package/dist/src/prompts/table.js.map +0 -1
- package/dist/src/prompts/text.js +0 -317
- package/dist/src/prompts/text.js.map +0 -1
- package/dist/src/prompts/time.js +0 -211
- package/dist/src/prompts/time.js.map +0 -1
- package/dist/src/prompts/toggle.js +0 -53
- package/dist/src/prompts/toggle.js.map +0 -1
- package/dist/src/prompts/transfer.js +0 -207
- package/dist/src/prompts/transfer.js.map +0 -1
- package/dist/src/prompts/tree-select.js +0 -270
- package/dist/src/prompts/tree-select.js.map +0 -1
- package/dist/src/prompts/tree.js +0 -233
- package/dist/src/prompts/tree.js.map +0 -1
- package/dist/src/prompts/wait.js +0 -79
- package/dist/src/prompts/wait.js.map +0 -1
- package/dist/src/spinner.js +0 -105
- package/dist/src/spinner.js.map +0 -1
- package/dist/src/symbols.js +0 -66
- package/dist/src/symbols.js.map +0 -1
- package/dist/src/tasks.js +0 -231
- package/dist/src/tasks.js.map +0 -1
- package/dist/src/theme.js +0 -29
- package/dist/src/theme.js.map +0 -1
- package/dist/src/types.js +0 -8
- package/dist/src/types.js.map +0 -1
- package/dist/src/utils.js +0 -480
- package/dist/src/utils.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/prompts/checkbox.ts"],"sourcesContent":["import { ANSI } from '../ansi';\nimport { Prompt } from '../base';\nimport { theme } from '../theme';\nimport { symbols } from '../symbols';\nimport { CheckboxOptions, MouseEvent } from '../types';\n\n// --- Implementation: Checkbox Prompt ---\nexport class CheckboxPrompt<V> extends Prompt<any[], CheckboxOptions<V>> {\n private selectedIndex: number = 0;\n private checkedState: boolean[];\n private errorMsg: string = '';\n // Pagination state\n private scrollTop: number = 0;\n private readonly pageSize: number = 10;\n\n constructor(options: CheckboxOptions<V>) {\n super(options);\n this.checkedState = options.choices.map(c => !!c.selected);\n }\n\n protected render(_firstRender: boolean) {\n // Adjust Scroll Top\n if (this.selectedIndex < this.scrollTop) {\n this.scrollTop = this.selectedIndex;\n } else if (this.selectedIndex >= this.scrollTop + this.pageSize) {\n this.scrollTop = this.selectedIndex - this.pageSize + 1;\n }\n\n // Ensure we don't scroll past bounds if list is small\n if (this.options.choices.length <= this.pageSize) {\n this.scrollTop = 0;\n }\n\n let output = '';\n\n // Header\n const icon = this.errorMsg ? `${theme.error}${symbols.cross}` : `${theme.success}?`;\n output += `${icon} ${ANSI.BOLD}${theme.title}${this.options.message}${ANSI.RESET} ${theme.muted}(Space: toggle, a: all, x: none, Enter: submit)${ANSI.RESET}`;\n\n // List\n const choices = this.options.choices;\n const visibleChoices = choices.slice(this.scrollTop, this.scrollTop + this.pageSize);\n\n visibleChoices.forEach((choice, index) => {\n const actualIndex = this.scrollTop + index;\n output += '\\n'; // New line for each item\n\n const cursor = actualIndex === this.selectedIndex ? `${theme.main}${symbols.pointer}${ANSI.RESET}` : ' ';\n const isChecked = this.checkedState[actualIndex];\n const checkbox = isChecked\n ? `${theme.success}${symbols.checked}${ANSI.RESET}`\n : `${theme.muted}${symbols.unchecked}${ANSI.RESET}`;\n\n const title = actualIndex === this.selectedIndex\n ? `${theme.main}${choice.title}${ANSI.RESET}`\n : choice.title;\n\n output += `${cursor} ${checkbox} ${title}`;\n });\n\n // Indication of more items\n if (choices.length > this.pageSize) {\n // const progress = ` ${this.scrollTop + 1}-${Math.min(this.scrollTop + this.pageSize, choices.length)} of ${choices.length}`;\n }\n\n if (this.errorMsg) {\n output += `\\n${theme.error}>> ${this.errorMsg}${ANSI.RESET}`;\n }\n\n this.renderFrame(output);\n }\n\n protected handleInput(char: string) {\n if (char === '\\r' || char === '\\n') {\n const selectedCount = this.checkedState.filter(Boolean).length;\n const { min = 0, max } = this.options;\n\n if (selectedCount < min) {\n this.errorMsg = `You must select at least ${min} options.`;\n this.render(false);\n return;\n }\n if (max && selectedCount > max) {\n this.errorMsg = `You can only select up to ${max} options.`;\n this.render(false);\n return;\n }\n\n this.cleanup();\n\n const results = this.options.choices\n .filter((_, i) => this.checkedState[i])\n .map(c => c.value);\n\n if ((this as any)._resolve) (this as any)._resolve(results);\n return;\n }\n\n // --- Batch Shortcuts ---\n\n // 'a': Select All\n if (char === 'a') {\n if (this.options.max && this.options.choices.length > this.options.max) {\n this.errorMsg = `Cannot select all: Max limit is ${this.options.max}`;\n } else {\n this.checkedState.fill(true);\n this.errorMsg = '';\n }\n this.render(false);\n return;\n }\n\n // 'x' or 'n': Select None\n if (char === 'x' || char === 'n') {\n this.checkedState.fill(false);\n this.errorMsg = '';\n this.render(false);\n return;\n }\n\n // 'i': Invert Selection\n if (char === 'i') {\n const potentialCount = this.checkedState.filter(s => !s).length;\n if (this.options.max && potentialCount > this.options.max) {\n this.errorMsg = `Cannot invert: Result exceeds max limit ${this.options.max}`;\n } else {\n this.checkedState = this.checkedState.map(s => !s);\n this.errorMsg = '';\n }\n this.render(false);\n return;\n }\n\n // Space Toggle\n if (char === ' ') {\n const currentChecked = this.checkedState[this.selectedIndex];\n const selectedCount = this.checkedState.filter(Boolean).length;\n const { max } = this.options;\n\n if (!currentChecked && max && selectedCount >= max) {\n this.errorMsg = `Max ${max} selections allowed.`;\n } else {\n this.checkedState[this.selectedIndex] = !currentChecked;\n this.errorMsg = '';\n }\n this.render(false);\n }\n\n if (this.isUp(char)) { // Up\n this.selectedIndex = this.selectedIndex > 0 ? this.selectedIndex - 1 : this.options.choices.length - 1;\n this.errorMsg = '';\n this.render(false);\n }\n if (this.isDown(char)) { // Down\n this.selectedIndex = this.selectedIndex < this.options.choices.length - 1 ? this.selectedIndex + 1 : 0;\n this.errorMsg = '';\n this.render(false);\n }\n }\n\n protected handleMouse(event: MouseEvent) {\n if (event.action === 'scroll') {\n if (event.scroll === 'up') {\n this.selectedIndex = this.selectedIndex > 0 ? this.selectedIndex - 1 : this.options.choices.length - 1;\n this.errorMsg = '';\n this.render(false);\n } else if (event.scroll === 'down') {\n this.selectedIndex = this.selectedIndex < this.options.choices.length - 1 ? this.selectedIndex + 1 : 0;\n this.errorMsg = '';\n this.render(false);\n }\n }\n }\n}\n"],"names":["CheckboxPrompt","Prompt","render","_firstRender","selectedIndex","scrollTop","pageSize","options","choices","length","output","icon","errorMsg","theme","error","symbols","cross","success","ANSI","BOLD","title","message","RESET","muted","visibleChoices","slice","forEach","choice","index","actualIndex","cursor","main","pointer","isChecked","checkedState","checkbox","checked","unchecked","renderFrame","handleInput","char","selectedCount","filter","Boolean","min","max","cleanup","results","_","i","map","c","value","_resolve","fill","potentialCount","s","currentChecked","isUp","isDown","handleMouse","event","action","scroll","selected"],"mappings":"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"}
|
package/dist/src/prompts/code.js
DELETED
|
@@ -1,271 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
Object.defineProperty(exports, "CodePrompt", {
|
|
6
|
-
enumerable: true,
|
|
7
|
-
get: function() {
|
|
8
|
-
return CodePrompt;
|
|
9
|
-
}
|
|
10
|
-
});
|
|
11
|
-
const _ansi = require("../ansi");
|
|
12
|
-
const _base = require("../base");
|
|
13
|
-
const _theme = require("../theme");
|
|
14
|
-
const _utils = require("../utils");
|
|
15
|
-
const _highlight = require("../highlight");
|
|
16
|
-
function _define_property(obj, key, value) {
|
|
17
|
-
if (key in obj) {
|
|
18
|
-
Object.defineProperty(obj, key, {
|
|
19
|
-
value: value,
|
|
20
|
-
enumerable: true,
|
|
21
|
-
configurable: true,
|
|
22
|
-
writable: true
|
|
23
|
-
});
|
|
24
|
-
} else {
|
|
25
|
-
obj[key] = value;
|
|
26
|
-
}
|
|
27
|
-
return obj;
|
|
28
|
-
}
|
|
29
|
-
let CodePrompt = class CodePrompt extends _base.Prompt {
|
|
30
|
-
parseTemplate() {
|
|
31
|
-
const regex = /\$\{([a-zA-Z0-9_]+)\}/g;
|
|
32
|
-
let lastIndex = 0;
|
|
33
|
-
let match;
|
|
34
|
-
while((match = regex.exec(this.options.template)) !== null){
|
|
35
|
-
if (match.index > lastIndex) {
|
|
36
|
-
this.tokens.push({
|
|
37
|
-
type: 'static',
|
|
38
|
-
value: this.options.template.substring(lastIndex, match.index)
|
|
39
|
-
});
|
|
40
|
-
}
|
|
41
|
-
this.tokens.push({
|
|
42
|
-
type: 'variable',
|
|
43
|
-
value: match[1]
|
|
44
|
-
});
|
|
45
|
-
this.variableTokens.push(this.tokens.length - 1);
|
|
46
|
-
lastIndex = regex.lastIndex;
|
|
47
|
-
}
|
|
48
|
-
if (lastIndex < this.options.template.length) {
|
|
49
|
-
this.tokens.push({
|
|
50
|
-
type: 'static',
|
|
51
|
-
value: this.options.template.substring(lastIndex)
|
|
52
|
-
});
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
// FIX: Override cleanup to ensure cursor is reset to bottom
|
|
56
|
-
cleanup() {
|
|
57
|
-
// If the cursor is currently moved up (editing mode), move it back down
|
|
58
|
-
// before the prompt exits. This prevents the next output (or result)
|
|
59
|
-
// from overwriting the bottom part of our UI.
|
|
60
|
-
if (this.lastLinesUp > 0) {
|
|
61
|
-
this.print(`\x1b[${this.lastLinesUp}B`);
|
|
62
|
-
this.lastLinesUp = 0;
|
|
63
|
-
}
|
|
64
|
-
super.cleanup();
|
|
65
|
-
}
|
|
66
|
-
render(firstRender) {
|
|
67
|
-
if (!firstRender && this.lastLinesUp > 0) {
|
|
68
|
-
this.print(`\x1b[${this.lastLinesUp}B`);
|
|
69
|
-
}
|
|
70
|
-
this.lastLinesUp = 0;
|
|
71
|
-
// 1. Build Full Raw Text & Identify Active Variable Range
|
|
72
|
-
let fullRawText = '';
|
|
73
|
-
let activeVarStart = -1;
|
|
74
|
-
let activeVarEnd = -1;
|
|
75
|
-
const activeTokenIdx = this.variableTokens[this.activeVarIndex];
|
|
76
|
-
// const activeVarName = this.tokens[activeTokenIdx].value;
|
|
77
|
-
this.tokens.forEach((token, idx)=>{
|
|
78
|
-
const val = token.type === 'static' ? token.value : this.values[token.value] || '';
|
|
79
|
-
if (idx === activeTokenIdx) {
|
|
80
|
-
activeVarStart = fullRawText.length;
|
|
81
|
-
activeVarEnd = activeVarStart + val.length;
|
|
82
|
-
}
|
|
83
|
-
fullRawText += val;
|
|
84
|
-
});
|
|
85
|
-
// 2. Syntax Highlight with Overlap Logic
|
|
86
|
-
let highlighted = '';
|
|
87
|
-
const shouldHighlight = this.options.highlight !== false;
|
|
88
|
-
if (shouldHighlight) {
|
|
89
|
-
const lang = this.options.language || 'json';
|
|
90
|
-
const highlightedText = (0, _highlight.highlight)(fullRawText, lang);
|
|
91
|
-
let visibleIdx = 0;
|
|
92
|
-
let activeColor = ''; // Tracks the last set color
|
|
93
|
-
for(let i = 0; i < highlightedText.length; i++){
|
|
94
|
-
const char = highlightedText[i];
|
|
95
|
-
if (char === '\x1b') {
|
|
96
|
-
// Start of ANSI sequence
|
|
97
|
-
let sequence = char;
|
|
98
|
-
i++;
|
|
99
|
-
while(i < highlightedText.length && highlightedText[i] !== 'm'){
|
|
100
|
-
sequence += highlightedText[i];
|
|
101
|
-
i++;
|
|
102
|
-
}
|
|
103
|
-
if (i < highlightedText.length) sequence += 'm'; // Append terminator
|
|
104
|
-
// Interpret sequence (naive)
|
|
105
|
-
if (sequence === _ansi.ANSI.RESET || sequence === '\x1b[0m') {
|
|
106
|
-
activeColor = '';
|
|
107
|
-
} else {
|
|
108
|
-
// Assuming it's a color code.
|
|
109
|
-
activeColor = sequence;
|
|
110
|
-
}
|
|
111
|
-
// If we are INSIDE the active range, and we encounter a color change/reset,
|
|
112
|
-
// we must ensure UNDERLINE is kept/restored.
|
|
113
|
-
if (visibleIdx >= activeVarStart && visibleIdx < activeVarEnd) {
|
|
114
|
-
// Output the sequence (e.g. a color change)
|
|
115
|
-
highlighted += sequence;
|
|
116
|
-
// Then re-assert underline
|
|
117
|
-
highlighted += _ansi.ANSI.UNDERLINE;
|
|
118
|
-
} else {
|
|
119
|
-
highlighted += sequence;
|
|
120
|
-
}
|
|
121
|
-
continue;
|
|
122
|
-
}
|
|
123
|
-
// Normal char
|
|
124
|
-
if (visibleIdx === activeVarStart) {
|
|
125
|
-
highlighted += `${_theme.theme.main}${_ansi.ANSI.UNDERLINE}`;
|
|
126
|
-
}
|
|
127
|
-
highlighted += char;
|
|
128
|
-
visibleIdx++;
|
|
129
|
-
if (visibleIdx === activeVarEnd) {
|
|
130
|
-
highlighted += _ansi.ANSI.RESET;
|
|
131
|
-
// Restore previous color if any
|
|
132
|
-
if (activeColor) {
|
|
133
|
-
highlighted += activeColor;
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
highlighted += _ansi.ANSI.RESET;
|
|
138
|
-
} else {
|
|
139
|
-
this.appendSegment(fullRawText, 0, activeVarStart, activeVarEnd, _ansi.ANSI.RESET, (s)=>highlighted += s);
|
|
140
|
-
}
|
|
141
|
-
// 3. Output Frame
|
|
142
|
-
const warningMsg = shouldHighlight ? `${_ansi.ANSI.FG_YELLOW}Warning:${_ansi.ANSI.RESET} Syntax highlighting is an experimental feature.\n` : '';
|
|
143
|
-
const prefix = `${warningMsg}${_theme.theme.success}? ${_ansi.ANSI.BOLD}${_theme.theme.title}${this.options.message}${_ansi.ANSI.RESET}\n`;
|
|
144
|
-
const suffix = `\n${_theme.theme.muted}(Tab to next, Enter to submit)${_ansi.ANSI.RESET}`;
|
|
145
|
-
const fullOutput = prefix + highlighted + suffix;
|
|
146
|
-
this.renderFrame(fullOutput);
|
|
147
|
-
// 4. Cursor Calculation
|
|
148
|
-
const cursorAbsPos = activeVarStart + this.cursor;
|
|
149
|
-
const textBeforeCursor = fullRawText.substring(0, cursorAbsPos);
|
|
150
|
-
const rowsBefore = textBeforeCursor.split('\n');
|
|
151
|
-
const cursorRow = rowsBefore.length - 1;
|
|
152
|
-
const cursorCol = (0, _utils.stringWidth)(rowsBefore[rowsBefore.length - 1]);
|
|
153
|
-
const totalSnippetLines = fullRawText.split('\n').length;
|
|
154
|
-
// linesUp calculation: 1 (suffix) + remaining snippet lines
|
|
155
|
-
const linesUp = 1 + (totalSnippetLines - 1 - cursorRow);
|
|
156
|
-
this.print(_ansi.ANSI.SHOW_CURSOR);
|
|
157
|
-
if (linesUp > 0) {
|
|
158
|
-
this.print(`\x1b[${linesUp}A`);
|
|
159
|
-
this.lastLinesUp = linesUp;
|
|
160
|
-
}
|
|
161
|
-
this.print(_ansi.ANSI.CURSOR_LEFT);
|
|
162
|
-
if (cursorCol > 0) {
|
|
163
|
-
this.print(`\x1b[${cursorCol}C`);
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
appendSegment(text, absStart, activeStart, activeEnd, syntaxColor, append) {
|
|
167
|
-
const absEnd = absStart + text.length;
|
|
168
|
-
const overlapStart = Math.max(absStart, activeStart);
|
|
169
|
-
const overlapEnd = Math.min(absEnd, activeEnd);
|
|
170
|
-
if (overlapStart < overlapEnd) {
|
|
171
|
-
if (absStart < overlapStart) {
|
|
172
|
-
const part = text.substring(0, overlapStart - absStart);
|
|
173
|
-
append(`${syntaxColor}${part}${_ansi.ANSI.RESET}`);
|
|
174
|
-
}
|
|
175
|
-
const activePart = text.substring(overlapStart - absStart, overlapEnd - absStart);
|
|
176
|
-
append(`${_theme.theme.main}${_ansi.ANSI.UNDERLINE}${activePart}${_ansi.ANSI.RESET}`);
|
|
177
|
-
if (absEnd > overlapEnd) {
|
|
178
|
-
const part = text.substring(overlapEnd - absStart);
|
|
179
|
-
append(`${syntaxColor}${part}${_ansi.ANSI.RESET}`);
|
|
180
|
-
}
|
|
181
|
-
} else {
|
|
182
|
-
append(`${syntaxColor}${text}${_ansi.ANSI.RESET}`);
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
handleInput(char, _key) {
|
|
186
|
-
if (char === '\u001b[Z') {
|
|
187
|
-
this.moveFocus(-1);
|
|
188
|
-
return;
|
|
189
|
-
}
|
|
190
|
-
if (char === '\t') {
|
|
191
|
-
this.moveFocus(1);
|
|
192
|
-
return;
|
|
193
|
-
}
|
|
194
|
-
if (char === '\r' || char === '\n') {
|
|
195
|
-
this.submitCode();
|
|
196
|
-
return;
|
|
197
|
-
}
|
|
198
|
-
const activeTokenIdx = this.variableTokens[this.activeVarIndex];
|
|
199
|
-
const varName = this.tokens[activeTokenIdx].value;
|
|
200
|
-
const val = this.values[varName] || '';
|
|
201
|
-
if (char === '\u0008' || char === '\x7f') {
|
|
202
|
-
if (this.cursor > 0) {
|
|
203
|
-
const pre = val.slice(0, this.cursor - 1);
|
|
204
|
-
const post = val.slice(this.cursor);
|
|
205
|
-
this.values[varName] = pre + post;
|
|
206
|
-
this.cursor--;
|
|
207
|
-
this.render(false);
|
|
208
|
-
}
|
|
209
|
-
return;
|
|
210
|
-
}
|
|
211
|
-
if (this.isLeft(char)) {
|
|
212
|
-
if (this.cursor > 0) this.cursor--;
|
|
213
|
-
this.render(false);
|
|
214
|
-
return;
|
|
215
|
-
}
|
|
216
|
-
if (this.isRight(char)) {
|
|
217
|
-
if (this.cursor < val.length) this.cursor++;
|
|
218
|
-
this.render(false);
|
|
219
|
-
return;
|
|
220
|
-
}
|
|
221
|
-
if (!/^[\x00-\x1F]/.test(char) && !char.startsWith('\x1b')) {
|
|
222
|
-
const pre = val.slice(0, this.cursor);
|
|
223
|
-
const post = val.slice(this.cursor);
|
|
224
|
-
this.values[varName] = pre + char + post;
|
|
225
|
-
this.cursor += char.length;
|
|
226
|
-
this.render(false);
|
|
227
|
-
}
|
|
228
|
-
}
|
|
229
|
-
handleMouse(event) {
|
|
230
|
-
if (event.action === 'scroll') {
|
|
231
|
-
if (event.scroll === 'up') this.moveFocus(-1);
|
|
232
|
-
else if (event.scroll === 'down') this.moveFocus(1);
|
|
233
|
-
}
|
|
234
|
-
}
|
|
235
|
-
moveFocus(direction) {
|
|
236
|
-
const nextIndex = this.activeVarIndex + direction;
|
|
237
|
-
if (nextIndex >= 0 && nextIndex < this.variableTokens.length) {
|
|
238
|
-
this.activeVarIndex = nextIndex;
|
|
239
|
-
const varName = this.tokens[this.variableTokens[this.activeVarIndex]].value;
|
|
240
|
-
this.cursor = (this.values[varName] || '').length;
|
|
241
|
-
this.render(false);
|
|
242
|
-
}
|
|
243
|
-
}
|
|
244
|
-
submitCode() {
|
|
245
|
-
let result = '';
|
|
246
|
-
this.tokens.forEach((token)=>{
|
|
247
|
-
if (token.type === 'static') {
|
|
248
|
-
result += token.value;
|
|
249
|
-
} else {
|
|
250
|
-
result += this.values[token.value] || '';
|
|
251
|
-
}
|
|
252
|
-
});
|
|
253
|
-
this.submit(result);
|
|
254
|
-
}
|
|
255
|
-
constructor(options){
|
|
256
|
-
super(options), _define_property(this, "tokens", []), _define_property(this, "variableTokens", []), _define_property(this, "values", {}), _define_property(this, "activeVarIndex", 0), _define_property(this, "cursor", 0), _define_property(this, "lastLinesUp", 0);
|
|
257
|
-
this.parseTemplate();
|
|
258
|
-
// Init values
|
|
259
|
-
this.variableTokens.forEach((idx)=>{
|
|
260
|
-
const name = this.tokens[idx].value;
|
|
261
|
-
this.values[name] = this.options.values && this.options.values[name] || '';
|
|
262
|
-
});
|
|
263
|
-
// Init cursor at end of first var
|
|
264
|
-
if (this.variableTokens.length > 0) {
|
|
265
|
-
const activeName = this.tokens[this.variableTokens[0]].value;
|
|
266
|
-
this.cursor = this.values[activeName].length;
|
|
267
|
-
}
|
|
268
|
-
}
|
|
269
|
-
};
|
|
270
|
-
|
|
271
|
-
//# sourceMappingURL=code.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/prompts/code.ts"],"sourcesContent":["import { ANSI } from '../ansi';\nimport { Prompt } from '../base';\nimport { theme } from '../theme';\nimport { CodeOptions, MouseEvent } from '../types';\nimport { stringWidth } from '../utils';\nimport { highlight } from '../highlight';\n\ninterface Token {\n type: 'static' | 'variable';\n value: string;\n}\n\nexport class CodePrompt extends Prompt<string, CodeOptions> {\n private tokens: Token[] = [];\n private variableTokens: number[] = [];\n private values: Record<string, string> = {};\n private activeVarIndex: number = 0;\n private cursor: number = 0;\n private lastLinesUp: number = 0;\n\n constructor(options: CodeOptions) {\n super(options);\n this.parseTemplate();\n // Init values\n this.variableTokens.forEach(idx => {\n const name = this.tokens[idx].value;\n this.values[name] = (this.options.values && this.options.values[name]) || '';\n });\n\n // Init cursor at end of first var\n if (this.variableTokens.length > 0) {\n const activeName = this.tokens[this.variableTokens[0]].value;\n this.cursor = this.values[activeName].length;\n }\n }\n\n private parseTemplate() {\n const regex = /\\$\\{([a-zA-Z0-9_]+)\\}/g;\n let lastIndex = 0;\n let match;\n\n while ((match = regex.exec(this.options.template)) !== null) {\n if (match.index > lastIndex) {\n this.tokens.push({ type: 'static', value: this.options.template.substring(lastIndex, match.index) });\n }\n this.tokens.push({ type: 'variable', value: match[1] });\n this.variableTokens.push(this.tokens.length - 1);\n lastIndex = regex.lastIndex;\n }\n\n if (lastIndex < this.options.template.length) {\n this.tokens.push({ type: 'static', value: this.options.template.substring(lastIndex) });\n }\n }\n\n // FIX: Override cleanup to ensure cursor is reset to bottom\n protected cleanup() {\n // If the cursor is currently moved up (editing mode), move it back down\n // before the prompt exits. This prevents the next output (or result)\n // from overwriting the bottom part of our UI.\n if (this.lastLinesUp > 0) {\n this.print(`\\x1b[${this.lastLinesUp}B`);\n this.lastLinesUp = 0;\n }\n super.cleanup();\n }\n\n protected render(firstRender: boolean) {\n if (!firstRender && this.lastLinesUp > 0) {\n this.print(`\\x1b[${this.lastLinesUp}B`);\n }\n this.lastLinesUp = 0;\n\n // 1. Build Full Raw Text & Identify Active Variable Range\n let fullRawText = '';\n let activeVarStart = -1;\n let activeVarEnd = -1;\n\n const activeTokenIdx = this.variableTokens[this.activeVarIndex];\n // const activeVarName = this.tokens[activeTokenIdx].value;\n\n this.tokens.forEach((token, idx) => {\n const val = (token.type === 'static') ? token.value : (this.values[token.value] || '');\n\n if (idx === activeTokenIdx) {\n activeVarStart = fullRawText.length;\n activeVarEnd = activeVarStart + val.length;\n }\n\n fullRawText += val;\n });\n\n // 2. Syntax Highlight with Overlap Logic\n let highlighted = '';\n const shouldHighlight = this.options.highlight !== false;\n\n if (shouldHighlight) {\n const lang = this.options.language || 'json';\n const highlightedText = highlight(fullRawText, lang);\n\n let visibleIdx = 0;\n let activeColor = ''; // Tracks the last set color\n\n for (let i = 0; i < highlightedText.length; i++) {\n const char = highlightedText[i];\n\n if (char === '\\x1b') {\n // Start of ANSI sequence\n let sequence = char;\n i++;\n while (i < highlightedText.length && highlightedText[i] !== 'm') {\n sequence += highlightedText[i];\n i++;\n }\n if (i < highlightedText.length) sequence += 'm'; // Append terminator\n\n // Interpret sequence (naive)\n if (sequence === ANSI.RESET || sequence === '\\x1b[0m') {\n activeColor = '';\n } else {\n // Assuming it's a color code.\n activeColor = sequence;\n }\n\n // If we are INSIDE the active range, and we encounter a color change/reset,\n // we must ensure UNDERLINE is kept/restored.\n if (visibleIdx >= activeVarStart && visibleIdx < activeVarEnd) {\n // Output the sequence (e.g. a color change)\n highlighted += sequence;\n // Then re-assert underline\n highlighted += ANSI.UNDERLINE;\n } else {\n highlighted += sequence;\n }\n continue;\n }\n\n // Normal char\n if (visibleIdx === activeVarStart) {\n highlighted += `${theme.main}${ANSI.UNDERLINE}`;\n }\n\n highlighted += char;\n visibleIdx++;\n\n if (visibleIdx === activeVarEnd) {\n highlighted += ANSI.RESET;\n // Restore previous color if any\n if (activeColor) {\n highlighted += activeColor;\n }\n }\n }\n highlighted += ANSI.RESET;\n } else {\n this.appendSegment(fullRawText, 0, activeVarStart, activeVarEnd, ANSI.RESET, (s) => highlighted += s);\n }\n\n\n // 3. Output Frame\n const warningMsg = shouldHighlight\n ? `${ANSI.FG_YELLOW}Warning:${ANSI.RESET} Syntax highlighting is an experimental feature.\\n`\n : '';\n\n const prefix = `${warningMsg}${theme.success}? ${ANSI.BOLD}${theme.title}${this.options.message}${ANSI.RESET}\\n`;\n const suffix = `\\n${theme.muted}(Tab to next, Enter to submit)${ANSI.RESET}`;\n const fullOutput = prefix + highlighted + suffix;\n\n this.renderFrame(fullOutput);\n\n // 4. Cursor Calculation\n const cursorAbsPos = activeVarStart + this.cursor;\n const textBeforeCursor = fullRawText.substring(0, cursorAbsPos);\n\n const rowsBefore = textBeforeCursor.split('\\n');\n const cursorRow = rowsBefore.length - 1;\n const cursorCol = stringWidth(rowsBefore[rowsBefore.length - 1]);\n\n const totalSnippetLines = fullRawText.split('\\n').length;\n // linesUp calculation: 1 (suffix) + remaining snippet lines\n const linesUp = 1 + (totalSnippetLines - 1 - cursorRow);\n\n this.print(ANSI.SHOW_CURSOR);\n if (linesUp > 0) {\n this.print(`\\x1b[${linesUp}A`);\n this.lastLinesUp = linesUp;\n }\n\n this.print(ANSI.CURSOR_LEFT);\n if (cursorCol > 0) {\n this.print(`\\x1b[${cursorCol}C`);\n }\n }\n\n private appendSegment(\n text: string,\n absStart: number,\n activeStart: number,\n activeEnd: number,\n syntaxColor: string,\n append: (s: string) => void\n ) {\n const absEnd = absStart + text.length;\n const overlapStart = Math.max(absStart, activeStart);\n const overlapEnd = Math.min(absEnd, activeEnd);\n\n if (overlapStart < overlapEnd) {\n if (absStart < overlapStart) {\n const part = text.substring(0, overlapStart - absStart);\n append(`${syntaxColor}${part}${ANSI.RESET}`);\n }\n const activePart = text.substring(overlapStart - absStart, overlapEnd - absStart);\n append(`${theme.main}${ANSI.UNDERLINE}${activePart}${ANSI.RESET}`);\n\n if (absEnd > overlapEnd) {\n const part = text.substring(overlapEnd - absStart);\n append(`${syntaxColor}${part}${ANSI.RESET}`);\n }\n } else {\n append(`${syntaxColor}${text}${ANSI.RESET}`);\n }\n }\n\n protected handleInput(char: string, _key: Buffer) {\n if (char === '\\u001b[Z') {\n this.moveFocus(-1); return;\n }\n if (char === '\\t') {\n this.moveFocus(1); return;\n }\n if (char === '\\r' || char === '\\n') {\n this.submitCode(); return;\n }\n\n const activeTokenIdx = this.variableTokens[this.activeVarIndex];\n const varName = this.tokens[activeTokenIdx].value;\n const val = this.values[varName] || '';\n\n if (char === '\\u0008' || char === '\\x7f') {\n if (this.cursor > 0) {\n const pre = val.slice(0, this.cursor - 1);\n const post = val.slice(this.cursor);\n this.values[varName] = pre + post;\n this.cursor--;\n this.render(false);\n }\n return;\n }\n\n if (this.isLeft(char)) {\n if (this.cursor > 0) this.cursor--;\n this.render(false);\n return;\n }\n if (this.isRight(char)) {\n if (this.cursor < val.length) this.cursor++;\n this.render(false);\n return;\n }\n\n if (!/^[\\x00-\\x1F]/.test(char) && !char.startsWith('\\x1b')) {\n const pre = val.slice(0, this.cursor);\n const post = val.slice(this.cursor);\n this.values[varName] = pre + char + post;\n this.cursor += char.length;\n this.render(false);\n }\n }\n\n protected handleMouse(event: MouseEvent) {\n if (event.action === 'scroll') {\n if (event.scroll === 'up') this.moveFocus(-1);\n else if (event.scroll === 'down') this.moveFocus(1);\n }\n }\n\n private moveFocus(direction: number) {\n const nextIndex = this.activeVarIndex + direction;\n if (nextIndex >= 0 && nextIndex < this.variableTokens.length) {\n this.activeVarIndex = nextIndex;\n const varName = this.tokens[this.variableTokens[this.activeVarIndex]].value;\n this.cursor = (this.values[varName] || '').length;\n this.render(false);\n }\n }\n\n private submitCode() {\n let result = '';\n this.tokens.forEach(token => {\n if (token.type === 'static') {\n result += token.value;\n } else {\n result += this.values[token.value] || '';\n }\n });\n this.submit(result);\n }\n}\n"],"names":["CodePrompt","Prompt","parseTemplate","regex","lastIndex","match","exec","options","template","index","tokens","push","type","value","substring","variableTokens","length","cleanup","lastLinesUp","print","render","firstRender","fullRawText","activeVarStart","activeVarEnd","activeTokenIdx","activeVarIndex","forEach","token","idx","val","values","highlighted","shouldHighlight","highlight","lang","language","highlightedText","visibleIdx","activeColor","i","char","sequence","ANSI","RESET","UNDERLINE","theme","main","appendSegment","s","warningMsg","FG_YELLOW","prefix","success","BOLD","title","message","suffix","muted","fullOutput","renderFrame","cursorAbsPos","cursor","textBeforeCursor","rowsBefore","split","cursorRow","cursorCol","stringWidth","totalSnippetLines","linesUp","SHOW_CURSOR","CURSOR_LEFT","text","absStart","activeStart","activeEnd","syntaxColor","append","absEnd","overlapStart","Math","max","overlapEnd","min","part","activePart","handleInput","_key","moveFocus","submitCode","varName","pre","slice","post","isLeft","isRight","test","startsWith","handleMouse","event","action","scroll","direction","nextIndex","result","submit","name","activeName"],"mappings":"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"}
|
|
@@ -1,165 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
Object.defineProperty(exports, "ColorPrompt", {
|
|
6
|
-
enumerable: true,
|
|
7
|
-
get: function() {
|
|
8
|
-
return ColorPrompt;
|
|
9
|
-
}
|
|
10
|
-
});
|
|
11
|
-
const _ansi = require("../ansi");
|
|
12
|
-
const _base = require("../base");
|
|
13
|
-
const _theme = require("../theme");
|
|
14
|
-
function _define_property(obj, key, value) {
|
|
15
|
-
if (key in obj) {
|
|
16
|
-
Object.defineProperty(obj, key, {
|
|
17
|
-
value: value,
|
|
18
|
-
enumerable: true,
|
|
19
|
-
configurable: true,
|
|
20
|
-
writable: true
|
|
21
|
-
});
|
|
22
|
-
} else {
|
|
23
|
-
obj[key] = value;
|
|
24
|
-
}
|
|
25
|
-
return obj;
|
|
26
|
-
}
|
|
27
|
-
let ColorPrompt = class ColorPrompt extends _base.Prompt {
|
|
28
|
-
parseHex(hex) {
|
|
29
|
-
const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
|
|
30
|
-
return result ? {
|
|
31
|
-
r: parseInt(result[1], 16),
|
|
32
|
-
g: parseInt(result[2], 16),
|
|
33
|
-
b: parseInt(result[3], 16)
|
|
34
|
-
} : {
|
|
35
|
-
r: 0,
|
|
36
|
-
g: 0,
|
|
37
|
-
b: 0
|
|
38
|
-
};
|
|
39
|
-
}
|
|
40
|
-
rgbToHex(r, g, b) {
|
|
41
|
-
return "#" + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1).toUpperCase();
|
|
42
|
-
}
|
|
43
|
-
// Helper to format ANSI TrueColor background
|
|
44
|
-
getBgColorCode(r, g, b) {
|
|
45
|
-
return `\x1b[48;2;${r};${g};${b}m`;
|
|
46
|
-
}
|
|
47
|
-
render(_firstRender) {
|
|
48
|
-
const { r, g, b } = this.rgb;
|
|
49
|
-
const hex = this.rgbToHex(r, g, b);
|
|
50
|
-
let output = `${_theme.theme.title}${this.options.message}${_ansi.ANSI.RESET} `;
|
|
51
|
-
output += `${_ansi.ANSI.BOLD}${hex}${_ansi.ANSI.RESET}\n\n`;
|
|
52
|
-
// Preview Block
|
|
53
|
-
if (this.capabilities.hasTrueColor) {
|
|
54
|
-
const bg = this.getBgColorCode(r, g, b);
|
|
55
|
-
const block = `${bg} ${_ansi.ANSI.RESET}`; // 8 spaces
|
|
56
|
-
output += ` ${block}\n`;
|
|
57
|
-
output += ` ${block}\n`;
|
|
58
|
-
output += ` ${block}\n\n`;
|
|
59
|
-
} else {
|
|
60
|
-
// Fallback for no true color?
|
|
61
|
-
// Maybe just show text or use closest 256 color?
|
|
62
|
-
// For now, simpler fallback:
|
|
63
|
-
output += ` (Preview unavailable in this terminal)\n\n`;
|
|
64
|
-
}
|
|
65
|
-
// Sliders
|
|
66
|
-
const channels = [
|
|
67
|
-
'r',
|
|
68
|
-
'g',
|
|
69
|
-
'b'
|
|
70
|
-
];
|
|
71
|
-
const labels = {
|
|
72
|
-
r: 'Red ',
|
|
73
|
-
g: 'Green',
|
|
74
|
-
b: 'Blue '
|
|
75
|
-
};
|
|
76
|
-
channels.forEach((ch)=>{
|
|
77
|
-
const val = this.rgb[ch];
|
|
78
|
-
const isActive = this.activeChannel === ch;
|
|
79
|
-
// Render slider track
|
|
80
|
-
// Width 20 chars for 0-255
|
|
81
|
-
const width = 20;
|
|
82
|
-
const pos = Math.floor(val / 255 * width);
|
|
83
|
-
// Wait, '⚪' might be wide. using simpler char if needed. 'O' or ANSI reverse space.
|
|
84
|
-
// Let's use standard chars.
|
|
85
|
-
const trackSimple = '━'.repeat(pos) + (isActive ? '●' : '○') + '─'.repeat(width - pos);
|
|
86
|
-
let line = `${labels[ch]}: ${val.toString().padStart(3)} [${trackSimple}]`;
|
|
87
|
-
if (isActive) {
|
|
88
|
-
line = `${_theme.theme.main}${_ansi.ANSI.REVERSE} ${line} ${_ansi.ANSI.RESET}`;
|
|
89
|
-
} else {
|
|
90
|
-
line = ` ${line} `;
|
|
91
|
-
}
|
|
92
|
-
output += line + '\n';
|
|
93
|
-
});
|
|
94
|
-
output += `\n${_theme.theme.muted}Arrows: Adjust/Switch | Shift+Arrows: Adjust fast | Enter: Submit${_ansi.ANSI.RESET}`;
|
|
95
|
-
this.renderFrame(output);
|
|
96
|
-
}
|
|
97
|
-
handleInput(char, _key) {
|
|
98
|
-
const isUp = this.isUp(char);
|
|
99
|
-
const isDown = this.isDown(char);
|
|
100
|
-
const isLeft = this.isLeft(char);
|
|
101
|
-
const isRight = this.isRight(char);
|
|
102
|
-
// Detect Shift key for faster movement (generic check if possible, or mapping specific codes)
|
|
103
|
-
// \x1b[1;2C is Shift+Right usually. \x1b[1;2D is Shift+Left.
|
|
104
|
-
// It varies by terminal.
|
|
105
|
-
const isShiftRight = char === '\x1b[1;2C';
|
|
106
|
-
const isShiftLeft = char === '\x1b[1;2D';
|
|
107
|
-
// Channel Switching (Up/Down)
|
|
108
|
-
if (isUp) {
|
|
109
|
-
if (this.activeChannel === 'g') this.activeChannel = 'r';
|
|
110
|
-
else if (this.activeChannel === 'b') this.activeChannel = 'g';
|
|
111
|
-
this.render(false);
|
|
112
|
-
return;
|
|
113
|
-
}
|
|
114
|
-
if (isDown) {
|
|
115
|
-
if (this.activeChannel === 'r') this.activeChannel = 'g';
|
|
116
|
-
else if (this.activeChannel === 'g') this.activeChannel = 'b';
|
|
117
|
-
this.render(false);
|
|
118
|
-
return;
|
|
119
|
-
}
|
|
120
|
-
// Value Adjustment (Left/Right)
|
|
121
|
-
if (isLeft || isRight || isShiftLeft || isShiftRight) {
|
|
122
|
-
let change = 0;
|
|
123
|
-
if (isRight) change = 1;
|
|
124
|
-
if (isLeft) change = -1;
|
|
125
|
-
if (isShiftRight) change = 10;
|
|
126
|
-
if (isShiftLeft) change = -10;
|
|
127
|
-
const val = this.rgb[this.activeChannel] + change;
|
|
128
|
-
this.rgb[this.activeChannel] = Math.max(0, Math.min(255, val));
|
|
129
|
-
this.render(false);
|
|
130
|
-
return;
|
|
131
|
-
}
|
|
132
|
-
// Tab to cycle channels
|
|
133
|
-
if (char === '\t') {
|
|
134
|
-
if (this.activeChannel === 'r') this.activeChannel = 'g';
|
|
135
|
-
else if (this.activeChannel === 'g') this.activeChannel = 'b';
|
|
136
|
-
else this.activeChannel = 'r';
|
|
137
|
-
this.render(false);
|
|
138
|
-
return;
|
|
139
|
-
}
|
|
140
|
-
if (char === '\r' || char === '\n') {
|
|
141
|
-
this.submit(this.rgbToHex(this.rgb.r, this.rgb.g, this.rgb.b));
|
|
142
|
-
return;
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
handleMouse(event) {
|
|
146
|
-
if (event.action === 'scroll') {
|
|
147
|
-
// On scroll, adjust the currently active channel's value.
|
|
148
|
-
// If Ctrl is held, adjust by a larger step (fast adjust).
|
|
149
|
-
const fast = !!event.ctrl;
|
|
150
|
-
const step = fast ? 10 : 1;
|
|
151
|
-
const change = event.scroll === 'up' ? step : event.scroll === 'down' ? -step : 0;
|
|
152
|
-
if (change !== 0) {
|
|
153
|
-
const val = this.rgb[this.activeChannel] + change;
|
|
154
|
-
this.rgb[this.activeChannel] = Math.max(0, Math.min(255, val));
|
|
155
|
-
this.render(false);
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
constructor(options){
|
|
160
|
-
super(options), _define_property(this, "rgb", void 0), _define_property(this, "activeChannel", 'r'), _define_property(this, "inputBuffer", '');
|
|
161
|
-
this.rgb = this.parseHex(options.initial || '#000000');
|
|
162
|
-
}
|
|
163
|
-
};
|
|
164
|
-
|
|
165
|
-
//# sourceMappingURL=color.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/prompts/color.ts"],"sourcesContent":["import { ANSI } from '../ansi';\nimport { Prompt } from '../base';\nimport { theme } from '../theme';\nimport { ColorOptions, MouseEvent } from '../types';\n\ninterface RGB {\n r: number;\n g: number;\n b: number;\n}\n\nexport class ColorPrompt extends Prompt<string, ColorOptions> {\n private rgb: RGB;\n private activeChannel: 'r' | 'g' | 'b' = 'r';\n private inputBuffer: string = '';\n\n constructor(options: ColorOptions) {\n super(options);\n this.rgb = this.parseHex(options.initial || '#000000');\n }\n\n private parseHex(hex: string): RGB {\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n return result ? {\n r: parseInt(result[1], 16),\n g: parseInt(result[2], 16),\n b: parseInt(result[3], 16)\n } : { r: 0, g: 0, b: 0 };\n }\n\n private rgbToHex(r: number, g: number, b: number): string {\n return \"#\" + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1).toUpperCase();\n }\n\n // Helper to format ANSI TrueColor background\n private getBgColorCode(r: number, g: number, b: number): string {\n return `\\x1b[48;2;${r};${g};${b}m`;\n }\n\n protected render(_firstRender: boolean): void {\n const { r, g, b } = this.rgb;\n const hex = this.rgbToHex(r, g, b);\n\n let output = `${theme.title}${this.options.message}${ANSI.RESET} `;\n output += `${ANSI.BOLD}${hex}${ANSI.RESET}\\n\\n`;\n\n // Preview Block\n if (this.capabilities.hasTrueColor) {\n const bg = this.getBgColorCode(r, g, b);\n const block = `${bg} ${ANSI.RESET}`; // 8 spaces\n output += ` ${block}\\n`;\n output += ` ${block}\\n`;\n output += ` ${block}\\n\\n`;\n } else {\n // Fallback for no true color?\n // Maybe just show text or use closest 256 color?\n // For now, simpler fallback:\n output += ` (Preview unavailable in this terminal)\\n\\n`;\n }\n\n // Sliders\n const channels: ('r' | 'g' | 'b')[] = ['r', 'g', 'b'];\n const labels = { r: 'Red ', g: 'Green', b: 'Blue ' };\n\n channels.forEach(ch => {\n const val = this.rgb[ch];\n const isActive = this.activeChannel === ch;\n\n // Render slider track\n // Width 20 chars for 0-255\n const width = 20;\n const pos = Math.floor((val / 255) * width);\n // Wait, '⚪' might be wide. using simpler char if needed. 'O' or ANSI reverse space.\n // Let's use standard chars.\n const trackSimple = '━'.repeat(pos) + (isActive ? '●' : '○') + '─'.repeat(width - pos);\n\n let line = `${labels[ch]}: ${val.toString().padStart(3)} [${trackSimple}]`;\n\n if (isActive) {\n line = `${theme.main}${ANSI.REVERSE} ${line} ${ANSI.RESET}`;\n } else {\n line = ` ${line} `;\n }\n output += line + '\\n';\n });\n\n output += `\\n${theme.muted}Arrows: Adjust/Switch | Shift+Arrows: Adjust fast | Enter: Submit${ANSI.RESET}`;\n\n this.renderFrame(output);\n }\n\n protected handleInput(char: string, _key: Buffer): void {\n const isUp = this.isUp(char);\n const isDown = this.isDown(char);\n const isLeft = this.isLeft(char);\n const isRight = this.isRight(char);\n\n // Detect Shift key for faster movement (generic check if possible, or mapping specific codes)\n // \\x1b[1;2C is Shift+Right usually. \\x1b[1;2D is Shift+Left.\n // It varies by terminal.\n const isShiftRight = char === '\\x1b[1;2C';\n const isShiftLeft = char === '\\x1b[1;2D';\n\n // Channel Switching (Up/Down)\n if (isUp) {\n if (this.activeChannel === 'g') this.activeChannel = 'r';\n else if (this.activeChannel === 'b') this.activeChannel = 'g';\n this.render(false);\n return;\n }\n if (isDown) {\n if (this.activeChannel === 'r') this.activeChannel = 'g';\n else if (this.activeChannel === 'g') this.activeChannel = 'b';\n this.render(false);\n return;\n }\n\n // Value Adjustment (Left/Right)\n if (isLeft || isRight || isShiftLeft || isShiftRight) {\n let change = 0;\n if (isRight) change = 1;\n if (isLeft) change = -1;\n if (isShiftRight) change = 10;\n if (isShiftLeft) change = -10;\n\n const val = this.rgb[this.activeChannel] + change;\n this.rgb[this.activeChannel] = Math.max(0, Math.min(255, val));\n this.render(false);\n return;\n }\n\n // Tab to cycle channels\n if (char === '\\t') {\n if (this.activeChannel === 'r') this.activeChannel = 'g';\n else if (this.activeChannel === 'g') this.activeChannel = 'b';\n else this.activeChannel = 'r';\n this.render(false);\n return;\n }\n\n if (char === '\\r' || char === '\\n') {\n this.submit(this.rgbToHex(this.rgb.r, this.rgb.g, this.rgb.b));\n return;\n }\n }\n\n protected handleMouse(event: MouseEvent): void {\n if (event.action === 'scroll') {\n // On scroll, adjust the currently active channel's value.\n // If Ctrl is held, adjust by a larger step (fast adjust).\n const fast = !!event.ctrl;\n const step = fast ? 10 : 1;\n const change = event.scroll === 'up' ? step : (event.scroll === 'down' ? -step : 0);\n if (change !== 0) {\n const val = this.rgb[this.activeChannel] + change;\n this.rgb[this.activeChannel] = Math.max(0, Math.min(255, val));\n this.render(false);\n }\n }\n }\n}\n"],"names":["ColorPrompt","Prompt","parseHex","hex","result","exec","r","parseInt","g","b","rgbToHex","toString","slice","toUpperCase","getBgColorCode","render","_firstRender","rgb","output","theme","title","options","message","ANSI","RESET","BOLD","capabilities","hasTrueColor","bg","block","channels","labels","forEach","ch","val","isActive","activeChannel","width","pos","Math","floor","trackSimple","repeat","line","padStart","main","REVERSE","muted","renderFrame","handleInput","char","_key","isUp","isDown","isLeft","isRight","isShiftRight","isShiftLeft","change","max","min","submit","handleMouse","event","action","fast","ctrl","step","scroll","inputBuffer","initial"],"mappings":"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"}
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
Object.defineProperty(exports, "ConfirmPrompt", {
|
|
6
|
-
enumerable: true,
|
|
7
|
-
get: function() {
|
|
8
|
-
return ConfirmPrompt;
|
|
9
|
-
}
|
|
10
|
-
});
|
|
11
|
-
const _ansi = require("../ansi");
|
|
12
|
-
const _base = require("../base");
|
|
13
|
-
const _theme = require("../theme");
|
|
14
|
-
let ConfirmPrompt = class ConfirmPrompt extends _base.Prompt {
|
|
15
|
-
render(_firstRender) {
|
|
16
|
-
// Prepare content
|
|
17
|
-
const hint = this.value ? `${_ansi.ANSI.BOLD}Yes${_ansi.ANSI.RESET}/no` : `yes/${_ansi.ANSI.BOLD}No${_ansi.ANSI.RESET}`;
|
|
18
|
-
let output = `${_theme.theme.success}?${_ansi.ANSI.RESET} ${_ansi.ANSI.BOLD}${_theme.theme.title}${this.options.message}${_ansi.ANSI.RESET} ${_theme.theme.muted}(${hint})${_ansi.ANSI.RESET} `;
|
|
19
|
-
const text = this.value ? 'Yes' : 'No';
|
|
20
|
-
output += `${_theme.theme.main}${text}${_ansi.ANSI.RESET}`;
|
|
21
|
-
this.renderFrame(output);
|
|
22
|
-
}
|
|
23
|
-
handleInput(char) {
|
|
24
|
-
const c = char.toLowerCase();
|
|
25
|
-
if (c === '\r' || c === '\n') {
|
|
26
|
-
this.submit(this.value);
|
|
27
|
-
return;
|
|
28
|
-
}
|
|
29
|
-
if (c === 'y') {
|
|
30
|
-
this.value = true;
|
|
31
|
-
this.render(false);
|
|
32
|
-
}
|
|
33
|
-
if (c === 'n') {
|
|
34
|
-
this.value = false;
|
|
35
|
-
this.render(false);
|
|
36
|
-
}
|
|
37
|
-
// Allow left/right to toggle as well for better UX
|
|
38
|
-
if (this.isLeft(char) || this.isRight(char)) {
|
|
39
|
-
this.value = !this.value;
|
|
40
|
-
this.render(false);
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
handleMouse(event) {
|
|
44
|
-
if (event.action === 'scroll') {
|
|
45
|
-
this.value = !this.value;
|
|
46
|
-
this.render(false);
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
constructor(options){
|
|
50
|
-
super(options);
|
|
51
|
-
this.value = options.initial ?? true;
|
|
52
|
-
}
|
|
53
|
-
};
|
|
54
|
-
|
|
55
|
-
//# sourceMappingURL=confirm.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/prompts/confirm.ts"],"sourcesContent":["import { ANSI } from '../ansi';\nimport { Prompt } from '../base';\nimport { theme } from '../theme';\nimport { ConfirmOptions, MouseEvent } from '../types';\n\n// --- Implementation: Confirm Prompt ---\nexport class ConfirmPrompt extends Prompt<boolean, ConfirmOptions> {\n constructor(options: ConfirmOptions) {\n super(options);\n this.value = options.initial ?? true;\n }\n\n protected render(_firstRender: boolean) {\n // Prepare content\n const hint = this.value ? `${ANSI.BOLD}Yes${ANSI.RESET}/no` : `yes/${ANSI.BOLD}No${ANSI.RESET}`;\n let output = `${theme.success}?${ANSI.RESET} ${ANSI.BOLD}${theme.title}${this.options.message}${ANSI.RESET} ${theme.muted}(${hint})${ANSI.RESET} `;\n const text = this.value ? 'Yes' : 'No';\n output += `${theme.main}${text}${ANSI.RESET}`;\n\n this.renderFrame(output);\n }\n\n protected handleInput(char: string) {\n const c = char.toLowerCase();\n if (c === '\\r' || c === '\\n') {\n this.submit(this.value);\n return;\n }\n if (c === 'y') { this.value = true; this.render(false); }\n if (c === 'n') { this.value = false; this.render(false); }\n\n // Allow left/right to toggle as well for better UX\n if (this.isLeft(char) || this.isRight(char)) {\n this.value = !this.value;\n this.render(false);\n }\n }\n\n protected handleMouse(event: MouseEvent) {\n if (event.action === 'scroll') {\n this.value = !this.value;\n this.render(false);\n }\n }\n}\n"],"names":["ConfirmPrompt","Prompt","render","_firstRender","hint","value","ANSI","BOLD","RESET","output","theme","success","title","options","message","muted","text","main","renderFrame","handleInput","char","c","toLowerCase","submit","isLeft","isRight","handleMouse","event","action","initial"],"mappings":";;;;+BAMaA;;;eAAAA;;;sBANQ;sBACE;uBACD;AAIf,IAAA,AAAMA,gBAAN,MAAMA,sBAAsBC,YAAM;IAM3BC,OAAOC,YAAqB,EAAE;QACpC,kBAAkB;QAClB,MAAMC,OAAO,IAAI,CAACC,KAAK,GAAG,GAAGC,UAAI,CAACC,IAAI,CAAC,GAAG,EAAED,UAAI,CAACE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAEF,UAAI,CAACC,IAAI,CAAC,EAAE,EAAED,UAAI,CAACE,KAAK,EAAE;QAC/F,IAAIC,SAAS,GAAGC,YAAK,CAACC,OAAO,CAAC,CAAC,EAAEL,UAAI,CAACE,KAAK,CAAC,CAAC,EAAEF,UAAI,CAACC,IAAI,GAAGG,YAAK,CAACE,KAAK,GAAG,IAAI,CAACC,OAAO,CAACC,OAAO,GAAGR,UAAI,CAACE,KAAK,CAAC,CAAC,EAAEE,YAAK,CAACK,KAAK,CAAC,CAAC,EAAEX,KAAK,CAAC,EAAEE,UAAI,CAACE,KAAK,CAAC,CAAC,CAAC;QAClJ,MAAMQ,OAAO,IAAI,CAACX,KAAK,GAAG,QAAQ;QAClCI,UAAU,GAAGC,YAAK,CAACO,IAAI,GAAGD,OAAOV,UAAI,CAACE,KAAK,EAAE;QAE7C,IAAI,CAACU,WAAW,CAACT;IACrB;IAEUU,YAAYC,IAAY,EAAE;QAChC,MAAMC,IAAID,KAAKE,WAAW;QAC1B,IAAID,MAAM,QAAQA,MAAM,MAAM;YAC1B,IAAI,CAACE,MAAM,CAAC,IAAI,CAAClB,KAAK;YACtB;QACJ;QACA,IAAIgB,MAAM,KAAK;YAAE,IAAI,CAAChB,KAAK,GAAG;YAAM,IAAI,CAACH,MAAM,CAAC;QAAQ;QACxD,IAAImB,MAAM,KAAK;YAAE,IAAI,CAAChB,KAAK,GAAG;YAAO,IAAI,CAACH,MAAM,CAAC;QAAQ;QAEzD,mDAAmD;QACnD,IAAI,IAAI,CAACsB,MAAM,CAACJ,SAAS,IAAI,CAACK,OAAO,CAACL,OAAO;YACzC,IAAI,CAACf,KAAK,GAAG,CAAC,IAAI,CAACA,KAAK;YACxB,IAAI,CAACH,MAAM,CAAC;QAChB;IACJ;IAEUwB,YAAYC,KAAiB,EAAE;QACrC,IAAIA,MAAMC,MAAM,KAAK,UAAU;YAC3B,IAAI,CAACvB,KAAK,GAAG,CAAC,IAAI,CAACA,KAAK;YACxB,IAAI,CAACH,MAAM,CAAC;QAChB;IACJ;IApCA,YAAYW,OAAuB,CAAE;QACjC,KAAK,CAACA;QACN,IAAI,CAACR,KAAK,GAAGQ,QAAQgB,OAAO,IAAI;IACpC;AAkCJ"}
|