diff --git a/web/src/elements/Interface/BrandContextController.ts b/web/src/elements/Interface/BrandContextController.ts
index ce47875443..ac3106ed58 100644
--- a/web/src/elements/Interface/BrandContextController.ts
+++ b/web/src/elements/Interface/BrandContextController.ts
@@ -1,5 +1,5 @@
-import { EVENT_REFRESH } from "@goauthentik/authentik/common/constants";
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config";
+import { EVENT_REFRESH } from "@goauthentik/common/constants";
import { authentikBrandContext } from "@goauthentik/elements/AuthentikContexts";
import type { ReactiveElementHost } from "@goauthentik/elements/types.js";
diff --git a/web/src/elements/Interface/ConfigContextController.ts b/web/src/elements/Interface/ConfigContextController.ts
index 35e38d54ea..c626a7a9c9 100644
--- a/web/src/elements/Interface/ConfigContextController.ts
+++ b/web/src/elements/Interface/ConfigContextController.ts
@@ -1,5 +1,5 @@
-import { EVENT_REFRESH } from "@goauthentik/authentik/common/constants";
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config";
+import { EVENT_REFRESH } from "@goauthentik/common/constants";
import { globalAK } from "@goauthentik/common/global";
import { authentikConfigContext } from "@goauthentik/elements/AuthentikContexts";
import type { ReactiveElementHost } from "@goauthentik/elements/types.js";
diff --git a/web/src/elements/Interface/EnterpriseContextController.ts b/web/src/elements/Interface/EnterpriseContextController.ts
index faa3b4823b..f0cc1ac2a8 100644
--- a/web/src/elements/Interface/EnterpriseContextController.ts
+++ b/web/src/elements/Interface/EnterpriseContextController.ts
@@ -1,5 +1,5 @@
-import { EVENT_REFRESH_ENTERPRISE } from "@goauthentik/authentik/common/constants";
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config";
+import { EVENT_REFRESH_ENTERPRISE } from "@goauthentik/common/constants";
import { authentikEnterpriseContext } from "@goauthentik/elements/AuthentikContexts";
import type { ReactiveElementHost } from "@goauthentik/elements/types.js";
diff --git a/web/src/elements/SyncStatusCard.ts b/web/src/elements/SyncStatusCard.ts
index db8a4f17d7..9009322027 100644
--- a/web/src/elements/SyncStatusCard.ts
+++ b/web/src/elements/SyncStatusCard.ts
@@ -1,7 +1,7 @@
-import { EVENT_REFRESH } from "@goauthentik/authentik/common/constants";
-import { getRelativeTime } from "@goauthentik/authentik/common/utils";
-import { AKElement } from "@goauthentik/authentik/elements/Base";
+import { EVENT_REFRESH } from "@goauthentik/common/constants";
+import { getRelativeTime } from "@goauthentik/common/utils";
import "@goauthentik/components/ak-status-label";
+import { AKElement } from "@goauthentik/elements/Base";
import "@goauthentik/elements/EmptyState";
import "@goauthentik/elements/events/LogViewer";
diff --git a/web/src/elements/ak-locale-context/configureLocale.ts b/web/src/elements/ak-locale-context/configureLocale.ts
index 9d007111d3..ddf47c85b1 100644
--- a/web/src/elements/ak-locale-context/configureLocale.ts
+++ b/web/src/elements/ak-locale-context/configureLocale.ts
@@ -1,7 +1,6 @@
-import { sourceLocale, targetLocales } from "@goauthentik/authentik/locale-codes";
-
import { configureLocalization } from "@lit/localize";
+import { sourceLocale, targetLocales } from "../../locale-codes";
import { getBestMatchLocale } from "./helpers";
type LocaleGetter = ReturnType
["getLocale"];
diff --git a/web/src/elements/wizard/TypeCreateWizardPage.ts b/web/src/elements/wizard/TypeCreateWizardPage.ts
new file mode 100644
index 0000000000..567edd579d
--- /dev/null
+++ b/web/src/elements/wizard/TypeCreateWizardPage.ts
@@ -0,0 +1,146 @@
+import "@goauthentik/admin/common/ak-license-notice";
+import { WithLicenseSummary } from "@goauthentik/elements/Interface/licenseSummaryProvider";
+import { WizardPage } from "@goauthentik/elements/wizard/WizardPage";
+
+import { msg, str } from "@lit/localize";
+import { CSSResult, TemplateResult, css, html, nothing } from "lit";
+import { customElement, property } from "lit/decorators.js";
+
+import PFCard from "@patternfly/patternfly/components/Card/card.css";
+import PFForm from "@patternfly/patternfly/components/Form/form.css";
+import PFRadio from "@patternfly/patternfly/components/Radio/radio.css";
+import PFGrid from "@patternfly/patternfly/layouts/Grid/grid.css";
+import PFBase from "@patternfly/patternfly/patternfly-base.css";
+
+import { TypeCreate } from "@goauthentik/api";
+
+export enum TypeCreateWizardPageLayouts {
+ list = "list",
+ grid = "grid",
+}
+
+@customElement("ak-wizard-page-type-create")
+export class TypeCreateWizardPage extends WithLicenseSummary(WizardPage) {
+ @property({ attribute: false })
+ types: TypeCreate[] = [];
+
+ @property({ attribute: false })
+ selectedType?: TypeCreate;
+
+ @property({ type: String })
+ layout: TypeCreateWizardPageLayouts = TypeCreateWizardPageLayouts.list;
+
+ static get styles(): CSSResult[] {
+ return [
+ PFBase,
+ PFForm,
+ PFGrid,
+ PFRadio,
+ PFCard,
+ css`
+ .pf-c-card__header-main img {
+ max-height: 2em;
+ min-height: 2em;
+ }
+ :host([theme="dark"]) .pf-c-card__header-main img {
+ filter: invert(1);
+ }
+ `,
+ ];
+ }
+
+ sidebarLabel = () => msg("Select type");
+
+ activeCallback: () => Promise = async () => {
+ this.host.isValid = false;
+ if (this.selectedType) {
+ this.selectDispatch(this.selectedType);
+ }
+ };
+
+ private selectDispatch(type: TypeCreate) {
+ this.dispatchEvent(
+ new CustomEvent("select", {
+ detail: type,
+ bubbles: true,
+ composed: true,
+ }),
+ );
+ }
+
+ renderGrid(): TemplateResult {
+ return html`
+ ${this.types.map((type, idx) => {
+ const requiresEnterprise = type.requiresEnterprise && !this.hasEnterpriseLicense;
+ return html`
{
+ if (requiresEnterprise) {
+ return;
+ }
+ this.selectDispatch(type);
+ this.selectedType = type;
+ }}
+ >
+ ${type.iconUrl
+ ? html``
+ : nothing}
+
${type.name}
+
${type.description}
+ ${requiresEnterprise
+ ? html` `
+ : nothing}
+
`;
+ })}
+
`;
+ }
+
+ renderList(): TemplateResult {
+ return html``;
+ }
+
+ render(): TemplateResult {
+ switch (this.layout) {
+ case TypeCreateWizardPageLayouts.grid:
+ return this.renderGrid();
+ case TypeCreateWizardPageLayouts.list:
+ return this.renderList();
+ }
+ }
+}
diff --git a/web/src/user/user-settings/tokens/UserTokenForm.ts b/web/src/user/user-settings/tokens/UserTokenForm.ts
index eb94821616..d0fce872f2 100644
--- a/web/src/user/user-settings/tokens/UserTokenForm.ts
+++ b/web/src/user/user-settings/tokens/UserTokenForm.ts
@@ -1,5 +1,5 @@
-import { dateTimeLocal } from "@goauthentik/authentik/common/utils";
import { DEFAULT_CONFIG } from "@goauthentik/common/api/config";
+import { dateTimeLocal } from "@goauthentik/common/utils";
import "@goauthentik/elements/forms/HorizontalFormElement";
import { ModelForm } from "@goauthentik/elements/forms/ModelForm";
diff --git a/web/tsconfig.json b/web/tsconfig.json
index 887178d6d3..c7fd0f6358 100644
--- a/web/tsconfig.json
+++ b/web/tsconfig.json
@@ -2,7 +2,6 @@
"extends": "./tsconfig.base.json",
"compilerOptions": {
"paths": {
- "@goauthentik/authentik/*": ["src/*"],
"@goauthentik/admin/*": ["src/admin/*"],
"@goauthentik/common/*": ["src/common/*"],
"@goauthentik/components/*": ["src/components/*"],