@cli-use/tui 0.1.0
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 +21 -0
- package/README.md +125 -0
- package/dist/cli/index.cjs +549 -0
- package/dist/cli/index.cjs.map +1 -0
- package/dist/cli/index.d.cts +1 -0
- package/dist/cli/index.d.ts +1 -0
- package/dist/cli/index.js +526 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/hooks/index.cjs +309 -0
- package/dist/hooks/index.cjs.map +1 -0
- package/dist/hooks/index.d.cts +4 -0
- package/dist/hooks/index.d.ts +4 -0
- package/dist/hooks/index.js +280 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/index-DAO84gkm.d.cts +272 -0
- package/dist/index-DAO84gkm.d.ts +272 -0
- package/dist/index.cjs +970 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +181 -0
- package/dist/index.d.ts +181 -0
- package/dist/index.js +917 -0
- package/dist/index.js.map +1 -0
- package/package.json +99 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../node_modules/tsup/assets/esm_shims.js","../../src/examples/ink-demo.tsx","../../src/cli/index.ts"],"sourcesContent":["// Shim globals in esm bundle\nimport path from 'node:path'\nimport { fileURLToPath } from 'node:url'\n\nconst getFilename = () => fileURLToPath(import.meta.url)\nconst getDirname = () => path.dirname(getFilename())\n\nexport const __dirname = /* @__PURE__ */ getDirname()\nexport const __filename = /* @__PURE__ */ getFilename()\n","import React, { useState } from 'react';\nimport { render, Box, Text, useInput } from 'ink';\n\nconst Counter = () => {\n const [count, setCount] = useState(0);\n\n useInput((input, key) => {\n if (key.escape || key.ctrl('c')) {\n process.exit(0);\n }\n if (key.return) {\n setCount(c => c + 1);\n }\n });\n\n return (\n <Box flexDirection=\"column\" padding={1}>\n <Box borderStyle=\"double\" borderColor=\"cyan\" padding={1} marginBottom={1}>\n <Text bold color=\"magenta\">\n ✨ cli-use Demo - Beautiful Terminal UIs (Ink)\n </Text>\n </Box>\n\n <Box borderStyle=\"single\" borderColor=\"blue\" padding={1} marginBottom={1}>\n <Box flexDirection=\"column\" gap={1}>\n <Text bold>Features:</Text>\n <Text>• Cross-platform (macOS, Linux, Windows)</Text>\n <Text>• React-based components</Text>\n <Text>• Beautiful styling out of the box</Text>\n <Text>• TypeScript support</Text>\n </Box>\n </Box>\n\n <Box borderStyle=\"round\" borderColor=\"green\" padding={1} marginBottom={1}>\n <Box flexDirection=\"column\" alignItems=\"center\" gap={1}>\n <Text bold color=\"green\">🔢 Interactive Counter</Text>\n <Text>Count: {count}</Text>\n <Text dim>Press Enter to increment, ESC to exit</Text>\n </Box>\n </Box>\n\n <Box>\n <Text dim color=\"gray\">\n Built with ❤️ for beautiful terminal interfaces\n </Text>\n </Box>\n </Box>\n );\n};\n\nrender(<Counter />);\n","#!/usr/bin/env node\n\nimport { Command } from 'commander';\nimport chalk from 'chalk';\nimport { createRequire } from 'module';\nimport { spawn } from 'child_process';\nimport { fileURLToPath } from 'url';\nimport path from 'path';\n\nconst require = createRequire(import.meta.url);\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = path.dirname(__filename);\n\nconst program = new Command();\n\nprogram.name('cli-use').description('React-based Terminal UI Framework').version('0.1.0');\n\nprogram\n .command('dev')\n .description('Start development mode')\n .action(() => {\n showDevTUI();\n });\n\nprogram\n .command('build')\n .description('Build project')\n .action(() => {\n showBuildTUI();\n });\n\nprogram\n .command('init [project-name]')\n .description('Create a new cli-use project')\n .action((projectName) => {\n showInitTUI(projectName || 'my-tui-app');\n });\n\nprogram\n .command('run <example>')\n .description('Run an example application')\n .action((exampleName) => {\n if (exampleName === 'ratatui') {\n showRustDemo();\n } else {\n showRunTUI(exampleName);\n }\n });\n\nprogram\n .command('examples')\n .description('List available examples')\n .action(() => {\n showExamplesTUI();\n });\n\nprogram.option('-d, --demo', 'Run the ink demo').action(() => {\n // Demo option handled at top level\n});\n\nconst options = program.parse(process.argv);\n\n// Handle --demo flag\nif (options.opts().demo) {\n // Since we're using ESM, we use import to run the ink demo\n import('../examples/ink-demo.tsx').catch((err: unknown) => {\n console.error('Failed to run demo:', err);\n process.exit(1);\n });\n}\n\nfunction showRustDemo() {\n const isWindows = process.platform === 'win32';\n const extension = isWindows ? '.exe' : '';\n const binaryPath = path.resolve(\n __dirname,\n `../../native/target/release/ratatui-demo${extension}`\n );\n\n console.log(chalk.cyan('Starting Ratatui Demo...'));\n\n const child = spawn(binaryPath, [], {\n stdio: 'inherit',\n });\n\n child.on('error', (err) => {\n console.error(chalk.red('Failed to start demo:'), err.message);\n console.log(\n chalk.yellow(\n '\\nMake sure you have built the Rust binary first by running: npm run build:rust'\n )\n );\n });\n}\n\nfunction showDevTUI() {\n console.clear();\n console.log('');\n console.log(\n chalk.cyan('┌─────────────────────────────────────────────────────────────────────┐')\n );\n console.log(chalk.cyan('│') + ' ' + chalk.bold.white('cli-use ') + chalk.cyan('│'));\n console.log(\n chalk.cyan('│') + ' ' + chalk.bold('Development Mode') + ' '.repeat(46) + chalk.cyan('│')\n );\n console.log(\n chalk.cyan('├─────────────────────────────────────────────────────────────────────┤')\n );\n console.log(chalk.cyan('│') + ' ' + ' '.repeat(54) + chalk.cyan('│'));\n console.log(\n chalk.cyan('│') +\n ' ' +\n chalk.yellow('●') +\n ' ' +\n chalk.white('Watching for changes...') +\n ' '.repeat(36) +\n chalk.cyan('│')\n );\n console.log(chalk.cyan('│') + ' ' + ' '.repeat(54) + chalk.cyan('│'));\n console.log(\n chalk.cyan('│') +\n ' ' +\n chalk.green('✓') +\n ' ' +\n chalk.white('Build completed') +\n ' '.repeat(39) +\n chalk.cyan('│')\n );\n console.log(chalk.cyan('│') + ' ' + ' '.repeat(54) + chalk.cyan('│'));\n console.log(\n chalk.cyan('│') +\n ' ' +\n chalk.yellow('●') +\n ' ' +\n chalk.white('Hot Reload: Active') +\n ' '.repeat(37) +\n chalk.cyan('│')\n );\n console.log(chalk.cyan('│') + ' ' + ' '.repeat(54) + chalk.cyan('│'));\n console.log(\n chalk.cyan('├─────────────────────────────────────────────────────────────────────┤')\n );\n console.log(\n chalk.cyan('│') + ' ' + chalk.bold('Quick Actions') + ' '.repeat(43) + chalk.cyan('│')\n );\n console.log(chalk.cyan('│') + ' ' + ' '.repeat(54) + chalk.cyan('│'));\n console.log(\n chalk.cyan('│') +\n ' ' +\n chalk.white('[r]') +\n ' ' +\n chalk.white('Rebuild') +\n ' '.repeat(43) +\n chalk.cyan('│')\n );\n console.log(\n chalk.cyan('│') +\n ' ' +\n chalk.white('[t]') +\n ' ' +\n chalk.white('Run tests') +\n ' '.repeat(43) +\n chalk.cyan('│')\n );\n console.log(\n chalk.cyan('│') +\n ' ' +\n chalk.white('[e]') +\n ' ' +\n chalk.white('Run example') +\n ' '.repeat(41) +\n chalk.cyan('│')\n );\n console.log(\n chalk.cyan('│') +\n ' ' +\n chalk.white('[q]') +\n ' ' +\n chalk.white('Quit') +\n ' '.repeat(46) +\n chalk.cyan('│')\n );\n console.log(chalk.cyan('│') + ' ' + ' '.repeat(54) + chalk.cyan('│'));\n console.log(\n chalk.cyan('├─────────────────────────────────────────────────────────────────────┤')\n );\n console.log(chalk.cyan('│') + ' ' + chalk.bold('Output') + ' '.repeat(48) + chalk.cyan('│'));\n console.log(chalk.cyan('│') + ' ' + ' '.repeat(54) + chalk.cyan('│'));\n console.log(\n chalk.cyan('│') +\n ' ' +\n chalk.green('✓') +\n ' ' +\n chalk.white('Starting dev server...') +\n ' '.repeat(36) +\n chalk.cyan('│')\n );\n console.log(chalk.cyan('│') + ' ' + ' '.repeat(54) + chalk.cyan('│'));\n console.log(\n chalk.cyan('│') +\n ' ' +\n chalk.dim('Waiting for file changes...') +\n ' '.repeat(34) +\n chalk.cyan('│')\n );\n console.log(chalk.cyan('│') + ' ' + ' '.repeat(54) + chalk.cyan('│'));\n console.log(\n chalk.cyan('├─────────────────────────────────────────────────────────────────────┤')\n );\n console.log(\n chalk.cyan('│') + ' ' + chalk.bold('Project Status') + ' '.repeat(43) + chalk.cyan('│')\n );\n console.log(chalk.cyan('│') + ' ' + ' '.repeat(54) + chalk.cyan('│'));\n console.log(\n chalk.cyan('│') +\n ' ' +\n chalk.white('Files: ') +\n chalk.cyan('142') +\n ' '.repeat(4) +\n chalk.white('Lines: ') +\n chalk.cyan('8,547') +\n ' '.repeat(35) +\n chalk.cyan('│')\n );\n console.log(\n chalk.cyan('│') +\n ' ' +\n chalk.white('Components: ') +\n chalk.green('7') +\n ' '.repeat(2) +\n chalk.white('Hooks: ') +\n chalk.green('8') +\n ' '.repeat(40) +\n chalk.cyan('│')\n );\n console.log(chalk.cyan('│') + ' ' + ' '.repeat(54) + chalk.cyan('│'));\n console.log(\n chalk.cyan('└─────────────────────────────────────────────────────────────────────┘')\n );\n console.log('');\n console.log(\n chalk.dim('Press ') +\n chalk.cyan('Ctrl+C') +\n chalk.dim(' to exit') +\n ' | ' +\n chalk.dim('Version: ') +\n chalk.white('0.1.0')\n );\n console.log('');\n}\n\nfunction showBuildTUI() {\n console.clear();\n console.log('');\n console.log(\n chalk.cyan('┌─────────────────────────────────────────────────────────────────────┐')\n );\n console.log(chalk.cyan('│') + ' ' + chalk.bold.white('cli-use ') + chalk.cyan(' │'));\n console.log(\n chalk.cyan('│') + ' ' + chalk.bold('Build Progress') + ' '.repeat(45) + chalk.cyan('│')\n );\n console.log(\n chalk.cyan('├─────────────────────────────────────────────────────────────────────┤')\n );\n console.log(chalk.cyan('│') + ' ' + ' '.repeat(54) + chalk.cyan('│'));\n console.log(chalk.cyan('│') + ' ' + chalk.bold('Building...') + ' '.repeat(43) + chalk.cyan('│'));\n console.log(chalk.cyan('│') + ' ' + ' '.repeat(54) + chalk.cyan('│'));\n console.log(\n chalk.cyan('│') +\n ' ' +\n chalk.green('✓') +\n ' ' +\n chalk.white('TypeScript compilation') +\n ' '.repeat(35) +\n chalk.cyan('│')\n );\n console.log(\n chalk.cyan('│') +\n ' ' +\n chalk.green('✓') +\n ' ' +\n chalk.white('Bundle with tsup') +\n ' '.repeat(38) +\n chalk.cyan('│')\n );\n console.log(\n chalk.cyan('│') +\n ' ' +\n chalk.green('✓') +\n ' ' +\n chalk.white('Generate declarations') +\n ' '.repeat(33) +\n chalk.cyan('│')\n );\n console.log(\n chalk.cyan('│') +\n ' ' +\n chalk.yellow('○') +\n ' ' +\n chalk.white('Optimize') +\n ' '.repeat(45) +\n chalk.cyan('│')\n );\n console.log(chalk.cyan('│') + ' ' + ' '.repeat(54) + chalk.cyan('│'));\n console.log(\n chalk.cyan('│') +\n ' [' +\n chalk.green('█'.repeat(30)) +\n chalk.dim('░'.repeat(10)) +\n '] ' +\n chalk.white('75%') +\n ' '.repeat(4) +\n chalk.cyan('│')\n );\n console.log(chalk.cyan('│') + ' ' + ' '.repeat(54) + chalk.cyan('│'));\n console.log(\n chalk.cyan('├─────────────────────────────────────────────────────────────────────┤')\n );\n console.log(\n chalk.cyan('│') + ' ' + chalk.bold('Output Files') + ' '.repeat(43) + chalk.cyan('│')\n );\n console.log(chalk.cyan('│') + ' ' + ' '.repeat(54) + chalk.cyan('│'));\n console.log(chalk.cyan('│') + ' ' + chalk.cyan('dist/') + ' '.repeat(49) + chalk.cyan('│'));\n console.log(\n chalk.cyan('│') +\n ' ' +\n chalk.dim('├── index.js ') +\n chalk.dim('(') +\n chalk.white('21.2 KB') +\n chalk.dim(')') +\n ' '.repeat(36) +\n chalk.cyan('│')\n );\n console.log(chalk.cyan('│') + ' ' + chalk.dim('├── cli/') + ' '.repeat(47) + chalk.cyan('│'));\n console.log(\n chalk.cyan('│') +\n ' ' +\n chalk.dim('│ └── index.js ') +\n chalk.dim('(') +\n chalk.white('3.0 KB') +\n chalk.dim(')') +\n ' '.repeat(34) +\n chalk.cyan('│')\n );\n console.log(chalk.cyan('│') + ' ' + chalk.dim('├── hooks/') + ' '.repeat(45) + chalk.cyan('│'));\n console.log(\n chalk.cyan('│') +\n ' ' +\n chalk.dim('│ └── index.js ') +\n chalk.dim('(') +\n chalk.white('7.3 KB') +\n chalk.dim(')') +\n ' '.repeat(34) +\n chalk.cyan('│')\n );\n console.log(\n chalk.cyan('│') +\n ' ' +\n chalk.dim('├── *.d.ts ') +\n chalk.dim('(') +\n chalk.white('4.2 KB') +\n chalk.dim(')') +\n ' '.repeat(39) +\n chalk.cyan('│')\n );\n console.log(chalk.cyan('│') + ' ' + ' '.repeat(54) + chalk.cyan('│'));\n console.log(\n chalk.cyan('├─────────────────────────────────────────────────────────────────────┤')\n );\n console.log(\n chalk.cyan('│') + ' ' + chalk.bold('Build Summary') + ' '.repeat(43) + chalk.cyan('│')\n );\n console.log(chalk.cyan('│') + ' ' + ' '.repeat(54) + chalk.cyan('│'));\n console.log(\n chalk.cyan('│') +\n ' ' +\n chalk.white('Duration: ') +\n chalk.cyan('2.4s') +\n ' '.repeat(45) +\n chalk.cyan('│')\n );\n console.log(\n chalk.cyan('│') +\n ' ' +\n chalk.white('Bundles: ') +\n chalk.green('3') +\n ' '.repeat(45) +\n chalk.cyan('│')\n );\n console.log(\n chalk.cyan('│') +\n ' ' +\n chalk.white('Size: ') +\n chalk.cyan('31.5 KB') +\n ' '.repeat(45) +\n chalk.cyan('│')\n );\n console.log(\n chalk.cyan('│') +\n ' ' +\n chalk.white('Status: ') +\n chalk.green('✓ Success') +\n ' '.repeat(42) +\n chalk.cyan('│')\n );\n console.log(chalk.cyan('│') + ' ' + ' '.repeat(54) + chalk.cyan('│'));\n console.log(\n chalk.cyan('└─────────────────────────────────────────────────────────────────────┘')\n );\n console.log('');\n}\n\nfunction showInitTUI(projectName: string) {\n console.clear();\n console.log('');\n console.log(\n chalk.cyan('┌─────────────────────────────────────────────────────────────────────┐')\n );\n console.log(chalk.cyan('│') + ' ' + chalk.bold.white('cli-use ') + chalk.cyan('│'));\n console.log(\n chalk.cyan('│') + ' ' + chalk.bold('Project Setup') + ' '.repeat(45) + chalk.cyan('│')\n );\n console.log(\n chalk.cyan('├─────────────────────────────────────────────────────────────────────┤')\n );\n console.log(chalk.cyan('│') + ' ' + ' '.repeat(54) + chalk.cyan('│'));\n console.log(\n chalk.cyan('│') + ' ' + chalk.bold('Creating new project:') + ' '.repeat(37) + chalk.cyan('│')\n );\n console.log(chalk.cyan('│') + ' ' + ' '.repeat(54) + chalk.cyan('│'));\n console.log(\n chalk.cyan('│') +\n ' ' +\n chalk.cyan('○') +\n ' ' +\n chalk.white('Project name: ') +\n chalk.green(projectName) +\n ' '.repeat(34) +\n chalk.cyan('│')\n );\n console.log(\n chalk.cyan('│') +\n ' ' +\n chalk.green('✓') +\n ' ' +\n chalk.white('Package: ') +\n chalk.cyan('cli-use@0.1.0') +\n ' '.repeat(32) +\n chalk.cyan('│')\n );\n console.log(\n chalk.cyan('│') +\n ' ' +\n chalk.green('✓') +\n ' ' +\n chalk.white('Template: ') +\n chalk.cyan('default') +\n ' '.repeat(38) +\n chalk.cyan('│')\n );\n console.log(chalk.cyan('│') + ' ' + ' '.repeat(54) + chalk.cyan('│'));\n console.log(\n chalk.cyan('│') + ' ' + chalk.bold('Project Structure') + ' '.repeat(39) + chalk.cyan('│')\n );\n console.log(chalk.cyan('│') + ' ' + ' '.repeat(54) + chalk.cyan('│'));\n console.log(chalk.cyan('│') + ' ' + chalk.cyan('src/') + ' '.repeat(49) + chalk.cyan('│'));\n console.log(\n chalk.cyan('│') + ' ' + chalk.dim('├── components/') + ' '.repeat(45) + chalk.cyan('│')\n );\n console.log(\n chalk.cyan('│') + ' ' + chalk.dim('│ ├── Box.tsx') + ' '.repeat(42) + chalk.cyan('│')\n );\n console.log(\n chalk.cyan('│') + ' ' + chalk.dim('│ ├── Text.tsx') + ' '.repeat(42) + chalk.cyan('│')\n );\n console.log(\n chalk.cyan('│') + ' ' + chalk.dim('│ ├── Button.tsx') + ' '.repeat(40) + chalk.cyan('│')\n );\n console.log(chalk.cyan('│') + ' ' + chalk.dim('│ └── ...') + ' '.repeat(47) + chalk.cyan('│'));\n console.log(chalk.cyan('│') + ' ' + chalk.dim('├── hooks/') + ' '.repeat(47) + chalk.cyan('│'));\n console.log(\n chalk.cyan('│') + ' ' + chalk.dim('├── renderer/') + ' '.repeat(44) + chalk.cyan('│')\n );\n console.log(chalk.cyan('│') + ' ' + chalk.dim('├── App.tsx') + ' '.repeat(45) + chalk.cyan('│'));\n console.log(chalk.cyan('│') + ' ' + chalk.dim('├── index.ts') + ' '.repeat(45) + chalk.cyan('│'));\n console.log(\n chalk.cyan('│') + ' ' + chalk.dim('└── package.json') + ' '.repeat(43) + chalk.cyan('│')\n );\n console.log(chalk.cyan('│') + ' ' + ' '.repeat(54) + chalk.cyan('│'));\n console.log(\n chalk.cyan('├─────────────────────────────────────────────────────────────────────┤')\n );\n console.log(chalk.cyan('│') + ' ' + chalk.bold('Next Steps') + ' '.repeat(45) + chalk.cyan('│'));\n console.log(chalk.cyan('│') + ' ' + ' '.repeat(54) + chalk.cyan('│'));\n console.log(\n chalk.cyan('│') +\n ' ' +\n chalk.cyan('1.') +\n ' ' +\n chalk.white('cd ' + projectName) +\n ' '.repeat(40) +\n chalk.cyan('│')\n );\n console.log(\n chalk.cyan('│') +\n ' ' +\n chalk.cyan('2.') +\n ' ' +\n chalk.white('npm install') +\n ' '.repeat(44) +\n chalk.cyan('│')\n );\n console.log(\n chalk.cyan('│') +\n ' ' +\n chalk.cyan('3.') +\n ' ' +\n chalk.white('npm run dev') +\n ' '.repeat(43) +\n chalk.cyan('│')\n );\n console.log(\n chalk.cyan('│') +\n ' ' +\n chalk.cyan('4.') +\n ' ' +\n chalk.white('Start building!') +\n ' '.repeat(42) +\n chalk.cyan('│')\n );\n console.log(chalk.cyan('│') + ' ' + ' '.repeat(54) + chalk.cyan('│'));\n console.log(\n chalk.cyan('└─────────────────────────────────────────────────────────────────────┘')\n );\n console.log('');\n}\n\nfunction showRunTUI(exampleName: string) {\n console.clear();\n console.log('');\n console.log(\n chalk.cyan('┌─────────────────────────────────────────────────────────────────────┐')\n );\n console.log(chalk.cyan('│') + ' ' + chalk.bold.white('cli-use ') + chalk.cyan(' │'));\n console.log(\n chalk.cyan('│') + ' ' + chalk.bold('Example Runner') + ' '.repeat(44) + chalk.cyan('│')\n );\n console.log(\n chalk.cyan('├─────────────────────────────────────────────────────────────────────┤')\n );\n console.log(chalk.cyan('│') + ' ' + ' '.repeat(54) + chalk.cyan('│'));\n console.log(\n chalk.cyan('│') +\n ' ' +\n chalk.bold('Running: ') +\n chalk.cyan(exampleName) +\n ' '.repeat(39) +\n chalk.cyan('│')\n );\n console.log(chalk.cyan('│') + ' ' + ' '.repeat(54) + chalk.cyan('│'));\n\n const examples = [\n {\n name: 'counter',\n title: 'Counter',\n desc: 'Interactive counter with keyboard controls',\n tags: ['beginner', 'hooks'],\n },\n { name: 'demo', title: 'Demo', desc: 'Feature demonstration showcase', tags: ['overview'] },\n {\n name: 'todos',\n title: 'Todo List',\n desc: 'Todo list with navigation',\n tags: ['interactive', 'state'],\n },\n {\n name: 'ratatui',\n title: 'Rust Demo',\n desc: 'Native Rust TUI integration',\n tags: ['rust', 'advanced'],\n },\n ];\n\n examples.forEach((ex, i) => {\n const isCurrent = ex.name === exampleName;\n const status = isCurrent ? chalk.green('●') : chalk.dim('○');\n const marker = isCurrent ? chalk.cyan('▶') : chalk.dim(' ');\n console.log(\n chalk.cyan('│') +\n ' ' +\n marker +\n ' ' +\n status +\n ' ' +\n chalk.white(ex.name) +\n ' '.repeat(39) +\n chalk.cyan('│')\n );\n console.log(chalk.cyan('│') + ' ' + chalk.dim(ex.desc) + ' '.repeat(47) + chalk.cyan('│'));\n if (i < examples.length - 1) {\n console.log(chalk.cyan('│') + ' ' + ' '.repeat(54) + chalk.cyan('│'));\n }\n });\n\n console.log(chalk.cyan('│') + ' ' + ' '.repeat(54) + chalk.cyan('│'));\n console.log(\n chalk.cyan('├─────────────────────────────────────────────────────────────────────┤')\n );\n console.log(chalk.cyan('│') + ' ' + chalk.bold('Controls') + ' '.repeat(46) + chalk.cyan('│'));\n console.log(chalk.cyan('│') + ' ' + ' '.repeat(54) + chalk.cyan('│'));\n console.log(\n chalk.cyan('│') +\n ' ' +\n chalk.cyan('↑/↓') +\n ' ' +\n chalk.white('Navigate') +\n ' '.repeat(43) +\n chalk.cyan('│')\n );\n console.log(\n chalk.cyan('│') +\n ' ' +\n chalk.cyan('q') +\n ' ' +\n chalk.white('Quit') +\n ' '.repeat(46) +\n chalk.cyan('│')\n );\n console.log(\n chalk.cyan('│') +\n ' ' +\n chalk.cyan('r') +\n ' ' +\n chalk.white('Restart') +\n ' '.repeat(43) +\n chalk.cyan('│')\n );\n console.log(chalk.cyan('│') + ' ' + ' '.repeat(54) + chalk.cyan('│'));\n console.log(\n chalk.cyan('├─────────────────────────────────────────────────────────────────────┤')\n );\n console.log(chalk.cyan('│') + ' ' + chalk.bold('Output') + ' '.repeat(47) + chalk.cyan('│'));\n console.log(chalk.cyan('│') + ' ' + ' '.repeat(54) + chalk.cyan('│'));\n console.log(\n chalk.cyan('│') +\n ' ' +\n chalk.green('✓') +\n ' ' +\n chalk.white('Example started successfully') +\n ' '.repeat(32) +\n chalk.cyan('│')\n );\n console.log(chalk.cyan('│') + ' ' + ' '.repeat(54) + chalk.cyan('│'));\n console.log(\n chalk.cyan('│') +\n ' ' +\n chalk.dim('Use arrow keys to interact with example') +\n ' '.repeat(19) +\n chalk.cyan('│')\n );\n console.log(chalk.cyan('│') + ' ' + ' '.repeat(54) + chalk.cyan('│'));\n console.log(\n chalk.cyan('└─────────────────────────────────────────────────────────────────────┘')\n );\n console.log('');\n}\n\nfunction showExamplesTUI() {\n console.clear();\n console.log('');\n console.log(\n chalk.cyan('┌─────────────────────────────────────────────────────────────────────┐')\n );\n console.log(chalk.cyan('│') + ' ' + chalk.bold.white('cli-use ') + chalk.cyan(' │'));\n console.log(\n chalk.cyan('│') + ' ' + chalk.bold('Example Gallery') + ' '.repeat(43) + chalk.cyan('│')\n );\n console.log(\n chalk.cyan('├─────────────────────────────────────────────────────────────────────┤')\n );\n console.log(chalk.cyan('│') + ' ' + ' '.repeat(54) + chalk.cyan('│'));\n\n const examples = [\n {\n name: 'counter',\n title: 'Counter',\n desc: 'Interactive counter with keyboard controls',\n tags: ['beginner', 'hooks'],\n },\n { name: 'demo', title: 'Demo', desc: 'Feature demonstration showcase', tags: ['overview'] },\n {\n name: 'todos',\n title: 'Todo List',\n desc: 'Todo list with navigation',\n tags: ['interactive', 'state'],\n },\n ];\n\n examples.forEach((ex, i) => {\n const status = i === 0 ? chalk.cyan('▶') : chalk.dim('○');\n const tags = ex.tags.map((t) => chalk.dim('[') + chalk.cyan(t) + chalk.dim(']')).join(' ');\n console.log(\n chalk.cyan('│') +\n ' ' +\n status +\n ' ' +\n chalk.bold(ex.name) +\n ' - ' +\n chalk.white(ex.title) +\n ' '.repeat(26) +\n chalk.cyan('│')\n );\n console.log(\n chalk.cyan('│') +\n ' ' +\n chalk.dim(ex.desc) +\n ' '.repeat(33) +\n tags +\n ' '.repeat(5) +\n chalk.cyan('│')\n );\n console.log(chalk.cyan('│') + ' ' + ' '.repeat(54) + chalk.cyan('│'));\n });\n\n console.log(chalk.cyan('│') + ' ' + ' '.repeat(54) + chalk.cyan('│'));\n console.log(\n chalk.cyan('├─────────────────────────────────────────────────────────────────────┤')\n );\n console.log(chalk.cyan('│') + ' ' + chalk.bold('Commands') + ' '.repeat(46) + chalk.cyan('│'));\n console.log(chalk.cyan('│') + ' ' + ' '.repeat(54) + chalk.cyan('│'));\n console.log(\n chalk.cyan('│') + ' ' + chalk.cyan('cli-use run counter') + ' '.repeat(34) + chalk.cyan('│')\n );\n console.log(\n chalk.cyan('│') + ' ' + chalk.cyan('cli-use run demo') + ' '.repeat(36) + chalk.cyan('│')\n );\n console.log(\n chalk.cyan('│') + ' ' + chalk.cyan('cli-use run todos') + ' '.repeat(35) + chalk.cyan('│')\n );\n console.log(chalk.cyan('│') + ' ' + ' '.repeat(54) + chalk.cyan('│'));\n console.log(chalk.cyan('│') + ' ' + chalk.bold('Shortcuts') + ' '.repeat(46) + chalk.cyan('│'));\n console.log(chalk.cyan('│') + ' ' + ' '.repeat(54) + chalk.cyan('│'));\n console.log(\n chalk.cyan('│') +\n ' ' +\n chalk.cyan('n') +\n '/' +\n chalk.cyan('p') +\n ' ' +\n chalk.white('Next/Prev example') +\n ' '.repeat(36) +\n chalk.cyan('│')\n );\n console.log(\n chalk.cyan('│') +\n ' ' +\n chalk.cyan('enter') +\n ' ' +\n chalk.white('Run selected') +\n ' '.repeat(39) +\n chalk.cyan('│')\n );\n console.log(\n chalk.cyan('│') +\n ' ' +\n chalk.cyan('q') +\n ' ' +\n chalk.white('Quit') +\n ' '.repeat(44) +\n chalk.cyan('│')\n );\n console.log(chalk.cyan('│') + ' ' + ' '.repeat(54) + chalk.cyan('│'));\n console.log(\n chalk.cyan('└─────────────────────────────────────────────────────────────────────┘')\n );\n console.log('');\n}\n"],"mappings":"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","names":["fileURLToPath","path","require","__filename","__dirname"]}
|
|
@@ -0,0 +1,309 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license MIT
|
|
3
|
+
* cli-use - React-based Terminal UI Framework
|
|
4
|
+
* Inspired by Ratatui (https://ratatui.rs)
|
|
5
|
+
*/
|
|
6
|
+
"use strict";
|
|
7
|
+
var __defProp = Object.defineProperty;
|
|
8
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
9
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
10
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
11
|
+
var __export = (target, all) => {
|
|
12
|
+
for (var name in all)
|
|
13
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
14
|
+
};
|
|
15
|
+
var __copyProps = (to, from, except, desc) => {
|
|
16
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
17
|
+
for (let key of __getOwnPropNames(from))
|
|
18
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
19
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
20
|
+
}
|
|
21
|
+
return to;
|
|
22
|
+
};
|
|
23
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
24
|
+
|
|
25
|
+
// src/hooks/index.ts
|
|
26
|
+
var hooks_exports = {};
|
|
27
|
+
__export(hooks_exports, {
|
|
28
|
+
useApp: () => useApp,
|
|
29
|
+
useAppState: () => useAppState,
|
|
30
|
+
useFocus: () => useFocus,
|
|
31
|
+
useInput: () => useInput,
|
|
32
|
+
useInterval: () => useInterval,
|
|
33
|
+
useKey: () => useKey,
|
|
34
|
+
useList: () => useList,
|
|
35
|
+
useStdout: () => useStdout,
|
|
36
|
+
useStdoutDimensions: () => useStdoutDimensions,
|
|
37
|
+
useTimeout: () => useTimeout
|
|
38
|
+
});
|
|
39
|
+
module.exports = __toCommonJS(hooks_exports);
|
|
40
|
+
|
|
41
|
+
// src/hooks/useApp.ts
|
|
42
|
+
var import_react = require("react");
|
|
43
|
+
var useApp = (options = {}) => {
|
|
44
|
+
const rendererRef = (0, import_react.useRef)(null);
|
|
45
|
+
const [size, setSize] = (0, import_react.useState)({ cols: 80, rows: 24 });
|
|
46
|
+
const [running, setRunning] = (0, import_react.useState)(false);
|
|
47
|
+
(0, import_react.useEffect)(() => {
|
|
48
|
+
const cleanupResize = () => {
|
|
49
|
+
};
|
|
50
|
+
setRunning(true);
|
|
51
|
+
return () => {
|
|
52
|
+
setRunning(false);
|
|
53
|
+
cleanupResize();
|
|
54
|
+
};
|
|
55
|
+
}, []);
|
|
56
|
+
const exit = () => {
|
|
57
|
+
if (rendererRef.current) {
|
|
58
|
+
setRunning(false);
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
return {
|
|
62
|
+
renderer: rendererRef.current,
|
|
63
|
+
size,
|
|
64
|
+
running,
|
|
65
|
+
exit
|
|
66
|
+
};
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
// src/hooks/useInput.ts
|
|
70
|
+
var import_react2 = require("react");
|
|
71
|
+
var useInput = (callback, deps = []) => {
|
|
72
|
+
(0, import_react2.useEffect)(() => {
|
|
73
|
+
const readline = require("readline");
|
|
74
|
+
const handler = (chunk, key) => {
|
|
75
|
+
if (!key) return;
|
|
76
|
+
callback({
|
|
77
|
+
key: key.name || "",
|
|
78
|
+
name: key.name || "",
|
|
79
|
+
ctrl: key.ctrl || false,
|
|
80
|
+
meta: key.meta || false,
|
|
81
|
+
shift: key.shift || false,
|
|
82
|
+
sequence: key.sequence || ""
|
|
83
|
+
});
|
|
84
|
+
};
|
|
85
|
+
process.stdin.setRawMode(true);
|
|
86
|
+
readline.emitKeypressEvents(process.stdin);
|
|
87
|
+
process.stdin.on("keypress", handler);
|
|
88
|
+
return () => {
|
|
89
|
+
process.stdin.off("keypress", handler);
|
|
90
|
+
};
|
|
91
|
+
}, [callback, ...deps]);
|
|
92
|
+
};
|
|
93
|
+
var useKey = (keyName, callback, deps = []) => {
|
|
94
|
+
const keys = Array.isArray(keyName) ? keyName : [keyName];
|
|
95
|
+
useInput(
|
|
96
|
+
(0, import_react2.useCallback)(
|
|
97
|
+
({ key, ctrl, meta }) => {
|
|
98
|
+
if (ctrl || meta) return;
|
|
99
|
+
if (keys.includes(key)) {
|
|
100
|
+
callback();
|
|
101
|
+
}
|
|
102
|
+
},
|
|
103
|
+
[callback, keys]
|
|
104
|
+
),
|
|
105
|
+
deps
|
|
106
|
+
);
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
// src/hooks/useFocus.ts
|
|
110
|
+
var import_react3 = require("react");
|
|
111
|
+
var useFocus = (initialFocus = 0, itemCount) => {
|
|
112
|
+
const [focusedIndex, setFocusedIndex] = (0, import_react3.useState)(initialFocus);
|
|
113
|
+
const focusableRefs = (0, import_react3.useRef)(/* @__PURE__ */ new Map());
|
|
114
|
+
const focusNext = (0, import_react3.useCallback)(() => {
|
|
115
|
+
setFocusedIndex((current) => (current + 1) % itemCount);
|
|
116
|
+
}, [itemCount]);
|
|
117
|
+
const focusPrevious = (0, import_react3.useCallback)(() => {
|
|
118
|
+
setFocusedIndex((current) => (current - 1 + itemCount) % itemCount);
|
|
119
|
+
}, [itemCount]);
|
|
120
|
+
const setFocus = (0, import_react3.useCallback)((index) => {
|
|
121
|
+
if (index >= 0 && index < itemCount) {
|
|
122
|
+
setFocusedIndex(index);
|
|
123
|
+
}
|
|
124
|
+
}, [itemCount]);
|
|
125
|
+
const isFocused = (0, import_react3.useCallback)(
|
|
126
|
+
(index) => index === focusedIndex,
|
|
127
|
+
[focusedIndex]
|
|
128
|
+
);
|
|
129
|
+
(0, import_react3.useEffect)(() => {
|
|
130
|
+
const readline = require("readline");
|
|
131
|
+
readline.emitKeypressEvents(process.stdin);
|
|
132
|
+
process.stdin.setRawMode(true);
|
|
133
|
+
const handleKeyPress = (_chunk, key) => {
|
|
134
|
+
if (key.name === "tab" || key.name === "right") {
|
|
135
|
+
focusNext();
|
|
136
|
+
} else if (key.name === "left") {
|
|
137
|
+
focusPrevious();
|
|
138
|
+
}
|
|
139
|
+
};
|
|
140
|
+
process.stdin.on("keypress", handleKeyPress);
|
|
141
|
+
return () => {
|
|
142
|
+
process.stdin.off("keypress", handleKeyPress);
|
|
143
|
+
};
|
|
144
|
+
}, [focusNext, focusPrevious]);
|
|
145
|
+
return {
|
|
146
|
+
focusedIndex,
|
|
147
|
+
focusNext,
|
|
148
|
+
focusPrevious,
|
|
149
|
+
setFocus,
|
|
150
|
+
isFocused
|
|
151
|
+
};
|
|
152
|
+
};
|
|
153
|
+
|
|
154
|
+
// src/hooks/useStdout.ts
|
|
155
|
+
var import_react4 = require("react");
|
|
156
|
+
var useStdoutDimensions = () => {
|
|
157
|
+
const [dimensions, setDimensions] = (0, import_react4.useState)(() => ({
|
|
158
|
+
columns: process.stdout.columns || 80,
|
|
159
|
+
rows: process.stdout.rows || 24
|
|
160
|
+
}));
|
|
161
|
+
(0, import_react4.useEffect)(() => {
|
|
162
|
+
const handleResize = () => {
|
|
163
|
+
setDimensions({
|
|
164
|
+
columns: process.stdout.columns || 80,
|
|
165
|
+
rows: process.stdout.rows || 24
|
|
166
|
+
});
|
|
167
|
+
};
|
|
168
|
+
process.stdout.on("resize", handleResize);
|
|
169
|
+
return () => {
|
|
170
|
+
process.stdout.off("resize", handleResize);
|
|
171
|
+
};
|
|
172
|
+
}, []);
|
|
173
|
+
return dimensions;
|
|
174
|
+
};
|
|
175
|
+
var useStdout = () => {
|
|
176
|
+
const write = (0, import_react4.useCallback)((data) => {
|
|
177
|
+
process.stdout.write(data);
|
|
178
|
+
}, []);
|
|
179
|
+
return { write };
|
|
180
|
+
};
|
|
181
|
+
|
|
182
|
+
// src/hooks/useInterval.ts
|
|
183
|
+
var import_react5 = require("react");
|
|
184
|
+
var useInterval = (callback, delay) => {
|
|
185
|
+
const savedCallback = (0, import_react5.useRef)(callback);
|
|
186
|
+
(0, import_react5.useEffect)(() => {
|
|
187
|
+
savedCallback.current = callback;
|
|
188
|
+
}, [callback]);
|
|
189
|
+
(0, import_react5.useEffect)(() => {
|
|
190
|
+
if (delay === null) return;
|
|
191
|
+
const tick = () => savedCallback.current();
|
|
192
|
+
const id = setInterval(tick, delay);
|
|
193
|
+
return () => clearInterval(id);
|
|
194
|
+
}, [delay]);
|
|
195
|
+
};
|
|
196
|
+
var useTimeout = (callback, delay) => {
|
|
197
|
+
const savedCallback = (0, import_react5.useRef)(callback);
|
|
198
|
+
(0, import_react5.useEffect)(() => {
|
|
199
|
+
savedCallback.current = callback;
|
|
200
|
+
}, [callback]);
|
|
201
|
+
(0, import_react5.useEffect)(() => {
|
|
202
|
+
if (delay === null) return;
|
|
203
|
+
const tick = () => savedCallback.current();
|
|
204
|
+
const id = setTimeout(tick, delay);
|
|
205
|
+
return () => clearTimeout(id);
|
|
206
|
+
}, [delay]);
|
|
207
|
+
};
|
|
208
|
+
|
|
209
|
+
// src/hooks/useAppState.ts
|
|
210
|
+
var import_react6 = require("react");
|
|
211
|
+
var useAppState = (initialState = "idle") => {
|
|
212
|
+
const [state, setState] = (0, import_react6.useState)(initialState);
|
|
213
|
+
const [error, setError] = (0, import_react6.useState)(null);
|
|
214
|
+
const setLoading = (0, import_react6.useCallback)(() => {
|
|
215
|
+
setState("loading");
|
|
216
|
+
setError(null);
|
|
217
|
+
}, []);
|
|
218
|
+
const setSuccess = (0, import_react6.useCallback)(() => {
|
|
219
|
+
setState("success");
|
|
220
|
+
setError(null);
|
|
221
|
+
}, []);
|
|
222
|
+
const setErrorState = (0, import_react6.useCallback)((err) => {
|
|
223
|
+
setState("error");
|
|
224
|
+
setError(err);
|
|
225
|
+
}, []);
|
|
226
|
+
const setIdle = (0, import_react6.useCallback)(() => {
|
|
227
|
+
setState("idle");
|
|
228
|
+
setError(null);
|
|
229
|
+
}, []);
|
|
230
|
+
const isLoading = state === "loading";
|
|
231
|
+
const isSuccess = state === "success";
|
|
232
|
+
const isError = state === "error";
|
|
233
|
+
const isIdle = state === "idle";
|
|
234
|
+
return {
|
|
235
|
+
state,
|
|
236
|
+
error,
|
|
237
|
+
isLoading,
|
|
238
|
+
isSuccess,
|
|
239
|
+
isError,
|
|
240
|
+
isIdle,
|
|
241
|
+
setLoading,
|
|
242
|
+
setSuccess,
|
|
243
|
+
setError: setErrorState,
|
|
244
|
+
setIdle
|
|
245
|
+
};
|
|
246
|
+
};
|
|
247
|
+
|
|
248
|
+
// src/hooks/useList.ts
|
|
249
|
+
var import_react7 = require("react");
|
|
250
|
+
var useList = ({
|
|
251
|
+
initialItems = [],
|
|
252
|
+
initialIndex = 0,
|
|
253
|
+
loop = true
|
|
254
|
+
} = {}) => {
|
|
255
|
+
const [items, setItems] = (0, import_react7.useState)(initialItems);
|
|
256
|
+
const [index, setIndex] = (0, import_react7.useState)(initialIndex);
|
|
257
|
+
const next = (0, import_react7.useCallback)(() => {
|
|
258
|
+
setIndex((current) => {
|
|
259
|
+
if (items.length === 0) return 0;
|
|
260
|
+
const nextIndex = current + 1;
|
|
261
|
+
if (nextIndex >= items.length) {
|
|
262
|
+
return loop ? 0 : items.length - 1;
|
|
263
|
+
}
|
|
264
|
+
return nextIndex;
|
|
265
|
+
});
|
|
266
|
+
}, [items.length, loop]);
|
|
267
|
+
const previous = (0, import_react7.useCallback)(() => {
|
|
268
|
+
setIndex((current) => {
|
|
269
|
+
if (items.length === 0) return 0;
|
|
270
|
+
const prevIndex = current - 1;
|
|
271
|
+
if (prevIndex < 0) {
|
|
272
|
+
return loop ? items.length - 1 : 0;
|
|
273
|
+
}
|
|
274
|
+
return prevIndex;
|
|
275
|
+
});
|
|
276
|
+
}, [items.length, loop]);
|
|
277
|
+
const select = (0, import_react7.useCallback)((item) => {
|
|
278
|
+
const newIndex = items.indexOf(item);
|
|
279
|
+
if (newIndex !== -1) {
|
|
280
|
+
setIndex(newIndex);
|
|
281
|
+
}
|
|
282
|
+
}, [items]);
|
|
283
|
+
const selectedIndex = index;
|
|
284
|
+
const selectedItem = items[index] ?? null;
|
|
285
|
+
return {
|
|
286
|
+
items,
|
|
287
|
+
setItems,
|
|
288
|
+
index: selectedIndex,
|
|
289
|
+
setIndex,
|
|
290
|
+
selectedItem,
|
|
291
|
+
next,
|
|
292
|
+
previous,
|
|
293
|
+
select
|
|
294
|
+
};
|
|
295
|
+
};
|
|
296
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
297
|
+
0 && (module.exports = {
|
|
298
|
+
useApp,
|
|
299
|
+
useAppState,
|
|
300
|
+
useFocus,
|
|
301
|
+
useInput,
|
|
302
|
+
useInterval,
|
|
303
|
+
useKey,
|
|
304
|
+
useList,
|
|
305
|
+
useStdout,
|
|
306
|
+
useStdoutDimensions,
|
|
307
|
+
useTimeout
|
|
308
|
+
});
|
|
309
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/hooks/index.ts","../../src/hooks/useApp.ts","../../src/hooks/useInput.ts","../../src/hooks/useFocus.ts","../../src/hooks/useStdout.ts","../../src/hooks/useInterval.ts","../../src/hooks/useAppState.ts","../../src/hooks/useList.ts"],"sourcesContent":["export { useApp } from './useApp.js';\nexport { useInput, useKey } from './useInput.js';\nexport { useFocus } from './useFocus.js';\nexport { useStdout, useStdoutDimensions } from './useStdout.js';\nexport { useInterval, useTimeout } from './useInterval.js';\nexport { useAppState } from './useAppState.js';\nexport { useList } from './useList.js';\n","import { Renderer } from '../renderer/index.js';\nimport { useEffect, useState, useRef } from 'react';\n\ninterface AppOptions {\n fullscreen?: boolean;\n alternateScreen?: boolean;\n mouseCapture?: boolean;\n}\n\n/**\n * useApp - Hook for managing the application lifecycle\n */\nexport const useApp = (options: AppOptions = {}) => {\n const rendererRef = useRef<Renderer | null>(null);\n const [size, setSize] = useState({ cols: 80, rows: 24 });\n const [running, setRunning] = useState(false);\n\n useEffect(() => {\n // Note: Renderer is not fully implemented yet, this is a skeleton\n // const renderer = new Renderer();\n // rendererRef.current = renderer;\n //\n // renderer.start();\n //\n // // Set initial size\n // setSize(renderer.getSize());\n //\n // // Setup resize handler\n // const cleanupResize = renderer.getTerminal().onResize((newSize) => {\n // setSize(newSize);\n // });\n //\n // setRunning(true);\n\n const cleanupResize = () => {\n // Cleanup function\n };\n\n setRunning(true);\n\n return () => {\n setRunning(false);\n cleanupResize();\n // renderer.stop();\n };\n }, []);\n\n const exit = () => {\n if (rendererRef.current) {\n // rendererRef.current.stop();\n setRunning(false);\n }\n };\n\n return {\n renderer: rendererRef.current,\n size,\n running,\n exit,\n };\n};\n","import { useEffect, useCallback } from 'react';\n\ninterface InputEvent {\n key: string;\n name: string;\n ctrl: boolean;\n meta: boolean;\n shift: boolean;\n sequence: string;\n}\n\ninterface ReadlineKey {\n name?: string;\n ctrl?: boolean;\n meta?: boolean;\n shift?: boolean;\n sequence?: string;\n}\n\ntype InputCallback = (input: InputEvent) => void;\n\n/**\n * useInput - Hook for capturing keyboard input\n */\nexport const useInput = (callback: InputCallback, deps: any[] = []) => {\n useEffect(() => {\n const readline = require('node:readline');\n\n const handler = (chunk: Buffer, key: ReadlineKey) => {\n if (!key) return;\n\n callback({\n key: key.name || '',\n name: key.name || '',\n ctrl: key.ctrl || false,\n meta: key.meta || false,\n shift: key.shift || false,\n sequence: key.sequence || '',\n });\n };\n\n process.stdin.setRawMode(true);\n readline.emitKeypressEvents(process.stdin);\n\n process.stdin.on('keypress', handler);\n\n return () => {\n process.stdin.off('keypress', handler);\n };\n }, [callback, ...deps]);\n};\n\n/**\n * useKey - Hook for capturing specific key presses\n */\nexport const useKey = (\n keyName: string | string[],\n callback: () => void,\n deps: any[] = []\n) => {\n const keys = Array.isArray(keyName) ? keyName : [keyName];\n\n useInput(\n useCallback(\n ({ key, ctrl, meta }) => {\n // Don't trigger if modifier keys are pressed (unless specified)\n if (ctrl || meta) return;\n\n if (keys.includes(key)) {\n callback();\n }\n },\n [callback, keys]\n ),\n deps\n );\n};\n","import { useState, useCallback, useRef, useEffect } from 'react';\n\ninterface FocusableElement {\n id: string;\n index: number;\n}\n\ninterface KeyPressEvent {\n name?: string;\n}\n\n/**\n * useFocus - Hook for managing focus state in forms and lists\n */\nexport const useFocus = (initialFocus = 0, itemCount: number) => {\n const [focusedIndex, setFocusedIndex] = useState(initialFocus);\n const focusableRefs = useRef<Map<number, HTMLElement>>(new Map());\n\n const focusNext = useCallback(() => {\n setFocusedIndex((current) => (current + 1) % itemCount);\n }, [itemCount]);\n\n const focusPrevious = useCallback(() => {\n setFocusedIndex((current) => (current - 1 + itemCount) % itemCount);\n }, [itemCount]);\n\n const setFocus = useCallback((index: number) => {\n if (index >= 0 && index < itemCount) {\n setFocusedIndex(index);\n }\n }, [itemCount]);\n\n const isFocused = useCallback(\n (index: number) => index === focusedIndex,\n [focusedIndex]\n );\n\n // Keyboard navigation\n useEffect(() => {\n const readline = require('node:readline');\n readline.emitKeypressEvents(process.stdin);\n process.stdin.setRawMode(true);\n\n const handleKeyPress = (_chunk: Buffer, key: KeyPressEvent) => {\n if (key.name === 'tab' || key.name === 'right') {\n focusNext();\n } else if (key.name === 'left') {\n focusPrevious();\n }\n };\n\n process.stdin.on('keypress', handleKeyPress);\n\n return () => {\n process.stdin.off('keypress', handleKeyPress);\n };\n }, [focusNext, focusPrevious]);\n\n return {\n focusedIndex,\n focusNext,\n focusPrevious,\n setFocus,\n isFocused,\n };\n};\n","import { useCallback, useEffect, useState } from 'react';\n\n/**\n * useStdoutDimensions - Hook for getting terminal dimensions\n */\nexport const useStdoutDimensions = () => {\n const [dimensions, setDimensions] = useState(() => ({\n columns: process.stdout.columns || 80,\n rows: process.stdout.rows || 24,\n }));\n\n useEffect(() => {\n const handleResize = () => {\n setDimensions({\n columns: process.stdout.columns || 80,\n rows: process.stdout.rows || 24,\n });\n };\n\n process.stdout.on('resize', handleResize);\n\n return () => {\n process.stdout.off('resize', handleResize);\n };\n }, []);\n\n return dimensions;\n};\n\n/**\n * useStdout - Hook for stdout operations\n */\nexport const useStdout = () => {\n const write = useCallback((data: string) => {\n process.stdout.write(data);\n }, []);\n\n return { write };\n};\n","import { useEffect, useRef } from 'react';\n\n/**\n * useInterval - Hook for setting up intervals\n */\nexport const useInterval = (callback: () => void, delay: number | null) => {\n const savedCallback = useRef(callback);\n\n // Remember the latest callback\n useEffect(() => {\n savedCallback.current = callback;\n }, [callback]);\n\n // Set up the interval\n useEffect(() => {\n if (delay === null) return;\n\n const tick = () => savedCallback.current();\n\n const id = setInterval(tick, delay);\n\n return () => clearInterval(id);\n }, [delay]);\n};\n\n/**\n * useTimeout - Hook for setting up timeouts\n */\nexport const useTimeout = (callback: () => void, delay: number | null) => {\n const savedCallback = useRef(callback);\n\n useEffect(() => {\n savedCallback.current = callback;\n }, [callback]);\n\n useEffect(() => {\n if (delay === null) return;\n\n const tick = () => savedCallback.current();\n\n const id = setTimeout(tick, delay);\n\n return () => clearTimeout(id);\n }, [delay]);\n};\n","import { useState, useCallback } from 'react';\n\ntype AppState = 'idle' | 'loading' | 'success' | 'error';\n\n/**\n * useAppState - Hook for managing application state\n */\nexport const useAppState = (initialState: AppState = 'idle') => {\n const [state, setState] = useState<AppState>(initialState);\n const [error, setError] = useState<Error | null>(null);\n\n const setLoading = useCallback(() => {\n setState('loading');\n setError(null);\n }, []);\n\n const setSuccess = useCallback(() => {\n setState('success');\n setError(null);\n }, []);\n\n const setErrorState = useCallback((err: Error) => {\n setState('error');\n setError(err);\n }, []);\n\n const setIdle = useCallback(() => {\n setState('idle');\n setError(null);\n }, []);\n\n const isLoading = state === 'loading';\n const isSuccess = state === 'success';\n const isError = state === 'error';\n const isIdle = state === 'idle';\n\n return {\n state,\n error,\n isLoading,\n isSuccess,\n isError,\n isIdle,\n setLoading,\n setSuccess,\n setError: setErrorState,\n setIdle,\n };\n};\n","import { useState, useCallback } from 'react';\n\ninterface ListOptions<T> {\n initialItems?: T[];\n initialIndex?: number;\n loop?: boolean;\n}\n\n/**\n * useList - Hook for managing list navigation\n */\nexport const useList = <T>({\n initialItems = [],\n initialIndex = 0,\n loop = true,\n}: ListOptions<T> = {}) => {\n const [items, setItems] = useState<T[]>(initialItems);\n const [index, setIndex] = useState(initialIndex);\n\n const next = useCallback(() => {\n setIndex((current) => {\n if (items.length === 0) return 0;\n\n const nextIndex = current + 1;\n\n if (nextIndex >= items.length) {\n return loop ? 0 : items.length - 1;\n }\n\n return nextIndex;\n });\n }, [items.length, loop]);\n\n const previous = useCallback(() => {\n setIndex((current) => {\n if (items.length === 0) return 0;\n\n const prevIndex = current - 1;\n\n if (prevIndex < 0) {\n return loop ? items.length - 1 : 0;\n }\n\n return prevIndex;\n });\n }, [items.length, loop]);\n\n const select = useCallback((item: T) => {\n const newIndex = items.indexOf(item);\n if (newIndex !== -1) {\n setIndex(newIndex);\n }\n }, [items]);\n\n const selectedIndex = index;\n const selectedItem = items[index] ?? null;\n\n return {\n items,\n setItems,\n index: selectedIndex,\n setIndex,\n selectedItem,\n next,\n previous,\n select,\n };\n};\n"],"mappings":"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","names":["import_react","import_react","import_react","import_react","import_react","import_react"]}
|