mirror of
https://github.com/stackblitz-labs/bolt.diy
synced 2025-06-26 18:26:38 +00:00
V1 : Release of the new Settings Dashboard
# 🚀 Release v1.0.0 ## What's Changed 🌟 ### 🎨 UI/UX Improvements - **Dark Mode Support** - Implemented comprehensive dark theme across all components - Enhanced contrast and readability in dark mode - Added smooth theme transitions - Optimized dialog overlays and backdrops ### 🛠️ Settings Panel - **Data Management** - Added chat history export/import functionality - Implemented settings backup and restore - Added secure data deletion with confirmations - Added profile customization options - **Provider Management** - Added comprehensive provider configuration - Implemented URL-configurable providers - Added local model support (Ollama, LMStudio) - Added provider health checks - Added provider status indicators - **Ollama Integration** - Added Ollama Model Manager with real-time updates - Implemented model version tracking - Added bulk update capability - Added progress tracking for model updates - Displays model details (parameter size, quantization) - **GitHub Integration** - Added GitHub connection management - Implemented secure token storage - Added connection state persistence - Real-time connection status updates - Proper error handling and user feedback ### 📊 Event Logging - **System Monitoring** - Added real-time event logging system - Implemented log filtering by type (info, warning, error, debug) - Added log export functionality - Added auto-scroll and search capabilities - Enhanced log visualization with color coding ### 💫 Animations & Interactions - Added smooth page transitions - Implemented loading states with spinners - Added micro-interactions for better feedback - Enhanced button hover and active states - Added motion effects for UI elements ### 🔐 Security Features - Secure token storage - Added confirmation dialogs for destructive actions - Implemented data validation - Added file size and type validation - Secure connection management ### ♿️ Accessibility - Improved keyboard navigation - Enhanced screen reader support - Added ARIA labels and descriptions - Implemented focus management - Added proper dialog accessibility ### 🎯 Developer Experience - Added comprehensive debug information - Implemented system status monitoring - Added version control integration - Enhanced error handling and reporting - Added detailed logging system --- ## 🔧 Technical Details - **Frontend Stack** - React 18 with TypeScript - Framer Motion for animations - TailwindCSS for styling - Radix UI for accessible components - **State Management** - Local storage for persistence - React hooks for state - Custom stores for global state - **API Integration** - GitHub API integration - Ollama API integration - Provider API management - Error boundary implementation ## 📝 Notes - Initial release focusing on core functionality and user experience - Enhanced dark mode support across all components - Improved accessibility and keyboard navigation - Added comprehensive logging and debugging tools - Implemented robust error handling and user feedback
This commit is contained in:
@@ -1,23 +1,43 @@
|
||||
import { globSync } from 'fast-glob';
|
||||
import fs from 'node:fs/promises';
|
||||
import { basename } from 'node:path';
|
||||
import { basename, join } from 'node:path';
|
||||
import { defineConfig, presetIcons, presetUno, transformerDirectives } from 'unocss';
|
||||
import type { IconifyJSON } from '@iconify/types';
|
||||
|
||||
const iconPaths = globSync('./icons/*.svg');
|
||||
// Debug: Log the current working directory and icon paths
|
||||
console.log('CWD:', process.cwd());
|
||||
|
||||
const iconPaths = globSync(join(process.cwd(), 'public/icons/*.svg'));
|
||||
console.log('Found icons:', iconPaths);
|
||||
|
||||
const collectionName = 'bolt';
|
||||
|
||||
const customIconCollection = iconPaths.reduce(
|
||||
(acc, iconPath) => {
|
||||
const [iconName] = basename(iconPath).split('.');
|
||||
const customIconCollection = {
|
||||
[collectionName]: iconPaths.reduce(
|
||||
(acc, iconPath) => {
|
||||
const [iconName] = basename(iconPath).split('.');
|
||||
|
||||
acc[collectionName] ??= {};
|
||||
acc[collectionName][iconName] = async () => fs.readFile(iconPath, 'utf8');
|
||||
acc[iconName] = async () => {
|
||||
try {
|
||||
const content = await fs.readFile(iconPath, 'utf8');
|
||||
return content
|
||||
.replace(/fill="[^"]*"/g, '')
|
||||
.replace(/fill='[^']*'/g, '')
|
||||
.replace(/width="[^"]*"/g, '')
|
||||
.replace(/height="[^"]*"/g, '')
|
||||
.replace(/viewBox="[^"]*"/g, 'viewBox="0 0 24 24"')
|
||||
.replace(/<svg([^>]*)>/, '<svg $1 fill="currentColor">');
|
||||
} catch (error) {
|
||||
console.error(`Error loading icon ${iconName}:`, error);
|
||||
return '';
|
||||
}
|
||||
};
|
||||
|
||||
return acc;
|
||||
},
|
||||
{} as Record<string, Record<string, () => Promise<string>>>,
|
||||
);
|
||||
return acc;
|
||||
},
|
||||
{} as Record<string, () => Promise<string>>,
|
||||
),
|
||||
};
|
||||
|
||||
const BASE_COLORS = {
|
||||
white: '#FFFFFF',
|
||||
@@ -98,9 +118,7 @@ const COLOR_PRIMITIVES = {
|
||||
};
|
||||
|
||||
export default defineConfig({
|
||||
safelist: [
|
||||
...Object.keys(customIconCollection[collectionName]||{}).map(x=>`i-bolt:${x}`)
|
||||
],
|
||||
safelist: [...Object.keys(customIconCollection[collectionName] || {}).map((x) => `i-bolt:${x}`)],
|
||||
shortcuts: {
|
||||
'bolt-ease-cubic-bezier': 'ease-[cubic-bezier(0.4,0,0.2,1)]',
|
||||
'transition-theme': 'transition-[background-color,border-color,color] duration-150 bolt-ease-cubic-bezier',
|
||||
@@ -242,9 +260,27 @@ export default defineConfig({
|
||||
presetIcons({
|
||||
warn: true,
|
||||
collections: {
|
||||
...customIconCollection,
|
||||
bolt: customIconCollection.bolt,
|
||||
ph: async () => {
|
||||
const icons = await import('@iconify-json/ph/icons.json');
|
||||
return icons.default as IconifyJSON;
|
||||
},
|
||||
},
|
||||
extraProperties: {
|
||||
display: 'inline-block',
|
||||
'vertical-align': 'middle',
|
||||
width: '24px',
|
||||
height: '24px',
|
||||
},
|
||||
customizations: {
|
||||
customize(props) {
|
||||
return {
|
||||
...props,
|
||||
width: '24px',
|
||||
height: '24px',
|
||||
};
|
||||
},
|
||||
},
|
||||
unit: 'em',
|
||||
}),
|
||||
],
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user