web/admin: theme adjustments (#5944)

* web/admin: theme adjustments

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

* update locale

Signed-off-by: Jens Langhammer <jens@goauthentik.io>

---------

Signed-off-by: Jens Langhammer <jens@goauthentik.io>
This commit is contained in:
Jens L 2023-06-13 15:41:48 +02:00 committed by GitHub
parent c71a70a2e5
commit 16454af1c0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
14 changed files with 151 additions and 71 deletions

View File

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-06-12 12:11+0000\n"
"POT-Creation-Date: 2023-06-13 11:23+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -102,7 +102,7 @@ msgstr ""
msgid "User's display name."
msgstr ""
#: authentik/core/models.py:243 authentik/providers/oauth2/models.py:287
#: authentik/core/models.py:243 authentik/providers/oauth2/models.py:294
msgid "User"
msgstr ""
@ -662,33 +662,40 @@ msgid "Dummy Policies"
msgstr ""
#: authentik/policies/event_matcher/api.py:20
#: authentik/policies/event_matcher/models.py:37
#: authentik/policies/event_matcher/models.py:55
msgid ""
"Match events created by selected application. When left empty, all "
"applications are matched."
msgstr ""
#: authentik/policies/event_matcher/api.py:27
#: authentik/policies/event_matcher/api.py:29
#: authentik/policies/event_matcher/models.py:63
msgid ""
"Match events created by selected model. When left empty, all models are "
"matched. When an app is selected, all the application's models are matched."
msgstr ""
#: authentik/policies/event_matcher/api.py:42
msgid "At least one criteria must be set."
msgstr ""
#: authentik/policies/event_matcher/models.py:29
#: authentik/policies/event_matcher/models.py:47
msgid ""
"Match created events with this action type. When left empty, all action "
"types will be matched."
msgstr ""
#: authentik/policies/event_matcher/models.py:44
#: authentik/policies/event_matcher/models.py:71
msgid ""
"Matches Event's Client IP (strict matching, for network matching use an "
"Expression Policy)"
msgstr ""
#: authentik/policies/event_matcher/models.py:72
#: authentik/policies/event_matcher/models.py:141
msgid "Event Matcher Policy"
msgstr ""
#: authentik/policies/event_matcher/models.py:73
#: authentik/policies/event_matcher/models.py:142
msgid "Event Matcher Policies"
msgstr ""
@ -901,212 +908,212 @@ msgid ""
"this method only if you have different UPN and Mail domains."
msgstr ""
#: authentik/providers/oauth2/models.py:39
#: authentik/providers/oauth2/models.py:42
msgid "Confidential"
msgstr ""
#: authentik/providers/oauth2/models.py:40
#: authentik/providers/oauth2/models.py:43
msgid "Public"
msgstr ""
#: authentik/providers/oauth2/models.py:62
#: authentik/providers/oauth2/models.py:65
msgid "Same identifier is used for all providers"
msgstr ""
#: authentik/providers/oauth2/models.py:64
#: authentik/providers/oauth2/models.py:67
msgid "Each provider has a different issuer, based on the application slug."
msgstr ""
#: authentik/providers/oauth2/models.py:71
#: authentik/providers/oauth2/models.py:74
msgid "code (Authorization Code Flow)"
msgstr ""
#: authentik/providers/oauth2/models.py:72
#: authentik/providers/oauth2/models.py:75
msgid "id_token (Implicit Flow)"
msgstr ""
#: authentik/providers/oauth2/models.py:73
#: authentik/providers/oauth2/models.py:76
msgid "id_token token (Implicit Flow)"
msgstr ""
#: authentik/providers/oauth2/models.py:74
#: authentik/providers/oauth2/models.py:77
msgid "code token (Hybrid Flow)"
msgstr ""
#: authentik/providers/oauth2/models.py:75
#: authentik/providers/oauth2/models.py:78
msgid "code id_token (Hybrid Flow)"
msgstr ""
#: authentik/providers/oauth2/models.py:76
#: authentik/providers/oauth2/models.py:79
msgid "code id_token token (Hybrid Flow)"
msgstr ""
#: authentik/providers/oauth2/models.py:82
#: authentik/providers/oauth2/models.py:85
msgid "HS256 (Symmetric Encryption)"
msgstr ""
#: authentik/providers/oauth2/models.py:83
#: authentik/providers/oauth2/models.py:86
msgid "RS256 (Asymmetric Encryption)"
msgstr ""
#: authentik/providers/oauth2/models.py:84
#: authentik/providers/oauth2/models.py:87
msgid "ES256 (Asymmetric Encryption)"
msgstr ""
#: authentik/providers/oauth2/models.py:90
#: authentik/providers/oauth2/models.py:93
msgid "Scope used by the client"
msgstr ""
#: authentik/providers/oauth2/models.py:94
#: authentik/providers/oauth2/models.py:97
msgid ""
"Description shown to the user when consenting. If left empty, the user won't "
"be informed."
msgstr ""
#: authentik/providers/oauth2/models.py:113
#: authentik/providers/oauth2/models.py:116
msgid "Scope Mapping"
msgstr ""
#: authentik/providers/oauth2/models.py:114
#: authentik/providers/oauth2/models.py:117
msgid "Scope Mappings"
msgstr ""
#: authentik/providers/oauth2/models.py:124
#: authentik/providers/oauth2/models.py:127
msgid "Client Type"
msgstr ""
#: authentik/providers/oauth2/models.py:126
#: authentik/providers/oauth2/models.py:129
msgid ""
"Confidential clients are capable of maintaining the confidentiality of their "
"credentials. Public clients are incapable"
msgstr ""
#: authentik/providers/oauth2/models.py:133
#: authentik/providers/oauth2/models.py:136
msgid "Client ID"
msgstr ""
#: authentik/providers/oauth2/models.py:139
#: authentik/providers/oauth2/models.py:142
msgid "Client Secret"
msgstr ""
#: authentik/providers/oauth2/models.py:145
#: authentik/providers/oauth2/models.py:148
msgid "Redirect URIs"
msgstr ""
#: authentik/providers/oauth2/models.py:146
#: authentik/providers/oauth2/models.py:149
msgid "Enter each URI on a new line."
msgstr ""
#: authentik/providers/oauth2/models.py:151
#: authentik/providers/oauth2/models.py:154
msgid "Include claims in id_token"
msgstr ""
#: authentik/providers/oauth2/models.py:153
#: authentik/providers/oauth2/models.py:156
msgid ""
"Include User claims from scopes in the id_token, for applications that don't "
"access the userinfo endpoint."
msgstr ""
#: authentik/providers/oauth2/models.py:162
#: authentik/providers/oauth2/models.py:165
msgid ""
"Access codes not valid on or after current time + this value (Format: "
"hours=1;minutes=2;seconds=3)."
msgstr ""
#: authentik/providers/oauth2/models.py:170
#: authentik/providers/oauth2/models.py:178
#: authentik/providers/oauth2/models.py:173
#: authentik/providers/oauth2/models.py:181
msgid ""
"Tokens not valid on or after current time + this value (Format: hours=1;"
"minutes=2;seconds=3)."
msgstr ""
#: authentik/providers/oauth2/models.py:187
#: authentik/providers/oauth2/models.py:190
msgid ""
"Configure what data should be used as unique User Identifier. For most "
"cases, the default should be fine."
msgstr ""
#: authentik/providers/oauth2/models.py:194
#: authentik/providers/oauth2/models.py:197
msgid "Configure how the issuer field of the ID Token should be filled."
msgstr ""
#: authentik/providers/oauth2/models.py:199
#: authentik/providers/oauth2/models.py:202
msgid "Signing Key"
msgstr ""
#: authentik/providers/oauth2/models.py:203
#: authentik/providers/oauth2/models.py:206
msgid ""
"Key used to sign the tokens. Only required when JWT Algorithm is set to "
"RS256."
msgstr ""
#: authentik/providers/oauth2/models.py:210
#: authentik/providers/oauth2/models.py:213
msgid ""
"Any JWT signed by the JWK of the selected source can be used to authenticate."
msgstr ""
#: authentik/providers/oauth2/models.py:279
#: authentik/providers/oauth2/models.py:286
msgid "OAuth2/OpenID Provider"
msgstr ""
#: authentik/providers/oauth2/models.py:280
#: authentik/providers/oauth2/models.py:287
msgid "OAuth2/OpenID Providers"
msgstr ""
#: authentik/providers/oauth2/models.py:289
#: authentik/providers/oauth2/models.py:421
#: authentik/providers/oauth2/models.py:296
#: authentik/providers/oauth2/models.py:428
msgid "Scopes"
msgstr ""
#: authentik/providers/oauth2/models.py:308
#: authentik/providers/oauth2/models.py:315
msgid "Code"
msgstr ""
#: authentik/providers/oauth2/models.py:309
#: authentik/providers/oauth2/models.py:316
msgid "Nonce"
msgstr ""
#: authentik/providers/oauth2/models.py:310
#: authentik/providers/oauth2/models.py:317
msgid "Code Challenge"
msgstr ""
#: authentik/providers/oauth2/models.py:312
#: authentik/providers/oauth2/models.py:319
msgid "Code Challenge Method"
msgstr ""
#: authentik/providers/oauth2/models.py:332
#: authentik/providers/oauth2/models.py:339
msgid "Authorization Code"
msgstr ""
#: authentik/providers/oauth2/models.py:333
#: authentik/providers/oauth2/models.py:340
msgid "Authorization Codes"
msgstr ""
#: authentik/providers/oauth2/models.py:375
#: authentik/providers/oauth2/models.py:382
msgid "OAuth2 Access Token"
msgstr ""
#: authentik/providers/oauth2/models.py:376
#: authentik/providers/oauth2/models.py:383
msgid "OAuth2 Access Tokens"
msgstr ""
#: authentik/providers/oauth2/models.py:386
#: authentik/providers/oauth2/models.py:393
msgid "ID Token"
msgstr ""
#: authentik/providers/oauth2/models.py:405
#: authentik/providers/oauth2/models.py:412
msgid "OAuth2 Refresh Token"
msgstr ""
#: authentik/providers/oauth2/models.py:406
#: authentik/providers/oauth2/models.py:413
msgid "OAuth2 Refresh Tokens"
msgstr ""
#: authentik/providers/oauth2/models.py:433
#: authentik/providers/oauth2/models.py:440
msgid "Device Token"
msgstr ""
#: authentik/providers/oauth2/models.py:434
#: authentik/providers/oauth2/models.py:441
msgid "Device Tokens"
msgstr ""
@ -1495,19 +1502,19 @@ msgid ""
"enabled on a single LDAP source."
msgstr ""
#: authentik/sources/ldap/models.py:188
#: authentik/sources/ldap/models.py:190
msgid "LDAP Source"
msgstr ""
#: authentik/sources/ldap/models.py:189
#: authentik/sources/ldap/models.py:191
msgid "LDAP Sources"
msgstr ""
#: authentik/sources/ldap/models.py:211
#: authentik/sources/ldap/models.py:213
msgid "LDAP Property Mapping"
msgstr ""
#: authentik/sources/ldap/models.py:212
#: authentik/sources/ldap/models.py:214
msgid "LDAP Property Mappings"
msgstr ""

View File

@ -30,7 +30,7 @@ import PFDrawer from "@patternfly/patternfly/components/Drawer/drawer.css";
import PFPage from "@patternfly/patternfly/components/Page/page.css";
import PFBase from "@patternfly/patternfly/patternfly-base.css";
import { AdminApi, SessionUser, Version } from "@goauthentik/api";
import { AdminApi, SessionUser, UiThemeEnum, Version } from "@goauthentik/api";
autoDetectLanguage();
@ -116,7 +116,11 @@ export class AdminInterface extends Interface {
render(): TemplateResult {
return html` <div class="pf-c-page">
<ak-sidebar
class="pf-c-page__sidebar ${this.sidebarOpen ? "pf-m-expanded" : "pf-m-collapsed"}"
class="pf-c-page__sidebar ${this.sidebarOpen
? "pf-m-expanded"
: "pf-m-collapsed"} ${this.activeTheme === UiThemeEnum.Light
? "pf-m-light"
: ""}"
>
${this.renderSidebarItems()}
</ak-sidebar>
@ -203,18 +207,18 @@ export class AdminInterface extends Interface {
</ak-sidebar-item>
<ak-sidebar-item>
<span slot="label">${msg("Applications")}</span>
<ak-sidebar-item
path="/core/applications"
.activeWhen=${[`^/core/applications/(?<slug>${SLUG_REGEX})$`]}
>
<span slot="label">${msg("Applications")}</span>
</ak-sidebar-item>
<ak-sidebar-item
path="/core/providers"
.activeWhen=${[`^/core/providers/(?<id>${ID_REGEX})$`]}
>
<span slot="label">${msg("Providers")}</span>
</ak-sidebar-item>
<ak-sidebar-item
path="/core/applications"
.activeWhen=${[`^/core/applications/(?<slug>${SLUG_REGEX})$`]}
>
<span slot="label">${msg("Applications")}</span>
</ak-sidebar-item>
<ak-sidebar-item path="/outpost/outposts">
<span slot="label">${msg("Outposts")}</span>
</ak-sidebar-item>

View File

@ -160,6 +160,7 @@ export class AKElement extends LitElement {
root.adoptedStyleSheets = root.adoptedStyleSheets.filter((v) => v !== oldStylesheet);
}
this._activeTheme = theme;
this.requestUpdate();
}
disconnectedCallback() {

View File

@ -9,6 +9,8 @@ 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";
@customElement("ak-sidebar")
export class Sidebar extends AKElement {
static get styles(): CSSResult[] {
@ -25,6 +27,9 @@ export class Sidebar extends AKElement {
.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);
@ -61,7 +66,10 @@ export class Sidebar extends AKElement {
}
render(): TemplateResult {
return html`<nav class="pf-c-nav" aria-label="Global">
return html`<nav
class="pf-c-nav ${this.activeTheme === UiThemeEnum.Light ? "pf-m-light" : ""}"
aria-label="Global"
>
<ak-sidebar-brand></ak-sidebar-brand>
<ul class="pf-c-nav__list">
<slot></slot>

View File

@ -5735,6 +5735,12 @@ Bindings to groups/users are checked against the user of the event.</source>
</trans-unit>
<trans-unit id="s000ee3e634868b3c">
<source>TLS Client authentication certificate</source>
</trans-unit>
<trans-unit id="s5da52af9b083c29a">
<source>Model</source>
</trans-unit>
<trans-unit id="s3ba9b8aeb686d9f7">
<source>Match events created by selected model. When left empty, all models are matched.</source>
</trans-unit>
</body>
</file>

View File

@ -6051,6 +6051,12 @@ Bindings to groups/users are checked against the user of the event.</source>
</trans-unit>
<trans-unit id="s000ee3e634868b3c">
<source>TLS Client authentication certificate</source>
</trans-unit>
<trans-unit id="s5da52af9b083c29a">
<source>Model</source>
</trans-unit>
<trans-unit id="s3ba9b8aeb686d9f7">
<source>Match events created by selected model. When left empty, all models are matched.</source>
</trans-unit>
</body>
</file>

View File

@ -5643,6 +5643,12 @@ Bindings to groups/users are checked against the user of the event.</source>
</trans-unit>
<trans-unit id="s000ee3e634868b3c">
<source>TLS Client authentication certificate</source>
</trans-unit>
<trans-unit id="s5da52af9b083c29a">
<source>Model</source>
</trans-unit>
<trans-unit id="s3ba9b8aeb686d9f7">
<source>Match events created by selected model. When left empty, all models are matched.</source>
</trans-unit>
</body>
</file>

View File

@ -5750,6 +5750,12 @@ Bindings to groups/users are checked against the user of the event.</source>
</trans-unit>
<trans-unit id="s000ee3e634868b3c">
<source>TLS Client authentication certificate</source>
</trans-unit>
<trans-unit id="s5da52af9b083c29a">
<source>Model</source>
</trans-unit>
<trans-unit id="s3ba9b8aeb686d9f7">
<source>Match events created by selected model. When left empty, all models are matched.</source>
</trans-unit>
</body>
</file>

View File

@ -5882,6 +5882,12 @@ Bindings to groups/users are checked against the user of the event.</source>
</trans-unit>
<trans-unit id="s000ee3e634868b3c">
<source>TLS Client authentication certificate</source>
</trans-unit>
<trans-unit id="s5da52af9b083c29a">
<source>Model</source>
</trans-unit>
<trans-unit id="s3ba9b8aeb686d9f7">
<source>Match events created by selected model. When left empty, all models are matched.</source>
</trans-unit>
</body>
</file>

View File

@ -5986,6 +5986,12 @@ Bindings to groups/users are checked against the user of the event.</source>
</trans-unit>
<trans-unit id="s000ee3e634868b3c">
<source>TLS Client authentication certificate</source>
</trans-unit>
<trans-unit id="s5da52af9b083c29a">
<source>Model</source>
</trans-unit>
<trans-unit id="s3ba9b8aeb686d9f7">
<source>Match events created by selected model. When left empty, all models are matched.</source>
</trans-unit>
</body>
</file>

View File

@ -5633,6 +5633,12 @@ Bindings to groups/users are checked against the user of the event.</source>
</trans-unit>
<trans-unit id="s000ee3e634868b3c">
<source>TLS Client authentication certificate</source>
</trans-unit>
<trans-unit id="s5da52af9b083c29a">
<source>Model</source>
</trans-unit>
<trans-unit id="s3ba9b8aeb686d9f7">
<source>Match events created by selected model. When left empty, all models are matched.</source>
</trans-unit>
</body>
</file>

View File

@ -7557,6 +7557,12 @@ Bindings to groups/users are checked against the user of the event.</source>
</trans-unit>
<trans-unit id="s000ee3e634868b3c">
<source>TLS Client authentication certificate</source>
</trans-unit>
<trans-unit id="s5da52af9b083c29a">
<source>Model</source>
</trans-unit>
<trans-unit id="s3ba9b8aeb686d9f7">
<source>Match events created by selected model. When left empty, all models are matched.</source>
</trans-unit>
</body>
</file>

View File

@ -5688,6 +5688,12 @@ Bindings to groups/users are checked against the user of the event.</source>
</trans-unit>
<trans-unit id="s000ee3e634868b3c">
<source>TLS Client authentication certificate</source>
</trans-unit>
<trans-unit id="s5da52af9b083c29a">
<source>Model</source>
</trans-unit>
<trans-unit id="s3ba9b8aeb686d9f7">
<source>Match events created by selected model. When left empty, all models are matched.</source>
</trans-unit>
</body>
</file>

View File

@ -5687,6 +5687,12 @@ Bindings to groups/users are checked against the user of the event.</source>
</trans-unit>
<trans-unit id="s000ee3e634868b3c">
<source>TLS Client authentication certificate</source>
</trans-unit>
<trans-unit id="s5da52af9b083c29a">
<source>Model</source>
</trans-unit>
<trans-unit id="s3ba9b8aeb686d9f7">
<source>Match events created by selected model. When left empty, all models are matched.</source>
</trans-unit>
</body>
</file>