@siteboon/claude-code-ui 1.8.2

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.
Files changed (106) hide show
  1. package/.env.example +12 -0
  2. package/.nvmrc +1 -0
  3. package/LICENSE +675 -0
  4. package/README.md +275 -0
  5. package/index.html +48 -0
  6. package/package.json +84 -0
  7. package/postcss.config.js +6 -0
  8. package/public/convert-icons.md +53 -0
  9. package/public/favicon.png +0 -0
  10. package/public/favicon.svg +9 -0
  11. package/public/generate-icons.js +49 -0
  12. package/public/icons/claude-ai-icon.svg +1 -0
  13. package/public/icons/cursor.svg +1 -0
  14. package/public/icons/generate-icons.md +19 -0
  15. package/public/icons/icon-128x128.png +0 -0
  16. package/public/icons/icon-128x128.svg +12 -0
  17. package/public/icons/icon-144x144.png +0 -0
  18. package/public/icons/icon-144x144.svg +12 -0
  19. package/public/icons/icon-152x152.png +0 -0
  20. package/public/icons/icon-152x152.svg +12 -0
  21. package/public/icons/icon-192x192.png +0 -0
  22. package/public/icons/icon-192x192.svg +12 -0
  23. package/public/icons/icon-384x384.png +0 -0
  24. package/public/icons/icon-384x384.svg +12 -0
  25. package/public/icons/icon-512x512.png +0 -0
  26. package/public/icons/icon-512x512.svg +12 -0
  27. package/public/icons/icon-72x72.png +0 -0
  28. package/public/icons/icon-72x72.svg +12 -0
  29. package/public/icons/icon-96x96.png +0 -0
  30. package/public/icons/icon-96x96.svg +12 -0
  31. package/public/icons/icon-template.svg +12 -0
  32. package/public/logo.svg +9 -0
  33. package/public/manifest.json +61 -0
  34. package/public/screenshots/cli-selection.png +0 -0
  35. package/public/screenshots/desktop-main.png +0 -0
  36. package/public/screenshots/mobile-chat.png +0 -0
  37. package/public/screenshots/tools-modal.png +0 -0
  38. package/public/sw.js +49 -0
  39. package/server/claude-cli.js +391 -0
  40. package/server/cursor-cli.js +250 -0
  41. package/server/database/db.js +86 -0
  42. package/server/database/init.sql +16 -0
  43. package/server/index.js +1167 -0
  44. package/server/middleware/auth.js +80 -0
  45. package/server/projects.js +1063 -0
  46. package/server/routes/auth.js +135 -0
  47. package/server/routes/cursor.js +794 -0
  48. package/server/routes/git.js +823 -0
  49. package/server/routes/mcp-utils.js +48 -0
  50. package/server/routes/mcp.js +552 -0
  51. package/server/routes/taskmaster.js +1971 -0
  52. package/server/utils/mcp-detector.js +198 -0
  53. package/server/utils/taskmaster-websocket.js +129 -0
  54. package/src/App.jsx +751 -0
  55. package/src/components/ChatInterface.jsx +3485 -0
  56. package/src/components/ClaudeLogo.jsx +11 -0
  57. package/src/components/ClaudeStatus.jsx +107 -0
  58. package/src/components/CodeEditor.jsx +422 -0
  59. package/src/components/CreateTaskModal.jsx +88 -0
  60. package/src/components/CursorLogo.jsx +9 -0
  61. package/src/components/DarkModeToggle.jsx +35 -0
  62. package/src/components/DiffViewer.jsx +41 -0
  63. package/src/components/ErrorBoundary.jsx +73 -0
  64. package/src/components/FileTree.jsx +480 -0
  65. package/src/components/GitPanel.jsx +1283 -0
  66. package/src/components/ImageViewer.jsx +54 -0
  67. package/src/components/LoginForm.jsx +110 -0
  68. package/src/components/MainContent.jsx +577 -0
  69. package/src/components/MicButton.jsx +272 -0
  70. package/src/components/MobileNav.jsx +88 -0
  71. package/src/components/NextTaskBanner.jsx +695 -0
  72. package/src/components/PRDEditor.jsx +871 -0
  73. package/src/components/ProtectedRoute.jsx +44 -0
  74. package/src/components/QuickSettingsPanel.jsx +262 -0
  75. package/src/components/Settings.jsx +2023 -0
  76. package/src/components/SetupForm.jsx +135 -0
  77. package/src/components/Shell.jsx +663 -0
  78. package/src/components/Sidebar.jsx +1665 -0
  79. package/src/components/StandaloneShell.jsx +106 -0
  80. package/src/components/TaskCard.jsx +210 -0
  81. package/src/components/TaskDetail.jsx +406 -0
  82. package/src/components/TaskIndicator.jsx +108 -0
  83. package/src/components/TaskList.jsx +1054 -0
  84. package/src/components/TaskMasterSetupWizard.jsx +603 -0
  85. package/src/components/TaskMasterStatus.jsx +86 -0
  86. package/src/components/TodoList.jsx +91 -0
  87. package/src/components/Tooltip.jsx +91 -0
  88. package/src/components/ui/badge.jsx +31 -0
  89. package/src/components/ui/button.jsx +46 -0
  90. package/src/components/ui/input.jsx +19 -0
  91. package/src/components/ui/scroll-area.jsx +23 -0
  92. package/src/contexts/AuthContext.jsx +158 -0
  93. package/src/contexts/TaskMasterContext.jsx +324 -0
  94. package/src/contexts/TasksSettingsContext.jsx +95 -0
  95. package/src/contexts/ThemeContext.jsx +94 -0
  96. package/src/contexts/WebSocketContext.jsx +29 -0
  97. package/src/hooks/useAudioRecorder.js +109 -0
  98. package/src/hooks/useVersionCheck.js +39 -0
  99. package/src/index.css +822 -0
  100. package/src/lib/utils.js +6 -0
  101. package/src/main.jsx +10 -0
  102. package/src/utils/api.js +141 -0
  103. package/src/utils/websocket.js +109 -0
  104. package/src/utils/whisper.js +37 -0
  105. package/tailwind.config.js +63 -0
  106. package/vite.config.js +29 -0
@@ -0,0 +1,54 @@
1
+ import React from 'react';
2
+ import { Button } from './ui/button';
3
+ import { X } from 'lucide-react';
4
+
5
+ function ImageViewer({ file, onClose }) {
6
+ const imagePath = `/api/projects/${file.projectName}/files/content?path=${encodeURIComponent(file.path)}`;
7
+
8
+ return (
9
+ <div className="fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50">
10
+ <div className="bg-white dark:bg-gray-800 rounded-lg shadow-xl max-w-4xl max-h-[90vh] w-full mx-4 overflow-hidden">
11
+ <div className="flex items-center justify-between p-4 border-b">
12
+ <h3 className="text-lg font-semibold text-gray-900 dark:text-white">
13
+ {file.name}
14
+ </h3>
15
+ <Button
16
+ variant="ghost"
17
+ size="sm"
18
+ onClick={onClose}
19
+ className="h-8 w-8 p-0"
20
+ >
21
+ <X className="h-4 w-4" />
22
+ </Button>
23
+ </div>
24
+
25
+ <div className="p-4 flex justify-center items-center bg-gray-50 dark:bg-gray-900 min-h-[400px]">
26
+ <img
27
+ src={imagePath}
28
+ alt={file.name}
29
+ className="max-w-full max-h-[70vh] object-contain rounded-lg shadow-md"
30
+ onError={(e) => {
31
+ e.target.style.display = 'none';
32
+ e.target.nextSibling.style.display = 'block';
33
+ }}
34
+ />
35
+ <div
36
+ className="text-center text-gray-500 dark:text-gray-400"
37
+ style={{ display: 'none' }}
38
+ >
39
+ <p>Unable to load image</p>
40
+ <p className="text-sm mt-2">{file.path}</p>
41
+ </div>
42
+ </div>
43
+
44
+ <div className="p-4 border-t bg-gray-50 dark:bg-gray-800">
45
+ <p className="text-sm text-gray-600 dark:text-gray-400">
46
+ {file.path}
47
+ </p>
48
+ </div>
49
+ </div>
50
+ </div>
51
+ );
52
+ }
53
+
54
+ export default ImageViewer;
@@ -0,0 +1,110 @@
1
+ import React, { useState } from 'react';
2
+ import { useAuth } from '../contexts/AuthContext';
3
+ import { MessageSquare } from 'lucide-react';
4
+
5
+ const LoginForm = () => {
6
+ const [username, setUsername] = useState('');
7
+ const [password, setPassword] = useState('');
8
+ const [isLoading, setIsLoading] = useState(false);
9
+ const [error, setError] = useState('');
10
+
11
+ const { login } = useAuth();
12
+
13
+ const handleSubmit = async (e) => {
14
+ e.preventDefault();
15
+ setError('');
16
+
17
+ if (!username || !password) {
18
+ setError('Please enter both username and password');
19
+ return;
20
+ }
21
+
22
+ setIsLoading(true);
23
+
24
+ const result = await login(username, password);
25
+
26
+ if (!result.success) {
27
+ setError(result.error);
28
+ }
29
+
30
+ setIsLoading(false);
31
+ };
32
+
33
+ return (
34
+ <div className="min-h-screen bg-background flex items-center justify-center p-4">
35
+ <div className="w-full max-w-md">
36
+ <div className="bg-card rounded-lg shadow-lg border border-border p-8 space-y-6">
37
+ {/* Logo and Title */}
38
+ <div className="text-center">
39
+ <div className="flex justify-center mb-4">
40
+ <div className="w-16 h-16 bg-primary rounded-lg flex items-center justify-center shadow-sm">
41
+ <MessageSquare className="w-8 h-8 text-primary-foreground" />
42
+ </div>
43
+ </div>
44
+ <h1 className="text-2xl font-bold text-foreground">Welcome Back</h1>
45
+ <p className="text-muted-foreground mt-2">
46
+ Sign in to your Claude Code UI account
47
+ </p>
48
+ </div>
49
+
50
+ {/* Login Form */}
51
+ <form onSubmit={handleSubmit} className="space-y-4">
52
+ <div>
53
+ <label htmlFor="username" className="block text-sm font-medium text-foreground mb-1">
54
+ Username
55
+ </label>
56
+ <input
57
+ type="text"
58
+ id="username"
59
+ value={username}
60
+ onChange={(e) => setUsername(e.target.value)}
61
+ className="w-full px-3 py-2 border border-border rounded-md bg-background text-foreground focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent"
62
+ placeholder="Enter your username"
63
+ required
64
+ disabled={isLoading}
65
+ />
66
+ </div>
67
+
68
+ <div>
69
+ <label htmlFor="password" className="block text-sm font-medium text-foreground mb-1">
70
+ Password
71
+ </label>
72
+ <input
73
+ type="password"
74
+ id="password"
75
+ value={password}
76
+ onChange={(e) => setPassword(e.target.value)}
77
+ className="w-full px-3 py-2 border border-border rounded-md bg-background text-foreground focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent"
78
+ placeholder="Enter your password"
79
+ required
80
+ disabled={isLoading}
81
+ />
82
+ </div>
83
+
84
+ {error && (
85
+ <div className="p-3 bg-red-100 dark:bg-red-900/20 border border-red-300 dark:border-red-800 rounded-md">
86
+ <p className="text-sm text-red-700 dark:text-red-400">{error}</p>
87
+ </div>
88
+ )}
89
+
90
+ <button
91
+ type="submit"
92
+ disabled={isLoading}
93
+ className="w-full bg-blue-600 hover:bg-blue-700 disabled:bg-blue-400 text-white font-medium py-2 px-4 rounded-md transition-colors duration-200"
94
+ >
95
+ {isLoading ? 'Signing in...' : 'Sign In'}
96
+ </button>
97
+ </form>
98
+
99
+ <div className="text-center">
100
+ <p className="text-sm text-muted-foreground">
101
+ Enter your credentials to access Claude Code UI
102
+ </p>
103
+ </div>
104
+ </div>
105
+ </div>
106
+ </div>
107
+ );
108
+ };
109
+
110
+ export default LoginForm;