admin-lte 4.0.1 → 4.0.4

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 (110) hide show
  1. package/ACCESSIBILITY-COMPLIANCE.md +60 -339
  2. package/CHANGELOG.md +53 -0
  3. package/README.md +15 -2
  4. package/dist/css/adminlte.css +24 -786
  5. package/dist/css/adminlte.css.map +1 -1
  6. package/dist/css/adminlte.min.css +2 -2
  7. package/dist/css/adminlte.min.css.map +1 -1
  8. package/dist/css/adminlte.rtl.css +24 -786
  9. package/dist/css/adminlte.rtl.css.map +1 -1
  10. package/dist/css/adminlte.rtl.min.css +2 -2
  11. package/dist/css/adminlte.rtl.min.css.map +1 -1
  12. package/dist/js/adminlte.js +233 -128
  13. package/dist/js/adminlte.js.map +1 -1
  14. package/dist/js/adminlte.min.js +2 -2
  15. package/dist/js/adminlte.min.js.map +1 -1
  16. package/package.json +30 -17
  17. package/src/scss/_callouts.scss +13 -3
  18. package/src/scss/_dropdown.scss +3 -1
  19. package/src/scss/adminlte.scss +1 -1
  20. package/src/scss/parts/_core.scss +0 -1
  21. package/src/ts/accessibility.ts +129 -69
  22. package/src/ts/adminlte.ts +1 -1
  23. package/src/ts/card-widget.ts +33 -8
  24. package/src/ts/fullscreen.ts +48 -42
  25. package/src/ts/layout.ts +2 -1
  26. package/src/ts/push-menu.ts +24 -8
  27. package/src/ts/treeview.ts +27 -1
  28. package/src/ts/util/index.ts +114 -29
  29. package/.browserslistrc +0 -17
  30. package/.prettierrc +0 -6
  31. package/CODE_OF_CONDUCT.md +0 -43
  32. package/SECURITY.md +0 -99
  33. package/dist/UI/general.html +0 -2317
  34. package/dist/UI/icons.html +0 -1126
  35. package/dist/UI/timeline.html +0 -1212
  36. package/dist/docs/browser-support.html +0 -826
  37. package/dist/docs/color-mode.html +0 -1142
  38. package/dist/docs/components/main-header.html +0 -1209
  39. package/dist/docs/components/main-sidebar.html +0 -924
  40. package/dist/docs/customization.html +0 -1080
  41. package/dist/docs/deployment.html +0 -1145
  42. package/dist/docs/faq.html +0 -1392
  43. package/dist/docs/getting-started.html +0 -991
  44. package/dist/docs/how-to-contribute.html +0 -890
  45. package/dist/docs/index.html +0 -16
  46. package/dist/docs/integrations.html +0 -1231
  47. package/dist/docs/introduction.html +0 -1008
  48. package/dist/docs/javascript/accessibility.html +0 -949
  49. package/dist/docs/javascript/card-widget.html +0 -1019
  50. package/dist/docs/javascript/direct-chat.html +0 -896
  51. package/dist/docs/javascript/fullscreen.html +0 -905
  52. package/dist/docs/javascript/layout.html +0 -908
  53. package/dist/docs/javascript/plugins-overview.html +0 -1144
  54. package/dist/docs/javascript/pushmenu.html +0 -1045
  55. package/dist/docs/javascript/treeview.html +0 -1024
  56. package/dist/docs/layout-blueprint.html +0 -1087
  57. package/dist/docs/layout.html +0 -842
  58. package/dist/docs/license.html +0 -807
  59. package/dist/docs/migration.html +0 -1149
  60. package/dist/docs/recipes.html +0 -1185
  61. package/dist/docs/rtl.html +0 -957
  62. package/dist/examples/lockscreen.html +0 -249
  63. package/dist/examples/login-v2.html +0 -282
  64. package/dist/examples/login.html +0 -272
  65. package/dist/examples/register-v2.html +0 -291
  66. package/dist/examples/register.html +0 -277
  67. package/dist/forms/elements.html +0 -1405
  68. package/dist/forms/layout.html +0 -1267
  69. package/dist/forms/validation.html +0 -1275
  70. package/dist/forms/wizard.html +0 -1410
  71. package/dist/generate/theme.html +0 -1082
  72. package/dist/index.html +0 -1745
  73. package/dist/index2.html +0 -2277
  74. package/dist/index3.html +0 -1532
  75. package/dist/layout/collapsed-sidebar-without-hover.html +0 -1144
  76. package/dist/layout/collapsed-sidebar.html +0 -1137
  77. package/dist/layout/fixed-complete.html +0 -1138
  78. package/dist/layout/fixed-footer.html +0 -1136
  79. package/dist/layout/fixed-header.html +0 -1136
  80. package/dist/layout/fixed-sidebar.html +0 -1138
  81. package/dist/layout/layout-custom-area.html +0 -1177
  82. package/dist/layout/layout-rtl.html +0 -1137
  83. package/dist/layout/logo-switch.html +0 -683
  84. package/dist/layout/sidebar-mini.html +0 -1137
  85. package/dist/layout/unfixed-sidebar.html +0 -1136
  86. package/dist/mailbox/compose.html +0 -1151
  87. package/dist/mailbox/inbox.html +0 -1509
  88. package/dist/mailbox/read.html +0 -1202
  89. package/dist/pages/404.html +0 -239
  90. package/dist/pages/500.html +0 -227
  91. package/dist/pages/calendar.html +0 -1266
  92. package/dist/pages/chat.html +0 -1427
  93. package/dist/pages/faq.html +0 -1383
  94. package/dist/pages/file-manager.html +0 -1835
  95. package/dist/pages/invoice.html +0 -1199
  96. package/dist/pages/kanban.html +0 -1439
  97. package/dist/pages/maintenance.html +0 -230
  98. package/dist/pages/pricing.html +0 -1279
  99. package/dist/pages/profile.html +0 -1382
  100. package/dist/pages/projects.html +0 -1644
  101. package/dist/pages/settings.html +0 -1387
  102. package/dist/tables/data.html +0 -1319
  103. package/dist/tables/simple.html +0 -1435
  104. package/dist/widgets/cards.html +0 -1356
  105. package/dist/widgets/info-box.html +0 -1429
  106. package/dist/widgets/small-box.html +0 -1225
  107. package/eslint.config.js +0 -82
  108. package/github-issue-response.md +0 -40
  109. package/index.html +0 -12
  110. package/netlify.toml +0 -16
@@ -1,1087 +0,0 @@
1
- <!doctype html>
2
- <html lang="en">
3
- <head>
4
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
5
- <title>Layout Blueprint | AdminLTE 4</title>
6
-
7
- <!--begin::Theme Init (prevents flash of incorrect theme on load, #6043)-->
8
- <script>
9
- (() => {
10
- 'use strict';
11
- const STORAGE_KEY = 'lte-theme';
12
- let stored = null;
13
- try {
14
- stored = localStorage.getItem(STORAGE_KEY);
15
- } catch {
16
- // localStorage may be unavailable (private mode, sandboxed iframe).
17
- }
18
- const prefersDark = globalThis.matchMedia('(prefers-color-scheme: dark)').matches;
19
- // Mirror the resolution in _scripts.astro: explicit "dark"/"light" win,
20
- // otherwise ("auto" or unset) fall back to the OS preference.
21
- let resolved = 'light';
22
- if (stored === 'dark' || stored === 'light') {
23
- resolved = stored;
24
- } else if (prefersDark) {
25
- resolved = 'dark';
26
- }
27
- document.documentElement.setAttribute('data-bs-theme', resolved);
28
- document.documentElement.style.colorScheme = resolved;
29
- })();
30
- </script>
31
- <!--end::Theme Init-->
32
-
33
- <!--begin::Accessibility Meta Tags-->
34
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
35
- <meta name="color-scheme" content="light dark" />
36
- <meta name="theme-color" content="#007bff" media="(prefers-color-scheme: light)" />
37
- <meta name="theme-color" content="#1a1a1a" media="(prefers-color-scheme: dark)" />
38
- <!--end::Accessibility Meta Tags-->
39
-
40
- <!--begin::Primary Meta Tags-->
41
- <meta name="title" content="Layout Blueprint | AdminLTE 4" />
42
- <meta name="author" content="ColorlibHQ" />
43
- <meta
44
- name="description"
45
- content="AdminLTE is a Free Bootstrap 5 Admin Dashboard, 30 example pages using Vanilla JS. Fully accessible with WCAG 2.1 AA compliance."
46
- />
47
- <meta
48
- name="keywords"
49
- 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"
50
- />
51
- <!--end::Primary Meta Tags-->
52
-
53
- <!--begin::Accessibility Features-->
54
- <!-- Skip links will be dynamically added by accessibility.js -->
55
- <meta name="supported-color-schemes" content="light dark" />
56
- <link rel="preload" href="../css/adminlte.css" as="style" />
57
- <!--end::Accessibility Features-->
58
-
59
- <!--begin::Fonts-->
60
- <link
61
- rel="stylesheet"
62
- href="https://cdn.jsdelivr.net/npm/@fontsource/source-sans-3@5.0.12/index.css"
63
- integrity="sha256-tXJfXfp6Ewt1ilPzLDtQnJV4hclT9XuaZUKyUvmyr+Q="
64
- crossorigin="anonymous"
65
- media="print"
66
- onload="this.media = 'all'"
67
- />
68
- <!--end::Fonts-->
69
-
70
- <!--begin::Third Party Plugin(OverlayScrollbars)-->
71
- <link
72
- rel="stylesheet"
73
- href="https://cdn.jsdelivr.net/npm/overlayscrollbars@2.11.0/styles/overlayscrollbars.min.css"
74
- crossorigin="anonymous"
75
- />
76
- <!--end::Third Party Plugin(OverlayScrollbars)-->
77
-
78
- <!--begin::Third Party Plugin(Bootstrap Icons)-->
79
- <link
80
- rel="stylesheet"
81
- href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.13.1/font/bootstrap-icons.min.css"
82
- crossorigin="anonymous"
83
- />
84
- <!--end::Third Party Plugin(Bootstrap Icons)-->
85
-
86
- <!--begin::Required Plugin(AdminLTE)-->
87
- <link rel="stylesheet" href="../css/adminlte.css" />
88
- <!--end::Required Plugin(AdminLTE)-->
89
- </head>
90
- <body class="layout-fixed sidebar-expand-lg bg-body-tertiary docs-page">
91
- <div class="app-wrapper">
92
- <!--begin::Header-->
93
- <nav class="app-header navbar navbar-expand bg-body">
94
- <!--begin::Container-->
95
- <div class="container-fluid">
96
- <!--begin::Start Navbar Links-->
97
- <ul class="navbar-nav">
98
- <li class="nav-item">
99
- <a class="nav-link" data-lte-toggle="sidebar" href="#" role="button">
100
- <i class="bi bi-list"></i>
101
- </a>
102
- </li>
103
-
104
- <li class="nav-item d-none d-md-block">
105
- <a href="../docs/introduction.html" class="nav-link">
106
- <i class="bi bi-book me-1" aria-hidden="true"></i>
107
- Documentation
108
- </a>
109
- </li>
110
- <li class="nav-item d-none d-md-block">
111
- <a href="../index.html" class="nav-link">
112
- <i class="bi bi-arrow-left me-1" aria-hidden="true"></i>
113
- Back to live preview
114
- </a>
115
- </li>
116
- </ul>
117
- <!--end::Start Navbar Links-->
118
-
119
- <!--begin::End Navbar Links-->
120
- <ul class="navbar-nav ms-auto">
121
- <!--begin::Navbar Search-->
122
- <li class="nav-item">
123
- <a class="nav-link" data-widget="navbar-search" href="#" role="button">
124
- <i class="bi bi-search"></i>
125
- </a>
126
- </li>
127
- <!--end::Navbar Search-->
128
-
129
- <!--begin::Messages Dropdown Menu-->
130
- <li class="nav-item dropdown">
131
- <a class="nav-link" data-bs-toggle="dropdown" href="#">
132
- <i class="bi bi-chat-text"></i>
133
- <span class="navbar-badge badge text-bg-danger">3</span>
134
- </a>
135
- <div class="dropdown-menu dropdown-menu-lg dropdown-menu-end">
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/user1-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
- Brad Diesel
149
- <span class="float-end fs-7 text-danger"
150
- ><i class="bi bi-star-fill"></i
151
- ></span>
152
- </h3>
153
- <p class="fs-7">Call me whenever you can...</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/user8-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
- John Pierce
175
- <span class="float-end fs-7 text-secondary">
176
- <i class="bi bi-star-fill"></i>
177
- </span>
178
- </h3>
179
- <p class="fs-7">I got your message bro</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">
189
- <!--begin::Message-->
190
- <div class="d-flex">
191
- <div class="flex-shrink-0">
192
- <img
193
- src="../assets/img/user3-128x128.jpg"
194
- alt="User Avatar"
195
- class="img-size-50 rounded-circle me-3"
196
- />
197
- </div>
198
- <div class="flex-grow-1">
199
- <h3 class="dropdown-item-title">
200
- Nora Silvester
201
- <span class="float-end fs-7 text-warning">
202
- <i class="bi bi-star-fill"></i>
203
- </span>
204
- </h3>
205
- <p class="fs-7">The subject goes here</p>
206
- <p class="fs-7 text-secondary">
207
- <i class="bi bi-clock-fill me-1"></i> 4 Hours Ago
208
- </p>
209
- </div>
210
- </div>
211
- <!--end::Message-->
212
- </a>
213
- <div class="dropdown-divider"></div>
214
- <a href="#" class="dropdown-item dropdown-footer">See All Messages</a>
215
- </div>
216
- </li>
217
- <!--end::Messages Dropdown Menu-->
218
-
219
- <!--begin::Notifications Dropdown Menu-->
220
- <li class="nav-item dropdown">
221
- <a class="nav-link" data-bs-toggle="dropdown" href="#">
222
- <i class="bi bi-bell-fill"></i>
223
- <span class="navbar-badge badge text-bg-warning">15</span>
224
- </a>
225
- <div class="dropdown-menu dropdown-menu-lg dropdown-menu-end">
226
- <span class="dropdown-item dropdown-header">15 Notifications</span>
227
- <div class="dropdown-divider"></div>
228
- <a href="#" class="dropdown-item">
229
- <i class="bi bi-envelope me-2"></i> 4 new messages
230
- <span class="float-end text-secondary fs-7">3 mins</span>
231
- </a>
232
- <div class="dropdown-divider"></div>
233
- <a href="#" class="dropdown-item">
234
- <i class="bi bi-people-fill me-2"></i> 8 friend requests
235
- <span class="float-end text-secondary fs-7">12 hours</span>
236
- </a>
237
- <div class="dropdown-divider"></div>
238
- <a href="#" class="dropdown-item">
239
- <i class="bi bi-file-earmark-fill me-2"></i> 3 new reports
240
- <span class="float-end text-secondary fs-7">2 days</span>
241
- </a>
242
- <div class="dropdown-divider"></div>
243
- <a href="#" class="dropdown-item dropdown-footer"> See All Notifications </a>
244
- </div>
245
- </li>
246
- <!--end::Notifications Dropdown Menu-->
247
-
248
- <!--begin::Fullscreen Toggle-->
249
- <li class="nav-item">
250
- <a class="nav-link" href="#" data-lte-toggle="fullscreen">
251
- <i data-lte-icon="maximize" class="bi bi-arrows-fullscreen"></i>
252
- <i data-lte-icon="minimize" class="bi bi-fullscreen-exit d-none"></i>
253
- </a>
254
- </li>
255
- <!--end::Fullscreen Toggle-->
256
-
257
- <!--begin::Color Mode Toggle (#6010)-->
258
- <li class="nav-item dropdown">
259
- <a
260
- class="nav-link"
261
- href="#"
262
- id="bd-theme"
263
- aria-label="Toggle color scheme"
264
- data-bs-toggle="dropdown"
265
- aria-expanded="false"
266
- >
267
- <i class="bi bi-sun-fill" data-lte-theme-icon="light"></i>
268
- <i class="bi bi-moon-fill d-none" data-lte-theme-icon="dark"></i>
269
- <i class="bi bi-circle-half d-none" data-lte-theme-icon="auto"></i>
270
- </a>
271
- <ul
272
- class="dropdown-menu dropdown-menu-end"
273
- aria-labelledby="bd-theme"
274
- style="--bs-dropdown-min-width: 8rem"
275
- >
276
- <li>
277
- <button
278
- type="button"
279
- class="dropdown-item d-flex align-items-center"
280
- data-bs-theme-value="light"
281
- aria-pressed="false"
282
- >
283
- <i class="bi bi-sun-fill me-2"></i>
284
- Light
285
- <i class="bi bi-check-lg ms-auto d-none"></i>
286
- </button>
287
- </li>
288
- <li>
289
- <button
290
- type="button"
291
- class="dropdown-item d-flex align-items-center"
292
- data-bs-theme-value="dark"
293
- aria-pressed="false"
294
- >
295
- <i class="bi bi-moon-fill me-2"></i>
296
- Dark
297
- <i class="bi bi-check-lg ms-auto d-none"></i>
298
- </button>
299
- </li>
300
- <li>
301
- <button
302
- type="button"
303
- class="dropdown-item d-flex align-items-center active"
304
- data-bs-theme-value="auto"
305
- aria-pressed="true"
306
- >
307
- <i class="bi bi-circle-half me-2"></i>
308
- Auto
309
- <i class="bi bi-check-lg ms-auto d-none"></i>
310
- </button>
311
- </li>
312
- </ul>
313
- </li>
314
- <!--end::Color Mode Toggle-->
315
-
316
- <!--begin::User Menu Dropdown-->
317
- <li class="nav-item dropdown user-menu">
318
- <a href="#" class="nav-link dropdown-toggle" data-bs-toggle="dropdown">
319
- <img
320
- src="../assets/img/user2-160x160.jpg"
321
- class="user-image rounded-circle shadow"
322
- alt="User Image"
323
- />
324
- <span class="d-none d-md-inline">Alexander Pierce</span>
325
- </a>
326
- <ul class="dropdown-menu dropdown-menu-lg dropdown-menu-end">
327
- <!--begin::User Image-->
328
- <li class="user-header text-bg-primary">
329
- <img
330
- src="../assets/img/user2-160x160.jpg"
331
- class="rounded-circle shadow"
332
- alt="User Image"
333
- />
334
- <p>
335
- Alexander Pierce - Web Developer
336
- <small>Member since Nov. 2023</small>
337
- </p>
338
- </li>
339
- <!--end::User Image-->
340
- <!--begin::Menu Body-->
341
- <li class="user-body">
342
- <!--begin::Row-->
343
- <div class="row">
344
- <div class="col-4 text-center">
345
- <a href="#">Followers</a>
346
- </div>
347
- <div class="col-4 text-center">
348
- <a href="#">Sales</a>
349
- </div>
350
- <div class="col-4 text-center">
351
- <a href="#">Friends</a>
352
- </div>
353
- </div>
354
- <!--end::Row-->
355
- </li>
356
- <!--end::Menu Body-->
357
- <!--begin::Menu Footer-->
358
- <li class="user-footer">
359
- <a href="#" class="btn btn-outline-secondary">Profile</a>
360
- <a href="#" class="btn btn-outline-danger float-end">Sign out</a>
361
- </li>
362
- <!--end::Menu Footer-->
363
- </ul>
364
- </li>
365
- <!--end::User Menu Dropdown-->
366
- </ul>
367
- <!--end::End Navbar Links-->
368
- </div>
369
- <!--end::Container-->
370
- </nav>
371
- <!--end::Header-->
372
- <!--begin::Sidebar (docs mode)-->
373
- <aside class="app-sidebar bg-body-secondary shadow" data-bs-theme="dark">
374
- <!--begin::Sidebar Brand-->
375
- <div class="sidebar-brand">
376
- <a href="../docs/introduction.html" class="brand-link">
377
- <img
378
- src="../assets/img/AdminLTELogo.png"
379
- alt="AdminLTE Logo"
380
- class="brand-image opacity-75 shadow"
381
- />
382
- <span class="brand-text fw-light">
383
- AdminLTE 4 <span class="opacity-75">&middot; Docs</span>
384
- </span>
385
- </a>
386
- </div>
387
- <!--end::Sidebar Brand-->
388
- <!--begin::Sidebar Wrapper-->
389
- <div class="sidebar-wrapper">
390
- <nav class="mt-2" aria-label="Documentation navigation">
391
- <!--begin::Sidebar Menu-->
392
- <ul
393
- class="nav sidebar-menu flex-column"
394
- data-lte-toggle="treeview"
395
- data-accordion="false"
396
- id="docs-navigation"
397
- >
398
- <li class="nav-header">START HERE</li>
399
- <li class="nav-item">
400
- <a href="../docs/introduction.html" class="nav-link">
401
- <i class="nav-icon bi bi-download"></i>
402
- <p>Installation</p>
403
- </a>
404
- </li>
405
- <li class="nav-item">
406
- <a href="../docs/getting-started.html" class="nav-link">
407
- <i class="nav-icon bi bi-rocket-takeoff"></i>
408
- <p>Getting Started</p>
409
- </a>
410
- </li>
411
-
412
- <li class="nav-header">FOUNDATIONS</li>
413
- <li class="nav-item">
414
- <a href="../docs/layout.html" class="nav-link">
415
- <i class="nav-icon bi bi-grip-horizontal"></i>
416
- <p>Layout Classes</p>
417
- </a>
418
- </li>
419
- <li class="nav-item">
420
- <a href="../docs/layout-blueprint.html" class="nav-link active">
421
- <i class="nav-icon bi bi-diagram-3"></i>
422
- <p>Layout Blueprint</p>
423
- </a>
424
- </li>
425
- <li class="nav-item">
426
- <a href="../docs/customization.html" class="nav-link">
427
- <i class="nav-icon bi bi-palette"></i>
428
- <p>Customization</p>
429
- </a>
430
- </li>
431
- <li class="nav-item">
432
- <a href="../docs/color-mode.html" class="nav-link">
433
- <i class="nav-icon bi bi-star-half"></i>
434
- <p>Color Mode</p>
435
- </a>
436
- </li>
437
- <li class="nav-item">
438
- <a href="../docs/rtl.html" class="nav-link">
439
- <i class="nav-icon bi bi-text-paragraph"></i>
440
- <p>RTL Support</p>
441
- </a>
442
- </li>
443
-
444
- <li class="nav-header">BUILDING</li>
445
- <li class="nav-item">
446
- <a href="../docs/recipes.html" class="nav-link">
447
- <i class="nav-icon bi bi-clipboard-check"></i>
448
- <p>Recipes</p>
449
- </a>
450
- </li>
451
- <li class="nav-item">
452
- <a href="#" class="nav-link">
453
- <i class="nav-icon bi bi-ui-checks-grid"></i>
454
- <p>
455
- Components
456
- <i class="nav-arrow bi bi-chevron-right"></i>
457
- </p>
458
- </a>
459
- <ul class="nav nav-treeview">
460
- <li class="nav-item">
461
- <a href="../docs/components/main-header.html" class="nav-link">
462
- <i class="nav-icon bi bi-circle"></i>
463
- <p>Main Header</p>
464
- </a>
465
- </li>
466
- <li class="nav-item">
467
- <a href="../docs/components/main-sidebar.html" class="nav-link">
468
- <i class="nav-icon bi bi-circle"></i>
469
- <p>Main Sidebar</p>
470
- </a>
471
- </li>
472
- </ul>
473
- </li>
474
- <li class="nav-item">
475
- <a href="#" class="nav-link">
476
- <i class="nav-icon bi bi-filetype-js"></i>
477
- <p>
478
- JavaScript Plugins
479
- <i class="nav-arrow bi bi-chevron-right"></i>
480
- </p>
481
- </a>
482
- <ul class="nav nav-treeview">
483
- <li class="nav-item">
484
- <a href="../docs/javascript/plugins-overview.html" class="nav-link">
485
- <i class="nav-icon bi bi-circle"></i>
486
- <p>Overview</p>
487
- </a>
488
- </li>
489
- <li class="nav-item">
490
- <a href="../docs/javascript/layout.html" class="nav-link">
491
- <i class="nav-icon bi bi-circle"></i>
492
- <p>Layout</p>
493
- </a>
494
- </li>
495
- <li class="nav-item">
496
- <a href="../docs/javascript/pushmenu.html" class="nav-link">
497
- <i class="nav-icon bi bi-circle"></i>
498
- <p>PushMenu</p>
499
- </a>
500
- </li>
501
- <li class="nav-item">
502
- <a href="../docs/javascript/treeview.html" class="nav-link">
503
- <i class="nav-icon bi bi-circle"></i>
504
- <p>Treeview</p>
505
- </a>
506
- </li>
507
- <li class="nav-item">
508
- <a href="../docs/javascript/card-widget.html" class="nav-link">
509
- <i class="nav-icon bi bi-circle"></i>
510
- <p>Card Widget</p>
511
- </a>
512
- </li>
513
- <li class="nav-item">
514
- <a href="../docs/javascript/direct-chat.html" class="nav-link">
515
- <i class="nav-icon bi bi-circle"></i>
516
- <p>Direct Chat</p>
517
- </a>
518
- </li>
519
- <li class="nav-item">
520
- <a href="../docs/javascript/fullscreen.html" class="nav-link">
521
- <i class="nav-icon bi bi-circle"></i>
522
- <p>Fullscreen</p>
523
- </a>
524
- </li>
525
- <li class="nav-item">
526
- <a href="../docs/javascript/accessibility.html" class="nav-link">
527
- <i class="nav-icon bi bi-circle"></i>
528
- <p>Accessibility</p>
529
- </a>
530
- </li>
531
- </ul>
532
- </li>
533
- <li class="nav-item">
534
- <a href="../docs/integrations.html" class="nav-link">
535
- <i class="nav-icon bi bi-puzzle"></i>
536
- <p>Integrations</p>
537
- </a>
538
- </li>
539
-
540
- <li class="nav-header">SHIPPING</li>
541
- <li class="nav-item">
542
- <a href="../docs/migration.html" class="nav-link">
543
- <i class="nav-icon bi bi-arrow-up-right-square"></i>
544
- <p>Migration from v3</p>
545
- </a>
546
- </li>
547
- <li class="nav-item">
548
- <a href="../docs/deployment.html" class="nav-link">
549
- <i class="nav-icon bi bi-cloud-upload"></i>
550
- <p>Deployment</p>
551
- </a>
552
- </li>
553
- <li class="nav-item">
554
- <a href="../docs/browser-support.html" class="nav-link">
555
- <i class="nav-icon bi bi-browser-chrome"></i>
556
- <p>Browser Support</p>
557
- </a>
558
- </li>
559
-
560
- <li class="nav-header">RESOURCES</li>
561
- <li class="nav-item">
562
- <a href="../docs/faq.html" class="nav-link">
563
- <i class="nav-icon bi bi-question-circle"></i>
564
- <p>FAQ</p>
565
- </a>
566
- </li>
567
- <li class="nav-item">
568
- <a href="../docs/how-to-contribute.html" class="nav-link">
569
- <i class="nav-icon bi bi-people"></i>
570
- <p>Contributing</p>
571
- </a>
572
- </li>
573
- <li class="nav-item">
574
- <a href="../docs/license.html" class="nav-link">
575
- <i class="nav-icon bi bi-patch-check"></i>
576
- <p>License</p>
577
- </a>
578
- </li>
579
- <li class="nav-item">
580
- <a
581
- href="https://github.com/ColorlibHQ/AdminLTE"
582
- target="_blank"
583
- rel="noopener"
584
- class="nav-link"
585
- >
586
- <i class="nav-icon bi bi-github"></i>
587
- <p>
588
- GitHub
589
- <i class="bi bi-box-arrow-up-right ms-1" aria-hidden="true"></i>
590
- </p>
591
- </a>
592
- </li>
593
- </ul>
594
- <!--end::Sidebar Menu-->
595
-
596
- <!-- Back to preview CTA (bottom of sidebar) -->
597
- <div class="p-3 mt-3 border-top border-secondary border-opacity-25">
598
- <a
599
- href="../index.html"
600
- class="btn btn-sm btn-outline-light w-100 d-flex align-items-center justify-content-center gap-2"
601
- >
602
- <i class="bi bi-arrow-left" aria-hidden="true"></i>
603
- Back to live preview
604
- </a>
605
- </div>
606
- </nav>
607
- </div>
608
- <!--end::Sidebar Wrapper-->
609
- </aside>
610
- <!--end::Sidebar (docs mode)-->
611
- <main class="app-main">
612
- <div class="app-content-header">
613
- <div class="container-fluid">
614
- <div class="row">
615
- <div class="col-sm-6">
616
- <h3 class="mb-0">Layout Blueprint</h3>
617
- </div>
618
- <div class="col-sm-6">
619
- <ol class="breadcrumb float-sm-end">
620
- <li class="breadcrumb-item"><a href="#">Docs</a></li>
621
- <li class="breadcrumb-item active" aria-current="page">Layout Blueprint</li>
622
- </ol>
623
- </div>
624
- </div>
625
- </div>
626
- </div>
627
- <div class="app-content">
628
- <div class="container-fluid">
629
- <div class="row">
630
- <div class="col-12">
631
- <div class="card">
632
- <div class="card-body">
633
- <p>
634
- Every AdminLTE page follows the same structural blueprint: a wrapper that
635
- contains a header, a sidebar, a main content area, and (optionally) a footer.
636
- Understanding the four region classes is the difference between fighting the
637
- framework and using it productively.
638
- </p>
639
- <h5 id="the-four-regions">The four regions</h5>
640
- <pre
641
- class="astro-code dark-plus"
642
- style="background-color: #1e1e1e; color: #d4d4d4; overflow-x: auto"
643
- tabindex="0"
644
- data-language="text"
645
- ><code><span class="line"><span>┌──────────────────────────────────────────┐</span></span>
646
- <span class="line"><span>│ .app-wrapper │</span></span>
647
- <span class="line"><span>│ ┌────────────────────────────────────┐ │</span></span>
648
- <span class="line"><span>│ │ .app-header │ │ ← topbar / navbar</span></span>
649
- <span class="line"><span>│ ├──────────┬─────────────────────────┤ │</span></span>
650
- <span class="line"><span>│ │ │ │ │</span></span>
651
- <span class="line"><span>│ │ .app- │ .app-main │ │ ← page content</span></span>
652
- <span class="line"><span>│ │ sidebar │ │ │</span></span>
653
- <span class="line"><span>│ │ │ │ │</span></span>
654
- <span class="line"><span>│ ├──────────┴─────────────────────────┤ │</span></span>
655
- <span class="line"><span>│ │ .app-footer (optional) │ │</span></span>
656
- <span class="line"><span>│ └────────────────────────────────────┘ │</span></span>
657
- <span class="line"><span>└──────────────────────────────────────────┘</span></span></code></pre>
658
- <p>
659
- The wrapper is a CSS grid container, the four children are grid areas. You
660
- don’t have to know that to use it — the markup pattern alone is sufficient.
661
- </p>
662
- <h5 id="minimal-markup">Minimal markup</h5>
663
- <pre
664
- class="astro-code dark-plus"
665
- style="background-color: #1e1e1e; color: #d4d4d4; overflow-x: auto"
666
- tabindex="0"
667
- data-language="html"
668
- ><code><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;layout-fixed sidebar-expand-lg bg-body-tertiary&quot;</span><span style="color:#808080">&gt;</span></span>
669
- <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;app-wrapper&quot;</span><span style="color:#808080">&gt;</span></span>
670
- <span class="line"><span style="color:#808080"> &lt;</span><span style="color:#569CD6">nav</span><span style="color:#9CDCFE"> class</span><span style="color:#D4D4D4">=</span><span style="color:#CE9178">&quot;app-header navbar navbar-expand bg-body&quot;</span><span style="color:#808080">&gt;</span><span style="color:#D4D4D4">…</span><span style="color:#808080">&lt;/</span><span style="color:#569CD6">nav</span><span style="color:#808080">&gt;</span></span>
671
- <span class="line"><span style="color:#808080"> &lt;</span><span style="color:#569CD6">aside</span><span style="color:#9CDCFE"> class</span><span style="color:#D4D4D4">=</span><span style="color:#CE9178">&quot;app-sidebar bg-body-secondary shadow&quot;</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 style="color:#D4D4D4">…</span><span style="color:#808080">&lt;/</span><span style="color:#569CD6">aside</span><span style="color:#808080">&gt;</span></span>
672
- <span class="line"><span style="color:#808080"> &lt;</span><span style="color:#569CD6">main</span><span style="color:#9CDCFE"> class</span><span style="color:#D4D4D4">=</span><span style="color:#CE9178">&quot;app-main&quot;</span><span style="color:#808080">&gt;</span><span style="color:#D4D4D4">…</span><span style="color:#808080">&lt;/</span><span style="color:#569CD6">main</span><span style="color:#808080">&gt;</span></span>
673
- <span class="line"><span style="color:#808080"> &lt;</span><span style="color:#569CD6">footer</span><span style="color:#9CDCFE"> class</span><span style="color:#D4D4D4">=</span><span style="color:#CE9178">&quot;app-footer&quot;</span><span style="color:#808080">&gt;</span><span style="color:#D4D4D4">…</span><span style="color:#808080">&lt;/</span><span style="color:#569CD6">footer</span><span style="color:#808080">&gt;</span></span>
674
- <span class="line"><span style="color:#808080"> &lt;/</span><span style="color:#569CD6">div</span><span style="color:#808080">&gt;</span></span>
675
- <span class="line"><span style="color:#808080">&lt;/</span><span style="color:#569CD6">body</span><span style="color:#808080">&gt;</span></span></code></pre>
676
- <p>
677
- Order inside <code>.app-wrapper</code> doesn’t matter — the grid template
678
- positions each child by its class. Use whatever order reads cleanly.
679
- </p>
680
- <h5 id="region-reference">Region reference</h5>
681
- <h6 id="app-wrapper"><code>.app-wrapper</code></h6>
682
- <p>
683
- The root container. Defines the grid template that positions header, sidebar,
684
- main, and footer. Always lives directly inside <code>&lt;body&gt;</code>.
685
- </p>
686
- <p>
687
- You can add <code>.compact-mode</code> here (or anywhere up the tree) to
688
- reduce padding throughout the layout — useful for data-dense dashboards.
689
- </p>
690
- <h6 id="app-header"><code>.app-header</code></h6>
691
- <p>
692
- The top bar. Use Bootstrap’s navbar classes (<code
693
- >navbar navbar-expand bg-body</code
694
- >) for the visual. The header is where the sidebar toggle button lives — wire
695
- it with <code>data-lte-toggle=&quot;sidebar&quot;</code>:
696
- </p>
697
- <pre
698
- class="astro-code dark-plus"
699
- style="background-color: #1e1e1e; color: #d4d4d4; overflow-x: auto"
700
- tabindex="0"
701
- data-language="html"
702
- ><code><span class="line"><span style="color:#808080">&lt;</span><span style="color:#569CD6">a</span><span style="color:#9CDCFE"> class</span><span style="color:#D4D4D4">=</span><span style="color:#CE9178">&quot;nav-link&quot;</span><span style="color:#9CDCFE"> data-lte-toggle</span><span style="color:#D4D4D4">=</span><span style="color:#CE9178">&quot;sidebar&quot;</span><span style="color:#9CDCFE"> href</span><span style="color:#D4D4D4">=</span><span style="color:#CE9178">&quot;#&quot;</span><span style="color:#9CDCFE"> role</span><span style="color:#D4D4D4">=</span><span style="color:#CE9178">&quot;button&quot;</span><span style="color:#808080">&gt;</span></span>
703
- <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-list&quot;</span><span style="color:#808080">&gt;&lt;/</span><span style="color:#569CD6">i</span><span style="color:#808080">&gt;</span></span>
704
- <span class="line"><span style="color:#808080">&lt;/</span><span style="color:#569CD6">a</span><span style="color:#808080">&gt;</span></span></code></pre>
705
- <p>
706
- By default the header scrolls with the page. Add <code>.fixed-header</code> to
707
- <code>&lt;body&gt;</code> to pin it.
708
- </p>
709
- <h6 id="app-sidebar"><code>.app-sidebar</code></h6>
710
- <p>
711
- The side rail. Always contains two children: <code>.sidebar-brand</code> (logo
712
- / app name) and <code>.sidebar-wrapper</code> (the scrollable nav region).
713
- </p>
714
- <pre
715
- class="astro-code dark-plus"
716
- style="background-color: #1e1e1e; color: #d4d4d4; overflow-x: auto"
717
- tabindex="0"
718
- data-language="html"
719
- ><code><span class="line"><span style="color:#808080">&lt;</span><span style="color:#569CD6">aside</span><span style="color:#9CDCFE"> class</span><span style="color:#D4D4D4">=</span><span style="color:#CE9178">&quot;app-sidebar bg-body-secondary shadow&quot;</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>
720
- <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;sidebar-brand&quot;</span><span style="color:#808080">&gt;</span></span>
721
- <span class="line"><span style="color:#808080"> &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:#9CDCFE"> class</span><span style="color:#D4D4D4">=</span><span style="color:#CE9178">&quot;brand-link&quot;</span><span style="color:#808080">&gt;</span></span>
722
- <span class="line"><span style="color:#808080"> &lt;</span><span style="color:#569CD6">span</span><span style="color:#9CDCFE"> class</span><span style="color:#D4D4D4">=</span><span style="color:#CE9178">&quot;brand-text fw-light&quot;</span><span style="color:#808080">&gt;</span><span style="color:#D4D4D4">My Dashboard</span><span style="color:#808080">&lt;/</span><span style="color:#569CD6">span</span><span style="color:#808080">&gt;</span></span>
723
- <span class="line"><span style="color:#808080"> &lt;/</span><span style="color:#569CD6">a</span><span style="color:#808080">&gt;</span></span>
724
- <span class="line"><span style="color:#808080"> &lt;/</span><span style="color:#569CD6">div</span><span style="color:#808080">&gt;</span></span>
725
- <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;sidebar-wrapper&quot;</span><span style="color:#808080">&gt;</span></span>
726
- <span class="line"><span style="color:#808080"> &lt;</span><span style="color:#569CD6">nav</span><span style="color:#9CDCFE"> class</span><span style="color:#D4D4D4">=</span><span style="color:#CE9178">&quot;mt-2&quot;</span><span style="color:#808080">&gt;</span></span>
727
- <span class="line"><span style="color:#808080"> &lt;</span><span style="color:#569CD6">ul</span><span style="color:#9CDCFE"> class</span><span style="color:#D4D4D4">=</span><span style="color:#CE9178">&quot;nav sidebar-menu flex-column&quot;</span><span style="color:#9CDCFE"> data-lte-toggle</span><span style="color:#D4D4D4">=</span><span style="color:#CE9178">&quot;treeview&quot;</span><span style="color:#9CDCFE"> role</span><span style="color:#D4D4D4">=</span><span style="color:#CE9178">&quot;menu&quot;</span><span style="color:#808080">&gt;</span></span>
728
- <span class="line"><span style="color:#6A9955"> &lt;!-- nav items --&gt;</span></span>
729
- <span class="line"><span style="color:#808080"> &lt;/</span><span style="color:#569CD6">ul</span><span style="color:#808080">&gt;</span></span>
730
- <span class="line"><span style="color:#808080"> &lt;/</span><span style="color:#569CD6">nav</span><span style="color:#808080">&gt;</span></span>
731
- <span class="line"><span style="color:#808080"> &lt;/</span><span style="color:#569CD6">div</span><span style="color:#808080">&gt;</span></span>
732
- <span class="line"><span style="color:#808080">&lt;/</span><span style="color:#569CD6">aside</span><span style="color:#808080">&gt;</span></span></code></pre>
733
- <p>
734
- The <code>data-bs-theme=&quot;dark&quot;</code> on the sidebar gives you the
735
- dark-sidebar-on-light-page look from the demos. Drop it for a light sidebar.
736
- </p>
737
- <h6 id="app-main"><code>.app-main</code></h6>
738
- <p>The page content region. Almost always contains two children:</p>
739
- <pre
740
- class="astro-code dark-plus"
741
- style="background-color: #1e1e1e; color: #d4d4d4; overflow-x: auto"
742
- tabindex="0"
743
- data-language="html"
744
- ><code><span class="line"><span style="color:#808080">&lt;</span><span style="color:#569CD6">main</span><span style="color:#9CDCFE"> class</span><span style="color:#D4D4D4">=</span><span style="color:#CE9178">&quot;app-main&quot;</span><span style="color:#808080">&gt;</span></span>
745
- <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;app-content-header&quot;</span><span style="color:#808080">&gt;</span></span>
746
- <span class="line"><span style="color:#6A9955"> &lt;!-- page title + breadcrumb --&gt;</span></span>
747
- <span class="line"><span style="color:#808080"> &lt;/</span><span style="color:#569CD6">div</span><span style="color:#808080">&gt;</span></span>
748
- <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;app-content&quot;</span><span style="color:#808080">&gt;</span></span>
749
- <span class="line"><span style="color:#6A9955"> &lt;!-- page body, cards, tables, charts, etc. --&gt;</span></span>
750
- <span class="line"><span style="color:#808080"> &lt;/</span><span style="color:#569CD6">div</span><span style="color:#808080">&gt;</span></span>
751
- <span class="line"><span style="color:#808080">&lt;/</span><span style="color:#569CD6">main</span><span style="color:#808080">&gt;</span></span></code></pre>
752
- <p>
753
- <code>.app-content-header</code> is the title strip — typically an
754
- <code>&lt;h3&gt;</code> and a breadcrumb in a row.
755
- <code>.app-content</code> is everything below it. Both should wrap their
756
- children in <code>.container-fluid</code> (or <code>.container</code> for
757
- capped width).
758
- </p>
759
- <h6 id="app-footer-optional"><code>.app-footer</code> (optional)</h6>
760
- <p>A footer strip at the bottom of the wrapper:</p>
761
- <pre
762
- class="astro-code dark-plus"
763
- style="background-color: #1e1e1e; color: #d4d4d4; overflow-x: auto"
764
- tabindex="0"
765
- data-language="html"
766
- ><code><span class="line"><span style="color:#808080">&lt;</span><span style="color:#569CD6">footer</span><span style="color:#9CDCFE"> class</span><span style="color:#D4D4D4">=</span><span style="color:#CE9178">&quot;app-footer&quot;</span><span style="color:#808080">&gt;</span></span>
767
- <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;float-end d-none d-sm-inline&quot;</span><span style="color:#808080">&gt;</span><span style="color:#D4D4D4">Version 4.0.0</span><span style="color:#808080">&lt;/</span><span style="color:#569CD6">div</span><span style="color:#808080">&gt;</span></span>
768
- <span class="line"><span style="color:#808080"> &lt;</span><span style="color:#569CD6">strong</span><span style="color:#808080">&gt;</span><span style="color:#569CD6">&amp;copy;</span><span style="color:#D4D4D4"> 2026 Your Company</span><span style="color:#808080">&lt;/</span><span style="color:#569CD6">strong</span><span style="color:#808080">&gt;</span></span>
769
- <span class="line"><span style="color:#808080">&lt;/</span><span style="color:#569CD6">footer</span><span style="color:#808080">&gt;</span></span></code></pre>
770
- <p>
771
- Add <code>.fixed-footer</code> to <code>&lt;body&gt;</code> to pin it to the
772
- bottom of the viewport.
773
- </p>
774
- <h5 id="body-level-layout-modifiers">Body-level layout modifiers</h5>
775
- <p>
776
- Layout behaviour is mostly controlled by classes on <code>&lt;body&gt;</code>,
777
- not <code>.app-wrapper</code>. The supported modifiers:
778
- </p>
779
-
780
- <table>
781
- <thead>
782
- <tr>
783
- <th>Class</th>
784
- <th>What it does</th>
785
- </tr>
786
- </thead>
787
- <tbody>
788
- <tr>
789
- <td><code>layout-fixed</code></td>
790
- <td>
791
- Sidebar gets its own scrollbar; only <code>.app-main</code> scrolls with
792
- the page
793
- </td>
794
- </tr>
795
- <tr>
796
- <td><code>fixed-header</code></td>
797
- <td>
798
- Sticky <code>.app-header</code> at the top; sidebar also pins (since
799
- v4.0.0)
800
- </td>
801
- </tr>
802
- <tr>
803
- <td><code>fixed-footer</code></td>
804
- <td>Sticky <code>.app-footer</code> at the bottom</td>
805
- </tr>
806
- <tr>
807
- <td><code>sidebar-expand-{sm,md,lg,xl,xxl}</code></td>
808
- <td>
809
- Breakpoint at which the sidebar transitions from off-canvas (mobile) to
810
- inline (desktop). <code>lg</code> is the default in the demos.
811
- </td>
812
- </tr>
813
- <tr>
814
- <td><code>sidebar-mini</code></td>
815
- <td>Collapses sidebar to icon-only mini state</td>
816
- </tr>
817
- <tr>
818
- <td><code>sidebar-mini sidebar-collapse</code></td>
819
- <td>Starts the page with the mini sidebar already collapsed</td>
820
- </tr>
821
- <tr>
822
- <td><code>sidebar-without-hover</code></td>
823
- <td>Disables the auto-expand-on-hover behaviour for the mini sidebar</td>
824
- </tr>
825
- <tr>
826
- <td><code>layout-rtl</code></td>
827
- <td>
828
- Mirrors the layout for right-to-left languages (also requires
829
- <code>.rtl.css</code> and <code>dir=&quot;rtl&quot;</code> — see
830
- <a href="rtl.html">RTL Support</a>)
831
- </td>
832
- </tr>
833
- </tbody>
834
- </table>
835
- <p>
836
- These compose. The demo dashboards use
837
- <code>class=&quot;layout-fixed sidebar-expand-lg bg-body-tertiary&quot;</code>
838
- — fixed-height with a desktop sidebar breakpoint at the
839
- <code>lg</code> (≥992px) boundary.
840
- </p>
841
- <h6 id="layout-variants-demo">Layout variants demo</h6>
842
- <p>
843
- The Layout section of the demo site (<code>/layout/*.html</code> files) ships
844
- eleven pre-built combinations:
845
- </p>
846
- <ul>
847
- <li>
848
- <a href="../layout/fixed-sidebar.html">Fixed Sidebar</a>,
849
- <a href="../layout/fixed-header.html">Fixed Header</a>,
850
- <a href="../layout/fixed-footer.html">Fixed Footer</a>,
851
- <a href="../layout/fixed-complete.html">Fixed Complete</a>
852
- </li>
853
- <li>
854
- <a href="../layout/unfixed-sidebar.html">Unfixed Sidebar</a>,
855
- <a href="../layout/sidebar-mini.html">Sidebar Mini</a>,
856
- <a href="../layout/collapsed-sidebar.html">Collapsed Sidebar</a>,
857
- <a href="../layout/collapsed-sidebar-without-hover.html"
858
- >Collapsed without hover</a
859
- >
860
- </li>
861
- <li>
862
- <a href="../layout/layout-custom-area.html">Layout Custom Area</a>,
863
- <a href="../layout/logo-switch.html">Logo Switch</a>,
864
- <a href="../layout/layout-rtl.html">Layout RTL</a>
865
- </li>
866
- </ul>
867
- <h5 id="responsive-behaviour">Responsive behaviour</h5>
868
- <p>
869
- At and above your <code>sidebar-expand-*</code> breakpoint, the sidebar is
870
- <strong>inline</strong> — visible in the grid alongside
871
- <code>.app-main</code>. Below the breakpoint, it becomes
872
- <strong>off-canvas</strong> — hidden by default and slid in from the left when
873
- the user clicks the hamburger toggle.
874
- </p>
875
- <p>Mobile-specific classes:</p>
876
-
877
- <table>
878
- <thead>
879
- <tr>
880
- <th>Class</th>
881
- <th>When applied</th>
882
- <th>Effect</th>
883
- </tr>
884
- </thead>
885
- <tbody>
886
- <tr>
887
- <td><code>sidebar-open</code></td>
888
- <td>Body — when the user explicitly opens the mobile sidebar</td>
889
- <td>Slides the sidebar in over the content with an overlay</td>
890
- </tr>
891
- <tr>
892
- <td><code>sidebar-collapse</code></td>
893
- <td>Body — set automatically when the user closes the mobile sidebar</td>
894
- <td>Hides the sidebar</td>
895
- </tr>
896
- </tbody>
897
- </table>
898
- <p>
899
- These are managed by the
900
- <a href="javascript/pushmenu.html">PushMenu plugin</a> — you don’t write them
901
- yourself.
902
- </p>
903
- <h5 id="common-pitfalls">Common pitfalls</h5>
904
- <ul>
905
- <li>
906
- <strong
907
- >Forgetting <code>.container-fluid</code> inside
908
- <code>.app-content</code></strong
909
- >
910
- — the content lands flush against the screen edge. Wrap your content cards
911
- in a container.
912
- </li>
913
- <li>
914
- <strong>Putting the sidebar toggle outside <code>.app-header</code></strong>
915
- — it’ll still work, but the styling expects the navbar context.
916
- </li>
917
- <li>
918
- <strong>Mixing <code>.app-*</code> and <code>.main-*</code> classes</strong>
919
- — <code>.main-*</code> is the AdminLTE 3 naming. Don’t combine them. See
920
- <a href="migration.html">Migration from v3</a>.
921
- </li>
922
- <li>
923
- <strong
924
- >Using <code>position: fixed</code> on something inside
925
- <code>.app-main</code></strong
926
- >
927
- — <code>layout-fixed</code> already gives <code>.app-main</code>
928
- <code>overflow: auto</code>. Children with <code>position: fixed</code> may
929
- behave unexpectedly. Use sticky positioning instead.
930
- </li>
931
- <li>
932
- <strong>Hardcoding sidebar width in custom CSS</strong> — the sidebar width
933
- is exposed via the SCSS variable <code>$lte-sidebar-width</code>. If you
934
- need to know it from JavaScript, read the rendered
935
- <code>.app-sidebar</code> element’s computed width.
936
- </li>
937
- </ul>
938
- <h5 id="where-to-next">Where to next</h5>
939
- <ul>
940
- <li>
941
- <a href="layout.html">Layout reference</a> — the lower-level CSS classes and
942
- what they do
943
- </li>
944
- <li>
945
- <a href="javascript/pushmenu.html">PushMenu plugin</a> — the sidebar toggle
946
- implementation
947
- </li>
948
- <li>
949
- <a href="customization.html">Customization</a> — how to change sidebar
950
- width, breakpoint, and colours
951
- </li>
952
- </ul>
953
- </div>
954
- </div>
955
- </div>
956
- </div>
957
- </div>
958
- </div>
959
- </main>
960
- <!--begin::Footer-->
961
- <footer class="app-footer">
962
- <!--begin::To the end-->
963
- <div class="float-end d-none d-sm-inline">Anything you want</div>
964
- <!--end::To the end-->
965
- <!--begin::Copyright-->
966
- <strong>
967
- Copyright &copy; 2014-2026&nbsp;
968
- <a href="https://adminlte.io" class="text-decoration-none">AdminLTE.io</a>.
969
- </strong>
970
- All rights reserved.
971
- <!--end::Copyright-->
972
- </footer>
973
- <!--end::Footer-->
974
- </div>
975
- <!--begin::Third Party Plugin(OverlayScrollbars)-->
976
- <script
977
- src="https://cdn.jsdelivr.net/npm/overlayscrollbars@2.11.0/browser/overlayscrollbars.browser.es6.min.js"
978
- crossorigin="anonymous"
979
- ></script>
980
- <!--end::Third Party Plugin(OverlayScrollbars)--><!--begin::Required Plugin(popperjs for Bootstrap 5)-->
981
- <script
982
- src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.11.8/dist/umd/popper.min.js"
983
- crossorigin="anonymous"
984
- ></script>
985
- <!--end::Required Plugin(popperjs for Bootstrap 5)--><!--begin::Required Plugin(Bootstrap 5)-->
986
- <script
987
- src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.7/dist/js/bootstrap.min.js"
988
- crossorigin="anonymous"
989
- ></script>
990
- <!--end::Required Plugin(Bootstrap 5)--><!--begin::Required Plugin(AdminLTE)-->
991
- <script src="../js/adminlte.js"></script>
992
- <!--end::Required Plugin(AdminLTE)--><!--begin::OverlayScrollbars Configure-->
993
- <script>
994
- const SELECTOR_SIDEBAR_WRAPPER = '.sidebar-wrapper';
995
- const Default = {
996
- scrollbarTheme: 'os-theme-light',
997
- scrollbarAutoHide: 'leave',
998
- scrollbarClickScroll: true,
999
- };
1000
- document.addEventListener('DOMContentLoaded', function () {
1001
- const sidebarWrapper = document.querySelector(SELECTOR_SIDEBAR_WRAPPER);
1002
-
1003
- // Disable OverlayScrollbars on mobile devices to prevent touch interference
1004
- const isMobile = window.innerWidth <= 992;
1005
-
1006
- if (
1007
- sidebarWrapper &&
1008
- OverlayScrollbarsGlobal?.OverlayScrollbars !== undefined &&
1009
- !isMobile
1010
- ) {
1011
- OverlayScrollbarsGlobal.OverlayScrollbars(sidebarWrapper, {
1012
- scrollbars: {
1013
- theme: Default.scrollbarTheme,
1014
- autoHide: Default.scrollbarAutoHide,
1015
- clickScroll: Default.scrollbarClickScroll,
1016
- },
1017
- });
1018
- }
1019
- });
1020
- </script>
1021
- <!--end::OverlayScrollbars Configure--><!--begin::Color Mode Toggle (#6010)-->
1022
- <script>
1023
- (() => {
1024
- 'use strict';
1025
-
1026
- const STORAGE_KEY = 'lte-theme';
1027
-
1028
- const getStoredTheme = () => localStorage.getItem(STORAGE_KEY);
1029
- const setStoredTheme = (theme) => localStorage.setItem(STORAGE_KEY, theme);
1030
-
1031
- const prefersDark = () => globalThis.matchMedia('(prefers-color-scheme: dark)').matches;
1032
-
1033
- const getPreferredTheme = () => {
1034
- const stored = getStoredTheme();
1035
- if (stored) return stored;
1036
- return prefersDark() ? 'dark' : 'light';
1037
- };
1038
-
1039
- const setTheme = (theme) => {
1040
- const resolved = theme === 'auto' ? (prefersDark() ? 'dark' : 'light') : theme;
1041
- document.documentElement.setAttribute('data-bs-theme', resolved);
1042
- };
1043
-
1044
- setTheme(getPreferredTheme());
1045
-
1046
- const showActiveTheme = (theme) => {
1047
- // Highlight the active dropdown option
1048
- document.querySelectorAll('[data-bs-theme-value]').forEach((el) => {
1049
- el.classList.remove('active');
1050
- el.setAttribute('aria-pressed', 'false');
1051
- const check = el.querySelector('.bi-check-lg');
1052
- if (check) check.classList.add('d-none');
1053
- });
1054
- const active = document.querySelector(`[data-bs-theme-value="${theme}"]`);
1055
- if (active) {
1056
- active.classList.add('active');
1057
- active.setAttribute('aria-pressed', 'true');
1058
- const check = active.querySelector('.bi-check-lg');
1059
- if (check) check.classList.remove('d-none');
1060
- }
1061
- // Sync the topbar trigger icon
1062
- document.querySelectorAll('[data-lte-theme-icon]').forEach((icon) => {
1063
- icon.classList.toggle('d-none', icon.dataset.lteThemeIcon !== theme);
1064
- });
1065
- };
1066
-
1067
- globalThis.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', () => {
1068
- const stored = getStoredTheme();
1069
- if (!stored || stored === 'auto') setTheme(getPreferredTheme());
1070
- });
1071
-
1072
- document.addEventListener('DOMContentLoaded', () => {
1073
- showActiveTheme(getPreferredTheme());
1074
- document.querySelectorAll('[data-bs-theme-value]').forEach((toggle) => {
1075
- toggle.addEventListener('click', () => {
1076
- const theme = toggle.getAttribute('data-bs-theme-value');
1077
- setStoredTheme(theme);
1078
- setTheme(theme);
1079
- showActiveTheme(theme);
1080
- });
1081
- });
1082
- });
1083
- })();
1084
- </script>
1085
- <!--end::Color Mode Toggle-->
1086
- </body>
1087
- </html>