@adminlte/react 0.4.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -5,6 +5,32 @@ All notable changes to **@adminlte/react** are documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [0.5.0] - 2026-08-19
9
+
10
+ ### Changed
11
+
12
+ - **AdminLTE core upgraded to 4.8.1** (from 4.3.1), covering core [4.4.0](https://github.com/ColorlibHQ/AdminLTE/blob/master/CHANGELOG.md#440---2026-08-18), [4.4.1](https://github.com/ColorlibHQ/AdminLTE/blob/master/CHANGELOG.md#441---2026-08-18), [4.5.0](https://github.com/ColorlibHQ/AdminLTE/blob/master/CHANGELOG.md#450---2026-08-18), [4.6.0](https://github.com/ColorlibHQ/AdminLTE/blob/master/CHANGELOG.md#460---2026-08-18), [4.7.0](https://github.com/ColorlibHQ/AdminLTE/blob/master/CHANGELOG.md#470---2026-08-18), [4.8.0](https://github.com/ColorlibHQ/AdminLTE/blob/master/CHANGELOG.md#480---2026-08-19) and [4.8.1](https://github.com/ColorlibHQ/AdminLTE/blob/master/CHANGELOG.md#481---2026-08-19). What the bundled stylesheet (`@adminlte/react/css`) actually picks up:
13
+ - **The sidebar is now a flex column** (core 4.4.0, #6104). `.app-sidebar` gets `display: flex; flex-direction: column`, `.sidebar-brand` / `.sidebar-search` become `flex: 0 0 auto` and `.sidebar-wrapper` `flex: 1 1 auto; min-height: 0` — replacing the hard-coded `height: calc(100vh - (3.5rem + 1px))` that was repeated across every `sidebar-expand-*` breakpoint. The wrapper now fills whatever the sidebar leaves it instead of assuming a 3.5rem header, so a taller brand or an extra block above the menu no longer pushes the last items out of view. Verified in-browser on `/layout/fixed-sidebar`: wrapper 664 px inside a 720 px viewport, still scrolling under OverlayScrollbars.
14
+ - **`data-lte-print="plain"`** (core 4.7.0) — set it on `<html>` (or any container) for pages that should print as documents: no `(https://…)` suffix after external links, no outline around buttons. It works with nothing but the bundled CSS. Print also stopped drawing a black box around `.skip-link` and every `.nav-link` — the `border: 1px solid #000` rule is scoped to `.btn` again, which matters here because the sidebar prints by design.
15
+ - **`d-print-none` works on the shell** (core 4.6.0) — the print rules that force `display` on `.app-wrapper` and `.app-sidebar` are now `:not(.d-print-none)`, so Bootstrap's utility can hide the chrome from printed pages.
16
+ - **Skip-link hover contrast fix** (core 4.6.0) — `--bs-white` / `--bs-primary-emphasis` (a token Bootstrap never defines, so the background computed to transparent) swapped for `--bs-body-bg` / `--bs-primary-text-emphasis`, so the hovered skip link stays legible in both colour modes.
17
+ - The demo's `public/css/adminlte.rtl.css` was refreshed from core 4.8.1 to match.
18
+ - **Palette attributes are available, opt-in.** Core's extended palettes ship as separate stylesheets that `@adminlte/react/css` deliberately does **not** bundle: `adminlte-colors.css` (4.4.0 — 14 generated colours as `--bs-*` tokens plus the `.bg-*` / `.text-bg-*` / `.text-*` / `.border-*` / `.link-*` / `.bg-gradient-*` / `.card-*` / `.callout-*` / `.direct-chat-*` families, ≈8 kB gzipped) and `adminlte-colors-v3.css` (4.5.0 — the same families for the 18 AdminLTE 3 colours at their original values, ≈9.5 kB gzipped). Install `admin-lte` and import the sheet you want next to the library CSS to get:
19
+ - **`data-lte-primary="teal"`** (4.6.0, with 4.8.1's pagination focus-ring fix) — promotes any palette colour to Bootstrap's `primary`, so buttons, links, pagination, form focus rings, progress bars, list groups and dropdowns follow it. Verified: `.btn-primary` goes `rgb(13, 110, 253)` → `rgb(18, 130, 125)` once the sheet is loaded, and does nothing without it.
20
+ - **`data-lte-contrast="aa"`** (4.8.0, v3 sheet only) — flips text to black on the eight v3 colours that miss WCAG AA (blue, cyan, fuchsia, green, lightblue, olive, pink, teal). Verified: `.text-bg-lightblue` goes white → black.
21
+
22
+ ### Added
23
+
24
+ - Docs for both of the above: a **Core `<html>` attributes** table in the README's Styling section, and **The extended palette** / **Print** sections on the in-app `/docs/theming` page. They document core CSS you opt into yourself — no new component props or APIs.
25
+
26
+ ### Notes
27
+
28
+ - **Core's restyled search fields don't reach this port.** 4.4.0 restyles `.navbar-search` and `.sidebar-search` into quiet pills (a new `--lte-search-field-*` variable set). `@adminlte/react` renders neither: the topbar search is a command-palette trigger button and the sidebar has no filter, so the new rules are inert here — nothing regressed, nothing gained.
29
+ - **Core 4.4.1's ApexCharts dark-mode fix is a recipe, not shipped CSS** — it was applied to core's own demo pages. The `ApexChart` wrapper still passes `config` through verbatim and sets no Apex `theme`, so callers wanting dark tooltips pass `theme: { mode }` themselves.
30
+ - Core's JavaScript is still irrelevant to this port — `@adminlte/react` never loads `adminlte.js` (see the 0.3.0 notes).
31
+ - No dependency other than `admin-lte` changed; peer dependency ranges are untouched.
32
+ - Verified: library build, type-check, lint (0 errors, 13 pre-existing warnings) and 19 unit tests; demo type-check and production build; all 67 Playwright route-smoke + a11y tests.
33
+
8
34
  ## [0.4.0] - 2026-08-13
9
35
 
10
36
  ### Changed
@@ -186,6 +212,7 @@ Next.js App Router and React Server Components.
186
212
  - Heavy third-party libraries are never bundled eagerly — they load via dynamic
187
213
  `import()` inside the components that use them.
188
214
 
215
+ [0.5.0]: https://github.com/ColorlibHQ/adminlte-react/compare/v0.4.0...v0.5.0
189
216
  [0.4.0]: https://github.com/ColorlibHQ/adminlte-react/compare/v0.3.0...v0.4.0
190
217
  [0.3.0]: https://github.com/ColorlibHQ/adminlte-react/compare/v0.2.0...v0.3.0
191
218
  [0.2.0]: https://github.com/ColorlibHQ/adminlte-react/compare/v0.1.0...v0.2.0
package/README.md CHANGED
@@ -9,7 +9,7 @@
9
9
 
10
10
  A modern React/Next.js component library for building admin dashboards and web applications with AdminLTE 4 styling and Bootstrap 5.3 — built for the Next.js App Router and React Server Components by [Colorlib](https://colorlib.com).
11
11
 
12
- **Status**: v0.4.0 (Early Release, AdminLTE core 4.3.1) · **Live demo:** [adminlte.io/themes/next-react](https://adminlte.io/themes/next-react/)
12
+ **Status**: v0.5.0 (Early Release, AdminLTE core 4.8.1) · **Live demo:** [adminlte.io/themes/next-react](https://adminlte.io/themes/next-react/)
13
13
 
14
14
  <p align="center">
15
15
  <a href="https://adminlte.io/themes/next-react/">
@@ -318,6 +318,33 @@ All components use Bootstrap 5.3 utility classes. Customize via CSS variables or
318
318
  }
319
319
  ```
320
320
 
321
+ ### Core `<html>` attributes
322
+
323
+ AdminLTE core 4.6–4.8 added three opt-in attributes you set on `<html>` yourself — there is no
324
+ component prop for them, and they work with this port because they are plain CSS:
325
+
326
+ | Attribute | What it does | Stylesheet |
327
+ | --- | --- | --- |
328
+ | `data-lte-print="plain"` | Prints the page as a document: no `(https://…)` suffix after external links, no outline around buttons. | bundled — `@adminlte/react/css` |
329
+ | `data-lte-primary="teal"` | Promotes any palette colour to Bootstrap's `primary`, so buttons, links, pagination, form focus rings, progress bars, list groups and dropdowns follow it. | opt-in — `admin-lte/dist/css/adminlte-colors.css` (or `…-v3.css`) |
330
+ | `data-lte-contrast="aa"` | Flips text to black on the eight AdminLTE 3 colours (blue, cyan, fuchsia, green, lightblue, olive, pink, teal) that otherwise miss WCAG AA. | opt-in — `admin-lte/dist/css/adminlte-colors-v3.css` |
331
+
332
+ ```tsx
333
+ // app/layout.tsx — data-lte-print needs no extra CSS
334
+ <html lang="en" data-lte-print="plain">
335
+ ```
336
+
337
+ The extended palettes are **not** bundled with `@adminlte/react/css`; add `admin-lte` as a
338
+ dependency and import the sheet you want next to the library CSS:
339
+
340
+ ```tsx
341
+ import '@adminlte/react/css'
342
+ import 'admin-lte/dist/css/adminlte-colors.css' // 14 extra colours + data-lte-primary
343
+ ```
344
+
345
+ Bootstrap's `d-print-none` also works on `.app-wrapper` and `.app-sidebar` now, so you can hide
346
+ the shell chrome from printed pages.
347
+
321
348
  ## Type Safety
322
349
 
323
350
  Full TypeScript support with exported types:
@@ -1,6 +1,6 @@
1
1
  @charset "UTF-8";
2
2
  /*!
3
- * AdminLTE v4.3.1
3
+ * AdminLTE v4.8.1
4
4
  * Author: Colorlib
5
5
  * Website: AdminLTE.io <https://adminlte.io>
6
6
  * License: Open source - MIT <https://opensource.org/licenses/MIT>
@@ -12850,6 +12850,85 @@ textarea.form-control-lg {
12850
12850
  height: 2.5rem;
12851
12851
  }
12852
12852
 
12853
+ .navbar-search {
12854
+ --lte-search-field-width: 14rem;
12855
+ --lte-search-field-focus-width: 18rem;
12856
+ --lte-search-field-bg: rgba(var(--bs-emphasis-color-rgb), .06);
12857
+ --lte-search-field-hover-bg: rgba(var(--bs-emphasis-color-rgb), .09);
12858
+ --lte-search-field-focus-bg: rgba(var(--bs-emphasis-color-rgb), .1);
12859
+ --lte-search-field-border-color: rgba(var(--bs-emphasis-color-rgb), .1);
12860
+ --lte-search-field-focus-border-color: rgba(var(--bs-emphasis-color-rgb), .35);
12861
+ --lte-search-field-focus-ring: 0 0 0 .2rem rgba(var(--bs-emphasis-color-rgb), .12);
12862
+ --lte-search-field-color: var(--bs-body-color);
12863
+ --lte-search-field-placeholder-color: var(--bs-secondary-color);
12864
+ --lte-search-field-icon-color: var(--bs-secondary-color);
12865
+ }
12866
+ .navbar-search .form-control {
12867
+ padding: 0.3rem 0.75rem;
12868
+ font-size: 0.875rem;
12869
+ color: var(--lte-search-field-color);
12870
+ background-color: var(--lte-search-field-bg);
12871
+ border-color: var(--lte-search-field-border-color);
12872
+ box-shadow: none;
12873
+ border-radius: 50rem;
12874
+ transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
12875
+ }
12876
+ @media (prefers-reduced-motion: reduce) {
12877
+ .navbar-search .form-control {
12878
+ transition: none;
12879
+ }
12880
+ }
12881
+ .navbar-search .form-control::placeholder {
12882
+ color: var(--lte-search-field-placeholder-color);
12883
+ opacity: 1;
12884
+ }
12885
+ .navbar-search .form-control:hover {
12886
+ background-color: var(--lte-search-field-hover-bg);
12887
+ }
12888
+ .navbar-search .form-control:focus {
12889
+ background-color: var(--lte-search-field-focus-bg);
12890
+ border-color: var(--lte-search-field-focus-border-color);
12891
+ box-shadow: var(--lte-search-field-focus-ring);
12892
+ }
12893
+ .navbar-search .navbar-search-field {
12894
+ position: relative;
12895
+ width: var(--lte-search-field-width);
12896
+ max-width: 100%;
12897
+ transition: width 0.2s ease-in-out;
12898
+ }
12899
+ @media (prefers-reduced-motion: reduce) {
12900
+ .navbar-search .navbar-search-field {
12901
+ transition: none;
12902
+ }
12903
+ }
12904
+ .navbar-search:focus-within .navbar-search-field {
12905
+ width: var(--lte-search-field-focus-width);
12906
+ }
12907
+ .navbar-search .form-control {
12908
+ padding-left: 2.125rem;
12909
+ }
12910
+ .navbar-search .navbar-search-submit {
12911
+ position: absolute;
12912
+ top: 50%;
12913
+ left: 0.75rem;
12914
+ display: flex;
12915
+ align-items: center;
12916
+ padding: 0;
12917
+ line-height: 1;
12918
+ color: var(--lte-search-field-icon-color);
12919
+ background: transparent;
12920
+ border: 0;
12921
+ transform: translateY(-50%);
12922
+ border-radius: 50rem;
12923
+ }
12924
+ .navbar-search .navbar-search-submit:hover, .navbar-search .navbar-search-submit:focus-visible {
12925
+ color: var(--lte-search-field-color);
12926
+ }
12927
+ .navbar-search .navbar-search-submit:focus-visible {
12928
+ outline: 2px solid var(--bs-focus-ring-color);
12929
+ outline-offset: 2px;
12930
+ }
12931
+
12853
12932
  .navbar-badge {
12854
12933
  position: absolute;
12855
12934
  top: 9px;
@@ -12871,7 +12950,6 @@ textarea.form-control-lg {
12871
12950
  max-height: 100vh;
12872
12951
  }
12873
12952
  .fixed-header.sidebar-expand-sm .app-sidebar .sidebar-wrapper {
12874
- height: calc(100vh - (calc(3.5rem + 1px)));
12875
12953
  overflow-x: hidden;
12876
12954
  overflow-y: auto;
12877
12955
  }
@@ -12883,7 +12961,6 @@ textarea.form-control-lg {
12883
12961
  max-height: 100vh;
12884
12962
  }
12885
12963
  .fixed-header.sidebar-expand-md .app-sidebar .sidebar-wrapper {
12886
- height: calc(100vh - (calc(3.5rem + 1px)));
12887
12964
  overflow-x: hidden;
12888
12965
  overflow-y: auto;
12889
12966
  }
@@ -12895,7 +12972,6 @@ textarea.form-control-lg {
12895
12972
  max-height: 100vh;
12896
12973
  }
12897
12974
  .fixed-header.sidebar-expand-lg .app-sidebar .sidebar-wrapper {
12898
- height: calc(100vh - (calc(3.5rem + 1px)));
12899
12975
  overflow-x: hidden;
12900
12976
  overflow-y: auto;
12901
12977
  }
@@ -12907,7 +12983,6 @@ textarea.form-control-lg {
12907
12983
  max-height: 100vh;
12908
12984
  }
12909
12985
  .fixed-header.sidebar-expand-xl .app-sidebar .sidebar-wrapper {
12910
- height: calc(100vh - (calc(3.5rem + 1px)));
12911
12986
  overflow-x: hidden;
12912
12987
  overflow-y: auto;
12913
12988
  }
@@ -12919,7 +12994,6 @@ textarea.form-control-lg {
12919
12994
  max-height: 100vh;
12920
12995
  }
12921
12996
  .fixed-header.sidebar-expand-xxl .app-sidebar .sidebar-wrapper {
12922
- height: calc(100vh - (calc(3.5rem + 1px)));
12923
12997
  overflow-x: hidden;
12924
12998
  overflow-y: auto;
12925
12999
  }
@@ -12930,7 +13004,6 @@ textarea.form-control-lg {
12930
13004
  max-height: 100vh;
12931
13005
  }
12932
13006
  .fixed-header.sidebar-expand .app-sidebar .sidebar-wrapper {
12933
- height: calc(100vh - (calc(3.5rem + 1px)));
12934
13007
  overflow-x: hidden;
12935
13008
  overflow-y: auto;
12936
13009
  }
@@ -12950,6 +13023,8 @@ textarea.form-control-lg {
12950
13023
  --lte-sidebar-submenu-active-bg: rgba(0, 0, 0, 0.1);
12951
13024
  --lte-sidebar-header-color: rgb(19.3725490196%, 21.6078431373%, 23.8431372549%);
12952
13025
  z-index: 1038;
13026
+ display: flex;
13027
+ flex-direction: column;
12953
13028
  grid-area: lte-app-sidebar;
12954
13029
  min-width: var(--lte-sidebar-width);
12955
13030
  max-width: var(--lte-sidebar-width);
@@ -12963,6 +13038,7 @@ textarea.form-control-lg {
12963
13038
 
12964
13039
  .sidebar-brand {
12965
13040
  display: flex;
13041
+ flex: 0 0 auto;
12966
13042
  align-items: center;
12967
13043
  justify-content: center;
12968
13044
  height: 3.5rem;
@@ -13019,6 +13095,8 @@ textarea.form-control-lg {
13019
13095
  }
13020
13096
 
13021
13097
  .sidebar-wrapper {
13098
+ flex: 1 1 auto;
13099
+ min-height: 0;
13022
13100
  padding-top: 0.5rem;
13023
13101
  padding-right: 0.5rem;
13024
13102
  padding-bottom: 0.5rem;
@@ -13218,7 +13296,44 @@ textarea.form-control-lg {
13218
13296
  }
13219
13297
 
13220
13298
  .sidebar-search {
13299
+ flex: 0 0 auto;
13221
13300
  padding: 0.5rem 1rem;
13301
+ --lte-search-field-bg: rgba(var(--bs-emphasis-color-rgb), .06);
13302
+ --lte-search-field-hover-bg: rgba(var(--bs-emphasis-color-rgb), .09);
13303
+ --lte-search-field-focus-bg: rgba(var(--bs-emphasis-color-rgb), .1);
13304
+ --lte-search-field-border-color: rgba(var(--bs-emphasis-color-rgb), .1);
13305
+ --lte-search-field-focus-border-color: rgba(var(--bs-emphasis-color-rgb), .35);
13306
+ --lte-search-field-focus-ring: 0 0 0 .2rem rgba(var(--bs-emphasis-color-rgb), .12);
13307
+ --lte-search-field-color: var(--bs-body-color);
13308
+ --lte-search-field-placeholder-color: var(--bs-secondary-color);
13309
+ --lte-search-field-icon-color: var(--bs-secondary-color);
13310
+ }
13311
+ .sidebar-search .form-control {
13312
+ padding: 0.3rem 0.75rem;
13313
+ font-size: 0.875rem;
13314
+ color: var(--lte-search-field-color);
13315
+ background-color: var(--lte-search-field-bg);
13316
+ border-color: var(--lte-search-field-border-color);
13317
+ box-shadow: none;
13318
+ border-radius: 50rem;
13319
+ transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
13320
+ }
13321
+ @media (prefers-reduced-motion: reduce) {
13322
+ .sidebar-search .form-control {
13323
+ transition: none;
13324
+ }
13325
+ }
13326
+ .sidebar-search .form-control::placeholder {
13327
+ color: var(--lte-search-field-placeholder-color);
13328
+ opacity: 1;
13329
+ }
13330
+ .sidebar-search .form-control:hover {
13331
+ background-color: var(--lte-search-field-hover-bg);
13332
+ }
13333
+ .sidebar-search .form-control:focus {
13334
+ background-color: var(--lte-search-field-focus-bg);
13335
+ border-color: var(--lte-search-field-focus-border-color);
13336
+ box-shadow: var(--lte-search-field-focus-ring);
13222
13337
  }
13223
13338
 
13224
13339
  .logo-xs,
@@ -13371,7 +13486,6 @@ textarea.form-control-lg {
13371
13486
  max-height: 100vh;
13372
13487
  }
13373
13488
  .sidebar-expand-sm.layout-fixed .app-sidebar .sidebar-wrapper {
13374
- height: calc(100vh - (calc(3.5rem + 1px)));
13375
13489
  overflow-x: hidden;
13376
13490
  overflow-y: auto;
13377
13491
  }
@@ -13403,7 +13517,6 @@ textarea.form-control-lg {
13403
13517
  margin-left: calc(var(--lte-sidebar-width) * -1);
13404
13518
  }
13405
13519
  .sidebar-expand-sm .app-sidebar .sidebar-wrapper {
13406
- height: calc(100vh - (calc(3.5rem + 1px)));
13407
13520
  overflow-x: hidden;
13408
13521
  overflow-y: auto;
13409
13522
  }
@@ -13446,7 +13559,6 @@ textarea.form-control-lg {
13446
13559
  max-height: 100vh;
13447
13560
  }
13448
13561
  .sidebar-expand-md.layout-fixed .app-sidebar .sidebar-wrapper {
13449
- height: calc(100vh - (calc(3.5rem + 1px)));
13450
13562
  overflow-x: hidden;
13451
13563
  overflow-y: auto;
13452
13564
  }
@@ -13478,7 +13590,6 @@ textarea.form-control-lg {
13478
13590
  margin-left: calc(var(--lte-sidebar-width) * -1);
13479
13591
  }
13480
13592
  .sidebar-expand-md .app-sidebar .sidebar-wrapper {
13481
- height: calc(100vh - (calc(3.5rem + 1px)));
13482
13593
  overflow-x: hidden;
13483
13594
  overflow-y: auto;
13484
13595
  }
@@ -13521,7 +13632,6 @@ textarea.form-control-lg {
13521
13632
  max-height: 100vh;
13522
13633
  }
13523
13634
  .sidebar-expand-lg.layout-fixed .app-sidebar .sidebar-wrapper {
13524
- height: calc(100vh - (calc(3.5rem + 1px)));
13525
13635
  overflow-x: hidden;
13526
13636
  overflow-y: auto;
13527
13637
  }
@@ -13553,7 +13663,6 @@ textarea.form-control-lg {
13553
13663
  margin-left: calc(var(--lte-sidebar-width) * -1);
13554
13664
  }
13555
13665
  .sidebar-expand-lg .app-sidebar .sidebar-wrapper {
13556
- height: calc(100vh - (calc(3.5rem + 1px)));
13557
13666
  overflow-x: hidden;
13558
13667
  overflow-y: auto;
13559
13668
  }
@@ -13596,7 +13705,6 @@ textarea.form-control-lg {
13596
13705
  max-height: 100vh;
13597
13706
  }
13598
13707
  .sidebar-expand-xl.layout-fixed .app-sidebar .sidebar-wrapper {
13599
- height: calc(100vh - (calc(3.5rem + 1px)));
13600
13708
  overflow-x: hidden;
13601
13709
  overflow-y: auto;
13602
13710
  }
@@ -13628,7 +13736,6 @@ textarea.form-control-lg {
13628
13736
  margin-left: calc(var(--lte-sidebar-width) * -1);
13629
13737
  }
13630
13738
  .sidebar-expand-xl .app-sidebar .sidebar-wrapper {
13631
- height: calc(100vh - (calc(3.5rem + 1px)));
13632
13739
  overflow-x: hidden;
13633
13740
  overflow-y: auto;
13634
13741
  }
@@ -13671,7 +13778,6 @@ textarea.form-control-lg {
13671
13778
  max-height: 100vh;
13672
13779
  }
13673
13780
  .sidebar-expand-xxl.layout-fixed .app-sidebar .sidebar-wrapper {
13674
- height: calc(100vh - (calc(3.5rem + 1px)));
13675
13781
  overflow-x: hidden;
13676
13782
  overflow-y: auto;
13677
13783
  }
@@ -13703,7 +13809,6 @@ textarea.form-control-lg {
13703
13809
  margin-left: calc(var(--lte-sidebar-width) * -1);
13704
13810
  }
13705
13811
  .sidebar-expand-xxl .app-sidebar .sidebar-wrapper {
13706
- height: calc(100vh - (calc(3.5rem + 1px)));
13707
13812
  overflow-x: hidden;
13708
13813
  overflow-y: auto;
13709
13814
  }
@@ -13745,7 +13850,6 @@ textarea.form-control-lg {
13745
13850
  max-height: 100vh;
13746
13851
  }
13747
13852
  .sidebar-expand.layout-fixed .app-sidebar .sidebar-wrapper {
13748
- height: calc(100vh - (calc(3.5rem + 1px)));
13749
13853
  overflow-x: hidden;
13750
13854
  overflow-y: auto;
13751
13855
  }
@@ -13775,7 +13879,6 @@ textarea.form-control-lg {
13775
13879
  margin-left: calc(var(--lte-sidebar-width) * -1);
13776
13880
  }
13777
13881
  .sidebar-expand .app-sidebar .sidebar-wrapper {
13778
- height: calc(100vh - (calc(3.5rem + 1px)));
13779
13882
  overflow-x: hidden;
13780
13883
  overflow-y: auto;
13781
13884
  }
@@ -15646,9 +15749,9 @@ html.maximized-card {
15646
15749
  outline-offset: 2px;
15647
15750
  }
15648
15751
  .skip-link:hover {
15649
- color: var(--bs-white);
15752
+ color: var(--bs-body-bg);
15650
15753
  text-decoration: none;
15651
- background: var(--bs-primary-emphasis);
15754
+ background: var(--bs-primary-text-emphasis);
15652
15755
  }
15653
15756
 
15654
15757
  /* Enhanced Focus Indicators - WCAG 2.4.7: Focus Visible */
@@ -15871,14 +15974,25 @@ fieldset legend {
15871
15974
  .nav-link {
15872
15975
  color: #000 !important;
15873
15976
  background: transparent !important;
15977
+ }
15978
+ .btn {
15874
15979
  border: 1px solid #000 !important;
15875
15980
  }
15876
15981
  a[href^=http]::after {
15877
15982
  font-size: 0.8em;
15878
15983
  content: " (" attr(href) ")";
15879
15984
  }
15880
- /* Print Layout Fix - Ensure sidebar and main content are both visible */
15881
- .app-wrapper {
15985
+ [data-lte-print=plain] a[href^=http]::after {
15986
+ content: none;
15987
+ }
15988
+ [data-lte-print=plain] .btn {
15989
+ border-color: transparent !important;
15990
+ }
15991
+ /* Print Layout Fix - Ensure sidebar and main content are both visible.
15992
+ `:not(.d-print-none)` on the two rules that force `display`, so Bootstrap's
15993
+ print display utilities keep working: these are defaults for the standard
15994
+ layout, not something a page should have to fight to hide. */
15995
+ .app-wrapper:not(.d-print-none) {
15882
15996
  display: grid !important;
15883
15997
  grid-template-rows: auto 1fr auto !important;
15884
15998
  grid-template-columns: auto 1fr !important;
@@ -15886,7 +16000,7 @@ fieldset legend {
15886
16000
  .sidebar-overlay {
15887
16001
  display: none !important;
15888
16002
  }
15889
- .app-sidebar {
16003
+ .app-sidebar:not(.d-print-none) {
15890
16004
  position: static !important;
15891
16005
  display: block !important;
15892
16006
  min-width: 200px !important;
package/package.json CHANGED
@@ -1,10 +1,9 @@
1
1
  {
2
2
  "name": "@adminlte/react",
3
- "version": "0.4.0",
3
+ "version": "0.5.0",
4
4
  "description": "AdminLTE 4 React/Next.js component library",
5
5
  "license": "MIT",
6
6
  "type": "module",
7
- "packageManager": "pnpm@10.33.2",
8
7
  "main": "./dist/index.js",
9
8
  "module": "./dist/index.js",
10
9
  "types": "./dist/index.d.ts",
@@ -39,18 +38,6 @@
39
38
  "bootstrap",
40
39
  "components"
41
40
  ],
42
- "scripts": {
43
- "build": "tsup && npm run copy-css && npm run fix-dist",
44
- "copy-css": "mkdir -p dist/css && cp node_modules/admin-lte/dist/css/adminlte.css dist/css/",
45
- "fix-dist": "node fix-dist.js",
46
- "dev": "tsup --watch",
47
- "type-check": "tsc --noEmit",
48
- "lint": "eslint src",
49
- "demo": "pnpm --filter adminlte-react-demo dev",
50
- "demo:build": "pnpm --filter adminlte-react-demo build",
51
- "test": "vitest run",
52
- "test:watch": "vitest"
53
- },
54
41
  "peerDependencies": {
55
42
  "apexcharts": ">=4.0.0",
56
43
  "flatpickr": ">=4.6.0",
@@ -96,7 +83,7 @@
96
83
  "@types/react": "^19.2.18",
97
84
  "@types/react-dom": "^19.2.4",
98
85
  "@types/sortablejs": "^1.15.9",
99
- "admin-lte": "^4.3.1",
86
+ "admin-lte": "^4.8.1",
100
87
  "apexcharts": "^6.8.0",
101
88
  "eslint": "^10.8.1",
102
89
  "eslint-plugin-react-hooks": "^7.1.1",
@@ -113,5 +100,17 @@
113
100
  "typescript": "^6.0.3",
114
101
  "typescript-eslint": "^8.67.0",
115
102
  "vitest": "^4.1.10"
103
+ },
104
+ "scripts": {
105
+ "build": "tsup && npm run copy-css && npm run fix-dist",
106
+ "copy-css": "mkdir -p dist/css && cp node_modules/admin-lte/dist/css/adminlte.css dist/css/",
107
+ "fix-dist": "node fix-dist.js",
108
+ "dev": "tsup --watch",
109
+ "type-check": "tsc --noEmit",
110
+ "lint": "eslint src",
111
+ "demo": "pnpm --filter adminlte-react-demo dev",
112
+ "demo:build": "pnpm --filter adminlte-react-demo build",
113
+ "test": "vitest run",
114
+ "test:watch": "vitest"
116
115
  }
117
- }
116
+ }