diff --git a/Cargo.lock b/Cargo.lock index 72ae1baf..6a7d89f5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1871,6 +1871,16 @@ dependencies = [ "syn", ] +[[package]] +name = "pagetop-menu" +version = "0.1.0" +dependencies = [ + "pagetop", + "pagetop-seaorm", + "serde", + "thiserror", +] + [[package]] name = "pagetop-minimal" version = "0.1.0" diff --git a/Cargo.toml b/Cargo.toml index 21e081ca..3e0974fd 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -11,6 +11,7 @@ members = [ "extensions/pagetop-bootsier", "extensions/pagetop-htmx", "extensions/pagetop-admin", + "extensions/pagetop-menu", "extensions/pagetop-seaorm", "extensions/pagetop-user", ] @@ -73,6 +74,7 @@ pagetop-admin = { version = "0.1", path = "extensions/pagetop-admin" } pagetop-aliner = { version = "0.1", path = "extensions/pagetop-aliner" } pagetop-bootsier = { version = "0.1", path = "extensions/pagetop-bootsier" } pagetop-htmx = { version = "0.1", path = "extensions/pagetop-htmx" } +pagetop-menu = { version = "0.1", path = "extensions/pagetop-menu" } pagetop-seaorm = { version = "0.0", path = "extensions/pagetop-seaorm" } pagetop-user = { version = "0.1", path = "extensions/pagetop-user" } # PageTop diff --git a/extensions/pagetop-admin/src/component/admin_menu.rs b/extensions/pagetop-admin/src/component/admin_menu.rs index 274abd74..64106bc3 100644 --- a/extensions/pagetop-admin/src/component/admin_menu.rs +++ b/extensions/pagetop-admin/src/component/admin_menu.rs @@ -2,14 +2,13 @@ use pagetop::prelude::*; use crate::registry; -/// Componente que renderiza la barra de navegación del panel de administración. +/// Componente que renderiza el menú de secciones visibles del panel de administración. /// -/// Construye la [`Navbar`] en cada petición a partir de [`registry::admin_navbar()`], ya filtrada -/// por el usuario de la petición actual. Pensado para que un tema la registre en su propia región -/// de navegación e intercepte `Navbar`/`Nav`/`Dropdown` en +/// Construye el [`Nav`] en cada petición a partir de [`registry::admin_menu()`], ya filtrado por +/// el usuario de la petición actual. Pensado para que un tema lo registre en su propia región de +/// navegación (p. ej. `pagetop-bootsier` lo añade a su sidebar) e intercepte `Nav`/`nav::Item` en /// [`Theme::render_component()`](pagetop::core::theme::Theme::render_component) si quiere darle un -/// aspecto propio (p. ej. `pagetop-bootsier` la reconoce automáticamente al ser componentes del -/// núcleo); sin intercepción, se renderiza con el marcado por defecto de cada componente. +/// aspecto propio; sin intercepción, se renderiza con el marcado por defecto de [`Nav`]. /// /// Sólo se renderiza en páginas creadas con /// [`Page::admin()`](pagetop::response::Page::admin) (plantilla @@ -33,6 +32,6 @@ impl Component for AdminMenu { ) { return Ok(html! {}); } - Ok(registry::admin_navbar(cx).render(cx).await) + Ok(registry::admin_menu(cx).render(cx).await) } } diff --git a/extensions/pagetop-admin/src/registry.rs b/extensions/pagetop-admin/src/registry.rs index 5bc315fd..eccae202 100644 --- a/extensions/pagetop-admin/src/registry.rs +++ b/extensions/pagetop-admin/src/registry.rs @@ -271,44 +271,25 @@ pub fn global() -> &'static AdminRegistry { // **< Menú de administración >********************************************************************* -/// Construye la barra de navegación de administración para el usuario de la petición actual: un -/// enlace al *dashboard* seguido de un desplegable por sección visible, con sus páginas accesibles -/// dentro. +/// Construye el menú plano de secciones visibles para el usuario de la petición actual. /// -/// Pensado para que un tema la use como navegación de `CoreTemplates::Admin` -- ver -/// [`crate::component::AdminMenu`]. `pagetop-admin` no impone ningún marcado propio: la -/// [`Navbar`] resultante se renderiza con su aspecto por defecto salvo que el tema lo intercepte -/// en [`Theme::render_component()`](pagetop::core::theme::Theme::render_component). Se construye -/// enteramente con componentes del núcleo (`Navbar`/`Nav`/`Dropdown`), sin depender de ningún -/// tema concreto. -pub fn admin_navbar(cx: &Context) -> Navbar { +/// Pensado para que un tema lo use como navegación de `CoreTemplates::Admin` (p. ej. un sidebar) -- +/// ver [`crate::component::AdminMenu`]. `pagetop-admin` no impone ningún marcado propio: el +/// [`Nav`] resultante se renderiza con su aspecto por defecto salvo que el tema lo intercepte en +/// [`Theme::render_component()`](pagetop::core::theme::Theme::render_component). +pub fn admin_menu(cx: &Context) -> Nav { let reg = global(); + let current_path = cx.request().map(|r| r.path()).unwrap_or(""); - let mut nav = Nav::new().with_item(nav::Item::link( - Lc::t("dashboard-title", &crate::LOCALES_ADMIN), - crate::ADMIN_BASE_PATH, - )); - + let mut result = Nav::new(); for section in reg.ordered_sections() { if !section.is_visible(cx) { continue; } - let pages: Vec<_> = reg - .pages_for_section(§ion.key) - .into_iter() - .filter(|p| p.is_accessible(cx)) - .collect(); - if pages.is_empty() { - continue; - } - let mut menu = Dropdown::new().with_title(section.title.clone()); - for page in pages { - menu = menu.with_item(dropdown::Item::link(page.title.clone(), page.path.clone())); - } - nav = nav.with_item(nav::Item::dropdown(menu)); + let active = current_path.starts_with(section.path.as_str()); + result = result.with_item( + nav::Item::link(section.title.clone(), section.path.clone()).with_active(active), + ); } - - Navbar::simple() - .with_position(navbar::Position::StickyTop) - .with_item(navbar::Item::nav(nav)) + result } diff --git a/extensions/pagetop-bootsier/README.md b/extensions/pagetop-bootsier/README.md index b949f2e3..041701f9 100644 --- a/extensions/pagetop-bootsier/README.md +++ b/extensions/pagetop-bootsier/README.md @@ -75,12 +75,10 @@ async fn homepage(request: HttpRequest) -> Result { ## Plantillas -Bootsier maqueta las dos plantillas de PageTop (`CoreTemplates`) con la misma cabecera, contenido -y pie: `Standard`, la plantilla por defecto de cualquier página; y `Admin`, que se activa creando -la página con `Page::admin()` en lugar de `Page::new()`. Ambas se maquetan igual hoy -- la -distinción entre página "normal" y de administración no vive en el maquetado, sino en qué -extensión registra contenido en cada región y para qué plantilla se autolimita (por ejemplo, el -menú de `pagetop-admin`, ver más abajo). +Bootsier ofrece dos plantillas (`BootsierTemplates`): `Standard`, con cabecera, contenido y pie, +que es la plantilla por defecto de cualquier página; y `Admin`, con la shell completa de +AdminLTE 4 (barra superior + barra lateral + área de contenido), que se activa creando la página +con `Page::admin()` en lugar de `Page::new()`. ```rust,no_run use pagetop::prelude::*; @@ -95,28 +93,59 @@ async fn about(request: HttpRequest) -> Result { } ``` -## Menú de administración +## Barra lateral -`pagetop-admin` (si está presente en la aplicación) registra su propio menú de secciones y -páginas en `CoreRegions::Aside`, autolimitado a páginas con la plantilla `Admin` -- no requiere -ningún registro por parte de Bootsier. Se construye con `Navbar`/`Nav`/`Dropdown`, los mismos -componentes disponibles para cualquier página de la aplicación. +Registra elementos en `BootsierRegion::Sidebar` para poblar la barra lateral de la shell. Los +elementos esperados son `theme::sidebar::Item` y `theme::sidebar::Section`. -## Selector de modo de color - -`bs::theme_toggle()` crea un ítem de menú con el selector de modo de color (claro / oscuro / -automático), pensado para añadirse a cualquier `Nav` de la aplicación, no sólo a las páginas de -administración: +De forma **global** (visibles en todas las páginas de administración): ```rust,no_run use pagetop::prelude::*; -use pagetop_bootsier::theme::*; +use pagetop_bootsier::theme::{BootsierRegion, sidebar}; -let navbar = bs::Navbar::simple().with_item(bs::navbar::Item::nav( - bs::Nav::new() - .with_item(bs::nav::Item::link(Lc::n("Home"), "/")) - .with_item(bs::theme_toggle()), -)); +fn register_navigation() { + InRegion::Global(&BootsierRegion::Sidebar) + .add(sidebar::Section::titled(Lc::n("Administración"))) + .add(sidebar::Item::link(Lc::n("Usuarios"), "/users", "people")) + .add(sidebar::Item::link(Lc::n("Roles"), "/roles", "shield-check")); +} +``` + +O de forma **por página**: + +```rust,no_run +use pagetop::prelude::*; +use pagetop_bootsier::theme::{BootsierRegion, sidebar}; + +async fn settings(request: HttpRequest) -> Result { + Page::admin(request) + .with_child_in( + &BootsierRegion::Sidebar, + sidebar::Item::link(Lc::n("Ajustes"), "/settings", "gear"), + ) + .with_child(Html::with(|_| html! { h3 { "Ajustes" } })) + .render() +} +``` + +## Barra de navegación superior + +La barra superior incluye por defecto los controles de pantalla completa y selector +de tema. Para añadir elementos adicionales en el lado derecho (por ejemplo, el +dropdown de usuario de `pagetop-user`), registra componentes en +`BootsierRegion::Navbar`: + +```rust,no_run +use pagetop::prelude::*; +use pagetop_bootsier::theme::BootsierRegion; + +InRegion::Global(&BootsierRegion::Navbar) + .add(Html::with(|_| html! { + li class="nav-item" { + a class="nav-link" href="/logout" { "Cerrar sesión" } + } + })); ``` ## Créditos diff --git a/extensions/pagetop-bootsier/assets/_bootsier-custom.scss b/extensions/pagetop-bootsier/assets/_bootsier-custom.scss index 2ab7aa7a..fb77c8b9 100644 --- a/extensions/pagetop-bootsier/assets/_bootsier-custom.scss +++ b/extensions/pagetop-bootsier/assets/_bootsier-custom.scss @@ -1,7 +1,7 @@ // Bootsier CSS rules: self-hosted fonts, form elements, regions and components. -// Self-hosted Source Sans 3 (SIL OFL 1.1), served from /bootsier/fonts. Declared as the primary -// font family in $font-family-sans-serif (_bootsier-variables.scss). +// Self-hosted Source Sans 3 (SIL OFL 1.1), served from /bootsier/fonts. +// Required by AdminLTE 4, which declares it as the primary font family in $font-family-sans-serif. // Font URLs must match the Preload declarations in src/lib.rs; a mismatch causes double downloads. @font-face { font-family: "Source Sans 3"; diff --git a/extensions/pagetop-bootsier/assets/_bootsier-variables.scss b/extensions/pagetop-bootsier/assets/_bootsier-variables.scss index c67cbfee..ec7d6caf 100644 --- a/extensions/pagetop-bootsier/assets/_bootsier-variables.scss +++ b/extensions/pagetop-bootsier/assets/_bootsier-variables.scss @@ -3,9 +3,3 @@ $font-size-base: 1.125rem; $navbar-brand-font-size: 1.75rem; - -// Self-hosted Source Sans 3 (SIL OFL 1.1) as the primary font family; see the @font-face -// declarations in _bootsier-custom.scss. -$font-family-sans-serif: "Source Sans 3", system-ui, -apple-system, "Segoe UI", Roboto, - "Helvetica Neue", "Noto Sans", "Liberation Sans", Arial, sans-serif, "Apple Color Emoji", - "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; diff --git a/extensions/pagetop-bootsier/assets/fonts/SourceSans3VF-Italic.otf.woff2 b/extensions/pagetop-bootsier/assets/adminlte-4.0.0/fonts/SourceSans3VF-Italic.otf.woff2 similarity index 100% rename from extensions/pagetop-bootsier/assets/fonts/SourceSans3VF-Italic.otf.woff2 rename to extensions/pagetop-bootsier/assets/adminlte-4.0.0/fonts/SourceSans3VF-Italic.otf.woff2 diff --git a/extensions/pagetop-bootsier/assets/fonts/SourceSans3VF-Upright.otf.woff2 b/extensions/pagetop-bootsier/assets/adminlte-4.0.0/fonts/SourceSans3VF-Upright.otf.woff2 similarity index 100% rename from extensions/pagetop-bootsier/assets/fonts/SourceSans3VF-Upright.otf.woff2 rename to extensions/pagetop-bootsier/assets/adminlte-4.0.0/fonts/SourceSans3VF-Upright.otf.woff2 diff --git a/extensions/pagetop-bootsier/assets/adminlte-4.0.0/js/adminlte.js b/extensions/pagetop-bootsier/assets/adminlte-4.0.0/js/adminlte.js new file mode 100644 index 00000000..7ce13dff --- /dev/null +++ b/extensions/pagetop-bootsier/assets/adminlte-4.0.0/js/adminlte.js @@ -0,0 +1,1081 @@ +/*! + * AdminLTE v4.0.0 (https://adminlte.io) + * Copyright 2014-2026 Colorlib + * Licensed under MIT (https://github.com/ColorlibHQ/AdminLTE/blob/master/LICENSE) + */ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : + typeof define === 'function' && define.amd ? define(['exports'], factory) : + (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.adminlte = {})); +})(this, (function (exports) { 'use strict'; + + const domContentLoadedCallbacks = []; + const onDOMContentLoaded = (callback) => { + if (document.readyState === 'loading') { + if (!domContentLoadedCallbacks.length) { + document.addEventListener('DOMContentLoaded', () => { + for (const callback of domContentLoadedCallbacks) { + callback(); + } + }); + } + domContentLoadedCallbacks.push(callback); + } + else { + callback(); + } + }; + const slideUp = (target, duration = 500) => { + if (duration <= 1) { + target.style.display = 'none'; + return; + } + target.style.transitionProperty = 'height, margin, padding'; + target.style.transitionDuration = `${duration}ms`; + target.style.boxSizing = 'border-box'; + target.style.height = `${target.offsetHeight}px`; + target.style.overflow = 'hidden'; + globalThis.setTimeout(() => { + target.style.height = '0'; + target.style.paddingTop = '0'; + target.style.paddingBottom = '0'; + target.style.marginTop = '0'; + target.style.marginBottom = '0'; + }, 1); + globalThis.setTimeout(() => { + target.style.display = 'none'; + target.style.removeProperty('height'); + target.style.removeProperty('padding-top'); + target.style.removeProperty('padding-bottom'); + target.style.removeProperty('margin-top'); + target.style.removeProperty('margin-bottom'); + target.style.removeProperty('overflow'); + target.style.removeProperty('transition-duration'); + target.style.removeProperty('transition-property'); + }, duration); + }; + const slideDown = (target, duration = 500) => { + target.style.removeProperty('display'); + let { display } = globalThis.getComputedStyle(target); + if (display === 'none') { + display = 'block'; + } + target.style.display = display; + if (duration <= 1) { + return; + } + const height = target.offsetHeight; + target.style.overflow = 'hidden'; + target.style.height = '0'; + target.style.paddingTop = '0'; + target.style.paddingBottom = '0'; + target.style.marginTop = '0'; + target.style.marginBottom = '0'; + globalThis.setTimeout(() => { + target.style.boxSizing = 'border-box'; + target.style.transitionProperty = 'height, margin, padding'; + target.style.transitionDuration = `${duration}ms`; + target.style.height = `${height}px`; + target.style.removeProperty('padding-top'); + target.style.removeProperty('padding-bottom'); + target.style.removeProperty('margin-top'); + target.style.removeProperty('margin-bottom'); + }, 1); + globalThis.setTimeout(() => { + target.style.removeProperty('height'); + target.style.removeProperty('overflow'); + target.style.removeProperty('transition-duration'); + target.style.removeProperty('transition-property'); + }, duration); + }; + + const CLASS_NAME_HOLD_TRANSITIONS = 'hold-transition'; + const CLASS_NAME_APP_LOADED = 'app-loaded'; + class Layout { + _element; + _holdTransitionTimer; + constructor(element) { + this._element = element; + this._holdTransitionTimer = undefined; + } + holdTransition(time = 100) { + if (this._holdTransitionTimer) { + clearTimeout(this._holdTransitionTimer); + } + document.body.classList.add(CLASS_NAME_HOLD_TRANSITIONS); + this._holdTransitionTimer = setTimeout(() => { + document.body.classList.remove(CLASS_NAME_HOLD_TRANSITIONS); + }, time); + } + } + onDOMContentLoaded(() => { + const layout = new Layout(document.body); + window.addEventListener('resize', () => layout.holdTransition(200)); + setTimeout(() => { + document.body.classList.add(CLASS_NAME_APP_LOADED); + }, 400); + }); + + const DATA_KEY$4 = 'lte.card-widget'; + const EVENT_KEY$4 = `.${DATA_KEY$4}`; + const EVENT_COLLAPSED$2 = `collapsed${EVENT_KEY$4}`; + const EVENT_EXPANDED$2 = `expanded${EVENT_KEY$4}`; + const EVENT_REMOVE = `remove${EVENT_KEY$4}`; + const EVENT_MAXIMIZED$1 = `maximized${EVENT_KEY$4}`; + const EVENT_MINIMIZED$1 = `minimized${EVENT_KEY$4}`; + const CLASS_NAME_CARD = 'card'; + const CLASS_NAME_COLLAPSED = 'collapsed-card'; + const CLASS_NAME_COLLAPSING = 'collapsing-card'; + const CLASS_NAME_EXPANDING = 'expanding-card'; + const CLASS_NAME_WAS_COLLAPSED = 'was-collapsed'; + const CLASS_NAME_MAXIMIZED = 'maximized-card'; + const SELECTOR_DATA_REMOVE = '[data-lte-toggle="card-remove"]'; + const SELECTOR_DATA_COLLAPSE = '[data-lte-toggle="card-collapse"]'; + const SELECTOR_DATA_MAXIMIZE = '[data-lte-toggle="card-maximize"]'; + const SELECTOR_CARD = `.${CLASS_NAME_CARD}`; + const SELECTOR_CARD_BODY = '.card-body'; + const SELECTOR_CARD_FOOTER = '.card-footer'; + const Default$1 = { + animationSpeed: 500, + collapseTrigger: SELECTOR_DATA_COLLAPSE, + removeTrigger: SELECTOR_DATA_REMOVE, + maximizeTrigger: SELECTOR_DATA_MAXIMIZE + }; + class CardWidget { + _element; + _parent; + _clone; + _config; + constructor(element, config) { + this._element = element; + this._parent = element.closest(SELECTOR_CARD); + if (element.classList.contains(CLASS_NAME_CARD)) { + this._parent = element; + } + this._config = { ...Default$1, ...config }; + } + collapse() { + const event = new Event(EVENT_COLLAPSED$2); + if (this._parent) { + this._parent.classList.add(CLASS_NAME_COLLAPSING); + const elm = this._parent?.querySelectorAll(`:scope > ${SELECTOR_CARD_BODY}, :scope > ${SELECTOR_CARD_FOOTER}`); + elm.forEach(el => { + if (el instanceof HTMLElement) { + slideUp(el, this._config.animationSpeed); + } + }); + setTimeout(() => { + if (this._parent) { + this._parent.classList.add(CLASS_NAME_COLLAPSED); + this._parent.classList.remove(CLASS_NAME_COLLAPSING); + } + }, this._config.animationSpeed); + } + this._element?.dispatchEvent(event); + } + expand() { + const event = new Event(EVENT_EXPANDED$2); + if (this._parent) { + this._parent.classList.add(CLASS_NAME_EXPANDING); + const elm = this._parent?.querySelectorAll(`:scope > ${SELECTOR_CARD_BODY}, :scope > ${SELECTOR_CARD_FOOTER}`); + elm.forEach(el => { + if (el instanceof HTMLElement) { + slideDown(el, this._config.animationSpeed); + } + }); + setTimeout(() => { + if (this._parent) { + this._parent.classList.remove(CLASS_NAME_COLLAPSED, CLASS_NAME_EXPANDING); + } + }, this._config.animationSpeed); + } + this._element?.dispatchEvent(event); + } + remove() { + const event = new Event(EVENT_REMOVE); + if (this._parent) { + slideUp(this._parent, this._config.animationSpeed); + } + this._element?.dispatchEvent(event); + } + toggle() { + if (this._parent?.classList.contains(CLASS_NAME_COLLAPSED)) { + this.expand(); + return; + } + this.collapse(); + } + maximize() { + const event = new Event(EVENT_MAXIMIZED$1); + if (this._parent) { + this._parent.style.height = `${this._parent.offsetHeight}px`; + this._parent.style.width = `${this._parent.offsetWidth}px`; + this._parent.style.transition = 'all .15s'; + setTimeout(() => { + const htmlTag = document.querySelector('html'); + if (htmlTag) { + htmlTag.classList.add(CLASS_NAME_MAXIMIZED); + } + if (this._parent) { + this._parent.classList.add(CLASS_NAME_MAXIMIZED); + if (this._parent.classList.contains(CLASS_NAME_COLLAPSED)) { + this._parent.classList.add(CLASS_NAME_WAS_COLLAPSED); + } + } + }, 150); + } + this._element?.dispatchEvent(event); + } + minimize() { + const event = new Event(EVENT_MINIMIZED$1); + if (this._parent) { + this._parent.style.height = 'auto'; + this._parent.style.width = 'auto'; + this._parent.style.transition = 'all .15s'; + setTimeout(() => { + const htmlTag = document.querySelector('html'); + if (htmlTag) { + htmlTag.classList.remove(CLASS_NAME_MAXIMIZED); + } + if (this._parent) { + this._parent.classList.remove(CLASS_NAME_MAXIMIZED); + if (this._parent?.classList.contains(CLASS_NAME_WAS_COLLAPSED)) { + this._parent.classList.remove(CLASS_NAME_WAS_COLLAPSED); + } + } + }, 10); + } + this._element?.dispatchEvent(event); + } + toggleMaximize() { + if (this._parent?.classList.contains(CLASS_NAME_MAXIMIZED)) { + this.minimize(); + return; + } + this.maximize(); + } + } + onDOMContentLoaded(() => { + const collapseBtn = document.querySelectorAll(SELECTOR_DATA_COLLAPSE); + collapseBtn.forEach(btn => { + btn.addEventListener('click', event => { + event.preventDefault(); + const target = event.target; + const data = new CardWidget(target, Default$1); + data.toggle(); + }); + }); + const removeBtn = document.querySelectorAll(SELECTOR_DATA_REMOVE); + removeBtn.forEach(btn => { + btn.addEventListener('click', event => { + event.preventDefault(); + const target = event.target; + const data = new CardWidget(target, Default$1); + data.remove(); + }); + }); + const maxBtn = document.querySelectorAll(SELECTOR_DATA_MAXIMIZE); + maxBtn.forEach(btn => { + btn.addEventListener('click', event => { + event.preventDefault(); + const target = event.target; + const data = new CardWidget(target, Default$1); + data.toggleMaximize(); + }); + }); + }); + + const DATA_KEY$3 = 'lte.treeview'; + const EVENT_KEY$3 = `.${DATA_KEY$3}`; + const EVENT_EXPANDED$1 = `expanded${EVENT_KEY$3}`; + const EVENT_COLLAPSED$1 = `collapsed${EVENT_KEY$3}`; + const EVENT_LOAD_DATA_API = `load${EVENT_KEY$3}`; + const CLASS_NAME_MENU_OPEN = 'menu-open'; + const SELECTOR_NAV_ITEM = '.nav-item'; + const SELECTOR_NAV_LINK = '.nav-link'; + const SELECTOR_TREEVIEW_MENU = '.nav-treeview'; + const SELECTOR_DATA_TOGGLE$1 = '[data-lte-toggle="treeview"]'; + const Default = { + animationSpeed: 300, + accordion: true + }; + class Treeview { + _element; + _config; + constructor(element, config) { + this._element = element; + this._config = { ...Default, ...config }; + } + open() { + const event = new Event(EVENT_EXPANDED$1); + if (this._config.accordion) { + const openMenuList = this._element.parentElement?.querySelectorAll(`${SELECTOR_NAV_ITEM}.${CLASS_NAME_MENU_OPEN}`); + openMenuList?.forEach(openMenu => { + if (openMenu !== this._element.parentElement) { + openMenu.classList.remove(CLASS_NAME_MENU_OPEN); + const childElement = openMenu?.querySelector(SELECTOR_TREEVIEW_MENU); + if (childElement) { + slideUp(childElement, this._config.animationSpeed); + } + } + }); + } + this._element.classList.add(CLASS_NAME_MENU_OPEN); + const childElement = this._element?.querySelector(SELECTOR_TREEVIEW_MENU); + if (childElement) { + slideDown(childElement, this._config.animationSpeed); + } + this._element.dispatchEvent(event); + } + close() { + const event = new Event(EVENT_COLLAPSED$1); + this._element.classList.remove(CLASS_NAME_MENU_OPEN); + const childElement = this._element?.querySelector(SELECTOR_TREEVIEW_MENU); + if (childElement) { + slideUp(childElement, this._config.animationSpeed); + } + this._element.dispatchEvent(event); + } + toggle() { + if (this._element.classList.contains(CLASS_NAME_MENU_OPEN)) { + this.close(); + } + else { + this.open(); + } + } + } + onDOMContentLoaded(() => { + const openMenuItems = document.querySelectorAll(`${SELECTOR_NAV_ITEM}.${CLASS_NAME_MENU_OPEN}`); + openMenuItems.forEach(menuItem => { + const childElement = menuItem.querySelector(SELECTOR_TREEVIEW_MENU); + if (childElement) { + slideDown(childElement, 0); + const event = new Event(EVENT_LOAD_DATA_API); + menuItem.dispatchEvent(event); + } + }); + const button = document.querySelectorAll(SELECTOR_DATA_TOGGLE$1); + button.forEach(btn => { + btn.addEventListener('click', event => { + const target = event.target; + const targetItem = target.closest(SELECTOR_NAV_ITEM); + const targetLink = target.closest(SELECTOR_NAV_LINK); + const targetTreeviewMenu = targetItem?.querySelector(SELECTOR_TREEVIEW_MENU); + const lteToggleElement = event.currentTarget; + if (!targetTreeviewMenu) { + return; + } + if (target?.getAttribute('href') === '#' || targetLink?.getAttribute('href') === '#') { + event.preventDefault(); + } + if (targetItem) { + const accordionAttr = lteToggleElement.dataset.accordion; + const animationSpeedAttr = lteToggleElement.dataset.animationSpeed; + const config = { + accordion: accordionAttr === undefined ? Default.accordion : accordionAttr === 'true', + animationSpeed: animationSpeedAttr === undefined ? Default.animationSpeed : Number(animationSpeedAttr) + }; + const data = new Treeview(targetItem, config); + data.toggle(); + } + }); + }); + }); + + const DATA_KEY$2 = 'lte.direct-chat'; + const EVENT_KEY$2 = `.${DATA_KEY$2}`; + const EVENT_EXPANDED = `expanded${EVENT_KEY$2}`; + const EVENT_COLLAPSED = `collapsed${EVENT_KEY$2}`; + const SELECTOR_DATA_TOGGLE = '[data-lte-toggle="chat-pane"]'; + const SELECTOR_DIRECT_CHAT = '.direct-chat'; + const CLASS_NAME_DIRECT_CHAT_OPEN = 'direct-chat-contacts-open'; + class DirectChat { + _element; + constructor(element) { + this._element = element; + } + toggle() { + if (this._element.classList.contains(CLASS_NAME_DIRECT_CHAT_OPEN)) { + const event = new Event(EVENT_COLLAPSED); + this._element.classList.remove(CLASS_NAME_DIRECT_CHAT_OPEN); + this._element.dispatchEvent(event); + } + else { + const event = new Event(EVENT_EXPANDED); + this._element.classList.add(CLASS_NAME_DIRECT_CHAT_OPEN); + this._element.dispatchEvent(event); + } + } + } + onDOMContentLoaded(() => { + const button = document.querySelectorAll(SELECTOR_DATA_TOGGLE); + button.forEach(btn => { + btn.addEventListener('click', event => { + event.preventDefault(); + const target = event.target; + const chatPane = target.closest(SELECTOR_DIRECT_CHAT); + if (chatPane) { + const data = new DirectChat(chatPane); + data.toggle(); + } + }); + }); + }); + + const DATA_KEY$1 = 'lte.fullscreen'; + const EVENT_KEY$1 = `.${DATA_KEY$1}`; + const EVENT_MAXIMIZED = `maximized${EVENT_KEY$1}`; + const EVENT_MINIMIZED = `minimized${EVENT_KEY$1}`; + const SELECTOR_FULLSCREEN_TOGGLE = '[data-lte-toggle="fullscreen"]'; + const SELECTOR_MAXIMIZE_ICON = '[data-lte-icon="maximize"]'; + const SELECTOR_MINIMIZE_ICON = '[data-lte-icon="minimize"]'; + class FullScreen { + _element; + _config; + constructor(element, config) { + this._element = element; + this._config = config; + } + inFullScreen() { + const event = new Event(EVENT_MAXIMIZED); + const iconMaximize = document.querySelector(SELECTOR_MAXIMIZE_ICON); + const iconMinimize = document.querySelector(SELECTOR_MINIMIZE_ICON); + void document.documentElement.requestFullscreen(); + if (iconMaximize) { + iconMaximize.classList.add('d-none'); + } + if (iconMinimize) { + iconMinimize.classList.remove('d-none'); + } + this._element.dispatchEvent(event); + } + outFullscreen() { + const event = new Event(EVENT_MINIMIZED); + const iconMaximize = document.querySelector(SELECTOR_MAXIMIZE_ICON); + const iconMinimize = document.querySelector(SELECTOR_MINIMIZE_ICON); + void document.exitFullscreen(); + if (iconMaximize) { + iconMaximize.classList.remove('d-none'); + } + if (iconMinimize) { + iconMinimize.classList.add('d-none'); + } + this._element.dispatchEvent(event); + } + toggleFullScreen() { + if (document.fullscreenEnabled) { + if (document.fullscreenElement) { + this.outFullscreen(); + } + else { + this.inFullScreen(); + } + } + } + } + onDOMContentLoaded(() => { + const buttons = document.querySelectorAll(SELECTOR_FULLSCREEN_TOGGLE); + buttons.forEach(btn => { + btn.addEventListener('click', event => { + event.preventDefault(); + const target = event.target; + const button = target.closest(SELECTOR_FULLSCREEN_TOGGLE); + if (button) { + const data = new FullScreen(button, undefined); + data.toggleFullScreen(); + } + }); + }); + }); + + const DATA_KEY = 'lte.push-menu'; + const EVENT_KEY = `.${DATA_KEY}`; + const EVENT_OPEN = `open${EVENT_KEY}`; + const EVENT_COLLAPSE = `collapse${EVENT_KEY}`; + const CLASS_NAME_SIDEBAR_MINI = 'sidebar-mini'; + const CLASS_NAME_SIDEBAR_EXPAND = 'sidebar-expand'; + const CLASS_NAME_SIDEBAR_OVERLAY = 'sidebar-overlay'; + const CLASS_NAME_SIDEBAR_COLLAPSE = 'sidebar-collapse'; + const CLASS_NAME_SIDEBAR_OPEN = 'sidebar-open'; + const SELECTOR_APP_SIDEBAR = '.app-sidebar'; + const SELECTOR_APP_WRAPPER = '.app-wrapper'; + const SELECTOR_SIDEBAR_EXPAND = `[class*="${CLASS_NAME_SIDEBAR_EXPAND}"]`; + const SELECTOR_SIDEBAR_TOGGLE = '[data-lte-toggle="sidebar"]'; + const STORAGE_KEY_SIDEBAR_STATE = 'lte.sidebar.state'; + const Defaults = { + sidebarBreakpoint: 992, + enablePersistence: false + }; + class PushMenu { + _element; + _config; + constructor(element, config) { + this._element = element; + this._config = { ...Defaults, ...config }; + } + isCollapsed() { + return document.body.classList.contains(CLASS_NAME_SIDEBAR_COLLAPSE); + } + isExplicitlyOpen() { + return document.body.classList.contains(CLASS_NAME_SIDEBAR_OPEN); + } + isMiniMode() { + return document.body.classList.contains(CLASS_NAME_SIDEBAR_MINI); + } + isMobileSize() { + return globalThis.innerWidth <= this._config.sidebarBreakpoint; + } + expand() { + document.body.classList.remove(CLASS_NAME_SIDEBAR_COLLAPSE); + if (this.isMobileSize()) { + document.body.classList.add(CLASS_NAME_SIDEBAR_OPEN); + } + this._element.dispatchEvent(new Event(EVENT_OPEN)); + } + collapse() { + document.body.classList.remove(CLASS_NAME_SIDEBAR_OPEN); + document.body.classList.add(CLASS_NAME_SIDEBAR_COLLAPSE); + this._element.dispatchEvent(new Event(EVENT_COLLAPSE)); + } + toggle() { + const isCollapsed = this.isCollapsed(); + if (isCollapsed) { + this.expand(); + } + else { + this.collapse(); + } + if (this._config.enablePersistence) { + this.saveSidebarState(isCollapsed ? CLASS_NAME_SIDEBAR_OPEN : CLASS_NAME_SIDEBAR_COLLAPSE); + } + } + setupSidebarBreakPoint() { + const sidebarExpand = document.querySelector(SELECTOR_SIDEBAR_EXPAND); + if (!sidebarExpand) { + return; + } + const content = globalThis.getComputedStyle(sidebarExpand, '::before') + .getPropertyValue('content'); + if (!content || content === 'none') { + return; + } + const breakpointValue = Number(content.replace(/[^\d.-]/g, '')); + if (Number.isNaN(breakpointValue)) { + return; + } + this._config = { ...this._config, sidebarBreakpoint: breakpointValue }; + } + updateStateByResponsiveLogic() { + if (this.isMobileSize()) { + if (!this.isExplicitlyOpen()) { + this.collapse(); + } + } + else { + if (!(this.isMiniMode() && this.isCollapsed())) { + this.expand(); + } + } + } + saveSidebarState(state) { + if (globalThis.localStorage === undefined) { + return; + } + try { + localStorage.setItem(STORAGE_KEY_SIDEBAR_STATE, state); + } + catch { + } + } + loadSidebarState() { + if (globalThis.localStorage === undefined) { + return; + } + try { + const storedState = localStorage.getItem(STORAGE_KEY_SIDEBAR_STATE); + if (storedState === CLASS_NAME_SIDEBAR_COLLAPSE) { + this.collapse(); + } + else if (storedState === CLASS_NAME_SIDEBAR_OPEN) { + this.expand(); + } + else { + this.updateStateByResponsiveLogic(); + } + } + catch { + this.updateStateByResponsiveLogic(); + } + } + clearSidebarState() { + if (globalThis.localStorage === undefined) { + return; + } + try { + localStorage.removeItem(STORAGE_KEY_SIDEBAR_STATE); + } + catch { + } + } + init() { + this.setupSidebarBreakPoint(); + if (!this._config.enablePersistence) { + this.clearSidebarState(); + } + if (this._config.enablePersistence && !this.isMobileSize()) { + this.loadSidebarState(); + } + else { + this.updateStateByResponsiveLogic(); + } + } + } + onDOMContentLoaded(() => { + const sidebar = document?.querySelector(SELECTOR_APP_SIDEBAR); + if (!sidebar) { + return; + } + const sidebarBreakpointAttr = sidebar.dataset.sidebarBreakpoint; + const enablePersistenceAttr = sidebar.dataset.enablePersistence; + const config = { + sidebarBreakpoint: sidebarBreakpointAttr === undefined ? + Defaults.sidebarBreakpoint : + Number(sidebarBreakpointAttr), + enablePersistence: enablePersistenceAttr === undefined ? + Defaults.enablePersistence : + enablePersistenceAttr === 'true' + }; + const pushMenu = new PushMenu(sidebar, config); + pushMenu.init(); + window.addEventListener('resize', () => { + pushMenu.setupSidebarBreakPoint(); + pushMenu.updateStateByResponsiveLogic(); + }); + const sidebarOverlay = document.createElement('div'); + sidebarOverlay.className = CLASS_NAME_SIDEBAR_OVERLAY; + document.querySelector(SELECTOR_APP_WRAPPER)?.append(sidebarOverlay); + let overlayTouchMoved = false; + sidebarOverlay.addEventListener('touchstart', () => { + overlayTouchMoved = false; + }, { passive: true }); + sidebarOverlay.addEventListener('touchmove', () => { + overlayTouchMoved = true; + }, { passive: true }); + sidebarOverlay.addEventListener('touchend', event => { + if (!overlayTouchMoved) { + event.preventDefault(); + pushMenu.collapse(); + } + overlayTouchMoved = false; + }, { passive: false }); + sidebarOverlay.addEventListener('click', event => { + event.preventDefault(); + pushMenu.collapse(); + }); + const fullBtn = document.querySelectorAll(SELECTOR_SIDEBAR_TOGGLE); + fullBtn.forEach(btn => { + btn.addEventListener('click', event => { + event.preventDefault(); + let button = event.currentTarget; + if (button?.dataset.lteToggle !== 'sidebar') { + button = button?.closest(SELECTOR_SIDEBAR_TOGGLE); + } + if (button) { + event?.preventDefault(); + pushMenu.toggle(); + } + }); + }); + }); + + class AccessibilityManager { + config; + liveRegion = null; + focusHistory = []; + constructor(config = {}) { + this.config = { + announcements: true, + skipLinks: true, + focusManagement: true, + keyboardNavigation: true, + reducedMotion: true, + ...config + }; + this.init(); + } + init() { + if (this.config.announcements) { + this.createLiveRegion(); + } + if (this.config.skipLinks) { + this.addSkipLinks(); + } + if (this.config.focusManagement) { + this.initFocusManagement(); + } + if (this.config.keyboardNavigation) { + this.initKeyboardNavigation(); + } + if (this.config.reducedMotion) { + this.respectReducedMotion(); + } + this.initErrorAnnouncements(); + this.initTableAccessibility(); + this.initFormAccessibility(); + } + createLiveRegion() { + if (this.liveRegion) + return; + this.liveRegion = document.createElement('div'); + this.liveRegion.id = 'live-region'; + this.liveRegion.className = 'live-region'; + this.liveRegion.setAttribute('aria-live', 'polite'); + this.liveRegion.setAttribute('aria-atomic', 'true'); + this.liveRegion.setAttribute('role', 'status'); + document.body.append(this.liveRegion); + } + addSkipLinks() { + const skipLinksContainer = document.createElement('div'); + skipLinksContainer.className = 'skip-links'; + const skipToMain = document.createElement('a'); + skipToMain.href = '#main'; + skipToMain.className = 'skip-link'; + skipToMain.textContent = 'Skip to main content'; + const skipToNav = document.createElement('a'); + skipToNav.href = '#navigation'; + skipToNav.className = 'skip-link'; + skipToNav.textContent = 'Skip to navigation'; + skipLinksContainer.append(skipToMain); + skipLinksContainer.append(skipToNav); + document.body.insertBefore(skipLinksContainer, document.body.firstChild); + this.ensureSkipTargets(); + } + ensureSkipTargets() { + const main = document.querySelector('#main, main, [role="main"]'); + if (main && !main.id) { + main.id = 'main'; + } + if (main && !main.hasAttribute('tabindex')) { + main.setAttribute('tabindex', '-1'); + } + const nav = document.querySelector('#navigation, nav, [role="navigation"]'); + if (nav && !nav.id) { + nav.id = 'navigation'; + } + if (nav && !nav.hasAttribute('tabindex')) { + nav.setAttribute('tabindex', '-1'); + } + } + initFocusManagement() { + document.addEventListener('keydown', (event) => { + if (event.key === 'Tab') { + this.handleTabNavigation(event); + } + if (event.key === 'Escape') { + this.handleEscapeKey(event); + } + }); + this.initModalFocusManagement(); + this.initDropdownFocusManagement(); + } + handleTabNavigation(event) { + const focusableElements = this.getFocusableElements(); + const currentIndex = focusableElements.indexOf(document.activeElement); + if (event.shiftKey) { + if (currentIndex <= 0) { + event.preventDefault(); + focusableElements.at(-1)?.focus(); + } + } + else if (currentIndex >= focusableElements.length - 1) { + event.preventDefault(); + focusableElements[0]?.focus(); + } + } + getFocusableElements() { + const selector = [ + 'a[href]', + 'button:not([disabled])', + 'input:not([disabled])', + 'select:not([disabled])', + 'textarea:not([disabled])', + '[tabindex]:not([tabindex="-1"])', + '[contenteditable="true"]' + ].join(', '); + return Array.from(document.querySelectorAll(selector)); + } + handleEscapeKey(event) { + const activeModal = document.querySelector('.modal.show'); + if (activeModal) { + return; + } + const activeDropdown = document.querySelector('.dropdown-menu.show'); + if (activeDropdown) { + const toggleButton = document.querySelector('[data-bs-toggle="dropdown"][aria-expanded="true"]'); + toggleButton?.click(); + event.preventDefault(); + } + } + initKeyboardNavigation() { + document.addEventListener('keydown', (event) => { + const target = event.target; + if (target.closest('.nav, .navbar-nav, .dropdown-menu')) { + this.handleMenuNavigation(event); + } + if ((event.key === 'Enter' || event.key === ' ') && target.hasAttribute('role') && target.getAttribute('role') === 'button' && !target.matches('button, input[type="button"], input[type="submit"]')) { + event.preventDefault(); + target.click(); + } + }); + } + handleMenuNavigation(event) { + if (!['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight', 'Home', 'End'].includes(event.key)) { + return; + } + const currentElement = event.target; + const menuItems = Array.from(currentElement.closest('.nav, .navbar-nav, .dropdown-menu')?.querySelectorAll('a, button') || []); + const currentIndex = menuItems.indexOf(currentElement); + let nextIndex; + switch (event.key) { + case 'ArrowDown': + case 'ArrowRight': { + nextIndex = currentIndex < menuItems.length - 1 ? currentIndex + 1 : 0; + break; + } + case 'ArrowUp': + case 'ArrowLeft': { + nextIndex = currentIndex > 0 ? currentIndex - 1 : menuItems.length - 1; + break; + } + case 'Home': { + nextIndex = 0; + break; + } + case 'End': { + nextIndex = menuItems.length - 1; + break; + } + default: { + return; + } + } + event.preventDefault(); + menuItems[nextIndex]?.focus(); + } + respectReducedMotion() { + const prefersReducedMotion = globalThis.matchMedia('(prefers-reduced-motion: reduce)').matches; + if (prefersReducedMotion) { + document.body.classList.add('reduce-motion'); + document.documentElement.style.scrollBehavior = 'auto'; + const style = document.createElement('style'); + style.textContent = ` + *, *::before, *::after { + animation-duration: 0.01ms !important; + animation-iteration-count: 1 !important; + transition-duration: 0.01ms !important; + } + `; + document.head.append(style); + } + } + initErrorAnnouncements() { + const observer = new MutationObserver((mutations) => { + mutations.forEach((mutation) => { + mutation.addedNodes.forEach((node) => { + if (node.nodeType === Node.ELEMENT_NODE) { + const element = node; + if (element.matches('.alert-danger, .invalid-feedback, .error')) { + this.announce(element.textContent || 'Error occurred', 'assertive'); + } + if (element.matches('.alert-success, .success')) { + this.announce(element.textContent || 'Success', 'polite'); + } + } + }); + }); + }); + observer.observe(document.body, { + childList: true, + subtree: true + }); + } + initTableAccessibility() { + document.querySelectorAll('table').forEach((table) => { + if (!table.hasAttribute('role')) { + table.setAttribute('role', 'table'); + } + table.querySelectorAll('th').forEach((th) => { + if (!th.hasAttribute('scope')) { + const isInThead = th.closest('thead'); + const isFirstColumn = th.cellIndex === 0; + if (isInThead) { + th.setAttribute('scope', 'col'); + } + else if (isFirstColumn) { + th.setAttribute('scope', 'row'); + } + } + }); + if (!table.querySelector('caption') && table.hasAttribute('title')) { + const caption = document.createElement('caption'); + caption.textContent = table.getAttribute('title') || ''; + table.insertBefore(caption, table.firstChild); + } + }); + } + initFormAccessibility() { + document.querySelectorAll('input, select, textarea').forEach((input) => { + const htmlInput = input; + if (!htmlInput.labels?.length && !htmlInput.hasAttribute('aria-label') && !htmlInput.hasAttribute('aria-labelledby')) { + const placeholder = htmlInput.getAttribute('placeholder'); + if (placeholder) { + htmlInput.setAttribute('aria-label', placeholder); + } + } + if (htmlInput.hasAttribute('required')) { + const label = htmlInput.labels?.[0]; + if (label && !label.querySelector('.required-indicator')) { + const indicator = document.createElement('span'); + indicator.className = 'required-indicator sr-only'; + indicator.textContent = ' (required)'; + label.append(indicator); + } + } + if (!htmlInput.classList.contains('disable-adminlte-validations')) { + htmlInput.addEventListener('invalid', () => { + this.handleFormError(htmlInput); + }); + } + }); + } + handleFormError(input) { + const errorId = `${input.id || input.name}-error`; + let errorElement = document.getElementById(errorId); + if (!errorElement) { + errorElement = document.createElement('div'); + errorElement.id = errorId; + errorElement.className = 'invalid-feedback'; + errorElement.setAttribute('role', 'alert'); + input.parentNode?.append(errorElement); + } + errorElement.textContent = input.validationMessage; + input.setAttribute('aria-describedby', errorId); + input.classList.add('is-invalid'); + this.announce(`Error in ${input.labels?.[0]?.textContent || input.name}: ${input.validationMessage}`, 'assertive'); + } + initModalFocusManagement() { + document.addEventListener('shown.bs.modal', (event) => { + const modal = event.target; + const focusableElements = modal.querySelectorAll('button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])'); + if (focusableElements.length > 0) { + focusableElements[0].focus(); + } + this.focusHistory.push(document.activeElement); + }); + document.addEventListener('hidden.bs.modal', () => { + const previousElement = this.focusHistory.pop(); + if (previousElement) { + previousElement.focus(); + } + }); + } + initDropdownFocusManagement() { + document.addEventListener('shown.bs.dropdown', (event) => { + const dropdown = event.target; + const menu = dropdown.querySelector('.dropdown-menu'); + const firstItem = menu?.querySelector('a, button'); + if (firstItem) { + firstItem.focus(); + } + }); + } + announce(message, priority = 'polite') { + if (!this.liveRegion) { + this.createLiveRegion(); + } + if (this.liveRegion) { + this.liveRegion.setAttribute('aria-live', priority); + this.liveRegion.textContent = message; + setTimeout(() => { + if (this.liveRegion) { + this.liveRegion.textContent = ''; + } + }, 1000); + } + } + focusElement(selector) { + const element = document.querySelector(selector); + if (element) { + element.focus(); + element.scrollIntoView({ behavior: 'smooth', block: 'center' }); + } + } + trapFocus(container) { + const focusableElements = container.querySelectorAll('button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])'); + const focusableArray = Array.from(focusableElements); + const firstElement = focusableArray[0]; + const lastElement = focusableArray.at(-1); + container.addEventListener('keydown', (event) => { + if (event.key === 'Tab') { + if (event.shiftKey) { + if (document.activeElement === firstElement) { + lastElement?.focus(); + event.preventDefault(); + } + } + else if (document.activeElement === lastElement) { + firstElement.focus(); + event.preventDefault(); + } + } + }); + } + addLandmarks() { + const main = document.querySelector('main'); + if (!main) { + const appMain = document.querySelector('.app-main'); + if (appMain) { + appMain.setAttribute('role', 'main'); + appMain.id = 'main'; + } + } + document.querySelectorAll('.navbar-nav, .nav').forEach((nav, index) => { + if (!nav.hasAttribute('role')) { + nav.setAttribute('role', 'navigation'); + } + if (!nav.hasAttribute('aria-label')) { + nav.setAttribute('aria-label', `Navigation ${index + 1}`); + } + }); + const searchForm = document.querySelector('form[role="search"], .navbar-search'); + if (searchForm && !searchForm.hasAttribute('role')) { + searchForm.setAttribute('role', 'search'); + } + } + } + const initAccessibility = (config) => { + return new AccessibilityManager(config); + }; + + onDOMContentLoaded(() => { + const accessibilityManager = initAccessibility({ + announcements: true, + skipLinks: true, + focusManagement: true, + keyboardNavigation: true, + reducedMotion: true + }); + accessibilityManager.addLandmarks(); + }); + + exports.CardWidget = CardWidget; + exports.DirectChat = DirectChat; + exports.FullScreen = FullScreen; + exports.Layout = Layout; + exports.PushMenu = PushMenu; + exports.Treeview = Treeview; + exports.initAccessibility = initAccessibility; + +})); +//# sourceMappingURL=adminlte.js.map diff --git a/extensions/pagetop-bootsier/assets/adminlte-4.0.0/js/adminlte.js.map b/extensions/pagetop-bootsier/assets/adminlte-4.0.0/js/adminlte.js.map new file mode 100644 index 00000000..4344c78f --- /dev/null +++ b/extensions/pagetop-bootsier/assets/adminlte-4.0.0/js/adminlte.js.map @@ -0,0 +1 @@ +{"version":3,"file":"adminlte.js","sources":["../../src/ts/util/index.ts","../../src/ts/layout.ts","../../src/ts/card-widget.ts","../../src/ts/treeview.ts","../../src/ts/direct-chat.ts","../../src/ts/fullscreen.ts","../../src/ts/push-menu.ts","../../src/ts/accessibility.ts","../../src/ts/adminlte.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null],"names":["DATA_KEY","EVENT_KEY","EVENT_COLLAPSED","EVENT_EXPANDED","EVENT_MAXIMIZED","EVENT_MINIMIZED","Default","SELECTOR_DATA_TOGGLE"],"mappings":"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"} \ No newline at end of file diff --git a/extensions/pagetop-bootsier/assets/adminlte-4.0.0/js/adminlte.min.js b/extensions/pagetop-bootsier/assets/adminlte-4.0.0/js/adminlte.min.js new file mode 100644 index 00000000..9182ae35 --- /dev/null +++ b/extensions/pagetop-bootsier/assets/adminlte-4.0.0/js/adminlte.min.js @@ -0,0 +1,7 @@ +/*! + * AdminLTE v4.0.0 (https://adminlte.io) + * Copyright 2014-2026 Colorlib + * Licensed under MIT (https://github.com/ColorlibHQ/AdminLTE/blob/master/LICENSE) + */ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).adminlte={})}(this,function(e){"use strict";const t=[],n=e=>{"loading"===document.readyState?(t.length||document.addEventListener("DOMContentLoaded",()=>{for(const e of t)e()}),t.push(e)):e()},i=(e,t=500)=>{t<=1?e.style.display="none":(e.style.transitionProperty="height, margin, padding",e.style.transitionDuration=`${t}ms`,e.style.boxSizing="border-box",e.style.height=`${e.offsetHeight}px`,e.style.overflow="hidden",globalThis.setTimeout(()=>{e.style.height="0",e.style.paddingTop="0",e.style.paddingBottom="0",e.style.marginTop="0",e.style.marginBottom="0"},1),globalThis.setTimeout(()=>{e.style.display="none",e.style.removeProperty("height"),e.style.removeProperty("padding-top"),e.style.removeProperty("padding-bottom"),e.style.removeProperty("margin-top"),e.style.removeProperty("margin-bottom"),e.style.removeProperty("overflow"),e.style.removeProperty("transition-duration"),e.style.removeProperty("transition-property")},t))},o=(e,t=500)=>{e.style.removeProperty("display");let{display:n}=globalThis.getComputedStyle(e);if("none"===n&&(n="block"),e.style.display=n,t<=1)return;const i=e.offsetHeight;e.style.overflow="hidden",e.style.height="0",e.style.paddingTop="0",e.style.paddingBottom="0",e.style.marginTop="0",e.style.marginBottom="0",globalThis.setTimeout(()=>{e.style.boxSizing="border-box",e.style.transitionProperty="height, margin, padding",e.style.transitionDuration=`${t}ms`,e.style.height=`${i}px`,e.style.removeProperty("padding-top"),e.style.removeProperty("padding-bottom"),e.style.removeProperty("margin-top"),e.style.removeProperty("margin-bottom")},1),globalThis.setTimeout(()=>{e.style.removeProperty("height"),e.style.removeProperty("overflow"),e.style.removeProperty("transition-duration"),e.style.removeProperty("transition-property")},t)},s="hold-transition";class a{_element;_holdTransitionTimer;constructor(e){this._element=e,this._holdTransitionTimer=void 0}holdTransition(e=100){this._holdTransitionTimer&&clearTimeout(this._holdTransitionTimer),document.body.classList.add(s),this._holdTransitionTimer=setTimeout(()=>{document.body.classList.remove(s)},e)}}n(()=>{const e=new a(document.body);window.addEventListener("resize",()=>e.holdTransition(200)),setTimeout(()=>{document.body.classList.add("app-loaded")},400)});const r=".lte.card-widget",l=`collapsed${r}`,c=`expanded${r}`,d=`remove${r}`,u=`maximized${r}`,m=`minimized${r}`,h="card",p="collapsed-card",g="collapsing-card",v="expanding-card",y="was-collapsed",b="maximized-card",f='[data-lte-toggle="card-remove"]',E='[data-lte-toggle="card-collapse"]',S='[data-lte-toggle="card-maximize"]',_=`.${h}`,L=".card-body",A=".card-footer",w={animationSpeed:500,collapseTrigger:E,removeTrigger:f,maximizeTrigger:S};class x{_element;_parent;_clone;_config;constructor(e,t){this._element=e,this._parent=e.closest(_),e.classList.contains(h)&&(this._parent=e),this._config={...w,...t}}collapse(){const e=new Event(l);if(this._parent){this._parent.classList.add(g);const e=this._parent?.querySelectorAll(`:scope > ${L}, :scope > ${A}`);e.forEach(e=>{e instanceof HTMLElement&&i(e,this._config.animationSpeed)}),setTimeout(()=>{this._parent&&(this._parent.classList.add(p),this._parent.classList.remove(g))},this._config.animationSpeed)}this._element?.dispatchEvent(e)}expand(){const e=new Event(c);if(this._parent){this._parent.classList.add(v);const e=this._parent?.querySelectorAll(`:scope > ${L}, :scope > ${A}`);e.forEach(e=>{e instanceof HTMLElement&&o(e,this._config.animationSpeed)}),setTimeout(()=>{this._parent&&this._parent.classList.remove(p,v)},this._config.animationSpeed)}this._element?.dispatchEvent(e)}remove(){const e=new Event(d);this._parent&&i(this._parent,this._config.animationSpeed),this._element?.dispatchEvent(e)}toggle(){this._parent?.classList.contains(p)?this.expand():this.collapse()}maximize(){const e=new Event(u);this._parent&&(this._parent.style.height=`${this._parent.offsetHeight}px`,this._parent.style.width=`${this._parent.offsetWidth}px`,this._parent.style.transition="all .15s",setTimeout(()=>{const e=document.querySelector("html");e&&e.classList.add(b),this._parent&&(this._parent.classList.add(b),this._parent.classList.contains(p)&&this._parent.classList.add(y))},150)),this._element?.dispatchEvent(e)}minimize(){const e=new Event(m);this._parent&&(this._parent.style.height="auto",this._parent.style.width="auto",this._parent.style.transition="all .15s",setTimeout(()=>{const e=document.querySelector("html");e&&e.classList.remove(b),this._parent&&(this._parent.classList.remove(b),this._parent?.classList.contains(y)&&this._parent.classList.remove(y))},10)),this._element?.dispatchEvent(e)}toggleMaximize(){this._parent?.classList.contains(b)?this.minimize():this.maximize()}}n(()=>{document.querySelectorAll(E).forEach(e=>{e.addEventListener("click",e=>{e.preventDefault();const t=e.target;new x(t,w).toggle()})}),document.querySelectorAll(f).forEach(e=>{e.addEventListener("click",e=>{e.preventDefault();const t=e.target;new x(t,w).remove()})}),document.querySelectorAll(S).forEach(e=>{e.addEventListener("click",e=>{e.preventDefault();const t=e.target;new x(t,w).toggleMaximize()})})});const k=".lte.treeview",T=`expanded${k}`,q=`collapsed${k}`,M=`load${k}`,$="menu-open",P=".nav-item",N=".nav-treeview",R={animationSpeed:300,accordion:!0};class D{_element;_config;constructor(e,t){this._element=e,this._config={...R,...t}}open(){const e=new Event(T);if(this._config.accordion){const e=this._element.parentElement?.querySelectorAll(`${P}.${$}`);e?.forEach(e=>{if(e!==this._element.parentElement){e.classList.remove($);const t=e?.querySelector(N);t&&i(t,this._config.animationSpeed)}})}this._element.classList.add($);const t=this._element?.querySelector(N);t&&o(t,this._config.animationSpeed),this._element.dispatchEvent(e)}close(){const e=new Event(q);this._element.classList.remove($);const t=this._element?.querySelector(N);t&&i(t,this._config.animationSpeed),this._element.dispatchEvent(e)}toggle(){this._element.classList.contains($)?this.close():this.open()}}n(()=>{document.querySelectorAll(`${P}.${$}`).forEach(e=>{const t=e.querySelector(N);if(t){o(t,0);const n=new Event(M);e.dispatchEvent(n)}}),document.querySelectorAll('[data-lte-toggle="treeview"]').forEach(e=>{e.addEventListener("click",e=>{const t=e.target,n=t.closest(P),i=t.closest(".nav-link"),o=n?.querySelector(N),s=e.currentTarget;if(o&&("#"!==t?.getAttribute("href")&&"#"!==i?.getAttribute("href")||e.preventDefault(),n)){const e=s.dataset.accordion,t=s.dataset.animationSpeed,i={accordion:void 0===e?R.accordion:"true"===e,animationSpeed:void 0===t?R.animationSpeed:Number(t)};new D(n,i).toggle()}})})});const z=".lte.direct-chat",B=`expanded${z}`,F=`collapsed${z}`,C="direct-chat-contacts-open";class H{_element;constructor(e){this._element=e}toggle(){if(this._element.classList.contains(C)){const e=new Event(F);this._element.classList.remove(C),this._element.dispatchEvent(e)}else{const e=new Event(B);this._element.classList.add(C),this._element.dispatchEvent(e)}}}n(()=>{document.querySelectorAll('[data-lte-toggle="chat-pane"]').forEach(e=>{e.addEventListener("click",e=>{e.preventDefault();const t=e.target.closest(".direct-chat");t&&new H(t).toggle()})})});const O=".lte.fullscreen",I=`maximized${O}`,K=`minimized${O}`,W='[data-lte-toggle="fullscreen"]',j='[data-lte-icon="maximize"]',U='[data-lte-icon="minimize"]';class V{_element;_config;constructor(e,t){this._element=e,this._config=t}inFullScreen(){const e=new Event(I),t=document.querySelector(j),n=document.querySelector(U);document.documentElement.requestFullscreen(),t&&t.classList.add("d-none"),n&&n.classList.remove("d-none"),this._element.dispatchEvent(e)}outFullscreen(){const e=new Event(K),t=document.querySelector(j),n=document.querySelector(U);document.exitFullscreen(),t&&t.classList.remove("d-none"),n&&n.classList.add("d-none"),this._element.dispatchEvent(e)}toggleFullScreen(){document.fullscreenEnabled&&(document.fullscreenElement?this.outFullscreen():this.inFullScreen())}}n(()=>{document.querySelectorAll(W).forEach(e=>{e.addEventListener("click",e=>{e.preventDefault();const t=e.target.closest(W);t&&new V(t,void 0).toggleFullScreen()})})});const G=".lte.push-menu",J=`open${G}`,Q=`collapse${G}`,X="sidebar-collapse",Y="sidebar-open",Z='[data-lte-toggle="sidebar"]',ee="lte.sidebar.state",te={sidebarBreakpoint:992,enablePersistence:!1};class ne{_element;_config;constructor(e,t){this._element=e,this._config={...te,...t}}isCollapsed(){return document.body.classList.contains(X)}isExplicitlyOpen(){return document.body.classList.contains(Y)}isMiniMode(){return document.body.classList.contains("sidebar-mini")}isMobileSize(){return globalThis.innerWidth<=this._config.sidebarBreakpoint}expand(){document.body.classList.remove(X),this.isMobileSize()&&document.body.classList.add(Y),this._element.dispatchEvent(new Event(J))}collapse(){document.body.classList.remove(Y),document.body.classList.add(X),this._element.dispatchEvent(new Event(Q))}toggle(){const e=this.isCollapsed();e?this.expand():this.collapse(),this._config.enablePersistence&&this.saveSidebarState(e?Y:X)}setupSidebarBreakPoint(){const e=document.querySelector('[class*="sidebar-expand"]');if(!e)return;const t=globalThis.getComputedStyle(e,"::before").getPropertyValue("content");if(!t||"none"===t)return;const n=Number(t.replace(/[^\d.-]/g,""));Number.isNaN(n)||(this._config={...this._config,sidebarBreakpoint:n})}updateStateByResponsiveLogic(){this.isMobileSize()?this.isExplicitlyOpen()||this.collapse():this.isMiniMode()&&this.isCollapsed()||this.expand()}saveSidebarState(e){if(void 0!==globalThis.localStorage)try{localStorage.setItem(ee,e)}catch{}}loadSidebarState(){if(void 0!==globalThis.localStorage)try{const e=localStorage.getItem(ee);e===X?this.collapse():e===Y?this.expand():this.updateStateByResponsiveLogic()}catch{this.updateStateByResponsiveLogic()}}clearSidebarState(){if(void 0!==globalThis.localStorage)try{localStorage.removeItem(ee)}catch{}}init(){this.setupSidebarBreakPoint(),this._config.enablePersistence||this.clearSidebarState(),this._config.enablePersistence&&!this.isMobileSize()?this.loadSidebarState():this.updateStateByResponsiveLogic()}}n(()=>{const e=document?.querySelector(".app-sidebar");if(!e)return;const t=e.dataset.sidebarBreakpoint,n=e.dataset.enablePersistence,i={sidebarBreakpoint:void 0===t?te.sidebarBreakpoint:Number(t),enablePersistence:void 0===n?te.enablePersistence:"true"===n},o=new ne(e,i);o.init(),window.addEventListener("resize",()=>{o.setupSidebarBreakPoint(),o.updateStateByResponsiveLogic()});const s=document.createElement("div");s.className="sidebar-overlay",document.querySelector(".app-wrapper")?.append(s);let a=!1;s.addEventListener("touchstart",()=>{a=!1},{passive:!0}),s.addEventListener("touchmove",()=>{a=!0},{passive:!0}),s.addEventListener("touchend",e=>{a||(e.preventDefault(),o.collapse()),a=!1},{passive:!1}),s.addEventListener("click",e=>{e.preventDefault(),o.collapse()}),document.querySelectorAll(Z).forEach(e=>{e.addEventListener("click",e=>{e.preventDefault();let t=e.currentTarget;"sidebar"!==t?.dataset.lteToggle&&(t=t?.closest(Z)),t&&(e?.preventDefault(),o.toggle())})})});class ie{config;liveRegion=null;focusHistory=[];constructor(e={}){this.config={announcements:!0,skipLinks:!0,focusManagement:!0,keyboardNavigation:!0,reducedMotion:!0,...e},this.init()}init(){this.config.announcements&&this.createLiveRegion(),this.config.skipLinks&&this.addSkipLinks(),this.config.focusManagement&&this.initFocusManagement(),this.config.keyboardNavigation&&this.initKeyboardNavigation(),this.config.reducedMotion&&this.respectReducedMotion(),this.initErrorAnnouncements(),this.initTableAccessibility(),this.initFormAccessibility()}createLiveRegion(){this.liveRegion||(this.liveRegion=document.createElement("div"),this.liveRegion.id="live-region",this.liveRegion.className="live-region",this.liveRegion.setAttribute("aria-live","polite"),this.liveRegion.setAttribute("aria-atomic","true"),this.liveRegion.setAttribute("role","status"),document.body.append(this.liveRegion))}addSkipLinks(){const e=document.createElement("div");e.className="skip-links";const t=document.createElement("a");t.href="#main",t.className="skip-link",t.textContent="Skip to main content";const n=document.createElement("a");n.href="#navigation",n.className="skip-link",n.textContent="Skip to navigation",e.append(t),e.append(n),document.body.insertBefore(e,document.body.firstChild),this.ensureSkipTargets()}ensureSkipTargets(){const e=document.querySelector('#main, main, [role="main"]');e&&!e.id&&(e.id="main"),e&&!e.hasAttribute("tabindex")&&e.setAttribute("tabindex","-1");const t=document.querySelector('#navigation, nav, [role="navigation"]');t&&!t.id&&(t.id="navigation"),t&&!t.hasAttribute("tabindex")&&t.setAttribute("tabindex","-1")}initFocusManagement(){document.addEventListener("keydown",e=>{"Tab"===e.key&&this.handleTabNavigation(e),"Escape"===e.key&&this.handleEscapeKey(e)}),this.initModalFocusManagement(),this.initDropdownFocusManagement()}handleTabNavigation(e){const t=this.getFocusableElements(),n=t.indexOf(document.activeElement);e.shiftKey?n<=0&&(e.preventDefault(),t.at(-1)?.focus()):n>=t.length-1&&(e.preventDefault(),t[0]?.focus())}getFocusableElements(){const e=["a[href]","button:not([disabled])","input:not([disabled])","select:not([disabled])","textarea:not([disabled])",'[tabindex]:not([tabindex="-1"])','[contenteditable="true"]'].join(", ");return Array.from(document.querySelectorAll(e))}handleEscapeKey(e){if(!document.querySelector(".modal.show")&&document.querySelector(".dropdown-menu.show")){const t=document.querySelector('[data-bs-toggle="dropdown"][aria-expanded="true"]');t?.click(),e.preventDefault()}}initKeyboardNavigation(){document.addEventListener("keydown",e=>{const t=e.target;t.closest(".nav, .navbar-nav, .dropdown-menu")&&this.handleMenuNavigation(e),"Enter"!==e.key&&" "!==e.key||!t.hasAttribute("role")||"button"!==t.getAttribute("role")||t.matches('button, input[type="button"], input[type="submit"]')||(e.preventDefault(),t.click())})}handleMenuNavigation(e){if(!["ArrowUp","ArrowDown","ArrowLeft","ArrowRight","Home","End"].includes(e.key))return;const t=e.target,n=Array.from(t.closest(".nav, .navbar-nav, .dropdown-menu")?.querySelectorAll("a, button")||[]),i=n.indexOf(t);let o;switch(e.key){case"ArrowDown":case"ArrowRight":o=i0?i-1:n.length-1;break;case"Home":o=0;break;case"End":o=n.length-1;break;default:return}e.preventDefault(),n[o]?.focus()}respectReducedMotion(){if(globalThis.matchMedia("(prefers-reduced-motion: reduce)").matches){document.body.classList.add("reduce-motion"),document.documentElement.style.scrollBehavior="auto";const e=document.createElement("style");e.textContent="\n *, *::before, *::after {\n animation-duration: 0.01ms !important;\n animation-iteration-count: 1 !important;\n transition-duration: 0.01ms !important;\n }\n ",document.head.append(e)}}initErrorAnnouncements(){new MutationObserver(e=>{e.forEach(e=>{e.addedNodes.forEach(e=>{if(e.nodeType===Node.ELEMENT_NODE){const t=e;t.matches(".alert-danger, .invalid-feedback, .error")&&this.announce(t.textContent||"Error occurred","assertive"),t.matches(".alert-success, .success")&&this.announce(t.textContent||"Success","polite")}})})}).observe(document.body,{childList:!0,subtree:!0})}initTableAccessibility(){document.querySelectorAll("table").forEach(e=>{if(e.hasAttribute("role")||e.setAttribute("role","table"),e.querySelectorAll("th").forEach(e=>{if(!e.hasAttribute("scope")){const t=e.closest("thead"),n=0===e.cellIndex;t?e.setAttribute("scope","col"):n&&e.setAttribute("scope","row")}}),!e.querySelector("caption")&&e.hasAttribute("title")){const t=document.createElement("caption");t.textContent=e.getAttribute("title")||"",e.insertBefore(t,e.firstChild)}})}initFormAccessibility(){document.querySelectorAll("input, select, textarea").forEach(e=>{const t=e;if(!t.labels?.length&&!t.hasAttribute("aria-label")&&!t.hasAttribute("aria-labelledby")){const e=t.getAttribute("placeholder");e&&t.setAttribute("aria-label",e)}if(t.hasAttribute("required")){const e=t.labels?.[0];if(e&&!e.querySelector(".required-indicator")){const t=document.createElement("span");t.className="required-indicator sr-only",t.textContent=" (required)",e.append(t)}}t.classList.contains("disable-adminlte-validations")||t.addEventListener("invalid",()=>{this.handleFormError(t)})})}handleFormError(e){const t=`${e.id||e.name}-error`;let n=document.getElementById(t);n||(n=document.createElement("div"),n.id=t,n.className="invalid-feedback",n.setAttribute("role","alert"),e.parentNode?.append(n)),n.textContent=e.validationMessage,e.setAttribute("aria-describedby",t),e.classList.add("is-invalid"),this.announce(`Error in ${e.labels?.[0]?.textContent||e.name}: ${e.validationMessage}`,"assertive")}initModalFocusManagement(){document.addEventListener("shown.bs.modal",e=>{const t=e.target.querySelectorAll('button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])');t.length>0&&t[0].focus(),this.focusHistory.push(document.activeElement)}),document.addEventListener("hidden.bs.modal",()=>{const e=this.focusHistory.pop();e&&e.focus()})}initDropdownFocusManagement(){document.addEventListener("shown.bs.dropdown",e=>{const t=e.target.querySelector(".dropdown-menu"),n=t?.querySelector("a, button");n&&n.focus()})}announce(e,t="polite"){this.liveRegion||this.createLiveRegion(),this.liveRegion&&(this.liveRegion.setAttribute("aria-live",t),this.liveRegion.textContent=e,setTimeout(()=>{this.liveRegion&&(this.liveRegion.textContent="")},1e3))}focusElement(e){const t=document.querySelector(e);t&&(t.focus(),t.scrollIntoView({behavior:"smooth",block:"center"}))}trapFocus(e){const t=e.querySelectorAll('button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])'),n=Array.from(t),i=n[0],o=n.at(-1);e.addEventListener("keydown",e=>{"Tab"===e.key&&(e.shiftKey?document.activeElement===i&&(o?.focus(),e.preventDefault()):document.activeElement===o&&(i.focus(),e.preventDefault()))})}addLandmarks(){if(!document.querySelector("main")){const e=document.querySelector(".app-main");e&&(e.setAttribute("role","main"),e.id="main")}document.querySelectorAll(".navbar-nav, .nav").forEach((e,t)=>{e.hasAttribute("role")||e.setAttribute("role","navigation"),e.hasAttribute("aria-label")||e.setAttribute("aria-label",`Navigation ${t+1}`)});const e=document.querySelector('form[role="search"], .navbar-search');e&&!e.hasAttribute("role")&&e.setAttribute("role","search")}}const oe=e=>new ie(e);n(()=>{oe({announcements:!0,skipLinks:!0,focusManagement:!0,keyboardNavigation:!0,reducedMotion:!0}).addLandmarks()}),e.CardWidget=x,e.DirectChat=H,e.FullScreen=V,e.Layout=a,e.PushMenu=ne,e.Treeview=D,e.initAccessibility=oe}); +//# sourceMappingURL=adminlte.min.js.map \ No newline at end of file diff --git a/extensions/pagetop-bootsier/assets/adminlte-4.0.0/js/adminlte.min.js.map b/extensions/pagetop-bootsier/assets/adminlte-4.0.0/js/adminlte.min.js.map new file mode 100644 index 00000000..8d1f43a3 --- /dev/null +++ b/extensions/pagetop-bootsier/assets/adminlte-4.0.0/js/adminlte.min.js.map @@ -0,0 +1 @@ +{"version":3,"names":["domContentLoadedCallbacks","onDOMContentLoaded","callback","document","readyState","length","addEventListener","push","slideUp","target","duration","style","display","transitionProperty","transitionDuration","boxSizing","height","offsetHeight","overflow","globalThis","setTimeout","paddingTop","paddingBottom","marginTop","marginBottom","removeProperty","slideDown","getComputedStyle","CLASS_NAME_HOLD_TRANSITIONS","Layout","_element","_holdTransitionTimer","constructor","element","this","undefined","holdTransition","time","clearTimeout","body","classList","add","remove","layout","window","EVENT_KEY","EVENT_COLLAPSED","EVENT_EXPANDED","EVENT_REMOVE","EVENT_MAXIMIZED","EVENT_MINIMIZED","CLASS_NAME_CARD","CLASS_NAME_COLLAPSED","CLASS_NAME_COLLAPSING","CLASS_NAME_EXPANDING","CLASS_NAME_WAS_COLLAPSED","CLASS_NAME_MAXIMIZED","SELECTOR_DATA_REMOVE","SELECTOR_DATA_COLLAPSE","SELECTOR_DATA_MAXIMIZE","SELECTOR_CARD","SELECTOR_CARD_BODY","SELECTOR_CARD_FOOTER","Default","animationSpeed","collapseTrigger","removeTrigger","maximizeTrigger","CardWidget","_parent","_clone","_config","config","closest","contains","collapse","event","Event","elm","querySelectorAll","forEach","el","HTMLElement","dispatchEvent","expand","toggle","maximize","width","offsetWidth","transition","htmlTag","querySelector","minimize","toggleMaximize","btn","preventDefault","EVENT_LOAD_DATA_API","CLASS_NAME_MENU_OPEN","SELECTOR_NAV_ITEM","SELECTOR_TREEVIEW_MENU","accordion","Treeview","open","openMenuList","parentElement","openMenu","childElement","close","menuItem","targetItem","targetLink","targetTreeviewMenu","lteToggleElement","currentTarget","getAttribute","accordionAttr","dataset","animationSpeedAttr","Number","CLASS_NAME_DIRECT_CHAT_OPEN","DirectChat","chatPane","SELECTOR_FULLSCREEN_TOGGLE","SELECTOR_MAXIMIZE_ICON","SELECTOR_MINIMIZE_ICON","FullScreen","inFullScreen","iconMaximize","iconMinimize","documentElement","requestFullscreen","outFullscreen","exitFullscreen","toggleFullScreen","fullscreenEnabled","fullscreenElement","button","EVENT_OPEN","EVENT_COLLAPSE","CLASS_NAME_SIDEBAR_COLLAPSE","CLASS_NAME_SIDEBAR_OPEN","SELECTOR_SIDEBAR_TOGGLE","STORAGE_KEY_SIDEBAR_STATE","Defaults","sidebarBreakpoint","enablePersistence","PushMenu","isCollapsed","isExplicitlyOpen","isMiniMode","isMobileSize","innerWidth","saveSidebarState","setupSidebarBreakPoint","sidebarExpand","content","getPropertyValue","breakpointValue","replace","isNaN","updateStateByResponsiveLogic","state","localStorage","setItem","loadSidebarState","storedState","getItem","clearSidebarState","removeItem","init","sidebar","sidebarBreakpointAttr","enablePersistenceAttr","pushMenu","sidebarOverlay","createElement","className","append","overlayTouchMoved","passive","lteToggle","AccessibilityManager","liveRegion","focusHistory","announcements","skipLinks","focusManagement","keyboardNavigation","reducedMotion","createLiveRegion","addSkipLinks","initFocusManagement","initKeyboardNavigation","respectReducedMotion","initErrorAnnouncements","initTableAccessibility","initFormAccessibility","id","setAttribute","skipLinksContainer","skipToMain","href","textContent","skipToNav","insertBefore","firstChild","ensureSkipTargets","main","hasAttribute","nav","key","handleTabNavigation","handleEscapeKey","initModalFocusManagement","initDropdownFocusManagement","focusableElements","getFocusableElements","currentIndex","indexOf","activeElement","shiftKey","at","focus","selector","join","Array","from","toggleButton","click","handleMenuNavigation","matches","includes","currentElement","menuItems","nextIndex","matchMedia","scrollBehavior","head","MutationObserver","mutations","mutation","addedNodes","node","nodeType","Node","ELEMENT_NODE","announce","observe","childList","subtree","table","th","isInThead","isFirstColumn","cellIndex","caption","input","htmlInput","labels","placeholder","label","indicator","handleFormError","errorId","name","errorElement","getElementById","parentNode","validationMessage","previousElement","pop","menu","firstItem","message","priority","focusElement","scrollIntoView","behavior","block","trapFocus","container","focusableArray","firstElement","lastElement","addLandmarks","appMain","index","searchForm","initAccessibility"],"sources":["../../src/ts/util/index.ts","../../src/ts/layout.ts","../../src/ts/card-widget.ts","../../src/ts/treeview.ts","../../src/ts/direct-chat.ts","../../src/ts/fullscreen.ts","../../src/ts/push-menu.ts","../../src/ts/accessibility.ts","../../src/ts/adminlte.ts"],"mappings":";;;;;+OAAA,MAAMA,EAA+C,GAE/CC,EAAsBC,IACE,YAAxBC,SAASC,YAENJ,EAA0BK,QAC7BF,SAASG,iBAAiB,mBAAoB,KAC5C,IAAK,MAAMJ,KAAYF,EACrBE,MAKNF,EAA0BO,KAAKL,IAE/BA,KAkCEM,EAAU,CAACC,EAAqBC,EAAW,OAC3CA,GAAY,EACdD,EAAOE,MAAMC,QAAU,QAIzBH,EAAOE,MAAME,mBAAqB,0BAClCJ,EAAOE,MAAMG,mBAAqB,GAAGJ,MACrCD,EAAOE,MAAMI,UAAY,aACzBN,EAAOE,MAAMK,OAAS,GAAGP,EAAOQ,iBAChCR,EAAOE,MAAMO,SAAW,SAExBC,WAAWC,WAAW,KACpBX,EAAOE,MAAMK,OAAS,IACtBP,EAAOE,MAAMU,WAAa,IAC1BZ,EAAOE,MAAMW,cAAgB,IAC7Bb,EAAOE,MAAMY,UAAY,IACzBd,EAAOE,MAAMa,aAAe,KAC3B,GAEHL,WAAWC,WAAW,KACpBX,EAAOE,MAAMC,QAAU,OACvBH,EAAOE,MAAMc,eAAe,UAC5BhB,EAAOE,MAAMc,eAAe,eAC5BhB,EAAOE,MAAMc,eAAe,kBAC5BhB,EAAOE,MAAMc,eAAe,cAC5BhB,EAAOE,MAAMc,eAAe,iBAC5BhB,EAAOE,MAAMc,eAAe,YAC5BhB,EAAOE,MAAMc,eAAe,uBAC5BhB,EAAOE,MAAMc,eAAe,wBAC3Bf,KAICgB,EAAY,CAACjB,EAAqBC,EAAW,OACjDD,EAAOE,MAAMc,eAAe,WAC5B,IAAIb,QAAEA,GAAYO,WAAWQ,iBAAiBlB,GAQ9C,GANgB,SAAZG,IACFA,EAAU,SAGZH,EAAOE,MAAMC,QAAUA,EAEnBF,GAAY,EACd,OAGF,MAAMM,EAASP,EAAOQ,aACtBR,EAAOE,MAAMO,SAAW,SACxBT,EAAOE,MAAMK,OAAS,IACtBP,EAAOE,MAAMU,WAAa,IAC1BZ,EAAOE,MAAMW,cAAgB,IAC7Bb,EAAOE,MAAMY,UAAY,IACzBd,EAAOE,MAAMa,aAAe,IAE5BL,WAAWC,WAAW,KACpBX,EAAOE,MAAMI,UAAY,aACzBN,EAAOE,MAAME,mBAAqB,0BAClCJ,EAAOE,MAAMG,mBAAqB,GAAGJ,MACrCD,EAAOE,MAAMK,OAAS,GAAGA,MACzBP,EAAOE,MAAMc,eAAe,eAC5BhB,EAAOE,MAAMc,eAAe,kBAC5BhB,EAAOE,MAAMc,eAAe,cAC5BhB,EAAOE,MAAMc,eAAe,kBAC3B,GAEHN,WAAWC,WAAW,KACpBX,EAAOE,MAAMc,eAAe,UAC5BhB,EAAOE,MAAMc,eAAe,YAC5BhB,EAAOE,MAAMc,eAAe,uBAC5BhB,EAAOE,MAAMc,eAAe,wBAC3Bf,ICvGCkB,EAA8B,kBASpC,MAAMC,EACJC,SACAC,qBAEA,WAAAC,CAAYC,GACVC,KAAKJ,SAAWG,EAChBC,KAAKH,0BAAuBI,CAC9B,CASA,cAAAC,CAAeC,EAAe,KACxBH,KAAKH,sBACPO,aAAaJ,KAAKH,sBAGpB5B,SAASoC,KAAKC,UAAUC,IAAIb,GAE5BM,KAAKH,qBAAuBX,WAAW,KACrCjB,SAASoC,KAAKC,UAAUE,OAAOd,IAC9BS,EACL,EASFpC,EAAmB,KACjB,MAAM0C,EAAS,IAAId,EAAO1B,SAASoC,MACnCK,OAAOtC,iBAAiB,SAAU,IAAMqC,EAAOP,eAAe,MAE9DhB,WAAW,KACTjB,SAASoC,KAAKC,UAAUC,IAhDE,eAiDzB,OCjDL,MACMI,EAAY,mBACZC,EAAkB,YAAYD,IAC9BE,EAAiB,WAAWF,IAC5BG,EAAe,SAASH,IACxBI,EAAkB,YAAYJ,IAC9BK,EAAkB,YAAYL,IAE9BM,EAAkB,OAClBC,EAAuB,iBACvBC,EAAwB,kBACxBC,EAAuB,iBACvBC,EAA2B,gBAC3BC,EAAuB,iBAEvBC,EAAuB,kCACvBC,EAAyB,oCACzBC,EAAyB,oCACzBC,EAAgB,IAAIT,IACpBU,EAAqB,aACrBC,EAAuB,eASvBC,EAAkB,CACtBC,eAAgB,IAChBC,gBAAiBP,EACjBQ,cAAeT,EACfU,gBAAiBR,GAGnB,MAAMS,EACJtC,SACAuC,QACAC,OACAC,QAEA,WAAAvC,CAAYC,EAAsBuC,GAChCtC,KAAKJ,SAAWG,EAChBC,KAAKmC,QAAUpC,EAAQwC,QAAQb,GAE3B3B,EAAQO,UAAUkC,SAASvB,KAC7BjB,KAAKmC,QAAUpC,GAGjBC,KAAKqC,QAAU,IAAKR,KAAYS,EAClC,CAEA,QAAAG,GACE,MAAMC,EAAQ,IAAIC,MAAM/B,GAExB,GAAIZ,KAAKmC,QAAS,CAChBnC,KAAKmC,QAAQ7B,UAAUC,IAAIY,GAG3B,MAAMyB,EAAM5C,KAAKmC,SAASU,iBAAiB,YAAYlB,eAAgCC,KAEvFgB,EAAIE,QAAQC,IACNA,aAAcC,aAChB1E,EAAQyE,EAAI/C,KAAKqC,QAAQP,kBAI7B5C,WAAW,KACLc,KAAKmC,UACPnC,KAAKmC,QAAQ7B,UAAUC,IAAIW,GAC3BlB,KAAKmC,QAAQ7B,UAAUE,OAAOW,KAE/BnB,KAAKqC,QAAQP,eAClB,CAEA9B,KAAKJ,UAAUqD,cAAcP,EAC/B,CAEA,MAAAQ,GACE,MAAMR,EAAQ,IAAIC,MAAM9B,GAExB,GAAIb,KAAKmC,QAAS,CAChBnC,KAAKmC,QAAQ7B,UAAUC,IAAIa,GAG3B,MAAMwB,EAAM5C,KAAKmC,SAASU,iBAAiB,YAAYlB,eAAgCC,KAEvFgB,EAAIE,QAAQC,IACNA,aAAcC,aAChBxD,EAAUuD,EAAI/C,KAAKqC,QAAQP,kBAI/B5C,WAAW,KACLc,KAAKmC,SACPnC,KAAKmC,QAAQ7B,UAAUE,OAAOU,EAAsBE,IAErDpB,KAAKqC,QAAQP,eAClB,CAEA9B,KAAKJ,UAAUqD,cAAcP,EAC/B,CAEA,MAAAlC,GACE,MAAMkC,EAAQ,IAAIC,MAAM7B,GAEpBd,KAAKmC,SACP7D,EAAQ0B,KAAKmC,QAASnC,KAAKqC,QAAQP,gBAGrC9B,KAAKJ,UAAUqD,cAAcP,EAC/B,CAEA,MAAAS,GACMnD,KAAKmC,SAAS7B,UAAUkC,SAAStB,GACnClB,KAAKkD,SAIPlD,KAAKyC,UACP,CAEA,QAAAW,GACE,MAAMV,EAAQ,IAAIC,MAAM5B,GAEpBf,KAAKmC,UACPnC,KAAKmC,QAAQ1D,MAAMK,OAAS,GAAGkB,KAAKmC,QAAQpD,iBAC5CiB,KAAKmC,QAAQ1D,MAAM4E,MAAQ,GAAGrD,KAAKmC,QAAQmB,gBAC3CtD,KAAKmC,QAAQ1D,MAAM8E,WAAa,WAEhCrE,WAAW,KACT,MAAMsE,EAAUvF,SAASwF,cAAc,QAEnCD,GACFA,EAAQlD,UAAUC,IAAIe,GAGpBtB,KAAKmC,UACPnC,KAAKmC,QAAQ7B,UAAUC,IAAIe,GAEvBtB,KAAKmC,QAAQ7B,UAAUkC,SAAStB,IAClClB,KAAKmC,QAAQ7B,UAAUC,IAAIc,KAG9B,MAGLrB,KAAKJ,UAAUqD,cAAcP,EAC/B,CAEA,QAAAgB,GACE,MAAMhB,EAAQ,IAAIC,MAAM3B,GAEpBhB,KAAKmC,UACPnC,KAAKmC,QAAQ1D,MAAMK,OAAS,OAC5BkB,KAAKmC,QAAQ1D,MAAM4E,MAAQ,OAC3BrD,KAAKmC,QAAQ1D,MAAM8E,WAAa,WAEhCrE,WAAW,KACT,MAAMsE,EAAUvF,SAASwF,cAAc,QAEnCD,GACFA,EAAQlD,UAAUE,OAAOc,GAGvBtB,KAAKmC,UACPnC,KAAKmC,QAAQ7B,UAAUE,OAAOc,GAE1BtB,KAAKmC,SAAS7B,UAAUkC,SAASnB,IACnCrB,KAAKmC,QAAQ7B,UAAUE,OAAOa,KAGjC,KAGLrB,KAAKJ,UAAUqD,cAAcP,EAC/B,CAEA,cAAAiB,GACM3D,KAAKmC,SAAS7B,UAAUkC,SAASlB,GACnCtB,KAAK0D,WAIP1D,KAAKoD,UACP,EASFrF,EAAmB,KACGE,SAAS4E,iBAAiBrB,GAElCsB,QAAQc,IAClBA,EAAIxF,iBAAiB,QAASsE,IAC5BA,EAAMmB,iBACN,MAAMtF,EAASmE,EAAMnE,OACR,IAAI2D,EAAW3D,EAAQsD,GAC/BsB,aAISlF,SAAS4E,iBAAiBtB,GAElCuB,QAAQc,IAChBA,EAAIxF,iBAAiB,QAASsE,IAC5BA,EAAMmB,iBACN,MAAMtF,EAASmE,EAAMnE,OACR,IAAI2D,EAAW3D,EAAQsD,GAC/BrB,aAIMvC,SAAS4E,iBAAiBpB,GAElCqB,QAAQc,IACbA,EAAIxF,iBAAiB,QAASsE,IAC5BA,EAAMmB,iBACN,MAAMtF,EAASmE,EAAMnE,OACR,IAAI2D,EAAW3D,EAAQsD,GAC/B8B,uBC/NX,MACMhD,EAAY,gBAEZE,EAAiB,WAAWF,IAC5BC,EAAkB,YAAYD,IAC9BmD,EAAsB,OAAOnD,IAE7BoD,EAAuB,YACvBC,EAAoB,YAEpBC,EAAyB,gBAGzBpC,EAAU,CACdC,eAAgB,IAChBoC,WAAW,GAab,MAAMC,EACJvE,SACAyC,QAEA,WAAAvC,CAAYC,EAAsBuC,GAChCtC,KAAKJ,SAAWG,EAChBC,KAAKqC,QAAU,IAAKR,KAAYS,EAClC,CAEA,IAAA8B,GACE,MAAM1B,EAAQ,IAAIC,MAAM9B,GAExB,GAAIb,KAAKqC,QAAQ6B,UAAW,CAC1B,MAAMG,EAAerE,KAAKJ,SAAS0E,eAAezB,iBAAiB,GAAGmB,KAAqBD,KAE3FM,GAAcvB,QAAQyB,IACpB,GAAIA,IAAavE,KAAKJ,SAAS0E,cAAe,CAC5CC,EAASjE,UAAUE,OAAOuD,GAC1B,MAAMS,EAAeD,GAAUd,cAAcQ,GACzCO,GACFlG,EAAQkG,EAAcxE,KAAKqC,QAAQP,eAEvC,GAEJ,CAEA9B,KAAKJ,SAASU,UAAUC,IAAIwD,GAE5B,MAAMS,EAAexE,KAAKJ,UAAU6D,cAAcQ,GAC9CO,GACFhF,EAAUgF,EAAcxE,KAAKqC,QAAQP,gBAGvC9B,KAAKJ,SAASqD,cAAcP,EAC9B,CAEA,KAAA+B,GACE,MAAM/B,EAAQ,IAAIC,MAAM/B,GAExBZ,KAAKJ,SAASU,UAAUE,OAAOuD,GAE/B,MAAMS,EAAexE,KAAKJ,UAAU6D,cAAcQ,GAC9CO,GACFlG,EAAQkG,EAAcxE,KAAKqC,QAAQP,gBAGrC9B,KAAKJ,SAASqD,cAAcP,EAC9B,CAEA,MAAAS,GACMnD,KAAKJ,SAASU,UAAUkC,SAASuB,GACnC/D,KAAKyE,QAELzE,KAAKoE,MAET,EASFrG,EAAmB,KACKE,SAAS4E,iBAAiB,GAAGmB,KAAqBD,KAE1DjB,QAAQ4B,IACpB,MAAMF,EAAeE,EAASjB,cAAcQ,GAC5C,GAAIO,EAAc,CAChBhF,EAAUgF,EAAc,GAExB,MAAM9B,EAAQ,IAAIC,MAAMmB,GACxBY,EAASzB,cAAcP,EACzB,IAGazE,SAAS4E,iBA9FG,gCAgGpBC,QAAQc,IACbA,EAAIxF,iBAAiB,QAASsE,IAC5B,MAAMnE,EAASmE,EAAMnE,OACfoG,EAAapG,EAAOgE,QAAQyB,GAC5BY,EAAarG,EAAOgE,QAtGN,aAuGdsC,EAAqBF,GAAYlB,cAAcQ,GAC/Ca,EAAmBpC,EAAMqC,cAG/B,GAAKF,IAIgC,MAAjCtG,GAAQyG,aAAa,SAAwD,MAArCJ,GAAYI,aAAa,SACnEtC,EAAMmB,iBAGJc,GAAY,CAEd,MAAMM,EAAgBH,EAAiBI,QAAQhB,UACzCiB,EAAqBL,EAAiBI,QAAQpD,eAG9CQ,EAAiB,CACrB4B,eAA6BjE,IAAlBgF,EAA8BpD,EAAQqC,UAA8B,SAAlBe,EAC7DnD,oBAAuC7B,IAAvBkF,EAAmCtD,EAAQC,eAAiBsD,OAAOD,IAGxE,IAAIhB,EAASQ,EAAYrC,GACjCa,QACP,QC7IN,MACMxC,EAAY,mBACZE,EAAiB,WAAWF,IAC5BC,EAAkB,YAAYD,IAK9B0E,EAA8B,4BAOpC,MAAMC,EACJ1F,SACA,WAAAE,CAAYC,GACVC,KAAKJ,SAAWG,CAClB,CAEA,MAAAoD,GACE,GAAInD,KAAKJ,SAASU,UAAUkC,SAAS6C,GAA8B,CACjE,MAAM3C,EAAQ,IAAIC,MAAM/B,GAExBZ,KAAKJ,SAASU,UAAUE,OAAO6E,GAE/BrF,KAAKJ,SAASqD,cAAcP,EAC9B,KAAO,CACL,MAAMA,EAAQ,IAAIC,MAAM9B,GAExBb,KAAKJ,SAASU,UAAUC,IAAI8E,GAE5BrF,KAAKJ,SAASqD,cAAcP,EAC9B,CACF,EASF3E,EAAmB,KACFE,SAAS4E,iBAxCG,iCA0CpBC,QAAQc,IACbA,EAAIxF,iBAAiB,QAASsE,IAC5BA,EAAMmB,iBACN,MACM0B,EADS7C,EAAMnE,OACGgE,QA7CD,gBA+CnBgD,GACW,IAAID,EAAWC,GACvBpC,eCxDb,MACMxC,EAAY,kBACZI,EAAkB,YAAYJ,IAC9BK,EAAkB,YAAYL,IAE9B6E,EAA6B,iCAC7BC,EAAyB,6BACzBC,EAAyB,6BAM/B,MAAMC,EACJ/F,SACAyC,QAEA,WAAAvC,CAAYC,EAAsBuC,GAChCtC,KAAKJ,SAAWG,EAChBC,KAAKqC,QAAUC,CACjB,CAEA,YAAAsD,GACE,MAAMlD,EAAQ,IAAIC,MAAM5B,GAElB8E,EAAe5H,SAASwF,cAA2BgC,GACnDK,EAAe7H,SAASwF,cAA2BiC,GAEpDzH,SAAS8H,gBAAgBC,oBAM1BH,GACFA,EAAavF,UAAUC,IAAI,UAGzBuF,GACFA,EAAaxF,UAAUE,OAAO,UAGhCR,KAAKJ,SAASqD,cAAcP,EAC9B,CAEA,aAAAuD,GACE,MAAMvD,EAAQ,IAAIC,MAAM3B,GAElB6E,EAAe5H,SAASwF,cAA2BgC,GACnDK,EAAe7H,SAASwF,cAA2BiC,GAEpDzH,SAASiI,iBAEVL,GACFA,EAAavF,UAAUE,OAAO,UAG5BsF,GACFA,EAAaxF,UAAUC,IAAI,UAG7BP,KAAKJ,SAASqD,cAAcP,EAC9B,CAEA,gBAAAyD,GACMlI,SAASmI,oBACPnI,SAASoI,kBACXrG,KAAKiG,gBAELjG,KAAK4F,eAGX,EAOF7H,EAAmB,KACDE,SAAS4E,iBAAiB2C,GAElC1C,QAAQc,IACdA,EAAIxF,iBAAiB,QAASsE,IAC5BA,EAAMmB,iBAEN,MACMyC,EADS5D,EAAMnE,OACCgE,QAAQiD,GAE1Bc,GACW,IAAIX,EAAWW,OAAQrG,GAC/BkG,yBCzFb,MACMxF,EAAY,iBACZ4F,EAAa,OAAO5F,IACpB6F,EAAiB,WAAW7F,IAS5B8F,EAA8B,mBAC9BC,EAA0B,eAK1BC,EAA0B,8BAE1BC,GAA4B,oBAkB5BC,GAAmB,CACvBC,kBAAmB,IACnBC,mBAAmB,GASrB,MAAMC,GACJpH,SACAyC,QAEA,WAAAvC,CAAYC,EAAsBuC,GAChCtC,KAAKJ,SAAWG,EAChBC,KAAKqC,QAAU,IAAKwE,MAAavE,EACnC,CAOA,WAAA2E,GACE,OAAOhJ,SAASoC,KAAKC,UAAUkC,SAASiE,EAC1C,CAOA,gBAAAS,GACE,OAAOjJ,SAASoC,KAAKC,UAAUkC,SAASkE,EAC1C,CAOA,UAAAS,GACE,OAAOlJ,SAASoC,KAAKC,UAAUkC,SA7EH,eA8E9B,CAQA,YAAA4E,GACE,OAAOnI,WAAWoI,YAAcrH,KAAKqC,QAAQyE,iBAC/C,CAKA,MAAA5D,GAIEjF,SAASoC,KAAKC,UAAUE,OAAOiG,GAE3BzG,KAAKoH,gBACPnJ,SAASoC,KAAKC,UAAUC,IAAImG,GAK9B1G,KAAKJ,SAASqD,cAAc,IAAIN,MAAM4D,GACxC,CAKA,QAAA9D,GAIExE,SAASoC,KAAKC,UAAUE,OAAOkG,GAC/BzI,SAASoC,KAAKC,UAAUC,IAAIkG,GAI5BzG,KAAKJ,SAASqD,cAAc,IAAIN,MAAM6D,GACxC,CAKA,MAAArD,GAGE,MAAM8D,EAAcjH,KAAKiH,cAErBA,EACFjH,KAAKkD,SAELlD,KAAKyC,WAKHzC,KAAKqC,QAAQ0E,mBACf/G,KAAKsH,iBACHL,EAAcP,EAA0BD,EAG9C,CAQA,sBAAAc,GAGE,MAAMC,EAAgBvJ,SAASwF,cA/IH,6BAiJ5B,IAAK+D,EACH,OAMF,MAAMC,EAAUxI,WAAWQ,iBAAiB+H,EAAe,YACxDE,iBAAiB,WAKpB,IAAKD,GAAuB,SAAZA,EACd,OAGF,MAAME,EAAkBvC,OAAOqC,EAAQG,QAAQ,WAAY,KAEvDxC,OAAOyC,MAAMF,KAIjB3H,KAAKqC,QAAU,IAAKrC,KAAKqC,QAASyE,kBAAmBa,GACvD,CAMA,4BAAAG,GACM9H,KAAKoH,eAIFpH,KAAKkH,oBACRlH,KAAKyC,WAMDzC,KAAKmH,cAAgBnH,KAAKiH,eAC9BjH,KAAKkD,QAGX,CAOA,gBAAAoE,CAAiBS,GAGf,QAAgC9H,IAA5BhB,WAAW+I,aAMf,IACEA,aAAaC,QAAQrB,GAA2BmB,EAClD,CAAE,MAGF,CACF,CAKA,gBAAAG,GAGE,QAAgCjI,IAA5BhB,WAAW+I,aAMf,IACE,MAAMG,EAAcH,aAAaI,QAAQxB,IAErCuB,IAAgB1B,EAClBzG,KAAKyC,WACI0F,IAAgBzB,EACzB1G,KAAKkD,SAGLlD,KAAK8H,8BAET,CAAE,MAEA9H,KAAK8H,8BACP,CACF,CAKA,iBAAAO,GAGE,QAAgCpI,IAA5BhB,WAAW+I,aAMf,IACEA,aAAaM,WAAW1B,GAC1B,CAAE,MAEF,CACF,CAKA,IAAA2B,GAKEvI,KAAKuH,yBAIAvH,KAAKqC,QAAQ0E,mBAChB/G,KAAKqI,oBAQHrI,KAAKqC,QAAQ0E,oBAAsB/G,KAAKoH,eAC1CpH,KAAKkI,mBAELlI,KAAK8H,8BAET,EASF/J,EAAmB,KAGjB,MAAMyK,EAAUvK,UAAUwF,cA/SC,gBAiT3B,IAAK+E,EACH,OAMF,MAAMC,EAAwBD,EAAQtD,QAAQ4B,kBACxC4B,EAAwBF,EAAQtD,QAAQ6B,kBAExCzE,EAAiB,CACrBwE,uBAA6C7G,IAA1BwI,EACjB5B,GAASC,kBACT1B,OAAOqD,GACT1B,uBAA6C9G,IAA1ByI,EACjB7B,GAASE,kBACiB,SAA1B2B,GAKEC,EAAW,IAAI3B,GAASwB,EAASlG,GACvCqG,EAASJ,OAIT7H,OAAOtC,iBAAiB,SAAU,KAChCuK,EAASpB,yBACToB,EAASb,iCAKX,MAAMc,EAAiB3K,SAAS4K,cAAc,OAC9CD,EAAeE,UA3VkB,kBA4VjC7K,SAASwF,cAnVkB,iBAmVmBsF,OAAOH,GAMrD,IAAII,GAAoB,EAExBJ,EAAexK,iBAAiB,aAAc,KAC5C4K,GAAoB,GACnB,CAAEC,SAAS,IAEdL,EAAexK,iBAAiB,YAAa,KAC3C4K,GAAoB,GACnB,CAAEC,SAAS,IAEdL,EAAexK,iBAAiB,WAAYsE,IACrCsG,IACHtG,EAAMmB,iBACN8E,EAASlG,YAGXuG,GAAoB,GACnB,CAAEC,SAAS,IAEdL,EAAexK,iBAAiB,QAASsE,IACvCA,EAAMmB,iBACN8E,EAASlG,aAKKxE,SAAS4E,iBAAiB8D,GAElC7D,QAAQc,IACdA,EAAIxF,iBAAiB,QAASsE,IAC5BA,EAAMmB,iBAEN,IAAIyC,EAAS5D,EAAMqC,cAEe,YAA9BuB,GAAQpB,QAAQgE,YAClB5C,EAASA,GAAQ/D,QAAQoE,IAGvBL,IACF5D,GAAOmB,iBACP8E,EAASxF,gB,MCtZJgG,GACH7G,OACA8G,WAAiC,KACjCC,aAA8B,GAEtC,WAAAvJ,CAAYwC,EAAuC,IACjDtC,KAAKsC,OAAS,CACZgH,eAAe,EACfC,WAAW,EACXC,iBAAiB,EACjBC,oBAAoB,EACpBC,eAAe,KACZpH,GAGLtC,KAAKuI,MACP,CAEQ,IAAAA,GACFvI,KAAKsC,OAAOgH,eACdtJ,KAAK2J,mBAGH3J,KAAKsC,OAAOiH,WACdvJ,KAAK4J,eAGH5J,KAAKsC,OAAOkH,iBACdxJ,KAAK6J,sBAGH7J,KAAKsC,OAAOmH,oBACdzJ,KAAK8J,yBAGH9J,KAAKsC,OAAOoH,eACd1J,KAAK+J,uBAGP/J,KAAKgK,yBACLhK,KAAKiK,yBACLjK,KAAKkK,uBACP,CAGQ,gBAAAP,GACF3J,KAAKoJ,aAETpJ,KAAKoJ,WAAanL,SAAS4K,cAAc,OACzC7I,KAAKoJ,WAAWe,GAAK,cACrBnK,KAAKoJ,WAAWN,UAAY,cAC5B9I,KAAKoJ,WAAWgB,aAAa,YAAa,UAC1CpK,KAAKoJ,WAAWgB,aAAa,cAAe,QAC5CpK,KAAKoJ,WAAWgB,aAAa,OAAQ,UAErCnM,SAASoC,KAAK0I,OAAO/I,KAAKoJ,YAC5B,CAGQ,YAAAQ,GACN,MAAMS,EAAqBpM,SAAS4K,cAAc,OAClDwB,EAAmBvB,UAAY,aAE/B,MAAMwB,EAAarM,SAAS4K,cAAc,KAC1CyB,EAAWC,KAAO,QAClBD,EAAWxB,UAAY,YACvBwB,EAAWE,YAAc,uBAEzB,MAAMC,EAAYxM,SAAS4K,cAAc,KACzC4B,EAAUF,KAAO,cACjBE,EAAU3B,UAAY,YACtB2B,EAAUD,YAAc,qBAExBH,EAAmBtB,OAAOuB,GAC1BD,EAAmBtB,OAAO0B,GAE1BxM,SAASoC,KAAKqK,aAAaL,EAAoBpM,SAASoC,KAAKsK,YAG7D3K,KAAK4K,mBACP,CAEQ,iBAAAA,GACN,MAAMC,EAAO5M,SAASwF,cAAc,8BAChCoH,IAASA,EAAKV,KAChBU,EAAKV,GAAK,QAERU,IAASA,EAAKC,aAAa,aAC7BD,EAAKT,aAAa,WAAY,MAGhC,MAAMW,EAAM9M,SAASwF,cAAc,yCAC/BsH,IAAQA,EAAIZ,KACdY,EAAIZ,GAAK,cAEPY,IAAQA,EAAID,aAAa,aAC3BC,EAAIX,aAAa,WAAY,KAEjC,CAGQ,mBAAAP,GACN5L,SAASG,iBAAiB,UAAYsE,IAClB,QAAdA,EAAMsI,KACRhL,KAAKiL,oBAAoBvI,GAET,WAAdA,EAAMsI,KACRhL,KAAKkL,gBAAgBxI,KAKzB1C,KAAKmL,2BACLnL,KAAKoL,6BACP,CAEQ,mBAAAH,CAAoBvI,GAC1B,MAAM2I,EAAoBrL,KAAKsL,uBACzBC,EAAeF,EAAkBG,QAAQvN,SAASwN,eAEpD/I,EAAMgJ,SAEJH,GAAgB,IAClB7I,EAAMmB,iBACNwH,EAAkBM,IAAG,IAAKC,SAEnBL,GAAgBF,EAAkBlN,OAAS,IAEpDuE,EAAMmB,iBACNwH,EAAkB,IAAIO,QAE1B,CAEQ,oBAAAN,GACN,MAAMO,EAAW,CACf,UACA,yBACA,wBACA,yBACA,2BACA,kCACA,4BACAC,KAAK,MAEP,OAAOC,MAAMC,KAAK/N,SAAS4E,iBAAiBgJ,GAC9C,CAEQ,eAAAX,CAAgBxI,GAItB,IAFoBzE,SAASwF,cAAc,gBAQpBxF,SAASwF,cAAc,uBAC1B,CAClB,MAAMwI,EAAehO,SAASwF,cAAc,qDAC5CwI,GAAcC,QACdxJ,EAAMmB,gBACR,CACF,CAGQ,sBAAAiG,GAEN7L,SAASG,iBAAiB,UAAYsE,IACpC,MAAMnE,EAASmE,EAAMnE,OAGjBA,EAAOgE,QAAQ,sCACjBvC,KAAKmM,qBAAqBzJ,GAIT,UAAdA,EAAMsI,KAAiC,MAAdtI,EAAMsI,MAAgBzM,EAAOuM,aAAa,SAA2C,WAAhCvM,EAAOyG,aAAa,SAAyBzG,EAAO6N,QAAQ,wDAC7I1J,EAAMmB,iBACNtF,EAAO2N,UAGb,CAEQ,oBAAAC,CAAqBzJ,GAC3B,IAAK,CAAC,UAAW,YAAa,YAAa,aAAc,OAAQ,OAAO2J,SAAS3J,EAAMsI,KACrF,OAGF,MAAMsB,EAAiB5J,EAAMnE,OACvBgO,EAAYR,MAAMC,KAAKM,EAAe/J,QAAQ,sCAAsCM,iBAAiB,cAAgB,IACrH0I,EAAegB,EAAUf,QAAQc,GAEvC,IAAIE,EAEJ,OAAQ9J,EAAMsI,KACZ,IAAK,YACL,IAAK,aACHwB,EAAYjB,EAAegB,EAAUpO,OAAS,EAAIoN,EAAe,EAAI,EACrE,MAEF,IAAK,UACL,IAAK,YACHiB,EAAYjB,EAAe,EAAIA,EAAe,EAAIgB,EAAUpO,OAAS,EACrE,MAEF,IAAK,OACHqO,EAAY,EACZ,MAEF,IAAK,MACHA,EAAYD,EAAUpO,OAAS,EAC/B,MAEF,QACE,OAIJuE,EAAMmB,iBACN0I,EAAUC,IAAYZ,OACxB,CAGQ,oBAAA7B,GAGN,GAF6B9K,WAAWwN,WAAW,oCAAoCL,QAE7D,CACxBnO,SAASoC,KAAKC,UAAUC,IAAI,iBAG5BtC,SAAS8H,gBAAgBtH,MAAMiO,eAAiB,OAGhD,MAAMjO,EAAQR,SAAS4K,cAAc,SACrCpK,EAAM+L,YAAc,iNAOpBvM,SAAS0O,KAAK5D,OAAOtK,EACvB,CACF,CAGQ,sBAAAuL,GACW,IAAI4C,iBAAkBC,IACrCA,EAAU/J,QAASgK,IACjBA,EAASC,WAAWjK,QAASkK,IAC3B,GAAIA,EAAKC,WAAaC,KAAKC,aAAc,CACvC,MAAMpN,EAAUiN,EAGZjN,EAAQqM,QAAQ,6CAClBpM,KAAKoN,SAASrN,EAAQyK,aAAe,iBAAkB,aAIrDzK,EAAQqM,QAAQ,6BAClBpM,KAAKoN,SAASrN,EAAQyK,aAAe,UAAW,SAEpD,QAKG6C,QAAQpP,SAASoC,KAAM,CAC9BiN,WAAW,EACXC,SAAS,GAEb,CAGQ,sBAAAtD,GACNhM,SAAS4E,iBAAiB,SAASC,QAAS0K,IAqB1C,GAnBKA,EAAM1C,aAAa,SACtB0C,EAAMpD,aAAa,OAAQ,SAI7BoD,EAAM3K,iBAAiB,MAAMC,QAAS2K,IACpC,IAAKA,EAAG3C,aAAa,SAAU,CAC7B,MAAM4C,EAAYD,EAAGlL,QAAQ,SACvBoL,EAAiC,IAAjBF,EAAGG,UAErBF,EACFD,EAAGrD,aAAa,QAAS,OAChBuD,GACTF,EAAGrD,aAAa,QAAS,MAE7B,KAIGoD,EAAM/J,cAAc,YAAc+J,EAAM1C,aAAa,SAAU,CAClE,MAAM+C,EAAU5P,SAAS4K,cAAc,WACvCgF,EAAQrD,YAAcgD,EAAMxI,aAAa,UAAY,GACrDwI,EAAM9C,aAAamD,EAASL,EAAM7C,WACpC,GAEJ,CAGQ,qBAAAT,GACNjM,SAAS4E,iBAAiB,2BAA2BC,QAASgL,IAC5D,MAAMC,EAAYD,EAGlB,IAAKC,EAAUC,QAAQ7P,SAAW4P,EAAUjD,aAAa,gBAAkBiD,EAAUjD,aAAa,mBAAoB,CACpH,MAAMmD,EAAcF,EAAU/I,aAAa,eACvCiJ,GACFF,EAAU3D,aAAa,aAAc6D,EAEzC,CAGA,GAAIF,EAAUjD,aAAa,YAAa,CACtC,MAAMoD,EAAQH,EAAUC,SAAS,GACjC,GAAIE,IAAUA,EAAMzK,cAAc,uBAAwB,CACxD,MAAM0K,EAAYlQ,SAAS4K,cAAc,QACzCsF,EAAUrF,UAAY,6BACtBqF,EAAU3D,YAAc,cACxB0D,EAAMnF,OAAOoF,EACf,CACF,CAIKJ,EAAUzN,UAAUkC,SAAS,iCAChCuL,EAAU3P,iBAAiB,UAAW,KACpC4B,KAAKoO,gBAAgBL,MAI7B,CAEQ,eAAAK,CAAgBN,GACtB,MAAMO,EAAU,GAAGP,EAAM3D,IAAM2D,EAAMQ,aACrC,IAAIC,EAAetQ,SAASuQ,eAAeH,GAEtCE,IACHA,EAAetQ,SAAS4K,cAAc,OACtC0F,EAAapE,GAAKkE,EAClBE,EAAazF,UAAY,mBACzByF,EAAanE,aAAa,OAAQ,SAMlC0D,EAAMW,YAAY1F,OAAOwF,IAG3BA,EAAa/D,YAAcsD,EAAMY,kBACjCZ,EAAM1D,aAAa,mBAAoBiE,GACvCP,EAAMxN,UAAUC,IAAI,cAEpBP,KAAKoN,SAAS,YAAYU,EAAME,SAAS,IAAIxD,aAAesD,EAAMQ,SAASR,EAAMY,oBAAqB,YACxG,CAGQ,wBAAAvD,GACNlN,SAASG,iBAAiB,iBAAmBsE,IAC3C,MACM2I,EADQ3I,EAAMnE,OACYsE,iBAAiB,4EAE7CwI,EAAkBlN,OAAS,GAC5BkN,EAAkB,GAAmBO,QAIxC5L,KAAKqJ,aAAahL,KAAKJ,SAASwN,iBAGlCxN,SAASG,iBAAiB,kBAAmB,KAE3C,MAAMuQ,EAAkB3O,KAAKqJ,aAAauF,MACtCD,GACFA,EAAgB/C,SAGtB,CAGQ,2BAAAR,GACNnN,SAASG,iBAAiB,oBAAsBsE,IAC9C,MACMmM,EADWnM,EAAMnE,OACDkF,cAAc,kBAC9BqL,EAAYD,GAAMpL,cAAc,aAElCqL,GACFA,EAAUlD,SAGhB,CAGO,QAAAwB,CAAS2B,EAAiBC,EAAmC,UAC7DhP,KAAKoJ,YACRpJ,KAAK2J,mBAGH3J,KAAKoJ,aACPpJ,KAAKoJ,WAAWgB,aAAa,YAAa4E,GAC1ChP,KAAKoJ,WAAWoB,YAAcuE,EAG9B7P,WAAW,KACLc,KAAKoJ,aACPpJ,KAAKoJ,WAAWoB,YAAc,KAE/B,KAEP,CAEO,YAAAyE,CAAapD,GAClB,MAAM9L,EAAU9B,SAASwF,cAAcoI,GACnC9L,IACFA,EAAQ6L,QAGR7L,EAAQmP,eAAe,CAAEC,SAAU,SAAUC,MAAO,WAExD,CAEO,SAAAC,CAAUC,GACf,MAAMjE,EAAoBiE,EAAUzM,iBAClC,4EAGI0M,EAAiBxD,MAAMC,KAAKX,GAC5BmE,EAAeD,EAAe,GAC9BE,EAAcF,EAAe5D,IAAG,GAEtC2D,EAAUlR,iBAAiB,UAAYsE,IACnB,QAAdA,EAAMsI,MACJtI,EAAMgJ,SACJzN,SAASwN,gBAAkB+D,IAC7BC,GAAa7D,QACblJ,EAAMmB,kBAEC5F,SAASwN,gBAAkBgE,IACpCD,EAAa5D,QACblJ,EAAMmB,oBAId,CAEO,YAAA6L,GAGL,IADazR,SAASwF,cAAc,QACzB,CACT,MAAMkM,EAAU1R,SAASwF,cAAc,aACnCkM,IACFA,EAAQvF,aAAa,OAAQ,QAC7BuF,EAAQxF,GAAK,OAEjB,CAGAlM,SAAS4E,iBAAiB,qBAAqBC,QAAQ,CAACiI,EAAK6E,KACtD7E,EAAID,aAAa,SACpBC,EAAIX,aAAa,OAAQ,cAEtBW,EAAID,aAAa,eACpBC,EAAIX,aAAa,aAAc,cAAcwF,EAAQ,OAKzD,MAAMC,EAAa5R,SAASwF,cAAc,uCACtCoM,IAAeA,EAAW/E,aAAa,SACzC+E,EAAWzF,aAAa,OAAQ,SAEpC,EAIK,MAAM0F,GAAqBxN,GACzB,IAAI6G,GAAqB7G,GChelCvE,EAAmB,KAKY+R,GAAkB,CAC7CxG,eAAe,EACfC,WAAW,EACXC,iBAAiB,EACjBC,oBAAoB,EACpBC,eAAe,IAIIgG,iB","ignoreList":[]} \ No newline at end of file diff --git a/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/_accessibility.scss b/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/_accessibility.scss new file mode 100644 index 00000000..a07fc9bd --- /dev/null +++ b/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/_accessibility.scss @@ -0,0 +1,337 @@ +/* ========================================================================== + AdminLTE Accessibility Styles - WCAG 2.1 AA Compliance + ========================================================================== */ + +/* Skip Links - WCAG 2.4.1: Bypass Blocks */ +.skip-link { + position: absolute; + top: -40px; + left: 6px; + z-index: 999999; + padding: 8px 16px; + font-weight: 600; + color: var(--bs-white); + text-decoration: none; + background: var(--bs-primary); + + &:focus { + top: 0; + outline: 3px solid var(--bs-warning); + outline-offset: 2px; + } + + &:hover { + color: var(--bs-white); + text-decoration: none; + background: var(--bs-primary-emphasis); + } +} + +/* Enhanced Focus Indicators - WCAG 2.4.7: Focus Visible */ +.focus-enhanced { + &:focus { + outline: 3px solid var(--bs-focus-ring-color, #0d6efd); + outline-offset: 2px; + box-shadow: 0 0 0 .25rem rgba(13, 110, 253, .25); + } +} + +/* High Contrast Mode Support */ +@media (prefers-contrast: high) { + .card { + border: 2px solid; + } + + .btn { + border-width: 2px; + } + + .nav-link { + border: 1px solid transparent; + + &:hover, + &:focus { + border-color: currentcolor; + } + } +} + +/* Reduced Motion Support - WCAG 2.3.3: Animation from Interactions */ +@media (prefers-reduced-motion: reduce) { + *, + *::before, + *::after { + transition-duration: .01ms !important; + animation-duration: .01ms !important; + animation-iteration-count: 1 !important; + scroll-behavior: auto !important; + } + + .fade { + opacity: 1 !important; + /* stylelint-disable-next-line property-disallowed-list */ + transition: none !important; + } + + .collapse { + /* stylelint-disable-next-line property-disallowed-list */ + transition: none !important; + } + + .modal.fade .modal-dialog { + transform: none !important; + } +} + +/* Screen Reader Only Content */ +.sr-only { + position: absolute !important; + width: 1px !important; + height: 1px !important; + padding: 0 !important; + margin: -1px !important; + overflow: hidden !important; + clip: rect(0, 0, 0, 0) !important; + white-space: nowrap !important; + border: 0 !important; +} + +.sr-only-focusable:focus { + position: static !important; + width: auto !important; + height: auto !important; + padding: inherit !important; + margin: inherit !important; + overflow: visible !important; + clip: auto !important; + white-space: normal !important; +} + +/* Focus Trap Utilities */ +.focus-trap { + &:focus { + box-shadow: 0 0 0 .25rem rgba(13, 110, 253, .25); + } +} + +/* Accessible Color Combinations - WCAG 1.4.3: Contrast (Minimum) */ +.text-accessible-primary { + color: #003d82; /* 4.5:1 contrast on white */ +} + +.text-accessible-success { + color: #0f5132; /* 4.5:1 contrast on white */ +} + +.text-accessible-danger { + color: #842029; /* 4.5:1 contrast on white */ +} + +.text-accessible-warning { + color: #664d03; /* 4.5:1 contrast on white */ +} + +/* ARIA Live Regions */ +.live-region { + position: absolute; + left: -10000px; + width: 1px; + height: 1px; + overflow: hidden; + + &.live-region-visible { + position: static; + left: auto; + width: auto; + height: auto; + overflow: visible; + } +} + +/* Enhanced Error States - WCAG 3.3.1: Error Identification */ +.form-control.is-invalid { + border-color: var(--bs-danger); + + &:focus { + border-color: var(--bs-danger); + box-shadow: 0 0 0 .25rem rgba(220, 53, 69, .25); + } +} + +.invalid-feedback { + &[role="alert"] { + font-weight: 600; + } +} + +/* Target Size - WCAG 2.5.8: Target Size (Minimum) */ +.touch-target { + min-width: 44px; + min-height: 44px; + + &.touch-target-small { + min-width: 24px; + min-height: 24px; + } +} + +/* Table Accessibility */ +.table-accessible { + th { + font-weight: 600; + background-color: var(--bs-secondary-bg); + + &[scope="col"] { + border-bottom: 2px solid var(--bs-border-color); + } + + &[scope="row"] { + border-right: 2px solid var(--bs-border-color); + } + } + + caption { + padding: .75rem; + font-weight: 600; + color: var(--bs-secondary); + text-align: left; + caption-side: top; + } +} + +/* Navigation Landmarks */ +nav[role="navigation"] { + &:not([aria-label]):not([aria-labelledby]) { + &::before { + position: absolute; + left: -10000px; + content: "Navigation"; + } + } +} + +/* Form Fieldset Styling */ +fieldset { + padding: 1rem; + margin-bottom: 1rem; + border: 1px solid var(--bs-border-color); + + legend { + padding: 0 .5rem; + margin-bottom: .5rem; + font-size: 1.1em; + font-weight: 600; + } +} + +/* Loading States */ +.loading[aria-busy="true"] { + position: relative; + pointer-events: none; + + &::after { + position: absolute; + top: 50%; + left: 50%; + width: 20px; + height: 20px; + margin-top: -10px; + margin-left: -10px; + content: ""; + border: 2px solid var(--bs-primary); + border-top-color: transparent; + animation: spin 1s linear infinite; + } + + @media (prefers-reduced-motion: reduce) { + &::after { + border-top-color: var(--bs-primary); + animation: none; + } + } +} + +@keyframes spin { + to { + transform: rotate(360deg); + } +} + +/* Dark Mode Accessibility */ +[data-bs-theme="dark"] { + .text-accessible-primary { + color: #6ea8fe; + } + + .text-accessible-success { + color: #75b798; + } + + .text-accessible-danger { + color: #f1aeb5; + } + + .text-accessible-warning { + color: #ffda6a; + } +} + +/* Print Accessibility */ +@media print { + .skip-link, + .btn, + .nav-link { + color: #000 !important; + background: transparent !important; + border: 1px solid #000 !important; + } + + a[href^="http"]::after { + font-size: .8em; + content: " (" attr(href) ")"; + } + + /* Print Layout Fix - Ensure sidebar and main content are both visible */ + .app-wrapper { + display: grid !important; + grid-template-rows: auto 1fr auto !important; + grid-template-columns: auto 1fr !important; + } + + .sidebar-overlay { + display: none !important; + } + + .app-sidebar { + position: static !important; + display: block !important; + min-width: 200px !important; + max-width: 200px !important; + max-height: none !important; + margin-left: 0 !important; + overflow: visible !important; + } + + .sidebar-wrapper { + height: auto !important; + overflow: visible !important; + } + + .app-header { + position: static !important; + } + + .app-main { + width: auto !important; + max-width: 100% !important; + overflow: visible !important; + } + + .app-content { + overflow: visible !important; + } + + .app-footer { + position: static !important; + } +} diff --git a/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/_app-content.scss b/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/_app-content.scss new file mode 100644 index 00000000..d9dfcb9b --- /dev/null +++ b/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/_app-content.scss @@ -0,0 +1,3 @@ +.app-content { + padding: $lte-content-padding-y $lte-content-padding-x; +} diff --git a/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/_app-footer.scss b/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/_app-footer.scss new file mode 100644 index 00000000..afa9e037 --- /dev/null +++ b/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/_app-footer.scss @@ -0,0 +1,32 @@ +// +// Core: Main Footer +// + +.app-footer { + grid-area: #{$lte-prefix}app-footer; + width: inherit; + max-width: 100vw; + min-height: 3rem; + padding: $lte-app-footer-padding; + color: $lte-app-footer-color; + background-color: $lte-app-footer-bg; + border-top: $lte-app-footer-border-top; + @include transition($lte-transition-speed $lte-transition-fn); +} + +.fixed-footer { + .app-footer { + position: sticky; + bottom: 0; + z-index: $lte-zindex-fixed-footer; + } + + // When layout-fixed is used, app-main has overflow: auto which prevents + // position: sticky from working on the footer. Ensure the grid keeps the + // footer pinned at the bottom while app-main scrolls independently. + &.layout-fixed { + .app-main { + min-height: 0; + } + } +} diff --git a/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/_app-header.scss b/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/_app-header.scss new file mode 100644 index 00000000..0d9aff9b --- /dev/null +++ b/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/_app-header.scss @@ -0,0 +1,61 @@ +// +// Core: Main Header +// + +.app-header { + z-index: $lte-zindex-app-header; + grid-area: #{$lte-prefix}app-header; + max-width: 100vw; + border-bottom: $lte-app-header-bottom-border; + @include transition($lte-transition-speed $lte-transition-fn); + + .nav-link { + position: relative; + height: $nav-link-height; + } +} + +// Navbar badge +.navbar-badge { + position: absolute; + top: 9px; + right: 5px; + padding: 2px 4px; + font-size: .6rem; + font-weight: 400; +} + +.fixed-header { + .app-header { + position: sticky; + top: 0; + z-index: $lte-zindex-fixed-header; + } + + // Fixes #6020: when only `fixed-header` is used (without `layout-fixed`), + // the sidebar — including its branding — used to scroll with the page + // because nothing made it sticky. Pin the sidebar so the brand and menu + // stay visible while the page content scrolls beneath the fixed header. + // Only applied on `sidebar-expand-*` breakpoints, since the mobile sidebar + // is an off-canvas overlay that handles its own positioning. + @each $breakpoint in map-keys($grid-breakpoints) { + $next: breakpoint-next($breakpoint, $grid-breakpoints); + $infix: breakpoint-infix($next, $grid-breakpoints); + + &.sidebar-expand#{$infix} { + @include media-breakpoint-up($next) { + .app-sidebar { + position: sticky; + top: 0; + max-height: 100vh; + + .sidebar-wrapper { + height: subtract(100vh, add($lte-app-header-height, 1px)); + overflow-x: hidden; + overflow-y: auto; + } + } + } + } + } +} diff --git a/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/_app-main.scss b/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/_app-main.scss new file mode 100644 index 00000000..617cf045 --- /dev/null +++ b/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/_app-main.scss @@ -0,0 +1,41 @@ +.app-main { + position: relative; + display: flex; + flex-direction: column; + grid-area: #{$lte-prefix}app-main; + max-width: 100vw; + padding-bottom: $lte-app-main-padding-bottom; + @include transition($lte-transition-speed $lte-transition-fn); + + .app-content-header { + padding: 1rem $lte-content-padding-x; + + .breadcrumb { + padding: 0; + margin-bottom: 0; + line-height: 2.5rem; + + a { + text-decoration: none; + } + } + } + + .app-content-top-area, + .app-content-bottom-area { + color: $lte-app-content-bottom-area-color; + background-color: $lte-app-content-bottom-area-bg; + } + + .app-content-top-area { + padding: $lte-app-content-top-area-padding-y $lte-app-content-top-area-padding-x; + border-bottom: $lte-app-content-top-area-top-border; + } + + .app-content-bottom-area { + padding: $lte-app-content-bottom-area-padding-y $lte-app-content-bottom-area-padding-x; + margin-top: auto; + margin-bottom: $lte-app-content-bottom-area-margin-bottom; + border-top: $lte-app-content-bottom-area-top-border; + } +} diff --git a/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/_app-sidebar.scss b/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/_app-sidebar.scss new file mode 100644 index 00000000..5bf4ff05 --- /dev/null +++ b/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/_app-sidebar.scss @@ -0,0 +1,619 @@ +.app-sidebar { + --#{$lte-prefix}sidebar-hover-bg: #{$lte-sidebar-hover-bg}; + --#{$lte-prefix}sidebar-color: #{$lte-sidebar-color}; + --#{$lte-prefix}sidebar-hover-color: #{$lte-sidebar-hover-color}; + --#{$lte-prefix}sidebar-active-color: #{$lte-sidebar-active-color}; + --#{$lte-prefix}sidebar-menu-active-bg: #{$lte-sidebar-menu-active-bg}; + --#{$lte-prefix}sidebar-menu-active-color: #{$lte-sidebar-menu-active-color}; + --#{$lte-prefix}sidebar-submenu-bg: #{$lte-sidebar-submenu-bg}; + --#{$lte-prefix}sidebar-submenu-color: #{$lte-sidebar-submenu-color}; + --#{$lte-prefix}sidebar-submenu-hover-color: #{$lte-sidebar-submenu-hover-color}; + --#{$lte-prefix}sidebar-submenu-hover-bg: #{$lte-sidebar-submenu-hover-bg}; + --#{$lte-prefix}sidebar-submenu-active-color: #{$lte-sidebar-submenu-active-color}; + --#{$lte-prefix}sidebar-submenu-active-bg: #{$lte-sidebar-submenu-active-bg}; + --#{$lte-prefix}sidebar-header-color: #{$lte-sidebar-header-color}; + + z-index: $lte-zindex-sidebar; + grid-area: #{$lte-prefix}app-sidebar; + min-width: var(--#{$lte-prefix}sidebar-width); + max-width: var(--#{$lte-prefix}sidebar-width); + @include transition($lte-sidebar-transition); +} + +.sidebar-brand { + display: flex; + align-items: center; + justify-content: center; + height: $lte-app-header-height; + padding: $lte-brand-link-padding-y $lte-brand-link-padding-x; + overflow: hidden; + font-size: $navbar-brand-font-size; + white-space: nowrap; + border-bottom: $lte-brand-link-border-buttom solid var(--#{$prefix}border-color); + @include transition(width $lte-transition-speed $lte-transition-fn); + + .brand-link { + display: flex; + align-items: center; + text-decoration: none; + + .brand-image { + float: left; + width: auto; + max-height: 33px; + line-height: .8; + } + + .brand-image-xs { + float: left; + width: auto; + max-height: 33px; + margin-top: -.1rem; + line-height: .8; + } + + .brand-image-xl { + width: auto; + max-height: 40px; + line-height: .8; + + &.single { + margin-top: -.3rem; + } + } + } + + .brand-text { + margin-left: .5rem; + color: rgba(var(--#{$prefix}emphasis-color-rgb), .8); + @include transition(flex $lte-transition-speed $lte-transition-fn, width $lte-transition-speed $lte-transition-fn); + &:hover { + color: var(--#{$prefix}emphasis-color); + } + } +} + +.sidebar-wrapper { + padding-top: $lte-sidebar-padding-y; + padding-right: $lte-sidebar-padding-x; + padding-bottom: $lte-sidebar-padding-y; + padding-left: $lte-sidebar-padding-x; + overscroll-behavior: contain; + @include scrollbar-color-gray(); + @include scrollbar-width-thin(); + + .nav-item { + max-width: 100%; + } + + .nav-link { + display: flex; + justify-content: flex-start; + + p { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + } + .nav-icon { + display: flex; + align-items: center; + justify-content: center; + min-width: 1.5rem; + max-width: 1.5rem; + } + + // Sidebar Menu. First level links + .sidebar-menu > .nav-item { + // links + > .nav-link { + color: var(--#{$lte-prefix}sidebar-color); + + &:hover, + &:focus { + color: var(--#{$lte-prefix}sidebar-hover-color); + background-color: var(--#{$lte-prefix}sidebar-hover-bg); + } + + &.active { + color: var(--#{$lte-prefix}sidebar-menu-active-color); + background-color: var(--#{$lte-prefix}sidebar-menu-active-bg); + } + } + + // Open state + &.menu-open > .nav-link { + color: var(--#{$lte-prefix}sidebar-hover-color); + background-color: var(--#{$lte-prefix}sidebar-hover-bg); + + &.active { + color: var(--#{$lte-prefix}sidebar-menu-active-color); + background-color: var(--#{$lte-prefix}sidebar-menu-active-bg); + } + } + + // First Level Submenu + > .nav-treeview { + background-color: var(--#{$lte-prefix}sidebar-submenu-bg); + } + } + + // Section Heading + .nav-header { + display: inline; + overflow: hidden; + color: var(--#{$lte-prefix}sidebar-header-color); + text-overflow: ellipsis; + background-color: inherit; + } + + // All links within the sidebar menu + a { + color: var(--#{$lte-prefix}sidebar-color); + } + + // All submenus + .nav-treeview { + > .nav-item { + > .nav-link { + color: var(--#{$lte-prefix}sidebar-submenu-color); + + &:hover, + &:focus { + color: var(--#{$lte-prefix}sidebar-submenu-hover-color); + background-color: var(--#{$lte-prefix}sidebar-submenu-hover-bg); + } + + &.active { + color: var(--#{$lte-prefix}sidebar-submenu-active-color); + background-color: var(--#{$lte-prefix}sidebar-submenu-active-bg); + } + } + } + } +} + +// Sidebar navigation menu +.sidebar-menu { + // All levels + .nav-item { + > .nav-link { + margin-bottom: .2rem; + + .nav-arrow { + @include transition(transform $lte-transition-fn $lte-transition-speed); + transform: translateY(-50%) #{"/*rtl:append:rotate(180deg)*/"}; + animation-name: fadeIn; + animation-duration: $lte-transition-speed; + animation-fill-mode: both; + } + } + } + + // All levels + .nav-link > .nav-badge, + .nav-link > p > .nav-badge { + position: absolute; + top: 50%; + right: 1rem; + transform: translateY(-50%); + } + + .nav-link > .nav-arrow, + .nav-link > p > .nav-arrow { + position: absolute; + top: 50%; + right: 1rem; + } + + .nav-link { + position: relative; + width: 100%; + @include transition(width $lte-transition-fn $lte-transition-speed); + @include border-radius($border-radius); + + p { + display: inline; + padding-left: .5rem; + margin: 0; + } + } + + .nav-header { + position: relative; + width: 100%; + padding: $nav-link-padding-y ($nav-link-padding-y * 1.5); + font-size: .9rem; + @include transition(width $lte-transition-fn $lte-transition-speed); + } + + // Tree view menu + .nav-treeview { + display: none; + padding: 0; + list-style: none; + } + + .menu-open { + > .nav-treeview { + display: block; + } + + > .nav-link { + .nav-arrow { + transform: translateY(-50%) rotate(90deg) #{"/*rtl:ignore*/"}; + } + } + } + + // Override: ensure badges/arrows are aligned to the end (right in LTR, left in RTL) + .nav-link > .nav-badge, + .nav-link > p > .nav-badge, + .nav-link > .nav-arrow, + .nav-link > p > .nav-arrow { + right: 1rem !important; // place at end in LTR + left: auto !important; + } +} + +.nav-indent { + .nav-treeview { + padding-left: $lte-sidebar-padding-x; + } +} + +.nav-compact.nav-indent { + .nav-treeview { + padding-left: 0; + + .nav-item { + padding-left: $lte-sidebar-padding-x; + } + } +} + +.sidebar-mini.sidebar-collapse.nav-indent { + .app-sidebar:hover { + .nav-treeview { + padding-left: 0; + + .nav-item { + padding-left: $lte-sidebar-padding-x; + } + } + } +} + +.sidebar-collapse { + &.nav-compact.nav-indent { + .nav-treeview { + .nav-item { + padding-left: 0; + } + } + } +} + +.nav-compact .nav-link { + @include border-radius(0); + margin-bottom: 0 !important; +} + +// A fix for text overflow while transitioning from sidebar mini to full sidebar +.sidebar-menu, +.sidebar-menu > .nav-header, +.sidebar-menu .nav-link { + white-space: nowrap; +} + +// Logo style +.logo-xs, +.logo-xl { + position: absolute; + visibility: visible; + opacity: 1; + + &.brand-image-xs { + top: 12px; + left: 18px; + } + + &.brand-image-xl { + top: 6px; + left: 12px; + } +} + +.logo-xs { + visibility: hidden; + opacity: 0; + + &.brand-image-xl { + top: 8px; + left: 16px; + } +} + +.brand-link { + &.logo-switch { + &::before { + content: "\00a0"; + } + } +} + +.sidebar-mini.sidebar-collapse { + .app-sidebar { + min-width: $lte-sidebar-mini-width; + max-width: $lte-sidebar-mini-width; + } + + // Make the sidebar headers + .sidebar-menu .nav-header { + display: none; + } + + .sidebar-menu { + .nav-link { + width: $lte-sidebar-mini-width - $lte-sidebar-padding-x * 2; + + p { + display: inline-block; + width: 0; + white-space: nowrap; + } + } + .nav-badge, + .nav-arrow { + display: none; + animation-name: fadeOut; + animation-duration: $lte-transition-speed; + animation-fill-mode: both; + } + } + + .brand-text { + display: inline-block; + max-width: 0; + overflow: hidden; + } + + .sidebar-menu .nav-link p, + .brand-text, + .logo-xl, + .nav-arrow { + visibility: hidden; + animation-name: fadeOut; + animation-duration: $lte-transition-speed; + animation-fill-mode: both; + } + + + .logo-xs { + display: inline-block; + visibility: visible; + animation-name: fadeIn; + animation-duration: $lte-transition-speed; + animation-fill-mode: both; + } + + &:not(.sidebar-without-hover) { + .app-sidebar:hover { + min-width: var(--#{$lte-prefix}sidebar-width); + max-width: var(--#{$lte-prefix}sidebar-width); + + .sidebar-menu .nav-header { + display: inline; + } + + .sidebar-menu .nav-link { + width: auto; + } + + .sidebar-menu .nav-link p, + .brand-text, + .logo-xl { + width: auto; + margin-left: 0; + visibility: visible; + animation-name: fadeIn; + animation-duration: $lte-transition-speed; + animation-fill-mode: both; + } + + .brand-text { + display: inline; + max-width: inherit; + margin-left: .5rem; + animation-name: fadeIn; + animation-duration: $lte-transition-speed; + animation-fill-mode: both; + } + + .nav-badge, + .nav-arrow { + display: inline-block; + visibility: visible; + animation-name: fadeIn; + animation-duration: $lte-transition-speed; + animation-fill-mode: both; + animation-delay: $lte-transition-speed; + } + + .nav-link p { + padding-left: .5rem; + } + + .logo-xs { + visibility: hidden; + animation-name: fadeOut; + animation-duration: $lte-transition-speed; + animation-fill-mode: both; + } + } + } +} + +.sidebar-collapse:not(.sidebar-mini) { + .app-sidebar { + margin-left: calc(var(--#{$lte-prefix}sidebar-width) * -1); // stylelint-disable-line function-disallowed-list + } +} + +.sidebar-expand { + @each $breakpoint in map-keys($grid-breakpoints) { + $next: breakpoint-next($breakpoint, $grid-breakpoints); + $infix: breakpoint-infix($next, $grid-breakpoints); + + /* stylelint-disable-next-line scss/selector-no-union-class-name */ + &#{$infix} { + @include media-breakpoint-up($next) { + &.layout-fixed { + .app-main-wrapper { + display: flex; + flex-direction: column; + min-height: 100vh; + } + .app-sidebar-wrapper { + position: relative; + } + .app-main { + flex: 1 1 auto; + overflow: auto; + } + .app-sidebar { + position: sticky; + top: 0; + bottom: 0; + max-height: 100vh; + + .sidebar-wrapper { + height: subtract(100vh, add($lte-app-header-height, 1px)); + overflow-x: hidden; + overflow-y: auto; + } + } + } + + &.sidebar-open { + .nav-link > .nav-badge, + .nav-link > p > .nav-badge { + animation-name: fadeIn; + animation-duration: $lte-transition-speed; + animation-fill-mode: both; + animation-delay: $lte-transition-speed; + } + .nav-link > .nav-arrow, + .nav-link > p > .nav-arrow { + animation-name: fadeIn; + animation-duration: $lte-transition-speed; + animation-fill-mode: both; + animation-delay: $lte-transition-speed; + } + } + } + + @include media-breakpoint-down($next) { + $max: breakpoint-max($next); + + &::before { + display: none; + content: "#{$max}"; + } + + .app-sidebar { + position: fixed; + top: 0; + bottom: 0; + max-height: 100vh; + margin-left: calc(var(--#{$lte-prefix}sidebar-width) * -1); // stylelint-disable-line function-disallowed-list + + .sidebar-wrapper { + height: subtract(100vh, add($lte-app-header-height, 1px)); + overflow-x: hidden; + overflow-y: auto; + } + } + + &.sidebar-open { + .app-sidebar { + margin-left: 0; + } + + .sidebar-overlay { + position: absolute; + inset: 0; + z-index: $lte-zindex-sidebar-overlay; + width: 100%; + height: 100%; + cursor: pointer; + visibility: visible; + background-color: rgba(0, 0, 0, .2); + animation-name: fadeIn; + animation-fill-mode: both; + } + } + } + } + } +} + +.sidebar-menu .nav-link p, +.app-sidebar .brand-text, +.app-sidebar .logo-xs, +.app-sidebar .logo-xl { + @include transition(margin-left $lte-transition-speed linear, opacity $lte-transition-speed ease, visibility $lte-transition-speed ease); +} + +// To prevent onload transition and animation +.app-loaded { + &.sidebar-mini.sidebar-collapse { + .sidebar-menu .nav-link p, + .brand-text { + animation-duration: $lte-transition-speed; + } + } +} +body:not(.app-loaded) { + .app-header, + .app-sidebar, + .app-main, + .app-footer { + @include transition(none !important); + animation-duration: 0s !important; + } +} +.hold-transition { + .app-header, + .app-sidebar, + .app-main, + .app-footer, + .nav-arrow, + .nav-badge { + @include transition(none !important); + animation-duration: 0s !important; + } +} + +@if $enable-dark-mode { + @include color-mode(dark) { + &.app-sidebar, + .app-sidebar { + --#{$lte-prefix}sidebar-hover-bg: #{$lte-sidebar-hover-bg-dark}; + --#{$lte-prefix}sidebar-color: #{$lte-sidebar-color-dark}; + --#{$lte-prefix}sidebar-hover-color: #{$lte-sidebar-hover-color-dark}; + --#{$lte-prefix}sidebar-active-color: #{$lte-sidebar-active-color-dark}; + --#{$lte-prefix}sidebar-menu-active-bg: #{$lte-sidebar-menu-active-bg-dark}; + --#{$lte-prefix}sidebar-menu-active-color: #{$lte-sidebar-menu-active-color-dark}; + --#{$lte-prefix}sidebar-submenu-bg: #{$lte-sidebar-submenu-bg-dark}; + --#{$lte-prefix}sidebar-submenu-color: #{$lte-sidebar-submenu-color-dark}; + --#{$lte-prefix}sidebar-submenu-hover-color: #{$lte-sidebar-submenu-hover-color-dark}; + --#{$lte-prefix}sidebar-submenu-hover-bg: #{$lte-sidebar-submenu-hover-bg-dark}; + --#{$lte-prefix}sidebar-submenu-active-color: #{$lte-sidebar-submenu-active-color-dark}; + --#{$lte-prefix}sidebar-submenu-active-bg: #{$lte-sidebar-submenu-active-bg-dark}; + --#{$lte-prefix}sidebar-header-color: #{$lte-sidebar-header-color-dark}; + } + } +} + diff --git a/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/_app-wrapper.scss b/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/_app-wrapper.scss new file mode 100644 index 00000000..5ecc611d --- /dev/null +++ b/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/_app-wrapper.scss @@ -0,0 +1,23 @@ +// +// Core: Layout +// + +.app-wrapper { + position: relative; + display: grid; + grid-template-areas: + "#{$lte-prefix}app-sidebar #{$lte-prefix}app-header" + "#{$lte-prefix}app-sidebar #{$lte-prefix}app-main" + "#{$lte-prefix}app-sidebar #{$lte-prefix}app-footer"; + grid-template-rows: min-content 1fr min-content; + grid-template-columns: auto 1fr; + grid-gap: 0; + align-content: stretch; + align-items: stretch; + max-width: 100vw; + min-height: 100vh; + + > * { + min-width: 0; + } +} diff --git a/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/_bootstrap-variables.scss b/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/_bootstrap-variables.scss new file mode 100644 index 00000000..d4c851a9 --- /dev/null +++ b/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/_bootstrap-variables.scss @@ -0,0 +1,1766 @@ +// AdminLTE Custom Variables Changes. +// Some of the variables are modified of Bootstrap Original Variables. +// You can find modified variables easily by searching keyword "// adminlte-modified" + +// Variables +// +// Variables should follow the `$component-state-property-size` formula for +// consistent naming. Ex: $nav-link-disabled-color and $modal-content-box-shadow-xs. + +// Color system + +// scss-docs-start gray-color-variables +$white: #fff !default; +$gray-100: #f8f9fa !default; +$gray-200: #e9ecef !default; +$gray-300: #dee2e6 !default; +$gray-400: #ced4da !default; +$gray-500: #adb5bd !default; +$gray-600: #6c757d !default; +$gray-700: #495057 !default; +$gray-800: #343a40 !default; +$gray-900: #212529 !default; +$black: #000 !default; +// scss-docs-end gray-color-variables + +// fusv-disable +// scss-docs-start gray-colors-map +$grays: ( + "100": $gray-100, + "200": $gray-200, + "300": $gray-300, + "400": $gray-400, + "500": $gray-500, + "600": $gray-600, + "700": $gray-700, + "800": $gray-800, + "900": $gray-900 +) !default; +// scss-docs-end gray-colors-map +// fusv-enable + +// scss-docs-start color-variables +$blue: #0d6efd !default; +$indigo: #6610f2 !default; +$purple: #6f42c1 !default; +$pink: #d63384 !default; +$red: #dc3545 !default; +$orange: #fd7e14 !default; +$yellow: #ffc107 !default; +$green: #198754 !default; +$teal: #20c997 !default; +$cyan: #0dcaf0 !default; +// scss-docs-end color-variables + +// scss-docs-start colors-map +$colors: ( + "blue": $blue, + "indigo": $indigo, + "purple": $purple, + "pink": $pink, + "red": $red, + "orange": $orange, + "yellow": $yellow, + "green": $green, + "teal": $teal, + "cyan": $cyan, + "black": $black, + "white": $white, + "gray": $gray-600, + "gray-dark": $gray-800 +) !default; +// scss-docs-end colors-map + +// The contrast ratio to reach against white, to determine if color changes from "light" to "dark". Acceptable values for WCAG 2.2 are 3, 4.5 and 7. +// See https://www.w3.org/TR/WCAG/#contrast-minimum +$min-contrast-ratio: 4.5 !default; + +// Customize the light and dark text colors for use in our color contrast function. +$color-contrast-dark: $black !default; +$color-contrast-light: $white !default; + +// fusv-disable +$blue-100: tint-color($blue, 80%) !default; +$blue-200: tint-color($blue, 60%) !default; +$blue-300: tint-color($blue, 40%) !default; +$blue-400: tint-color($blue, 20%) !default; +$blue-500: $blue !default; +$blue-600: shade-color($blue, 20%) !default; +$blue-700: shade-color($blue, 40%) !default; +$blue-800: shade-color($blue, 60%) !default; +$blue-900: shade-color($blue, 80%) !default; + +$indigo-100: tint-color($indigo, 80%) !default; +$indigo-200: tint-color($indigo, 60%) !default; +$indigo-300: tint-color($indigo, 40%) !default; +$indigo-400: tint-color($indigo, 20%) !default; +$indigo-500: $indigo !default; +$indigo-600: shade-color($indigo, 20%) !default; +$indigo-700: shade-color($indigo, 40%) !default; +$indigo-800: shade-color($indigo, 60%) !default; +$indigo-900: shade-color($indigo, 80%) !default; + +$purple-100: tint-color($purple, 80%) !default; +$purple-200: tint-color($purple, 60%) !default; +$purple-300: tint-color($purple, 40%) !default; +$purple-400: tint-color($purple, 20%) !default; +$purple-500: $purple !default; +$purple-600: shade-color($purple, 20%) !default; +$purple-700: shade-color($purple, 40%) !default; +$purple-800: shade-color($purple, 60%) !default; +$purple-900: shade-color($purple, 80%) !default; + +$pink-100: tint-color($pink, 80%) !default; +$pink-200: tint-color($pink, 60%) !default; +$pink-300: tint-color($pink, 40%) !default; +$pink-400: tint-color($pink, 20%) !default; +$pink-500: $pink !default; +$pink-600: shade-color($pink, 20%) !default; +$pink-700: shade-color($pink, 40%) !default; +$pink-800: shade-color($pink, 60%) !default; +$pink-900: shade-color($pink, 80%) !default; + +$red-100: tint-color($red, 80%) !default; +$red-200: tint-color($red, 60%) !default; +$red-300: tint-color($red, 40%) !default; +$red-400: tint-color($red, 20%) !default; +$red-500: $red !default; +$red-600: shade-color($red, 20%) !default; +$red-700: shade-color($red, 40%) !default; +$red-800: shade-color($red, 60%) !default; +$red-900: shade-color($red, 80%) !default; + +$orange-100: tint-color($orange, 80%) !default; +$orange-200: tint-color($orange, 60%) !default; +$orange-300: tint-color($orange, 40%) !default; +$orange-400: tint-color($orange, 20%) !default; +$orange-500: $orange !default; +$orange-600: shade-color($orange, 20%) !default; +$orange-700: shade-color($orange, 40%) !default; +$orange-800: shade-color($orange, 60%) !default; +$orange-900: shade-color($orange, 80%) !default; + +$yellow-100: tint-color($yellow, 80%) !default; +$yellow-200: tint-color($yellow, 60%) !default; +$yellow-300: tint-color($yellow, 40%) !default; +$yellow-400: tint-color($yellow, 20%) !default; +$yellow-500: $yellow !default; +$yellow-600: shade-color($yellow, 20%) !default; +$yellow-700: shade-color($yellow, 40%) !default; +$yellow-800: shade-color($yellow, 60%) !default; +$yellow-900: shade-color($yellow, 80%) !default; + +$green-100: tint-color($green, 80%) !default; +$green-200: tint-color($green, 60%) !default; +$green-300: tint-color($green, 40%) !default; +$green-400: tint-color($green, 20%) !default; +$green-500: $green !default; +$green-600: shade-color($green, 20%) !default; +$green-700: shade-color($green, 40%) !default; +$green-800: shade-color($green, 60%) !default; +$green-900: shade-color($green, 80%) !default; + +$teal-100: tint-color($teal, 80%) !default; +$teal-200: tint-color($teal, 60%) !default; +$teal-300: tint-color($teal, 40%) !default; +$teal-400: tint-color($teal, 20%) !default; +$teal-500: $teal !default; +$teal-600: shade-color($teal, 20%) !default; +$teal-700: shade-color($teal, 40%) !default; +$teal-800: shade-color($teal, 60%) !default; +$teal-900: shade-color($teal, 80%) !default; + +$cyan-100: tint-color($cyan, 80%) !default; +$cyan-200: tint-color($cyan, 60%) !default; +$cyan-300: tint-color($cyan, 40%) !default; +$cyan-400: tint-color($cyan, 20%) !default; +$cyan-500: $cyan !default; +$cyan-600: shade-color($cyan, 20%) !default; +$cyan-700: shade-color($cyan, 40%) !default; +$cyan-800: shade-color($cyan, 60%) !default; +$cyan-900: shade-color($cyan, 80%) !default; + +$blues: ( + "blue-100": $blue-100, + "blue-200": $blue-200, + "blue-300": $blue-300, + "blue-400": $blue-400, + "blue-500": $blue-500, + "blue-600": $blue-600, + "blue-700": $blue-700, + "blue-800": $blue-800, + "blue-900": $blue-900 +) !default; + +$indigos: ( + "indigo-100": $indigo-100, + "indigo-200": $indigo-200, + "indigo-300": $indigo-300, + "indigo-400": $indigo-400, + "indigo-500": $indigo-500, + "indigo-600": $indigo-600, + "indigo-700": $indigo-700, + "indigo-800": $indigo-800, + "indigo-900": $indigo-900 +) !default; + +$purples: ( + "purple-100": $purple-100, + "purple-200": $purple-200, + "purple-300": $purple-300, + "purple-400": $purple-400, + "purple-500": $purple-500, + "purple-600": $purple-600, + "purple-700": $purple-700, + "purple-800": $purple-800, + "purple-900": $purple-900 +) !default; + +$pinks: ( + "pink-100": $pink-100, + "pink-200": $pink-200, + "pink-300": $pink-300, + "pink-400": $pink-400, + "pink-500": $pink-500, + "pink-600": $pink-600, + "pink-700": $pink-700, + "pink-800": $pink-800, + "pink-900": $pink-900 +) !default; + +$reds: ( + "red-100": $red-100, + "red-200": $red-200, + "red-300": $red-300, + "red-400": $red-400, + "red-500": $red-500, + "red-600": $red-600, + "red-700": $red-700, + "red-800": $red-800, + "red-900": $red-900 +) !default; + +$oranges: ( + "orange-100": $orange-100, + "orange-200": $orange-200, + "orange-300": $orange-300, + "orange-400": $orange-400, + "orange-500": $orange-500, + "orange-600": $orange-600, + "orange-700": $orange-700, + "orange-800": $orange-800, + "orange-900": $orange-900 +) !default; + +$yellows: ( + "yellow-100": $yellow-100, + "yellow-200": $yellow-200, + "yellow-300": $yellow-300, + "yellow-400": $yellow-400, + "yellow-500": $yellow-500, + "yellow-600": $yellow-600, + "yellow-700": $yellow-700, + "yellow-800": $yellow-800, + "yellow-900": $yellow-900 +) !default; + +$greens: ( + "green-100": $green-100, + "green-200": $green-200, + "green-300": $green-300, + "green-400": $green-400, + "green-500": $green-500, + "green-600": $green-600, + "green-700": $green-700, + "green-800": $green-800, + "green-900": $green-900 +) !default; + +$teals: ( + "teal-100": $teal-100, + "teal-200": $teal-200, + "teal-300": $teal-300, + "teal-400": $teal-400, + "teal-500": $teal-500, + "teal-600": $teal-600, + "teal-700": $teal-700, + "teal-800": $teal-800, + "teal-900": $teal-900 +) !default; + +$cyans: ( + "cyan-100": $cyan-100, + "cyan-200": $cyan-200, + "cyan-300": $cyan-300, + "cyan-400": $cyan-400, + "cyan-500": $cyan-500, + "cyan-600": $cyan-600, + "cyan-700": $cyan-700, + "cyan-800": $cyan-800, + "cyan-900": $cyan-900 +) !default; +// fusv-enable + +// scss-docs-start theme-color-variables +$primary: $blue !default; +$secondary: $gray-600 !default; +$success: $green !default; +$info: $cyan !default; +$warning: $yellow !default; +$danger: $red !default; +$light: $gray-100 !default; +$dark: $gray-900 !default; +// scss-docs-end theme-color-variables + +// scss-docs-start theme-colors-map +$theme-colors: ( + "primary": $primary, + "secondary": $secondary, + "success": $success, + "info": $info, + "warning": $warning, + "danger": $danger, + "light": $light, + "dark": $dark +) !default; +// scss-docs-end theme-colors-map + +// scss-docs-start theme-text-variables +$primary-text-emphasis: shade-color($primary, 60%) !default; +$secondary-text-emphasis: shade-color($secondary, 60%) !default; +$success-text-emphasis: shade-color($success, 60%) !default; +$info-text-emphasis: shade-color($info, 60%) !default; +$warning-text-emphasis: shade-color($warning, 60%) !default; +$danger-text-emphasis: shade-color($danger, 60%) !default; +$light-text-emphasis: $gray-700 !default; +$dark-text-emphasis: $gray-700 !default; +// scss-docs-end theme-text-variables + +// scss-docs-start theme-bg-subtle-variables +$primary-bg-subtle: tint-color($primary, 80%) !default; +$secondary-bg-subtle: tint-color($secondary, 80%) !default; +$success-bg-subtle: tint-color($success, 80%) !default; +$info-bg-subtle: tint-color($info, 80%) !default; +$warning-bg-subtle: tint-color($warning, 80%) !default; +$danger-bg-subtle: tint-color($danger, 80%) !default; +$light-bg-subtle: mix($gray-100, $white) !default; +$dark-bg-subtle: $gray-400 !default; +// scss-docs-end theme-bg-subtle-variables + +// scss-docs-start theme-border-subtle-variables +$primary-border-subtle: tint-color($primary, 60%) !default; +$secondary-border-subtle: tint-color($secondary, 60%) !default; +$success-border-subtle: tint-color($success, 60%) !default; +$info-border-subtle: tint-color($info, 60%) !default; +$warning-border-subtle: tint-color($warning, 60%) !default; +$danger-border-subtle: tint-color($danger, 60%) !default; +$light-border-subtle: $gray-200 !default; +$dark-border-subtle: $gray-500 !default; +// scss-docs-end theme-border-subtle-variables + +// Characters which are escaped by the escape-svg function +$escaped-characters: ( + ("<", "%3c"), + (">", "%3e"), + ("#", "%23"), + ("(", "%28"), + (")", "%29"), +) !default; + +// Options +// +// Quickly modify global styling by enabling or disabling optional features. + +$enable-caret: true !default; +$enable-rounded: true !default; +$enable-shadows: true !default; // adminlte-modified +$enable-gradients: false !default; +$enable-transitions: true !default; +$enable-reduced-motion: true !default; +$enable-smooth-scroll: true !default; +$enable-grid-classes: true !default; +$enable-container-classes: true !default; +$enable-cssgrid: false !default; +$enable-button-pointers: true !default; +$enable-rfs: true !default; +$enable-validation-icons: true !default; +$enable-negative-margins: true !default; // adminlte-modified +$enable-deprecation-messages: true !default; +$enable-important-utilities: true !default; + +$enable-dark-mode: true !default; +$color-mode-type: data !default; // `data` or `media-query` + +// Prefix for :root CSS variables + +$variable-prefix: bs- !default; // Deprecated in v5.2.0 for the shorter `$prefix` +$prefix: $variable-prefix !default; + +// Gradient +// +// The gradient which is added to components if `$enable-gradients` is `true` +// This gradient is also added to elements with `.bg-gradient` +// scss-docs-start variable-gradient +$gradient: linear-gradient(180deg, rgba($white, .15), rgba($white, 0)) !default; +// scss-docs-end variable-gradient + +// Spacing +// +// Control the default styling of most Bootstrap elements by modifying these +// variables. Mostly focused on spacing. +// You can add more entries to the $spacers map, should you need more variation. + +// scss-docs-start spacer-variables-maps +$spacer: 1rem !default; +$spacers: ( + 0: 0, + 1: $spacer * .25, + 2: $spacer * .5, + 3: $spacer, + 4: $spacer * 1.5, + 5: $spacer * 3, +) !default; +// scss-docs-end spacer-variables-maps + +// Position +// +// Define the edge positioning anchors of the position utilities. + +// scss-docs-start position-map +$position-values: ( + 0: 0, + 50: 50%, + 100: 100% +) !default; +// scss-docs-end position-map + +// Body +// +// Settings for the `` element. + +$body-text-align: null !default; +$body-color: $gray-900 !default; +$body-bg: $white !default; + +$body-secondary-color: rgba($body-color, .75) !default; +$body-secondary-bg: $gray-200 !default; + +$body-tertiary-color: rgba($body-color, .5) !default; +$body-tertiary-bg: $gray-100 !default; + +$body-emphasis-color: $black !default; + +// Links +// +// Style anchor elements. + +$link-color: $primary !default; +$link-decoration: underline !default; +$link-shade-percentage: 20% !default; +$link-hover-color: shift-color($link-color, $link-shade-percentage) !default; +$link-hover-decoration: null !default; + +$stretched-link-pseudo-element: after !default; +$stretched-link-z-index: 1 !default; + +// Icon links +// scss-docs-start icon-link-variables +$icon-link-gap: .375rem !default; +$icon-link-underline-offset: .25em !default; +$icon-link-icon-size: 1em !default; +$icon-link-icon-transition: .2s ease-in-out transform !default; +$icon-link-icon-transform: translate3d(.25em, 0, 0) !default; +// scss-docs-end icon-link-variables + +// Paragraphs +// +// Style p element. + +$paragraph-margin-bottom: 1rem !default; + + +// Grid breakpoints +// +// Define the minimum dimensions at which your layout will change, +// adapting to different screen sizes, for use in media queries. + +// scss-docs-start grid-breakpoints +$grid-breakpoints: ( + xs: 0, + sm: 576px, + md: 768px, + lg: 992px, + xl: 1200px, + xxl: 1400px +) !default; +// scss-docs-end grid-breakpoints + +@include _assert-ascending($grid-breakpoints, "$grid-breakpoints"); +@include _assert-starts-at-zero($grid-breakpoints, "$grid-breakpoints"); + + +// Grid containers +// +// Define the maximum width of `.container` for different screen sizes. + +// scss-docs-start container-max-widths +$container-max-widths: ( + sm: 540px, + md: 720px, + lg: 960px, + xl: 1140px, + xxl: 1320px +) !default; +// scss-docs-end container-max-widths + +@include _assert-ascending($container-max-widths, "$container-max-widths"); + + +// Grid columns +// +// Set the number of columns and specify the width of the gutters. + +$grid-columns: 12 !default; +$grid-gutter-width: 1.5rem !default; +$grid-row-columns: 6 !default; + +// Container padding + +$container-padding-x: $grid-gutter-width !default; + + +// Components +// +// Define common padding and border radius sizes and more. + +// scss-docs-start border-variables +$border-width: 1px !default; +$border-widths: ( + 1: 1px, + 2: 2px, + 3: 3px, + 4: 4px, + 5: 5px +) !default; +$border-style: solid !default; +$border-color: $gray-300 !default; +$border-color-translucent: rgba($black, .175) !default; +// scss-docs-end border-variables + +// scss-docs-start border-radius-variables +$border-radius: .375rem !default; +$border-radius-sm: .25rem !default; +$border-radius-lg: .5rem !default; +$border-radius-xl: 1rem !default; +$border-radius-xxl: 2rem !default; +$border-radius-pill: 50rem !default; +// scss-docs-end border-radius-variables +// fusv-disable +$border-radius-2xl: $border-radius-xxl !default; // Deprecated in v5.3.0 +// fusv-enable + +// scss-docs-start box-shadow-variables +$box-shadow: 0 .5rem 1rem rgba($black, .15) !default; +$box-shadow-sm: 0 .125rem .25rem rgba($black, .075) !default; +$box-shadow-lg: 0 1rem 3rem rgba($black, .175) !default; +$box-shadow-inset: inset 0 1px 2px rgba($black, .075) !default; +// scss-docs-end box-shadow-variables + +$component-active-color: $white !default; +$component-active-bg: $primary !default; + +// scss-docs-start focus-ring-variables +$focus-ring-width: .25rem !default; +$focus-ring-opacity: .25 !default; +$focus-ring-color: rgba($primary, $focus-ring-opacity) !default; +$focus-ring-blur: 0 !default; +$focus-ring-box-shadow: 0 0 $focus-ring-blur $focus-ring-width $focus-ring-color !default; +// scss-docs-end focus-ring-variables + +// scss-docs-start caret-variables +$caret-width: .3em !default; +$caret-vertical-align: $caret-width * .85 !default; +$caret-spacing: $caret-width * .85 !default; +// scss-docs-end caret-variables + +$transition-base: all .2s ease-in-out !default; +$transition-fade: opacity .15s linear !default; +// scss-docs-start collapse-transition +$transition-collapse: height .35s ease !default; +$transition-collapse-width: width .35s ease !default; +// scss-docs-end collapse-transition + +// stylelint-disable function-disallowed-list +// scss-docs-start aspect-ratios +$aspect-ratios: ( + "1x1": 100%, + "4x3": calc(3 / 4 * 100%), + "16x9": calc(9 / 16 * 100%), + "21x9": calc(9 / 21 * 100%) +) !default; +// scss-docs-end aspect-ratios +// stylelint-enable function-disallowed-list + +// Typography +// +// Font, line-height, and color for body text, headings, and more. + +// scss-docs-start font-variables +// stylelint-disable value-keyword-case +$font-family-sans-serif: "Source Sans 3", system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", "Liberation Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji" !default; // adminlte-modified +$font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace !default; +// stylelint-enable value-keyword-case +$font-family-base: var(--#{$prefix}font-sans-serif) !default; +$font-family-code: var(--#{$prefix}font-monospace) !default; + +// $font-size-root affects the value of `rem`, which is used for as well font sizes, paddings, and margins +// $font-size-base affects the font size of the body text +$font-size-root: null !default; +$font-size-base: 1rem !default; // Assumes the browser default, typically `16px` +$font-size-sm: $font-size-base * .875 !default; +$font-size-lg: $font-size-base * 1.25 !default; +$font-size-xs: $font-size-base * .75 !default; // adminlte-modified +$font-size-xl: $font-size-base * 2 !default; // adminlte-modified + +$font-weight-lighter: lighter !default; +$font-weight-light: 300 !default; +$font-weight-normal: 400 !default; +$font-weight-medium: 500 !default; +$font-weight-semibold: 600 !default; +$font-weight-bold: 700 !default; +$font-weight-bolder: bolder !default; + +$font-weight-base: $font-weight-normal !default; + +$line-height-base: 1.5 !default; +$line-height-sm: 1.25 !default; +$line-height-lg: 2 !default; + +$h1-font-size: $font-size-base * 2.5 !default; +$h2-font-size: $font-size-base * 2 !default; +$h3-font-size: $font-size-base * 1.75 !default; +$h4-font-size: $font-size-base * 1.5 !default; +$h5-font-size: $font-size-base * 1.25 !default; +$h6-font-size: $font-size-base !default; +$h7-font-size: $font-size-sm !default; // adminlte-modified +$h8-font-size: $font-size-xs !default; // adminlte-modified +// scss-docs-end font-variables + +// scss-docs-start font-sizes +$font-sizes: ( + 1: $h1-font-size, + 2: $h2-font-size, + 3: $h3-font-size, + 4: $h4-font-size, + 5: $h5-font-size, + 6: $h6-font-size, + 7: $h7-font-size, // adminlte-modified + 8: $h8-font-size // adminlte-modified +) !default; +// scss-docs-end font-sizes + +// scss-docs-start headings-variables +$headings-margin-bottom: $spacer * .5 !default; +$headings-font-family: null !default; +$headings-font-style: null !default; +$headings-font-weight: 500 !default; +$headings-line-height: 1.2 !default; +$headings-color: inherit !default; +// scss-docs-end headings-variables + +// scss-docs-start display-headings +$display-font-sizes: ( + 1: 5rem, + 2: 4.5rem, + 3: 4rem, + 4: 3.5rem, + 5: 3rem, + 6: 2.5rem +) !default; + +$display-font-family: null !default; +$display-font-style: null !default; +$display-font-weight: 300 !default; +$display-line-height: $headings-line-height !default; +// scss-docs-end display-headings + +// scss-docs-start type-variables +$lead-font-size: $font-size-base * 1.25 !default; +$lead-font-weight: 300 !default; + +$small-font-size: .875em !default; + +$sub-sup-font-size: .75em !default; + +// fusv-disable +$text-muted: var(--#{$prefix}secondary-color) !default; // Deprecated in 5.3.0 +// fusv-enable + +$initialism-font-size: $small-font-size !default; + +$blockquote-margin-y: $spacer !default; +$blockquote-font-size: $font-size-base * 1.25 !default; +$blockquote-footer-color: $gray-600 !default; +$blockquote-footer-font-size: $small-font-size !default; + +$hr-margin-y: $spacer !default; +$hr-color: inherit !default; + +// fusv-disable +$hr-bg-color: null !default; // Deprecated in v5.2.0 +$hr-height: null !default; // Deprecated in v5.2.0 +// fusv-enable + +$hr-border-color: null !default; // Allows for inherited colors +$hr-border-width: var(--#{$prefix}border-width) !default; +$hr-opacity: .25 !default; + +// scss-docs-start vr-variables +$vr-border-width: var(--#{$prefix}border-width) !default; +// scss-docs-end vr-variables + +$legend-margin-bottom: .5rem !default; +$legend-font-size: 1.5rem !default; +$legend-font-weight: null !default; + +$dt-font-weight: $font-weight-bold !default; + +$list-inline-padding: .5rem !default; + +$mark-padding: .1875em !default; +$mark-color: $body-color !default; +$mark-bg: $yellow-100 !default; +// scss-docs-end type-variables + + +// Tables +// +// Customizes the `.table` component with basic values, each used across all table variations. + +// scss-docs-start table-variables +$table-cell-padding-y: .5rem !default; +$table-cell-padding-x: .5rem !default; +$table-cell-padding-y-sm: .25rem !default; +$table-cell-padding-x-sm: .25rem !default; + +$table-cell-vertical-align: top !default; + +$table-color: var(--#{$prefix}emphasis-color) !default; +$table-bg: var(--#{$prefix}body-bg) !default; +$table-accent-bg: transparent !default; + +$table-th-font-weight: null !default; + +$table-striped-color: $table-color !default; +$table-striped-bg-factor: .05 !default; +$table-striped-bg: rgba(var(--#{$prefix}emphasis-color-rgb), $table-striped-bg-factor) !default; + +$table-active-color: $table-color !default; +$table-active-bg-factor: .1 !default; +$table-active-bg: rgba(var(--#{$prefix}emphasis-color-rgb), $table-active-bg-factor) !default; + +$table-hover-color: $table-color !default; +$table-hover-bg-factor: .075 !default; +$table-hover-bg: rgba(var(--#{$prefix}emphasis-color-rgb), $table-hover-bg-factor) !default; + +$table-border-factor: .2 !default; +$table-border-width: var(--#{$prefix}border-width) !default; +$table-border-color: var(--#{$prefix}border-color) !default; + +$table-striped-order: odd !default; +$table-striped-columns-order: even !default; + +$table-group-separator-color: currentcolor !default; + +$table-caption-color: var(--#{$prefix}secondary-color) !default; + +$table-bg-scale: -80% !default; +// scss-docs-end table-variables + +// scss-docs-start table-loop +$table-variants: ( + "primary": shift-color($primary, $table-bg-scale), + "secondary": shift-color($secondary, $table-bg-scale), + "success": shift-color($success, $table-bg-scale), + "info": shift-color($info, $table-bg-scale), + "warning": shift-color($warning, $table-bg-scale), + "danger": shift-color($danger, $table-bg-scale), + "light": $light, + "dark": $dark, +) !default; +// scss-docs-end table-loop + + +// Buttons + Forms +// +// Shared variables that are reassigned to `$input-` and `$btn-` specific variables. + +// scss-docs-start input-btn-variables +$input-btn-padding-y: .375rem !default; +$input-btn-padding-x: .75rem !default; +$input-btn-font-family: null !default; +$input-btn-font-size: $font-size-base !default; +$input-btn-line-height: $line-height-base !default; + +$input-btn-focus-width: $focus-ring-width !default; +$input-btn-focus-color-opacity: $focus-ring-opacity !default; +$input-btn-focus-color: $focus-ring-color !default; +$input-btn-focus-blur: $focus-ring-blur !default; +$input-btn-focus-box-shadow: $focus-ring-box-shadow !default; + +$input-btn-padding-y-sm: .25rem !default; +$input-btn-padding-x-sm: .5rem !default; +$input-btn-font-size-sm: $font-size-sm !default; + +$input-btn-padding-y-lg: .5rem !default; +$input-btn-padding-x-lg: 1rem !default; +$input-btn-font-size-lg: $font-size-lg !default; + +$input-btn-border-width: var(--#{$prefix}border-width) !default; +// scss-docs-end input-btn-variables + + +// Buttons +// +// For each of Bootstrap's buttons, define text, background, and border color. + +// scss-docs-start btn-variables +$btn-color: var(--#{$prefix}body-color) !default; +$btn-padding-y: $input-btn-padding-y !default; +$btn-padding-x: $input-btn-padding-x !default; +$btn-font-family: $input-btn-font-family !default; +$btn-font-size: $input-btn-font-size !default; +$btn-line-height: $input-btn-line-height !default; +$btn-white-space: null !default; // Set to `nowrap` to prevent text wrapping + +$btn-padding-y-sm: $input-btn-padding-y-sm !default; +$btn-padding-x-sm: $input-btn-padding-x-sm !default; +$btn-font-size-sm: $input-btn-font-size-sm !default; + +$btn-padding-y-lg: $input-btn-padding-y-lg !default; +$btn-padding-x-lg: $input-btn-padding-x-lg !default; +$btn-font-size-lg: $input-btn-font-size-lg !default; + +$btn-border-width: $input-btn-border-width !default; + +$btn-font-weight: $font-weight-normal !default; +$btn-box-shadow: inset 0 1px 0 rgba($white, .15), 0 1px 1px rgba($black, .075) !default; +$btn-focus-width: $input-btn-focus-width !default; +$btn-focus-box-shadow: $input-btn-focus-box-shadow !default; +$btn-disabled-opacity: .65 !default; +$btn-active-box-shadow: inset 0 3px 5px rgba($black, .125) !default; + +$btn-link-color: var(--#{$prefix}link-color) !default; +$btn-link-hover-color: var(--#{$prefix}link-hover-color) !default; +$btn-link-disabled-color: $gray-600 !default; +$btn-link-focus-shadow-rgb: to-rgb(mix(color-contrast($link-color), $link-color, 15%)) !default; + +// Allows for customizing button radius independently from global border radius +$btn-border-radius: var(--#{$prefix}border-radius) !default; +$btn-border-radius-sm: var(--#{$prefix}border-radius-sm) !default; +$btn-border-radius-lg: var(--#{$prefix}border-radius-lg) !default; + +$btn-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default; + +$btn-hover-bg-shade-amount: 15% !default; +$btn-hover-bg-tint-amount: 15% !default; +$btn-hover-border-shade-amount: 20% !default; +$btn-hover-border-tint-amount: 10% !default; +$btn-active-bg-shade-amount: 20% !default; +$btn-active-bg-tint-amount: 20% !default; +$btn-active-border-shade-amount: 25% !default; +$btn-active-border-tint-amount: 10% !default; +// scss-docs-end btn-variables + + +// Forms + +// scss-docs-start form-text-variables +$form-text-margin-top: .25rem !default; +$form-text-font-size: $small-font-size !default; +$form-text-font-style: null !default; +$form-text-font-weight: null !default; +$form-text-color: var(--#{$prefix}secondary-color) !default; +// scss-docs-end form-text-variables + +// scss-docs-start form-label-variables +$form-label-margin-bottom: .5rem !default; +$form-label-font-size: null !default; +$form-label-font-style: null !default; +$form-label-font-weight: null !default; +$form-label-color: null !default; +// scss-docs-end form-label-variables + +// scss-docs-start form-input-variables +$input-padding-y: $input-btn-padding-y !default; +$input-padding-x: $input-btn-padding-x !default; +$input-font-family: $input-btn-font-family !default; +$input-font-size: $input-btn-font-size !default; +$input-font-weight: $font-weight-base !default; +$input-line-height: $input-btn-line-height !default; + +$input-padding-y-sm: $input-btn-padding-y-sm !default; +$input-padding-x-sm: $input-btn-padding-x-sm !default; +$input-font-size-sm: $input-btn-font-size-sm !default; + +$input-padding-y-lg: $input-btn-padding-y-lg !default; +$input-padding-x-lg: $input-btn-padding-x-lg !default; +$input-font-size-lg: $input-btn-font-size-lg !default; + +$input-bg: var(--#{$prefix}body-bg) !default; +$input-disabled-color: null !default; +$input-disabled-bg: var(--#{$prefix}secondary-bg) !default; +$input-disabled-border-color: null !default; + +$input-color: var(--#{$prefix}body-color) !default; +$input-border-color: var(--#{$prefix}border-color) !default; +$input-border-width: $input-btn-border-width !default; +$input-box-shadow: var(--#{$prefix}box-shadow-inset) !default; + +$input-border-radius: var(--#{$prefix}border-radius) !default; +$input-border-radius-sm: var(--#{$prefix}border-radius-sm) !default; +$input-border-radius-lg: var(--#{$prefix}border-radius-lg) !default; + +$input-focus-bg: $input-bg !default; +$input-focus-border-color: tint-color($component-active-bg, 50%) !default; +$input-focus-color: $input-color !default; +$input-focus-width: $input-btn-focus-width !default; +$input-focus-box-shadow: $input-btn-focus-box-shadow !default; + +$input-placeholder-color: var(--#{$prefix}secondary-color) !default; +$input-plaintext-color: var(--#{$prefix}body-color) !default; + +$input-height-border: calc(#{$input-border-width} * 2) !default; // stylelint-disable-line function-disallowed-list + +$input-height-inner: add($input-line-height * 1em, $input-padding-y * 2) !default; +$input-height-inner-half: add($input-line-height * .5em, $input-padding-y) !default; +$input-height-inner-quarter: add($input-line-height * .25em, $input-padding-y * .5) !default; + +$input-height: add($input-line-height * 1em, add($input-padding-y * 2, $input-height-border, false)) !default; +$input-height-sm: add($input-line-height * 1em, add($input-padding-y-sm * 2, $input-height-border, false)) !default; +$input-height-lg: add($input-line-height * 1em, add($input-padding-y-lg * 2, $input-height-border, false)) !default; + +$input-transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out !default; + +$form-color-width: 3rem !default; +// scss-docs-end form-input-variables + +// scss-docs-start form-check-variables +$form-check-input-width: 1em !default; +$form-check-min-height: $font-size-base * $line-height-base !default; +$form-check-padding-start: $form-check-input-width + .5em !default; +$form-check-margin-bottom: .125rem !default; +$form-check-label-color: null !default; +$form-check-label-cursor: null !default; +$form-check-transition: null !default; + +$form-check-input-active-filter: brightness(90%) !default; + +$form-check-input-bg: $input-bg !default; +$form-check-input-border: var(--#{$prefix}border-width) solid var(--#{$prefix}border-color) !default; +$form-check-input-border-radius: .25em !default; +$form-check-radio-border-radius: 50% !default; +$form-check-input-focus-border: $input-focus-border-color !default; +$form-check-input-focus-box-shadow: $focus-ring-box-shadow !default; + +$form-check-input-checked-color: $component-active-color !default; +$form-check-input-checked-bg-color: $component-active-bg !default; +$form-check-input-checked-border-color: $form-check-input-checked-bg-color !default; +$form-check-input-checked-bg-image: url("data:image/svg+xml,") !default; +$form-check-radio-checked-bg-image: url("data:image/svg+xml,") !default; + +$form-check-input-indeterminate-color: $component-active-color !default; +$form-check-input-indeterminate-bg-color: $component-active-bg !default; +$form-check-input-indeterminate-border-color: $form-check-input-indeterminate-bg-color !default; +$form-check-input-indeterminate-bg-image: url("data:image/svg+xml,") !default; + +$form-check-input-disabled-opacity: .5 !default; +$form-check-label-disabled-opacity: $form-check-input-disabled-opacity !default; +$form-check-btn-check-disabled-opacity: $btn-disabled-opacity !default; + +$form-check-inline-margin-end: 1rem !default; +// scss-docs-end form-check-variables + +// scss-docs-start form-switch-variables +$form-switch-color: rgba($black, .25) !default; +$form-switch-width: 2em !default; +$form-switch-padding-start: $form-switch-width + .5em !default; +$form-switch-bg-image: url("data:image/svg+xml,") !default; +$form-switch-border-radius: $form-switch-width !default; +$form-switch-transition: background-position .15s ease-in-out !default; + +$form-switch-focus-color: $input-focus-border-color !default; +$form-switch-focus-bg-image: url("data:image/svg+xml,") !default; + +$form-switch-checked-color: $component-active-color !default; +$form-switch-checked-bg-image: url("data:image/svg+xml,") !default; +$form-switch-checked-bg-position: right center !default; +// scss-docs-end form-switch-variables + +// scss-docs-start input-group-variables +$input-group-addon-padding-y: $input-padding-y !default; +$input-group-addon-padding-x: $input-padding-x !default; +$input-group-addon-font-weight: $input-font-weight !default; +$input-group-addon-color: $input-color !default; +$input-group-addon-bg: var(--#{$prefix}tertiary-bg) !default; +$input-group-addon-border-color: $input-border-color !default; +// scss-docs-end input-group-variables + +// scss-docs-start form-select-variables +$form-select-padding-y: $input-padding-y !default; +$form-select-padding-x: $input-padding-x !default; +$form-select-font-family: $input-font-family !default; +$form-select-font-size: $input-font-size !default; +$form-select-indicator-padding: $form-select-padding-x * 3 !default; // Extra padding for background-image +$form-select-font-weight: $input-font-weight !default; +$form-select-line-height: $input-line-height !default; +$form-select-color: $input-color !default; +$form-select-bg: $input-bg !default; +$form-select-disabled-color: null !default; +$form-select-disabled-bg: $input-disabled-bg !default; +$form-select-disabled-border-color: $input-disabled-border-color !default; +$form-select-bg-position: right $form-select-padding-x center !default; +$form-select-bg-size: 16px 12px !default; // In pixels because image dimensions +$form-select-indicator-color: $gray-800 !default; +$form-select-indicator: url("data:image/svg+xml,") !default; + +$form-select-feedback-icon-padding-end: $form-select-padding-x * 2.5 + $form-select-indicator-padding !default; +$form-select-feedback-icon-position: center right $form-select-indicator-padding !default; +$form-select-feedback-icon-size: $input-height-inner-half $input-height-inner-half !default; + +$form-select-border-width: $input-border-width !default; +$form-select-border-color: $input-border-color !default; +$form-select-border-radius: $input-border-radius !default; +$form-select-box-shadow: var(--#{$prefix}box-shadow-inset) !default; + +$form-select-focus-border-color: $input-focus-border-color !default; +$form-select-focus-width: $input-focus-width !default; +$form-select-focus-box-shadow: 0 0 0 $form-select-focus-width $input-btn-focus-color !default; + +$form-select-padding-y-sm: $input-padding-y-sm !default; +$form-select-padding-x-sm: $input-padding-x-sm !default; +$form-select-font-size-sm: $input-font-size-sm !default; +$form-select-border-radius-sm: $input-border-radius-sm !default; + +$form-select-padding-y-lg: $input-padding-y-lg !default; +$form-select-padding-x-lg: $input-padding-x-lg !default; +$form-select-font-size-lg: $input-font-size-lg !default; +$form-select-border-radius-lg: $input-border-radius-lg !default; + +$form-select-transition: $input-transition !default; +// scss-docs-end form-select-variables + +// scss-docs-start form-range-variables +$form-range-track-width: 100% !default; +$form-range-track-height: .5rem !default; +$form-range-track-cursor: pointer !default; +$form-range-track-bg: var(--#{$prefix}secondary-bg) !default; +$form-range-track-border-radius: 1rem !default; +$form-range-track-box-shadow: var(--#{$prefix}box-shadow-inset) !default; + +$form-range-thumb-width: 1rem !default; +$form-range-thumb-height: $form-range-thumb-width !default; +$form-range-thumb-bg: $component-active-bg !default; +$form-range-thumb-border: 0 !default; +$form-range-thumb-border-radius: 1rem !default; +$form-range-thumb-box-shadow: 0 .1rem .25rem rgba($black, .1) !default; +$form-range-thumb-focus-box-shadow: 0 0 0 1px $body-bg, $input-focus-box-shadow !default; +$form-range-thumb-focus-box-shadow-width: $input-focus-width !default; // For focus box shadow issue in Edge +$form-range-thumb-active-bg: tint-color($component-active-bg, 70%) !default; +$form-range-thumb-disabled-bg: var(--#{$prefix}secondary-color) !default; +$form-range-thumb-transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default; +// scss-docs-end form-range-variables + +// scss-docs-start form-file-variables +$form-file-button-color: $input-color !default; +$form-file-button-bg: var(--#{$prefix}tertiary-bg) !default; +$form-file-button-hover-bg: var(--#{$prefix}secondary-bg) !default; +// scss-docs-end form-file-variables + +// scss-docs-start form-floating-variables +$form-floating-height: add(3.5rem, $input-height-border) !default; +$form-floating-line-height: 1.25 !default; +$form-floating-padding-x: $input-padding-x !default; +$form-floating-padding-y: 1rem !default; +$form-floating-input-padding-t: 1.625rem !default; +$form-floating-input-padding-b: .625rem !default; +$form-floating-label-height: 1.5em !default; +$form-floating-label-opacity: .65 !default; +$form-floating-label-transform: scale(.85) translateY(-.5rem) translateX(.15rem) !default; +$form-floating-label-disabled-color: $gray-600 !default; +$form-floating-transition: opacity .1s ease-in-out, transform .1s ease-in-out !default; +// scss-docs-end form-floating-variables + +// Form validation + +// scss-docs-start form-feedback-variables +$form-feedback-margin-top: $form-text-margin-top !default; +$form-feedback-font-size: $form-text-font-size !default; +$form-feedback-font-style: $form-text-font-style !default; +$form-feedback-valid-color: $success !default; +$form-feedback-invalid-color: $danger !default; + +$form-feedback-icon-valid-color: $form-feedback-valid-color !default; +$form-feedback-icon-valid: url("data:image/svg+xml,") !default; +$form-feedback-icon-invalid-color: $form-feedback-invalid-color !default; +$form-feedback-icon-invalid: url("data:image/svg+xml,") !default; +// scss-docs-end form-feedback-variables + +// scss-docs-start form-validation-colors +$form-valid-color: $form-feedback-valid-color !default; +$form-valid-border-color: $form-feedback-valid-color !default; +$form-invalid-color: $form-feedback-invalid-color !default; +$form-invalid-border-color: $form-feedback-invalid-color !default; +// scss-docs-end form-validation-colors + +// scss-docs-start form-validation-states +$form-validation-states: ( + "valid": ( + "color": var(--#{$prefix}form-valid-color), + "icon": $form-feedback-icon-valid, + "tooltip-color": #fff, + "tooltip-bg-color": var(--#{$prefix}success), + "focus-box-shadow": 0 0 $input-btn-focus-blur $input-focus-width rgba(var(--#{$prefix}success-rgb), $input-btn-focus-color-opacity), + "border-color": var(--#{$prefix}form-valid-border-color), + ), + "invalid": ( + "color": var(--#{$prefix}form-invalid-color), + "icon": $form-feedback-icon-invalid, + "tooltip-color": #fff, + "tooltip-bg-color": var(--#{$prefix}danger), + "focus-box-shadow": 0 0 $input-btn-focus-blur $input-focus-width rgba(var(--#{$prefix}danger-rgb), $input-btn-focus-color-opacity), + "border-color": var(--#{$prefix}form-invalid-border-color), + ) +) !default; +// scss-docs-end form-validation-states + +// Z-index master list +// +// Warning: Avoid customizing these values. They're used for a bird's eye view +// of components dependent on the z-axis and are designed to all work together. + +// scss-docs-start zindex-stack +$zindex-dropdown: 1000 !default; +$zindex-sticky: 1020 !default; +$zindex-fixed: 1030 !default; +$zindex-offcanvas-backdrop: 1040 !default; +$zindex-offcanvas: 1045 !default; +$zindex-modal-backdrop: 1050 !default; +$zindex-modal: 1055 !default; +$zindex-popover: 1070 !default; +$zindex-tooltip: 1080 !default; +$zindex-toast: 1090 !default; +// scss-docs-end zindex-stack + +// scss-docs-start zindex-levels-map +$zindex-levels: ( + n1: -1, + 0: 0, + 1: 1, + 2: 2, + 3: 3 +) !default; +// scss-docs-end zindex-levels-map + + +// Navs + +// scss-docs-start nav-variables +$nav-link-padding-y: .5rem !default; +$nav-link-padding-x: 1rem !default; +$nav-link-font-size: null !default; +$nav-link-font-weight: null !default; +$nav-link-color: var(--#{$prefix}link-color) !default; +$nav-link-hover-color: var(--#{$prefix}link-hover-color) !default; +$nav-link-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out !default; +$nav-link-disabled-color: var(--#{$prefix}secondary-color) !default; +$nav-link-focus-box-shadow: $focus-ring-box-shadow !default; + +$nav-tabs-border-color: var(--#{$prefix}border-color) !default; +$nav-tabs-border-width: var(--#{$prefix}border-width) !default; +$nav-tabs-border-radius: var(--#{$prefix}border-radius) !default; +$nav-tabs-link-hover-border-color: var(--#{$prefix}secondary-bg) var(--#{$prefix}secondary-bg) $nav-tabs-border-color !default; +$nav-tabs-link-active-color: var(--#{$prefix}emphasis-color) !default; +$nav-tabs-link-active-bg: var(--#{$prefix}body-bg) !default; +$nav-tabs-link-active-border-color: var(--#{$prefix}border-color) var(--#{$prefix}border-color) $nav-tabs-link-active-bg !default; + +$nav-pills-border-radius: var(--#{$prefix}border-radius) !default; +$nav-pills-link-active-color: $component-active-color !default; +$nav-pills-link-active-bg: $component-active-bg !default; + +$nav-underline-gap: 1rem !default; +$nav-underline-border-width: .125rem !default; +$nav-underline-link-active-color: var(--#{$prefix}emphasis-color) !default; +// scss-docs-end nav-variables + + +// Navbar + +// scss-docs-start navbar-variables +$navbar-padding-y: $spacer * .5 !default; +$navbar-padding-x: null !default; + +$navbar-nav-link-padding-x: 1rem !default; // adminlte-modified + +$navbar-brand-font-size: $font-size-lg !default; +// Compute the navbar-brand padding-y so the navbar-brand will have the same height as navbar-text and nav-link +$nav-link-height: $font-size-base * $line-height-base + $nav-link-padding-y * 2 !default; +$navbar-brand-height: $navbar-brand-font-size * $line-height-base !default; +$navbar-brand-padding-y: ($nav-link-height - $navbar-brand-height) * .5 !default; +$navbar-brand-margin-end: 1rem !default; + +$navbar-toggler-padding-y: .25rem !default; +$navbar-toggler-padding-x: .75rem !default; +$navbar-toggler-font-size: $font-size-lg !default; +$navbar-toggler-border-radius: $btn-border-radius !default; +$navbar-toggler-focus-width: $btn-focus-width !default; +$navbar-toggler-transition: box-shadow .15s ease-in-out !default; + +$navbar-light-color: rgba(var(--#{$prefix}emphasis-color-rgb), .65) !default; +$navbar-light-hover-color: rgba(var(--#{$prefix}emphasis-color-rgb), .8) !default; +$navbar-light-active-color: rgba(var(--#{$prefix}emphasis-color-rgb), 1) !default; +$navbar-light-disabled-color: rgba(var(--#{$prefix}emphasis-color-rgb), .3) !default; +$navbar-light-icon-color: rgba($body-color, .75) !default; +$navbar-light-toggler-icon-bg: url("data:image/svg+xml,") !default; +$navbar-light-toggler-border-color: rgba(var(--#{$prefix}emphasis-color-rgb), .15) !default; +$navbar-light-brand-color: $navbar-light-active-color !default; +$navbar-light-brand-hover-color: $navbar-light-active-color !default; +// scss-docs-end navbar-variables + +// scss-docs-start navbar-dark-variables +$navbar-dark-color: rgba($white, .55) !default; +$navbar-dark-hover-color: rgba($white, .75) !default; +$navbar-dark-active-color: $white !default; +$navbar-dark-disabled-color: rgba($white, .25) !default; +$navbar-dark-icon-color: $navbar-dark-color !default; +$navbar-dark-toggler-icon-bg: url("data:image/svg+xml,") !default; +$navbar-dark-toggler-border-color: rgba($white, .1) !default; +$navbar-dark-brand-color: $navbar-dark-active-color !default; +$navbar-dark-brand-hover-color: $navbar-dark-active-color !default; +// scss-docs-end navbar-dark-variables + + +// Dropdowns +// +// Dropdown menu container and contents. + +// scss-docs-start dropdown-variables +$dropdown-min-width: 10rem !default; +$dropdown-padding-x: 0 !default; +$dropdown-padding-y: .5rem !default; +$dropdown-spacer: .125rem !default; +$dropdown-font-size: $font-size-base !default; +$dropdown-color: var(--#{$prefix}body-color) !default; +$dropdown-bg: var(--#{$prefix}body-bg) !default; +$dropdown-border-color: var(--#{$prefix}border-color-translucent) !default; +$dropdown-border-radius: var(--#{$prefix}border-radius) !default; +$dropdown-border-width: var(--#{$prefix}border-width) !default; +$dropdown-inner-border-radius: calc(#{$dropdown-border-radius} - #{$dropdown-border-width}) !default; // stylelint-disable-line function-disallowed-list +$dropdown-divider-bg: $dropdown-border-color !default; +$dropdown-divider-margin-y: $spacer * .5 !default; +$dropdown-box-shadow: var(--#{$prefix}box-shadow) !default; + +$dropdown-link-color: var(--#{$prefix}body-color) !default; +$dropdown-link-hover-color: $dropdown-link-color !default; +$dropdown-link-hover-bg: var(--#{$prefix}tertiary-bg) !default; + +$dropdown-link-active-color: $component-active-color !default; +$dropdown-link-active-bg: $component-active-bg !default; + +$dropdown-link-disabled-color: var(--#{$prefix}tertiary-color) !default; + +$dropdown-item-padding-y: $spacer * .25 !default; +$dropdown-item-padding-x: $spacer !default; + +$dropdown-header-color: $gray-600 !default; +$dropdown-header-padding-x: $dropdown-item-padding-x !default; +$dropdown-header-padding-y: $dropdown-padding-y !default; +// fusv-disable +$dropdown-header-padding: $dropdown-header-padding-y $dropdown-header-padding-x !default; // Deprecated in v5.2.0 +// fusv-enable +// scss-docs-end dropdown-variables + +// scss-docs-start dropdown-dark-variables +$dropdown-dark-color: $gray-300 !default; +$dropdown-dark-bg: $gray-800 !default; +$dropdown-dark-border-color: $dropdown-border-color !default; +$dropdown-dark-divider-bg: $dropdown-divider-bg !default; +$dropdown-dark-box-shadow: null !default; +$dropdown-dark-link-color: $dropdown-dark-color !default; +$dropdown-dark-link-hover-color: $white !default; +$dropdown-dark-link-hover-bg: rgba($white, .15) !default; +$dropdown-dark-link-active-color: $dropdown-link-active-color !default; +$dropdown-dark-link-active-bg: $dropdown-link-active-bg !default; +$dropdown-dark-link-disabled-color: $gray-500 !default; +$dropdown-dark-header-color: $gray-500 !default; +// scss-docs-end dropdown-dark-variables + + +// Pagination + +// scss-docs-start pagination-variables +$pagination-padding-y: .375rem !default; +$pagination-padding-x: .75rem !default; +$pagination-padding-y-sm: .25rem !default; +$pagination-padding-x-sm: .5rem !default; +$pagination-padding-y-lg: .75rem !default; +$pagination-padding-x-lg: 1.5rem !default; + +$pagination-font-size: $font-size-base !default; + +$pagination-color: var(--#{$prefix}link-color) !default; +$pagination-bg: var(--#{$prefix}body-bg) !default; +$pagination-border-radius: var(--#{$prefix}border-radius) !default; +$pagination-border-width: var(--#{$prefix}border-width) !default; +$pagination-margin-start: calc(-1 * #{$pagination-border-width}) !default; // stylelint-disable-line function-disallowed-list +$pagination-border-color: var(--#{$prefix}border-color) !default; + +$pagination-focus-color: var(--#{$prefix}link-hover-color) !default; +$pagination-focus-bg: var(--#{$prefix}secondary-bg) !default; +$pagination-focus-box-shadow: $focus-ring-box-shadow !default; +$pagination-focus-outline: 0 !default; + +$pagination-hover-color: var(--#{$prefix}link-hover-color) !default; +$pagination-hover-bg: var(--#{$prefix}tertiary-bg) !default; +$pagination-hover-border-color: var(--#{$prefix}border-color) !default; // Todo in v6: remove this? + +$pagination-active-color: $component-active-color !default; +$pagination-active-bg: $component-active-bg !default; +$pagination-active-border-color: $component-active-bg !default; + +$pagination-disabled-color: var(--#{$prefix}secondary-color) !default; +$pagination-disabled-bg: var(--#{$prefix}secondary-bg) !default; +$pagination-disabled-border-color: var(--#{$prefix}border-color) !default; + +$pagination-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default; + +$pagination-border-radius-sm: var(--#{$prefix}border-radius-sm) !default; +$pagination-border-radius-lg: var(--#{$prefix}border-radius-lg) !default; +// scss-docs-end pagination-variables + + +// Placeholders + +// scss-docs-start placeholders +$placeholder-opacity-max: .5 !default; +$placeholder-opacity-min: .2 !default; +// scss-docs-end placeholders + +// Cards + +// scss-docs-start card-variables +$card-spacer-y: $spacer !default; +$card-spacer-x: $spacer !default; +$card-title-spacer-y: $spacer * .5 !default; +$card-title-color: null !default; +$card-subtitle-color: null !default; +$card-border-width: var(--#{$prefix}border-width) !default; +$card-border-color: var(--#{$prefix}border-color-translucent) !default; +$card-border-radius: var(--#{$prefix}border-radius) !default; +$card-box-shadow: null !default; +$card-inner-border-radius: subtract($card-border-radius, $card-border-width) !default; +$card-cap-padding-y: $card-spacer-y * .5 !default; +$card-cap-padding-x: $card-spacer-x !default; +$card-cap-bg: rgba(var(--#{$prefix}body-color-rgb), .03) !default; +$card-cap-color: null !default; +$card-height: null !default; +$card-color: null !default; +$card-bg: var(--#{$prefix}body-bg) !default; +$card-img-overlay-padding: $spacer !default; +$card-group-margin: $grid-gutter-width * .5 !default; +// scss-docs-end card-variables + +// Accordion + +// scss-docs-start accordion-variables +$accordion-padding-y: 1rem !default; +$accordion-padding-x: 1.25rem !default; +$accordion-color: var(--#{$prefix}body-color) !default; +$accordion-bg: var(--#{$prefix}body-bg) !default; +$accordion-border-width: var(--#{$prefix}border-width) !default; +$accordion-border-color: var(--#{$prefix}border-color) !default; +$accordion-border-radius: var(--#{$prefix}border-radius) !default; +$accordion-inner-border-radius: subtract($accordion-border-radius, $accordion-border-width) !default; + +$accordion-body-padding-y: $accordion-padding-y !default; +$accordion-body-padding-x: $accordion-padding-x !default; + +$accordion-button-padding-y: $accordion-padding-y !default; +$accordion-button-padding-x: $accordion-padding-x !default; +$accordion-button-color: var(--#{$prefix}body-color) !default; +$accordion-button-bg: var(--#{$prefix}accordion-bg) !default; +$accordion-transition: $btn-transition, border-radius .15s ease !default; +$accordion-button-active-bg: var(--#{$prefix}primary-bg-subtle) !default; +$accordion-button-active-color: var(--#{$prefix}primary-text-emphasis) !default; + +// fusv-disable +$accordion-button-focus-border-color: $input-focus-border-color !default; // Deprecated in v5.3.3 +// fusv-enable +$accordion-button-focus-box-shadow: $btn-focus-box-shadow !default; + +$accordion-icon-width: 1.25rem !default; +$accordion-icon-color: $body-color !default; +$accordion-icon-active-color: $primary-text-emphasis !default; +$accordion-icon-transition: transform .2s ease-in-out !default; +$accordion-icon-transform: rotate(-180deg) !default; + +$accordion-button-icon: url("data:image/svg+xml,") !default; +$accordion-button-active-icon: url("data:image/svg+xml,") !default; +// scss-docs-end accordion-variables + +// Tooltips + +// scss-docs-start tooltip-variables +$tooltip-font-size: $font-size-sm !default; +$tooltip-max-width: 200px !default; +$tooltip-color: var(--#{$prefix}body-bg) !default; +$tooltip-bg: var(--#{$prefix}emphasis-color) !default; +$tooltip-border-radius: var(--#{$prefix}border-radius) !default; +$tooltip-opacity: .9 !default; +$tooltip-padding-y: $spacer * .25 !default; +$tooltip-padding-x: $spacer * .5 !default; +$tooltip-margin: null !default; // TODO: remove this in v6 + +$tooltip-arrow-width: .8rem !default; +$tooltip-arrow-height: .4rem !default; +// fusv-disable +$tooltip-arrow-color: null !default; // Deprecated in Bootstrap 5.2.0 for CSS variables +// fusv-enable +// scss-docs-end tooltip-variables + +// Form tooltips must come after regular tooltips +// scss-docs-start tooltip-feedback-variables +$form-feedback-tooltip-padding-y: $tooltip-padding-y !default; +$form-feedback-tooltip-padding-x: $tooltip-padding-x !default; +$form-feedback-tooltip-font-size: $tooltip-font-size !default; +$form-feedback-tooltip-line-height: null !default; +$form-feedback-tooltip-opacity: $tooltip-opacity !default; +$form-feedback-tooltip-border-radius: $tooltip-border-radius !default; +// scss-docs-end tooltip-feedback-variables + + +// Popovers + +// scss-docs-start popover-variables +$popover-font-size: $font-size-sm !default; +$popover-bg: var(--#{$prefix}body-bg) !default; +$popover-max-width: 276px !default; +$popover-border-width: var(--#{$prefix}border-width) !default; +$popover-border-color: var(--#{$prefix}border-color-translucent) !default; +$popover-border-radius: var(--#{$prefix}border-radius-lg) !default; +$popover-inner-border-radius: calc(#{$popover-border-radius} - #{$popover-border-width}) !default; // stylelint-disable-line function-disallowed-list +$popover-box-shadow: var(--#{$prefix}box-shadow) !default; + +$popover-header-font-size: $font-size-base !default; +$popover-header-bg: var(--#{$prefix}secondary-bg) !default; +$popover-header-color: $headings-color !default; +$popover-header-padding-y: .5rem !default; +$popover-header-padding-x: $spacer !default; + +$popover-body-color: var(--#{$prefix}body-color) !default; +$popover-body-padding-y: $spacer !default; +$popover-body-padding-x: $spacer !default; + +$popover-arrow-width: 1rem !default; +$popover-arrow-height: .5rem !default; +// scss-docs-end popover-variables + +// fusv-disable +// Deprecated in Bootstrap 5.2.0 for CSS variables +$popover-arrow-color: $popover-bg !default; +$popover-arrow-outer-color: var(--#{$prefix}border-color-translucent) !default; +// fusv-enable + + +// Toasts + +// scss-docs-start toast-variables +$toast-max-width: 350px !default; +$toast-padding-x: .75rem !default; +$toast-padding-y: .5rem !default; +$toast-font-size: .875rem !default; +$toast-color: null !default; +$toast-background-color: rgba(var(--#{$prefix}body-bg-rgb), .85) !default; +$toast-border-width: var(--#{$prefix}border-width) !default; +$toast-border-color: var(--#{$prefix}border-color-translucent) !default; +$toast-border-radius: var(--#{$prefix}border-radius) !default; +$toast-box-shadow: var(--#{$prefix}box-shadow) !default; +$toast-spacing: $container-padding-x !default; + +$toast-header-color: var(--#{$prefix}secondary-color) !default; +$toast-header-background-color: rgba(var(--#{$prefix}body-bg-rgb), .85) !default; +$toast-header-border-color: $toast-border-color !default; +// scss-docs-end toast-variables + + +// Badges + +// scss-docs-start badge-variables +$badge-font-size: .75em !default; +$badge-font-weight: $font-weight-bold !default; +$badge-color: $white !default; +$badge-padding-y: .35em !default; +$badge-padding-x: .65em !default; +$badge-border-radius: var(--#{$prefix}border-radius) !default; +// scss-docs-end badge-variables + + +// Modals + +// scss-docs-start modal-variables +$modal-inner-padding: $spacer !default; + +$modal-footer-margin-between: .5rem !default; + +$modal-dialog-margin: .5rem !default; +$modal-dialog-margin-y-sm-up: 1.75rem !default; + +$modal-title-line-height: $line-height-base !default; + +// AdminLTE keeps `$modal-content-color: null` so the modal text colour is +// inherited from the document. Bootstrap's default is `var(--#{$prefix}body-color)`. +$modal-content-color: null !default; +$modal-content-bg: var(--#{$prefix}body-bg) !default; +$modal-content-border-color: var(--#{$prefix}border-color-translucent) !default; +$modal-content-border-width: var(--#{$prefix}border-width) !default; +$modal-content-border-radius: var(--#{$prefix}border-radius-lg) !default; +$modal-content-inner-border-radius: subtract($modal-content-border-radius, $modal-content-border-width) !default; +$modal-content-box-shadow-xs: var(--#{$prefix}box-shadow-sm) !default; +$modal-content-box-shadow-sm-up: var(--#{$prefix}box-shadow) !default; + +$modal-backdrop-bg: $black !default; +$modal-backdrop-opacity: .5 !default; + +$modal-header-border-color: var(--#{$prefix}border-color) !default; +$modal-header-border-width: $modal-content-border-width !default; +$modal-header-padding-y: $modal-inner-padding !default; +$modal-header-padding-x: $modal-inner-padding !default; +$modal-header-padding: $modal-header-padding-y $modal-header-padding-x !default; // Keep this for backwards compatibility + +$modal-footer-bg: null !default; +$modal-footer-border-color: $modal-header-border-color !default; +$modal-footer-border-width: $modal-header-border-width !default; + +$modal-sm: 300px !default; +$modal-md: 500px !default; +$modal-lg: 800px !default; +$modal-xl: 1140px !default; + +$modal-fade-transform: translate(0, -50px) !default; +$modal-show-transform: none !default; +$modal-transition: transform .3s ease-out !default; +$modal-scale-transform: scale(1.02) !default; +// scss-docs-end modal-variables + + +// Alerts +// +// Define alert colors, border radius, and padding. + +// scss-docs-start alert-variables +$alert-padding-y: $spacer !default; +$alert-padding-x: $spacer !default; +$alert-margin-bottom: 1rem !default; +$alert-border-radius: var(--#{$prefix}border-radius) !default; +$alert-link-font-weight: $font-weight-bold !default; +$alert-border-width: var(--#{$prefix}border-width) !default; +$alert-dismissible-padding-r: $alert-padding-x * 3 !default; // 3x covers width of x plus default padding on either side +// scss-docs-end alert-variables + +// fusv-disable +$alert-bg-scale: -80% !default; // Deprecated in v5.2.0, to be removed in v6 +$alert-border-scale: -70% !default; // Deprecated in v5.2.0, to be removed in v6 +$alert-color-scale: 40% !default; // Deprecated in v5.2.0, to be removed in v6 +// fusv-enable + +// Progress bars + +// scss-docs-start progress-variables +$progress-height: 1rem !default; +$progress-font-size: $font-size-base * .75 !default; +$progress-bg: var(--#{$prefix}secondary-bg) !default; +$progress-border-radius: var(--#{$prefix}border-radius) !default; +$progress-box-shadow: var(--#{$prefix}box-shadow-inset) !default; +$progress-bar-color: $white !default; +$progress-bar-bg: $primary !default; +$progress-bar-animation-timing: 1s linear infinite !default; +$progress-bar-transition: width .6s ease !default; +// scss-docs-end progress-variables + + +// List group + +// scss-docs-start list-group-variables +$list-group-color: var(--#{$prefix}body-color) !default; +$list-group-bg: var(--#{$prefix}body-bg) !default; +$list-group-border-color: var(--#{$prefix}border-color) !default; +$list-group-border-width: var(--#{$prefix}border-width) !default; +$list-group-border-radius: var(--#{$prefix}border-radius) !default; + +$list-group-item-padding-y: $spacer * .5 !default; +$list-group-item-padding-x: $spacer !default; +// fusv-disable +$list-group-item-bg-scale: -80% !default; // Deprecated in v5.3.0 +$list-group-item-color-scale: 40% !default; // Deprecated in v5.3.0 +// fusv-enable + +$list-group-hover-bg: var(--#{$prefix}tertiary-bg) !default; +$list-group-active-color: $component-active-color !default; +$list-group-active-bg: $component-active-bg !default; +$list-group-active-border-color: $list-group-active-bg !default; + +$list-group-disabled-color: var(--#{$prefix}secondary-color) !default; +$list-group-disabled-bg: $list-group-bg !default; + +$list-group-action-color: var(--#{$prefix}secondary-color) !default; +$list-group-action-hover-color: var(--#{$prefix}emphasis-color) !default; + +$list-group-action-active-color: var(--#{$prefix}body-color) !default; +$list-group-action-active-bg: var(--#{$prefix}secondary-bg) !default; +// scss-docs-end list-group-variables + + +// Image thumbnails + +// scss-docs-start thumbnail-variables +$thumbnail-padding: .25rem !default; +$thumbnail-bg: var(--#{$prefix}body-bg) !default; +$thumbnail-border-width: var(--#{$prefix}border-width) !default; +$thumbnail-border-color: var(--#{$prefix}border-color) !default; +$thumbnail-border-radius: var(--#{$prefix}border-radius) !default; +$thumbnail-box-shadow: var(--#{$prefix}box-shadow-sm) !default; +// scss-docs-end thumbnail-variables + + +// Figures + +// scss-docs-start figure-variables +$figure-caption-font-size: $small-font-size !default; +$figure-caption-color: var(--#{$prefix}secondary-color) !default; +// scss-docs-end figure-variables + + +// Breadcrumbs + +// scss-docs-start breadcrumb-variables +$breadcrumb-font-size: null !default; +$breadcrumb-padding-y: 0 !default; +$breadcrumb-padding-x: 0 !default; +$breadcrumb-item-padding-x: .5rem !default; +$breadcrumb-margin-bottom: 1rem !default; +$breadcrumb-bg: null !default; +$breadcrumb-divider-color: var(--#{$prefix}secondary-color) !default; +$breadcrumb-active-color: var(--#{$prefix}secondary-color) !default; +$breadcrumb-divider: quote("/") !default; +$breadcrumb-divider-flipped: $breadcrumb-divider !default; +$breadcrumb-border-radius: null !default; +// scss-docs-end breadcrumb-variables + +// Carousel + +// scss-docs-start carousel-variables +$carousel-control-color: $white !default; +$carousel-control-width: 15% !default; +$carousel-control-opacity: .5 !default; +$carousel-control-hover-opacity: .9 !default; +$carousel-control-transition: opacity .15s ease !default; + +$carousel-indicator-width: 30px !default; +$carousel-indicator-height: 3px !default; +$carousel-indicator-hit-area-height: 10px !default; +$carousel-indicator-spacer: 3px !default; +$carousel-indicator-opacity: .5 !default; +$carousel-indicator-active-bg: $white !default; +$carousel-indicator-active-opacity: 1 !default; +$carousel-indicator-transition: opacity .6s ease !default; + +$carousel-caption-width: 70% !default; +$carousel-caption-color: $white !default; +$carousel-caption-padding-y: 1.25rem !default; +$carousel-caption-spacer: 1.25rem !default; + +$carousel-control-icon-width: 2rem !default; + +$carousel-control-prev-icon-bg: url("data:image/svg+xml,") !default; +$carousel-control-next-icon-bg: url("data:image/svg+xml,") !default; + +$carousel-transition-duration: .6s !default; +$carousel-transition: transform $carousel-transition-duration ease-in-out !default; // Define transform transition first if using multiple transitions (e.g., `transform 2s ease, opacity .5s ease-out`) +$carousel-control-icon-filter: null !default; +// scss-docs-end carousel-variables + +// scss-docs-start carousel-dark-variables +// Carousel "dark" variables below have been deprecated in Bootstrap 5.3.4. +// Use the `.carousel` colour-mode rules and `$carousel-control-icon-filter` +// instead. +$carousel-dark-indicator-active-bg: $black !default; // Deprecated in 5.3.4 +$carousel-dark-caption-color: $black !default; // Deprecated in 5.3.4 +$carousel-dark-control-icon-filter: invert(1) grayscale(100) !default; // Deprecated in 5.3.4 +// scss-docs-end carousel-dark-variables + + +// Spinners + +// scss-docs-start spinner-variables +$spinner-width: 2rem !default; +$spinner-height: $spinner-width !default; +$spinner-vertical-align: -.125em !default; +$spinner-border-width: .25em !default; +$spinner-animation-speed: .75s !default; + +$spinner-width-sm: 1rem !default; +$spinner-height-sm: $spinner-width-sm !default; +$spinner-border-width-sm: .2em !default; +// scss-docs-end spinner-variables + + +// Close + +// scss-docs-start close-variables +$btn-close-width: 1em !default; +$btn-close-height: $btn-close-width !default; +$btn-close-padding-x: .25em !default; +$btn-close-padding-y: $btn-close-padding-x !default; +$btn-close-color: $black !default; +$btn-close-bg: url("data:image/svg+xml,") !default; +$btn-close-focus-shadow: $focus-ring-box-shadow !default; +$btn-close-opacity: .5 !default; +$btn-close-hover-opacity: .75 !default; +$btn-close-focus-opacity: 1 !default; +$btn-close-disabled-opacity: .25 !default; +$btn-close-filter: null !default; +$btn-close-white-filter: invert(1) grayscale(100%) brightness(200%) !default; // Deprecated in 5.3.4. Use `$btn-close-filter` with the `.btn-close` colour-mode rules instead. +// scss-docs-end close-variables + + +// Offcanvas + +// scss-docs-start offcanvas-variables +$offcanvas-padding-y: $modal-inner-padding !default; +$offcanvas-padding-x: $modal-inner-padding !default; +$offcanvas-horizontal-width: 400px !default; +$offcanvas-vertical-height: 30vh !default; +$offcanvas-transition-duration: .3s !default; +$offcanvas-border-color: $modal-content-border-color !default; +$offcanvas-border-width: $modal-content-border-width !default; +$offcanvas-title-line-height: $modal-title-line-height !default; +$offcanvas-bg-color: var(--#{$prefix}body-bg) !default; +$offcanvas-color: var(--#{$prefix}body-color) !default; +$offcanvas-box-shadow: $modal-content-box-shadow-xs !default; +$offcanvas-backdrop-bg: $modal-backdrop-bg !default; +$offcanvas-backdrop-opacity: $modal-backdrop-opacity !default; +// scss-docs-end offcanvas-variables + +// Code + +$code-font-size: $small-font-size !default; +$code-color: $pink !default; + +$kbd-padding-y: .1875rem !default; +$kbd-padding-x: .375rem !default; +$kbd-font-size: $code-font-size !default; +$kbd-color: var(--#{$prefix}body-bg) !default; +$kbd-bg: var(--#{$prefix}body-color) !default; +$nested-kbd-font-weight: null !default; // Deprecated in v5.2.0, removing in v6 + +$pre-color: null !default; diff --git a/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/_callouts.scss b/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/_callouts.scss new file mode 100644 index 00000000..21302345 --- /dev/null +++ b/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/_callouts.scss @@ -0,0 +1,40 @@ +// +// Callouts +// + +.callout { + --#{$prefix}link-color-rgb: var(--#{$lte-prefix}callout-link); + --#{$prefix}code-color: var(--#{$lte-prefix}callout-code-color); + + padding: 1.25rem; + color: var(--#{$lte-prefix}callout-color, inherit); + background-color: var(--#{$lte-prefix}callout-bg, var(--bs-gray-100)); + border-left: .25rem solid var(--#{$lte-prefix}callout-border, var(--bs-gray-300)); + + .callout-link { + font-weight: $lte-callout-link-font-weight; + color: var(--#{$prefix}callout-link-color); + } + + h4 { + margin-bottom: .25rem; + } + + > :last-child { + margin-bottom: 0; + } + + + .callout { + margin-top: -.25rem; + } +} + +// Variations +@each $name, $color in $theme-colors { + .callout-#{$name} { + --#{$lte-prefix}callout-color: var(--#{$prefix}#{$name}-text-emphasis); + --#{$lte-prefix}callout-bg: var(--#{$prefix}#{$name}-bg-subtle); + --#{$lte-prefix}callout-border: var(--#{$prefix}#{$name}-border-subtle); + --#{$prefix}callout-link-color: var(--#{$prefix}#{$name}-text-emphasis); + } +} diff --git a/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/_cards.scss b/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/_cards.scss new file mode 100644 index 00000000..6d7fc3ab --- /dev/null +++ b/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/_cards.scss @@ -0,0 +1,311 @@ +// +// Component: Cards +// + +// Color variants +.card { + @include box-shadow($lte-card-shadow); + + &[class*="card-"]:not(.card-outline), + &[class*="text-bg-"]:not(.card-outline) { + > .card-header { + color: var(--#{$lte-prefix}card-variant-color); + background-color: var(--#{$lte-prefix}card-variant-bg); + + .btn-tool { + --#{$prefix}btn-color: rgba(var(--#{$lte-prefix}card-variant-color-rgb), .8); + --#{$prefix}btn-hover-color: var(--#{$lte-prefix}card-variant-color); + } + } + } + + &.card-outline { + border-top: 3px solid var(--#{$lte-prefix}card-variant-bg); + } + + &.maximized-card { + position: fixed; + top: 0; + left: 0; + z-index: $zindex-modal-backdrop; + width: 100% !important; + max-width: 100% !important; + height: 100% !important; + max-height: 100% !important; + + &.was-collapsed .card-body { + display: block !important; + } + + .card-body { + overflow: auto; + } + + [data-lte-toggle="card-collapse"] { + display: none; + } + + [data-lte-icon="maximize"] { + display: none; + } + + .card-header, + .card-footer { + @include border-radius(0 !important); + } + } + + &:not(.maximized-card) { + [data-lte-icon="minimize"] { + display: none; + } + } + + // collapsed mode + &.collapsed-card { + // Use > .card-header to scope to direct card only, not nested cards + > .card-header [data-lte-icon="collapse"] { + display: none; + } + + > .card-body, + > .card-footer { + display: none; + } + } + + &:not(.collapsed-card) { + // Use > .card-header to scope to direct card only, not nested cards + > .card-header [data-lte-icon="expand"] { + display: none; + } + } + + + .nav.flex-column { + > li { + margin: 0; + border-bottom: 1px solid $card-border-color; + + &:last-of-type { + border-bottom: 0; + } + } + } + + // fixed height to 300px + &.height-control { + .card-body { + max-height: 300px; + overflow: auto; + } + } + + .border-end { + border-right: 1px solid $card-border-color; + } + + .border-start { + border-left: 1px solid $card-border-color; + } + + &.card-tabs { + &:not(.card-outline) { + > .card-header { + border-bottom: 0; + + .nav-item { + &:first-child .nav-link { + border-left-color: transparent; + } + } + } + } + + &.card-outline { + .nav-item { + border-bottom: 0; + + &:first-child .nav-link { + margin-left: 0; + border-left: 0; + } + } + } + + .card-tools { + margin: .3rem .5rem; + } + + &:not(.expanding-card).collapsed-card { + .card-header { + border-bottom: 0; + + .nav-tabs { + border-bottom: 0; + + .nav-item { + margin-bottom: 0; + } + } + } + } + + &.expanding-card { + .card-header { + .nav-tabs { + .nav-item { + margin-bottom: -1px; + } + } + } + } + } + + &.card-outline-tabs { + border-top: 0; + + .card-header { + .nav-item { + &:first-child .nav-link { + margin-left: 0; + border-left: 0; + } + } + + a { + text-decoration: none; + border-top: 3px solid transparent; + + &:hover { + border-top: 3px solid $nav-tabs-border-color; + } + + &.active { + &:hover { + margin-top: 0; + } + } + } + } + + .card-tools { + margin: .5rem .5rem .3rem; + } + + &:not(.expanding-card).collapsed-card .card-header { + border-bottom: 0; + + .nav-tabs { + border-bottom: 0; + + .nav-item { + margin-bottom: 0; + } + } + } + + &.expanding-card { + .card-header { + .nav-tabs { + .nav-item { + margin-bottom: -1px; + } + } + } + } + } + +} + +// Maximized Card Body Scroll fix +html.maximized-card { + overflow: hidden; +} + +// Add clearfix to header, body and footer +.card-header, +.card-body, +.card-footer { + @include clearfix(); +} + +// Box header +.card-header { + position: relative; + padding: (($card-spacer-y * .5) * 2) $card-spacer-x; + background-color: transparent; + border-bottom: 1px solid $card-border-color; + + @if $enable-rounded { + @include border-top-radius($border-radius); + } + + .collapsed-card & { + border-bottom: 0; + } + + > .card-tools { + float: right; + margin-right: -$card-spacer-x * .5; + + .input-group, + .nav, + .pagination { + margin-top: -$card-spacer-y * .4; + margin-bottom: -$card-spacer-y * .4; + } + + [data-bs-toggle="tooltip"] { + position: relative; + } + } +} + +.card-title { + float: left; + margin: 0; + font-size: $lte-card-title-font-size; + font-weight: $lte-card-title-font-weight; +} + +// Box Tools Buttons +.btn-tool { + --#{$prefix}btn-padding-x: .5rem; + --#{$prefix}btn-padding-y: .25rem; + + &:not(.btn-tool-custom) { + --#{$prefix}btn-color: var(--#{$prefix}tertiary-color); + --#{$prefix}btn-bg: transparent; + --#{$prefix}btn-box-shadow: none; + --#{$prefix}btn-hover-color: var(--#{$prefix}secondary-color); + --#{$prefix}btn-active-border-color: transparent; + } + + margin: -$card-spacer-y 0; + font-size: $font-size-sm; +} + +@each $name, $color in $theme-colors { + .card-#{$name}, + .bg-#{$name}, + .text-bg-#{$name} { + --#{$lte-prefix}card-variant-bg: #{$color}; + --#{$lte-prefix}card-variant-bg-rgb: #{to-rgb($color)}; + --#{$lte-prefix}card-variant-color: #{color-contrast($color)}; + --#{$lte-prefix}card-variant-color-rgb: #{to-rgb(color-contrast($color))}; + } +} + +// Box Body +.card-body { + // Tables within the box body + > .table { + margin-bottom: 0; + + > thead > tr > th, + > thead > tr > td { + border-top-width: 0; + } + } +} diff --git a/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/_compact-mode.scss b/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/_compact-mode.scss new file mode 100644 index 00000000..22cb5ea4 --- /dev/null +++ b/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/_compact-mode.scss @@ -0,0 +1,53 @@ +.compact-mode { + .app-header { + max-height: $lte-app-header-height-compact; + + .nav-link { + max-height: $nav-link-height-compact; + } + } + + .nav-link { + --bs-nav-link-padding-y: .25rem; + --bs-nav-link-padding-x: .5rem; + } + + &.sidebar-mini.sidebar-collapse { + .app-sidebar:not(:hover) { + min-width: $lte-sidebar-mini-width-compact; + max-width: $lte-sidebar-mini-width-compact; + + .sidebar-menu { + .nav-link { + width: $lte-sidebar-mini-width-compact - $lte-sidebar-padding-x * 2 !important; + } + } + } + } + + .logo-xs, + .logo-xl { + max-height: $lte-app-header-height-compact; + } + + .brand-image { + width: $nav-link-height-compact; + height: $nav-link-height-compact; + } + + .sidebar-brand { + height: $lte-app-header-height-compact; + } + + .app-footer { + padding: $lte-app-footer-padding-compact; + } + + .sidebar-wrapper { + .nav-icon { + min-width: 1.1rem; + max-width: 1.1rem; + } + } +} + diff --git a/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/_direct-chat.scss b/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/_direct-chat.scss new file mode 100644 index 00000000..ed961f3e --- /dev/null +++ b/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/_direct-chat.scss @@ -0,0 +1,235 @@ +// +// Component: Direct Chat +// + +.direct-chat { + .card-body { + position: relative; + padding: 0; + overflow-x: hidden; + } + + &.chat-pane-open { + .direct-chat-contacts { + transform: translate(0, 0); + } + } + + + &.timestamp-light { + .direct-chat-timestamp { + color: rgba(var(--#{$prefix}body-color-rgb), .65); + } + } + + &.timestamp-dark { + .direct-chat-timestamp { + color: rgba(var(--#{$prefix}body-color-rgb), .9); + } + } +} + +.direct-chat-messages { + height: 250px; + padding: 10px; + overflow: auto; + transform: translate(0, 0); +} + +.direct-chat-msg, +.direct-chat-text { + display: block; +} + +.direct-chat-msg { + @include clearfix(); + margin-bottom: 10px; +} + +.direct-chat-messages, +.direct-chat-contacts { + @include transition(transform .5s ease-in-out); +} + +.direct-chat-text { + @if $enable-rounded { + @include border-radius($border-radius-lg); + } + + position: relative; + padding: 5px 10px; + margin: 5px 0 0 50px; + color: $lte-direct-chat-default-font-color; + background-color: $lte-direct-chat-default-msg-bg; + border: 1px solid $lte-direct-chat-default-msg-border-color; + + //Create the arrow + &::after, + &::before { + position: absolute; + top: 15px; + right: 100%; + width: 0; + height: 0; + pointer-events: none; + content: " "; + border: solid transparent; + border-right-color: $lte-direct-chat-default-msg-border-color; + } + + &::after { + margin-top: -5px; + border-width: 5px; + } + + &::before { + margin-top: -6px; + border-width: 6px; + } + + .end & { + margin-right: 50px; + margin-left: 0; + + &::after, + &::before { + right: auto; + left: 100%; + border-right-color: transparent; + border-left-color: $lte-direct-chat-default-msg-border-color; + } + } +} + +.direct-chat-img { + @include border-radius(50%); + float: left; + width: 40px; + height: 40px; + + .end & { + float: right; + } +} + +.direct-chat-infos { + display: block; + margin-bottom: 2px; + font-size: $font-size-sm; +} + +.direct-chat-name { + font-weight: 600; +} + +.direct-chat-timestamp { + color: rgba(var(--#{$prefix}body-color-rgb), .75); +} + +//Direct chat contacts pane +.direct-chat-contacts-open { + .direct-chat-contacts { + transform: translate(0, 0); + } +} + +.direct-chat-contacts { + position: absolute; + top: 0; + bottom: 0; + width: 100%; + height: 250px; + overflow: auto; + color: var(--#{$prefix}body-bg); + background-color: var(--#{$prefix}body-color); + transform: translate(101%, 0); +} + +.direct-chat-contacts-light { + background-color: var(--#{$prefix}light-bg-subtle); + + .contacts-list-name { + color: var(--#{$prefix}body-color); + } + + .contacts-list-date { + color: var(--#{$prefix}secondary-color); + } + + .contacts-list-msg { + color: var(--#{$prefix}secondary-color); + } +} + +//Contacts list -- for displaying contacts in direct chat contacts pane +.contacts-list { + @include list-unstyled(); + + > li { + @include clearfix(); + padding: 10px; + margin: 0; + text-decoration: none; + border-bottom: 1px solid rgba($black, .2); + + &:last-of-type { + border-bottom: 0; + } + + a { + text-decoration: none; + } + } +} + +.contacts-list-img { + @include border-radius(50%); + float: left; + width: 40px; +} + +.contacts-list-info { + margin-left: 45px; + color: var(--#{$prefix}body-bg); +} + +.contacts-list-name, +.contacts-list-status { + display: block; +} + +.contacts-list-name { + font-weight: 600; +} + +.contacts-list-status { + font-size: $font-size-sm; +} + +.contacts-list-date { + font-weight: 400; + color: var(--#{$prefix}secondary-bg); +} + +.contacts-list-msg { + color: var(--#{$prefix}secondary-bg); +} + +.end > .direct-chat-text { + color: var(--#{$lte-prefix}direct-chat-color); + background-color: var(--#{$lte-prefix}direct-chat-bg); + border-color: var(--#{$lte-prefix}direct-chat-bg); + + &::after, + &::before { + border-left-color: var(--#{$lte-prefix}direct-chat-bg); + } +} + +// Color variants +@each $name, $color in $theme-colors { + .direct-chat-#{$name} { + --#{$lte-prefix}direct-chat-color: #{color-contrast($color)}; + --#{$lte-prefix}direct-chat-bg: #{$color}; + } +} diff --git a/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/_docs.scss b/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/_docs.scss new file mode 100644 index 00000000..4e9bdc10 --- /dev/null +++ b/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/_docs.scss @@ -0,0 +1,820 @@ +// +// Component: Docs +// +// Visual treatment for documentation pages. Body class `.docs-page` opts in. +// Demo pages are not affected. +// + +// Inline code blocks rendered by MDX (Astro highlight default class) +.astro-code { + padding: .75rem; + @include border-radius($border-radius); +} + +.docs-page { + // Constrain the docs card to a comfortable reading width. + // Tables and code blocks inside can still scroll horizontally if needed. + .app-content > .container-fluid { + max-width: 60rem; // ~960px + + @include media-breakpoint-up(xxl) { + max-width: 64rem; + } + } + + // + // Card body — breathing room + prose typography. + // Only applied inside docs content cards so demo-page card content + // stays unchanged. + // + .card > .card-body { + padding: 1.5rem; + font-size: 1rem; + line-height: 1.7; + color: var(--#{$prefix}body-color); + + @include media-breakpoint-up(md) { + padding: 2.5rem; + } + + // + // Heading hierarchy. The MDX content in src/html/components/docs/ uses + // ##### (h5) as the dominant section heading and ###### (h6) as a + // sub-heading (most visible in FAQ.mdx, where h5 is a topic and h6 is + // a question). Style h5 as a major section and h6 as a sub-section so + // the visual hierarchy matches the semantic one. + // + h1, + h2, + h3, + h4, + h5, + h6, + .h1, + .h2, + .h3, + .h4, + .h5, + .h6 { + margin-top: 2em; + margin-bottom: .5em; + font-weight: 600; + line-height: 1.3; + color: var(--#{$prefix}emphasis-color); + scroll-margin-top: 4rem; // anchor-link friendly + + &:first-child { + margin-top: 0; + } + } + + h2, + .h2 { + padding-bottom: .35em; + font-size: 1.75rem; + border-bottom: 1px solid var(--#{$prefix}border-color); + } + + h3, + .h3 { + font-size: 1.4rem; + } + + h4, + .h4 { + font-size: 1.2rem; + } + + // h5 is the dominant section heading across docs MDX files. Give it + // a visible separator above so sections are easy to scan. + h5, + .h5 { + padding-top: 1.5em; + margin-top: 2.5em; + font-size: 1.3rem; + border-top: 1px solid var(--#{$prefix}border-color); + + &:first-child { + padding-top: 0; + border-top: 0; + } + } + + // h6 is the sub-section / FAQ question style. Smaller than h5 but + // still distinctly heading-like, with a touch of accent colour to + // separate from body text. + h6, + .h6 { + margin-top: 1.75em; + font-size: 1.08rem; + color: var(--#{$prefix}emphasis-color); + } + + // + // Paragraphs and lists. + // + p, + ul, + ol, + dl, + blockquote, + table { + margin-bottom: 1.1rem; + } + + ul, + ol { + padding-left: 1.5rem; + + li { + margin-bottom: .35rem; + } + + // Tighter nested lists + ul, + ol { + margin-top: .35rem; + margin-bottom: 0; + } + } + + // Lead-style first paragraph (just after a heading) + h2 + p, + h3 + p, + h5 + p { + margin-top: 0; + } + + // + // Inline code — pill style that complements MDX's syntax-highlighted blocks. + // + p code, + li code, + td code, + th code, + h2 code, + h3 code, + h4 code, + h5 code, + h6 code { + padding: .15em .4em; + font-size: .875em; + color: var(--#{$prefix}emphasis-color); + background: var(--#{$prefix}tertiary-bg); + border: 1px solid var(--#{$prefix}border-color); + @include border-radius($border-radius-sm); + } + + // + // Code blocks. + // + pre.astro-code, + pre { + padding: 1rem 1.25rem; + margin-top: 1.25rem; + margin-bottom: 1.5rem; + overflow-x: auto; + font-size: .875rem; + line-height: 1.6; + @include border-radius($border-radius); + + code { + padding: 0; + background: transparent; + border: 0; + } + } + + // + // Tables — reference-doc styling with hairline borders. + // + table { + width: 100%; + margin-top: 1.25rem; + margin-bottom: 1.5rem; + overflow: hidden; + font-size: .95rem; + border-collapse: collapse; + border: 1px solid var(--#{$prefix}border-color); + @include border-radius($border-radius-sm); + + th, + td { + padding: .65rem .9rem; + text-align: left; + vertical-align: top; + border-bottom: 1px solid var(--#{$prefix}border-color); + } + + th { + font-weight: 600; + color: var(--#{$prefix}emphasis-color); + background: var(--#{$prefix}tertiary-bg); + } + + tr:last-child td { + border-bottom: 0; + } + + code { + white-space: nowrap; + } + } + + // + // Blockquotes used as info callouts. + // + blockquote { + padding: .85rem 1.1rem; + margin-top: 1.25rem; + color: var(--#{$prefix}emphasis-color); + background: var(--#{$prefix}info-bg-subtle); + border-left: 4px solid var(--#{$prefix}info-border-subtle); + @include border-radius($border-radius-sm); + + p:last-child { + margin-bottom: 0; + } + + code { + background: rgba(0, 0, 0, .05); + } + } + + // + // Prose links — stand out more than Bootstrap defaults. + // + a:not(.btn):not(.nav-link) { + color: var(--#{$prefix}primary); + text-decoration: underline; + text-decoration-thickness: 1px; + text-underline-offset: 3px; + + &:hover { + text-decoration-thickness: 2px; + } + } + + // + // Horizontal rule — used as additional section separator. + // + hr { + margin: 2.5rem 0; + border: 0; + border-top: 1px solid var(--#{$prefix}border-color); + opacity: 1; + } + + // + // Lead paragraph — the first paragraph in any doc is a summary. + // Visually heavier so it functions as a deck. + // + > p:first-child, + > p:first-of-type { + margin-bottom: 2rem; + font-size: 1.125rem; + line-height: 1.6; + color: var(--#{$prefix}body-color); + } + + // + // FAQ / disclosure accordion — uses native
/. + // Add `.faq-item` to
to opt in. + // + details.faq-item { + margin-bottom: .5rem; + overflow: hidden; + background: var(--#{$prefix}body-bg); + border: 1px solid var(--#{$prefix}border-color); + @include border-radius($border-radius); + @include transition(border-color .15s ease, box-shadow .15s ease); + + &:hover { + border-color: var(--#{$prefix}primary-border-subtle); + } + + &[open] { + background: var(--#{$prefix}body-bg); + border-color: var(--#{$prefix}primary-border-subtle); + box-shadow: 0 1px 3px rgba(0, 0, 0, .04); + } + + summary { + position: relative; + padding: .9rem 3rem .9rem 1.1rem; + font-size: 1rem; + font-weight: 600; + color: var(--#{$prefix}emphasis-color); + list-style: none; + cursor: pointer; + user-select: none; + @include transition(color .15s ease); + + // Hide the default disclosure triangle in Webkit/Blink + &::-webkit-details-marker { + display: none; + } + + // Hide the marker in modern Firefox too + &::marker { + content: ""; + } + + &:hover { + color: var(--#{$prefix}primary); + } + + // Right-side chevron, rotates on open + &::after { + position: absolute; + top: 50%; + right: 1.1rem; + display: inline-block; + width: .55rem; + height: .55rem; + margin-top: -.4rem; + content: ""; + border-right: 2px solid currentcolor; + border-bottom: 2px solid currentcolor; + opacity: .55; + transform: rotate(45deg); + @include transition(transform .2s ease); + } + } + + &[open] > summary { + color: var(--#{$prefix}primary); + border-bottom: 1px solid var(--#{$prefix}border-color); + + &::after { + margin-top: -.15rem; + opacity: 1; + transform: rotate(-135deg); + } + } + + // Content (everything after ) gets the inner padding + > *:not(summary) { + padding-right: 1.1rem; + padding-left: 1.1rem; + } + + > *:not(summary):first-of-type { + padding-top: 1rem; + } + + > *:not(summary):last-child { + padding-bottom: 1rem; + } + + // Tighten paragraphs/lists inside an FAQ answer + p, + ul, + ol { + margin-bottom: .65rem; + } + + > *:last-child p:last-child, + > p:last-child, + > ul:last-child, + > ol:last-child { + margin-bottom: 0; + } + + // Code blocks inside an FAQ answer get a less-distracting bg + pre.astro-code, + pre { + margin-right: 0; + margin-left: 0; + } + } + } + + // Dark-mode tweak: blockquote info bg needs more contrast on dark + &[data-bs-theme="dark"], + [data-bs-theme="dark"] & { + .card > .card-body blockquote code { + background: rgba(255, 255, 255, .08); + } + } +} + +// +// FAQ page — custom layout that breaks out of the standard docs card +// to give the FAQ a more distinctive visual identity. Opt in via +// body.faq-page (set in pages/docs/faq.astro). +// + +.faq-page { + // The FAQ doesn't use the standard card wrapper used by other docs, + // so the container can stretch wider for the chip strip and section + // grid. + .app-content > .container-fluid { + max-width: 64rem; + + @include media-breakpoint-up(xxl) { + max-width: 72rem; + } + } + + // --- Hero ------------------------------------------------------------- + .faq-hero { + position: relative; + padding: 3rem 1.5rem 2.5rem; + margin-top: 1rem; + overflow: hidden; + background: radial-gradient(ellipse at top left, rgba(var(--#{$prefix}primary-rgb), .12), transparent 60%), radial-gradient(ellipse at bottom right, rgba(var(--#{$prefix}info-rgb), .1), transparent 65%), var(--#{$prefix}body-bg); + border: 1px solid var(--#{$prefix}border-color); + @include border-radius($border-radius-xl); + } + + .faq-hero-eyebrow { + display: inline-flex; + gap: .4rem; + align-items: center; + padding: .35rem .85rem; + margin-bottom: 1rem; + font-size: .75rem; + font-weight: 600; + color: var(--#{$prefix}primary); + text-transform: uppercase; + letter-spacing: .08em; + background: var(--#{$prefix}primary-bg-subtle); + border: 1px solid var(--#{$prefix}primary-border-subtle); + @include border-radius(50rem); + + .bi { + font-size: .9rem; + } + } + + .faq-hero-title { + margin: 0 0 .5rem; + font-size: 2.25rem; + font-weight: 700; + line-height: 1.15; + color: var(--#{$prefix}emphasis-color); + + @include media-breakpoint-up(md) { + font-size: 2.75rem; + } + } + + .faq-hero-lead { + max-width: 36rem; + margin: 0 auto 1.75rem; + font-size: 1.05rem; + line-height: 1.55; + color: var(--#{$prefix}secondary-color); + } + + .faq-search { + position: relative; + max-width: 32rem; + margin: 0 auto; + + .form-control { + height: 3rem; + padding-right: 3rem; + padding-left: 3rem; + font-size: 1rem; + background: var(--#{$prefix}body-bg); + @include border-radius(50rem); + @include transition(box-shadow .15s ease, border-color .15s ease); + + &:focus { + box-shadow: 0 0 0 .25rem rgba(var(--#{$prefix}primary-rgb), .15); + } + } + } + + .faq-search-icon { + position: absolute; + top: 50%; + left: 1.2rem; + color: var(--#{$prefix}secondary-color); + pointer-events: none; + transform: translateY(-50%); + } + + .faq-search-clear { + position: absolute; + top: 50%; + right: .65rem; + display: inline-flex; + align-items: center; + justify-content: center; + width: 2rem; + height: 2rem; + padding: 0; + color: var(--#{$prefix}secondary-color); + background: var(--#{$prefix}tertiary-bg); + border: 0; + transform: translateY(-50%); + @include border-radius(50%); + @include transition(background .15s ease, color .15s ease); + + &:hover { + color: var(--#{$prefix}body-color); + background: var(--#{$prefix}secondary-bg); + } + } + + .faq-empty-state { + max-width: 32rem; + padding: 1rem; + margin: 1.5rem auto 0; + font-size: .95rem; + color: var(--#{$prefix}secondary-color); + background: var(--#{$prefix}tertiary-bg); + @include border-radius($border-radius); + + .bi { + margin-right: .35rem; + } + } + + // --- Section nav chips ------------------------------------------------ + .faq-chips { + display: flex; + flex-wrap: wrap; + gap: .5rem; + justify-content: center; + } + + .faq-chip { + display: inline-flex; + gap: .45rem; + align-items: center; + padding: .45rem .85rem; + font-size: .875rem; + font-weight: 500; + color: var(--#{$prefix}body-color); + text-decoration: none; + background: var(--#{$prefix}body-bg); + border: 1px solid var(--#{$prefix}border-color); + @include border-radius(50rem); + @include transition(transform .15s ease, border-color .15s ease, background-color .15s ease, color .15s ease); + + &:hover { + color: var(--#{$prefix}emphasis-color); + background: var(--#{$prefix}tertiary-bg); + transform: translateY(-1px); + } + + .bi { + font-size: 1rem; + } + } + + .faq-chip-count { + padding: 0 .45rem; + font-size: .7rem; + font-weight: 600; + color: var(--#{$prefix}secondary-color); + background: var(--#{$prefix}tertiary-bg); + @include border-radius(50rem); + } + + // Per-section chip accent on hover/active + @each $tone in (primary, info, warning, success, danger, secondary) { + .faq-chip-#{$tone}:hover { + color: var(--#{$prefix}#{$tone}-text-emphasis); + background: var(--#{$prefix}#{$tone}-bg-subtle); + border-color: var(--#{$prefix}#{$tone}-border-subtle); + + .faq-chip-count { + color: var(--#{$prefix}#{$tone}-text-emphasis); + background: rgba(0, 0, 0, .06); + } + } + } + + // --- Sections --------------------------------------------------------- + .faq-section { + margin-bottom: 2.5rem; + scroll-margin-top: 5rem; + } + + .faq-section-header { + display: flex; + gap: 1rem; + align-items: center; + padding: 1rem 1.25rem; + margin-bottom: 1rem; + background: var(--#{$prefix}body-bg); + border: 1px solid var(--#{$prefix}border-color); + border-left: 4px solid var(--#{$prefix}primary); + @include border-radius($border-radius); + } + + .faq-section-icon { + display: inline-flex; + flex-shrink: 0; + align-items: center; + justify-content: center; + width: 2.75rem; + height: 2.75rem; + font-size: 1.35rem; + color: var(--#{$prefix}primary); + background: var(--#{$prefix}primary-bg-subtle); + @include border-radius($border-radius); + } + + .faq-section-title { + margin: 0; + font-size: 1.4rem; + font-weight: 600; + line-height: 1.2; + color: var(--#{$prefix}emphasis-color); + } + + .faq-section-count { + margin: .1rem 0 0; + font-size: .8rem; + color: var(--#{$prefix}secondary-color); + } + + // Per-section tone accents + @each $tone in (primary, info, warning, success, danger, secondary) { + .faq-section-#{$tone} { + border-left-color: var(--#{$prefix}#{$tone}); + + .faq-section-icon { + color: var(--#{$prefix}#{$tone}-text-emphasis); + background: var(--#{$prefix}#{$tone}-bg-subtle); + } + } + } + + // --- FAQ items (override the generic .docs-page details styling) ------ + .faq-section-items .faq-item { + margin-bottom: .5rem; + overflow: hidden; + background: var(--#{$prefix}body-bg); + border: 1px solid var(--#{$prefix}border-color); + @include border-radius($border-radius); + @include transition(border-color .15s ease, box-shadow .15s ease, transform .15s ease); + + &:hover { + border-color: var(--#{$prefix}primary-border-subtle); + transform: translateX(2px); + } + + &[open] { + border-color: var(--#{$prefix}primary-border-subtle); + box-shadow: 0 2px 8px rgba(0, 0, 0, .04); + transform: none; + } + + summary { + display: flex; + gap: .85rem; + align-items: center; + padding: 1rem 1.25rem; + font-size: 1rem; + font-weight: 500; + color: var(--#{$prefix}emphasis-color); + list-style: none; + cursor: pointer; + user-select: none; + + &::-webkit-details-marker { + display: none; + } + + &::marker { + content: ""; + } + + &::after { + content: none; // disable the generic chevron, we use our own + } + } + + .faq-q-icon { + display: inline-flex; + flex-shrink: 0; + align-items: center; + justify-content: center; + width: 1.75rem; + height: 1.75rem; + font-size: .85rem; + color: var(--#{$prefix}primary); + background: var(--#{$prefix}primary-bg-subtle); + @include border-radius(50%); + } + + .faq-q-text { + flex-grow: 1; + } + + .faq-q-chevron { + flex-shrink: 0; + color: var(--#{$prefix}secondary-color); + @include transition(transform .2s ease, color .2s ease); + } + + &[open] .faq-q-chevron { + color: var(--#{$prefix}primary); + transform: rotate(180deg); + } + + &[open] summary { + color: var(--#{$prefix}primary); + border-bottom: 1px solid var(--#{$prefix}border-color); + } + + .faq-answer { + padding: 1.1rem 1.25rem 1.1rem 3.85rem; // align with the question text (icon + gap) + font-size: .95rem; + line-height: 1.65; + color: var(--#{$prefix}body-color); + + p:last-child, + ul:last-child, + ol:last-child, + pre:last-child { + margin-bottom: 0; + } + + a { + color: var(--#{$prefix}primary); + text-decoration: underline; + text-underline-offset: 2px; + + &:hover { + text-decoration-thickness: 2px; + } + } + + code { + padding: .12em .35em; + font-size: .875em; + color: var(--#{$prefix}emphasis-color); + background: var(--#{$prefix}tertiary-bg); + border: 1px solid var(--#{$prefix}border-color); + @include border-radius($border-radius-sm); + } + + pre.astro-code, + pre { + padding: .85rem 1rem; + margin-top: .75rem; + margin-bottom: .75rem; + overflow-x: auto; + font-size: .85rem; + line-height: 1.55; + @include border-radius($border-radius-sm); + + code { + padding: 0; + background: transparent; + border: 0; + } + } + } + } + + // --- CTA footer ------------------------------------------------------- + .faq-cta { + padding: 2.5rem 1.5rem; + text-align: center; + background: radial-gradient(ellipse at top, rgba(var(--#{$prefix}primary-rgb), .08), transparent 60%), var(--#{$prefix}body-bg); + border: 1px solid var(--#{$prefix}border-color); + @include border-radius($border-radius-xl); + } + + .faq-cta-icon { + display: inline-flex; + align-items: center; + justify-content: center; + width: 3.5rem; + height: 3.5rem; + margin-bottom: 1rem; + font-size: 1.6rem; + color: var(--#{$prefix}primary); + background: var(--#{$prefix}primary-bg-subtle); + @include border-radius(50%); + } + + .faq-cta h2 { + margin: 0 0 .5rem; + font-size: 1.5rem; + font-weight: 600; + color: var(--#{$prefix}emphasis-color); + } + + .faq-cta p { + max-width: 32rem; + margin: 0 auto 1.5rem; + color: var(--#{$prefix}secondary-color); + } + + .faq-cta-actions { + display: inline-flex; + flex-wrap: wrap; + gap: .5rem; + justify-content: center; + } +} diff --git a/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/_dropdown.scss b/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/_dropdown.scss new file mode 100644 index 00000000..9ddf2f7c --- /dev/null +++ b/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/_dropdown.scss @@ -0,0 +1,225 @@ +// +// Component: Dropdown +// + +// General Dropdown Rules + +// Ensure children cannot overflow and break the dropdown border radius +.dropdown-menu { + overflow: hidden; +} + +.fs-7 { + .dropdown-menu { + font-size: $font-size-sm !important; + } + + .dropdown-toggle::after { + vertical-align: .2rem; + } +} + +.dropdown-item-title { + margin: 0; + font-size: $font-size-base; +} + +.dropdown-icon { + &::after { + margin-left: 0; + } +} + +// Dropdown Sizes +.dropdown-menu-lg { + min-width: 280px; + max-width: 300px; + padding: 0; + + .dropdown-divider { + margin: 0; + } + + .dropdown-item { + padding: $dropdown-padding-y $dropdown-item-padding-x; + } + + p { + margin: 0; + word-wrap: break-word; + white-space: normal; + } +} + +// Dropdown Submenu +.dropdown-submenu { + position: relative; + + > a::after { + @include caret-end(); + float: right; + margin-top: .5rem; + margin-left: .5rem; + } + + > .dropdown-menu { + top: 0; + left: 100%; + margin-top: 0; + margin-left: 0; + } +} + +// Dropdown Hover +.dropdown-hover { + &:hover, + &.nav-item.dropdown:hover, + .dropdown-submenu:hover, + &.dropdown-submenu:hover { + > .dropdown-menu { + display: block; + } + } +} + + +// Dropdown Sizes +.dropdown-menu-xl { + min-width: 360px; + max-width: 420px; + padding: 0; + + .dropdown-divider { + margin: 0; + } + + .dropdown-item { + padding: $dropdown-padding-y $dropdown-item-padding-x; + } + + p { + margin: 0; + word-wrap: break-word; + white-space: normal; + } +} + +// Dropdown header and footer +.dropdown-footer, +.dropdown-header { + display: block; + padding: .5rem $dropdown-item-padding-x; + font-size: $font-size-sm; + text-align: center; +} + +// Add fade animation to dropdown menus by appending +// the class .animated-dropdown-menu to the .dropdown-menu ul (or ol) +.open:not(.dropup) > .animated-dropdown-menu { + animation: flipInX .7s both; + backface-visibility: visible !important; +} + +// Fix dropdown menu in navbars +.navbar-custom-menu > .navbar-nav { + > li { + position: relative; + > .dropdown-menu { + position: absolute; + right: 0; + left: auto; + } + } +} + +@include media-breakpoint-down(sm) { + .navbar-custom-menu > .navbar-nav { + float: right; + > li { + position: static; + > .dropdown-menu { + position: absolute; + right: 5%; + left: auto; + background-color: var(--#{$prefix}body-bg); + border: 1px solid var(--#{$prefix}border-color); + } + } + } +} + +// User Menu +.navbar-nav > .user-menu { + > .nav-link::after { + content: none; + } + + > .dropdown-menu { + width: 280px; + padding: 0; + + // Header menu + > li.user-header { + min-height: 175px; + padding: 10px; + text-align: center; + + // User image + > img { + z-index: 5; + width: 90px; + height: 90px; + border: 3px solid; + border-color: transparent; + border-color: var(--#{$prefix}border-color-translucent); + } + + > p { + z-index: 5; + margin-top: 10px; + font-size: 17px; + word-wrap: break-word; + + > small { + display: block; + font-size: 12px; + } + } + } + + // Menu Body + > .user-body { + @include clearfix(); + padding: 15px; + border-top: 1px solid var(--#{$prefix}border-color); + border-bottom: 1px solid var(--#{$prefix}border-color-translucent); + + a { + text-decoration: none; + } + } + + // Menu Footer + > .user-footer { + @include clearfix(); + padding: 10px; + background-color: var(--#{$prefix}light-bg); + } + } + + .user-image { + @include media-breakpoint-up(sm) { + float: none; + margin-top: -8px; + margin-right: .4rem; + line-height: 10px; + } + + float: left; + width: $lte-sidebar-user-image-width; + height: $lte-sidebar-user-image-width; + margin-top: -2px; + // margin-right: 10px; + @include border-radius(50%); + } +} diff --git a/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/_info-box.scss b/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/_info-box.scss new file mode 100644 index 00000000..ad65d71e --- /dev/null +++ b/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/_info-box.scss @@ -0,0 +1,131 @@ +// +// Component: Info Box +// + +.info-box { + @include box-shadow($lte-card-shadow); + @include border-radius($border-radius); + + position: relative; + display: flex; + width: 100%; + min-height: 80px; + padding: .5rem; + margin-bottom: map-get($spacers, 3); + color: var(--#{$prefix}body-color); + background-color: var(--#{$prefix}body-bg); + + .progress { + height: 2px; + margin: 5px 0; + background-color: rgba(var(--#{$lte-prefix}card-variant-color-rgb), .125); + + .progress-bar { + background-color: var(--#{$lte-prefix}card-variant-color); + } + } + + .info-box-icon { + display: flex; + align-items: center; + justify-content: center; + width: 70px; + font-size: 1.875rem; + text-align: center; + @include border-radius($border-radius); + + > img { + max-width: 100%; + } + } + + .info-box-content { + display: flex; + flex: 1; + flex-direction: column; + justify-content: center; + padding: 0 10px; + line-height: 1.8; + } + + .info-box-number { + display: block; + margin-top: .25rem; + font-weight: $font-weight-bold; + } + + .progress-description, + .info-box-text { + display: block; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + + .info-box-more { + display: block; + } + + .progress-description { + margin: 0; + + } + + @include media-breakpoint-up(md) { + .col-xl-2 &, + .col-lg-2 &, + .col-md-2 & { + .progress-description { + display: none; + } + } + + .col-xl-3 &, + .col-lg-3 &, + .col-md-3 & { + .progress-description { + display: none; + } + } + } + + @include media-breakpoint-up(lg) { + .col-xl-2 &, + .col-lg-2 &, + .col-md-2 & { + .progress-description { + @include font-size(.75rem); + display: block; + } + } + + .col-xl-3 &, + .col-lg-3 &, + .col-md-3 & { + .progress-description { + @include font-size(.75rem); + display: block; + } + } + } + + @include media-breakpoint-up(xl) { + .col-xl-2 &, + .col-lg-2 &, + .col-md-2 & { + .progress-description { + @include font-size(1rem); + display: block; + } + } + + .col-xl-3 &, + .col-lg-3 &, + .col-md-3 & { + .progress-description { + @include font-size(1rem); + display: block; + } + } + } +} diff --git a/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/_miscellaneous.scss b/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/_miscellaneous.scss new file mode 100644 index 00000000..e04ec287 --- /dev/null +++ b/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/_miscellaneous.scss @@ -0,0 +1,22 @@ +// +// Misc: Miscellaneous +// + +// Image sizes +.img-size-64, +.img-size-50, +.img-size-32 { + height: auto; +} + +.img-size-64 { + width: 64px; +} + +.img-size-50 { + width: 50px; +} + +.img-size-32 { + width: 32px; +} diff --git a/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/_mixins.scss b/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/_mixins.scss new file mode 100644 index 00000000..44f6c188 --- /dev/null +++ b/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/_mixins.scss @@ -0,0 +1,6 @@ +// +// General: Mixins +// + +@import "mixins/animations"; +@import "mixins/scrollbar"; diff --git a/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/_progress-bars.scss b/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/_progress-bars.scss new file mode 100644 index 00000000..c99605da --- /dev/null +++ b/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/_progress-bars.scss @@ -0,0 +1,66 @@ +// +// Component: Progress Bar +// + +//General CSS +.progress { + @include box-shadow(null); + @include border-radius($lte-progress-bar-border-radius); + + // Vertical bars + &.vertical { + position: relative; + display: inline-block; + width: 30px; + height: 200px; + margin-right: 10px; + + > .progress-bar { + position: absolute; + bottom: 0; + width: 100%; + } + + //Sizes + &.sm, + &.progress-sm { + width: 20px; + } + + &.xs, + &.progress-xs { + width: 10px; + } + + &.xxs, + &.progress-xxs { + width: 3px; + } + } +} + +.progress-group { + margin-bottom: map-get($spacers, 2); +} + +// size variation +.progress-sm { + height: 10px; +} + +.progress-xs { + height: 7px; +} + +.progress-xxs { + height: 3px; +} + +// Remove margins from progress bars when put in a table +.table { + tr > td { + .progress { + margin: 0; + } + } +} diff --git a/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/_root.scss b/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/_root.scss new file mode 100644 index 00000000..2633fbd2 --- /dev/null +++ b/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/_root.scss @@ -0,0 +1,5 @@ +:root, +[data-bs-theme="light"] { + // Sidebar + --#{$lte-prefix}sidebar-width: #{$lte-sidebar-width}; +} diff --git a/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/_small-box.scss b/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/_small-box.scss new file mode 100644 index 00000000..ce2e4863 --- /dev/null +++ b/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/_small-box.scss @@ -0,0 +1,127 @@ +// +// Component: Small Box +// + +.small-box { + @include border-radius($border-radius); + @include box-shadow($lte-card-shadow); + position: relative; + display: block; + margin-bottom: 1.25rem; + --bs-link-color-rgb: none; + --bs-link-hover-color-rgb: none; + --bs-heading-color: none; + + // content wrapper + > .inner { + padding: 10px; + } + + > .small-box-footer { + position: relative; + z-index: 10; + display: block; + padding: 3px 0; + text-align: center; + background-color: rgba($black, .07); + + &:hover { + background-color: rgba($black, .1); + } + } + + h3 { + @include font-size(2.2rem); + padding: 0; + margin: 0 0 10px; + font-weight: 700; + white-space: nowrap; + } + + @include media-breakpoint-up(lg) { + .col-xl-2 &, + .col-lg-2 &, + .col-md-2 & { + h3 { + @include font-size(1.6rem); + } + } + + .col-xl-3 &, + .col-lg-3 &, + .col-md-3 & { + h3 { + @include font-size(1.6rem); + } + } + } + + @include media-breakpoint-up(xl) { + .col-xl-2 &, + .col-lg-2 &, + .col-md-2 & { + h3 { + @include font-size(2.2rem); + } + } + + .col-xl-3 &, + .col-lg-3 &, + .col-md-3 & { + h3 { + @include font-size(2.2rem); + } + } + } + + p { + font-size: 1rem; + + > small { + display: block; + margin-top: 5px; + font-size: .9rem; + color: $gray-100; + } + } + + h3, + p { + z-index: 5; + } + + // the icon + .small-box-icon { + position: absolute; + top: 15px; + right: 15px; + z-index: 0; + height: 70px; + font-size: 70px; + color: rgba($black, .15); + @include transition(transform $lte-transition-speed linear); + } + + // Small box hover state + &:hover { + // Animate icons on small box hover + .small-box-icon { + transform: scale(1.1); + } + } +} + +@include media-breakpoint-down(sm) { + // No need for icons on very small devices + .small-box { + text-align: center; + + .small-box-icon { + display: none; + } + + p { + font-size: 12px; + } + } +} diff --git a/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/_table.scss b/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/_table.scss new file mode 100644 index 00000000..2bac75b7 --- /dev/null +++ b/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/_table.scss @@ -0,0 +1,67 @@ +// +// Component: Table +// + +.table { + &:not(.table-dark) { + color: inherit; + } + + // fixed table head + // Uses Bootstrap CSS variables so the sticky header follows light/dark mode + // automatically. Fixes #6026. + &.table-head-fixed { + thead tr:nth-child(1) th { + position: sticky; + top: 0; + z-index: 10; + background-color: var(--bs-body-bg, #{$white}); + border-bottom: 0; + box-shadow: inset 0 1px 0 var(--bs-border-color, #{$table-border-color}), inset 0 -1px 0 var(--bs-border-color, #{$table-border-color}); + } + } + + // no border + &.no-border { + &, + td, + th { + border: 0; + } + } + + // .text-center in tables + &.text-center { + &, + td, + th { + text-align: center; + } + } + + &.table-valign-middle { + thead > tr > th, + thead > tr > td, + tbody > tr > th, + tbody > tr > td { + vertical-align: middle; + } + } + + .card-body.p-0 & { + thead > tr > th, + thead > tr > td, + tfoot > tr > th, + tfoot > tr > td, + tbody > tr > th, + tbody > tr > td { + &:first-of-type { + padding-left: map-get($spacers, 4); + } + + &:last-of-type { + padding-right: map-get($spacers, 4); + } + } + } +} diff --git a/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/_timeline.scss b/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/_timeline.scss new file mode 100644 index 00000000..f1521aee --- /dev/null +++ b/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/_timeline.scss @@ -0,0 +1,121 @@ +// +// Component: Timeline +// + +.timeline { + position: relative; + padding: 0; + margin: 0 0 45px; + // The line + &::before { + @include border-radius($border-radius); + position: absolute; + top: 0; + bottom: 0; + left: 31px; + width: 4px; + margin: 0; + content: ""; + background-color: var(--#{$prefix}border-color); + } + // Element + > div { + &::before, + &::after { + display: table; + content: ""; + } + + position: relative; + margin-right: 10px; + margin-bottom: 15px; + // The content + > .timeline-item { + @include box-shadow($lte-card-shadow); + @include border-radius($border-radius); + position: relative; + padding: 0; + margin-top: 0; + margin-right: 15px; + margin-left: 60px; + color: var(--#{$prefix}body-color); + background-color: var(--#{$prefix}body-bg); + // The time and header + > .time { + float: right; + padding: 10px; + font-size: 12px; + color: var(--#{$prefix}secondary-color); + } + // Header + > .timeline-header { + padding: 10px; + margin: 0; + font-size: 16px; + line-height: 1.1; + color: var(--#{$prefix}secondary-color); + border-bottom: 1px solid var(--#{$prefix}border-color); + // Link in header + > a { + font-weight: 600; + text-decoration: none; + } + } + // Item body and footer + > .timeline-body, + > .timeline-footer { + padding: 10px; + } + + > .timeline-body { + > img { + margin: 10px; + } + > dl, + ol, + ul { + margin: 0; + } + } + + + } + + .timeline-icon { + position: absolute; + top: 0; + left: 18px; + width: 30px; + height: 30px; + font-size: 16px; + line-height: 30px; + text-align: center; + background-color: var(--#{$prefix}secondary-bg); + border-radius: 50%; // stylelint-disable-line property-disallowed-list + } + } + // Time label + > .time-label { + > span { + @include border-radius(4px); + display: inline-block; + padding: 5px; + font-weight: 600; + background-color: var(--#{$prefix}body-bg); + } + } +} + +.timeline-inverse { + > div { + > .timeline-item { + @include box-shadow(none); + background-color: var(--#{$prefix}tertiary-bg); + border: 1px solid var(--#{$prefix}border-color); + + > .timeline-header { + border-bottom-color: var(--#{$prefix}border-color); + } + } + } +} diff --git a/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/_toasts.scss b/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/_toasts.scss new file mode 100644 index 00000000..14be1ce6 --- /dev/null +++ b/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/_toasts.scss @@ -0,0 +1,33 @@ +// +// Toast +// + +@each $name, $color in $theme-colors { + .toast-#{$name} { + --#{$prefix}toast-header-color: #{color-contrast($color)}; + --#{$prefix}toast-header-bg: #{$color}; + --#{$prefix}toast-header-border-color: #{$color}; + --#{$prefix}toast-border-color: #{$color}; + --#{$prefix}toast-bg: var(--#{$prefix}#{$name}-bg-subtle); + + @if color-contrast($color) == $color-contrast-light { + .btn-close { + @include btn-close-white(); + } + } + } +} + +@if $enable-dark-mode { + @include color-mode(dark) { + @each $name, $color in $theme-colors { + .toast-#{$name} { + @if color-contrast($color) == $color-contrast-dark { + .btn-close { + --#{$prefix}btn-close-white-filter: none; + } + } + } + } + } +} diff --git a/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/_variables-dark.scss b/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/_variables-dark.scss new file mode 100644 index 00000000..9bd8681f --- /dev/null +++ b/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/_variables-dark.scss @@ -0,0 +1,16 @@ +// SIDEBAR SKINS +// -------------------------------------------------------- + +$lte-sidebar-hover-bg-dark: rgba(255, 255, 255, .1) !default; +$lte-sidebar-color-dark: #c2c7d0 !default; +$lte-sidebar-hover-color-dark: $white !default; +$lte-sidebar-active-color-dark: $white !default; +$lte-sidebar-menu-active-bg-dark: rgba(255, 255, 255, .1) !default; +$lte-sidebar-menu-active-color-dark: $white !default; +$lte-sidebar-submenu-bg-dark: transparent !default; +$lte-sidebar-submenu-color-dark: #c2c7d0 !default; +$lte-sidebar-submenu-hover-color-dark: $white !default; +$lte-sidebar-submenu-hover-bg-dark: rgba(255, 255, 255, .1) !default; +$lte-sidebar-submenu-active-color-dark: $white !default; +$lte-sidebar-submenu-active-bg-dark: rgba(255, 255, 255, .1) !default; +$lte-sidebar-header-color-dark: tint-color(#c2c7d0, 5%) !default; diff --git a/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/_variables.scss b/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/_variables.scss new file mode 100644 index 00000000..35675327 --- /dev/null +++ b/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/_variables.scss @@ -0,0 +1,131 @@ +// +// Custom AdminLTE Variables +// + +// Prefix for :root CSS variables and others. +$lte-prefix: lte- !default; + +// TRANSITIONS SETTINGS +// -------------------------------------------------------- +// Transition global options +$lte-transition-speed: .3s !default; +$lte-transition-fn: ease-in-out !default; + +// SIDEBAR +// -------------------------------------------------------- +$lte-sidebar-width: 250px !default; +$lte-sidebar-breakpoint: lg !default; +$lte-sidebar-padding-x: .5rem !default; +$lte-sidebar-padding-x-compact: .5rem !default; +$lte-sidebar-padding-y: .5rem !default; +$lte-sidebar-padding-y-compact: .25rem !default; +$lte-sidebar-transition: min-width $lte-transition-speed $lte-transition-fn, + max-width $lte-transition-speed $lte-transition-fn, + margin-left $lte-transition-speed $lte-transition-fn, + margin-right $lte-transition-speed $lte-transition-fn !default; + +// SIDEBAR SKINS +// -------------------------------------------------------- + +$lte-sidebar-hover-bg: rgba($black, .1) !default; +$lte-sidebar-color: $gray-800 !default; +$lte-sidebar-hover-color: $gray-900 !default; +$lte-sidebar-active-color: $black !default; +$lte-sidebar-menu-active-bg: rgba($black, .1) !default; +$lte-sidebar-menu-active-color: $black !default; +$lte-sidebar-submenu-bg: transparent !default; +$lte-sidebar-submenu-color: #777 !default; +$lte-sidebar-submenu-hover-color: $black !default; +$lte-sidebar-submenu-hover-bg: rgba($black, .1) !default; +$lte-sidebar-submenu-active-color: $gray-900 !default; +$lte-sidebar-submenu-active-bg: rgba($black, .1) !default; +$lte-sidebar-header-color: shade-color($gray-800, 5%) !default; + +// SIDEBAR MINI +// -------------------------------------------------------- +$nav-link-padding-x-compact: .25rem !default; +$lte-sidebar-mini-width: ($nav-link-padding-x + $lte-sidebar-padding-x + .8rem) * 2 !default; +$lte-sidebar-mini-width-compact: ($nav-link-padding-x-compact + $lte-sidebar-padding-x-compact + .8rem) * 2 !default; +$lte-sidebar-nav-icon-width: $lte-sidebar-mini-width - (($lte-sidebar-padding-x + $nav-link-padding-x) * 2) !default; +$lte-sidebar-user-image-width: $lte-sidebar-nav-icon-width + ($nav-link-padding-x * .4) !default; + +// MAIN HEADER +// -------------------------------------------------------- +$nav-link-height-compact: 1.75rem !default; +$lte-app-header-bottom-border-width: $border-width !default; +$lte-app-header-bottom-border-color: var(--#{$prefix}border-color) !default; +$lte-app-header-bottom-border: $lte-app-header-bottom-border-width solid $lte-app-header-bottom-border-color !default; +$lte-app-header-link-padding-y: $navbar-padding-y !default; +$lte-app-header-height: ($nav-link-height + ($lte-app-header-link-padding-y * 2)) !default; +$lte-app-header-height-compact: ($nav-link-height-compact + ($lte-app-header-link-padding-y * 2)) !default; +$lte-zindex-fixed-header: $zindex-fixed !default; + +// APP MAIN +// -------------------------------------------------------- +$lte-app-main-padding-bottom: $grid-gutter-width * .5 !default; + +// CONTENT PADDING +// -------------------------------------------------------- +$lte-content-padding-y: 0 !default; +$lte-content-padding-x: .5rem !default; + +// MAIN FOOTER +// -------------------------------------------------------- +$lte-app-footer-padding: 1rem !default; +$lte-app-footer-padding-compact: .5rem !default; +$lte-app-footer-border-top-width: 1px !default; +$lte-app-footer-border-top-color: var(--#{$prefix}border-color) !default; +$lte-app-footer-border-top: $lte-app-footer-border-top-width solid $lte-app-footer-border-top-color !default; +$lte-app-footer-bg: var(--#{$prefix}body-bg) !default; +$lte-app-footer-color: var(--#{$prefix}secondary-color) !default; +$lte-zindex-fixed-footer: $zindex-fixed !default; +// CONTENT BOTTOM AREA +// -------------------------------------------------------- +$lte-app-content-bottom-area-margin-bottom: -$lte-app-main-padding-bottom !default; +$lte-app-content-bottom-area-color: $lte-app-footer-color !default; +$lte-app-content-bottom-area-bg: $lte-app-footer-bg !default; +$lte-app-content-bottom-area-top-border: $lte-app-footer-border-top !default; +$lte-app-content-bottom-area-padding-y: $lte-app-footer-padding !default; +$lte-app-content-bottom-area-padding-x: 0 !default; + +// CONTENT TOP AREA +// -------------------------------------------------------- +$lte-app-content-top-area-top-border: $lte-app-footer-border-top !default; +$lte-app-content-top-area-padding-y: $lte-app-footer-padding !default; +$lte-app-content-top-area-padding-x: 0 !default; + +// BRAND LINK +// -------------------------------------------------------- +$navbar-brand-padding-y-compact: $navbar-brand-padding-y * .75 !default; +$navbar-padding-y-compact: $navbar-padding-y * .5 !default; +$lte-brand-link-padding-y: $navbar-brand-padding-y + $navbar-padding-y !default; +$lte-brand-link-padding-y-compact: $navbar-brand-padding-y-compact + $navbar-padding-y-compact !default; +$lte-brand-link-padding-x: $lte-sidebar-padding-x !default; +$lte-brand-link-padding-x-compact: $lte-sidebar-padding-x-compact !default; +$lte-brand-link-border-buttom: 1px !default; + +// CARDS +// -------------------------------------------------------- +$lte-card-shadow: 0 0 1px rgba(var(--#{$prefix}body-color-rgb), .125), 0 1px 3px rgba(var(--#{$prefix}body-color-rgb), .2) !default; +$lte-card-title-font-size: 1.1rem !default; +$lte-card-title-font-weight: $font-weight-normal !default; + +// PROGRESS BARS +// -------------------------------------------------------- +$lte-progress-bar-border-radius: 1px !default; + +// CALLOUTS +// -------------------------------------------------------- +$lte-callout-link-font-weight: $alert-link-font-weight !default; + +// DIRECT CHAT +// -------------------------------------------------------- +$lte-direct-chat-default-msg-bg: var(--#{$prefix}secondary-bg) !default; +$lte-direct-chat-default-font-color: var(--#{$prefix}emphasis-color) !default; +$lte-direct-chat-default-msg-border-color: var(--#{$prefix}border-color) !default; + +// Z-INDEX +// -------------------------------------------------------- +$lte-zindex-app-header: $zindex-fixed + 4 !default; +$lte-zindex-sidebar: $zindex-fixed + 8 !default; +$lte-zindex-sidebar-overlay: $lte-zindex-sidebar - 1 !default; diff --git a/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/adminlte.scss b/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/adminlte.scss new file mode 100644 index 00000000..47a13250 --- /dev/null +++ b/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/adminlte.scss @@ -0,0 +1,81 @@ +/*! + * AdminLTE v4.0.0 + * Author: Colorlib + * Website: AdminLTE.io + * License: Open source - MIT + */ + +// Bootstrap Configuration +// --------------------------------------------------- +@import "bootstrap/scss/functions"; + +// AdminLTE Configuration +// --------------------------------------------------- +@import "bootstrap-variables"; // little modified are here + +// Bootstrap Configuration +// --------------------------------------------------- +@import "bootstrap/scss/variables"; +@import "bootstrap/scss/variables-dark"; +@import "bootstrap/scss/maps"; +@import "bootstrap/scss/mixins"; +@import "bootstrap/scss/utilities"; + +// Bootstrap Layout & components +@import "bootstrap/scss/root"; +@import "bootstrap/scss/reboot"; +@import "bootstrap/scss/type"; +@import "bootstrap/scss/images"; +@import "bootstrap/scss/containers"; +@import "bootstrap/scss/grid"; +@import "bootstrap/scss/tables"; +@import "bootstrap/scss/forms"; +@import "bootstrap/scss/buttons"; +@import "bootstrap/scss/transitions"; +@import "bootstrap/scss/dropdown"; +@import "bootstrap/scss/button-group"; +@import "bootstrap/scss/nav"; +@import "bootstrap/scss/navbar"; +@import "bootstrap/scss/card"; +@import "bootstrap/scss/accordion"; +@import "bootstrap/scss/breadcrumb"; +@import "bootstrap/scss/pagination"; +@import "bootstrap/scss/badge"; +@import "bootstrap/scss/alert"; +@import "bootstrap/scss/progress"; +@import "bootstrap/scss/list-group"; +@import "bootstrap/scss/close"; +@import "bootstrap/scss/toasts"; +@import "bootstrap/scss/modal"; +@import "bootstrap/scss/tooltip"; +@import "bootstrap/scss/popover"; +@import "bootstrap/scss/carousel"; +@import "bootstrap/scss/spinners"; +@import "bootstrap/scss/offcanvas"; +@import "bootstrap/scss/placeholders"; + +// Bootstrap Helpers +@import "bootstrap/scss/helpers"; + +// Bootstrap Utilities +@import "bootstrap/scss/utilities/api"; + +// AdminLTE Configuration +// --------------------------------------------------- +@import "variables"; +@import "variables-dark"; +@import "mixins"; + +// AdiminLTE Parts +// --------------------------------------------------- +@import "parts/core"; +@import "parts/components"; +@import "parts/extra-components"; +@import "parts/pages"; +@import "parts/miscellaneous"; + +// AdminLTE Accessibility Styles - WCAG 2.1 AA Compliance +@import "accessibility"; + +// AdminLTE Documentation Styles (only applies to pages with body.docs-page) +@import "docs"; diff --git a/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/mixins/_animations.scss b/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/mixins/_animations.scss new file mode 100644 index 00000000..5a403175 --- /dev/null +++ b/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/mixins/_animations.scss @@ -0,0 +1,116 @@ +// +// Mixins: Animation +// + + +@keyframes flipInX { + 0% { + opacity: 0; + transition-timing-function: ease-in; + transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + } + + 40% { + transition-timing-function: ease-in; + transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + } + + 60% { + opacity: 1; + transform: perspective(400px) rotate3d(1, 0, 0, 10deg); + } + + 80% { + transform: perspective(400px) rotate3d(1, 0, 0, -5deg); + } + + 100% { + transform: perspective(400px); + } +} + +@keyframes fadeIn { + from { + opacity: 0; + } + + to { + opacity: 1; + } +} + +@keyframes fadeOut { + from { + opacity: 1; + } + + to { + opacity: 0; + } +} + +@keyframes shake { + 0% { + transform: translate(2px, 1px) rotate(0deg); + } + 10% { + transform: translate(-1px, -2px) rotate(-2deg); + } + 20% { + transform: translate(-3px, 0) rotate(3deg); + } + 30% { + transform: translate(0, 2px) rotate(0deg); + } + 40% { + transform: translate(1px, -1px) rotate(1deg); + } + 50% { + transform: translate(-1px, 2px) rotate(-1deg); + } + 60% { + transform: translate(-3px, 1px) rotate(0deg); + } + 70% { + transform: translate(2px, 1px) rotate(-2deg); + } + 80% { + transform: translate(-1px, -1px) rotate(4deg); + } + 90% { + transform: translate(2px, 2px) rotate(0deg); + } + 100% { + transform: translate(1px, -2px) rotate(-1deg); + } +} + +@keyframes wobble { + 0% { + transform: none; + } + + 15% { + transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg); + } + + 30% { + transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg); + } + + 45% { + transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg); + } + + 60% { + transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg); + } + + 75% { + transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg); + } + + 100% { + transform: none; + } +} diff --git a/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/mixins/_scrollbar.scss b/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/mixins/_scrollbar.scss new file mode 100644 index 00000000..65c3b53d --- /dev/null +++ b/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/mixins/_scrollbar.scss @@ -0,0 +1,36 @@ +// +// Mixins: Scrollbar +// + +@mixin scrollbar-color-gray() { + scrollbar-color: var(--#{$prefix}secondary-bg) transparent; + + &::-webkit-scrollbar-thumb { + background-color: var(--#{$prefix}secondary-bg); + } + + &::-webkit-scrollbar-track { + background-color: transparent; + } + + &::-webkit-scrollbar-corner { + background-color: transparent; + } +} + +@mixin scrollbar-width-thin() { + scrollbar-width: thin; + + &::-webkit-scrollbar { + width: .5rem; + height: .5rem; + } +} + +@mixin scrollbar-width-none() { + scrollbar-width: none; + + &::-webkit-scrollbar { + width: 0; + } +} diff --git a/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/pages/_lockscreen.scss b/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/pages/_lockscreen.scss new file mode 100644 index 00000000..030e69fd --- /dev/null +++ b/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/pages/_lockscreen.scss @@ -0,0 +1,75 @@ +// +// Pages: Lock Screen +// + +// ADD THIS CLASS TO THE TAG +.lockscreen { + // User name [optional] + .lockscreen-name { + font-weight: 600; + text-align: center; + } + + .lockscreen-logo { + margin-bottom: 25px; + font-size: 35px; + font-weight: 300; + text-align: center; + + a { + color: var(--#{$prefix}emphasis-color); + text-decoration: none; + } + } + + .lockscreen-wrapper { + max-width: 400px; + margin: 0 auto; + margin-top: 10%; + } + + // Will contain the image and the sign in form + .lockscreen-item { + position: relative; + width: 290px; + padding: 0; + margin: 10px auto 30px; + background-color: var(--#{$prefix}body-bg); + @include border-radius(4px); + } + + // User image + .lockscreen-image { + position: absolute; + top: -25px; + left: -10px; + z-index: 10; + padding: 5px; + background-color: var(--#{$prefix}body-bg); + @include border-radius(50%); + + > img { + @include border-radius(50%); + width: 70px; + height: 70px; + } + } + + // Contains the password input and the login button + .lockscreen-credentials { + margin-left: 70px; + + .form-control { + border: 0; + } + + .btn { + padding: 0 10px; + border: 0; + } + } + + .lockscreen-footer { + margin-top: 10px; + } +} diff --git a/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/pages/_login_and_register.scss b/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/pages/_login_and_register.scss new file mode 100644 index 00000000..cc176307 --- /dev/null +++ b/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/pages/_login_and_register.scss @@ -0,0 +1,100 @@ +// +// Pages: Login & Register +// + +.login-logo, +.register-logo { + margin-bottom: .9rem; + font-size: 2.1rem; + font-weight: 300; + text-align: center; + + a { + color: var(--#{$prefix}secondary-color); + text-decoration: none; + } +} + +.login-page, +.register-page { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + min-height: 100vh; +} + +.login-box, +.register-box { + width: 400px; + + @media (max-width: map-get($grid-breakpoints, sm)) { + width: 90%; + margin-top: .5rem; + } + + .card { + margin-bottom: 0; + } +} + +.login-card-body, +.register-card-body { + padding: 20px; + color: var(--#{$prefix}secondary-color); + background-color: var(--#{$prefix}body-bg); + border-top: 0; + + .input-group { + .form-control { + &:focus { + box-shadow: none; + + ~ .input-group-prepend .input-group-text, + ~ .input-group-append .input-group-text { + border-color: $input-focus-border-color; + } + } + + &.is-valid { + &:focus { + box-shadow: none; + } + + ~ .input-group-prepend .input-group-text, + ~ .input-group-append .input-group-text { + border-color: $success; + } + } + + &.is-invalid { + &:focus { + box-shadow: none; + } + + ~ .input-group-append .input-group-text { + border-color: $danger; + } + } + } + + .input-group-text { + color: var(--#{$prefix}secondary-color); + background-color: transparent; + @include border-top-end-radius($border-radius); + @include border-bottom-end-radius($border-radius); + @include transition($input-transition); + } + } +} + +.login-box-msg, +.register-box-msg { + padding: 0 20px 20px; + margin: 0; + text-align: center; +} + +.social-auth-links { + margin: 10px 0; +} diff --git a/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/parts/_components.scss b/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/parts/_components.scss new file mode 100644 index 00000000..ec223fd9 --- /dev/null +++ b/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/parts/_components.scss @@ -0,0 +1,7 @@ +// +// Part: Components +// + +@import "../progress-bars"; +@import "../cards"; +@import "../table"; diff --git a/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/parts/_core.scss b/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/parts/_core.scss new file mode 100644 index 00000000..255dc03d --- /dev/null +++ b/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/parts/_core.scss @@ -0,0 +1,15 @@ +// +// Part: Core +// + +@import "../root"; +@import "../app-wrapper"; +@import "../app-content"; +@import "../app-header"; +@import "../app-sidebar"; +@import "../app-main"; +@import "../app-footer"; +@import "../dropdown"; +@import "../callouts"; +@import "../compact-mode"; +@import "../docs"; diff --git a/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/parts/_extra-components.scss b/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/parts/_extra-components.scss new file mode 100644 index 00000000..1028da98 --- /dev/null +++ b/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/parts/_extra-components.scss @@ -0,0 +1,9 @@ +// +// Part: Extra Components +// + +@import "../small-box"; +@import "../info-box"; +@import "../timeline"; +@import "../direct-chat"; +@import "../toasts"; diff --git a/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/parts/_miscellaneous.scss b/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/parts/_miscellaneous.scss new file mode 100644 index 00000000..cfdd705a --- /dev/null +++ b/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/parts/_miscellaneous.scss @@ -0,0 +1,5 @@ +// +// Part: Miscellaneous +// + +@import "../miscellaneous"; diff --git a/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/parts/_pages.scss b/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/parts/_pages.scss new file mode 100644 index 00000000..01cab17e --- /dev/null +++ b/extensions/pagetop-bootsier/assets/adminlte-4.0.0/scss/parts/_pages.scss @@ -0,0 +1,6 @@ +// +// Part: Pages +// + +@import "../pages/login_and_register"; +@import "../pages/lockscreen"; diff --git a/extensions/pagetop-bootsier/assets/bootsier.scss b/extensions/pagetop-bootsier/assets/bootsier.scss index 94fcf61e..68b778fa 100644 --- a/extensions/pagetop-bootsier/assets/bootsier.scss +++ b/extensions/pagetop-bootsier/assets/bootsier.scss @@ -1,9 +1,13 @@ -// Bootstrap 5.3.8 - PageTop Bootsier Styles. +// AdminLTE v4.0.0 + Bootstrap 5.3.8 - PageTop Bootsier Styles. // Bootstrap Configuration // --------------------------------------------------- @import "bootstrap-5.3.8/scss/functions"; +// AdminLTE Configuration (little modified are here) +// --------------------------------------------------- +@import "adminlte-4.0.0/scss/bootstrap-variables"; + // Bootsier Bootstrap variable overrides // --------------------------------------------------- @import "bootsier-variables"; @@ -58,6 +62,26 @@ // Bootstrap Utilities @import "bootstrap-5.3.8/scss/utilities/api"; +// AdminLTE Configuration +// --------------------------------------------------- +@import "adminlte-4.0.0/scss/variables"; +@import "adminlte-4.0.0/scss/variables-dark"; +@import "adminlte-4.0.0/scss/mixins"; + +// AdminLTE Parts +// --------------------------------------------------- +@import "adminlte-4.0.0/scss/parts/core"; +@import "adminlte-4.0.0/scss/parts/components"; +@import "adminlte-4.0.0/scss/parts/extra-components"; +@import "adminlte-4.0.0/scss/parts/pages"; +@import "adminlte-4.0.0/scss/parts/miscellaneous"; + +// AdminLTE Accessibility Styles - WCAG 2.1 AA Compliance +@import "adminlte-4.0.0/scss/accessibility"; + +// AdminLTE Documentation Styles (only applies to pages with body.docs-page) +@import "adminlte-4.0.0/scss/docs"; + // Bootstrap Icons 1.13.1 // --------------------------------------------------- @import "bootsier-icons"; diff --git a/extensions/pagetop-bootsier/assets/bootsier.theme.js b/extensions/pagetop-bootsier/assets/bootsier.shell.js similarity index 73% rename from extensions/pagetop-bootsier/assets/bootsier.theme.js rename to extensions/pagetop-bootsier/assets/bootsier.shell.js index 26b672f7..c2b6e2a5 100644 --- a/extensions/pagetop-bootsier/assets/bootsier.theme.js +++ b/extensions/pagetop-bootsier/assets/bootsier.shell.js @@ -1,8 +1,19 @@ (function () { 'use strict'; + // Fullscreen: keeps maximize/minimize icons in sync with the actual fullscreen state. + document.addEventListener('fullscreenchange', function () { + var isFs = !!document.fullscreenElement; + document.querySelectorAll('[data-lte-icon="maximize"]').forEach(function (el) { + el.classList.toggle('d-none', isFs); + }); + document.querySelectorAll('[data-lte-icon="minimize"]').forEach(function (el) { + el.classList.toggle('d-none', !isFs); + }); + }); + // Color mode selector (light / dark / auto). - var STORAGE_KEY = 'bootsier-theme'; + var STORAGE_KEY = 'lte-theme'; var getStored = function () { return localStorage.getItem(STORAGE_KEY); }; var setStored = function (theme) { localStorage.setItem(STORAGE_KEY, theme); }; var prefersDark = function () { @@ -28,8 +39,8 @@ var check = active.querySelector('.bi-check-lg'); if (check) { check.classList.remove('d-none'); } } - document.querySelectorAll('[data-bs-theme-icon]').forEach(function (icon) { - icon.classList.toggle('d-none', icon.dataset.bsThemeIcon !== theme); + document.querySelectorAll('[data-lte-theme-icon]').forEach(function (icon) { + icon.classList.toggle('d-none', icon.dataset.lteThemeIcon !== theme); }); }; diff --git a/extensions/pagetop-bootsier/build.rs b/extensions/pagetop-bootsier/build.rs index 75e343db..c8770de0 100644 --- a/extensions/pagetop-bootsier/build.rs +++ b/extensions/pagetop-bootsier/build.rs @@ -3,13 +3,13 @@ //! Genera el directorio `static/` a partir de `assets/` y embebe su contenido en el binario: //! //! - `static/css/` - CSS compilado a partir de los archivos SCSS de `assets/`. -//! - `static/js/` - JS copiado o minificado desde `assets/`. +//! - `static/js/` - JS copiado desde `assets/`, renombrando AdminLTE a `bootsier.min.js`. //! - `static/fonts/` - Fuentes copiadas desde `assets/`. //! //! Los archivos `.map` se copian a `static/js/` para uso en desarrollo pero no se incluyen en el //! binario embebido. -use pagetop_build::{StaticFilesBundle, compile_scss, copy_file, minify_js}; +use pagetop_build::{StaticFilesBundle, compile_scss, copy_file, copy_file_replacing, minify_js}; use std::path::Path; @@ -18,7 +18,7 @@ fn main() -> std::io::Result<()> { println!("cargo:rerun-if-changed=assets"); let _ = std::fs::remove_dir_all("static"); - // CSS: Bootstrap 5.3.8 + Bootstrap Icons 1.13.1. + // CSS: Bootstrap 5.3.8 + AdminLTE 4.0.0 + Bootstrap Icons 1.13.1. compile_scss("assets/bootsier.scss", "static/css/bootsier.min.css")?; // JS: Bootstrap bundle. @@ -30,10 +30,20 @@ fn main() -> std::io::Result<()> { "assets/bootstrap-5.3.8/js/bootstrap.bundle.min.js.map", "static/js/bootsier.bundle.min.js.map", )?; - // JS: selector de modo de color (claro / oscuro / automático). + // JS: AdminLTE renombrado a bootsier.extended.min.js. + copy_file_replacing( + "assets/adminlte-4.0.0/js/adminlte.min.js", + "static/js/bootsier.extended.min.js", + &[("adminlte.min.js.map", "bootsier.extended.min.js.map")], + )?; + copy_file( + "assets/adminlte-4.0.0/js/adminlte.min.js.map", + "static/js/bootsier.extended.min.js.map", + )?; + // JS: shell de Bootsier. minify_js( - "assets/bootsier.theme.js", - "static/js/bootsier.theme.min.js", + "assets/bootsier.shell.js", + "static/js/bootsier.shell.min.js", )?; // JS: fix de apilamiento para Dialog. minify_js( @@ -57,11 +67,11 @@ fn main() -> std::io::Result<()> { )?; // Fuentes: Source Sans 3 (SIL OFL 1.1). copy_file( - "assets/fonts/SourceSans3VF-Upright.otf.woff2", + "assets/adminlte-4.0.0/fonts/SourceSans3VF-Upright.otf.woff2", "static/fonts/bootsier.font.woff2", )?; copy_file( - "assets/fonts/SourceSans3VF-Italic.otf.woff2", + "assets/adminlte-4.0.0/fonts/SourceSans3VF-Italic.otf.woff2", "static/fonts/bootsier.font.italic.woff2", )?; diff --git a/extensions/pagetop-bootsier/src/lib.rs b/extensions/pagetop-bootsier/src/lib.rs index c3437f1d..949913ee 100644 --- a/extensions/pagetop-bootsier/src/lib.rs +++ b/extensions/pagetop-bootsier/src/lib.rs @@ -83,6 +83,7 @@ use pagetop::prelude::*; include_locales!(LOCALES_BOOTSIER); +pub(crate) const ADMINLTE_VERSION: &str = "4.0.0"; const BOOTSTRAP_VERSION: &str = "5.3.8"; pub mod config; @@ -168,6 +169,7 @@ impl Theme for Bootsier { cx: &mut Context, ) -> Option> { render_component!(component, { + layout::Region => |c| theme::bs::layout::region::render(c, cx).await?, layout::Template => |c| theme::bs::layout::template::render(c, cx).await?, Dialog => |c| theme::bs::dialog::render(c, cx).await, Dropdown => |c| theme::bs::dropdown::render(c, cx).await, @@ -199,7 +201,7 @@ impl Theme for Bootsier { ) .alter_assets( StyleSheet::from("/bootsier/css/bootsier.min.css") - .with_version(BOOTSTRAP_VERSION) + .with_version(ADMINLTE_VERSION) .with_weight(-99), ) .alter_assets( @@ -208,8 +210,8 @@ impl Theme for Bootsier { .with_weight(-99), ) .alter_assets( - JavaScript::defer("/bootsier/js/bootsier.theme.min.js") - .with_version(BOOTSTRAP_VERSION) + JavaScript::defer("/bootsier/js/bootsier.extended.min.js") + .with_version(ADMINLTE_VERSION) .with_weight(-99), ) .alter_assets( diff --git a/extensions/pagetop-bootsier/src/locale/en-US/components.ftl b/extensions/pagetop-bootsier/src/locale/en-US/components.ftl index 81106ee8..561513bd 100644 --- a/extensions/pagetop-bootsier/src/locale/en-US/components.ftl +++ b/extensions/pagetop-bootsier/src/locale/en-US/components.ftl @@ -7,7 +7,8 @@ toggle = Toggle navigation # Offcanvas offcanvas_close = Close -# Theme toggle +# Shell AdminLTE (BootsierTemplates::Admin) +shell_fullscreen = Full screen shell_theme_toggle = Color mode selector shell_theme_light = Light shell_theme_dark = Dark diff --git a/extensions/pagetop-bootsier/src/locale/en-US/regions.ftl b/extensions/pagetop-bootsier/src/locale/en-US/regions.ftl new file mode 100644 index 00000000..dfae4ec5 --- /dev/null +++ b/extensions/pagetop-bootsier/src/locale/en-US/regions.ftl @@ -0,0 +1,3 @@ +# BootsierRegions +region_sidebar = Sidebar +region_navbar = Navigation bar diff --git a/extensions/pagetop-bootsier/src/locale/es-ES/components.ftl b/extensions/pagetop-bootsier/src/locale/es-ES/components.ftl index aa1836a7..fcaffe72 100644 --- a/extensions/pagetop-bootsier/src/locale/es-ES/components.ftl +++ b/extensions/pagetop-bootsier/src/locale/es-ES/components.ftl @@ -7,7 +7,8 @@ toggle = Mostrar/ocultar navegación # Offcanvas offcanvas_close = Cerrar -# Theme toggle +# Shell AdminLTE (BootsierTemplates::Admin) +shell_fullscreen = Pantalla completa shell_theme_toggle = Selector de modo de color shell_theme_light = Claro shell_theme_dark = Oscuro diff --git a/extensions/pagetop-bootsier/src/locale/es-ES/regions.ftl b/extensions/pagetop-bootsier/src/locale/es-ES/regions.ftl new file mode 100644 index 00000000..1ee281d8 --- /dev/null +++ b/extensions/pagetop-bootsier/src/locale/es-ES/regions.ftl @@ -0,0 +1,3 @@ +# BootsierRegions +region_sidebar = Barra lateral +region_navbar = Barra de navegación diff --git a/extensions/pagetop-bootsier/src/theme.rs b/extensions/pagetop-bootsier/src/theme.rs index a4c64a20..6879c222 100644 --- a/extensions/pagetop-bootsier/src/theme.rs +++ b/extensions/pagetop-bootsier/src/theme.rs @@ -11,12 +11,10 @@ //! //! # Plantillas //! -//! Bootsier maqueta las dos plantillas de PageTop ([`CoreTemplates`]) con la misma cabecera, -//! contenido y pie: `Standard`, la plantilla por defecto de cualquier página; y `Admin`, que se -//! activa creando la página con [`Page::admin()`] en lugar de [`Page::new()`]. Ambas se maquetan -//! igual hoy -- la distinción entre página "normal" y de administración no vive en el maquetado, -//! sino en qué extensión registra contenido en cada región y para qué plantilla se autolimita (ver -//! más abajo `pagetop-admin`). +//! Bootsier maqueta las dos plantillas de PageTop ([`CoreTemplates`]): `Standard`, con cabecera, +//! contenido y pie, que es la plantilla por defecto de cualquier página; y `Admin`, con la shell +//! completa de administración (barra superior + barra lateral + área de contenido), que se activa +//! creando la página con [`Page::admin()`] en lugar de [`Page::new()`]. //! //! ```rust,no_run //! use pagetop::prelude::*; @@ -35,29 +33,60 @@ //! [`Page::admin()`]: pagetop::response::Page::admin //! [`Page::new()`]: pagetop::response::Page::new //! -//! # Menú de administración +//! # Barra lateral //! -//! `pagetop-admin` (si está presente en la aplicación) registra su propio menú de secciones y -//! páginas en [`CoreRegions::Aside`], autolimitado a -//! páginas con la plantilla `Admin` -- no requiere ningún registro por parte de Bootsier. Se -//! construye con [`Navbar`]/[`Nav`]/[`Dropdown`], los mismos -//! componentes disponibles para cualquier página de la aplicación. +//! Registra elementos en [`BootsierRegions::Sidebar`](bs::BootsierRegions::Sidebar) para poblar la +//! barra lateral de la shell. Los elementos esperados son [`bs::sidebar::Item`] y +//! [`bs::sidebar::Section`]. //! -//! # Selector de modo de color -//! -//! [`bs::theme_toggle()`] crea un ítem de menú con el selector de modo de color (claro / oscuro / -//! automático), pensado para añadirse a cualquier [`Nav`] de la aplicación, no sólo a las -//! páginas de administración: +//! De forma **global** (visibles en todas las páginas de administración): //! //! ```rust,no_run //! use pagetop::prelude::*; -//! use pagetop_bootsier::theme::*; +//! use pagetop_bootsier::theme::bs::{BootsierRegions, sidebar}; //! -//! let navbar = bs::Navbar::simple().with_item(bs::navbar::Item::nav( -//! bs::Nav::new() -//! .with_item(bs::nav::Item::link(Lc::n("Home"), "/")) -//! .with_item(bs::theme_toggle()), -//! )); +//! fn register_navigation() { +//! InRegion::Global(&BootsierRegions::Sidebar) +//! .add(sidebar::Section::titled(Lc::n("Administración"))) +//! .add(sidebar::Item::link(Lc::n("Usuarios"), "/users", "people")) +//! .add(sidebar::Item::link(Lc::n("Roles"), "/roles", "shield-check")); +//! } +//! ``` +//! +//! O de forma **por página**: +//! +//! ```rust,no_run +//! use pagetop::prelude::*; +//! use pagetop_bootsier::theme::bs::{BootsierRegions, sidebar}; +//! +//! async fn settings(request: HttpRequest) -> Result { +//! Page::admin(request) +//! .with_child_in( +//! &BootsierRegions::Sidebar, +//! sidebar::Item::link(Lc::n("Ajustes"), "/settings", "gear"), +//! ) +//! .with_child(Html::with(|_| html! { h3 { "Ajustes" } })) +//! .render().await +//! } +//! ``` +//! +//! # Barra de navegación superior +//! +//! La barra superior incluye por defecto los controles de pantalla completa y selector de tema. +//! Para añadir elementos adicionales en el lado derecho (por ejemplo, el dropdown de usuario de +//! `pagetop-user`), registra componentes en +//! [`BootsierRegions::Navbar`](bs::BootsierRegions::Navbar): +//! +//! ```rust,no_run +//! use pagetop::prelude::*; +//! use pagetop_bootsier::theme::bs::BootsierRegions; +//! +//! InRegion::Global(&BootsierRegions::Navbar) +//! .add(Html::with(|_| html! { +//! li class="nav-item" { +//! a class="nav-link" href="/logout" { "Cerrar sesión" } +//! } +//! })); //! ``` use pagetop::prelude::*; diff --git a/extensions/pagetop-bootsier/src/theme/bs.rs b/extensions/pagetop-bootsier/src/theme/bs.rs index f829537a..7bc36b71 100644 --- a/extensions/pagetop-bootsier/src/theme/bs.rs +++ b/extensions/pagetop-bootsier/src/theme/bs.rs @@ -1,6 +1,7 @@ //! Componentes proporcionados por el tema. pub(crate) mod layout; +pub use layout::BootsierRegions; // Badge. pub(crate) mod badge; @@ -80,11 +81,10 @@ pub use offcanvas::Offcanvas; // Pager. pub use pagetop::base::component::{Pager, PagerAlign, PagerVisibility}; +// Sidebar (componentes de navegación de AdminLTE). +pub mod sidebar; + // Table. pub use pagetop::base::component::table; #[doc(inline)] pub use table::Table; - -// Theme toggle. -mod theme_toggle; -pub use theme_toggle::theme_toggle; diff --git a/extensions/pagetop-bootsier/src/theme/bs/layout.rs b/extensions/pagetop-bootsier/src/theme/bs/layout.rs index 6c2dd810..8b9b1881 100644 --- a/extensions/pagetop-bootsier/src/theme/bs/layout.rs +++ b/extensions/pagetop-bootsier/src/theme/bs/layout.rs @@ -1 +1,4 @@ +pub(crate) mod region; +pub use region::BootsierRegions; + pub(crate) mod template; diff --git a/extensions/pagetop-bootsier/src/theme/bs/layout/region.rs b/extensions/pagetop-bootsier/src/theme/bs/layout/region.rs new file mode 100644 index 00000000..3c3f296a --- /dev/null +++ b/extensions/pagetop-bootsier/src/theme/bs/layout/region.rs @@ -0,0 +1,113 @@ +use pagetop::prelude::*; + +use crate::LOCALES_BOOTSIER; + +/// Regiones específicas de la shell de Bootsier. +pub enum BootsierRegions { + /// Barra lateral de navegación (`app-sidebar` de AdminLTE). + /// + /// Los componentes registrados aquí se renderizan directamente dentro del + /// `