Spaces:
				
			
			
	
			
			
					
		Running
		
	
	
	
			
			
	
	
	
	
		
		
					
		Running
		
	File size: 2,785 Bytes
			
			| a9bf795 d66b261 7f2a14a a9bf795 d66b261 7f2a14a a9bf795 d66b261 a9bf795 8e783b9 d66b261 a9bf795 76513b5 7f2a14a a9bf795 7f2a14a d66b261 7f2a14a d66b261 7f2a14a d66b261 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 | /**
 * Copyright 2024 Google LLC
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
import React, { useEffect, useRef, useState } from "react";
import "./App.scss";
import { LiveAPIProvider } from "./contexts/LiveAPIContext";
import SidePanel from "./components/side-panel/SidePanel";
import { Altair } from "./components/altair/Altair";
import ControlTray from "./components/control-tray/ControlTray";
import { IOSModal } from "./components/ios-modal/IOSModal";
import { isIOS } from "./lib/platform";
import cn from "classnames";
// تعریف نوع برای پیکربندی اولیه
interface LiveConfig {
  model: string;
  systemInstruction: {
    parts: Array<{ text: string }>;
  };
}
function App() {
  const videoRef = useRef<HTMLVideoElement>(null);
  const [videoStream, setVideoStream] = useState<MediaStream | null>(null);
  const [showIOSModal, setShowIOSModal] = useState(false);
  useEffect(() => {
    if (isIOS()) {
      setShowIOSModal(true);
    }
  }, []);
  // دستورالعمل شخصیسازی شده با شخصیت شوخ طبع
  const myCustomInstruction = `
  // ... [همان محتوای قبلی دستورالعمل شوخ طبع]
  `.trim();
  // اگر LiveAPIProvider از initialConfig پشتیبانی نمیکند، میتوانیم از useEffect برای تنظیمات استفاده کنیم
  // یا اگر API دیگری دارد، از آن استفاده کنیم
  return (
    <div className="App">
      <LiveAPIProvider>
        <div className="streaming-console">
          <SidePanel />
          <main>
            <div className="main-app-area">
              <Altair />
              <video
                className={cn("stream", {
                  hidden: !videoRef.current || !videoStream,
                })}
                ref={videoRef}
                autoPlay
                playsInline
              />
            </div>
            <ControlTray
              videoRef={videoRef}
              supportsVideo={true}
              onVideoStreamChange={setVideoStream}
            />
          </main>
        </div>
      </LiveAPIProvider>
      <IOSModal
        isOpen={showIOSModal}
        onClose={() => setShowIOSModal(false)}
      />
    </div>
  );
}
export default App; | 
