admin-lte 4.0.0-rc6 → 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 (107) hide show
  1. package/CHANGELOG.md +96 -0
  2. package/README.md +44 -18
  3. package/dist/UI/general.html +311 -92
  4. package/dist/UI/icons.html +311 -92
  5. package/dist/UI/timeline.html +311 -92
  6. package/dist/css/adminlte.css +2814 -1138
  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 +2814 -1138
  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 +291 -385
  15. package/dist/docs/color-mode.html +283 -381
  16. package/dist/docs/components/main-header.html +269 -363
  17. package/dist/docs/components/main-sidebar.html +284 -378
  18. package/dist/docs/customization.html +1056 -0
  19. package/dist/docs/deployment.html +1121 -0
  20. package/dist/docs/faq.html +887 -397
  21. package/dist/docs/getting-started.html +967 -0
  22. package/dist/docs/how-to-contribute.html +365 -450
  23. package/dist/docs/index.html +16 -0
  24. package/dist/docs/integrations.html +1207 -0
  25. package/dist/docs/introduction.html +483 -434
  26. package/dist/docs/javascript/accessibility.html +925 -0
  27. package/dist/docs/javascript/card-widget.html +995 -0
  28. package/dist/docs/javascript/direct-chat.html +872 -0
  29. package/dist/docs/javascript/fullscreen.html +881 -0
  30. package/dist/docs/javascript/layout.html +884 -0
  31. package/dist/docs/javascript/plugins-overview.html +1120 -0
  32. package/dist/docs/javascript/pushmenu.html +522 -377
  33. package/dist/docs/javascript/treeview.html +498 -390
  34. package/dist/docs/layout-blueprint.html +1063 -0
  35. package/dist/docs/layout.html +316 -402
  36. package/dist/docs/license.html +282 -375
  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 +66 -2
  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/elements.html +1381 -0
  46. package/dist/forms/{general.html → layout.html} +382 -452
  47. package/dist/forms/validation.html +1251 -0
  48. package/dist/forms/wizard.html +1386 -0
  49. package/dist/generate/theme.html +135 -5
  50. package/dist/index.html +311 -92
  51. package/dist/index2.html +314 -92
  52. package/dist/index3.html +311 -92
  53. package/dist/js/adminlte.js +135 -314
  54. package/dist/js/adminlte.js.map +1 -1
  55. package/dist/js/adminlte.min.js +3 -3
  56. package/dist/js/adminlte.min.js.map +1 -1
  57. package/dist/layout/collapsed-sidebar-without-hover.html +1120 -0
  58. package/dist/layout/collapsed-sidebar.html +311 -92
  59. package/dist/layout/fixed-complete.html +311 -92
  60. package/dist/layout/fixed-footer.html +311 -92
  61. package/dist/layout/fixed-header.html +311 -92
  62. package/dist/layout/fixed-sidebar.html +311 -92
  63. package/dist/layout/layout-custom-area.html +311 -92
  64. package/dist/layout/layout-rtl.html +311 -92
  65. package/dist/layout/logo-switch.html +135 -5
  66. package/dist/layout/sidebar-mini.html +311 -92
  67. package/dist/layout/unfixed-sidebar.html +311 -92
  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 +311 -92
  86. package/dist/widgets/cards.html +311 -92
  87. package/dist/widgets/info-box.html +311 -92
  88. package/dist/widgets/small-box.html +311 -92
  89. package/netlify.toml +16 -0
  90. package/package.json +32 -26
  91. package/src/scss/_accessibility.scss +44 -0
  92. package/src/scss/_app-footer.scss +9 -0
  93. package/src/scss/_app-header.scss +27 -0
  94. package/src/scss/_app-sidebar.scss +73 -74
  95. package/src/scss/_bootstrap-variables.scss +12 -5
  96. package/src/scss/_docs.scss +816 -0
  97. package/src/scss/_table.scss +4 -4
  98. package/src/scss/adminlte.scss +4 -1
  99. package/src/scss/pages/_login_and_register.scss +1 -1
  100. package/src/ts/accessibility.ts +9 -7
  101. package/src/ts/adminlte.ts +2 -14
  102. package/src/ts/fullscreen.ts +8 -4
  103. package/src/ts/layout.ts +34 -16
  104. package/src/ts/push-menu.ts +257 -104
  105. package/src/ts/util/index.ts +10 -0
  106. package/.claude/settings.local.json +0 -33
  107. package/CLAUDE.md +0 -79
@@ -8,17 +8,17 @@
8
8
  }
9
9
 
10
10
  // fixed table head
11
+ // Uses Bootstrap CSS variables so the sticky header follows light/dark mode
12
+ // automatically. Fixes #6026.
11
13
  &.table-head-fixed {
12
14
  thead tr:nth-child(1) th {
13
15
  position: sticky;
14
16
  top: 0;
15
17
  z-index: 10;
16
- background-color: $white;
18
+ background-color: var(--bs-body-bg, #{$white});
17
19
  border-bottom: 0;
18
- box-shadow: inset 0 1px 0 $table-border-color, inset 0 -1px 0 $table-border-color;
20
+ box-shadow: inset 0 1px 0 var(--bs-border-color, #{$table-border-color}), inset 0 -1px 0 var(--bs-border-color, #{$table-border-color});
19
21
  }
20
-
21
- // Note: Dark table styling for fixed headers is handled by Bootstrap's built-in dark table classes
22
22
  }
23
23
 
24
24
  // no border
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * AdminLTE v4.0.0-rc5
2
+ * AdminLTE v4.0.0
3
3
  * Author: Colorlib
4
4
  * Website: AdminLTE.io <https://adminlte.io>
5
5
  * License: Open source - MIT <https://opensource.org/licenses/MIT>
@@ -76,3 +76,6 @@
76
76
 
77
77
  // AdminLTE Accessibility Styles - WCAG 2.1 AA Compliance
78
78
  @import "accessibility";
79
+
80
+ // AdminLTE Documentation Styles (only applies to pages with body.docs-page)
81
+ @import "docs";
@@ -26,7 +26,7 @@
26
26
 
27
27
  .login-box,
28
28
  .register-box {
29
- width: 360px;
29
+ width: 400px;
30
30
 
31
31
  @media (max-width: map-get($grid-breakpoints, sm)) {
32
32
  width: 90%;
@@ -159,15 +159,17 @@ export class AccessibilityManager {
159
159
  }
160
160
 
161
161
  private handleEscapeKey(event: KeyboardEvent): void {
162
- // Close modals, dropdowns, etc.
162
+ // Close dropdowns, but let Bootstrap handle its own modal keyboard behavior
163
163
  const activeModal = document.querySelector('.modal.show')
164
- const activeDropdown = document.querySelector('.dropdown-menu.show')
165
-
164
+
166
165
  if (activeModal) {
167
- const closeButton = activeModal.querySelector('[data-bs-dismiss="modal"]') as HTMLElement
168
- closeButton?.click()
169
- event.preventDefault()
170
- } else if (activeDropdown) {
166
+ // Do not interfere — Bootstrap handles Escape for modals,
167
+ // including respecting keyboard: false and stacked modals
168
+ return
169
+ }
170
+
171
+ const activeDropdown = document.querySelector('.dropdown-menu.show')
172
+ if (activeDropdown) {
171
173
  const toggleButton = document.querySelector('[data-bs-toggle="dropdown"][aria-expanded="true"]') as HTMLElement
172
174
  toggleButton?.click()
173
175
  event.preventDefault()
@@ -8,20 +8,13 @@ import PushMenu from './push-menu.js'
8
8
  import { initAccessibility } from './accessibility.js'
9
9
 
10
10
  /**
11
- * AdminLTE v4.0.0-rc5
11
+ * AdminLTE v4.0.0
12
12
  * Author: Colorlib
13
13
  * Website: AdminLTE.io <https://adminlte.io>
14
14
  * License: Open source - MIT <https://opensource.org/licenses/MIT>
15
15
  */
16
16
 
17
17
  onDOMContentLoaded(() => {
18
- /**
19
- * Initialize AdminLTE Core Components
20
- * -------------------------------
21
- */
22
- const layout = new Layout(document.body)
23
- layout.holdTransition()
24
-
25
18
  /**
26
19
  * Initialize Accessibility Features - WCAG 2.1 AA Compliance
27
20
  * --------------------------------------------------------
@@ -33,14 +26,9 @@ onDOMContentLoaded(() => {
33
26
  keyboardNavigation: true,
34
27
  reducedMotion: true
35
28
  })
36
-
29
+
37
30
  // Add semantic landmarks
38
31
  accessibilityManager.addLandmarks()
39
-
40
- // Mark app as loaded after initialization
41
- setTimeout(() => {
42
- document.body.classList.add('app-loaded')
43
- }, 400)
44
32
  })
45
33
 
46
34
  export {
@@ -44,12 +44,16 @@ class FullScreen {
44
44
 
45
45
  void document.documentElement.requestFullscreen()
46
46
 
47
+ // Toggle Bootstrap's .d-none utility instead of hardcoding inline
48
+ // display:block. The previous approach overrode the icon library's
49
+ // natural display value (eg. some icon fonts use inline-block) and
50
+ // caused the icon to shift its position. Fixes #6021.
47
51
  if (iconMaximize) {
48
- iconMaximize.style.display = 'none'
52
+ iconMaximize.classList.add('d-none')
49
53
  }
50
54
 
51
55
  if (iconMinimize) {
52
- iconMinimize.style.display = 'block'
56
+ iconMinimize.classList.remove('d-none')
53
57
  }
54
58
 
55
59
  this._element.dispatchEvent(event)
@@ -64,11 +68,11 @@ class FullScreen {
64
68
  void document.exitFullscreen()
65
69
 
66
70
  if (iconMaximize) {
67
- iconMaximize.style.display = 'block'
71
+ iconMaximize.classList.remove('d-none')
68
72
  }
69
73
 
70
74
  if (iconMinimize) {
71
- iconMinimize.style.display = 'none'
75
+ iconMinimize.classList.add('d-none')
72
76
  }
73
77
 
74
78
  this._element.dispatchEvent(event)
package/src/ts/layout.ts CHANGED
@@ -1,9 +1,9 @@
1
1
  /**
2
- * --------------------------------------------
2
+ * ----------------------------------------------------------------------------
3
3
  * @file AdminLTE layout.ts
4
4
  * @description Layout for AdminLTE.
5
5
  * @license MIT
6
- * --------------------------------------------
6
+ * ----------------------------------------------------------------------------
7
7
  */
8
8
 
9
9
  import {
@@ -11,41 +11,59 @@ import {
11
11
  } from './util/index'
12
12
 
13
13
  /**
14
- * ------------------------------------------------------------------------
14
+ * ----------------------------------------------------------------------------
15
15
  * Constants
16
- * ------------------------------------------------------------------------
16
+ * ----------------------------------------------------------------------------
17
17
  */
18
18
 
19
19
  const CLASS_NAME_HOLD_TRANSITIONS = 'hold-transition'
20
20
  const CLASS_NAME_APP_LOADED = 'app-loaded'
21
21
 
22
22
  /**
23
+ * ----------------------------------------------------------------------------
23
24
  * Class Definition
24
- * ====================================================
25
+ * ----------------------------------------------------------------------------
25
26
  */
26
27
 
27
28
  class Layout {
28
29
  _element: HTMLElement
30
+ _holdTransitionTimer: ReturnType<typeof setTimeout> | undefined
29
31
 
30
32
  constructor(element: HTMLElement) {
31
33
  this._element = element
34
+ this._holdTransitionTimer = undefined
32
35
  }
33
36
 
34
- holdTransition(): void {
35
- let resizeTimer: ReturnType<typeof setTimeout>
36
- window.addEventListener('resize', () => {
37
- document.body.classList.add(CLASS_NAME_HOLD_TRANSITIONS)
38
- clearTimeout(resizeTimer)
39
- resizeTimer = setTimeout(() => {
40
- document.body.classList.remove(CLASS_NAME_HOLD_TRANSITIONS)
41
- }, 400)
42
- })
37
+ /*
38
+ * Hold the layout transitions by the specified time. This will disable CSS
39
+ * transitions and animations of the main layout elements (sidebar, navbar,
40
+ * content) for the given time.
41
+ *
42
+ * @param time Number of milliseconds to hold the transitions.
43
+ */
44
+ holdTransition(time: number = 100): void {
45
+ if (this._holdTransitionTimer) {
46
+ clearTimeout(this._holdTransitionTimer)
47
+ }
48
+
49
+ document.body.classList.add(CLASS_NAME_HOLD_TRANSITIONS)
50
+
51
+ this._holdTransitionTimer = setTimeout(() => {
52
+ document.body.classList.remove(CLASS_NAME_HOLD_TRANSITIONS)
53
+ }, time)
43
54
  }
44
55
  }
45
56
 
57
+ /**
58
+ * ----------------------------------------------------------------------------
59
+ * Data Api implementation
60
+ * ----------------------------------------------------------------------------
61
+ */
62
+
46
63
  onDOMContentLoaded(() => {
47
- const data = new Layout(document.body)
48
- data.holdTransition()
64
+ const layout = new Layout(document.body)
65
+ window.addEventListener('resize', () => layout.holdTransition(200))
66
+
49
67
  setTimeout(() => {
50
68
  document.body.classList.add(CLASS_NAME_APP_LOADED)
51
69
  }, 400)