UNPKG

@hhoangphuoc/escape-room-cli

Version:

A CLI for playing AI-generated escape room games. Install globally with: npm install -g @hhoangphuoc/escape-room-cli

30 lines (29 loc) 11.5 kB
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime"; import { Box, Text } from 'ink'; import Gradient from 'ink-gradient'; // Help Response Component export const HelpResponseComponent = ({ response }) => (_jsxs(Box, { flexDirection: "column", marginY: 1, borderStyle: "round", borderColor: "cyan", paddingX: 1, children: [_jsx(Gradient, { name: "rainbow", children: _jsx(Text, { bold: true, children: "\uD83C\uDFAE Available Commands" }) }), _jsx(Box, { flexDirection: "column", marginTop: 1, children: response.commands.map((cmd, index) => (_jsxs(Box, { marginY: 0, children: [_jsx(Text, { color: "cyan", bold: true, children: cmd.command }), _jsxs(Text, { color: "white", children: [" - ", cmd.description] })] }, index))) }), response.currentContext && (_jsxs(Box, { flexDirection: "column", marginTop: 1, borderStyle: "single", borderColor: "gray", paddingX: 1, children: [_jsx(Text, { color: "yellow", bold: true, children: "\uD83D\uDCCA Current Status" }), response.currentContext.isAuthenticated ? (_jsxs(_Fragment, { children: [_jsx(Text, { color: "green", children: "\u2713 Authenticated" }), response.currentContext.currentRoom && (_jsxs(Text, { color: "blue", children: ["\uD83C\uDFE0 Room: ", response.currentContext.currentRoom] })), response.currentContext.gameMode && (_jsxs(Text, { color: "magenta", children: ["\uD83C\uDFAE Mode: ", response.currentContext.gameMode] }))] })) : (_jsx(Text, { color: "red", children: "\u2717 Not authenticated" })), response.currentContext.hasAI && (_jsxs(Text, { color: "purple", children: ["\uD83E\uDD16 AI: ", response.currentContext.currentModel || 'Available'] }))] }))] })); // Look Response Component export const LookResponseComponent = ({ response }) => (_jsxs(Box, { flexDirection: "column", marginY: 1, borderStyle: "round", borderColor: "cyan", paddingX: 1, children: [_jsx(Gradient, { name: "vice", children: _jsxs(Text, { bold: true, children: ["\uD83D\uDCCD ", response.roomData.name] }) }), response.roomData.background && (_jsx(Box, { marginTop: 1, children: _jsx(Text, { color: "gray", wrap: "wrap", children: response.roomData.background }) })), _jsx(Text, { color: "magenta", bold: true, children: "\uD83D\uDD0D Objects found:" }), _jsx(Box, { flexDirection: "column", marginTop: 1, rowGap: 1, children: response.roomData.objects.length > 0 ? (response.roomData.objects.map((obj, index) => (_jsx(Box, { marginLeft: 2, children: _jsxs(Text, { color: "gray", children: ["\u2022 ", obj] }) }, index)))) : (_jsx(Box, { marginLeft: 2, children: _jsx(Text, { color: "gray", italic: true, children: "No objects visible in this room." }) })) })] })); // Inspect Response Component export const InspectResponseComponent = ({ response }) => (_jsx(Box, { flexDirection: "column", marginY: 1, borderStyle: "round", borderColor: "cyan", paddingX: 1, children: response.objectData && (_jsxs(_Fragment, { children: [_jsx(Gradient, { name: "fruit", children: _jsxs(Text, { bold: true, children: ["\uD83D\uDD0E ", response.objectData.name] }) }), _jsx(Box, { marginTop: 1, children: _jsxs(Text, { color: "white", wrap: "wrap", children: ["\uD83D\uDCDD ", response.objectData.description] }) }), _jsx(Box, { marginTop: 1, flexDirection: "row", alignItems: "center", children: _jsx(Text, { color: response.objectData.unlocked ? "green" : "red", bold: true, children: response.objectData.unlocked ? "🔓 Status: Unlocked" : "🔒 Status: Locked" }) }), response.objectData.unlocked && response.objectData.answer && (_jsx(Box, { marginTop: 1, children: _jsxs(Text, { color: "green", children: ["\u2705 Answer: ", response.objectData.answer] }) })), response.objectData.details && response.objectData.details.length > 0 && (_jsxs(Box, { marginTop: 1, children: [_jsx(Text, { color: "cyan", bold: true, children: "\uD83D\uDCCB Details:" }), response.objectData.details.map((detail, index) => (_jsx(Box, { marginLeft: 2, children: _jsxs(Text, { color: "gray", children: ["\u2022 ", detail] }) }, index)))] }))] })) })); // Guess Response Component export const GuessResponseComponent = ({ response }) => (_jsxs(Box, { flexDirection: "column", marginY: 1, borderStyle: "round", borderColor: response.success && response.objectData.correctAnswer ? "green" : "red", paddingX: 1, children: [response.success && response.objectData.correctAnswer ? (_jsx(Gradient, { name: "summer", children: _jsx(Text, { bold: true, children: "\uD83C\uDF89 Correct Answer!" }) })) : (_jsx(Text, { color: "red", bold: true, children: "\u274C Incorrect Guess" })), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: "white", children: response.message }) }), _jsxs(Box, { marginTop: 1, children: [_jsxs(Text, { color: "cyan", children: ["\uD83C\uDFAF Object: ", response.objectData.name] }), response.success && response.objectData.correctAnswer && (_jsx(Text, { color: "green", children: "\uD83D\uDD13 The object is now unlocked!" }))] })] })); // Password Response Component export const PasswordResponseComponent = ({ response }) => (_jsx(Box, { flexDirection: "column", marginY: 1, borderStyle: "round", borderColor: response.gameResult.escaped ? "green" : "red", paddingX: 1, children: response.gameResult.escaped ? (_jsxs(_Fragment, { children: [_jsx(Gradient, { name: "summer", children: _jsx(Text, { bold: true, children: "\uD83C\uDF8A Congratulations! You Escaped!" }) }), _jsxs(Box, { flexDirection: "column", marginTop: 1, borderStyle: "single", borderColor: "green", paddingX: 1, rowGap: 0.25, children: [_jsx(Text, { color: "yellow", bold: true, children: "\uD83C\uDFC6 Escape Summary" }), response.gameResult.timeElapsed && (_jsxs(Text, { color: "cyan", children: ["\u23F1\uFE0F Time: ", response.gameResult.timeElapsed, " seconds"] })), response.gameResult.hintsUsed !== undefined && (_jsxs(Text, { color: "yellow", children: ["\uD83D\uDCA1 Hints used: ", response.gameResult.hintsUsed] })), response.gameResult.gameCompleted && (_jsx(Text, { color: "green", bold: true, children: "\uD83C\uDFAE Game completed! Well done!" }))] })] })) : (_jsxs(_Fragment, { children: [_jsx(Text, { color: "red", bold: true, children: "\u274C Password Incorrect" }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: "white", children: response.message }) })] })) })); // Hint Response Component export const HintResponseComponent = ({ response }) => (_jsxs(Box, { flexDirection: "column", marginY: 1, borderStyle: "round", borderColor: "cyan", paddingX: 1, rowGap: 0.25, children: [_jsx(Text, { color: "cyan", bold: true, children: "\uD83D\uDCA1 Hint" }), _jsx(Box, { marginTop: 1, borderStyle: "single", borderColor: "yellow", paddingX: 1, children: _jsx(Text, { color: "yellow", wrap: "wrap", children: response.hintData.hint }) }), response.hintData.hintsUsed > 0 && (_jsx(Box, { marginTop: 1, children: _jsxs(Text, { color: "gray", children: ["\uD83D\uDCCA Hints used so far: ", response.hintData.hintsUsed] }) }))] })); // New Game Response Component export const NewGameResponseComponent = ({ response }) => (_jsxs(Box, { flexDirection: "column", marginY: 1, borderStyle: "round", borderColor: "cyan", paddingX: 1, rowGap: 0.5, paddingY: 1, children: [_jsx(Gradient, { name: "vice", children: _jsxs(Text, { bold: true, children: ["\uD83C\uDFAE ", response.gameData.name] }) }), _jsxs(Box, { flexDirection: "column", marginTop: 1, borderStyle: "single", borderColor: "green", paddingX: 1, rowGap: 0.25, children: [_jsxs(Text, { color: "cyan", children: ["\uD83C\uDD94 Game ID: ", response.gameData.id] }), _jsxs(Text, { color: "blue", children: ["\uD83C\uDFE0 Room: ", response.gameData.currentRoom, "/", response.gameData.totalRooms] }), _jsxs(Text, { color: "yellow", children: ["\uD83D\uDCE6 Objects: ", response.gameData.objectCount] }), _jsxs(Text, { color: "magenta", children: ["\uD83C\uDFAF Mode: ", response.gameData.mode] }), response.gameData.startTime && (_jsxs(Text, { color: "gray", children: ["\u23F0 Started: ", new Date(response.gameData.startTime).toLocaleTimeString()] }))] }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: "gray", wrap: "wrap", children: response.gameData.background }) })] })); // Leaderboard Response Component export const LeaderboardResponseComponent = ({ response }) => (_jsxs(Box, { flexDirection: "column", marginY: 1, borderStyle: "round", borderColor: "yellow", paddingX: 1, children: [_jsx(Gradient, { name: "teen", children: _jsx(Text, { bold: true, children: "\uD83C\uDFC6 Leaderboard" }) }), _jsx(Box, { marginTop: 1, flexDirection: "column", rowGap: 0.5, children: response.leaderboardData.entries.map((entry, index) => (_jsx(Box, { marginLeft: 2, children: _jsxs(Text, { color: "gray", children: ["\u2022 ", entry.rank, ". ", entry.userName, " - ", entry.timeElapsed, "s (", entry.hintsUsed, " hints)"] }) }, index))) }), _jsx(Box, { marginTop: 1, children: _jsxs(Text, { color: "gray", children: ["\uD83C\uDFAE Mode: ", response.leaderboardData.mode] }) })] })); // Auth Response Component export const AuthResponseComponent = ({ response }) => (_jsx(Box, { flexDirection: "column", marginY: 1, paddingX: 1, children: response.success ? (_jsx(_Fragment, { children: response.userData ? (_jsxs(Box, { flexDirection: "column", marginTop: 1, paddingX: 1, borderStyle: "single", borderColor: "green", children: [_jsx(Gradient, { name: "vice", children: _jsx(Text, { bold: true, children: "\uD83D\uDD10 Login Successfully" }) }), _jsxs(Box, { flexDirection: "column", marginTop: 1, paddingX: 1, rowGap: 0.25, children: [_jsxs(Text, { color: "cyan", children: ["\uD83D\uDC64 Welcome, ", response.userData.userName, "!"] }), response.userData.apiKey && (_jsx(Text, { color: "gray", children: "\uD83D\uDD11 Your API key is configured" }))] })] })) : (_jsx(Box, { flexDirection: "column", marginTop: 1, borderStyle: "single", borderColor: "green", paddingX: 1, children: _jsx(Text, { color: "green", children: "\uD83D\uDC64 Logged out successfully. Type /login to login again." }) })) })) : (_jsxs(_Fragment, { children: [_jsx(Text, { color: "red", bold: true, children: "\u274C Authentication Failed" }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: "red", children: response.message }) })] })) })); // Error Response Component export const ErrorResponseComponent = ({ message }) => (_jsxs(Box, { flexDirection: "column", marginY: 1, borderStyle: "round", borderColor: "red", paddingX: 1, children: [_jsx(Text, { color: "red", bold: true, children: "\u274C Error" }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: "red", wrap: "wrap", children: message }) })] })); // Success Response Component export const SuccessResponseComponent = ({ message }) => (_jsxs(Box, { flexDirection: "column", marginY: 1, borderStyle: "round", borderColor: "green", paddingX: 1, children: [_jsx(Text, { color: "green", bold: true, children: "\u2705 Success" }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: "green", wrap: "wrap", children: message }) })] })); // Info Response Component export const InfoResponseComponent = ({ message }) => (_jsxs(Box, { flexDirection: "column", marginY: 1, borderStyle: "round", borderColor: "cyan", paddingX: 1, children: [_jsx(Text, { color: "cyan", bold: true, children: "\u2139\uFE0F Information" }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: "cyan", wrap: "wrap", children: message }) })] })); // Generic Response Component export const GenericResponseComponent = ({ message }) => (_jsx(Box, { flexDirection: "column", marginY: 1, paddingX: 1, children: _jsx(Text, { color: "white", wrap: "wrap", children: message }) }));