admin-lte 4.0.0-rc7 → 4.0.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.
Files changed (102) hide show
  1. package/CHANGELOG.md +48 -0
  2. package/README.md +43 -17
  3. package/dist/UI/general.html +303 -126
  4. package/dist/UI/icons.html +303 -126
  5. package/dist/UI/timeline.html +303 -126
  6. package/dist/css/adminlte.css +2798 -1167
  7. package/dist/css/adminlte.css.map +1 -1
  8. package/dist/css/adminlte.min.css +2 -2
  9. package/dist/css/adminlte.min.css.map +1 -1
  10. package/dist/css/adminlte.rtl.css +2798 -1167
  11. package/dist/css/adminlte.rtl.css.map +1 -1
  12. package/dist/css/adminlte.rtl.min.css +2 -2
  13. package/dist/css/adminlte.rtl.min.css.map +1 -1
  14. package/dist/docs/browser-support.html +261 -397
  15. package/dist/docs/color-mode.html +242 -382
  16. package/dist/docs/components/main-header.html +238 -374
  17. package/dist/docs/components/main-sidebar.html +253 -389
  18. package/dist/docs/customization.html +1056 -0
  19. package/dist/docs/deployment.html +1121 -0
  20. package/dist/docs/faq.html +857 -409
  21. package/dist/docs/getting-started.html +967 -0
  22. package/dist/docs/how-to-contribute.html +335 -462
  23. package/dist/docs/index.html +16 -0
  24. package/dist/docs/integrations.html +1207 -0
  25. package/dist/docs/introduction.html +453 -446
  26. package/dist/docs/javascript/accessibility.html +361 -491
  27. package/dist/docs/javascript/card-widget.html +446 -450
  28. package/dist/docs/javascript/direct-chat.html +324 -421
  29. package/dist/docs/javascript/fullscreen.html +348 -416
  30. package/dist/docs/javascript/layout.html +345 -436
  31. package/dist/docs/javascript/plugins-overview.html +1120 -0
  32. package/dist/docs/javascript/pushmenu.html +485 -492
  33. package/dist/docs/javascript/treeview.html +466 -400
  34. package/dist/docs/layout-blueprint.html +1063 -0
  35. package/dist/docs/layout.html +287 -415
  36. package/dist/docs/license.html +252 -387
  37. package/dist/docs/migration.html +1125 -0
  38. package/dist/docs/recipes.html +1161 -0
  39. package/dist/docs/rtl.html +933 -0
  40. package/dist/examples/lockscreen.html +65 -1
  41. package/dist/examples/login-v2.html +65 -1
  42. package/dist/examples/login.html +65 -1
  43. package/dist/examples/register-v2.html +65 -1
  44. package/dist/examples/register.html +65 -1
  45. package/dist/forms/{general.html → elements.html} +489 -463
  46. package/dist/forms/layout.html +1243 -0
  47. package/dist/forms/validation.html +1251 -0
  48. package/dist/forms/wizard.html +1386 -0
  49. package/dist/generate/theme.html +134 -4
  50. package/dist/index.html +303 -126
  51. package/dist/index2.html +306 -126
  52. package/dist/index3.html +303 -126
  53. package/dist/js/adminlte.js +5 -5
  54. package/dist/js/adminlte.js.map +1 -1
  55. package/dist/js/adminlte.min.js +2 -2
  56. package/dist/js/adminlte.min.js.map +1 -1
  57. package/dist/layout/collapsed-sidebar-without-hover.html +303 -126
  58. package/dist/layout/collapsed-sidebar.html +303 -126
  59. package/dist/layout/fixed-complete.html +303 -126
  60. package/dist/layout/fixed-footer.html +303 -126
  61. package/dist/layout/fixed-header.html +303 -126
  62. package/dist/layout/fixed-sidebar.html +303 -126
  63. package/dist/layout/layout-custom-area.html +303 -126
  64. package/dist/layout/layout-rtl.html +303 -126
  65. package/dist/layout/logo-switch.html +134 -4
  66. package/dist/layout/sidebar-mini.html +303 -126
  67. package/dist/layout/unfixed-sidebar.html +303 -126
  68. package/dist/mailbox/compose.html +1127 -0
  69. package/dist/mailbox/inbox.html +1477 -0
  70. package/dist/mailbox/read.html +1178 -0
  71. package/dist/pages/404.html +213 -0
  72. package/dist/pages/500.html +201 -0
  73. package/dist/pages/calendar.html +1242 -0
  74. package/dist/pages/chat.html +1403 -0
  75. package/dist/pages/faq.html +1359 -0
  76. package/dist/pages/file-manager.html +1811 -0
  77. package/dist/pages/invoice.html +1175 -0
  78. package/dist/pages/kanban.html +1415 -0
  79. package/dist/pages/maintenance.html +204 -0
  80. package/dist/pages/pricing.html +1255 -0
  81. package/dist/pages/profile.html +1358 -0
  82. package/dist/pages/projects.html +1620 -0
  83. package/dist/pages/settings.html +1363 -0
  84. package/dist/tables/data.html +1295 -0
  85. package/dist/tables/simple.html +303 -126
  86. package/dist/widgets/cards.html +303 -126
  87. package/dist/widgets/info-box.html +303 -126
  88. package/dist/widgets/small-box.html +303 -126
  89. package/netlify.toml +16 -0
  90. package/package.json +29 -23
  91. package/src/scss/_app-header.scss +27 -0
  92. package/src/scss/_app-sidebar.scss +24 -30
  93. package/src/scss/_bootstrap-variables.scss +11 -4
  94. package/src/scss/_docs.scss +816 -0
  95. package/src/scss/_table.scss +4 -4
  96. package/src/scss/adminlte.scss +4 -1
  97. package/src/ts/adminlte.ts +1 -1
  98. package/src/ts/fullscreen.ts +8 -4
  99. package/src/ts/push-menu.ts +66 -5
  100. package/.claude/settings.local.json +0 -37
  101. package/CLAUDE.md +0 -79
  102. package/release.md +0 -75
@@ -0,0 +1,1125 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
5
+ <title>Migration from v3 | AdminLTE 4</title>
6
+
7
+ <!--begin::Accessibility Meta Tags-->
8
+ <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
9
+ <meta name="color-scheme" content="light dark" />
10
+ <meta name="theme-color" content="#007bff" media="(prefers-color-scheme: light)" />
11
+ <meta name="theme-color" content="#1a1a1a" media="(prefers-color-scheme: dark)" />
12
+ <!--end::Accessibility Meta Tags-->
13
+
14
+ <!--begin::Primary Meta Tags-->
15
+ <meta name="title" content="Migration from v3 | AdminLTE 4" />
16
+ <meta name="author" content="ColorlibHQ" />
17
+ <meta
18
+ name="description"
19
+ content="AdminLTE is a Free Bootstrap 5 Admin Dashboard, 30 example pages using Vanilla JS. Fully accessible with WCAG 2.1 AA compliance."
20
+ />
21
+ <meta
22
+ name="keywords"
23
+ content="bootstrap 5, bootstrap, bootstrap 5 admin dashboard, bootstrap 5 dashboard, bootstrap 5 charts, bootstrap 5 calendar, bootstrap 5 datepicker, bootstrap 5 tables, bootstrap 5 datatable, vanilla js datatable, colorlibhq, colorlibhq dashboard, colorlibhq admin dashboard, accessible admin panel, WCAG compliant"
24
+ />
25
+ <!--end::Primary Meta Tags-->
26
+
27
+ <!--begin::Accessibility Features-->
28
+ <!-- Skip links will be dynamically added by accessibility.js -->
29
+ <meta name="supported-color-schemes" content="light dark" />
30
+ <link rel="preload" href="../css/adminlte.css" as="style" />
31
+ <!--end::Accessibility Features-->
32
+
33
+ <!--begin::Fonts-->
34
+ <link
35
+ rel="stylesheet"
36
+ href="https://cdn.jsdelivr.net/npm/@fontsource/source-sans-3@5.0.12/index.css"
37
+ integrity="sha256-tXJfXfp6Ewt1ilPzLDtQnJV4hclT9XuaZUKyUvmyr+Q="
38
+ crossorigin="anonymous"
39
+ media="print"
40
+ onload="this.media = 'all'"
41
+ />
42
+ <!--end::Fonts-->
43
+
44
+ <!--begin::Third Party Plugin(OverlayScrollbars)-->
45
+ <link
46
+ rel="stylesheet"
47
+ href="https://cdn.jsdelivr.net/npm/overlayscrollbars@2.11.0/styles/overlayscrollbars.min.css"
48
+ crossorigin="anonymous"
49
+ />
50
+ <!--end::Third Party Plugin(OverlayScrollbars)-->
51
+
52
+ <!--begin::Third Party Plugin(Bootstrap Icons)-->
53
+ <link
54
+ rel="stylesheet"
55
+ href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.13.1/font/bootstrap-icons.min.css"
56
+ crossorigin="anonymous"
57
+ />
58
+ <!--end::Third Party Plugin(Bootstrap Icons)-->
59
+
60
+ <!--begin::Required Plugin(AdminLTE)-->
61
+ <link rel="stylesheet" href="../css/adminlte.css" />
62
+ <!--end::Required Plugin(AdminLTE)-->
63
+ </head>
64
+ <body class="layout-fixed sidebar-expand-lg bg-body-tertiary docs-page">
65
+ <div class="app-wrapper">
66
+ <!--begin::Header-->
67
+ <nav class="app-header navbar navbar-expand bg-body">
68
+ <!--begin::Container-->
69
+ <div class="container-fluid">
70
+ <!--begin::Start Navbar Links-->
71
+ <ul class="navbar-nav">
72
+ <li class="nav-item">
73
+ <a class="nav-link" data-lte-toggle="sidebar" href="#" role="button">
74
+ <i class="bi bi-list"></i>
75
+ </a>
76
+ </li>
77
+
78
+ <li class="nav-item d-none d-md-block">
79
+ <a href="../docs/introduction.html" class="nav-link">
80
+ <i class="bi bi-book me-1" aria-hidden="true"></i>
81
+ Documentation
82
+ </a>
83
+ </li>
84
+ <li class="nav-item d-none d-md-block">
85
+ <a href="../index.html" class="nav-link">
86
+ <i class="bi bi-arrow-left me-1" aria-hidden="true"></i>
87
+ Back to live preview
88
+ </a>
89
+ </li>
90
+ </ul>
91
+ <!--end::Start Navbar Links-->
92
+
93
+ <!--begin::End Navbar Links-->
94
+ <ul class="navbar-nav ms-auto">
95
+ <!--begin::Navbar Search-->
96
+ <li class="nav-item">
97
+ <a class="nav-link" data-widget="navbar-search" href="#" role="button">
98
+ <i class="bi bi-search"></i>
99
+ </a>
100
+ </li>
101
+ <!--end::Navbar Search-->
102
+
103
+ <!--begin::Messages Dropdown Menu-->
104
+ <li class="nav-item dropdown">
105
+ <a class="nav-link" data-bs-toggle="dropdown" href="#">
106
+ <i class="bi bi-chat-text"></i>
107
+ <span class="navbar-badge badge text-bg-danger">3</span>
108
+ </a>
109
+ <div class="dropdown-menu dropdown-menu-lg dropdown-menu-end">
110
+ <a href="#" class="dropdown-item">
111
+ <!--begin::Message-->
112
+ <div class="d-flex">
113
+ <div class="flex-shrink-0">
114
+ <img
115
+ src="../assets/img/user1-128x128.jpg"
116
+ alt="User Avatar"
117
+ class="img-size-50 rounded-circle me-3"
118
+ />
119
+ </div>
120
+ <div class="flex-grow-1">
121
+ <h3 class="dropdown-item-title">
122
+ Brad Diesel
123
+ <span class="float-end fs-7 text-danger"
124
+ ><i class="bi bi-star-fill"></i
125
+ ></span>
126
+ </h3>
127
+ <p class="fs-7">Call me whenever you can...</p>
128
+ <p class="fs-7 text-secondary">
129
+ <i class="bi bi-clock-fill me-1"></i> 4 Hours Ago
130
+ </p>
131
+ </div>
132
+ </div>
133
+ <!--end::Message-->
134
+ </a>
135
+ <div class="dropdown-divider"></div>
136
+ <a href="#" class="dropdown-item">
137
+ <!--begin::Message-->
138
+ <div class="d-flex">
139
+ <div class="flex-shrink-0">
140
+ <img
141
+ src="../assets/img/user8-128x128.jpg"
142
+ alt="User Avatar"
143
+ class="img-size-50 rounded-circle me-3"
144
+ />
145
+ </div>
146
+ <div class="flex-grow-1">
147
+ <h3 class="dropdown-item-title">
148
+ John Pierce
149
+ <span class="float-end fs-7 text-secondary">
150
+ <i class="bi bi-star-fill"></i>
151
+ </span>
152
+ </h3>
153
+ <p class="fs-7">I got your message bro</p>
154
+ <p class="fs-7 text-secondary">
155
+ <i class="bi bi-clock-fill me-1"></i> 4 Hours Ago
156
+ </p>
157
+ </div>
158
+ </div>
159
+ <!--end::Message-->
160
+ </a>
161
+ <div class="dropdown-divider"></div>
162
+ <a href="#" class="dropdown-item">
163
+ <!--begin::Message-->
164
+ <div class="d-flex">
165
+ <div class="flex-shrink-0">
166
+ <img
167
+ src="../assets/img/user3-128x128.jpg"
168
+ alt="User Avatar"
169
+ class="img-size-50 rounded-circle me-3"
170
+ />
171
+ </div>
172
+ <div class="flex-grow-1">
173
+ <h3 class="dropdown-item-title">
174
+ Nora Silvester
175
+ <span class="float-end fs-7 text-warning">
176
+ <i class="bi bi-star-fill"></i>
177
+ </span>
178
+ </h3>
179
+ <p class="fs-7">The subject goes here</p>
180
+ <p class="fs-7 text-secondary">
181
+ <i class="bi bi-clock-fill me-1"></i> 4 Hours Ago
182
+ </p>
183
+ </div>
184
+ </div>
185
+ <!--end::Message-->
186
+ </a>
187
+ <div class="dropdown-divider"></div>
188
+ <a href="#" class="dropdown-item dropdown-footer">See All Messages</a>
189
+ </div>
190
+ </li>
191
+ <!--end::Messages Dropdown Menu-->
192
+
193
+ <!--begin::Notifications Dropdown Menu-->
194
+ <li class="nav-item dropdown">
195
+ <a class="nav-link" data-bs-toggle="dropdown" href="#">
196
+ <i class="bi bi-bell-fill"></i>
197
+ <span class="navbar-badge badge text-bg-warning">15</span>
198
+ </a>
199
+ <div class="dropdown-menu dropdown-menu-lg dropdown-menu-end">
200
+ <span class="dropdown-item dropdown-header">15 Notifications</span>
201
+ <div class="dropdown-divider"></div>
202
+ <a href="#" class="dropdown-item">
203
+ <i class="bi bi-envelope me-2"></i> 4 new messages
204
+ <span class="float-end text-secondary fs-7">3 mins</span>
205
+ </a>
206
+ <div class="dropdown-divider"></div>
207
+ <a href="#" class="dropdown-item">
208
+ <i class="bi bi-people-fill me-2"></i> 8 friend requests
209
+ <span class="float-end text-secondary fs-7">12 hours</span>
210
+ </a>
211
+ <div class="dropdown-divider"></div>
212
+ <a href="#" class="dropdown-item">
213
+ <i class="bi bi-file-earmark-fill me-2"></i> 3 new reports
214
+ <span class="float-end text-secondary fs-7">2 days</span>
215
+ </a>
216
+ <div class="dropdown-divider"></div>
217
+ <a href="#" class="dropdown-item dropdown-footer"> See All Notifications </a>
218
+ </div>
219
+ </li>
220
+ <!--end::Notifications Dropdown Menu-->
221
+
222
+ <!--begin::Fullscreen Toggle-->
223
+ <li class="nav-item">
224
+ <a class="nav-link" href="#" data-lte-toggle="fullscreen">
225
+ <i data-lte-icon="maximize" class="bi bi-arrows-fullscreen"></i>
226
+ <i data-lte-icon="minimize" class="bi bi-fullscreen-exit d-none"></i>
227
+ </a>
228
+ </li>
229
+ <!--end::Fullscreen Toggle-->
230
+
231
+ <!--begin::Color Mode Toggle (#6010)-->
232
+ <li class="nav-item dropdown">
233
+ <a
234
+ class="nav-link"
235
+ href="#"
236
+ id="bd-theme"
237
+ aria-label="Toggle color scheme"
238
+ data-bs-toggle="dropdown"
239
+ aria-expanded="false"
240
+ >
241
+ <i class="bi bi-sun-fill" data-lte-theme-icon="light"></i>
242
+ <i class="bi bi-moon-fill d-none" data-lte-theme-icon="dark"></i>
243
+ <i class="bi bi-circle-half d-none" data-lte-theme-icon="auto"></i>
244
+ </a>
245
+ <ul
246
+ class="dropdown-menu dropdown-menu-end"
247
+ aria-labelledby="bd-theme"
248
+ style="--bs-dropdown-min-width: 8rem"
249
+ >
250
+ <li>
251
+ <button
252
+ type="button"
253
+ class="dropdown-item d-flex align-items-center"
254
+ data-bs-theme-value="light"
255
+ aria-pressed="false"
256
+ >
257
+ <i class="bi bi-sun-fill me-2"></i>
258
+ Light
259
+ <i class="bi bi-check-lg ms-auto d-none"></i>
260
+ </button>
261
+ </li>
262
+ <li>
263
+ <button
264
+ type="button"
265
+ class="dropdown-item d-flex align-items-center"
266
+ data-bs-theme-value="dark"
267
+ aria-pressed="false"
268
+ >
269
+ <i class="bi bi-moon-fill me-2"></i>
270
+ Dark
271
+ <i class="bi bi-check-lg ms-auto d-none"></i>
272
+ </button>
273
+ </li>
274
+ <li>
275
+ <button
276
+ type="button"
277
+ class="dropdown-item d-flex align-items-center active"
278
+ data-bs-theme-value="auto"
279
+ aria-pressed="true"
280
+ >
281
+ <i class="bi bi-circle-half me-2"></i>
282
+ Auto
283
+ <i class="bi bi-check-lg ms-auto d-none"></i>
284
+ </button>
285
+ </li>
286
+ </ul>
287
+ </li>
288
+ <!--end::Color Mode Toggle-->
289
+
290
+ <!--begin::User Menu Dropdown-->
291
+ <li class="nav-item dropdown user-menu">
292
+ <a href="#" class="nav-link dropdown-toggle" data-bs-toggle="dropdown">
293
+ <img
294
+ src="../assets/img/user2-160x160.jpg"
295
+ class="user-image rounded-circle shadow"
296
+ alt="User Image"
297
+ />
298
+ <span class="d-none d-md-inline">Alexander Pierce</span>
299
+ </a>
300
+ <ul class="dropdown-menu dropdown-menu-lg dropdown-menu-end">
301
+ <!--begin::User Image-->
302
+ <li class="user-header text-bg-primary">
303
+ <img
304
+ src="../assets/img/user2-160x160.jpg"
305
+ class="rounded-circle shadow"
306
+ alt="User Image"
307
+ />
308
+ <p>
309
+ Alexander Pierce - Web Developer
310
+ <small>Member since Nov. 2023</small>
311
+ </p>
312
+ </li>
313
+ <!--end::User Image-->
314
+ <!--begin::Menu Body-->
315
+ <li class="user-body">
316
+ <!--begin::Row-->
317
+ <div class="row">
318
+ <div class="col-4 text-center">
319
+ <a href="#">Followers</a>
320
+ </div>
321
+ <div class="col-4 text-center">
322
+ <a href="#">Sales</a>
323
+ </div>
324
+ <div class="col-4 text-center">
325
+ <a href="#">Friends</a>
326
+ </div>
327
+ </div>
328
+ <!--end::Row-->
329
+ </li>
330
+ <!--end::Menu Body-->
331
+ <!--begin::Menu Footer-->
332
+ <li class="user-footer">
333
+ <a href="#" class="btn btn-outline-secondary">Profile</a>
334
+ <a href="#" class="btn btn-outline-danger float-end">Sign out</a>
335
+ </li>
336
+ <!--end::Menu Footer-->
337
+ </ul>
338
+ </li>
339
+ <!--end::User Menu Dropdown-->
340
+ </ul>
341
+ <!--end::End Navbar Links-->
342
+ </div>
343
+ <!--end::Container-->
344
+ </nav>
345
+ <!--end::Header-->
346
+ <!--begin::Sidebar (docs mode)-->
347
+ <aside class="app-sidebar bg-body-secondary shadow" data-bs-theme="dark">
348
+ <!--begin::Sidebar Brand-->
349
+ <div class="sidebar-brand">
350
+ <a href="../docs/introduction.html" class="brand-link">
351
+ <img
352
+ src="../assets/img/AdminLTELogo.png"
353
+ alt="AdminLTE Logo"
354
+ class="brand-image opacity-75 shadow"
355
+ />
356
+ <span class="brand-text fw-light">
357
+ AdminLTE 4 <span class="opacity-75">&middot; Docs</span>
358
+ </span>
359
+ </a>
360
+ </div>
361
+ <!--end::Sidebar Brand-->
362
+ <!--begin::Sidebar Wrapper-->
363
+ <div class="sidebar-wrapper">
364
+ <nav class="mt-2">
365
+ <!--begin::Sidebar Menu-->
366
+ <ul
367
+ class="nav sidebar-menu flex-column"
368
+ data-lte-toggle="treeview"
369
+ role="navigation"
370
+ aria-label="Documentation navigation"
371
+ data-accordion="false"
372
+ id="docs-navigation"
373
+ >
374
+ <li class="nav-header">START HERE</li>
375
+ <li class="nav-item">
376
+ <a href="../docs/introduction.html" class="nav-link">
377
+ <i class="nav-icon bi bi-download"></i>
378
+ <p>Installation</p>
379
+ </a>
380
+ </li>
381
+ <li class="nav-item">
382
+ <a href="../docs/getting-started.html" class="nav-link">
383
+ <i class="nav-icon bi bi-rocket-takeoff"></i>
384
+ <p>Getting Started</p>
385
+ </a>
386
+ </li>
387
+
388
+ <li class="nav-header">FOUNDATIONS</li>
389
+ <li class="nav-item">
390
+ <a href="../docs/layout.html" class="nav-link">
391
+ <i class="nav-icon bi bi-grip-horizontal"></i>
392
+ <p>Layout Classes</p>
393
+ </a>
394
+ </li>
395
+ <li class="nav-item">
396
+ <a href="../docs/layout-blueprint.html" class="nav-link">
397
+ <i class="nav-icon bi bi-diagram-3"></i>
398
+ <p>Layout Blueprint</p>
399
+ </a>
400
+ </li>
401
+ <li class="nav-item">
402
+ <a href="../docs/customization.html" class="nav-link">
403
+ <i class="nav-icon bi bi-palette"></i>
404
+ <p>Customization</p>
405
+ </a>
406
+ </li>
407
+ <li class="nav-item">
408
+ <a href="../docs/color-mode.html" class="nav-link">
409
+ <i class="nav-icon bi bi-star-half"></i>
410
+ <p>Color Mode</p>
411
+ </a>
412
+ </li>
413
+ <li class="nav-item">
414
+ <a href="../docs/rtl.html" class="nav-link">
415
+ <i class="nav-icon bi bi-text-paragraph"></i>
416
+ <p>RTL Support</p>
417
+ </a>
418
+ </li>
419
+
420
+ <li class="nav-header">BUILDING</li>
421
+ <li class="nav-item">
422
+ <a href="../docs/recipes.html" class="nav-link">
423
+ <i class="nav-icon bi bi-clipboard-check"></i>
424
+ <p>Recipes</p>
425
+ </a>
426
+ </li>
427
+ <li class="nav-item">
428
+ <a href="#" class="nav-link">
429
+ <i class="nav-icon bi bi-ui-checks-grid"></i>
430
+ <p>
431
+ Components
432
+ <i class="nav-arrow bi bi-chevron-right"></i>
433
+ </p>
434
+ </a>
435
+ <ul class="nav nav-treeview">
436
+ <li class="nav-item">
437
+ <a href="../docs/components/main-header.html" class="nav-link">
438
+ <i class="nav-icon bi bi-circle"></i>
439
+ <p>Main Header</p>
440
+ </a>
441
+ </li>
442
+ <li class="nav-item">
443
+ <a href="../docs/components/main-sidebar.html" class="nav-link">
444
+ <i class="nav-icon bi bi-circle"></i>
445
+ <p>Main Sidebar</p>
446
+ </a>
447
+ </li>
448
+ </ul>
449
+ </li>
450
+ <li class="nav-item">
451
+ <a href="#" class="nav-link">
452
+ <i class="nav-icon bi bi-filetype-js"></i>
453
+ <p>
454
+ JavaScript Plugins
455
+ <i class="nav-arrow bi bi-chevron-right"></i>
456
+ </p>
457
+ </a>
458
+ <ul class="nav nav-treeview">
459
+ <li class="nav-item">
460
+ <a href="../docs/javascript/plugins-overview.html" class="nav-link">
461
+ <i class="nav-icon bi bi-circle"></i>
462
+ <p>Overview</p>
463
+ </a>
464
+ </li>
465
+ <li class="nav-item">
466
+ <a href="../docs/javascript/layout.html" class="nav-link">
467
+ <i class="nav-icon bi bi-circle"></i>
468
+ <p>Layout</p>
469
+ </a>
470
+ </li>
471
+ <li class="nav-item">
472
+ <a href="../docs/javascript/pushmenu.html" class="nav-link">
473
+ <i class="nav-icon bi bi-circle"></i>
474
+ <p>PushMenu</p>
475
+ </a>
476
+ </li>
477
+ <li class="nav-item">
478
+ <a href="../docs/javascript/treeview.html" class="nav-link">
479
+ <i class="nav-icon bi bi-circle"></i>
480
+ <p>Treeview</p>
481
+ </a>
482
+ </li>
483
+ <li class="nav-item">
484
+ <a href="../docs/javascript/card-widget.html" class="nav-link">
485
+ <i class="nav-icon bi bi-circle"></i>
486
+ <p>Card Widget</p>
487
+ </a>
488
+ </li>
489
+ <li class="nav-item">
490
+ <a href="../docs/javascript/direct-chat.html" class="nav-link">
491
+ <i class="nav-icon bi bi-circle"></i>
492
+ <p>Direct Chat</p>
493
+ </a>
494
+ </li>
495
+ <li class="nav-item">
496
+ <a href="../docs/javascript/fullscreen.html" class="nav-link">
497
+ <i class="nav-icon bi bi-circle"></i>
498
+ <p>Fullscreen</p>
499
+ </a>
500
+ </li>
501
+ <li class="nav-item">
502
+ <a href="../docs/javascript/accessibility.html" class="nav-link">
503
+ <i class="nav-icon bi bi-circle"></i>
504
+ <p>Accessibility</p>
505
+ </a>
506
+ </li>
507
+ </ul>
508
+ </li>
509
+ <li class="nav-item">
510
+ <a href="../docs/integrations.html" class="nav-link">
511
+ <i class="nav-icon bi bi-puzzle"></i>
512
+ <p>Integrations</p>
513
+ </a>
514
+ </li>
515
+
516
+ <li class="nav-header">SHIPPING</li>
517
+ <li class="nav-item">
518
+ <a href="../docs/migration.html" class="nav-link active">
519
+ <i class="nav-icon bi bi-arrow-up-right-square"></i>
520
+ <p>Migration from v3</p>
521
+ </a>
522
+ </li>
523
+ <li class="nav-item">
524
+ <a href="../docs/deployment.html" class="nav-link">
525
+ <i class="nav-icon bi bi-cloud-upload"></i>
526
+ <p>Deployment</p>
527
+ </a>
528
+ </li>
529
+ <li class="nav-item">
530
+ <a href="../docs/browser-support.html" class="nav-link">
531
+ <i class="nav-icon bi bi-browser-chrome"></i>
532
+ <p>Browser Support</p>
533
+ </a>
534
+ </li>
535
+
536
+ <li class="nav-header">RESOURCES</li>
537
+ <li class="nav-item">
538
+ <a href="../docs/faq.html" class="nav-link">
539
+ <i class="nav-icon bi bi-question-circle"></i>
540
+ <p>FAQ</p>
541
+ </a>
542
+ </li>
543
+ <li class="nav-item">
544
+ <a href="../docs/how-to-contribute.html" class="nav-link">
545
+ <i class="nav-icon bi bi-people"></i>
546
+ <p>Contributing</p>
547
+ </a>
548
+ </li>
549
+ <li class="nav-item">
550
+ <a href="../docs/license.html" class="nav-link">
551
+ <i class="nav-icon bi bi-patch-check"></i>
552
+ <p>License</p>
553
+ </a>
554
+ </li>
555
+ <li class="nav-item">
556
+ <a
557
+ href="https://github.com/ColorlibHQ/AdminLTE"
558
+ target="_blank"
559
+ rel="noopener"
560
+ class="nav-link"
561
+ >
562
+ <i class="nav-icon bi bi-github"></i>
563
+ <p>
564
+ GitHub
565
+ <i class="bi bi-box-arrow-up-right ms-1" aria-hidden="true"></i>
566
+ </p>
567
+ </a>
568
+ </li>
569
+ </ul>
570
+ <!--end::Sidebar Menu-->
571
+
572
+ <!-- Back to preview CTA (bottom of sidebar) -->
573
+ <div class="p-3 mt-3 border-top border-secondary border-opacity-25">
574
+ <a
575
+ href="../index.html"
576
+ class="btn btn-sm btn-outline-light w-100 d-flex align-items-center justify-content-center gap-2"
577
+ >
578
+ <i class="bi bi-arrow-left" aria-hidden="true"></i>
579
+ Back to live preview
580
+ </a>
581
+ </div>
582
+ </nav>
583
+ </div>
584
+ <!--end::Sidebar Wrapper-->
585
+ </aside>
586
+ <!--end::Sidebar (docs mode)-->
587
+ <main class="app-main">
588
+ <div class="app-content-header">
589
+ <div class="container-fluid">
590
+ <div class="row">
591
+ <div class="col-sm-6">
592
+ <h3 class="mb-0">Migration from v3</h3>
593
+ </div>
594
+ <div class="col-sm-6">
595
+ <ol class="breadcrumb float-sm-end">
596
+ <li class="breadcrumb-item"><a href="#">Docs</a></li>
597
+ <li class="breadcrumb-item active" aria-current="page">Migration</li>
598
+ </ol>
599
+ </div>
600
+ </div>
601
+ </div>
602
+ </div>
603
+ <div class="app-content">
604
+ <div class="container-fluid">
605
+ <div class="row">
606
+ <div class="col-12">
607
+ <div class="card">
608
+ <div class="card-body">
609
+ <p>
610
+ AdminLTE 4 is a ground-up rewrite. It targets Bootstrap 5.3, drops jQuery,
611
+ ships as TypeScript-authored vanilla JS, and reorganises the CSS class
612
+ structure. If you’re upgrading an AdminLTE 3 project, the changes below are
613
+ the ones most likely to bite.
614
+ </p>
615
+ <h5 id="the-high-level-summary">The high-level summary</h5>
616
+
617
+ <table>
618
+ <thead>
619
+ <tr>
620
+ <th></th>
621
+ <th>AdminLTE 3</th>
622
+ <th>AdminLTE 4</th>
623
+ </tr>
624
+ </thead>
625
+ <tbody>
626
+ <tr>
627
+ <td>CSS framework</td>
628
+ <td>Bootstrap 4.6</td>
629
+ <td><strong>Bootstrap 5.3</strong></td>
630
+ </tr>
631
+ <tr>
632
+ <td>JavaScript</td>
633
+ <td>jQuery + vanilla</td>
634
+ <td><strong>Vanilla TypeScript only</strong></td>
635
+ </tr>
636
+ <tr>
637
+ <td>Dark mode</td>
638
+ <td>Manual <code>.dark-mode</code> class</td>
639
+ <td>
640
+ <strong><code>data-bs-theme</code> attribute (Bootstrap-native)</strong>
641
+ </td>
642
+ </tr>
643
+ <tr>
644
+ <td>RTL</td>
645
+ <td>Separate <code>rtl.css</code> build</td>
646
+ <td><strong>Generated automatically via rtlcss</strong></td>
647
+ </tr>
648
+ <tr>
649
+ <td>Browser support</td>
650
+ <td>IE 11 forks available</td>
651
+ <td>Modern evergreen browsers only</td>
652
+ </tr>
653
+ <tr>
654
+ <td>Build tooling</td>
655
+ <td>Gulp</td>
656
+ <td><strong>Rollup + Sass + PostCSS</strong></td>
657
+ </tr>
658
+ <tr>
659
+ <td>Icon library</td>
660
+ <td>FontAwesome</td>
661
+ <td>
662
+ <strong>Bootstrap Icons</strong> (Lucide / Tabler Icons documented as
663
+ alternatives)
664
+ </td>
665
+ </tr>
666
+ </tbody>
667
+ </table>
668
+ <p>
669
+ If your project relies on jQuery or IE 11, stay on AdminLTE 3 — those
670
+ constraints are not reversible in v4.
671
+ </p>
672
+ <h5 id="class-renames">Class renames</h5>
673
+ <p>The most common find-and-replace work:</p>
674
+
675
+ <table>
676
+ <thead>
677
+ <tr>
678
+ <th>AdminLTE 3</th>
679
+ <th>AdminLTE 4</th>
680
+ </tr>
681
+ </thead>
682
+ <tbody>
683
+ <tr>
684
+ <td><code>.wrapper</code></td>
685
+ <td><code>.app-wrapper</code></td>
686
+ </tr>
687
+ <tr>
688
+ <td><code>.main-header</code></td>
689
+ <td><code>.app-header</code></td>
690
+ </tr>
691
+ <tr>
692
+ <td><code>.main-sidebar</code></td>
693
+ <td><code>.app-sidebar</code></td>
694
+ </tr>
695
+ <tr>
696
+ <td><code>.content-wrapper</code></td>
697
+ <td><code>.app-main</code></td>
698
+ </tr>
699
+ <tr>
700
+ <td><code>.main-footer</code></td>
701
+ <td><code>.app-footer</code></td>
702
+ </tr>
703
+ <tr>
704
+ <td><code>.content-header</code></td>
705
+ <td><code>.app-content-header</code></td>
706
+ </tr>
707
+ <tr>
708
+ <td><code>.content</code></td>
709
+ <td><code>.app-content</code></td>
710
+ </tr>
711
+ <tr>
712
+ <td><code>.brand-link</code> (inside <code>.main-sidebar</code>)</td>
713
+ <td><code>.sidebar-brand &gt; .brand-link</code></td>
714
+ </tr>
715
+ <tr>
716
+ <td><code>data-widget=&quot;pushmenu&quot;</code></td>
717
+ <td><code>data-lte-toggle=&quot;sidebar&quot;</code></td>
718
+ </tr>
719
+ <tr>
720
+ <td><code>data-widget=&quot;treeview&quot;</code></td>
721
+ <td>
722
+ <code>data-lte-toggle=&quot;treeview&quot;</code> (on the parent menu)
723
+ </td>
724
+ </tr>
725
+ <tr>
726
+ <td><code>data-widget=&quot;card-widget&quot;</code></td>
727
+ <td>
728
+ <code>data-lte-toggle=&quot;card-collapse&quot;</code>,
729
+ <code>card-remove</code>, <code>card-maximize</code>
730
+ </td>
731
+ </tr>
732
+ <tr>
733
+ <td><code>data-widget=&quot;fullscreen&quot;</code></td>
734
+ <td><code>data-lte-toggle=&quot;fullscreen&quot;</code></td>
735
+ </tr>
736
+ <tr>
737
+ <td><code>data-widget=&quot;control-sidebar&quot;</code></td>
738
+ <td>(removed — Bootstrap offcanvas replaces this)</td>
739
+ </tr>
740
+ <tr>
741
+ <td><code>.dark-mode</code> (on <code>&lt;body&gt;</code>)</td>
742
+ <td><code>data-bs-theme=&quot;dark&quot;</code> (on any element)</td>
743
+ </tr>
744
+ </tbody>
745
+ </table>
746
+ <h5 id="bootstrap-4--5-utility-renames">Bootstrap 4 → 5 utility renames</h5>
747
+ <p>
748
+ These come from Bootstrap itself, not AdminLTE, but they affect every page:
749
+ </p>
750
+
751
+ <table>
752
+ <thead>
753
+ <tr>
754
+ <th>Bootstrap 4</th>
755
+ <th>Bootstrap 5</th>
756
+ </tr>
757
+ </thead>
758
+ <tbody>
759
+ <tr>
760
+ <td><code>data-toggle</code></td>
761
+ <td><code>data-bs-toggle</code></td>
762
+ </tr>
763
+ <tr>
764
+ <td><code>data-target</code></td>
765
+ <td><code>data-bs-target</code></td>
766
+ </tr>
767
+ <tr>
768
+ <td><code>data-dismiss</code></td>
769
+ <td><code>data-bs-dismiss</code></td>
770
+ </tr>
771
+ <tr>
772
+ <td><code>data-parent</code></td>
773
+ <td><code>data-bs-parent</code></td>
774
+ </tr>
775
+ <tr>
776
+ <td><code>data-spy</code></td>
777
+ <td><code>data-bs-spy</code></td>
778
+ </tr>
779
+ <tr>
780
+ <td><code>data-ride</code></td>
781
+ <td><code>data-bs-ride</code></td>
782
+ </tr>
783
+ <tr>
784
+ <td><code>.ml-*</code>, <code>.mr-*</code></td>
785
+ <td><code>.ms-*</code>, <code>.me-*</code></td>
786
+ </tr>
787
+ <tr>
788
+ <td><code>.pl-*</code>, <code>.pr-*</code></td>
789
+ <td><code>.ps-*</code>, <code>.pe-*</code></td>
790
+ </tr>
791
+ <tr>
792
+ <td><code>.float-left</code>, <code>.float-right</code></td>
793
+ <td><code>.float-start</code>, <code>.float-end</code></td>
794
+ </tr>
795
+ <tr>
796
+ <td><code>.text-left</code>, <code>.text-right</code></td>
797
+ <td><code>.text-start</code>, <code>.text-end</code></td>
798
+ </tr>
799
+ <tr>
800
+ <td><code>.border-left</code>, <code>.border-right</code></td>
801
+ <td><code>.border-start</code>, <code>.border-end</code></td>
802
+ </tr>
803
+ <tr>
804
+ <td><code>.rounded-left</code>, <code>.rounded-right</code></td>
805
+ <td><code>.rounded-start</code>, <code>.rounded-end</code></td>
806
+ </tr>
807
+ <tr>
808
+ <td><code>.font-weight-*</code></td>
809
+ <td><code>.fw-*</code></td>
810
+ </tr>
811
+ <tr>
812
+ <td><code>.font-italic</code></td>
813
+ <td><code>.fst-italic</code></td>
814
+ </tr>
815
+ <tr>
816
+ <td><code>.text-monospace</code></td>
817
+ <td><code>.font-monospace</code></td>
818
+ </tr>
819
+ </tbody>
820
+ </table>
821
+ <p>
822
+ A regex find-replace handles most of this in a few minutes. The migration tool
823
+ <a href="https://github.com/dbtek/bootstrap-5-migration"
824
+ ><code>bootstrap-5-migration</code></a
825
+ >
826
+ automates the bulk.
827
+ </p>
828
+ <h5 id="jquery-removal">jQuery removal</h5>
829
+ <p>
830
+ If your app code calls AdminLTE 3 plugins via jQuery
831
+ (<code>$(&#39;.sidebar&#39;).PushMenu()</code>, etc.), those calls no longer
832
+ work. Replacements:
833
+ </p>
834
+ <pre
835
+ class="astro-code dark-plus"
836
+ style="background-color: #1e1e1e; color: #d4d4d4; overflow-x: auto"
837
+ tabindex="0"
838
+ data-language="js"
839
+ ><code><span class="line"><span style="color:#6A9955">// AdminLTE 3</span></span>
840
+ <span class="line"><span style="color:#DCDCAA">$</span><span style="color:#D4D4D4">(</span><span style="color:#CE9178">&#39;.sidebar-toggle&#39;</span><span style="color:#D4D4D4">).</span><span style="color:#DCDCAA">on</span><span style="color:#D4D4D4">(</span><span style="color:#CE9178">&#39;click&#39;</span><span style="color:#D4D4D4">, </span><span style="color:#569CD6">function</span><span style="color:#D4D4D4"> () {</span></span>
841
+ <span class="line"><span style="color:#DCDCAA"> $</span><span style="color:#D4D4D4">(</span><span style="color:#CE9178">&#39;body&#39;</span><span style="color:#D4D4D4">).</span><span style="color:#DCDCAA">toggleClass</span><span style="color:#D4D4D4">(</span><span style="color:#CE9178">&#39;sidebar-collapse&#39;</span><span style="color:#D4D4D4">)</span></span>
842
+ <span class="line"><span style="color:#D4D4D4">})</span></span></code></pre>
843
+ <pre
844
+ class="astro-code dark-plus"
845
+ style="background-color: #1e1e1e; color: #d4d4d4; overflow-x: auto"
846
+ tabindex="0"
847
+ data-language="js"
848
+ ><code><span class="line"><span style="color:#6A9955">// AdminLTE 4 — the data-API does this for you</span></span>
849
+ <span class="line"><span style="color:#6A9955">// &lt;a href=&quot;#&quot; data-lte-toggle=&quot;sidebar&quot;&gt;...&lt;/a&gt;</span></span></code></pre>
850
+ <p>If you need programmatic control, import the plugin class directly:</p>
851
+ <pre
852
+ class="astro-code dark-plus"
853
+ style="background-color: #1e1e1e; color: #d4d4d4; overflow-x: auto"
854
+ tabindex="0"
855
+ data-language="js"
856
+ ><code><span class="line"><span style="color:#C586C0">import</span><span style="color:#D4D4D4"> { </span><span style="color:#9CDCFE">PushMenu</span><span style="color:#D4D4D4"> } </span><span style="color:#C586C0">from</span><span style="color:#CE9178"> &quot;admin-lte&quot;</span></span>
857
+ <span class="line"></span>
858
+ <span class="line"><span style="color:#569CD6">new</span><span style="color:#DCDCAA"> PushMenu</span><span style="color:#D4D4D4">(</span><span style="color:#9CDCFE">document</span><span style="color:#D4D4D4">.</span><span style="color:#DCDCAA">querySelector</span><span style="color:#D4D4D4">(</span><span style="color:#CE9178">&quot;.sidebar-toggle&quot;</span><span style="color:#D4D4D4">)).</span><span style="color:#DCDCAA">toggle</span><span style="color:#D4D4D4">()</span></span></code></pre>
859
+ <p>
860
+ All seven JS plugins (<code>Layout</code>, <code>CardWidget</code>,
861
+ <code>Treeview</code>, <code>DirectChat</code>, <code>FullScreen</code>,
862
+ <code>PushMenu</code>, plus <code>initAccessibility</code>) are exported from
863
+ <code>admin-lte</code>.
864
+ </p>
865
+ <h5 id="dark-mode">Dark mode</h5>
866
+ <p>
867
+ AdminLTE 3 used a <code>.dark-mode</code> class toggled on the
868
+ <code>&lt;body&gt;</code>. AdminLTE 4 uses Bootstrap 5.3’s native
869
+ <code>data-bs-theme=&quot;dark&quot;</code> attribute, which can be applied at
870
+ any level — <code>&lt;html&gt;</code>, <code>&lt;body&gt;</code>, or a single
871
+ component.
872
+ </p>
873
+ <pre
874
+ class="astro-code dark-plus"
875
+ style="background-color: #1e1e1e; color: #d4d4d4; overflow-x: auto"
876
+ tabindex="0"
877
+ data-language="html"
878
+ ><code><span class="line"><span style="color:#6A9955">&lt;!-- AdminLTE 3 --&gt;</span></span>
879
+ <span class="line"><span style="color:#808080">&lt;</span><span style="color:#569CD6">body</span><span style="color:#9CDCFE"> class</span><span style="color:#D4D4D4">=</span><span style="color:#CE9178">&quot;dark-mode&quot;</span><span style="color:#808080">&gt;</span></span>
880
+ <span class="line"></span>
881
+ <span class="line"><span style="color:#6A9955">&lt;!-- AdminLTE 4 --&gt;</span></span>
882
+ <span class="line"><span style="color:#808080">&lt;</span><span style="color:#569CD6">html</span><span style="color:#9CDCFE"> data-bs-theme</span><span style="color:#D4D4D4">=</span><span style="color:#CE9178">&quot;dark&quot;</span><span style="color:#808080">&gt;</span></span></code></pre>
883
+ <p>
884
+ The included <a href="color-mode.html">Color Mode</a> widget reads/writes this
885
+ attribute and persists the user’s choice in <code>localStorage</code>. See the
886
+ <a href="color-mode.html">Color Mode</a> docs page for the toggle
887
+ implementation.
888
+ </p>
889
+ <h5 id="css-variables-instead-of-bg--overrides">
890
+ CSS variables instead of <code>.bg-*</code> overrides
891
+ </h5>
892
+ <p>
893
+ AdminLTE 3 shipped a lot of one-off colour classes (<code>.bg-navy</code>,
894
+ <code>.bg-purple</code>, <code>.bg-fuchsia</code>, etc.). In v4, prefer
895
+ Bootstrap 5.3’s CSS-variable model:
896
+ </p>
897
+ <pre
898
+ class="astro-code dark-plus"
899
+ style="background-color: #1e1e1e; color: #d4d4d4; overflow-x: auto"
900
+ tabindex="0"
901
+ data-language="html"
902
+ ><code><span class="line"><span style="color:#6A9955">&lt;!-- AdminLTE 3 --&gt;</span></span>
903
+ <span class="line"><span style="color:#808080">&lt;</span><span style="color:#569CD6">div</span><span style="color:#9CDCFE"> class</span><span style="color:#D4D4D4">=</span><span style="color:#CE9178">&quot;card bg-navy&quot;</span><span style="color:#808080">&gt;</span><span style="color:#D4D4D4">…</span><span style="color:#808080">&lt;/</span><span style="color:#569CD6">div</span><span style="color:#808080">&gt;</span></span>
904
+ <span class="line"></span>
905
+ <span class="line"><span style="color:#6A9955">&lt;!-- AdminLTE 4 — use Bootstrap utilities + CSS variables --&gt;</span></span>
906
+ <span class="line"><span style="color:#808080">&lt;</span><span style="color:#569CD6">div</span><span style="color:#9CDCFE"> class</span><span style="color:#D4D4D4">=</span><span style="color:#CE9178">&quot;card text-bg-primary&quot;</span><span style="color:#808080">&gt;</span><span style="color:#D4D4D4">…</span><span style="color:#808080">&lt;/</span><span style="color:#569CD6">div</span><span style="color:#808080">&gt;</span></span></code></pre>
907
+ <p>
908
+ For full retheming, override <code>--bs-primary</code> etc. on
909
+ <code>:root</code>. See <a href="customization.html">Customization</a>.
910
+ </p>
911
+ <h5 id="icons">Icons</h5>
912
+ <p>
913
+ AdminLTE 3 demos used FontAwesome 6 free. AdminLTE 4 standardises on
914
+ <a href="https://icons.getbootstrap.com/">Bootstrap Icons</a> — they’re SVG,
915
+ lighter, MIT-licensed, and ship with Bootstrap’s ecosystem.
916
+ </p>
917
+ <pre
918
+ class="astro-code dark-plus"
919
+ style="background-color: #1e1e1e; color: #d4d4d4; overflow-x: auto"
920
+ tabindex="0"
921
+ data-language="html"
922
+ ><code><span class="line"><span style="color:#6A9955">&lt;!-- AdminLTE 3 --&gt;</span></span>
923
+ <span class="line"><span style="color:#808080">&lt;</span><span style="color:#569CD6">i</span><span style="color:#9CDCFE"> class</span><span style="color:#D4D4D4">=</span><span style="color:#CE9178">&quot;fas fa-home&quot;</span><span style="color:#808080">&gt;&lt;/</span><span style="color:#569CD6">i</span><span style="color:#808080">&gt;</span></span>
924
+ <span class="line"></span>
925
+ <span class="line"><span style="color:#6A9955">&lt;!-- AdminLTE 4 --&gt;</span></span>
926
+ <span class="line"><span style="color:#808080">&lt;</span><span style="color:#569CD6">i</span><span style="color:#9CDCFE"> class</span><span style="color:#D4D4D4">=</span><span style="color:#CE9178">&quot;bi bi-house&quot;</span><span style="color:#808080">&gt;&lt;/</span><span style="color:#569CD6">i</span><span style="color:#808080">&gt;</span></span></code></pre>
927
+ <p>
928
+ If you’d rather stick with FontAwesome (or use Lucide, Tabler Icons, Material
929
+ Symbols, etc.), nothing in AdminLTE 4 forces Bootstrap Icons — load whichever
930
+ icon font you prefer and replace the <code>&lt;i&gt;</code> classes. See
931
+ <a href="integrations.html#icon-libraries">Recommended Integrations</a> for
932
+ the comparison table.
933
+ </p>
934
+ <h5 id="pages-we-havent-ported-yet">Pages we haven’t ported yet</h5>
935
+ <p>
936
+ The v3 demo includes pages that haven’t all been recreated for v4. The v4
937
+ release notes cover the current page catalog. If you depend on a specific v3
938
+ page that hasn’t been ported, please
939
+ <a href="https://github.com/ColorlibHQ/AdminLTE/issues">open an issue</a> —
940
+ community contributions for missing pages are very welcome.
941
+ </p>
942
+ <h5 id="suggested-migration-order">Suggested migration order</h5>
943
+ <p>For an existing AdminLTE 3 project:</p>
944
+ <ol>
945
+ <li>
946
+ <strong>Branch first.</strong> This is not a small change — keep
947
+ <code>master</code> on v3 until v4 is stable.
948
+ </li>
949
+ <li>
950
+ <strong>Update CSS class names</strong> with a find-replace pass using the
951
+ table above. Most layouts compile but look broken until step 3.
952
+ </li>
953
+ <li>
954
+ <strong
955
+ >Update <code>data-toggle</code> → <code>data-bs-toggle</code></strong
956
+ >
957
+ etc. across all your templates.
958
+ </li>
959
+ <li>
960
+ <strong>Replace <code>.dark-mode</code> toggle code</strong> with
961
+ <code>data-bs-theme</code> attribute writes.
962
+ </li>
963
+ <li>
964
+ <strong>Audit jQuery calls.</strong> Either remove them (use the data API)
965
+ or import plugin classes directly.
966
+ </li>
967
+ <li>
968
+ <strong>Test responsive breakpoints</strong> — Bootstrap 5 added
969
+ <code>xxl</code>. If you use breakpoint-specific utilities, double-check the
970
+ new scale.
971
+ </li>
972
+ <li>
973
+ <strong>Re-test print views</strong> — AdminLTE 4 fixed a print-layout issue
974
+ (#5996); if you had custom print CSS, verify it still works.
975
+ </li>
976
+ </ol>
977
+ <h5 id="help-and-discussion">Help and discussion</h5>
978
+ <ul>
979
+ <li>
980
+ Migration questions:
981
+ <a href="https://github.com/ColorlibHQ/AdminLTE/discussions"
982
+ >GitHub Discussions</a
983
+ >
984
+ </li>
985
+ <li>
986
+ Found something we missed?
987
+ <a href="https://github.com/ColorlibHQ/AdminLTE/issues">Open an issue</a>
988
+ tagged <code>migration</code>.
989
+ </li>
990
+ </ul>
991
+ </div>
992
+ </div>
993
+ </div>
994
+ </div>
995
+ </div>
996
+ </div>
997
+ </main>
998
+ <!--begin::Footer-->
999
+ <footer class="app-footer">
1000
+ <!--begin::To the end-->
1001
+ <div class="float-end d-none d-sm-inline">Anything you want</div>
1002
+ <!--end::To the end-->
1003
+ <!--begin::Copyright-->
1004
+ <strong>
1005
+ Copyright &copy; 2014-2026&nbsp;
1006
+ <a href="https://adminlte.io" class="text-decoration-none">AdminLTE.io</a>.
1007
+ </strong>
1008
+ All rights reserved.
1009
+ <!--end::Copyright-->
1010
+ </footer>
1011
+ <!--end::Footer-->
1012
+ </div>
1013
+ <!--begin::Third Party Plugin(OverlayScrollbars)-->
1014
+ <script
1015
+ src="https://cdn.jsdelivr.net/npm/overlayscrollbars@2.11.0/browser/overlayscrollbars.browser.es6.min.js"
1016
+ crossorigin="anonymous"
1017
+ ></script>
1018
+ <!--end::Third Party Plugin(OverlayScrollbars)--><!--begin::Required Plugin(popperjs for Bootstrap 5)-->
1019
+ <script
1020
+ src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.11.8/dist/umd/popper.min.js"
1021
+ crossorigin="anonymous"
1022
+ ></script>
1023
+ <!--end::Required Plugin(popperjs for Bootstrap 5)--><!--begin::Required Plugin(Bootstrap 5)-->
1024
+ <script
1025
+ src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.7/dist/js/bootstrap.min.js"
1026
+ crossorigin="anonymous"
1027
+ ></script>
1028
+ <!--end::Required Plugin(Bootstrap 5)--><!--begin::Required Plugin(AdminLTE)-->
1029
+ <script src="../js/adminlte.js"></script>
1030
+ <!--end::Required Plugin(AdminLTE)--><!--begin::OverlayScrollbars Configure-->
1031
+ <script>
1032
+ const SELECTOR_SIDEBAR_WRAPPER = '.sidebar-wrapper';
1033
+ const Default = {
1034
+ scrollbarTheme: 'os-theme-light',
1035
+ scrollbarAutoHide: 'leave',
1036
+ scrollbarClickScroll: true,
1037
+ };
1038
+ document.addEventListener('DOMContentLoaded', function () {
1039
+ const sidebarWrapper = document.querySelector(SELECTOR_SIDEBAR_WRAPPER);
1040
+
1041
+ // Disable OverlayScrollbars on mobile devices to prevent touch interference
1042
+ const isMobile = window.innerWidth <= 992;
1043
+
1044
+ if (
1045
+ sidebarWrapper &&
1046
+ OverlayScrollbarsGlobal?.OverlayScrollbars !== undefined &&
1047
+ !isMobile
1048
+ ) {
1049
+ OverlayScrollbarsGlobal.OverlayScrollbars(sidebarWrapper, {
1050
+ scrollbars: {
1051
+ theme: Default.scrollbarTheme,
1052
+ autoHide: Default.scrollbarAutoHide,
1053
+ clickScroll: Default.scrollbarClickScroll,
1054
+ },
1055
+ });
1056
+ }
1057
+ });
1058
+ </script>
1059
+ <!--end::OverlayScrollbars Configure--><!--begin::Color Mode Toggle (#6010)-->
1060
+ <script>
1061
+ (() => {
1062
+ 'use strict';
1063
+
1064
+ const STORAGE_KEY = 'lte-theme';
1065
+
1066
+ const getStoredTheme = () => localStorage.getItem(STORAGE_KEY);
1067
+ const setStoredTheme = (theme) => localStorage.setItem(STORAGE_KEY, theme);
1068
+
1069
+ const prefersDark = () => globalThis.matchMedia('(prefers-color-scheme: dark)').matches;
1070
+
1071
+ const getPreferredTheme = () => {
1072
+ const stored = getStoredTheme();
1073
+ if (stored) return stored;
1074
+ return prefersDark() ? 'dark' : 'light';
1075
+ };
1076
+
1077
+ const setTheme = (theme) => {
1078
+ const resolved = theme === 'auto' ? (prefersDark() ? 'dark' : 'light') : theme;
1079
+ document.documentElement.setAttribute('data-bs-theme', resolved);
1080
+ };
1081
+
1082
+ setTheme(getPreferredTheme());
1083
+
1084
+ const showActiveTheme = (theme) => {
1085
+ // Highlight the active dropdown option
1086
+ document.querySelectorAll('[data-bs-theme-value]').forEach((el) => {
1087
+ el.classList.remove('active');
1088
+ el.setAttribute('aria-pressed', 'false');
1089
+ const check = el.querySelector('.bi-check-lg');
1090
+ if (check) check.classList.add('d-none');
1091
+ });
1092
+ const active = document.querySelector(`[data-bs-theme-value="${theme}"]`);
1093
+ if (active) {
1094
+ active.classList.add('active');
1095
+ active.setAttribute('aria-pressed', 'true');
1096
+ const check = active.querySelector('.bi-check-lg');
1097
+ if (check) check.classList.remove('d-none');
1098
+ }
1099
+ // Sync the topbar trigger icon
1100
+ document.querySelectorAll('[data-lte-theme-icon]').forEach((icon) => {
1101
+ icon.classList.toggle('d-none', icon.dataset.lteThemeIcon !== theme);
1102
+ });
1103
+ };
1104
+
1105
+ globalThis.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', () => {
1106
+ const stored = getStoredTheme();
1107
+ if (!stored || stored === 'auto') setTheme(getPreferredTheme());
1108
+ });
1109
+
1110
+ document.addEventListener('DOMContentLoaded', () => {
1111
+ showActiveTheme(getPreferredTheme());
1112
+ document.querySelectorAll('[data-bs-theme-value]').forEach((toggle) => {
1113
+ toggle.addEventListener('click', () => {
1114
+ const theme = toggle.getAttribute('data-bs-theme-value');
1115
+ setStoredTheme(theme);
1116
+ setTheme(theme);
1117
+ showActiveTheme(theme);
1118
+ });
1119
+ });
1120
+ });
1121
+ })();
1122
+ </script>
1123
+ <!--end::Color Mode Toggle-->
1124
+ </body>
1125
+ </html>