diff --git a/website/src/app/playground/page.tsx b/website/src/app/playground/page.tsx
index 342efe5c..9d3d751f 100644
--- a/website/src/app/playground/page.tsx
+++ b/website/src/app/playground/page.tsx
@@ -2,7 +2,7 @@
import dynamic from "next/dynamic";
import React, { useEffect, useState } from "react";
-import { Scroll, Info, Save } from "lucide-react";
+import { Scroll, Info, Save, Monitor, AlertCircle } from "lucide-react";
import { Button } from "@/components/ui/button";
import {
ResizableHandle,
@@ -166,7 +166,47 @@ const RightPanelIcon: React.FC<{ isActive: boolean }> = ({ isActive }) => (
);
+const MobileWarning: React.FC = () => (
+
+
+
+
+ Desktop Required
+
+
+ DocETL requires a larger screen for the best experience. Please switch
+ to a desktop or laptop computer to access all features.
+
+
+ Recommended minimum screen width: 768px
+
+
+
+
+);
+
+const LoadingScreen: React.FC = () => (
+
+);
+
const CodeEditorPipelineApp: React.FC = () => {
+ const [isLoading, setIsLoading] = useState(true);
+ const [isMobileView, setIsMobileView] = useState(false);
const [isMounted, setIsMounted] = useState(false);
const [showFileExplorer, setShowFileExplorer] = useState(true);
const [showOutput, setShowOutput] = useState(true);
@@ -176,10 +216,6 @@ const CodeEditorPipelineApp: React.FC = () => {
const [showAPIKeysDialog, setShowAPIKeysDialog] = useState(false);
const { theme, setTheme } = useTheme();
- useEffect(() => {
- setIsMounted(true);
- }, []);
-
const {
currentFile,
setCurrentFile,
@@ -194,12 +230,27 @@ const CodeEditorPipelineApp: React.FC = () => {
} = usePipelineContext();
useEffect(() => {
- const savedNamespace = localStorage.getItem(localStorageKeys.NAMESPACE_KEY);
- if (!savedNamespace) {
- setShowNamespaceDialog(true);
- }
+ const checkScreenSize = () => {
+ const isMobile = window.innerWidth < 768;
+ setIsMobileView(isMobile);
+ setIsLoading(false);
+ };
+
+ checkScreenSize();
+ setIsMounted(true);
+ window.addEventListener("resize", checkScreenSize);
+
+ return () => window.removeEventListener("resize", checkScreenSize);
}, []);
+ if (isLoading) {
+ return ;
+ }
+
+ if (isMobileView) {
+ return ;
+ }
+
const handleSaveAs = async () => {
try {
// Collect all localStorage data