Final UI V3
# UI V3 Changelog Major updates and improvements in this release: ## Core Changes - Complete NEW REWRITTEN UI system overhaul (V3) with semantic design tokens - New settings management system with drag-and-drop capabilities - Enhanced provider system supporting multiple AI services - Improved theme system with better dark mode support - New component library with consistent design patterns ## Technical Updates - Reorganized project architecture for better maintainability - Performance optimizations and bundle size improvements - Enhanced security features and access controls - Improved developer experience with better tooling - Comprehensive testing infrastructure ## New Features - Background rays effect for improved visual feedback - Advanced tab management system - Automatic and manual update support - Enhanced error handling and visualization - Improved accessibility across all components For detailed information about all changes and improvements, please see the full changelog.
This commit is contained in:
@@ -4,7 +4,8 @@ import { BaseChat } from '~/components/chat/BaseChat';
|
||||
import { Chat } from '~/components/chat/Chat.client';
|
||||
import { Header } from '~/components/header/Header';
|
||||
import BackgroundRays from '~/components/ui/BackgroundRays';
|
||||
import { ControlPanel } from '~/components/settings/ControlPanel';
|
||||
import { ControlPanel } from '~/components/@settings';
|
||||
import { SettingsButton } from '~/components/ui/SettingsButton';
|
||||
import { useState } from 'react';
|
||||
|
||||
export const meta: MetaFunction = () => {
|
||||
@@ -21,13 +22,9 @@ export default function Index() {
|
||||
<BackgroundRays />
|
||||
<Header />
|
||||
<ClientOnly fallback={<BaseChat />}>{() => <Chat />}</ClientOnly>
|
||||
<button
|
||||
onClick={() => setShowControlPanel(true)}
|
||||
className="fixed bottom-4 right-4 flex items-center space-x-2 px-4 py-2 rounded-lg bg-purple-500 text-white hover:bg-purple-600 transition-colors"
|
||||
>
|
||||
<span className="i-ph:gear w-5 h-5" />
|
||||
<span>Open Control Panel</span>
|
||||
</button>
|
||||
<div className="fixed bottom-4 right-4">
|
||||
<SettingsButton onClick={() => setShowControlPanel(true)} />
|
||||
</div>
|
||||
<ClientOnly>
|
||||
{() => <ControlPanel open={showControlPanel} onClose={() => setShowControlPanel(false)} />}
|
||||
</ClientOnly>
|
||||
|
||||
18
app/routes/api.health.ts
Normal file
18
app/routes/api.health.ts
Normal file
@@ -0,0 +1,18 @@
|
||||
import type { LoaderFunctionArgs } from '@remix-run/node';
|
||||
|
||||
export const loader = async ({ request: _request }: LoaderFunctionArgs) => {
|
||||
// Return a simple 200 OK response with some basic health information
|
||||
return new Response(
|
||||
JSON.stringify({
|
||||
status: 'healthy',
|
||||
timestamp: new Date().toISOString(),
|
||||
uptime: process.uptime(),
|
||||
}),
|
||||
{
|
||||
status: 200,
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
},
|
||||
);
|
||||
};
|
||||
45
app/routes/api.update.ts
Normal file
45
app/routes/api.update.ts
Normal file
@@ -0,0 +1,45 @@
|
||||
import { json } from '@remix-run/node';
|
||||
import type { ActionFunction } from '@remix-run/node';
|
||||
|
||||
interface UpdateRequestBody {
|
||||
branch: string;
|
||||
}
|
||||
|
||||
export const action: ActionFunction = async ({ request }) => {
|
||||
if (request.method !== 'POST') {
|
||||
return json({ error: 'Method not allowed' }, { status: 405 });
|
||||
}
|
||||
|
||||
try {
|
||||
const body = await request.json();
|
||||
|
||||
// Type guard to check if body has the correct shape
|
||||
if (!body || typeof body !== 'object' || !('branch' in body) || typeof body.branch !== 'string') {
|
||||
return json({ error: 'Invalid request body: branch is required and must be a string' }, { status: 400 });
|
||||
}
|
||||
|
||||
const { branch } = body as UpdateRequestBody;
|
||||
|
||||
// Instead of direct Git operations, we'll return instructions
|
||||
return json({
|
||||
success: true,
|
||||
message: 'Please update manually using the following steps:',
|
||||
instructions: [
|
||||
`1. git fetch origin ${branch}`,
|
||||
`2. git pull origin ${branch}`,
|
||||
'3. pnpm install',
|
||||
'4. pnpm build',
|
||||
'5. Restart the application',
|
||||
],
|
||||
});
|
||||
} catch (error) {
|
||||
console.error('Update preparation failed:', error);
|
||||
return json(
|
||||
{
|
||||
success: false,
|
||||
error: error instanceof Error ? error.message : 'Unknown error occurred while preparing update',
|
||||
},
|
||||
{ status: 500 },
|
||||
);
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user