dolphincss 1.0.6 → 1.1.7
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.
- package/dist/assets/css-CHU0oklF.css +1 -0
- package/dist/assets/main-BAdtaqDw.css +1 -0
- package/{index.html → dist/index.html} +3 -1
- package/dist/index.js +49 -0
- package/dolphin-css.css +1 -1
- package/package.json +22 -10
- package/MainCss/badge.css +0 -22
- package/MainCss/card.css +0 -17
- package/MainCss/chartCard.css +0 -146
- package/MainCss/darkVariable.css +0 -9
- package/MainCss/form.css +0 -202
- package/MainCss/glass.css +0 -80
- package/MainCss/global.css +0 -249
- package/MainCss/glow.css +0 -108
- package/MainCss/gradient.css +0 -13
- package/MainCss/icon.css +0 -41
- package/MainCss/kpi.css +0 -27
- package/MainCss/layout.css +0 -32
- package/MainCss/motion.css +0 -144
- package/MainCss/nav.css +0 -39
- package/MainCss/radio.css +0 -0
- package/MainCss/sideNave.css +0 -417
- package/MainCss/size.css +0 -6
- package/MainCss/table.css +0 -154
- package/MainCss/variable.css +0 -196
- package/eslint.config.js +0 -29
- package/src/App.css +0 -0
- package/src/App.jsx +0 -418
- package/src/dolphin-css/App.css +0 -21
- package/src/dolphin-css/index.css +0 -1
- package/src/examples/index.html +0 -13
- package/src/examples/package.json +0 -20
- package/src/examples/src/App.jsx +0 -32
- package/src/examples/src/main.jsx +0 -10
- package/src/examples/vite.config.js +0 -14
- package/src/index.css +0 -1
- package/src/main.jsx +0 -12
- package/vite.config.js +0 -36
package/MainCss/variable.css
DELETED
|
@@ -1,196 +0,0 @@
|
|
|
1
|
-
@import "tailwindcss";
|
|
2
|
-
|
|
3
|
-
:root {
|
|
4
|
-
/* Primary Colors - Sea Blue */
|
|
5
|
-
--color-primary: oklch(55% 0.12 200);
|
|
6
|
-
--color-primary-dark: oklch(45% 0.14 200);
|
|
7
|
-
--color-secondary: oklch(60% 0.08 190);
|
|
8
|
-
|
|
9
|
-
/* Semantic Colors - Ocean Inspired */
|
|
10
|
-
--color-success: oklch(65% 0.12 160);
|
|
11
|
-
--color-warning: oklch(75% 0.15 80);
|
|
12
|
-
--color-danger: oklch(60% 0.15 10);
|
|
13
|
-
--color-info: oklch(70% 0.10 220);
|
|
14
|
-
|
|
15
|
-
/* Neutral Colors */
|
|
16
|
-
--color-surface: oklch(96% 0.01 210);
|
|
17
|
-
--color-surface-alt: oklch(92% 0.015 210);
|
|
18
|
-
--color-text: oklch(22% 0.03 210);
|
|
19
|
-
--color-text-muted: oklch(45% 0.04 210);
|
|
20
|
-
--color-border: oklch(85% 0.02 210);
|
|
21
|
-
--color-shadow: oklch(0% 0 0 / 0.2);
|
|
22
|
-
|
|
23
|
-
/* Gradients */
|
|
24
|
-
--gradient-primary: linear-gradient(135deg, var(--color-primary), var(--color-primary-dark));
|
|
25
|
-
--gradient-success: linear-gradient(135deg, var(--color-success), oklch(60% 0.12 160));
|
|
26
|
-
--gradient-warning: linear-gradient(135deg, var(--color-warning), oklch(70% 0.15 80));
|
|
27
|
-
--gradient-danger: linear-gradient(135deg, var(--color-danger), oklch(55% 0.15 10));
|
|
28
|
-
--gradient-info: linear-gradient(135deg, var(--color-info), oklch(65% 0.11 220));
|
|
29
|
-
--gradient-ocean: linear-gradient(135deg, #a5f3fc, #67e8f9, #22d3ee);
|
|
30
|
-
|
|
31
|
-
/* ===== GLASSMORPHISM VARIABLES - UPDATED FOR BETTER VISIBILITY ===== */
|
|
32
|
-
--glass-bg: rgba(255, 255, 255, 0.25); /* Increased opacity */
|
|
33
|
-
--glass-bg-alt: rgba(255, 255, 255, 0.35); /* More visible on hover */
|
|
34
|
-
--glass-border: rgba(255, 255, 255, 0.35); /* Stronger border */
|
|
35
|
-
--glass-border-alt: rgba(255, 255, 255, 0.25);
|
|
36
|
-
--glass-shadow: 0 8px 32px rgba(0, 0, 0, 0.15); /* Enhanced shadow */
|
|
37
|
-
--glass-shadow-lg: 0 16px 48px rgba(0, 0, 0, 0.2);
|
|
38
|
-
--glass-blur: blur(20px); /* More blur for better effect */
|
|
39
|
-
--glass-blur-sm: blur(12px);
|
|
40
|
-
--glass-blur-lg: blur(24px);
|
|
41
|
-
|
|
42
|
-
/* Glass Background Colors for Variants */
|
|
43
|
-
--glass-primary-bg: rgba(59, 130, 246, 0.25);
|
|
44
|
-
--glass-success-bg: rgba(34, 197, 94, 0.25);
|
|
45
|
-
--glass-warning-bg: rgba(251, 191, 36, 0.25);
|
|
46
|
-
--glass-danger-bg: rgba(239, 68, 68, 0.25);
|
|
47
|
-
--glass-info-bg: rgba(59, 130, 246, 0.25);
|
|
48
|
-
|
|
49
|
-
/* Glass Border Colors for Variants */
|
|
50
|
-
--glass-primary-border: rgba(59, 130, 246, 0.4);
|
|
51
|
-
--glass-success-border: rgba(34, 197, 94, 0.4);
|
|
52
|
-
--glass-warning-border: rgba(251, 191, 36, 0.4);
|
|
53
|
-
--glass-danger-border: rgba(239, 68, 68, 0.4);
|
|
54
|
-
--glass-info-border: rgba(59, 130, 246, 0.4);
|
|
55
|
-
|
|
56
|
-
/* Glow Effects - Enhanced */
|
|
57
|
-
--glow-primary: 0 0 25px rgba(59, 130, 246, 0.5);
|
|
58
|
-
--glow-success: 0 0 25px rgba(34, 197, 94, 0.5);
|
|
59
|
-
--glow-warning: 0 0 25px rgba(251, 191, 36, 0.5);
|
|
60
|
-
--glow-danger: 0 0 25px rgba(239, 68, 68, 0.5);
|
|
61
|
-
--glow-info: 0 0 25px rgba(59, 130, 246, 0.5);
|
|
62
|
-
--glow-secondary: 0 0 25px rgba(139, 92, 246, 0.5);
|
|
63
|
-
|
|
64
|
-
/* Input Glow */
|
|
65
|
-
--glow-input: 0 0 0 3px rgba(59, 130, 246, 0.3);
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
[data-theme="dark"] {
|
|
69
|
-
/* Primary Colors */
|
|
70
|
-
--color-primary: oklch(45% 0.12 200);
|
|
71
|
-
--color-primary-dark: oklch(35% 0.14 200);
|
|
72
|
-
--color-secondary: oklch(48% 0.08 190);
|
|
73
|
-
|
|
74
|
-
/* Semantic Colors */
|
|
75
|
-
--color-success: oklch(55% 0.12 160);
|
|
76
|
-
--color-warning: oklch(65% 0.15 80);
|
|
77
|
-
--color-danger: oklch(55% 0.15 10);
|
|
78
|
-
--color-info: oklch(60% 0.10 220);
|
|
79
|
-
|
|
80
|
-
/* Neutral Colors */
|
|
81
|
-
--color-surface: oklch(18% 0.02 210);
|
|
82
|
-
--color-surface-alt: oklch(22% 0.025 210);
|
|
83
|
-
--color-text: oklch(98% 0 0);
|
|
84
|
-
--color-text-muted: oklch(80% 0.02 210);
|
|
85
|
-
--color-border: oklch(35% 0.03 210);
|
|
86
|
-
--color-shadow: oklch(0% 0 0 / 0.45); /* Darker shadow */
|
|
87
|
-
|
|
88
|
-
/* Gradients */
|
|
89
|
-
--gradient-primary: linear-gradient(135deg, var(--color-primary), var(--color-primary-dark));
|
|
90
|
-
--gradient-ocean: linear-gradient(135deg, #164e63, #0e7490, #0891b2);
|
|
91
|
-
|
|
92
|
-
/* ===== GLASSMORPHISM (DARK MODE) - UPDATED FOR BETTER VISIBILITY ===== */
|
|
93
|
-
--glass-bg: rgba(15, 23, 42, 0.45); /* Increased opacity */
|
|
94
|
-
--glass-bg-alt: rgba(15, 23, 42, 0.35);
|
|
95
|
-
--glass-border: rgba(255, 255, 255, 0.2); /* Better contrast */
|
|
96
|
-
--glass-border-alt: rgba(255, 255, 255, 0.15);
|
|
97
|
-
--glass-shadow: 0 8px 32px rgba(0, 0, 0, 0.4); /* Stronger shadows */
|
|
98
|
-
--glass-shadow-lg: 0 16px 48px rgba(0, 0, 0, 0.5);
|
|
99
|
-
--glass-blur: blur(20px);
|
|
100
|
-
--glass-blur-sm: blur(12px);
|
|
101
|
-
--glass-blur-lg: blur(24px);
|
|
102
|
-
|
|
103
|
-
/* Glass Background Colors for Dark Mode */
|
|
104
|
-
--glass-primary-bg: rgba(59, 130, 246, 0.3);
|
|
105
|
-
--glass-success-bg: rgba(34, 197, 94, 0.3);
|
|
106
|
-
--glass-warning-bg: rgba(251, 191, 36, 0.3);
|
|
107
|
-
--glass-danger-bg: rgba(239, 68, 68, 0.3);
|
|
108
|
-
--glass-info-bg: rgba(59, 130, 246, 0.3);
|
|
109
|
-
|
|
110
|
-
/* Glass Border Colors for Dark Mode */
|
|
111
|
-
--glass-primary-border: rgba(59, 130, 246, 0.5);
|
|
112
|
-
--glass-success-border: rgba(34, 197, 94, 0.5);
|
|
113
|
-
--glass-warning-border: rgba(251, 191, 36, 0.5);
|
|
114
|
-
--glass-danger-border: rgba(239, 68, 68, 0.5);
|
|
115
|
-
--glass-info-border: rgba(59, 130, 246, 0.5);
|
|
116
|
-
|
|
117
|
-
/* Glow Effects - Enhanced for Dark Mode */
|
|
118
|
-
--glow-primary: 0 0 30px rgba(59, 130, 246, 0.7);
|
|
119
|
-
--glow-success: 0 0 30px rgba(34, 197, 94, 0.7);
|
|
120
|
-
--glow-warning: 0 0 30px rgba(251, 191, 36, 0.7);
|
|
121
|
-
--glow-danger: 0 0 30px rgba(239, 68, 68, 0.7);
|
|
122
|
-
--glow-info: 0 0 30px rgba(59, 130, 246, 0.7);
|
|
123
|
-
--glow-secondary: 0 0 30px rgba(139, 92, 246, 0.7);
|
|
124
|
-
|
|
125
|
-
/* Input Glow for Dark Mode */
|
|
126
|
-
--glow-input: 0 0 0 3px rgba(59, 130, 246, 0.4);
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
/* ===== Dolphin Utility Classes ===== */
|
|
130
|
-
.dolphin-glow { box-shadow: var(--glow-primary); }
|
|
131
|
-
.dolphin-glow-success { box-shadow: var(--glow-success); }
|
|
132
|
-
.dolphin-glow-warning { box-shadow: var(--glow-warning); }
|
|
133
|
-
.dolphin-glow-danger { box-shadow: var(--glow-danger); }
|
|
134
|
-
.dolphin-glow-info { box-shadow: var(--glow-info); }
|
|
135
|
-
.dolphin-glow-secondary { box-shadow: var(--glow-secondary); }
|
|
136
|
-
|
|
137
|
-
.ocean-gradient { background: var(--gradient-ocean); }
|
|
138
|
-
.dolphin-gradient { background: var(--gradient-primary); }
|
|
139
|
-
.sea-foam { background-color: var(--color-surface); }
|
|
140
|
-
.deep-ocean { background-color: var(--color-surface-alt); }
|
|
141
|
-
|
|
142
|
-
/* ===== Enhanced Glass Component Styles ===== */
|
|
143
|
-
.glass {
|
|
144
|
-
@apply rounded-xl border transition-all duration-300 ease-out;
|
|
145
|
-
background-color: var(--glass-bg);
|
|
146
|
-
border-color: var(--glass-border);
|
|
147
|
-
backdrop-filter: var(--glass-blur);
|
|
148
|
-
box-shadow: var(--glass-shadow);
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
.glass:hover {
|
|
152
|
-
background-color: var(--glass-bg-alt);
|
|
153
|
-
border-color: var(--glass-border-alt);
|
|
154
|
-
backdrop-filter: var(--glass-blur-lg);
|
|
155
|
-
box-shadow: var(--glass-shadow-lg);
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
/* Glass Variants with Better Visibility */
|
|
159
|
-
.glass-primary {
|
|
160
|
-
background-color: var(--glass-primary-bg);
|
|
161
|
-
border-color: var(--glass-primary-border);
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
.glass-success {
|
|
165
|
-
background-color: var(--glass-success-bg);
|
|
166
|
-
border-color: var(--glass-success-border);
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
.glass-warning {
|
|
170
|
-
background-color: var(--glass-warning-bg);
|
|
171
|
-
border-color: var(--glass-warning-border);
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
.glass-danger {
|
|
175
|
-
background-color: var(--glass-danger-bg);
|
|
176
|
-
border-color: var(--glass-danger-border);
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
.glass-info {
|
|
180
|
-
background-color: var(--glass-info-bg);
|
|
181
|
-
border-color: var(--glass-info-border);
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
/* Ensure text remains visible on glass backgrounds */
|
|
185
|
-
.glass,
|
|
186
|
-
.glass-primary,
|
|
187
|
-
.glass-success,
|
|
188
|
-
.glass-warning,
|
|
189
|
-
.glass-danger,
|
|
190
|
-
.glass-info {
|
|
191
|
-
color: var(--color-text) !important;
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
.glass .text-muted {
|
|
195
|
-
color: var(--color-text-muted) !important;
|
|
196
|
-
}
|
package/eslint.config.js
DELETED
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import js from '@eslint/js'
|
|
2
|
-
import globals from 'globals'
|
|
3
|
-
import reactHooks from 'eslint-plugin-react-hooks'
|
|
4
|
-
import reactRefresh from 'eslint-plugin-react-refresh'
|
|
5
|
-
import { defineConfig, globalIgnores } from 'eslint/config'
|
|
6
|
-
|
|
7
|
-
export default defineConfig([
|
|
8
|
-
globalIgnores(['dist']),
|
|
9
|
-
{
|
|
10
|
-
files: ['**/*.{js,jsx}'],
|
|
11
|
-
extends: [
|
|
12
|
-
js.configs.recommended,
|
|
13
|
-
reactHooks.configs['recommended-latest'],
|
|
14
|
-
reactRefresh.configs.vite,
|
|
15
|
-
],
|
|
16
|
-
languageOptions: {
|
|
17
|
-
ecmaVersion: 2020,
|
|
18
|
-
globals: globals.browser,
|
|
19
|
-
parserOptions: {
|
|
20
|
-
ecmaVersion: 'latest',
|
|
21
|
-
ecmaFeatures: { jsx: true },
|
|
22
|
-
sourceType: 'module',
|
|
23
|
-
},
|
|
24
|
-
},
|
|
25
|
-
rules: {
|
|
26
|
-
'no-unused-vars': ['error', { varsIgnorePattern: '^[A-Z_]' }],
|
|
27
|
-
},
|
|
28
|
-
},
|
|
29
|
-
])
|
package/src/App.css
DELETED
|
File without changes
|
package/src/App.jsx
DELETED
|
@@ -1,418 +0,0 @@
|
|
|
1
|
-
import React, { useState } from "react";
|
|
2
|
-
import '../src/dolphin-css/App.css'
|
|
3
|
-
|
|
4
|
-
export default function App() {
|
|
5
|
-
const [theme, setTheme] = useState("light");
|
|
6
|
-
const [sidenavOpen, setSidenavOpen] = useState(true);
|
|
7
|
-
const [glassVariant, setGlassVariant] = useState("glass-primary");
|
|
8
|
-
const [userMenuOpen, setUserMenuOpen] = useState(false);
|
|
9
|
-
const [activeItem, setActiveItem] = useState("dashboard");
|
|
10
|
-
const [tableVariant, setTableVariant] = useState("glass-wave");
|
|
11
|
-
|
|
12
|
-
const toggleTheme = () => {
|
|
13
|
-
const newTheme = theme === "light" ? "dark" : "light";
|
|
14
|
-
setTheme(newTheme);
|
|
15
|
-
document.documentElement.setAttribute("data-theme", newTheme);
|
|
16
|
-
};
|
|
17
|
-
|
|
18
|
-
const navItems = [
|
|
19
|
-
{ id: "dashboard", icon: "📊", label: "Dashboard" },
|
|
20
|
-
{ id: "users", icon: "👥", label: "Users" },
|
|
21
|
-
{ id: "reports", icon: "📈", label: "Reports" },
|
|
22
|
-
{ id: "settings", icon: "⚙️", label: "Settings" },
|
|
23
|
-
{ id: "analytics", icon: "📊", label: "Analytics" },
|
|
24
|
-
{ id: "messages", icon: "💬", label: "Messages" },
|
|
25
|
-
{ id: "tables", icon: "📋", label: "Tables Demo" }
|
|
26
|
-
];
|
|
27
|
-
|
|
28
|
-
// Sample data for tables
|
|
29
|
-
const users = [
|
|
30
|
-
{ id: 1, name: "John Dolphin", email: "john@dolphin.com", status: "Active", role: "Admin" },
|
|
31
|
-
{ id: 2, name: "Sarah Ocean", email: "sarah@ocean.com", status: "Active", role: "User" },
|
|
32
|
-
{ id: 3, name: "Mike Wave", email: "mike@wave.com", status: "Inactive", role: "Editor" },
|
|
33
|
-
{ id: 4, name: "Emma Coral", email: "emma@coral.com", status: "Active", role: "User" }
|
|
34
|
-
];
|
|
35
|
-
|
|
36
|
-
const products = [
|
|
37
|
-
{ id: 1, name: "Dolphin Theme", price: "$49", stock: "25", sales: "142" },
|
|
38
|
-
{ id: 2, name: "Ocean UI Kit", price: "$79", stock: "12", sales: "89" },
|
|
39
|
-
{ id: 3, name: "Wave Components", price: "$29", stock: "45", sales: "234" },
|
|
40
|
-
{ id: 4, name: "Coral Icons", price: "$19", stock: "0", sales: "567" }
|
|
41
|
-
];
|
|
42
|
-
|
|
43
|
-
const tableVariants = [
|
|
44
|
-
{ id: "glass-wave", name: "🌊 Glass Wave" },
|
|
45
|
-
{ id: "neon-flow", name: "✨ Neon Flow" },
|
|
46
|
-
{ id: "holo-matrix", name: "🌌 Holo Matrix" },
|
|
47
|
-
{ id: "quantum-float", name: "🚀 Quantum Float" },
|
|
48
|
-
{ id: "aqua-depth", name: "🌊 Aqua Depth" }
|
|
49
|
-
];
|
|
50
|
-
|
|
51
|
-
const getStatusBadge = (status) => {
|
|
52
|
-
const variants = {
|
|
53
|
-
Active: "success",
|
|
54
|
-
Inactive: "warning"
|
|
55
|
-
};
|
|
56
|
-
return <span className={`badge sm ${variants[status]} filled`}>{status}</span>;
|
|
57
|
-
};
|
|
58
|
-
|
|
59
|
-
const getStockBadge = (stock) => {
|
|
60
|
-
if (stock === "0") return <span className="badge sm danger filled">Out of Stock</span>;
|
|
61
|
-
if (parseInt(stock) < 10) return <span className="badge sm warning filled">Low Stock</span>;
|
|
62
|
-
return <span className="badge sm success filled">In Stock</span>;
|
|
63
|
-
};
|
|
64
|
-
|
|
65
|
-
return (
|
|
66
|
-
<div className="flex min-h-screen ocean-gradient">
|
|
67
|
-
{/* Admin Side Navigation */}
|
|
68
|
-
<nav className={`admin-nav motion ${!sidenavOpen ? "collapsed" : ""} ${glassVariant}`}>
|
|
69
|
-
{/* Header */}
|
|
70
|
-
<div className="admin-nav-header">
|
|
71
|
-
<div className="admin-nav-brand">
|
|
72
|
-
<div className="admin-nav-logo">🌊</div>
|
|
73
|
-
<div className="admin-nav-title">DolphinCSS</div>
|
|
74
|
-
</div>
|
|
75
|
-
</div>
|
|
76
|
-
|
|
77
|
-
{/* Navigation Items */}
|
|
78
|
-
<div className="admin-nav-items">
|
|
79
|
-
{navItems.map(item => (
|
|
80
|
-
<a
|
|
81
|
-
key={item.id}
|
|
82
|
-
href="#"
|
|
83
|
-
className={`admin-nav-item motion ${activeItem === item.id ? "active" : ""}`}
|
|
84
|
-
onClick={(e) => {
|
|
85
|
-
e.preventDefault();
|
|
86
|
-
setActiveItem(item.id);
|
|
87
|
-
}}
|
|
88
|
-
>
|
|
89
|
-
<div className="admin-nav-icon">{item.icon}</div>
|
|
90
|
-
<div className="admin-nav-text">{item.label}</div>
|
|
91
|
-
<div className="admin-nav-tooltip">{item.label}</div>
|
|
92
|
-
</a>
|
|
93
|
-
))}
|
|
94
|
-
</div>
|
|
95
|
-
|
|
96
|
-
{/* User Section */}
|
|
97
|
-
<div className="admin-nav-user">
|
|
98
|
-
<div className="admin-nav-avatar">JD</div>
|
|
99
|
-
<div className="admin-nav-user-info">
|
|
100
|
-
<div className="admin-nav-user-name">John Doe</div>
|
|
101
|
-
<div className="admin-nav-user-role">Administrator</div>
|
|
102
|
-
</div>
|
|
103
|
-
</div>
|
|
104
|
-
|
|
105
|
-
{/* Glass Variant Selector */}
|
|
106
|
-
<div className="admin-nav-section">
|
|
107
|
-
<h3 className="text-color-text text-sm font-semibold mb-2">Glass Style:</h3>
|
|
108
|
-
<div className="flex flex-wrap gap-1">
|
|
109
|
-
{["glass-primary", "glass-success", "glass-warning", "glass-danger", "glass-info"].map(variant => (
|
|
110
|
-
<button
|
|
111
|
-
key={variant}
|
|
112
|
-
className={`px-2 py-1 rounded text-xs border ${
|
|
113
|
-
glassVariant === variant ? "border-color-primary bg-color-primary text-white" : "border-color-border text-color-text"
|
|
114
|
-
}`}
|
|
115
|
-
onClick={() => setGlassVariant(variant)}
|
|
116
|
-
>
|
|
117
|
-
{variant.split("-")[1]}
|
|
118
|
-
</button>
|
|
119
|
-
))}
|
|
120
|
-
</div>
|
|
121
|
-
</div>
|
|
122
|
-
|
|
123
|
-
{/* Table Variant Selector */}
|
|
124
|
-
{activeItem === "tables" && (
|
|
125
|
-
<div className="admin-nav-section">
|
|
126
|
-
<h3 className="text-color-text text-sm font-semibold mb-2">Table Style:</h3>
|
|
127
|
-
<div className="flex flex-wrap gap-1">
|
|
128
|
-
{tableVariants.map(variant => (
|
|
129
|
-
<button
|
|
130
|
-
key={variant.id}
|
|
131
|
-
className={`px-2 py-1 rounded text-xs border ${
|
|
132
|
-
tableVariant === variant.id ? "border-color-primary bg-color-primary text-white" : "border-color-border text-color-text"
|
|
133
|
-
}`}
|
|
134
|
-
onClick={() => setTableVariant(variant.id)}
|
|
135
|
-
>
|
|
136
|
-
{variant.name}
|
|
137
|
-
</button>
|
|
138
|
-
))}
|
|
139
|
-
</div>
|
|
140
|
-
</div>
|
|
141
|
-
)}
|
|
142
|
-
|
|
143
|
-
{/* Toggle Button */}
|
|
144
|
-
<button
|
|
145
|
-
className="admin-nav-toggle"
|
|
146
|
-
onClick={() => setSidenavOpen(!sidenavOpen)}
|
|
147
|
-
>
|
|
148
|
-
{sidenavOpen ? "←" : "→"}
|
|
149
|
-
</button>
|
|
150
|
-
</nav>
|
|
151
|
-
|
|
152
|
-
{/* Main Content */}
|
|
153
|
-
<div className="flex-1 p-6">
|
|
154
|
-
<div className="flex items-center justify-between mb-6">
|
|
155
|
-
<h1 className="text-3xl font-bold text-color-text">
|
|
156
|
-
{activeItem === "tables" ? "World-Class Tables Demo" : "Admin Dashboard"}
|
|
157
|
-
</h1>
|
|
158
|
-
|
|
159
|
-
<div className="flex items-center gap-3">
|
|
160
|
-
<button
|
|
161
|
-
className="filled primary md motion hover-pulse"
|
|
162
|
-
onClick={() => setSidenavOpen(!sidenavOpen)}
|
|
163
|
-
>
|
|
164
|
-
{sidenavOpen ? "← Collapse" : "→ Expand"}
|
|
165
|
-
</button>
|
|
166
|
-
|
|
167
|
-
<button
|
|
168
|
-
className="outlined primary md motion"
|
|
169
|
-
onClick={toggleTheme}
|
|
170
|
-
>
|
|
171
|
-
{theme === "light" ? "🌙 Dark" : "☀️ Light"}
|
|
172
|
-
</button>
|
|
173
|
-
</div>
|
|
174
|
-
</div>
|
|
175
|
-
|
|
176
|
-
{/* Stats Cards */}
|
|
177
|
-
{activeItem !== "tables" && (
|
|
178
|
-
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-4 mb-6">
|
|
179
|
-
{[
|
|
180
|
-
{ title: "Total Users", value: "12,458", change: "+12%", positive: true },
|
|
181
|
-
{ title: "Revenue", value: "$45,678", change: "+8%", positive: true },
|
|
182
|
-
{ title: "Orders", value: "2,345", change: "-3%", positive: false },
|
|
183
|
-
{ title: "Conversion", value: "4.8%", change: "+2%", positive: true }
|
|
184
|
-
].map((stat, index) => (
|
|
185
|
-
<div key={index} className="card motion hover-wave">
|
|
186
|
-
<div className="flex justify-between items-start">
|
|
187
|
-
<div>
|
|
188
|
-
<h3 className="text-color-text-muted text-sm font-medium">{stat.title}</h3>
|
|
189
|
-
<p className="text-2xl font-bold text-color-text mt-1">{stat.value}</p>
|
|
190
|
-
</div>
|
|
191
|
-
<div className={`badge sm ${stat.positive ? "success" : "danger"} filled`}>
|
|
192
|
-
{stat.change}
|
|
193
|
-
</div>
|
|
194
|
-
</div>
|
|
195
|
-
</div>
|
|
196
|
-
))}
|
|
197
|
-
</div>
|
|
198
|
-
)}
|
|
199
|
-
|
|
200
|
-
{/* Conditional Content Based on Active Item */}
|
|
201
|
-
{activeItem === "dashboard" && (
|
|
202
|
-
<>
|
|
203
|
-
{/* Main Content Area */}
|
|
204
|
-
<div className="grid grid-cols-1 lg:grid-cols-3 gap-6">
|
|
205
|
-
{/* Glass Content */}
|
|
206
|
-
<div className="lg:col-span-2">
|
|
207
|
-
<div className={`glass glass-lg motion ${glassVariant}`}>
|
|
208
|
-
<h2 className="text-color-text text-xl font-bold mb-3">Welcome to DolphinCSS</h2>
|
|
209
|
-
<p className="text-color-text-muted mb-4">
|
|
210
|
-
This is a modern admin dashboard built with DolphinCSS. Experience the power of
|
|
211
|
-
glass morphism, smooth animations, and customizable themes.
|
|
212
|
-
</p>
|
|
213
|
-
|
|
214
|
-
<div className="flex gap-3 mt-6">
|
|
215
|
-
<button className="filled primary md">Get Started</button>
|
|
216
|
-
<button className="outlined primary md">Learn More</button>
|
|
217
|
-
<button
|
|
218
|
-
className="filled success md"
|
|
219
|
-
onClick={() => setActiveItem("tables")}
|
|
220
|
-
>
|
|
221
|
-
🚀 See Tables
|
|
222
|
-
</button>
|
|
223
|
-
</div>
|
|
224
|
-
</div>
|
|
225
|
-
</div>
|
|
226
|
-
|
|
227
|
-
{/* Quick Actions */}
|
|
228
|
-
<div className="space-y-3">
|
|
229
|
-
<h3 className="text-color-text font-semibold mb-3">Quick Actions</h3>
|
|
230
|
-
|
|
231
|
-
{[
|
|
232
|
-
{ icon: "➕", label: "Add User", variant: "primary" },
|
|
233
|
-
{ icon: "📧", label: "Send Email", variant: "success" },
|
|
234
|
-
{ icon: "📊", label: "Generate Report", variant: "warning" },
|
|
235
|
-
{ icon: "⚙️", label: "Settings", variant: "info" }
|
|
236
|
-
].map((action, index) => (
|
|
237
|
-
<button
|
|
238
|
-
key={index}
|
|
239
|
-
className={`w-full filled ${action.variant} md motion hover-pulse flex items-center gap-3`}
|
|
240
|
-
>
|
|
241
|
-
<span className="text-lg">{action.icon}</span>
|
|
242
|
-
<span>{action.label}</span>
|
|
243
|
-
</button>
|
|
244
|
-
))}
|
|
245
|
-
</div>
|
|
246
|
-
</div>
|
|
247
|
-
|
|
248
|
-
{/* Current Active Section */}
|
|
249
|
-
<div className="mt-6">
|
|
250
|
-
<div className="card">
|
|
251
|
-
<h3 className="text-color-text font-semibold mb-3">
|
|
252
|
-
Active Section: <span className="text-color-primary capitalize">{activeItem}</span>
|
|
253
|
-
</h3>
|
|
254
|
-
<p className="text-color-text-muted">
|
|
255
|
-
You are currently viewing the {activeItem} section. Use the navigation menu to explore other sections.
|
|
256
|
-
</p>
|
|
257
|
-
</div>
|
|
258
|
-
</div>
|
|
259
|
-
</>
|
|
260
|
-
)}
|
|
261
|
-
|
|
262
|
-
{activeItem === "tables" && (
|
|
263
|
-
<div className="space-y-8">
|
|
264
|
-
{/* Table Controls */}
|
|
265
|
-
<div className="card">
|
|
266
|
-
<div className="flex flex-wrap items-center gap-4">
|
|
267
|
-
<div>
|
|
268
|
-
<h3 className="text-color-text font-semibold mb-2">Table Variants:</h3>
|
|
269
|
-
<div className="flex flex-wrap gap-2">
|
|
270
|
-
{tableVariants.map(variant => (
|
|
271
|
-
<button
|
|
272
|
-
key={variant.id}
|
|
273
|
-
className={`filled ${tableVariant === variant.id ? "primary" : "secondary"} sm motion`}
|
|
274
|
-
onClick={() => setTableVariant(variant.id)}
|
|
275
|
-
>
|
|
276
|
-
{variant.name}
|
|
277
|
-
</button>
|
|
278
|
-
))}
|
|
279
|
-
</div>
|
|
280
|
-
</div>
|
|
281
|
-
|
|
282
|
-
<div className="ml-auto">
|
|
283
|
-
<div className="badge lg primary filled">
|
|
284
|
-
Current: {tableVariants.find(v => v.id === tableVariant)?.name}
|
|
285
|
-
</div>
|
|
286
|
-
</div>
|
|
287
|
-
</div>
|
|
288
|
-
</div>
|
|
289
|
-
|
|
290
|
-
{/* Users Table */}
|
|
291
|
-
<div>
|
|
292
|
-
<div className="flex items-center justify-between mb-4">
|
|
293
|
-
<h2 className="text-2xl font-bold text-color-text">Users Table</h2>
|
|
294
|
-
<span className="badge primary outlined">Total: {users.length} users</span>
|
|
295
|
-
</div>
|
|
296
|
-
|
|
297
|
-
<div className="table-responsive">
|
|
298
|
-
<table className={`table ${tableVariant} mobile-cards motion-smooth`}>
|
|
299
|
-
<thead>
|
|
300
|
-
<tr className="bg-amber-300">
|
|
301
|
-
<th>ID</th>
|
|
302
|
-
<th>Name</th>
|
|
303
|
-
<th>Email</th>
|
|
304
|
-
<th>Status</th>
|
|
305
|
-
<th>Role</th>
|
|
306
|
-
<th>Actions</th>
|
|
307
|
-
</tr>
|
|
308
|
-
</thead>
|
|
309
|
-
<tbody>
|
|
310
|
-
{users.map(user => (
|
|
311
|
-
<tr key={user.id} className="p-6">
|
|
312
|
-
<td data-label="ID">#{user.id}</td>
|
|
313
|
-
<td data-label="Name">
|
|
314
|
-
<div className="flex items-center gap-3">
|
|
315
|
-
<div className="w-8 h-8 rounded-full bg-color-primary flex items-center justify-center text-white text-sm">
|
|
316
|
-
{user.name.charAt(0)}
|
|
317
|
-
</div>
|
|
318
|
-
{user.name}
|
|
319
|
-
</div>
|
|
320
|
-
</td>
|
|
321
|
-
<td data-label="Email">{user.email}</td>
|
|
322
|
-
<td data-label="Status">{getStatusBadge(user.status)}</td>
|
|
323
|
-
<td data-label="Role">
|
|
324
|
-
<span className="badge sm info outlined">{user.role}</span>
|
|
325
|
-
</td>
|
|
326
|
-
<td data-label="Actions">
|
|
327
|
-
<div className="flex gap-2">
|
|
328
|
-
<button className="filled success sm motion">Edit</button>
|
|
329
|
-
<button className="filled danger sm motion">Delete</button>
|
|
330
|
-
</div>
|
|
331
|
-
</td>
|
|
332
|
-
</tr>
|
|
333
|
-
))}
|
|
334
|
-
</tbody>
|
|
335
|
-
</table>
|
|
336
|
-
</div>
|
|
337
|
-
</div>
|
|
338
|
-
|
|
339
|
-
{/* Products Table */}
|
|
340
|
-
<div>
|
|
341
|
-
<div className="flex items-center justify-between mb-4">
|
|
342
|
-
<h2 className="text-2xl font-bold text-color-text">Products Table</h2>
|
|
343
|
-
<span className="badge success outlined">Inventory Management</span>
|
|
344
|
-
</div>
|
|
345
|
-
|
|
346
|
-
<div className="table-responsive">
|
|
347
|
-
<table className={`table ${tableVariant} mobile-cards motion-smooth`}>
|
|
348
|
-
<thead>
|
|
349
|
-
<tr>
|
|
350
|
-
<th>ID</th>
|
|
351
|
-
<th>Product Name</th>
|
|
352
|
-
<th>Price</th>
|
|
353
|
-
<th>Stock</th>
|
|
354
|
-
<th>Sales</th>
|
|
355
|
-
<th>Actions</th>
|
|
356
|
-
</tr>
|
|
357
|
-
</thead>
|
|
358
|
-
<tbody>
|
|
359
|
-
{products.map(product => (
|
|
360
|
-
<tr key={product.id}>
|
|
361
|
-
<td data-label="ID">#{product.id}</td>
|
|
362
|
-
<td data-label="Product Name">
|
|
363
|
-
<div className="font-semibold text-color-text">{product.name}</div>
|
|
364
|
-
</td>
|
|
365
|
-
<td data-label="Price" className="font-bold text-color-primary">{product.price}</td>
|
|
366
|
-
<td data-label="Stock">{getStockBadge(product.stock)}</td>
|
|
367
|
-
<td data-label="Sales">
|
|
368
|
-
<div className="flex items-center gap-2">
|
|
369
|
-
<span className="font-semibold">{product.sales}</span>
|
|
370
|
-
<span className="text-color-success text-sm">↑</span>
|
|
371
|
-
</div>
|
|
372
|
-
</td>
|
|
373
|
-
<td data-label="Actions">
|
|
374
|
-
<div className="flex gap-2">
|
|
375
|
-
<button className="filled primary sm motion">View</button>
|
|
376
|
-
<button className="outlined primary sm motion">Order</button>
|
|
377
|
-
</div>
|
|
378
|
-
</td>
|
|
379
|
-
</tr>
|
|
380
|
-
))}
|
|
381
|
-
</tbody>
|
|
382
|
-
</table>
|
|
383
|
-
</div>
|
|
384
|
-
</div>
|
|
385
|
-
|
|
386
|
-
{/* Stats Cards for Tables Page */}
|
|
387
|
-
<div className="grid grid-cols-1 md:grid-cols-4 gap-4">
|
|
388
|
-
<div className="card motion hover-wave">
|
|
389
|
-
<div className="text-center">
|
|
390
|
-
<div className="text-2xl font-bold text-color-primary mb-1">{users.length}</div>
|
|
391
|
-
<div className="text-color-text-muted text-sm">Total Users</div>
|
|
392
|
-
</div>
|
|
393
|
-
</div>
|
|
394
|
-
<div className="card motion hover-wave">
|
|
395
|
-
<div className="text-center">
|
|
396
|
-
<div className="text-2xl font-bold text-color-success mb-1">{products.length}</div>
|
|
397
|
-
<div className="text-color-text-muted text-sm">Total Products</div>
|
|
398
|
-
</div>
|
|
399
|
-
</div>
|
|
400
|
-
<div className="card motion hover-wave">
|
|
401
|
-
<div className="text-center">
|
|
402
|
-
<div className="text-2xl font-bold text-color-warning mb-1">{users.filter(u => u.status === 'Active').length}</div>
|
|
403
|
-
<div className="text-color-text-muted text-sm">Active Users</div>
|
|
404
|
-
</div>
|
|
405
|
-
</div>
|
|
406
|
-
<div className="card motion hover-wave">
|
|
407
|
-
<div className="text-center">
|
|
408
|
-
<div className="text-2xl font-bold text-color-info mb-1">{tableVariants.length}</div>
|
|
409
|
-
<div className="text-color-text-muted text-sm">Table Variants</div>
|
|
410
|
-
</div>
|
|
411
|
-
</div>
|
|
412
|
-
</div>
|
|
413
|
-
</div>
|
|
414
|
-
)}
|
|
415
|
-
</div>
|
|
416
|
-
</div>
|
|
417
|
-
);
|
|
418
|
-
}
|
package/src/dolphin-css/App.css
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
/* App.css - USE THESE RELATIVE PATHS */
|
|
2
|
-
@import "tailwindcss";
|
|
3
|
-
@import "../../MainCss/global.css";
|
|
4
|
-
@import "../../MainCss/variable.css";
|
|
5
|
-
@import "../../MainCss/badge.css";
|
|
6
|
-
@import "../../MainCss/card.css";
|
|
7
|
-
@import "../../MainCss/chartCard.css";
|
|
8
|
-
@import "../../MainCss/darkVariable.css";
|
|
9
|
-
@import "../../MainCss/form.css";
|
|
10
|
-
@import "../../MainCss/glow.css";
|
|
11
|
-
@import "../../MainCss/gradient.css";
|
|
12
|
-
@import "../../MainCss/icon.css";
|
|
13
|
-
@import "../../MainCss/kpi.css";
|
|
14
|
-
@import "../../MainCss/layout.css";
|
|
15
|
-
@import "../../MainCss/nav.css";
|
|
16
|
-
@import "../../MainCss/radio.css";
|
|
17
|
-
@import "../../MainCss/size.css";
|
|
18
|
-
@import "../../MainCss/table.css";
|
|
19
|
-
@import "../../MainCss/sideNave.css";
|
|
20
|
-
@import "../../MainCss/glass.css";
|
|
21
|
-
@import "../../MainCss/motion.css";
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
@import "tailwindcss";
|