@hhoangphuoc/escape-room-cli
Version:
A CLI for playing AI-generated escape room games. Install globally with: npm install -g @hhoangphuoc/escape-room-cli
72 lines (71 loc) • 4.2 kB
JavaScript
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
import { Box, Text } from 'ink';
import { HelpResponseComponent, LookResponseComponent, InspectResponseComponent, GuessResponseComponent, PasswordResponseComponent, HintResponseComponent, NewGameResponseComponent, LeaderboardResponseComponent, AuthResponseComponent, AIResponseComponent, ErrorResponseComponent, SuccessResponseComponent, InfoResponseComponent, GenericResponseComponent } from './ResponseComponents.js';
const renderResponseComponent = (item) => {
if (!item.data || !item.responseType)
return null;
try {
switch (item.responseType) {
case 'help':
return _jsx(HelpResponseComponent, { response: item.data });
case 'look':
return _jsx(LookResponseComponent, { response: item.data });
case 'inspect':
return _jsx(InspectResponseComponent, { response: item.data });
case 'guess':
return _jsx(GuessResponseComponent, { response: item.data });
case 'password':
return _jsx(PasswordResponseComponent, { response: item.data });
case 'hint':
return _jsx(HintResponseComponent, { response: item.data });
case 'newgame':
return _jsx(NewGameResponseComponent, { response: item.data });
case 'leaderboard':
return _jsx(LeaderboardResponseComponent, { response: item.data });
case 'auth':
return _jsx(AuthResponseComponent, { response: item.data });
case 'ai':
return (_jsx(AIResponseComponent, { response: item.data }));
default:
return null;
}
}
catch (error) {
return null;
}
};
const CommandHistory = ({ history, showHistory, useComponents = true }) => {
// const CommandHistory: React.FC<CommandHistoryProps> = ({history, showHistory, useComponents = true, onToggleReasoning}) => {
const itemsToRender = showHistory ? history : history.slice(-2);
const renderHistoryHeader = () => {
if (!showHistory)
return null;
return (_jsx(Box, { marginBottom: 1, padding: 1, children: _jsx(Text, { color: "magenta", bold: true, children: "Command History" }) }));
};
return (_jsxs(Box, { flexDirection: "column", children: [renderHistoryHeader(), itemsToRender.map((item, index) => {
const itemIndex = showHistory ? index : history.length - itemsToRender.length + index;
if (item.type === 'command') {
return (_jsxs(Box, { marginY: 1, paddingX: 1, children: [_jsx(Text, { color: "yellow", children: "\u276F " }), _jsx(Text, { bold: true, color: "yellow", children: item.text || '' })] }, itemIndex));
}
if (useComponents && item.responseType && item.data) {
const component = renderResponseComponent(item);
// const component = renderResponseComponent(item, itemIndex, onToggleReasoning);
if (component) {
return (_jsx(Box, { flexDirection: "column", marginY: 0, children: component }, itemIndex));
}
}
if (item.type === 'error') {
return (_jsx(Box, { flexDirection: "column", marginY: 0, children: _jsx(ErrorResponseComponent, { message: item.text }) }, itemIndex));
}
else if (item.type === 'success') {
return (_jsx(Box, { flexDirection: "column", marginY: 0, children: _jsx(SuccessResponseComponent, { message: item.text }) }, itemIndex));
}
else if (item.type === 'info') {
return (_jsx(Box, { flexDirection: "column", marginY: 0, children: _jsx(InfoResponseComponent, { message: item.text }) }, itemIndex));
}
else {
return (_jsx(Box, { flexDirection: "column", marginY: 0, children: _jsx(GenericResponseComponent, { message: item.text }) }, itemIndex));
}
})] }));
};
export default CommandHistory;