├── .gitignore ├── README.md ├── index.html ├── package.json ├── pnpm-lock.yaml ├── postcss.config.js ├── public ├── apps │ ├── edge.svg │ ├── file-explorer.png │ ├── search.svg │ └── windows-terminal.png ├── fonts │ └── segoe-ui-variable │ │ ├── Segoe-UI-Variable-Static-Display-Bold.ttf │ │ ├── Segoe-UI-Variable-Static-Display-Light.ttf │ │ ├── Segoe-UI-Variable-Static-Display-Semibold.ttf │ │ ├── Segoe-UI-Variable-Static-Display-Semilight.ttf │ │ ├── Segoe-UI-Variable-Static-Display.ttf │ │ ├── Segoe-UI-Variable-Static-Small-Bold.ttf │ │ ├── Segoe-UI-Variable-Static-Small-Light.ttf │ │ ├── Segoe-UI-Variable-Static-Small-Semibold.ttf │ │ ├── Segoe-UI-Variable-Static-Small-Semilight.ttf │ │ ├── Segoe-UI-Variable-Static-Small.ttf │ │ ├── Segoe-UI-Variable-Static-Text-Bold.ttf │ │ ├── Segoe-UI-Variable-Static-Text-Light.ttf │ │ ├── Segoe-UI-Variable-Static-Text-Semibold.ttf │ │ ├── Segoe-UI-Variable-Static-Text-Semilight.ttf │ │ ├── Segoe-UI-Variable-Static-Text.ttf │ │ └── SegoeUI-VF.ttf ├── icons │ └── pin.png ├── og │ └── og.jpg ├── system-icons │ ├── Audio file.png │ ├── Audio.png │ ├── Blank.png │ ├── Briefcase.png │ ├── Camera.png │ ├── Computer.png │ ├── Control Panel.png │ ├── Defrag.png │ ├── Desktop.png │ ├── Device 2.png │ ├── Device.png │ ├── Drives │ │ ├── 1030.png │ │ ├── 1032.png │ │ ├── 1033.png │ │ ├── 1034.png │ │ ├── 1035.png │ │ ├── 1036.png │ │ ├── 1041.png │ │ ├── 135.png │ │ ├── 136.png │ │ ├── 139.png │ │ ├── 140.png │ │ ├── 141.png │ │ ├── 142.png │ │ ├── 172.png │ │ ├── 173.png │ │ ├── 180.png │ │ ├── 28.png │ │ ├── 29.png │ │ ├── 30.png │ │ ├── 31.png │ │ ├── 33.png │ │ ├── 34.png │ │ ├── 37.png │ │ ├── 38.png │ │ ├── 39.png │ │ ├── 40.png │ │ ├── 41.png │ │ ├── 42.png │ │ ├── 43.png │ │ ├── 44.png │ │ ├── 56.png │ │ ├── 58.png │ │ ├── 60.png │ │ ├── 61.png │ │ ├── 62.png │ │ ├── 63.png │ │ ├── 64.png │ │ ├── 65.png │ │ ├── 75.png │ │ ├── 91.png │ │ ├── 92.png │ │ ├── 96.png │ │ ├── Hardrive Windows.png │ │ └── Hardrive.png │ ├── Emblems │ │ ├── 1010.png │ │ ├── 1027.png │ │ ├── 104.png │ │ ├── 1042.png │ │ ├── 105.png │ │ ├── 106.png │ │ ├── 107.png │ │ ├── 1400.png │ │ ├── 1401.png │ │ ├── 1402.png │ │ ├── 1403.png │ │ ├── 1404.png │ │ ├── 1405.png │ │ ├── 157.png │ │ ├── 163.png │ │ ├── 164.png │ │ ├── 169.png │ │ ├── 170.png │ │ └── 176.png │ ├── Folder 3D.png │ ├── Folder Blue.png │ ├── Folder Contacts.png │ ├── Folder Desktop.png │ ├── Folder Documents.png │ ├── Folder Downloads.png │ ├── Folder Favourites.png │ ├── Folder Fonts.png │ ├── Folder Games.png │ ├── Folder Green.png │ ├── Folder Grey.png │ ├── Folder Links 2.png │ ├── Folder Links.png │ ├── Folder Live - Back.png │ ├── Folder Live - Front.png │ ├── Folder Music.png │ ├── Folder OneDrive.png │ ├── Folder Open.png │ ├── Folder Pictures.png │ ├── Folder Search.png │ ├── Folder Searches.png │ ├── Folder User 2.png │ ├── Folder User.png │ ├── Folder Videos.png │ ├── Folder check.png │ ├── Folder.png │ ├── Hardware.png │ ├── Help 2.png │ ├── Help.png │ ├── History.png │ ├── HomeGroup.png │ ├── Hotspot.png │ ├── Info.png │ ├── Key.png │ ├── Keyboard.png │ ├── Library Library.png │ ├── Library Music.png │ ├── Library TV.png │ ├── Library Videos.png │ ├── Library.png │ ├── Libray Documents.png │ ├── Libray Pictures.png │ ├── Link.png │ ├── Lock.png │ ├── Media.png │ ├── Misc │ │ ├── 1021.png │ │ ├── 103.png │ │ ├── 116.png │ │ ├── 120.png │ │ ├── 124.png │ │ ├── 125.png │ │ ├── 130.png │ │ ├── 14.png │ │ ├── 148.png │ │ ├── 149.png │ │ ├── 15.png │ │ ├── 24.png │ │ ├── 73.png │ │ └── 94.png │ ├── Multimedia file.png │ ├── Music file.png │ ├── Network.png │ ├── Notes.png │ ├── One Drive.png │ ├── Personalization.png │ ├── Phone.png │ ├── Photos file.png │ ├── Photos.png │ ├── Pictures file.png │ ├── Printer 2.png │ ├── Printer.png │ ├── Printer │ │ ├── 26.png │ │ ├── 45.png │ │ ├── 48.png │ │ ├── 49.png │ │ ├── 50.png │ │ ├── 52.png │ │ └── 53.png │ ├── Programs.png │ ├── Quick Access.png │ ├── Recent.png │ ├── Region.png │ ├── Run 1.png │ ├── Run.png │ ├── SHIDI_SHIELD_INTERNAL.png │ ├── Scanner.png │ ├── Screensaver.png │ ├── Search.png │ ├── Security.png │ ├── Settings 2.png │ ├── Settings.png │ ├── Shield.png │ ├── Stop.png │ ├── Tasks.png │ ├── Trash Empty.png │ ├── Trash Full.png │ ├── User.png │ ├── Users.png │ ├── Video device.png │ ├── Video file.png │ ├── Videos file.png │ ├── Warning.png │ ├── Zip.png │ ├── config.png │ ├── dll.png │ ├── exe.png │ └── x.png └── wallpaper │ ├── .pnpm-debug.log │ ├── opened.webp │ ├── shiroko.webp │ ├── win11.jpg │ └── win11.webp ├── src ├── App.tsx ├── apps │ ├── file-explorer │ │ ├── components │ │ │ ├── atoms │ │ │ │ ├── accordion │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── types.ts │ │ │ │ ├── index.ts │ │ │ │ ├── navigation-button │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── types.ts │ │ │ │ ├── sidebar-group │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── types.ts │ │ │ │ ├── sidebar-item │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── types.ts │ │ │ │ └── status │ │ │ │ │ └── index.tsx │ │ │ ├── index.ts │ │ │ ├── molecules │ │ │ │ ├── index.ts │ │ │ │ ├── navigation-bar │ │ │ │ │ └── index.tsx │ │ │ │ ├── sidebar │ │ │ │ │ └── index.tsx │ │ │ │ └── toolbar │ │ │ │ │ └── index.tsx │ │ │ └── organisms │ │ │ │ ├── index.ts │ │ │ │ └── this-pc │ │ │ │ └── index.tsx │ │ ├── file-explorer.module.sass │ │ ├── index.tsx │ │ └── layouts │ │ │ └── tiles │ │ │ ├── app.tsx │ │ │ ├── index.tsx │ │ │ └── tiles.module.sass │ └── index.ts ├── components │ ├── atoms │ │ ├── button │ │ │ ├── button.module.sass │ │ │ ├── index.tsx │ │ │ └── types.ts │ │ ├── index.ts │ │ ├── text-input │ │ │ ├── index.tsx │ │ │ ├── text-input.module.sass │ │ │ └── types.ts │ │ └── tooltip │ │ │ ├── index.tsx │ │ │ ├── tooltip.module.sass │ │ │ └── types.ts │ └── index.ts ├── data │ ├── apps.ts │ └── default.tsx ├── layouts │ ├── contextable │ │ ├── index.tsx │ │ └── types.ts │ ├── index.ts │ └── window │ │ ├── components │ │ └── resizeHandler.tsx │ │ ├── hooks │ │ ├── index.ts │ │ ├── useManager.ts │ │ └── useWindow.ts │ │ ├── index.tsx │ │ ├── types.ts │ │ └── window.module.sass ├── main.tsx ├── modules │ ├── context-menu │ │ ├── components │ │ │ ├── context-balloon │ │ │ │ ├── index.tsx │ │ │ │ └── types.ts │ │ │ ├── context │ │ │ │ ├── index.tsx │ │ │ │ └── types.ts │ │ │ └── index.ts │ │ ├── context.module.sass │ │ ├── index.tsx │ │ └── services │ │ │ └── index.ts │ ├── sidebar │ │ ├── components │ │ │ ├── index.ts │ │ │ └── organisms │ │ │ │ ├── calendar │ │ │ │ └── index.tsx │ │ │ │ └── index.ts │ │ ├── index.tsx │ │ ├── sidebar.module.sass │ │ └── stores │ │ │ └── index.ts │ ├── start │ │ ├── components │ │ │ ├── atoms │ │ │ │ ├── card │ │ │ │ │ ├── card.module.sass │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── types.ts │ │ │ │ ├── index.ts │ │ │ │ ├── li │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── types.ts │ │ │ │ ├── overlay │ │ │ │ │ └── index.tsx │ │ │ │ ├── pin │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── types.ts │ │ │ │ ├── recommended │ │ │ │ │ ├── index.tsx │ │ │ │ │ └── types.ts │ │ │ │ ├── resetter │ │ │ │ │ └── index.tsx │ │ │ │ └── selection │ │ │ │ │ ├── index.tsx │ │ │ │ │ ├── selection.module.sass │ │ │ │ │ └── types.ts │ │ │ ├── index.ts │ │ │ ├── molecules │ │ │ │ ├── all-apps │ │ │ │ │ └── index.tsx │ │ │ │ ├── index.ts │ │ │ │ ├── keyboard-listener │ │ │ │ │ └── index.ts │ │ │ │ ├── quick-view │ │ │ │ │ └── index.tsx │ │ │ │ ├── recommended │ │ │ │ │ └── index.tsx │ │ │ │ ├── search-bar │ │ │ │ │ └── index.tsx │ │ │ │ └── search-options │ │ │ │ │ └── index.tsx │ │ │ └── organisms │ │ │ │ ├── index.ts │ │ │ │ ├── overview │ │ │ │ └── index.tsx │ │ │ │ └── search │ │ │ │ └── index.tsx │ │ ├── index.tsx │ │ ├── layouts │ │ │ ├── animated-page │ │ │ │ ├── animate-page.module.sass │ │ │ │ ├── index.tsx │ │ │ │ └── types.ts │ │ │ ├── index.ts │ │ │ └── start │ │ │ │ ├── index.tsx │ │ │ │ └── types.ts │ │ ├── stores │ │ │ ├── index.ts │ │ │ ├── overview.ts │ │ │ └── search.ts │ │ └── styles.module.sass │ └── taskbar │ │ ├── components │ │ ├── atoms │ │ │ ├── index.ts │ │ │ ├── taskbar-app │ │ │ │ ├── index.tsx │ │ │ │ └── types.ts │ │ │ ├── taskbar-item │ │ │ │ ├── index.tsx │ │ │ │ └── types.ts │ │ │ └── windows-button │ │ │ │ └── index.tsx │ │ ├── index.ts │ │ └── molecules │ │ │ ├── datetime │ │ │ └── index.tsx │ │ │ ├── hidden │ │ │ └── index.tsx │ │ │ ├── index.tsx │ │ │ ├── language │ │ │ └── index.tsx │ │ │ └── network │ │ │ └── index.tsx │ │ ├── index.tsx │ │ └── styles.module.sass ├── services │ └── ease.ts ├── stores │ ├── apps │ │ └── index.tsx │ ├── context-menu │ │ └── index.ts │ ├── index.ts │ └── start │ │ └── index.ts ├── styles │ ├── app.sass │ ├── fonts.sass │ ├── index.sass │ └── tailwind.css ├── types.ts └── vite-env.d.ts ├── tailwind.config.js ├── tsconfig.json └── vite.config.ts /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .DS_Store 3 | dist -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Sun Valley 2 | UI port of Windows 11 to the web 3 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Sun Valley 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 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 66 | 67 | 68 | Blurhash 73 |
74 | 75 | 76 | 77 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "sun-valley", 3 | "version": "0.0.0", 4 | "scripts": { 5 | "dev": "vite", 6 | "build": "tsc && vite build", 7 | "serve": "serve -p 3000 dist", 8 | "start": "serve -p 3000 dist" 9 | }, 10 | "dependencies": { 11 | "@tailwindcss/aspect-ratio": "^0.3.0", 12 | "dayjs": "^1.10.7", 13 | "framer-motion": "^4.1.17", 14 | "jotai": "^1.4.0", 15 | "nanoid": "^3.1.30", 16 | "preact": "^10.5.15", 17 | "react": "^17.0.0", 18 | "react-dom": "^17.0.0", 19 | "react-feather": "^2.0.9", 20 | "tailwindcss": "^2.2.17" 21 | }, 22 | "devDependencies": { 23 | "@prefresh/vite": "^2.2.3", 24 | "@types/node": "^16.11.0", 25 | "@types/react": "^17.0.0", 26 | "@types/react-dom": "^17.0.0", 27 | "@vitejs/plugin-react": "^1.0.0", 28 | "autoprefixer": "^10.3.7", 29 | "postcss": "^8.3.9", 30 | "sass": "^1.43.2", 31 | "serve": "^12.0.1", 32 | "typescript": "^4.3.2", 33 | "vite": "^2.6.4" 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /postcss.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | autoprefixer: {}, 4 | tailwindcss: {} 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /public/apps/edge.svg: -------------------------------------------------------------------------------- 1 | Edge_Logo_265x265 -------------------------------------------------------------------------------- /public/apps/file-explorer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/apps/file-explorer.png -------------------------------------------------------------------------------- /public/apps/search.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/apps/windows-terminal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/apps/windows-terminal.png -------------------------------------------------------------------------------- /public/fonts/segoe-ui-variable/Segoe-UI-Variable-Static-Display-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/fonts/segoe-ui-variable/Segoe-UI-Variable-Static-Display-Bold.ttf -------------------------------------------------------------------------------- /public/fonts/segoe-ui-variable/Segoe-UI-Variable-Static-Display-Light.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/fonts/segoe-ui-variable/Segoe-UI-Variable-Static-Display-Light.ttf -------------------------------------------------------------------------------- /public/fonts/segoe-ui-variable/Segoe-UI-Variable-Static-Display-Semibold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/fonts/segoe-ui-variable/Segoe-UI-Variable-Static-Display-Semibold.ttf -------------------------------------------------------------------------------- /public/fonts/segoe-ui-variable/Segoe-UI-Variable-Static-Display-Semilight.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/fonts/segoe-ui-variable/Segoe-UI-Variable-Static-Display-Semilight.ttf -------------------------------------------------------------------------------- /public/fonts/segoe-ui-variable/Segoe-UI-Variable-Static-Display.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/fonts/segoe-ui-variable/Segoe-UI-Variable-Static-Display.ttf -------------------------------------------------------------------------------- /public/fonts/segoe-ui-variable/Segoe-UI-Variable-Static-Small-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/fonts/segoe-ui-variable/Segoe-UI-Variable-Static-Small-Bold.ttf -------------------------------------------------------------------------------- /public/fonts/segoe-ui-variable/Segoe-UI-Variable-Static-Small-Light.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/fonts/segoe-ui-variable/Segoe-UI-Variable-Static-Small-Light.ttf -------------------------------------------------------------------------------- /public/fonts/segoe-ui-variable/Segoe-UI-Variable-Static-Small-Semibold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/fonts/segoe-ui-variable/Segoe-UI-Variable-Static-Small-Semibold.ttf -------------------------------------------------------------------------------- /public/fonts/segoe-ui-variable/Segoe-UI-Variable-Static-Small-Semilight.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/fonts/segoe-ui-variable/Segoe-UI-Variable-Static-Small-Semilight.ttf -------------------------------------------------------------------------------- /public/fonts/segoe-ui-variable/Segoe-UI-Variable-Static-Small.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/fonts/segoe-ui-variable/Segoe-UI-Variable-Static-Small.ttf -------------------------------------------------------------------------------- /public/fonts/segoe-ui-variable/Segoe-UI-Variable-Static-Text-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/fonts/segoe-ui-variable/Segoe-UI-Variable-Static-Text-Bold.ttf -------------------------------------------------------------------------------- /public/fonts/segoe-ui-variable/Segoe-UI-Variable-Static-Text-Light.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/fonts/segoe-ui-variable/Segoe-UI-Variable-Static-Text-Light.ttf -------------------------------------------------------------------------------- /public/fonts/segoe-ui-variable/Segoe-UI-Variable-Static-Text-Semibold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/fonts/segoe-ui-variable/Segoe-UI-Variable-Static-Text-Semibold.ttf -------------------------------------------------------------------------------- /public/fonts/segoe-ui-variable/Segoe-UI-Variable-Static-Text-Semilight.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/fonts/segoe-ui-variable/Segoe-UI-Variable-Static-Text-Semilight.ttf -------------------------------------------------------------------------------- /public/fonts/segoe-ui-variable/Segoe-UI-Variable-Static-Text.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/fonts/segoe-ui-variable/Segoe-UI-Variable-Static-Text.ttf -------------------------------------------------------------------------------- /public/fonts/segoe-ui-variable/SegoeUI-VF.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/fonts/segoe-ui-variable/SegoeUI-VF.ttf -------------------------------------------------------------------------------- /public/icons/pin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/icons/pin.png -------------------------------------------------------------------------------- /public/og/og.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/og/og.jpg -------------------------------------------------------------------------------- /public/system-icons/Audio file.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Audio file.png -------------------------------------------------------------------------------- /public/system-icons/Audio.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Audio.png -------------------------------------------------------------------------------- /public/system-icons/Blank.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Blank.png -------------------------------------------------------------------------------- /public/system-icons/Briefcase.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Briefcase.png -------------------------------------------------------------------------------- /public/system-icons/Camera.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Camera.png -------------------------------------------------------------------------------- /public/system-icons/Computer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Computer.png -------------------------------------------------------------------------------- /public/system-icons/Control Panel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Control Panel.png -------------------------------------------------------------------------------- /public/system-icons/Defrag.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Defrag.png -------------------------------------------------------------------------------- /public/system-icons/Desktop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Desktop.png -------------------------------------------------------------------------------- /public/system-icons/Device 2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Device 2.png -------------------------------------------------------------------------------- /public/system-icons/Device.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Device.png -------------------------------------------------------------------------------- /public/system-icons/Drives/1030.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Drives/1030.png -------------------------------------------------------------------------------- /public/system-icons/Drives/1032.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Drives/1032.png -------------------------------------------------------------------------------- /public/system-icons/Drives/1033.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Drives/1033.png -------------------------------------------------------------------------------- /public/system-icons/Drives/1034.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Drives/1034.png -------------------------------------------------------------------------------- /public/system-icons/Drives/1035.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Drives/1035.png -------------------------------------------------------------------------------- /public/system-icons/Drives/1036.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Drives/1036.png -------------------------------------------------------------------------------- /public/system-icons/Drives/1041.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Drives/1041.png -------------------------------------------------------------------------------- /public/system-icons/Drives/135.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Drives/135.png -------------------------------------------------------------------------------- /public/system-icons/Drives/136.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Drives/136.png -------------------------------------------------------------------------------- /public/system-icons/Drives/139.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Drives/139.png -------------------------------------------------------------------------------- /public/system-icons/Drives/140.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Drives/140.png -------------------------------------------------------------------------------- /public/system-icons/Drives/141.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Drives/141.png -------------------------------------------------------------------------------- /public/system-icons/Drives/142.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Drives/142.png -------------------------------------------------------------------------------- /public/system-icons/Drives/172.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Drives/172.png -------------------------------------------------------------------------------- /public/system-icons/Drives/173.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Drives/173.png -------------------------------------------------------------------------------- /public/system-icons/Drives/180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Drives/180.png -------------------------------------------------------------------------------- /public/system-icons/Drives/28.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Drives/28.png -------------------------------------------------------------------------------- /public/system-icons/Drives/29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Drives/29.png -------------------------------------------------------------------------------- /public/system-icons/Drives/30.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Drives/30.png -------------------------------------------------------------------------------- /public/system-icons/Drives/31.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Drives/31.png -------------------------------------------------------------------------------- /public/system-icons/Drives/33.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Drives/33.png -------------------------------------------------------------------------------- /public/system-icons/Drives/34.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Drives/34.png -------------------------------------------------------------------------------- /public/system-icons/Drives/37.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Drives/37.png -------------------------------------------------------------------------------- /public/system-icons/Drives/38.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Drives/38.png -------------------------------------------------------------------------------- /public/system-icons/Drives/39.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Drives/39.png -------------------------------------------------------------------------------- /public/system-icons/Drives/40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Drives/40.png -------------------------------------------------------------------------------- /public/system-icons/Drives/41.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Drives/41.png -------------------------------------------------------------------------------- /public/system-icons/Drives/42.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Drives/42.png -------------------------------------------------------------------------------- /public/system-icons/Drives/43.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Drives/43.png -------------------------------------------------------------------------------- /public/system-icons/Drives/44.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Drives/44.png -------------------------------------------------------------------------------- /public/system-icons/Drives/56.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Drives/56.png -------------------------------------------------------------------------------- /public/system-icons/Drives/58.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Drives/58.png -------------------------------------------------------------------------------- /public/system-icons/Drives/60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Drives/60.png -------------------------------------------------------------------------------- /public/system-icons/Drives/61.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Drives/61.png -------------------------------------------------------------------------------- /public/system-icons/Drives/62.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Drives/62.png -------------------------------------------------------------------------------- /public/system-icons/Drives/63.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Drives/63.png -------------------------------------------------------------------------------- /public/system-icons/Drives/64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Drives/64.png -------------------------------------------------------------------------------- /public/system-icons/Drives/65.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Drives/65.png -------------------------------------------------------------------------------- /public/system-icons/Drives/75.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Drives/75.png -------------------------------------------------------------------------------- /public/system-icons/Drives/91.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Drives/91.png -------------------------------------------------------------------------------- /public/system-icons/Drives/92.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Drives/92.png -------------------------------------------------------------------------------- /public/system-icons/Drives/96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Drives/96.png -------------------------------------------------------------------------------- /public/system-icons/Drives/Hardrive Windows.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Drives/Hardrive Windows.png -------------------------------------------------------------------------------- /public/system-icons/Drives/Hardrive.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Drives/Hardrive.png -------------------------------------------------------------------------------- /public/system-icons/Emblems/1010.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Emblems/1010.png -------------------------------------------------------------------------------- /public/system-icons/Emblems/1027.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Emblems/1027.png -------------------------------------------------------------------------------- /public/system-icons/Emblems/104.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Emblems/104.png -------------------------------------------------------------------------------- /public/system-icons/Emblems/1042.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Emblems/1042.png -------------------------------------------------------------------------------- /public/system-icons/Emblems/105.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Emblems/105.png -------------------------------------------------------------------------------- /public/system-icons/Emblems/106.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Emblems/106.png -------------------------------------------------------------------------------- /public/system-icons/Emblems/107.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Emblems/107.png -------------------------------------------------------------------------------- /public/system-icons/Emblems/1400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Emblems/1400.png -------------------------------------------------------------------------------- /public/system-icons/Emblems/1401.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Emblems/1401.png -------------------------------------------------------------------------------- /public/system-icons/Emblems/1402.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Emblems/1402.png -------------------------------------------------------------------------------- /public/system-icons/Emblems/1403.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Emblems/1403.png -------------------------------------------------------------------------------- /public/system-icons/Emblems/1404.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Emblems/1404.png -------------------------------------------------------------------------------- /public/system-icons/Emblems/1405.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Emblems/1405.png -------------------------------------------------------------------------------- /public/system-icons/Emblems/157.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Emblems/157.png -------------------------------------------------------------------------------- /public/system-icons/Emblems/163.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Emblems/163.png -------------------------------------------------------------------------------- /public/system-icons/Emblems/164.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Emblems/164.png -------------------------------------------------------------------------------- /public/system-icons/Emblems/169.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Emblems/169.png -------------------------------------------------------------------------------- /public/system-icons/Emblems/170.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Emblems/170.png -------------------------------------------------------------------------------- /public/system-icons/Emblems/176.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Emblems/176.png -------------------------------------------------------------------------------- /public/system-icons/Folder 3D.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Folder 3D.png -------------------------------------------------------------------------------- /public/system-icons/Folder Blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Folder Blue.png -------------------------------------------------------------------------------- /public/system-icons/Folder Contacts.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Folder Contacts.png -------------------------------------------------------------------------------- /public/system-icons/Folder Desktop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Folder Desktop.png -------------------------------------------------------------------------------- /public/system-icons/Folder Documents.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Folder Documents.png -------------------------------------------------------------------------------- /public/system-icons/Folder Downloads.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Folder Downloads.png -------------------------------------------------------------------------------- /public/system-icons/Folder Favourites.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Folder Favourites.png -------------------------------------------------------------------------------- /public/system-icons/Folder Fonts.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Folder Fonts.png -------------------------------------------------------------------------------- /public/system-icons/Folder Games.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Folder Games.png -------------------------------------------------------------------------------- /public/system-icons/Folder Green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Folder Green.png -------------------------------------------------------------------------------- /public/system-icons/Folder Grey.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Folder Grey.png -------------------------------------------------------------------------------- /public/system-icons/Folder Links 2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Folder Links 2.png -------------------------------------------------------------------------------- /public/system-icons/Folder Links.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Folder Links.png -------------------------------------------------------------------------------- /public/system-icons/Folder Live - Back.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Folder Live - Back.png -------------------------------------------------------------------------------- /public/system-icons/Folder Live - Front.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Folder Live - Front.png -------------------------------------------------------------------------------- /public/system-icons/Folder Music.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Folder Music.png -------------------------------------------------------------------------------- /public/system-icons/Folder OneDrive.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Folder OneDrive.png -------------------------------------------------------------------------------- /public/system-icons/Folder Open.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Folder Open.png -------------------------------------------------------------------------------- /public/system-icons/Folder Pictures.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Folder Pictures.png -------------------------------------------------------------------------------- /public/system-icons/Folder Search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Folder Search.png -------------------------------------------------------------------------------- /public/system-icons/Folder Searches.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Folder Searches.png -------------------------------------------------------------------------------- /public/system-icons/Folder User 2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Folder User 2.png -------------------------------------------------------------------------------- /public/system-icons/Folder User.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Folder User.png -------------------------------------------------------------------------------- /public/system-icons/Folder Videos.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Folder Videos.png -------------------------------------------------------------------------------- /public/system-icons/Folder check.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Folder check.png -------------------------------------------------------------------------------- /public/system-icons/Folder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Folder.png -------------------------------------------------------------------------------- /public/system-icons/Hardware.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Hardware.png -------------------------------------------------------------------------------- /public/system-icons/Help 2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Help 2.png -------------------------------------------------------------------------------- /public/system-icons/Help.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Help.png -------------------------------------------------------------------------------- /public/system-icons/History.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/History.png -------------------------------------------------------------------------------- /public/system-icons/HomeGroup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/HomeGroup.png -------------------------------------------------------------------------------- /public/system-icons/Hotspot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Hotspot.png -------------------------------------------------------------------------------- /public/system-icons/Info.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Info.png -------------------------------------------------------------------------------- /public/system-icons/Key.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Key.png -------------------------------------------------------------------------------- /public/system-icons/Keyboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Keyboard.png -------------------------------------------------------------------------------- /public/system-icons/Library Library.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Library Library.png -------------------------------------------------------------------------------- /public/system-icons/Library Music.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Library Music.png -------------------------------------------------------------------------------- /public/system-icons/Library TV.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Library TV.png -------------------------------------------------------------------------------- /public/system-icons/Library Videos.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Library Videos.png -------------------------------------------------------------------------------- /public/system-icons/Library.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Library.png -------------------------------------------------------------------------------- /public/system-icons/Libray Documents.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Libray Documents.png -------------------------------------------------------------------------------- /public/system-icons/Libray Pictures.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Libray Pictures.png -------------------------------------------------------------------------------- /public/system-icons/Link.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Link.png -------------------------------------------------------------------------------- /public/system-icons/Lock.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Lock.png -------------------------------------------------------------------------------- /public/system-icons/Media.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Media.png -------------------------------------------------------------------------------- /public/system-icons/Misc/1021.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Misc/1021.png -------------------------------------------------------------------------------- /public/system-icons/Misc/103.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Misc/103.png -------------------------------------------------------------------------------- /public/system-icons/Misc/116.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Misc/116.png -------------------------------------------------------------------------------- /public/system-icons/Misc/120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Misc/120.png -------------------------------------------------------------------------------- /public/system-icons/Misc/124.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Misc/124.png -------------------------------------------------------------------------------- /public/system-icons/Misc/125.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Misc/125.png -------------------------------------------------------------------------------- /public/system-icons/Misc/130.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Misc/130.png -------------------------------------------------------------------------------- /public/system-icons/Misc/14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Misc/14.png -------------------------------------------------------------------------------- /public/system-icons/Misc/148.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Misc/148.png -------------------------------------------------------------------------------- /public/system-icons/Misc/149.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Misc/149.png -------------------------------------------------------------------------------- /public/system-icons/Misc/15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Misc/15.png -------------------------------------------------------------------------------- /public/system-icons/Misc/24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Misc/24.png -------------------------------------------------------------------------------- /public/system-icons/Misc/73.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Misc/73.png -------------------------------------------------------------------------------- /public/system-icons/Misc/94.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Misc/94.png -------------------------------------------------------------------------------- /public/system-icons/Multimedia file.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Multimedia file.png -------------------------------------------------------------------------------- /public/system-icons/Music file.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Music file.png -------------------------------------------------------------------------------- /public/system-icons/Network.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Network.png -------------------------------------------------------------------------------- /public/system-icons/Notes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Notes.png -------------------------------------------------------------------------------- /public/system-icons/One Drive.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/One Drive.png -------------------------------------------------------------------------------- /public/system-icons/Personalization.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Personalization.png -------------------------------------------------------------------------------- /public/system-icons/Phone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Phone.png -------------------------------------------------------------------------------- /public/system-icons/Photos file.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Photos file.png -------------------------------------------------------------------------------- /public/system-icons/Photos.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Photos.png -------------------------------------------------------------------------------- /public/system-icons/Pictures file.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Pictures file.png -------------------------------------------------------------------------------- /public/system-icons/Printer 2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Printer 2.png -------------------------------------------------------------------------------- /public/system-icons/Printer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Printer.png -------------------------------------------------------------------------------- /public/system-icons/Printer/26.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Printer/26.png -------------------------------------------------------------------------------- /public/system-icons/Printer/45.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Printer/45.png -------------------------------------------------------------------------------- /public/system-icons/Printer/48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Printer/48.png -------------------------------------------------------------------------------- /public/system-icons/Printer/49.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Printer/49.png -------------------------------------------------------------------------------- /public/system-icons/Printer/50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Printer/50.png -------------------------------------------------------------------------------- /public/system-icons/Printer/52.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Printer/52.png -------------------------------------------------------------------------------- /public/system-icons/Printer/53.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Printer/53.png -------------------------------------------------------------------------------- /public/system-icons/Programs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Programs.png -------------------------------------------------------------------------------- /public/system-icons/Quick Access.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Quick Access.png -------------------------------------------------------------------------------- /public/system-icons/Recent.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Recent.png -------------------------------------------------------------------------------- /public/system-icons/Region.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Region.png -------------------------------------------------------------------------------- /public/system-icons/Run 1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Run 1.png -------------------------------------------------------------------------------- /public/system-icons/Run.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Run.png -------------------------------------------------------------------------------- /public/system-icons/SHIDI_SHIELD_INTERNAL.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/SHIDI_SHIELD_INTERNAL.png -------------------------------------------------------------------------------- /public/system-icons/Scanner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Scanner.png -------------------------------------------------------------------------------- /public/system-icons/Screensaver.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Screensaver.png -------------------------------------------------------------------------------- /public/system-icons/Search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Search.png -------------------------------------------------------------------------------- /public/system-icons/Security.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Security.png -------------------------------------------------------------------------------- /public/system-icons/Settings 2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Settings 2.png -------------------------------------------------------------------------------- /public/system-icons/Settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Settings.png -------------------------------------------------------------------------------- /public/system-icons/Shield.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Shield.png -------------------------------------------------------------------------------- /public/system-icons/Stop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Stop.png -------------------------------------------------------------------------------- /public/system-icons/Tasks.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Tasks.png -------------------------------------------------------------------------------- /public/system-icons/Trash Empty.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Trash Empty.png -------------------------------------------------------------------------------- /public/system-icons/Trash Full.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Trash Full.png -------------------------------------------------------------------------------- /public/system-icons/User.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/User.png -------------------------------------------------------------------------------- /public/system-icons/Users.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Users.png -------------------------------------------------------------------------------- /public/system-icons/Video device.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Video device.png -------------------------------------------------------------------------------- /public/system-icons/Video file.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Video file.png -------------------------------------------------------------------------------- /public/system-icons/Videos file.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Videos file.png -------------------------------------------------------------------------------- /public/system-icons/Warning.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Warning.png -------------------------------------------------------------------------------- /public/system-icons/Zip.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/Zip.png -------------------------------------------------------------------------------- /public/system-icons/config.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/config.png -------------------------------------------------------------------------------- /public/system-icons/dll.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/dll.png -------------------------------------------------------------------------------- /public/system-icons/exe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/exe.png -------------------------------------------------------------------------------- /public/system-icons/x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/system-icons/x.png -------------------------------------------------------------------------------- /public/wallpaper/opened.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/wallpaper/opened.webp -------------------------------------------------------------------------------- /public/wallpaper/shiroko.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/wallpaper/shiroko.webp -------------------------------------------------------------------------------- /public/wallpaper/win11.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/wallpaper/win11.jpg -------------------------------------------------------------------------------- /public/wallpaper/win11.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SaltyAom/sun-valley/348a51cc99b96a0cd680734a155a9fcf722ddfac/public/wallpaper/win11.webp -------------------------------------------------------------------------------- /src/App.tsx: -------------------------------------------------------------------------------- 1 | import { useApps } from '@stores/apps' 2 | 3 | import { AnimatePresence } from 'framer-motion' 4 | 5 | import { Contextable, Window } from '@layouts' 6 | 7 | import Taskbar from './modules/taskbar' 8 | import Start from './modules/start' 9 | import ContextMenu from './modules/context-menu' 10 | import Sidebar from './modules/sidebar' 11 | 12 | import { desktopContextMenu } from '@data/default' 13 | 14 | const App = () => { 15 | const [apps] = useApps() 16 | 17 | return ( 18 | 19 |
28 |
29 | 30 | {apps.map((app) => ( 31 | 32 | ))} 33 | 34 |
35 | 36 | 37 | 38 | 39 | 40 |
41 |
42 | ) 43 | } 44 | 45 | export default App 46 | -------------------------------------------------------------------------------- /src/apps/file-explorer/components/atoms/accordion/index.tsx: -------------------------------------------------------------------------------- 1 | import { useReducer } from 'react' 2 | import { AnimatePresence, motion } from 'framer-motion' 3 | 4 | import { ChevronRight } from 'react-feather' 5 | 6 | import style from '../../../file-explorer.module.sass' 7 | 8 | import type { AccordionComponent } from './types' 9 | 10 | const Accordion: AccordionComponent = ({ title, children }) => { 11 | const [isOpen, toggle] = useReducer((v) => !v, true) 12 | 13 | return ( 14 | <> 15 | 20 | 21 | {isOpen && ( 22 | 23 | {children} 24 | 25 | )} 26 | 27 | 28 | ) 29 | } 30 | 31 | export default Accordion 32 | -------------------------------------------------------------------------------- /src/apps/file-explorer/components/atoms/accordion/types.ts: -------------------------------------------------------------------------------- 1 | import type { FunctionComponent } from "react" 2 | 3 | export interface AccordionProps { 4 | title: string 5 | } 6 | 7 | export type AccordionComponent = FunctionComponent 8 | -------------------------------------------------------------------------------- /src/apps/file-explorer/components/atoms/index.ts: -------------------------------------------------------------------------------- 1 | export { default as Accordion } from './accordion' 2 | export { default as NavigationButton } from './navigation-button' 3 | export { default as SidebarGroup } from './sidebar-group' 4 | export { default as SidebarItem } from './sidebar-item' 5 | export { default as Status } from './status' -------------------------------------------------------------------------------- /src/apps/file-explorer/components/atoms/navigation-button/index.tsx: -------------------------------------------------------------------------------- 1 | import type { NavigationButtonComponent } from "./types" 2 | 3 | const NavigationButton: NavigationButtonComponent = ({ icon: Icon }) => { 4 | return ( 5 | 8 | ) 9 | } 10 | 11 | export default NavigationButton -------------------------------------------------------------------------------- /src/apps/file-explorer/components/atoms/navigation-button/types.ts: -------------------------------------------------------------------------------- 1 | import type { DetailsHTMLAttributes, FunctionComponent } from "react" 2 | 3 | import type { Icon } from "react-feather" 4 | 5 | export interface NavigationButtonProps extends DetailsHTMLAttributes { 6 | icon: Icon 7 | } 8 | 9 | export type NavigationButtonComponent = FunctionComponent 10 | -------------------------------------------------------------------------------- /src/apps/file-explorer/components/atoms/sidebar-group/index.tsx: -------------------------------------------------------------------------------- 1 | import { useReducer } from 'react' 2 | 3 | import { SidebarItem } from '..' 4 | 5 | import type { SideBarGroupComponent } from './types' 6 | 7 | const SidebarGroup: SideBarGroupComponent = ({ title, items, icon }) => { 8 | const [isOpen, toggle] = useReducer((v) => !v, true) 9 | 10 | return ( 11 |
12 | 19 | {isOpen && } 20 |
21 | ) 22 | } 23 | 24 | export default SidebarGroup 25 | -------------------------------------------------------------------------------- /src/apps/file-explorer/components/atoms/sidebar-group/types.ts: -------------------------------------------------------------------------------- 1 | import type { FunctionComponent, ReactNode } from "react" 2 | 3 | export interface SidebarGroupProps { 4 | title: string 5 | icon?: string 6 | items: ReactNode 7 | } 8 | 9 | export type SideBarGroupComponent = FunctionComponent 10 | -------------------------------------------------------------------------------- /src/apps/file-explorer/components/atoms/sidebar-item/index.tsx: -------------------------------------------------------------------------------- 1 | import { ChevronRight, MapPin } from 'react-feather' 2 | 3 | import style from '../../../file-explorer.module.sass' 4 | 5 | import type { SideBarItemComponent } from './types' 6 | 7 | const SidebarItem: SideBarItemComponent = ({ 8 | title, 9 | chevron = false, 10 | chevronDown = false, 11 | pinned = false, 12 | icon, 13 | className = '', 14 | ...props 15 | }) => { 16 | return ( 17 | 38 | ) 39 | } 40 | 41 | export default SidebarItem 42 | -------------------------------------------------------------------------------- /src/apps/file-explorer/components/atoms/sidebar-item/types.ts: -------------------------------------------------------------------------------- 1 | import type { DetailsHTMLAttributes, FunctionComponent } from "react" 2 | 3 | export interface SidebarItemProps extends DetailsHTMLAttributes { 4 | title?: string 5 | icon?: string 6 | chevron?: boolean 7 | chevronDown?: boolean 8 | pinned?: boolean 9 | } 10 | 11 | export type SideBarItemComponent = FunctionComponent 12 | -------------------------------------------------------------------------------- /src/apps/file-explorer/components/atoms/status/index.tsx: -------------------------------------------------------------------------------- 1 | import { AlignJustify, Square } from 'react-feather' 2 | 3 | const Status = () => { 4 | return ( 5 |
6 |
7 |

0 items

8 |

9 | 0 items selected 0 MB 10 |

11 |
12 |
13 | 16 | 19 |
20 |
21 | ) 22 | } 23 | 24 | export default Status 25 | -------------------------------------------------------------------------------- /src/apps/file-explorer/components/index.ts: -------------------------------------------------------------------------------- 1 | export { 2 | Accordion, 3 | NavigationButton, 4 | SidebarGroup, 5 | SidebarItem, 6 | Status 7 | } from './atoms' 8 | export { NavigationBar, Sidebar, Toolbar } from './molecules' 9 | export { ThisPC } from './organisms' 10 | -------------------------------------------------------------------------------- /src/apps/file-explorer/components/molecules/index.ts: -------------------------------------------------------------------------------- 1 | export { default as NavigationBar } from './navigation-bar' 2 | export { default as Sidebar } from './sidebar' 3 | export { default as Toolbar } from './toolbar' -------------------------------------------------------------------------------- /src/apps/file-explorer/components/molecules/navigation-bar/index.tsx: -------------------------------------------------------------------------------- 1 | import { 2 | ArrowLeft, 3 | ArrowRight, 4 | ChevronDown, 5 | ArrowUp, 6 | Search 7 | } from 'react-feather' 8 | 9 | import { NavigationButton } from '../..' 10 | 11 | const NavigationBar = () => { 12 | return ( 13 | 39 | ) 40 | } 41 | 42 | export default NavigationBar 43 | -------------------------------------------------------------------------------- /src/apps/file-explorer/components/molecules/sidebar/index.tsx: -------------------------------------------------------------------------------- 1 | import { SidebarGroup, SidebarItem } from '../..' 2 | 3 | const Sidebar = () => { 4 | return ( 5 | 40 | ) 41 | } 42 | 43 | export default Sidebar 44 | -------------------------------------------------------------------------------- /src/apps/file-explorer/components/molecules/toolbar/index.tsx: -------------------------------------------------------------------------------- 1 | import { ChevronDown, MoreHorizontal, Square } from 'react-feather' 2 | 3 | import style from '../../../file-explorer.module.sass' 4 | 5 | const Toolbar = () => { 6 | return ( 7 | 48 | ) 49 | } 50 | 51 | export default Toolbar 52 | -------------------------------------------------------------------------------- /src/apps/file-explorer/components/organisms/index.ts: -------------------------------------------------------------------------------- 1 | export { default as ThisPC } from './this-pc' -------------------------------------------------------------------------------- /src/apps/file-explorer/components/organisms/this-pc/index.tsx: -------------------------------------------------------------------------------- 1 | import TileLayout from '@apps/file-explorer/layouts/tiles' 2 | 3 | import { Accordion } from '@apps/file-explorer/components' 4 | 5 | const ThisPC = () => { 6 | return ( 7 | <> 8 | 9 | 37 | 38 | 39 | 51 | 52 | 53 | ) 54 | } 55 | 56 | export default ThisPC 57 | -------------------------------------------------------------------------------- /src/apps/file-explorer/file-explorer.module.sass: -------------------------------------------------------------------------------- 1 | .action 2 | @apply text-gray-400 text-sm hover:bg-opacity-5 hover:bg-gray-600 focus:bg-opacity-5 focus:bg-gray-600 transition-colors p-2 rounded 3 | 4 | .divider 5 | @apply inline-block w-[1px] h-full bg-gray-300 6 | 7 | .sidebar-icon 8 | stroke-width: 1.5 9 | width: 18px 10 | height: 18px 11 | transform: scale(.9) 12 | 13 | .pin 14 | transform: scaleX(-1) 15 | opacity: .35 16 | 17 | .chevron-down 18 | transform: rotate(90deg) -------------------------------------------------------------------------------- /src/apps/file-explorer/index.tsx: -------------------------------------------------------------------------------- 1 | import { NavigationBar, Status, Toolbar, Sidebar, ThisPC } from './components' 2 | 3 | const FileExplorer = () => { 4 | return ( 5 |
6 | 7 | 8 |
9 | 10 |
11 | 12 |
13 |
14 | 15 |
16 | ) 17 | } 18 | 19 | export default FileExplorer 20 | -------------------------------------------------------------------------------- /src/apps/file-explorer/layouts/tiles/app.tsx: -------------------------------------------------------------------------------- 1 | import type { AppLauncherComponent } from 'types' 2 | 3 | const TileApp: AppLauncherComponent = ({ app: { name, icon } }) => { 4 | return ( 5 | 11 | ) 12 | } 13 | 14 | export default TileApp 15 | -------------------------------------------------------------------------------- /src/apps/file-explorer/layouts/tiles/index.tsx: -------------------------------------------------------------------------------- 1 | import TileApp from './app' 2 | 3 | import type { AppCollectionComponent } from 'types' 4 | 5 | import style from './tiles.module.sass' 6 | 7 | const TileLayout: AppCollectionComponent = ({ apps }) => { 8 | return ( 9 |
10 | {apps.map((app) => ( 11 | 12 | ))} 13 |
14 | ) 15 | } 16 | 17 | export default TileLayout 18 | -------------------------------------------------------------------------------- /src/apps/file-explorer/layouts/tiles/tiles.module.sass: -------------------------------------------------------------------------------- 1 | .tile 2 | @apply grid 3 | grid-template-columns: repeat(auto-fill,minmax(200px, 1fr)) -------------------------------------------------------------------------------- /src/apps/index.ts: -------------------------------------------------------------------------------- 1 | export { default as FileExplorer } from './file-explorer' -------------------------------------------------------------------------------- /src/components/atoms/button/button.module.sass: -------------------------------------------------------------------------------- 1 | .button 2 | border-bottom-color: rgb(209, 213, 219) !important 3 | -------------------------------------------------------------------------------- /src/components/atoms/button/index.tsx: -------------------------------------------------------------------------------- 1 | import type { ButtonComponent } from './types' 2 | 3 | import styles from './button.module.sass' 4 | 5 | const Button: ButtonComponent = ({ children, className, ...props }) => ( 6 | 12 | ) 13 | 14 | export default Button 15 | -------------------------------------------------------------------------------- /src/components/atoms/button/types.ts: -------------------------------------------------------------------------------- 1 | import type { ButtonHTMLAttributes, FunctionComponent } from 'react' 2 | 3 | export interface ButtonProps extends ButtonHTMLAttributes {} 4 | 5 | export type ButtonComponent = FunctionComponent 6 | -------------------------------------------------------------------------------- /src/components/atoms/index.ts: -------------------------------------------------------------------------------- 1 | export { default as Button } from './button' 2 | export { default as TextInput } from './text-input' 3 | export { default as Tooltip } from './tooltip' -------------------------------------------------------------------------------- /src/components/atoms/text-input/index.tsx: -------------------------------------------------------------------------------- 1 | import { useEffect, useRef } from 'react' 2 | 3 | import type { TextInputComponent } from './types' 4 | 5 | import styles from './text-input.module.sass' 6 | 7 | const TextInput: TextInputComponent = ({ 8 | prefix = null, 9 | label, 10 | name = label, 11 | className = '', 12 | autoFocus = false, 13 | ...props 14 | }) => { 15 | const input = useRef(null) 16 | 17 | const focusInput = () => { 18 | input.current?.focus() 19 | } 20 | 21 | useEffect(() => { 22 | if (autoFocus) focusInput() 23 | }, []) 24 | 25 | return ( 26 |
30 | {prefix} 31 | 39 |
40 | ) 41 | } 42 | 43 | export default TextInput 44 | -------------------------------------------------------------------------------- /src/components/atoms/text-input/text-input.module.sass: -------------------------------------------------------------------------------- 1 | .text-input 2 | @apply transition-colors transition-shadow transition-opacity 3 | 4 | &:hover 5 | @apply opacity-75 6 | 7 | &:focus-within 8 | @apply opacity-100 9 | box-shadow: 0 1px 0 0 rgba(0,123,255), 0 0 2px rgba(0,0,0,.075) 10 | border-bottom-color: rgba(0,123,255) -------------------------------------------------------------------------------- /src/components/atoms/text-input/types.ts: -------------------------------------------------------------------------------- 1 | import type { FunctionComponent, HTMLProps } from 'react' 2 | 3 | export interface TextInputProps { 4 | name?: string 5 | label: string 6 | prefix?: JSX.Element 7 | className?: string 8 | autoFocus?: boolean 9 | } 10 | 11 | export type TextInputComponent = FunctionComponent> 12 | -------------------------------------------------------------------------------- /src/components/atoms/tooltip/index.tsx: -------------------------------------------------------------------------------- 1 | import { useState, useRef, useCallback } from 'react' 2 | 3 | import { motion, AnimatePresence } from 'framer-motion' 4 | 5 | import styles from './tooltip.module.sass' 6 | 7 | import type { TooltipComponent } from './types' 8 | 9 | const Tooltip: TooltipComponent = ({ 10 | children, 11 | title, 12 | className = '', 13 | fluid = false, 14 | tooltipClassName = '', 15 | tooltipStyle = {} 16 | }) => { 17 | const [isPeeking, updatePeek] = useState(false) 18 | const [fadingOut, updateFadingOut] = useState(false) 19 | const timeout = useRef(null) 20 | 21 | const peek = useCallback(() => { 22 | if (timeout.current) clearTimeout(timeout.current) 23 | 24 | // @ts-ignore 25 | timeout.current = setTimeout(() => { 26 | updatePeek(true) 27 | requestAnimationFrame(() => { 28 | requestAnimationFrame(() => { 29 | updateFadingOut(true) 30 | }) 31 | }) 32 | 33 | if (timeout.current) clearTimeout(timeout.current) 34 | }, 800) 35 | }, []) 36 | 37 | const unpeek = useCallback(() => { 38 | updateFadingOut(false) 39 | requestAnimationFrame(() => { 40 | requestAnimationFrame(() => { 41 | updatePeek(false) 42 | 43 | if (timeout.current) clearTimeout(timeout.current) 44 | }) 45 | }) 46 | }, []) 47 | 48 | return ( 49 |
50 | 51 | {isPeeking && ( 52 | 66 |

{title}

67 |
68 | )} 69 |
70 |
75 | {children} 76 |
77 |
78 | ) 79 | } 80 | 81 | export default Tooltip 82 | -------------------------------------------------------------------------------- /src/components/atoms/tooltip/tooltip.module.sass: -------------------------------------------------------------------------------- 1 | .tooltip 2 | @apply absolute flex flex-col justify-end items-center bottom-14 opacity-0 3 | width: 192px 4 | pointer-events: none 5 | transform: translateX(-76px) 6 | transition: opacity 0.16s 7 | 8 | &.-fluid 9 | transform: translateX(-26px) 10 | 11 | &.-active 12 | @apply opacity-100 13 | 14 | & > .tip 15 | @apply text-xs px-3 py-2 rounded -------------------------------------------------------------------------------- /src/components/atoms/tooltip/types.ts: -------------------------------------------------------------------------------- 1 | import type { CSSProperties, FunctionComponent } from "react" 2 | 3 | export interface TooltipProps { 4 | title: string 5 | className?: string 6 | tooltipClassName?: string 7 | tooltipStyle?: CSSProperties 8 | fluid?: boolean 9 | } 10 | 11 | export type TooltipComponent = FunctionComponent 12 | -------------------------------------------------------------------------------- /src/components/index.ts: -------------------------------------------------------------------------------- 1 | export { Button, TextInput, Tooltip } from './atoms' 2 | -------------------------------------------------------------------------------- /src/data/apps.ts: -------------------------------------------------------------------------------- 1 | import { lazy } from 'react' 2 | import type { LazyExoticComponent } from "react" 3 | 4 | export interface App { 5 | name: string 6 | icon: string 7 | short?: string 8 | app?: LazyExoticComponent 9 | className?: string 10 | } 11 | 12 | export type Apps = App[] 13 | 14 | const apps = [ 15 | { 16 | name: 'Microsoft Edge', 17 | icon: '/apps/edge.svg', 18 | short: 'Edge' 19 | }, 20 | { 21 | name: 'File Explorer', 22 | icon: '/apps/file-explorer.png', 23 | short: 'Explorer', 24 | app: lazy(() => import("@apps/file-explorer")), 25 | className: 'bg-opacity-75' 26 | }, 27 | { 28 | name: 'Window Terminal', 29 | icon: '/apps/windows-terminal.png', 30 | short: 'Terminal' 31 | } 32 | ] 33 | 34 | export const appsMap = apps 35 | .map((app) => ({ 36 | [app.name]: app 37 | })) 38 | .reduce((acc, cur) => ({ ...acc, ...cur })) 39 | 40 | export default appsMap 41 | -------------------------------------------------------------------------------- /src/data/default.tsx: -------------------------------------------------------------------------------- 1 | import { Context } from '@modules/context-menu' 2 | 3 | export const desktopContextMenu = [ 4 | [ 5 | , 10 | , 11 | 12 | ], 13 | [ 14 | , 15 | 16 | ], 17 | [] 18 | ]} 19 | />, 20 | , 25 | , 26 | , 27 | 28 | ] 29 | ]} 30 | />, 31 | 32 | ], 33 | [ 34 | , 39 | , 40 | 44 | ] 45 | ]} 46 | /> 47 | ], 48 | [, ], 49 | [], 50 | [ 51 | { 55 | if ( 56 | document.fullscreenElement || 57 | // @ts-ignore 58 | document.webkitFullscreenElement 59 | ) 60 | if (document.exitFullscreen) document.exitFullscreen() 61 | // @ts-ignore 62 | else if (document.webkitCancelFullScreen) 63 | // @ts-ignore 64 | document.webkitCancelFullScreen() 65 | 66 | const { body } = document 67 | 68 | if (body.requestFullscreen) body.requestFullscreen() 69 | // @ts-ignore 70 | else if (body.webkitRequestFullscreen) 71 | // @ts-ignore 72 | body.webkitRequestFullscreen() 73 | }} 74 | /> 75 | ], 76 | [ 77 | ] 93 | ]} 94 | /> 95 | ] 96 | ]} 97 | /> 98 | ] 99 | ]} 100 | /> 101 | ] 102 | ]} 103 | /> 104 | ] 105 | ] 106 | -------------------------------------------------------------------------------- /src/layouts/contextable/index.tsx: -------------------------------------------------------------------------------- 1 | import { useRef } from 'react' 2 | import type { DOMAttributes } from 'react' 3 | 4 | import { useContextMenu } from '@stores/context-menu' 5 | 6 | import type { ContextableComponent } from './types' 7 | 8 | const Contextable: ContextableComponent = ({ 9 | contexts, 10 | className = 'flex w-full h-full', 11 | children 12 | }) => { 13 | const deferTouch = useRef() 14 | 15 | const [, dispatchContextMenu] = useContextMenu() 16 | 17 | const showContextMenu = (pageX: number, pageY: number) => { 18 | dispatchContextMenu({ 19 | type: 'clear' 20 | }) 21 | 22 | dispatchContextMenu({ 23 | type: 'append', 24 | position: { 25 | top: pageY + 1, 26 | left: pageX + 1 27 | }, 28 | contexts 29 | }) 30 | } 31 | 32 | const handleClick: DOMAttributes['onClick'] = (event) => { 33 | event.preventDefault() 34 | 35 | if(deferTouch.current) return 36 | 37 | const { pageX, pageY } = event 38 | 39 | showContextMenu(pageX, pageY) 40 | } 41 | 42 | const handleTouch: DOMAttributes['onTouchStart'] = (event) => { 43 | deferTouch.current = setTimeout(() => { 44 | const { touches } = event 45 | const { pageX, pageY } = touches[0] 46 | 47 | showContextMenu(pageX, pageY) 48 | 49 | requestAnimationFrame(() => { 50 | deferTouch.current = null 51 | }) 52 | }, 625) 53 | } 54 | 55 | const handleUntouch = () => { 56 | if(deferTouch.current) 57 | clearTimeout(deferTouch.current) 58 | 59 | deferTouch.current = null 60 | } 61 | 62 | return ( 63 |
69 | {children} 70 |
71 | ) 72 | } 73 | 74 | export default Contextable 75 | -------------------------------------------------------------------------------- /src/layouts/contextable/types.ts: -------------------------------------------------------------------------------- 1 | import type { FunctionComponent } from "react" 2 | 3 | export interface ContextableProps { 4 | contexts: JSX.Element[][] 5 | className?: string 6 | } 7 | 8 | export type ContextableComponent = FunctionComponent 9 | -------------------------------------------------------------------------------- /src/layouts/index.ts: -------------------------------------------------------------------------------- 1 | export { default as Contextable } from './contextable' 2 | export { default as Window } from './window' -------------------------------------------------------------------------------- /src/layouts/window/components/resizeHandler.tsx: -------------------------------------------------------------------------------- 1 | import type { FunctionComponent } from 'react' 2 | 3 | import { Resize } from '../hooks' 4 | 5 | import style from '../window.module.sass' 6 | 7 | const ResizeHandler: FunctionComponent<{ 8 | startResize: (action: Resize) => () => void 9 | }> = ({ startResize }) => ( 10 | <> 11 |
16 |
21 |
26 |
31 |
36 | 37 | {/* Top right corner to get around close button */} 38 |
43 |
48 | 49 |
54 |
59 | 60 | ) 61 | 62 | export default ResizeHandler 63 | -------------------------------------------------------------------------------- /src/layouts/window/hooks/index.ts: -------------------------------------------------------------------------------- 1 | export { default as useManager } from './useManager' 2 | export { default as useWindow, Resize } from './useWindow' 3 | -------------------------------------------------------------------------------- /src/layouts/window/hooks/useManager.ts: -------------------------------------------------------------------------------- 1 | import { useEffect, useState } from 'react' 2 | 3 | import { useAnimation } from 'framer-motion' 4 | import { expo } from '@services/ease' 5 | 6 | import { useApps } from '@stores/apps' 7 | import type { ActiveApp } from '@stores/apps' 8 | 9 | const useManager = ( 10 | app: ActiveApp, 11 | { 12 | position, 13 | size 14 | }: { 15 | position: [number, number] 16 | size: [number, number] 17 | } 18 | ) => { 19 | const [, dispatch] = useApps() 20 | const animation = useAnimation() 21 | 22 | const [isMaximize, updateMaximize] = useState(false) 23 | const [isMinimize, updateMinimize] = useState(false) 24 | 25 | useEffect(() => { 26 | requestAnimationFrame(() => { 27 | requestAnimationFrame(() => { 28 | animation.start({ 29 | opacity: 1, 30 | scale: 1, 31 | transition: { 32 | duration: 0.24, 33 | ease: expo.in 34 | } 35 | }) 36 | }) 37 | }) 38 | }, []) 39 | 40 | useEffect(() => { 41 | if (!isMaximize) 42 | animation.set({ 43 | top: position[1], 44 | left: position[0], 45 | width: size[0], 46 | height: size[1] 47 | }) 48 | }, [size, position, isMaximize]) 49 | 50 | const maximize = () => { 51 | if (isMaximize) { 52 | animation.start({ 53 | top: position[1], 54 | left: position[0], 55 | width: size[0], 56 | height: size[1], 57 | borderRadius: '0.5em', 58 | borderWidth: 1, 59 | transition: { 60 | duration: 0.24, 61 | ease: expo.inOut 62 | } 63 | }) 64 | return updateMaximize(false) 65 | } 66 | 67 | animation.start({ 68 | width: '100%', 69 | height: 'calc(100vh - 48px)', 70 | top: 0, 71 | left: 0, 72 | borderRadius: 0, 73 | borderWidth: 0, 74 | transition: { 75 | duration: 0.24, 76 | ease: expo.inOut 77 | } 78 | }) 79 | 80 | updateMaximize(true) 81 | } 82 | 83 | const minimize = () => { 84 | if (isMinimize) { 85 | animation.start({ 86 | top: position[1], 87 | left: position[0], 88 | width: size[0], 89 | height: size[1], 90 | transition: { 91 | duration: 0.24, 92 | ease: expo.inOut 93 | } 94 | }) 95 | return updateMinimize(false) 96 | } 97 | 98 | animation.start({ 99 | opacity: 0, 100 | scale: 0.75, 101 | transition: { 102 | duration: 0.16 103 | } 104 | }) 105 | 106 | updateMinimize(true) 107 | } 108 | 109 | const close = () => { 110 | dispatch({ 111 | type: 'close', 112 | id: app.id 113 | }) 114 | } 115 | 116 | const prioritize = () => { 117 | dispatch({ 118 | type: 'prioritize', 119 | id: app.id 120 | }) 121 | } 122 | 123 | return { 124 | isMaximize, 125 | isMinimize, 126 | prioritize, 127 | maximize, 128 | minimize, 129 | close, 130 | animation 131 | } 132 | } 133 | 134 | export default useManager 135 | -------------------------------------------------------------------------------- /src/layouts/window/hooks/useWindow.ts: -------------------------------------------------------------------------------- 1 | import { 2 | useEffect, 3 | useReducer, 4 | useRef, 5 | useState 6 | } from 'react' 7 | import type { Reducer } from 'react' 8 | 9 | const minSize: [number, number] = [360, 240] 10 | const initSize: [number, number] = [720, 520] 11 | 12 | export enum Resize { 13 | none, 14 | top, 15 | left, 16 | bottom, 17 | right, 18 | topLeft, 19 | topRight, 20 | bottomLeft, 21 | bottomRight 22 | } 23 | 24 | const useWindow = () => { 25 | const [size, updateSize] = useReducer< 26 | Reducer<[number, number], [number, number]> 27 | >((v, arg) => { 28 | const width = v[0] + arg[0] 29 | const height = v[1] + arg[1] 30 | 31 | return [ 32 | width >= minSize[0] ? width : minSize[0], 33 | height >= minSize[1] ? height : minSize[1] 34 | ] 35 | }, initSize) 36 | 37 | const [position, updatePosition] = useReducer< 38 | Reducer<[number, number], [number, number]> 39 | >( 40 | (v, arg) => { 41 | let x = v[0] + arg[0] 42 | let y = v[1] + arg[1] 43 | 44 | if (x < 0 || x > document.body.offsetWidth - size[0]) x = v[0] 45 | if (y < 0 || y > document.body.offsetHeight - size[1] - 48) y = v[1] 46 | 47 | return [x, y] 48 | }, 49 | [0, 0] 50 | ) 51 | 52 | const previousDrag = useRef(null) 53 | 54 | useEffect(() => { 55 | updatePosition([ 56 | (document.body.offsetWidth - initSize[0]) / 2, 57 | (document.body.offsetHeight - initSize[1]) / 2 - 48 58 | ]) 59 | }, []) 60 | 61 | const [actioning, updateAction] = useState(false) 62 | 63 | const drag = useRef(false) 64 | const resize = useRef(Resize.none) 65 | 66 | const startDrag = () => { 67 | drag.current = true 68 | updateAction(true) 69 | } 70 | 71 | const startResize = (action: Resize) => () => { 72 | resize.current = action 73 | updateAction(true) 74 | } 75 | 76 | const convertTouchToMove = 77 | (callback: (event: { movementX: number; movementY: number }) => void) => 78 | (event: TouchEvent) => { 79 | const { pageX, pageY } = event.changedTouches[0] 80 | 81 | if (previousDrag.current) { 82 | const [previousX, previousY] = previousDrag.current 83 | const [movementX, movementY] = [ 84 | pageX - previousX, 85 | pageY - previousY 86 | ] 87 | 88 | // ! Unsafe: We only extract movementX and Y here, so no worry 89 | callback({ 90 | movementX, 91 | movementY 92 | }) 93 | } 94 | 95 | previousDrag.current = [pageX, pageY] 96 | } 97 | 98 | useEffect(() => { 99 | const handleMove = (event: MouseEvent) => { 100 | if (drag.current) 101 | updatePosition([ 102 | position[0] + event.movementX, 103 | position[1] + event.movementY 104 | ]) 105 | } 106 | 107 | const handleResize = (event: MouseEvent) => { 108 | if (resize.current === Resize.none) return 109 | 110 | const { movementX: x, movementY: y } = event 111 | 112 | switch (resize.current) { 113 | case Resize.top: 114 | updateSize([0, y * -1]) 115 | updatePosition([0, y]) 116 | break 117 | 118 | case Resize.bottom: 119 | updateSize([0, y * 1]) 120 | break 121 | 122 | case Resize.left: 123 | updateSize([x * -1, 0]) 124 | updatePosition([x, 0]) 125 | break 126 | 127 | case Resize.right: 128 | updateSize([x, 0]) 129 | break 130 | 131 | case Resize.topLeft: 132 | updateSize([x * -1, y * -1]) 133 | updatePosition([x, y]) 134 | break 135 | 136 | case Resize.topRight: 137 | updateSize([x, y * -1]) 138 | updatePosition([0, y]) 139 | break 140 | 141 | case Resize.bottomLeft: 142 | updateSize([x * -1, y]) 143 | updatePosition([x, 0]) 144 | break 145 | 146 | case Resize.bottomRight: 147 | updateSize([x, y]) 148 | break 149 | } 150 | } 151 | 152 | document.addEventListener('mousemove', handleMove, { 153 | passive: true 154 | }) 155 | 156 | const handleTouch = convertTouchToMove((movement) => { 157 | // ! Unsafe: We only extract movementX and Y here, so no worry 158 | handleMove(movement as any) 159 | handleResize(movement as any) 160 | }) 161 | 162 | document.addEventListener('touchmove', handleTouch, { 163 | passive: true 164 | }) 165 | 166 | document.addEventListener('mousemove', handleResize, { 167 | passive: true 168 | }) 169 | 170 | const stopHandler = () => { 171 | drag.current = false 172 | resize.current = Resize.none 173 | previousDrag.current = null 174 | } 175 | 176 | const stopEvents = ['mouseup', 'mouseleave', 'touchcanel', 'touchend'] 177 | 178 | stopEvents.forEach((event) => { 179 | document.addEventListener(event, stopHandler, { 180 | passive: true 181 | }) 182 | }) 183 | 184 | return () => { 185 | document.removeEventListener('mousemove', handleMove) 186 | document.removeEventListener('mousemove', handleResize) 187 | document.removeEventListener('touchmove', handleTouch) 188 | 189 | stopEvents.forEach((event) => { 190 | document.removeEventListener(event, stopHandler) 191 | }) 192 | } 193 | }, []) 194 | 195 | return { 196 | size, 197 | position, 198 | actioning, 199 | startDrag, 200 | startResize 201 | } 202 | } 203 | 204 | export default useWindow 205 | -------------------------------------------------------------------------------- /src/layouts/window/index.tsx: -------------------------------------------------------------------------------- 1 | import { Suspense } from 'react' 2 | 3 | import { motion } from 'framer-motion' 4 | 5 | import { Minimize2, Minus, Square, X } from 'react-feather' 6 | import ResizeHandler from './components/resizeHandler' 7 | 8 | import { useManager, useWindow } from './hooks' 9 | 10 | import type { WindowComponent } from './types' 11 | 12 | import style from './window.module.sass' 13 | 14 | const Window: WindowComponent = ({ 15 | app, 16 | app: { name, icon, app: Applet = null, className = '' }, 17 | }) => { 18 | const { position, size, actioning, startDrag, startResize } = useWindow() 19 | const { minimize, maximize, close, prioritize, isMaximize, animation } = 20 | useManager(app, { 21 | position, 22 | size 23 | }) 24 | 25 | const handleStartDrag = () => { 26 | prioritize() 27 | startDrag() 28 | } 29 | 30 | return ( 31 | 51 | {actioning && ( 52 |