├── .github └── FUNDING.yml ├── .gitignore ├── .gitpod.yml ├── .prettierrc ├── .stackblitzrc ├── LICENSE ├── README.md ├── index.html ├── package.json ├── pnpm-lock.yaml ├── prefetch-plugin.ts ├── public ├── app-icons │ ├── appstore │ │ ├── 1024.png │ │ ├── 128.webp │ │ ├── 16.png │ │ ├── 256.png │ │ ├── 256.webp │ │ ├── 32.png │ │ └── 512.png │ ├── calculator │ │ ├── 1024.png │ │ ├── 128.webp │ │ ├── 16.png │ │ ├── 256.png │ │ ├── 256.webp │ │ ├── 32.png │ │ └── 512.png │ ├── calendar │ │ ├── 1024.png │ │ ├── 128.webp │ │ ├── 16.png │ │ ├── 256.png │ │ ├── 256.webp │ │ ├── 32.png │ │ └── 512.png │ ├── contacts │ │ └── 256.png │ ├── devutils │ │ └── 256.webp │ ├── facetime │ │ ├── 1024.png │ │ ├── 128.webp │ │ ├── 16.png │ │ ├── 256.png │ │ ├── 256.webp │ │ ├── 32.png │ │ └── 512.png │ ├── finder │ │ ├── 1024.png │ │ ├── 128.png │ │ ├── 128.webp │ │ ├── 16.png │ │ ├── 192.png │ │ ├── 256.png │ │ ├── 256.webp │ │ ├── 32.png │ │ └── 512.png │ ├── keynote │ │ ├── 1024.png │ │ ├── 128.png │ │ ├── 16.png │ │ ├── 256.png │ │ ├── 32.png │ │ └── 512.png │ ├── launchpad │ │ ├── 1024.png │ │ ├── 16.png │ │ ├── 256.png │ │ ├── 32.png │ │ └── 512.png │ ├── mail │ │ ├── 1024.png │ │ ├── 128.webp │ │ ├── 16.png │ │ ├── 256.png │ │ ├── 256.webp │ │ ├── 32.png │ │ └── 512.png │ ├── maps │ │ ├── 1024.png │ │ ├── 16.png │ │ ├── 256.png │ │ ├── 32.png │ │ └── 512.png │ ├── messages │ │ ├── 1024.png │ │ ├── 128.webp │ │ ├── 16.png │ │ ├── 256.png │ │ ├── 256.webp │ │ ├── 32.png │ │ └── 512.png │ ├── music │ │ ├── 1024.png │ │ ├── 16.png │ │ ├── 256.png │ │ ├── 32.png │ │ └── 512.png │ ├── news │ │ ├── 1024.png │ │ ├── 16.png │ │ ├── 256.png │ │ ├── 32.png │ │ └── 512.png │ ├── notes │ │ ├── 1024.png │ │ ├── 16.png │ │ ├── 256.png │ │ ├── 32.png │ │ └── 512.png │ ├── photos │ │ ├── 1024.png │ │ ├── 128.webp │ │ ├── 16.png │ │ ├── 256.png │ │ ├── 256.webp │ │ ├── 32.png │ │ └── 512.png │ ├── podcasts │ │ ├── 1024.png │ │ ├── 16.png │ │ ├── 256.png │ │ ├── 32.png │ │ └── 512.png │ ├── purus-twitter │ │ ├── 128.webp │ │ ├── 256.png │ │ └── 256.webp │ ├── reminders │ │ ├── 1024.png │ │ ├── 16.png │ │ ├── 256.png │ │ ├── 32.png │ │ └── 512.png │ ├── safari │ │ ├── 1024.png │ │ ├── 128.webp │ │ ├── 16.png │ │ ├── 256.png │ │ ├── 256.webp │ │ ├── 32.png │ │ └── 512.png │ ├── system-preferences │ │ ├── 1024.png │ │ ├── 128.webp │ │ ├── 16.png │ │ ├── 256.png │ │ ├── 256.webp │ │ ├── 32.png │ │ └── 512.png │ ├── terminal │ │ ├── 1024.png │ │ ├── 16.png │ │ ├── 256.png │ │ ├── 32.png │ │ └── 512.png │ ├── tv │ │ ├── 1024.png │ │ ├── 16.png │ │ ├── 256.png │ │ ├── 32.png │ │ └── 512.png │ ├── ukraine │ │ └── 256.webp │ ├── vercel │ │ └── 256.webp │ ├── view-source │ │ ├── 1024.png │ │ ├── 128.png │ │ ├── 128.webp │ │ ├── 16.png │ │ ├── 256.png │ │ ├── 256.webp │ │ ├── 32.png │ │ └── 512.png │ ├── vscode │ │ ├── 1024.png │ │ ├── 128.webp │ │ ├── 16.png │ │ ├── 256.png │ │ ├── 256.webp │ │ ├── 32.png │ │ └── 512.png │ └── wallpapers │ │ ├── 1024.png │ │ ├── 16.png │ │ ├── 256.png │ │ ├── 256.webp │ │ ├── 32.png │ │ └── 512.png ├── cover-image.png ├── cursors │ ├── alt-select.svg │ ├── busy.webp │ ├── diagonal-resize-1.svg │ ├── diagonal-resize-2.svg │ ├── handwriting.svg │ ├── link-select.svg │ ├── move.svg │ ├── normal-select.svg │ ├── pirate.svg │ ├── precision-select.svg │ ├── text-select.svg │ ├── unavailable.svg │ ├── vertical-resize.svg │ └── working-in-background.webp ├── emojis │ ├── star-struck.png │ └── wink.png ├── favicon.ico ├── google7cdade01e9ae4685.html ├── purus-profile │ └── puru.webp ├── robots.txt └── sounds │ └── mac-startup-sound.mp3 ├── src ├── actions │ ├── click-outside.ts │ ├── elevation.ts │ ├── focus-outside.ts │ ├── index.ts │ ├── portal.ts │ └── trap-focus.ts ├── assets │ └── wallpapers │ │ ├── 38.jpg │ │ ├── 39.jpg │ │ ├── 40.jpg │ │ ├── 41.jpg │ │ ├── 42.jpg │ │ ├── 43.jpg │ │ ├── 44.jpg │ │ ├── 45.jpg │ │ ├── 46.jpg │ │ ├── 47.jpg │ │ ├── 48.jpg │ │ ├── 49.jpg │ │ ├── 50.jpg │ │ ├── 51.jpg │ │ ├── 52.jpg │ │ ├── 53.jpg │ │ ├── 54.jpg │ │ ├── 55.jpg │ │ ├── 56.jpg │ │ ├── 57.jpg │ │ ├── 58.jpg │ │ ├── 59.jpg │ │ ├── 60.jpg │ │ ├── 61.jpg │ │ ├── 62.jpg │ │ ├── 63.jpg │ │ ├── 64.jpg │ │ ├── big-sur-1.jpg │ │ ├── big-sur-2.jpg │ │ ├── big-sur-3.jpg │ │ ├── big-sur-4.jpg │ │ ├── big-sur-5.jpg │ │ ├── big-sur-6.jpg │ │ ├── big-sur-7.jpg │ │ ├── big-sur-8.jpg │ │ ├── big-sur-graphic-1.jpg │ │ ├── big-sur-graphic-2.jpg │ │ ├── catalina-0.jpg │ │ ├── catalina-1.jpg │ │ ├── catalina-2.jpg │ │ ├── catalina-3.jpg │ │ ├── catalina-4.jpg │ │ ├── catalina-5.jpg │ │ ├── catalina-6.jpg │ │ ├── catalina-7.jpg │ │ ├── catalina-8.jpg │ │ ├── desert-1.jpg │ │ ├── desert-2.jpg │ │ ├── desert-3.jpg │ │ ├── desert-4.jpg │ │ ├── desert-5.jpg │ │ ├── desert-6.jpg │ │ ├── desert-7.jpg │ │ ├── desert-8.jpg │ │ ├── dome-1.jpg │ │ ├── dome-2.jpg │ │ ├── iridescence-1.jpg │ │ ├── iridescence-2.jpg │ │ ├── lake-1.jpg │ │ ├── lake-2.jpg │ │ ├── lake-3.jpg │ │ ├── lake-4.jpg │ │ ├── lake-5.jpg │ │ ├── lake-6.jpg │ │ ├── lake-7.jpg │ │ ├── lake-8.jpg │ │ ├── mojave-1.jpg │ │ ├── mojave-2.jpg │ │ ├── monterey-1.jpg │ │ ├── monterey-2.jpg │ │ ├── monterey-3.jpg │ │ ├── monterey-4.jpg │ │ ├── monterey-5.jpg │ │ ├── monterey-6.jpg │ │ ├── monterey-7.jpg │ │ ├── monterey-8.jpg │ │ ├── peak-1.jpg │ │ ├── peak-2.jpg │ │ ├── solar-grad-1.jpg │ │ ├── solar-grad-10.jpg │ │ ├── solar-grad-11.jpg │ │ ├── solar-grad-12.jpg │ │ ├── solar-grad-13.jpg │ │ ├── solar-grad-14.jpg │ │ ├── solar-grad-15.jpg │ │ ├── solar-grad-16.jpg │ │ ├── solar-grad-2.jpg │ │ ├── solar-grad-3.jpg │ │ ├── solar-grad-4.jpg │ │ ├── solar-grad-5.jpg │ │ ├── solar-grad-6.jpg │ │ ├── solar-grad-7.jpg │ │ ├── solar-grad-8.jpg │ │ ├── solar-grad-9.jpg │ │ ├── unused │ │ ├── 1.jpg │ │ ├── 10.jpg │ │ ├── 11.jpg │ │ ├── 13.jpg │ │ ├── 14.jpg │ │ ├── 15.jpg │ │ ├── 16.jpg │ │ ├── 17.jpg │ │ ├── 18.jpg │ │ ├── 19.jpg │ │ ├── 2.jpg │ │ ├── 20.jpg │ │ ├── 21.jpg │ │ ├── 22.jpg │ │ ├── 23.jpg │ │ ├── 27.jpg │ │ ├── 28.jpg │ │ ├── 30.jpg │ │ ├── 31.jpg │ │ ├── 32.jpg │ │ ├── 33.jpg │ │ ├── 5.jpg │ │ ├── 6.jpg │ │ ├── 7.jpg │ │ ├── 8.jpg │ │ ├── 9.jpg │ │ ├── The Beach.jpg │ │ ├── The Cliffs.jpg │ │ ├── The Desert.jpg │ │ ├── The Lake.jpg │ │ ├── Tree.jpg │ │ └── Valley.jpg │ │ ├── ventura-1.webp │ │ ├── ventura-2.webp │ │ ├── ventura-3.webp │ │ ├── ventura-4.webp │ │ └── ventura-5.webp ├── components │ ├── Desktop │ │ ├── BootupScreen.svelte │ │ ├── ContextMenu.svelte │ │ ├── Desktop.svelte │ │ ├── SystemUpdate.svelte │ │ └── Window │ │ │ ├── TrafficLights.svelte │ │ │ ├── Window.svelte │ │ │ └── WindowsArea.svelte │ ├── Dock │ │ ├── Dock.svelte │ │ └── DockItem.svelte │ ├── SVG │ │ ├── SwitchSVG.svelte │ │ └── traffic-lights │ │ │ ├── CloseSVG.svelte │ │ │ ├── ExpandSVG.svelte │ │ │ ├── GreenLight.svelte │ │ │ ├── MinimizeSVG.svelte │ │ │ └── StretchSVG.svelte │ ├── SystemUI │ │ └── SystemDialog.svelte │ ├── TopBar │ │ ├── ActionCenter.svelte │ │ ├── ActionCenterSurface.svelte │ │ ├── ActionCenterTile.svelte │ │ ├── ActionCenterToggle.svelte │ │ ├── Menu.svelte │ │ ├── MenuBar.svelte │ │ ├── TopBar.svelte │ │ └── TopBarTime.svelte │ └── apps │ │ ├── AppNexus.svelte │ │ ├── AppStore │ │ └── AppStore.svelte │ │ ├── Calculator │ │ └── Calculator.svelte │ │ ├── Calendar │ │ ├── Calendar.svelte │ │ ├── MonthView.svelte │ │ ├── calendar-constants.ts │ │ └── calendar-utils.ts │ │ ├── PurusProfile │ │ └── PurusProfile.svelte │ │ ├── VSCode │ │ └── VSCode.svelte │ │ └── WallpaperApp │ │ ├── Wallpaper.svelte │ │ └── WallpaperSelectorApp.svelte ├── configs │ ├── apps │ │ └── apps-config.ts │ ├── menu │ │ ├── context.menu.config.ts │ │ └── finder.menu.config.ts │ ├── theme │ │ └── colors.config.ts │ └── wallpapers │ │ └── wallpaper.config.ts ├── css │ ├── global.css │ ├── reset.css │ └── theme.css ├── global.d.ts ├── helpers │ ├── create-app-config.ts │ ├── create-menu-config.ts │ ├── fade.ts │ ├── random.ts │ ├── sleep.ts │ └── smaller-closest-value.ts ├── main.ts └── state │ ├── apps.svelte.ts │ ├── auto-destroy-effect-root.svelte.ts │ ├── dock.svelte.ts │ ├── interval.svelte.ts │ ├── menubar.svelte.ts │ ├── persisted.svelte.ts │ ├── preferences.svelte.ts │ ├── spring.svelte.ts │ └── system.svelte.ts ├── svelte.config.js ├── tsconfig.json ├── vercel.json └── vite.config.ts /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | github: PuruVJ 3 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules/ 2 | /dist/ 3 | /.vscode/ 4 | .DS_Store 5 | .idea/ -------------------------------------------------------------------------------- /.gitpod.yml: -------------------------------------------------------------------------------- 1 | tasks: 2 | - init: npm install 3 | command: npm run dev 4 | 5 | ports: 6 | - port: 3000 7 | onOpen: open-browser 8 | 9 | vscode: 10 | extensions: 11 | - svelte.svelte-vscode 12 | 13 | github: 14 | prebuilds: 15 | master: true 16 | branches: true 17 | pullRequests: true 18 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "singleQuote": true, 3 | "trailingComma": "all", 4 | "printWidth": 100, 5 | "useTabs": true, 6 | "overrides": [ 7 | { 8 | "files": "*.svelte", 9 | "options": { 10 | "plugins": ["prettier-plugin-svelte"] 11 | } 12 | } 13 | ] 14 | } 15 | -------------------------------------------------------------------------------- /.stackblitzrc: -------------------------------------------------------------------------------- 1 | { 2 | "startCommand": "npm run dev" 3 | } -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 Puru Vijay 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | > 🛑🛑 Note: This is the new iteration of macOS Web written in Svelte. Previous version written in Preact is available at [PuruVJ/macos-preact](https://github.com/puruvj/macos-preact) 🛑🛑 2 | 3 | # Mac OS Ventura Web 4 | 5 | This open source project aims to replicate some of the Mac OS(Monterey, at the time of writing)'s desktop experience on web, using Svelte! 6 | 7 | 🔗🔗 [macos-web.app](https://macos.now.sh) 8 | 9 | # Why 10 | 11 | I've always been very fascinated with macOS, and have never owned a Mac/book. So I'm making the most beautiful aspect of macOS, its desktop, myself. For web. Inspired from [WinXP](https://winxp.now.sh/). 12 | 13 | # Stack 14 | 15 | - Framework - Svelte (Earlier Preact) 16 | - Bundler - Vite, for super fast development. 17 | - Component Library - None!! 18 | - Styling Solution - SCSS. 19 | 20 | # When will it be ready? 21 | 22 | ![Who knows?](https://i.imgur.com/6xfbPzs.gif) 23 | 24 | # Can I contribute? 25 | 26 | Sure, open an issue, point out errors, and what not. Wanna fix something yourselves, you're welcome to open a PR and I appreciate it. 27 | 28 | [![Hosted on Vercel](https://www.datocms-assets.com/31049/1618983297-powered-by-vercel.svg)](https://vercel.com/?utm_source=purus-projects&utm_campaign=oss) 29 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | macOS in Svelte 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 37 | 38 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "macos-svelte", 3 | "version": "13.0.0", 4 | "type": "module", 5 | "scripts": { 6 | "dev": "vite", 7 | "build": "vite build", 8 | "serve": "vite preview", 9 | "check": "svelte-check --tsconfig ./tsconfig.json" 10 | }, 11 | "devDependencies": { 12 | "@iconify-json/gg": "^1.2.1", 13 | "@iconify-json/ic": "^1.2.1", 14 | "@iconify-json/icon-park-outline": "^1.2.1", 15 | "@iconify-json/iconamoon": "^1.2.1", 16 | "@iconify-json/majesticons": "^1.2.1", 17 | "@iconify-json/mdi": "^1.2.1", 18 | "@iconify-json/pepicons": "^1.2.0", 19 | "@iconify-json/ph": "^1.2.1", 20 | "@iconify-json/uil": "^1.2.1", 21 | "@sveltejs/vite-plugin-svelte": "4.0.0", 22 | "browserslist": "^4.24.2", 23 | "lightningcss": "^1.27.0", 24 | "prettier-plugin-svelte": "^3.2.7", 25 | "svelte": "5.1.4", 26 | "svelte-check": "^4.0.5", 27 | "typescript": "^5.6.3", 28 | "vite": "5.4.10", 29 | "vite-imagetools": "^7.0.4", 30 | "vite-plugin-pwa": "^0.20.5", 31 | "workbox-window": "^7.3.0" 32 | }, 33 | "dependencies": { 34 | "@fontsource/inter": "^5.1.0", 35 | "@neodrag/svelte": "^2.0.6", 36 | "date-fns": "^4.1.0", 37 | "popmotion": "^11.0.5", 38 | "unplugin-icons": "^0.19.3" 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /prefetch-plugin.ts: -------------------------------------------------------------------------------- 1 | import type { HtmlTagDescriptor, Plugin } from 'vite'; 2 | 3 | export function prefetch(): Plugin { 4 | return { 5 | name: 'prefetch', 6 | 7 | enforce: 'post', 8 | apply: 'build', 9 | 10 | transformIndexHtml: (html, ctx) => { 11 | const tags = Object.keys(ctx.bundle) 12 | .filter((v) => !v.toString().endsWith('webp')) 13 | .map( 14 | (chunkName) => 15 | ({ 16 | injectTo: 'head', 17 | tag: 'link', 18 | attrs: { 19 | rel: 'prefetch', 20 | href: `/${chunkName}`, 21 | }, 22 | }) as HtmlTagDescriptor, 23 | ); 24 | 25 | return { 26 | html, 27 | tags, 28 | }; 29 | }, 30 | }; 31 | } 32 | -------------------------------------------------------------------------------- /public/app-icons/appstore/1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/appstore/1024.png -------------------------------------------------------------------------------- /public/app-icons/appstore/128.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/appstore/128.webp -------------------------------------------------------------------------------- /public/app-icons/appstore/16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/appstore/16.png -------------------------------------------------------------------------------- /public/app-icons/appstore/256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/appstore/256.png -------------------------------------------------------------------------------- /public/app-icons/appstore/256.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/appstore/256.webp -------------------------------------------------------------------------------- /public/app-icons/appstore/32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/appstore/32.png -------------------------------------------------------------------------------- /public/app-icons/appstore/512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/appstore/512.png -------------------------------------------------------------------------------- /public/app-icons/calculator/1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/calculator/1024.png -------------------------------------------------------------------------------- /public/app-icons/calculator/128.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/calculator/128.webp -------------------------------------------------------------------------------- /public/app-icons/calculator/16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/calculator/16.png -------------------------------------------------------------------------------- /public/app-icons/calculator/256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/calculator/256.png -------------------------------------------------------------------------------- /public/app-icons/calculator/256.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/calculator/256.webp -------------------------------------------------------------------------------- /public/app-icons/calculator/32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/calculator/32.png -------------------------------------------------------------------------------- /public/app-icons/calculator/512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/calculator/512.png -------------------------------------------------------------------------------- /public/app-icons/calendar/1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/calendar/1024.png -------------------------------------------------------------------------------- /public/app-icons/calendar/128.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/calendar/128.webp -------------------------------------------------------------------------------- /public/app-icons/calendar/16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/calendar/16.png -------------------------------------------------------------------------------- /public/app-icons/calendar/256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/calendar/256.png -------------------------------------------------------------------------------- /public/app-icons/calendar/256.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/calendar/256.webp -------------------------------------------------------------------------------- /public/app-icons/calendar/32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/calendar/32.png -------------------------------------------------------------------------------- /public/app-icons/calendar/512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/calendar/512.png -------------------------------------------------------------------------------- /public/app-icons/contacts/256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/contacts/256.png -------------------------------------------------------------------------------- /public/app-icons/devutils/256.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/devutils/256.webp -------------------------------------------------------------------------------- /public/app-icons/facetime/1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/facetime/1024.png -------------------------------------------------------------------------------- /public/app-icons/facetime/128.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/facetime/128.webp -------------------------------------------------------------------------------- /public/app-icons/facetime/16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/facetime/16.png -------------------------------------------------------------------------------- /public/app-icons/facetime/256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/facetime/256.png -------------------------------------------------------------------------------- /public/app-icons/facetime/256.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/facetime/256.webp -------------------------------------------------------------------------------- /public/app-icons/facetime/32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/facetime/32.png -------------------------------------------------------------------------------- /public/app-icons/facetime/512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/facetime/512.png -------------------------------------------------------------------------------- /public/app-icons/finder/1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/finder/1024.png -------------------------------------------------------------------------------- /public/app-icons/finder/128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/finder/128.png -------------------------------------------------------------------------------- /public/app-icons/finder/128.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/finder/128.webp -------------------------------------------------------------------------------- /public/app-icons/finder/16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/finder/16.png -------------------------------------------------------------------------------- /public/app-icons/finder/192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/finder/192.png -------------------------------------------------------------------------------- /public/app-icons/finder/256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/finder/256.png -------------------------------------------------------------------------------- /public/app-icons/finder/256.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/finder/256.webp -------------------------------------------------------------------------------- /public/app-icons/finder/32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/finder/32.png -------------------------------------------------------------------------------- /public/app-icons/finder/512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/finder/512.png -------------------------------------------------------------------------------- /public/app-icons/keynote/1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/keynote/1024.png -------------------------------------------------------------------------------- /public/app-icons/keynote/128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/keynote/128.png -------------------------------------------------------------------------------- /public/app-icons/keynote/16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/keynote/16.png -------------------------------------------------------------------------------- /public/app-icons/keynote/256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/keynote/256.png -------------------------------------------------------------------------------- /public/app-icons/keynote/32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/keynote/32.png -------------------------------------------------------------------------------- /public/app-icons/keynote/512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/keynote/512.png -------------------------------------------------------------------------------- /public/app-icons/launchpad/1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/launchpad/1024.png -------------------------------------------------------------------------------- /public/app-icons/launchpad/16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/launchpad/16.png -------------------------------------------------------------------------------- /public/app-icons/launchpad/256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/launchpad/256.png -------------------------------------------------------------------------------- /public/app-icons/launchpad/32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/launchpad/32.png -------------------------------------------------------------------------------- /public/app-icons/launchpad/512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/launchpad/512.png -------------------------------------------------------------------------------- /public/app-icons/mail/1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/mail/1024.png -------------------------------------------------------------------------------- /public/app-icons/mail/128.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/mail/128.webp -------------------------------------------------------------------------------- /public/app-icons/mail/16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/mail/16.png -------------------------------------------------------------------------------- /public/app-icons/mail/256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/mail/256.png -------------------------------------------------------------------------------- /public/app-icons/mail/256.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/mail/256.webp -------------------------------------------------------------------------------- /public/app-icons/mail/32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/mail/32.png -------------------------------------------------------------------------------- /public/app-icons/mail/512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/mail/512.png -------------------------------------------------------------------------------- /public/app-icons/maps/1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/maps/1024.png -------------------------------------------------------------------------------- /public/app-icons/maps/16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/maps/16.png -------------------------------------------------------------------------------- /public/app-icons/maps/256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/maps/256.png -------------------------------------------------------------------------------- /public/app-icons/maps/32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/maps/32.png -------------------------------------------------------------------------------- /public/app-icons/maps/512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/maps/512.png -------------------------------------------------------------------------------- /public/app-icons/messages/1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/messages/1024.png -------------------------------------------------------------------------------- /public/app-icons/messages/128.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/messages/128.webp -------------------------------------------------------------------------------- /public/app-icons/messages/16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/messages/16.png -------------------------------------------------------------------------------- /public/app-icons/messages/256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/messages/256.png -------------------------------------------------------------------------------- /public/app-icons/messages/256.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/messages/256.webp -------------------------------------------------------------------------------- /public/app-icons/messages/32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/messages/32.png -------------------------------------------------------------------------------- /public/app-icons/messages/512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/messages/512.png -------------------------------------------------------------------------------- /public/app-icons/music/1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/music/1024.png -------------------------------------------------------------------------------- /public/app-icons/music/16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/music/16.png -------------------------------------------------------------------------------- /public/app-icons/music/256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/music/256.png -------------------------------------------------------------------------------- /public/app-icons/music/32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/music/32.png -------------------------------------------------------------------------------- /public/app-icons/music/512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/music/512.png -------------------------------------------------------------------------------- /public/app-icons/news/1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/news/1024.png -------------------------------------------------------------------------------- /public/app-icons/news/16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/news/16.png -------------------------------------------------------------------------------- /public/app-icons/news/256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/news/256.png -------------------------------------------------------------------------------- /public/app-icons/news/32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/news/32.png -------------------------------------------------------------------------------- /public/app-icons/news/512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/news/512.png -------------------------------------------------------------------------------- /public/app-icons/notes/1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/notes/1024.png -------------------------------------------------------------------------------- /public/app-icons/notes/16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/notes/16.png -------------------------------------------------------------------------------- /public/app-icons/notes/256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/notes/256.png -------------------------------------------------------------------------------- /public/app-icons/notes/32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/notes/32.png -------------------------------------------------------------------------------- /public/app-icons/notes/512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/notes/512.png -------------------------------------------------------------------------------- /public/app-icons/photos/1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/photos/1024.png -------------------------------------------------------------------------------- /public/app-icons/photos/128.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/photos/128.webp -------------------------------------------------------------------------------- /public/app-icons/photos/16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/photos/16.png -------------------------------------------------------------------------------- /public/app-icons/photos/256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/photos/256.png -------------------------------------------------------------------------------- /public/app-icons/photos/256.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/photos/256.webp -------------------------------------------------------------------------------- /public/app-icons/photos/32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/photos/32.png -------------------------------------------------------------------------------- /public/app-icons/photos/512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/photos/512.png -------------------------------------------------------------------------------- /public/app-icons/podcasts/1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/podcasts/1024.png -------------------------------------------------------------------------------- /public/app-icons/podcasts/16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/podcasts/16.png -------------------------------------------------------------------------------- /public/app-icons/podcasts/256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/podcasts/256.png -------------------------------------------------------------------------------- /public/app-icons/podcasts/32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/podcasts/32.png -------------------------------------------------------------------------------- /public/app-icons/podcasts/512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/podcasts/512.png -------------------------------------------------------------------------------- /public/app-icons/purus-twitter/128.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/purus-twitter/128.webp -------------------------------------------------------------------------------- /public/app-icons/purus-twitter/256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/purus-twitter/256.png -------------------------------------------------------------------------------- /public/app-icons/purus-twitter/256.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/purus-twitter/256.webp -------------------------------------------------------------------------------- /public/app-icons/reminders/1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/reminders/1024.png -------------------------------------------------------------------------------- /public/app-icons/reminders/16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/reminders/16.png -------------------------------------------------------------------------------- /public/app-icons/reminders/256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/reminders/256.png -------------------------------------------------------------------------------- /public/app-icons/reminders/32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/reminders/32.png -------------------------------------------------------------------------------- /public/app-icons/reminders/512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/reminders/512.png -------------------------------------------------------------------------------- /public/app-icons/safari/1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/safari/1024.png -------------------------------------------------------------------------------- /public/app-icons/safari/128.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/safari/128.webp -------------------------------------------------------------------------------- /public/app-icons/safari/16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/safari/16.png -------------------------------------------------------------------------------- /public/app-icons/safari/256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/safari/256.png -------------------------------------------------------------------------------- /public/app-icons/safari/256.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/safari/256.webp -------------------------------------------------------------------------------- /public/app-icons/safari/32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/safari/32.png -------------------------------------------------------------------------------- /public/app-icons/safari/512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/safari/512.png -------------------------------------------------------------------------------- /public/app-icons/system-preferences/1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/system-preferences/1024.png -------------------------------------------------------------------------------- /public/app-icons/system-preferences/128.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/system-preferences/128.webp -------------------------------------------------------------------------------- /public/app-icons/system-preferences/16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/system-preferences/16.png -------------------------------------------------------------------------------- /public/app-icons/system-preferences/256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/system-preferences/256.png -------------------------------------------------------------------------------- /public/app-icons/system-preferences/256.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/system-preferences/256.webp -------------------------------------------------------------------------------- /public/app-icons/system-preferences/32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/system-preferences/32.png -------------------------------------------------------------------------------- /public/app-icons/system-preferences/512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/system-preferences/512.png -------------------------------------------------------------------------------- /public/app-icons/terminal/1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/terminal/1024.png -------------------------------------------------------------------------------- /public/app-icons/terminal/16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/terminal/16.png -------------------------------------------------------------------------------- /public/app-icons/terminal/256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/terminal/256.png -------------------------------------------------------------------------------- /public/app-icons/terminal/32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/terminal/32.png -------------------------------------------------------------------------------- /public/app-icons/terminal/512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/terminal/512.png -------------------------------------------------------------------------------- /public/app-icons/tv/1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/tv/1024.png -------------------------------------------------------------------------------- /public/app-icons/tv/16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/tv/16.png -------------------------------------------------------------------------------- /public/app-icons/tv/256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/tv/256.png -------------------------------------------------------------------------------- /public/app-icons/tv/32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/tv/32.png -------------------------------------------------------------------------------- /public/app-icons/tv/512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/tv/512.png -------------------------------------------------------------------------------- /public/app-icons/ukraine/256.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/ukraine/256.webp -------------------------------------------------------------------------------- /public/app-icons/vercel/256.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/vercel/256.webp -------------------------------------------------------------------------------- /public/app-icons/view-source/1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/view-source/1024.png -------------------------------------------------------------------------------- /public/app-icons/view-source/128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/view-source/128.png -------------------------------------------------------------------------------- /public/app-icons/view-source/128.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/view-source/128.webp -------------------------------------------------------------------------------- /public/app-icons/view-source/16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/view-source/16.png -------------------------------------------------------------------------------- /public/app-icons/view-source/256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/view-source/256.png -------------------------------------------------------------------------------- /public/app-icons/view-source/256.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/view-source/256.webp -------------------------------------------------------------------------------- /public/app-icons/view-source/32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/view-source/32.png -------------------------------------------------------------------------------- /public/app-icons/view-source/512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/view-source/512.png -------------------------------------------------------------------------------- /public/app-icons/vscode/1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/vscode/1024.png -------------------------------------------------------------------------------- /public/app-icons/vscode/128.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/vscode/128.webp -------------------------------------------------------------------------------- /public/app-icons/vscode/16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/vscode/16.png -------------------------------------------------------------------------------- /public/app-icons/vscode/256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/vscode/256.png -------------------------------------------------------------------------------- /public/app-icons/vscode/256.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/vscode/256.webp -------------------------------------------------------------------------------- /public/app-icons/vscode/32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/vscode/32.png -------------------------------------------------------------------------------- /public/app-icons/vscode/512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/vscode/512.png -------------------------------------------------------------------------------- /public/app-icons/wallpapers/1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/wallpapers/1024.png -------------------------------------------------------------------------------- /public/app-icons/wallpapers/16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/wallpapers/16.png -------------------------------------------------------------------------------- /public/app-icons/wallpapers/256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/wallpapers/256.png -------------------------------------------------------------------------------- /public/app-icons/wallpapers/256.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/wallpapers/256.webp -------------------------------------------------------------------------------- /public/app-icons/wallpapers/32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/wallpapers/32.png -------------------------------------------------------------------------------- /public/app-icons/wallpapers/512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/app-icons/wallpapers/512.png -------------------------------------------------------------------------------- /public/cover-image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/cover-image.png -------------------------------------------------------------------------------- /public/cursors/alt-select.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 15 | 16 | -------------------------------------------------------------------------------- /public/cursors/busy.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/cursors/busy.webp -------------------------------------------------------------------------------- /public/cursors/diagonal-resize-1.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 26 | 27 | -------------------------------------------------------------------------------- /public/cursors/diagonal-resize-2.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 26 | 27 | -------------------------------------------------------------------------------- /public/cursors/handwriting.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 15 | 16 | -------------------------------------------------------------------------------- /public/cursors/link-select.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 19 | 20 | -------------------------------------------------------------------------------- /public/cursors/move.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 33 | 34 | -------------------------------------------------------------------------------- /public/cursors/normal-select.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 17 | 18 | -------------------------------------------------------------------------------- /public/cursors/pirate.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 33 | 34 | -------------------------------------------------------------------------------- /public/cursors/precision-select.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 12 | 13 | -------------------------------------------------------------------------------- /public/cursors/text-select.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 15 | 16 | -------------------------------------------------------------------------------- /public/cursors/unavailable.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 32 | 33 | -------------------------------------------------------------------------------- /public/cursors/vertical-resize.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 24 | 25 | -------------------------------------------------------------------------------- /public/cursors/working-in-background.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/cursors/working-in-background.webp -------------------------------------------------------------------------------- /public/emojis/star-struck.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/emojis/star-struck.png -------------------------------------------------------------------------------- /public/emojis/wink.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/emojis/wink.png -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/favicon.ico -------------------------------------------------------------------------------- /public/google7cdade01e9ae4685.html: -------------------------------------------------------------------------------- 1 | google-site-verification: google7cdade01e9ae4685.html 2 | -------------------------------------------------------------------------------- /public/purus-profile/puru.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/purus-profile/puru.webp -------------------------------------------------------------------------------- /public/robots.txt: -------------------------------------------------------------------------------- 1 | # https://www.robotstxt.org/robotstxt.html 2 | User-agent: * 3 | Disallow: 4 | -------------------------------------------------------------------------------- /public/sounds/mac-startup-sound.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/public/sounds/mac-startup-sound.mp3 -------------------------------------------------------------------------------- /src/actions/click-outside.ts: -------------------------------------------------------------------------------- 1 | /** Dispatch event on click outside of node */ 2 | export function click_outside(node: HTMLElement, callback: () => void) { 3 | const handleClick = (e: MouseEvent) => { 4 | if (!node.contains(e.target as HTMLElement)) callback(); 5 | }; 6 | 7 | document.addEventListener('click', handleClick, true); 8 | 9 | return { 10 | destroy() { 11 | document.removeEventListener('click', handleClick, true); 12 | }, 13 | }; 14 | } 15 | -------------------------------------------------------------------------------- /src/actions/elevation.ts: -------------------------------------------------------------------------------- 1 | const z_index_config = { 2 | wallpaper: -1, 3 | 'bootup-screen': 110, 4 | 'context-menu': 100, 5 | 'window-traffic-lights': 10, 6 | dock: 80, 7 | 'dock-tooltip': 70, 8 | 'system-updates-available': 60, 9 | 'system-dialog': 90, 10 | 'menubar-menu-parent': 160, 11 | }; 12 | 13 | for (const [element, zIndexValue] of Object.entries(z_index_config)) { 14 | document.body.style.setProperty(`--system-z-index-${element}`, zIndexValue + ''); 15 | } 16 | 17 | export function elevation(node: HTMLElement, uiElement: keyof typeof z_index_config) { 18 | node.style.zIndex = `var(--system-z-index-${uiElement})`; 19 | } 20 | -------------------------------------------------------------------------------- /src/actions/focus-outside.ts: -------------------------------------------------------------------------------- 1 | /** Dispatch event on click outside of node */ 2 | export function focus_outside(node: HTMLElement, callback: () => void) { 3 | function handleFocus(e: FocusEvent) { 4 | const target = e.target as HTMLElement; 5 | 6 | if (!node?.contains(target)) callback(); 7 | } 8 | 9 | document.addEventListener('focus', handleFocus, true); 10 | 11 | return { 12 | destroy() { 13 | document.removeEventListener('focus', handleFocus, true); 14 | }, 15 | }; 16 | } 17 | -------------------------------------------------------------------------------- /src/actions/index.ts: -------------------------------------------------------------------------------- 1 | export { click_outside as click_outside } from './click-outside'; 2 | export { elevation } from './elevation'; 3 | export { focus_outside as focus_outside } from './focus-outside'; 4 | export { portal } from './portal'; 5 | export { trap_focus as trapFocus } from './trap-focus'; 6 | -------------------------------------------------------------------------------- /src/actions/portal.ts: -------------------------------------------------------------------------------- 1 | import { tick } from 'svelte'; 2 | 3 | /** 4 | * Usage:
or
5 | * 6 | * @param {HTMLElement} el 7 | * @param {HTMLElement|string} target DOM Element or CSS Selector 8 | */ 9 | export function portal(el: HTMLElement, target: HTMLElement | string = 'body') { 10 | let target_el: HTMLElement; 11 | 12 | async function update(new_target: HTMLElement | string) { 13 | target = new_target; 14 | 15 | if (typeof target === 'string') { 16 | target_el = document.querySelector(target); 17 | 18 | if (target_el === null) { 19 | await tick(); 20 | target_el = document.querySelector(target); 21 | } 22 | 23 | if (target_el === null) { 24 | throw new Error(`No element found matching css selector: "${target}"`); 25 | } 26 | } else if (target instanceof HTMLElement) { 27 | target_el = target; 28 | } else { 29 | throw new TypeError( 30 | `Unknown portal target type: ${ 31 | target === null ? 'null' : typeof target 32 | }. Allowed types: string (CSS selector) or HTMLElement.`, 33 | ); 34 | } 35 | target_el.appendChild(el); 36 | el.hidden = false; 37 | } 38 | 39 | function destroy() { 40 | if (el.parentNode) { 41 | el.parentNode.removeChild(el); 42 | } 43 | } 44 | 45 | update(target); 46 | 47 | return { 48 | update, 49 | destroy, 50 | }; 51 | } 52 | -------------------------------------------------------------------------------- /src/actions/trap-focus.ts: -------------------------------------------------------------------------------- 1 | let trapFocusList: HTMLElement[] = []; 2 | 3 | const is_next = (event: KeyboardEvent) => event.key === 'Tab' && !event.shiftKey; 4 | const is_previous = (event: KeyboardEvent) => event.key === 'Tab' && event.shiftKey; 5 | const trap_focus_listener = (event: KeyboardEvent) => { 6 | if (event.target === window) { 7 | return; 8 | } 9 | 10 | const event_target = event.target as Element; 11 | 12 | const parent_node = trapFocusList.find((node) => node.contains(event_target)); 13 | if (!parent_node) { 14 | return; 15 | } 16 | 17 | const focusable = parent_node.querySelectorAll( 18 | 'a[href], area[href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), iframe, object, embed, *[tabindex], *[contenteditable]', 19 | ); 20 | const first = focusable[0]; 21 | const last = focusable[focusable.length - 1]; 22 | if (is_next(event) && event.target === last) { 23 | event.preventDefault(); 24 | first.focus(); 25 | } else if (is_previous(event) && event.target === first) { 26 | event.preventDefault(); 27 | last.focus(); 28 | } 29 | }; 30 | 31 | document.addEventListener('keydown', trap_focus_listener); 32 | 33 | export const trap_focus = (node: HTMLElement) => { 34 | trapFocusList.push(node); 35 | return { 36 | destroy() { 37 | trapFocusList = trapFocusList.filter((element) => element !== node); 38 | }, 39 | }; 40 | }; 41 | -------------------------------------------------------------------------------- /src/assets/wallpapers/38.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/38.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/39.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/39.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/40.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/40.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/41.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/41.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/42.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/42.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/43.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/43.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/44.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/44.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/45.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/45.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/46.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/46.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/47.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/47.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/48.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/48.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/49.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/49.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/50.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/50.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/51.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/51.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/52.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/52.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/53.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/53.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/54.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/54.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/55.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/55.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/56.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/56.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/57.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/57.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/58.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/58.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/59.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/59.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/60.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/60.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/61.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/61.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/62.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/62.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/63.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/63.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/64.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/64.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/big-sur-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/big-sur-1.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/big-sur-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/big-sur-2.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/big-sur-3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/big-sur-3.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/big-sur-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/big-sur-4.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/big-sur-5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/big-sur-5.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/big-sur-6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/big-sur-6.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/big-sur-7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/big-sur-7.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/big-sur-8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/big-sur-8.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/big-sur-graphic-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/big-sur-graphic-1.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/big-sur-graphic-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/big-sur-graphic-2.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/catalina-0.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/catalina-0.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/catalina-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/catalina-1.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/catalina-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/catalina-2.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/catalina-3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/catalina-3.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/catalina-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/catalina-4.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/catalina-5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/catalina-5.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/catalina-6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/catalina-6.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/catalina-7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/catalina-7.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/catalina-8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/catalina-8.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/desert-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/desert-1.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/desert-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/desert-2.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/desert-3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/desert-3.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/desert-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/desert-4.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/desert-5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/desert-5.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/desert-6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/desert-6.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/desert-7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/desert-7.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/desert-8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/desert-8.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/dome-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/dome-1.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/dome-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/dome-2.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/iridescence-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/iridescence-1.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/iridescence-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/iridescence-2.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/lake-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/lake-1.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/lake-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/lake-2.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/lake-3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/lake-3.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/lake-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/lake-4.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/lake-5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/lake-5.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/lake-6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/lake-6.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/lake-7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/lake-7.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/lake-8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/lake-8.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/mojave-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/mojave-1.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/mojave-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/mojave-2.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/monterey-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/monterey-1.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/monterey-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/monterey-2.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/monterey-3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/monterey-3.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/monterey-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/monterey-4.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/monterey-5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/monterey-5.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/monterey-6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/monterey-6.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/monterey-7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/monterey-7.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/monterey-8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/monterey-8.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/peak-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/peak-1.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/peak-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/peak-2.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/solar-grad-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/solar-grad-1.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/solar-grad-10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/solar-grad-10.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/solar-grad-11.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/solar-grad-11.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/solar-grad-12.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/solar-grad-12.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/solar-grad-13.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/solar-grad-13.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/solar-grad-14.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/solar-grad-14.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/solar-grad-15.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/solar-grad-15.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/solar-grad-16.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/solar-grad-16.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/solar-grad-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/solar-grad-2.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/solar-grad-3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/solar-grad-3.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/solar-grad-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/solar-grad-4.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/solar-grad-5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/solar-grad-5.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/solar-grad-6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/solar-grad-6.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/solar-grad-7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/solar-grad-7.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/solar-grad-8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/solar-grad-8.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/solar-grad-9.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/solar-grad-9.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/unused/1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/unused/1.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/unused/10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/unused/10.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/unused/11.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/unused/11.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/unused/13.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/unused/13.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/unused/14.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/unused/14.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/unused/15.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/unused/15.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/unused/16.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/unused/16.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/unused/17.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/unused/17.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/unused/18.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/unused/18.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/unused/19.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/unused/19.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/unused/2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/unused/2.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/unused/20.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/unused/20.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/unused/21.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/unused/21.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/unused/22.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/unused/22.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/unused/23.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/unused/23.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/unused/27.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/unused/27.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/unused/28.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/unused/28.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/unused/30.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/unused/30.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/unused/31.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/unused/31.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/unused/32.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/unused/32.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/unused/33.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/unused/33.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/unused/5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/unused/5.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/unused/6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/unused/6.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/unused/7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/unused/7.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/unused/8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/unused/8.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/unused/9.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/unused/9.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/unused/The Beach.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/unused/The Beach.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/unused/The Cliffs.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/unused/The Cliffs.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/unused/The Desert.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/unused/The Desert.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/unused/The Lake.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/unused/The Lake.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/unused/Tree.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/unused/Tree.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/unused/Valley.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/unused/Valley.jpg -------------------------------------------------------------------------------- /src/assets/wallpapers/ventura-1.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/ventura-1.webp -------------------------------------------------------------------------------- /src/assets/wallpapers/ventura-2.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/ventura-2.webp -------------------------------------------------------------------------------- /src/assets/wallpapers/ventura-3.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/ventura-3.webp -------------------------------------------------------------------------------- /src/assets/wallpapers/ventura-4.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/ventura-4.webp -------------------------------------------------------------------------------- /src/assets/wallpapers/ventura-5.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PuruVJ/macos-web/dffd365c3f460b6030ed4449bc327cf490381b58/src/assets/wallpapers/ventura-5.webp -------------------------------------------------------------------------------- /src/components/Desktop/BootupScreen.svelte: -------------------------------------------------------------------------------- 1 | 19 | 20 | {#if !(hidden_splash_screen || import.meta.env.DEV)} 21 |
22 | 23 | 24 |
32 |
33 |
34 |
35 | {/if} 36 | 37 | 38 | {#if import.meta.env.PROD} 39 | 40 | {/if} 41 | 42 | 98 | -------------------------------------------------------------------------------- /src/components/Desktop/ContextMenu.svelte: -------------------------------------------------------------------------------- 1 | 33 | 34 | { 36 | e.preventDefault(); 37 | handle_context_menu(e); 38 | }} 39 | onclick={hideMenu} 40 | /> 41 | 42 | {#if is_menu_visible} 43 |
50 | {#each Object.values(context_menu_config.default) as contents} 51 | 52 | 53 | {#if contents.breakAfter} 54 |
55 | {/if} 56 | {/each} 57 |
58 | {/if} 59 | 60 | 154 | -------------------------------------------------------------------------------- /src/components/Desktop/Desktop.svelte: -------------------------------------------------------------------------------- 1 | 23 | 24 |
25 |
26 | 27 | 28 | 29 |
30 | 31 | 32 | 33 | 34 | 35 | 36 |
37 | 38 | 52 | -------------------------------------------------------------------------------- /src/components/Desktop/SystemUpdate.svelte: -------------------------------------------------------------------------------- 1 | 48 | 49 | 50 |
51 | AppStore app 58 | 59 |

Updates Available

60 |

Do you want to restart to install these updates now?

61 | 62 |
63 | 64 | 65 |
66 |
67 |
68 | 69 |
{build_date}
70 | 71 | 139 | -------------------------------------------------------------------------------- /src/components/Desktop/Window/TrafficLights.svelte: -------------------------------------------------------------------------------- 1 | 14 | 15 |
16 | 17 | 18 | 21 |
22 | 23 | 89 | -------------------------------------------------------------------------------- /src/components/Desktop/Window/WindowsArea.svelte: -------------------------------------------------------------------------------- 1 | 32 | 33 |
34 | {#each Object.keys(apps_config) as app_id} 35 | {#if apps.open[app_id] && apps_config[app_id].should_open_window} 36 | {#await import('./Window.svelte') then { default: Window }} 37 | 38 | {/await} 39 | {/if} 40 | {/each} 41 |
42 | 43 | 57 | -------------------------------------------------------------------------------- /src/components/Dock/Dock.svelte: -------------------------------------------------------------------------------- 1 | 2 | 3 | 44 | 45 | (mouseY = y)} /> 46 | 47 | 48 | 49 |
55 | 56 |
(dock_mouse_x = event.x)} 60 | onmouseleave={() => (dock_mouse_x = null)} 61 | > 62 | {#each Object.entries(apps_config) as [appID, config]} 63 | {#if config.dock_breaks_before} 64 | 65 | {/if} 66 | 67 | 68 | {/each} 69 |
70 |
71 | 72 | 157 | -------------------------------------------------------------------------------- /src/components/SVG/SwitchSVG.svelte: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | -------------------------------------------------------------------------------- /src/components/SVG/traffic-lights/CloseSVG.svelte: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | -------------------------------------------------------------------------------- /src/components/SVG/traffic-lights/ExpandSVG.svelte: -------------------------------------------------------------------------------- 1 | 2 | 3 | 11 | 12 | -------------------------------------------------------------------------------- /src/components/SVG/traffic-lights/GreenLight.svelte: -------------------------------------------------------------------------------- 1 | 7 | 8 | {#if expandable} 9 | 10 | {:else} 11 | 12 | {/if} 13 | -------------------------------------------------------------------------------- /src/components/SVG/traffic-lights/MinimizeSVG.svelte: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/components/SVG/traffic-lights/StretchSVG.svelte: -------------------------------------------------------------------------------- 1 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/components/SystemUI/SystemDialog.svelte: -------------------------------------------------------------------------------- 1 | 46 | 47 | {#if is_open} 48 |
49 | 50 | 51 | 52 | 67 |
68 | {/if} 69 | 70 | 107 | -------------------------------------------------------------------------------- /src/components/TopBar/ActionCenterSurface.svelte: -------------------------------------------------------------------------------- 1 | 15 | 16 |
22 | {@render children?.()} 23 |
24 | 25 | 50 | -------------------------------------------------------------------------------- /src/components/TopBar/ActionCenterTile.svelte: -------------------------------------------------------------------------------- 1 | 20 | 21 | 31 | 32 | 46 | -------------------------------------------------------------------------------- /src/components/TopBar/ActionCenterToggle.svelte: -------------------------------------------------------------------------------- 1 | 32 | 33 |
34 | 37 | 38 | {#if visible} 39 | 47 | {/if} 48 |
49 | 50 | (is_theme_warning_dialog_open = false)} 53 | > 54 |
55 | Wallpapers app logo 56 | 57 |

Current Wallpaper Settings prevent changing theme

58 |

Head over to Wallpapers app to change this setting or choose a standalone wallpaper.

59 | 60 |
61 | 62 | 73 |
74 |
75 |
76 | 77 | 187 | -------------------------------------------------------------------------------- /src/components/TopBar/Menu.svelte: -------------------------------------------------------------------------------- 1 | 6 | 7 |
8 | {#each Object.entries(menu) as Array<[any, any]> as [_, val]} 9 | 10 | {#if val.breakAfter} 11 |
12 | {/if} 13 | {/each} 14 |
15 | 16 | 91 | -------------------------------------------------------------------------------- /src/components/TopBar/MenuBar.svelte: -------------------------------------------------------------------------------- 1 | 7 | 8 |
(menubar_state.active = '')} 11 | use:focus_outside={() => (menubar_state.active = '')} 12 | > 13 | {#each Object.entries(menubar_state.menus) as [menuID, menuConfig]} 14 |
15 |
16 | 31 |
32 | 33 | 40 |
41 | {/each} 42 |
43 | 44 | 107 | -------------------------------------------------------------------------------- /src/components/TopBar/TopBar.svelte: -------------------------------------------------------------------------------- 1 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | {#if should_show_notch.value} 18 |
19 | Wink emoji 20 |
21 | {/if} 22 | 23 | 24 | 25 | 28 |
29 | 30 | 130 | -------------------------------------------------------------------------------- /src/components/TopBar/TopBarTime.svelte: -------------------------------------------------------------------------------- 1 | 7 | 8 |
9 | {format(time.value, 'EEE MMM dd')}  {format(time.value, 'h:mm aa')} 10 |
11 | -------------------------------------------------------------------------------- /src/components/apps/AppNexus.svelte: -------------------------------------------------------------------------------- 1 | 12 | 13 | {#if app_id === 'calendar'} 14 | {#await import('./Calendar/Calendar.svelte') then { default: Calendar }} 15 | 16 | {/await} 17 | {:else if app_id === 'vscode'} 18 | {#await import('./VSCode/VSCode.svelte') then { default: VSCode }} 19 | 20 | {/await} 21 | {:else if app_id === 'calculator'} 22 | {#await import('./Calculator/Calculator.svelte') then { default: Calculator }} 23 | 24 | {/await} 25 | {:else if app_id === 'wallpapers'} 26 | {#await import('./WallpaperApp/WallpaperSelectorApp.svelte') then { default: WallpaperSelector }} 27 | 28 | {/await} 29 | {:else if app_id === 'purus-twitter'} 30 | {#await import('./PurusProfile/PurusProfile.svelte') then { default: PurusProfile }} 31 | 32 | {/await} 33 | {:else} 34 | {#await import('./AppStore/AppStore.svelte') then { default: AppStore }} 35 | 36 | {/await} 37 | {/if} 38 | -------------------------------------------------------------------------------- /src/components/apps/AppStore/AppStore.svelte: -------------------------------------------------------------------------------- 1 | 24 | 25 |
26 |
27 |
28 | Placeholder App 33 | 34 |
35 | 36 |

37 | Nothing here yet Wink Emoji 42 |

43 |
44 |
45 | 46 | 81 | -------------------------------------------------------------------------------- /src/components/apps/Calculator/Calculator.svelte: -------------------------------------------------------------------------------- 1 | 9 | 10 |
11 |
12 | 13 |
0
14 | 15 |
16 | 17 | 20 | 21 | 24 | 25 | 26 | 27 | 30 | 31 | 32 | 33 | 36 | 37 | 38 | 39 | 40 | 43 | 44 | 45 |
46 |
47 | 48 | 124 | -------------------------------------------------------------------------------- /src/components/apps/Calendar/Calendar.svelte: -------------------------------------------------------------------------------- 1 | 24 | 25 |
26 |
27 | 28 |
29 |
30 |
31 | {format(selected_date, 'MMMM')} 32 | {format(selected_date, 'yyyy')} 33 |
34 | 35 |
36 | 39 | 40 | 43 |
44 |
45 | 46 | {#if view === 'year'} 47 |
48 | {:else if view === 'month'} 49 | 50 | {:else if view === 'week'} 51 |
52 | {:else} 53 |
54 | {/if} 55 |
56 |
57 | 58 | 150 | -------------------------------------------------------------------------------- /src/components/apps/Calendar/MonthView.svelte: -------------------------------------------------------------------------------- 1 | 25 | 26 |
27 | {#each DAYS_OF_THE_WEEK as day, i} 28 |
{day}
29 | {/each} 30 | 31 | {#each display_days.days_in_prev_month as date (dayKey(date))} 32 |
33 |
{date}
34 |
35 | {/each} 36 | 37 | {#each display_days.days_in_this_month as date (dayKey(date))} 38 |
39 |
{date}
40 |
41 | {/each} 42 | 43 | {#each display_days.days_in_next_month as date (dayKey(date))} 44 |
45 |
{date}
46 |
47 | {/each} 48 |
49 | 50 | 146 | -------------------------------------------------------------------------------- /src/components/apps/Calendar/calendar-constants.ts: -------------------------------------------------------------------------------- 1 | export const DAYS = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] as const; 2 | export const DAYS_LEAP = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] as const; 3 | export const DAYS_OF_THE_WEEK = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] as const; 4 | export const MONTHS = [ 5 | 'JAN', 6 | 'FEB', 7 | 'MAR', 8 | 'APR', 9 | 'MAY', 10 | 'JUN', 11 | 'JUL', 12 | 'AUG', 13 | 'SEP', 14 | 'OCT', 15 | 'NOV', 16 | 'DEC', 17 | ] as const; 18 | export const NUMBER_OF_CELLS_IN_CALENDAR = 42; // 6 rows x 7 columns 19 | -------------------------------------------------------------------------------- /src/components/apps/Calendar/calendar-utils.ts: -------------------------------------------------------------------------------- 1 | import { getDay, getMonth, getYear, startOfMonth } from 'date-fns'; 2 | import { DAYS, DAYS_LEAP, NUMBER_OF_CELLS_IN_CALENDAR } from './calendar-constants.ts'; 3 | 4 | /** 5 | * Check if the year is a leap year 6 | * @param year 7 | */ 8 | export function is_leap_year(year: number) { 9 | return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0; 10 | } 11 | 12 | /** 13 | * Get an array of whole number integers in the range (lower, upper] 14 | * @param lower lower bound, exclusive 15 | * @param upper upper bound, inclusive 16 | */ 17 | export function get_range_array(lower: number, upper: number) { 18 | const arr: number[] = []; 19 | for (let i = lower + 1; i <= upper; i++) { 20 | arr.push(i); 21 | } 22 | return arr; 23 | } 24 | 25 | /** 26 | * Get the display days in 3 parts: 27 | * Ones belong to previous month, 28 | * Ones belong to this month, and 29 | * Ones belong to next month. 30 | * @param selectedDate the selected date which indicates the current month 31 | */ 32 | export function get_display_days(selectedDate: Date) { 33 | const this_month = getMonth(selectedDate); 34 | const prev_month = this_month - 1 < 0 ? 11 : this_month - 1; 35 | 36 | const days = is_leap_year(getYear(selectedDate)) ? DAYS_LEAP : DAYS; 37 | const weekday = getDay(startOfMonth(selectedDate)); 38 | 39 | // If it's Sunday, weekday is 0 40 | const days_to_show_in_prev_month = weekday === 0 ? 6 : weekday - 1; 41 | const days_to_show_in_next_month = 42 | NUMBER_OF_CELLS_IN_CALENDAR - days[this_month] - days_to_show_in_prev_month; 43 | 44 | const days_in_prev_month = get_range_array( 45 | days[prev_month] - days_to_show_in_prev_month, 46 | days[prev_month], 47 | ); 48 | const days_in_this_month = get_range_array(0, days[this_month]); 49 | const days_in_next_month = get_range_array(0, days_to_show_in_next_month); 50 | 51 | return { 52 | days_in_prev_month, 53 | days_in_this_month, 54 | days_in_next_month, 55 | }; 56 | } 57 | -------------------------------------------------------------------------------- /src/components/apps/PurusProfile/PurusProfile.svelte: -------------------------------------------------------------------------------- 1 | 14 | 15 |
16 |
17 | About the Developer 18 |
19 | 20 | 35 | 36 |
37 | Puru Vijay Profile pic 38 | 39 |
40 | 41 |

Hi, I'm Puru

42 | 43 |

44 | I'm the creator of macOS Web, which you're on right now 45 | Wink emoji 46 |

47 | 48 |

49 | 50 |

51 | I am a fullstack web developer, with an infinite amount of love for frontend web development, 52 | esp JavaScript, TypeScript, and for frontend frameworks like Svelte, Vue and React 53 | Star Struck face emoji 54 |

55 | 56 |

57 | 58 |

59 | However, my love for tech doesn't end there. I enjoy writing backend APIs, scripts, working 60 | with databases, and my fav platforms are NodeJS, Deno and Go 61 |

62 |
63 |
64 | 65 | 225 | -------------------------------------------------------------------------------- /src/components/apps/VSCode/VSCode.svelte: -------------------------------------------------------------------------------- 1 | 10 | 11 |
12 |
13 | 14 |
15 | 19 |
20 |
21 | 22 | 49 | -------------------------------------------------------------------------------- /src/components/apps/WallpaperApp/Wallpaper.svelte: -------------------------------------------------------------------------------- 1 | 84 | 85 | 86 | 87 | 88 |
93 | 94 | 119 | -------------------------------------------------------------------------------- /src/configs/apps/apps-config.ts: -------------------------------------------------------------------------------- 1 | import { create_app_config } from '🍎/helpers/create-app-config.ts'; 2 | 3 | const wallpapers = create_app_config({ 4 | title: 'Wallpapers', 5 | resizable: true, 6 | 7 | height: 600, 8 | width: 800, 9 | 10 | dock_breaks_before: true, 11 | }); 12 | 13 | const calculator = create_app_config({ 14 | title: 'Calculator', 15 | 16 | expandable: true, 17 | resizable: false, 18 | 19 | height: 250 * 1.414, 20 | width: 250, 21 | }); 22 | 23 | const calendar = create_app_config({ 24 | title: 'Calendar', 25 | resizable: true, 26 | }); 27 | 28 | const vscode = create_app_config({ 29 | title: 'VSCode', 30 | resizable: true, 31 | 32 | height: 600, 33 | width: 800, 34 | }); 35 | 36 | const finder = create_app_config({ 37 | title: 'Finder', 38 | resizable: true, 39 | 40 | // dockBreaksBefore: true, 41 | should_open_window: false, 42 | }); 43 | 44 | const safari = create_app_config({ 45 | title: 'Safari', 46 | resizable: true, 47 | }); 48 | 49 | const systemPreferences = create_app_config({ 50 | title: 'System Preferences', 51 | resizable: true, 52 | }); 53 | 54 | const purusTwitter = create_app_config({ 55 | title: `About the Developer`, 56 | resizable: true, 57 | 58 | dock_breaks_before: true, 59 | 60 | height: 600, 61 | width: 800, 62 | }); 63 | 64 | const viewSource = create_app_config({ 65 | title: `View Source`, 66 | resizable: true, 67 | 68 | should_open_window: false, 69 | external_action: () => window.open('https://github.com/puruvj/macos-web', '_blank'), 70 | }); 71 | 72 | const vercel = create_app_config({ 73 | title: `Powered by Vercel`, 74 | resizable: true, 75 | 76 | should_open_window: false, 77 | external_action: () => 78 | window.open('https://vercel.com/?utm_source=purus-projects&utm_campaign=oss', '_blank'), 79 | 80 | dock_breaks_before: true, 81 | }); 82 | 83 | const appstore = create_app_config({ 84 | title: 'App Store', 85 | resizable: true, 86 | }); 87 | 88 | export const apps_config = { 89 | finder, 90 | wallpapers, 91 | calculator, 92 | calendar, 93 | vscode, 94 | appstore, 95 | // safari, 96 | 97 | // 'system-preferences': systemPreferences, 98 | 99 | 'purus-twitter': purusTwitter, 100 | 'view-source': viewSource, 101 | 102 | vercel, 103 | }; 104 | -------------------------------------------------------------------------------- /src/configs/menu/context.menu.config.ts: -------------------------------------------------------------------------------- 1 | export const context_menu_config = { 2 | default: { 3 | 'new-folder': { 4 | title: 'New Folder', 5 | breakAfter: true, 6 | }, 7 | 'get-info': { 8 | title: 'Get Info', 9 | breakAfter: false, 10 | }, 11 | 'change-desktop-bg': { 12 | title: 'Change Desktop Background', 13 | breakAfter: true, 14 | }, 15 | 'use-stacks': { 16 | title: 'Use Stacks', 17 | breakAfter: false, 18 | }, 19 | 'sort-by': { 20 | title: 'Sort By', 21 | breakAfter: false, 22 | }, 23 | 'clean-up': { 24 | title: 'Clean Up', 25 | breakAfter: false, 26 | }, 27 | 'clean-up-by': { 28 | title: 'Clean Up By', 29 | breakAfter: false, 30 | }, 31 | 'show-view-options': { 32 | title: 'Show View Options', 33 | breakAfter: false, 34 | }, 35 | }, 36 | }; 37 | -------------------------------------------------------------------------------- /src/configs/theme/colors.config.ts: -------------------------------------------------------------------------------- 1 | type SingleThemeConfig = { 2 | hsl: string; 3 | contrastHsl: string; 4 | }; 5 | 6 | export const colors = { 7 | orange: { 8 | light: { 9 | hsl: '35deg, 100%, 50%', 10 | contrastHsl: '240, 3%, 11%', 11 | }, 12 | dark: { 13 | hsl: '36deg, 100%, 52%', 14 | contrastHsl: '240, 3%, 11%', 15 | }, 16 | }, 17 | 18 | green: { 19 | light: { 20 | hsl: '135deg, 59%, 49%', 21 | contrastHsl: '135deg, 60%, 4%', 22 | }, 23 | dark: { 24 | hsl: '135deg, 64%, 50%', 25 | contrastHsl: '135deg, 60%, 4%', 26 | }, 27 | }, 28 | 29 | cyan: { 30 | light: { 31 | hsl: '199deg, 78%, 55%', 32 | contrastHsl: '199deg, 78%, 100%', 33 | }, 34 | dark: { 35 | hsl: '197deg, 100%, 70%', 36 | contrastHsl: '197deg, 100%, 5%', 37 | }, 38 | }, 39 | 40 | blue: { 41 | light: { 42 | hsl: '211, 100%, 50%', 43 | contrastHsl: '240, 24%, 100%', 44 | }, 45 | dark: { 46 | hsl: '210, 100%, 52%', 47 | contrastHsl: '210, 92%, 5%', 48 | }, 49 | }, 50 | 51 | indigo: { 52 | light: { 53 | hsl: '241deg, 61%, 59%', 54 | contrastHsl: '241deg, 61%, 98%', 55 | }, 56 | dark: { 57 | hsl: '241deg, 73%, 63%', 58 | contrastHsl: '241deg, 73%, 5%', 59 | }, 60 | }, 61 | 62 | purple: { 63 | light: { 64 | hsl: '280deg, 68%, 60%', 65 | contrastHsl: '280deg, 68%, 98%', 66 | }, 67 | dark: { 68 | hsl: '280deg, 85%, 65%', 69 | contrastHsl: '280deg, 85%, 5%', 70 | }, 71 | }, 72 | 73 | pink: { 74 | light: { 75 | hsl: '349deg, 100%, 59%', 76 | contrastHsl: '349deg, 100%, 95%', 77 | }, 78 | dark: { 79 | hsl: '348deg, 100%, 61%', 80 | contrastHsl: '348deg, 100%, 5%', 81 | }, 82 | }, 83 | } satisfies Record; 84 | -------------------------------------------------------------------------------- /src/css/global.css: -------------------------------------------------------------------------------- 1 | @import './reset.css'; 2 | @import './theme.css'; 3 | 4 | html, 5 | body { 6 | height: 100%; 7 | } 8 | 9 | body { 10 | cursor: var(--system-cursor-default), auto; 11 | 12 | font-family: var(--system-font-family); 13 | 14 | overflow: hidden; 15 | 16 | -webkit-font-smoothing: antialiased; 17 | -moz-osx-font-smoothing: grayscale; 18 | } 19 | 20 | * { 21 | box-sizing: border-box; 22 | 23 | transition: 24 | background-color 150ms ease-in, 25 | background 150ms ease-in; 26 | } 27 | 28 | *:focus { 29 | outline: none; 30 | } 31 | 32 | *:focus-visible { 33 | outline: none; 34 | 35 | box-shadow: var(--system-focus-outline); 36 | } 37 | 38 | #root { 39 | width: 100%; 40 | height: 100%; 41 | 42 | isolation: isolate; 43 | } 44 | 45 | button { 46 | color: inherit; 47 | text-decoration: none; 48 | vertical-align: middle; 49 | font-family: inherit; 50 | 51 | border: 0; 52 | border-radius: 0; 53 | 54 | outline: 0; 55 | 56 | margin: 0; 57 | padding: 0; 58 | 59 | display: inline-flex; 60 | align-items: center; 61 | justify-content: center; 62 | 63 | position: relative; 64 | 65 | user-select: none; 66 | appearance: none; 67 | cursor: var(--system-cursor-default), auto; 68 | 69 | background-color: transparent; 70 | 71 | -webkit-tap-highlight-color: transparent; 72 | } 73 | 74 | * { 75 | cursor: var(--system-cursor-default), auto; 76 | } 77 | 78 | /* Scrollbar Stuffs */ 79 | ::-webkit-scrollbar { 80 | width: 5px; 81 | } 82 | 83 | /* Track */ 84 | ::-webkit-scrollbar-track { 85 | background-color: transparent; 86 | border-radius: 0.75rem; 87 | width: 5px; 88 | transition-duration: 0.4s; 89 | } 90 | 91 | /* Handle */ 92 | ::-webkit-scrollbar-thumb { 93 | background-color: #888; 94 | border-radius: 0.75rem; 95 | width: 5px; 96 | transition-duration: 0.4s; 97 | } 98 | 99 | /* Handle on hover */ 100 | ::-webkit-scrollbar-thumb:hover { 101 | background-color: #666; 102 | } 103 | 104 | /* Handle on clicked */ 105 | ::-webkit-scrollbar-thumb:active { 106 | background-color: #444; 107 | } 108 | -------------------------------------------------------------------------------- /src/css/reset.css: -------------------------------------------------------------------------------- 1 | html, 2 | body, 3 | div, 4 | span, 5 | applet, 6 | object, 7 | iframe, 8 | h1, 9 | h2, 10 | h3, 11 | h4, 12 | h5, 13 | h6, 14 | p, 15 | blockquote, 16 | pre, 17 | a, 18 | abbr, 19 | acronym, 20 | address, 21 | big, 22 | cite, 23 | code, 24 | del, 25 | dfn, 26 | em, 27 | img, 28 | ins, 29 | kbd, 30 | q, 31 | s, 32 | samp, 33 | small, 34 | strike, 35 | strong, 36 | sub, 37 | sup, 38 | tt, 39 | var, 40 | b, 41 | u, 42 | i, 43 | center, 44 | dl, 45 | dt, 46 | dd, 47 | ol, 48 | ul, 49 | li, 50 | fieldset, 51 | form, 52 | label, 53 | legend, 54 | table, 55 | caption, 56 | tbody, 57 | tfoot, 58 | thead, 59 | tr, 60 | th, 61 | td, 62 | article, 63 | aside, 64 | canvas, 65 | details, 66 | embed, 67 | figure, 68 | figcaption, 69 | footer, 70 | header, 71 | hgroup, 72 | menu, 73 | nav, 74 | output, 75 | ruby, 76 | section, 77 | summary, 78 | time, 79 | mark, 80 | audio, 81 | video { 82 | margin: 0; 83 | padding: 0; 84 | border: 0; 85 | font-size: 100%; 86 | font: inherit; 87 | vertical-align: baseline; 88 | } 89 | /* HTML5 display-role reset for older browsers */ 90 | article, 91 | aside, 92 | details, 93 | figcaption, 94 | figure, 95 | footer, 96 | header, 97 | hgroup, 98 | menu, 99 | nav, 100 | section { 101 | display: block; 102 | } 103 | body { 104 | line-height: 1; 105 | } 106 | ol, 107 | ul { 108 | list-style: none; 109 | } 110 | blockquote, 111 | q { 112 | quotes: none; 113 | } 114 | blockquote:before, 115 | blockquote:after, 116 | q:before, 117 | q:after { 118 | content: ''; 119 | content: none; 120 | } 121 | table { 122 | border-collapse: collapse; 123 | border-spacing: 0; 124 | } 125 | -------------------------------------------------------------------------------- /src/css/theme.css: -------------------------------------------------------------------------------- 1 | body, 2 | body[data-theme='light'] { 3 | /* // Primary */ 4 | --system-color-primary: hsl(211, 100%, 50%); 5 | --system-color-primary-hsl: 211, 100%, 50%; 6 | --system-color-primary-contrast: hsl(240, 24%, 100%); 7 | --system-color-primary-contrast-hsl: 240, 24%, 100%; 8 | 9 | /* // Dark */ 10 | --system-color-dark: hsl(240, 3%, 11%); 11 | --system-color-dark-hsl: 240, 3%, 11%; 12 | --system-color-dark-contrast: hsl(240, 24%, 100%); 13 | --system-color-dark-contrast-hsl: 240, 24%, 100%; 14 | 15 | /* // Light */ 16 | --system-color-light: hsl(240, 24%, 100%); 17 | --system-color-light-hsl: 240, 24%, 100%; 18 | --system-color-light-contrast: hsl(0, 0%, 11%); 19 | --system-color-light-contrast-hsl: 0, 0%, 11%; 20 | 21 | --system-font-family: -apple-system, BlinkMacSystemFont, 'Inter', 'Helvetica Neue', 'Helvetica', 22 | 'Arial', sans-serif; 23 | 24 | --system-focus-outline: 0 0 0 3px hsla(var(--system-color-primary-hsl), 0.5); 25 | 26 | --system-color-grey-50: #fafafa; 27 | --system-color-grey-50-hsl: 0, 0%, 98%; 28 | 29 | --system-color-grey-100: #f5f5f5; 30 | --system-color-grey-100-hsl: 0, 0%, 96%; 31 | 32 | --system-color-grey-200: #eeeeee; 33 | --system-color-grey-200-hsl: 0, 0%, 93%; 34 | 35 | --system-color-grey-300: #e0e0e0; 36 | --system-color-grey-300-hsl: 0, 0%, 88%; 37 | 38 | --system-color-grey-400: #bdbdbd; 39 | --system-color-grey-400-hsl: 0, 0%, 74%; 40 | 41 | --system-color-grey-500: #9e9e9e; 42 | --system-color-grey-500-hsl: 0, 0%, 62%; 43 | 44 | --system-color-grey-600: #757575; 45 | --system-color-grey-600-hsl: 0, 0%, 46%; 46 | 47 | --system-color-grey-700: #616161; 48 | --system-color-grey-700-hsl: 0, 0%, 38%; 49 | 50 | --system-color-grey-800: #424242; 51 | --system-color-grey-800-hsl: 0, 0%, 26%; 52 | 53 | --system-color-grey-900: #212121; 54 | --system-color-grey-900-hsl: 0, 0%, 13%; 55 | 56 | --system-color-grey-A100: #d5d5d5; 57 | --system-color-grey-A100-hsl: 0, 0%, 84%; 58 | 59 | --system-color-grey-A200: #aaa; 60 | --system-color-grey-A200-hsl: 0, 0%, 67%; 61 | 62 | --system-color-grey-A400: #303030; 63 | --system-color-grey-A400-hsl: 0, 0%, 19%; 64 | 65 | --system-color-grey-A700: #616161; 66 | --system-color-grey-A700-hsl: 0, 0%, 38%; 67 | 68 | /* // Cursors */ 69 | --system-cursor-default: url('/cursors/normal-select.svg'); 70 | --system-cursor-pointer: url('/cursors/link-select.svg'); 71 | --system-cursor-text-select: url('/cursors/text-select.svg'); 72 | --system-cursor-help-select: url('/cursors/help-select.svg'); 73 | 74 | /* // the following two cursors are animated, but will be rendered as a static 75 | // image by the browser */ 76 | --system-cursor-busy: url('/cursors/busy.webp'); 77 | --system-cursor-working-in-bg: url('/cursors/working-in-background.webp'); 78 | } 79 | 80 | body.dark { 81 | /* // Primary */ 82 | --system-color-primary: #0a85ff; 83 | --system-color-primary-hsl: 210, 100%, 52%; 84 | --system-color-primary-contrast: hsl(210, 92%, 5%); 85 | --system-color-primary-contrast-hsl: 210, 92%, 5%; 86 | 87 | /* // Dark */ 88 | --system-color-dark: hsl(240, 24%, 100%); 89 | --system-color-dark-hsl: 240, 24%, 100%; 90 | --system-color-dark-contrast: hsl(0, 0%, 11%); 91 | --system-color-dark-contrast-hsl: 0, 0%, 11%; 92 | 93 | /* // Light */ 94 | --system-color-light: hsl(240, 3%, 11%); 95 | --system-color-light-hsl: 240, 3%, 11%; 96 | --system-color-light-contrast: hsl(240, 24%, 100%); 97 | --system-color-light-contrast-hsl: 240, 24%, 100%; 98 | } 99 | -------------------------------------------------------------------------------- /src/global.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | /// 4 | /// 5 | /// 6 | 7 | type ObjectKeys = Obj extends object 8 | ? (keyof Obj)[] 9 | : Obj extends number 10 | ? [] 11 | : Obj extends Array | string 12 | ? string[] 13 | : never; 14 | 15 | interface ObjectConstructor { 16 | keys(o: ObjectType): ObjectKeys; 17 | entries(o: ObjType): [Unpacked>, ObjType[keyof ObjType]][]; 18 | } 19 | 20 | interface Storage { 21 | getItem(key: string): T | null; 22 | } 23 | 24 | type Unpacked = ArrayLike extends (infer RootType)[] ? RootType : ArrayLike; 25 | 26 | type Unpromisify = 27 | PromiseLike extends Promise ? RootType : PromiseLike; 28 | 29 | interface Array { 30 | fill(value: T, start?: number | undefined, end?: number | undefined): T[]; 31 | } 32 | -------------------------------------------------------------------------------- /src/helpers/create-app-config.ts: -------------------------------------------------------------------------------- 1 | export type AppConfig = { 2 | title: string; 3 | 4 | resizable?: boolean; 5 | expandable?: boolean; 6 | height?: string | number; 7 | width?: string | number; 8 | 9 | should_open_window?: boolean; 10 | 11 | /** The action to do when dock button is clicked */ 12 | external_action?: (e: unknown) => void; 13 | 14 | /** Break before this app */ 15 | dock_breaks_before?: boolean; 16 | }; 17 | 18 | export const create_app_config = (et: AppConfig) => 19 | ({ 20 | should_open_window: true, 21 | dock_breaks_before: false, 22 | 23 | resizable: true, 24 | expandable: false, 25 | 26 | width: 600, 27 | height: 500, 28 | ...et, 29 | }) satisfies AppConfig; 30 | -------------------------------------------------------------------------------- /src/helpers/create-menu-config.ts: -------------------------------------------------------------------------------- 1 | const apple_menu = { 2 | title: 'apple', 3 | menu: { 4 | 'about-this-mac': { 5 | title: 'About This Mac', 6 | breakAfter: true, 7 | }, 8 | 'system-preferences': { 9 | title: 'System Preferences...', 10 | }, 11 | 'app-store': { 12 | title: 'App Store...', 13 | breakAfter: true, 14 | }, 15 | 'recent-items': { 16 | title: 'Recent Items', 17 | breakAfter: true, 18 | }, 19 | 'force-quit': { 20 | title: 'Force Quit...', 21 | breakAfter: true, 22 | }, 23 | sleep: { 24 | title: 'Sleep', 25 | }, 26 | restart: { 27 | title: 'Restart...', 28 | }, 29 | shutdown: { 30 | title: 'Shut Down...', 31 | breakAfter: true, 32 | }, 33 | 'lock-screen': { 34 | title: 'Lock Screen', 35 | }, 36 | logout: { 37 | title: 'Log Out User...', 38 | }, 39 | }, 40 | }; 41 | 42 | export const create_menu_config = (et: T) => ({ apple: apple_menu, ...et }); 43 | -------------------------------------------------------------------------------- /src/helpers/fade.ts: -------------------------------------------------------------------------------- 1 | import { sineIn, sineOut } from 'svelte/easing'; 2 | 3 | export function fade_in( 4 | node: HTMLElement, 5 | { duration = 150, delay = duration }: SvelteTransitionConfig = {}, 6 | ): SvelteTransitionReturnType { 7 | const o = +getComputedStyle(node).opacity; 8 | 9 | return { 10 | duration: duration, 11 | delay, 12 | easing: sineIn, 13 | css: (t) => `opacity: ${t * o}`, 14 | }; 15 | } 16 | 17 | export function fade_out( 18 | node: HTMLElement, 19 | { duration = 150 }: SvelteTransitionConfig = {}, 20 | ): SvelteTransitionReturnType { 21 | const o = +getComputedStyle(node).opacity; 22 | 23 | return { 24 | duration, 25 | easing: sineOut, 26 | css: (t) => `opacity: ${t * o}`, 27 | }; 28 | } 29 | -------------------------------------------------------------------------------- /src/helpers/random.ts: -------------------------------------------------------------------------------- 1 | export function rand_int(lower: number, upper: number) { 2 | if (lower > upper) [lower, upper] = [upper, lower]; 3 | 4 | return lower + Math.floor((upper - lower) * Math.random()); 5 | } 6 | -------------------------------------------------------------------------------- /src/helpers/sleep.ts: -------------------------------------------------------------------------------- 1 | export const sleep = (time: number) => new Promise((res) => setTimeout(res, time)); 2 | -------------------------------------------------------------------------------- /src/helpers/smaller-closest-value.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Find the closest smaller number in an array 3 | * @param arr Ascendingly sorted array 4 | * @param value Value to check against 5 | */ 6 | export function smaller_closest_value(arr: number[], value: number) { 7 | let prevVal = arr[0]; 8 | 9 | for (const val of arr) { 10 | if (val > value) return prevVal; 11 | if (val == value) return val; 12 | prevVal = val; 13 | } 14 | 15 | return arr[arr.length - 1]; 16 | } 17 | -------------------------------------------------------------------------------- /src/main.ts: -------------------------------------------------------------------------------- 1 | import { mount } from 'svelte'; 2 | import Desktop from './components/Desktop/Desktop.svelte'; 3 | import './css/global.css'; 4 | 5 | const desktop = mount(Desktop, { 6 | target: document.getElementById('root'), 7 | }); 8 | 9 | export default desktop; 10 | -------------------------------------------------------------------------------- /src/state/apps.svelte.ts: -------------------------------------------------------------------------------- 1 | import type { apps_config } from '🍎/configs/apps/apps-config'; 2 | 3 | export type AppID = keyof typeof apps_config; 4 | 5 | export const apps = $state({ 6 | open: { 7 | wallpapers: false, 8 | finder: true, 9 | vscode: false, 10 | calculator: false, 11 | // safari: false, 12 | appstore: false, 13 | calendar: false, 14 | // 'system-preferences': false, 15 | 16 | 'purus-twitter': false, 17 | 'view-source': true, 18 | 19 | vercel: true, 20 | } as Record, 21 | 22 | active: 'finder' satisfies AppID, 23 | 24 | /** 25 | * Maximum zIndex for the active app 26 | * Initialize with -2, so that it becomes 0 when initialised 27 | */ 28 | active_z_index: -2, 29 | 30 | z_indices: { 31 | wallpapers: 0, 32 | finder: 0, 33 | vscode: 0, 34 | calculator: 0, 35 | // safari: 0, 36 | appstore: 0, 37 | calendar: 0, 38 | // 'system-preferences': 0, 39 | 40 | 'purus-twitter': 0, 41 | 'view-source': 0, 42 | 43 | vercel: 0, 44 | } as Record, 45 | 46 | is_being_dragged: false as boolean, 47 | 48 | fullscreen: { 49 | wallpapers: false, 50 | finder: false, 51 | vscode: false, 52 | calculator: false, 53 | // safari: false, 54 | appstore: false, 55 | calendar: false, 56 | // 'system-preferences': false, 57 | 58 | 'purus-twitter': false, 59 | 'view-source': false, 60 | 61 | vercel: false, 62 | } as Record, 63 | }); 64 | -------------------------------------------------------------------------------- /src/state/auto-destroy-effect-root.svelte.ts: -------------------------------------------------------------------------------- 1 | import { onDestroy } from 'svelte'; 2 | 3 | /** 4 | * Behaves the same as `$effect.root`, but automatically 5 | * cleans up the effect inside Svelte components. 6 | * 7 | * @returns Cleanup function to manually cleanup the effect. 8 | */ 9 | export function auto_destroy_effect_root(fn: () => void | VoidFunction) { 10 | let cleanup: VoidFunction | null = $effect.root(fn); 11 | 12 | function destroy() { 13 | if (cleanup === null) { 14 | return; 15 | } 16 | 17 | cleanup(); 18 | cleanup = null; 19 | } 20 | 21 | try { 22 | onDestroy(destroy); 23 | } catch { 24 | // Ignore the error. The user is responsible for manually 25 | // cleaning up effects created outside Svelte components. 26 | } 27 | 28 | return destroy; 29 | } 30 | -------------------------------------------------------------------------------- /src/state/dock.svelte.ts: -------------------------------------------------------------------------------- 1 | export const is_dock_hidden = $state({ value: false as boolean }); 2 | -------------------------------------------------------------------------------- /src/state/interval.svelte.ts: -------------------------------------------------------------------------------- 1 | import { untrack } from 'svelte'; 2 | import { auto_destroy_effect_root } from './auto-destroy-effect-root.svelte.ts'; 3 | 4 | export function create_interval(duration: number) { 5 | let time = $state(Date.now()); 6 | 7 | auto_destroy_effect_root(() => { 8 | $effect(() => { 9 | const interval = setInterval(() => { 10 | untrack(() => (time = Date.now())); 11 | }, duration); 12 | 13 | return () => { 14 | clearInterval(interval); 15 | }; 16 | }); 17 | }); 18 | 19 | return { 20 | get value() { 21 | return time; 22 | }, 23 | }; 24 | } 25 | -------------------------------------------------------------------------------- /src/state/menubar.svelte.ts: -------------------------------------------------------------------------------- 1 | import { persisted } from './persisted.svelte.ts'; 2 | import { finder_menu_config } from '🍎/configs/menu/finder.menu.config'; 3 | 4 | const menu_configs = { finder: finder_menu_config }; 5 | 6 | export const should_show_notch = persisted('macos:setting:should-show-notch', false as boolean); 7 | 8 | export const menubar_state = $state({ 9 | menus: menu_configs.finder, 10 | active: '' as string, 11 | }); 12 | -------------------------------------------------------------------------------- /src/state/persisted.svelte.ts: -------------------------------------------------------------------------------- 1 | import { auto_destroy_effect_root } from './auto-destroy-effect-root.svelte.ts'; 2 | 3 | type Primitive = string | null | symbol | boolean | number | undefined | bigint; 4 | 5 | const is_primitive = (val: any): val is Primitive => { 6 | return val !== Object(val) || val === null; 7 | }; 8 | 9 | export function persisted(key: string, initial: T) { 10 | const existing = localStorage.getItem(key); 11 | 12 | const primitive = is_primitive(initial); 13 | const parsed_value = existing ? JSON.parse(existing) : initial; 14 | 15 | let state = $state( 16 | primitive ? { value: parsed_value } : parsed_value, 17 | ); 18 | 19 | auto_destroy_effect_root(() => { 20 | $effect(() => { 21 | // @ts-ignore 22 | localStorage.setItem(key, JSON.stringify(primitive ? state.value : state)); 23 | }); 24 | }); 25 | 26 | return state; 27 | } 28 | -------------------------------------------------------------------------------- /src/state/preferences.svelte.ts: -------------------------------------------------------------------------------- 1 | import { colors } from '🍎/configs/theme/colors.config.ts'; 2 | import type { WallpaperID } from '🍎/configs/wallpapers/wallpaper.config.ts'; 3 | import { persisted } from './persisted.svelte.ts'; 4 | 5 | export type WallpaperSettings = { 6 | id: WallpaperID; 7 | image: string; 8 | canControlTheme: boolean; 9 | }; 10 | 11 | export type Theme = { 12 | scheme: 'light' | 'dark'; 13 | primaryColor: keyof typeof colors; 14 | }; 15 | 16 | export const preferences = persisted('macos:preferences', { 17 | reduced_motion: matchMedia('(prefers-reduced-motion)').matches, 18 | theme: { 19 | scheme: matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light', 20 | primaryColor: 'blue', 21 | } as Theme, 22 | wallpaper: { 23 | image: 'ventura-2', 24 | id: 'ventura', 25 | canControlTheme: true, 26 | } as WallpaperSettings, 27 | }); 28 | 29 | $effect.root(() => { 30 | $effect(() => { 31 | // Color scheme 32 | const { classList } = document.body; 33 | classList.remove('light', 'dark'); 34 | classList.add(preferences.theme.scheme); 35 | 36 | // Primary color 37 | const colorObj = colors[preferences.theme.primaryColor][preferences.theme.scheme]; 38 | document.body.style.setProperty('--system-color-primary', `hsl(${colorObj.hsl})`); 39 | document.body.style.setProperty('--system-color-primary-hsl', `${colorObj.hsl}`); 40 | document.body.style.setProperty( 41 | '--system-color-primary-contrast', 42 | `hsl(${colorObj.contrastHsl})`, 43 | ); 44 | document.body.style.setProperty( 45 | '--system-color-primary-contrast-hsl', 46 | `${colorObj.contrastHsl}`, 47 | ); 48 | }); 49 | }); 50 | -------------------------------------------------------------------------------- /src/state/spring.svelte.ts: -------------------------------------------------------------------------------- 1 | export function spring(value: number, { stiffness = 0.15, damping = 0.8, precision = 0.01 }) { 2 | let inner_value = $state(value); 3 | 4 | let last_time: number; 5 | 6 | let last_value = value; 7 | let current_value = value; 8 | let target_value = value; 9 | 10 | let running = false; 11 | 12 | function set(newValue: number) { 13 | target_value = newValue; 14 | if (!running) { 15 | running = true; 16 | last_time = performance.now(); 17 | requestAnimationFrame(loop); 18 | } 19 | } 20 | 21 | function loop() { 22 | const current_time = performance.now(); 23 | const delta_time = Math.min(current_time - last_time, 42) * 0.06; 24 | 25 | const delta = target_value - current_value; 26 | const velocity = (current_value - last_value) / delta_time; 27 | const spring = stiffness * delta; 28 | const damper = damping * velocity; 29 | const acceleration = spring - damper; 30 | const d = (velocity + acceleration) * delta_time; 31 | 32 | last_value = current_value; 33 | 34 | if (Math.abs(d) < precision && Math.abs(delta) < precision) { 35 | inner_value = current_value = target_value; 36 | running = false; 37 | } else { 38 | inner_value = current_value = current_value + d; 39 | last_time = current_time; 40 | requestAnimationFrame(loop); 41 | } 42 | } 43 | 44 | return { 45 | get value() { 46 | return inner_value; 47 | }, 48 | set value(newValue: number) { 49 | set(newValue); 50 | }, 51 | }; 52 | } 53 | -------------------------------------------------------------------------------- /src/state/system.svelte.ts: -------------------------------------------------------------------------------- 1 | export const system_needs_update = $state({ 2 | value: false as boolean, 3 | }); 4 | -------------------------------------------------------------------------------- /svelte.config.js: -------------------------------------------------------------------------------- 1 | import { vitePreprocess } from '@sveltejs/vite-plugin-svelte'; 2 | 3 | export default { 4 | preprocess: vitePreprocess({ 5 | replace: [['__DATE__', new Date().toISOString()]], 6 | }), 7 | compilerOptions: { 8 | cssHash: ({ hash, css }) => `s-${hash(css)}`, 9 | }, 10 | }; 11 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "moduleResolution": "Bundler", 4 | "allowImportingTsExtensions": true, 5 | "verbatimModuleSyntax": true, 6 | 7 | /** 8 | To have warnings/errors of the Svelte compiler at the correct position, 9 | enable source maps by default. 10 | */ 11 | "sourceMap": true, 12 | "lib": ["ESNext", "DOM"], 13 | "strict": false, 14 | "esModuleInterop": true, 15 | "noEmit": true, 16 | "skipLibCheck": true, 17 | "forceConsistentCasingInFileNames": true, 18 | "target": "esnext", 19 | "module": "esnext", 20 | "resolveJsonModule": true, 21 | // "baseUrl": "./src", 22 | "paths": { 23 | "🍎/*": ["./src/*"] 24 | }, 25 | "types": ["vite-plugin-pwa/client"], 26 | /** 27 | * Typecheck JS in `.svelte` and `.js` files by default. 28 | * Disable checkJs if you'd like to use dynamic types in JS. 29 | * Note that setting allowJs false does not prevent the use 30 | * of JS in `.svelte` files. 31 | */ 32 | "allowJs": true, 33 | "checkJs": true 34 | }, 35 | "include": ["src/**/*.d.ts", "src/**/*.ts", "src/**/*.js", "src/**/*.svelte", "./*.ts"], 36 | "exclude": ["node_modules/**/*"] 37 | } 38 | -------------------------------------------------------------------------------- /vercel.json: -------------------------------------------------------------------------------- 1 | { 2 | "headers": [ 3 | { 4 | "source": "/(.*)\\.webp", 5 | "headers": [ 6 | { 7 | "key": "Cache-Control", 8 | "value": "public, max-age=31536000, immutable" 9 | }, 10 | { 11 | "key": "CDN-Cache-Control", 12 | "value": "public, max-age=31536000, immutable" 13 | }, 14 | { 15 | "key": "Vercel-CDN-Cache-Control", 16 | "value": "public, max-age=31536000, immutable" 17 | } 18 | ] 19 | } 20 | ] 21 | } 22 | -------------------------------------------------------------------------------- /vite.config.ts: -------------------------------------------------------------------------------- 1 | import { svelte } from '@sveltejs/vite-plugin-svelte'; 2 | import UnpluginIcons from 'unplugin-icons/vite'; 3 | import { defineConfig } from 'vite'; 4 | import { imagetools } from 'vite-imagetools'; 5 | import { VitePWA } from 'vite-plugin-pwa'; 6 | import { browserslistToTargets } from 'lightningcss'; 7 | import browserslist from 'browserslist'; 8 | 9 | import { prefetch } from './prefetch-plugin'; 10 | 11 | export default defineConfig({ 12 | plugins: [ 13 | svelte(), 14 | prefetch(), 15 | 16 | UnpluginIcons({ autoInstall: true, compiler: 'svelte' }), 17 | VitePWA({ 18 | includeAssets: [ 19 | 'robots.txt', 20 | 'app-icons/finder/32.png', 21 | 'cover-image.png', 22 | 'cursors/(normal|link|text|help)-select.svg', 23 | '**/*.mp3', 24 | ], 25 | manifest: { 26 | name: 'Mac OS Monterey Svelte Web', 27 | short_name: 'macOS Svelte', 28 | theme_color: '#ffffff', 29 | description: 'Mac OS Monterey Web written in Svelte', 30 | icons: [ 31 | { 32 | src: 'app-icons/finder/128.png', 33 | sizes: '128x128', 34 | type: 'image/png', 35 | }, 36 | { 37 | src: 'app-icons/finder/192.png', 38 | sizes: '192x192', 39 | type: 'image/png', 40 | }, 41 | { 42 | src: 'app-icons/finder/256.png', 43 | sizes: '256x256', 44 | type: 'image/png', 45 | }, 46 | { 47 | src: 'app-icons/finder/512.png', 48 | sizes: '512x512', 49 | type: 'image/png', 50 | }, 51 | { 52 | src: 'app-icons/finder/512.png', 53 | sizes: '512x512', 54 | type: 'image/png', 55 | purpose: 'any maskable', 56 | }, 57 | ], 58 | }, 59 | }), 60 | imagetools({}), 61 | ], 62 | resolve: { 63 | alias: { 64 | '🍎': new URL('./src/', import.meta.url).pathname, 65 | }, 66 | }, 67 | build: { 68 | minify: 'terser', 69 | cssMinify: 'lightningcss', 70 | }, 71 | css: { 72 | transformer: 'lightningcss', 73 | lightningcss: { 74 | targets: browserslistToTargets(browserslist('defaults, not IE 11, not IE_Mob 11, not dead')), 75 | }, 76 | }, 77 | }); 78 | --------------------------------------------------------------------------------