├── .gitignore ├── LICENSE ├── README.md ├── README.zh.md ├── compare ├── fake │ ├── 1.png │ ├── 2.png │ ├── 3.png │ └── 4.png └── real │ ├── 1.png │ ├── 2.png │ ├── 3.png │ └── 4.png ├── filesystem.ts ├── index.html ├── package.json ├── public ├── dolphin-files │ ├── about.md │ ├── about.zh.md │ ├── images │ │ ├── calendar │ │ │ └── 1.png │ │ ├── favicon.png │ │ ├── mushishi.jpg │ │ └── yunyuyuan.png │ └── musics │ │ ├── The-Ludlows.mp3 │ │ ├── vip │ │ └── 失う.mp3 │ │ ├── 夜空中最亮的星.mp3 │ │ └── 未闻花名口琴版.mp3 └── favicon.png ├── src ├── App.vue ├── assets │ ├── images │ │ ├── blur-bg.jpg │ │ ├── gameover.png │ │ └── wallpaper.png │ ├── logo.png │ ├── style │ │ ├── _public.sass │ │ └── index.scss │ └── svg │ │ ├── IconSvg.vue │ │ ├── about.svg │ │ ├── all-apps.svg │ │ ├── applications.svg │ │ ├── arrow.svg │ │ ├── audio-volume-high.svg │ │ ├── audio-volume-low.svg │ │ ├── audio-volume-medium.svg │ │ ├── audio-volume-muted.svg │ │ ├── battery.svg │ │ ├── bluetooth.svg │ │ ├── chrome.svg │ │ ├── close.svg │ │ ├── compass.svg │ │ ├── connect.svg │ │ ├── desktop.svg │ │ ├── development.svg │ │ ├── dolphin.svg │ │ ├── earphone.svg │ │ ├── folder-desktop.svg │ │ ├── folder-documents.svg │ │ ├── folder-download.svg │ │ ├── folder-home.svg │ │ ├── folder-image.svg │ │ ├── folder-music.svg │ │ ├── folder-network.svg │ │ ├── folder-trash.svg │ │ ├── folder-video.svg │ │ ├── game.svg │ │ ├── gedit.svg │ │ ├── google-pinyin.svg │ │ ├── graphics.svg │ │ ├── image-viewer.svg │ │ ├── internet.svg │ │ ├── keyboard.svg │ │ ├── loading.svg │ │ ├── locale.svg │ │ ├── manjaro.svg │ │ ├── media-pause.svg │ │ ├── media-play.svg │ │ ├── mime-audio-mpeg.svg │ │ ├── mime-folder.svg │ │ ├── mime-image.svg │ │ ├── mime-text-markdown.svg │ │ ├── music.svg │ │ ├── notifications.svg │ │ ├── office.svg │ │ ├── paste.svg │ │ ├── phone.svg │ │ ├── photoshop.svg │ │ ├── plasma.svg │ │ ├── printer.svg │ │ ├── rhomb.svg │ │ ├── settings-keyboard.svg │ │ ├── settings-time.svg │ │ ├── settings-user.svg │ │ ├── settings.svg │ │ ├── system-reboot.svg │ │ ├── system-shutdown.svg │ │ ├── system-suspend-hibernate.svg │ │ ├── system-suspend.svg │ │ ├── system.svg │ │ ├── terminal.svg │ │ ├── triangle.svg │ │ ├── user.svg │ │ ├── view-list-details.svg │ │ ├── view-list-icons.svg │ │ ├── view-list-tree.svg │ │ ├── vscode.svg │ │ └── wifi.svg ├── components │ └── window.vue ├── main.ts ├── shims-vue.d.ts ├── utils │ ├── apps.ts │ ├── mixin.ts │ └── utils.ts └── views │ ├── app │ ├── about │ │ └── index.vue │ ├── chrome │ │ └── index.vue │ ├── dolphin │ │ └── index.vue │ ├── gedit │ │ └── index.vue │ ├── image viewer │ │ └── index.vue │ ├── music │ │ └── index.vue │ ├── settings │ │ └── index.vue │ ├── terminal │ │ └── index.vue │ └── vscode │ │ └── index.vue │ ├── desktop │ └── index.vue │ ├── index.vue │ ├── lock │ ├── cmdMsg.vue │ └── index.vue │ └── taskbar │ ├── appIcon.vue │ ├── calendar.vue │ ├── index.vue │ ├── leftMenu.vue │ └── rightMenu.vue ├── tsconfig.json ├── vite.config.ts └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .DS_Store 3 | dist 4 | dist-ssr 5 | *.local 6 | 7 | .idea -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 云与原 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 | [中文README](https://github.com/yunyuyuan/vue3-manjaro-ui/blob/master/README.zh.md) 2 | 3 | # 💥 web-manjaro written in Vue 4 | 5 | 6 | > 🚀 demo: [https://manjaro.yunyuyuan.net](https://manjaro.yunyuyuan.net) 7 | --- 8 | #### Compare with Real Manjaro 9 | 10 | -- | web | manjaro 11 | |----|-----|--------| 12 | |desktop|![11](https://github.com/yunyuyuan/vue3-manjaro-ui/blob/master/compare/fake/1.png)|![1](https://github.com/yunyuyuan/vue3-manjaro-ui/blob/master/compare/real/1.png) 13 | |runner|![22](https://github.com/yunyuyuan/vue3-manjaro-ui/blob/master/compare/fake/2.png)|![2](https://github.com/yunyuyuan/vue3-manjaro-ui/blob/master/compare/real/2.png) 14 | |dolphin|![33](https://github.com/yunyuyuan/vue3-manjaro-ui/blob/master/compare/fake/3.png)|![3](https://github.com/yunyuyuan/vue3-manjaro-ui/blob/master/compare/real/3.png) 15 | |terminal|![44](https://github.com/yunyuyuan/vue3-manjaro-ui/blob/master/compare/fake/4.png)|![4](https://github.com/yunyuyuan/vue3-manjaro-ui/blob/master/compare/real/4.png) 16 | 17 | ### ⛏️ Usage 18 | 1. clone this project: 19 | ```bash 20 | git clone https://github.com/yunyuyuan/vue3-manjaro-ui 21 | ``` 22 | 2. install dependencies: 23 | ```bash 24 | yarn install 25 | ``` 26 | 3. run it! 27 | ```bash 28 | npm run dev 29 | ``` 30 | 31 | ### 📃 Todo list 32 | - [x] Real [filesystem](https://github.com/yunyuyuan/vue3-manjaro-ui/tree/master/public/dolphin-files) for `dolphin` and `terminal` 33 | - [x] Image viewer 34 | - [x] Music player 35 | - [ ] Video player 36 | - [ ] white/dark mode 37 | - [ ] Office 38 | - [ ] KCalc(calculator of manjaro) 39 | - [ ] improving gedit 40 | - [x] calendar 41 | - [x] animation when boot and poweroff 42 | - [ ] contextmenu 43 | 44 | ### 🔌 Powered by: 45 | * Manjaro Linux 46 | * Vue 47 | * [vue-markdown-editor](https://github.com/code-farmer-i/vue-markdown-editor) 48 | * [dayjs](https://github.com/iamkun/dayjs) 49 | * [color-calendar](https://github.com/yunyuyuan/color-calendar) 50 | * [viewerjs](https://github.com/fengyuanchen/viewerjs) 51 | * iframe: [github1s](https://github1s.com) 52 | * And more... 53 | 54 | ### LICENCE 55 | 56 | [MIT](https://github.com/yunyuyuan/vue3-manjaro-ui/blob/master/LICENSE) 57 | -------------------------------------------------------------------------------- /README.zh.md: -------------------------------------------------------------------------------- 1 | [English README](https://github.com/yunyuyuan/vue3-manjaro-ui/blob/master/README.md) 2 | 3 | # 💥 用vue写的manjaro网页版桌面 4 | 5 | 6 | > 🚀 演示: [https://manjaro.yunyuyuan.net](https://manjaro.yunyuyuan.net) 7 | --- 8 | #### 与真·Manjaro对比 9 | 10 | -- | 网页版 | manjaro 11 | |----|-----|--------| 12 | |桌面|![11](https://github.com/yunyuyuan/vue3-manjaro-ui/blob/master/compare/fake/1.png)|![1](https://github.com/yunyuyuan/vue3-manjaro-ui/blob/master/compare/real/1.png) 13 | |启动器|![22](https://github.com/yunyuyuan/vue3-manjaro-ui/blob/master/compare/fake/2.png)|![2](https://github.com/yunyuyuan/vue3-manjaro-ui/blob/master/compare/real/2.png) 14 | |文管|![33](https://github.com/yunyuyuan/vue3-manjaro-ui/blob/master/compare/fake/3.png)|![3](https://github.com/yunyuyuan/vue3-manjaro-ui/blob/master/compare/real/3.png) 15 | |终端|![44](https://github.com/yunyuyuan/vue3-manjaro-ui/blob/master/compare/fake/4.png)|![4](https://github.com/yunyuyuan/vue3-manjaro-ui/blob/master/compare/real/4.png) 16 | 17 | ### ⛏️ 使用 18 | 1. 克隆本项目: 19 | ```bash 20 | git clone https://github.com/yunyuyuan/vue3-manjaro-ui 21 | ``` 22 | 2. 安装依赖: 23 | ```bash 24 | yarn install 25 | ``` 26 | 3. 跑起来! 27 | ```bash 28 | npm run dev 29 | ``` 30 | 31 | ### 📃 Todo列表 32 | - [x] 真实的[文件系统](https://github.com/yunyuyuan/vue3-manjaro-ui/tree/master/public/dolphin-files) 用于 `dolphin` 和 `terminal`操作 33 | - [x] 图片查看器 34 | - [x] 音乐播放器 35 | - [ ] 视频播放器 36 | - [ ] 亮/暗 模式 37 | - [ ] Office 38 | - [ ] KCalc(manjaro的计算器) 39 | - [ ] 优化gedit 40 | - [x] 日历 41 | - [x] 开关机动画 42 | - [ ] 右键菜单 43 | 44 | ### 🔌 Powered by: 45 | * Manjaro Linux 46 | * Vue 47 | * [vue-markdown-editor](https://github.com/code-farmer-i/vue-markdown-editor) 48 | * [dayjs](https://github.com/iamkun/dayjs) 49 | * [color-calendar](https://github.com/yunyuyuan/color-calendar) 50 | * [viewerjs](https://github.com/fengyuanchen/viewerjs) 51 | * iframe: [github1s](https://github1s.com) 52 | * 以及其它的项目... 53 | 54 | ### 许可 55 | 56 | [MIT](https://github.com/yunyuyuan/vue3-manjaro-ui/blob/master/LICENSE) 57 | -------------------------------------------------------------------------------- /compare/fake/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yunyuyuan/vue3-manjaro-ui/96bd0a0fefebd886fdea1f6c392cdf7feb300b8e/compare/fake/1.png -------------------------------------------------------------------------------- /compare/fake/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yunyuyuan/vue3-manjaro-ui/96bd0a0fefebd886fdea1f6c392cdf7feb300b8e/compare/fake/2.png -------------------------------------------------------------------------------- /compare/fake/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yunyuyuan/vue3-manjaro-ui/96bd0a0fefebd886fdea1f6c392cdf7feb300b8e/compare/fake/3.png -------------------------------------------------------------------------------- /compare/fake/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yunyuyuan/vue3-manjaro-ui/96bd0a0fefebd886fdea1f6c392cdf7feb300b8e/compare/fake/4.png -------------------------------------------------------------------------------- /compare/real/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yunyuyuan/vue3-manjaro-ui/96bd0a0fefebd886fdea1f6c392cdf7feb300b8e/compare/real/1.png -------------------------------------------------------------------------------- /compare/real/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yunyuyuan/vue3-manjaro-ui/96bd0a0fefebd886fdea1f6c392cdf7feb300b8e/compare/real/2.png -------------------------------------------------------------------------------- /compare/real/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yunyuyuan/vue3-manjaro-ui/96bd0a0fefebd886fdea1f6c392cdf7feb300b8e/compare/real/3.png -------------------------------------------------------------------------------- /compare/real/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yunyuyuan/vue3-manjaro-ui/96bd0a0fefebd886fdea1f6c392cdf7feb300b8e/compare/real/4.png -------------------------------------------------------------------------------- /filesystem.ts: -------------------------------------------------------------------------------- 1 | // @ts-ignore 2 | import fs from "fs"; 3 | // @ts-ignore 4 | import path from "path"; 5 | import mime from "mime"; 6 | 7 | export type typeFile = { 8 | name: string, 9 | mime: string, 10 | isDir: boolean, 11 | sub?: Array 12 | } 13 | 14 | function recursiveReadDir(dirs: Array, array: Array){ 15 | // @ts-ignore 16 | for (const dirent of fs.readdirSync(path.resolve(__dirname, ...['public'].concat(dirs)), {withFileTypes: true})){ 17 | const isDir = dirent.isDirectory(); 18 | const file: typeFile = { 19 | name: dirent.name, 20 | mime: isDir?'folder':mime.getType(dirent.name), 21 | isDir, 22 | } 23 | array.push(file); 24 | if (file.isDir){ 25 | file.sub = []; 26 | recursiveReadDir(dirs.slice().concat(dirent.name), file.sub); 27 | } 28 | } 29 | } 30 | 31 | const dolphinFiles: Array = []; 32 | recursiveReadDir(['dolphin-files'], dolphinFiles); 33 | export {dolphinFiles} -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | Manjaro 10 | 11 | 12 |
13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vue3-manjaro-ui", 3 | "version": "0.0.0", 4 | "scripts": { 5 | "dev": "vite", 6 | "build": "vue-tsc --noEmit && vite build", 7 | "serve": "vite preview" 8 | }, 9 | "dependencies": { 10 | "@fontsource/noto-sans": "^4.3.0", 11 | "@fontsource/source-code-pro": "^4.3.0", 12 | "@kangc/v-md-editor": "^2.2.4", 13 | "@vueform/slider": "^1.0.5", 14 | "dayjs": "^1.10.4", 15 | "vue": "^3.0.5", 16 | "yunyuyuan-color-calendar": "^1.0.7", 17 | "yunyuyuan-viewerjs": "^1.9.0" 18 | }, 19 | "devDependencies": { 20 | "@types/node": "^15.0.2", 21 | "@vitejs/plugin-vue": "^1.2.2", 22 | "@vue/compiler-sfc": "^3.0.5", 23 | "mime": "^2.5.2", 24 | "node-sass": "^6.0.0", 25 | "rollup-pluginutils": "^2.8.2", 26 | "sass": "^1.32.12", 27 | "typescript": "^4.1.3", 28 | "vite": "^2.2.3", 29 | "vue-tsc": "^0.0.24" 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /public/dolphin-files/about.md: -------------------------------------------------------------------------------- 1 | This is a **Manjaro OS** write with `Vue3` 2 | #### 🥰 Hope you like it. 3 | * https://github.com/yunyuyuan/vue3-manjaro-ui -------------------------------------------------------------------------------- /public/dolphin-files/about.zh.md: -------------------------------------------------------------------------------- 1 | 一个假的**Manjaro**,技术栈为vue3。 2 | #### 如果觉得不错,请给个⭐哦 3 | * https://github.com/yunyuyuan/vue3-manjaro-ui -------------------------------------------------------------------------------- /public/dolphin-files/images/calendar/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yunyuyuan/vue3-manjaro-ui/96bd0a0fefebd886fdea1f6c392cdf7feb300b8e/public/dolphin-files/images/calendar/1.png -------------------------------------------------------------------------------- /public/dolphin-files/images/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yunyuyuan/vue3-manjaro-ui/96bd0a0fefebd886fdea1f6c392cdf7feb300b8e/public/dolphin-files/images/favicon.png -------------------------------------------------------------------------------- /public/dolphin-files/images/mushishi.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yunyuyuan/vue3-manjaro-ui/96bd0a0fefebd886fdea1f6c392cdf7feb300b8e/public/dolphin-files/images/mushishi.jpg -------------------------------------------------------------------------------- /public/dolphin-files/images/yunyuyuan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yunyuyuan/vue3-manjaro-ui/96bd0a0fefebd886fdea1f6c392cdf7feb300b8e/public/dolphin-files/images/yunyuyuan.png -------------------------------------------------------------------------------- /public/dolphin-files/musics/The-Ludlows.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yunyuyuan/vue3-manjaro-ui/96bd0a0fefebd886fdea1f6c392cdf7feb300b8e/public/dolphin-files/musics/The-Ludlows.mp3 -------------------------------------------------------------------------------- /public/dolphin-files/musics/vip/失う.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yunyuyuan/vue3-manjaro-ui/96bd0a0fefebd886fdea1f6c392cdf7feb300b8e/public/dolphin-files/musics/vip/失う.mp3 -------------------------------------------------------------------------------- /public/dolphin-files/musics/夜空中最亮的星.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yunyuyuan/vue3-manjaro-ui/96bd0a0fefebd886fdea1f6c392cdf7feb300b8e/public/dolphin-files/musics/夜空中最亮的星.mp3 -------------------------------------------------------------------------------- /public/dolphin-files/musics/未闻花名口琴版.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yunyuyuan/vue3-manjaro-ui/96bd0a0fefebd886fdea1f6c392cdf7feb300b8e/public/dolphin-files/musics/未闻花名口琴版.mp3 -------------------------------------------------------------------------------- /public/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yunyuyuan/vue3-manjaro-ui/96bd0a0fefebd886fdea1f6c392cdf7feb300b8e/public/favicon.png -------------------------------------------------------------------------------- /src/App.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | -------------------------------------------------------------------------------- /src/assets/images/blur-bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yunyuyuan/vue3-manjaro-ui/96bd0a0fefebd886fdea1f6c392cdf7feb300b8e/src/assets/images/blur-bg.jpg -------------------------------------------------------------------------------- /src/assets/images/gameover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yunyuyuan/vue3-manjaro-ui/96bd0a0fefebd886fdea1f6c392cdf7feb300b8e/src/assets/images/gameover.png -------------------------------------------------------------------------------- /src/assets/images/wallpaper.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yunyuyuan/vue3-manjaro-ui/96bd0a0fefebd886fdea1f6c392cdf7feb300b8e/src/assets/images/wallpaper.png -------------------------------------------------------------------------------- /src/assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yunyuyuan/vue3-manjaro-ui/96bd0a0fefebd886fdea1f6c392cdf7feb300b8e/src/assets/logo.png -------------------------------------------------------------------------------- /src/assets/style/_public.sass: -------------------------------------------------------------------------------- 1 | $z-index-taskbar: 10000 -------------------------------------------------------------------------------- /src/assets/style/index.scss: -------------------------------------------------------------------------------- 1 | html, body{ 2 | width: 100%; 3 | height: 100%; 4 | font-family: "Noto Sans", serif; 5 | } 6 | 7 | *{ 8 | margin: 0; 9 | padding: 0; 10 | &.flex{ 11 | display: flex; 12 | align-items: center; 13 | } 14 | &.trans{ 15 | transition: all .15s linear; 16 | } 17 | &.code-font{ 18 | font-family: "Source Code Pro", serif; 19 | } 20 | } 21 | 22 | input.common{ 23 | margin-left: .5rem; 24 | background: #212121; 25 | border-radius: .15rem; 26 | border: 1px solid gray; 27 | font-size: .8rem; 28 | padding: .5rem; 29 | color: white; 30 | outline: none; 31 | &:focus, &:hover{ 32 | border-color: #44bbff; 33 | } 34 | } 35 | iframe{ 36 | border: none; 37 | outline: none; 38 | } 39 | 40 | 41 | #app{ 42 | width: 100%; 43 | height: 100%; 44 | position: relative; 45 | overflow-y: hidden; 46 | } 47 | -------------------------------------------------------------------------------- /src/assets/svg/IconSvg.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 61 | -------------------------------------------------------------------------------- /src/assets/svg/about.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/svg/all-apps.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /src/assets/svg/applications.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | 14 | 15 | -------------------------------------------------------------------------------- /src/assets/svg/arrow.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/svg/audio-volume-high.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/assets/svg/audio-volume-low.svg: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /src/assets/svg/audio-volume-medium.svg: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /src/assets/svg/audio-volume-muted.svg: -------------------------------------------------------------------------------- 1 | 2 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /src/assets/svg/battery.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/assets/svg/bluetooth.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | 13 | 14 | -------------------------------------------------------------------------------- /src/assets/svg/chrome.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 8 | 11 | 14 | 18 | 22 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | -------------------------------------------------------------------------------- /src/assets/svg/close.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 9 | 10 | -------------------------------------------------------------------------------- /src/assets/svg/compass.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | 13 | 14 | -------------------------------------------------------------------------------- /src/assets/svg/connect.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | 13 | 14 | -------------------------------------------------------------------------------- /src/assets/svg/desktop.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | 13 | 14 | -------------------------------------------------------------------------------- /src/assets/svg/development.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /src/assets/svg/earphone.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | 14 | 15 | -------------------------------------------------------------------------------- /src/assets/svg/folder-desktop.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | 13 | 14 | -------------------------------------------------------------------------------- /src/assets/svg/folder-documents.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/assets/svg/folder-download.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | 14 | 15 | -------------------------------------------------------------------------------- /src/assets/svg/folder-home.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | 13 | 14 | -------------------------------------------------------------------------------- /src/assets/svg/folder-image.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | 14 | 15 | -------------------------------------------------------------------------------- /src/assets/svg/folder-music.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | 13 | 14 | -------------------------------------------------------------------------------- /src/assets/svg/folder-network.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | 14 | 15 | -------------------------------------------------------------------------------- /src/assets/svg/folder-trash.svg: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/assets/svg/folder-video.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | 13 | 14 | -------------------------------------------------------------------------------- /src/assets/svg/game.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/svg/google-pinyin.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | 14 | 15 | -------------------------------------------------------------------------------- /src/assets/svg/graphics.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | -------------------------------------------------------------------------------- /src/assets/svg/image-viewer.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/svg/internet.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 19 | 21 | 23 | 25 | -------------------------------------------------------------------------------- /src/assets/svg/keyboard.svg: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/assets/svg/loading.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/svg/locale.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /src/assets/svg/manjaro.svg: -------------------------------------------------------------------------------- 1 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/svg/media-pause.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 8 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/assets/svg/media-play.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /src/assets/svg/mime-audio-mpeg.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /src/assets/svg/mime-folder.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /src/assets/svg/mime-image.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 8 | 9 | 10 | 12 | 17 | 18 | 19 | 24 | 28 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | -------------------------------------------------------------------------------- /src/assets/svg/mime-text-markdown.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /src/assets/svg/music.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 25 | 26 | -------------------------------------------------------------------------------- /src/assets/svg/notifications.svg: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/assets/svg/office.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /src/assets/svg/paste.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | 14 | 15 | -------------------------------------------------------------------------------- /src/assets/svg/phone.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | -------------------------------------------------------------------------------- /src/assets/svg/photoshop.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 7 | 10 | 11 | 16 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | -------------------------------------------------------------------------------- /src/assets/svg/plasma.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /src/assets/svg/printer.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | 14 | 15 | -------------------------------------------------------------------------------- /src/assets/svg/rhomb.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/svg/settings-keyboard.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /src/assets/svg/settings-time.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 17 | 18 | 19 | 20 | 21 | 23 | 25 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /src/assets/svg/settings-user.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /src/assets/svg/settings.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/svg/system-reboot.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/assets/svg/system-shutdown.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | 14 | 15 | -------------------------------------------------------------------------------- /src/assets/svg/system-suspend-hibernate.svg: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /src/assets/svg/system-suspend.svg: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /src/assets/svg/system.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 20 | 22 | 32 | 35 | 38 | 42 | 43 | 53 | 56 | 59 | 63 | 64 | 74 | 77 | 80 | 84 | 85 | 95 | 105 | 115 | 125 | 135 | 145 | 148 | 151 | 155 | 156 | 165 | 168 | 171 | 175 | 176 | 177 | 196 | 198 | 199 | 201 | image/svg+xml 202 | 204 | 205 | 206 | 207 | 208 | 213 | 218 | 223 | 228 | 234 | 239 | 244 | 249 | 254 | 260 | 267 | 273 | 278 | 283 | 288 | 289 | 290 | -------------------------------------------------------------------------------- /src/assets/svg/terminal.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 19 | 21 | 29 | 32 | 36 | 37 | 45 | 49 | 54 | 55 | 63 | 66 | 70 | 71 | 72 | 87 | 90 | 91 | 93 | 94 | 96 | image/svg+xml 97 | 99 | 100 | 101 | 102 | 103 | 108 | 117 | 122 | 127 | 132 | 137 | 138 | 139 | -------------------------------------------------------------------------------- /src/assets/svg/triangle.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/svg/user.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/svg/view-list-details.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | 14 | 15 | -------------------------------------------------------------------------------- /src/assets/svg/view-list-icons.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 11 | 12 | 18 | 19 | -------------------------------------------------------------------------------- /src/assets/svg/view-list-tree.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 11 | 12 | 18 | 19 | -------------------------------------------------------------------------------- /src/assets/svg/vscode.svg: -------------------------------------------------------------------------------- 1 | file_type_vscode -------------------------------------------------------------------------------- /src/assets/svg/wifi.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/main.ts: -------------------------------------------------------------------------------- 1 | import { createApp, ref } from 'vue' 2 | import App from './App.vue' 3 | 4 | import './assets/style/index.scss' 5 | import "@fontsource/noto-sans" 6 | import "@fontsource/source-code-pro" 7 | 8 | import IconSvg from "./assets/svg/IconSvg.vue"; 9 | import apps from "./utils/apps"; 10 | 11 | createApp(App) 12 | .component('svg-icon', IconSvg) 13 | .provide('apps', apps) 14 | .provide('lock', ref(process.env.NODE_ENV !== 'development')) 15 | .provide('power', ref('')) 16 | .mount('#app') 17 | -------------------------------------------------------------------------------- /src/shims-vue.d.ts: -------------------------------------------------------------------------------- 1 | declare module '*.vue' { 2 | import { DefineComponent } from 'vue' 3 | const component: DefineComponent<{}, {}, any> 4 | export default component 5 | } 6 | -------------------------------------------------------------------------------- /src/utils/apps.ts: -------------------------------------------------------------------------------- 1 | import {defineAsyncComponent, reactive, ref, Ref, Component} from 'vue'; 2 | 3 | type appParams = { 4 | filepath: Ref 5 | } 6 | 7 | export type typeApp = { 8 | icon: string, 9 | name: string, 10 | taskbar?: number, 11 | order?: Ref, 12 | readonly position: object , 13 | readonly size: object, 14 | status: Ref, 15 | maxed: Ref, 16 | zindex: Ref, 17 | animating: boolean, 18 | app: Component, 19 | params? : appParams 20 | } 21 | 22 | export default [{ 23 | name: "chrome", 24 | icon: "chrome", 25 | taskbar: 0, 26 | position: reactive([30, 30]), 27 | size: reactive([900, 600]), 28 | status: ref(0), 29 | maxed: ref(false), 30 | zindex: ref(0), 31 | animating: false, 32 | app: defineAsyncComponent(() => import('../views/app/chrome/index.vue')), 33 | }, { 34 | name: "dolphin", 35 | icon: "dolphin", 36 | taskbar: 1, 37 | position: reactive([10, 10]), 38 | size: reactive([700, 500]), 39 | status: ref(0), 40 | maxed: ref(false), 41 | zindex: ref(0), 42 | animating: false, 43 | app: defineAsyncComponent(() => import('../views/app/dolphin/index.vue')) 44 | }, { 45 | name: "settings", 46 | icon: "settings", 47 | order: ref(0), 48 | position: reactive([30, 30]), 49 | size: reactive([700, 500]), 50 | status: ref(0), 51 | maxed: ref(false), 52 | zindex: ref(0), 53 | animating: false, 54 | app: defineAsyncComponent(() => import('../views/app/settings/index.vue')) 55 | }, { 56 | name: "terminal", 57 | icon: "terminal", 58 | taskbar: 2, 59 | position: reactive([80, 80]), 60 | size: reactive([700, 500]), 61 | status: ref(0), 62 | maxed: ref(false), 63 | zindex: ref(0), 64 | animating: false, 65 | app: defineAsyncComponent(() => import('../views/app/terminal/index.vue')) 66 | }, { 67 | name: "vscode", 68 | icon: "vscode", 69 | taskbar: 3, 70 | position: reactive([20, 20]), 71 | size: reactive([800, 500]), 72 | status: ref(0), 73 | maxed: ref(false), 74 | zindex: ref(0), 75 | animating: false, 76 | app: defineAsyncComponent(() => import('../views/app/vscode/index.vue')) 77 | }, { 78 | name: "image viewer", 79 | icon: "image-viewer", 80 | order: ref(0), 81 | position: reactive([10, 10]), 82 | size: reactive([700, 450]), 83 | status: ref(0), 84 | maxed: ref(false), 85 | zindex: ref(0), 86 | animating: false, 87 | app: defineAsyncComponent(() => import('../views/app/image viewer/index.vue')), 88 | params: {filepath: ref('')} 89 | }, { 90 | name: "about", 91 | icon: "about", 92 | order: ref(0), 93 | position: reactive([50, 50]), 94 | size: reactive([450, 400]), 95 | status: ref(2), 96 | maxed: ref(false), 97 | zindex: ref(1), 98 | animating: false, 99 | app: defineAsyncComponent(() => import('../views/app/about/index.vue')) 100 | }, { 101 | icon: "music", 102 | name: "music", 103 | order: ref(0), 104 | position: reactive([80, 80]), 105 | size: reactive([800, 500]), 106 | status: ref(0), 107 | maxed: ref(false), 108 | zindex: ref(0), 109 | animating: false, 110 | app: defineAsyncComponent(() => import('../views/app/music/index.vue')), 111 | params: {filepath: ref('')} 112 | }, { 113 | name: "gedit", 114 | icon: "gedit", 115 | order: ref(0), 116 | position: reactive([80, 80]), 117 | size: reactive([800, 500]), 118 | status: ref(0), 119 | maxed: ref(false), 120 | zindex: ref(0), 121 | animating: false, 122 | app: defineAsyncComponent(() => import('../views/app/gedit/index.vue')), 123 | params: {filepath: ref('')} 124 | }, 125 | ] as Array -------------------------------------------------------------------------------- /src/utils/mixin.ts: -------------------------------------------------------------------------------- 1 | import {typeApp} from "./apps"; 2 | 3 | export default { 4 | inject: ['apps'], 5 | computed: { 6 | topWindow ():typeApp { 7 | return this.apps.slice().sort((a:typeApp, b:typeApp)=>b.zindex.value-a.zindex.value)[0] 8 | } 9 | } 10 | } -------------------------------------------------------------------------------- /src/utils/utils.ts: -------------------------------------------------------------------------------- 1 | import {typeApp} from "./apps"; 2 | import {typeFile, dolphinFiles} from "../../filesystem"; 3 | 4 | export function escapeHtml(s: string): string{ 5 | return s.replaceAll('<', '<') 6 | .replaceAll('>', '>') 7 | } 8 | 9 | export function findMimeFiles (type: RegExp): Array{ 10 | const ret = []; 11 | function findImage (path: Array){ 12 | let files = dolphinFiles as Array; 13 | for (const i of path){ 14 | files = files.find(v=>v.isDir&&v.name===i).sub; 15 | } 16 | const pathStr = path.join('/'); 17 | files.forEach(file=>{ 18 | if (type.test(file.mime)){ 19 | ret.push(pathStr+'/'+file.name); 20 | }else if (file.isDir){ 21 | findImage(path.concat(file.name)); 22 | } 23 | }) 24 | } 25 | findImage([]); 26 | return ret; 27 | } 28 | 29 | export function openApp(name: string): typeApp{ 30 | const app: typeApp = this.apps.find((app: typeApp)=>app.name===name); 31 | if (!app) return; 32 | if (app.animating) return; 33 | if (this.topWindow && app !== this.topWindow) { 34 | app.zindex.value = this.topWindow.zindex.value + 1; 35 | } 36 | if (app.order){ 37 | app.order.value = Date.now(); 38 | } 39 | app.status.value = 2; 40 | return app; 41 | } -------------------------------------------------------------------------------- /src/views/app/about/index.vue: -------------------------------------------------------------------------------- 1 | 18 | 19 | 24 | 25 | 71 | -------------------------------------------------------------------------------- /src/views/app/chrome/index.vue: -------------------------------------------------------------------------------- 1 | 18 | 19 | 59 | 60 | -------------------------------------------------------------------------------- /src/views/app/dolphin/index.vue: -------------------------------------------------------------------------------- 1 | 67 | 68 | 129 | 130 | -------------------------------------------------------------------------------- /src/views/app/gedit/index.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 41 | 42 | -------------------------------------------------------------------------------- /src/views/app/image viewer/index.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 65 | 66 | -------------------------------------------------------------------------------- /src/views/app/music/index.vue: -------------------------------------------------------------------------------- 1 | 52 | 53 | 198 | 199 | -------------------------------------------------------------------------------- /src/views/app/settings/index.vue: -------------------------------------------------------------------------------- 1 | 55 | 56 | 66 | 67 | -------------------------------------------------------------------------------- /src/views/app/vscode/index.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /src/views/desktop/index.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 43 | 44 | -------------------------------------------------------------------------------- /src/views/index.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 33 | 34 | -------------------------------------------------------------------------------- /src/views/lock/cmdMsg.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 85 | 86 | -------------------------------------------------------------------------------- /src/views/lock/index.vue: -------------------------------------------------------------------------------- 1 | 32 | 33 | 72 | 73 | -------------------------------------------------------------------------------- /src/views/taskbar/appIcon.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 38 | 39 | -------------------------------------------------------------------------------- /src/views/taskbar/calendar.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 33 | 34 | -------------------------------------------------------------------------------- /src/views/taskbar/index.vue: -------------------------------------------------------------------------------- 1 | 45 | 46 | 138 | 139 | -------------------------------------------------------------------------------- /src/views/taskbar/leftMenu.vue: -------------------------------------------------------------------------------- 1 | 60 | 61 | 166 | 167 | -------------------------------------------------------------------------------- /src/views/taskbar/rightMenu.vue: -------------------------------------------------------------------------------- 1 | 86 | 87 | 145 | 146 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "esnext", 4 | "module": "esnext", 5 | "moduleResolution": "node", 6 | "strict": false, 7 | "jsx": "preserve", 8 | "sourceMap": true, 9 | "resolveJsonModule": true, 10 | "esModuleInterop": true, 11 | "lib": ["esnext", "dom"], 12 | "types": ["vite/client", "node"] 13 | }, 14 | "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue"] 15 | } 16 | -------------------------------------------------------------------------------- /vite.config.ts: -------------------------------------------------------------------------------- 1 | import {defineConfig, Plugin} from 'vite' 2 | import vue from '@vitejs/plugin-vue' 3 | import fs from "fs"; 4 | import { basename } from 'path'; 5 | import {dataToEsm} from "rollup-pluginutils"; 6 | import {dolphinFiles} from "./filesystem"; 7 | 8 | const rawSvgPlugin:Plugin = { 9 | name: 'raw-svg-file-loader', 10 | transform(svg: string, filepath: string) { 11 | if (filepath.slice(-4) !== '.svg') return null; 12 | const content = fs.readFileSync(filepath).toString() 13 | return { 14 | code: dataToEsm(content) 15 | } 16 | }, 17 | } 18 | 19 | // Todo: How to use fs in vite? 20 | const filesystemPlugin:Plugin = { 21 | name: 'get-file-system-dirs', 22 | transform(ipt: string, filepath: string) { 23 | // shim filesystem.ts 24 | if (basename(filepath) === 'filesystem.ts') { 25 | return { 26 | code: dataToEsm({dolphinFiles}) 27 | } 28 | } 29 | }, 30 | } 31 | 32 | // https://vitejs.dev/config/ 33 | export default defineConfig({ 34 | plugins: [vue(), rawSvgPlugin, filesystemPlugin], 35 | }) --------------------------------------------------------------------------------