{isShowNavbar && (
)}
diff --git a/web/components/modals/app-settings-modal.tsx b/web/components/modals/app-settings-modal.tsx
index 1fb2c26..efae4a3 100644
--- a/web/components/modals/app-settings-modal.tsx
+++ b/web/components/modals/app-settings-modal.tsx
@@ -21,7 +21,7 @@ import { PlatformEnum } from "@/lib/types";
import useExtensionManager from "@/lib/hooks/use-extension-manager";
import { ExtensionTypeEnum } from "@pulse-editor/shared-utils";
import { llmProviderOptions } from "@/lib/modalities/llm/options";
-import { getAPIKey, setAPIKey } from "@/lib/settings/settings";
+import { getAPIKey, setAPIKey } from "@/lib/settings/api-manager-utils";
import { imageGenProviderOptions } from "@/lib/modalities/image-gen/options";
import { videoGenProviderOptions } from "@/lib/modalities/video-gen/options";
@@ -945,20 +945,15 @@ export default function AppSettingsModal({
return (
- <>
-
- >
+
);
}
diff --git a/web/components/modals/login-modal.tsx b/web/components/modals/login-modal.tsx
new file mode 100644
index 0000000..7eb20ec
--- /dev/null
+++ b/web/components/modals/login-modal.tsx
@@ -0,0 +1,90 @@
+import { Button, Divider, Input } from "@heroui/react";
+import { useContext, useEffect, useState } from "react";
+import ModalWrapper from "./modal-wrapper";
+import { EditorContext } from "../providers/editor-context-provider";
+import { getPlatform } from "@/lib/platform-api/platform-checker";
+import toast from "react-hot-toast";
+import { useAuth } from "@/lib/hooks/use-auth";
+import { PlatformEnum } from "@/lib/types";
+
+export default function LoginModal({ signIn }: { signIn: () => void }) {
+ const editorContext = useContext(EditorContext);
+ const [workspaceAddress, setWorkspaceAddress] = useState
(
+ undefined,
+ );
+
+ const [isModelOpen, setIsModelOpen] = useState(false);
+
+ const { toggleOfflineMode } = useAuth();
+
+ // Open remote instance selection if the current platform is web
+ useEffect(() => {
+ if (!editorContext?.editorStates?.currentWorkspace) {
+ setIsModelOpen(true);
+ }
+ }, [editorContext?.editorStates?.currentWorkspace]);
+
+ return (
+
+
+
Access Pulse Editor Cloud Workspace
+
+
+
+
Connect to Self-hosted Remote Workspace
+
+
setWorkspaceAddress((prev) => e.target.value)}
+ />
+
+
+
+
+
+
+ );
+}
diff --git a/web/components/modals/modal-wrapper.tsx b/web/components/modals/modal-wrapper.tsx
index 8a0f73a..d4a6e73 100644
--- a/web/components/modals/modal-wrapper.tsx
+++ b/web/components/modals/modal-wrapper.tsx
@@ -8,6 +8,7 @@ export default function ModalWrapper({
title,
isShowGoBack,
goBackCallback,
+ placement = undefined,
}: {
children?: React.ReactNode;
isOpen: boolean;
@@ -15,6 +16,14 @@ export default function ModalWrapper({
title: string;
isShowGoBack?: boolean;
goBackCallback?: () => void;
+ placement?:
+ | "center"
+ | "bottom"
+ | "top"
+ | "auto"
+ | "top-center"
+ | "bottom-center"
+ | undefined;
}) {
return (
{isShowGoBack && (