diff --git a/apps/landing/env.d.ts b/apps/landing/env.d.ts index 61d405857..d00f17c88 100644 --- a/apps/landing/env.d.ts +++ b/apps/landing/env.d.ts @@ -21,12 +21,4 @@ declare module '*.md' { // When "Mode.React" is requested. VFC could take a generic like React.VFC<{ MyComponent: TypeOfMyComponent }> import React from 'react'; const ReactComponent: React.VFC; - - // When "Mode.Vue" is requested - import { ComponentOptions, Component } from 'vue'; - const VueComponent: ComponentOptions; - const VueComponentWith: (components: Record) => ComponentOptions; - - // Modify below per your usage - export { attributes, toc, html, ReactComponent, VueComponent, VueComponentWith }; } diff --git a/apps/landing/package.json b/apps/landing/package.json index d2057e562..06135ab75 100644 --- a/apps/landing/package.json +++ b/apps/landing/package.json @@ -8,6 +8,8 @@ "serve": "vite preview" }, "dependencies": { + "@fontsource/inter": "^4.5.7", + "@headlessui/react": "^1.5.0", "@heroicons/react": "^1.0.6", "@icons-pack/react-simple-icons": "^4.6.1", "@sd/client": "workspace:*", @@ -23,6 +25,7 @@ "phosphor-react": "^1.4.1", "prismjs": "^1.28.0", "react": "^18.0.0", + "react-device-detect": "^2.2.2", "react-dom": "^18.0.0", "react-helmet": "^6.1.0", "react-router-dom": "6.3.0", diff --git a/apps/landing/public/app.png b/apps/landing/public/app.png index 011f67790..61bda1b33 100644 Binary files a/apps/landing/public/app.png and b/apps/landing/public/app.png differ diff --git a/apps/landing/src/components/AppEmbed.tsx b/apps/landing/src/components/AppEmbed.tsx new file mode 100644 index 000000000..7da758110 --- /dev/null +++ b/apps/landing/src/components/AppEmbed.tsx @@ -0,0 +1,49 @@ +import clsx from 'clsx'; +import React, { useState } from 'react'; +import { useEffect } from 'react'; +import { isMobile } from 'react-device-detect'; + +export default function AppEmbed() { + const [showApp, setShowApp] = useState(false); + const [iFrameAppReady, setIframeAppReady] = useState(false); + const [imgFallback, setImageFallback] = useState(false); + + function handleEvent(e: any) { + if (e.data === 'spacedrive-hello') { + if (!iFrameAppReady && !isMobile) setIframeAppReady(true); + } + } + + useEffect(() => { + window.addEventListener('message', handleEvent, false); + setShowApp(true); + + return () => window.removeEventListener('message', handleEvent); + }, []); + + useEffect(() => { + setTimeout(() => { + if (!iFrameAppReady) setImageFallback(true); + }, 1000); + }, []); + + return ( +
+
+ {imgFallback &&
} + {showApp && ( +