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 && (
+
+ )}
+
+
+ );
+}
diff --git a/apps/landing/src/pages/index.tsx b/apps/landing/src/pages/index.tsx
index 1a0081c6f..a0a19c123 100644
--- a/apps/landing/src/pages/index.tsx
+++ b/apps/landing/src/pages/index.tsx
@@ -1,4 +1,4 @@
-import React from 'react';
+import React, { useEffect } from 'react';
import { Button } from '@sd/ui';
import { Bubbles } from '../components/Bubbles';
@@ -7,6 +7,7 @@ import { Footer } from '../components/Footer';
import { Apple, Github, Linux, Windows } from '@icons-pack/react-simple-icons';
import { useState } from 'react';
import clsx from 'clsx';
+import AppEmbed from '../components/AppEmbed';
interface SectionProps {
orientation: 'left' | 'right';
@@ -40,7 +41,18 @@ function Section(props: SectionProps = { orientation: 'left' }) {
}
function Page() {
- const [showApp, setShowApp] = useState(false);
+ // const [appLoaded, setAppLoaded] = useState(false);
+
+ // function handleResize(event: Event) {
+ // if (window.innerWidth > 1000) setShowApp(true);
+ // else if (showApp) setShowApp(false);
+ // }
+
+ // useEffect(() => {
+ // window.addEventListener('resize', handleResize);
+ // return () => window.removeEventListener('resize', handleResize);
+ // }, []);
+
return (
<>
@@ -85,21 +97,7 @@ function Page() {
Shortly after to iOS & Android.
-
+
{
+ window.parent.postMessage('spacedrive-hello', '*');
+ }, []);
+
return (
{/*
*/}
diff --git a/packages/interface/package.json b/packages/interface/package.json
index 06541872e..74ca74008 100644
--- a/packages/interface/package.json
+++ b/packages/interface/package.json
@@ -12,6 +12,7 @@
},
"dependencies": {
"@apollo/client": "^3.5.10",
+ "@fontsource/inter": "^4.5.7",
"@headlessui/react": "^1.5.0",
"@heroicons/react": "^1.0.6",
"@radix-ui/react-dialog": "^0.1.7",
diff --git a/packages/interface/src/App.tsx b/packages/interface/src/App.tsx
index 1781dfe73..fff7da3f2 100644
--- a/packages/interface/src/App.tsx
+++ b/packages/interface/src/App.tsx
@@ -28,6 +28,9 @@ import { CoreEvent } from '@sd/core';
import clsx from 'clsx';
import './style.scss';
import { ContentScreen } from './screens/Content';
+import LibrarySettings from './screens/settings/LibrarySettings';
+
+import '@fontsource/inter/variable.css';
const queryClient = new QueryClient();
@@ -92,9 +95,12 @@ function SettingsRoutes({ modal = false }) {
} />
>} />
} />
+ } />
>} />
>} />
>} />
+ >} />
+ >} />
diff --git a/packages/interface/src/components/device/Device.tsx b/packages/interface/src/components/device/Device.tsx
index 5390cdaad..14314d6c1 100644
--- a/packages/interface/src/components/device/Device.tsx
+++ b/packages/interface/src/components/device/Device.tsx
@@ -78,8 +78,9 @@ export function Device(props: DeviceProps) {
{/*
*/}
- {props.locations.map((location) => (
+ {props.locations.map((location, key) => (
handleSelect(location.name)}
fileName={location.name}
diff --git a/packages/interface/src/components/file/Sidebar.tsx b/packages/interface/src/components/file/Sidebar.tsx
index 0aa0bcac3..e6d28a73f 100644
--- a/packages/interface/src/components/file/Sidebar.tsx
+++ b/packages/interface/src/components/file/Sidebar.tsx
@@ -21,7 +21,7 @@ export const SidebarLink = (props: NavLinkProps & { children: React.ReactNode })
{({ isActive }) => (
= (props) => {
= (props) => {
return (
-
+
{props.title}
{!!props.description &&
{props.description}
}
{!props.mini && props.children}
diff --git a/packages/interface/src/screens/Overview.tsx b/packages/interface/src/screens/Overview.tsx
index a1c741076..300d729f4 100644
--- a/packages/interface/src/screens/Overview.tsx
+++ b/packages/interface/src/screens/Overview.tsx
@@ -33,8 +33,8 @@ export const OverviewScreen: React.FC<{}> = (props) => {
-
-
+
+
@@ -43,7 +43,7 @@ export const OverviewScreen: React.FC<{}> = (props) => {
-
+ {/*
*/}
= () => {
Library
+
+
+ Database
+
Locations
-
-
- Media
-
+
Keys
diff --git a/packages/interface/src/screens/settings/GeneralSettings.tsx b/packages/interface/src/screens/settings/GeneralSettings.tsx
index 8fc571dfa..2e6539fec 100644
--- a/packages/interface/src/screens/settings/GeneralSettings.tsx
+++ b/packages/interface/src/screens/settings/GeneralSettings.tsx
@@ -48,10 +48,7 @@ export default function GeneralSettings() {
*/}
-
+
+ {/**/}
+
+
Library database
+
+ The database contains all library data and file metadata.
+
+
+
+
+
+
+
+
+ );
+}
diff --git a/packages/interface/src/screens/settings/SecuritySettings.tsx b/packages/interface/src/screens/settings/SecuritySettings.tsx
index b8c17ab1a..2935e22f8 100644
--- a/packages/interface/src/screens/settings/SecuritySettings.tsx
+++ b/packages/interface/src/screens/settings/SecuritySettings.tsx
@@ -6,8 +6,8 @@ export default function SecuritySettings() {
return (
diff --git a/packages/interface/src/style.scss b/packages/interface/src/style.scss
index 57cb82988..ad0bfca15 100644
--- a/packages/interface/src/style.scss
+++ b/packages/interface/src/style.scss
@@ -3,7 +3,7 @@ button {
@apply cursor-default;
}
-
+body { font-family: "InterVariable", sans-serif; }
.no-scrollbar {
-ms-overflow-style: none; /* for Internet Explorer, Edge */
diff --git a/packages/ui/style/style.scss b/packages/ui/style/style.scss
index 0b93a3fd3..0031571c5 100644
--- a/packages/ui/style/style.scss
+++ b/packages/ui/style/style.scss
@@ -22,4 +22,38 @@
background-image: url('/app.png');
background-size: contain;
background-repeat: no-repeat;
+ background-position: center;
+}
+
+
+.fade-in-image {
+ animation: fadeIn 1s;
+ -webkit-animation: fadeIn 1s;
+ -moz-animation: fadeIn 1s;
+ -o-animation: fadeIn 1s;
+ -ms-animation: fadeIn 1s;
+}
+@keyframes fadeIn {
+ 0% {opacity:0;}
+ 100% {opacity:1;}
+}
+
+@-moz-keyframes fadeIn {
+ 0% {opacity:0;}
+ 100% {opacity:1;}
+}
+
+@-webkit-keyframes fadeIn {
+ 0% {opacity:0;}
+ 100% {opacity:1;}
+}
+
+@-o-keyframes fadeIn {
+ 0% {opacity:0;}
+ 100% {opacity:1;}
+}
+
+@-ms-keyframes fadeIn {
+ 0% {opacity:0;}
+ 100% {opacity:1;}
}
diff --git a/packages/ui/style/tailwind.js b/packages/ui/style/tailwind.js
index 83582a0df..b61785400 100644
--- a/packages/ui/style/tailwind.js
+++ b/packages/ui/style/tailwind.js
@@ -11,6 +11,13 @@ module.exports = function (app, options) {
darkMode: app == 'landing' ? 'class' : 'class',
mode: 'jit',
theme: {
+ // fontFamily: {
+ // sans: ['Inter', 'ui-sans-serif', 'system-ui'],
+ // serif: ['Inter', 'ui-serif', 'Georgia'],
+ // mono: ['ui-monospace', 'SFMono-Regular'],
+ // display: ['Inter'],
+ // body: ['"Inter"']
+ // },
fontSize: {
'tiny': '.65rem',
'xs': '.75rem',
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 5a151835c..a27d152b9 100644
Binary files a/pnpm-lock.yaml and b/pnpm-lock.yaml differ