├── src ├── App.css ├── chooj.png ├── Guide │ ├── index.ts │ ├── StepFinal.tsx │ ├── StepZero.tsx │ ├── StepSeven.tsx │ ├── Step.css │ ├── StepFive.tsx │ ├── StepSix.tsx │ ├── StepThree.tsx │ ├── StepFour.tsx │ ├── StepOne.tsx │ ├── Guide.tsx │ ├── StepTwo.tsx │ └── server_icon.svg ├── NoItem.css ├── hash_icon.png ├── person_icon.png ├── FarooqAvatar.png ├── Waiting │ ├── index.ts │ ├── cowsay-pleasewait.png │ ├── Waiting.css │ └── Waiting.tsx ├── RoomView │ ├── index.ts │ ├── RoomView.css │ ├── CannotSendMessage.css │ ├── UnsupportedEventItem.css │ ├── ScrollIntoView.tsx │ ├── waiting_curve.svg │ ├── RoomEvent.tsx │ └── RoomView.tsx ├── CallScreen │ ├── index.ts │ ├── waiting.ogg │ ├── incoming.ogg │ ├── CallScreen.css │ └── CallScreen.tsx ├── VoiceInput │ ├── index.ts │ ├── VoiceInput.css │ └── VoiceInput.tsx ├── LoginWithQR │ ├── index.ts │ ├── LoginWithQR.css │ └── LoginWithQR.tsx ├── ChatTextInput │ ├── index.ts │ ├── ChatTextInput.css │ └── ChatTextInput.tsx ├── MessageItems │ ├── index.ts │ └── IRCLikeMessageItem │ │ ├── index.ts │ │ ├── IRCLikeMessageItem.css │ │ └── IRCLikeMessageItem.tsx ├── asset_modules.d.ts ├── ImageViewer.css ├── NoItem.tsx ├── index.tsx ├── index.css ├── index.html ├── Settings.tsx ├── shared.ts ├── types.ts ├── manifest.webapp ├── globals.d.ts ├── sw.ts ├── InvitesView.tsx ├── ImageViewer.tsx ├── App.tsx ├── ChatRoomItem.tsx ├── About.tsx ├── RoomsView.tsx ├── ChatDMItem.tsx ├── LoginHandler.ts ├── DMsView.tsx ├── utils.tsx ├── Login.tsx ├── Matrix.tsx └── fetch.js ├── .babelrc ├── .eslintrc.js ├── tsconfig.service-worker.json ├── tslint.json ├── .parcelrc ├── .gitignore ├── tsconfig.json ├── .github ├── FUNDING.yml └── workflows │ ├── broadcast_commits.yaml │ └── build.yml ├── addAds.js ├── justkai.js ├── package.json └── README.md /src/App.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "plugins": ["inferno"] 3 | } 4 | -------------------------------------------------------------------------------- /src/chooj.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/farooqkz/chooj/HEAD/src/chooj.png -------------------------------------------------------------------------------- /src/Guide/index.ts: -------------------------------------------------------------------------------- 1 | import Guide from "./Guide"; 2 | 3 | export default Guide; 4 | -------------------------------------------------------------------------------- /.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | extends: ["eslint-config-inferno-app"], 3 | }; 4 | -------------------------------------------------------------------------------- /src/NoItem.css: -------------------------------------------------------------------------------- 1 | .noitem { 2 | margin-top: 20vh; 3 | text-align: center; 4 | } 5 | -------------------------------------------------------------------------------- /src/hash_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/farooqkz/chooj/HEAD/src/hash_icon.png -------------------------------------------------------------------------------- /src/person_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/farooqkz/chooj/HEAD/src/person_icon.png -------------------------------------------------------------------------------- /src/FarooqAvatar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/farooqkz/chooj/HEAD/src/FarooqAvatar.png -------------------------------------------------------------------------------- /src/Waiting/index.ts: -------------------------------------------------------------------------------- 1 | import Waiting from "./Waiting"; 2 | 3 | export default Waiting; 4 | -------------------------------------------------------------------------------- /src/RoomView/index.ts: -------------------------------------------------------------------------------- 1 | import RoomView from "./RoomView"; 2 | 3 | export default RoomView; 4 | -------------------------------------------------------------------------------- /src/CallScreen/index.ts: -------------------------------------------------------------------------------- 1 | import CallScreen from "./CallScreen"; 2 | 3 | export default CallScreen; 4 | -------------------------------------------------------------------------------- /src/CallScreen/waiting.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/farooqkz/chooj/HEAD/src/CallScreen/waiting.ogg -------------------------------------------------------------------------------- /src/VoiceInput/index.ts: -------------------------------------------------------------------------------- 1 | import VoiceInput from "./VoiceInput"; 2 | 3 | export default VoiceInput; 4 | -------------------------------------------------------------------------------- /src/CallScreen/incoming.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/farooqkz/chooj/HEAD/src/CallScreen/incoming.ogg -------------------------------------------------------------------------------- /src/LoginWithQR/index.ts: -------------------------------------------------------------------------------- 1 | import LoginWithQR from "./LoginWithQR"; 2 | 3 | export default LoginWithQR; 4 | -------------------------------------------------------------------------------- /src/ChatTextInput/index.ts: -------------------------------------------------------------------------------- 1 | import ChatTextInput from "./ChatTextInput"; 2 | 3 | export default ChatTextInput; 4 | -------------------------------------------------------------------------------- /src/Waiting/cowsay-pleasewait.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/farooqkz/chooj/HEAD/src/Waiting/cowsay-pleasewait.png -------------------------------------------------------------------------------- /src/MessageItems/index.ts: -------------------------------------------------------------------------------- 1 | import IRCLikeMessageItem from "./IRCLikeMessageItem"; 2 | 3 | export { IRCLikeMessageItem }; 4 | -------------------------------------------------------------------------------- /src/asset_modules.d.ts: -------------------------------------------------------------------------------- 1 | declare module "*.png"; 2 | declare module "*.svg"; 3 | declare module "*.ogg"; 4 | declare module "xmimetype"; 5 | -------------------------------------------------------------------------------- /src/MessageItems/IRCLikeMessageItem/index.ts: -------------------------------------------------------------------------------- 1 | import IRCLikeMessageItem from "./IRCLikeMessageItem"; 2 | 3 | export default IRCLikeMessageItem; 4 | -------------------------------------------------------------------------------- /src/LoginWithQR/LoginWithQR.css: -------------------------------------------------------------------------------- 1 | .videodiv { 2 | display: flex; 3 | justify-content: center; 4 | max-height: 100%; 5 | max-width: 100%; 6 | } 7 | -------------------------------------------------------------------------------- /src/RoomView/RoomView.css: -------------------------------------------------------------------------------- 1 | .eventsandtextinput { 2 | height: calc(100vh - 2.8rem - 40px); 3 | width: 100%; 4 | padding: 0; 5 | display: grid; 6 | } 7 | -------------------------------------------------------------------------------- /tsconfig.service-worker.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig", 3 | "compilerOptions": { 4 | "lib": ["WebWorker", "ES2017"] 5 | }, 6 | "files": ["src/sw.ts"] 7 | } 8 | -------------------------------------------------------------------------------- /tslint.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "tslint-config-prettier", 3 | "rules": { 4 | "ordered-imports": false, 5 | "interface-name": [true, "never-prefix"] 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /src/ImageViewer.css: -------------------------------------------------------------------------------- 1 | .imageviewer { 2 | z-index: 9999; 3 | background-color: rgb(255, 255, 255, 0.35); 4 | position: fixed; 5 | width: 100vw; 6 | height: 100vh; 7 | } 8 | -------------------------------------------------------------------------------- /.parcelrc: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "@parcel/config-default", 3 | "transformers": { 4 | "manifest.webapp": ["@parcel/transformer-raw"], 5 | "*.png": ["@parcel/transformer-raw"] 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /src/Guide/StepFinal.tsx: -------------------------------------------------------------------------------- 1 | function StepFinal() { 2 | return ( 3 |
Have fun!
5 |5 | Hello! Care to spend 30 seconds to learn about chooj and its underlying 6 | network, Matrix? 7 |
8 |5 | It is possible to bridge groups on a number of other Messengers like 6 | Telegram, Slack, Discord and more with Matrix! 7 |
8 |5 | You can also register an account on some homeserver of your own choice. 6 | However, chooj currently does not support guest access or account 7 | registration. But it's coming soon! 8 |
9 |5 | With Matrix, you can chat, send photos, videos and other files and do 6 | voice or video chat! Voice chat is Work In Progress in chooj. There are 7 | Matrix apps for Android, iOS, Windows, Linux, Mac. 8 |
9 |5 | You can join any of these "homeservers" or host your own homeserver for 6 | yourself, and possibly family and friends. To use chooj, to connect to 7 | the Matrix network, you should connect to a Matrix homeserver. 8 |
9 |5 | You can use chooj with an existing account on some homeserver to chat in 6 | different rooms on the Matrix network. If you haven't got an account, 7 | don't worry! You can use guest access through a homeserver to join rooms 8 | which allow guest access. 9 |
10 |
11 | Press center key to enable push notifification in Chooj.
12 |
13 | This is unreliable, experimental and CANNOT BE UNDONE
14 | .
15 |
16 | You cannot disable or enable notifications per room or sender through
17 | Chooj.
18 |
19 | If enabling push notifications was causing problems for you, you may
20 | reinstall Chooj.
21 |
20 | {noTip ? "" : randomTip()} 21 |
22 | > 23 | ); 24 | } 25 | 26 | export default Waiting; 27 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "module": "commonjs", 4 | "noImplicitAny": true, 5 | "strictNullChecks": true, 6 | "strict": true, 7 | "jsx": "preserve", 8 | "baseUrl": "./src", 9 | "noUnusedParameters": true, 10 | "noImplicitReturns": true, 11 | "noFallthroughCasesInSwitch": true, 12 | "noUnusedLocals": true, 13 | "lib": ["es2017", "dom"], 14 | "allowSyntheticDefaultImports": true, 15 | "types": ["inferno"], 16 | "skipLibCheck": true, 17 | "esModuleInterop": true, 18 | "moduleResolution": "node", 19 | "target": "es2022", 20 | "paths": { 21 | "KaiUI": ["./node_modules/KaiUI"] 22 | } 23 | }, 24 | "exclude": [ 25 | "build", 26 | "src/sw.ts", 27 | "/node_modules" 28 | ] 29 | } 30 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] 4 | patreon: # Replace with a single Patreon username 5 | open_collective: # Replace with a single Open Collective username 6 | ko_fi: # Replace with a single Ko-fi username 7 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel 8 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry 9 | liberapay: # Replace with a single Liberapay username 10 | issuehunt: # Replace with a single IssueHunt username 11 | otechie: # Replace with a single Otechie username 12 | lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry 13 | custom: 14 | 15 | -------------------------------------------------------------------------------- /.github/workflows/broadcast_commits.yaml: -------------------------------------------------------------------------------- 1 | on: [push] 2 | 3 | jobs: 4 | send-message: 5 | runs-on: ubuntu-latest 6 | name: Send message via Matrix 7 | steps: 8 | - name: Send message to test channel 9 | id: matrix-chat-message 10 | uses: fadenb/matrix-chat-message@v0.0.6 11 | with: 12 | homeserver: "mozilla.modular.im" 13 | token: ${{ secrets.ACCESS_TOKEN }} 14 | channel: "!OQyTyXWouXhUmgvaQW:mozilla.org" 15 | message: | 16 | Thee in luck! New push to Chooj repository which means new development build available! 17 | 18 | Download from https://farooqkz.de1.hashbang.sh/matrix-client-builds/${{ github.sha }}.zip to sideload OR 19 | 20 | Download from https://farooqkz.de1.hashbang.sh/matrix-client-builds/${{ github.sha }}-omnisd.zip to install with OmniSD. 21 | -------------------------------------------------------------------------------- /src/MessageItems/IRCLikeMessageItem/IRCLikeMessageItem.css: -------------------------------------------------------------------------------- 1 | .ircmsg { 2 | padding-top: 2px; 3 | padding-bottom: 2px; 4 | height: auto; 5 | width: 100%; 6 | } 7 | 8 | .ircmsg > p { 9 | font-size: 14px !important; 10 | } 11 | 12 | .ircmsg--focused { 13 | padding-top: 2px; 14 | padding-bottom: 2px; 15 | height: auto; 16 | width: 100%; 17 | font-size: 15px !important; 18 | background-color: black; 19 | color: white; 20 | } 21 | 22 | .ircmsg--focused > p { 23 | font-size: 15px !important; 24 | } 25 | 26 | @keyframes being_sent { 27 | from { 28 | background-color: black; 29 | } 30 | to { 31 | background-color: red; 32 | } 33 | } 34 | 35 | .sending { 36 | animation-name: being_sent; 37 | animation-duration: 2s; 38 | animation-direction: alternate; 39 | animation-iteration-count: infinite; 40 | } 41 | 42 | .not_sent { 43 | color: red; 44 | } 45 | -------------------------------------------------------------------------------- /src/ChatTextInput/ChatTextInput.tsx: -------------------------------------------------------------------------------- 1 | import "./ChatTextInput.css"; 2 | 3 | interface ChatTextInputProps { 4 | isFocused: boolean; 5 | message: string; 6 | onChangeCb: (message: string) => void; 7 | } 8 | 9 | function ChatTextInput({ isFocused, message, onChangeCb }: ChatTextInputProps) { 10 | const onChange = (evt: ClipboardEvent | Event) => { 11 | evt.target && onChangeCb(evt.target.value); 12 | }; 13 | 14 | return ( 15 |