Refactor frontend to Composition API and improve UI/UX
Major Changes: - Migrate components from Options API to Composition API with <script setup> - Add centralized service layer (serviceService, deliveryService, adminService) - Implement new reusable components (EnhancedButton, EnhancedModal, StatCard, etc.) - Add theme store for consistent theming across application - Improve ServiceCalendar with federal holidays and better styling - Refactor customer profile and tank estimation components - Update all delivery and payment pages to use centralized services - Add utility functions for formatting and validation - Update Dockerfiles for better environment configuration - Enhance Tailwind config with custom design tokens UI Improvements: - Modern, premium design with glassmorphism effects - Improved form layouts with FloatingInput components - Better loading states and empty states - Enhanced modals and tables with consistent styling - Responsive design improvements across all pages Technical Improvements: - Strict TypeScript types throughout - Better error handling and validation - Removed deprecated api.js in favor of TypeScript services - Improved code organization and maintainability
This commit is contained in:
@@ -3,20 +3,83 @@ module.exports = {
|
||||
presets: [],
|
||||
darkMode: 'class',
|
||||
daisyui: {
|
||||
// themes: ["dracula" ],
|
||||
themes: [{
|
||||
mytheme: {
|
||||
"primary": "#010409",
|
||||
"secondary": "#161B22",
|
||||
"accent": "#ff6600",
|
||||
"neutral": "#21262C",
|
||||
"base-100": "#0D1117",
|
||||
"info": "#74a0d5",
|
||||
"success": "#33cc33",
|
||||
"warning": "#97520C",
|
||||
"error": "#da0e0e",
|
||||
themes: [
|
||||
{
|
||||
ocean: {
|
||||
"primary": "#010409",
|
||||
"secondary": "#161B22",
|
||||
"accent": "#ff6600",
|
||||
"neutral": "#21262C",
|
||||
"base-100": "#0D1117",
|
||||
"base-200": "#161B22",
|
||||
"base-300": "#21262C",
|
||||
"info": "#74a0d5",
|
||||
"success": "#33cc33",
|
||||
"warning": "#97520C",
|
||||
"error": "#da0e0e",
|
||||
},
|
||||
},
|
||||
},],
|
||||
{
|
||||
forest: {
|
||||
"primary": "#1a472a",
|
||||
"secondary": "#2d5a3d",
|
||||
"accent": "#4ade80",
|
||||
"neutral": "#1e3a2f",
|
||||
"base-100": "#0f1f14",
|
||||
"base-200": "#162a1c",
|
||||
"base-300": "#1e3a2f",
|
||||
"info": "#67e8f9",
|
||||
"success": "#22c55e",
|
||||
"warning": "#eab308",
|
||||
"error": "#ef4444",
|
||||
},
|
||||
},
|
||||
{
|
||||
sunset: {
|
||||
"primary": "#44403c",
|
||||
"secondary": "#57534e",
|
||||
"accent": "#fb923c",
|
||||
"neutral": "#292524",
|
||||
"base-100": "#1c1917",
|
||||
"base-200": "#292524",
|
||||
"base-300": "#44403c",
|
||||
"info": "#38bdf8",
|
||||
"success": "#4ade80",
|
||||
"warning": "#fbbf24",
|
||||
"error": "#f87171",
|
||||
},
|
||||
},
|
||||
{
|
||||
arctic: {
|
||||
"primary": "#3b82f6",
|
||||
"secondary": "#64748b",
|
||||
"accent": "#06b6d4",
|
||||
"neutral": "#e2e8f0",
|
||||
"base-100": "#f8fafc",
|
||||
"base-200": "#f1f5f9",
|
||||
"base-300": "#e2e8f0",
|
||||
"info": "#0ea5e9",
|
||||
"success": "#22c55e",
|
||||
"warning": "#f59e0b",
|
||||
"error": "#ef4444",
|
||||
},
|
||||
},
|
||||
{
|
||||
midnight: {
|
||||
"primary": "#312e81",
|
||||
"secondary": "#3730a3",
|
||||
"accent": "#a78bfa",
|
||||
"neutral": "#1e1b4b",
|
||||
"base-100": "#0f0a1f",
|
||||
"base-200": "#1e1b4b",
|
||||
"base-300": "#312e81",
|
||||
"info": "#818cf8",
|
||||
"success": "#34d399",
|
||||
"warning": "#fbbf24",
|
||||
"error": "#f87171",
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
plugins: [require('daisyui')],
|
||||
theme: {
|
||||
@@ -129,6 +192,10 @@ module.exports = {
|
||||
ping: 'ping 1s cubic-bezier(0, 0, 0.2, 1) infinite',
|
||||
pulse: 'pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite',
|
||||
bounce: 'bounce 1s infinite',
|
||||
'fade-in': 'fadeIn 0.3s ease-in',
|
||||
'slide-up': 'slideUp 0.3s ease-out',
|
||||
'slide-down': 'slideDown 0.3s ease-out',
|
||||
'scale-in': 'scaleIn 0.2s ease-out',
|
||||
},
|
||||
aspectRatio: {
|
||||
auto: 'auto',
|
||||
@@ -405,27 +472,26 @@ module.exports = {
|
||||
},
|
||||
fontFamily: {
|
||||
sans: [
|
||||
'Arial',
|
||||
'ui-sans-serif',
|
||||
'system-ui',
|
||||
'Inter',
|
||||
'-apple-system',
|
||||
'BlinkMacSystemFont',
|
||||
'"Segoe UI"',
|
||||
'Roboto',
|
||||
'"Helvetica Neue"',
|
||||
'"Noto Sans"',
|
||||
'Arial',
|
||||
'sans-serif',
|
||||
'"Apple Color Emoji"',
|
||||
'"Segoe UI Emoji"',
|
||||
'"Segoe UI Symbol"',
|
||||
'"Noto Color Emoji"',
|
||||
],
|
||||
serif: ['ui-serif', 'Georgia', 'Cambria', '"Times New Roman"', 'Times', 'serif'],
|
||||
mono: [
|
||||
'SF Mono',
|
||||
'Monaco',
|
||||
'Cascadia Code',
|
||||
'ui-monospace',
|
||||
'SFMono-Regular',
|
||||
'Menlo',
|
||||
'Monaco',
|
||||
'Consolas',
|
||||
'"Liberation Mono"',
|
||||
'"Courier New"',
|
||||
@@ -670,6 +736,22 @@ module.exports = {
|
||||
animationTimingFunction: 'cubic-bezier(0,0,0.2,1)',
|
||||
},
|
||||
},
|
||||
fadeIn: {
|
||||
'0%': { opacity: '0' },
|
||||
'100%': { opacity: '1' },
|
||||
},
|
||||
slideUp: {
|
||||
'0%': { transform: 'translateY(10px)', opacity: '0' },
|
||||
'100%': { transform: 'translateY(0)', opacity: '1' },
|
||||
},
|
||||
slideDown: {
|
||||
'0%': { transform: 'translateY(-10px)', opacity: '0' },
|
||||
'100%': { transform: 'translateY(0)', opacity: '1' },
|
||||
},
|
||||
scaleIn: {
|
||||
'0%': { transform: 'scale(0.95)', opacity: '0' },
|
||||
'100%': { transform: 'scale(1)', opacity: '1' },
|
||||
},
|
||||
},
|
||||
letterSpacing: {
|
||||
tighter: '-0.05em',
|
||||
|
||||
Reference in New Issue
Block a user