From a92a0fb60a4658a84a6657493bb9eb3e5f7a9d6f Mon Sep 17 00:00:00 2001
From: Jens Langhammer
Date: Tue, 21 Sep 2021 11:19:26 +0200
Subject: [PATCH] web: migrate to lit 2
Signed-off-by: Jens Langhammer
---
internal/outpost/ak/api_ws.go | 1 +
web/package-lock.json | 23 +++++++++++++++++--
web/package.json | 3 +--
web/poly.ts | 1 +
web/src/elements/CodeMirror.ts | 13 +++--------
web/src/elements/Divider.ts | 3 ++-
web/src/elements/EmptyState.ts | 4 ++--
web/src/elements/Expand.ts | 3 ++-
web/src/elements/Label.ts | 3 ++-
web/src/elements/LoadingOverlay.ts | 11 ++-------
web/src/elements/PageHeader.ts | 11 ++-------
web/src/elements/Spinner.ts | 3 ++-
web/src/elements/Tabs.ts | 13 +++--------
web/src/elements/buttons/ActionButton.ts | 2 +-
web/src/elements/buttons/Dropdown.ts | 3 ++-
web/src/elements/buttons/ModalButton.ts | 11 ++-------
web/src/elements/buttons/SpinnerButton.ts | 11 ++-------
web/src/elements/buttons/TokenCopyButton.ts | 2 +-
web/src/elements/cards/AggregateCard.ts | 13 +++--------
.../elements/cards/AggregatePromiseCard.ts | 5 ++--
web/src/elements/charts/AdminLoginsChart.ts | 2 +-
.../charts/ApplicationAuthorizeChart.ts | 2 +-
web/src/elements/charts/Chart.ts | 3 ++-
web/src/elements/charts/UserChart.ts | 2 +-
web/src/elements/chips/Chip.ts | 3 ++-
web/src/elements/chips/ChipGroup.ts | 3 ++-
web/src/elements/events/ObjectChangelog.ts | 3 ++-
web/src/elements/events/UserEvents.ts | 3 ++-
web/src/elements/forms/ConfirmationForm.ts | 3 ++-
web/src/elements/forms/DeleteBulkForm.ts | 5 ++--
web/src/elements/forms/DeleteForm.ts | 5 ++--
web/src/elements/forms/Form.ts | 11 ++-------
web/src/elements/forms/FormElement.ts | 5 ++--
web/src/elements/forms/FormGroup.ts | 11 ++-------
.../elements/forms/HorizontalFormElement.ts | 5 ++--
web/src/elements/forms/ModalForm.ts | 3 ++-
web/src/elements/forms/ModelForm.ts | 3 ++-
web/src/elements/forms/ProxyForm.ts | 3 ++-
web/src/elements/messages/Message.ts | 3 ++-
web/src/elements/messages/MessageContainer.ts | 11 ++-------
web/src/elements/notifications/APIDrawer.ts | 11 ++-------
.../notifications/NotificationDrawer.ts | 11 ++-------
web/src/elements/oauth/UserCodeList.ts | 3 ++-
web/src/elements/oauth/UserRefreshList.ts | 3 ++-
web/src/elements/router/Route.ts | 2 +-
web/src/elements/router/RouteMatch.ts | 2 +-
web/src/elements/router/Router404.ts | 3 ++-
web/src/elements/router/RouterOutlet.ts | 11 ++-------
web/src/elements/sidebar/Sidebar.ts | 3 ++-
web/src/elements/sidebar/SidebarBrand.ts | 11 ++-------
web/src/elements/sidebar/SidebarItem.ts | 7 +++---
web/src/elements/sidebar/SidebarUser.ts | 7 +++---
web/src/elements/table/Table.ts | 5 ++--
web/src/elements/table/TableModal.ts | 5 ++--
web/src/elements/table/TablePage.ts | 6 ++---
web/src/elements/table/TablePagination.ts | 3 ++-
web/src/elements/table/TableSearch.ts | 5 ++--
web/src/elements/user/SessionList.ts | 3 ++-
web/src/elements/user/UserConsentList.ts | 3 ++-
web/src/flows/FlowExecutor.ts | 16 ++++---------
web/src/flows/FormStatic.ts | 13 +++--------
.../flows/access_denied/FlowAccessDenied.ts | 3 ++-
web/src/flows/sources/plex/PlexLoginInit.ts | 5 ++--
.../AuthenticatorDuoStage.ts | 5 ++--
.../AuthenticatorStaticStage.ts | 5 ++--
.../AuthenticatorTOTPStage.ts | 6 +++--
.../AuthenticatorValidateStage.ts | 3 ++-
.../AuthenticatorValidateStageCode.ts | 5 ++--
.../AuthenticatorValidateStageDuo.ts | 5 ++--
.../AuthenticatorValidateStageWebAuthn.ts | 3 ++-
.../WebAuthnAuthenticatorRegisterStage.ts | 3 ++-
.../stages/autosubmit/AutosubmitStage.ts | 3 ++-
web/src/flows/stages/base.ts | 3 ++-
web/src/flows/stages/captcha/CaptchaStage.ts | 5 ++--
web/src/flows/stages/consent/ConsentStage.ts | 5 ++--
web/src/flows/stages/dummy/DummyStage.ts | 3 ++-
web/src/flows/stages/email/EmailStage.ts | 3 ++-
.../identification/IdentificationStage.ts | 3 ++-
.../flows/stages/password/PasswordStage.ts | 5 ++--
web/src/flows/stages/prompt/PromptStage.ts | 5 ++--
web/src/interfaces/AdminInterface.ts | 13 +++--------
web/src/interfaces/UserInterface.ts | 13 +++--------
.../pages/admin-overview/AdminOverviewPage.ts | 3 ++-
.../admin-overview/TopApplicationsTable.ts | 3 ++-
.../admin-overview/cards/AdminStatusCard.ts | 4 ++--
.../admin-overview/cards/BackupStatusCard.ts | 3 ++-
.../admin-overview/cards/SystemStatusCard.ts | 3 ++-
.../admin-overview/cards/VersionStatusCard.ts | 3 ++-
.../admin-overview/cards/WorkerStatusCard.ts | 3 ++-
.../admin-overview/charts/FlowStatusChart.ts | 2 +-
.../charts/GroupCountStatusChart.ts | 2 +-
.../charts/LDAPSyncStatusChart.ts | 2 +-
.../charts/OutpostStatusChart.ts | 2 +-
.../charts/PolicyStatusChart.ts | 2 +-
.../charts/UserCountStatusChart.ts | 2 +-
.../ApplicationCheckAccessForm.ts | 6 ++---
web/src/pages/applications/ApplicationForm.ts | 9 ++++----
.../pages/applications/ApplicationListPage.ts | 3 ++-
.../pages/applications/ApplicationViewPage.ts | 5 ++--
.../pages/crypto/CertificateGenerateForm.ts | 4 ++--
.../pages/crypto/CertificateKeyPairForm.ts | 6 ++---
.../crypto/CertificateKeyPairListPage.ts | 3 ++-
web/src/pages/events/EventInfo.ts | 13 +++--------
web/src/pages/events/EventInfoPage.ts | 3 ++-
web/src/pages/events/EventListPage.ts | 3 ++-
web/src/pages/events/RuleForm.ts | 8 +++----
web/src/pages/events/RuleListPage.ts | 3 ++-
web/src/pages/events/TransportForm.ts | 8 +++----
web/src/pages/events/TransportListPage.ts | 3 ++-
web/src/pages/flows/BoundStagesList.ts | 7 +++---
web/src/pages/flows/FlowDiagram.ts | 3 ++-
web/src/pages/flows/FlowForm.ts | 8 +++----
web/src/pages/flows/FlowImportForm.ts | 4 ++--
web/src/pages/flows/FlowListPage.ts | 3 ++-
web/src/pages/flows/FlowViewPage.ts | 12 ++--------
web/src/pages/flows/StageBindingForm.ts | 9 ++++----
web/src/pages/groups/GroupForm.ts | 8 +++----
web/src/pages/groups/GroupListPage.ts | 3 ++-
web/src/pages/groups/MemberSelectModal.ts | 4 ++--
.../pages/outposts/OutpostDeploymentModal.ts | 5 ++--
web/src/pages/outposts/OutpostForm.ts | 9 ++++----
web/src/pages/outposts/OutpostHealth.ts | 3 ++-
web/src/pages/outposts/OutpostHealthSimple.ts | 3 ++-
web/src/pages/outposts/OutpostListPage.ts | 9 ++++----
.../outposts/ServiceConnectionDockerForm.ts | 8 +++----
.../ServiceConnectionKubernetesForm.ts | 6 ++---
.../outposts/ServiceConnectionListPage.ts | 8 +++----
web/src/pages/policies/BoundPoliciesList.ts | 7 +++---
web/src/pages/policies/PolicyBindingForm.ts | 10 ++++----
web/src/pages/policies/PolicyListPage.ts | 7 +++---
web/src/pages/policies/PolicyTestForm.ts | 6 ++---
.../pages/policies/dummy/DummyPolicyForm.ts | 6 ++---
.../event_matcher/EventMatcherPolicyForm.ts | 8 +++----
.../pages/policies/expiry/ExpiryPolicyForm.ts | 6 ++---
.../expression/ExpressionPolicyForm.ts | 6 ++---
.../policies/hibp/HaveIBeenPwnedPolicyForm.ts | 6 ++---
.../policies/password/PasswordPolicyForm.ts | 6 ++---
.../reputation/IPReputationListPage.ts | 3 ++-
.../reputation/ReputationPolicyForm.ts | 6 ++---
.../reputation/UserReputationListPage.ts | 3 ++-
.../PropertyMappingLDAPForm.ts | 6 ++---
.../PropertyMappingListPage.ts | 7 +++---
.../PropertyMappingNotification.ts | 6 ++---
.../PropertyMappingSAMLForm.ts | 6 ++---
.../PropertyMappingScopeForm.ts | 6 ++---
.../PropertyMappingTestForm.ts | 8 +++----
web/src/pages/providers/ProviderListPage.ts | 7 +++---
web/src/pages/providers/ProviderViewPage.ts | 5 ++--
.../providers/RelatedApplicationButton.ts | 3 ++-
.../pages/providers/ldap/LDAPProviderForm.ts | 8 +++----
.../providers/ldap/LDAPProviderViewPage.ts | 3 ++-
.../providers/oauth2/OAuth2ProviderForm.ts | 8 +++----
.../oauth2/OAuth2ProviderViewPage.ts | 3 ++-
.../providers/proxy/ProxyProviderForm.ts | 9 ++++----
.../providers/proxy/ProxyProviderViewPage.ts | 3 ++-
.../pages/providers/saml/SAMLProviderForm.ts | 8 +++----
.../providers/saml/SAMLProviderImportForm.ts | 6 ++---
.../providers/saml/SAMLProviderViewPage.ts | 7 +++---
web/src/pages/sources/SourceViewPage.ts | 5 ++--
web/src/pages/sources/SourcesListPage.ts | 7 +++---
web/src/pages/sources/ldap/LDAPSourceForm.ts | 8 +++----
.../pages/sources/ldap/LDAPSourceViewPage.ts | 5 ++--
.../pages/sources/oauth/OAuthSourceForm.ts | 8 +++----
.../sources/oauth/OAuthSourceViewPage.ts | 3 ++-
web/src/pages/sources/plex/PlexSourceForm.ts | 8 +++----
.../pages/sources/plex/PlexSourceViewPage.ts | 3 ++-
web/src/pages/sources/saml/SAMLSourceForm.ts | 8 +++----
.../pages/sources/saml/SAMLSourceViewPage.ts | 7 +++---
web/src/pages/stages/StageListPage.ts | 7 +++---
.../AuthenticatorDuoStageForm.ts | 8 +++----
.../AuthenticatorStaticStageForm.ts | 8 +++----
.../AuthenticatorTOTPStageForm.ts | 8 +++----
.../AuthenticatorValidateStageForm.ts | 8 +++----
.../AuthenticateWebAuthnStageForm.ts | 6 ++---
.../pages/stages/captcha/CaptchaStageForm.ts | 6 ++---
.../pages/stages/consent/ConsentStageForm.ts | 6 ++---
web/src/pages/stages/deny/DenyStageForm.ts | 6 ++---
web/src/pages/stages/dummy/DummyStageForm.ts | 6 ++---
web/src/pages/stages/email/EmailStageForm.ts | 8 +++----
.../identification/IdentificationStageForm.ts | 8 +++----
.../pages/stages/invitation/InvitationForm.ts | 4 ++--
.../stages/invitation/InvitationListLink.ts | 5 ++--
.../stages/invitation/InvitationListPage.ts | 3 ++-
.../stages/invitation/InvitationStageForm.ts | 6 ++---
.../stages/password/PasswordStageForm.ts | 8 +++----
web/src/pages/stages/prompt/PromptForm.ts | 6 ++---
web/src/pages/stages/prompt/PromptListPage.ts | 3 ++-
.../pages/stages/prompt/PromptStageForm.ts | 8 +++----
.../stages/user_delete/UserDeleteStageForm.ts | 6 ++---
.../stages/user_login/UserLoginStageForm.ts | 4 ++--
.../stages/user_logout/UserLogoutStageForm.ts | 6 ++---
.../stages/user_write/UserWriteStageForm.ts | 8 +++----
.../pages/system-tasks/SystemTaskListPage.ts | 3 ++-
web/src/pages/tenants/TenantForm.ts | 6 ++---
web/src/pages/tenants/TenantListPage.ts | 3 ++-
web/src/pages/tokens/TokenForm.ts | 6 ++---
web/src/pages/tokens/TokenListPage.ts | 3 ++-
web/src/pages/users/GroupSelectModal.ts | 4 ++--
web/src/pages/users/ServiceAccountForm.ts | 6 ++---
web/src/pages/users/UserActiveForm.ts | 3 ++-
web/src/pages/users/UserForm.ts | 8 +++----
web/src/pages/users/UserListPage.ts | 5 ++--
web/src/pages/users/UserResetEmailForm.ts | 6 ++---
web/src/pages/users/UserViewPage.ts | 3 ++-
web/src/routesAdmin.ts | 2 +-
web/src/routesUser.ts | 2 +-
web/src/user/LibraryApplication.ts | 17 ++++----------
web/src/user/LibraryPage.ts | 13 +++--------
.../user/user-settings/BaseUserSettings.ts | 3 ++-
web/src/user/user-settings/UserSelfForm.ts | 7 +++---
.../user/user-settings/UserSettingsPage.ts | 5 ++--
.../user-settings/sources/SourceSettings.ts | 5 ++--
.../sources/SourceSettingsOAuth.ts | 7 +++---
.../sources/SourceSettingsPlex.ts | 5 ++--
.../user-settings/stages/StageSettings.ts | 5 ++--
.../stages/UserSettingsAuthenticatorDuo.ts | 5 ++--
.../stages/UserSettingsAuthenticatorStatic.ts | 5 ++--
.../stages/UserSettingsAuthenticatorTOTP.ts | 5 ++--
.../UserSettingsAuthenticatorWebAuthn.ts | 7 +++---
.../stages/UserSettingsPassword.ts | 5 ++--
.../user-settings/tokens/UserTokenForm.ts | 6 ++---
.../user-settings/tokens/UserTokenList.ts | 3 ++-
web/src/utils.ts | 2 +-
223 files changed, 620 insertions(+), 636 deletions(-)
diff --git a/internal/outpost/ak/api_ws.go b/internal/outpost/ak/api_ws.go
index 082e58d7b..fbd9295a5 100644
--- a/internal/outpost/ak/api_ws.go
+++ b/internal/outpost/ak/api_ws.go
@@ -128,6 +128,7 @@ func (ac *APIController) startWSHealth() {
if err != nil {
ac.logger.WithField("loop", "ws-health").WithError(err).Warning("ws write error, reconnecting")
ac.wsConn.CloseAndReconnect()
+ time.Sleep(time.Second * 5)
continue
} else {
ConnectionStatus.With(prometheus.Labels{
diff --git a/web/package-lock.json b/web/package-lock.json
index e5fe21475..4101dbc3b 100644
--- a/web/package-lock.json
+++ b/web/package-lock.json
@@ -46,8 +46,7 @@
"eslint-plugin-lit": "^1.5.1",
"flowchart.js": "^1.15.0",
"fuse.js": "^6.4.6",
- "lit-element": "^3.0.0",
- "lit-html": "^2.0.0",
+ "lit": "^2.0.0",
"moment": "^2.29.1",
"prettier": "^2.4.1",
"rapidoc": "^9.1.2",
@@ -5494,6 +5493,16 @@
"resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz",
"integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA="
},
+ "node_modules/lit": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/lit/-/lit-2.0.0.tgz",
+ "integrity": "sha512-pqi5O/wVzQ9Bn4ERRoYQlt1EAUWyY5Wv888vzpoArbtChc+zfUv1XohRqSdtQZYCogl0eHKd+MQwymg2XJfECg==",
+ "dependencies": {
+ "@lit/reactive-element": "^1.0.0",
+ "lit-element": "^3.0.0",
+ "lit-html": "^2.0.0"
+ }
+ },
"node_modules/lit-analyzer": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/lit-analyzer/-/lit-analyzer-1.2.1.tgz",
@@ -12483,6 +12492,16 @@
"resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz",
"integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA="
},
+ "lit": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/lit/-/lit-2.0.0.tgz",
+ "integrity": "sha512-pqi5O/wVzQ9Bn4ERRoYQlt1EAUWyY5Wv888vzpoArbtChc+zfUv1XohRqSdtQZYCogl0eHKd+MQwymg2XJfECg==",
+ "requires": {
+ "@lit/reactive-element": "^1.0.0",
+ "lit-element": "^3.0.0",
+ "lit-html": "^2.0.0"
+ }
+ },
"lit-analyzer": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/lit-analyzer/-/lit-analyzer-1.2.1.tgz",
diff --git a/web/package.json b/web/package.json
index 40975dcb7..b443ed9ad 100644
--- a/web/package.json
+++ b/web/package.json
@@ -78,8 +78,7 @@
"eslint-plugin-lit": "^1.5.1",
"flowchart.js": "^1.15.0",
"fuse.js": "^6.4.6",
- "lit-element": "^3.0.0",
- "lit-html": "^2.0.0",
+ "lit": "^2.0.0",
"moment": "^2.29.1",
"prettier": "^2.4.1",
"rapidoc": "^9.1.2",
diff --git a/web/poly.ts b/web/poly.ts
index 9fdc4a56d..43009f976 100644
--- a/web/poly.ts
+++ b/web/poly.ts
@@ -2,3 +2,4 @@
window["polymerSkipLoadingFontRoboto"] = true;
import "construct-style-sheets-polyfill";
import "@webcomponents/webcomponentsjs";
+import "lit/polyfill-support";
diff --git a/web/src/elements/CodeMirror.ts b/web/src/elements/CodeMirror.ts
index 657d50462..18d819374 100644
--- a/web/src/elements/CodeMirror.ts
+++ b/web/src/elements/CodeMirror.ts
@@ -1,12 +1,5 @@
-import {
- css,
- CSSResult,
- customElement,
- html,
- LitElement,
- property,
- TemplateResult,
-} from "lit-element";
+import { css, CSSResult, html, LitElement, TemplateResult } from "lit";
+import { customElement, property } from "lit/decorators";
import CodeMirror from "codemirror";
import "codemirror/addon/display/autorefresh";
@@ -22,7 +15,7 @@ import CodeMirrorStyle from "codemirror/lib/codemirror.css";
import CodeMirrorTheme from "codemirror/theme/monokai.css";
import CodeMirrorDialogStyle from "codemirror/addon/dialog/dialog.css";
import CodeMirrorShowHintStyle from "codemirror/addon/hint/show-hint.css";
-import { ifDefined } from "lit-html/directives/if-defined";
+import { ifDefined } from "lit/directives/if-defined";
import YAML from "yaml";
@customElement("ak-codemirror")
diff --git a/web/src/elements/Divider.ts b/web/src/elements/Divider.ts
index a3451d82f..f6ee702c9 100644
--- a/web/src/elements/Divider.ts
+++ b/web/src/elements/Divider.ts
@@ -1,6 +1,7 @@
-import { css, CSSResult, customElement, html, LitElement, TemplateResult } from "lit-element";
+import { css, CSSResult, html, LitElement, TemplateResult } from "lit";
import PFBase from "@patternfly/patternfly/patternfly-base.css";
import AKGlobal from "../authentik.css";
+import { customElement } from "lit/decorators";
@customElement("ak-divider")
export class Divider extends LitElement {
diff --git a/web/src/elements/EmptyState.ts b/web/src/elements/EmptyState.ts
index 03eaf5f32..c8239f82a 100644
--- a/web/src/elements/EmptyState.ts
+++ b/web/src/elements/EmptyState.ts
@@ -1,9 +1,9 @@
-import { CSSResult, customElement, html, LitElement, property, TemplateResult } from "lit-element";
+import { CSSResult, html, LitElement, TemplateResult } from "lit";
import PFEmptyState from "@patternfly/patternfly/components/EmptyState/empty-state.css";
import PFBase from "@patternfly/patternfly/patternfly-base.css";
import PFTitle from "@patternfly/patternfly/components/Title/title.css";
import AKGlobal from "../authentik.css";
-
+import { customElement, property } from "lit/decorators";
import { PFSize } from "./Spinner";
@customElement("ak-empty-state")
diff --git a/web/src/elements/Expand.ts b/web/src/elements/Expand.ts
index 8d1c91af1..f26412bb2 100644
--- a/web/src/elements/Expand.ts
+++ b/web/src/elements/Expand.ts
@@ -1,6 +1,7 @@
import { t } from "@lingui/macro";
-import { CSSResult, customElement, html, LitElement, property, TemplateResult } from "lit-element";
+import { CSSResult, html, LitElement, TemplateResult } from "lit";
import PFExpandableSection from "../../node_modules/@patternfly/patternfly/components/ExpandableSection/expandable-section.css";
+import { customElement, property } from "lit/decorators";
@customElement("ak-expand")
export class Expand extends LitElement {
diff --git a/web/src/elements/Label.ts b/web/src/elements/Label.ts
index 87cc4c3bc..7adccdddc 100644
--- a/web/src/elements/Label.ts
+++ b/web/src/elements/Label.ts
@@ -1,7 +1,8 @@
-import { CSSResult, customElement, html, LitElement, property, TemplateResult } from "lit-element";
+import { CSSResult, html, LitElement, TemplateResult } from "lit";
import PFBase from "@patternfly/patternfly/patternfly-base.css";
import PFLabel from "@patternfly/patternfly/components/Label/label.css";
import AKGlobal from "../authentik.css";
+import { customElement, property } from "lit/decorators";
export enum PFColor {
Green = "pf-m-green",
diff --git a/web/src/elements/LoadingOverlay.ts b/web/src/elements/LoadingOverlay.ts
index b757e8ca7..1f88d86ab 100644
--- a/web/src/elements/LoadingOverlay.ts
+++ b/web/src/elements/LoadingOverlay.ts
@@ -1,14 +1,7 @@
-import {
- css,
- CSSResult,
- customElement,
- html,
- LitElement,
- property,
- TemplateResult,
-} from "lit-element";
+import { css, CSSResult, html, LitElement, TemplateResult } from "lit";
import PFBase from "@patternfly/patternfly/patternfly-base.css";
import { PFSize } from "./Spinner";
+import { customElement, property } from "lit/decorators";
@customElement("ak-loading-overlay")
export class LoadingOverlay extends LitElement {
diff --git a/web/src/elements/PageHeader.ts b/web/src/elements/PageHeader.ts
index b3c433fb8..4017b9160 100644
--- a/web/src/elements/PageHeader.ts
+++ b/web/src/elements/PageHeader.ts
@@ -1,12 +1,5 @@
-import {
- css,
- CSSResult,
- customElement,
- html,
- LitElement,
- property,
- TemplateResult,
-} from "lit-element";
+import { css, CSSResult, html, LitElement, TemplateResult } from "lit";
+import { customElement, property } from "lit/decorators";
import PFPage from "@patternfly/patternfly/components/Page/page.css";
import PFContent from "@patternfly/patternfly/components/Content/content.css";
import AKGlobal from "../authentik.css";
diff --git a/web/src/elements/Spinner.ts b/web/src/elements/Spinner.ts
index 2443d2dcb..78a26d850 100644
--- a/web/src/elements/Spinner.ts
+++ b/web/src/elements/Spinner.ts
@@ -1,6 +1,7 @@
import { t } from "@lingui/macro";
-import { CSSResult, customElement, html, LitElement, property, TemplateResult } from "lit-element";
+import { CSSResult, html, LitElement, TemplateResult } from "lit";
import PFSpinner from "@patternfly/patternfly/components/Spinner/spinner.css";
+import { customElement, property } from "lit/decorators";
export enum PFSize {
Small = "pf-m-sm",
diff --git a/web/src/elements/Tabs.ts b/web/src/elements/Tabs.ts
index 56a0b57ad..bc6fecde7 100644
--- a/web/src/elements/Tabs.ts
+++ b/web/src/elements/Tabs.ts
@@ -1,13 +1,6 @@
-import {
- LitElement,
- html,
- customElement,
- property,
- CSSResult,
- TemplateResult,
- css,
-} from "lit-element";
-import { ifDefined } from "lit-html/directives/if-defined";
+import { LitElement, html, CSSResult, TemplateResult, css } from "lit";
+import { customElement, property } from "lit/decorators";
+import { ifDefined } from "lit/directives/if-defined";
import PFTabs from "@patternfly/patternfly/components/Tabs/tabs.css";
import PFGlobal from "@patternfly/patternfly/patternfly-base.css";
import AKGlobal from "../authentik.css";
diff --git a/web/src/elements/buttons/ActionButton.ts b/web/src/elements/buttons/ActionButton.ts
index ef87760e5..0446fccde 100644
--- a/web/src/elements/buttons/ActionButton.ts
+++ b/web/src/elements/buttons/ActionButton.ts
@@ -1,4 +1,4 @@
-import { customElement, property } from "lit-element";
+import { customElement, property } from "lit/decorators";
import { SpinnerButton } from "./SpinnerButton";
import { showMessage } from "../messages/MessageContainer";
import { MessageLevel } from "../messages/Message";
diff --git a/web/src/elements/buttons/Dropdown.ts b/web/src/elements/buttons/Dropdown.ts
index 3a7c767ed..ac9da36f7 100644
--- a/web/src/elements/buttons/Dropdown.ts
+++ b/web/src/elements/buttons/Dropdown.ts
@@ -1,4 +1,5 @@
-import { customElement, html, LitElement, TemplateResult } from "lit-element";
+import { html, LitElement, TemplateResult } from "lit";
+import { customElement } from "lit/decorators";
@customElement("ak-dropdown")
export class DropdownButton extends LitElement {
diff --git a/web/src/elements/buttons/ModalButton.ts b/web/src/elements/buttons/ModalButton.ts
index a8bd42f39..74173bfbf 100644
--- a/web/src/elements/buttons/ModalButton.ts
+++ b/web/src/elements/buttons/ModalButton.ts
@@ -1,12 +1,5 @@
-import {
- css,
- CSSResult,
- customElement,
- html,
- LitElement,
- property,
- TemplateResult,
-} from "lit-element";
+import { css, CSSResult, html, LitElement, TemplateResult } from "lit";
+import { customElement, property } from "lit/decorators";
import PFBase from "@patternfly/patternfly/patternfly-base.css";
import PFButton from "@patternfly/patternfly/components/Button/button.css";
import PFModalBox from "@patternfly/patternfly/components/ModalBox/modal-box.css";
diff --git a/web/src/elements/buttons/SpinnerButton.ts b/web/src/elements/buttons/SpinnerButton.ts
index 27bbc0759..20a88494e 100644
--- a/web/src/elements/buttons/SpinnerButton.ts
+++ b/web/src/elements/buttons/SpinnerButton.ts
@@ -1,12 +1,5 @@
-import {
- css,
- CSSResult,
- customElement,
- html,
- LitElement,
- property,
- TemplateResult,
-} from "lit-element";
+import { css, CSSResult, html, LitElement, TemplateResult } from "lit";
+import { customElement, property } from "lit/decorators";
import PFBase from "@patternfly/patternfly/patternfly-base.css";
import PFButton from "@patternfly/patternfly/components/Button/button.css";
import PFSpinner from "@patternfly/patternfly/components/Spinner/spinner.css";
diff --git a/web/src/elements/buttons/TokenCopyButton.ts b/web/src/elements/buttons/TokenCopyButton.ts
index 348caa748..9914a1cfc 100644
--- a/web/src/elements/buttons/TokenCopyButton.ts
+++ b/web/src/elements/buttons/TokenCopyButton.ts
@@ -1,4 +1,4 @@
-import { customElement, property } from "lit-element";
+import { customElement, property } from "lit/decorators";
import { CoreApi } from "@goauthentik/api";
import { ERROR_CLASS, SECONDARY_CLASS, SUCCESS_CLASS } from "../../constants";
import { DEFAULT_CONFIG } from "../../api/Config";
diff --git a/web/src/elements/cards/AggregateCard.ts b/web/src/elements/cards/AggregateCard.ts
index dd38c4074..ebc73b90c 100644
--- a/web/src/elements/cards/AggregateCard.ts
+++ b/web/src/elements/cards/AggregateCard.ts
@@ -1,13 +1,6 @@
-import {
- css,
- CSSResult,
- customElement,
- html,
- LitElement,
- property,
- TemplateResult,
-} from "lit-element";
-import { ifDefined } from "lit-html/directives/if-defined";
+import { css, CSSResult, html, LitElement, TemplateResult } from "lit";
+import { customElement, property } from "lit/decorators";
+import { ifDefined } from "lit/directives/if-defined";
import PFBase from "@patternfly/patternfly/patternfly-base.css";
import PFCard from "@patternfly/patternfly/components/Card/card.css";
import PFFlex from "@patternfly/patternfly/layouts/Flex/flex.css";
diff --git a/web/src/elements/cards/AggregatePromiseCard.ts b/web/src/elements/cards/AggregatePromiseCard.ts
index 4ac796b1c..273d1c57b 100644
--- a/web/src/elements/cards/AggregatePromiseCard.ts
+++ b/web/src/elements/cards/AggregatePromiseCard.ts
@@ -1,5 +1,6 @@
-import { customElement, html, property, TemplateResult } from "lit-element";
-import { until } from "lit-html/directives/until";
+import { html, TemplateResult } from "lit";
+import { customElement, property } from "lit/decorators";
+import { until } from "lit/directives/until";
import { AggregateCard } from "./AggregateCard";
import "../Spinner";
import { PFSize } from "../Spinner";
diff --git a/web/src/elements/charts/AdminLoginsChart.ts b/web/src/elements/charts/AdminLoginsChart.ts
index 34f2d7a91..13f6026d1 100644
--- a/web/src/elements/charts/AdminLoginsChart.ts
+++ b/web/src/elements/charts/AdminLoginsChart.ts
@@ -1,4 +1,4 @@
-import { customElement } from "lit-element";
+import { customElement } from "lit/decorators";
import { ChartData } from "chart.js";
import { AdminApi, LoginMetrics } from "@goauthentik/api";
import { AKChart } from "./Chart";
diff --git a/web/src/elements/charts/ApplicationAuthorizeChart.ts b/web/src/elements/charts/ApplicationAuthorizeChart.ts
index 55d7d2ce2..7fd966918 100644
--- a/web/src/elements/charts/ApplicationAuthorizeChart.ts
+++ b/web/src/elements/charts/ApplicationAuthorizeChart.ts
@@ -1,4 +1,4 @@
-import { customElement, property } from "lit-element";
+import { customElement, property } from "lit/decorators";
import { Coordinate, CoreApi } from "@goauthentik/api";
import { DEFAULT_CONFIG } from "../../api/Config";
import { AKChart } from "./Chart";
diff --git a/web/src/elements/charts/Chart.ts b/web/src/elements/charts/Chart.ts
index cd6c0635b..13074c7aa 100644
--- a/web/src/elements/charts/Chart.ts
+++ b/web/src/elements/charts/Chart.ts
@@ -1,4 +1,5 @@
-import { css, CSSResult, html, LitElement, property, TemplateResult } from "lit-element";
+import { css, CSSResult, html, LitElement, TemplateResult } from "lit";
+import { property } from "lit/decorators";
import { Chart, Plugin, Tick, ChartConfiguration, ChartData, ChartOptions } from "chart.js";
import { Legend, Tooltip } from "chart.js";
import { DoughnutController, LineController, BarController } from "chart.js";
diff --git a/web/src/elements/charts/UserChart.ts b/web/src/elements/charts/UserChart.ts
index d732cd3b6..f68b6cd4b 100644
--- a/web/src/elements/charts/UserChart.ts
+++ b/web/src/elements/charts/UserChart.ts
@@ -1,4 +1,4 @@
-import { customElement, property } from "lit-element";
+import { customElement, property } from "lit/decorators";
import { CoreApi, UserMetrics } from "@goauthentik/api";
import { AKChart } from "./Chart";
import { DEFAULT_CONFIG } from "../../api/Config";
diff --git a/web/src/elements/chips/Chip.ts b/web/src/elements/chips/Chip.ts
index 8a59418ee..4f3d350f9 100644
--- a/web/src/elements/chips/Chip.ts
+++ b/web/src/elements/chips/Chip.ts
@@ -1,4 +1,5 @@
-import { CSSResult, customElement, html, LitElement, property, TemplateResult } from "lit-element";
+import { CSSResult, html, LitElement, TemplateResult } from "lit";
+import { customElement, property } from "lit/decorators";
import PFBase from "@patternfly/patternfly/patternfly-base.css";
import PFButton from "@patternfly/patternfly/components/Button/button.css";
diff --git a/web/src/elements/chips/ChipGroup.ts b/web/src/elements/chips/ChipGroup.ts
index a320458c1..7ab30c936 100644
--- a/web/src/elements/chips/ChipGroup.ts
+++ b/web/src/elements/chips/ChipGroup.ts
@@ -1,4 +1,5 @@
-import { CSSResult, customElement, html, LitElement, TemplateResult } from "lit-element";
+import { CSSResult, html, LitElement, TemplateResult } from "lit";
+import { customElement } from "lit/decorators";
import PFBase from "@patternfly/patternfly/patternfly-base.css";
import PFChip from "@patternfly/patternfly/components/Chip/chip.css";
diff --git a/web/src/elements/events/ObjectChangelog.ts b/web/src/elements/events/ObjectChangelog.ts
index a05c98ba9..8101522d1 100644
--- a/web/src/elements/events/ObjectChangelog.ts
+++ b/web/src/elements/events/ObjectChangelog.ts
@@ -1,5 +1,6 @@
import { t } from "@lingui/macro";
-import { customElement, html, property, TemplateResult } from "lit-element";
+import { html, TemplateResult } from "lit";
+import { customElement, property } from "lit/decorators";
import { AKResponse } from "../../api/Client";
import { Table, TableColumn } from "../table/Table";
import { Event, EventsApi } from "@goauthentik/api";
diff --git a/web/src/elements/events/UserEvents.ts b/web/src/elements/events/UserEvents.ts
index a10c6fb4b..6595e2184 100644
--- a/web/src/elements/events/UserEvents.ts
+++ b/web/src/elements/events/UserEvents.ts
@@ -1,5 +1,6 @@
import { t } from "@lingui/macro";
-import { customElement, html, property, TemplateResult } from "lit-element";
+import { html, TemplateResult } from "lit";
+import { customElement, property } from "lit/decorators";
import { AKResponse } from "../../api/Client";
import { Table, TableColumn } from "../table/Table";
import { Event, EventsApi } from "@goauthentik/api";
diff --git a/web/src/elements/forms/ConfirmationForm.ts b/web/src/elements/forms/ConfirmationForm.ts
index 7bc4620ee..ece7525e6 100644
--- a/web/src/elements/forms/ConfirmationForm.ts
+++ b/web/src/elements/forms/ConfirmationForm.ts
@@ -1,5 +1,6 @@
import { t } from "@lingui/macro";
-import { customElement, html, property, TemplateResult } from "lit-element";
+import { html, TemplateResult } from "lit";
+import { customElement, property } from "lit/decorators";
import { EVENT_REFRESH } from "../../constants";
import { ModalButton } from "../buttons/ModalButton";
import "../buttons/SpinnerButton";
diff --git a/web/src/elements/forms/DeleteBulkForm.ts b/web/src/elements/forms/DeleteBulkForm.ts
index 2ae8cd816..146927204 100644
--- a/web/src/elements/forms/DeleteBulkForm.ts
+++ b/web/src/elements/forms/DeleteBulkForm.ts
@@ -1,5 +1,6 @@
import { t } from "@lingui/macro";
-import { CSSResult, customElement, html, property, TemplateResult } from "lit-element";
+import { CSSResult, html, TemplateResult } from "lit";
+import { customElement, property } from "lit/decorators";
import { EVENT_REFRESH } from "../../constants";
import { ModalButton } from "../buttons/ModalButton";
import { MessageLevel } from "../messages/Message";
@@ -7,7 +8,7 @@ import { showMessage } from "../messages/MessageContainer";
import "../buttons/SpinnerButton";
import { UsedBy, UsedByActionEnum } from "@goauthentik/api";
import PFList from "@patternfly/patternfly/components/List/list.css";
-import { until } from "lit-html/directives/until";
+import { until } from "lit/directives/until";
import { Table, TableColumn } from "../table/Table";
import { AKResponse } from "../../api/Client";
import { PFSize } from "../Spinner";
diff --git a/web/src/elements/forms/DeleteForm.ts b/web/src/elements/forms/DeleteForm.ts
index cd6bad53d..ecb3ea5ad 100644
--- a/web/src/elements/forms/DeleteForm.ts
+++ b/web/src/elements/forms/DeleteForm.ts
@@ -1,5 +1,6 @@
import { t } from "@lingui/macro";
-import { CSSResult, customElement, html, property, TemplateResult } from "lit-element";
+import { CSSResult, html, TemplateResult } from "lit";
+import { customElement, property } from "lit/decorators";
import { EVENT_REFRESH } from "../../constants";
import { ModalButton } from "../buttons/ModalButton";
import { MessageLevel } from "../messages/Message";
@@ -7,7 +8,7 @@ import { showMessage } from "../messages/MessageContainer";
import "../buttons/SpinnerButton";
import { UsedBy, UsedByActionEnum } from "@goauthentik/api";
import PFList from "@patternfly/patternfly/components/List/list.css";
-import { until } from "lit-html/directives/until";
+import { until } from "lit/directives/until";
@customElement("ak-forms-delete")
export class DeleteForm extends ModalButton {
diff --git a/web/src/elements/forms/Form.ts b/web/src/elements/forms/Form.ts
index 4ec712520..4d52ec87b 100644
--- a/web/src/elements/forms/Form.ts
+++ b/web/src/elements/forms/Form.ts
@@ -2,15 +2,8 @@ import "@polymer/paper-input/paper-input";
import "@polymer/iron-form/iron-form";
import { PaperInputElement } from "@polymer/paper-input/paper-input";
import { showMessage } from "../../elements/messages/MessageContainer";
-import {
- css,
- CSSResult,
- customElement,
- html,
- LitElement,
- property,
- TemplateResult,
-} from "lit-element";
+import { css, CSSResult, html, LitElement, TemplateResult } from "lit";
+import { customElement, property } from "lit/decorators";
import PFBase from "@patternfly/patternfly/patternfly-base.css";
import PFCard from "@patternfly/patternfly/components/Card/card.css";
import PFButton from "@patternfly/patternfly/components/Button/button.css";
diff --git a/web/src/elements/forms/FormElement.ts b/web/src/elements/forms/FormElement.ts
index a906a6835..99ff428cd 100644
--- a/web/src/elements/forms/FormElement.ts
+++ b/web/src/elements/forms/FormElement.ts
@@ -1,5 +1,6 @@
-import { customElement, LitElement, CSSResult, property, css } from "lit-element";
-import { TemplateResult, html } from "lit-html";
+import { LitElement, CSSResult, css } from "lit";
+import { customElement, property } from "lit/decorators";
+import { TemplateResult, html } from "lit";
import PFForm from "@patternfly/patternfly/components/Form/form.css";
import PFFormControl from "@patternfly/patternfly/components/FormControl/form-control.css";
import { ErrorDetail } from "@goauthentik/api";
diff --git a/web/src/elements/forms/FormGroup.ts b/web/src/elements/forms/FormGroup.ts
index c58f90ef8..87bf214bf 100644
--- a/web/src/elements/forms/FormGroup.ts
+++ b/web/src/elements/forms/FormGroup.ts
@@ -1,12 +1,5 @@
-import {
- css,
- CSSResult,
- customElement,
- html,
- LitElement,
- property,
- TemplateResult,
-} from "lit-element";
+import { css, CSSResult, html, LitElement, TemplateResult } from "lit";
+import { customElement, property } from "lit/decorators";
import PFBase from "@patternfly/patternfly/patternfly-base.css";
import PFForm from "@patternfly/patternfly/components/Form/form.css";
import PFFormControl from "@patternfly/patternfly/components/FormControl/form-control.css";
diff --git a/web/src/elements/forms/HorizontalFormElement.ts b/web/src/elements/forms/HorizontalFormElement.ts
index bd735d539..bf0a9330d 100644
--- a/web/src/elements/forms/HorizontalFormElement.ts
+++ b/web/src/elements/forms/HorizontalFormElement.ts
@@ -1,5 +1,6 @@
-import { customElement, LitElement, CSSResult, property, css } from "lit-element";
-import { TemplateResult, html } from "lit-html";
+import { LitElement, CSSResult, css } from "lit";
+import { customElement, property } from "lit/decorators";
+import { TemplateResult, html } from "lit";
import PFBase from "@patternfly/patternfly/patternfly-base.css";
import PFForm from "@patternfly/patternfly/components/Form/form.css";
import PFFormControl from "@patternfly/patternfly/components/FormControl/form-control.css";
diff --git a/web/src/elements/forms/ModalForm.ts b/web/src/elements/forms/ModalForm.ts
index 80d58a790..4a217e465 100644
--- a/web/src/elements/forms/ModalForm.ts
+++ b/web/src/elements/forms/ModalForm.ts
@@ -1,5 +1,6 @@
import { t } from "@lingui/macro";
-import { customElement, html, property, TemplateResult } from "lit-element";
+import { html, TemplateResult } from "lit";
+import { customElement, property } from "lit/decorators";
import { EVENT_REFRESH } from "../../constants";
import { ModalButton } from "../buttons/ModalButton";
import { Form } from "./Form";
diff --git a/web/src/elements/forms/ModelForm.ts b/web/src/elements/forms/ModelForm.ts
index 016878838..e3f53b109 100644
--- a/web/src/elements/forms/ModelForm.ts
+++ b/web/src/elements/forms/ModelForm.ts
@@ -1,4 +1,5 @@
-import { property, TemplateResult } from "lit-element";
+import { TemplateResult } from "lit";
+import { property } from "lit/decorators";
import { EVENT_REFRESH } from "../../constants";
import { Form } from "./Form";
diff --git a/web/src/elements/forms/ProxyForm.ts b/web/src/elements/forms/ProxyForm.ts
index cb8e1a3ac..f57806d66 100644
--- a/web/src/elements/forms/ProxyForm.ts
+++ b/web/src/elements/forms/ProxyForm.ts
@@ -1,4 +1,5 @@
-import { customElement, html, property, TemplateResult } from "lit-element";
+import { html, TemplateResult } from "lit";
+import { customElement, property } from "lit/decorators";
import { Form } from "./Form";
@customElement("ak-proxy-form")
diff --git a/web/src/elements/messages/Message.ts b/web/src/elements/messages/Message.ts
index 8e191a2eb..c2ceed649 100644
--- a/web/src/elements/messages/Message.ts
+++ b/web/src/elements/messages/Message.ts
@@ -1,4 +1,5 @@
-import { CSSResult, customElement, html, LitElement, property, TemplateResult } from "lit-element";
+import { CSSResult, html, LitElement, TemplateResult } from "lit";
+import { customElement, property } from "lit/decorators";
import PFAlertGroup from "@patternfly/patternfly/components/AlertGroup/alert-group.css";
import PFAlert from "@patternfly/patternfly/components/Alert/alert.css";
diff --git a/web/src/elements/messages/MessageContainer.ts b/web/src/elements/messages/MessageContainer.ts
index fef787671..0c3307b79 100644
--- a/web/src/elements/messages/MessageContainer.ts
+++ b/web/src/elements/messages/MessageContainer.ts
@@ -1,12 +1,5 @@
-import {
- LitElement,
- html,
- customElement,
- TemplateResult,
- property,
- CSSResult,
- css,
-} from "lit-element";
+import { LitElement, html, TemplateResult, CSSResult, css } from "lit";
+import { customElement, property } from "lit/decorators";
import "./Message";
import { APIMessage } from "./Message";
import PFAlertGroup from "@patternfly/patternfly/components/AlertGroup/alert-group.css";
diff --git a/web/src/elements/notifications/APIDrawer.ts b/web/src/elements/notifications/APIDrawer.ts
index b4aaacbba..e8a4a9571 100644
--- a/web/src/elements/notifications/APIDrawer.ts
+++ b/web/src/elements/notifications/APIDrawer.ts
@@ -1,13 +1,6 @@
import { Middleware, ResponseContext } from "@goauthentik/api";
-import {
- css,
- CSSResult,
- customElement,
- html,
- LitElement,
- property,
- TemplateResult,
-} from "lit-element";
+import { css, CSSResult, html, LitElement, TemplateResult } from "lit";
+import { customElement, property } from "lit/decorators";
import PFBase from "@patternfly/patternfly/patternfly-base.css";
import PFNotificationDrawer from "@patternfly/patternfly/components/NotificationDrawer/notification-drawer.css";
import PFDropdown from "@patternfly/patternfly/components/Dropdown/dropdown.css";
diff --git a/web/src/elements/notifications/NotificationDrawer.ts b/web/src/elements/notifications/NotificationDrawer.ts
index 20343da39..9d4d5113e 100644
--- a/web/src/elements/notifications/NotificationDrawer.ts
+++ b/web/src/elements/notifications/NotificationDrawer.ts
@@ -1,13 +1,6 @@
import { t } from "@lingui/macro";
-import {
- css,
- CSSResult,
- customElement,
- html,
- LitElement,
- property,
- TemplateResult,
-} from "lit-element";
+import { css, CSSResult, html, LitElement, TemplateResult } from "lit";
+import { customElement, property } from "lit/decorators";
import { EventsApi, Notification } from "@goauthentik/api";
import { AKResponse } from "../../api/Client";
import { DEFAULT_CONFIG } from "../../api/Config";
diff --git a/web/src/elements/oauth/UserCodeList.ts b/web/src/elements/oauth/UserCodeList.ts
index 27203151d..89a0d7a25 100644
--- a/web/src/elements/oauth/UserCodeList.ts
+++ b/web/src/elements/oauth/UserCodeList.ts
@@ -1,5 +1,6 @@
import { t } from "@lingui/macro";
-import { customElement, html, property, TemplateResult } from "lit-element";
+import { html, TemplateResult } from "lit";
+import { customElement, property } from "lit/decorators";
import { AKResponse } from "../../api/Client";
import { Table, TableColumn } from "../table/Table";
diff --git a/web/src/elements/oauth/UserRefreshList.ts b/web/src/elements/oauth/UserRefreshList.ts
index d19f42574..4c435a0fa 100644
--- a/web/src/elements/oauth/UserRefreshList.ts
+++ b/web/src/elements/oauth/UserRefreshList.ts
@@ -1,5 +1,6 @@
import { t } from "@lingui/macro";
-import { CSSResult, customElement, html, property, TemplateResult } from "lit-element";
+import { CSSResult, html, TemplateResult } from "lit";
+import { customElement, property } from "lit/decorators";
import { AKResponse } from "../../api/Client";
import { Table, TableColumn } from "../table/Table";
import PFFlex from "@patternfly/patternfly/layouts/Flex/flex.css";
diff --git a/web/src/elements/router/Route.ts b/web/src/elements/router/Route.ts
index 90ac2b64e..7a0dc4b11 100644
--- a/web/src/elements/router/Route.ts
+++ b/web/src/elements/router/Route.ts
@@ -1,4 +1,4 @@
-import { html, TemplateResult } from "lit-html";
+import { html, TemplateResult } from "lit";
export const SLUG_REGEX = "[-a-zA-Z0-9_]+";
export const ID_REGEX = "\\d+";
diff --git a/web/src/elements/router/RouteMatch.ts b/web/src/elements/router/RouteMatch.ts
index 046b3e014..3113cc581 100644
--- a/web/src/elements/router/RouteMatch.ts
+++ b/web/src/elements/router/RouteMatch.ts
@@ -1,4 +1,4 @@
-import { TemplateResult } from "lit-html";
+import { TemplateResult } from "lit";
import { Route } from "./Route";
export class RouteMatch {
diff --git a/web/src/elements/router/Router404.ts b/web/src/elements/router/Router404.ts
index 2c3e2200a..8783635f1 100644
--- a/web/src/elements/router/Router404.ts
+++ b/web/src/elements/router/Router404.ts
@@ -1,5 +1,6 @@
import { t } from "@lingui/macro";
-import { CSSResult, customElement, html, LitElement, property, TemplateResult } from "lit-element";
+import { CSSResult, html, LitElement, TemplateResult } from "lit";
+import { customElement, property } from "lit/decorators";
import PFEmptyState from "@patternfly/patternfly/components/EmptyState/empty-state.css";
import PFTitle from "@patternfly/patternfly/components/Title/title.css";
import PFBase from "@patternfly/patternfly/patternfly-base.css";
diff --git a/web/src/elements/router/RouterOutlet.ts b/web/src/elements/router/RouterOutlet.ts
index 2aeb4493a..2e493c07b 100644
--- a/web/src/elements/router/RouterOutlet.ts
+++ b/web/src/elements/router/RouterOutlet.ts
@@ -1,12 +1,5 @@
-import {
- css,
- CSSResult,
- customElement,
- html,
- LitElement,
- property,
- TemplateResult,
-} from "lit-element";
+import { css, CSSResult, html, LitElement, TemplateResult } from "lit";
+import { customElement, property } from "lit/decorators";
import { Route } from "./Route";
import { RouteMatch } from "./RouteMatch";
import AKGlobal from "../../authentik.css";
diff --git a/web/src/elements/sidebar/Sidebar.ts b/web/src/elements/sidebar/Sidebar.ts
index a86ad4139..fefa8cc96 100644
--- a/web/src/elements/sidebar/Sidebar.ts
+++ b/web/src/elements/sidebar/Sidebar.ts
@@ -1,4 +1,5 @@
-import { css, CSSResult, customElement, html, LitElement, TemplateResult } from "lit-element";
+import { css, CSSResult, html, LitElement, TemplateResult } from "lit";
+import { customElement } from "lit/decorators";
import PFPage from "@patternfly/patternfly/components/Page/page.css";
import PFNav from "@patternfly/patternfly/components/Nav/nav.css";
import PFBase from "@patternfly/patternfly/patternfly-base.css";
diff --git a/web/src/elements/sidebar/SidebarBrand.ts b/web/src/elements/sidebar/SidebarBrand.ts
index d8d982f10..83933a6a0 100644
--- a/web/src/elements/sidebar/SidebarBrand.ts
+++ b/web/src/elements/sidebar/SidebarBrand.ts
@@ -1,12 +1,5 @@
-import {
- css,
- CSSResult,
- customElement,
- html,
- LitElement,
- property,
- TemplateResult,
-} from "lit-element";
+import { css, CSSResult, html, LitElement, TemplateResult } from "lit";
+import { customElement, property } from "lit/decorators";
import PFPage from "@patternfly/patternfly/components/Page/page.css";
import PFGlobal from "@patternfly/patternfly/patternfly-base.css";
import PFButton from "@patternfly/patternfly/components/Button/button.css";
diff --git a/web/src/elements/sidebar/SidebarItem.ts b/web/src/elements/sidebar/SidebarItem.ts
index 3d1ebb184..9c1a42a62 100644
--- a/web/src/elements/sidebar/SidebarItem.ts
+++ b/web/src/elements/sidebar/SidebarItem.ts
@@ -1,10 +1,11 @@
-import { css, CSSResult, customElement, LitElement, property } from "lit-element";
+import { css, CSSResult, LitElement } from "lit";
+import { customElement, property } from "lit/decorators";
import PFPage from "@patternfly/patternfly/components/Page/page.css";
import PFNav from "@patternfly/patternfly/components/Nav/nav.css";
import PFBase from "@patternfly/patternfly/patternfly-base.css";
import AKGlobal from "../../authentik.css";
-import { TemplateResult, html } from "lit-html";
-import { until } from "lit-html/directives/until";
+import { TemplateResult, html } from "lit";
+import { until } from "lit/directives/until";
import { ROUTE_SEPARATOR } from "../../constants";
@customElement("ak-sidebar-item")
diff --git a/web/src/elements/sidebar/SidebarUser.ts b/web/src/elements/sidebar/SidebarUser.ts
index e140ec35c..40ac50c39 100644
--- a/web/src/elements/sidebar/SidebarUser.ts
+++ b/web/src/elements/sidebar/SidebarUser.ts
@@ -1,11 +1,12 @@
-import { css, CSSResult, customElement, html, LitElement, TemplateResult } from "lit-element";
+import { css, CSSResult, html, LitElement, TemplateResult } from "lit";
+import { customElement } from "lit/decorators";
import PFNav from "@patternfly/patternfly/components/Nav/nav.css";
import PFAvatar from "@patternfly/patternfly/components/Avatar/avatar.css";
import { me } from "../../api/Users";
-import { until } from "lit-html/directives/until";
+import { until } from "lit/directives/until";
import PFBase from "@patternfly/patternfly/patternfly-base.css";
-import { ifDefined } from "lit-html/directives/if-defined";
+import { ifDefined } from "lit/directives/if-defined";
@customElement("ak-sidebar-user")
export class SidebarUser extends LitElement {
diff --git a/web/src/elements/table/Table.ts b/web/src/elements/table/Table.ts
index 70ea61483..595894d58 100644
--- a/web/src/elements/table/Table.ts
+++ b/web/src/elements/table/Table.ts
@@ -1,5 +1,6 @@
import { t } from "@lingui/macro";
-import { CSSResult, html, LitElement, property, TemplateResult } from "lit-element";
+import { CSSResult, html, LitElement, TemplateResult } from "lit";
+import { property } from "lit/decorators";
import { AKResponse } from "../../api/Client";
import PFBase from "@patternfly/patternfly/patternfly-base.css";
@@ -17,7 +18,7 @@ import "../EmptyState";
import "../chips/Chip";
import "../chips/ChipGroup";
import { EVENT_REFRESH } from "../../constants";
-import { ifDefined } from "lit-html/directives/if-defined";
+import { ifDefined } from "lit/directives/if-defined";
export class TableColumn {
title: string;
diff --git a/web/src/elements/table/TableModal.ts b/web/src/elements/table/TableModal.ts
index 4b50f7668..2c7862207 100644
--- a/web/src/elements/table/TableModal.ts
+++ b/web/src/elements/table/TableModal.ts
@@ -1,5 +1,6 @@
-import { CSSResult, LitElement, property } from "lit-element";
-import { html, TemplateResult } from "lit-html";
+import { CSSResult, LitElement } from "lit";
+import { property } from "lit/decorators";
+import { html, TemplateResult } from "lit";
import { Table } from "./Table";
import PFModalBox from "@patternfly/patternfly/components/ModalBox/modal-box.css";
import PFBullseye from "@patternfly/patternfly/layouts/Bullseye/bullseye.css";
diff --git a/web/src/elements/table/TablePage.ts b/web/src/elements/table/TablePage.ts
index 2109dfa99..203c6cde1 100644
--- a/web/src/elements/table/TablePage.ts
+++ b/web/src/elements/table/TablePage.ts
@@ -1,6 +1,6 @@
-import { CSSResult } from "lit-element";
-import { html, TemplateResult } from "lit-html";
-import { ifDefined } from "lit-html/directives/if-defined";
+import { CSSResult } from "lit";
+import { html, TemplateResult } from "lit";
+import { ifDefined } from "lit/directives/if-defined";
import { Table } from "./Table";
import "../../elements/PageHeader";
import PFPage from "@patternfly/patternfly/components/Page/page.css";
diff --git a/web/src/elements/table/TablePagination.ts b/web/src/elements/table/TablePagination.ts
index e589af365..75ce831f5 100644
--- a/web/src/elements/table/TablePagination.ts
+++ b/web/src/elements/table/TablePagination.ts
@@ -1,4 +1,5 @@
-import { CSSResult, customElement, html, LitElement, property, TemplateResult } from "lit-element";
+import { CSSResult, html, LitElement, TemplateResult } from "lit";
+import { customElement, property } from "lit/decorators";
import { AKPagination } from "../../api/Client";
import { t } from "@lingui/macro";
import PFBase from "@patternfly/patternfly/patternfly-base.css";
diff --git a/web/src/elements/table/TableSearch.ts b/web/src/elements/table/TableSearch.ts
index 20a40ce30..94d2ec84a 100644
--- a/web/src/elements/table/TableSearch.ts
+++ b/web/src/elements/table/TableSearch.ts
@@ -1,5 +1,6 @@
-import { CSSResult, customElement, html, LitElement, property, TemplateResult } from "lit-element";
-import { ifDefined } from "lit-html/directives/if-defined";
+import { CSSResult, html, LitElement, TemplateResult } from "lit";
+import { customElement, property } from "lit/decorators";
+import { ifDefined } from "lit/directives/if-defined";
import PFBase from "@patternfly/patternfly/patternfly-base.css";
import PFButton from "@patternfly/patternfly/components/Button/button.css";
import PFToolbar from "@patternfly/patternfly/components/Toolbar/toolbar.css";
diff --git a/web/src/elements/user/SessionList.ts b/web/src/elements/user/SessionList.ts
index 3dbdbdaec..3c486937e 100644
--- a/web/src/elements/user/SessionList.ts
+++ b/web/src/elements/user/SessionList.ts
@@ -1,5 +1,6 @@
import { t } from "@lingui/macro";
-import { customElement, html, property, TemplateResult } from "lit-element";
+import { html, TemplateResult } from "lit";
+import { customElement, property } from "lit/decorators";
import { AKResponse } from "../../api/Client";
import { Table, TableColumn } from "../table/Table";
diff --git a/web/src/elements/user/UserConsentList.ts b/web/src/elements/user/UserConsentList.ts
index 6b0a7e217..549ccfcd4 100644
--- a/web/src/elements/user/UserConsentList.ts
+++ b/web/src/elements/user/UserConsentList.ts
@@ -1,5 +1,6 @@
import { t } from "@lingui/macro";
-import { customElement, html, property, TemplateResult } from "lit-element";
+import { html, TemplateResult } from "lit";
+import { customElement, property } from "lit/decorators";
import { AKResponse } from "../../api/Client";
import { Table, TableColumn } from "../table/Table";
diff --git a/web/src/flows/FlowExecutor.ts b/web/src/flows/FlowExecutor.ts
index bd4456904..ca34b862d 100644
--- a/web/src/flows/FlowExecutor.ts
+++ b/web/src/flows/FlowExecutor.ts
@@ -1,14 +1,6 @@
import { t } from "@lingui/macro";
-import {
- LitElement,
- html,
- customElement,
- property,
- TemplateResult,
- CSSResult,
- css,
-} from "lit-element";
-
+import { LitElement, html, TemplateResult, CSSResult, css } from "lit";
+import { customElement, property } from "lit/decorators";
import PFLogin from "@patternfly/patternfly/components/Login/login.css";
import PFBase from "@patternfly/patternfly/patternfly-base.css";
import PFTitle from "@patternfly/patternfly/components/Title/title.css";
@@ -17,7 +9,7 @@ import PFList from "@patternfly/patternfly/components/List/list.css";
import PFButton from "@patternfly/patternfly/components/Button/button.css";
import AKGlobal from "../authentik.css";
-import { unsafeHTML } from "lit-html/directives/unsafe-html";
+import { unsafeHTML } from "lit/directives/unsafe-html";
import "../elements/LoadingOverlay";
import "./access_denied/FlowAccessDenied";
import "./stages/authenticator_static/AuthenticatorStaticStage";
@@ -45,7 +37,7 @@ import {
ShellChallenge,
} from "@goauthentik/api";
import { DEFAULT_CONFIG, tenant } from "../api/Config";
-import { until } from "lit-html/directives/until";
+import { until } from "lit/directives/until";
import { TITLE_DEFAULT } from "../constants";
import { configureSentry } from "../api/Sentry";
import { WebsocketClient } from "../common/ws";
diff --git a/web/src/flows/FormStatic.ts b/web/src/flows/FormStatic.ts
index b2aa38d34..3b10e15d8 100644
--- a/web/src/flows/FormStatic.ts
+++ b/web/src/flows/FormStatic.ts
@@ -1,15 +1,8 @@
import { t } from "@lingui/macro";
-import {
- css,
- CSSResult,
- customElement,
- html,
- LitElement,
- property,
- TemplateResult,
-} from "lit-element";
+import { css, CSSResult, html, LitElement, TemplateResult } from "lit";
+import { customElement, property } from "lit/decorators";
import PFAvatar from "@patternfly/patternfly/components/Avatar/avatar.css";
-import { ifDefined } from "lit-html/directives/if-defined";
+import { ifDefined } from "lit/directives/if-defined";
@customElement("ak-form-static")
export class FormStatic extends LitElement {
diff --git a/web/src/flows/access_denied/FlowAccessDenied.ts b/web/src/flows/access_denied/FlowAccessDenied.ts
index 389146c27..468180a3d 100644
--- a/web/src/flows/access_denied/FlowAccessDenied.ts
+++ b/web/src/flows/access_denied/FlowAccessDenied.ts
@@ -1,5 +1,6 @@
import { AccessDeniedChallenge, FlowChallengeResponseRequest } from "@goauthentik/api";
-import { CSSResult, customElement, html, TemplateResult } from "lit-element";
+import { CSSResult, html, TemplateResult } from "lit";
+import { customElement } from "lit/decorators";
import { BaseStage } from "../stages/base";
import PFLogin from "@patternfly/patternfly/components/Login/login.css";
import PFTitle from "@patternfly/patternfly/components/Title/title.css";
diff --git a/web/src/flows/sources/plex/PlexLoginInit.ts b/web/src/flows/sources/plex/PlexLoginInit.ts
index 3b174b33b..a18ad3fcb 100644
--- a/web/src/flows/sources/plex/PlexLoginInit.ts
+++ b/web/src/flows/sources/plex/PlexLoginInit.ts
@@ -10,8 +10,9 @@ import PFTitle from "@patternfly/patternfly/components/Title/title.css";
import PFButton from "@patternfly/patternfly/components/Button/button.css";
import PFBase from "@patternfly/patternfly/patternfly-base.css";
import AKGlobal from "../../../authentik.css";
-import { CSSResult, customElement } from "lit-element";
-import { html, TemplateResult } from "lit-html";
+import { CSSResult } from "lit";
+import { customElement } from "lit/decorators";
+import { html, TemplateResult } from "lit";
import { BaseStage } from "../../stages/base";
import { PlexAPIClient, popupCenterScreen } from "./API";
import { DEFAULT_CONFIG } from "../../../api/Config";
diff --git a/web/src/flows/stages/authenticator_duo/AuthenticatorDuoStage.ts b/web/src/flows/stages/authenticator_duo/AuthenticatorDuoStage.ts
index a06f1ce54..af05fb4e8 100644
--- a/web/src/flows/stages/authenticator_duo/AuthenticatorDuoStage.ts
+++ b/web/src/flows/stages/authenticator_duo/AuthenticatorDuoStage.ts
@@ -1,5 +1,6 @@
import { t } from "@lingui/macro";
-import { CSSResult, customElement, html, TemplateResult } from "lit-element";
+import { CSSResult, html, TemplateResult } from "lit";
+import { customElement } from "lit/decorators";
import PFLogin from "@patternfly/patternfly/components/Login/login.css";
import PFForm from "@patternfly/patternfly/components/Form/form.css";
import PFFormControl from "@patternfly/patternfly/components/FormControl/form-control.css";
@@ -17,7 +18,7 @@ import {
StagesApi,
} from "@goauthentik/api";
import { DEFAULT_CONFIG } from "../../../api/Config";
-import { ifDefined } from "lit-html/directives/if-defined";
+import { ifDefined } from "lit/directives/if-defined";
@customElement("ak-stage-authenticator-duo")
export class AuthenticatorDuoStage extends BaseStage<
diff --git a/web/src/flows/stages/authenticator_static/AuthenticatorStaticStage.ts b/web/src/flows/stages/authenticator_static/AuthenticatorStaticStage.ts
index 0db675f9c..73f8df752 100644
--- a/web/src/flows/stages/authenticator_static/AuthenticatorStaticStage.ts
+++ b/web/src/flows/stages/authenticator_static/AuthenticatorStaticStage.ts
@@ -1,5 +1,6 @@
import { t } from "@lingui/macro";
-import { css, CSSResult, customElement, html, TemplateResult } from "lit-element";
+import { css, CSSResult, html, TemplateResult } from "lit";
+import { customElement } from "lit/decorators";
import PFLogin from "@patternfly/patternfly/components/Login/login.css";
import PFForm from "@patternfly/patternfly/components/Form/form.css";
import PFFormControl from "@patternfly/patternfly/components/FormControl/form-control.css";
@@ -15,7 +16,7 @@ import {
AuthenticatorStaticChallenge,
AuthenticatorStaticChallengeResponseRequest,
} from "@goauthentik/api";
-import { ifDefined } from "lit-html/directives/if-defined";
+import { ifDefined } from "lit/directives/if-defined";
export const STATIC_TOKEN_STYLE = css`
/* Static OTP Tokens */
diff --git a/web/src/flows/stages/authenticator_totp/AuthenticatorTOTPStage.ts b/web/src/flows/stages/authenticator_totp/AuthenticatorTOTPStage.ts
index 31670802b..8049a2ef6 100644
--- a/web/src/flows/stages/authenticator_totp/AuthenticatorTOTPStage.ts
+++ b/web/src/flows/stages/authenticator_totp/AuthenticatorTOTPStage.ts
@@ -1,5 +1,7 @@
import { t } from "@lingui/macro";
-import { CSSResult, customElement, html, TemplateResult } from "lit-element";
+import { CSSResult, html, TemplateResult } from "lit";
+import { customElement } from "lit/decorators";
+
import PFLogin from "@patternfly/patternfly/components/Login/login.css";
import PFForm from "@patternfly/patternfly/components/Form/form.css";
import PFFormControl from "@patternfly/patternfly/components/FormControl/form-control.css";
@@ -18,7 +20,7 @@ import {
AuthenticatorTOTPChallenge,
AuthenticatorTOTPChallengeResponseRequest,
} from "@goauthentik/api";
-import { ifDefined } from "lit-html/directives/if-defined";
+import { ifDefined } from "lit/directives/if-defined";
@customElement("ak-stage-authenticator-totp")
export class AuthenticatorTOTPStage extends BaseStage<
diff --git a/web/src/flows/stages/authenticator_validate/AuthenticatorValidateStage.ts b/web/src/flows/stages/authenticator_validate/AuthenticatorValidateStage.ts
index cf189879b..79addc3f7 100644
--- a/web/src/flows/stages/authenticator_validate/AuthenticatorValidateStage.ts
+++ b/web/src/flows/stages/authenticator_validate/AuthenticatorValidateStage.ts
@@ -1,5 +1,6 @@
import { t } from "@lingui/macro";
-import { css, CSSResult, customElement, html, property, TemplateResult } from "lit-element";
+import { css, CSSResult, html, TemplateResult } from "lit";
+import { customElement, property } from "lit/decorators";
import PFLogin from "@patternfly/patternfly/components/Login/login.css";
import PFForm from "@patternfly/patternfly/components/Form/form.css";
import PFFormControl from "@patternfly/patternfly/components/FormControl/form-control.css";
diff --git a/web/src/flows/stages/authenticator_validate/AuthenticatorValidateStageCode.ts b/web/src/flows/stages/authenticator_validate/AuthenticatorValidateStageCode.ts
index 0be36ab30..635ed885c 100644
--- a/web/src/flows/stages/authenticator_validate/AuthenticatorValidateStageCode.ts
+++ b/web/src/flows/stages/authenticator_validate/AuthenticatorValidateStageCode.ts
@@ -1,5 +1,6 @@
import { t } from "@lingui/macro";
-import { CSSResult, customElement, html, property, TemplateResult } from "lit-element";
+import { CSSResult, html, TemplateResult } from "lit";
+import { customElement, property } from "lit/decorators";
import PFLogin from "@patternfly/patternfly/components/Login/login.css";
import PFForm from "@patternfly/patternfly/components/Form/form.css";
import PFFormControl from "@patternfly/patternfly/components/FormControl/form-control.css";
@@ -18,7 +19,7 @@ import {
AuthenticatorValidationChallengeResponseRequest,
DeviceChallenge,
} from "@goauthentik/api";
-import { ifDefined } from "lit-html/directives/if-defined";
+import { ifDefined } from "lit/directives/if-defined";
@customElement("ak-stage-authenticator-validate-code")
export class AuthenticatorValidateStageWebCode extends BaseStage<
diff --git a/web/src/flows/stages/authenticator_validate/AuthenticatorValidateStageDuo.ts b/web/src/flows/stages/authenticator_validate/AuthenticatorValidateStageDuo.ts
index dc430446b..5772059ef 100644
--- a/web/src/flows/stages/authenticator_validate/AuthenticatorValidateStageDuo.ts
+++ b/web/src/flows/stages/authenticator_validate/AuthenticatorValidateStageDuo.ts
@@ -1,5 +1,6 @@
import { t } from "@lingui/macro";
-import { CSSResult, customElement, html, property, TemplateResult } from "lit-element";
+import { CSSResult, html, TemplateResult } from "lit";
+import { customElement, property } from "lit/decorators";
import PFLogin from "@patternfly/patternfly/components/Login/login.css";
import PFForm from "@patternfly/patternfly/components/Form/form.css";
import PFFormControl from "@patternfly/patternfly/components/FormControl/form-control.css";
@@ -17,7 +18,7 @@ import {
AuthenticatorValidationChallengeResponseRequest,
DeviceChallenge,
} from "@goauthentik/api";
-import { ifDefined } from "lit-html/directives/if-defined";
+import { ifDefined } from "lit/directives/if-defined";
@customElement("ak-stage-authenticator-validate-duo")
export class AuthenticatorValidateStageWebDuo extends BaseStage<
diff --git a/web/src/flows/stages/authenticator_validate/AuthenticatorValidateStageWebAuthn.ts b/web/src/flows/stages/authenticator_validate/AuthenticatorValidateStageWebAuthn.ts
index 35f41b6ac..2354068f7 100644
--- a/web/src/flows/stages/authenticator_validate/AuthenticatorValidateStageWebAuthn.ts
+++ b/web/src/flows/stages/authenticator_validate/AuthenticatorValidateStageWebAuthn.ts
@@ -1,5 +1,6 @@
import { t } from "@lingui/macro";
-import { CSSResult, customElement, html, property, TemplateResult } from "lit-element";
+import { CSSResult, html, TemplateResult } from "lit";
+import { customElement, property } from "lit/decorators";
import PFLogin from "@patternfly/patternfly/components/Login/login.css";
import PFForm from "@patternfly/patternfly/components/Form/form.css";
import PFFormControl from "@patternfly/patternfly/components/FormControl/form-control.css";
diff --git a/web/src/flows/stages/authenticator_webauthn/WebAuthnAuthenticatorRegisterStage.ts b/web/src/flows/stages/authenticator_webauthn/WebAuthnAuthenticatorRegisterStage.ts
index 50f4a6d10..490a07692 100644
--- a/web/src/flows/stages/authenticator_webauthn/WebAuthnAuthenticatorRegisterStage.ts
+++ b/web/src/flows/stages/authenticator_webauthn/WebAuthnAuthenticatorRegisterStage.ts
@@ -1,5 +1,6 @@
import { t } from "@lingui/macro";
-import { CSSResult, customElement, html, property, TemplateResult } from "lit-element";
+import { CSSResult, html, TemplateResult } from "lit";
+import { customElement, property } from "lit/decorators";
import PFLogin from "@patternfly/patternfly/components/Login/login.css";
import PFForm from "@patternfly/patternfly/components/Form/form.css";
import PFFormControl from "@patternfly/patternfly/components/FormControl/form-control.css";
diff --git a/web/src/flows/stages/autosubmit/AutosubmitStage.ts b/web/src/flows/stages/autosubmit/AutosubmitStage.ts
index c56b8b910..718387b85 100644
--- a/web/src/flows/stages/autosubmit/AutosubmitStage.ts
+++ b/web/src/flows/stages/autosubmit/AutosubmitStage.ts
@@ -1,5 +1,6 @@
import { t } from "@lingui/macro";
-import { CSSResult, customElement, html, TemplateResult } from "lit-element";
+import { CSSResult, html, TemplateResult } from "lit";
+import { customElement } from "lit/decorators";
import PFLogin from "@patternfly/patternfly/components/Login/login.css";
import PFForm from "@patternfly/patternfly/components/Form/form.css";
import PFFormControl from "@patternfly/patternfly/components/FormControl/form-control.css";
diff --git a/web/src/flows/stages/base.ts b/web/src/flows/stages/base.ts
index b188d4669..cfc6b2f53 100644
--- a/web/src/flows/stages/base.ts
+++ b/web/src/flows/stages/base.ts
@@ -1,5 +1,6 @@
import { ErrorDetail } from "@goauthentik/api";
-import { html, LitElement, property, TemplateResult } from "lit-element";
+import { html, LitElement, TemplateResult } from "lit";
+import { property } from "lit/decorators";
export interface StageHost {
challenge?: unknown;
diff --git a/web/src/flows/stages/captcha/CaptchaStage.ts b/web/src/flows/stages/captcha/CaptchaStage.ts
index dde16949e..5f99b9edd 100644
--- a/web/src/flows/stages/captcha/CaptchaStage.ts
+++ b/web/src/flows/stages/captcha/CaptchaStage.ts
@@ -1,5 +1,6 @@
import { t } from "@lingui/macro";
-import { CSSResult, customElement, html, TemplateResult } from "lit-element";
+import { CSSResult, html, TemplateResult } from "lit";
+import { customElement, property } from "lit/decorators";
import PFLogin from "@patternfly/patternfly/components/Login/login.css";
import PFForm from "@patternfly/patternfly/components/Form/form.css";
import PFFormControl from "@patternfly/patternfly/components/FormControl/form-control.css";
@@ -13,7 +14,7 @@ import "../../../elements/forms/FormElement";
import "../../../elements/EmptyState";
import "../../FormStatic";
import { CaptchaChallenge, CaptchaChallengeResponseRequest } from "@goauthentik/api";
-import { ifDefined } from "lit-html/directives/if-defined";
+import { ifDefined } from "lit/directives/if-defined";
@customElement("ak-stage-captcha")
export class CaptchaStage extends BaseStage {
diff --git a/web/src/flows/stages/consent/ConsentStage.ts b/web/src/flows/stages/consent/ConsentStage.ts
index 3ade523d7..a5736f0b7 100644
--- a/web/src/flows/stages/consent/ConsentStage.ts
+++ b/web/src/flows/stages/consent/ConsentStage.ts
@@ -1,5 +1,6 @@
import { t } from "@lingui/macro";
-import { CSSResult, customElement, html, TemplateResult } from "lit-element";
+import { CSSResult, html, TemplateResult } from "lit";
+import { customElement } from "lit/decorators";
import PFLogin from "@patternfly/patternfly/components/Login/login.css";
import PFList from "@patternfly/patternfly/components/List/list.css";
import PFForm from "@patternfly/patternfly/components/Form/form.css";
@@ -13,7 +14,7 @@ import { BaseStage } from "../base";
import "../../../elements/EmptyState";
import "../../FormStatic";
import { ConsentChallenge, ConsentChallengeResponseRequest } from "@goauthentik/api";
-import { ifDefined } from "lit-html/directives/if-defined";
+import { ifDefined } from "lit/directives/if-defined";
@customElement("ak-stage-consent")
export class ConsentStage extends BaseStage {
diff --git a/web/src/flows/stages/dummy/DummyStage.ts b/web/src/flows/stages/dummy/DummyStage.ts
index 41a3245a1..5fa17f7cc 100644
--- a/web/src/flows/stages/dummy/DummyStage.ts
+++ b/web/src/flows/stages/dummy/DummyStage.ts
@@ -1,5 +1,6 @@
import { t } from "@lingui/macro";
-import { CSSResult, customElement, html, TemplateResult } from "lit-element";
+import { CSSResult, html, TemplateResult } from "lit";
+import { customElement } from "lit/decorators";
import PFLogin from "@patternfly/patternfly/components/Login/login.css";
import PFForm from "@patternfly/patternfly/components/Form/form.css";
import PFFormControl from "@patternfly/patternfly/components/FormControl/form-control.css";
diff --git a/web/src/flows/stages/email/EmailStage.ts b/web/src/flows/stages/email/EmailStage.ts
index e3c1f1fb7..fea006741 100644
--- a/web/src/flows/stages/email/EmailStage.ts
+++ b/web/src/flows/stages/email/EmailStage.ts
@@ -1,5 +1,6 @@
import { t } from "@lingui/macro";
-import { CSSResult, customElement, html, TemplateResult } from "lit-element";
+import { CSSResult, html, TemplateResult } from "lit";
+import { customElement } from "lit/decorators";
import PFLogin from "@patternfly/patternfly/components/Login/login.css";
import PFForm from "@patternfly/patternfly/components/Form/form.css";
import PFFormControl from "@patternfly/patternfly/components/FormControl/form-control.css";
diff --git a/web/src/flows/stages/identification/IdentificationStage.ts b/web/src/flows/stages/identification/IdentificationStage.ts
index bf1db0632..f2322844d 100644
--- a/web/src/flows/stages/identification/IdentificationStage.ts
+++ b/web/src/flows/stages/identification/IdentificationStage.ts
@@ -1,5 +1,6 @@
import { t } from "@lingui/macro";
-import { css, CSSResult, customElement, html, TemplateResult } from "lit-element";
+import { css, CSSResult, html, TemplateResult } from "lit";
+import { customElement } from "lit/decorators";
import { BaseStage } from "../base";
import PFLogin from "@patternfly/patternfly/components/Login/login.css";
import PFForm from "@patternfly/patternfly/components/Form/form.css";
diff --git a/web/src/flows/stages/password/PasswordStage.ts b/web/src/flows/stages/password/PasswordStage.ts
index 067d85199..c9310aa10 100644
--- a/web/src/flows/stages/password/PasswordStage.ts
+++ b/web/src/flows/stages/password/PasswordStage.ts
@@ -1,5 +1,6 @@
import { t } from "@lingui/macro";
-import { CSSResult, customElement, html, TemplateResult } from "lit-element";
+import { CSSResult, html, TemplateResult } from "lit";
+import { customElement } from "lit/decorators";
import PFLogin from "@patternfly/patternfly/components/Login/login.css";
import PFForm from "@patternfly/patternfly/components/Form/form.css";
import PFFormControl from "@patternfly/patternfly/components/FormControl/form-control.css";
@@ -13,7 +14,7 @@ import "../../../elements/EmptyState";
import { PasswordManagerPrefill } from "../identification/IdentificationStage";
import "../../FormStatic";
import { PasswordChallenge, PasswordChallengeResponseRequest } from "@goauthentik/api";
-import { ifDefined } from "lit-html/directives/if-defined";
+import { ifDefined } from "lit/directives/if-defined";
@customElement("ak-stage-password")
export class PasswordStage extends BaseStage {
diff --git a/web/src/flows/stages/prompt/PromptStage.ts b/web/src/flows/stages/prompt/PromptStage.ts
index 72a1e0aa6..5e7037b7c 100644
--- a/web/src/flows/stages/prompt/PromptStage.ts
+++ b/web/src/flows/stages/prompt/PromptStage.ts
@@ -1,6 +1,7 @@
import { t } from "@lingui/macro";
-import { CSSResult, customElement, html, TemplateResult } from "lit-element";
-import { unsafeHTML } from "lit-html/directives/unsafe-html";
+import { CSSResult, html, TemplateResult } from "lit";
+import { customElement } from "lit/decorators";
+import { unsafeHTML } from "lit/directives/unsafe-html";
import PFLogin from "@patternfly/patternfly/components/Login/login.css";
import PFForm from "@patternfly/patternfly/components/Form/form.css";
import PFFormControl from "@patternfly/patternfly/components/FormControl/form-control.css";
diff --git a/web/src/interfaces/AdminInterface.ts b/web/src/interfaces/AdminInterface.ts
index a627a179a..c7aaf574a 100644
--- a/web/src/interfaces/AdminInterface.ts
+++ b/web/src/interfaces/AdminInterface.ts
@@ -1,13 +1,6 @@
import "../elements/messages/MessageContainer";
-import {
- css,
- CSSResult,
- customElement,
- html,
- LitElement,
- property,
- TemplateResult,
-} from "lit-element";
+import { css, CSSResult, html, LitElement, TemplateResult } from "lit";
+import { customElement, property } from "lit/decorators";
import { me } from "../api/Users";
import { ID_REGEX, SLUG_REGEX, UUID_REGEX } from "../elements/router/Route";
import "./locale";
@@ -23,7 +16,7 @@ import "../elements/router/RouterOutlet";
import "../elements/messages/MessageContainer";
import "../elements/notifications/NotificationDrawer";
import "../elements/sidebar/Sidebar";
-import { until } from "lit-html/directives/until";
+import { until } from "lit/directives/until";
import {
EVENT_API_DRAWER_TOGGLE,
EVENT_NOTIFICATION_DRAWER_TOGGLE,
diff --git a/web/src/interfaces/UserInterface.ts b/web/src/interfaces/UserInterface.ts
index c623d8231..b64b019aa 100644
--- a/web/src/interfaces/UserInterface.ts
+++ b/web/src/interfaces/UserInterface.ts
@@ -1,13 +1,6 @@
import "../elements/messages/MessageContainer";
-import {
- css,
- CSSResult,
- customElement,
- html,
- LitElement,
- property,
- TemplateResult,
-} from "lit-element";
+import { css, CSSResult, html, LitElement, TemplateResult } from "lit";
+import { customElement, property } from "lit/decorators";
import { me } from "../api/Users";
import "./locale";
import "../elements/sidebar/SidebarItem";
@@ -37,7 +30,7 @@ import { WebsocketClient } from "../common/ws";
import { ROUTES } from "../routesUser";
import { first } from "../utils";
import { DefaultTenant } from "../elements/sidebar/SidebarBrand";
-import { until } from "lit-html/directives/until";
+import { until } from "lit/directives/until";
import { uiConfig } from "../user/config";
@customElement("ak-interface-user")
diff --git a/web/src/pages/admin-overview/AdminOverviewPage.ts b/web/src/pages/admin-overview/AdminOverviewPage.ts
index 9e734ff17..c2e925f5c 100644
--- a/web/src/pages/admin-overview/AdminOverviewPage.ts
+++ b/web/src/pages/admin-overview/AdminOverviewPage.ts
@@ -1,5 +1,6 @@
import { t } from "@lingui/macro";
-import { css, CSSResult, customElement, html, LitElement, TemplateResult } from "lit-element";
+import { css, CSSResult, html, LitElement, TemplateResult } from "lit";
+import { customElement } from "lit/decorators";
import "../../elements/charts/AdminLoginsChart";
import "../../elements/cards/AggregatePromiseCard";
diff --git a/web/src/pages/admin-overview/TopApplicationsTable.ts b/web/src/pages/admin-overview/TopApplicationsTable.ts
index 24905debd..4f9c628cb 100644
--- a/web/src/pages/admin-overview/TopApplicationsTable.ts
+++ b/web/src/pages/admin-overview/TopApplicationsTable.ts
@@ -1,5 +1,6 @@
import { t } from "@lingui/macro";
-import { CSSResult, customElement, html, LitElement, property, TemplateResult } from "lit-element";
+import { CSSResult, html, LitElement, TemplateResult } from "lit";
+import { customElement, property } from "lit/decorators";
import { EventsApi, EventTopPerUser } from "@goauthentik/api";
import PFTable from "@patternfly/patternfly/components/Table/table.css";
import AKGlobal from "../../authentik.css";
diff --git a/web/src/pages/admin-overview/cards/AdminStatusCard.ts b/web/src/pages/admin-overview/cards/AdminStatusCard.ts
index 09d9b01be..049473987 100644
--- a/web/src/pages/admin-overview/cards/AdminStatusCard.ts
+++ b/web/src/pages/admin-overview/cards/AdminStatusCard.ts
@@ -1,5 +1,5 @@
-import { html, TemplateResult } from "lit-html";
-import { until } from "lit-html/directives/until";
+import { html, TemplateResult } from "lit";
+import { until } from "lit/directives/until";
import { EVENT_REFRESH } from "../../../constants";
import { AggregateCard } from "../../../elements/cards/AggregateCard";
import { PFSize } from "../../../elements/Spinner";
diff --git a/web/src/pages/admin-overview/cards/BackupStatusCard.ts b/web/src/pages/admin-overview/cards/BackupStatusCard.ts
index cc2623bdd..4d78b4baf 100644
--- a/web/src/pages/admin-overview/cards/BackupStatusCard.ts
+++ b/web/src/pages/admin-overview/cards/BackupStatusCard.ts
@@ -1,5 +1,6 @@
import { t } from "@lingui/macro";
-import { customElement, html, TemplateResult } from "lit-element";
+import { html, TemplateResult } from "lit";
+import { customElement } from "lit/decorators";
import { AdminStatus, AdminStatusCard } from "./AdminStatusCard";
import { AdminApi, StatusEnum, CapabilitiesEnum } from "@goauthentik/api";
import { config, DEFAULT_CONFIG } from "../../../api/Config";
diff --git a/web/src/pages/admin-overview/cards/SystemStatusCard.ts b/web/src/pages/admin-overview/cards/SystemStatusCard.ts
index 7ebcb1771..564f3e5fb 100644
--- a/web/src/pages/admin-overview/cards/SystemStatusCard.ts
+++ b/web/src/pages/admin-overview/cards/SystemStatusCard.ts
@@ -1,5 +1,6 @@
import { t } from "@lingui/macro";
-import { customElement, html, TemplateResult } from "lit-element";
+import { html, TemplateResult } from "lit";
+import { customElement } from "lit/decorators";
import { AdminApi, System } from "@goauthentik/api";
import { DEFAULT_CONFIG } from "../../../api/Config";
import { AdminStatusCard, AdminStatus } from "./AdminStatusCard";
diff --git a/web/src/pages/admin-overview/cards/VersionStatusCard.ts b/web/src/pages/admin-overview/cards/VersionStatusCard.ts
index ccfa91c02..debb79344 100644
--- a/web/src/pages/admin-overview/cards/VersionStatusCard.ts
+++ b/web/src/pages/admin-overview/cards/VersionStatusCard.ts
@@ -1,5 +1,6 @@
import { t } from "@lingui/macro";
-import { customElement, html, TemplateResult } from "lit-element";
+import { html, TemplateResult } from "lit";
+import { customElement } from "lit/decorators";
import { AdminApi, Version } from "@goauthentik/api";
import { DEFAULT_CONFIG } from "../../../api/Config";
import { AdminStatusCard, AdminStatus } from "./AdminStatusCard";
diff --git a/web/src/pages/admin-overview/cards/WorkerStatusCard.ts b/web/src/pages/admin-overview/cards/WorkerStatusCard.ts
index e701083a4..f8daaeb23 100644
--- a/web/src/pages/admin-overview/cards/WorkerStatusCard.ts
+++ b/web/src/pages/admin-overview/cards/WorkerStatusCard.ts
@@ -1,5 +1,6 @@
import { t } from "@lingui/macro";
-import { customElement, html } from "lit-element";
+import { html } from "lit";
+import { customElement } from "lit/decorators";
import { AdminApi } from "@goauthentik/api";
import { DEFAULT_CONFIG } from "../../../api/Config";
import { AdminStatus, AdminStatusCard } from "./AdminStatusCard";
diff --git a/web/src/pages/admin-overview/charts/FlowStatusChart.ts b/web/src/pages/admin-overview/charts/FlowStatusChart.ts
index 93b04ceef..4df2d7501 100644
--- a/web/src/pages/admin-overview/charts/FlowStatusChart.ts
+++ b/web/src/pages/admin-overview/charts/FlowStatusChart.ts
@@ -1,5 +1,5 @@
import { t } from "@lingui/macro";
-import { customElement } from "lit-element";
+import { customElement } from "lit/decorators";
import { FlowsApi } from "@goauthentik/api";
import { DEFAULT_CONFIG } from "../../../api/Config";
import "../../../elements/forms/ConfirmationForm";
diff --git a/web/src/pages/admin-overview/charts/GroupCountStatusChart.ts b/web/src/pages/admin-overview/charts/GroupCountStatusChart.ts
index 664f6d1ac..24ed01a25 100644
--- a/web/src/pages/admin-overview/charts/GroupCountStatusChart.ts
+++ b/web/src/pages/admin-overview/charts/GroupCountStatusChart.ts
@@ -1,4 +1,4 @@
-import { customElement } from "lit-element";
+import { customElement } from "lit/decorators";
import { CoreApi } from "@goauthentik/api";
import { DEFAULT_CONFIG } from "../../../api/Config";
import { AKChart } from "../../../elements/charts/Chart";
diff --git a/web/src/pages/admin-overview/charts/LDAPSyncStatusChart.ts b/web/src/pages/admin-overview/charts/LDAPSyncStatusChart.ts
index e12cd86af..f65aedb47 100644
--- a/web/src/pages/admin-overview/charts/LDAPSyncStatusChart.ts
+++ b/web/src/pages/admin-overview/charts/LDAPSyncStatusChart.ts
@@ -1,5 +1,5 @@
import { t } from "@lingui/macro";
-import { customElement } from "lit-element";
+import { customElement } from "lit/decorators";
import { SourcesApi, StatusEnum } from "@goauthentik/api";
import { DEFAULT_CONFIG } from "../../../api/Config";
import "../../../elements/forms/ConfirmationForm";
diff --git a/web/src/pages/admin-overview/charts/OutpostStatusChart.ts b/web/src/pages/admin-overview/charts/OutpostStatusChart.ts
index 54bd3f1bc..1b7b8ce68 100644
--- a/web/src/pages/admin-overview/charts/OutpostStatusChart.ts
+++ b/web/src/pages/admin-overview/charts/OutpostStatusChart.ts
@@ -1,5 +1,5 @@
import { t } from "@lingui/macro";
-import { customElement } from "lit-element";
+import { customElement } from "lit/decorators";
import { OutpostsApi } from "@goauthentik/api";
import { DEFAULT_CONFIG } from "../../../api/Config";
import "../../../elements/forms/ConfirmationForm";
diff --git a/web/src/pages/admin-overview/charts/PolicyStatusChart.ts b/web/src/pages/admin-overview/charts/PolicyStatusChart.ts
index 5ce453b0c..474b10aad 100644
--- a/web/src/pages/admin-overview/charts/PolicyStatusChart.ts
+++ b/web/src/pages/admin-overview/charts/PolicyStatusChart.ts
@@ -1,5 +1,5 @@
import { t } from "@lingui/macro";
-import { customElement } from "lit-element";
+import { customElement } from "lit/decorators";
import { PoliciesApi } from "@goauthentik/api";
import { DEFAULT_CONFIG } from "../../../api/Config";
import "../../../elements/forms/ConfirmationForm";
diff --git a/web/src/pages/admin-overview/charts/UserCountStatusChart.ts b/web/src/pages/admin-overview/charts/UserCountStatusChart.ts
index 484296365..147d1565c 100644
--- a/web/src/pages/admin-overview/charts/UserCountStatusChart.ts
+++ b/web/src/pages/admin-overview/charts/UserCountStatusChart.ts
@@ -1,4 +1,4 @@
-import { customElement } from "lit-element";
+import { customElement } from "lit/decorators";
import { CoreApi } from "@goauthentik/api";
import { DEFAULT_CONFIG } from "../../../api/Config";
import { AKChart } from "../../../elements/charts/Chart";
diff --git a/web/src/pages/applications/ApplicationCheckAccessForm.ts b/web/src/pages/applications/ApplicationCheckAccessForm.ts
index 61072fce0..e0a0219bb 100644
--- a/web/src/pages/applications/ApplicationCheckAccessForm.ts
+++ b/web/src/pages/applications/ApplicationCheckAccessForm.ts
@@ -1,10 +1,10 @@
import { Application, CoreApi, PolicyTestResult } from "@goauthentik/api";
import { t } from "@lingui/macro";
-import { customElement, property } from "lit-element";
-import { html, TemplateResult } from "lit-html";
+import { customElement, property } from "lit/decorators";
+import { html, TemplateResult } from "lit";
import { DEFAULT_CONFIG } from "../../api/Config";
import { Form } from "../../elements/forms/Form";
-import { until } from "lit-html/directives/until";
+import { until } from "lit/directives/until";
import "../../elements/forms/HorizontalFormElement";
@customElement("ak-application-check-access-form")
diff --git a/web/src/pages/applications/ApplicationForm.ts b/web/src/pages/applications/ApplicationForm.ts
index daee9c30d..85ff4faf8 100644
--- a/web/src/pages/applications/ApplicationForm.ts
+++ b/web/src/pages/applications/ApplicationForm.ts
@@ -7,11 +7,12 @@ import {
CapabilitiesEnum,
} from "@goauthentik/api";
import { t } from "@lingui/macro";
-import { CSSResult, customElement, property } from "lit-element";
-import { html, TemplateResult } from "lit-html";
+import { CSSResult } from "lit";
+import { customElement, property } from "lit/decorators";
+import { html, TemplateResult } from "lit";
import { config, DEFAULT_CONFIG } from "../../api/Config";
-import { until } from "lit-html/directives/until";
-import { ifDefined } from "lit-html/directives/if-defined";
+import { until } from "lit/directives/until";
+import { ifDefined } from "lit/directives/if-defined";
import "../../elements/buttons/Dropdown";
import "../../elements/Spinner";
import "../../elements/forms/ProxyForm";
diff --git a/web/src/pages/applications/ApplicationListPage.ts b/web/src/pages/applications/ApplicationListPage.ts
index bbe28a03a..0b15e3c98 100644
--- a/web/src/pages/applications/ApplicationListPage.ts
+++ b/web/src/pages/applications/ApplicationListPage.ts
@@ -1,5 +1,6 @@
import { t } from "@lingui/macro";
-import { css, CSSResult, customElement, html, property, TemplateResult } from "lit-element";
+import { css, CSSResult, html, TemplateResult } from "lit";
+import { customElement, property } from "lit/decorators";
import PFAvatar from "@patternfly/patternfly/components/Avatar/avatar.css";
import { AKResponse } from "../../api/Client";
import { TablePage } from "../../elements/table/TablePage";
diff --git a/web/src/pages/applications/ApplicationViewPage.ts b/web/src/pages/applications/ApplicationViewPage.ts
index 4370c8387..131f01a60 100644
--- a/web/src/pages/applications/ApplicationViewPage.ts
+++ b/web/src/pages/applications/ApplicationViewPage.ts
@@ -1,5 +1,6 @@
import { t } from "@lingui/macro";
-import { CSSResult, customElement, html, LitElement, property, TemplateResult } from "lit-element";
+import { CSSResult, html, LitElement, TemplateResult } from "lit";
+import { customElement, property } from "lit/decorators";
import "../../elements/Tabs";
import "../../elements/charts/ApplicationAuthorizeChart";
@@ -20,7 +21,7 @@ import PFBase from "@patternfly/patternfly/patternfly-base.css";
import PFButton from "@patternfly/patternfly/components/Button/button.css";
import PFDescriptionList from "@patternfly/patternfly/components/DescriptionList/description-list.css";
import AKGlobal from "../../authentik.css";
-import { ifDefined } from "lit-html/directives/if-defined";
+import { ifDefined } from "lit/directives/if-defined";
@customElement("ak-application-view")
export class ApplicationViewPage extends LitElement {
diff --git a/web/src/pages/crypto/CertificateGenerateForm.ts b/web/src/pages/crypto/CertificateGenerateForm.ts
index 4404d88f0..ebd9a0d35 100644
--- a/web/src/pages/crypto/CertificateGenerateForm.ts
+++ b/web/src/pages/crypto/CertificateGenerateForm.ts
@@ -1,7 +1,7 @@
import { CertificateGenerationRequest, CertificateKeyPair, CryptoApi } from "@goauthentik/api";
import { t } from "@lingui/macro";
-import { customElement } from "lit-element";
-import { html, TemplateResult } from "lit-html";
+import { customElement } from "lit/decorators";
+import { html, TemplateResult } from "lit";
import { DEFAULT_CONFIG } from "../../api/Config";
import { Form } from "../../elements/forms/Form";
import "../../elements/forms/HorizontalFormElement";
diff --git a/web/src/pages/crypto/CertificateKeyPairForm.ts b/web/src/pages/crypto/CertificateKeyPairForm.ts
index 9330b47f2..6a8d268fe 100644
--- a/web/src/pages/crypto/CertificateKeyPairForm.ts
+++ b/web/src/pages/crypto/CertificateKeyPairForm.ts
@@ -1,9 +1,9 @@
import { CertificateKeyPair, CertificateKeyPairRequest, CryptoApi } from "@goauthentik/api";
import { t } from "@lingui/macro";
-import { customElement } from "lit-element";
-import { html, TemplateResult } from "lit-html";
+import { customElement } from "lit/decorators";
+import { html, TemplateResult } from "lit";
import { DEFAULT_CONFIG } from "../../api/Config";
-import { ifDefined } from "lit-html/directives/if-defined";
+import { ifDefined } from "lit/directives/if-defined";
import "../../elements/forms/HorizontalFormElement";
import "../../elements/CodeMirror";
import { ModelForm } from "../../elements/forms/ModelForm";
diff --git a/web/src/pages/crypto/CertificateKeyPairListPage.ts b/web/src/pages/crypto/CertificateKeyPairListPage.ts
index dbd5d666b..6ed34ac09 100644
--- a/web/src/pages/crypto/CertificateKeyPairListPage.ts
+++ b/web/src/pages/crypto/CertificateKeyPairListPage.ts
@@ -1,5 +1,6 @@
import { t } from "@lingui/macro";
-import { CSSResult, customElement, html, property, TemplateResult } from "lit-element";
+import { CSSResult, html, TemplateResult } from "lit";
+import { customElement, property } from "lit/decorators";
import { AKResponse } from "../../api/Client";
import { TablePage } from "../../elements/table/TablePage";
import PFDescriptionList from "@patternfly/patternfly/components/DescriptionList/description-list.css";
diff --git a/web/src/pages/events/EventInfo.ts b/web/src/pages/events/EventInfo.ts
index 5bb86ee8a..b324442d6 100644
--- a/web/src/pages/events/EventInfo.ts
+++ b/web/src/pages/events/EventInfo.ts
@@ -1,14 +1,7 @@
import { t } from "@lingui/macro";
-import {
- css,
- CSSResult,
- customElement,
- html,
- LitElement,
- property,
- TemplateResult,
-} from "lit-element";
-import { until } from "lit-html/directives/until";
+import { css, CSSResult, html, LitElement, TemplateResult } from "lit";
+import { customElement, property } from "lit/decorators";
+import { until } from "lit/directives/until";
import { EventActions, FlowsApi } from "@goauthentik/api";
import "../../elements/Spinner";
import "../../elements/Expand";
diff --git a/web/src/pages/events/EventInfoPage.ts b/web/src/pages/events/EventInfoPage.ts
index 254f14188..525a50a5d 100644
--- a/web/src/pages/events/EventInfoPage.ts
+++ b/web/src/pages/events/EventInfoPage.ts
@@ -1,5 +1,6 @@
import { t } from "@lingui/macro";
-import { CSSResult, customElement, html, LitElement, property, TemplateResult } from "lit-element";
+import { CSSResult, html, LitElement, TemplateResult } from "lit";
+import { customElement, property } from "lit/decorators";
import { EventsApi } from "@goauthentik/api";
import { DEFAULT_CONFIG } from "../../api/Config";
import { EventWithContext } from "../../api/Events";
diff --git a/web/src/pages/events/EventListPage.ts b/web/src/pages/events/EventListPage.ts
index 5931e2999..e3d9d62df 100644
--- a/web/src/pages/events/EventListPage.ts
+++ b/web/src/pages/events/EventListPage.ts
@@ -1,5 +1,6 @@
import { t } from "@lingui/macro";
-import { customElement, html, property, TemplateResult } from "lit-element";
+import { html, TemplateResult } from "lit";
+import { customElement, property } from "lit/decorators";
import { Event, EventsApi } from "@goauthentik/api";
import { AKResponse } from "../../api/Client";
import { DEFAULT_CONFIG } from "../../api/Config";
diff --git a/web/src/pages/events/RuleForm.ts b/web/src/pages/events/RuleForm.ts
index b7bbb495b..2772219c2 100644
--- a/web/src/pages/events/RuleForm.ts
+++ b/web/src/pages/events/RuleForm.ts
@@ -1,11 +1,11 @@
import { CoreApi, EventsApi, NotificationRule, SeverityEnum } from "@goauthentik/api";
import { t } from "@lingui/macro";
-import { customElement } from "lit-element";
-import { html, TemplateResult } from "lit-html";
+import { customElement } from "lit/decorators";
+import { html, TemplateResult } from "lit";
import { DEFAULT_CONFIG } from "../../api/Config";
-import { ifDefined } from "lit-html/directives/if-defined";
+import { ifDefined } from "lit/directives/if-defined";
import "../../elements/forms/HorizontalFormElement";
-import { until } from "lit-html/directives/until";
+import { until } from "lit/directives/until";
import { ModelForm } from "../../elements/forms/ModelForm";
@customElement("ak-event-rule-form")
diff --git a/web/src/pages/events/RuleListPage.ts b/web/src/pages/events/RuleListPage.ts
index 5270627c8..b1bd8194b 100644
--- a/web/src/pages/events/RuleListPage.ts
+++ b/web/src/pages/events/RuleListPage.ts
@@ -1,5 +1,6 @@
import { t } from "@lingui/macro";
-import { customElement, html, property, TemplateResult } from "lit-element";
+import { html, TemplateResult } from "lit";
+import { customElement, property } from "lit/decorators";
import { AKResponse } from "../../api/Client";
import { TablePage } from "../../elements/table/TablePage";
diff --git a/web/src/pages/events/TransportForm.ts b/web/src/pages/events/TransportForm.ts
index 42d0abb59..c9acdc820 100644
--- a/web/src/pages/events/TransportForm.ts
+++ b/web/src/pages/events/TransportForm.ts
@@ -5,14 +5,14 @@ import {
PropertymappingsApi,
} from "@goauthentik/api";
import { t } from "@lingui/macro";
-import { customElement, property } from "lit-element";
-import { html, TemplateResult } from "lit-html";
+import { customElement, property } from "lit/decorators";
+import { html, TemplateResult } from "lit";
import { DEFAULT_CONFIG } from "../../api/Config";
-import { ifDefined } from "lit-html/directives/if-defined";
+import { ifDefined } from "lit/directives/if-defined";
import "../../elements/forms/HorizontalFormElement";
import { first } from "../../utils";
import { ModelForm } from "../../elements/forms/ModelForm";
-import { until } from "lit-html/directives/until";
+import { until } from "lit/directives/until";
@customElement("ak-event-transport-form")
export class TransportForm extends ModelForm {
diff --git a/web/src/pages/events/TransportListPage.ts b/web/src/pages/events/TransportListPage.ts
index 95a1a5bd0..00f3c1da6 100644
--- a/web/src/pages/events/TransportListPage.ts
+++ b/web/src/pages/events/TransportListPage.ts
@@ -1,5 +1,6 @@
import { t } from "@lingui/macro";
-import { customElement, html, property, TemplateResult } from "lit-element";
+import { html, TemplateResult } from "lit";
+import { customElement, property } from "lit/decorators";
import { AKResponse } from "../../api/Client";
import { TablePage } from "../../elements/table/TablePage";
diff --git a/web/src/pages/flows/BoundStagesList.ts b/web/src/pages/flows/BoundStagesList.ts
index 4c30865de..343d79263 100644
--- a/web/src/pages/flows/BoundStagesList.ts
+++ b/web/src/pages/flows/BoundStagesList.ts
@@ -1,5 +1,6 @@
import { t } from "@lingui/macro";
-import { customElement, html, property, TemplateResult } from "lit-element";
+import { html, TemplateResult } from "lit";
+import { customElement, property } from "lit/decorators";
import { AKResponse } from "../../api/Client";
import { Table, TableColumn } from "../../elements/table/Table";
@@ -11,11 +12,11 @@ import "../../elements/Tabs";
import "../../elements/buttons/SpinnerButton";
import "../../elements/buttons/Dropdown";
import "../policies/BoundPoliciesList";
-import { until } from "lit-html/directives/until";
+import { until } from "lit/directives/until";
import { PAGE_SIZE } from "../../constants";
import { FlowsApi, FlowStageBinding, StagesApi } from "@goauthentik/api";
import { DEFAULT_CONFIG } from "../../api/Config";
-import { ifDefined } from "lit-html/directives/if-defined";
+import { ifDefined } from "lit/directives/if-defined";
@customElement("ak-bound-stages-list")
export class BoundStagesList extends Table {
diff --git a/web/src/pages/flows/FlowDiagram.ts b/web/src/pages/flows/FlowDiagram.ts
index f211b58c8..6c29ddb8e 100644
--- a/web/src/pages/flows/FlowDiagram.ts
+++ b/web/src/pages/flows/FlowDiagram.ts
@@ -1,4 +1,5 @@
-import { customElement, html, LitElement, property, TemplateResult } from "lit-element";
+import { html, LitElement, TemplateResult } from "lit";
+import { customElement, property } from "lit/decorators";
import FlowChart from "flowchart.js";
import { loading } from "../../utils";
import { FlowsApi } from "@goauthentik/api";
diff --git a/web/src/pages/flows/FlowForm.ts b/web/src/pages/flows/FlowForm.ts
index bf1863616..b2e163a7f 100644
--- a/web/src/pages/flows/FlowForm.ts
+++ b/web/src/pages/flows/FlowForm.ts
@@ -6,13 +6,13 @@ import {
CapabilitiesEnum,
} from "@goauthentik/api";
import { t } from "@lingui/macro";
-import { customElement, property } from "lit-element";
-import { html, TemplateResult } from "lit-html";
+import { customElement, property } from "lit/decorators";
+import { html, TemplateResult } from "lit";
import { config, DEFAULT_CONFIG } from "../../api/Config";
-import { ifDefined } from "lit-html/directives/if-defined";
+import { ifDefined } from "lit/directives/if-defined";
import "../../elements/forms/HorizontalFormElement";
import { ModelForm } from "../../elements/forms/ModelForm";
-import { until } from "lit-html/directives/until";
+import { until } from "lit/directives/until";
import { first } from "../../utils";
@customElement("ak-flow-form")
diff --git a/web/src/pages/flows/FlowImportForm.ts b/web/src/pages/flows/FlowImportForm.ts
index 066a2e9ce..ae61f61a9 100644
--- a/web/src/pages/flows/FlowImportForm.ts
+++ b/web/src/pages/flows/FlowImportForm.ts
@@ -1,7 +1,7 @@
import { Flow, FlowsApi } from "@goauthentik/api";
import { t } from "@lingui/macro";
-import { customElement } from "lit-element";
-import { html, TemplateResult } from "lit-html";
+import { customElement } from "lit/decorators";
+import { html, TemplateResult } from "lit";
import { DEFAULT_CONFIG } from "../../api/Config";
import { Form } from "../../elements/forms/Form";
import "../../elements/forms/HorizontalFormElement";
diff --git a/web/src/pages/flows/FlowListPage.ts b/web/src/pages/flows/FlowListPage.ts
index ba451bbba..a8e76a90a 100644
--- a/web/src/pages/flows/FlowListPage.ts
+++ b/web/src/pages/flows/FlowListPage.ts
@@ -1,5 +1,6 @@
import { t } from "@lingui/macro";
-import { customElement, html, property, TemplateResult } from "lit-element";
+import { html, TemplateResult } from "lit";
+import { customElement, property } from "lit/decorators";
import { AKResponse } from "../../api/Client";
import { TablePage } from "../../elements/table/TablePage";
diff --git a/web/src/pages/flows/FlowViewPage.ts b/web/src/pages/flows/FlowViewPage.ts
index d1e336ced..7245b3cf5 100644
--- a/web/src/pages/flows/FlowViewPage.ts
+++ b/web/src/pages/flows/FlowViewPage.ts
@@ -1,14 +1,6 @@
import { t } from "@lingui/macro";
-import {
- css,
- CSSResult,
- customElement,
- html,
- LitElement,
- property,
- TemplateResult,
-} from "lit-element";
-
+import { css, CSSResult, html, LitElement, TemplateResult } from "lit";
+import { customElement, property } from "lit/decorators";
import "../../elements/Tabs";
import "../../elements/PageHeader";
import "../../elements/events/ObjectChangelog";
diff --git a/web/src/pages/flows/StageBindingForm.ts b/web/src/pages/flows/StageBindingForm.ts
index cd6972170..342c3f9d6 100644
--- a/web/src/pages/flows/StageBindingForm.ts
+++ b/web/src/pages/flows/StageBindingForm.ts
@@ -7,11 +7,11 @@ import {
StagesApi,
} from "@goauthentik/api";
import { t } from "@lingui/macro";
-import { customElement, property } from "lit-element";
-import { html, TemplateResult } from "lit-html";
+import { customElement, property } from "lit/decorators";
+import { html, TemplateResult } from "lit";
import { DEFAULT_CONFIG } from "../../api/Config";
-import { until } from "lit-html/directives/until";
-import { ifDefined } from "lit-html/directives/if-defined";
+import { until } from "lit/directives/until";
+import { ifDefined } from "lit/directives/if-defined";
import "../../elements/forms/HorizontalFormElement";
import { first, groupBy } from "../../utils";
import { ModelForm } from "../../elements/forms/ModelForm";
@@ -131,6 +131,7 @@ export class StageBindingForm extends ModelForm {
+
{
+
{
diff --git a/web/src/pages/outposts/ServiceConnectionDockerForm.ts b/web/src/pages/outposts/ServiceConnectionDockerForm.ts
index 542f0dee3..0b5d42014 100644
--- a/web/src/pages/outposts/ServiceConnectionDockerForm.ts
+++ b/web/src/pages/outposts/ServiceConnectionDockerForm.ts
@@ -1,10 +1,10 @@
import { CryptoApi, DockerServiceConnection, OutpostsApi } from "@goauthentik/api";
import { t } from "@lingui/macro";
-import { customElement } from "lit-element";
-import { html, TemplateResult } from "lit-html";
+import { customElement } from "lit/decorators";
+import { html, TemplateResult } from "lit";
import { DEFAULT_CONFIG } from "../../api/Config";
-import { until } from "lit-html/directives/until";
-import { ifDefined } from "lit-html/directives/if-defined";
+import { until } from "lit/directives/until";
+import { ifDefined } from "lit/directives/if-defined";
import "../../elements/forms/HorizontalFormElement";
import { first } from "../../utils";
import { ModelForm } from "../../elements/forms/ModelForm";
diff --git a/web/src/pages/outposts/ServiceConnectionKubernetesForm.ts b/web/src/pages/outposts/ServiceConnectionKubernetesForm.ts
index b02b42a8a..541b4831e 100644
--- a/web/src/pages/outposts/ServiceConnectionKubernetesForm.ts
+++ b/web/src/pages/outposts/ServiceConnectionKubernetesForm.ts
@@ -1,9 +1,9 @@
import { KubernetesServiceConnection, OutpostsApi } from "@goauthentik/api";
import { t } from "@lingui/macro";
-import { customElement } from "lit-element";
-import { html, TemplateResult } from "lit-html";
+import { customElement } from "lit/decorators";
+import { html, TemplateResult } from "lit";
import { DEFAULT_CONFIG } from "../../api/Config";
-import { ifDefined } from "lit-html/directives/if-defined";
+import { ifDefined } from "lit/directives/if-defined";
import "../../elements/forms/HorizontalFormElement";
import "../../elements/CodeMirror";
import YAML from "yaml";
diff --git a/web/src/pages/outposts/ServiceConnectionListPage.ts b/web/src/pages/outposts/ServiceConnectionListPage.ts
index ec7a0140b..0cedfbecf 100644
--- a/web/src/pages/outposts/ServiceConnectionListPage.ts
+++ b/web/src/pages/outposts/ServiceConnectionListPage.ts
@@ -1,6 +1,6 @@
import { t } from "@lingui/macro";
-import { customElement, property } from "lit-element";
-import { html, TemplateResult } from "lit-html";
+import { customElement, property } from "lit/decorators";
+import { html, TemplateResult } from "lit";
import { AKResponse } from "../../api/Client";
import { TableColumn } from "../../elements/table/Table";
import { TablePage } from "../../elements/table/TablePage";
@@ -12,12 +12,12 @@ import "../../elements/forms/DeleteBulkForm";
import "../../elements/forms/ModalForm";
import "./ServiceConnectionKubernetesForm";
import "./ServiceConnectionDockerForm";
-import { until } from "lit-html/directives/until";
+import { until } from "lit/directives/until";
import { PAGE_SIZE } from "../../constants";
import { OutpostsApi, ServiceConnection } from "@goauthentik/api";
import { DEFAULT_CONFIG } from "../../api/Config";
import "../../elements/forms/ProxyForm";
-import { ifDefined } from "lit-html/directives/if-defined";
+import { ifDefined } from "lit/directives/if-defined";
import { PFColor } from "../../elements/Label";
@customElement("ak-outpost-service-connection-list")
diff --git a/web/src/pages/policies/BoundPoliciesList.ts b/web/src/pages/policies/BoundPoliciesList.ts
index 429b51914..8b4863d1f 100644
--- a/web/src/pages/policies/BoundPoliciesList.ts
+++ b/web/src/pages/policies/BoundPoliciesList.ts
@@ -1,5 +1,6 @@
import { t } from "@lingui/macro";
-import { customElement, html, property, TemplateResult } from "lit-element";
+import { html, TemplateResult } from "lit";
+import { customElement, property } from "lit/decorators";
import { AKResponse } from "../../api/Client";
import { Table, TableColumn } from "../../elements/table/Table";
import { PoliciesApi, PolicyBinding } from "@goauthentik/api";
@@ -9,7 +10,7 @@ import "../../elements/Tabs";
import "../../elements/forms/ProxyForm";
import "../../elements/buttons/SpinnerButton";
import "../../elements/buttons/Dropdown";
-import { until } from "lit-html/directives/until";
+import { until } from "lit/directives/until";
import { PAGE_SIZE } from "../../constants";
import { DEFAULT_CONFIG } from "../../api/Config";
@@ -17,7 +18,7 @@ import "../../elements/forms/ModalForm";
import "../groups/GroupForm";
import "../users/UserForm";
import "./PolicyBindingForm";
-import { ifDefined } from "lit-html/directives/if-defined";
+import { ifDefined } from "lit/directives/if-defined";
import { PFSize } from "../../elements/Spinner";
@customElement("ak-bound-policies-list")
diff --git a/web/src/pages/policies/PolicyBindingForm.ts b/web/src/pages/policies/PolicyBindingForm.ts
index 0677c3656..e9730566e 100644
--- a/web/src/pages/policies/PolicyBindingForm.ts
+++ b/web/src/pages/policies/PolicyBindingForm.ts
@@ -1,10 +1,11 @@
import { CoreApi, PoliciesApi, Policy, PolicyBinding } from "@goauthentik/api";
import { t } from "@lingui/macro";
-import { css, CSSResult, customElement, property } from "lit-element";
-import { html, TemplateResult } from "lit-html";
+import { css, CSSResult } from "lit";
+import { customElement, property } from "lit/decorators";
+import { html, TemplateResult } from "lit";
import { DEFAULT_CONFIG } from "../../api/Config";
-import { until } from "lit-html/directives/until";
-import { ifDefined } from "lit-html/directives/if-defined";
+import { until } from "lit/directives/until";
+import { ifDefined } from "lit/directives/if-defined";
import { first, groupBy } from "../../utils";
import "../../elements/forms/HorizontalFormElement";
import PFToggleGroup from "@patternfly/patternfly/components/ToggleGroup/toggle-group.css";
@@ -280,6 +281,7 @@ export class PolicyBindingForm extends ModelForm {
+
{
diff --git a/web/src/pages/property-mappings/PropertyMappingNotification.ts b/web/src/pages/property-mappings/PropertyMappingNotification.ts
index f2ae5e36f..bce843c71 100644
--- a/web/src/pages/property-mappings/PropertyMappingNotification.ts
+++ b/web/src/pages/property-mappings/PropertyMappingNotification.ts
@@ -1,9 +1,9 @@
import { NotificationWebhookMapping, PropertymappingsApi } from "@goauthentik/api";
import { t } from "@lingui/macro";
-import { customElement } from "lit-element";
-import { html, TemplateResult } from "lit-html";
+import { customElement } from "lit/decorators";
+import { html, TemplateResult } from "lit";
import { DEFAULT_CONFIG } from "../../api/Config";
-import { ifDefined } from "lit-html/directives/if-defined";
+import { ifDefined } from "lit/directives/if-defined";
import "../../elements/forms/HorizontalFormElement";
import "../../elements/CodeMirror";
import { ModelForm } from "../../elements/forms/ModelForm";
diff --git a/web/src/pages/property-mappings/PropertyMappingSAMLForm.ts b/web/src/pages/property-mappings/PropertyMappingSAMLForm.ts
index 423729f7f..d14247cac 100644
--- a/web/src/pages/property-mappings/PropertyMappingSAMLForm.ts
+++ b/web/src/pages/property-mappings/PropertyMappingSAMLForm.ts
@@ -1,9 +1,9 @@
import { SAMLPropertyMapping, PropertymappingsApi } from "@goauthentik/api";
import { t } from "@lingui/macro";
-import { customElement } from "lit-element";
-import { html, TemplateResult } from "lit-html";
+import { customElement } from "lit/decorators";
+import { html, TemplateResult } from "lit";
import { DEFAULT_CONFIG } from "../../api/Config";
-import { ifDefined } from "lit-html/directives/if-defined";
+import { ifDefined } from "lit/directives/if-defined";
import "../../elements/forms/HorizontalFormElement";
import "../../elements/CodeMirror";
import { ModelForm } from "../../elements/forms/ModelForm";
diff --git a/web/src/pages/property-mappings/PropertyMappingScopeForm.ts b/web/src/pages/property-mappings/PropertyMappingScopeForm.ts
index 0783ec5f4..aca4a8f77 100644
--- a/web/src/pages/property-mappings/PropertyMappingScopeForm.ts
+++ b/web/src/pages/property-mappings/PropertyMappingScopeForm.ts
@@ -1,10 +1,10 @@
import { ScopeMapping, PropertymappingsApi } from "@goauthentik/api";
import { t } from "@lingui/macro";
-import { customElement } from "lit-element";
-import { html, TemplateResult } from "lit-html";
+import { customElement } from "lit/decorators";
+import { html, TemplateResult } from "lit";
import { DEFAULT_CONFIG } from "../../api/Config";
import { ModelForm } from "../../elements/forms/ModelForm";
-import { ifDefined } from "lit-html/directives/if-defined";
+import { ifDefined } from "lit/directives/if-defined";
import "../../elements/forms/HorizontalFormElement";
import "../../elements/CodeMirror";
diff --git a/web/src/pages/property-mappings/PropertyMappingTestForm.ts b/web/src/pages/property-mappings/PropertyMappingTestForm.ts
index ddc82a28e..fb4217ee8 100644
--- a/web/src/pages/property-mappings/PropertyMappingTestForm.ts
+++ b/web/src/pages/property-mappings/PropertyMappingTestForm.ts
@@ -6,12 +6,12 @@ import {
PropertyMappingTestResult,
} from "@goauthentik/api";
import { t } from "@lingui/macro";
-import { customElement, property } from "lit-element";
-import { html, TemplateResult } from "lit-html";
+import { customElement, property } from "lit/decorators";
+import { html, TemplateResult } from "lit";
import { DEFAULT_CONFIG } from "../../api/Config";
import { Form } from "../../elements/forms/Form";
-import { until } from "lit-html/directives/until";
-import { ifDefined } from "lit-html/directives/if-defined";
+import { until } from "lit/directives/until";
+import { ifDefined } from "lit/directives/if-defined";
import "../../elements/forms/HorizontalFormElement";
import "../../elements/CodeMirror";
import YAML from "yaml";
diff --git a/web/src/pages/providers/ProviderListPage.ts b/web/src/pages/providers/ProviderListPage.ts
index f1189233a..e2a3173d1 100644
--- a/web/src/pages/providers/ProviderListPage.ts
+++ b/web/src/pages/providers/ProviderListPage.ts
@@ -1,5 +1,6 @@
import { t } from "@lingui/macro";
-import { customElement, html, property, TemplateResult } from "lit-element";
+import { html, TemplateResult } from "lit";
+import { customElement, property } from "lit/decorators";
import { AKResponse } from "../../api/Client";
import { TablePage } from "../../elements/table/TablePage";
@@ -14,11 +15,11 @@ import "./proxy/ProxyProviderForm";
import "./saml/SAMLProviderForm";
import "./saml/SAMLProviderImportForm";
import { TableColumn } from "../../elements/table/Table";
-import { until } from "lit-html/directives/until";
+import { until } from "lit/directives/until";
import { PAGE_SIZE } from "../../constants";
import { Provider, ProvidersApi } from "@goauthentik/api";
import { DEFAULT_CONFIG } from "../../api/Config";
-import { ifDefined } from "lit-html/directives/if-defined";
+import { ifDefined } from "lit/directives/if-defined";
@customElement("ak-provider-list")
export class ProviderListPage extends TablePage {
diff --git a/web/src/pages/providers/ProviderViewPage.ts b/web/src/pages/providers/ProviderViewPage.ts
index f6cff18d9..2457ff16f 100644
--- a/web/src/pages/providers/ProviderViewPage.ts
+++ b/web/src/pages/providers/ProviderViewPage.ts
@@ -1,4 +1,5 @@
-import { customElement, html, LitElement, property, TemplateResult } from "lit-element";
+import { html, LitElement, TemplateResult } from "lit";
+import { customElement, property } from "lit/decorators";
import "../../elements/buttons/SpinnerButton";
import "../../elements/EmptyState";
@@ -10,7 +11,7 @@ import "./proxy/ProxyProviderViewPage";
import "./ldap/LDAPProviderViewPage";
import { Provider, ProvidersApi } from "@goauthentik/api";
import { DEFAULT_CONFIG } from "../../api/Config";
-import { ifDefined } from "lit-html/directives/if-defined";
+import { ifDefined } from "lit/directives/if-defined";
@customElement("ak-provider-view")
export class ProviderViewPage extends LitElement {
diff --git a/web/src/pages/providers/RelatedApplicationButton.ts b/web/src/pages/providers/RelatedApplicationButton.ts
index 2e6574f6d..084a7a7f4 100644
--- a/web/src/pages/providers/RelatedApplicationButton.ts
+++ b/web/src/pages/providers/RelatedApplicationButton.ts
@@ -1,5 +1,6 @@
import { t } from "@lingui/macro";
-import { CSSResult, customElement, html, LitElement, property, TemplateResult } from "lit-element";
+import { CSSResult, html, LitElement, TemplateResult } from "lit";
+import { customElement, property } from "lit/decorators";
import { Provider } from "@goauthentik/api";
import PFBase from "@patternfly/patternfly/patternfly-base.css";
import PFButton from "@patternfly/patternfly/components/Button/button.css";
diff --git a/web/src/pages/providers/ldap/LDAPProviderForm.ts b/web/src/pages/providers/ldap/LDAPProviderForm.ts
index 218237e44..09e09bff6 100644
--- a/web/src/pages/providers/ldap/LDAPProviderForm.ts
+++ b/web/src/pages/providers/ldap/LDAPProviderForm.ts
@@ -7,12 +7,12 @@ import {
CryptoApi,
} from "@goauthentik/api";
import { t } from "@lingui/macro";
-import { customElement } from "lit-element";
-import { html, TemplateResult } from "lit-html";
+import { customElement } from "lit/decorators";
+import { html, TemplateResult } from "lit";
import { DEFAULT_CONFIG, tenant } from "../../../api/Config";
import { ModelForm } from "../../../elements/forms/ModelForm";
-import { until } from "lit-html/directives/until";
-import { ifDefined } from "lit-html/directives/if-defined";
+import { until } from "lit/directives/until";
+import { ifDefined } from "lit/directives/if-defined";
import "../../../elements/forms/HorizontalFormElement";
import "../../../elements/forms/FormGroup";
import { first } from "../../../utils";
diff --git a/web/src/pages/providers/ldap/LDAPProviderViewPage.ts b/web/src/pages/providers/ldap/LDAPProviderViewPage.ts
index e5f3a8461..eb434a2c8 100644
--- a/web/src/pages/providers/ldap/LDAPProviderViewPage.ts
+++ b/web/src/pages/providers/ldap/LDAPProviderViewPage.ts
@@ -1,5 +1,6 @@
import { t } from "@lingui/macro";
-import { CSSResult, customElement, html, LitElement, property, TemplateResult } from "lit-element";
+import { CSSResult, html, LitElement, TemplateResult } from "lit";
+import { customElement, property } from "lit/decorators";
import PFButton from "@patternfly/patternfly/components/Button/button.css";
import PFPage from "@patternfly/patternfly/components/Page/page.css";
import PFContent from "@patternfly/patternfly/components/Content/content.css";
diff --git a/web/src/pages/providers/oauth2/OAuth2ProviderForm.ts b/web/src/pages/providers/oauth2/OAuth2ProviderForm.ts
index cdeb696e8..1926a3742 100644
--- a/web/src/pages/providers/oauth2/OAuth2ProviderForm.ts
+++ b/web/src/pages/providers/oauth2/OAuth2ProviderForm.ts
@@ -11,12 +11,12 @@ import {
FlowsInstancesListDesignationEnum,
} from "@goauthentik/api";
import { t } from "@lingui/macro";
-import { customElement, property } from "lit-element";
-import { html, TemplateResult } from "lit-html";
+import { customElement, property } from "lit/decorators";
+import { html, TemplateResult } from "lit";
import { DEFAULT_CONFIG } from "../../../api/Config";
import { ModelForm } from "../../../elements/forms/ModelForm";
-import { until } from "lit-html/directives/until";
-import { ifDefined } from "lit-html/directives/if-defined";
+import { until } from "lit/directives/until";
+import { ifDefined } from "lit/directives/if-defined";
import "../../../elements/forms/HorizontalFormElement";
import "../../../elements/forms/FormGroup";
import { first, randomString } from "../../../utils";
diff --git a/web/src/pages/providers/oauth2/OAuth2ProviderViewPage.ts b/web/src/pages/providers/oauth2/OAuth2ProviderViewPage.ts
index a87a53196..d952564ca 100644
--- a/web/src/pages/providers/oauth2/OAuth2ProviderViewPage.ts
+++ b/web/src/pages/providers/oauth2/OAuth2ProviderViewPage.ts
@@ -1,5 +1,6 @@
import { t } from "@lingui/macro";
-import { CSSResult, customElement, html, LitElement, property, TemplateResult } from "lit-element";
+import { CSSResult, html, LitElement, TemplateResult } from "lit";
+import { customElement, property } from "lit/decorators";
import PFButton from "@patternfly/patternfly/components/Button/button.css";
import PFPage from "@patternfly/patternfly/components/Page/page.css";
import PFContent from "@patternfly/patternfly/components/Content/content.css";
diff --git a/web/src/pages/providers/proxy/ProxyProviderForm.ts b/web/src/pages/providers/proxy/ProxyProviderForm.ts
index e3566efca..0a0736987 100644
--- a/web/src/pages/providers/proxy/ProxyProviderForm.ts
+++ b/web/src/pages/providers/proxy/ProxyProviderForm.ts
@@ -7,15 +7,16 @@ import {
ProxyProvider,
} from "@goauthentik/api";
import { t } from "@lingui/macro";
-import { css, CSSResult, customElement, property } from "lit-element";
-import { html, TemplateResult } from "lit-html";
+import { css, CSSResult } from "lit";
+import { customElement, property } from "lit/decorators";
+import { html, TemplateResult } from "lit";
import { DEFAULT_CONFIG } from "../../../api/Config";
import { ModelForm } from "../../../elements/forms/ModelForm";
import PFToggleGroup from "@patternfly/patternfly/components/ToggleGroup/toggle-group.css";
import PFContent from "@patternfly/patternfly/components/Content/content.css";
import PFSpacing from "@patternfly/patternfly/utilities/Spacing/spacing.css";
-import { until } from "lit-html/directives/until";
-import { ifDefined } from "lit-html/directives/if-defined";
+import { until } from "lit/directives/until";
+import { ifDefined } from "lit/directives/if-defined";
import "../../../elements/forms/HorizontalFormElement";
import "../../../elements/forms/FormGroup";
import { first } from "../../../utils";
diff --git a/web/src/pages/providers/proxy/ProxyProviderViewPage.ts b/web/src/pages/providers/proxy/ProxyProviderViewPage.ts
index 830050925..83a512454 100644
--- a/web/src/pages/providers/proxy/ProxyProviderViewPage.ts
+++ b/web/src/pages/providers/proxy/ProxyProviderViewPage.ts
@@ -1,5 +1,6 @@
import { t } from "@lingui/macro";
-import { CSSResult, customElement, html, LitElement, property, TemplateResult } from "lit-element";
+import { CSSResult, html, LitElement, TemplateResult } from "lit";
+import { customElement, property } from "lit/decorators";
import PFButton from "@patternfly/patternfly/components/Button/button.css";
import PFPage from "@patternfly/patternfly/components/Page/page.css";
import PFContent from "@patternfly/patternfly/components/Content/content.css";
diff --git a/web/src/pages/providers/saml/SAMLProviderForm.ts b/web/src/pages/providers/saml/SAMLProviderForm.ts
index 135e2960d..f0bdb98e5 100644
--- a/web/src/pages/providers/saml/SAMLProviderForm.ts
+++ b/web/src/pages/providers/saml/SAMLProviderForm.ts
@@ -10,12 +10,12 @@ import {
FlowsInstancesListDesignationEnum,
} from "@goauthentik/api";
import { t } from "@lingui/macro";
-import { customElement } from "lit-element";
-import { html, TemplateResult } from "lit-html";
+import { customElement } from "lit/decorators";
+import { html, TemplateResult } from "lit";
import { DEFAULT_CONFIG } from "../../../api/Config";
import { ModelForm } from "../../../elements/forms/ModelForm";
-import { until } from "lit-html/directives/until";
-import { ifDefined } from "lit-html/directives/if-defined";
+import { until } from "lit/directives/until";
+import { ifDefined } from "lit/directives/if-defined";
import "../../../elements/forms/HorizontalFormElement";
import "../../../elements/forms/FormGroup";
diff --git a/web/src/pages/providers/saml/SAMLProviderImportForm.ts b/web/src/pages/providers/saml/SAMLProviderImportForm.ts
index 09ad4d787..de6c53763 100644
--- a/web/src/pages/providers/saml/SAMLProviderImportForm.ts
+++ b/web/src/pages/providers/saml/SAMLProviderImportForm.ts
@@ -5,9 +5,9 @@ import {
SAMLProvider,
} from "@goauthentik/api";
import { t } from "@lingui/macro";
-import { customElement } from "lit-element";
-import { html, TemplateResult } from "lit-html";
-import { until } from "lit-html/directives/until";
+import { customElement } from "lit/decorators";
+import { html, TemplateResult } from "lit";
+import { until } from "lit/directives/until";
import { DEFAULT_CONFIG } from "../../../api/Config";
import { Form } from "../../../elements/forms/Form";
import "../../../elements/forms/HorizontalFormElement";
diff --git a/web/src/pages/providers/saml/SAMLProviderViewPage.ts b/web/src/pages/providers/saml/SAMLProviderViewPage.ts
index cec8e3ef6..3826c947d 100644
--- a/web/src/pages/providers/saml/SAMLProviderViewPage.ts
+++ b/web/src/pages/providers/saml/SAMLProviderViewPage.ts
@@ -1,6 +1,7 @@
import { t } from "@lingui/macro";
-import { CSSResult, customElement, html, LitElement, property, TemplateResult } from "lit-element";
-import { until } from "lit-html/directives/until";
+import { CSSResult, html, LitElement, TemplateResult } from "lit";
+import { customElement, property } from "lit/decorators";
+import { until } from "lit/directives/until";
import PFPage from "@patternfly/patternfly/components/Page/page.css";
import PFContent from "@patternfly/patternfly/components/Content/content.css";
import PFGallery from "@patternfly/patternfly/layouts/Gallery/gallery.css";
@@ -24,7 +25,7 @@ import "./SAMLProviderForm";
import { ProvidersApi, SAMLProvider } from "@goauthentik/api";
import { DEFAULT_CONFIG } from "../../../api/Config";
import { EVENT_REFRESH } from "../../../constants";
-import { ifDefined } from "lit-html/directives/if-defined";
+import { ifDefined } from "lit/directives/if-defined";
@customElement("ak-provider-saml-view")
export class SAMLProviderViewPage extends LitElement {
diff --git a/web/src/pages/sources/SourceViewPage.ts b/web/src/pages/sources/SourceViewPage.ts
index 3c7e86cf2..9ff0c120c 100644
--- a/web/src/pages/sources/SourceViewPage.ts
+++ b/web/src/pages/sources/SourceViewPage.ts
@@ -1,4 +1,5 @@
-import { customElement, html, LitElement, property, TemplateResult } from "lit-element";
+import { html, LitElement, TemplateResult } from "lit";
+import { customElement, property } from "lit/decorators";
import { Source, SourcesApi } from "@goauthentik/api";
import { DEFAULT_CONFIG } from "../../api/Config";
@@ -10,7 +11,7 @@ import "./ldap/LDAPSourceViewPage";
import "./oauth/OAuthSourceViewPage";
import "./saml/SAMLSourceViewPage";
import "./plex/PlexSourceViewPage";
-import { ifDefined } from "lit-html/directives/if-defined";
+import { ifDefined } from "lit/directives/if-defined";
@customElement("ak-source-view")
export class SourceViewPage extends LitElement {
diff --git a/web/src/pages/sources/SourcesListPage.ts b/web/src/pages/sources/SourcesListPage.ts
index d34ed5d67..b694e4d6c 100644
--- a/web/src/pages/sources/SourcesListPage.ts
+++ b/web/src/pages/sources/SourcesListPage.ts
@@ -1,5 +1,6 @@
import { t } from "@lingui/macro";
-import { customElement, html, property, TemplateResult } from "lit-element";
+import { html, TemplateResult } from "lit";
+import { customElement, property } from "lit/decorators";
import { AKResponse } from "../../api/Client";
import { TableColumn } from "../../elements/table/Table";
import { TablePage } from "../../elements/table/TablePage";
@@ -9,11 +10,11 @@ import "../../elements/buttons/Dropdown";
import "../../elements/forms/DeleteBulkForm";
import "../../elements/forms/ModalForm";
import "../../elements/forms/ProxyForm";
-import { until } from "lit-html/directives/until";
+import { until } from "lit/directives/until";
import { PAGE_SIZE } from "../../constants";
import { Source, SourcesApi } from "@goauthentik/api";
import { DEFAULT_CONFIG } from "../../api/Config";
-import { ifDefined } from "lit-html/directives/if-defined";
+import { ifDefined } from "lit/directives/if-defined";
import "./ldap/LDAPSourceForm";
import "./saml/SAMLSourceForm";
import "./oauth/OAuthSourceForm";
diff --git a/web/src/pages/sources/ldap/LDAPSourceForm.ts b/web/src/pages/sources/ldap/LDAPSourceForm.ts
index 85b286b1f..0fdffbda4 100644
--- a/web/src/pages/sources/ldap/LDAPSourceForm.ts
+++ b/web/src/pages/sources/ldap/LDAPSourceForm.ts
@@ -1,12 +1,12 @@
import { LDAPSource, SourcesApi, PropertymappingsApi, LDAPSourceRequest } from "@goauthentik/api";
import { t } from "@lingui/macro";
-import { customElement } from "lit-element";
-import { html, TemplateResult } from "lit-html";
+import { customElement } from "lit/decorators";
+import { html, TemplateResult } from "lit";
import { DEFAULT_CONFIG } from "../../../api/Config";
import "../../../elements/forms/FormGroup";
import "../../../elements/forms/HorizontalFormElement";
-import { ifDefined } from "lit-html/directives/if-defined";
-import { until } from "lit-html/directives/until";
+import { ifDefined } from "lit/directives/if-defined";
+import { until } from "lit/directives/until";
import { first } from "../../../utils";
import { ModelForm } from "../../../elements/forms/ModelForm";
diff --git a/web/src/pages/sources/ldap/LDAPSourceViewPage.ts b/web/src/pages/sources/ldap/LDAPSourceViewPage.ts
index 965321bb5..ff823d3a6 100644
--- a/web/src/pages/sources/ldap/LDAPSourceViewPage.ts
+++ b/web/src/pages/sources/ldap/LDAPSourceViewPage.ts
@@ -1,5 +1,6 @@
import { t } from "@lingui/macro";
-import { CSSResult, customElement, html, LitElement, property, TemplateResult } from "lit-element";
+import { CSSResult, html, LitElement, TemplateResult } from "lit";
+import { customElement, property } from "lit/decorators";
import PFPage from "@patternfly/patternfly/components/Page/page.css";
import PFContent from "@patternfly/patternfly/components/Content/content.css";
@@ -21,7 +22,7 @@ import "../../../elements/Tabs";
import "../../../elements/events/ObjectChangelog";
import "../../../elements/forms/ModalForm";
import "./LDAPSourceForm";
-import { until } from "lit-html/directives/until";
+import { until } from "lit/directives/until";
import { LDAPSource, SourcesApi, StatusEnum } from "@goauthentik/api";
import { DEFAULT_CONFIG } from "../../../api/Config";
import { EVENT_REFRESH } from "../../../constants";
diff --git a/web/src/pages/sources/oauth/OAuthSourceForm.ts b/web/src/pages/sources/oauth/OAuthSourceForm.ts
index e2731944f..591c872b5 100644
--- a/web/src/pages/sources/oauth/OAuthSourceForm.ts
+++ b/web/src/pages/sources/oauth/OAuthSourceForm.ts
@@ -8,13 +8,13 @@ import {
SourceType,
} from "@goauthentik/api";
import { t } from "@lingui/macro";
-import { customElement, property } from "lit-element";
-import { html, TemplateResult } from "lit-html";
+import { customElement, property } from "lit/decorators";
+import { html, TemplateResult } from "lit";
import { DEFAULT_CONFIG } from "../../../api/Config";
import "../../../elements/forms/FormGroup";
import "../../../elements/forms/HorizontalFormElement";
-import { ifDefined } from "lit-html/directives/if-defined";
-import { until } from "lit-html/directives/until";
+import { ifDefined } from "lit/directives/if-defined";
+import { until } from "lit/directives/until";
import { first } from "../../../utils";
import { ModelForm } from "../../../elements/forms/ModelForm";
diff --git a/web/src/pages/sources/oauth/OAuthSourceViewPage.ts b/web/src/pages/sources/oauth/OAuthSourceViewPage.ts
index 02df2a598..1421011c1 100644
--- a/web/src/pages/sources/oauth/OAuthSourceViewPage.ts
+++ b/web/src/pages/sources/oauth/OAuthSourceViewPage.ts
@@ -1,5 +1,6 @@
import { t } from "@lingui/macro";
-import { CSSResult, customElement, html, LitElement, property, TemplateResult } from "lit-element";
+import { CSSResult, html, LitElement, TemplateResult } from "lit";
+import { customElement, property } from "lit/decorators";
import PFPage from "@patternfly/patternfly/components/Page/page.css";
import PFContent from "@patternfly/patternfly/components/Content/content.css";
diff --git a/web/src/pages/sources/plex/PlexSourceForm.ts b/web/src/pages/sources/plex/PlexSourceForm.ts
index b7e443426..9fdf817de 100644
--- a/web/src/pages/sources/plex/PlexSourceForm.ts
+++ b/web/src/pages/sources/plex/PlexSourceForm.ts
@@ -6,13 +6,13 @@ import {
FlowsInstancesListDesignationEnum,
} from "@goauthentik/api";
import { t } from "@lingui/macro";
-import { customElement, property } from "lit-element";
-import { html, TemplateResult } from "lit-html";
+import { customElement, property } from "lit/decorators";
+import { html, TemplateResult } from "lit";
import { DEFAULT_CONFIG } from "../../../api/Config";
import "../../../elements/forms/FormGroup";
import "../../../elements/forms/HorizontalFormElement";
-import { ifDefined } from "lit-html/directives/if-defined";
-import { until } from "lit-html/directives/until";
+import { ifDefined } from "lit/directives/if-defined";
+import { until } from "lit/directives/until";
import { first, randomString } from "../../../utils";
import { PlexAPIClient, PlexResource, popupCenterScreen } from "../../../flows/sources/plex/API";
import { ModelForm } from "../../../elements/forms/ModelForm";
diff --git a/web/src/pages/sources/plex/PlexSourceViewPage.ts b/web/src/pages/sources/plex/PlexSourceViewPage.ts
index 68ca2ea22..b8b204cfa 100644
--- a/web/src/pages/sources/plex/PlexSourceViewPage.ts
+++ b/web/src/pages/sources/plex/PlexSourceViewPage.ts
@@ -1,5 +1,6 @@
import { t } from "@lingui/macro";
-import { CSSResult, customElement, html, LitElement, property, TemplateResult } from "lit-element";
+import { CSSResult, html, LitElement, TemplateResult } from "lit";
+import { customElement, property } from "lit/decorators";
import PFPage from "@patternfly/patternfly/components/Page/page.css";
import PFContent from "@patternfly/patternfly/components/Content/content.css";
diff --git a/web/src/pages/sources/saml/SAMLSourceForm.ts b/web/src/pages/sources/saml/SAMLSourceForm.ts
index 0a171dd67..38bb03177 100644
--- a/web/src/pages/sources/saml/SAMLSourceForm.ts
+++ b/web/src/pages/sources/saml/SAMLSourceForm.ts
@@ -10,13 +10,13 @@ import {
FlowsInstancesListDesignationEnum,
} from "@goauthentik/api";
import { t } from "@lingui/macro";
-import { customElement } from "lit-element";
-import { html, TemplateResult } from "lit-html";
+import { customElement } from "lit/decorators";
+import { html, TemplateResult } from "lit";
import { DEFAULT_CONFIG } from "../../../api/Config";
import "../../../elements/forms/FormGroup";
import "../../../elements/forms/HorizontalFormElement";
-import { ifDefined } from "lit-html/directives/if-defined";
-import { until } from "lit-html/directives/until";
+import { ifDefined } from "lit/directives/if-defined";
+import { until } from "lit/directives/until";
import { first } from "../../../utils";
import { ModelForm } from "../../../elements/forms/ModelForm";
diff --git a/web/src/pages/sources/saml/SAMLSourceViewPage.ts b/web/src/pages/sources/saml/SAMLSourceViewPage.ts
index a2d9619c0..320fc2701 100644
--- a/web/src/pages/sources/saml/SAMLSourceViewPage.ts
+++ b/web/src/pages/sources/saml/SAMLSourceViewPage.ts
@@ -1,6 +1,7 @@
import { t } from "@lingui/macro";
-import { CSSResult, customElement, html, LitElement, property, TemplateResult } from "lit-element";
-import { until } from "lit-html/directives/until";
+import { CSSResult, html, LitElement, TemplateResult } from "lit";
+import { customElement, property } from "lit/decorators";
+import { until } from "lit/directives/until";
import PFPage from "@patternfly/patternfly/components/Page/page.css";
import PFContent from "@patternfly/patternfly/components/Content/content.css";
@@ -24,7 +25,7 @@ import "./SAMLSourceForm";
import { SAMLSource, SourcesApi } from "@goauthentik/api";
import { DEFAULT_CONFIG } from "../../../api/Config";
import { EVENT_REFRESH } from "../../../constants";
-import { ifDefined } from "lit-html/directives/if-defined";
+import { ifDefined } from "lit/directives/if-defined";
@customElement("ak-source-saml-view")
export class SAMLSourceViewPage extends LitElement {
diff --git a/web/src/pages/stages/StageListPage.ts b/web/src/pages/stages/StageListPage.ts
index 298ce5b07..7a48d51a2 100644
--- a/web/src/pages/stages/StageListPage.ts
+++ b/web/src/pages/stages/StageListPage.ts
@@ -1,5 +1,6 @@
import { t } from "@lingui/macro";
-import { customElement, html, property, TemplateResult } from "lit-element";
+import { html, TemplateResult } from "lit";
+import { customElement, property } from "lit/decorators";
import { AKResponse } from "../../api/Client";
import { TableColumn } from "../../elements/table/Table";
import { TablePage } from "../../elements/table/TablePage";
@@ -9,11 +10,11 @@ import "../../elements/buttons/Dropdown";
import "../../elements/forms/DeleteBulkForm";
import "../../elements/forms/ProxyForm";
import "../../elements/forms/ModalForm";
-import { until } from "lit-html/directives/until";
+import { until } from "lit/directives/until";
import { PAGE_SIZE } from "../../constants";
import { Stage, StagesApi } from "@goauthentik/api";
import { DEFAULT_CONFIG } from "../../api/Config";
-import { ifDefined } from "lit-html/directives/if-defined";
+import { ifDefined } from "lit/directives/if-defined";
import "./authenticator_duo/AuthenticatorDuoStageForm.ts";
import "./authenticator_static/AuthenticatorStaticStageForm.ts";
diff --git a/web/src/pages/stages/authenticator_duo/AuthenticatorDuoStageForm.ts b/web/src/pages/stages/authenticator_duo/AuthenticatorDuoStageForm.ts
index abb387049..c5b6659a3 100644
--- a/web/src/pages/stages/authenticator_duo/AuthenticatorDuoStageForm.ts
+++ b/web/src/pages/stages/authenticator_duo/AuthenticatorDuoStageForm.ts
@@ -6,13 +6,13 @@ import {
AuthenticatorDuoStageRequest,
} from "@goauthentik/api";
import { t } from "@lingui/macro";
-import { customElement } from "lit-element";
-import { html, TemplateResult } from "lit-html";
+import { customElement } from "lit/decorators";
+import { html, TemplateResult } from "lit";
import { DEFAULT_CONFIG } from "../../../api/Config";
-import { ifDefined } from "lit-html/directives/if-defined";
+import { ifDefined } from "lit/directives/if-defined";
import "../../../elements/forms/HorizontalFormElement";
import "../../../elements/forms/FormGroup";
-import { until } from "lit-html/directives/until";
+import { until } from "lit/directives/until";
import { first } from "../../../utils";
import { ModelForm } from "../../../elements/forms/ModelForm";
diff --git a/web/src/pages/stages/authenticator_static/AuthenticatorStaticStageForm.ts b/web/src/pages/stages/authenticator_static/AuthenticatorStaticStageForm.ts
index f87434578..9487fada2 100644
--- a/web/src/pages/stages/authenticator_static/AuthenticatorStaticStageForm.ts
+++ b/web/src/pages/stages/authenticator_static/AuthenticatorStaticStageForm.ts
@@ -5,13 +5,13 @@ import {
FlowsInstancesListDesignationEnum,
} from "@goauthentik/api";
import { t } from "@lingui/macro";
-import { customElement } from "lit-element";
-import { html, TemplateResult } from "lit-html";
+import { customElement } from "lit/decorators";
+import { html, TemplateResult } from "lit";
import { DEFAULT_CONFIG } from "../../../api/Config";
-import { ifDefined } from "lit-html/directives/if-defined";
+import { ifDefined } from "lit/directives/if-defined";
import "../../../elements/forms/HorizontalFormElement";
import "../../../elements/forms/FormGroup";
-import { until } from "lit-html/directives/until";
+import { until } from "lit/directives/until";
import { first } from "../../../utils";
import { ModelForm } from "../../../elements/forms/ModelForm";
diff --git a/web/src/pages/stages/authenticator_totp/AuthenticatorTOTPStageForm.ts b/web/src/pages/stages/authenticator_totp/AuthenticatorTOTPStageForm.ts
index 6b2c230a5..51e0c6d8d 100644
--- a/web/src/pages/stages/authenticator_totp/AuthenticatorTOTPStageForm.ts
+++ b/web/src/pages/stages/authenticator_totp/AuthenticatorTOTPStageForm.ts
@@ -5,13 +5,13 @@ import {
FlowsInstancesListDesignationEnum,
} from "@goauthentik/api";
import { t } from "@lingui/macro";
-import { customElement } from "lit-element";
-import { html, TemplateResult } from "lit-html";
+import { customElement } from "lit/decorators";
+import { html, TemplateResult } from "lit";
import { DEFAULT_CONFIG } from "../../../api/Config";
-import { ifDefined } from "lit-html/directives/if-defined";
+import { ifDefined } from "lit/directives/if-defined";
import "../../../elements/forms/HorizontalFormElement";
import "../../../elements/forms/FormGroup";
-import { until } from "lit-html/directives/until";
+import { until } from "lit/directives/until";
import { ModelForm } from "../../../elements/forms/ModelForm";
@customElement("ak-stage-authenticator-totp-form")
diff --git a/web/src/pages/stages/authenticator_validate/AuthenticatorValidateStageForm.ts b/web/src/pages/stages/authenticator_validate/AuthenticatorValidateStageForm.ts
index 3888ccfda..f23549629 100644
--- a/web/src/pages/stages/authenticator_validate/AuthenticatorValidateStageForm.ts
+++ b/web/src/pages/stages/authenticator_validate/AuthenticatorValidateStageForm.ts
@@ -5,13 +5,13 @@ import {
StagesApi,
} from "@goauthentik/api";
import { t } from "@lingui/macro";
-import { customElement, property } from "lit-element";
-import { html, TemplateResult } from "lit-html";
+import { customElement, property } from "lit/decorators";
+import { html, TemplateResult } from "lit";
import { DEFAULT_CONFIG } from "../../../api/Config";
-import { ifDefined } from "lit-html/directives/if-defined";
+import { ifDefined } from "lit/directives/if-defined";
import "../../../elements/forms/HorizontalFormElement";
import "../../../elements/forms/FormGroup";
-import { until } from "lit-html/directives/until";
+import { until } from "lit/directives/until";
import { ModelForm } from "../../../elements/forms/ModelForm";
@customElement("ak-stage-authenticator-validate-form")
diff --git a/web/src/pages/stages/authenticator_webauthn/AuthenticateWebAuthnStageForm.ts b/web/src/pages/stages/authenticator_webauthn/AuthenticateWebAuthnStageForm.ts
index 9bec8fc4e..521037fa7 100644
--- a/web/src/pages/stages/authenticator_webauthn/AuthenticateWebAuthnStageForm.ts
+++ b/web/src/pages/stages/authenticator_webauthn/AuthenticateWebAuthnStageForm.ts
@@ -1,9 +1,9 @@
import { AuthenticateWebAuthnStage, StagesApi } from "@goauthentik/api";
import { t } from "@lingui/macro";
-import { customElement } from "lit-element";
-import { html, TemplateResult } from "lit-html";
+import { customElement } from "lit/decorators";
+import { html, TemplateResult } from "lit";
import { DEFAULT_CONFIG } from "../../../api/Config";
-import { ifDefined } from "lit-html/directives/if-defined";
+import { ifDefined } from "lit/directives/if-defined";
import "../../../elements/forms/HorizontalFormElement";
import { ModelForm } from "../../../elements/forms/ModelForm";
diff --git a/web/src/pages/stages/captcha/CaptchaStageForm.ts b/web/src/pages/stages/captcha/CaptchaStageForm.ts
index 95d2a4d31..62b65850a 100644
--- a/web/src/pages/stages/captcha/CaptchaStageForm.ts
+++ b/web/src/pages/stages/captcha/CaptchaStageForm.ts
@@ -1,9 +1,9 @@
import { CaptchaStage, CaptchaStageRequest, StagesApi } from "@goauthentik/api";
import { t } from "@lingui/macro";
-import { customElement } from "lit-element";
-import { html, TemplateResult } from "lit-html";
+import { customElement } from "lit/decorators";
+import { html, TemplateResult } from "lit";
import { DEFAULT_CONFIG } from "../../../api/Config";
-import { ifDefined } from "lit-html/directives/if-defined";
+import { ifDefined } from "lit/directives/if-defined";
import "../../../elements/forms/HorizontalFormElement";
import "../../../elements/forms/FormGroup";
import { ModelForm } from "../../../elements/forms/ModelForm";
diff --git a/web/src/pages/stages/consent/ConsentStageForm.ts b/web/src/pages/stages/consent/ConsentStageForm.ts
index 3b89b7e04..8661295fb 100644
--- a/web/src/pages/stages/consent/ConsentStageForm.ts
+++ b/web/src/pages/stages/consent/ConsentStageForm.ts
@@ -1,9 +1,9 @@
import { ConsentStage, ConsentStageModeEnum, StagesApi } from "@goauthentik/api";
import { t } from "@lingui/macro";
-import { customElement, property } from "lit-element";
-import { html, TemplateResult } from "lit-html";
+import { customElement, property } from "lit/decorators";
+import { html, TemplateResult } from "lit";
import { DEFAULT_CONFIG } from "../../../api/Config";
-import { ifDefined } from "lit-html/directives/if-defined";
+import { ifDefined } from "lit/directives/if-defined";
import "../../../elements/forms/HorizontalFormElement";
import "../../../elements/forms/FormGroup";
import { ModelForm } from "../../../elements/forms/ModelForm";
diff --git a/web/src/pages/stages/deny/DenyStageForm.ts b/web/src/pages/stages/deny/DenyStageForm.ts
index e06b88bbf..d2a42df31 100644
--- a/web/src/pages/stages/deny/DenyStageForm.ts
+++ b/web/src/pages/stages/deny/DenyStageForm.ts
@@ -1,9 +1,9 @@
import { DenyStage, StagesApi } from "@goauthentik/api";
import { t } from "@lingui/macro";
-import { customElement } from "lit-element";
-import { html, TemplateResult } from "lit-html";
+import { customElement } from "lit/decorators";
+import { html, TemplateResult } from "lit";
import { DEFAULT_CONFIG } from "../../../api/Config";
-import { ifDefined } from "lit-html/directives/if-defined";
+import { ifDefined } from "lit/directives/if-defined";
import "../../../elements/forms/HorizontalFormElement";
import { ModelForm } from "../../../elements/forms/ModelForm";
diff --git a/web/src/pages/stages/dummy/DummyStageForm.ts b/web/src/pages/stages/dummy/DummyStageForm.ts
index 425651e82..f861585f7 100644
--- a/web/src/pages/stages/dummy/DummyStageForm.ts
+++ b/web/src/pages/stages/dummy/DummyStageForm.ts
@@ -1,9 +1,9 @@
import { DummyStage, StagesApi } from "@goauthentik/api";
import { t } from "@lingui/macro";
-import { customElement } from "lit-element";
-import { html, TemplateResult } from "lit-html";
+import { customElement } from "lit/decorators";
+import { html, TemplateResult } from "lit";
import { DEFAULT_CONFIG } from "../../../api/Config";
-import { ifDefined } from "lit-html/directives/if-defined";
+import { ifDefined } from "lit/directives/if-defined";
import "../../../elements/forms/HorizontalFormElement";
import { ModelForm } from "../../../elements/forms/ModelForm";
diff --git a/web/src/pages/stages/email/EmailStageForm.ts b/web/src/pages/stages/email/EmailStageForm.ts
index 6176021c9..bbfbb80c8 100644
--- a/web/src/pages/stages/email/EmailStageForm.ts
+++ b/web/src/pages/stages/email/EmailStageForm.ts
@@ -1,13 +1,13 @@
import { EmailStage, StagesApi } from "@goauthentik/api";
import { t } from "@lingui/macro";
-import { customElement, property } from "lit-element";
-import { html, TemplateResult } from "lit-html";
+import { customElement, property } from "lit/decorators";
+import { html, TemplateResult } from "lit";
import { DEFAULT_CONFIG } from "../../../api/Config";
-import { ifDefined } from "lit-html/directives/if-defined";
+import { ifDefined } from "lit/directives/if-defined";
import "../../../elements/forms/HorizontalFormElement";
import "../../../elements/forms/FormGroup";
import { first } from "../../../utils";
-import { until } from "lit-html/directives/until";
+import { until } from "lit/directives/until";
import { ModelForm } from "../../../elements/forms/ModelForm";
@customElement("ak-stage-email-form")
diff --git a/web/src/pages/stages/identification/IdentificationStageForm.ts b/web/src/pages/stages/identification/IdentificationStageForm.ts
index b29ad8688..196952400 100644
--- a/web/src/pages/stages/identification/IdentificationStageForm.ts
+++ b/web/src/pages/stages/identification/IdentificationStageForm.ts
@@ -7,13 +7,13 @@ import {
SourcesApi,
} from "@goauthentik/api";
import { t } from "@lingui/macro";
-import { customElement } from "lit-element";
-import { html, TemplateResult } from "lit-html";
+import { customElement } from "lit/decorators";
+import { html, TemplateResult } from "lit";
import { DEFAULT_CONFIG } from "../../../api/Config";
-import { ifDefined } from "lit-html/directives/if-defined";
+import { ifDefined } from "lit/directives/if-defined";
import "../../../elements/forms/HorizontalFormElement";
import "../../../elements/forms/FormGroup";
-import { until } from "lit-html/directives/until";
+import { until } from "lit/directives/until";
import { first } from "../../../utils";
import { ModelForm } from "../../../elements/forms/ModelForm";
diff --git a/web/src/pages/stages/invitation/InvitationForm.ts b/web/src/pages/stages/invitation/InvitationForm.ts
index d2851264b..a292990b5 100644
--- a/web/src/pages/stages/invitation/InvitationForm.ts
+++ b/web/src/pages/stages/invitation/InvitationForm.ts
@@ -1,7 +1,7 @@
import { Invitation, StagesApi } from "@goauthentik/api";
import { t } from "@lingui/macro";
-import { customElement } from "lit-element";
-import { html, TemplateResult } from "lit-html";
+import { customElement } from "lit/decorators";
+import { html, TemplateResult } from "lit";
import { DEFAULT_CONFIG } from "../../../api/Config";
import "../../../elements/forms/HorizontalFormElement";
import "../../../elements/CodeMirror";
diff --git a/web/src/pages/stages/invitation/InvitationListLink.ts b/web/src/pages/stages/invitation/InvitationListLink.ts
index 50b5f72f9..d8031554e 100644
--- a/web/src/pages/stages/invitation/InvitationListLink.ts
+++ b/web/src/pages/stages/invitation/InvitationListLink.ts
@@ -1,6 +1,7 @@
import { t } from "@lingui/macro";
-import { CSSResult, customElement, html, LitElement, property, TemplateResult } from "lit-element";
-import { until } from "lit-html/directives/until";
+import { CSSResult, html, LitElement, TemplateResult } from "lit";
+import { customElement, property } from "lit/decorators";
+import { until } from "lit/directives/until";
import PFForm from "@patternfly/patternfly/components/Form/form.css";
import PFFormControl from "@patternfly/patternfly/components/FormControl/form-control.css";
import AKGlobal from "../../../authentik.css";
diff --git a/web/src/pages/stages/invitation/InvitationListPage.ts b/web/src/pages/stages/invitation/InvitationListPage.ts
index 3cba80036..f2560bc10 100644
--- a/web/src/pages/stages/invitation/InvitationListPage.ts
+++ b/web/src/pages/stages/invitation/InvitationListPage.ts
@@ -1,5 +1,6 @@
import { t } from "@lingui/macro";
-import { customElement, html, property, TemplateResult } from "lit-element";
+import { html, TemplateResult } from "lit";
+import { customElement, property } from "lit/decorators";
import { AKResponse } from "../../../api/Client";
import { TablePage } from "../../../elements/table/TablePage";
diff --git a/web/src/pages/stages/invitation/InvitationStageForm.ts b/web/src/pages/stages/invitation/InvitationStageForm.ts
index d2625e575..107d12cbb 100644
--- a/web/src/pages/stages/invitation/InvitationStageForm.ts
+++ b/web/src/pages/stages/invitation/InvitationStageForm.ts
@@ -1,9 +1,9 @@
import { InvitationStage, StagesApi } from "@goauthentik/api";
import { t } from "@lingui/macro";
-import { customElement } from "lit-element";
-import { html, TemplateResult } from "lit-html";
+import { customElement } from "lit/decorators";
+import { html, TemplateResult } from "lit";
import { DEFAULT_CONFIG } from "../../../api/Config";
-import { ifDefined } from "lit-html/directives/if-defined";
+import { ifDefined } from "lit/directives/if-defined";
import "../../../elements/forms/HorizontalFormElement";
import "../../../elements/forms/FormGroup";
import { first } from "../../../utils";
diff --git a/web/src/pages/stages/password/PasswordStageForm.ts b/web/src/pages/stages/password/PasswordStageForm.ts
index 6c62a21bc..226dc0296 100644
--- a/web/src/pages/stages/password/PasswordStageForm.ts
+++ b/web/src/pages/stages/password/PasswordStageForm.ts
@@ -6,13 +6,13 @@ import {
FlowsInstancesListDesignationEnum,
} from "@goauthentik/api";
import { t } from "@lingui/macro";
-import { customElement } from "lit-element";
-import { html, TemplateResult } from "lit-html";
+import { customElement } from "lit/decorators";
+import { html, TemplateResult } from "lit";
import { DEFAULT_CONFIG } from "../../../api/Config";
-import { ifDefined } from "lit-html/directives/if-defined";
+import { ifDefined } from "lit/directives/if-defined";
import "../../../elements/forms/HorizontalFormElement";
import "../../../elements/forms/FormGroup";
-import { until } from "lit-html/directives/until";
+import { until } from "lit/directives/until";
import { first } from "../../../utils";
import { ModelForm } from "../../../elements/forms/ModelForm";
diff --git a/web/src/pages/stages/prompt/PromptForm.ts b/web/src/pages/stages/prompt/PromptForm.ts
index a0164677a..007782e0f 100644
--- a/web/src/pages/stages/prompt/PromptForm.ts
+++ b/web/src/pages/stages/prompt/PromptForm.ts
@@ -1,9 +1,9 @@
import { Prompt, PromptTypeEnum, StagesApi } from "@goauthentik/api";
import { t } from "@lingui/macro";
-import { customElement } from "lit-element";
-import { html, TemplateResult } from "lit-html";
+import { customElement } from "lit/decorators";
+import { html, TemplateResult } from "lit";
import { DEFAULT_CONFIG } from "../../../api/Config";
-import { ifDefined } from "lit-html/directives/if-defined";
+import { ifDefined } from "lit/directives/if-defined";
import "../../../elements/forms/HorizontalFormElement";
import { first } from "../../../utils";
import { ModelForm } from "../../../elements/forms/ModelForm";
diff --git a/web/src/pages/stages/prompt/PromptListPage.ts b/web/src/pages/stages/prompt/PromptListPage.ts
index 640ac29d5..cdf166899 100644
--- a/web/src/pages/stages/prompt/PromptListPage.ts
+++ b/web/src/pages/stages/prompt/PromptListPage.ts
@@ -1,5 +1,6 @@
import { t } from "@lingui/macro";
-import { customElement, html, property, TemplateResult } from "lit-element";
+import { html, TemplateResult } from "lit";
+import { customElement, property } from "lit/decorators";
import { AKResponse } from "../../../api/Client";
import { TablePage } from "../../../elements/table/TablePage";
diff --git a/web/src/pages/stages/prompt/PromptStageForm.ts b/web/src/pages/stages/prompt/PromptStageForm.ts
index b74d8c576..0262e62d8 100644
--- a/web/src/pages/stages/prompt/PromptStageForm.ts
+++ b/web/src/pages/stages/prompt/PromptStageForm.ts
@@ -1,14 +1,14 @@
import { PoliciesApi, PromptStage, StagesApi } from "@goauthentik/api";
import { t } from "@lingui/macro";
-import { customElement } from "lit-element";
-import { html, TemplateResult } from "lit-html";
+import { customElement } from "lit/decorators";
+import { html, TemplateResult } from "lit";
import { DEFAULT_CONFIG } from "../../../api/Config";
-import { ifDefined } from "lit-html/directives/if-defined";
+import { ifDefined } from "lit/directives/if-defined";
import "../../../elements/forms/HorizontalFormElement";
import "../../../elements/forms/FormGroup";
import "../../../elements/forms/ModalForm";
import "./PromptForm";
-import { until } from "lit-html/directives/until";
+import { until } from "lit/directives/until";
import { ModelForm } from "../../../elements/forms/ModelForm";
@customElement("ak-stage-prompt-form")
diff --git a/web/src/pages/stages/user_delete/UserDeleteStageForm.ts b/web/src/pages/stages/user_delete/UserDeleteStageForm.ts
index 4cbc30b4e..26324a2ba 100644
--- a/web/src/pages/stages/user_delete/UserDeleteStageForm.ts
+++ b/web/src/pages/stages/user_delete/UserDeleteStageForm.ts
@@ -1,9 +1,9 @@
import { UserDeleteStage, StagesApi } from "@goauthentik/api";
import { t } from "@lingui/macro";
-import { customElement } from "lit-element";
-import { html, TemplateResult } from "lit-html";
+import { customElement } from "lit/decorators";
+import { html, TemplateResult } from "lit";
import { DEFAULT_CONFIG } from "../../../api/Config";
-import { ifDefined } from "lit-html/directives/if-defined";
+import { ifDefined } from "lit/directives/if-defined";
import "../../../elements/forms/HorizontalFormElement";
import { ModelForm } from "../../../elements/forms/ModelForm";
diff --git a/web/src/pages/stages/user_login/UserLoginStageForm.ts b/web/src/pages/stages/user_login/UserLoginStageForm.ts
index 2c0ac3ee6..370f51867 100644
--- a/web/src/pages/stages/user_login/UserLoginStageForm.ts
+++ b/web/src/pages/stages/user_login/UserLoginStageForm.ts
@@ -1,7 +1,7 @@
import { UserLoginStage, StagesApi } from "@goauthentik/api";
import { t } from "@lingui/macro";
-import { customElement } from "lit-element";
-import { html, TemplateResult } from "lit-html";
+import { customElement } from "lit/decorators";
+import { html, TemplateResult } from "lit";
import { DEFAULT_CONFIG } from "../../../api/Config";
import "../../../elements/forms/HorizontalFormElement";
import "../../../elements/forms/FormGroup";
diff --git a/web/src/pages/stages/user_logout/UserLogoutStageForm.ts b/web/src/pages/stages/user_logout/UserLogoutStageForm.ts
index 5c2dcd7c4..202955757 100644
--- a/web/src/pages/stages/user_logout/UserLogoutStageForm.ts
+++ b/web/src/pages/stages/user_logout/UserLogoutStageForm.ts
@@ -1,9 +1,9 @@
import { UserLogoutStage, StagesApi } from "@goauthentik/api";
import { t } from "@lingui/macro";
-import { customElement } from "lit-element";
-import { html, TemplateResult } from "lit-html";
+import { customElement } from "lit/decorators";
+import { html, TemplateResult } from "lit";
import { DEFAULT_CONFIG } from "../../../api/Config";
-import { ifDefined } from "lit-html/directives/if-defined";
+import { ifDefined } from "lit/directives/if-defined";
import "../../../elements/forms/HorizontalFormElement";
import { ModelForm } from "../../../elements/forms/ModelForm";
diff --git a/web/src/pages/stages/user_write/UserWriteStageForm.ts b/web/src/pages/stages/user_write/UserWriteStageForm.ts
index 55191a852..1e48bcb34 100644
--- a/web/src/pages/stages/user_write/UserWriteStageForm.ts
+++ b/web/src/pages/stages/user_write/UserWriteStageForm.ts
@@ -1,14 +1,14 @@
import { UserWriteStage, StagesApi, CoreApi } from "@goauthentik/api";
import { t } from "@lingui/macro";
-import { customElement } from "lit-element";
-import { html, TemplateResult } from "lit-html";
+import { customElement } from "lit/decorators";
+import { html, TemplateResult } from "lit";
import { DEFAULT_CONFIG } from "../../../api/Config";
-import { ifDefined } from "lit-html/directives/if-defined";
+import { ifDefined } from "lit/directives/if-defined";
import "../../../elements/forms/HorizontalFormElement";
import "../../../elements/forms/FormGroup";
import { ModelForm } from "../../../elements/forms/ModelForm";
import { first } from "../../../utils";
-import { until } from "lit-html/directives/until";
+import { until } from "lit/directives/until";
@customElement("ak-stage-user-write-form")
export class UserWriteStageForm extends ModelForm {
diff --git a/web/src/pages/system-tasks/SystemTaskListPage.ts b/web/src/pages/system-tasks/SystemTaskListPage.ts
index e2f863a1f..92f9f8e73 100644
--- a/web/src/pages/system-tasks/SystemTaskListPage.ts
+++ b/web/src/pages/system-tasks/SystemTaskListPage.ts
@@ -1,5 +1,6 @@
import { t } from "@lingui/macro";
-import { CSSResult, customElement, html, property, TemplateResult } from "lit-element";
+import { CSSResult, html, TemplateResult } from "lit";
+import { customElement, property } from "lit/decorators";
import { AKResponse } from "../../api/Client";
import { TablePage } from "../../elements/table/TablePage";
import PFDescriptionList from "@patternfly/patternfly/components/DescriptionList/description-list.css";
diff --git a/web/src/pages/tenants/TenantForm.ts b/web/src/pages/tenants/TenantForm.ts
index a73ee3fa8..6d677b130 100644
--- a/web/src/pages/tenants/TenantForm.ts
+++ b/web/src/pages/tenants/TenantForm.ts
@@ -1,13 +1,13 @@
import { CoreApi, FlowsApi, FlowsInstancesListDesignationEnum, Tenant } from "@goauthentik/api";
import { t } from "@lingui/macro";
-import { customElement } from "lit-element";
-import { html, TemplateResult } from "lit-html";
+import { customElement } from "lit/decorators";
+import { html, TemplateResult } from "lit";
import { DEFAULT_CONFIG } from "../../api/Config";
import "../../elements/forms/HorizontalFormElement";
import "../../elements/forms/FormGroup";
import { first } from "../../utils";
import { ModelForm } from "../../elements/forms/ModelForm";
-import { until } from "lit-html/directives/until";
+import { until } from "lit/directives/until";
import { DefaultTenant } from "../../elements/sidebar/SidebarBrand";
@customElement("ak-tenant-form")
diff --git a/web/src/pages/tenants/TenantListPage.ts b/web/src/pages/tenants/TenantListPage.ts
index 35644b0e9..74801fb78 100644
--- a/web/src/pages/tenants/TenantListPage.ts
+++ b/web/src/pages/tenants/TenantListPage.ts
@@ -1,5 +1,6 @@
import { t } from "@lingui/macro";
-import { customElement, html, property, TemplateResult } from "lit-element";
+import { html, TemplateResult } from "lit";
+import { customElement, property } from "lit/decorators";
import { AKResponse } from "../../api/Client";
import { TablePage } from "../../elements/table/TablePage";
diff --git a/web/src/pages/tokens/TokenForm.ts b/web/src/pages/tokens/TokenForm.ts
index 806ffaf2c..87fd4ccc9 100644
--- a/web/src/pages/tokens/TokenForm.ts
+++ b/web/src/pages/tokens/TokenForm.ts
@@ -1,13 +1,13 @@
import { CoreApi, IntentEnum, Token } from "@goauthentik/api";
import { t } from "@lingui/macro";
-import { customElement } from "lit-element";
-import { html, TemplateResult } from "lit-html";
+import { customElement } from "lit/decorators";
+import { html, TemplateResult } from "lit";
import { DEFAULT_CONFIG } from "../../api/Config";
import "../../elements/forms/HorizontalFormElement";
import "../../elements/forms/FormGroup";
import { dateTimeLocal, first } from "../../utils";
import { ModelForm } from "../../elements/forms/ModelForm";
-import { until } from "lit-html/directives/until";
+import { until } from "lit/directives/until";
@customElement("ak-token-form")
export class TokenForm extends ModelForm {
diff --git a/web/src/pages/tokens/TokenListPage.ts b/web/src/pages/tokens/TokenListPage.ts
index 4be022cba..ca6dc547e 100644
--- a/web/src/pages/tokens/TokenListPage.ts
+++ b/web/src/pages/tokens/TokenListPage.ts
@@ -1,5 +1,6 @@
import { t } from "@lingui/macro";
-import { customElement, html, property, TemplateResult } from "lit-element";
+import { html, TemplateResult } from "lit";
+import { customElement, property } from "lit/decorators";
import { AKResponse } from "../../api/Client";
import { TablePage } from "../../elements/table/TablePage";
diff --git a/web/src/pages/users/GroupSelectModal.ts b/web/src/pages/users/GroupSelectModal.ts
index 8762d3241..62000e37d 100644
--- a/web/src/pages/users/GroupSelectModal.ts
+++ b/web/src/pages/users/GroupSelectModal.ts
@@ -1,7 +1,7 @@
import { t } from "@lingui/macro";
import { CoreApi, Group } from "@goauthentik/api";
-import { customElement, property } from "lit-element";
-import { TemplateResult, html } from "lit-html";
+import { customElement, property } from "lit/decorators";
+import { TemplateResult, html } from "lit";
import { AKResponse } from "../../api/Client";
import { DEFAULT_CONFIG } from "../../api/Config";
import { PAGE_SIZE } from "../../constants";
diff --git a/web/src/pages/users/ServiceAccountForm.ts b/web/src/pages/users/ServiceAccountForm.ts
index 54e766a46..d2a082a8e 100644
--- a/web/src/pages/users/ServiceAccountForm.ts
+++ b/web/src/pages/users/ServiceAccountForm.ts
@@ -1,12 +1,12 @@
import { CoreApi, UserServiceAccountRequest, UserServiceAccountResponse } from "@goauthentik/api";
import { t } from "@lingui/macro";
-import { customElement, property } from "lit-element";
-import { html, TemplateResult } from "lit-html";
+import { customElement, property } from "lit/decorators";
+import { html, TemplateResult } from "lit";
import { DEFAULT_CONFIG } from "../../api/Config";
import "../../elements/forms/HorizontalFormElement";
import { Form } from "../../elements/forms/Form";
import { ModalForm } from "../../elements/forms/ModalForm";
-import { ifDefined } from "lit-html/directives/if-defined";
+import { ifDefined } from "lit/directives/if-defined";
@customElement("ak-user-service-account")
export class ServiceAccountForm extends Form {
diff --git a/web/src/pages/users/UserActiveForm.ts b/web/src/pages/users/UserActiveForm.ts
index e94162062..38cfadbcd 100644
--- a/web/src/pages/users/UserActiveForm.ts
+++ b/web/src/pages/users/UserActiveForm.ts
@@ -1,5 +1,6 @@
import { t } from "@lingui/macro";
-import { customElement, html, TemplateResult } from "lit-element";
+import { html, TemplateResult } from "lit";
+import { customElement } from "lit/decorators";
import { DeleteForm } from "../../elements/forms/DeleteForm";
import { MessageLevel } from "../../elements/messages/Message";
import { showMessage } from "../../elements/messages/MessageContainer";
diff --git a/web/src/pages/users/UserForm.ts b/web/src/pages/users/UserForm.ts
index 98ed0be80..47d61933b 100644
--- a/web/src/pages/users/UserForm.ts
+++ b/web/src/pages/users/UserForm.ts
@@ -1,16 +1,16 @@
import { CoreApi, Group, User } from "@goauthentik/api";
import { t } from "@lingui/macro";
-import { customElement } from "lit-element";
-import { html, TemplateResult } from "lit-html";
+import { customElement } from "lit/decorators";
+import { html, TemplateResult } from "lit";
import { DEFAULT_CONFIG } from "../../api/Config";
-import { ifDefined } from "lit-html/directives/if-defined";
+import { ifDefined } from "lit/directives/if-defined";
import "../../elements/forms/HorizontalFormElement";
import "../../elements/CodeMirror";
import "./GroupSelectModal";
import YAML from "yaml";
import { first } from "../../utils";
import { ModelForm } from "../../elements/forms/ModelForm";
-import { until } from "lit-html/directives/until";
+import { until } from "lit/directives/until";
@customElement("ak-user-form")
export class UserForm extends ModelForm {
diff --git a/web/src/pages/users/UserListPage.ts b/web/src/pages/users/UserListPage.ts
index 633150142..2a324442a 100644
--- a/web/src/pages/users/UserListPage.ts
+++ b/web/src/pages/users/UserListPage.ts
@@ -1,5 +1,6 @@
import { t } from "@lingui/macro";
-import { CSSResult, customElement, html, property, TemplateResult } from "lit-element";
+import { CSSResult, html, TemplateResult } from "lit";
+import { customElement, property } from "lit/decorators";
import { AKResponse } from "../../api/Client";
import { TablePage } from "../../elements/table/TablePage";
import PFDescriptionList from "@patternfly/patternfly/components/DescriptionList/description-list.css";
@@ -18,7 +19,7 @@ import "./ServiceAccountForm";
import { showMessage } from "../../elements/messages/MessageContainer";
import { MessageLevel } from "../../elements/messages/Message";
import { first } from "../../utils";
-import { until } from "lit-html/directives/until";
+import { until } from "lit/directives/until";
@customElement("ak-user-list")
export class UserListPage extends TablePage {
diff --git a/web/src/pages/users/UserResetEmailForm.ts b/web/src/pages/users/UserResetEmailForm.ts
index beb3b557c..e9f335b73 100644
--- a/web/src/pages/users/UserResetEmailForm.ts
+++ b/web/src/pages/users/UserResetEmailForm.ts
@@ -1,10 +1,10 @@
import { CoreApi, CoreUsersRecoveryEmailRetrieveRequest, StagesApi, User } from "@goauthentik/api";
import { t } from "@lingui/macro";
-import { customElement, property } from "lit-element";
-import { html, TemplateResult } from "lit-html";
+import { customElement, property } from "lit/decorators";
+import { html, TemplateResult } from "lit";
import { DEFAULT_CONFIG } from "../../api/Config";
import { Form } from "../../elements/forms/Form";
-import { until } from "lit-html/directives/until";
+import { until } from "lit/directives/until";
import "../../elements/forms/HorizontalFormElement";
@customElement("ak-user-reset-email-form")
diff --git a/web/src/pages/users/UserViewPage.ts b/web/src/pages/users/UserViewPage.ts
index 52761d3f4..15c47de6a 100644
--- a/web/src/pages/users/UserViewPage.ts
+++ b/web/src/pages/users/UserViewPage.ts
@@ -1,5 +1,6 @@
import { t } from "@lingui/macro";
-import { CSSResult, customElement, html, LitElement, property, TemplateResult } from "lit-element";
+import { CSSResult, html, LitElement, TemplateResult } from "lit";
+import { customElement, property } from "lit/decorators";
import PFPage from "@patternfly/patternfly/components/Page/page.css";
import PFContent from "@patternfly/patternfly/components/Content/content.css";
diff --git a/web/src/routesAdmin.ts b/web/src/routesAdmin.ts
index abd01e74f..e198a8b27 100644
--- a/web/src/routesAdmin.ts
+++ b/web/src/routesAdmin.ts
@@ -1,4 +1,4 @@
-import { html } from "lit-html";
+import { html } from "lit";
import { Route, SLUG_REGEX, ID_REGEX, UUID_REGEX } from "./elements/router/Route";
import "./pages/admin-overview/AdminOverviewPage";
diff --git a/web/src/routesUser.ts b/web/src/routesUser.ts
index 44f17b46c..6b2e74760 100644
--- a/web/src/routesUser.ts
+++ b/web/src/routesUser.ts
@@ -1,4 +1,4 @@
-import { html } from "lit-html";
+import { html } from "lit";
import { Route } from "./elements/router/Route";
import "./user/LibraryPage";
diff --git a/web/src/user/LibraryApplication.ts b/web/src/user/LibraryApplication.ts
index b9f05fbea..87d213b83 100644
--- a/web/src/user/LibraryApplication.ts
+++ b/web/src/user/LibraryApplication.ts
@@ -1,15 +1,8 @@
import { t } from "@lingui/macro";
-import {
- css,
- CSSResult,
- customElement,
- html,
- LitElement,
- property,
- TemplateResult,
-} from "lit-element";
-import { ifDefined } from "lit-html/directives/if-defined";
-import { until } from "lit-html/directives/until";
+import { css, CSSResult, html, LitElement, TemplateResult } from "lit";
+import { customElement, property } from "lit/decorators";
+import { ifDefined } from "lit/directives/if-defined";
+import { until } from "lit/directives/until";
import { Application } from "@goauthentik/api";
import { me } from "../api/Users";
import { truncate } from "../utils";
@@ -29,7 +22,7 @@ export class LibraryApplication extends LitElement {
selected = false;
@property()
- background: string = "";
+ background = "";
static get styles(): CSSResult[] {
return [
diff --git a/web/src/user/LibraryPage.ts b/web/src/user/LibraryPage.ts
index 055a2fe2d..45ac13565 100644
--- a/web/src/user/LibraryPage.ts
+++ b/web/src/user/LibraryPage.ts
@@ -1,13 +1,6 @@
import { t } from "@lingui/macro";
-import {
- css,
- CSSResult,
- customElement,
- html,
- LitElement,
- property,
- TemplateResult,
-} from "lit-element";
+import { css, CSSResult, html, LitElement, TemplateResult } from "lit";
+import { customElement, property } from "lit/decorators";
import Fuse from "fuse.js";
import { Application, CoreApi } from "@goauthentik/api";
import { AKResponse } from "../api/Client";
@@ -20,7 +13,7 @@ import PFEmptyState from "@patternfly/patternfly/components/EmptyState/empty-sta
import PFGallery from "@patternfly/patternfly/layouts/Gallery/gallery.css";
import PFPage from "@patternfly/patternfly/components/Page/page.css";
import "./LibraryApplication";
-import { until } from "lit-html/directives/until";
+import { until } from "lit/directives/until";
import { UIConfig, uiConfig } from "./config";
@customElement("ak-library")
diff --git a/web/src/user/user-settings/BaseUserSettings.ts b/web/src/user/user-settings/BaseUserSettings.ts
index a5eb6d713..a86d287c8 100644
--- a/web/src/user/user-settings/BaseUserSettings.ts
+++ b/web/src/user/user-settings/BaseUserSettings.ts
@@ -1,4 +1,5 @@
-import { CSSResult, LitElement, property } from "lit-element";
+import { CSSResult, LitElement } from "lit";
+import { property } from "lit/decorators";
import PFBase from "@patternfly/patternfly/patternfly-base.css";
import PFCard from "@patternfly/patternfly/components/Card/card.css";
import PFButton from "@patternfly/patternfly/components/Button/button.css";
diff --git a/web/src/user/user-settings/UserSelfForm.ts b/web/src/user/user-settings/UserSelfForm.ts
index de4781f3b..a22d4b248 100644
--- a/web/src/user/user-settings/UserSelfForm.ts
+++ b/web/src/user/user-settings/UserSelfForm.ts
@@ -1,13 +1,14 @@
import { t } from "@lingui/macro";
-import { customElement, html, TemplateResult } from "lit-element";
+import { html, TemplateResult } from "lit";
+import { customElement } from "lit/decorators";
import { CoreApi, UserSelf } from "@goauthentik/api";
-import { ifDefined } from "lit-html/directives/if-defined";
+import { ifDefined } from "lit/directives/if-defined";
import { DEFAULT_CONFIG, tenant } from "../../api/Config";
import "../../elements/forms/FormElement";
import "../../elements/EmptyState";
import "../../elements/forms/Form";
import "../../elements/forms/HorizontalFormElement";
-import { until } from "lit-html/directives/until";
+import { until } from "lit/directives/until";
import { ModelForm } from "../../elements/forms/ModelForm";
@customElement("ak-user-self-form")
diff --git a/web/src/user/user-settings/UserSettingsPage.ts b/web/src/user/user-settings/UserSettingsPage.ts
index faaad67b2..9ad439c76 100644
--- a/web/src/user/user-settings/UserSettingsPage.ts
+++ b/web/src/user/user-settings/UserSettingsPage.ts
@@ -1,5 +1,6 @@
import { t } from "@lingui/macro";
-import { CSSResult, customElement, html, LitElement, TemplateResult } from "lit-element";
+import { CSSResult, html, LitElement, TemplateResult } from "lit";
+import { customElement } from "lit/decorators";
import PFPage from "@patternfly/patternfly/components/Page/page.css";
import PFContent from "@patternfly/patternfly/components/Content/content.css";
@@ -20,7 +21,7 @@ import "./tokens/UserTokenList";
import "./UserSelfForm";
import "./sources/SourceSettings";
import "./stages/StageSettings";
-import { until } from "lit-html/directives/until";
+import { until } from "lit/directives/until";
import { me } from "../../api/Users";
@customElement("ak-user-settings")
diff --git a/web/src/user/user-settings/sources/SourceSettings.ts b/web/src/user/user-settings/sources/SourceSettings.ts
index 1e192f087..e95457e13 100644
--- a/web/src/user/user-settings/sources/SourceSettings.ts
+++ b/web/src/user/user-settings/sources/SourceSettings.ts
@@ -1,7 +1,8 @@
import { SourcesApi, UserSetting } from "@goauthentik/api";
import { t } from "@lingui/macro";
-import { CSSResult, customElement, html, LitElement, property, TemplateResult } from "lit-element";
-import { until } from "lit-html/directives/until";
+import { CSSResult, html, LitElement, TemplateResult } from "lit";
+import { customElement, property } from "lit/decorators";
+import { until } from "lit/directives/until";
import { DEFAULT_CONFIG } from "../../../api/Config";
import { EVENT_REFRESH } from "../../../constants";
import PFGrid from "@patternfly/patternfly/layouts/Grid/grid.css";
diff --git a/web/src/user/user-settings/sources/SourceSettingsOAuth.ts b/web/src/user/user-settings/sources/SourceSettingsOAuth.ts
index 1f8a47fb9..6f4adf71c 100644
--- a/web/src/user/user-settings/sources/SourceSettingsOAuth.ts
+++ b/web/src/user/user-settings/sources/SourceSettingsOAuth.ts
@@ -1,10 +1,11 @@
-import { customElement, html, property, TemplateResult } from "lit-element";
+import { html, TemplateResult } from "lit";
+import { customElement, property } from "lit/decorators";
import { BaseUserSettings } from "../BaseUserSettings";
import { SourcesApi } from "@goauthentik/api";
-import { until } from "lit-html/directives/until";
+import { until } from "lit/directives/until";
import { DEFAULT_CONFIG } from "../../../api/Config";
import { t } from "@lingui/macro";
-import { ifDefined } from "lit-html/directives/if-defined";
+import { ifDefined } from "lit/directives/if-defined";
@customElement("ak-user-settings-source-oauth")
export class SourceSettingsOAuth extends BaseUserSettings {
diff --git a/web/src/user/user-settings/sources/SourceSettingsPlex.ts b/web/src/user/user-settings/sources/SourceSettingsPlex.ts
index c660c7609..32005058b 100644
--- a/web/src/user/user-settings/sources/SourceSettingsPlex.ts
+++ b/web/src/user/user-settings/sources/SourceSettingsPlex.ts
@@ -1,7 +1,8 @@
-import { customElement, html, property, TemplateResult } from "lit-element";
+import { html, TemplateResult } from "lit";
+import { customElement, property } from "lit/decorators";
import { BaseUserSettings } from "../BaseUserSettings";
import { SourcesApi } from "@goauthentik/api";
-import { until } from "lit-html/directives/until";
+import { until } from "lit/directives/until";
import { DEFAULT_CONFIG } from "../../../api/Config";
import { t } from "@lingui/macro";
diff --git a/web/src/user/user-settings/stages/StageSettings.ts b/web/src/user/user-settings/stages/StageSettings.ts
index 41062d8e4..75c64af9b 100644
--- a/web/src/user/user-settings/stages/StageSettings.ts
+++ b/web/src/user/user-settings/stages/StageSettings.ts
@@ -1,7 +1,8 @@
import { StagesApi, UserSetting } from "@goauthentik/api";
import { t } from "@lingui/macro";
-import { CSSResult, customElement, html, LitElement, property, TemplateResult } from "lit-element";
-import { until } from "lit-html/directives/until";
+import { CSSResult, html, LitElement, TemplateResult } from "lit";
+import { customElement, property } from "lit/decorators";
+import { until } from "lit/directives/until";
import { DEFAULT_CONFIG } from "../../../api/Config";
import { EVENT_REFRESH } from "../../../constants";
import PFStack from "@patternfly/patternfly/layouts/Stack/stack.css";
diff --git a/web/src/user/user-settings/stages/UserSettingsAuthenticatorDuo.ts b/web/src/user/user-settings/stages/UserSettingsAuthenticatorDuo.ts
index e36597d30..71ef7951e 100644
--- a/web/src/user/user-settings/stages/UserSettingsAuthenticatorDuo.ts
+++ b/web/src/user/user-settings/stages/UserSettingsAuthenticatorDuo.ts
@@ -1,7 +1,8 @@
import { AuthenticatorsApi } from "@goauthentik/api";
import { t } from "@lingui/macro";
-import { customElement, html, TemplateResult } from "lit-element";
-import { until } from "lit-html/directives/until";
+import { html, TemplateResult } from "lit";
+import { customElement } from "lit/decorators";
+import { until } from "lit/directives/until";
import { DEFAULT_CONFIG } from "../../../api/Config";
import { BaseUserSettings } from "../BaseUserSettings";
import { EVENT_REFRESH } from "../../../constants";
diff --git a/web/src/user/user-settings/stages/UserSettingsAuthenticatorStatic.ts b/web/src/user/user-settings/stages/UserSettingsAuthenticatorStatic.ts
index 4331547f3..303e923da 100644
--- a/web/src/user/user-settings/stages/UserSettingsAuthenticatorStatic.ts
+++ b/web/src/user/user-settings/stages/UserSettingsAuthenticatorStatic.ts
@@ -1,11 +1,12 @@
import { AuthenticatorsApi } from "@goauthentik/api";
import { t } from "@lingui/macro";
-import { CSSResult, customElement, html, TemplateResult } from "lit-element";
-import { until } from "lit-html/directives/until";
+import { CSSResult, html, TemplateResult } from "lit";
+import { until } from "lit/directives/until";
import { DEFAULT_CONFIG } from "../../../api/Config";
import { STATIC_TOKEN_STYLE } from "../../../flows/stages/authenticator_static/AuthenticatorStaticStage";
import { BaseUserSettings } from "../BaseUserSettings";
import { EVENT_REFRESH } from "../../../constants";
+import { customElement } from "lit/decorators";
@customElement("ak-user-settings-authenticator-static")
export class UserSettingsAuthenticatorStatic extends BaseUserSettings {
diff --git a/web/src/user/user-settings/stages/UserSettingsAuthenticatorTOTP.ts b/web/src/user/user-settings/stages/UserSettingsAuthenticatorTOTP.ts
index 271ccbbf6..87bdafb97 100644
--- a/web/src/user/user-settings/stages/UserSettingsAuthenticatorTOTP.ts
+++ b/web/src/user/user-settings/stages/UserSettingsAuthenticatorTOTP.ts
@@ -1,7 +1,8 @@
import { AuthenticatorsApi } from "@goauthentik/api";
import { t } from "@lingui/macro";
-import { customElement, html, TemplateResult } from "lit-element";
-import { until } from "lit-html/directives/until";
+import { html, TemplateResult } from "lit";
+import { customElement } from "lit/decorators";
+import { until } from "lit/directives/until";
import { DEFAULT_CONFIG } from "../../../api/Config";
import { BaseUserSettings } from "../BaseUserSettings";
import { EVENT_REFRESH } from "../../../constants";
diff --git a/web/src/user/user-settings/stages/UserSettingsAuthenticatorWebAuthn.ts b/web/src/user/user-settings/stages/UserSettingsAuthenticatorWebAuthn.ts
index d806fc14c..9d6baead4 100644
--- a/web/src/user/user-settings/stages/UserSettingsAuthenticatorWebAuthn.ts
+++ b/web/src/user/user-settings/stages/UserSettingsAuthenticatorWebAuthn.ts
@@ -1,7 +1,8 @@
-import { CSSResult, customElement, html, TemplateResult } from "lit-element";
+import { CSSResult, html, TemplateResult } from "lit";
+import { customElement } from "lit/decorators";
import { t } from "@lingui/macro";
import { AuthenticatorsApi, WebAuthnDevice } from "@goauthentik/api";
-import { until } from "lit-html/directives/until";
+import { until } from "lit/directives/until";
import { DEFAULT_CONFIG } from "../../../api/Config";
import { BaseUserSettings } from "../BaseUserSettings";
import PFDataList from "@patternfly/patternfly/components/DataList/data-list.css";
@@ -11,7 +12,7 @@ import "../../../elements/forms/DeleteForm";
import "../../../elements/forms/Form";
import "../../../elements/forms/ModalForm";
import "../../../elements/forms/HorizontalFormElement";
-import { ifDefined } from "lit-html/directives/if-defined";
+import { ifDefined } from "lit/directives/if-defined";
import { EVENT_REFRESH } from "../../../constants";
@customElement("ak-user-settings-authenticator-webauthn")
diff --git a/web/src/user/user-settings/stages/UserSettingsPassword.ts b/web/src/user/user-settings/stages/UserSettingsPassword.ts
index ed14e9239..c5235d53a 100644
--- a/web/src/user/user-settings/stages/UserSettingsPassword.ts
+++ b/web/src/user/user-settings/stages/UserSettingsPassword.ts
@@ -1,7 +1,8 @@
-import { customElement, html, TemplateResult } from "lit-element";
+import { html, TemplateResult } from "lit";
+import { customElement } from "lit/decorators";
import { t } from "@lingui/macro";
import { BaseUserSettings } from "../BaseUserSettings";
-import { ifDefined } from "lit-html/directives/if-defined";
+import { ifDefined } from "lit/directives/if-defined";
@customElement("ak-user-settings-password")
export class UserSettingsPassword extends BaseUserSettings {
diff --git a/web/src/user/user-settings/tokens/UserTokenForm.ts b/web/src/user/user-settings/tokens/UserTokenForm.ts
index 3c4ffd4c2..80b4b09b7 100644
--- a/web/src/user/user-settings/tokens/UserTokenForm.ts
+++ b/web/src/user/user-settings/tokens/UserTokenForm.ts
@@ -1,9 +1,9 @@
import { CoreApi, IntentEnum, Token } from "@goauthentik/api";
import { t } from "@lingui/macro";
-import { customElement, property } from "lit-element";
-import { html, TemplateResult } from "lit-html";
+import { customElement, property } from "lit/decorators";
+import { html, TemplateResult } from "lit";
import { DEFAULT_CONFIG } from "../../../api/Config";
-import { ifDefined } from "lit-html/directives/if-defined";
+import { ifDefined } from "lit/directives/if-defined";
import "../../../elements/forms/HorizontalFormElement";
import { ModelForm } from "../../../elements/forms/ModelForm";
diff --git a/web/src/user/user-settings/tokens/UserTokenList.ts b/web/src/user/user-settings/tokens/UserTokenList.ts
index d85bd7057..5193bca1b 100644
--- a/web/src/user/user-settings/tokens/UserTokenList.ts
+++ b/web/src/user/user-settings/tokens/UserTokenList.ts
@@ -1,5 +1,6 @@
import { t } from "@lingui/macro";
-import { CSSResult, customElement, html, property, TemplateResult } from "lit-element";
+import { CSSResult, html, TemplateResult } from "lit";
+import { customElement, property } from "lit/decorators";
import { AKResponse } from "../../../api/Client";
import PFDescriptionList from "@patternfly/patternfly/components/DescriptionList/description-list.css";
diff --git a/web/src/utils.ts b/web/src/utils.ts
index 1993f5267..e41af1a83 100644
--- a/web/src/utils.ts
+++ b/web/src/utils.ts
@@ -1,5 +1,5 @@
import { t } from "@lingui/macro";
-import { html, TemplateResult } from "lit-html";
+import { html, TemplateResult } from "lit";
import "./elements/EmptyState";
export function getCookie(name: string): string {