mepcli 2.0.0-beta.2 → 2.0.0-beta.4
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/LICENSE +1 -1
- package/README.md +20 -0
- package/dist/ansi.d.ts +36 -0
- package/dist/ansi.js +1 -0
- package/dist/base.d.ts +61 -0
- package/dist/base.js +1 -0
- package/dist/{src/core.js → core.d.ts} +181 -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 +52 -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 +519 -0
- package/dist/types.js +1 -0
- package/dist/utils.d.ts +82 -0
- package/dist/utils.js +1 -0
- package/package.json +10 -10
- 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/license.ts"],"sourcesContent":["import { ANSI } from '../ansi';\nimport { SelectPrompt } from './select';\nimport { theme } from '../theme';\nimport { symbols } from '../symbols';\nimport { LicenseOptions, License } from '../types';\nimport { Layout } from '../utils';\nimport { POPULAR_LICENSES } from '../data/licenses';\n\nexport class LicensePrompt extends SelectPrompt<string> {\n private licenses: License[];\n\n constructor(options: LicenseOptions) {\n // Map licenses to choices expected by SelectPrompt\n const choices = POPULAR_LICENSES.map(l => ({\n title: l.id,\n value: l.id,\n description: l.name\n }));\n\n super({\n ...options,\n choices\n });\n\n this.licenses = POPULAR_LICENSES;\n\n // Set initial selection if provided\n if (options.defaultLicense) {\n const idx = this.licenses.findIndex(l => l.id === options.defaultLicense);\n if (idx !== -1) {\n (this as any).selectedIndex = idx;\n }\n }\n }\n\n protected render(_firstRender: boolean) {\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 // Handle Filtering Edge Case: if list shrinks, scrollTop might be too high\n if (this.scrollTop > choices.length - 1) {\n this.scrollTop = Math.max(0, choices.length - this.pageSize);\n }\n\n const width = this.stdout.columns || 80;\n const gap = 2;\n const ratio = 0.3;\n\n // Calculate dimensions\n // Left column: 30% or min 20 chars\n // Right column: rest\n const leftWidth = Math.floor((width - gap) * ratio);\n const rightWidth = width - leftWidth - gap;\n\n const leftContent = this.renderList();\n const rightContent = this.renderDetails(rightWidth);\n\n const content = Layout.split(leftContent, rightContent, width, { ratio, gap });\n\n // Header\n const searchStr = this.searchBuffer ? ` ${theme.muted}(Filter: ${this.searchBuffer})${ANSI.RESET}` : '';\n const header = `${theme.success}? ${ANSI.BOLD}${theme.title}${this.options.message}${ANSI.RESET}${searchStr} ${theme.muted}(Use arrows to navigate, Enter to select)${ANSI.RESET}`;\n\n // Combine\n this.renderFrame(`${header}\\n${content}`);\n }\n\n private renderList(): string {\n const choices = this.getFilteredChoices();\n let output = '';\n\n if (choices.length === 0) {\n output += ` ${theme.muted}No results found${ANSI.RESET}`;\n return output + '\\n'.repeat(this.pageSize - 1);\n }\n\n const visibleChoices = choices.slice(this.scrollTop, this.scrollTop + this.pageSize);\n\n visibleChoices.forEach((choice, index) => {\n const actualIndex = this.scrollTop + index;\n const isSelected = actualIndex === this.selectedIndex;\n\n const cursor = isSelected ? `${theme.main}${symbols.pointer}` : ' ';\n\n // Handle Separator type safety\n if ('separator' in choice) {\n output += `${theme.muted}${choice.text || '---'}${ANSI.RESET}\\n`;\n return;\n }\n\n const title = isSelected ? `${theme.main}${choice.title}${ANSI.RESET}` : choice.title;\n\n output += `${cursor} ${title}\\n`;\n });\n\n // Fill remaining lines to maintain height\n const filledLines = visibleChoices.length;\n if (filledLines < this.pageSize) {\n output += '\\n'.repeat(this.pageSize - filledLines);\n }\n\n return output;\n }\n\n private renderDetails(maxWidth: number): string {\n const choices = this.getFilteredChoices();\n if (choices.length === 0) return '';\n\n const selectedChoice = choices[this.selectedIndex];\n if (!selectedChoice || 'separator' in selectedChoice) return '';\n\n const license = this.licenses.find(l => l.id === selectedChoice.value);\n\n if (!license) return '';\n\n let output = '';\n output += `${ANSI.BOLD}${license.name}${ANSI.RESET}\\n`;\n\n const wrappedDesc = Layout.wrap(license.description, maxWidth);\n const coloredDesc = wrappedDesc.split('\\n').map(line => `${theme.muted}${line}${ANSI.RESET}`).join('\\n');\n\n output += `${coloredDesc}\\n\\n`;\n\n // Permissions\n if (license.permissions.length > 0) {\n output += `${ANSI.FG_GREEN}Permissions:${ANSI.RESET}\\n`;\n license.permissions.forEach(p => output += ` ${theme.success}${symbols.checked} ${p}${ANSI.RESET}\\n`);\n output += '\\n';\n }\n\n // Conditions\n if (license.conditions.length > 0) {\n output += `${ANSI.FG_BLUE}Conditions:${ANSI.RESET}\\n`;\n // symbols.info doesn't exist, use 'i' or similar\n license.conditions.forEach(c => output += ` ${ANSI.FG_BLUE}ℹ ${c}${ANSI.RESET}\\n`);\n output += '\\n';\n }\n\n // Limitations\n if (license.limitations.length > 0) {\n output += `${ANSI.FG_RED}Limitations:${ANSI.RESET}\\n`;\n license.limitations.forEach(l => output += ` ${theme.error}${symbols.cross} ${l}${ANSI.RESET}\\n`);\n }\n\n return output;\n }\n}\n"],"names":["LicensePrompt","SelectPrompt","render","_firstRender","choices","getFilteredChoices","selectedIndex","scrollTop","pageSize","length","Math","max","width","stdout","columns","gap","ratio","leftWidth","floor","rightWidth","leftContent","renderList","rightContent","renderDetails","content","Layout","split","searchStr","searchBuffer","theme","muted","ANSI","RESET","header","success","BOLD","title","options","message","renderFrame","output","repeat","visibleChoices","slice","forEach","choice","index","actualIndex","isSelected","cursor","main","symbols","pointer","text","filledLines","maxWidth","selectedChoice","license","licenses","find","l","id","value","name","wrappedDesc","wrap","description","coloredDesc","map","line","join","permissions","FG_GREEN","p","checked","conditions","FG_BLUE","c","limitations","FG_RED","error","cross","POPULAR_LICENSES","defaultLicense","idx","findIndex"],"mappings":"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"}
|
package/dist/src/prompts/list.js
DELETED
|
@@ -1,124 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
Object.defineProperty(exports, "ListPrompt", {
|
|
6
|
-
enumerable: true,
|
|
7
|
-
get: function() {
|
|
8
|
-
return ListPrompt;
|
|
9
|
-
}
|
|
10
|
-
});
|
|
11
|
-
const _ansi = require("../ansi");
|
|
12
|
-
const _base = require("../base");
|
|
13
|
-
const _theme = require("../theme");
|
|
14
|
-
const _symbols = require("../symbols");
|
|
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 ListPrompt = class ListPrompt extends _base.Prompt {
|
|
29
|
-
render(_firstRender) {
|
|
30
|
-
const cols = process.stdout.columns || 80;
|
|
31
|
-
// 1. Prepare Prefix
|
|
32
|
-
const icon = this.errorMsg ? `${_theme.theme.error}${_symbols.symbols.cross}` : `${_theme.theme.success}?`;
|
|
33
|
-
const prefix = `${icon} ${_ansi.ANSI.BOLD}${_theme.theme.title}${this.options.message}${_ansi.ANSI.RESET} `;
|
|
34
|
-
// 2. Build Lines with Wrapping
|
|
35
|
-
const lines = [];
|
|
36
|
-
let currentLine = prefix;
|
|
37
|
-
// Helper to check width
|
|
38
|
-
const addText = (text)=>{
|
|
39
|
-
const visualLen = this.stripAnsi(currentLine).length + this.stripAnsi(text).length;
|
|
40
|
-
if (visualLen > cols) {
|
|
41
|
-
lines.push(currentLine);
|
|
42
|
-
currentLine = text.trimStart(); // Start new line
|
|
43
|
-
} else {
|
|
44
|
-
currentLine += text;
|
|
45
|
-
}
|
|
46
|
-
};
|
|
47
|
-
// Render Tags
|
|
48
|
-
if (this.value.length > 0) {
|
|
49
|
-
this.value.forEach((tag)=>{
|
|
50
|
-
const tagStr = `${_theme.theme.main}[${tag}]${_ansi.ANSI.RESET} `;
|
|
51
|
-
addText(tagStr);
|
|
52
|
-
});
|
|
53
|
-
}
|
|
54
|
-
// Render Current Input
|
|
55
|
-
addText(this.currentInput);
|
|
56
|
-
lines.push(currentLine); // Push the last line
|
|
57
|
-
// Track where the input ends (for cursor positioning)
|
|
58
|
-
const inputLineIndex = lines.length - 1;
|
|
59
|
-
const inputVisualCol = this.stripAnsi(currentLine).length;
|
|
60
|
-
// 3. Append Error if any
|
|
61
|
-
if (this.errorMsg) {
|
|
62
|
-
lines.push(`${_theme.theme.error}>> ${this.errorMsg}${_ansi.ANSI.RESET}`);
|
|
63
|
-
}
|
|
64
|
-
const output = lines.join('\n');
|
|
65
|
-
// 4. Render Frame
|
|
66
|
-
this.renderFrame(output);
|
|
67
|
-
this.print(_ansi.ANSI.SHOW_CURSOR);
|
|
68
|
-
// 5. Position Cursor
|
|
69
|
-
// If we printed lines after the input line (e.g. error msg), move up.
|
|
70
|
-
const totalRows = lines.length;
|
|
71
|
-
const linesUp = totalRows - 1 - inputLineIndex;
|
|
72
|
-
if (linesUp > 0) {
|
|
73
|
-
this.print(`\x1b[${linesUp}A`);
|
|
74
|
-
}
|
|
75
|
-
// Move to correct column
|
|
76
|
-
this.print(_ansi.ANSI.CURSOR_LEFT);
|
|
77
|
-
if (inputVisualCol > 0) {
|
|
78
|
-
this.print(`\x1b[${inputVisualCol}C`);
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
handleInput(char) {
|
|
82
|
-
if (char === '\r' || char === '\n') {
|
|
83
|
-
if (this.currentInput.trim()) {
|
|
84
|
-
this.value.push(this.currentInput.trim());
|
|
85
|
-
this.currentInput = '';
|
|
86
|
-
this.errorMsg = '';
|
|
87
|
-
this.render(false);
|
|
88
|
-
} else {
|
|
89
|
-
// Done if input is empty
|
|
90
|
-
if (this.options.validate) {
|
|
91
|
-
const result = this.options.validate(this.value);
|
|
92
|
-
if (result !== true) {
|
|
93
|
-
this.errorMsg = typeof result === 'string' ? result : 'Invalid input';
|
|
94
|
-
this.render(false);
|
|
95
|
-
return;
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
this.submit(this.value);
|
|
99
|
-
}
|
|
100
|
-
return;
|
|
101
|
-
}
|
|
102
|
-
if (char === '\u0008' || char === '\x7f') {
|
|
103
|
-
if (this.currentInput.length > 0) {
|
|
104
|
-
this.currentInput = this.currentInput.slice(0, -1);
|
|
105
|
-
this.render(false);
|
|
106
|
-
} else if (this.value.length > 0) {
|
|
107
|
-
const last = this.value.pop();
|
|
108
|
-
this.currentInput = last || '';
|
|
109
|
-
this.render(false);
|
|
110
|
-
}
|
|
111
|
-
return;
|
|
112
|
-
}
|
|
113
|
-
if (!/^[\x00-\x1F]/.test(char) && !char.startsWith('\x1b')) {
|
|
114
|
-
this.currentInput += char;
|
|
115
|
-
this.render(false);
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
constructor(options){
|
|
119
|
-
super(options), _define_property(this, "currentInput", ''), _define_property(this, "errorMsg", '');
|
|
120
|
-
this.value = options.initial || [];
|
|
121
|
-
}
|
|
122
|
-
};
|
|
123
|
-
|
|
124
|
-
//# sourceMappingURL=list.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/prompts/list.ts"],"sourcesContent":["import { ANSI } from '../ansi';\nimport { Prompt } from '../base';\nimport { theme } from '../theme';\nimport { symbols } from '../symbols';\nimport { ListOptions } from '../types';\n\n// --- Implementation: List Prompt ---\nexport class ListPrompt extends Prompt<string[], ListOptions> {\n private currentInput: string = '';\n private errorMsg: string = '';\n\n constructor(options: ListOptions) {\n super(options);\n this.value = options.initial || [];\n }\n\n protected render(_firstRender: boolean) {\n const cols = process.stdout.columns || 80;\n\n // 1. Prepare Prefix\n const icon = this.errorMsg ? `${theme.error}${symbols.cross}` : `${theme.success}?`;\n const prefix = `${icon} ${ANSI.BOLD}${theme.title}${this.options.message}${ANSI.RESET} `;\n\n // 2. Build Lines with Wrapping\n const lines: string[] = [];\n let currentLine = prefix;\n\n // Helper to check width\n const addText = (text: string) => {\n const visualLen = this.stripAnsi(currentLine).length + this.stripAnsi(text).length;\n if (visualLen > cols) {\n lines.push(currentLine);\n currentLine = text.trimStart(); // Start new line\n } else {\n currentLine += text;\n }\n };\n\n // Render Tags\n if (this.value.length > 0) {\n this.value.forEach((tag: string) => {\n const tagStr = `${theme.main}[${tag}]${ANSI.RESET} `;\n addText(tagStr);\n });\n }\n\n // Render Current Input\n addText(this.currentInput);\n\n lines.push(currentLine); // Push the last line\n\n // Track where the input ends (for cursor positioning)\n const inputLineIndex = lines.length - 1;\n const inputVisualCol = this.stripAnsi(currentLine).length;\n\n // 3. Append Error if any\n if (this.errorMsg) {\n lines.push(`${theme.error}>> ${this.errorMsg}${ANSI.RESET}`);\n }\n\n const output = lines.join('\\n');\n\n // 4. Render Frame\n this.renderFrame(output);\n\n this.print(ANSI.SHOW_CURSOR);\n\n // 5. Position Cursor\n // If we printed lines after the input line (e.g. error msg), move up.\n const totalRows = lines.length;\n const linesUp = (totalRows - 1) - inputLineIndex;\n\n if (linesUp > 0) {\n this.print(`\\x1b[${linesUp}A`);\n }\n\n // Move to correct column\n this.print(ANSI.CURSOR_LEFT);\n if (inputVisualCol > 0) {\n this.print(`\\x1b[${inputVisualCol}C`);\n }\n }\n\n protected handleInput(char: string) {\n if (char === '\\r' || char === '\\n') {\n if (this.currentInput.trim()) {\n this.value.push(this.currentInput.trim());\n this.currentInput = '';\n this.errorMsg = '';\n this.render(false);\n } else {\n // Done if input is empty\n if (this.options.validate) {\n const result = this.options.validate(this.value);\n if (result !== true) {\n this.errorMsg = typeof result === 'string' ? result : 'Invalid input';\n this.render(false);\n return;\n }\n }\n this.submit(this.value);\n }\n return;\n }\n\n if (char === '\\u0008' || char === '\\x7f') { // Backspace\n if (this.currentInput.length > 0) {\n this.currentInput = this.currentInput.slice(0, -1);\n this.render(false);\n } else if (this.value.length > 0) {\n const last = this.value.pop();\n this.currentInput = last || '';\n this.render(false);\n }\n return;\n }\n\n if (!/^[\\x00-\\x1F]/.test(char) && !char.startsWith('\\x1b')) {\n this.currentInput += char;\n this.render(false);\n }\n }\n}\n"],"names":["ListPrompt","Prompt","render","_firstRender","cols","process","stdout","columns","icon","errorMsg","theme","error","symbols","cross","success","prefix","ANSI","BOLD","title","options","message","RESET","lines","currentLine","addText","text","visualLen","stripAnsi","length","push","trimStart","value","forEach","tag","tagStr","main","currentInput","inputLineIndex","inputVisualCol","output","join","renderFrame","print","SHOW_CURSOR","totalRows","linesUp","CURSOR_LEFT","handleInput","char","trim","validate","result","submit","slice","last","pop","test","startsWith","initial"],"mappings":"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"}
|
package/dist/src/prompts/map.js
DELETED
|
@@ -1,262 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
Object.defineProperty(exports, "MapPrompt", {
|
|
6
|
-
enumerable: true,
|
|
7
|
-
get: function() {
|
|
8
|
-
return MapPrompt;
|
|
9
|
-
}
|
|
10
|
-
});
|
|
11
|
-
const _ansi = require("../ansi");
|
|
12
|
-
const _base = require("../base");
|
|
13
|
-
const _theme = require("../theme");
|
|
14
|
-
const _symbols = require("../symbols");
|
|
15
|
-
const _utils = require("../utils");
|
|
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 MapPrompt = class MapPrompt extends _base.Prompt {
|
|
30
|
-
render(_firstRender) {
|
|
31
|
-
let output = '';
|
|
32
|
-
// Title
|
|
33
|
-
const icon = this.errorMsg ? `${_theme.theme.error}${_symbols.symbols.cross}` : `${_theme.theme.success}?`;
|
|
34
|
-
output += `${icon} ${_ansi.ANSI.BOLD}${_theme.theme.title}${this.options.message}${_ansi.ANSI.RESET}\n`;
|
|
35
|
-
// Layout Calculation
|
|
36
|
-
const maxKeyWidth = Math.max(5, ...this.items.map((item, idx)=>{
|
|
37
|
-
// Include ghost length in calculation if it's the active row
|
|
38
|
-
const ghostLen = idx === this.rowIndex && this.colIndex === 0 ? (0, _utils.stringWidth)(this.ghost) : 0;
|
|
39
|
-
return (0, _utils.stringWidth)(item.key) + ghostLen;
|
|
40
|
-
})) + 2; // Padding
|
|
41
|
-
// Scrolling Logic
|
|
42
|
-
if (this.rowIndex < this.scrollTop) {
|
|
43
|
-
this.scrollTop = this.rowIndex;
|
|
44
|
-
} else if (this.rowIndex >= this.scrollTop + this.pageSize) {
|
|
45
|
-
this.scrollTop = this.rowIndex - this.pageSize + 1;
|
|
46
|
-
}
|
|
47
|
-
// Clamping
|
|
48
|
-
const maxScroll = Math.max(0, this.items.length - this.pageSize);
|
|
49
|
-
this.scrollTop = Math.min(this.scrollTop, maxScroll);
|
|
50
|
-
// Header
|
|
51
|
-
const keyHeader = this.pad('Key', maxKeyWidth);
|
|
52
|
-
output += ` ${_ansi.ANSI.BOLD}${keyHeader}Value${_ansi.ANSI.RESET}\n`;
|
|
53
|
-
// Rows
|
|
54
|
-
const visibleItems = this.items.slice(this.scrollTop, this.scrollTop + this.pageSize);
|
|
55
|
-
visibleItems.forEach((item, index)=>{
|
|
56
|
-
const actualIndex = this.scrollTop + index;
|
|
57
|
-
if (index > 0) output += '\n';
|
|
58
|
-
const isRowActive = actualIndex === this.rowIndex;
|
|
59
|
-
const pointer = isRowActive ? `${_theme.theme.main}${_symbols.symbols.pointer}${_ansi.ANSI.RESET} ` : ' ';
|
|
60
|
-
// Render Key
|
|
61
|
-
let keyStr = item.key;
|
|
62
|
-
let ghostStr = '';
|
|
63
|
-
if (isRowActive && this.colIndex === 0) {
|
|
64
|
-
if (this.ghost) {
|
|
65
|
-
ghostStr = `${_theme.theme.muted}${this.ghost}${_ansi.ANSI.RESET}`;
|
|
66
|
-
}
|
|
67
|
-
keyStr = `${_theme.theme.main}${_ansi.ANSI.UNDERLINE}${keyStr}${_ansi.ANSI.RESET}${ghostStr}`;
|
|
68
|
-
}
|
|
69
|
-
// Adjust padding manually
|
|
70
|
-
// We need visual width of key + ghost (if active)
|
|
71
|
-
const keyVisualWidth = (0, _utils.stringWidth)(item.key) + (isRowActive && this.colIndex === 0 ? (0, _utils.stringWidth)(this.ghost) : 0);
|
|
72
|
-
const padding = ' '.repeat(Math.max(0, maxKeyWidth - keyVisualWidth));
|
|
73
|
-
// Render Value
|
|
74
|
-
let valStr = item.value;
|
|
75
|
-
if (isRowActive && this.colIndex === 1) {
|
|
76
|
-
valStr = `${_theme.theme.main}${_ansi.ANSI.UNDERLINE}${valStr || ' '}${_ansi.ANSI.RESET}`;
|
|
77
|
-
}
|
|
78
|
-
output += `${pointer}${keyStr}${padding}${valStr}`;
|
|
79
|
-
});
|
|
80
|
-
// Instructions
|
|
81
|
-
output += `\n${_ansi.ANSI.DIM}(Ctrl+N: Add, Ctrl+D: Del)${_ansi.ANSI.RESET}`;
|
|
82
|
-
if (this.errorMsg) {
|
|
83
|
-
output += `\n${_theme.theme.error}>> ${this.errorMsg}${_ansi.ANSI.RESET}`;
|
|
84
|
-
}
|
|
85
|
-
this.renderFrame(output);
|
|
86
|
-
}
|
|
87
|
-
pad(str, width) {
|
|
88
|
-
const len = (0, _utils.stringWidth)(str);
|
|
89
|
-
if (len >= width) return str;
|
|
90
|
-
return str + ' '.repeat(width - len);
|
|
91
|
-
}
|
|
92
|
-
updateGhost() {
|
|
93
|
-
this.ghost = '';
|
|
94
|
-
if (this.colIndex !== 0 || !this.options.suggestions) return;
|
|
95
|
-
const currentKey = this.items[this.rowIndex].key;
|
|
96
|
-
if (!currentKey) return;
|
|
97
|
-
const lowerKey = currentKey.toLowerCase();
|
|
98
|
-
// Find first match
|
|
99
|
-
const match = this.options.suggestions.find((s)=>s.toLowerCase().startsWith(lowerKey) && s.length > currentKey.length);
|
|
100
|
-
if (match) {
|
|
101
|
-
this.ghost = match.slice(currentKey.length);
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
handleInput(char) {
|
|
105
|
-
this.errorMsg = '';
|
|
106
|
-
// Tab (Accept Suggestion) or Toggle Column
|
|
107
|
-
if (char === '\t') {
|
|
108
|
-
if (this.colIndex === 0 && this.ghost) {
|
|
109
|
-
this.items[this.rowIndex].key += this.ghost;
|
|
110
|
-
this.ghost = '';
|
|
111
|
-
this.render(false);
|
|
112
|
-
return;
|
|
113
|
-
}
|
|
114
|
-
// Standard Tab behavior (toggle column)
|
|
115
|
-
this.colIndex = this.colIndex === 0 ? 1 : 0;
|
|
116
|
-
this.ghost = ''; // Clear ghost when changing columns
|
|
117
|
-
this.render(false);
|
|
118
|
-
return;
|
|
119
|
-
}
|
|
120
|
-
// Navigation
|
|
121
|
-
if (this.isUp(char)) {
|
|
122
|
-
if (this.rowIndex > 0) this.rowIndex--;
|
|
123
|
-
this.ghost = '';
|
|
124
|
-
this.render(false);
|
|
125
|
-
return;
|
|
126
|
-
}
|
|
127
|
-
if (this.isDown(char)) {
|
|
128
|
-
if (this.rowIndex < this.items.length - 1) {
|
|
129
|
-
this.rowIndex++;
|
|
130
|
-
} else {
|
|
131
|
-
// Down at last row adds new row
|
|
132
|
-
this.items.push({
|
|
133
|
-
key: '',
|
|
134
|
-
value: ''
|
|
135
|
-
});
|
|
136
|
-
this.rowIndex++;
|
|
137
|
-
this.colIndex = 0;
|
|
138
|
-
}
|
|
139
|
-
this.ghost = '';
|
|
140
|
-
this.render(false);
|
|
141
|
-
return;
|
|
142
|
-
}
|
|
143
|
-
if (this.isRight(char) || this.isLeft(char)) {
|
|
144
|
-
this.colIndex = this.colIndex === 0 ? 1 : 0;
|
|
145
|
-
this.ghost = '';
|
|
146
|
-
this.render(false);
|
|
147
|
-
return;
|
|
148
|
-
}
|
|
149
|
-
// CRUD
|
|
150
|
-
if (char === '\x0e') {
|
|
151
|
-
this.items.push({
|
|
152
|
-
key: '',
|
|
153
|
-
value: ''
|
|
154
|
-
});
|
|
155
|
-
this.rowIndex = this.items.length - 1;
|
|
156
|
-
this.colIndex = 0;
|
|
157
|
-
this.ghost = '';
|
|
158
|
-
this.render(false);
|
|
159
|
-
return;
|
|
160
|
-
}
|
|
161
|
-
if (char === '\x04') {
|
|
162
|
-
if (this.items.length > 1) {
|
|
163
|
-
this.items.splice(this.rowIndex, 1);
|
|
164
|
-
if (this.rowIndex >= this.items.length) {
|
|
165
|
-
this.rowIndex = this.items.length - 1;
|
|
166
|
-
}
|
|
167
|
-
} else {
|
|
168
|
-
this.items[0] = {
|
|
169
|
-
key: '',
|
|
170
|
-
value: ''
|
|
171
|
-
};
|
|
172
|
-
}
|
|
173
|
-
this.ghost = '';
|
|
174
|
-
this.render(false);
|
|
175
|
-
return;
|
|
176
|
-
}
|
|
177
|
-
// Submit
|
|
178
|
-
if (char === '\r' || char === '\n') {
|
|
179
|
-
// Validate duplicates
|
|
180
|
-
const keys = this.items.map((i)=>i.key);
|
|
181
|
-
const duplicates = keys.filter((item, index)=>keys.indexOf(item) !== index && item !== '');
|
|
182
|
-
if (duplicates.length > 0) {
|
|
183
|
-
this.errorMsg = `Duplicate keys found: ${duplicates.join(', ')}`;
|
|
184
|
-
this.render(false);
|
|
185
|
-
return;
|
|
186
|
-
}
|
|
187
|
-
if (keys.some((k)=>k === '')) {
|
|
188
|
-
this.errorMsg = 'Keys cannot be empty';
|
|
189
|
-
this.render(false);
|
|
190
|
-
return;
|
|
191
|
-
}
|
|
192
|
-
const result = {};
|
|
193
|
-
this.items.forEach((item)=>{
|
|
194
|
-
result[item.key] = item.value;
|
|
195
|
-
});
|
|
196
|
-
this.submit(result);
|
|
197
|
-
return;
|
|
198
|
-
}
|
|
199
|
-
// Backspace
|
|
200
|
-
if (char === '\u0008' || char === '\x7f') {
|
|
201
|
-
const item = this.items[this.rowIndex];
|
|
202
|
-
if (this.colIndex === 0) {
|
|
203
|
-
if (item.key.length > 0) {
|
|
204
|
-
item.key = item.key.slice(0, -1);
|
|
205
|
-
this.updateGhost();
|
|
206
|
-
} else {
|
|
207
|
-
this.ghost = '';
|
|
208
|
-
}
|
|
209
|
-
} else {
|
|
210
|
-
if (item.value.length > 0) item.value = item.value.slice(0, -1);
|
|
211
|
-
}
|
|
212
|
-
this.render(false);
|
|
213
|
-
return;
|
|
214
|
-
}
|
|
215
|
-
// Typing
|
|
216
|
-
if (!/^[\x00-\x1F]/.test(char)) {
|
|
217
|
-
const item = this.items[this.rowIndex];
|
|
218
|
-
if (this.colIndex === 0) {
|
|
219
|
-
item.key += char;
|
|
220
|
-
this.updateGhost();
|
|
221
|
-
} else {
|
|
222
|
-
item.value += char;
|
|
223
|
-
}
|
|
224
|
-
this.render(false);
|
|
225
|
-
}
|
|
226
|
-
}
|
|
227
|
-
handleMouse(event) {
|
|
228
|
-
if (event.action === 'scroll') {
|
|
229
|
-
if (event.scroll === 'up') {
|
|
230
|
-
if (this.rowIndex > 0) {
|
|
231
|
-
this.rowIndex--;
|
|
232
|
-
this.ghost = '';
|
|
233
|
-
this.render(false);
|
|
234
|
-
}
|
|
235
|
-
} else if (event.scroll === 'down') {
|
|
236
|
-
if (this.rowIndex < this.items.length - 1) {
|
|
237
|
-
this.rowIndex++;
|
|
238
|
-
this.ghost = '';
|
|
239
|
-
this.render(false);
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
|
-
}
|
|
244
|
-
constructor(options){
|
|
245
|
-
super(options), _define_property(this, "items", []), _define_property(this, "rowIndex", 0), _define_property(this, "colIndex", 0) // 0: Key, 1: Value
|
|
246
|
-
, _define_property(this, "scrollTop", 0), _define_property(this, "pageSize", 7), _define_property(this, "errorMsg", ''), _define_property(this, "ghost", '');
|
|
247
|
-
if (options.initial) {
|
|
248
|
-
this.items = Object.entries(options.initial).map(([key, value])=>({
|
|
249
|
-
key,
|
|
250
|
-
value
|
|
251
|
-
}));
|
|
252
|
-
}
|
|
253
|
-
if (this.items.length === 0) {
|
|
254
|
-
this.items.push({
|
|
255
|
-
key: '',
|
|
256
|
-
value: ''
|
|
257
|
-
});
|
|
258
|
-
}
|
|
259
|
-
}
|
|
260
|
-
};
|
|
261
|
-
|
|
262
|
-
//# sourceMappingURL=map.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/prompts/map.ts"],"sourcesContent":["import { ANSI } from '../ansi';\nimport { Prompt } from '../base';\nimport { theme } from '../theme';\nimport { symbols } from '../symbols';\nimport { MapOptions, MouseEvent } from '../types';\nimport { stringWidth } from '../utils';\n\ninterface MapItem {\n key: string;\n value: string;\n}\n\nexport class MapPrompt extends Prompt<Record<string, string>, MapOptions> {\n private items: MapItem[] = [];\n private rowIndex: number = 0;\n private colIndex: number = 0; // 0: Key, 1: Value\n private scrollTop: number = 0;\n private readonly pageSize: number = 7;\n private errorMsg: string = '';\n private ghost: string = '';\n\n constructor(options: MapOptions) {\n super(options);\n if (options.initial) {\n this.items = Object.entries(options.initial).map(([key, value]) => ({ key, value }));\n }\n if (this.items.length === 0) {\n this.items.push({ key: '', value: '' });\n }\n }\n\n protected render(_firstRender: boolean) {\n let output = '';\n\n // Title\n const icon = this.errorMsg ? `${theme.error}${symbols.cross}` : `${theme.success}?`;\n output += `${icon} ${ANSI.BOLD}${theme.title}${this.options.message}${ANSI.RESET}\\n`;\n\n // Layout Calculation\n const maxKeyWidth = Math.max(\n 5, // Minimum width\n ...this.items.map((item, idx) => {\n // Include ghost length in calculation if it's the active row\n const ghostLen = (idx === this.rowIndex && this.colIndex === 0) ? stringWidth(this.ghost) : 0;\n return stringWidth(item.key) + ghostLen;\n })\n ) + 2; // Padding\n\n // Scrolling Logic\n if (this.rowIndex < this.scrollTop) {\n this.scrollTop = this.rowIndex;\n } else if (this.rowIndex >= this.scrollTop + this.pageSize) {\n this.scrollTop = this.rowIndex - this.pageSize + 1;\n }\n // Clamping\n const maxScroll = Math.max(0, this.items.length - this.pageSize);\n this.scrollTop = Math.min(this.scrollTop, maxScroll);\n\n // Header\n const keyHeader = this.pad('Key', maxKeyWidth);\n output += ` ${ANSI.BOLD}${keyHeader}Value${ANSI.RESET}\\n`;\n\n // Rows\n const visibleItems = this.items.slice(this.scrollTop, this.scrollTop + this.pageSize);\n\n visibleItems.forEach((item, index) => {\n const actualIndex = this.scrollTop + index;\n if (index > 0) output += '\\n';\n\n const isRowActive = actualIndex === this.rowIndex;\n const pointer = isRowActive ? `${theme.main}${symbols.pointer}${ANSI.RESET} ` : ' ';\n\n // Render Key\n let keyStr = item.key;\n let ghostStr = '';\n \n if (isRowActive && this.colIndex === 0) {\n if (this.ghost) {\n ghostStr = `${theme.muted}${this.ghost}${ANSI.RESET}`;\n }\n keyStr = `${theme.main}${ANSI.UNDERLINE}${keyStr}${ANSI.RESET}${ghostStr}`;\n }\n\n // Adjust padding manually\n // We need visual width of key + ghost (if active)\n const keyVisualWidth = stringWidth(item.key) + (isRowActive && this.colIndex === 0 ? stringWidth(this.ghost) : 0);\n const padding = ' '.repeat(Math.max(0, maxKeyWidth - keyVisualWidth));\n\n // Render Value\n let valStr = item.value;\n if (isRowActive && this.colIndex === 1) {\n valStr = `${theme.main}${ANSI.UNDERLINE}${valStr || ' '}${ANSI.RESET}`;\n }\n\n output += `${pointer}${keyStr}${padding}${valStr}`;\n });\n\n // Instructions\n output += `\\n${ANSI.DIM}(Ctrl+N: Add, Ctrl+D: Del)${ANSI.RESET}`;\n\n if (this.errorMsg) {\n output += `\\n${theme.error}>> ${this.errorMsg}${ANSI.RESET}`;\n }\n\n this.renderFrame(output);\n }\n\n private pad(str: string, width: number): string {\n const len = stringWidth(str);\n if (len >= width) return str;\n return str + ' '.repeat(width - len);\n }\n\n private updateGhost() {\n this.ghost = '';\n if (this.colIndex !== 0 || !this.options.suggestions) return;\n \n const currentKey = this.items[this.rowIndex].key;\n if (!currentKey) return;\n\n const lowerKey = currentKey.toLowerCase();\n \n // Find first match\n const match = this.options.suggestions.find(s => s.toLowerCase().startsWith(lowerKey) && s.length > currentKey.length);\n \n if (match) {\n this.ghost = match.slice(currentKey.length);\n }\n }\n\n protected handleInput(char: string) {\n this.errorMsg = '';\n\n // Tab (Accept Suggestion) or Toggle Column\n if (char === '\\t') {\n if (this.colIndex === 0 && this.ghost) {\n this.items[this.rowIndex].key += this.ghost;\n this.ghost = '';\n this.render(false);\n return;\n }\n // Standard Tab behavior (toggle column)\n this.colIndex = this.colIndex === 0 ? 1 : 0;\n this.ghost = ''; // Clear ghost when changing columns\n this.render(false);\n return;\n }\n\n // Navigation\n if (this.isUp(char)) {\n if (this.rowIndex > 0) this.rowIndex--;\n this.ghost = '';\n this.render(false);\n return;\n }\n if (this.isDown(char)) {\n if (this.rowIndex < this.items.length - 1) {\n this.rowIndex++;\n } else {\n // Down at last row adds new row\n this.items.push({ key: '', value: '' });\n this.rowIndex++;\n this.colIndex = 0; \n }\n this.ghost = '';\n this.render(false);\n return;\n }\n if (this.isRight(char) || this.isLeft(char)) {\n this.colIndex = this.colIndex === 0 ? 1 : 0;\n this.ghost = '';\n this.render(false);\n return;\n }\n\n // CRUD\n if (char === '\\x0e') { // Ctrl+N\n this.items.push({ key: '', value: '' });\n this.rowIndex = this.items.length - 1;\n this.colIndex = 0;\n this.ghost = '';\n this.render(false);\n return;\n }\n\n if (char === '\\x04') { // Ctrl+D\n if (this.items.length > 1) {\n this.items.splice(this.rowIndex, 1);\n if (this.rowIndex >= this.items.length) {\n this.rowIndex = this.items.length - 1;\n }\n } else {\n this.items[0] = { key: '', value: '' };\n }\n this.ghost = '';\n this.render(false);\n return;\n }\n\n // Submit\n if (char === '\\r' || char === '\\n') {\n // Validate duplicates\n const keys = this.items.map(i => i.key);\n const duplicates = keys.filter((item, index) => keys.indexOf(item) !== index && item !== '');\n if (duplicates.length > 0) {\n this.errorMsg = `Duplicate keys found: ${duplicates.join(', ')}`;\n this.render(false);\n return;\n }\n if (keys.some(k => k === '')) {\n this.errorMsg = 'Keys cannot be empty';\n this.render(false);\n return;\n }\n\n const result: Record<string, string> = {};\n this.items.forEach(item => {\n result[item.key] = item.value;\n });\n this.submit(result);\n return;\n }\n\n // Backspace\n if (char === '\\u0008' || char === '\\x7f') {\n const item = this.items[this.rowIndex];\n if (this.colIndex === 0) {\n if (item.key.length > 0) {\n item.key = item.key.slice(0, -1);\n this.updateGhost();\n } else {\n this.ghost = '';\n }\n } else {\n if (item.value.length > 0) item.value = item.value.slice(0, -1);\n }\n this.render(false);\n return;\n }\n\n // Typing\n if (!/^[\\x00-\\x1F]/.test(char)) {\n const item = this.items[this.rowIndex];\n if (this.colIndex === 0) {\n item.key += char;\n this.updateGhost();\n } else {\n item.value += char;\n }\n this.render(false);\n }\n }\n\n protected handleMouse(event: MouseEvent) {\n if (event.action === 'scroll') {\n if (event.scroll === 'up') {\n if (this.rowIndex > 0) {\n this.rowIndex--;\n this.ghost = '';\n this.render(false);\n }\n } else if (event.scroll === 'down') {\n if (this.rowIndex < this.items.length - 1) {\n this.rowIndex++;\n this.ghost = '';\n this.render(false);\n }\n }\n }\n }\n}\n"],"names":["MapPrompt","Prompt","render","_firstRender","output","icon","errorMsg","theme","error","symbols","cross","success","ANSI","BOLD","title","options","message","RESET","maxKeyWidth","Math","max","items","map","item","idx","ghostLen","rowIndex","colIndex","stringWidth","ghost","key","scrollTop","pageSize","maxScroll","length","min","keyHeader","pad","visibleItems","slice","forEach","index","actualIndex","isRowActive","pointer","main","keyStr","ghostStr","muted","UNDERLINE","keyVisualWidth","padding","repeat","valStr","value","DIM","renderFrame","str","width","len","updateGhost","suggestions","currentKey","lowerKey","toLowerCase","match","find","s","startsWith","handleInput","char","isUp","isDown","push","isRight","isLeft","splice","keys","i","duplicates","filter","indexOf","join","some","k","result","submit","test","handleMouse","event","action","scroll","initial","Object","entries"],"mappings":"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"}
|