diff --git a/web/src/admin/AdminInterface/AdminSidebar.ts b/web/src/admin/AdminInterface/AdminSidebar.ts index 42b381095..269c90598 100644 --- a/web/src/admin/AdminInterface/AdminSidebar.ts +++ b/web/src/admin/AdminInterface/AdminSidebar.ts @@ -192,11 +192,11 @@ export class AkAdminSidebar extends AKElement { ["/administration/dashboard/users", msg("User Statistics")], ["/administration/system-tasks", msg("System Tasks")]]], [null, msg("Applications"), null, [ - ["/core/applications", msg("Applications"), [`^/core/applications/(?${SLUG_REGEX})$`]], - ["/core/providers", msg("Providers"), [`^/core/providers/(?${ID_REGEX})$`], this.providerTypes.entries()], + ["/core/applications", msg("Applications"), [`^/core/applications(/(?${SLUG_REGEX}))?$`]], + ["/core/providers", msg("Providers"), [`^/core/providers(/(?${ID_REGEX}))?$`], this.providerTypes.entries()], ["/outpost/outposts", msg("Outposts")]]], [null, msg("Events"), null, [ - ["/events/log", msg("Logs"), [`^/events/log/(?${UUID_REGEX})$`], eventTypes], + ["/events/log", msg("Logs"), [`^/events/log(/(?${UUID_REGEX}))?$`], eventTypes], ["/events/rules", msg("Notification Rules")], ["/events/transports", msg("Notification Transports")]]], [null, msg("Customisation"), null, [ @@ -205,14 +205,14 @@ export class AkAdminSidebar extends AKElement { ["/blueprints/instances", msg("Blueprints")], ["/policy/reputation", msg("Reputation scores")]]], [null, msg("Flows and Stages"), null, [ - ["/flow/flows", msg("Flows"), [`^/flow/flows/(?${SLUG_REGEX})$`], flowTypes], + ["/flow/flows", msg("Flows"), [`^/flow/flows(/(?${SLUG_REGEX}))?$`], flowTypes], ["/flow/stages", msg("Stages"), null, this.stageTypes.entries()], ["/flow/stages/prompts", msg("Prompts")]]], [null, msg("Directory"), null, [ - ["/identity/users", msg("Users"), [`^/identity/users/(?${ID_REGEX})$`]], - ["/identity/groups", msg("Groups"), [`^/identity/groups/(?${UUID_REGEX})$`]], + ["/identity/users", msg("Users"), [`^/identity/users(/(?${ID_REGEX}))?$`]], + ["/identity/groups", msg("Groups"), [`^/identity/groups(/(?${UUID_REGEX}))?$`]], ["/identity/roles", msg("Roles"), [`^/identity/roles/(?${UUID_REGEX})$`]], - ["/core/sources", msg("Federation and Social login"), [`^/core/sources/(?${SLUG_REGEX})$`], this.sourceTypes.entries()], + ["/core/sources", msg("Federation and Social login"), [`^/core/sources(/(?${SLUG_REGEX}))?$`], this.sourceTypes.entries()], ["/core/tokens", msg("Tokens and App passwords")], ["/flow/stages/invitations", msg("Invitations")]]], [null, msg("System"), null, [ diff --git a/web/src/elements/sidebar/Sidebar.css.ts b/web/src/elements/sidebar/Sidebar.css.ts new file mode 100644 index 000000000..51663931e --- /dev/null +++ b/web/src/elements/sidebar/Sidebar.css.ts @@ -0,0 +1,56 @@ +import { css } from "lit"; + +import PFNav from "@patternfly/patternfly/components/Nav/nav.css"; +import PFPage from "@patternfly/patternfly/components/Page/page.css"; +import PFBase from "@patternfly/patternfly/patternfly-base.css"; + +export const sidebarStyles = [ + PFBase, + PFPage, + PFNav, + css` + :host { + z-index: 100; + } + .pf-c-nav__link.pf-m-current::after, + .pf-c-nav__link.pf-m-current:hover::after, + .pf-c-nav__item.pf-m-current:not(.pf-m-expanded) .pf-c-nav__link::after { + --pf-c-nav__link--m-current--after--BorderColor: #fd4b2d; + } + :host([theme="light"]) { + border-right-color: transparent !important; + } + + .pf-c-nav__section + .pf-c-nav__section { + --pf-c-nav__section--section--MarginTop: var(--pf-global--spacer--sm); + } + .pf-c-nav__list .sidebar-brand { + max-height: 82px; + margin-bottom: -0.5rem; + } + nav { + display: flex; + flex-direction: column; + max-height: 100vh; + height: 100%; + overflow-y: hidden; + } + + ak-sidebar-items { + flex-grow: 1; + overflow-y: auto; + } + + .pf-c-nav__link { + --pf-c-nav__link--PaddingTop: 0.5rem; + --pf-c-nav__link--PaddingRight: 0.5rem; + --pf-c-nav__link--PaddingBottom: 0.5rem; + } + .pf-c-nav__section-title { + font-size: 12px; + } + .pf-c-nav__item { + --pf-c-nav__item--MarginTop: 0px; + } + `, +]; diff --git a/web/src/elements/sidebar/Sidebar.ts b/web/src/elements/sidebar/Sidebar.ts index c07dcf828..7fe6fda92 100644 --- a/web/src/elements/sidebar/Sidebar.ts +++ b/web/src/elements/sidebar/Sidebar.ts @@ -3,15 +3,12 @@ import "@goauthentik/elements/sidebar/SidebarBrand"; import "@goauthentik/elements/sidebar/SidebarItems"; import "@goauthentik/elements/sidebar/SidebarUser"; -import { CSSResult, TemplateResult, css, html } from "lit"; +import { html } from "lit"; import { customElement, property } from "lit/decorators.js"; -import PFNav from "@patternfly/patternfly/components/Nav/nav.css"; -import PFPage from "@patternfly/patternfly/components/Page/page.css"; -import PFBase from "@patternfly/patternfly/patternfly-base.css"; - import { UiThemeEnum } from "@goauthentik/api"; +import { sidebarStyles } from "./Sidebar.css.js"; import type { SidebarEntry } from "./types"; @customElement("ak-sidebar") @@ -19,60 +16,11 @@ export class Sidebar extends AKElement { @property({ type: Array }) entries: SidebarEntry[] = []; - static get styles(): CSSResult[] { - return [ - PFBase, - PFPage, - PFNav, - css` - :host { - z-index: 100; - } - .pf-c-nav__link.pf-m-current::after, - .pf-c-nav__link.pf-m-current:hover::after, - .pf-c-nav__item.pf-m-current:not(.pf-m-expanded) .pf-c-nav__link::after { - --pf-c-nav__link--m-current--after--BorderColor: #fd4b2d; - } - :host([theme="light"]) { - border-right-color: transparent !important; - } - - .pf-c-nav__section + .pf-c-nav__section { - --pf-c-nav__section--section--MarginTop: var(--pf-global--spacer--sm); - } - .pf-c-nav__list .sidebar-brand { - max-height: 82px; - margin-bottom: -0.5rem; - } - nav { - display: flex; - flex-direction: column; - max-height: 100vh; - height: 100%; - overflow-y: hidden; - } - - ak-sidebar-items { - flex-grow: 1; - overflow-y: auto; - } - - .pf-c-nav__link { - --pf-c-nav__link--PaddingTop: 0.5rem; - --pf-c-nav__link--PaddingRight: 0.5rem; - --pf-c-nav__link--PaddingBottom: 0.5rem; - } - .pf-c-nav__section-title { - font-size: 12px; - } - .pf-c-nav__item { - --pf-c-nav__item--MarginTop: 0px; - } - `, - ]; + static get styles() { + return sidebarStyles; } - render(): TemplateResult { + render() { return html`