🚀 Release v4.0.0-rc1: Complete Modernization

🎉 Major modernization release bringing AdminLTE to current standards

## Key Improvements:
- 🔒 Zero security vulnerabilities (all dependencies updated)
-  ESLint v9 with modern flat configuration
- 📦 Astro 5.x, Bootstrap 5.3.7, 50+ package updates
- 🛠️ New npm scripts: 'npm start', 'npm run build'
- 🧹 700+ linting issues resolved, technical debt cleaned
- 🎯 ES modules, modern tooling, optimal bundles

## Infrastructure:
- Upgraded to ES modules with proper configurations
- Migrated ESLint to v9 flat config format
- Enhanced build scripts and developer experience
- Added comprehensive CHANGELOG.md
- Updated README.md with v4.0.0-rc1 highlights

## Quality & Security:
- All npm vulnerabilities resolved
- Zero linting errors across JS/TS/CSS/Astro
- Updated browserslist and build dependencies
- Removed deprecated patterns and dead code

## Compatibility:
- No breaking changes for end users
- Full Bootstrap 5.3.7 compatibility maintained
- All HTML templates remain compatible
- Enhanced developer experience with modern tooling

See CHANGELOG.md for complete details.
This commit is contained in:
Aigars Silkalns
2025-06-20 15:53:40 +03:00
parent 1a52342ff6
commit 7d4c893296
104 changed files with 7794 additions and 4181 deletions

View File

@@ -44,23 +44,6 @@
<!--begin::Required Plugin(AdminLTE)-->
<link rel="stylesheet" href="../../../../dist/css/adminlte.css" />
<!--end::Required Plugin(AdminLTE)-->
<style>
[data-astro-image] {
width: 100%;
height: auto;
object-fit: var(--fit);
object-position: var(--pos);
aspect-ratio: var(--w) / var(--h);
}
[data-astro-image='responsive'] {
max-width: calc(var(--w) * 1px);
max-height: calc(var(--h) * 1px);
}
[data-astro-image='fixed'] {
width: calc(var(--w) * 1px);
height: calc(var(--h) * 1px);
}
</style>
</head>
<!--end::Head-->
<!--begin::Body-->
@@ -382,6 +365,24 @@
<p>Fixed Sidebar</p>
</a>
</li>
<li class="nav-item">
<a href="../../layout/fixed-header.html" class="nav-link">
<i class="nav-icon bi bi-circle"></i>
<p>Fixed Header</p>
</a>
</li>
<li class="nav-item">
<a href="../../layout/fixed-footer.html" class="nav-link">
<i class="nav-icon bi bi-circle"></i>
<p>Fixed Footer</p>
</a>
</li>
<li class="nav-item">
<a href="../../layout/fixed-complete.html" class="nav-link">
<i class="nav-icon bi bi-circle"></i>
<p>Fixed Complete</p>
</a>
</li>
<li class="nav-item">
<a href="../../layout/layout-custom-area.html" class="nav-link">
<i class="nav-icon bi bi-circle"></i>
@@ -764,8 +765,7 @@
<span class="line"><span style="color:#808080"> &lt;</span><span style="color:#569CD6">li</span><span style="color:#808080">&gt;&lt;</span><span style="color:#569CD6">a</span><span style="color:#9CDCFE"> href</span><span style="color:#D4D4D4">=</span><span style="color:#CE9178">&quot;#&quot;</span><span style="color:#808080">&gt;</span><span style="color:#D4D4D4">Level 2</span><span style="color:#808080">&lt;/</span><span style="color:#569CD6">a</span><span style="color:#808080">&gt;&lt;/</span><span style="color:#569CD6">li</span><span style="color:#808080">&gt;</span></span>
<span class="line"><span style="color:#808080"> &lt;/</span><span style="color:#569CD6">ul</span><span style="color:#808080">&gt;</span></span>
<span class="line"><span style="color:#808080"> &lt;/</span><span style="color:#569CD6">li</span><span style="color:#808080">&gt;</span></span>
<span class="line"><span style="color:#808080">&lt;/</span><span style="color:#569CD6">ul</span><span style="color:#808080">&gt;</span></span>
<span class="line"></span></code></pre>
<span class="line"><span style="color:#808080">&lt;/</span><span style="color:#569CD6">ul</span><span style="color:#808080">&gt;</span></span></code></pre>
<h5 id="example">Example</h5>
<ul data-lte-toggle="treeview">
<li><a href="#">One Level</a></li>
@@ -789,7 +789,7 @@
<!--end::To the end-->
<!--begin::Copyright-->
<strong>
Copyright &copy; 2014-2024&nbsp;
Copyright &copy; 2014-2025&nbsp;
<a href="https://adminlte.io" class="text-decoration-none">AdminLTE.io</a>.
</strong>
All rights reserved.
@@ -829,7 +829,7 @@
};
document.addEventListener('DOMContentLoaded', function () {
const sidebarWrapper = document.querySelector(SELECTOR_SIDEBAR_WRAPPER);
if (sidebarWrapper && typeof OverlayScrollbarsGlobal?.OverlayScrollbars !== 'undefined') {
if (sidebarWrapper && OverlayScrollbarsGlobal?.OverlayScrollbars !== undefined) {
OverlayScrollbarsGlobal.OverlayScrollbars(sidebarWrapper, {
scrollbars: {
theme: Default.scrollbarTheme,