adminator-admin-dashboard 2.7.0 → 2.8.0
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/CHANGELOG.md +453 -0
- package/README.md +144 -71
- package/dist/main.js +384 -302
- package/dist/main.js.map +1 -1
- package/package.json +22 -23
- package/src/assets/scripts/app.js +6 -5
- package/src/assets/scripts/utils/theme.js +4 -2
- package/src/assets/scripts/vectorMaps/index.js +5 -5
- package/RELEASE_NOTES.md +0 -92
- package/dist/55b07f26c86c8e3d3754.svg +0 -1
- package/dist/9fad440d8ee7a949a9a9.svg +0 -1
- package/dist/test.html +0 -91
- package/src/test.html +0 -96
- /package/dist/assets/{c1e38fd9e0e74ba58f7a2b77ef29fdd3.svg → fontawesome-webfont.svg} +0 -0
- /package/dist/assets/{f0fc8c798eac5636249c4ea287832422.svg → themify.svg} +0 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "adminator-admin-dashboard",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.8.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Modern jQuery-free Bootstrap 5 Admin Dashboard Template with Dark Mode",
|
|
6
6
|
"main": "dist/index.html",
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
"src/**/*",
|
|
39
39
|
"webpack.config.js",
|
|
40
40
|
"CLAUDE.md",
|
|
41
|
-
"
|
|
41
|
+
"CHANGELOG.md",
|
|
42
42
|
"README.md"
|
|
43
43
|
],
|
|
44
44
|
"engines": {
|
|
@@ -55,53 +55,52 @@
|
|
|
55
55
|
"lint:js": "eslint ./src ./webpack ./*.js -f table --ext .js --ext .jsx",
|
|
56
56
|
"lint:scss": "stylelint ./src/**/*.scss",
|
|
57
57
|
"lint": "npm run lint:js && npm run lint:scss",
|
|
58
|
-
"prepublishOnly": "npm run build",
|
|
58
|
+
"prepublishOnly": "npm run lint && npm run build",
|
|
59
59
|
"postpublish": "echo 'Package published successfully! View at: https://www.npmjs.com/package/adminator-admin-dashboard'"
|
|
60
60
|
},
|
|
61
61
|
"devDependencies": {
|
|
62
|
-
"@babel/core": "^7.
|
|
63
|
-
"@babel/eslint-parser": "^7.
|
|
64
|
-
"@babel/plugin-transform-runtime": "^7.
|
|
65
|
-
"@babel/preset-env": "^7.
|
|
66
|
-
"@
|
|
67
|
-
"@eslint/js": "^9.29.0",
|
|
62
|
+
"@babel/core": "^7.28.0",
|
|
63
|
+
"@babel/eslint-parser": "^7.28.0",
|
|
64
|
+
"@babel/plugin-transform-runtime": "^7.28.0",
|
|
65
|
+
"@babel/preset-env": "^7.28.0",
|
|
66
|
+
"@eslint/js": "^9.33.0",
|
|
68
67
|
"babel-loader": "^10.0.0",
|
|
69
68
|
"case-sensitive-paths-webpack-plugin": "^2.4.0",
|
|
70
69
|
"copy-webpack-plugin": "^13.0.0",
|
|
71
|
-
"cross-env": "^
|
|
70
|
+
"cross-env": "^10.0.0",
|
|
72
71
|
"css-loader": "^7.1.2",
|
|
73
72
|
"css-minimizer-webpack-plugin": "^7.0.2",
|
|
74
|
-
"eslint": "^9.
|
|
73
|
+
"eslint": "^9.33.0",
|
|
75
74
|
"eslint-formatter-table": "^7.32.1",
|
|
76
|
-
"globals": "^16.
|
|
75
|
+
"globals": "^16.3.0",
|
|
77
76
|
"html-webpack-plugin": "^5.6.3",
|
|
78
|
-
"mini-css-extract-plugin": "^2.9.
|
|
77
|
+
"mini-css-extract-plugin": "^2.9.3",
|
|
79
78
|
"postcss": "^8.5.6",
|
|
80
79
|
"postcss-loader": "^8.1.1",
|
|
81
|
-
"postcss-preset-env": "^10.2.
|
|
82
|
-
"sass": "^1.
|
|
80
|
+
"postcss-preset-env": "^10.2.4",
|
|
81
|
+
"sass": "^1.90.0",
|
|
83
82
|
"sass-loader": "^16.0.5",
|
|
84
83
|
"shx": "^0.4.0",
|
|
85
84
|
"style-loader": "^4.0.0",
|
|
86
|
-
"stylelint": "^16.
|
|
85
|
+
"stylelint": "^16.23.1",
|
|
87
86
|
"stylelint-config-standard": "^38.0.0",
|
|
88
|
-
"webpack": "^5.
|
|
87
|
+
"webpack": "^5.101.0",
|
|
89
88
|
"webpack-cli": "^6.0.1",
|
|
90
89
|
"webpack-dashboard": "^3.3.8",
|
|
91
90
|
"webpack-dev-server": "^5.2.2"
|
|
92
91
|
},
|
|
93
92
|
"dependencies": {
|
|
94
|
-
"@
|
|
95
|
-
"@fullcalendar/
|
|
96
|
-
"@fullcalendar/
|
|
97
|
-
"@fullcalendar/
|
|
98
|
-
"@fullcalendar/
|
|
93
|
+
"@babel/runtime": "^7.28.2",
|
|
94
|
+
"@fullcalendar/core": "^6.1.19",
|
|
95
|
+
"@fullcalendar/daygrid": "^6.1.19",
|
|
96
|
+
"@fullcalendar/interaction": "^6.1.19",
|
|
97
|
+
"@fullcalendar/list": "^6.1.19",
|
|
98
|
+
"@fullcalendar/timegrid": "^6.1.19",
|
|
99
99
|
"@popperjs/core": "^2.11.8",
|
|
100
100
|
"bootstrap": "^5.3.7",
|
|
101
101
|
"brand-colors": "^2.1.1",
|
|
102
102
|
"chart.js": "^4.5.0",
|
|
103
103
|
"dayjs": "^1.11.13",
|
|
104
|
-
"file-loader": "^6.2.0",
|
|
105
104
|
"jsvectormap": "^1.6.0",
|
|
106
105
|
"load-google-maps-api": "^2.0.2",
|
|
107
106
|
"lodash": "^4.17.21",
|
|
@@ -5,9 +5,9 @@
|
|
|
5
5
|
|
|
6
6
|
// Note: Bootstrap 5 CSS is still available via SCSS imports
|
|
7
7
|
// Bootstrap JS components removed to eliminate jQuery dependency
|
|
8
|
-
import DOM from './utils/dom';
|
|
8
|
+
import { DOM } from './utils/dom';
|
|
9
9
|
import DateUtils from './utils/date';
|
|
10
|
-
import
|
|
10
|
+
import ThemeManager from './utils/theme';
|
|
11
11
|
import Sidebar from './components/Sidebar';
|
|
12
12
|
import ChartComponent from './components/Chart';
|
|
13
13
|
|
|
@@ -31,6 +31,7 @@ class AdminatorApp {
|
|
|
31
31
|
constructor() {
|
|
32
32
|
this.components = new Map();
|
|
33
33
|
this.isInitialized = false;
|
|
34
|
+
this.themeManager = ThemeManager;
|
|
34
35
|
|
|
35
36
|
// Initialize when DOM is ready
|
|
36
37
|
DOM.ready(() => {
|
|
@@ -212,7 +213,7 @@ class AdminatorApp {
|
|
|
212
213
|
// Initializing theme system
|
|
213
214
|
|
|
214
215
|
// Initialize theme system first
|
|
215
|
-
|
|
216
|
+
this.themeManager.init();
|
|
216
217
|
|
|
217
218
|
// Inject theme toggle if missing - with retry mechanism
|
|
218
219
|
setTimeout(() => {
|
|
@@ -249,11 +250,11 @@ class AdminatorApp {
|
|
|
249
250
|
const toggle = DOM.select('#theme-toggle');
|
|
250
251
|
if (toggle) {
|
|
251
252
|
// Set initial state
|
|
252
|
-
const currentTheme =
|
|
253
|
+
const currentTheme = this.themeManager.current();
|
|
253
254
|
toggle.checked = currentTheme === 'dark';
|
|
254
255
|
|
|
255
256
|
DOM.on(toggle, 'change', () => {
|
|
256
|
-
|
|
257
|
+
this.themeManager.apply(toggle.checked ? 'dark' : 'light');
|
|
257
258
|
});
|
|
258
259
|
|
|
259
260
|
// Listen for theme changes from other sources
|
|
@@ -40,7 +40,9 @@ const Theme = {
|
|
|
40
40
|
}
|
|
41
41
|
try {
|
|
42
42
|
localStorage.setItem(THEME_KEY, theme);
|
|
43
|
-
} catch
|
|
43
|
+
} catch {
|
|
44
|
+
// Ignore errors
|
|
45
|
+
}
|
|
44
46
|
window.dispatchEvent(new CustomEvent('adminator:themeChanged', { detail: { theme } }));
|
|
45
47
|
},
|
|
46
48
|
toggle() {
|
|
@@ -50,7 +52,7 @@ const Theme = {
|
|
|
50
52
|
current() {
|
|
51
53
|
try {
|
|
52
54
|
return localStorage.getItem(THEME_KEY) || 'light';
|
|
53
|
-
} catch
|
|
55
|
+
} catch {
|
|
54
56
|
return 'light';
|
|
55
57
|
}
|
|
56
58
|
},
|
|
@@ -24,7 +24,7 @@ export default (function () {
|
|
|
24
24
|
if (mapInstance) {
|
|
25
25
|
try {
|
|
26
26
|
mapInstance.destroy();
|
|
27
|
-
} catch
|
|
27
|
+
} catch {
|
|
28
28
|
// Map instance cleanup
|
|
29
29
|
}
|
|
30
30
|
mapInstance = null;
|
|
@@ -166,7 +166,7 @@ export default (function () {
|
|
|
166
166
|
tooltip.text(`${regionName}${value ? `: ${ value}` : ''}`);
|
|
167
167
|
},
|
|
168
168
|
|
|
169
|
-
onLoaded(
|
|
169
|
+
onLoaded() {
|
|
170
170
|
// Map loaded successfully
|
|
171
171
|
},
|
|
172
172
|
});
|
|
@@ -174,7 +174,7 @@ export default (function () {
|
|
|
174
174
|
// Store instance for theme updates
|
|
175
175
|
worldMapContainer.mapInstance = mapInstance;
|
|
176
176
|
|
|
177
|
-
} catch
|
|
177
|
+
} catch {
|
|
178
178
|
// Error initializing JSVectorMap
|
|
179
179
|
|
|
180
180
|
// Fallback: show a simple message
|
|
@@ -238,7 +238,7 @@ export default (function () {
|
|
|
238
238
|
container.style.backgroundColor = colors.backgroundColor;
|
|
239
239
|
}
|
|
240
240
|
|
|
241
|
-
} catch
|
|
241
|
+
} catch {
|
|
242
242
|
// Theme update failed, reinitializing map
|
|
243
243
|
vectorMapInit();
|
|
244
244
|
}
|
|
@@ -261,7 +261,7 @@ export default (function () {
|
|
|
261
261
|
if (mapInstance) {
|
|
262
262
|
try {
|
|
263
263
|
mapInstance.destroy();
|
|
264
|
-
} catch
|
|
264
|
+
} catch {
|
|
265
265
|
// Map cleanup on unload
|
|
266
266
|
}
|
|
267
267
|
mapInstance = null;
|
package/RELEASE_NOTES.md
DELETED
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
# 🚀 Adminator v2.7.0 - jQuery-Free Release
|
|
2
|
-
|
|
3
|
-
## 📋 Overview
|
|
4
|
-
This major release completely removes jQuery dependency from the Adminator admin dashboard while maintaining all functionality and improving performance. The project now uses modern vanilla JavaScript with Bootstrap 5.3.7.
|
|
5
|
-
|
|
6
|
-
## ✨ Major Changes
|
|
7
|
-
|
|
8
|
-
### 🗑️ Removed jQuery Dependencies (600KB+ bundle reduction)
|
|
9
|
-
- ❌ **jQuery Core** (3.7.1) → ✅ **Vanilla JavaScript**
|
|
10
|
-
- ❌ **jQuery Sparkline** (2.4.0) → ✅ **Chart.js 4.5.0** mini charts
|
|
11
|
-
- ❌ **Bootstrap Datepicker** (1.10.0) → ✅ **HTML5 date inputs** + vanilla JS
|
|
12
|
-
- ❌ **DataTables** (1.10.18) → ✅ **Custom vanilla JS** table component
|
|
13
|
-
- ❌ **Easy Pie Chart** (2.1.7) → ✅ **Custom SVG** pie charts
|
|
14
|
-
- ❌ **jVectorMap** (2.0.4) → ✅ **JSVectorMap 1.6.0** (jQuery-free)
|
|
15
|
-
|
|
16
|
-
### 🔧 New Vanilla JavaScript Components
|
|
17
|
-
- **Bootstrap 5 Components**: Modals, dropdowns, popovers, tooltips, accordions
|
|
18
|
-
- **Enhanced Data Tables**: Sorting, pagination, search functionality
|
|
19
|
-
- **Interactive Charts**: Chart.js-based sparklines with theme support
|
|
20
|
-
- **Vector Maps**: Interactive world maps with markers and tooltips
|
|
21
|
-
- **Date Pickers**: HTML5 date inputs with enhanced UX
|
|
22
|
-
- **Theme System**: Improved dark/light mode with CSS variables
|
|
23
|
-
|
|
24
|
-
### 📱 Mobile Enhancements
|
|
25
|
-
- Full-width search overlay for mobile devices
|
|
26
|
-
- Enhanced dropdown behavior with overlay management
|
|
27
|
-
- Touch-friendly interactions and gestures
|
|
28
|
-
- Viewport-based responsive breakpoints
|
|
29
|
-
- Prevents horizontal scrolling on mobile
|
|
30
|
-
|
|
31
|
-
### 🎨 Bootstrap 5 Migration
|
|
32
|
-
- **Updated to Bootstrap 5.3.7** from Bootstrap 4
|
|
33
|
-
- **Fixed deprecated classes**: `sr-only` → `visually-hidden`
|
|
34
|
-
- **Updated data attributes**: `data-toggle` → `data-bs-toggle`
|
|
35
|
-
- **Enhanced UI components**: New examples and improved styling
|
|
36
|
-
- **Better accessibility**: Proper ARIA attributes and keyboard navigation
|
|
37
|
-
|
|
38
|
-
## 🚀 Performance Improvements
|
|
39
|
-
- **Bundle size reduction**: ~600KB smaller JavaScript bundle
|
|
40
|
-
- **Faster page loads**: Eliminated jQuery dependency
|
|
41
|
-
- **Modern ES6+**: Class-based architecture with better maintainability
|
|
42
|
-
- **Optimized builds**: Webpack 5.99.9 with modern optimizations
|
|
43
|
-
|
|
44
|
-
## 📦 New Features
|
|
45
|
-
- **Theme Toggle**: Automatic injection with OS preference detection
|
|
46
|
-
- **Comprehensive Documentation**: Updated CLAUDE.md with full architecture guide
|
|
47
|
-
- **Mobile-First Design**: Enhanced mobile experience across all components
|
|
48
|
-
- **Dark Mode**: Complete dark mode implementation with CSS variables
|
|
49
|
-
|
|
50
|
-
## 🔧 Technical Details
|
|
51
|
-
- **Build System**: Webpack 5.99.9 with hot module replacement
|
|
52
|
-
- **JavaScript**: ES6+ with Babel transpilation, ESLint 9.x flat config
|
|
53
|
-
- **CSS**: Sass/SCSS with PostCSS processing
|
|
54
|
-
- **Frontend**: 100% jQuery-free vanilla JavaScript
|
|
55
|
-
- **Theme System**: CSS variables-based dark/light mode
|
|
56
|
-
|
|
57
|
-
## 📖 Documentation
|
|
58
|
-
- Complete architecture documentation in `CLAUDE.md`
|
|
59
|
-
- Development commands and workflow guidelines
|
|
60
|
-
- Component integration examples
|
|
61
|
-
- Mobile optimization techniques
|
|
62
|
-
|
|
63
|
-
## 🔗 Demo
|
|
64
|
-
- **Live Demo**: https://puikinsh.github.io/Adminator-admin-dashboard/
|
|
65
|
-
- **Development Server**: `npm start` (http://localhost:4000)
|
|
66
|
-
|
|
67
|
-
## 💻 Quick Start
|
|
68
|
-
```bash
|
|
69
|
-
# Install dependencies
|
|
70
|
-
npm install
|
|
71
|
-
|
|
72
|
-
# Start development server
|
|
73
|
-
npm start
|
|
74
|
-
|
|
75
|
-
# Build for production
|
|
76
|
-
npm run build
|
|
77
|
-
|
|
78
|
-
# Run linters
|
|
79
|
-
npm run lint
|
|
80
|
-
```
|
|
81
|
-
|
|
82
|
-
## 🎯 What's Next
|
|
83
|
-
This release establishes a modern, maintainable foundation for the Adminator admin dashboard. All functionality has been preserved while significantly improving performance and developer experience.
|
|
84
|
-
|
|
85
|
-
## 🙏 Acknowledgments
|
|
86
|
-
- Original design by [Colorlib](https://colorlib.com)
|
|
87
|
-
- jQuery removal and modernization completed with comprehensive testing
|
|
88
|
-
- Bootstrap 5 migration with full backward compatibility
|
|
89
|
-
|
|
90
|
-
---
|
|
91
|
-
|
|
92
|
-
**Full Changelog**: https://github.com/puikinsh/Adminator-admin-dashboard/compare/v2.6.1...v2.7.0
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export default __webpack_public_path__ + "assets/c1e38fd9e0e74ba58f7a2b77ef29fdd3.svg";
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export default __webpack_public_path__ + "assets/f0fc8c798eac5636249c4ea287832422.svg";
|
package/dist/test.html
DELETED
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
<!DOCTYPE html>
|
|
2
|
-
<html lang="en">
|
|
3
|
-
<head>
|
|
4
|
-
<meta charset="utf-8">
|
|
5
|
-
<meta name="viewport" content="width=device-width,initial-scale=1,shrink-to-fit=no">
|
|
6
|
-
<title>Test</title>
|
|
7
|
-
<style>
|
|
8
|
-
#loader {
|
|
9
|
-
transition: all 0.3s ease-in-out;
|
|
10
|
-
opacity: 1;
|
|
11
|
-
visibility: visible;
|
|
12
|
-
position: fixed;
|
|
13
|
-
height: 100vh;
|
|
14
|
-
width: 100%;
|
|
15
|
-
background: #fff;
|
|
16
|
-
z-index: 90000;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
#loader.fadeOut {
|
|
20
|
-
opacity: 0;
|
|
21
|
-
visibility: hidden;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
.spinner {
|
|
27
|
-
width: 40px;
|
|
28
|
-
height: 40px;
|
|
29
|
-
position: absolute;
|
|
30
|
-
top: calc(50% - 20px);
|
|
31
|
-
left: calc(50% - 20px);
|
|
32
|
-
background-color: #333;
|
|
33
|
-
border-radius: 100%;
|
|
34
|
-
-webkit-animation: sk-scaleout 1.0s infinite ease-in-out;
|
|
35
|
-
animation: sk-scaleout 1.0s infinite ease-in-out;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
@-webkit-keyframes sk-scaleout {
|
|
39
|
-
0% { -webkit-transform: scale(0) }
|
|
40
|
-
100% {
|
|
41
|
-
-webkit-transform: scale(1.0);
|
|
42
|
-
opacity: 0;
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
@keyframes sk-scaleout {
|
|
47
|
-
0% {
|
|
48
|
-
-webkit-transform: scale(0);
|
|
49
|
-
transform: scale(0);
|
|
50
|
-
} 100% {
|
|
51
|
-
-webkit-transform: scale(1.0);
|
|
52
|
-
transform: scale(1.0);
|
|
53
|
-
opacity: 0;
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
</style>
|
|
57
|
-
<script defer="defer" src="main.js"></script></head>
|
|
58
|
-
<body class="app">
|
|
59
|
-
<div id="loader">
|
|
60
|
-
<div class="spinner"></div>
|
|
61
|
-
</div>
|
|
62
|
-
|
|
63
|
-
<script>
|
|
64
|
-
window.addEventListener('load', function load() {
|
|
65
|
-
const loader = document.getElementById('loader');
|
|
66
|
-
setTimeout(function() {
|
|
67
|
-
loader.classList.add('fadeOut');
|
|
68
|
-
}, 300);
|
|
69
|
-
});
|
|
70
|
-
</script>
|
|
71
|
-
<div class="page-container">
|
|
72
|
-
|
|
73
|
-
<main class="main-content bgc-grey-100">
|
|
74
|
-
<div id="mainContent">
|
|
75
|
-
<div class="full-container">
|
|
76
|
-
<button type="button" class="btn btn-secondary" data-bs-toggle="tooltip" data-bs-placement="top" title="Tooltip on top">
|
|
77
|
-
Tooltip on top
|
|
78
|
-
</button>
|
|
79
|
-
<button type="button" class="btn btn-secondary" data-bs-toggle="tooltip" data-bs-placement="top" title="Tooltip on top">
|
|
80
|
-
Tooltip on top
|
|
81
|
-
</button>
|
|
82
|
-
|
|
83
|
-
</div>
|
|
84
|
-
</div>
|
|
85
|
-
</main>
|
|
86
|
-
<footer class="bdT ta-c p-30 lh-0 fsz-sm c-grey-600">
|
|
87
|
-
<span>Copyright © 2025 Designed by <a href="https://colorlib.com" target="_blank" rel="nofollow noopener noreferrer" title="Colorlib">Colorlib</a>. All rights reserved.</span>
|
|
88
|
-
</footer>
|
|
89
|
-
</div>
|
|
90
|
-
</body>
|
|
91
|
-
</html>
|
package/src/test.html
DELETED
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
<!DOCTYPE html>
|
|
2
|
-
<html lang="en">
|
|
3
|
-
<head>
|
|
4
|
-
<meta charset="utf-8">
|
|
5
|
-
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
|
6
|
-
<title>Test</title>
|
|
7
|
-
<style>
|
|
8
|
-
#loader {
|
|
9
|
-
transition: all 0.3s ease-in-out;
|
|
10
|
-
opacity: 1;
|
|
11
|
-
visibility: visible;
|
|
12
|
-
position: fixed;
|
|
13
|
-
height: 100vh;
|
|
14
|
-
width: 100%;
|
|
15
|
-
background: #fff;
|
|
16
|
-
z-index: 90000;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
#loader.fadeOut {
|
|
20
|
-
opacity: 0;
|
|
21
|
-
visibility: hidden;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
.spinner {
|
|
27
|
-
width: 40px;
|
|
28
|
-
height: 40px;
|
|
29
|
-
position: absolute;
|
|
30
|
-
top: calc(50% - 20px);
|
|
31
|
-
left: calc(50% - 20px);
|
|
32
|
-
background-color: #333;
|
|
33
|
-
border-radius: 100%;
|
|
34
|
-
-webkit-animation: sk-scaleout 1.0s infinite ease-in-out;
|
|
35
|
-
animation: sk-scaleout 1.0s infinite ease-in-out;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
@-webkit-keyframes sk-scaleout {
|
|
39
|
-
0% { -webkit-transform: scale(0) }
|
|
40
|
-
100% {
|
|
41
|
-
-webkit-transform: scale(1.0);
|
|
42
|
-
opacity: 0;
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
@keyframes sk-scaleout {
|
|
47
|
-
0% {
|
|
48
|
-
-webkit-transform: scale(0);
|
|
49
|
-
transform: scale(0);
|
|
50
|
-
} 100% {
|
|
51
|
-
-webkit-transform: scale(1.0);
|
|
52
|
-
transform: scale(1.0);
|
|
53
|
-
opacity: 0;
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
</style>
|
|
57
|
-
</head>
|
|
58
|
-
<body class="app">
|
|
59
|
-
<div id='loader'>
|
|
60
|
-
<div class="spinner"></div>
|
|
61
|
-
</div>
|
|
62
|
-
|
|
63
|
-
<script>
|
|
64
|
-
window.addEventListener('load', function load() {
|
|
65
|
-
const loader = document.getElementById('loader');
|
|
66
|
-
setTimeout(function() {
|
|
67
|
-
loader.classList.add('fadeOut');
|
|
68
|
-
}, 300);
|
|
69
|
-
});
|
|
70
|
-
</script>
|
|
71
|
-
<div class="page-container">
|
|
72
|
-
<!-- <div class="header navbar">
|
|
73
|
-
<div class="header-container">
|
|
74
|
-
|
|
75
|
-
</div>
|
|
76
|
-
|
|
77
|
-
</div> -->
|
|
78
|
-
<main class='main-content bgc-grey-100'>
|
|
79
|
-
<div id='mainContent'>
|
|
80
|
-
<div class="full-container">
|
|
81
|
-
<button type="button" class="btn btn-secondary" data-bs-toggle="tooltip" data-bs-placement="top" title="Tooltip on top">
|
|
82
|
-
Tooltip on top
|
|
83
|
-
</button>
|
|
84
|
-
<button type="button" class="btn btn-secondary" data-bs-toggle="tooltip" data-bs-placement="top" title="Tooltip on top">
|
|
85
|
-
Tooltip on top
|
|
86
|
-
</button>
|
|
87
|
-
|
|
88
|
-
</div>
|
|
89
|
-
</div>
|
|
90
|
-
</main>
|
|
91
|
-
<footer class="bdT ta-c p-30 lh-0 fsz-sm c-grey-600">
|
|
92
|
-
<span>Copyright © 2025 Designed by <a href="https://colorlib.com" target="_blank" rel="nofollow noopener noreferrer" title="Colorlib">Colorlib</a>. All rights reserved.</span>
|
|
93
|
-
</footer>
|
|
94
|
-
</div>
|
|
95
|
-
</body>
|
|
96
|
-
</html>
|
|
File without changes
|
|
File without changes
|