├── .github └── FUNDING.yml ├── .gitignore ├── README.md ├── package-lock.json ├── package.json ├── public ├── favicon.ico ├── index.html ├── locales │ ├── af │ │ ├── login.json │ │ ├── network.json │ │ ├── register.json │ │ └── translation.json │ ├── ar │ │ ├── login.json │ │ ├── network.json │ │ ├── register.json │ │ └── translation.json │ ├── be │ │ ├── login.json │ │ ├── network.json │ │ ├── register.json │ │ └── translation.json │ ├── bg │ │ ├── login.json │ │ ├── network.json │ │ ├── register.json │ │ └── translation.json │ ├── ca │ │ ├── login.json │ │ ├── network.json │ │ ├── register.json │ │ └── translation.json │ ├── cs │ │ ├── login.json │ │ ├── network.json │ │ ├── register.json │ │ └── translation.json │ ├── da │ │ ├── login.json │ │ ├── network.json │ │ ├── register.json │ │ └── translation.json │ ├── de │ │ ├── login.json │ │ ├── network.json │ │ ├── register.json │ │ └── translation.json │ ├── el │ │ ├── login.json │ │ ├── network.json │ │ ├── register.json │ │ └── translation.json │ ├── en │ │ ├── login.json │ │ ├── network.json │ │ ├── register.json │ │ └── translation.json │ ├── eo │ │ ├── login.json │ │ ├── network.json │ │ ├── register.json │ │ └── translation.json │ ├── es │ │ ├── login.json │ │ ├── network.json │ │ ├── register.json │ │ └── translation.json │ ├── fi │ │ ├── login.json │ │ ├── network.json │ │ ├── register.json │ │ └── translation.json │ ├── fr │ │ ├── login.json │ │ ├── network.json │ │ ├── register.json │ │ └── translation.json │ ├── he │ │ ├── login.json │ │ ├── network.json │ │ ├── register.json │ │ └── translation.json │ ├── hi │ │ ├── login.json │ │ ├── network.json │ │ ├── register.json │ │ └── translation.json │ ├── hr │ │ ├── login.json │ │ ├── network.json │ │ ├── register.json │ │ └── translation.json │ ├── hu │ │ ├── login.json │ │ ├── network.json │ │ ├── register.json │ │ └── translation.json │ ├── id │ │ ├── login.json │ │ ├── network.json │ │ ├── register.json │ │ └── translation.json │ ├── it │ │ ├── login.json │ │ ├── network.json │ │ ├── register.json │ │ └── translation.json │ ├── ja │ │ ├── login.json │ │ ├── network.json │ │ ├── register.json │ │ └── translation.json │ ├── ko │ │ ├── login.json │ │ ├── network.json │ │ ├── register.json │ │ └── translation.json │ ├── lt │ │ ├── login.json │ │ ├── network.json │ │ ├── register.json │ │ └── translation.json │ ├── nl │ │ ├── login.json │ │ ├── network.json │ │ ├── register.json │ │ └── translation.json │ ├── no │ │ ├── login.json │ │ ├── network.json │ │ ├── register.json │ │ └── translation.json │ ├── pl │ │ ├── login.json │ │ ├── network.json │ │ ├── register.json │ │ └── translation.json │ ├── pt │ │ ├── login.json │ │ ├── network.json │ │ ├── register.json │ │ └── translation.json │ ├── ro │ │ ├── login.json │ │ ├── network.json │ │ ├── register.json │ │ └── translation.json │ ├── ru │ │ ├── login.json │ │ ├── network.json │ │ ├── register.json │ │ └── translation.json │ ├── sk │ │ ├── login.json │ │ ├── network.json │ │ ├── register.json │ │ └── translation.json │ ├── sr │ │ ├── login.json │ │ ├── network.json │ │ ├── register.json │ │ └── translation.json │ ├── sv │ │ ├── login.json │ │ ├── network.json │ │ ├── register.json │ │ └── translation.json │ ├── tr │ │ ├── login.json │ │ ├── network.json │ │ ├── register.json │ │ └── translation.json │ ├── uk │ │ ├── login.json │ │ ├── network.json │ │ ├── register.json │ │ └── translation.json │ ├── ur │ │ ├── login.json │ │ ├── network.json │ │ ├── register.json │ │ └── translation.json │ ├── vi │ │ ├── login.json │ │ ├── network.json │ │ ├── register.json │ │ └── translation.json │ └── zh │ │ ├── login.json │ │ ├── network.json │ │ ├── register.json │ │ └── translation.json ├── logo192.png ├── logo512.png ├── manifest.json └── robots.txt ├── src ├── App.tsx ├── Client.tsx ├── assets │ ├── channel.svg │ ├── login.svg │ ├── logo │ │ ├── ios │ │ │ ├── 100.png │ │ │ ├── 1024.png │ │ │ ├── 114.png │ │ │ ├── 120.png │ │ │ ├── 128.png │ │ │ ├── 144.png │ │ │ ├── 152.png │ │ │ ├── 167.png │ │ │ ├── 172.png │ │ │ ├── 180.png │ │ │ ├── 196.png │ │ │ ├── 20.png │ │ │ ├── 216.png │ │ │ ├── 256.png │ │ │ ├── 29.png │ │ │ ├── 32.png │ │ │ ├── 40.png │ │ │ ├── 48.png │ │ │ ├── 50.png │ │ │ ├── 512.png │ │ │ ├── 55.png │ │ │ ├── 57.png │ │ │ ├── 58.png │ │ │ ├── 60.png │ │ │ ├── 64.png │ │ │ ├── 72.png │ │ │ ├── 76.png │ │ │ ├── 80.png │ │ │ ├── 87.png │ │ │ ├── 88.png │ │ │ ├── logo.png │ │ │ ├── logo_gradient.png │ │ │ ├── logo_shadow.png │ │ │ └── resize.sh │ │ ├── resize.sh │ │ └── round │ │ │ ├── 100.png │ │ │ ├── 1024.png │ │ │ ├── 114.png │ │ │ ├── 120.png │ │ │ ├── 128.png │ │ │ ├── 144.png │ │ │ ├── 152.png │ │ │ ├── 16.png │ │ │ ├── 167.png │ │ │ ├── 172.png │ │ │ ├── 180.png │ │ │ ├── 196.png │ │ │ ├── 20.png │ │ │ ├── 216.png │ │ │ ├── 256.png │ │ │ ├── 29.png │ │ │ ├── 32.png │ │ │ ├── 40.png │ │ │ ├── 48.png │ │ │ ├── 50.png │ │ │ ├── 512.png │ │ │ ├── 55.png │ │ │ ├── 57.png │ │ │ ├── 58.png │ │ │ ├── 60.png │ │ │ ├── 64.png │ │ │ ├── 72.png │ │ │ ├── 76.png │ │ │ ├── 80.png │ │ │ ├── 87.png │ │ │ ├── 88.png │ │ │ ├── logo.png │ │ │ └── resize.sh │ ├── logo_big_transparent.png │ ├── logo_transparent.png │ ├── radio.svg │ ├── settings.png │ ├── settings.svg │ ├── speak.svg │ ├── speaker.png │ ├── voice.png │ └── voice.svg ├── components │ ├── Branding.scss │ ├── Branding.tsx │ ├── DevSettings.tsx │ ├── Drawer.scss │ ├── Drawer.tsx │ ├── ErrorBoundary.scss │ ├── ErrorBoundary.tsx │ ├── Routes.tsx │ └── private-route.tsx ├── framework │ ├── Button.tsx │ ├── Card.tsx │ ├── Checkbox.tsx │ ├── Dropdown.tsx │ ├── Icon.tsx │ ├── Input.tsx │ ├── Link.tsx │ ├── List.tsx │ ├── LittleModal.scss │ ├── LittleModal.tsx │ ├── Modal.scss │ ├── Modal.tsx │ ├── Spinner.scss │ ├── Spinner.tsx │ ├── Text.tsx │ ├── Types.tsx │ ├── radio.js │ └── tooltip.scss ├── index.scss ├── index.tsx ├── models │ └── networks.ts ├── pages │ ├── NotFound.tsx │ ├── TopScreen.scss │ ├── auth │ │ ├── Login.scss │ │ ├── login.tsx │ │ └── register.tsx │ ├── channel │ │ ├── messages.scss │ │ ├── messages.tsx │ │ ├── sidebar.scss │ │ └── sidebar.tsx │ ├── friends │ │ ├── friends.scss │ │ └── friends.tsx │ ├── guild │ │ ├── guild.scss │ │ └── guild.tsx │ └── loading-page.tsx ├── react-app-env.d.ts ├── reportWebVitals.ts ├── setupTests.ts └── util │ ├── Router.tsx │ ├── State.ts │ ├── Time.native.ts │ ├── Time.ts │ ├── debug.ts │ ├── i18n.ts │ ├── store.ts │ ├── useCache.ts │ └── useForceUpdate.tsx └── tsconfig.json /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | open_collective: fosscord -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # testing 9 | /coverage 10 | 11 | # production 12 | /build 13 | 14 | # misc 15 | .DS_Store 16 | .env.local 17 | .env.development.local 18 | .env.test.local 19 | .env.production.local 20 | 21 | npm-debug.log* 22 | yarn-debug.log* 23 | yarn-error.log* 24 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

2 | 3 |

4 |

Fosscord Archived Web Client

5 | 6 |

7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |

16 | 17 | 18 | ## Archived 19 | Continued in [fosscord-client](https://github.com/fosscord/fosscord-client) 20 | 21 | ## [About](https://github.com/fosscord/fosscord-client/wiki) 22 | 23 | Fosscord is **f**ree **o**pen **s**ource **s**oftware compatible to dis**cord**. It is a selfhostable Chat, Voice and Video platform similar to Slack, Rocket.chat and Discord-compatible. 24 | 25 | - Discord-compatible 26 | - Selfhostable 27 | - Open Source 28 | - Configurable 29 | - Secure 30 | - Decentralized 31 | - Extendable 32 | - Themeable 33 | 34 | logo by [@nwlandas](https://twitter.com/nwlandas) 35 | 36 | ## Installation 37 | 38 | _it is in development and currently does not build._ 39 | 40 | ## Support 41 | 42 | https://discord.gg/ZrnGQP6p3d 43 | 44 | if we are finished we'll host our own support server. 45 | 46 | ## Contribute 47 | 48 | This project is only possible by volunteers like you and me, your contribution is very much appreciated 🥺. 49 | 50 | If you want to make this project reality and and you would like to contribute then [read the wiki](https://github.com/fosscord/fosscord-client/wiki) first. 51 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "fosscord-client", 3 | "version": "0.1.3", 4 | "private": false, 5 | "homepage": "/", 6 | "scripts": { 7 | "start": "react-scripts start", 8 | "build": "react-scripts build", 9 | "test": "react-scripts test", 10 | "eject": "react-scripts eject" 11 | }, 12 | "dependencies": { 13 | "@babel/core": "7.12.3", 14 | "@discordjs/opus": "^0.6.0", 15 | "@discordjs/rest": "^0.1.0-canary.0", 16 | "@discordjs/voice": "^0.6.0", 17 | "@fosscord/ui": "^1.0.3", 18 | "@pmmmwh/react-refresh-webpack-plugin": "0.4.3", 19 | "@svgr/webpack": "5.5.0", 20 | "@testing-library/jest-dom": "^5.11.10", 21 | "@testing-library/react": "^11.2.6", 22 | "@testing-library/user-event": "^12.8.3", 23 | "@types/jest": "^26.0.24", 24 | "@types/node": "^12.20.19", 25 | "@types/react": "^17.0.16", 26 | "@types/react-dom": "^17.0.9", 27 | "@typescript-eslint/eslint-plugin": "^4.5.0", 28 | "@typescript-eslint/parser": "^4.5.0", 29 | "abort-controller": "^3.0.0", 30 | "babel-eslint": "^10.1.0", 31 | "babel-jest": "^26.6.0", 32 | "babel-loader": "8.1.0", 33 | "discord-api-types": "^0.23.1", 34 | "discord-markdown": "^2.5.0", 35 | "discord.js": "^13.1.0", 36 | "ffmpeg-static": "^4.4.0", 37 | "flatlist-react": "^1.5.0", 38 | "fosscord.js": "^13.1.1-dev", 39 | "i18next": "^20.4.0", 40 | "i18next-browser-languagedetector": "^6.1.2", 41 | "i18next-http-backend": "^1.3.0", 42 | "postcss-flexbugs-fixes": "4.2.1", 43 | "postcss-loader": "3.0.0", 44 | "postcss-normalize": "8.0.1", 45 | "postcss-preset-env": "6.7.0", 46 | "postcss-safe-parser": "5.0.2", 47 | "react": "^17.0.2", 48 | "react-dom": "^17.0.2", 49 | "react-highlight": "^0.14.0", 50 | "react-i18next": "^11.8.12", 51 | "react-particles-js": "^3.5.3", 52 | "react-redux": "^7.2.4", 53 | "react-router": "^5.2.0", 54 | "react-router-dom": "^5.2.0", 55 | "react-scripts": "4.0.3", 56 | "tsparticles": "^1.34.0", 57 | "typescript": "^4.3.5", 58 | "web-vitals": "^1.0.1", 59 | "webpack": "4.44.2", 60 | "webpack-dev-server": "3.11.1", 61 | "webpack-manifest-plugin": "2.2.0", 62 | "workbox-webpack-plugin": "5.1.4" 63 | }, 64 | "eslintConfig": { 65 | "extends": [ 66 | "react-app", 67 | "react-app/jest" 68 | ] 69 | }, 70 | "browserslist": { 71 | "production": [ 72 | ">0.2%", 73 | "not dead", 74 | "not op_mini all" 75 | ], 76 | "development": [ 77 | "last 1 chrome version", 78 | "last 1 firefox version", 79 | "last 1 safari version" 80 | ] 81 | }, 82 | "devDependencies": { 83 | "@types/lodash": "^4.14.172", 84 | "@types/react-router-dom": "^5.1.7", 85 | "@types/ua-parser-js": "^0.7.35", 86 | "css-loader": "^4.3.0", 87 | "fs-extra": "^9.1.0", 88 | "sass": "^1.32.8", 89 | "style-loader": "^1.3.0", 90 | "webpack-bundle-analyzer": "^4.4.0" 91 | } 92 | } 93 | -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacebarchat/fosscord-web-client/825286882c6e48d630bbded61b59c4cbefbb0114/public/favicon.ico -------------------------------------------------------------------------------- /public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 15 | 16 | Fosscord 17 | 18 | 19 | 20 |
21 | 22 | 23 | -------------------------------------------------------------------------------- /public/locales/af/login.json: -------------------------------------------------------------------------------- 1 | { 2 | "emailTelephone": "Email or phone number", 3 | "password": "Password", 4 | "forgotPassword": "Forgot your password?", 5 | "login": "Login", 6 | "registerNotice": "Don't have an account?", 7 | "register": "Register", 8 | "captchaRequired": "Please solve the captcha first", 9 | "captchaTitle": "Checking if you are a robot", 10 | "mfa": "Enter Auth/Backup Code", 11 | "mfaPlaceholder": "6-digit authentication code/8-digit backup code" 12 | } 13 | -------------------------------------------------------------------------------- /public/locales/af/network.json: -------------------------------------------------------------------------------- 1 | { 2 | "discover": "Discover", 3 | "explore": "Explore", 4 | "add": "Add", 5 | "search": "Search", 6 | "network": "Network", 7 | "chooseNetwork": "Choose Network", 8 | "findNetwork": "Find Networks", 9 | "findPlaceholder": "Explore communities", 10 | "addNetwork": "Add Network", 11 | "addNotice": "You can add new networks here", 12 | "setupNotice": "To setup a new network have a look at our setup guide: coming soon", 13 | "addPlaceholder": "For example https://fosscord.com" 14 | } 15 | -------------------------------------------------------------------------------- /public/locales/af/register.json: -------------------------------------------------------------------------------- 1 | { 2 | "register": "Register", 3 | "login": "Login", 4 | "email": "Email", 5 | "username": "Username", 6 | "password": "Password", 7 | "dateOfBirth": "Date of birth", 8 | "network": "network", 9 | "consent": "I agree to the terms of service of this network", 10 | "submit": "Continue", 11 | "loginNotice": "Already have an account?", 12 | "captchaRequired": "Please solve the captcha first" 13 | } 14 | -------------------------------------------------------------------------------- /public/locales/af/translation.json: -------------------------------------------------------------------------------- 1 | { 2 | "rateLimited": "Please wait {{seconds}} seconds", 3 | "offline": "You are offline, please connect to the internet", 4 | "serverOffline": "The server is not reachable, please try again after a minute", 5 | "discordCORSIssue": "It isn't possible to access Discord.com from a third party website, please download the application instead (coming soon)", 6 | "friends": "Friends", 7 | "friendsSearchPlaceholder": "Find or start a conversation", 8 | "addServer": "Add a server", 9 | "upload": "Upload", 10 | "serverName": "Server name", 11 | "addServerNotice": "If you continue, you accept the chart of the server's network.", 12 | "add": "Add", 13 | "edit": "Edit", 14 | "delete": "Delete", 15 | "guild": "a server", 16 | "this": "this", 17 | "a": "a", 18 | "home": "Home", 19 | "channel": "channel", 20 | "createCategory": "Create a category" 21 | } 22 | -------------------------------------------------------------------------------- /public/locales/ar/login.json: -------------------------------------------------------------------------------- 1 | { 2 | "emailTelephone": "البريد الإلكتروني أو رقم الهاتف", 3 | "password": "كلمة المرور", 4 | "forgotPassword": "هل نسيت كلمة المرور؟", 5 | "login": "تسجيل الدخول", 6 | "registerNotice": "ليس لديك حساب؟", 7 | "register": "تسجيل", 8 | "captchaRequired": "الرجاء حل كلمة التحقق أولا", 9 | "captchaTitle": "التحقق مما إذا كنت روبوت", 10 | "mfa": "أدخل رمز المصادقة/النسخ الاحتياطي", 11 | "mfaPlaceholder": "رمز المصادقة من 6 أرقام/8-أرقام" 12 | } 13 | -------------------------------------------------------------------------------- /public/locales/ar/network.json: -------------------------------------------------------------------------------- 1 | { 2 | "discover": "اكتشف", 3 | "explore": "استكشف", 4 | "add": "إضافة", 5 | "search": "البحث", 6 | "network": "شبكة الإتصال", 7 | "chooseNetwork": "اختر الشبكة", 8 | "findNetwork": "البحث عن الشبكات", 9 | "findPlaceholder": "استكشاف المجتمعات", 10 | "addNetwork": "إضافة شبكة", 11 | "addNotice": "يمكنك إضافة شبكات جديدة هنا", 12 | "setupNotice": "لإعداد شبكة جديدة ، ألق نظرة على دليل الإعداد الخاص بنا: قريبًا", 13 | "addPlaceholder": "على سبيل المثال https://fosscord.com" 14 | } 15 | -------------------------------------------------------------------------------- /public/locales/ar/register.json: -------------------------------------------------------------------------------- 1 | { 2 | "register": "تسجيل", 3 | "login": "تسجيل الدخول", 4 | "email": "البريد الإلكتروني", 5 | "username": "اسم المستخدم", 6 | "password": "كلمة المرور", 7 | "dateOfBirth": "تاريخ الميلاد", 8 | "network": "الشبكة", 9 | "consent": "أوافق على شروط الخدمة لهذا {{link}}", 10 | "submit": "متابعة", 11 | "loginNotice": "لديك حساب بالفعل؟", 12 | "captchaRequired": "الرجاء حل كلمة التحقق أولا" 13 | } 14 | -------------------------------------------------------------------------------- /public/locales/ar/translation.json: -------------------------------------------------------------------------------- 1 | { 2 | "rateLimited": "الرجاء الانتظار {{seconds}} ثانية", 3 | "offline": "أنت غير متصل، يرجى الاتصال بالإنترنت", 4 | "serverOffline": "لا يمكن الوصول إلى الخادم، يرجى المحاولة مرة أخرى بعد دقيقة", 5 | "discordCORSIssue": "لا يمكن الوصول إلى Discord.com من موقع طرف ثالث، الرجاء تحميل التطبيق بدلاً من ذلك (قريباً)", 6 | "friends": "Friends", 7 | "friendsSearchPlaceholder": "Find or start a conversation", 8 | "addServer": "Add a server", 9 | "upload": "Upload", 10 | "serverName": "Server name", 11 | "addServerNotice": "If you continue, you accept the chart of the server's network.", 12 | "add": "Add", 13 | "edit": "Edit", 14 | "delete": "Delete", 15 | "guild": "a server", 16 | "this": "this", 17 | "a": "a", 18 | "home": "Home", 19 | "channel": "channel", 20 | "createCategory": "Create a category" 21 | } 22 | -------------------------------------------------------------------------------- /public/locales/be/login.json: -------------------------------------------------------------------------------- 1 | { 2 | "emailTelephone": "Электронная пошта або нумар тэлефона", 3 | "password": "Пароль", 4 | "forgotPassword": "Забыліся свой пароль?", 5 | "login": "Увайсці", 6 | "registerNotice": "Не маеце ўліковага запісу?", 7 | "register": "Рэгістрацыя", 8 | "captchaRequired": "Калі ласка, спачатку вырашыце капчу", 9 | "captchaTitle": "Праверка, з'яўляецеся ці вы робатам", 10 | "mfa": "Увядзіце Аўтарызацыйны/Рэзервовы код", 11 | "mfaPlaceholder": "6-значны аўтарызацыйны код/8-значны рэзервовы код" 12 | } 13 | -------------------------------------------------------------------------------- /public/locales/be/network.json: -------------------------------------------------------------------------------- 1 | { 2 | "discover": "Адкрыйце для сябе", 3 | "explore": "Даследаваць", 4 | "add": "Дадаць", 5 | "search": "Пошук", 6 | "network": "Сетка", 7 | "chooseNetwork": "Выберыце сетку", 8 | "findNetwork": "Знайсці сеткі", 9 | "findPlaceholder": "Даследуйце суполкі", 10 | "addNetwork": "Дадаць сетку", 11 | "addNotice": "Вы можаце дадаць новыя сеткі тут", 12 | "setupNotice": "Каб наладзіць новую сетку, азнаёмцеся з нашым кіраўніцтвам па наладзе: з'явіцца ў бліжэйшы час", 13 | "addPlaceholder": "Напрыклад https://fosscord.com" 14 | } 15 | -------------------------------------------------------------------------------- /public/locales/be/register.json: -------------------------------------------------------------------------------- 1 | { 2 | "register": "Рэгістрацыя", 3 | "login": "Увайсці", 4 | "email": "Электронная пошта", 5 | "username": "Імя карыстальніка", 6 | "password": "Пароль", 7 | "dateOfBirth": "Дата нараджэння", 8 | "network": "сетка", 9 | "consent": "Я згодны з умовамі прадастаўлення паслуг гэтай сеткі", 10 | "submit": "Працягнуць", 11 | "loginNotice": "У вас ужо ёсць уліковы запіс?", 12 | "captchaRequired": "Калі ласка, спачатку вырашыце капчу" 13 | } 14 | -------------------------------------------------------------------------------- /public/locales/be/translation.json: -------------------------------------------------------------------------------- 1 | { 2 | "rateLimited": "Калі ласка, пачакайце {{seconds}} секунд", 3 | "offline": "Вы знаходзіцеся ў аўтаномным рэжыме, калі ласка, падключыцеся да iнтэрнэту", 4 | "serverOffline": "Сервер недаступны, калі ласка, паўтарыце спробу праз хвіліну", 5 | "discordCORSIssue": "Немагчыма атрымаць доступ да Discord.com са старонняга вэб-сайта, замест гэтага загрузіце прыкладанне (з'явіцца ў бліжэйшы час)", 6 | "friends": "Friends", 7 | "friendsSearchPlaceholder": "Find or start a conversation", 8 | "addServer": "Add a server", 9 | "upload": "Upload", 10 | "serverName": "Server name", 11 | "addServerNotice": "If you continue, you accept the chart of the server's network.", 12 | "add": "Add", 13 | "edit": "Edit", 14 | "delete": "Delete", 15 | "guild": "a server", 16 | "this": "this", 17 | "a": "a", 18 | "home": "Home", 19 | "channel": "channel", 20 | "createCategory": "Create a category" 21 | } 22 | -------------------------------------------------------------------------------- /public/locales/bg/login.json: -------------------------------------------------------------------------------- 1 | { 2 | "emailTelephone": "Имейл или телефонен номер", 3 | "password": "Парола", 4 | "forgotPassword": "Забравена парола?", 5 | "login": "Вписване", 6 | "registerNotice": "Трябва ти акаунт?", 7 | "register": "Регистриране", 8 | "captchaRequired": "Моля, първо решете captcha задачата", 9 | "captchaTitle": "Проверка за бот", 10 | "mfa": "Въведете код за Yдостоверяване/Aрхивиране", 11 | "mfaPlaceholder": "6-цифрен код за удостоверяване/8-цифрен резервен код" 12 | } 13 | -------------------------------------------------------------------------------- /public/locales/bg/network.json: -------------------------------------------------------------------------------- 1 | { 2 | "discover": "Открийте сами", 3 | "explore": "Разгледайте", 4 | "add": "Добавяне", 5 | "search": "Търсене", 6 | "network": "Мрежа", 7 | "chooseNetwork": "Изберете Мрежа", 8 | "findNetwork": "Намерете Mрежи", 9 | "findPlaceholder": "Намерете общности", 10 | "addNetwork": "Добавяне на мрежа", 11 | "addNotice": "Тук можете да добавите нови мрежи", 12 | "setupNotice": "За да настроите нова мрежа, вижте нашето ръководство за настройка: Очаквайте скоро", 13 | "addPlaceholder": "Например: https://fosscord.com" 14 | } 15 | -------------------------------------------------------------------------------- /public/locales/bg/register.json: -------------------------------------------------------------------------------- 1 | { 2 | "register": "Регистриране", 3 | "login": "Вписване", 4 | "email": "Електронна поща", 5 | "username": "Потребителско име", 6 | "password": "Парола", 7 | "dateOfBirth": "Дата на раждане", 8 | "network": "мрежа", 9 | "consent": "Съгласен съм с условията на услугата за тази мрежа", 10 | "submit": "Продължете", 11 | "loginNotice": "Вече имате акаунт?", 12 | "captchaRequired": "Моля, първо решете captcha задачата" 13 | } 14 | -------------------------------------------------------------------------------- /public/locales/bg/translation.json: -------------------------------------------------------------------------------- 1 | { 2 | "rateLimited": "Моля, изчакайте {{seconds}} секунди", 3 | "offline": "Офлайн сте, моля, свържете се с интернет", 4 | "serverOffline": "Сървърът не е наличен, моля, опитайте отново след около минута", 5 | "discordCORSIssue": "Достъпът от трета страна до Discord.com е неосъществен, вместо това изтеглете приложението (очаквайте скоро)", 6 | "friends": "Friends", 7 | "friendsSearchPlaceholder": "Find or start a conversation", 8 | "addServer": "Add a server", 9 | "upload": "Upload", 10 | "serverName": "Server name", 11 | "addServerNotice": "If you continue, you accept the chart of the server's network.", 12 | "add": "Add", 13 | "edit": "Edit", 14 | "delete": "Delete", 15 | "guild": "a server", 16 | "this": "this", 17 | "a": "a", 18 | "home": "Home", 19 | "channel": "channel", 20 | "createCategory": "Create a category" 21 | } 22 | -------------------------------------------------------------------------------- /public/locales/ca/login.json: -------------------------------------------------------------------------------- 1 | { 2 | "emailTelephone": "Email or phone number", 3 | "password": "Password", 4 | "forgotPassword": "Forgot your password?", 5 | "login": "Login", 6 | "registerNotice": "Don't have an account?", 7 | "register": "Register", 8 | "captchaRequired": "Please solve the captcha first", 9 | "captchaTitle": "Checking if you are a robot", 10 | "mfa": "Enter Auth/Backup Code", 11 | "mfaPlaceholder": "6-digit authentication code/8-digit backup code" 12 | } 13 | -------------------------------------------------------------------------------- /public/locales/ca/network.json: -------------------------------------------------------------------------------- 1 | { 2 | "discover": "Discover", 3 | "explore": "Explore", 4 | "add": "Add", 5 | "search": "Search", 6 | "network": "Network", 7 | "chooseNetwork": "Choose Network", 8 | "findNetwork": "Find Networks", 9 | "findPlaceholder": "Explore communities", 10 | "addNetwork": "Add Network", 11 | "addNotice": "You can add new networks here", 12 | "setupNotice": "To setup a new network have a look at our setup guide: coming soon", 13 | "addPlaceholder": "For example https://fosscord.com" 14 | } 15 | -------------------------------------------------------------------------------- /public/locales/ca/register.json: -------------------------------------------------------------------------------- 1 | { 2 | "register": "Register", 3 | "login": "Login", 4 | "email": "Email", 5 | "username": "Username", 6 | "password": "Password", 7 | "dateOfBirth": "Date of birth", 8 | "network": "network", 9 | "consent": "I agree to the terms of service of this network", 10 | "submit": "Continue", 11 | "loginNotice": "Already have an account?", 12 | "captchaRequired": "Please solve the captcha first" 13 | } 14 | -------------------------------------------------------------------------------- /public/locales/ca/translation.json: -------------------------------------------------------------------------------- 1 | { 2 | "rateLimited": "Please wait {{seconds}} seconds", 3 | "offline": "You are offline, please connect to the internet", 4 | "serverOffline": "The server is not reachable, please try again after a minute", 5 | "discordCORSIssue": "It isn't possible to access Discord.com from a third party website, please download the application instead (coming soon)", 6 | "friends": "Friends", 7 | "friendsSearchPlaceholder": "Find or start a conversation", 8 | "addServer": "Add a server", 9 | "upload": "Upload", 10 | "serverName": "Server name", 11 | "addServerNotice": "If you continue, you accept the chart of the server's network.", 12 | "add": "Add", 13 | "edit": "Edit", 14 | "delete": "Delete", 15 | "guild": "a server", 16 | "this": "this", 17 | "a": "a", 18 | "home": "Home", 19 | "channel": "channel", 20 | "createCategory": "Create a category" 21 | } 22 | -------------------------------------------------------------------------------- /public/locales/cs/login.json: -------------------------------------------------------------------------------- 1 | { 2 | "emailTelephone": "E-mail nebo telefonní číslo", 3 | "password": "Heslo", 4 | "forgotPassword": "Zapomněli jste heslo?", 5 | "login": "Přihlásit se", 6 | "registerNotice": "Nemáte účet?", 7 | "register": "Registrovat se", 8 | "captchaRequired": "Nejdříve vyřešte captcha", 9 | "captchaTitle": "Kontrolujte, zda jste robot", 10 | "mfa": "Zadejte kód autentizace/zálohy", 11 | "mfaPlaceholder": "6místný ověřovací kód/8místný záložní kód" 12 | } 13 | -------------------------------------------------------------------------------- /public/locales/cs/network.json: -------------------------------------------------------------------------------- 1 | { 2 | "discover": "Objevte", 3 | "explore": "Prozkoumat", 4 | "add": "Přidat", 5 | "search": "Hledat", 6 | "network": "Network", 7 | "chooseNetwork": "Vybrat síť", 8 | "findNetwork": "Najít sítě", 9 | "findPlaceholder": "Prozkoumat komunity", 10 | "addNetwork": "Přidat síť", 11 | "addNotice": "Zde můžete přidat nové instance", 12 | "setupNotice": "Pro nastavení nové instance se podívejte na náš průvodce nastavením: brzy přijde", 13 | "addPlaceholder": "Například https://fosscord.com" 14 | } 15 | -------------------------------------------------------------------------------- /public/locales/cs/register.json: -------------------------------------------------------------------------------- 1 | { 2 | "register": "Registrovat se", 3 | "login": "Přihlásit se", 4 | "email": "E-mailová adresa", 5 | "username": "Uživatelské jméno", 6 | "password": "Heslo", 7 | "dateOfBirth": "Datum narození", 8 | "network": "síť", 9 | "consent": "Souhlasím s podmínkami služby {{link}}", 10 | "submit": "Pokračovat", 11 | "loginNotice": "Již máte účet?", 12 | "captchaRequired": "Nejdříve vyřešte captcha" 13 | } 14 | -------------------------------------------------------------------------------- /public/locales/cs/translation.json: -------------------------------------------------------------------------------- 1 | { 2 | "rateLimited": "Počkejte prosím {{seconds}} sekund", 3 | "offline": "Jste offline, připojte se k internetu", 4 | "serverOffline": "Server není dostupný, zkuste to prosím znovu za minutu", 5 | "discordCORSIssue": "Není možné přistupovat na Discord.com z webové stránky třetí strany, stáhněte si aplikaci místo toho (již brzy)", 6 | "friends": "Friends", 7 | "friendsSearchPlaceholder": "Find or start a conversation", 8 | "addServer": "Add a server", 9 | "upload": "Upload", 10 | "serverName": "Server name", 11 | "addServerNotice": "If you continue, you accept the chart of the server's network.", 12 | "add": "Add", 13 | "edit": "Edit", 14 | "delete": "Delete", 15 | "guild": "a server", 16 | "this": "this", 17 | "a": "a", 18 | "home": "Home", 19 | "channel": "channel", 20 | "createCategory": "Create a category" 21 | } 22 | -------------------------------------------------------------------------------- /public/locales/da/login.json: -------------------------------------------------------------------------------- 1 | { 2 | "emailTelephone": "E-mail eller telefonnummer", 3 | "password": "Adgangskode", 4 | "forgotPassword": "Glemt din adgangskode?", 5 | "login": "Login", 6 | "registerNotice": "Har du ikke en konto?", 7 | "register": "Registrer", 8 | "captchaRequired": "Løs venligst captcha først", 9 | "captchaTitle": "Kontrollerer om du er en robot", 10 | "mfa": "Indtast Auth/Backup Kode", 11 | "mfaPlaceholder": "6-cifret autentificeringskode / 8-cifret backup kode" 12 | } 13 | -------------------------------------------------------------------------------- /public/locales/da/network.json: -------------------------------------------------------------------------------- 1 | { 2 | "discover": "Opdag", 3 | "explore": "Udforsk", 4 | "add": "Tilføj", 5 | "search": "Søg", 6 | "network": "Network", 7 | "chooseNetwork": "Vælg Netværk", 8 | "findNetwork": "Find Netværk", 9 | "findPlaceholder": "Udforsk fællesskaber", 10 | "addNetwork": "Tilføj Netværk", 11 | "addNotice": "Du kan tilføje nye instanser her", 12 | "setupNotice": "For at opsætte en ny instans skal du kigge på vores opsætningsvejledning: Kommer snart", 13 | "addPlaceholder": "For eksempel https://fosscord.com" 14 | } 15 | -------------------------------------------------------------------------------- /public/locales/da/register.json: -------------------------------------------------------------------------------- 1 | { 2 | "register": "Registrer", 3 | "login": "Login", 4 | "email": "E-mail", 5 | "username": "Brugernavn", 6 | "password": "Adgangskode", 7 | "dateOfBirth": "Fødselsdato", 8 | "network": "netværk", 9 | "consent": "Jeg accepterer vilkårene for denne {{link}}", 10 | "submit": "Fortsæt", 11 | "loginNotice": "Har du allerede en konto?", 12 | "captchaRequired": "Løs venligst captcha først" 13 | } 14 | -------------------------------------------------------------------------------- /public/locales/da/translation.json: -------------------------------------------------------------------------------- 1 | { 2 | "rateLimited": "Vent venligst {{seconds}} sekunder", 3 | "offline": "Du er offline, forbind venligst til internettet", 4 | "serverOffline": "Serveren er ikke tilgængelig, prøv igen efter et minut", 5 | "discordCORSIssue": "Det er ikke muligt at få adgang til Discord.com fra en tredjeparts hjemmeside, venligst downloade programmet i stedet (kommer snart)", 6 | "friends": "Friends", 7 | "friendsSearchPlaceholder": "Find or start a conversation", 8 | "addServer": "Add a server", 9 | "upload": "Upload", 10 | "serverName": "Server name", 11 | "addServerNotice": "If you continue, you accept the chart of the server's network.", 12 | "add": "Add", 13 | "edit": "Edit", 14 | "delete": "Delete", 15 | "guild": "a server", 16 | "this": "this", 17 | "a": "a", 18 | "home": "Home", 19 | "channel": "channel", 20 | "createCategory": "Create a category" 21 | } 22 | -------------------------------------------------------------------------------- /public/locales/de/login.json: -------------------------------------------------------------------------------- 1 | { 2 | "emailTelephone": "E-Mail oder Telefonnummer", 3 | "password": "Passwort", 4 | "forgotPassword": "Passwort vergessen?", 5 | "login": "Anmelden", 6 | "registerNotice": "Du hast noch kein Konto?", 7 | "register": "Registrieren", 8 | "captchaRequired": "Bitte löse zuerst das Captcha", 9 | "captchaTitle": "Überprüfe, ob du ein Roboter bist", 10 | "mfa": "Zwei Faktor code/Backup-Code eingeben", 11 | "mfaPlaceholder": "6-stelliger Authentifizierungscode/8-stelliger Backupcode" 12 | } 13 | -------------------------------------------------------------------------------- /public/locales/de/network.json: -------------------------------------------------------------------------------- 1 | { 2 | "discover": "Entdecken", 3 | "explore": "Entdecken", 4 | "add": "Hinzufügen", 5 | "search": "Suchen", 6 | "network": "Netzwerk", 7 | "chooseNetwork": "Netzwerk auswählen", 8 | "findNetwork": "Netzwerke finden", 9 | "findPlaceholder": "Communities entdecken", 10 | "addNetwork": "Netzwerk hinzufügen", 11 | "addNotice": "Neues Netzwerk hinzufügen", 12 | "setupNotice": "Um ein neues Netzwerk einzurichten, folge der Setup-Anleitung: Kommt bald", 13 | "addPlaceholder": "Zum Beispiel https://fosscord.com" 14 | } 15 | -------------------------------------------------------------------------------- /public/locales/de/register.json: -------------------------------------------------------------------------------- 1 | { 2 | "register": "Registrieren", 3 | "login": "Anmelden", 4 | "email": "E-Mail", 5 | "username": "Benutzername", 6 | "password": "Passwort", 7 | "dateOfBirth": "Geburtsdatum", 8 | "network": "netzwerk", 9 | "consent": "Ich stimme den Nutzungsbedingungen dieses Netzwerks zu", 10 | "submit": "Weiter", 11 | "loginNotice": "Hast du schon ein Konto?", 12 | "captchaRequired": "Bitte löse zuerst das Captcha" 13 | } 14 | -------------------------------------------------------------------------------- /public/locales/de/translation.json: -------------------------------------------------------------------------------- 1 | { 2 | "rateLimited": "Bitte warte {{seconds}} Sekunden", 3 | "offline": "Du bist offline, bitte verbinde dich mit dem Internet", 4 | "serverOffline": "Der Server ist nicht erreichbar, bitte versuche es nach ein paar Minuten erneut", 5 | "discordCORSIssue": "Es ist nicht möglich auf Discord.com von einer Drittanbieter-Website zuzugreifen. Bitte lade stattdessen die Anwendung herunter (bald verfügbar)", 6 | "friends": "Friends", 7 | "friendsSearchPlaceholder": "Find or start a conversation", 8 | "addServer": "Add a server", 9 | "upload": "Upload", 10 | "serverName": "Server name", 11 | "addServerNotice": "If you continue, you accept the chart of the server's network.", 12 | "add": "Add", 13 | "edit": "Edit", 14 | "delete": "Delete", 15 | "guild": "a server", 16 | "this": "this", 17 | "a": "a", 18 | "home": "Home", 19 | "channel": "channel", 20 | "createCategory": "Create a category" 21 | } 22 | -------------------------------------------------------------------------------- /public/locales/el/login.json: -------------------------------------------------------------------------------- 1 | { 2 | "emailTelephone": "Email ή αριθμός τηλεφώνου", 3 | "password": "Κωδικός", 4 | "forgotPassword": "Ξεχάσατε τον κωδικό σας?", 5 | "login": "Είσοδος", 6 | "registerNotice": "Δεν έχετε λογαριασμό?", 7 | "register": "Εγγραφή", 8 | "captchaRequired": "Παρακαλώ λύστε πρώτα το captcha", 9 | "captchaTitle": "Έλεγχος αν είστε ρομπότ", 10 | "mfa": "Εισάγετε Τον Κωδικό Ακύρωσης", 11 | "mfaPlaceholder": "6-ψήφιος κωδικός ταυτοποίησης/8-ψήφιος εφεδρικός κωδικός" 12 | } 13 | -------------------------------------------------------------------------------- /public/locales/el/network.json: -------------------------------------------------------------------------------- 1 | { 2 | "discover": "Ανακαλύψτε", 3 | "explore": "Εξερεύνηση", 4 | "add": "Προσθήκη", 5 | "search": "Αναζήτηση", 6 | "network": "Δίκτυο", 7 | "chooseNetwork": "Επιλογή Δικτύου", 8 | "findNetwork": "Εύρεση Δικτύων", 9 | "findPlaceholder": "Εξερευνήστε κοινότητες", 10 | "addNetwork": "Προσθήκη Δικτύου", 11 | "addNotice": "Μπορείτε να προσθέσετε νέες παρουσίες εδώ", 12 | "setupNotice": "Για να ρυθμίσετε μια νέα περίπτωση ρίξτε μια ματιά στον οδηγό εγκατάστασης μας: έρχονται σύντομα", 13 | "addPlaceholder": "Για παράδειγμα https://fosscord.com" 14 | } 15 | -------------------------------------------------------------------------------- /public/locales/el/register.json: -------------------------------------------------------------------------------- 1 | { 2 | "register": "Εγγραφή", 3 | "login": "Είσοδος", 4 | "email": "E-mail", 5 | "username": "Όνομα Χρήστη", 6 | "password": "Κωδικός", 7 | "dateOfBirth": "Ημερομηνία γέννησης", 8 | "network": "δίκτυο", 9 | "consent": "Συμφωνώ με τους όρους χρήσης αυτού του {{link}}", 10 | "submit": "Συνέχεια", 11 | "loginNotice": "Έχετε ήδη λογαριασμό?", 12 | "captchaRequired": "Παρακαλώ λύστε πρώτα το captcha" 13 | } 14 | -------------------------------------------------------------------------------- /public/locales/el/translation.json: -------------------------------------------------------------------------------- 1 | { 2 | "rateLimited": "Παρακαλώ περιμένετε {{seconds}} δευτερόλεπτα", 3 | "offline": "Είστε εκτός σύνδεσης, παρακαλώ συνδεθείτε στο διαδίκτυο", 4 | "serverOffline": "Ο διακομιστής δεν είναι προσβάσιμος, δοκιμάστε ξανά μετά από ένα λεπτό", 5 | "discordCORSIssue": "Δεν είναι δυνατή η πρόσβαση στο Discord.com από μια ιστοσελίδα τρίτων, παρακαλώ κατεβάστε την εφαρμογή αντί (ερχόμενος σύντομα)", 6 | "friends": "Friends", 7 | "friendsSearchPlaceholder": "Find or start a conversation", 8 | "addServer": "Προσθήκη διακομιστή", 9 | "upload": "Ανέβασμα", 10 | "serverName": "Όνομα διακομιστή", 11 | "addServerNotice": "Αν συνεχίσετε, αποδέχεστε το γράφημα του δικτύου του διακομιστή.", 12 | "add": "Προσθήκη", 13 | "edit": "Edit", 14 | "delete": "Delete", 15 | "guild": "a server", 16 | "this": "this", 17 | "a": "a", 18 | "home": "Home", 19 | "channel": "channel", 20 | "createCategory": "Create a category" 21 | } 22 | -------------------------------------------------------------------------------- /public/locales/en/login.json: -------------------------------------------------------------------------------- 1 | { 2 | "emailTelephone": "Email or phone number", 3 | "password": "Password", 4 | "forgotPassword": "Forgot your password?", 5 | "login": "Login", 6 | "registerNotice": "Don't have an account?", 7 | "register": "Register", 8 | "captchaRequired": "Please solve the captcha first", 9 | "captchaTitle": "Checking if you are a robot", 10 | "mfa": "Enter Auth/Backup Code", 11 | "mfaPlaceholder": "6-digit authentication code/8-digit backup code" 12 | } 13 | -------------------------------------------------------------------------------- /public/locales/en/network.json: -------------------------------------------------------------------------------- 1 | { 2 | "discover": "Discover", 3 | "explore": "Explore", 4 | "add": "Add", 5 | "search": "Search", 6 | "network": "Network", 7 | "chooseNetwork": "Choose Network", 8 | "findNetwork": "Find Networks", 9 | "findPlaceholder": "Explore communities", 10 | "addNetwork": "Add Network", 11 | "addNotice": "You can add new networks here", 12 | "setupNotice": "To setup a new network have a look at our setup guide: coming soon", 13 | "addPlaceholder": "For example https://fosscord.com" 14 | } 15 | -------------------------------------------------------------------------------- /public/locales/en/register.json: -------------------------------------------------------------------------------- 1 | { 2 | "register": "Register", 3 | "login": "Login", 4 | "email": "Email", 5 | "username": "Username", 6 | "password": "Password", 7 | "dateOfBirth": "Date of birth", 8 | "network": "network", 9 | "consent": "I agree to the terms of service of this network", 10 | "submit": "Continue", 11 | "loginNotice": "Already have an account?", 12 | "captchaRequired": "Please solve the captcha first" 13 | } 14 | -------------------------------------------------------------------------------- /public/locales/en/translation.json: -------------------------------------------------------------------------------- 1 | { 2 | "rateLimited": "Please wait {{seconds}} seconds", 3 | "offline": "You are offline, please connect to the internet", 4 | "serverOffline": "The server is not reachable, please try again after a minute", 5 | "discordCORSIssue": "It isn't possible to access Discord.com from a third party website, please download the application instead (coming soon)", 6 | "friends": "Friends", 7 | "friendsSearchPlaceholder": "Find or start a conversation", 8 | "addServer": "Add a server", 9 | "upload": "Upload", 10 | "serverName": "Server name", 11 | "addServerNotice": "If you continue, you accept the chart of the server's network.", 12 | "add": "Add", 13 | "edit": "Edit", 14 | "cancel": "Cancel", 15 | "delete": "Delete", 16 | "guild": "a server", 17 | "guildName": "Server name", 18 | "this": "this", 19 | "a": "a", 20 | "home": "Home", 21 | "channel": "channel", 22 | "textChannel": "Text channel", 23 | "textChannelDesc": "Post images, GIFs, stickers, opinions, and puns", 24 | "voiceChannel": "Voice channel", 25 | "voiceChannelDesc": "Hang out with voice, video, and screen sharing", 26 | "createChannel": "Create a Channel", 27 | "createCategory": "Create a Category", 28 | "sendMessage": "Message", 29 | "emptyMessages": "It's appear we have found nothing here...", 30 | "addReaction": "Add a reaction" 31 | } 32 | -------------------------------------------------------------------------------- /public/locales/eo/login.json: -------------------------------------------------------------------------------- 1 | { 2 | "emailTelephone": "Retpoŝto aŭ telefona numbero", 3 | "password": "Pasvorto", 4 | "forgotPassword": "Ĉu forgesis vian pasvorton?", 5 | "login": "Ensaluti", 6 | "registerNotice": "Ne havas konton?", 7 | "register": "Registriĝo", 8 | "captchaRequired": "Bonvolu solvi la kaptĉon", 9 | "captchaTitle": "Kontrolas se vi estas roboto", 10 | "mfa": "Eniri Aŭte-a/Sekurkopia kodo", 11 | "mfaPlaceholder": "Ses-cifera aŭtentikiga kodo/Okcifera Sekurkopia kodo" 12 | } 13 | -------------------------------------------------------------------------------- /public/locales/eo/network.json: -------------------------------------------------------------------------------- 1 | { 2 | "discover": "Esplori", 3 | "explore": "Esplori", 4 | "add": "Aldoni", 5 | "search": "Serĉi", 6 | "network": "Reto", 7 | "chooseNetwork": "Elekti Reton", 8 | "findNetwork": "Trovi Retojn", 9 | "findPlaceholder": "Esplori kominutojn", 10 | "addNetwork": "Aldoni Reto", 11 | "addNotice": "Vi povas aldoni novaj retoj tiu", 12 | "setupNotice": "To setup a new network have a look at our setup guide: coming soon", 13 | "addPlaceholder": "For example https://fosscord.com" 14 | } 15 | -------------------------------------------------------------------------------- /public/locales/eo/register.json: -------------------------------------------------------------------------------- 1 | { 2 | "register": "Registriĝo", 3 | "login": "Ensaluti", 4 | "email": "Retpoŝtadreso", 5 | "username": "Uzantnomo", 6 | "password": "Pasvorto", 7 | "dateOfBirth": "Dato de Naskiĝo", 8 | "network": "reto", 9 | "consent": "Mi akceptas regulojn de servadon de ĉi tiu reto", 10 | "submit": "Daŭrigi", 11 | "loginNotice": "Jam havas konton?", 12 | "captchaRequired": "Bonvolu solvi la kaptĉon" 13 | } 14 | -------------------------------------------------------------------------------- /public/locales/eo/translation.json: -------------------------------------------------------------------------------- 1 | { 2 | "rateLimited": "Bonvolu atendi {{seconds}} sekundoj", 3 | "offline": "Vi estas malenreta, bonvolu konekti al la interreto", 4 | "serverOffline": "The server is not reachable, please try again after a minute", 5 | "discordCORSIssue": "It isn't possible to access Discord.com from a third party website, please download the application instead (coming soon)", 6 | "friends": "Friends", 7 | "friendsSearchPlaceholder": "Find or start a conversation", 8 | "addServer": "Add a server", 9 | "upload": "Upload", 10 | "serverName": "Server name", 11 | "addServerNotice": "If you continue, you accept the chart of the server's network.", 12 | "add": "Add", 13 | "edit": "Edit", 14 | "delete": "Delete", 15 | "guild": "a server", 16 | "this": "this", 17 | "a": "a", 18 | "home": "Home", 19 | "channel": "channel", 20 | "createCategory": "Create a category" 21 | } 22 | -------------------------------------------------------------------------------- /public/locales/es/login.json: -------------------------------------------------------------------------------- 1 | { 2 | "emailTelephone": "Email o número de teléfono", 3 | "password": "Contraseña", 4 | "forgotPassword": "¿Has olvidado la contraseña?", 5 | "login": "Iniciar sesión", 6 | "registerNotice": "¿No tienes una cuenta?", 7 | "register": "Registrarse", 8 | "captchaRequired": "Por favor, resuelve el captcha primero", 9 | "captchaTitle": "Comprobando si eres robot", 10 | "mfa": "Introduzca el código de Aut/Copia de Seguridad", 11 | "mfaPlaceholder": "Código de seguridad de 6 dígitos / 8 dígitos" 12 | } 13 | -------------------------------------------------------------------------------- /public/locales/es/network.json: -------------------------------------------------------------------------------- 1 | { 2 | "discover": "Descubrir", 3 | "explore": "Explorar", 4 | "add": "Agrega", 5 | "search": "Buscar", 6 | "network": "Rede", 7 | "chooseNetwork": "Elegir rede", 8 | "findNetwork": "Encontrar redes", 9 | "findPlaceholder": "Explorar redes", 10 | "addNetwork": "Agregar rede", 11 | "addNotice": "Puedes agregar nuevas redes aquí", 12 | "setupNotice": "Para configurar una nueva rede eche un vistazo a nuestra guía de configuración: próximamente", 13 | "addPlaceholder": "Por ejemplo https://fosscord.com" 14 | } 15 | -------------------------------------------------------------------------------- /public/locales/es/register.json: -------------------------------------------------------------------------------- 1 | { 2 | "register": "Registrarse", 3 | "login": "Iniciar sesión", 4 | "email": "E-mail", 5 | "username": "Nombre de usuario", 6 | "password": "Contraseña", 7 | "dateOfBirth": "Nacido el", 8 | "network": "rede", 9 | "consent": "Estoy de acuerdo con los términos del servicio de este {{link}}", 10 | "submit": "Seguir", 11 | "loginNotice": "¿Ya tienes una cuenta?", 12 | "captchaRequired": "Por favor, resuelve el captcha primero" 13 | } 14 | -------------------------------------------------------------------------------- /public/locales/es/translation.json: -------------------------------------------------------------------------------- 1 | { 2 | "rateLimited": "Por favor, espera {{seconds}} segundos", 3 | "offline": "Está desconectado, por favor conéctese a internet", 4 | "serverOffline": "El servidor no está disponible, por favor inténtalo de nuevo después de un minuto", 5 | "discordCORSIssue": "No es posible acceder a Discord.com desde un sitio web de terceros, por favor descargue la aplicación en su lugar (próximamente)", 6 | "friends": "Friends", 7 | "friendsSearchPlaceholder": "Find or start a conversation", 8 | "addServer": "Add a server", 9 | "upload": "Upload", 10 | "serverName": "Server name", 11 | "addServerNotice": "If you continue, you accept the chart of the server's network.", 12 | "add": "Add", 13 | "edit": "Edit", 14 | "delete": "Delete", 15 | "guild": "a server", 16 | "this": "this", 17 | "a": "a", 18 | "home": "Home", 19 | "channel": "channel", 20 | "createCategory": "Create a category" 21 | } 22 | -------------------------------------------------------------------------------- /public/locales/fi/login.json: -------------------------------------------------------------------------------- 1 | { 2 | "emailTelephone": "Sähköposti tai puhelinnumero", 3 | "password": "Salasana", 4 | "forgotPassword": "Unohditko salasanasi?", 5 | "login": "Kirjaudu", 6 | "registerNotice": "Eikö sinulla ole tiliä?", 7 | "register": "Rekisteröidy", 8 | "captchaRequired": "Ratkaise captcha ensin", 9 | "captchaTitle": "Tarkistetaan, jos olet robotti", 10 | "mfa": "Syötä Todennus/Varmuuskopio Koodi", 11 | "mfaPlaceholder": "6-numeroinen tunnistuskoodi / 8-numeroinen varmuuskopio koodi" 12 | } 13 | -------------------------------------------------------------------------------- /public/locales/fi/network.json: -------------------------------------------------------------------------------- 1 | { 2 | "discover": "Löydä", 3 | "explore": "Tutki", 4 | "add": "Lisää", 5 | "search": "Etsi", 6 | "network": "Network", 7 | "chooseNetwork": "Valitse Verkko", 8 | "findNetwork": "Etsi Verkkoja", 9 | "findPlaceholder": "Tutki yhteisöjä", 10 | "addNetwork": "Lisää Verkko", 11 | "addNotice": "Voit lisätä uusia instansseja tähän", 12 | "setupNotice": "Ottaaksesi käyttöön uuden instanssin katsomaan meidän asennusohjettamme: tulossa pian", 13 | "addPlaceholder": "Esimerkiksi https://fosscord.com" 14 | } 15 | -------------------------------------------------------------------------------- /public/locales/fi/register.json: -------------------------------------------------------------------------------- 1 | { 2 | "register": "Rekisteröidy", 3 | "login": "Kirjaudu", 4 | "email": "Sähköposti", 5 | "username": "Käyttäjätunnus", 6 | "password": "Salasana", 7 | "dateOfBirth": "Syntymäaika ja -aika", 8 | "network": "verkko", 9 | "consent": "Hyväksyn tämän {{link}} palvelun ehdot", 10 | "submit": "Jatka", 11 | "loginNotice": "Onko sinulla jo tili?", 12 | "captchaRequired": "Ratkaise captcha ensin" 13 | } 14 | -------------------------------------------------------------------------------- /public/locales/fi/translation.json: -------------------------------------------------------------------------------- 1 | { 2 | "rateLimited": "Odota {{seconds}} sekuntia", 3 | "offline": "Olet offline-tilassa, ole hyvä ja yhdistä internetiin", 4 | "serverOffline": "Palvelin ei ole käytettävissä, yritä uudelleen minuutin kuluttua", 5 | "discordCORSIssue": "Ei ole mahdollista käyttää Discord.comia kolmannen osapuolen sivustosta, lataa sovellus sen sijaan (tulossa pian)", 6 | "friends": "Friends", 7 | "friendsSearchPlaceholder": "Find or start a conversation", 8 | "addServer": "Add a server", 9 | "upload": "Upload", 10 | "serverName": "Server name", 11 | "addServerNotice": "If you continue, you accept the chart of the server's network.", 12 | "add": "Add", 13 | "edit": "Edit", 14 | "delete": "Delete", 15 | "guild": "a server", 16 | "this": "this", 17 | "a": "a", 18 | "home": "Home", 19 | "channel": "channel", 20 | "createCategory": "Create a category" 21 | } 22 | -------------------------------------------------------------------------------- /public/locales/fr/login.json: -------------------------------------------------------------------------------- 1 | { 2 | "emailTelephone": "E-mail ou numéro de téléphone", 3 | "password": "Mot de passe", 4 | "forgotPassword": "Mot de passe oublié ?", 5 | "login": "Se connecter", 6 | "registerNotice": "Vous n'avez pas de compte ?", 7 | "register": "S’inscrire", 8 | "captchaRequired": "Veuillez d'abord résoudre le captcha", 9 | "captchaTitle": "Vérification si vous êtes un robot", 10 | "mfa": "Entrez le code d'authentification/de sauvegarde", 11 | "mfaPlaceholder": "Code d'authentification à 6 chiffres/code de sauvegarde à 8 chiffres" 12 | } 13 | -------------------------------------------------------------------------------- /public/locales/fr/network.json: -------------------------------------------------------------------------------- 1 | { 2 | "discover": "Découvrir", 3 | "explore": "Explorer", 4 | "add": "Ajouter", 5 | "search": "Chercher", 6 | "network": "Réseau", 7 | "chooseNetwork": "Choisir un réseau", 8 | "findNetwork": "Trouver des réseaux", 9 | "findPlaceholder": "Explorer les communautés", 10 | "addNetwork": "Ajouter un réseau", 11 | "addNotice": "Vous pouvez ajouter de nouveaux réseaux ici", 12 | "setupNotice": "Pour configurer un nouveau réseau, jetez un œil à notre guide de configuration : à venir bientôt", 13 | "addPlaceholder": "Par exemple https://fosscord.com" 14 | } 15 | -------------------------------------------------------------------------------- /public/locales/fr/register.json: -------------------------------------------------------------------------------- 1 | { 2 | "register": "S’inscrire", 3 | "login": "Se connecter", 4 | "email": "E-Mail", 5 | "username": "Nom d'utilisateur", 6 | "password": "Mot de passe", 7 | "dateOfBirth": "Date de naissance", 8 | "network": "réseau", 9 | "consent": "J'accepte les conditions d'utilisation de ce réseau {{link}}", 10 | "submit": "Continuer", 11 | "loginNotice": "Vous avez déjà un compte ?", 12 | "captchaRequired": "Veuillez d'abord résoudre le captcha" 13 | } 14 | -------------------------------------------------------------------------------- /public/locales/fr/translation.json: -------------------------------------------------------------------------------- 1 | { 2 | "rateLimited": "Veuillez patienter {{seconds}} secondes", 3 | "offline": "Vous êtes hors ligne, veuillez vous connecter à internet", 4 | "serverOffline": "Le serveur n'est pas joignable, veuillez réessayer après une minute", 5 | "discordCORSIssue": "Il n'est pas possible d'accéder à Discord.com à partir d'un site Web tiers, veuillez télécharger l'application (à venir)", 6 | "friends": "Amis", 7 | "friendsSearchPlaceholder": "Chercher ou commencer une conversation", 8 | "addServer": "Ajouter un serveur", 9 | "upload": "Envoyer", 10 | "serverName": "Nom du serveur", 11 | "addServerNotice": "Si vous continuez, vous acceptez le charte du réseau du serveur.", 12 | "add": "Ajouter", 13 | "edit": "Éditer", 14 | "cancel": "Annuler", 15 | "delete": "Supprimer", 16 | "guild": "un serveur", 17 | "guildName": "Nom du serveur", 18 | "this": "ce", 19 | "a": "un", 20 | "home": "Accueil", 21 | "channel": "salon", 22 | "textChannel": "Salon textuel", 23 | "textChannelDesc": "Postez des images, des GIFs, des autocollants, des opinions et des jeux de mots", 24 | "voiceChannel": "Salon vocal", 25 | "voiceChannelDesc": "Partage de la voix, de la vidéo et de l'écran", 26 | "createCategory": "Créer une catégorie", 27 | "createChannel": "Créer un salon", 28 | "sendMessage": "Message" 29 | } 30 | -------------------------------------------------------------------------------- /public/locales/he/login.json: -------------------------------------------------------------------------------- 1 | { 2 | "emailTelephone": "Email or phone number", 3 | "password": "Password", 4 | "forgotPassword": "Forgot your password?", 5 | "login": "Login", 6 | "registerNotice": "Don't have an account?", 7 | "register": "Register", 8 | "captchaRequired": "Please solve the captcha first", 9 | "captchaTitle": "Checking if you are a robot", 10 | "mfa": "Enter Auth/Backup Code", 11 | "mfaPlaceholder": "6-digit authentication code/8-digit backup code" 12 | } 13 | -------------------------------------------------------------------------------- /public/locales/he/network.json: -------------------------------------------------------------------------------- 1 | { 2 | "discover": "Discover", 3 | "explore": "Explore", 4 | "add": "Add", 5 | "search": "Search", 6 | "network": "Network", 7 | "chooseNetwork": "Choose Network", 8 | "findNetwork": "Find Networks", 9 | "findPlaceholder": "Explore communities", 10 | "addNetwork": "Add Network", 11 | "addNotice": "You can add new networks here", 12 | "setupNotice": "To setup a new network have a look at our setup guide: coming soon", 13 | "addPlaceholder": "For example https://fosscord.com" 14 | } 15 | -------------------------------------------------------------------------------- /public/locales/he/register.json: -------------------------------------------------------------------------------- 1 | { 2 | "register": "Register", 3 | "login": "Login", 4 | "email": "Email", 5 | "username": "Username", 6 | "password": "Password", 7 | "dateOfBirth": "Date of birth", 8 | "network": "network", 9 | "consent": "I agree to the terms of service of this network", 10 | "submit": "Continue", 11 | "loginNotice": "Already have an account?", 12 | "captchaRequired": "Please solve the captcha first" 13 | } 14 | -------------------------------------------------------------------------------- /public/locales/he/translation.json: -------------------------------------------------------------------------------- 1 | { 2 | "rateLimited": "Please wait {{seconds}} seconds", 3 | "offline": "You are offline, please connect to the internet", 4 | "serverOffline": "The server is not reachable, please try again after a minute", 5 | "discordCORSIssue": "It isn't possible to access Discord.com from a third party website, please download the application instead (coming soon)", 6 | "friends": "Friends", 7 | "friendsSearchPlaceholder": "Find or start a conversation", 8 | "addServer": "Add a server", 9 | "upload": "Upload", 10 | "serverName": "Server name", 11 | "addServerNotice": "If you continue, you accept the chart of the server's network.", 12 | "add": "Add", 13 | "edit": "Edit", 14 | "delete": "Delete", 15 | "guild": "a server", 16 | "this": "this", 17 | "a": "a", 18 | "home": "Home", 19 | "channel": "channel", 20 | "createCategory": "Create a category" 21 | } 22 | -------------------------------------------------------------------------------- /public/locales/hi/login.json: -------------------------------------------------------------------------------- 1 | { 2 | "emailTelephone": "आपका ईमेल या फोन नंबर", 3 | "password": "पासवर्ड", 4 | "forgotPassword": "आपना पासवर्ड भूल गए?", 5 | "login": "लॉगिन", 6 | "registerNotice": "आपका खाता नहीं है?", 7 | "register": "पंजीकृत करें", 8 | "captchaRequired": "कृपया कैप्चा हल करें", 9 | "captchaTitle": "हम जाँच कर रहे हैं, की आप एक रोबोट हैं\n", 10 | "mfa": "प्रामाणिक / बैकअप कोड दर्ज करें", 11 | "mfaPlaceholder": "6 अंकों का प्रमाणीकरण कोड / 8 अंकों का बैकअप कोड" 12 | } 13 | -------------------------------------------------------------------------------- /public/locales/hi/network.json: -------------------------------------------------------------------------------- 1 | { 2 | "discover": "डिस्कवर", 3 | "explore": "अन्वेषण करो", 4 | "add": "जोड़ो", 5 | "search": "खोज", 6 | "network": "नेटवर्क", 7 | "chooseNetwork": "नेटवर्क चुनें", 8 | "findNetwork": "नेटवर्क खोजें", 9 | "findPlaceholder": "दल खोजें", 10 | "addNetwork": "नेटवर्क जोड़ें", 11 | "addNotice": "आप यहां नया नेटवर्क जोड़ सकते हैं", 12 | "setupNotice": "नया नेटवर्क सेटअप करने के लिए हमारे सेटअप गाइड पर एक नज़र डिजीये - जल्द ही आ रहा है", 13 | "addPlaceholder": "उदाहरण के लिए https;//fosscord.com" 14 | } 15 | -------------------------------------------------------------------------------- /public/locales/hi/register.json: -------------------------------------------------------------------------------- 1 | { 2 | "register": "रजिस्टर", 3 | "login": "लॉग इन", 4 | "email": "ईमेल", 5 | "username": "यूजरनाम", 6 | "password": "पासवर्ड", 7 | "dateOfBirth": "जन्म की तारीख", 8 | "network": "नेटवर्क", 9 | "consent": "मैं नेटवर्क की सेवाओं की शर्तों से सहमत हूं", 10 | "submit": "जारी रखें", 11 | "loginNotice": "पहले से ही एक खाता है?", 12 | "captchaRequired": "कृपया कैप्चा हल करें" 13 | } 14 | -------------------------------------------------------------------------------- /public/locales/hi/translation.json: -------------------------------------------------------------------------------- 1 | { 2 | "rateLimited": "कृपया [[seconds]] सेकंड प्रतीक्षा करें", 3 | "offline": "लॉग इन नहीं कर सकता, कृपया इन्टरनेट से जुड़ें", 4 | "serverOffline": "सर्वर उपलब्ध नहीं है, कृपया कुछ समय बाद प्रयास करें", 5 | "discordCORSIssue": "एक तीसरा पार्टी पार्टी की वेबसाइट से discord.com तक पहुंचना संभव नहीं है, कृपया इसके बजाय एप्लिकेशन डाउनलोड करें - जल्द ही आ रहा है", 6 | "friends": "Friends", 7 | "friendsSearchPlaceholder": "Find or start a conversation", 8 | "addServer": "सर्वर जोड़ें", 9 | "upload": "अपलोड करें", 10 | "serverName": "सर्वर का नाम", 11 | "addServerNotice": "अगर आप आगे बढ़ते हैं, तो आप इस सर्वर के नेटवर्क का मानचित्र स्वीकार करते हैं।", 12 | "add": "जोड़ें", 13 | "edit": "Edit", 14 | "delete": "Delete", 15 | "guild": "a server", 16 | "this": "this", 17 | "a": "a", 18 | "home": "Home", 19 | "channel": "channel", 20 | "createCategory": "Create a category" 21 | } 22 | -------------------------------------------------------------------------------- /public/locales/hr/login.json: -------------------------------------------------------------------------------- 1 | { 2 | "emailTelephone": "Email ili broj mobitela", 3 | "password": "Lozinka", 4 | "forgotPassword": "Zaboravili ste lozinku?", 5 | "login": "Prijava", 6 | "registerNotice": "Nemate račun?", 7 | "register": "Registrirajte se", 8 | "captchaRequired": "Molimo vas da prvo riješite captcha", 9 | "captchaTitle": "Provjeramo dali ste robot", 10 | "mfa": "Unesite Autentifikacijski/Rezervni kod", 11 | "mfaPlaceholder": "6-znamenkasti kod za provjeru autentičnosti/8-znamenkasti rezervni kod" 12 | } 13 | -------------------------------------------------------------------------------- /public/locales/hr/network.json: -------------------------------------------------------------------------------- 1 | { 2 | "discover": "Otkrij", 3 | "explore": "Istraži", 4 | "add": "Dodaj", 5 | "search": "Traži", 6 | "network": "Mreža", 7 | "chooseNetwork": "Odaberite mrežu", 8 | "findNetwork": "Pronađite mrežu", 9 | "findPlaceholder": "Istražite zajednice", 10 | "addNetwork": "Dodajte mrežu", 11 | "addNotice": "Ovdje možete dodati nove mreže", 12 | "setupNotice": "Za postavljanje nove mreže pogledajte naš vodič za postavljanje: dolazi uskoro", 13 | "addPlaceholder": "Na primjer: https://fosscord.com" 14 | } 15 | -------------------------------------------------------------------------------- /public/locales/hr/register.json: -------------------------------------------------------------------------------- 1 | { 2 | "register": "Registracija", 3 | "login": "Prijava", 4 | "email": "Email", 5 | "username": "Korisničko ime", 6 | "password": "Lozinka", 7 | "dateOfBirth": "Datum rođenja", 8 | "network": "mreža", 9 | "consent": "Slažem se s uvjetima pružanja usluge ove mreže", 10 | "submit": "Nastavi", 11 | "loginNotice": "Već imate račun?", 12 | "captchaRequired": "Molimo vas da prvo riješite captcha" 13 | } 14 | -------------------------------------------------------------------------------- /public/locales/hr/translation.json: -------------------------------------------------------------------------------- 1 | { 2 | "rateLimited": "Molimo vas pričekajte {{seconds}} sekundi", 3 | "offline": "Niste povezani na mreži, molimo vas da se spojite na internet", 4 | "serverOffline": "Poslužitelj nije dostupan, molimo vas da pokušate ponovo nakon minute", 5 | "discordCORSIssue": "Nije moguće pristupiti Discord.com sa treće strane web stranice, molimo vas da umjesto toga preuzmete aplikaciju (dolazi uskoro)", 6 | "friends": "Prijatelji", 7 | "friendsSearchPlaceholder": "Pronađite ili započnite razgovor", 8 | "addServer": "Dodaj poslužitelja", 9 | "upload": "Pošalji", 10 | "serverName": "Ime poslužitelja", 11 | "addServerNotice": "Ako nastavite, prihvaćate grafikon od poslužitelja mreže.", 12 | "add": "Dodaj", 13 | "edit": "Uredi", 14 | "delete": "Obriši", 15 | "guild": "poslužitelj", 16 | "this": "ovo", 17 | "a": "a", 18 | "home": "Naslovnica", 19 | "channel": "kanal", 20 | "createCategory": "Kreiraj kategoriju" 21 | } 22 | -------------------------------------------------------------------------------- /public/locales/hu/login.json: -------------------------------------------------------------------------------- 1 | { 2 | "emailTelephone": "Email vagy telefonszám", 3 | "password": "Jelszó", 4 | "forgotPassword": "Elfelejtetted a jelszavad?", 5 | "login": "Bejelentkezés", 6 | "registerNotice": "Nincs fiókod?", 7 | "register": "Regisztráció", 8 | "captchaRequired": "Kérlek old meg a captchat először", 9 | "captchaTitle": "Ellenőrizzük, hogy robot vagy-e", 10 | "mfa": "Add meg Hitelesítő/Biztonsági Kódod", 11 | "mfaPlaceholder": "6 karakteres hitelesítő kód/8 karakteres biztonsági kód" 12 | } 13 | -------------------------------------------------------------------------------- /public/locales/hu/network.json: -------------------------------------------------------------------------------- 1 | { 2 | "discover": "Felfedez", 3 | "explore": "Felfedez", 4 | "add": "Hozzáad", 5 | "search": "Keresés", 6 | "network": "Hálózat", 7 | "chooseNetwork": "Hálózat kiválasztása", 8 | "findNetwork": "Keress Hálózatokat", 9 | "findPlaceholder": "Fedezz fel közösségeket", 10 | "addNetwork": "Hálózat hozzáadása", 11 | "addNotice": "Itt tudsz új hálózatokat hozzáadni", 12 | "setupNotice": "Hálózat beállításához tekintsd meg az útmutatónkat: hamarosan", 13 | "addPlaceholder": "Példa https://fosscord.com" 14 | } 15 | -------------------------------------------------------------------------------- /public/locales/hu/register.json: -------------------------------------------------------------------------------- 1 | { 2 | "register": "Regisztráció", 3 | "login": "Bejelentkezés", 4 | "email": "Email", 5 | "username": "Felhasználónév", 6 | "password": "Jelszó", 7 | "dateOfBirth": "Születési dátum", 8 | "network": "hálózat", 9 | "consent": "Elfogadom a hálózat felhasználási feltételeit", 10 | "submit": "Folytatás", 11 | "loginNotice": "Van már fiókod?", 12 | "captchaRequired": "Kérlek old meg a captchat először" 13 | } 14 | -------------------------------------------------------------------------------- /public/locales/hu/translation.json: -------------------------------------------------------------------------------- 1 | { 2 | "rateLimited": "Kérlek várj {{seconds}} másodpercet", 3 | "offline": "Offline vagy jelenleg, kérlek csatlakozz az internetre", 4 | "serverOffline": "A szerver nem elérhető, kérlek próbáld újra pár percel később", 5 | "discordCORSIssue": "Discord.com elérése nem lehetséges harmadik fél weboldaláról, kérlek töltsd le az alkalmazást inkább (hamarosan)", 6 | "friends": "Friends", 7 | "friendsSearchPlaceholder": "Find or start a conversation", 8 | "addServer": "Add a server", 9 | "upload": "Upload", 10 | "serverName": "Server name", 11 | "addServerNotice": "If you continue, you accept the chart of the server's network.", 12 | "add": "Add", 13 | "edit": "Edit", 14 | "delete": "Delete", 15 | "guild": "a server", 16 | "this": "this", 17 | "a": "a", 18 | "home": "Home", 19 | "channel": "channel", 20 | "createCategory": "Create a category" 21 | } 22 | -------------------------------------------------------------------------------- /public/locales/id/login.json: -------------------------------------------------------------------------------- 1 | { 2 | "emailTelephone": "Email or phone number", 3 | "password": "Password", 4 | "forgotPassword": "Forgot your password?", 5 | "login": "Login", 6 | "registerNotice": "Don't have an account?", 7 | "register": "Register", 8 | "captchaRequired": "Please solve the captcha first", 9 | "captchaTitle": "Checking if you are a robot", 10 | "mfa": "Enter Auth/Backup Code", 11 | "mfaPlaceholder": "6-digit authentication code/8-digit backup code" 12 | } 13 | -------------------------------------------------------------------------------- /public/locales/id/network.json: -------------------------------------------------------------------------------- 1 | { 2 | "discover": "Discover", 3 | "explore": "Explore", 4 | "add": "Add", 5 | "search": "Search", 6 | "network": "Network", 7 | "chooseNetwork": "Choose Network", 8 | "findNetwork": "Find Networks", 9 | "findPlaceholder": "Explore communities", 10 | "addNetwork": "Add Network", 11 | "addNotice": "You can add new networks here", 12 | "setupNotice": "To setup a new network have a look at our setup guide: coming soon", 13 | "addPlaceholder": "For example https://fosscord.com" 14 | } 15 | -------------------------------------------------------------------------------- /public/locales/id/register.json: -------------------------------------------------------------------------------- 1 | { 2 | "register": "Register", 3 | "login": "Login", 4 | "email": "Email", 5 | "username": "Username", 6 | "password": "Password", 7 | "dateOfBirth": "Date of birth", 8 | "network": "network", 9 | "consent": "I agree to the terms of service of this network", 10 | "submit": "Continue", 11 | "loginNotice": "Already have an account?", 12 | "captchaRequired": "Please solve the captcha first" 13 | } 14 | -------------------------------------------------------------------------------- /public/locales/id/translation.json: -------------------------------------------------------------------------------- 1 | { 2 | "rateLimited": "Please wait {{seconds}} seconds", 3 | "offline": "You are offline, please connect to the internet", 4 | "serverOffline": "The server is not reachable, please try again after a minute", 5 | "discordCORSIssue": "It isn't possible to access Discord.com from a third party website, please download the application instead (coming soon)", 6 | "friends": "Friends", 7 | "friendsSearchPlaceholder": "Find or start a conversation", 8 | "addServer": "Add a server", 9 | "upload": "Upload", 10 | "serverName": "Server name", 11 | "addServerNotice": "If you continue, you accept the chart of the server's network.", 12 | "add": "Add", 13 | "edit": "Edit", 14 | "delete": "Delete", 15 | "guild": "a server", 16 | "this": "this", 17 | "a": "a", 18 | "home": "Home", 19 | "channel": "channel", 20 | "createCategory": "Create a category" 21 | } 22 | -------------------------------------------------------------------------------- /public/locales/it/login.json: -------------------------------------------------------------------------------- 1 | { 2 | "emailTelephone": "Email o numero di telefono", 3 | "password": "Password", 4 | "forgotPassword": "Hai dimenticato la password?", 5 | "login": "Accedi", 6 | "registerNotice": "Non hai un account?", 7 | "register": "Registrati", 8 | "captchaRequired": "Si prega di risolvere prima il captcha", 9 | "captchaTitle": "Verifica di non essere un robot", 10 | "mfa": "Inserisci Codice di accesso/Codice di Backup", 11 | "mfaPlaceholder": "Codice di autenticazione a 6 cifre/codice di backup a 8 cifre" 12 | } 13 | -------------------------------------------------------------------------------- /public/locales/it/network.json: -------------------------------------------------------------------------------- 1 | { 2 | "discover": "Scopri", 3 | "explore": "Esplora", 4 | "add": "Aggiungi", 5 | "search": "Cerca", 6 | "network": "Servers", 7 | "chooseNetwork": "Seleziona il server", 8 | "findNetwork": "Trova dei server", 9 | "findPlaceholder": "Esplora server", 10 | "addNetwork": "Aggiungi server", 11 | "addNotice": "Puoi aggiungere nuovi server qui", 12 | "setupNotice": "Per configurare una nuovo server dai un'occhiata alla nostra guida di installazione: in arrivo", 13 | "addPlaceholder": "Per esempio https://fosscord.com" 14 | } 15 | -------------------------------------------------------------------------------- /public/locales/it/register.json: -------------------------------------------------------------------------------- 1 | { 2 | "register": "Registrati", 3 | "login": "Accedi", 4 | "email": "Email", 5 | "username": "Username", 6 | "password": "Password", 7 | "dateOfBirth": "Data di nascita", 8 | "network": "Server", 9 | "consent": "Accetto i termini di servizio di questo {{link}}", 10 | "submit": "Continua", 11 | "loginNotice": "Hai già un account?", 12 | "captchaRequired": "Si prega di risolvere prima il captcha" 13 | } 14 | -------------------------------------------------------------------------------- /public/locales/it/translation.json: -------------------------------------------------------------------------------- 1 | { 2 | "rateLimited": "Attendere {{seconds}} secondi", 3 | "offline": "Sei offline, ti preghiamo di connetterti a internet", 4 | "serverOffline": "Il server non è raggiungibile, riprova fra qualche minuto", 5 | "discordCORSIssue": "Non è possibile accedere a Discord.com da un sito web di terze parti, si prega di scaricare l'applicazione (arrivando)", 6 | "friends": "Friends", 7 | "friendsSearchPlaceholder": "Find or start a conversation", 8 | "addServer": "Add a server", 9 | "upload": "Upload", 10 | "serverName": "Server name", 11 | "addServerNotice": "If you continue, you accept the chart of the server's network.", 12 | "add": "Add", 13 | "edit": "Edit", 14 | "delete": "Delete", 15 | "guild": "a server", 16 | "this": "this", 17 | "a": "a", 18 | "home": "Home", 19 | "channel": "channel", 20 | "createCategory": "Create a category" 21 | } 22 | -------------------------------------------------------------------------------- /public/locales/ja/login.json: -------------------------------------------------------------------------------- 1 | { 2 | "emailTelephone": "Eメールまたは電話番号", 3 | "password": "パスワード", 4 | "forgotPassword": "パスワードをお忘れですか?", 5 | "login": "ログイン", 6 | "registerNotice": "アカウントをお持ちでないですか?", 7 | "register": "登録", 8 | "captchaRequired": "CAPTCHAを最初に解決してください", 9 | "captchaTitle": "あなたがロボットかどうかを確認しています", 10 | "mfa": "認証コード/バックアップコードを入力", 11 | "mfaPlaceholder": "6桁の認証コード/8桁のバックアップコード" 12 | } 13 | -------------------------------------------------------------------------------- /public/locales/ja/network.json: -------------------------------------------------------------------------------- 1 | { 2 | "discover": "Discover", 3 | "explore": "探索", 4 | "add": "追加", 5 | "search": "検索", 6 | "network": "Network", 7 | "chooseNetwork": "ネットワークを選択", 8 | "findNetwork": "ネットワークを検索", 9 | "findPlaceholder": "コミュニティを探索", 10 | "addNetwork": "ネットワークを追加", 11 | "addNotice": "ここに新しいインスタンスを追加することができます", 12 | "setupNotice": "新しいインスタンスをセットアップするには、セットアップガイドをご覧ください: 近日公開予定", 13 | "addPlaceholder": "例: https://fosscod.com" 14 | } 15 | -------------------------------------------------------------------------------- /public/locales/ja/register.json: -------------------------------------------------------------------------------- 1 | { 2 | "register": "登録", 3 | "login": "ログイン", 4 | "email": "Eメールアドレス", 5 | "username": "ユーザー名", 6 | "password": "パスワード", 7 | "dateOfBirth": "誕生日", 8 | "network": "ネットワーク", 9 | "consent": "この {{link}} の利用規約に同意します", 10 | "submit": "続ける", 11 | "loginNotice": "既にアカウントをお持ちですか?", 12 | "captchaRequired": "CAPTCHAを最初に解決してください" 13 | } 14 | -------------------------------------------------------------------------------- /public/locales/ja/translation.json: -------------------------------------------------------------------------------- 1 | { 2 | "rateLimited": "{{seconds}} 秒お待ちください", 3 | "offline": "オフラインです。インターネットに接続してください。", 4 | "serverOffline": "サーバーに接続できません。1分後にもう一度お試しください。", 5 | "discordCORSIssue": "サードパーティのウェブサイトからDiscord.comにアクセスすることはできません。代わりにアプリケーションをダウンロードしてください(近日公開予定)", 6 | "friends": "Friends", 7 | "friendsSearchPlaceholder": "Find or start a conversation", 8 | "addServer": "Add a server", 9 | "upload": "Upload", 10 | "serverName": "Server name", 11 | "addServerNotice": "If you continue, you accept the chart of the server's network.", 12 | "add": "Add", 13 | "edit": "Edit", 14 | "delete": "Delete", 15 | "guild": "a server", 16 | "this": "this", 17 | "a": "a", 18 | "home": "Home", 19 | "channel": "channel", 20 | "createCategory": "Create a category" 21 | } 22 | -------------------------------------------------------------------------------- /public/locales/ko/login.json: -------------------------------------------------------------------------------- 1 | { 2 | "emailTelephone": "이메일 또는 전화번호", 3 | "password": "비밀번호", 4 | "forgotPassword": "비밀번호를 잊어버렸습니까?", 5 | "login": "로그인", 6 | "registerNotice": "계정이 없으신가요?", 7 | "register": "회원가입", 8 | "captchaRequired": "자동 로그인 방지 시스템 캡챠를 통과하세요.", 9 | "captchaTitle": "당신이 로봇인지 확인합니다", 10 | "mfa": "Auth/Backup 코드를 입력하세요", 11 | "mfaPlaceholder": "6-digit authentication code/8-digit backup code" 12 | } 13 | -------------------------------------------------------------------------------- /public/locales/ko/network.json: -------------------------------------------------------------------------------- 1 | { 2 | "discover": "Discover", 3 | "explore": "Explore", 4 | "add": "Add", 5 | "search": "Search", 6 | "network": "Network", 7 | "chooseNetwork": "Choose Network", 8 | "findNetwork": "Find Networks", 9 | "findPlaceholder": "Explore communities", 10 | "addNetwork": "Add Network", 11 | "addNotice": "You can add new networks here", 12 | "setupNotice": "To setup a new network have a look at our setup guide: coming soon", 13 | "addPlaceholder": "For example https://fosscord.com" 14 | } 15 | -------------------------------------------------------------------------------- /public/locales/ko/register.json: -------------------------------------------------------------------------------- 1 | { 2 | "register": "Register", 3 | "login": "Login", 4 | "email": "Email", 5 | "username": "Username", 6 | "password": "Password", 7 | "dateOfBirth": "Date of birth", 8 | "network": "network", 9 | "consent": "I agree to the terms of service of this network", 10 | "submit": "Continue", 11 | "loginNotice": "Already have an account?", 12 | "captchaRequired": "Please solve the captcha first" 13 | } 14 | -------------------------------------------------------------------------------- /public/locales/ko/translation.json: -------------------------------------------------------------------------------- 1 | { 2 | "rateLimited": "Please wait {{seconds}} seconds", 3 | "offline": "You are offline, please connect to the internet", 4 | "serverOffline": "The server is not reachable, please try again after a minute", 5 | "discordCORSIssue": "It isn't possible to access Discord.com from a third party website, please download the application instead (coming soon)", 6 | "friends": "Friends", 7 | "friendsSearchPlaceholder": "Find or start a conversation", 8 | "addServer": "Add a server", 9 | "upload": "Upload", 10 | "serverName": "Server name", 11 | "addServerNotice": "If you continue, you accept the chart of the server's network.", 12 | "add": "Add", 13 | "edit": "Edit", 14 | "delete": "Delete", 15 | "guild": "a server", 16 | "this": "this", 17 | "a": "a", 18 | "home": "Home", 19 | "channel": "channel", 20 | "createCategory": "Create a category" 21 | } 22 | -------------------------------------------------------------------------------- /public/locales/lt/login.json: -------------------------------------------------------------------------------- 1 | { 2 | "emailTelephone": "El. pašto adresas ar telefono numeris", 3 | "password": "Slaptažodis", 4 | "forgotPassword": "Pamiršote savo slaptažodį?", 5 | "login": "Login", 6 | "registerNotice": "Neturite paskyros?", 7 | "register": "Registruotis", 8 | "captchaRequired": "Prašome pirma išspręsti captcha", 9 | "captchaTitle": "Tikrinime, ar nesate robotas", 10 | "mfa": "Enter Auth/Backup Code", 11 | "mfaPlaceholder": "6-digit authentication code/8-digit backup code" 12 | } 13 | -------------------------------------------------------------------------------- /public/locales/lt/network.json: -------------------------------------------------------------------------------- 1 | { 2 | "discover": "Atrasti", 3 | "explore": "Naršyti", 4 | "add": "Pridėti", 5 | "search": "Ieškoti", 6 | "network": "Tinklas", 7 | "chooseNetwork": "Pasirinkti Tinklą", 8 | "findNetwork": "Rasti Tinklų", 9 | "findPlaceholder": "Naršykite bendruomenes", 10 | "addNetwork": "Pridėti Tinklą", 11 | "addNotice": "Čia galite pridėti naujų tinklų", 12 | "setupNotice": "To setup a new network have a look at our setup guide: coming soon", 13 | "addPlaceholder": "Pavyzdžiui https://fosscord.com" 14 | } 15 | -------------------------------------------------------------------------------- /public/locales/lt/register.json: -------------------------------------------------------------------------------- 1 | { 2 | "register": "Registruotis", 3 | "login": "Login", 4 | "email": "El. paštas", 5 | "username": "Username", 6 | "password": "Slaptažodis", 7 | "dateOfBirth": "Gimimo data", 8 | "network": "tinklas", 9 | "consent": "Sutinku su šio tinklo paslaugų teikimo sąlygomis", 10 | "submit": "Tęsti", 11 | "loginNotice": "Jau turite paskyrą?", 12 | "captchaRequired": "Prašome pirma išspręsti captcha" 13 | } 14 | -------------------------------------------------------------------------------- /public/locales/lt/translation.json: -------------------------------------------------------------------------------- 1 | { 2 | "rateLimited": "Prašome palaukti {{seconds}} sekundžių", 3 | "offline": "You are offline, please connect to the internet", 4 | "serverOffline": "Serveris nepasiekiamas, po minutės bandykite dar kartą", 5 | "discordCORSIssue": "Neįmanoma pasiekti Discord.com iš trečiosios šalies svetainės, atsisiųskite programą (netrukus)", 6 | "friends": "Friends", 7 | "friendsSearchPlaceholder": "Find or start a conversation", 8 | "addServer": "Add a server", 9 | "upload": "Upload", 10 | "serverName": "Server name", 11 | "addServerNotice": "If you continue, you accept the chart of the server's network.", 12 | "add": "Add", 13 | "edit": "Edit", 14 | "delete": "Delete", 15 | "guild": "a server", 16 | "this": "this", 17 | "a": "a", 18 | "home": "Home", 19 | "channel": "channel", 20 | "createCategory": "Create a category" 21 | } 22 | -------------------------------------------------------------------------------- /public/locales/nl/login.json: -------------------------------------------------------------------------------- 1 | { 2 | "emailTelephone": "E-mail of telefoonnummer", 3 | "password": "Wachtwoord", 4 | "forgotPassword": "Wachtwoord vergeten?", 5 | "login": "Aanmelden", 6 | "registerNotice": "Nog geen account?", 7 | "register": "Registreren", 8 | "captchaRequired": "Gelieve de captcha eerst op te lossen", 9 | "captchaTitle": "Controleren of je een robot bent", 10 | "mfa": "Auteur/back-up code invoeren", 11 | "mfaPlaceholder": "6-cijferige authenticatie code/8-cijferig back-up code" 12 | } 13 | -------------------------------------------------------------------------------- /public/locales/nl/network.json: -------------------------------------------------------------------------------- 1 | { 2 | "discover": "Ontdek", 3 | "explore": "Verken", 4 | "add": "Toevoegen", 5 | "search": "Zoeken", 6 | "network": "Netwerk", 7 | "chooseNetwork": "Kies netwerk", 8 | "findNetwork": "Netwerken zoeken", 9 | "findPlaceholder": "Ontdek gemeenschappen", 10 | "addNetwork": "Voeg netwerk toe", 11 | "addNotice": "Je kunt hier nieuwe instanties toevoegen", 12 | "setupNotice": "Om een nieuwe instantie in te stellen heb je een kijkje in onze installatiehandleiding: binnenkort", 13 | "addPlaceholder": "Bijvoorbeeld https://fosscord.com" 14 | } 15 | -------------------------------------------------------------------------------- /public/locales/nl/register.json: -------------------------------------------------------------------------------- 1 | { 2 | "register": "Registreren", 3 | "login": "Aanmelden", 4 | "email": "E-mailadres", 5 | "username": "Gebruikersnaam", 6 | "password": "Wachtwoord", 7 | "dateOfBirth": "Geboorte datum", 8 | "network": "Netwerk", 9 | "consent": "Ik ga akkoord met de gebruiksvoorwaarden van deze {{link}}", 10 | "submit": "Doorgaan", 11 | "loginNotice": "Heeft u al een account?", 12 | "captchaRequired": "Gelieve de captcha eerst op te lossen" 13 | } 14 | -------------------------------------------------------------------------------- /public/locales/nl/translation.json: -------------------------------------------------------------------------------- 1 | { 2 | "rateLimited": "Wacht alstublieft {{seconds}} seconden", 3 | "offline": "U bent offline, maak verbinding met het internet", 4 | "serverOffline": "De server is niet bereikbaar, probeer het na een minuut opnieuw", 5 | "discordCORSIssue": "Het is niet mogelijk om toegang te krijgen tot Discord.com via een website van een derde partij, gelieve de applicatie te downloaden (binnenkort beschikbaar)", 6 | "friends": "Friends", 7 | "friendsSearchPlaceholder": "Find or start a conversation", 8 | "addServer": "Add a server", 9 | "upload": "Upload", 10 | "serverName": "Server name", 11 | "addServerNotice": "If you continue, you accept the chart of the server's network.", 12 | "add": "Add", 13 | "edit": "Edit", 14 | "delete": "Delete", 15 | "guild": "a server", 16 | "this": "this", 17 | "a": "a", 18 | "home": "Home", 19 | "channel": "channel", 20 | "createCategory": "Create a category" 21 | } 22 | -------------------------------------------------------------------------------- /public/locales/no/login.json: -------------------------------------------------------------------------------- 1 | { 2 | "emailTelephone": "E-post eller telefonnummer", 3 | "password": "Passord", 4 | "forgotPassword": "Glemt passord?", 5 | "login": "Innlogging", 6 | "registerNotice": "Har du ikke en konto?", 7 | "register": "Registrer", 8 | "captchaRequired": "Vennligst løs captcha først", 9 | "captchaTitle": "Sjekker om du er en robot", 10 | "mfa": "Skriv inn Auth/Backup kode", 11 | "mfaPlaceholder": "6-sifret autentiseringskode /8-sifret sikkerhetskode" 12 | } 13 | -------------------------------------------------------------------------------- /public/locales/no/network.json: -------------------------------------------------------------------------------- 1 | { 2 | "discover": "Oppdag", 3 | "explore": "Utforsk", 4 | "add": "Legg til", 5 | "search": "Søk", 6 | "network": "Network", 7 | "chooseNetwork": "Velg nettverk", 8 | "findNetwork": "Finn nettverk", 9 | "findPlaceholder": "Utforsk samfunn", 10 | "addNetwork": "Legg til nettverk", 11 | "addNotice": "Du kan legge til nye forekomster her", 12 | "setupNotice": "For å sette opp en ny forekomst har vi en titt på vår installasjonsveiledning: kommer snart", 13 | "addPlaceholder": "For eksempel https://fosscord.com" 14 | } 15 | -------------------------------------------------------------------------------- /public/locales/no/register.json: -------------------------------------------------------------------------------- 1 | { 2 | "register": "Registrer", 3 | "login": "Innlogging", 4 | "email": "E-post", 5 | "username": "Brukernavn", 6 | "password": "Passord", 7 | "dateOfBirth": "Fødselsdato", 8 | "network": "nettverk", 9 | "consent": "Jeg godtar brukervilkårene for denne {{link}}", 10 | "submit": "Fortsett", 11 | "loginNotice": "Har du allerede en konto?", 12 | "captchaRequired": "Vennligst løs captcha først" 13 | } 14 | -------------------------------------------------------------------------------- /public/locales/no/translation.json: -------------------------------------------------------------------------------- 1 | { 2 | "rateLimited": "Vennligst vent {{seconds}} sekunder", 3 | "offline": "Du er frakoblet, vennligst koble til internett", 4 | "serverOffline": "Serveren er ikke tilgjengelig, prøv igjen etter et minutt", 5 | "discordCORSIssue": "Det er ikke mulig å få tilgang til Discord.com fra et tredjeparts nettsted, vennligst last ned programmet i stedet (kommer snart)", 6 | "friends": "Friends", 7 | "friendsSearchPlaceholder": "Find or start a conversation", 8 | "addServer": "Add a server", 9 | "upload": "Upload", 10 | "serverName": "Server name", 11 | "addServerNotice": "If you continue, you accept the chart of the server's network.", 12 | "add": "Add", 13 | "edit": "Edit", 14 | "delete": "Delete", 15 | "guild": "a server", 16 | "this": "this", 17 | "a": "a", 18 | "home": "Home", 19 | "channel": "channel", 20 | "createCategory": "Create a category" 21 | } 22 | -------------------------------------------------------------------------------- /public/locales/pl/login.json: -------------------------------------------------------------------------------- 1 | { 2 | "emailTelephone": "E-mail lub numer telefonu", 3 | "password": "Hasło", 4 | "forgotPassword": "Zapomniałeś hasła?", 5 | "login": "Logowanie", 6 | "registerNotice": "Nie masz konta?", 7 | "register": "Rejestracja", 8 | "captchaRequired": "Proszę najpierw rozwiązać captcha", 9 | "captchaTitle": "Sprawdzanie, czy jesteś robotem", 10 | "mfa": "Wprowadź kod uwierzytelniania/kopii zapasowej", 11 | "mfaPlaceholder": "6-cyfrowy kod uwierzytelniający/8-cyfrowy kod zapasowy" 12 | } 13 | -------------------------------------------------------------------------------- /public/locales/pl/network.json: -------------------------------------------------------------------------------- 1 | { 2 | "discover": "Odkryj", 3 | "explore": "Przeglądaj", 4 | "add": "Dodaj", 5 | "search": "Szukaj", 6 | "network": "Sieć", 7 | "chooseNetwork": "Wybierz sieć", 8 | "findNetwork": "Znajdź sieci", 9 | "findPlaceholder": "Eksploruj społeczności", 10 | "addNetwork": "Dodaj sieć", 11 | "addNotice": "Tutaj możesz dodać nowe instancje", 12 | "setupNotice": "Aby skonfigurować nową instancję, spójrz na nasz przewodnik konfiguracyjny: wkrótce", 13 | "addPlaceholder": "Na przykład https://fosscord.com" 14 | } 15 | -------------------------------------------------------------------------------- /public/locales/pl/register.json: -------------------------------------------------------------------------------- 1 | { 2 | "register": "Rejestracja", 3 | "login": "Logowanie", 4 | "email": "E-mail", 5 | "username": "Nazwa użytkownika", 6 | "password": "Hasło", 7 | "dateOfBirth": "Data urodzenia", 8 | "network": "sieć", 9 | "consent": "Akceptuję warunki korzystania z tego {{link}}", 10 | "submit": "Kontynuuj", 11 | "loginNotice": "Masz już konto?", 12 | "captchaRequired": "Proszę najpierw rozwiązać captcha" 13 | } 14 | -------------------------------------------------------------------------------- /public/locales/pl/translation.json: -------------------------------------------------------------------------------- 1 | { 2 | "rateLimited": "Proszę czekać {{seconds}} sekund", 3 | "offline": "Jesteś offline, połącz się z Internetem", 4 | "serverOffline": "Serwer jest niedostępny, spróbuj ponownie za minutę", 5 | "discordCORSIssue": "Nie można uzyskać dostępu do Discord.com ze strony innej firmy, pobierz aplikację (już wkrótce)", 6 | "friends": "Znajomi", 7 | "friendsSearchPlaceholder": "Wybierz lub rozpocznij rozmowę", 8 | "addServer": "Dodaj serwer", 9 | "upload": "Wyślij", 10 | "serverName": "Nazwa serwera", 11 | "addServerNotice": "Jeśli kontynuujesz, akceptujesz wykres sieci serwera.", 12 | "add": "Dodaj", 13 | "edit": "Edytuj", 14 | "delete": "Usuń", 15 | "guild": "serwer", 16 | "this": "to", 17 | "a": "a", 18 | "home": "Strona główna", 19 | "channel": "kanał", 20 | "createCategory": "Stwórz kategorię" 21 | } 22 | -------------------------------------------------------------------------------- /public/locales/pt/login.json: -------------------------------------------------------------------------------- 1 | { 2 | "emailTelephone": "E-mail ou número de telefone", 3 | "password": "Senha", 4 | "forgotPassword": "Esqueceu a senha?", 5 | "login": "Conectar-se", 6 | "registerNotice": "Não possui uma conta?", 7 | "register": "Cadastrar", 8 | "captchaRequired": "Por favor, resolva o captcha primeiro", 9 | "captchaTitle": "Verificando se você é um robô", 10 | "mfa": "Digitar Código de Autorização/Backup", 11 | "mfaPlaceholder": "Código de autenticação de 6 dígitos/8 dígitos do backup" 12 | } 13 | -------------------------------------------------------------------------------- /public/locales/pt/network.json: -------------------------------------------------------------------------------- 1 | { 2 | "discover": "Pendentes", 3 | "explore": "EXPLORAR", 4 | "add": "Adicionar", 5 | "search": "Pesquisa", 6 | "network": "Rede", 7 | "chooseNetwork": "Escolher rede", 8 | "findNetwork": "Encontrar redes", 9 | "findPlaceholder": "Explorar comunidades", 10 | "addNetwork": "Adicionar rede", 11 | "addNotice": "Você pode adicionar novas redes aqui", 12 | "setupNotice": "Para configurar uma nova rede dê uma olhada em nosso guia de configuração: em breve", 13 | "addPlaceholder": "Por exemplo, https://fosscord.com" 14 | } 15 | -------------------------------------------------------------------------------- /public/locales/pt/register.json: -------------------------------------------------------------------------------- 1 | { 2 | "register": "Cadastrar", 3 | "login": "Conectar-se", 4 | "email": "E-mail", 5 | "username": "Usuário:", 6 | "password": "Senha", 7 | "dateOfBirth": "Data de nascimento", 8 | "network": "Rede", 9 | "consent": "Eu concordo com os termos de serviço deste {{link}}", 10 | "submit": "Continuar", 11 | "loginNotice": "Já possui uma conta?", 12 | "captchaRequired": "Por favor, resolva o captcha primeiro" 13 | } 14 | -------------------------------------------------------------------------------- /public/locales/pt/translation.json: -------------------------------------------------------------------------------- 1 | { 2 | "rateLimited": "Por favor, aguarde {{seconds}} segundos", 3 | "offline": "Você está offline. Por favor, conecte-se à internet", 4 | "serverOffline": "O servidor não está acessível, por favor, tente novamente após um minuto", 5 | "discordCORSIssue": "Não é possível acessar o Discord.com de um site de terceiros, faça o download do aplicativo em vez disso (em breve)", 6 | "friends": "Friends", 7 | "friendsSearchPlaceholder": "Find or start a conversation", 8 | "addServer": "Add a server", 9 | "upload": "Upload", 10 | "serverName": "Server name", 11 | "addServerNotice": "If you continue, you accept the chart of the server's network.", 12 | "add": "Add", 13 | "edit": "Edit", 14 | "delete": "Delete", 15 | "guild": "a server", 16 | "this": "this", 17 | "a": "a", 18 | "home": "Home", 19 | "channel": "channel", 20 | "createCategory": "Create a category" 21 | } 22 | -------------------------------------------------------------------------------- /public/locales/ro/login.json: -------------------------------------------------------------------------------- 1 | { 2 | "emailTelephone": "E-mail sau număr de telefon", 3 | "password": "Parolă", 4 | "forgotPassword": "Ți-ai uitat parola?", 5 | "login": "Autentificare", 6 | "registerNotice": "Nu ai un cont?", 7 | "register": "Înregistrare", 8 | "captchaRequired": "Vă rugăm să rezolvați mai întâi captcha", 9 | "captchaTitle": "Se verifică dacă ești un robot", 10 | "mfa": "Introdu codul autorului/copiei de rezervă", 11 | "mfaPlaceholder": "Cod de rezervă/copie de rezervă de 6 cifre" 12 | } 13 | -------------------------------------------------------------------------------- /public/locales/ro/network.json: -------------------------------------------------------------------------------- 1 | { 2 | "discover": "Descoperă", 3 | "explore": "Explorați", 4 | "add": "Adăugare", 5 | "search": "Caută", 6 | "network": "Rețea", 7 | "chooseNetwork": "Alegeți rețeaua", 8 | "findNetwork": "Găsește rețele", 9 | "findPlaceholder": "Explorează comunitățile", 10 | "addNetwork": "Adaugă Rețea", 11 | "addNotice": "Puteţi adăuga noi instanţe aici", 12 | "setupNotice": "Pentru a configura o nouă instanță aruncați o privire la ghidul nostru de configurare: în curând", 13 | "addPlaceholder": "De exemplu, https://fosscord.com" 14 | } 15 | -------------------------------------------------------------------------------- /public/locales/ro/register.json: -------------------------------------------------------------------------------- 1 | { 2 | "register": "Inregistrare", 3 | "login": "Autentificare", 4 | "email": "E-mail", 5 | "username": "Nume utilizator", 6 | "password": "Parolă", 7 | "dateOfBirth": "Data naşterii", 8 | "network": "reţea", 9 | "consent": "Sunt de acord cu termenii serviciului acestui {{link}}", 10 | "submit": "Continuă", 11 | "loginNotice": "Ai deja un cont?", 12 | "captchaRequired": "Vă rugăm să rezolvați mai întâi captcha" 13 | } 14 | -------------------------------------------------------------------------------- /public/locales/ro/translation.json: -------------------------------------------------------------------------------- 1 | { 2 | "rateLimited": "Vă rugăm așteptați {{seconds}} secunde", 3 | "offline": "Ești offline, te rugăm să te conectezi la internet", 4 | "serverOffline": "Serverul nu este accesibil, încercați din nou după un minut", 5 | "discordCORSIssue": "Nu este posibil să accesezi Discord.com de pe un site terț, te rugăm să descarci aplicația (în curând)", 6 | "friends": "Friends", 7 | "friendsSearchPlaceholder": "Find or start a conversation", 8 | "addServer": "Add a server", 9 | "upload": "Upload", 10 | "serverName": "Server name", 11 | "addServerNotice": "If you continue, you accept the chart of the server's network.", 12 | "add": "Add", 13 | "edit": "Edit", 14 | "delete": "Delete", 15 | "guild": "a server", 16 | "this": "this", 17 | "a": "a", 18 | "home": "Home", 19 | "channel": "channel", 20 | "createCategory": "Create a category" 21 | } 22 | -------------------------------------------------------------------------------- /public/locales/ru/login.json: -------------------------------------------------------------------------------- 1 | { 2 | "emailTelephone": "Электронная почта или номер телефона", 3 | "password": "Пароль", 4 | "forgotPassword": "Забыли свой пароль?", 5 | "login": "Войти", 6 | "registerNotice": "У вас нет учетной записи?", 7 | "register": "Регистрация", 8 | "captchaRequired": "Пожалуйста, сначала решите капчу", 9 | "captchaTitle": "Проверка, являетесь ли вы роботом", 10 | "mfa": "Введите Авторизационный/Резервный код", 11 | "mfaPlaceholder": "6-значный авторизационный код/8-значный резервный код" 12 | } 13 | -------------------------------------------------------------------------------- /public/locales/ru/network.json: -------------------------------------------------------------------------------- 1 | { 2 | "discover": "Откройте для себя", 3 | "explore": "Исследовать", 4 | "add": "Добавить", 5 | "search": "Поиск", 6 | "network": "Сеть", 7 | "chooseNetwork": "Выберите сеть", 8 | "findNetwork": "Найти сети", 9 | "findPlaceholder": "Исследовать сообщества", 10 | "addNetwork": "Добавить сеть", 11 | "addNotice": "Здесь вы можете добавить новые сети", 12 | "setupNotice": "Чтобы настроить новую сеть, ознакомьтесь с нашим руководством по настройке: появится в ближайшее время", 13 | "addPlaceholder": "Например, https://fosscord.com" 14 | } 15 | -------------------------------------------------------------------------------- /public/locales/ru/register.json: -------------------------------------------------------------------------------- 1 | { 2 | "register": "Регистрация", 3 | "login": "Войти", 4 | "email": "Электронная почта", 5 | "username": "Имя пользователя", 6 | "password": "Пароль", 7 | "dateOfBirth": "Дата рождения", 8 | "network": "сеть", 9 | "consent": "Я согласен с условиями предоставления услуг этой сети", 10 | "submit": "Продолжить", 11 | "loginNotice": "Уже есть учётная запись?", 12 | "captchaRequired": "Пожалуйста, сначала решите капчу" 13 | } 14 | -------------------------------------------------------------------------------- /public/locales/ru/translation.json: -------------------------------------------------------------------------------- 1 | { 2 | "rateLimited": "Пожалуйста, подождите {{seconds}} секунд", 3 | "offline": "Вы не в сети, пожалуйста, подключитесь к интернету", 4 | "serverOffline": "Сервер недоступен, пожалуйста, повторите попытку через минуту", 5 | "discordCORSIssue": "Невозможно получить доступ к Discord.com с постороннего веб-сайта, вместо этого загрузите приложение (появится в ближайшее время)", 6 | "friends": "Друзья", 7 | "friendsSearchPlaceholder": "Найдите или начните диалог", 8 | "addServer": "Добавить сервер", 9 | "upload": "Загрузить", 10 | "serverName": "Название сервера", 11 | "addServerNotice": "Если вы продолжите, вы принимаете диаграмму сети сервера.", 12 | "add": "Добавить", 13 | "edit": "Редактировать", 14 | "delete": "Удалить", 15 | "guild": "сервер", 16 | "this": "этот", 17 | "a": " ", 18 | "home": "Домой", 19 | "channel": "канал", 20 | "createCategory": "Создать категорию" 21 | } 22 | -------------------------------------------------------------------------------- /public/locales/sk/login.json: -------------------------------------------------------------------------------- 1 | { 2 | "emailTelephone": "E-mail alebo telefónne číslo", 3 | "password": "Heslo", 4 | "forgotPassword": "Zabudnuté heslo?", 5 | "login": "Prihlásenie", 6 | "registerNotice": "Nemáte účet?", 7 | "register": "Registrácia", 8 | "captchaRequired": "Najprv prosím vyriešte captcha", 9 | "captchaTitle": "Kontrolujem, či ste robot", 10 | "mfa": "Zadajte kód autentifikácie/zálohovania", 11 | "mfaPlaceholder": "6-miestny overovací kód/8-miestny záložný kód" 12 | } 13 | -------------------------------------------------------------------------------- /public/locales/sk/network.json: -------------------------------------------------------------------------------- 1 | { 2 | "discover": "Objaviť", 3 | "explore": "Preskúmať", 4 | "add": "Pridať", 5 | "search": "Hľadať", 6 | "network": "Sieť", 7 | "chooseNetwork": "Vybrať sieť", 8 | "findNetwork": "Hladať Sieť", 9 | "findPlaceholder": "Preskúmať komunity", 10 | "addNetwork": "Pridať Sieť", 11 | "addNotice": "Tu môžete pridať nové siete", 12 | "setupNotice": "Ak chcete nastaviť novú sieť, pozrite si nášho sprievodcu nastavením: už čoskoro", 13 | "addPlaceholder": "Napríklad https://fosscord.com" 14 | } 15 | -------------------------------------------------------------------------------- /public/locales/sk/register.json: -------------------------------------------------------------------------------- 1 | { 2 | "register": "Registrácia", 3 | "login": "Prihlásenie", 4 | "email": "Email", 5 | "username": "Používateľské meno", 6 | "password": "Heslo", 7 | "dateOfBirth": "Dátum narodenia", 8 | "network": "sieť", 9 | "consent": "Súhlasím s podmienkami služby tejto siete", 10 | "submit": "Pokračovať", 11 | "loginNotice": "Už máte účet?", 12 | "captchaRequired": "Najprv prosím vyriešte captcha" 13 | } 14 | -------------------------------------------------------------------------------- /public/locales/sk/translation.json: -------------------------------------------------------------------------------- 1 | { 2 | "rateLimited": "-Prosím počkajte {{seconds}} sekúnd", 3 | "offline": "Ste offline, prosím pripojte sa k internetu", 4 | "serverOffline": "Server nie je dosiahnuteľný, skúste to prosím znova po minúte", 5 | "discordCORSIssue": "Prístup na stránku Discord.com z webovej stránky tretej strany nie je možný, namiesto toho si stiahnite aplikáciu (už čoskoro)", 6 | "friends": "Friends", 7 | "friendsSearchPlaceholder": "Find or start a conversation", 8 | "addServer": "Add a server", 9 | "upload": "Upload", 10 | "serverName": "Server name", 11 | "addServerNotice": "If you continue, you accept the chart of the server's network.", 12 | "add": "Add", 13 | "edit": "Edit", 14 | "delete": "Delete", 15 | "guild": "a server", 16 | "this": "this", 17 | "a": "a", 18 | "home": "Home", 19 | "channel": "channel", 20 | "createCategory": "Create a category" 21 | } 22 | -------------------------------------------------------------------------------- /public/locales/sr/login.json: -------------------------------------------------------------------------------- 1 | { 2 | "emailTelephone": "Email or phone number", 3 | "password": "Password", 4 | "forgotPassword": "Forgot your password?", 5 | "login": "Login", 6 | "registerNotice": "Don't have an account?", 7 | "register": "Register", 8 | "captchaRequired": "Please solve the captcha first", 9 | "captchaTitle": "Checking if you are a robot", 10 | "mfa": "Enter Auth/Backup Code", 11 | "mfaPlaceholder": "6-digit authentication code/8-digit backup code" 12 | } 13 | -------------------------------------------------------------------------------- /public/locales/sr/network.json: -------------------------------------------------------------------------------- 1 | { 2 | "discover": "Discover", 3 | "explore": "Explore", 4 | "add": "Add", 5 | "search": "Search", 6 | "network": "Network", 7 | "chooseNetwork": "Choose Network", 8 | "findNetwork": "Find Networks", 9 | "findPlaceholder": "Explore communities", 10 | "addNetwork": "Add Network", 11 | "addNotice": "You can add new networks here", 12 | "setupNotice": "To setup a new network have a look at our setup guide: coming soon", 13 | "addPlaceholder": "For example https://fosscord.com" 14 | } 15 | -------------------------------------------------------------------------------- /public/locales/sr/register.json: -------------------------------------------------------------------------------- 1 | { 2 | "register": "Register", 3 | "login": "Login", 4 | "email": "Email", 5 | "username": "Username", 6 | "password": "Password", 7 | "dateOfBirth": "Date of birth", 8 | "network": "network", 9 | "consent": "I agree to the terms of service of this network", 10 | "submit": "Continue", 11 | "loginNotice": "Already have an account?", 12 | "captchaRequired": "Please solve the captcha first" 13 | } 14 | -------------------------------------------------------------------------------- /public/locales/sr/translation.json: -------------------------------------------------------------------------------- 1 | { 2 | "rateLimited": "Please wait {{seconds}} seconds", 3 | "offline": "You are offline, please connect to the internet", 4 | "serverOffline": "The server is not reachable, please try again after a minute", 5 | "discordCORSIssue": "It isn't possible to access Discord.com from a third party website, please download the application instead (coming soon)", 6 | "friends": "Friends", 7 | "friendsSearchPlaceholder": "Find or start a conversation", 8 | "addServer": "Add a server", 9 | "upload": "Upload", 10 | "serverName": "Server name", 11 | "addServerNotice": "If you continue, you accept the chart of the server's network.", 12 | "add": "Add", 13 | "edit": "Edit", 14 | "delete": "Delete", 15 | "guild": "a server", 16 | "this": "this", 17 | "a": "a", 18 | "home": "Home", 19 | "channel": "channel", 20 | "createCategory": "Create a category" 21 | } 22 | -------------------------------------------------------------------------------- /public/locales/sv/login.json: -------------------------------------------------------------------------------- 1 | { 2 | "emailTelephone": "E-post eller telefonnummer", 3 | "password": "Lösenord", 4 | "forgotPassword": "Glömt ditt lösenord?", 5 | "login": "Logga in", 6 | "registerNotice": "Har du inget konto?", 7 | "register": "Registrera", 8 | "captchaRequired": "Vänligen lösa captchan först", 9 | "captchaTitle": "Kontrollerar om du är en robot", 10 | "mfa": "Ange autentiserings- eller säkerhetskopieringskod", 11 | "mfaPlaceholder": "6-siffrig autentiseringskod/8-siffrig säkerhetskod" 12 | } 13 | -------------------------------------------------------------------------------- /public/locales/sv/network.json: -------------------------------------------------------------------------------- 1 | { 2 | "discover": "Upptäck", 3 | "explore": "Utforska", 4 | "add": "Lägg till", 5 | "search": "Sök", 6 | "network": "Nätverk", 7 | "chooseNetwork": "Välj nätverk", 8 | "findNetwork": "Hitta nätverk", 9 | "findPlaceholder": "Utforska gemenskaper", 10 | "addNetwork": "Lägg till nätverk", 11 | "addNotice": "Du kan lägga till nya nätverk här", 12 | "setupNotice": "För att skapa ett nytt nätverk ta en titt på vår installationsguide: kommer snart", 13 | "addPlaceholder": "Till exempel https://fosscord.com" 14 | } 15 | -------------------------------------------------------------------------------- /public/locales/sv/register.json: -------------------------------------------------------------------------------- 1 | { 2 | "register": "Registrera", 3 | "login": "Logga in", 4 | "email": "E-post", 5 | "username": "Användarnamn", 6 | "password": "Lösenord", 7 | "dateOfBirth": "Födelsedatum", 8 | "network": "nätverk", 9 | "consent": "Jag godkänner användarvillkoren för detta nätverk", 10 | "submit": "Fortsätt", 11 | "loginNotice": "Har du redan ett konto?", 12 | "captchaRequired": "Vänligen lösa captchan först" 13 | } 14 | -------------------------------------------------------------------------------- /public/locales/sv/translation.json: -------------------------------------------------------------------------------- 1 | { 2 | "rateLimited": "Vänligen vänta {{seconds}} sekunder", 3 | "offline": "Du är offline, vänligen anslut till internet", 4 | "serverOffline": "Servern kan inte nås, försök igen efter en minut", 5 | "discordCORSIssue": "Det är inte möjligt att komma åt Discord.com från en tredje parts webbplats, vänligen ladda ner programmet istället (kommer snart)", 6 | "friends": "Friends", 7 | "friendsSearchPlaceholder": "Find or start a conversation", 8 | "addServer": "Add a server", 9 | "upload": "Upload", 10 | "serverName": "Server name", 11 | "addServerNotice": "If you continue, you accept the chart of the server's network.", 12 | "add": "Add", 13 | "edit": "Edit", 14 | "delete": "Delete", 15 | "guild": "a server", 16 | "this": "this", 17 | "a": "a", 18 | "home": "Home", 19 | "channel": "channel", 20 | "createCategory": "Create a category" 21 | } 22 | -------------------------------------------------------------------------------- /public/locales/tr/login.json: -------------------------------------------------------------------------------- 1 | { 2 | "emailTelephone": "Eposta adresi veya telefon numarası", 3 | "password": "Şifre", 4 | "forgotPassword": "Şifreni mi unuttun?", 5 | "login": "Giriş yap", 6 | "registerNotice": "Hesabın yok mu?", 7 | "register": "Kayıt ol", 8 | "captchaRequired": "Lütfen önce doğrulamayı çözün", 9 | "captchaTitle": "Robot olup olmadığınız kontrol ediliyor", 10 | "mfa": "Doğrulama/Yedek Kodunuzu Giriniz", 11 | "mfaPlaceholder": "6 haneli doğrulama kodu/8 haneli yedek kodu" 12 | } 13 | -------------------------------------------------------------------------------- /public/locales/tr/network.json: -------------------------------------------------------------------------------- 1 | { 2 | "discover": "Keşfet", 3 | "explore": "Gez", 4 | "add": "Ekle", 5 | "search": "Ara", 6 | "network": "Ağ", 7 | "chooseNetwork": "Ağ Seç", 8 | "findNetwork": "Ağları Bul", 9 | "findPlaceholder": "Toplulukları keşfet", 10 | "addNetwork": "Ağ Ekle", 11 | "addNotice": "Buradan yeni ağlar ekleyebilirsin", 12 | "setupNotice": "Yeni bir ağ kurmak için kurulum talimatlarımıza bakın: yakında geliyor", 13 | "addPlaceholder": "Örneğin https://fosscord.com" 14 | } 15 | -------------------------------------------------------------------------------- /public/locales/tr/register.json: -------------------------------------------------------------------------------- 1 | { 2 | "register": "Kayıt Ol", 3 | "login": "Giriş Yap", 4 | "email": "Eposta", 5 | "username": "Kullanıcı Adı", 6 | "password": "Şifre", 7 | "dateOfBirth": "Doğum tarihi", 8 | "network": "ağ", 9 | "consent": "Bu ağın kullanım koşullarını kabul ediyorum", 10 | "submit": "Devam et", 11 | "loginNotice": "Zaten hesabın var mı?", 12 | "captchaRequired": "Lütfen önce doğrulamayı çözün" 13 | } 14 | -------------------------------------------------------------------------------- /public/locales/tr/translation.json: -------------------------------------------------------------------------------- 1 | { 2 | "rateLimited": "Lütfen {{seconds}} saniye bekleyiniz", 3 | "offline": "Çevrimdışısın, lütfen internete bağlan", 4 | "serverOffline": "Sunucuya erişilemiyor, lütfen bir dakika sonra tekrar deneyin", 5 | "discordCORSIssue": "Üçüncü parti sitelerden Discord.com ile iletişim kurulamaz, lütfen uygulamayı indirin (yakında geliyor)", 6 | "friends": "Friends", 7 | "friendsSearchPlaceholder": "Find or start a conversation", 8 | "addServer": "Add a server", 9 | "upload": "Upload", 10 | "serverName": "Server name", 11 | "addServerNotice": "If you continue, you accept the chart of the server's network.", 12 | "add": "Add", 13 | "edit": "Edit", 14 | "delete": "Delete", 15 | "guild": "a server", 16 | "this": "this", 17 | "a": "a", 18 | "home": "Home", 19 | "channel": "channel", 20 | "createCategory": "Create a category" 21 | } 22 | -------------------------------------------------------------------------------- /public/locales/uk/login.json: -------------------------------------------------------------------------------- 1 | { 2 | "emailTelephone": "Імейл чи номер телефону", 3 | "password": "Пароль", 4 | "forgotPassword": "Забули свій пароль?", 5 | "login": "Логін", 6 | "registerNotice": "Ще не зареєстровані?", 7 | "register": "Зареєструватися", 8 | "captchaRequired": "Будь ласка, спочатку виправте капчу", 9 | "captchaTitle": "Перевірка, чи ви робот", 10 | "mfa": "Введіть автор/резервний код", 11 | "mfaPlaceholder": "6-значний код автентифікації / 8-значний резервний код автентифікації" 12 | } 13 | -------------------------------------------------------------------------------- /public/locales/uk/network.json: -------------------------------------------------------------------------------- 1 | { 2 | "discover": "Пізнавайте", 3 | "explore": "Дослідити", 4 | "add": "Додати", 5 | "search": "Пошук", 6 | "network": "Мережа", 7 | "chooseNetwork": "Оберіть мережу", 8 | "findNetwork": "Знайти мережі", 9 | "findPlaceholder": "Огляд спільнот", 10 | "addNetwork": "Додати мережу", 11 | "addNotice": "Ви можете додати нові екземпляри тут", 12 | "setupNotice": "Щоб налаштувати новий екземпляр, перегляньте наш посібник із установки: coming soon", 13 | "addPlaceholder": "Наприклад, https://fosscord.com" 14 | } 15 | -------------------------------------------------------------------------------- /public/locales/uk/register.json: -------------------------------------------------------------------------------- 1 | { 2 | "register": "Зареєструватися", 3 | "login": "Логін", 4 | "email": "Ел. пошта", 5 | "username": "Ім'я користувача", 6 | "password": "Пароль", 7 | "dateOfBirth": "Дата народження", 8 | "network": "мережа", 9 | "consent": "Я згоден з умовами надання послуг {{link}}", 10 | "submit": "Продовжити", 11 | "loginNotice": "Вже маєте обліковий запис?", 12 | "captchaRequired": "Будь ласка, спочатку виправте капчу" 13 | } 14 | -------------------------------------------------------------------------------- /public/locales/uk/translation.json: -------------------------------------------------------------------------------- 1 | { 2 | "rateLimited": "Зачекайте {{seconds}} секунд", 3 | "offline": "Ви не в мережі. Під’єднайтеся до Інтернету", 4 | "serverOffline": "Сервер недоступний. Будь ласка, спробуйте ще раз через хвилину", 5 | "discordCORSIssue": "Неможливо отримати доступ до Discord.com з сайту третьої сторони, будь ласка, завантажте додаток (скоро)", 6 | "friends": "Friends", 7 | "friendsSearchPlaceholder": "Find or start a conversation", 8 | "addServer": "Add a server", 9 | "upload": "Upload", 10 | "serverName": "Server name", 11 | "addServerNotice": "If you continue, you accept the chart of the server's network.", 12 | "add": "Add", 13 | "edit": "Edit", 14 | "delete": "Delete", 15 | "guild": "a server", 16 | "this": "this", 17 | "a": "a", 18 | "home": "Home", 19 | "channel": "channel", 20 | "createCategory": "Create a category" 21 | } 22 | -------------------------------------------------------------------------------- /public/locales/ur/login.json: -------------------------------------------------------------------------------- 1 | { 2 | "emailTelephone": "Email or phone number", 3 | "password": "Password", 4 | "forgotPassword": "Forgot your password?", 5 | "login": "Login", 6 | "registerNotice": "Don't have an account?", 7 | "register": "Register", 8 | "captchaRequired": "Please solve the captcha first", 9 | "captchaTitle": "Checking if you are a robot", 10 | "mfa": "Enter Auth/Backup Code", 11 | "mfaPlaceholder": "6-digit authentication code/8-digit backup code" 12 | } 13 | -------------------------------------------------------------------------------- /public/locales/ur/network.json: -------------------------------------------------------------------------------- 1 | { 2 | "discover": "Discover", 3 | "explore": "Explore", 4 | "add": "Add", 5 | "search": "Search", 6 | "network": "Network", 7 | "chooseNetwork": "Choose Network", 8 | "findNetwork": "Find Networks", 9 | "findPlaceholder": "Explore communities", 10 | "addNetwork": "Add Network", 11 | "addNotice": "You can add new networks here", 12 | "setupNotice": "To setup a new network have a look at our setup guide: coming soon", 13 | "addPlaceholder": "For example https://fosscord.com" 14 | } 15 | -------------------------------------------------------------------------------- /public/locales/ur/register.json: -------------------------------------------------------------------------------- 1 | { 2 | "register": "Register", 3 | "login": "Login", 4 | "email": "Email", 5 | "username": "Username", 6 | "password": "Password", 7 | "dateOfBirth": "Date of birth", 8 | "network": "network", 9 | "consent": "I agree to the terms of service of this network", 10 | "submit": "Continue", 11 | "loginNotice": "Already have an account?", 12 | "captchaRequired": "Please solve the captcha first" 13 | } 14 | -------------------------------------------------------------------------------- /public/locales/ur/translation.json: -------------------------------------------------------------------------------- 1 | { 2 | "rateLimited": "Please wait {{seconds}} seconds", 3 | "offline": "You are offline, please connect to the internet", 4 | "serverOffline": "The server is not reachable, please try again after a minute", 5 | "discordCORSIssue": "It isn't possible to access Discord.com from a third party website, please download the application instead (coming soon)", 6 | "friends": "Friends", 7 | "friendsSearchPlaceholder": "Find or start a conversation", 8 | "addServer": "Add a server", 9 | "upload": "Upload", 10 | "serverName": "Server name", 11 | "addServerNotice": "If you continue, you accept the chart of the server's network.", 12 | "add": "Add", 13 | "edit": "Edit", 14 | "delete": "Delete", 15 | "guild": "a server", 16 | "this": "this", 17 | "a": "a", 18 | "home": "Home", 19 | "channel": "channel", 20 | "createCategory": "Create a category" 21 | } 22 | -------------------------------------------------------------------------------- /public/locales/vi/login.json: -------------------------------------------------------------------------------- 1 | { 2 | "emailTelephone": "Email or phone number", 3 | "password": "Password", 4 | "forgotPassword": "Forgot your password?", 5 | "login": "Login", 6 | "registerNotice": "Don't have an account?", 7 | "register": "Register", 8 | "captchaRequired": "Please solve the captcha first", 9 | "captchaTitle": "Checking if you are a robot", 10 | "mfa": "Enter Auth/Backup Code", 11 | "mfaPlaceholder": "6-digit authentication code/8-digit backup code" 12 | } 13 | -------------------------------------------------------------------------------- /public/locales/vi/network.json: -------------------------------------------------------------------------------- 1 | { 2 | "discover": "Discover", 3 | "explore": "Explore", 4 | "add": "Add", 5 | "search": "Search", 6 | "network": "Network", 7 | "chooseNetwork": "Choose Network", 8 | "findNetwork": "Find Networks", 9 | "findPlaceholder": "Explore communities", 10 | "addNetwork": "Add Network", 11 | "addNotice": "You can add new networks here", 12 | "setupNotice": "To setup a new network have a look at our setup guide: coming soon", 13 | "addPlaceholder": "For example https://fosscord.com" 14 | } 15 | -------------------------------------------------------------------------------- /public/locales/vi/register.json: -------------------------------------------------------------------------------- 1 | { 2 | "register": "Register", 3 | "login": "Login", 4 | "email": "Email", 5 | "username": "Username", 6 | "password": "Password", 7 | "dateOfBirth": "Date of birth", 8 | "network": "network", 9 | "consent": "I agree to the terms of service of this network", 10 | "submit": "Continue", 11 | "loginNotice": "Already have an account?", 12 | "captchaRequired": "Please solve the captcha first" 13 | } 14 | -------------------------------------------------------------------------------- /public/locales/vi/translation.json: -------------------------------------------------------------------------------- 1 | { 2 | "rateLimited": "Please wait {{seconds}} seconds", 3 | "offline": "You are offline, please connect to the internet", 4 | "serverOffline": "The server is not reachable, please try again after a minute", 5 | "discordCORSIssue": "It isn't possible to access Discord.com from a third party website, please download the application instead (coming soon)", 6 | "friends": "Friends", 7 | "friendsSearchPlaceholder": "Find or start a conversation", 8 | "addServer": "Add a server", 9 | "upload": "Upload", 10 | "serverName": "Server name", 11 | "addServerNotice": "If you continue, you accept the chart of the server's network.", 12 | "add": "Add", 13 | "edit": "Edit", 14 | "delete": "Delete", 15 | "guild": "a server", 16 | "this": "this", 17 | "a": "a", 18 | "home": "Home", 19 | "channel": "channel", 20 | "createCategory": "Create a category" 21 | } 22 | -------------------------------------------------------------------------------- /public/locales/zh/login.json: -------------------------------------------------------------------------------- 1 | { 2 | "emailTelephone": "电子邮件或电话号码", 3 | "password": "密码", 4 | "forgotPassword": "忘记密码?", 5 | "login": "登录", 6 | "registerNotice": "没有账户?", 7 | "register": "注册", 8 | "captchaRequired": "请先解决验证码", 9 | "captchaTitle": "检查您是否是机器人", 10 | "mfa": "输入作者/备份代码", 11 | "mfaPlaceholder": "6位数字身份验证码/8位数备份代码" 12 | } 13 | -------------------------------------------------------------------------------- /public/locales/zh/network.json: -------------------------------------------------------------------------------- 1 | { 2 | "discover": "发现", 3 | "explore": "浏览", 4 | "add": "添加", 5 | "search": "搜索", 6 | "network": "网络", 7 | "chooseNetwork": "选择网络", 8 | "findNetwork": "查找网络", 9 | "findPlaceholder": "探索社区", 10 | "addNetwork": "添加网络", 11 | "addNotice": "您可以在此添加新网络", 12 | "setupNotice": "要设置一个新的网络,请查看我们的设置指南:即将到来的", 13 | "addPlaceholder": "例如:https://fosscord.com" 14 | } 15 | -------------------------------------------------------------------------------- /public/locales/zh/register.json: -------------------------------------------------------------------------------- 1 | { 2 | "register": "注册", 3 | "login": "登录", 4 | "email": "电子邮件地址", 5 | "username": "用户名", 6 | "password": "密码", 7 | "dateOfBirth": "出生日期", 8 | "network": "网络", 9 | "consent": "我同意此网络的服务条款", 10 | "submit": "继续", 11 | "loginNotice": "已经有一个帐户?", 12 | "captchaRequired": "请先解决验证码" 13 | } 14 | -------------------------------------------------------------------------------- /public/locales/zh/translation.json: -------------------------------------------------------------------------------- 1 | { 2 | "rateLimited": "请等待 {{seconds}} 秒", 3 | "offline": "您处于离线状态,请连接到网络", 4 | "serverOffline": "服务器不可达,请在一分钟后重试", 5 | "discordCORSIssue": "无法从第三方网站访问 Discord.com,请下载应用程序(即将到来)", 6 | "friends": "Friends", 7 | "friendsSearchPlaceholder": "Find or start a conversation", 8 | "addServer": "Add a server", 9 | "upload": "Upload", 10 | "serverName": "Server name", 11 | "addServerNotice": "If you continue, you accept the chart of the server's network.", 12 | "add": "Add", 13 | "edit": "Edit", 14 | "delete": "Delete", 15 | "guild": "a server", 16 | "this": "this", 17 | "a": "a", 18 | "home": "Home", 19 | "channel": "channel", 20 | "createCategory": "Create a category" 21 | } 22 | -------------------------------------------------------------------------------- /public/logo192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacebarchat/fosscord-web-client/825286882c6e48d630bbded61b59c4cbefbb0114/public/logo192.png -------------------------------------------------------------------------------- /public/logo512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacebarchat/fosscord-web-client/825286882c6e48d630bbded61b59c4cbefbb0114/public/logo512.png -------------------------------------------------------------------------------- /public/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "short_name": "Fosscord", 3 | "name": "Foscord", 4 | "icons": [ 5 | { 6 | "src": "favicon.ico", 7 | "sizes": "64x64 32x32 24x24 16x16", 8 | "type": "image/x-icon" 9 | }, 10 | { 11 | "src": "logo192.png", 12 | "type": "image/png", 13 | "sizes": "192x192" 14 | }, 15 | { 16 | "src": "logo512.png", 17 | "type": "image/png", 18 | "sizes": "512x512" 19 | } 20 | ], 21 | "start_url": ".", 22 | "display": "standalone", 23 | "theme_color": "#000000", 24 | "background_color": "#ffffff" 25 | } 26 | -------------------------------------------------------------------------------- /public/robots.txt: -------------------------------------------------------------------------------- 1 | # https://www.robotstxt.org/robotstxt.html 2 | User-agent: * 3 | Disallow: 4 | -------------------------------------------------------------------------------- /src/App.tsx: -------------------------------------------------------------------------------- 1 | import React, { useState } from "react"; 2 | import Routes from "./components/Routes"; 3 | import ErrorBoundary from "./components/ErrorBoundary"; 4 | import "./util/i18n"; 5 | import { InitClient } from "./Client"; 6 | import "./util/debug"; 7 | import { State } from "./util/State"; 8 | 9 | export default function App() { 10 | const [state, setWholeState] = useState({}); 11 | 12 | const setState = (val: any) => setWholeState({ ...state, ...val }); 13 | 14 | return ( 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | ); 23 | } 24 | -------------------------------------------------------------------------------- /src/Client.tsx: -------------------------------------------------------------------------------- 1 | import React, { ReactNode, useEffect } from "react"; 2 | // @ts-ignore 3 | import { Client, Constants } from "fosscord.js"; 4 | import { useHistory } from "react-router-dom"; 5 | import store from "./util/store"; 6 | 7 | const client = new Client({ 8 | intents: [ 9 | "DIRECT_MESSAGES", 10 | "DIRECT_MESSAGE_REACTIONS", 11 | "DIRECT_MESSAGE_TYPING", 12 | "GUILDS", 13 | "GUILD_BANS", 14 | "GUILD_EMOJIS_AND_STICKERS", 15 | "GUILD_INTEGRATIONS", 16 | "GUILD_INVITES", 17 | "GUILD_MEMBERS", 18 | "GUILD_MESSAGES", 19 | "GUILD_MESSAGE_REACTIONS", 20 | "GUILD_MESSAGE_TYPING", 21 | "GUILD_PRESENCES", 22 | "GUILD_VOICE_STATES", 23 | "GUILD_WEBHOOKS", 24 | ], 25 | }); 26 | 27 | export default client; 28 | 29 | console.log(client); 30 | 31 | export function InitClient({ children }: { children?: ReactNode }) { 32 | let history = useHistory(); 33 | 34 | const onInvalidated = () => { 35 | store.removeItem("token"); 36 | history.push("/login"); 37 | }; 38 | 39 | useEffect(() => { 40 | console.log("Init client"); 41 | client.on("invalidated", onInvalidated); 42 | store.getItem("token").then((x: any) => { 43 | if (!x) return client.emit(Constants.Events.INVALIDATED); 44 | client.login(x).catch((e: any) => {}); 45 | }); 46 | 47 | return () => { 48 | client.off("invalidated", onInvalidated); 49 | }; 50 | // eslint-disable-next-line react-hooks/exhaustive-deps 51 | }, []); 52 | 53 | return <>{children}; 54 | } 55 | -------------------------------------------------------------------------------- /src/assets/channel.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /src/assets/logo/ios/100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacebarchat/fosscord-web-client/825286882c6e48d630bbded61b59c4cbefbb0114/src/assets/logo/ios/100.png -------------------------------------------------------------------------------- /src/assets/logo/ios/1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacebarchat/fosscord-web-client/825286882c6e48d630bbded61b59c4cbefbb0114/src/assets/logo/ios/1024.png -------------------------------------------------------------------------------- /src/assets/logo/ios/114.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacebarchat/fosscord-web-client/825286882c6e48d630bbded61b59c4cbefbb0114/src/assets/logo/ios/114.png -------------------------------------------------------------------------------- /src/assets/logo/ios/120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacebarchat/fosscord-web-client/825286882c6e48d630bbded61b59c4cbefbb0114/src/assets/logo/ios/120.png -------------------------------------------------------------------------------- /src/assets/logo/ios/128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacebarchat/fosscord-web-client/825286882c6e48d630bbded61b59c4cbefbb0114/src/assets/logo/ios/128.png -------------------------------------------------------------------------------- /src/assets/logo/ios/144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacebarchat/fosscord-web-client/825286882c6e48d630bbded61b59c4cbefbb0114/src/assets/logo/ios/144.png -------------------------------------------------------------------------------- /src/assets/logo/ios/152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacebarchat/fosscord-web-client/825286882c6e48d630bbded61b59c4cbefbb0114/src/assets/logo/ios/152.png -------------------------------------------------------------------------------- /src/assets/logo/ios/167.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacebarchat/fosscord-web-client/825286882c6e48d630bbded61b59c4cbefbb0114/src/assets/logo/ios/167.png -------------------------------------------------------------------------------- /src/assets/logo/ios/172.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacebarchat/fosscord-web-client/825286882c6e48d630bbded61b59c4cbefbb0114/src/assets/logo/ios/172.png -------------------------------------------------------------------------------- /src/assets/logo/ios/180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacebarchat/fosscord-web-client/825286882c6e48d630bbded61b59c4cbefbb0114/src/assets/logo/ios/180.png -------------------------------------------------------------------------------- /src/assets/logo/ios/196.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacebarchat/fosscord-web-client/825286882c6e48d630bbded61b59c4cbefbb0114/src/assets/logo/ios/196.png -------------------------------------------------------------------------------- /src/assets/logo/ios/20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacebarchat/fosscord-web-client/825286882c6e48d630bbded61b59c4cbefbb0114/src/assets/logo/ios/20.png -------------------------------------------------------------------------------- /src/assets/logo/ios/216.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacebarchat/fosscord-web-client/825286882c6e48d630bbded61b59c4cbefbb0114/src/assets/logo/ios/216.png -------------------------------------------------------------------------------- /src/assets/logo/ios/256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacebarchat/fosscord-web-client/825286882c6e48d630bbded61b59c4cbefbb0114/src/assets/logo/ios/256.png -------------------------------------------------------------------------------- /src/assets/logo/ios/29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacebarchat/fosscord-web-client/825286882c6e48d630bbded61b59c4cbefbb0114/src/assets/logo/ios/29.png -------------------------------------------------------------------------------- /src/assets/logo/ios/32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacebarchat/fosscord-web-client/825286882c6e48d630bbded61b59c4cbefbb0114/src/assets/logo/ios/32.png -------------------------------------------------------------------------------- /src/assets/logo/ios/40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacebarchat/fosscord-web-client/825286882c6e48d630bbded61b59c4cbefbb0114/src/assets/logo/ios/40.png -------------------------------------------------------------------------------- /src/assets/logo/ios/48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacebarchat/fosscord-web-client/825286882c6e48d630bbded61b59c4cbefbb0114/src/assets/logo/ios/48.png -------------------------------------------------------------------------------- /src/assets/logo/ios/50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacebarchat/fosscord-web-client/825286882c6e48d630bbded61b59c4cbefbb0114/src/assets/logo/ios/50.png -------------------------------------------------------------------------------- /src/assets/logo/ios/512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacebarchat/fosscord-web-client/825286882c6e48d630bbded61b59c4cbefbb0114/src/assets/logo/ios/512.png -------------------------------------------------------------------------------- /src/assets/logo/ios/55.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacebarchat/fosscord-web-client/825286882c6e48d630bbded61b59c4cbefbb0114/src/assets/logo/ios/55.png -------------------------------------------------------------------------------- /src/assets/logo/ios/57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacebarchat/fosscord-web-client/825286882c6e48d630bbded61b59c4cbefbb0114/src/assets/logo/ios/57.png -------------------------------------------------------------------------------- /src/assets/logo/ios/58.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacebarchat/fosscord-web-client/825286882c6e48d630bbded61b59c4cbefbb0114/src/assets/logo/ios/58.png -------------------------------------------------------------------------------- /src/assets/logo/ios/60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacebarchat/fosscord-web-client/825286882c6e48d630bbded61b59c4cbefbb0114/src/assets/logo/ios/60.png -------------------------------------------------------------------------------- /src/assets/logo/ios/64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacebarchat/fosscord-web-client/825286882c6e48d630bbded61b59c4cbefbb0114/src/assets/logo/ios/64.png -------------------------------------------------------------------------------- /src/assets/logo/ios/72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacebarchat/fosscord-web-client/825286882c6e48d630bbded61b59c4cbefbb0114/src/assets/logo/ios/72.png -------------------------------------------------------------------------------- /src/assets/logo/ios/76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacebarchat/fosscord-web-client/825286882c6e48d630bbded61b59c4cbefbb0114/src/assets/logo/ios/76.png -------------------------------------------------------------------------------- /src/assets/logo/ios/80.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacebarchat/fosscord-web-client/825286882c6e48d630bbded61b59c4cbefbb0114/src/assets/logo/ios/80.png -------------------------------------------------------------------------------- /src/assets/logo/ios/87.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacebarchat/fosscord-web-client/825286882c6e48d630bbded61b59c4cbefbb0114/src/assets/logo/ios/87.png -------------------------------------------------------------------------------- /src/assets/logo/ios/88.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacebarchat/fosscord-web-client/825286882c6e48d630bbded61b59c4cbefbb0114/src/assets/logo/ios/88.png -------------------------------------------------------------------------------- /src/assets/logo/ios/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacebarchat/fosscord-web-client/825286882c6e48d630bbded61b59c4cbefbb0114/src/assets/logo/ios/logo.png -------------------------------------------------------------------------------- /src/assets/logo/ios/logo_gradient.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacebarchat/fosscord-web-client/825286882c6e48d630bbded61b59c4cbefbb0114/src/assets/logo/ios/logo_gradient.png -------------------------------------------------------------------------------- /src/assets/logo/ios/logo_shadow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacebarchat/fosscord-web-client/825286882c6e48d630bbded61b59c4cbefbb0114/src/assets/logo/ios/logo_shadow.png -------------------------------------------------------------------------------- /src/assets/logo/ios/resize.sh: -------------------------------------------------------------------------------- 1 | echo "if you haven't already installed sharp-cli do it with: 'npm i -g sharp-cli'" 2 | sharp -i logo.png -o 20.png resize 20 3 | sharp -i logo.png -o 29.png resize 29 4 | sharp -i logo.png -o 32.png resize 32 5 | sharp -i logo.png -o 40.png resize 40 6 | sharp -i logo.png -o 48.png resize 48 7 | sharp -i logo.png -o 50.png resize 50 8 | sharp -i logo.png -o 55.png resize 55 9 | sharp -i logo.png -o 57.png resize 57 10 | sharp -i logo.png -o 58.png resize 58 11 | sharp -i logo.png -o 60.png resize 60 12 | sharp -i logo.png -o 64.png resize 64 13 | sharp -i logo.png -o 72.png resize 72 14 | sharp -i logo.png -o 76.png resize 76 15 | sharp -i logo.png -o 80.png resize 80 16 | sharp -i logo.png -o 87.png resize 80 17 | sharp -i logo.png -o 87.png resize 87 18 | sharp -i logo.png -o 88.png resize 88 19 | sharp -i logo.png -o 100.png resize 100 20 | sharp -i logo.png -o 114.png resize 114 21 | sharp -i logo.png -o 120.png resize 120 22 | sharp -i logo.png -o 128.png resize 128 23 | sharp -i logo.png -o 144.png resize 144 24 | sharp -i logo.png -o 152.png resize 152 25 | sharp -i logo.png -o 167.png resize 167 26 | sharp -i logo.png -o 172.png resize 172 27 | sharp -i logo.png -o 180.png resize 180 28 | sharp -i logo.png -o 196.png resize 180 29 | sharp -i logo.png -o 196.png resize 196 30 | sharp -i logo.png -o 216.png resize 216 31 | sharp -i logo.png -o 256.png resize 256 32 | sharp -i logo.png -o 512.png resize 512 33 | sharp -i logo.png -o 1024.png resize 1024 -------------------------------------------------------------------------------- /src/assets/logo/resize.sh: -------------------------------------------------------------------------------- 1 | echo "if you haven't already installed sharp-cli do it with: 'npm i -g sharp-cli'" 2 | sharp -i logo.png -o 20.png resize 20 3 | sharp -i logo.png -o 29.png resize 29 4 | sharp -i logo.png -o 32.png resize 32 5 | sharp -i logo.png -o 40.png resize 40 6 | sharp -i logo.png -o 48.png resize 48 7 | sharp -i logo.png -o 50.png resize 50 8 | sharp -i logo.png -o 55.png resize 55 9 | sharp -i logo.png -o 57.png resize 57 10 | sharp -i logo.png -o 58.png resize 58 11 | sharp -i logo.png -o 60.png resize 60 12 | sharp -i logo.png -o 64.png resize 64 13 | sharp -i logo.png -o 72.png resize 72 14 | sharp -i logo.png -o 76.png resize 76 15 | sharp -i logo.png -o 80.png resize 80 16 | sharp -i logo.png -o 87.png resize 80 17 | sharp -i logo.png -o 87.png resize 87 18 | sharp -i logo.png -o 88.png resize 88 19 | sharp -i logo.png -o 100.png resize 100 20 | sharp -i logo.png -o 114.png resize 114 21 | sharp -i logo.png -o 120.png resize 120 22 | sharp -i logo.png -o 128.png resize 128 23 | sharp -i logo.png -o 144.png resize 144 24 | sharp -i logo.png -o 152.png resize 152 25 | sharp -i logo.png -o 167.png resize 167 26 | sharp -i logo.png -o 172.png resize 172 27 | sharp -i logo.png -o 180.png resize 180 28 | sharp -i logo.png -o 196.png resize 180 29 | sharp -i logo.png -o 196.png resize 196 30 | sharp -i logo.png -o 216.png resize 216 31 | sharp -i logo.png -o 256.png resize 256 32 | sharp -i logo.png -o 512.png resize 512 33 | sharp -i logo.png -o 1024.png resize 1024 -------------------------------------------------------------------------------- /src/assets/logo/round/100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacebarchat/fosscord-web-client/825286882c6e48d630bbded61b59c4cbefbb0114/src/assets/logo/round/100.png -------------------------------------------------------------------------------- /src/assets/logo/round/1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacebarchat/fosscord-web-client/825286882c6e48d630bbded61b59c4cbefbb0114/src/assets/logo/round/1024.png -------------------------------------------------------------------------------- /src/assets/logo/round/114.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacebarchat/fosscord-web-client/825286882c6e48d630bbded61b59c4cbefbb0114/src/assets/logo/round/114.png -------------------------------------------------------------------------------- /src/assets/logo/round/120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacebarchat/fosscord-web-client/825286882c6e48d630bbded61b59c4cbefbb0114/src/assets/logo/round/120.png -------------------------------------------------------------------------------- /src/assets/logo/round/128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacebarchat/fosscord-web-client/825286882c6e48d630bbded61b59c4cbefbb0114/src/assets/logo/round/128.png -------------------------------------------------------------------------------- /src/assets/logo/round/144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacebarchat/fosscord-web-client/825286882c6e48d630bbded61b59c4cbefbb0114/src/assets/logo/round/144.png -------------------------------------------------------------------------------- /src/assets/logo/round/152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacebarchat/fosscord-web-client/825286882c6e48d630bbded61b59c4cbefbb0114/src/assets/logo/round/152.png -------------------------------------------------------------------------------- /src/assets/logo/round/16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacebarchat/fosscord-web-client/825286882c6e48d630bbded61b59c4cbefbb0114/src/assets/logo/round/16.png -------------------------------------------------------------------------------- /src/assets/logo/round/167.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacebarchat/fosscord-web-client/825286882c6e48d630bbded61b59c4cbefbb0114/src/assets/logo/round/167.png -------------------------------------------------------------------------------- /src/assets/logo/round/172.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacebarchat/fosscord-web-client/825286882c6e48d630bbded61b59c4cbefbb0114/src/assets/logo/round/172.png -------------------------------------------------------------------------------- /src/assets/logo/round/180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacebarchat/fosscord-web-client/825286882c6e48d630bbded61b59c4cbefbb0114/src/assets/logo/round/180.png -------------------------------------------------------------------------------- /src/assets/logo/round/196.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacebarchat/fosscord-web-client/825286882c6e48d630bbded61b59c4cbefbb0114/src/assets/logo/round/196.png -------------------------------------------------------------------------------- /src/assets/logo/round/20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacebarchat/fosscord-web-client/825286882c6e48d630bbded61b59c4cbefbb0114/src/assets/logo/round/20.png -------------------------------------------------------------------------------- /src/assets/logo/round/216.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacebarchat/fosscord-web-client/825286882c6e48d630bbded61b59c4cbefbb0114/src/assets/logo/round/216.png -------------------------------------------------------------------------------- /src/assets/logo/round/256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacebarchat/fosscord-web-client/825286882c6e48d630bbded61b59c4cbefbb0114/src/assets/logo/round/256.png -------------------------------------------------------------------------------- /src/assets/logo/round/29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacebarchat/fosscord-web-client/825286882c6e48d630bbded61b59c4cbefbb0114/src/assets/logo/round/29.png -------------------------------------------------------------------------------- /src/assets/logo/round/32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacebarchat/fosscord-web-client/825286882c6e48d630bbded61b59c4cbefbb0114/src/assets/logo/round/32.png -------------------------------------------------------------------------------- /src/assets/logo/round/40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacebarchat/fosscord-web-client/825286882c6e48d630bbded61b59c4cbefbb0114/src/assets/logo/round/40.png -------------------------------------------------------------------------------- /src/assets/logo/round/48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacebarchat/fosscord-web-client/825286882c6e48d630bbded61b59c4cbefbb0114/src/assets/logo/round/48.png -------------------------------------------------------------------------------- /src/assets/logo/round/50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacebarchat/fosscord-web-client/825286882c6e48d630bbded61b59c4cbefbb0114/src/assets/logo/round/50.png -------------------------------------------------------------------------------- /src/assets/logo/round/512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacebarchat/fosscord-web-client/825286882c6e48d630bbded61b59c4cbefbb0114/src/assets/logo/round/512.png -------------------------------------------------------------------------------- /src/assets/logo/round/55.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacebarchat/fosscord-web-client/825286882c6e48d630bbded61b59c4cbefbb0114/src/assets/logo/round/55.png -------------------------------------------------------------------------------- /src/assets/logo/round/57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacebarchat/fosscord-web-client/825286882c6e48d630bbded61b59c4cbefbb0114/src/assets/logo/round/57.png -------------------------------------------------------------------------------- /src/assets/logo/round/58.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacebarchat/fosscord-web-client/825286882c6e48d630bbded61b59c4cbefbb0114/src/assets/logo/round/58.png -------------------------------------------------------------------------------- /src/assets/logo/round/60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacebarchat/fosscord-web-client/825286882c6e48d630bbded61b59c4cbefbb0114/src/assets/logo/round/60.png -------------------------------------------------------------------------------- /src/assets/logo/round/64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacebarchat/fosscord-web-client/825286882c6e48d630bbded61b59c4cbefbb0114/src/assets/logo/round/64.png -------------------------------------------------------------------------------- /src/assets/logo/round/72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacebarchat/fosscord-web-client/825286882c6e48d630bbded61b59c4cbefbb0114/src/assets/logo/round/72.png -------------------------------------------------------------------------------- /src/assets/logo/round/76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacebarchat/fosscord-web-client/825286882c6e48d630bbded61b59c4cbefbb0114/src/assets/logo/round/76.png -------------------------------------------------------------------------------- /src/assets/logo/round/80.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacebarchat/fosscord-web-client/825286882c6e48d630bbded61b59c4cbefbb0114/src/assets/logo/round/80.png -------------------------------------------------------------------------------- /src/assets/logo/round/87.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacebarchat/fosscord-web-client/825286882c6e48d630bbded61b59c4cbefbb0114/src/assets/logo/round/87.png -------------------------------------------------------------------------------- /src/assets/logo/round/88.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacebarchat/fosscord-web-client/825286882c6e48d630bbded61b59c4cbefbb0114/src/assets/logo/round/88.png -------------------------------------------------------------------------------- /src/assets/logo/round/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacebarchat/fosscord-web-client/825286882c6e48d630bbded61b59c4cbefbb0114/src/assets/logo/round/logo.png -------------------------------------------------------------------------------- /src/assets/logo/round/resize.sh: -------------------------------------------------------------------------------- 1 | 20 2 | 29 3 | 32 4 | 40 5 | 48 6 | 50 7 | 55 8 | 57 9 | 58 10 | 60 11 | 64 12 | 72 13 | 76 14 | 80 15 | 80 16 | 87 17 | 88 18 | 100 19 | 114 20 | 120 21 | 128 22 | 144 23 | 152 24 | 167 25 | 172 26 | 180 27 | 180 28 | 196 29 | 216 30 | 256 31 | 512 32 | 1024 -------------------------------------------------------------------------------- /src/assets/logo_big_transparent.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacebarchat/fosscord-web-client/825286882c6e48d630bbded61b59c4cbefbb0114/src/assets/logo_big_transparent.png -------------------------------------------------------------------------------- /src/assets/logo_transparent.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacebarchat/fosscord-web-client/825286882c6e48d630bbded61b59c4cbefbb0114/src/assets/logo_transparent.png -------------------------------------------------------------------------------- /src/assets/radio.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacebarchat/fosscord-web-client/825286882c6e48d630bbded61b59c4cbefbb0114/src/assets/settings.png -------------------------------------------------------------------------------- /src/assets/settings.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /src/assets/speak.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/assets/speaker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacebarchat/fosscord-web-client/825286882c6e48d630bbded61b59c4cbefbb0114/src/assets/speaker.png -------------------------------------------------------------------------------- /src/assets/voice.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spacebarchat/fosscord-web-client/825286882c6e48d630bbded61b59c4cbefbb0114/src/assets/voice.png -------------------------------------------------------------------------------- /src/assets/voice.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /src/components/Branding.scss: -------------------------------------------------------------------------------- 1 | .branding { 2 | display: flex; 3 | justify-content: center; 4 | align-items: center; 5 | 6 | img { 7 | width: 2rem; 8 | margin-right: 1rem; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/components/Branding.tsx: -------------------------------------------------------------------------------- 1 | import React, { ReactNode } from "react"; 2 | import Logo from "../assets/logo_big_transparent.png"; 3 | import "./Branding.scss"; 4 | 5 | // eslint-disable-next-line import/no-anonymous-default-export 6 | export default function ({ children }: { children: ReactNode }) { 7 | return ( 8 |
9 | Logo 10 |

Fosscord

11 |
12 | ); 13 | } 14 | -------------------------------------------------------------------------------- /src/components/DevSettings.tsx: -------------------------------------------------------------------------------- 1 | export default { 2 | // @ts-ignore 3 | reload: () => window.location.reload(), 4 | }; 5 | -------------------------------------------------------------------------------- /src/components/Drawer.scss: -------------------------------------------------------------------------------- 1 | .content { 2 | display: none; 3 | 4 | &.show { 5 | display: flex; 6 | } 7 | 8 | &.show .guild-container { 9 | padding-top: 4.5rem; 10 | } 11 | } 12 | 13 | .drawer-enabled { 14 | filter: blur(3px); 15 | user-select: none; 16 | pointer-events: none; 17 | 18 | .topbar header { 19 | padding-left: 0 !important; 20 | } 21 | } 22 | 23 | .menuBtn { 24 | position: fixed; 25 | z-index: 1000; 26 | top: 0; 27 | left: 0; 28 | width: 66px; 29 | height: 58px; 30 | } 31 | 32 | @media (min-width: 600px) { 33 | .content { 34 | display: flex !important; 35 | 36 | &.show .guild-container { 37 | padding-top: 0.5em !important; 38 | } 39 | } 40 | 41 | .drawer-enabled { 42 | filter: none !important; 43 | user-select: all !important; 44 | pointer-events: all !important; 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /src/components/Drawer.tsx: -------------------------------------------------------------------------------- 1 | import React, { ReactNode, useState } from "react"; 2 | import GuildSidebar from "../pages/guild/guild"; 3 | import { Channel, Guild } from "fosscord.js"; 4 | import ChannelSidebar from "../pages/channel/sidebar"; 5 | import { Button } from "../framework/Button"; 6 | import "./Drawer.scss"; 7 | 8 | const Drawer = ({ 9 | children, 10 | channel, 11 | guild, 12 | }: { 13 | children?: ReactNode; 14 | channel?: Channel; 15 | guild?: Guild; 16 | }) => { 17 | const [visibility, setVisibility] = useState(false); 18 | 19 | return ( 20 | <> 21 | 28 |
29 | 30 | 31 |
32 |
36 | {children} 37 |
38 | 39 | ); 40 | }; 41 | 42 | export default Drawer; 43 | -------------------------------------------------------------------------------- /src/components/ErrorBoundary.scss: -------------------------------------------------------------------------------- 1 | .error-boundary { 2 | > * { 3 | margin: 0.5rem; 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /src/components/ErrorBoundary.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import { Button } from "../framework/Button"; 3 | import "./ErrorBoundary.scss"; 4 | 5 | export default class ErrorBoundary extends React.Component { 6 | state = { hasError: false, error: Error }; 7 | 8 | static getDerivedStateFromError(error: Error) { 9 | console.error(error); 10 | // Update state so the next render will show the fallback UI. 11 | return { hasError: true, error }; 12 | } 13 | 14 | componentDidCatch(error: any, errorInfo: any) { 15 | // TODO: log the error to an error reporting service 16 | console.error(error, errorInfo); 17 | } 18 | 19 | retry = () => { 20 | console.log("retry"); 21 | this.setState({ hasError: false }); 22 | }; 23 | 24 | render() { 25 | if (this.state.hasError) { 26 | var message = "Fosscord crashed"; 27 | if (this.state.error?.name === "ChunkLoadError") { 28 | message = "Please connect to the internet"; 29 | } 30 | // You can render any custom fallback UI 31 | return ( 32 |
33 |

{message}

34 | 37 | 38 | 41 |
42 | ); 43 | } 44 | 45 | return this.props.children; 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /src/components/Routes.tsx: -------------------------------------------------------------------------------- 1 | import React, { Suspense, ReactNode } from "react"; 2 | import { Router, Switch, Route, Redirect } from "../util/Router"; 3 | import ErrorBoundary from "./ErrorBoundary"; 4 | import ChannelMessagesPage from "../pages/channel/messages"; 5 | import LoginPage from "../pages/auth/login"; 6 | import RegisterPage from "../pages/auth/register"; 7 | import { Spinner } from "../framework/Spinner"; 8 | import PrivateRoute from "./private-route"; 9 | import NotFound from "../pages/NotFound"; 10 | // import Friends from "../pages/friends/friends"; 11 | 12 | export default function Routes({ children }: { children?: ReactNode }) { 13 | return ( 14 | 15 | 18 | 19 | 20 | } 21 | > 22 | 23 | 24 | 25 | 26 | 27 | 32 | 37 | 38 | 39 | 40 | 41 | 42 | {children} 43 | 44 | 45 | 46 | ); 47 | } 48 | -------------------------------------------------------------------------------- /src/components/private-route.tsx: -------------------------------------------------------------------------------- 1 | import { useState } from "react"; 2 | import { Route, RouteProps } from "react-router-dom"; 3 | import client from "../Client"; 4 | import LoadingPage from "../pages/loading-page"; 5 | 6 | // this route ensures that the user is logged in, else redirects them 7 | const PrivateRoute: React.FunctionComponent = (props) => { 8 | const [ready, setReady] = useState(false); 9 | client.on("ready", () => { 10 | setReady(true); 11 | }); 12 | 13 | if (!ready) return ; 14 | else return ; 15 | }; 16 | 17 | export default PrivateRoute; 18 | -------------------------------------------------------------------------------- /src/framework/Button.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import { ColorProps, deleteProps, getColor } from "./Types"; 3 | import { Spinner } from "./Spinner"; 4 | import "@fosscord/ui/scss/button.scss"; 5 | 6 | export interface ButtonProps 7 | extends ColorProps, 8 | React.DetailedHTMLProps< 9 | React.ButtonHTMLAttributes, 10 | HTMLButtonElement 11 | > { 12 | loading?: boolean; 13 | } 14 | 15 | export function Button(p: ButtonProps) { 16 | let props = { ...p }; 17 | props.className = `button ${props.className || ""} ${getColor(props)}`; 18 | 19 | return ( 20 | 30 | ); 31 | } 32 | -------------------------------------------------------------------------------- /src/framework/Card.tsx: -------------------------------------------------------------------------------- 1 | import "@fosscord/ui/scss/card.scss"; 2 | import { MouseEventHandler, ReactNode } from "react"; 3 | import { Icon } from "./Icon"; 4 | 5 | export interface CardProps { 6 | active?: boolean; 7 | children?: ReactNode; 8 | header?: string; 9 | icon?: string; 10 | title?: string; 11 | description?: string; 12 | verified?: boolean; 13 | partnered?: boolean; 14 | onClick?: MouseEventHandler; 15 | } 16 | 17 | export function Card(props: CardProps) { 18 | return ( 19 |
24 | 28 | 29 | 30 | 31 |
32 |
33 | {props.verified && ( 34 | 39 | )} 40 | {props.title} 41 |
42 |

{props.description}

43 | 44 | {props.children} 45 |
46 |
47 | ); 48 | } 49 | -------------------------------------------------------------------------------- /src/framework/Checkbox.tsx: -------------------------------------------------------------------------------- 1 | import { deleteProps } from "./Types"; 2 | import "@fosscord/ui/scss/icons.scss"; 3 | import "@fosscord/ui/scss/checkbox.scss"; 4 | import { ReactNode } from "react"; 5 | 6 | export interface CheckboxProps 7 | extends React.DetailedHTMLProps, HTMLInputElement> { 8 | labelText?: ReactNode; 9 | error?: ReactNode; 10 | } 11 | 12 | export function Checkbox(p: CheckboxProps) { 13 | let props = { ...p }; 14 | 15 | return ( 16 | 27 | ); 28 | } 29 | -------------------------------------------------------------------------------- /src/framework/Dropdown.tsx: -------------------------------------------------------------------------------- 1 | import "@fosscord/ui/scss/icons.scss"; 2 | import "@fosscord/ui/scss/dropdown.scss"; 3 | import React, { MouseEvent, MouseEventHandler, ReactElement, useEffect, useRef, useState } from "react"; 4 | 5 | export interface DropdownProps { 6 | labelText?: string; 7 | className?: string; 8 | children: ReactElement[]; 9 | selected: number; 10 | onChange?: (index: number, element: ReactElement) => any; 11 | } 12 | 13 | export function Dropdown(props: DropdownProps) { 14 | const dropdownRef = useRef(null); 15 | const [open, setOpen] = useState(false); 16 | const { selected } = props; 17 | 18 | const children = props.children.map((x, i) => { 19 | const child = { ...x, props: { ...x.props } }; 20 | if (i === selected) child.props.selected = true; 21 | 22 | if (!child.props.onClick) { 23 | child.props.onClick = (event: MouseEvent) => { 24 | const index = props.children.findIndex((y) => y.props.id === child.props.id); 25 | setOpen(false); 26 | props.onChange?.(index, props.children[index]); 27 | }; 28 | } 29 | 30 | return child; 31 | }); 32 | 33 | useEffect(() => { 34 | // this will close the dropdown menu if the user clicks on anything else then the dropdown menu 35 | function handleClick(this: HTMLElement, event: Event) { 36 | var element = dropdownRef.current; 37 | // @ts-ignore 38 | if (event.target !== element && !element?.contains(event.target)) { 39 | setOpen(false); 40 | } 41 | } 42 | 43 | function handleKeypress(event: KeyboardEvent) { 44 | if (event.keyCode !== 27) return 45 | setOpen(false) 46 | } 47 | 48 | window.addEventListener("keypress", handleKeypress); 49 | window.addEventListener("click", handleClick); 50 | 51 | return () => { 52 | window.removeEventListener("click", handleClick); 53 | window.removeEventListener("keypress", handleKeypress); 54 | }; 55 | }, []); 56 | 57 | return ( 58 | 59 |
{props.labelText}
60 |
61 |
setOpen(!open)}> 62 | 63 | {children[selected] && { 64 | ...children[selected], 65 | props: { ...children[selected]?.props, item: true }, 66 | }} 67 | 68 | 69 | 70 | 71 |
72 |
{children}
73 |
74 |
75 | ); 76 | } 77 | 78 | export interface DropdownItemProps { 79 | className?: string; 80 | onClick?: MouseEventHandler; 81 | name?: string; 82 | icon?: string | any; 83 | category?: string; 84 | selected?: boolean; 85 | children?: React.ReactNode; 86 | id: string; 87 | item?: boolean; 88 | } 89 | 90 | export function DropdownItem(props: DropdownItemProps) { 91 | return React.createElement( 92 | props.item ? React.Fragment : "div", 93 | !props.item 94 | ? { 95 | id: props.id, 96 | className: `item ${props.className || ""} ${props.selected ? "selected" : ""}`, 97 | onClick: props.onClick, 98 | key: props.id, 99 | } 100 | : { 101 | key: props.id, 102 | }, 103 | <> 104 | {props.icon && 105 | (typeof props.icon === "string" ? ( 106 | 107 | ) : ( 108 | props.icon 109 | ))} 110 | {props.name} 111 | {props.category}{" "} 112 | 113 | ); 114 | } 115 | -------------------------------------------------------------------------------- /src/framework/Icon.tsx: -------------------------------------------------------------------------------- 1 | import { MouseEventHandler } from "react"; 2 | 3 | export interface IconProps { 4 | className?: string; 5 | icon?: string; 6 | size?: string; 7 | color?: string; 8 | style?: React.CSSProperties; 9 | onClick?: MouseEventHandler; 10 | } 11 | 12 | export function Icon(props: IconProps) { 13 | return ( 14 | 19 | ); 20 | } 21 | -------------------------------------------------------------------------------- /src/framework/Input.tsx: -------------------------------------------------------------------------------- 1 | import { ReactNode, useState } from "react"; 2 | import { deleteProps } from "./Types"; 3 | import "@fosscord/ui/scss/input-fields.scss"; 4 | 5 | export interface InputProps 6 | extends React.DetailedHTMLProps, HTMLInputElement> { 7 | labelText?: string; 8 | children?: ReactNode; 9 | error?: ReactNode; 10 | } 11 | 12 | export function Input(p: InputProps) { 13 | const props = { ...p }; 14 | props.className = `input ${props.className || ""}`; 15 | 16 | const [value, setValue] = useState(""); 17 | 18 | if (!props.onChange && !props.value) { 19 | props.value = value; 20 | props.onChange = (e) => setValue(e.target.value); 21 | } 22 | 23 | return ( 24 | 32 | ); 33 | } 34 | -------------------------------------------------------------------------------- /src/framework/Link.tsx: -------------------------------------------------------------------------------- 1 | import { ReactNode } from "react"; 2 | import { Link as RRLink } from "react-router-dom"; 3 | 4 | export interface LinkProps { 5 | external?: boolean; 6 | to?: string; 7 | children: ReactNode; 8 | } 9 | 10 | export function Link(props: LinkProps) { 11 | if (!props.to) return <>{props.children}; 12 | if (props.external) 13 | return ( 14 | 15 | {props.children} 16 | 17 | ); 18 | 19 | return {props.children}; 20 | } 21 | -------------------------------------------------------------------------------- /src/framework/List.tsx: -------------------------------------------------------------------------------- 1 | import { MouseEventHandler, ReactNode } from "react"; 2 | import { ColorProps, getColor } from "./Types"; 3 | import "@fosscord/ui/scss/list.scss"; 4 | 5 | export interface ListProps { 6 | children?: ReactNode; 7 | accent?: boolean; 8 | collapsed?: boolean; 9 | className?: string; 10 | label?: string; 11 | } 12 | 13 | export function List(p: ListProps) { 14 | const props = { ...p }; 15 | if (!props.className) props.className = ""; 16 | props.className += " list"; 17 | if (props.accent) props.className += " accent"; 18 | if (props.collapsed) props.className += " collapsed"; 19 | 20 | return ( 21 |
    22 | {props.label &&
  • {props.label}
  • } 23 | {props.children} 24 |
25 | ); 26 | } 27 | 28 | export interface ListItemProps extends ColorProps { 29 | seperator?: boolean; 30 | className?: string; 31 | children?: ReactNode; 32 | active?: boolean; 33 | onClick?: MouseEventHandler; 34 | state?: string; 35 | setState?: React.Dispatch>; 36 | name?: string; 37 | } 38 | 39 | export function ListItem(p: ListItemProps) { 40 | const props = { ...p }; 41 | if (!props.className) props.className = ""; 42 | if (props.seperator) props.className += " seperator"; 43 | else props.className += " item"; 44 | if (props.active || props.name === props.state) props.className += " active"; 45 | if (!props.onClick && props.name) props.onClick = () => props.setState?.(props.name as string); 46 | 47 | props.className += getColor(props); 48 | 49 | return ( 50 |
  • 51 | {props.children} 52 |
  • 53 | ); 54 | } 55 | -------------------------------------------------------------------------------- /src/framework/LittleModal.scss: -------------------------------------------------------------------------------- 1 | @media screen and (max-width: 640px) { 2 | .modal { 3 | width: 100vw !important; 4 | } 5 | } 6 | 7 | .overlay { 8 | transition: all ease 0.2s; 9 | &.open { 10 | position: fixed; 11 | transition: all 0.2s; 12 | top: 0; 13 | bottom: 0; 14 | left: 0; 15 | right: 0; 16 | z-index: 2000; 17 | background-color: rgba(0, 0, 0, 0.5); 18 | } 19 | } 20 | 21 | .modal, 22 | .modal.open { 23 | position: absolute !important; 24 | display: block !important; 25 | backface-visibility: hidden !important; 26 | width: 440px; 27 | left: 50% !important; 28 | transform: translate(-50%, 25%) !important; 29 | height: auto !important; 30 | max-height: 55% !important; 31 | background-color: #36393f !important; 32 | -webkit-box-shadow: 0 0 0 1px rgba(32, 34, 37, 0.6), 0 2px 10px 0 rgba(0, 0, 0, 0.2) !important; 33 | box-shadow: 0 0 0 1px rgba(32, 34, 37, 0.6), 0 2px 10px 0 rgba(0, 0, 0, 0.2) !important; 34 | .close-wrapper { 35 | top: calc(var(--modal-padding) - 10%); 36 | right: calc(var(--modal-padding) - 10%); 37 | } 38 | } 39 | .modal-background .modal-open { 40 | transform: none !important; 41 | } 42 | 43 | .modal .close-wrapper .close { 44 | border: none !important; 45 | } 46 | -------------------------------------------------------------------------------- /src/framework/LittleModal.tsx: -------------------------------------------------------------------------------- 1 | import React, { useEffect } from "react"; 2 | import "@fosscord/ui/scss/modal.scss"; 3 | import "./LittleModal.scss"; 4 | import { Route } from "react-router"; 5 | 6 | export interface ModalProps { 7 | children?: React.ReactNode; 8 | open: boolean; 9 | onClose?: () => any; 10 | className?: string; 11 | } 12 | 13 | export function LittleModal(props: ModalProps) { 14 | useEffect(() => { 15 | function handleKeyDown(event: Event) { 16 | if ((event as KeyboardEvent).key !== "Escape") return; 17 | props.onClose?.(); 18 | } 19 | 20 | document.addEventListener("keydown", handleKeyDown); 21 | 22 | function handleClick(evt: any) { 23 | const insideItem = document.querySelector(".modal.open"); 24 | let targetElement = evt.target; // clicked element 25 | 26 | do { 27 | if (targetElement === insideItem) { 28 | return; 29 | } 30 | targetElement = targetElement.parentNode; 31 | } while (targetElement); 32 | 33 | if (props.open) { 34 | props.onClose?.(); 35 | } 36 | } 37 | 38 | document.addEventListener("click", handleClick); 39 | 40 | return () => { 41 | document.removeEventListener("keydown", handleKeyDown); 42 | document.removeEventListener("click", handleClick); 43 | }; 44 | }); 45 | 46 | return ( 47 | 48 |
    49 |
    50 | 51 | 52 | 53 | 54 | 55 | {props.children} 56 |
    57 |
    58 |
    59 | ); 60 | } 61 | -------------------------------------------------------------------------------- /src/framework/Modal.scss: -------------------------------------------------------------------------------- 1 | @media screen and (max-width: 640px) { 2 | .modal { 3 | padding-top: 7em; 4 | 5 | .close-wrapper { 6 | top: calc(var(--modal-padding) - 3%); 7 | right: calc(var(--modal-padding) - 3%); 8 | } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/framework/Modal.tsx: -------------------------------------------------------------------------------- 1 | import React, { useEffect } from "react"; 2 | import "@fosscord/ui/scss/modal.scss"; 3 | import "./Modal.scss"; 4 | import { Route } from "react-router"; 5 | 6 | export interface ModalProps { 7 | children?: React.ReactNode; 8 | open?: boolean; 9 | onClose?: () => any; 10 | className?: string; 11 | } 12 | 13 | export function Modal(props: ModalProps) { 14 | useEffect(() => { 15 | function handleKeyDown(event: Event) { 16 | if ((event as KeyboardEvent).keyCode !== 27) return; // matches Escape 17 | props.onClose?.(); 18 | } 19 | 20 | document.addEventListener("keydown", handleKeyDown); 21 | 22 | function handleClick(evt: any) { 23 | const insideItem = document.querySelector(".modal.open"); 24 | let targetElement = evt.target; // clicked element 25 | 26 | do { 27 | if (targetElement === insideItem) { 28 | return; 29 | } 30 | targetElement = targetElement.parentNode; 31 | } while (targetElement); 32 | 33 | if (props.open) { 34 | props.onClose?.(); 35 | } 36 | } 37 | 38 | document.addEventListener("click", handleClick); 39 | 40 | return () => { 41 | document.removeEventListener("keydown", handleKeyDown); 42 | document.removeEventListener("click", handleClick); 43 | }; 44 | }); 45 | 46 | if (props.open) document.querySelector(".modal-background")?.classList.add("modal-open"); 47 | if (!props.open) document.querySelector(".modal-background")?.classList.remove("modal-open"); 48 | 49 | return ( 50 | 51 |
    52 | 53 | 54 | 55 | 56 | ESC 57 | 58 | {props.children} 59 |
    60 |
    61 | ); 62 | } 63 | -------------------------------------------------------------------------------- /src/framework/Spinner.scss: -------------------------------------------------------------------------------- 1 | .spinner { 2 | display: inline-block; 3 | position: relative; 4 | --size: 80px; 5 | --border-width: 8px; 6 | width: var(--size); 7 | height: var(--size); 8 | 9 | div { 10 | box-sizing: border-box; 11 | display: block; 12 | position: absolute; 13 | width: 80%; 14 | height: 80%; 15 | margin: var(--border-width); 16 | border: var(--border-width) solid #fff; 17 | border-radius: 50%; 18 | animation: spinner 1.2s cubic-bezier(0.5, 0, 0.5, 1) infinite; 19 | border-color: #fff transparent transparent transparent; 20 | 21 | &:nth-child(1) { 22 | animation-delay: -0.45s; 23 | } 24 | &:nth-child(2) { 25 | animation-delay: -0.3s; 26 | } 27 | &:nth-child(3) { 28 | animation-delay: -0.15s; 29 | } 30 | } 31 | } 32 | 33 | @keyframes spinner { 34 | 0% { 35 | transform: rotate(0deg); 36 | } 37 | 100% { 38 | transform: rotate(360deg); 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /src/framework/Spinner.tsx: -------------------------------------------------------------------------------- 1 | import { deleteProps } from "./Types"; 2 | import "./Spinner.scss"; 3 | 4 | export interface SpinnerProps 5 | extends React.DetailedHTMLProps, HTMLDivElement> { 6 | size?: string; 7 | borderWidth?: string; 8 | } 9 | 10 | export function Spinner(p: SpinnerProps) { 11 | const props = { ...p }; 12 | if (!props.className) props.className = ""; 13 | props.className += " spinner"; 14 | if (!props.style) props.style = {}; 15 | // @ts-ignore 16 | props.style["--size"] = props.size; 17 | // @ts-ignore 18 | props.style["--border-width"] = props.borderWidth; 19 | 20 | return ( 21 |
    22 |
    23 |
    24 |
    25 |
    26 | {props.children} 27 |
    28 | ); 29 | } 30 | -------------------------------------------------------------------------------- /src/framework/Text.tsx: -------------------------------------------------------------------------------- 1 | import React, { ReactNode } from "react"; 2 | import { ColorProps, deleteProps } from "./Types"; 3 | 4 | export interface TextProps extends ColorProps { 5 | title?: boolean; 6 | headline?: boolean; 7 | secondary?: boolean; 8 | muted?: boolean; 9 | link?: boolean; 10 | anchor?: boolean; 11 | tag?: string; 12 | children?: ReactNode; 13 | className?: string; 14 | } 15 | 16 | export function Text(p: TextProps) { 17 | const props = { ...p }; 18 | if (!props.className) props.className = ""; 19 | if (props.title) props.className += " title"; 20 | if (props.headline) { 21 | props.className += " headline"; 22 | if (!props.tag) props.tag = "h1"; 23 | } 24 | if (props.secondary) props.className += " secondary"; 25 | if (props.muted) props.className += " muted"; 26 | if (props.link) props.className += " link"; 27 | if (props.anchor) props.className += " anchor"; 28 | 29 | props.className = "title " + props.className; 30 | 31 | return React.createElement( 32 | props.tag || "p", 33 | deleteProps(props, "tag", "title", "headline", "secondary", "muted", "link", "anchor"), 34 | props.children 35 | ); 36 | } 37 | -------------------------------------------------------------------------------- /src/framework/Types.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | export interface ColorProps { 4 | primary?: boolean; 5 | secondary?: boolean; 6 | success?: boolean; 7 | warning?: boolean; 8 | danger?: boolean; 9 | } 10 | 11 | export interface Children { 12 | children?: React.ReactNode; 13 | } 14 | 15 | export function getColor(props: ColorProps) { 16 | const value = (() => { 17 | if (props.primary) return " primary"; 18 | if (props.danger) return " danger"; 19 | if (props.secondary) return " secondary"; 20 | if (props.success) return " success"; 21 | if (props.warning) return " warning"; 22 | })(); 23 | deleteProps(props, "primary", "danger", "secondary", "success", "warning"); 24 | 25 | return value || ""; 26 | } 27 | 28 | export function deleteProps(props: any, ...keys: string[]) { 29 | for (const key of keys) { 30 | delete props[key]; 31 | } 32 | return props; 33 | } 34 | -------------------------------------------------------------------------------- /src/framework/radio.js: -------------------------------------------------------------------------------- 1 | export const Radio = (props) => { 2 | return ( 3 | 4 | 10 | 11 | 12 | ); 13 | }; 14 | 15 | export const ChannelSVG = (props) => { 16 | return ( 17 | 18 | 25 | 26 | ); 27 | }; 28 | 29 | export const VoiceSVG = (props) => { 30 | return ( 31 | 39 | 47 | 48 | ); 49 | }; 50 | 51 | export const FaChevronDown = (props) => { 52 | return ( 53 | 54 | 58 | 59 | ); 60 | }; 61 | 62 | export const FaHashtag = (props) => { 63 | return ( 64 | 65 | 69 | 70 | ); 71 | }; 72 | 73 | export const FaVolumeUp = (props) => { 74 | return ( 75 | 76 | 80 | 81 | ); 82 | }; 83 | -------------------------------------------------------------------------------- /src/framework/tooltip.scss: -------------------------------------------------------------------------------- 1 | .tooltip { 2 | position: relative; 3 | cursor: pointer; 4 | .tooltip-text { 5 | position: absolute; 6 | z-index: 1; 7 | visibility: hidden; 8 | border: none; 9 | border-radius: 5px; 10 | padding: 7px; 11 | white-space: nowrap; 12 | text-align: center; 13 | &.black { 14 | background-color: black; 15 | color: white; 16 | --tooltip-arrow-color: black; 17 | } 18 | &.blue { 19 | background-color: #7688d4; 20 | color: white; 21 | --tooltip-arrow-color: #7688d4; 22 | } 23 | &.top { 24 | width: fit-content; 25 | bottom: 150%; 26 | margin-left: -75%; 27 | } 28 | &.bottom { 29 | width: fit-content; 30 | top: 150%; 31 | margin-left: -75%; 32 | } 33 | &.left { 34 | top: -5px; 35 | right: 110%; 36 | } 37 | &.right { 38 | top: -5px; 39 | left: 110%; 40 | } 41 | } 42 | 43 | .tooltip-text.top::after { 44 | content: " "; 45 | position: absolute; 46 | top: 100%; 47 | left: 50%; 48 | margin-left: -5px; 49 | border-width: 5px; 50 | border-style: solid; 51 | border-color: var(--tooltip-arrow-color) transparent transparent transparent; 52 | } 53 | 54 | .tooltip-text.bottom::after { 55 | content: " "; 56 | position: absolute; 57 | bottom: 100%; /* At the top of the tooltip */ 58 | left: 50%; 59 | margin-left: -5px; 60 | border-width: 5px; 61 | border-style: solid; 62 | border-color: transparent transparent var(--tooltip-arrow-color) transparent; 63 | } 64 | 65 | .tooltip-text.left::after { 66 | content: " "; 67 | position: absolute; 68 | top: 50%; 69 | left: 100%; /* To the right of the tooltip */ 70 | margin-top: -5px; 71 | border-width: 5px; 72 | border-style: solid; 73 | border-color: transparent transparent transparent var(--tooltip-arrow-color); 74 | } 75 | 76 | .tooltip-text.right::after { 77 | content: " "; 78 | position: absolute; 79 | top: 50%; 80 | right: 100%; /* To the left of the tooltip */ 81 | margin-top: -5px; 82 | border-width: 5px; 83 | border-style: solid; 84 | border-color: transparent var(--tooltip-arrow-color) transparent transparent; 85 | } 86 | 87 | &:hover { 88 | .tooltip-text { 89 | visibility: visible; 90 | animation-name: openTooltip; 91 | animation-duration: 250ms; 92 | animation-fill-mode: linear; 93 | } 94 | } 95 | } 96 | 97 | @keyframes openTooltip { 98 | from { 99 | opacity: 0; 100 | } 101 | to { 102 | opacity: 1; 103 | } 104 | } 105 | -------------------------------------------------------------------------------- /src/index.scss: -------------------------------------------------------------------------------- 1 | @import "~@fosscord/ui/scss/general.scss"; 2 | @import "~@fosscord/ui/scss/text.scss"; 3 | @import "~@fosscord/ui/scss/icons.scss"; 4 | 5 | body { 6 | margin: 0; 7 | 8 | -webkit-font-smoothing: antialiased; 9 | -moz-osx-font-smoothing: grayscale; 10 | } 11 | 12 | html, 13 | body, 14 | input, 15 | textarea, 16 | button { 17 | background: var(--background-primary); 18 | color: var(--TEXT-default); 19 | 20 | font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", 21 | "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", 22 | sans-serif; 23 | } 24 | 25 | html, 26 | body, 27 | .page, 28 | #root { 29 | height: 100%; 30 | width: 100%; 31 | } 32 | 33 | html, 34 | body { 35 | position: fixed; 36 | overflow: hidden; 37 | } 38 | 39 | .page-center { 40 | flex-grow: 1; 41 | display: flex; 42 | justify-content: center; 43 | align-items: center; 44 | width: 100%; 45 | height: 100%; 46 | flex-direction: column; 47 | } 48 | 49 | input { 50 | outline: 0; 51 | padding-left: 0; 52 | } 53 | 54 | h1 { 55 | font-size: 18px; 56 | font-weight: 600; 57 | line-height: 22px; 58 | white-space: nowrap; 59 | text-overflow: ellipsis; 60 | } 61 | 62 | .inputWrapper { 63 | margin-bottom: 20px; 64 | } 65 | 66 | .contentWrap { 67 | width: 100%; 68 | display: flex; 69 | flex-direction: row; 70 | } 71 | 72 | .view { 73 | width: 100%; 74 | height: 100vh; 75 | background: #202225; 76 | .notFound { 77 | width: 100%; 78 | height: 100%; 79 | display: table; 80 | header { 81 | display: table-cell; 82 | vertical-align: middle; 83 | text-align: center; 84 | h1 { 85 | font-size: 50px; 86 | color: white; 87 | font-weight: bold; 88 | } 89 | .description { 90 | font-size: 18px; 91 | color: white; 92 | font-weight: 100; 93 | } 94 | a { 95 | position: absolute; 96 | z-index: 9999; 97 | left: 47%; 98 | } 99 | button { 100 | border: 3px solid gray; 101 | padding: 15px; 102 | border-radius: 15px; 103 | font-size: 15px; 104 | font-weight: bold; 105 | color: #fff; 106 | cursor: pointer; 107 | background-color: transparent; 108 | } 109 | } 110 | .particles { 111 | width: 100%; 112 | height: 100%; 113 | position: absolute; 114 | top: 0; 115 | left: 0; 116 | } 117 | } 118 | } 119 | -------------------------------------------------------------------------------- /src/index.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import ReactDOM from "react-dom"; 3 | import "./index.scss"; 4 | import App from "./App"; 5 | import reportWebVitals from "./reportWebVitals"; 6 | 7 | ReactDOM.render( 8 | 9 | 10 | , 11 | document.getElementById("root") 12 | ); 13 | 14 | // If you want to start measuring performance in your app, pass a function 15 | // to log results (for example: reportWebVitals(console.log)) 16 | // or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals 17 | reportWebVitals(); 18 | -------------------------------------------------------------------------------- /src/models/networks.ts: -------------------------------------------------------------------------------- 1 | import FosscordLogo from "../assets/logo_big_transparent.png"; 2 | 3 | export const network = { 4 | id: "0", 5 | config: {}, 6 | verified: true, 7 | name: "Fosscord", 8 | invite: "fosscord.com", 9 | api: "https://api.fosscord.com", 10 | version: 8, 11 | description: "Offical fosscord.com network", 12 | cdn: "https://cdn.fosscord.com", 13 | gateway: "wss://gateway.fosscord.com", 14 | host: "fosscord.com", 15 | icon: FosscordLogo, 16 | splash: 17 | "https://images.opencollective.com/discordhooks/1f8f486/background.png", 18 | termsOfService: "", 19 | }; 20 | 21 | export interface Network { 22 | id: string; 23 | config: any; // TODO 24 | invite: string; 25 | gateway: string; 26 | discord: boolean; // if it is the offical discord instance, used for backwards compatibility 27 | api: string; 28 | cdn: string; 29 | host: string; 30 | version: number; 31 | verified: boolean; 32 | name?: string; 33 | description?: string; 34 | splash?: string; 35 | icon?: string; 36 | termsOfService?: string; 37 | } 38 | -------------------------------------------------------------------------------- /src/pages/NotFound.tsx: -------------------------------------------------------------------------------- 1 | import Particles from "react-particles-js"; 2 | import { Link } from "react-router-dom"; 3 | 4 | const NotFoundPage: React.FunctionComponent = () => { 5 | return ( 6 |
    7 |
    8 |
    9 |
    10 |

    Not Found

    11 | 12 | 13 | 14 |
    15 |
    16 | 17 |
    18 |
    19 | ); 20 | }; 21 | 22 | export default NotFoundPage; 23 | -------------------------------------------------------------------------------- /src/pages/TopScreen.scss: -------------------------------------------------------------------------------- 1 | .network.page { 2 | .sidebar { 3 | flex-direction: column; 4 | justify-content: flex-start; 5 | align-items: flex-end; 6 | margin-top: -1rem; 7 | 8 | .list { 9 | max-width: 300px; 10 | width: 100%; 11 | 12 | .item { 13 | padding: 10px; 14 | margin-bottom: 7px; 15 | 16 | .icon { 17 | --size: 16px; 18 | 19 | &.left { 20 | margin-right: 1rem; 21 | } 22 | } 23 | } 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/pages/auth/Login.scss: -------------------------------------------------------------------------------- 1 | .page { 2 | background-image: url("../../assets/login.svg") !important; 3 | background-size: cover; 4 | background-repeat: no-repeat; 5 | } 6 | 7 | .page.register, 8 | .page.login, 9 | .page.add { 10 | display: flex; 11 | justify-content: center; 12 | align-items: center; 13 | background-size: cover; 14 | 15 | .form { 16 | max-width: 480px; 17 | flex-grow: 1; 18 | box-shadow: 0 2px 10px 0 rgb(0 0 0 / 20%); 19 | border-radius: 5px; 20 | padding: 10px; 21 | max-height: 100%; 22 | overflow-x: hidden; 23 | overflow-y: auto; 24 | background: var(--background-secondary); 25 | 26 | @media screen and (max-width: 950px) { 27 | & { 28 | margin-right: initial; 29 | height: 100%; 30 | box-shadow: 0; 31 | padding-bottom: 0; 32 | padding-top: 10vh; 33 | } 34 | } 35 | 36 | > *:not(.modal):not(.error) { 37 | margin: calc(var(--element-margin) * 2); 38 | height: auto; 39 | width: calc(100% - calc(var(--element-margin) * 4)); 40 | } 41 | 42 | .checkbox { 43 | margin-bottom: 0px !important; 44 | } 45 | 46 | .headline { 47 | text-align: center; 48 | margin-bottom: 1.5rem; 49 | } 50 | 51 | .small { 52 | font-size: small; 53 | margin-top: 0; 54 | } 55 | 56 | .text.muted { 57 | font-size: 0.9rem; 58 | margin-top: 0px; 59 | } 60 | 61 | .submit { 62 | margin-top: var(--element-margin); 63 | height: 45px !important; 64 | width: 94%; 65 | } 66 | } 67 | } 68 | -------------------------------------------------------------------------------- /src/pages/auth/login.tsx: -------------------------------------------------------------------------------- 1 | import { FormEvent, useState } from "react"; 2 | import { useTranslation } from "react-i18next"; 3 | import { Link, useHistory } from "react-router-dom"; 4 | import { Button } from "../../framework/Button"; 5 | import { Input } from "../../framework/Input"; 6 | import "./Login.scss"; 7 | import store from "../../util/store"; 8 | 9 | export default function LoginScreen() { 10 | const { t } = useTranslation("login"); 11 | const [email, setEmail] = useState(); 12 | // eslint-disable-next-line 13 | const [password, setPassword] = useState(""); 14 | const history = useHistory(); 15 | 16 | async function submit(event: FormEvent) { 17 | event.preventDefault(); 18 | 19 | store.saveItem("token", email); 20 | 21 | history.push("/channels/@me"); 22 | } 23 | 24 | return ( 25 |
    26 |
    27 |

    {t("login")}

    28 | 29 | setEmail(e.target.value)} 31 | autoComplete="email" 32 | type="text" 33 | className="emailPhone" 34 | labelText={t("emailTelephone") + " USE BOT TOKEN ON MOMENT"} 35 | > 36 | 37 | setPassword(e.target.value)} 39 | className="password" 40 | type="password" 41 | labelText={t("password")} 42 | autoComplete="current-password" 43 | > 44 | 45 | 48 | 49 | 50 | {t("forgotPassword")} 51 | 52 | 53 |
    54 | {t("registerNotice")} {t("register")} 55 |
    56 |
    57 |
    58 | ); 59 | } 60 | -------------------------------------------------------------------------------- /src/pages/auth/register.tsx: -------------------------------------------------------------------------------- 1 | import { useState } from "react"; 2 | import { useTranslation } from "react-i18next"; 3 | import { Button } from "../../framework/Button"; 4 | import { Checkbox } from "../../framework/Checkbox"; 5 | import { Link } from "../../framework/Link"; 6 | import { Input } from "../../framework/Input"; 7 | import { network } from "../../models/networks"; 8 | import "./Login.scss"; 9 | 10 | export default function Register() { 11 | const { t } = useTranslation("register"); 12 | // eslint-disable-next-line 13 | const [email, setEmail] = useState(""); 14 | // eslint-disable-next-line 15 | const [username, setUsername] = useState(""); 16 | // eslint-disable-next-line 17 | const [password, setPassword] = useState(""); 18 | // eslint-disable-next-line 19 | const [birthday, setBirthday] = useState(""); 20 | // eslint-disable-next-line 21 | const [consent, setConsent] = useState(false); 22 | 23 | return ( 24 |
    25 |
    26 |

    {t("register")}

    27 | 28 | setEmail(e.target.value)} 32 | className="email" 33 | labelText={t("email")} 34 | autoComplete="email" 35 | > 36 | setUsername(e.target.value)} 39 | className="username" 40 | type="text" 41 | labelText={t("username")} 42 | autoComplete="username" 43 | > 44 | setPassword(e.target.value)} 47 | className="password" 48 | type="password" 49 | labelText={t("password")} 50 | autoComplete="new-password" 51 | > 52 | setBirthday(e.target.value)} 55 | type="date" 56 | labelText={t("dateOfBirth")} 57 | autoComplete="bday" 58 | > 59 | setConsent(e.target.checked)} 62 | labelText={ 63 | <> 64 | 65 | {t("consent")} 66 | 67 | 68 | } 69 | > 70 | 71 | 74 | 75 |
    76 | {t("loginNotice")} {t("login")} 77 |
    78 |
    79 |
    80 | ); 81 | } 82 | -------------------------------------------------------------------------------- /src/pages/channel/sidebar.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | // import { useEffect } from "react"; 3 | import { useTranslation } from "react-i18next"; 4 | import useForceUpdate from "../../util/useForceUpdate"; 5 | import { Guild, GuildChannel, ThreadChannel } from "fosscord.js"; 6 | import { joinVoiceChannel } from "@discordjs/voice"; 7 | import { FaChevronDown, FaHashtag, FaVolumeUp } from "../../framework/radio"; 8 | import { Text } from "../../framework/Text"; 9 | import { Link, useHistory, useRouteMatch } from "../../util/Router"; 10 | import { useCache } from "../../util/useCache"; 11 | import "./sidebar.scss"; 12 | // @ts-ignore 13 | import VoiceSVG from "../../assets/voice.png"; 14 | // @ts-ignore 15 | import SpeakerSVG from "../../assets/speaker.png"; 16 | // @ts-ignore 17 | import SettingsSVG from "../../assets/settings.png"; 18 | import Friends from "../friends/friends"; 19 | import client from "../../Client"; 20 | 21 | export interface Params { 22 | id: string; 23 | channel: string; 24 | } 25 | 26 | const SideBar = ({ guild }: { guild: Guild | any }) => { 27 | const forceUpdate = useForceUpdate(); 28 | const { t } = useTranslation("translation"); 29 | 30 | const history = useHistory(); 31 | 32 | const data = 33 | // eslint-disable-next-line react-hooks/rules-of-hooks 34 | useCache(guild?.channels) 35 | ?.array() 36 | .filter( 37 | (x: any) => 38 | x.type === "GUILD_CATEGORY" || 39 | guild.me?.permissionsIn(x).has("VIEW_CHANNEL") 40 | ) || []; 41 | 42 | if (guild === null) return ; 43 | 44 | // @ts-ignore 45 | globalThis.channels = guild?.channels?.cache?.array(); 46 | 47 | // eslint-disable-next-line react-hooks/rules-of-hooks 48 | const match = useRouteMatch({ 49 | path: "/channels/:id/:channel?", 50 | exact: false, 51 | }); 52 | 53 | // // eslint-disable-next-line react-hooks/rules-of-hooks 54 | // let history = useHistory(); 55 | // // eslint-disable-next-line react-hooks/rules-of-hooks 56 | // useEffect(() => { 57 | // if (match?.params.channel === undefined) { 58 | // history.push( 59 | // `/channels/${guild.id}/${data.find((x) => x.type === "GUILD_TEXT").id}` 60 | // ); 61 | // } 62 | // // eslint-disable-next-line react-hooks/exhaustive-deps 63 | // }, [guild]); 64 | 65 | function renderChannels(d: (GuildChannel | ThreadChannel)[]) { 66 | return d.map((item) => ( 67 | <> 68 |
    { 70 | if (item.type === "GUILD_VOICE") { 71 | const connection = joinVoiceChannel({ 72 | channelId: item.id, 73 | guildId: item.guild.id, 74 | adapterCreator: item.guild.voiceAdapterCreator, 75 | }); 76 | setTimeout(() => { 77 | connection.destroy(); 78 | }, 5000); 79 | } else history.push(`/channels/${guild?.id}/${item?.id}`); 80 | }} 81 | style={{ textDecoration: "none" }} 82 | className={ 83 | "item" + (match?.params.channel === item.id ? " active" : "") 84 | } 85 | key={item.id} 86 | > 87 | {item.type === "GUILD_TEXT" && } 88 | {item.type === "GUILD_VOICE" && } 89 | {item.name} 90 |
    91 | {item.type === "GUILD_VOICE" && ( 92 |
    93 | {item.members.map((x: any) => { 94 | return ( 95 |
    96 |
    97 | 98 |
    99 |
    100 | {x.user.username} 101 |
    102 |
    103 | ); 104 | })} 105 |
    106 | )} 107 | 108 | )); 109 | } 110 | 111 | //console.log(data); 112 | 113 | return ( 114 |
    115 |
    116 | {guild?.name || "Server"} 117 |
    118 |
    119 |
    120 |
    121 | {/* SCROLL BAR */} 122 | {/* check discord AGAIN */} 123 | {renderChannels( 124 | data 125 | .sort((a: any, b: any) => 126 | a.rawPosition > b.rawPosition ? 1 : -1 127 | ) 128 | .sort((a: any, b: any) => (a.type === "GUILD_VOICE" ? 1 : -1)) 129 | .sort((a: any, b: any) => 130 | a.rawPosition > b.rawPosition ? 1 : -1 131 | ) 132 | .sort((a: any, b: any) => 133 | a.type === "GUILD_STAGE_VOICE" ? 1 : -1 134 | ) 135 | .filter((x: any) => !x.parentId && x.type !== "GUILD_CATEGORY") 136 | )} 137 | 138 | {data 139 | .filter((x: any) => x.type === "GUILD_CATEGORY") 140 | .filter( 141 | (category: any) => 142 | data.find((x: any) => x.parentId === category.id) || 143 | guild.me?.permissionsIn(category).has("MANAGE_CHANNELS") 144 | ) 145 | .map((item: any) => ( 146 |
    147 |
    { 151 | const i = data.find((x: any) => x.id === item.id); 152 | // @ts-ignore 153 | i.collapsed = !i.collapsed; 154 | forceUpdate(); 155 | }} 156 | > 157 | 164 | {item.name} 165 |
    166 | {item.collapsed === false && 167 | renderChannels( 168 | data.filter((x: any) => x.parentId === item.id) 169 | )} 170 |
    171 | ))} 172 |
    173 |
    174 |
    175 |
    176 | 180 | 181 |
    182 |
    183 | {client.user?.username} 184 | Test Game playing 185 |
    186 |
    187 |
    188 |
    189 | 190 |
    191 |
    {t("mute")}
    192 |
    193 |
    194 |
    195 | 196 |
    197 |
    {t("deafen")}
    198 |
    199 |
    200 |
    201 | 202 |
    203 |
    {t("userSettings")}
    204 |
    205 |
    206 |
    207 |
    208 |
    209 | ); 210 | }; 211 | 212 | export default SideBar; 213 | -------------------------------------------------------------------------------- /src/pages/friends/friends.scss: -------------------------------------------------------------------------------- 1 | .side-friendList { 2 | width: 224px; 3 | padding: 0.5em; 4 | background-color: var(--background-secondary); 5 | display: flex !important; 6 | } 7 | .container-friends { 8 | width: 100%; 9 | padding-right: 5px; 10 | button.searchBar { 11 | cursor: pointer; 12 | border: 0; 13 | width: 100%; 14 | height: 28px; 15 | overflow: hidden; 16 | border-radius: 4px; 17 | background-color: var(--background-tertiary); 18 | -webkit-box-shadow: none; 19 | box-shadow: none; 20 | color: var(--text-muted); 21 | text-align: left; 22 | text-overflow: ellipsis; 23 | font-size: 14px; 24 | font-weight: 500; 25 | line-height: 24px; 26 | white-space: nowrap; 27 | } 28 | 29 | .scrolled-container-friendList { 30 | height: calc(100vh - 40px); 31 | max-height: calc(100vh - 40px); 32 | overflow-y: auto; 33 | } 34 | 35 | .list { 36 | width: 100%; 37 | margin: 0; 38 | padding: 0; 39 | .item { 40 | flex: 1 1 auto; 41 | box-sizing: border-box; 42 | display: flex; 43 | flex-direction: row; 44 | align-items: center; 45 | min-width: 0; 46 | padding: 0 8px; 47 | height: 42px; 48 | cursor: pointer; 49 | border-radius: 4px; 50 | 51 | font-weight: inherit; 52 | font-style: inherit; 53 | font-family: inherit; 54 | font-size: 100%; 55 | 56 | .icon { 57 | position: relative; 58 | margin-right: 6px; 59 | width: 16px; 60 | height: 16px; 61 | color: #72767d; 62 | pointer-events: none !important; 63 | } 64 | svg { 65 | position: relative; 66 | margin-right: 6px; 67 | width: 16px; 68 | height: 16px; 69 | color: #72767d; 70 | pointer-events: none !important; 71 | } 72 | div.content { 73 | color: #829297; 74 | font-size: 16px; 75 | line-height: 20px; 76 | font-weight: 500; 77 | flex: 1 1 auto; 78 | white-space: nowrap; 79 | overflow: hidden; 80 | text-overflow: ellipsis; 81 | pointer-events: none !important; 82 | } 83 | .right { 84 | &.icon { 85 | width: 12px !important; 86 | height: 12px !important; 87 | color: #72767d !important; 88 | &.plus { 89 | width: 15px !important; 90 | height: 15px !important; 91 | } 92 | } 93 | } 94 | &.category { 95 | padding-top: 16px; 96 | margin-left: 0px; 97 | &:hover { 98 | background-color: transparent !important; 99 | } 100 | &.active { 101 | background-color: transparent !important; 102 | } 103 | } 104 | &.active { 105 | background-color: rgba(79, 84, 92, 0.24); 106 | .icon { 107 | color: #fff !important; 108 | } 109 | div.content { 110 | color: #fff !important; 111 | } 112 | } 113 | &:hover { 114 | background-color: rgba(79, 84, 92, 0.16); 115 | .icon { 116 | color: #fff !important; 117 | } 118 | div.content { 119 | color: #fff !important; 120 | } 121 | .visibleOnHover { 122 | opacity: 1; 123 | } 124 | } 125 | } 126 | } 127 | } 128 | 129 | .friendsList { 130 | .privateChannelsHeader { 131 | position: relative; 132 | display: flex; 133 | padding: 5px 8px 0 10px; 134 | height: 40px; 135 | 136 | span { 137 | cursor: default; 138 | display: flex; 139 | flex-grow: 2; 140 | width: 100%; 141 | padding-top: 5%; 142 | height: 18px; 143 | text-overflow: ellipsis; 144 | white-space: nowrap; 145 | overflow: hidden; 146 | text-transform: uppercase; 147 | font-size: 12px; 148 | line-height: 16px; 149 | letter-spacing: 0.25px; 150 | font-family: var(--font-display); 151 | font-weight: bold; 152 | color: var(--text-muted); 153 | &:hover { 154 | color: #fff; 155 | } 156 | } 157 | .icon { 158 | cursor: pointer; 159 | margin-left: 40%; 160 | width: 12px; 161 | height: 12px; 162 | } 163 | } 164 | 165 | .member { 166 | position: relative; 167 | display: flex; 168 | align-items: center; 169 | height: 42px; 170 | border-radius: 4px; 171 | padding: 8px 8px 0px 8px; 172 | cursor: pointer; 173 | .image { 174 | margin-right: 12px; 175 | height: 42px; 176 | img { 177 | border-radius: 50%; 178 | width: 32px; 179 | height: 32px; 180 | } 181 | .indicator { 182 | position: relative; 183 | bottom: 1.09rem; 184 | left: 1.2rem; 185 | width: 10px !important; 186 | height: 10px !important; 187 | } 188 | .avatar-wrapper { 189 | border: 0.23rem solid var(--background); 190 | display: flex; 191 | flex-direction: column; 192 | align-items: center; 193 | } 194 | 195 | .avatar-wrapper .indicator { 196 | border: none; 197 | top: 3px; 198 | left: 0.2px; 199 | height: 15px; 200 | width: 15px; 201 | margin-bottom: 1px; 202 | } 203 | 204 | .indicator-wrapper { 205 | background: var(--background); 206 | height: auto; 207 | border-radius: 5px; 208 | 209 | position: relative; 210 | top: -15px; 211 | left: 15px; 212 | } 213 | } 214 | .contentWrap { 215 | display: flex; 216 | flex-direction: column; 217 | white-space: nowrap; 218 | text-overflow: ellipsis; 219 | overflow: hidden; 220 | margin-top: -10px; 221 | .name { 222 | font-size: 16px; 223 | line-height: 20px; 224 | font-weight: 500; 225 | -webkit-box-flex: 0; 226 | -ms-flex: 0 1 auto; 227 | flex: 0 1 auto; 228 | color: #8e9297; 229 | } 230 | .description { 231 | display: flex; 232 | -webkit-box-align: center; 233 | -ms-flex-align: center; 234 | align-items: center; 235 | font-size: 12px; 236 | line-height: 16px; 237 | color: #8e9297; 238 | font-weight: 500; 239 | } 240 | } 241 | .icon { 242 | right: 10px; 243 | position: absolute; 244 | top: 19px; 245 | width: 15px; 246 | height: 15px; 247 | } 248 | &.active { 249 | background-color: var(--background-primary); 250 | } 251 | &:hover { 252 | background-color: var(--background-primary); 253 | .visibleOnHover { 254 | opacity: 1; 255 | } 256 | } 257 | } 258 | } 259 | -------------------------------------------------------------------------------- /src/pages/friends/friends.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import FlatList from "flatlist-react"; 3 | //import client from "../../Client"; 4 | //import { useCache } from "../../util/useCache"; 5 | import "@fosscord/ui/scss/input-fields.scss"; 6 | import "./friends.scss"; 7 | import { useTranslation } from "react-i18next"; 8 | 9 | const Friends = () => { 10 | const { t } = useTranslation("translation"); 11 | 12 | //const friends = useCache(client.friends).array(); 13 | 14 | return ( 15 |
    16 |
    17 |
    18 | 21 |
    22 |
    23 |
    24 |
      25 |
    • 26 | 27 |
      {t("friends")}
      28 |
    • 29 |
    30 |
    31 |
    32 | 33 | Direct Messages 34 | 35 |
    36 | 37 |
    38 |
    39 |
    40 |
    41 | ); 42 | }; 43 | 44 | const FriendsRender = () => { 45 | const data = [ 46 | { 47 | bot: false, 48 | id: "832289478419808318", 49 | username: "docktor sus", 50 | avatar: 51 | "https://images.lindependant.fr/api/v1/images/view/5a96c2538fe56f2ad026226b/large/image.jpg", 52 | discriminator: "0000", 53 | }, 54 | { 55 | bot: false, 56 | id: "223533056852623360", 57 | username: "MasterKiller", 58 | avatar: 59 | "https://cdn.discordapp.com/avatars/223533056852623360/deb08682e310377aedffa3c99b72d370.webp?size=128", 60 | discriminator: "0000", 61 | }, 62 | ]; 63 | 64 | return ( 65 | ( 72 |
    73 |
    74 | 75 | 76 |
    77 |
    78 | {item.username} 79 | Test Game playing 80 |
    81 | 82 |
    83 | )} 84 | keyExtractor={(item: any) => item.id} 85 | /> 86 | ); 87 | }; 88 | 89 | export default Friends; 90 | -------------------------------------------------------------------------------- /src/pages/guild/guild.tsx: -------------------------------------------------------------------------------- 1 | import React, { useState } from "react"; 2 | import client from "../../Client"; 3 | import { useCache } from "../../util/useCache"; 4 | import { useHistory, useRouteMatch } from "react-router-dom"; 5 | import { useTranslation } from "react-i18next"; 6 | // @ts-ignore 7 | import FosscordLogo from "../../assets/logo_big_transparent.png"; 8 | import "@fosscord/ui/scss/guild.scss"; 9 | import "./guild.scss"; 10 | 11 | export interface Params { 12 | id: string; 13 | channel: string; 14 | } 15 | 16 | const GuildSideBar = () => { 17 | const { t } = useTranslation("translation"); 18 | // eslint-disable-next-line react-hooks/rules-of-hooks 19 | const guilds = (globalThis as any).guilds || useCache(client.guilds).array(); 20 | 21 | // eslint-disable-next-line react-hooks/rules-of-hooks 22 | const history = useHistory(); 23 | 24 | // eslint-disable-next-line react-hooks/rules-of-hooks 25 | const match = useRouteMatch({ 26 | path: "/channels/:id/:channel?", 27 | exact: false, 28 | }); 29 | 30 | // eslint-disable-next-line 31 | const [modalIsOpen, setIsOpen] = useState(false); 32 | 33 | function openModal() { 34 | setIsOpen(true); 35 | } 36 | 37 | // eslint-disable-next-line 38 | function closeModal() { 39 | setIsOpen(false); 40 | } 41 | 42 | const navigateTo = (channel: string) => history.push("/channels/" + channel); 43 | 44 | return ( 45 |
    46 |
    history.push("/channels/@me")} 50 | > 51 | 52 | 53 |
    54 |
    55 | {guilds 56 | .sort((a: any, b: any) => (a.rawPosition > b.rawPosition ? 1 : -1)) 57 | .map((x: any) => ( 58 |
    { 64 | if (x.id) navigateTo(x.id.toString()); 65 | }} 66 | > 67 | 68 | {x.icon ? ( 69 | 74 | ) : ( 75 | 76 | {!x.iconURL() && x?.nameAcronym} 77 | 78 | )} 79 |
    80 | ))} 81 |
    86 | 87 | 88 | + 89 | 90 |
    91 | 92 | {/* 93 | closeModal()}> 94 | */} 95 |
    96 | ); 97 | }; 98 | 99 | export default GuildSideBar; 100 | -------------------------------------------------------------------------------- /src/pages/loading-page.tsx: -------------------------------------------------------------------------------- 1 | import Particles from "react-particles-js"; 2 | 3 | const LoadingPage = () => { 4 | const tips = [ 5 | "This app took 2 weeks longer than expected to make.", 6 | "Stealing Discord since 1966.", 7 | "Disclaimer: Not actually a Discord clone.", 8 | "❤️ FOSSCORD", 9 | ]; 10 | const randomIndex = Math.floor(Math.random() * tips.length); 11 | 12 | return ( 13 |
    14 |
    15 |
    16 |
    17 |

    Loading...

    18 |

    {tips[randomIndex]}

    19 |
    20 |
    21 | 22 |
    23 |
    24 | ); 25 | }; 26 | 27 | export default LoadingPage; 28 | -------------------------------------------------------------------------------- /src/react-app-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /src/reportWebVitals.ts: -------------------------------------------------------------------------------- 1 | import { ReportHandler } from 'web-vitals'; 2 | 3 | const reportWebVitals = (onPerfEntry?: ReportHandler) => { 4 | if (onPerfEntry && onPerfEntry instanceof Function) { 5 | import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => { 6 | getCLS(onPerfEntry); 7 | getFID(onPerfEntry); 8 | getFCP(onPerfEntry); 9 | getLCP(onPerfEntry); 10 | getTTFB(onPerfEntry); 11 | }); 12 | } 13 | }; 14 | 15 | export default reportWebVitals; 16 | -------------------------------------------------------------------------------- /src/setupTests.ts: -------------------------------------------------------------------------------- 1 | // jest-dom adds custom jest matchers for asserting on DOM nodes. 2 | // allows you to do things like: 3 | // expect(element).toHaveTextContent(/react/i) 4 | // learn more: https://github.com/testing-library/jest-dom 5 | import '@testing-library/jest-dom'; 6 | -------------------------------------------------------------------------------- /src/util/Router.tsx: -------------------------------------------------------------------------------- 1 | import { 2 | BrowserRouter as Router, 3 | Route, 4 | Redirect, 5 | Link, 6 | Switch, 7 | matchPath, 8 | useHistory, 9 | useLocation, 10 | useParams, 11 | useRouteMatch, 12 | } from "react-router-dom"; 13 | 14 | export { 15 | Route, 16 | Router, 17 | Redirect, 18 | Link, 19 | Switch, 20 | matchPath, 21 | useHistory, 22 | useLocation, 23 | useParams, 24 | useRouteMatch, 25 | }; 26 | -------------------------------------------------------------------------------- /src/util/State.ts: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | export const State = React.createContext>({}); 3 | -------------------------------------------------------------------------------- /src/util/Time.native.ts: -------------------------------------------------------------------------------- 1 | export function relativeTime(timestamp: Date) { 2 | return new Date(timestamp).toLocaleString(); 3 | } 4 | -------------------------------------------------------------------------------- /src/util/Time.ts: -------------------------------------------------------------------------------- 1 | export function relativeTime(timestamp: Date) { 2 | const msPerMinute = 60 * 1000; 3 | const msPerHour = msPerMinute * 60; 4 | const msPerDay = msPerHour * 24; 5 | const msPerWeek = msPerDay * 7; 6 | //const msPerMonth = msPerDay * 30; 7 | //const msPerYear = msPerDay * 365; 8 | 9 | // @ts-ignore 10 | const elapsed = Date.now() - new Date(timestamp); 11 | 12 | // @ts-ignore 13 | const rtf = new Intl.RelativeTimeFormat({ numeric: "auto" }); 14 | 15 | if (elapsed < msPerMinute) { 16 | return rtf.format(-Math.floor(elapsed / 1000), "seconds"); 17 | } else if (elapsed < msPerHour) { 18 | return rtf.format(-Math.floor(elapsed / msPerMinute), "minutes"); 19 | } else if (elapsed < msPerDay) { 20 | return rtf.format(-Math.floor(elapsed / msPerHour), "hours"); 21 | } else if (elapsed < msPerWeek) { 22 | return rtf.format(-Math.floor(elapsed / msPerDay), "days"); 23 | } else { 24 | return new Date(timestamp).toLocaleDateString(); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/util/debug.ts: -------------------------------------------------------------------------------- 1 | // @ts-nocheck 2 | import client from "../Client"; 3 | 4 | client.on("ready", () => { 5 | globalThis.guild = client.guilds.cache.first(); 6 | globalThis.guilds = client.guilds.cache; 7 | }); 8 | 9 | // @ts-ignore 10 | globalThis.client = client; 11 | 12 | client.on("ready", () => console.log("ready " + client.user?.tag)); 13 | client.on("message", (msg: any) => console.log(msg.content)); 14 | client.on("raw", (event: any) => { 15 | if (event.t === "PRESENCE_UPDATE") { 16 | return; 17 | } 18 | console.log(event); 19 | }); 20 | -------------------------------------------------------------------------------- /src/util/i18n.ts: -------------------------------------------------------------------------------- 1 | import i18n from "i18next"; 2 | import { initReactI18next } from "react-i18next"; 3 | 4 | import i18nHttpBackend from "i18next-http-backend"; 5 | import LanguageDetector from "i18next-browser-languagedetector"; 6 | 7 | i18n.use(i18nHttpBackend) 8 | .use(LanguageDetector) 9 | .use(initReactI18next) // passes i18n down to react-i18next 10 | .init({ 11 | fallbackLng: "en", 12 | interpolation: { 13 | escapeValue: false, // not needed for react as it escapes by default 14 | }, 15 | }); 16 | 17 | export default i18n; 18 | -------------------------------------------------------------------------------- /src/util/store.ts: -------------------------------------------------------------------------------- 1 | export default class store { 2 | static getItem(key: any): Promise { 3 | return new Promise((resolve) => { 4 | if (localStorage.getItem(key)) { 5 | resolve(localStorage.getItem(key)); 6 | } else { 7 | resolve(undefined); 8 | } 9 | }); 10 | } 11 | static saveItem(key: string, value: any): Promise { 12 | return new Promise((resolve) => { 13 | resolve(localStorage.setItem(key, value)); 14 | }); 15 | } 16 | static removeItem(key: any): Promise { 17 | return new Promise((resolve) => { 18 | resolve(localStorage.removeItem(key)); 19 | }); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/util/useCache.ts: -------------------------------------------------------------------------------- 1 | // @ts-ignore 2 | import { Collection } from "fosscord.js"; 3 | import { useEffect, useState } from "react"; 4 | 5 | export function useCache>(o: { cache: T }): T { 6 | var [state, setState] = useState(0); 7 | 8 | // @ts-ignore 9 | const collection: Collection = o?.cache || o; 10 | 11 | const onChanged = () => { 12 | state++; 13 | setState(state); 14 | //console.log("rerender cache", state); 15 | }; 16 | 17 | useEffect(() => { 18 | collection?.events.on("changed", onChanged); 19 | 20 | return () => { 21 | collection?.events.off("changed", onChanged); 22 | }; 23 | // eslint-disable-next-line react-hooks/exhaustive-deps 24 | }, [o]); 25 | // @ts-ignore 26 | if (!collection) return o; 27 | 28 | // @ts-ignore 29 | return collection; 30 | } 31 | // TODO: use type of o 32 | -------------------------------------------------------------------------------- /src/util/useForceUpdate.tsx: -------------------------------------------------------------------------------- 1 | import { useState } from "react"; 2 | 3 | export default function useForceUpdate() { 4 | var [state, setState] = useState(0); 5 | 6 | return () => { 7 | state++; 8 | setState(state); 9 | }; 10 | } 11 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es5", 4 | "lib": ["dom", "dom.iterable", "esnext"], 5 | "allowJs": true, 6 | "skipLibCheck": true, 7 | "esModuleInterop": true, 8 | "allowSyntheticDefaultImports": true, 9 | "strict": true, 10 | "forceConsistentCasingInFileNames": true, 11 | "noFallthroughCasesInSwitch": true, 12 | "module": "esnext", 13 | "moduleResolution": "node", 14 | "resolveJsonModule": true, 15 | "isolatedModules": true, 16 | "noEmit": true, 17 | "jsx": "react-jsx" 18 | }, 19 | "include": ["src"] 20 | } 21 | --------------------------------------------------------------------------------