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:
Stijnus
2025-02-02 01:42:30 +01:00
parent 999d87b1e8
commit fc3dd8c84c
76 changed files with 4540 additions and 4936 deletions

View File

@@ -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
View 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
View 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 },
);
}
};