mepcli 2.0.0-beta.1 → 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/README.md +32 -10
- 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 -347
- 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 +12 -17
- 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/fuzzy.ts"],"sourcesContent":["import { SelectPrompt } from './select';\nimport { FuzzySelectOptions } from '../types';\nimport { theme } from '../theme';\nimport { ANSI } from '../ansi';\nimport { fuzzyMatch } from '../utils';\nimport { symbols } from '../symbols';\n\nexport class FuzzySelectPrompt<V> extends SelectPrompt<V, FuzzySelectOptions<V>> {\n private filteredResults: any[] = [];\n private debounceTimer: any;\n\n constructor(options: FuzzySelectOptions<V>) {\n super(options);\n this.filteredResults = this.options.choices;\n }\n\n protected getFilteredChoices() {\n // Safety check: this.filteredResults might be undefined if called from super() constructor\n return this.filteredResults || this.options.choices;\n }\n\n protected handleInput(char: string) {\n // Backspace\n if (char === '\\u0008' || char === '\\x7f') {\n if (this.searchBuffer.length > 0) {\n this.searchBuffer = this.searchBuffer.slice(0, -1);\n this.performSearch();\n }\n return;\n }\n\n // Intercept typing to add debounce\n if (char.length === 1 && !/^[\\x00-\\x1F]/.test(char) && !char.startsWith('\\x1b')) {\n this.searchBuffer += char;\n\n // Check if debounce is needed\n if (this.options.choices.length > 1000) {\n if (this.debounceTimer) clearTimeout(this.debounceTimer);\n this.debounceTimer = setTimeout(() => {\n this.performSearch();\n }, 150); // 150ms debounce\n } else {\n this.performSearch();\n }\n return; // Skip super.handleInput for typing\n }\n\n super.handleInput(char);\n }\n\n private performSearch() {\n if (!this.searchBuffer) {\n this.filteredResults = this.options.choices;\n } else {\n const results = this.options.choices.map(c => {\n if (this.isSeparator(c)) return null;\n const match = fuzzyMatch(this.searchBuffer, (c as any).title);\n return { choice: c, match };\n }).filter(item => item && item.match !== null)\n // Sort by score descending\n .sort((a, b) => b!.match!.score - a!.match!.score);\n\n this.filteredResults = results.map(r => {\n (r!.choice as any)._match = r!.match;\n return r!.choice;\n });\n }\n\n this.selectedIndex = 0;\n this.render(false);\n }\n\n private highlight(text: string, indices: number[], isSelected: boolean): string {\n let output = '';\n const indexSet = new Set(indices);\n for (let i = 0; i < text.length; i++) {\n if (indexSet.has(i)) {\n if (isSelected) {\n output += `${ANSI.BOLD}${ANSI.FG_WHITE}${text[i]}${theme.main}`; // Reset to main theme\n } else {\n output += `${ANSI.BOLD}${ANSI.FG_CYAN}${text[i]}${ANSI.RESET}`;\n }\n } else {\n output += text[i];\n }\n }\n return output;\n }\n\n protected render(_firstRender: boolean) {\n let output = '';\n const choices = this.getFilteredChoices();\n\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 if (this.scrollTop > choices.length - 1) {\n this.scrollTop = Math.max(0, choices.length - this.pageSize);\n }\n\n // Header\n const searchStr = this.searchBuffer ? ` ${theme.muted}(Fuzzy: ${this.searchBuffer})${ANSI.RESET}` : '';\n output += `${theme.success}?${ANSI.RESET} ${ANSI.BOLD}${theme.title}${this.options.message}${ANSI.RESET}${searchStr}\\n`;\n\n if (choices.length === 0) {\n output += ` ${theme.muted}No results found${ANSI.RESET}`;\n } else {\n const visibleChoices = choices.slice(this.scrollTop, this.scrollTop + this.pageSize);\n\n visibleChoices.forEach((choice, index) => {\n const actualIndex = this.scrollTop + index;\n if (index > 0) output += '\\n';\n\n if (this.isSeparator(choice)) {\n output += ` ${ANSI.DIM}${(choice as any).text || symbols.line.repeat(8)}${ANSI.RESET}`;\n } else {\n let title = (choice as any).title;\n const match = (choice as any)._match;\n const isSelected = actualIndex === this.selectedIndex;\n\n if (match && this.searchBuffer) {\n title = this.highlight(title, match.indices, isSelected);\n }\n\n if (isSelected) {\n output += `${theme.main}${symbols.pointer} ${title}${ANSI.RESET}`;\n if (match && this.searchBuffer) {\n // Show score\n // output += ` ${theme.muted}(${Math.round(match.score)})${ANSI.RESET}`;\n }\n } else {\n output += ` ${title}`;\n }\n }\n });\n }\n\n this.renderFrame(output);\n }\n}\n"],"names":["FuzzySelectPrompt","SelectPrompt","getFilteredChoices","filteredResults","options","choices","handleInput","char","searchBuffer","length","slice","performSearch","test","startsWith","debounceTimer","clearTimeout","setTimeout","results","map","c","isSeparator","match","fuzzyMatch","title","choice","filter","item","sort","a","b","score","r","_match","selectedIndex","render","highlight","text","indices","isSelected","output","indexSet","Set","i","has","ANSI","BOLD","FG_WHITE","theme","main","FG_CYAN","RESET","_firstRender","scrollTop","pageSize","Math","max","searchStr","muted","success","message","visibleChoices","forEach","index","actualIndex","DIM","symbols","line","repeat","pointer","renderFrame"],"mappings":"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"}
|
|
@@ -1,137 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
Object.defineProperty(exports, "GaugePrompt", {
|
|
6
|
-
enumerable: true,
|
|
7
|
-
get: function() {
|
|
8
|
-
return GaugePrompt;
|
|
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 GaugePrompt = class GaugePrompt extends _base.Prompt {
|
|
28
|
-
run() {
|
|
29
|
-
// Start the loop when run is called (after initial render)
|
|
30
|
-
const p = super.run();
|
|
31
|
-
this.startLoop();
|
|
32
|
-
return p;
|
|
33
|
-
}
|
|
34
|
-
startLoop() {
|
|
35
|
-
if (!this.running) return;
|
|
36
|
-
this.timer = setTimeout(()=>{
|
|
37
|
-
this.tick();
|
|
38
|
-
this.startLoop();
|
|
39
|
-
}, 30); // ~33 FPS
|
|
40
|
-
}
|
|
41
|
-
tick() {
|
|
42
|
-
this.cursor += this.direction * 2; // Speed multiplier
|
|
43
|
-
if (this.cursor >= 100) {
|
|
44
|
-
this.cursor = 100;
|
|
45
|
-
this.direction = -1;
|
|
46
|
-
} else if (this.cursor <= 0) {
|
|
47
|
-
this.cursor = 0;
|
|
48
|
-
this.direction = 1;
|
|
49
|
-
}
|
|
50
|
-
this.render(false);
|
|
51
|
-
}
|
|
52
|
-
stop() {
|
|
53
|
-
this.running = false;
|
|
54
|
-
if (this.timer) clearTimeout(this.timer);
|
|
55
|
-
// Calculate score
|
|
56
|
-
const center = 50;
|
|
57
|
-
const distance = Math.abs(this.cursor - center);
|
|
58
|
-
if (distance <= this.safeZoneHalf) {
|
|
59
|
-
this.result = 'PERFECT!';
|
|
60
|
-
this.resultColor = _theme.theme.success;
|
|
61
|
-
} else if (distance <= this.warnZoneHalf) {
|
|
62
|
-
this.result = 'GOOD';
|
|
63
|
-
this.resultColor = _ansi.ANSI.FG_YELLOW;
|
|
64
|
-
} else {
|
|
65
|
-
this.result = 'MISS';
|
|
66
|
-
this.resultColor = _theme.theme.error;
|
|
67
|
-
}
|
|
68
|
-
this.render(false);
|
|
69
|
-
// Wait a moment to show result, then submit
|
|
70
|
-
setTimeout(()=>{
|
|
71
|
-
this.submit(this.result); // Force non-null
|
|
72
|
-
}, 800);
|
|
73
|
-
}
|
|
74
|
-
handleInput(char, _key) {
|
|
75
|
-
if (!this.running) return;
|
|
76
|
-
if (char === ' ') {
|
|
77
|
-
this.stop();
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
render(_firstRender) {
|
|
81
|
-
let output = '';
|
|
82
|
-
// Header
|
|
83
|
-
output += `${_theme.theme.success}?${_ansi.ANSI.RESET} ${_ansi.ANSI.BOLD}${_theme.theme.title}${this.options.message}${_ansi.ANSI.RESET}\n`;
|
|
84
|
-
// Draw Gauge Bar
|
|
85
|
-
let barStr = '';
|
|
86
|
-
const center = 50;
|
|
87
|
-
for(let i = 0; i < this.width; i++){
|
|
88
|
-
const pct = i / this.width * 100;
|
|
89
|
-
const dist = Math.abs(pct - center);
|
|
90
|
-
let charColor = _theme.theme.error; // Default Miss (Red)
|
|
91
|
-
if (dist <= this.safeZoneHalf) {
|
|
92
|
-
charColor = _theme.theme.success; // Perfect (Green)
|
|
93
|
-
} else if (dist <= this.warnZoneHalf) {
|
|
94
|
-
charColor = _ansi.ANSI.FG_YELLOW; // Good (Yellow)
|
|
95
|
-
}
|
|
96
|
-
// Using block characters for the bar
|
|
97
|
-
barStr += `${charColor}━${_ansi.ANSI.RESET}`;
|
|
98
|
-
}
|
|
99
|
-
output += ` ${barStr}\n`;
|
|
100
|
-
// Draw Cursor
|
|
101
|
-
// Position relative to width
|
|
102
|
-
const pos = Math.floor(this.cursor / 100 * (this.width - 1));
|
|
103
|
-
const padding = ' '.repeat(pos);
|
|
104
|
-
output += ` ${padding}${_theme.theme.main}▲${_ansi.ANSI.RESET}\n`;
|
|
105
|
-
// Instructions or Result
|
|
106
|
-
if (this.running) {
|
|
107
|
-
output += `${_theme.theme.muted}(Press Space to Stop)${_ansi.ANSI.RESET}`;
|
|
108
|
-
} else {
|
|
109
|
-
output += `${_ansi.ANSI.BOLD}${this.resultColor}${this.result}${_ansi.ANSI.RESET}`;
|
|
110
|
-
}
|
|
111
|
-
this.renderFrame(output);
|
|
112
|
-
}
|
|
113
|
-
cleanup() {
|
|
114
|
-
if (this.timer) clearTimeout(this.timer);
|
|
115
|
-
super.cleanup();
|
|
116
|
-
}
|
|
117
|
-
constructor(options){
|
|
118
|
-
super(options), _define_property(this, "cursor", 0) // 0 to 100
|
|
119
|
-
, _define_property(this, "direction", 1), _define_property(this, "running", true), _define_property(this, "timer", void 0), _define_property(this, "width", void 0), _define_property(this, "safeZoneHalf", void 0), _define_property(this, "warnZoneHalf", void 0), _define_property(this, "result", null), _define_property(this, "resultColor", '');
|
|
120
|
-
this.width = options.width || 40;
|
|
121
|
-
// Calculate safe zone logic (0-100 scale)
|
|
122
|
-
// Default safe width: 20% ( +/- 10%)
|
|
123
|
-
const safeParam = options.safeZone ?? 0.2;
|
|
124
|
-
// Convert to percentage (0-100)
|
|
125
|
-
let safeWidthPct;
|
|
126
|
-
if (safeParam <= 1) {
|
|
127
|
-
safeWidthPct = safeParam * 100;
|
|
128
|
-
} else {
|
|
129
|
-
safeWidthPct = safeParam / this.width * 100;
|
|
130
|
-
}
|
|
131
|
-
this.safeZoneHalf = safeWidthPct / 2;
|
|
132
|
-
// Arbitrary "Good" zone is 3x the safe zone (or until limits)
|
|
133
|
-
this.warnZoneHalf = Math.max(this.safeZoneHalf * 3, 30);
|
|
134
|
-
}
|
|
135
|
-
};
|
|
136
|
-
|
|
137
|
-
//# sourceMappingURL=gauge.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/prompts/gauge.ts"],"sourcesContent":["import { ANSI } from '../ansi';\nimport { Prompt } from '../base';\nimport { theme } from '../theme';\nimport { GaugeOptions } from '../types';\n\nexport class GaugePrompt extends Prompt<string, GaugeOptions> {\n private cursor: number = 0; // 0 to 100\n private direction: 1 | -1 = 1;\n private running: boolean = true;\n private timer?: NodeJS.Timeout;\n private readonly width: number;\n private readonly safeZoneHalf: number;\n private readonly warnZoneHalf: number;\n private result: string | null = null;\n private resultColor: string = '';\n\n constructor(options: GaugeOptions) {\n super(options);\n this.width = options.width || 40;\n\n // Calculate safe zone logic (0-100 scale)\n // Default safe width: 20% ( +/- 10%)\n const safeParam = options.safeZone ?? 0.2;\n\n // Convert to percentage (0-100)\n let safeWidthPct: number;\n if (safeParam <= 1) {\n safeWidthPct = safeParam * 100;\n } else {\n safeWidthPct = (safeParam / this.width) * 100;\n }\n\n this.safeZoneHalf = safeWidthPct / 2;\n // Arbitrary \"Good\" zone is 3x the safe zone (or until limits)\n this.warnZoneHalf = Math.max(this.safeZoneHalf * 3, 30);\n }\n\n public run(): Promise<string> {\n // Start the loop when run is called (after initial render)\n const p = super.run();\n this.startLoop();\n return p;\n }\n\n private startLoop() {\n if (!this.running) return;\n this.timer = setTimeout(() => {\n this.tick();\n this.startLoop();\n }, 30); // ~33 FPS\n }\n\n private tick() {\n this.cursor += this.direction * 2; // Speed multiplier\n if (this.cursor >= 100) {\n this.cursor = 100;\n this.direction = -1;\n } else if (this.cursor <= 0) {\n this.cursor = 0;\n this.direction = 1;\n }\n this.render(false);\n }\n\n private stop() {\n this.running = false;\n if (this.timer) clearTimeout(this.timer);\n\n // Calculate score\n const center = 50;\n const distance = Math.abs(this.cursor - center);\n\n if (distance <= this.safeZoneHalf) {\n this.result = 'PERFECT!';\n this.resultColor = theme.success;\n } else if (distance <= this.warnZoneHalf) {\n this.result = 'GOOD';\n this.resultColor = ANSI.FG_YELLOW;\n } else {\n this.result = 'MISS';\n this.resultColor = theme.error;\n }\n\n this.render(false);\n\n // Wait a moment to show result, then submit\n setTimeout(() => {\n this.submit(this.result!); // Force non-null\n }, 800);\n }\n\n protected handleInput(char: string, _key: Buffer) {\n if (!this.running) return;\n\n if (char === ' ') {\n this.stop();\n }\n }\n\n protected render(_firstRender: boolean) {\n let output = '';\n\n // Header\n output += `${theme.success}?${ANSI.RESET} ${ANSI.BOLD}${theme.title}${this.options.message}${ANSI.RESET}\\n`;\n\n // Draw Gauge Bar\n let barStr = '';\n const center = 50;\n\n for (let i = 0; i < this.width; i++) {\n const pct = (i / this.width) * 100;\n const dist = Math.abs(pct - center);\n\n let charColor = theme.error; // Default Miss (Red)\n\n if (dist <= this.safeZoneHalf) {\n charColor = theme.success; // Perfect (Green)\n } else if (dist <= this.warnZoneHalf) {\n charColor = ANSI.FG_YELLOW; // Good (Yellow)\n }\n\n // Using block characters for the bar\n barStr += `${charColor}━${ANSI.RESET}`;\n }\n\n output += ` ${barStr}\\n`;\n\n // Draw Cursor\n // Position relative to width\n const pos = Math.floor((this.cursor / 100) * (this.width - 1));\n const padding = ' '.repeat(pos);\n output += ` ${padding}${theme.main}▲${ANSI.RESET}\\n`;\n\n // Instructions or Result\n if (this.running) {\n output += `${theme.muted}(Press Space to Stop)${ANSI.RESET}`;\n } else {\n output += `${ANSI.BOLD}${this.resultColor}${this.result}${ANSI.RESET}`;\n }\n\n this.renderFrame(output);\n }\n\n protected cleanup() {\n if (this.timer) clearTimeout(this.timer);\n super.cleanup();\n }\n}\n"],"names":["GaugePrompt","Prompt","run","p","startLoop","running","timer","setTimeout","tick","cursor","direction","render","stop","clearTimeout","center","distance","Math","abs","safeZoneHalf","result","resultColor","theme","success","warnZoneHalf","ANSI","FG_YELLOW","error","submit","handleInput","char","_key","_firstRender","output","RESET","BOLD","title","options","message","barStr","i","width","pct","dist","charColor","pos","floor","padding","repeat","main","muted","renderFrame","cleanup","safeParam","safeZone","safeWidthPct","max"],"mappings":"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"}
|
package/dist/src/prompts/grid.js
DELETED
|
@@ -1,191 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
Object.defineProperty(exports, "GridPrompt", {
|
|
6
|
-
enumerable: true,
|
|
7
|
-
get: function() {
|
|
8
|
-
return GridPrompt;
|
|
9
|
-
}
|
|
10
|
-
});
|
|
11
|
-
const _ansi = require("../ansi");
|
|
12
|
-
const _base = require("../base");
|
|
13
|
-
const _theme = require("../theme");
|
|
14
|
-
const _utils = require("../utils");
|
|
15
|
-
function _define_property(obj, key, value) {
|
|
16
|
-
if (key in obj) {
|
|
17
|
-
Object.defineProperty(obj, key, {
|
|
18
|
-
value: value,
|
|
19
|
-
enumerable: true,
|
|
20
|
-
configurable: true,
|
|
21
|
-
writable: true
|
|
22
|
-
});
|
|
23
|
-
} else {
|
|
24
|
-
obj[key] = value;
|
|
25
|
-
}
|
|
26
|
-
return obj;
|
|
27
|
-
}
|
|
28
|
-
let GridPrompt = class GridPrompt extends _base.Prompt {
|
|
29
|
-
calculateLayout() {
|
|
30
|
-
// Calculate max width for row labels
|
|
31
|
-
this.rowLabelWidth = 0;
|
|
32
|
-
for (const row of this.options.rows){
|
|
33
|
-
this.rowLabelWidth = Math.max(this.rowLabelWidth, (0, _utils.stringWidth)(row));
|
|
34
|
-
}
|
|
35
|
-
// Calculate width for each column
|
|
36
|
-
this.columnWidths = this.options.columns.map((col)=>{
|
|
37
|
-
// Header width vs Cell width (3 chars for "[ ]")
|
|
38
|
-
return Math.max((0, _utils.stringWidth)(col), 3);
|
|
39
|
-
});
|
|
40
|
-
}
|
|
41
|
-
render(_firstRender) {
|
|
42
|
-
const { rows, columns } = this.options;
|
|
43
|
-
let output = `${_theme.theme.title}${this.options.message}${_ansi.ANSI.RESET}\n`;
|
|
44
|
-
// Render Header
|
|
45
|
-
// Padding for the row label column
|
|
46
|
-
output += ' '.repeat(this.rowLabelWidth + 2); // +2 for spacing/border
|
|
47
|
-
output += columns.map((col, i)=>{
|
|
48
|
-
const width = this.columnWidths[i];
|
|
49
|
-
const padding = width - (0, _utils.stringWidth)(col);
|
|
50
|
-
const leftPad = Math.floor(padding / 2);
|
|
51
|
-
const rightPad = padding - leftPad;
|
|
52
|
-
return `${_theme.theme.muted}${' '.repeat(leftPad)}${col}${' '.repeat(rightPad)}${_ansi.ANSI.RESET}`;
|
|
53
|
-
}).join(' ') + '\n';
|
|
54
|
-
// Render Rows
|
|
55
|
-
for(let r = 0; r < rows.length; r++){
|
|
56
|
-
const rowLabel = rows[r];
|
|
57
|
-
const labelPadding = this.rowLabelWidth - (0, _utils.stringWidth)(rowLabel);
|
|
58
|
-
// Row Label
|
|
59
|
-
output += `${_theme.theme.muted}${rowLabel}${' '.repeat(labelPadding)}${_ansi.ANSI.RESET} `;
|
|
60
|
-
// Cells
|
|
61
|
-
const cells = this.selected[r].map((isChecked, c)=>{
|
|
62
|
-
const isFocused = r === this.cursorRow && c === this.cursorCol;
|
|
63
|
-
const width = this.columnWidths[c];
|
|
64
|
-
const content = isChecked ? `[${_theme.theme.success}x${_ansi.ANSI.RESET}]` : '[ ]';
|
|
65
|
-
// content string width is 3 (ignoring ansi)
|
|
66
|
-
const padding = width - 3;
|
|
67
|
-
const leftPad = Math.floor(padding / 2);
|
|
68
|
-
const rightPad = padding - leftPad;
|
|
69
|
-
let cellStr = `${' '.repeat(leftPad)}${content}${' '.repeat(rightPad)}`;
|
|
70
|
-
if (isFocused) {
|
|
71
|
-
// Highlight the focused cell
|
|
72
|
-
// If we use ANSI.REVERSE on the whole cell including padding:
|
|
73
|
-
cellStr = `${_ansi.ANSI.REVERSE}${cellStr}${_ansi.ANSI.RESET}`;
|
|
74
|
-
}
|
|
75
|
-
return cellStr;
|
|
76
|
-
});
|
|
77
|
-
output += cells.join(' ') + '\n';
|
|
78
|
-
}
|
|
79
|
-
output += `${_theme.theme.muted}Arrows to move, Space to toggle, Enter to submit${_ansi.ANSI.RESET}`;
|
|
80
|
-
this.renderFrame(output);
|
|
81
|
-
}
|
|
82
|
-
handleInput(char, _key) {
|
|
83
|
-
const isUp = this.isUp(char);
|
|
84
|
-
const isDown = this.isDown(char);
|
|
85
|
-
const isLeft = this.isLeft(char);
|
|
86
|
-
const isRight = this.isRight(char);
|
|
87
|
-
if (isUp || isDown || isLeft || isRight) {
|
|
88
|
-
if (isUp) this.cursorRow = Math.max(0, this.cursorRow - 1);
|
|
89
|
-
if (isDown) this.cursorRow = Math.min(this.options.rows.length - 1, this.cursorRow + 1);
|
|
90
|
-
if (isLeft) this.cursorCol = Math.max(0, this.cursorCol - 1);
|
|
91
|
-
if (isRight) this.cursorCol = Math.min(this.options.columns.length - 1, this.cursorCol + 1);
|
|
92
|
-
this.render(false);
|
|
93
|
-
return;
|
|
94
|
-
}
|
|
95
|
-
if (char === ' ') {
|
|
96
|
-
this.selected[this.cursorRow][this.cursorCol] = !this.selected[this.cursorRow][this.cursorCol];
|
|
97
|
-
this.render(false);
|
|
98
|
-
return;
|
|
99
|
-
}
|
|
100
|
-
if (char === '\r' || char === '\n') {
|
|
101
|
-
this.submit(this.selected);
|
|
102
|
-
return;
|
|
103
|
-
}
|
|
104
|
-
// PageUp (First Row)
|
|
105
|
-
if (char === '\x1b[5~') {
|
|
106
|
-
this.cursorRow = 0;
|
|
107
|
-
this.render(false);
|
|
108
|
-
return;
|
|
109
|
-
}
|
|
110
|
-
// PageDown (Last Row)
|
|
111
|
-
if (char === '\x1b[6~') {
|
|
112
|
-
this.cursorRow = this.options.rows.length - 1;
|
|
113
|
-
this.render(false);
|
|
114
|
-
return;
|
|
115
|
-
}
|
|
116
|
-
// Home (First Column)
|
|
117
|
-
if (char === '\x1b[H' || char === '\x1b[1~') {
|
|
118
|
-
this.cursorCol = 0;
|
|
119
|
-
this.render(false);
|
|
120
|
-
return;
|
|
121
|
-
}
|
|
122
|
-
// End (Last Column)
|
|
123
|
-
if (char === '\x1b[F' || char === '\x1b[4~') {
|
|
124
|
-
this.cursorCol = this.options.columns.length - 1;
|
|
125
|
-
this.render(false);
|
|
126
|
-
return;
|
|
127
|
-
}
|
|
128
|
-
// r: Toggle Row
|
|
129
|
-
if (char === 'r') {
|
|
130
|
-
const row = this.selected[this.cursorRow];
|
|
131
|
-
const allSelected = row.every((c)=>c);
|
|
132
|
-
this.selected[this.cursorRow] = row.map(()=>!allSelected);
|
|
133
|
-
this.render(false);
|
|
134
|
-
return;
|
|
135
|
-
}
|
|
136
|
-
// c: Toggle Column
|
|
137
|
-
if (char === 'c') {
|
|
138
|
-
const colIdx = this.cursorCol;
|
|
139
|
-
const colValues = this.selected.map((row)=>row[colIdx]);
|
|
140
|
-
const allSelected = colValues.every((c)=>c);
|
|
141
|
-
this.selected.forEach((row)=>row[colIdx] = !allSelected);
|
|
142
|
-
this.render(false);
|
|
143
|
-
return;
|
|
144
|
-
}
|
|
145
|
-
// a: Select All
|
|
146
|
-
if (char === 'a') {
|
|
147
|
-
this.selected = this.selected.map((row)=>row.map(()=>true));
|
|
148
|
-
this.render(false);
|
|
149
|
-
return;
|
|
150
|
-
}
|
|
151
|
-
// x: Deselect All
|
|
152
|
-
if (char === 'x') {
|
|
153
|
-
this.selected = this.selected.map((row)=>row.map(()=>false));
|
|
154
|
-
this.render(false);
|
|
155
|
-
return;
|
|
156
|
-
}
|
|
157
|
-
// i: Invert
|
|
158
|
-
if (char === 'i') {
|
|
159
|
-
this.selected = this.selected.map((row)=>row.map((v)=>!v));
|
|
160
|
-
this.render(false);
|
|
161
|
-
return;
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
handleMouse(event) {
|
|
165
|
-
if (event.action === 'scroll') {
|
|
166
|
-
const direction = event.scroll === 'up' ? -1 : 1;
|
|
167
|
-
if (event.shift) {
|
|
168
|
-
// Horizontal (Column)
|
|
169
|
-
this.cursorCol = Math.max(0, Math.min(this.options.columns.length - 1, this.cursorCol + direction));
|
|
170
|
-
} else {
|
|
171
|
-
// Vertical (Row)
|
|
172
|
-
this.cursorRow = Math.max(0, Math.min(this.options.rows.length - 1, this.cursorRow + direction));
|
|
173
|
-
}
|
|
174
|
-
this.render(false);
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
constructor(options){
|
|
178
|
-
super(options), _define_property(this, "cursorRow", 0), _define_property(this, "cursorCol", 0), _define_property(this, "selected", void 0), _define_property(this, "columnWidths", []), _define_property(this, "rowLabelWidth", 0);
|
|
179
|
-
// Initialize selection matrix
|
|
180
|
-
if (options.initial) {
|
|
181
|
-
this.selected = options.initial.map((row)=>[
|
|
182
|
-
...row
|
|
183
|
-
]);
|
|
184
|
-
} else {
|
|
185
|
-
this.selected = options.rows.map(()=>new Array(options.columns.length).fill(false));
|
|
186
|
-
}
|
|
187
|
-
this.calculateLayout();
|
|
188
|
-
}
|
|
189
|
-
};
|
|
190
|
-
|
|
191
|
-
//# sourceMappingURL=grid.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/prompts/grid.ts"],"sourcesContent":["import { ANSI } from '../ansi';\nimport { Prompt } from '../base';\nimport { theme } from '../theme';\nimport { GridOptions, MouseEvent } from '../types';\nimport { stringWidth } from '../utils';\n\nexport class GridPrompt extends Prompt<boolean[][], GridOptions> {\n private cursorRow: number = 0;\n private cursorCol: number = 0;\n private selected: boolean[][];\n private columnWidths: number[] = [];\n private rowLabelWidth: number = 0;\n\n constructor(options: GridOptions) {\n super(options);\n // Initialize selection matrix\n if (options.initial) {\n this.selected = options.initial.map(row => [...row]);\n } else {\n this.selected = options.rows.map(() =>\n new Array(options.columns.length).fill(false)\n );\n }\n\n this.calculateLayout();\n }\n\n private calculateLayout() {\n // Calculate max width for row labels\n this.rowLabelWidth = 0;\n for (const row of this.options.rows) {\n this.rowLabelWidth = Math.max(this.rowLabelWidth, stringWidth(row));\n }\n\n // Calculate width for each column\n this.columnWidths = this.options.columns.map(col => {\n // Header width vs Cell width (3 chars for \"[ ]\")\n return Math.max(stringWidth(col), 3);\n });\n }\n\n protected render(_firstRender: boolean): void {\n const { rows, columns } = this.options;\n\n let output = `${theme.title}${this.options.message}${ANSI.RESET}\\n`;\n\n // Render Header\n // Padding for the row label column\n output += ' '.repeat(this.rowLabelWidth + 2); // +2 for spacing/border\n\n output += columns.map((col, i) => {\n const width = this.columnWidths[i];\n const padding = width - stringWidth(col);\n const leftPad = Math.floor(padding / 2);\n const rightPad = padding - leftPad;\n return `${theme.muted}${' '.repeat(leftPad)}${col}${' '.repeat(rightPad)}${ANSI.RESET}`;\n }).join(' ') + '\\n';\n\n // Render Rows\n for (let r = 0; r < rows.length; r++) {\n const rowLabel = rows[r];\n const labelPadding = this.rowLabelWidth - stringWidth(rowLabel);\n\n // Row Label\n output += `${theme.muted}${rowLabel}${' '.repeat(labelPadding)}${ANSI.RESET} `;\n\n // Cells\n const cells = this.selected[r].map((isChecked, c) => {\n const isFocused = (r === this.cursorRow && c === this.cursorCol);\n const width = this.columnWidths[c];\n const content = isChecked ? `[${theme.success}x${ANSI.RESET}]` : '[ ]';\n // content string width is 3 (ignoring ansi)\n const padding = width - 3;\n const leftPad = Math.floor(padding / 2);\n const rightPad = padding - leftPad;\n\n let cellStr = `${' '.repeat(leftPad)}${content}${' '.repeat(rightPad)}`;\n\n if (isFocused) {\n // Highlight the focused cell\n // If we use ANSI.REVERSE on the whole cell including padding:\n cellStr = `${ANSI.REVERSE}${cellStr}${ANSI.RESET}`;\n }\n\n return cellStr;\n });\n\n output += cells.join(' ') + '\\n';\n }\n\n output += `${theme.muted}Arrows to move, Space to toggle, Enter to 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 if (isUp || isDown || isLeft || isRight) {\n if (isUp) this.cursorRow = Math.max(0, this.cursorRow - 1);\n if (isDown) this.cursorRow = Math.min(this.options.rows.length - 1, this.cursorRow + 1);\n if (isLeft) this.cursorCol = Math.max(0, this.cursorCol - 1);\n if (isRight) this.cursorCol = Math.min(this.options.columns.length - 1, this.cursorCol + 1);\n\n this.render(false);\n return;\n }\n\n if (char === ' ') {\n this.selected[this.cursorRow][this.cursorCol] = !this.selected[this.cursorRow][this.cursorCol];\n this.render(false);\n return;\n }\n\n if (char === '\\r' || char === '\\n') {\n this.submit(this.selected);\n return;\n }\n\n // PageUp (First Row)\n if (char === '\\x1b[5~') {\n this.cursorRow = 0;\n this.render(false);\n return;\n }\n // PageDown (Last Row)\n if (char === '\\x1b[6~') {\n this.cursorRow = this.options.rows.length - 1;\n this.render(false);\n return;\n }\n // Home (First Column)\n if (char === '\\x1b[H' || char === '\\x1b[1~') {\n this.cursorCol = 0;\n this.render(false);\n return;\n }\n // End (Last Column)\n if (char === '\\x1b[F' || char === '\\x1b[4~') {\n this.cursorCol = this.options.columns.length - 1;\n this.render(false);\n return;\n }\n\n // r: Toggle Row\n if (char === 'r') {\n const row = this.selected[this.cursorRow];\n const allSelected = row.every(c => c);\n this.selected[this.cursorRow] = row.map(() => !allSelected);\n this.render(false);\n return;\n }\n\n // c: Toggle Column\n if (char === 'c') {\n const colIdx = this.cursorCol;\n const colValues = this.selected.map(row => row[colIdx]);\n const allSelected = colValues.every(c => c);\n this.selected.forEach(row => row[colIdx] = !allSelected);\n this.render(false);\n return;\n }\n\n // a: Select All\n if (char === 'a') {\n this.selected = this.selected.map(row => row.map(() => true));\n this.render(false);\n return;\n }\n\n // x: Deselect All\n if (char === 'x') {\n this.selected = this.selected.map(row => row.map(() => false));\n this.render(false);\n return;\n }\n\n // i: Invert\n if (char === 'i') {\n this.selected = this.selected.map(row => row.map(v => !v));\n this.render(false);\n return;\n }\n }\n\n protected handleMouse(event: MouseEvent): void {\n if (event.action === 'scroll') {\n const direction = event.scroll === 'up' ? -1 : 1;\n\n if (event.shift) {\n // Horizontal (Column)\n this.cursorCol = Math.max(0, Math.min(this.options.columns.length - 1, this.cursorCol + direction));\n } else {\n // Vertical (Row)\n this.cursorRow = Math.max(0, Math.min(this.options.rows.length - 1, this.cursorRow + direction));\n }\n this.render(false);\n }\n }\n}\n"],"names":["GridPrompt","Prompt","calculateLayout","rowLabelWidth","row","options","rows","Math","max","stringWidth","columnWidths","columns","map","col","render","_firstRender","output","theme","title","message","ANSI","RESET","repeat","i","width","padding","leftPad","floor","rightPad","muted","join","r","length","rowLabel","labelPadding","cells","selected","isChecked","c","isFocused","cursorRow","cursorCol","content","success","cellStr","REVERSE","renderFrame","handleInput","char","_key","isUp","isDown","isLeft","isRight","min","submit","allSelected","every","colIdx","colValues","forEach","v","handleMouse","event","action","direction","scroll","shift","initial","Array","fill"],"mappings":"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"}
|
|
@@ -1,147 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
Object.defineProperty(exports, "HeatmapPrompt", {
|
|
6
|
-
enumerable: true,
|
|
7
|
-
get: function() {
|
|
8
|
-
return HeatmapPrompt;
|
|
9
|
-
}
|
|
10
|
-
});
|
|
11
|
-
const _base = require("../base");
|
|
12
|
-
const _ansi = require("../ansi");
|
|
13
|
-
function _define_property(obj, key, value) {
|
|
14
|
-
if (key in obj) {
|
|
15
|
-
Object.defineProperty(obj, key, {
|
|
16
|
-
value: value,
|
|
17
|
-
enumerable: true,
|
|
18
|
-
configurable: true,
|
|
19
|
-
writable: true
|
|
20
|
-
});
|
|
21
|
-
} else {
|
|
22
|
-
obj[key] = value;
|
|
23
|
-
}
|
|
24
|
-
return obj;
|
|
25
|
-
}
|
|
26
|
-
let HeatmapPrompt = class HeatmapPrompt extends _base.Prompt {
|
|
27
|
-
render(_firstRender) {
|
|
28
|
-
let output = `${_ansi.ANSI.FG_CYAN}? ${this.options.message}${_ansi.ANSI.RESET}\n`;
|
|
29
|
-
// Render Column Headers
|
|
30
|
-
output += ' '; // Offset for row labels
|
|
31
|
-
this.options.columns.forEach((col)=>{
|
|
32
|
-
// Show first 2 chars
|
|
33
|
-
const label = col.substring(0, 2).padEnd(2);
|
|
34
|
-
output += ` ${label} `;
|
|
35
|
-
});
|
|
36
|
-
output += '\n';
|
|
37
|
-
// Grid
|
|
38
|
-
for(let r = 0; r < this.options.rows.length; r++){
|
|
39
|
-
const rowLabel = this.options.rows[r].substring(0, 4).padStart(4);
|
|
40
|
-
output += `${_ansi.ANSI.FG_GRAY}${rowLabel} ${_ansi.ANSI.RESET}`;
|
|
41
|
-
for(let c = 0; c < this.options.columns.length; c++){
|
|
42
|
-
const val = this.grid[r][c];
|
|
43
|
-
const legend = this.getLegend(val);
|
|
44
|
-
const char = legend?.char || '?';
|
|
45
|
-
const color = legend?.color || ((s)=>s);
|
|
46
|
-
const isCursor = r === this.cursorRow && c === this.cursorCol;
|
|
47
|
-
const cellContent = color(char);
|
|
48
|
-
if (isCursor) {
|
|
49
|
-
output += `[${cellContent}]`; // Brackets around
|
|
50
|
-
} else {
|
|
51
|
-
output += ` ${cellContent} `;
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
output += '\n';
|
|
55
|
-
}
|
|
56
|
-
// Legend
|
|
57
|
-
output += '\nLegend: ';
|
|
58
|
-
this.options.legend.forEach((l)=>{
|
|
59
|
-
output += `${l.value}:${l.color(l.char)} `;
|
|
60
|
-
});
|
|
61
|
-
output += '\n' + _ansi.ANSI.FG_GRAY + "(Arrows to move, Space to cycle, 0-9 to set)" + _ansi.ANSI.RESET;
|
|
62
|
-
this.renderFrame(output);
|
|
63
|
-
}
|
|
64
|
-
getLegend(val) {
|
|
65
|
-
return this.options.legend.find((l)=>l.value === val);
|
|
66
|
-
}
|
|
67
|
-
handleMouse(event) {
|
|
68
|
-
if (event.action === 'scroll') {
|
|
69
|
-
if (event.scroll === 'up') {
|
|
70
|
-
if (this.cursorRow > 0) this.cursorRow--;
|
|
71
|
-
} else if (event.scroll === 'down') {
|
|
72
|
-
if (this.cursorRow < this.options.rows.length - 1) this.cursorRow++;
|
|
73
|
-
}
|
|
74
|
-
this.render(false);
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
handleInput(char, _key) {
|
|
78
|
-
if (char === '\r' || char === '\n') {
|
|
79
|
-
this.submit(this.grid);
|
|
80
|
-
return;
|
|
81
|
-
}
|
|
82
|
-
if (this.isUp(char)) {
|
|
83
|
-
if (this.cursorRow > 0) this.cursorRow--;
|
|
84
|
-
} else if (this.isDown(char)) {
|
|
85
|
-
if (this.cursorRow < this.options.rows.length - 1) this.cursorRow++;
|
|
86
|
-
} else if (this.isLeft(char)) {
|
|
87
|
-
if (this.cursorCol > 0) this.cursorCol--;
|
|
88
|
-
} else if (this.isRight(char)) {
|
|
89
|
-
if (this.cursorCol < this.options.columns.length - 1) this.cursorCol++;
|
|
90
|
-
} else if (char === '\t') {
|
|
91
|
-
this.cursorCol++;
|
|
92
|
-
if (this.cursorCol >= this.options.columns.length) {
|
|
93
|
-
this.cursorCol = 0;
|
|
94
|
-
this.cursorRow++;
|
|
95
|
-
if (this.cursorRow >= this.options.rows.length) {
|
|
96
|
-
this.cursorRow = 0;
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
} else if (char === '\u001b[Z') {
|
|
100
|
-
this.cursorCol--;
|
|
101
|
-
if (this.cursorCol < 0) {
|
|
102
|
-
this.cursorCol = this.options.columns.length - 1;
|
|
103
|
-
this.cursorRow--;
|
|
104
|
-
if (this.cursorRow < 0) {
|
|
105
|
-
this.cursorRow = this.options.rows.length - 1;
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
} else if (char === ' ') {
|
|
109
|
-
const val = this.grid[this.cursorRow][this.cursorCol];
|
|
110
|
-
const idx = this.validValues.indexOf(val);
|
|
111
|
-
let nextVal;
|
|
112
|
-
if (idx === -1) {
|
|
113
|
-
// If current val not in legend (maybe init with invalid), reset to first
|
|
114
|
-
nextVal = this.validValues[0];
|
|
115
|
-
} else {
|
|
116
|
-
nextVal = this.validValues[(idx + 1) % this.validValues.length];
|
|
117
|
-
}
|
|
118
|
-
this.grid[this.cursorRow][this.cursorCol] = nextVal;
|
|
119
|
-
} else if (/[0-9]/.test(char)) {
|
|
120
|
-
const num = parseInt(char, 10);
|
|
121
|
-
// Only set if valid in legend
|
|
122
|
-
if (this.validValues.includes(num)) {
|
|
123
|
-
this.grid[this.cursorRow][this.cursorCol] = num;
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
this.render(false);
|
|
127
|
-
}
|
|
128
|
-
constructor(options){
|
|
129
|
-
super(options), _define_property(this, "grid", void 0), _define_property(this, "cursorRow", 0), _define_property(this, "cursorCol", 0), _define_property(this, "validValues", void 0);
|
|
130
|
-
// Initialize grid
|
|
131
|
-
const rows = options.rows.length;
|
|
132
|
-
const cols = options.columns.length;
|
|
133
|
-
if (options.initial) {
|
|
134
|
-
this.grid = options.initial.map((row)=>[
|
|
135
|
-
...row
|
|
136
|
-
]);
|
|
137
|
-
} else {
|
|
138
|
-
this.grid = Array.from({
|
|
139
|
-
length: rows
|
|
140
|
-
}, ()=>Array(cols).fill(0));
|
|
141
|
-
}
|
|
142
|
-
// Get sorted valid values for cycling
|
|
143
|
-
this.validValues = options.legend.map((l)=>l.value).sort((a, b)=>a - b);
|
|
144
|
-
}
|
|
145
|
-
};
|
|
146
|
-
|
|
147
|
-
//# sourceMappingURL=heatmap.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/prompts/heatmap.ts"],"sourcesContent":["import { Prompt } from '../base';\nimport { HeatmapOptions, HeatmapLegend, MouseEvent } from '../types';\nimport { ANSI } from '../ansi';\n\nexport class HeatmapPrompt extends Prompt<number[][], HeatmapOptions> {\n private grid: number[][];\n private cursorRow: number = 0;\n private cursorCol: number = 0;\n private validValues: number[];\n\n constructor(options: HeatmapOptions) {\n super(options);\n // Initialize grid\n const rows = options.rows.length;\n const cols = options.columns.length;\n if (options.initial) {\n this.grid = options.initial.map(row => [...row]);\n } else {\n this.grid = Array.from({ length: rows }, () => Array(cols).fill(0));\n }\n\n // Get sorted valid values for cycling\n this.validValues = options.legend.map(l => l.value).sort((a, b) => a - b);\n }\n\n protected render(_firstRender: boolean): void {\n let output = `${ANSI.FG_CYAN}? ${this.options.message}${ANSI.RESET}\\n`;\n\n // Render Column Headers\n output += ' '; // Offset for row labels\n this.options.columns.forEach(col => {\n // Show first 2 chars\n const label = col.substring(0, 2).padEnd(2);\n output += ` ${label} `;\n });\n output += '\\n';\n\n // Grid\n for (let r = 0; r < this.options.rows.length; r++) {\n const rowLabel = this.options.rows[r].substring(0, 4).padStart(4);\n output += `${ANSI.FG_GRAY}${rowLabel} ${ANSI.RESET}`;\n\n for (let c = 0; c < this.options.columns.length; c++) {\n const val = this.grid[r][c];\n const legend = this.getLegend(val);\n const char = legend?.char || '?';\n const color = legend?.color || ((s: string) => s);\n\n const isCursor = r === this.cursorRow && c === this.cursorCol;\n\n const cellContent = color(char);\n if (isCursor) {\n output += `[${cellContent}]`; // Brackets around\n } else {\n output += ` ${cellContent} `;\n }\n }\n output += '\\n';\n }\n\n // Legend\n output += '\\nLegend: ';\n this.options.legend.forEach(l => {\n output += `${l.value}:${l.color(l.char)} `;\n });\n output += '\\n' + ANSI.FG_GRAY + \"(Arrows to move, Space to cycle, 0-9 to set)\" + ANSI.RESET;\n\n this.renderFrame(output);\n }\n\n private getLegend(val: number): HeatmapLegend | undefined {\n return this.options.legend.find(l => l.value === val);\n }\n\n protected handleMouse(event: MouseEvent): void {\n if (event.action === 'scroll') {\n if (event.scroll === 'up') {\n if (this.cursorRow > 0) this.cursorRow--;\n } else if (event.scroll === 'down') {\n if (this.cursorRow < this.options.rows.length - 1) this.cursorRow++;\n }\n this.render(false);\n }\n }\n\n protected handleInput(char: string, _key: Buffer): void {\n if (char === '\\r' || char === '\\n') { // Enter\n this.submit(this.grid);\n return;\n }\n\n if (this.isUp(char)) {\n if (this.cursorRow > 0) this.cursorRow--;\n } else if (this.isDown(char)) {\n if (this.cursorRow < this.options.rows.length - 1) this.cursorRow++;\n } else if (this.isLeft(char)) {\n if (this.cursorCol > 0) this.cursorCol--;\n } else if (this.isRight(char)) {\n if (this.cursorCol < this.options.columns.length - 1) this.cursorCol++;\n } else if (char === '\\t') { // Tab -> Right (Cycle)\n this.cursorCol++;\n if (this.cursorCol >= this.options.columns.length) {\n this.cursorCol = 0;\n this.cursorRow++;\n if (this.cursorRow >= this.options.rows.length) {\n this.cursorRow = 0;\n }\n }\n } else if (char === '\\u001b[Z') { // Shift+Tab -> Left (Cycle)\n this.cursorCol--;\n if (this.cursorCol < 0) {\n this.cursorCol = this.options.columns.length - 1;\n this.cursorRow--;\n if (this.cursorRow < 0) {\n this.cursorRow = this.options.rows.length - 1;\n }\n }\n } else if (char === ' ') {\n const val = this.grid[this.cursorRow][this.cursorCol];\n const idx = this.validValues.indexOf(val);\n let nextVal;\n if (idx === -1) {\n // If current val not in legend (maybe init with invalid), reset to first\n nextVal = this.validValues[0];\n } else {\n nextVal = this.validValues[(idx + 1) % this.validValues.length];\n }\n this.grid[this.cursorRow][this.cursorCol] = nextVal;\n } else if (/[0-9]/.test(char)) {\n const num = parseInt(char, 10);\n // Only set if valid in legend\n if (this.validValues.includes(num)) {\n this.grid[this.cursorRow][this.cursorCol] = num;\n }\n }\n\n this.render(false);\n }\n}\n"],"names":["HeatmapPrompt","Prompt","render","_firstRender","output","ANSI","FG_CYAN","options","message","RESET","columns","forEach","col","label","substring","padEnd","r","rows","length","rowLabel","padStart","FG_GRAY","c","val","grid","legend","getLegend","char","color","s","isCursor","cursorRow","cursorCol","cellContent","l","value","renderFrame","find","handleMouse","event","action","scroll","handleInput","_key","submit","isUp","isDown","isLeft","isRight","idx","validValues","indexOf","nextVal","test","num","parseInt","includes","cols","initial","map","row","Array","from","fill","sort","a","b"],"mappings":"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"}
|