Repository: blueedgetechno/androidInReact Branch: master Commit: 782e4189cad6 Files: 88 Total size: 307.9 KB Directory structure: gitextract_7ne9rzeo/ ├── .github/ │ ├── CODEOWNERS │ ├── FUNDING.yml │ ├── ISSUE_TEMPLATE/ │ │ └── bug_report.yml │ ├── dependabot.yml │ └── workflows/ │ ├── Build-Deploy.yml │ ├── Issue-text.yml │ ├── PR-Preview.yml │ ├── desktop.yml │ ├── package-lock.yml │ ├── virus.yml │ └── winget.yml ├── .gitignore ├── LICENSE ├── README.md ├── jsconfig.json ├── package.json ├── public/ │ ├── _redirects │ ├── img/ │ │ └── asset/ │ │ └── whatsapp/ │ │ └── pfp/ │ │ ├── apoc.jfif │ │ ├── ava.jfif │ │ ├── ceaser.jfif │ │ ├── check.jfif │ │ ├── fine.jfif │ │ ├── liam.jfif │ │ ├── lion.jfif │ │ ├── pose.jfif │ │ ├── real.jfif │ │ └── viva.jfif │ ├── index.html │ ├── manifest.json │ ├── robots.txt │ └── site.webmanifest ├── src/ │ ├── App.css │ ├── App.js │ ├── components/ │ │ ├── background/ │ │ │ ├── back.scss │ │ │ └── index.js │ │ ├── bottomnav/ │ │ │ ├── bottom.scss │ │ │ └── index.js │ │ ├── icons.js │ │ ├── main.scss │ │ ├── quickpanel/ │ │ │ ├── index.js │ │ │ └── qkpanel.scss │ │ ├── statusbar.js │ │ ├── utils.js │ │ └── widgets/ │ │ ├── index.js │ │ └── widget.scss │ ├── containers/ │ │ ├── apps/ │ │ │ ├── google/ │ │ │ │ ├── google.scss │ │ │ │ ├── index.js │ │ │ │ └── news.json │ │ │ ├── index.js │ │ │ ├── index.scss │ │ │ ├── playstore/ │ │ │ │ └── index.js │ │ │ ├── themes.scss │ │ │ ├── whatsapp/ │ │ │ │ ├── elements/ │ │ │ │ │ ├── extra.scss │ │ │ │ │ └── index.js │ │ │ │ ├── index.js │ │ │ │ └── whatsapp.scss │ │ │ └── youtube/ │ │ │ ├── extra.js │ │ │ ├── extra.scss │ │ │ ├── index.js │ │ │ └── youtube.scss │ │ └── home/ │ │ ├── home.scss │ │ └── index.js │ ├── index.css │ ├── index.js │ ├── service-worker.js │ ├── serviceWorkerRegistration.js │ └── store/ │ ├── actions/ │ │ ├── data/ │ │ │ ├── apps.js │ │ │ ├── preset.js │ │ │ ├── whatsapp.json │ │ │ └── youtube.json │ │ ├── index.js │ │ └── prototypes.js │ ├── index.js │ └── reducers/ │ ├── apps/ │ │ ├── whatsapp.js │ │ └── youtube.js │ ├── global.js │ ├── home.js │ ├── quickpanel.js │ ├── wallpaper.js │ └── widget.js ├── src-tauri/ │ ├── .gitignore │ ├── Cargo.toml │ ├── build.rs │ ├── icons/ │ │ └── icon.icns │ ├── src/ │ │ └── main.rs │ └── tauri.conf.json ├── tailwind.config.js └── timeline.md ================================================ FILE CONTENTS ================================================ ================================================ FILE: .github/CODEOWNERS ================================================ .github/* @andrewstech src-tauri/* @andrewstech ================================================ FILE: .github/FUNDING.yml ================================================ custom: https://www.buymeacoffee.com/blueedgetechno ================================================ FILE: .github/ISSUE_TEMPLATE/bug_report.yml ================================================ name: Bug Report description: File a bug report title: "[Bug]: " labels: ["bug"] assignees: - android69420 body: - type: markdown attributes: value: | Thanks for taking the time to fill out this bug report! - type: textarea id: what-happened attributes: label: What happened? description: Also tell us, what did you expect to happen? placeholder: Tell us what you see! value: "A bug happened!" validations: required: true - type: textarea id: Reproduce attributes: label: To reproduce the behavior? description: Steps to reproduce the behavior. placeholder: opened store value: "reproduce!" validations: required: true - type: dropdown id: browsers attributes: label: What browser are you seeing the problem on? multiple: false options: - Firefox - Chrome - Safari - Microsoft Edge - Other Browser validations: required: true ================================================ FILE: .github/dependabot.yml ================================================ version: 2 updates: - package-ecosystem: npm directory: / schedule: interval: daily - package-ecosystem: github-actions directory: / schedule: interval: daily ================================================ FILE: .github/workflows/Build-Deploy.yml ================================================ name: Build & Deploy on: push: branches: [master] workflow_dispatch: jobs: Build-Deploy: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v3 - name: Set up Node.js uses: actions/setup-node@v3 with: node-version: 16 cache: npm - name: Build run: npm ci && npm run ghbuild - name: Deploy to gh-pages uses: peaceiris/actions-gh-pages@v3 with: github_token: ${{ secrets.GITHUB_TOKEN }} cname: android.blueedge.me publish_dir: ./build ================================================ FILE: .github/workflows/Issue-text.yml ================================================ name: issue-text on: issues: types: [opened] jobs: comment: runs-on: ubuntu-latest steps: - uses: ben-z/actions-comment-on-issue@1.0.2 with: message: "Hey, thank you for creating an issue. We will normally respond within 24 hours." GITHUB_TOKEN: ${{ secrets.BOT }} - uses: stefanbuck/github-issue-parser@v2 id: issue-parser with: template-path: .github/ISSUE_TEMPLATE/bug_report.yml - run: echo '${{ steps.issue-parser.outputs.jsonString }}' - run: echo ${{ steps.issue-parser.outputs.issueparser_what_browser_are_you_seeing_the_problem_on }} - uses: actions-ecosystem/action-add-labels@v1 with: labels: ${{ steps.issue-parser.outputs.issueparser_what_browser_are_you_seeing_the_problem_on }} github_token: ${{ secrets.BOT }} ================================================ FILE: .github/workflows/PR-Preview.yml ================================================ name: Generate PR Preview on: pull_request_target: types: [opened, reopened, synchronize] jobs: Build: runs-on: ubuntu-latest steps: - uses: peter-evans/create-or-update-comment@v2 id: couc with: body: ⌛ Deploy Preview - Build in Progress issue-number: ${{ github.event.pull_request.number }} token: ${{ secrets.BOT }} - uses: actions/checkout@v3 with: ref: refs/pull/${{ github.event.pull_request.number }}/merge - uses: actions/setup-node@v3 with: node-version: 16 - name: create repo if: ${{ github.event.action == 'opened'}} run: gh repo create blueDroidBot/${{ github.event.pull_request.number }} --public env: GITHUB_TOKEN: ${{ secrets.BOT }} - name: Build run: npm ci && npm run ghbuild - uses: peaceiris/actions-gh-pages@v3 with: personal_token: ${{ secrets.BOT }} publish_dir: ./build external_repository: blueDroidBot/${{ github.event.pull_request.number }} - name: Sleep to make sure page gets updated run: sleep 1m shell: bash - name: comment Preview Ready uses: peter-evans/create-or-update-comment@v2 with: body: | ✔️ Deploy Preview for Ready! 😎 Browse the preview: https://android-preview.blueedge.me/${{ github.event.pull_request.number }} ! 🔍 Inspect the deploy log: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }} comment-id: ${{ steps.couc.outputs.comment-id }} edit-mode: replace token: ${{ secrets.BOT }} - if: ${{ failure() }} uses: peter-evans/create-or-update-comment@v2 with: body: | ❌ Deploy Preview failed 🔍 Inspect the deploy log: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }} comment-id: ${{ steps.couc.outputs.comment-id }} edit-mode: replace token: ${{ secrets.BOT }} ================================================ FILE: .github/workflows/desktop.yml ================================================ name: publish on: issues: types: - labeled jobs: publish-tauri: if: github.event.label.name == 'desktop-release' strategy: fail-fast: false matrix: platform: [macos-latest, ubuntu-latest, windows-latest] runs-on: ${{ matrix.platform }} env: CI: false steps: - uses: actions/checkout@v3 - name: setup node uses: actions/setup-node@v3 with: node-version: 12 cache: npm - name: git http run: | git config --global url."https://github.com/".insteadOf git@github.com: git config --global url."https://".insteadOf git:// - name: install Rust stable uses: actions-rs/toolchain@v1 with: toolchain: stable - uses: Swatinem/rust-cache@v1 with: sharedKey: ${{ matrix.platform }} - name: install webkit2gtk (ubuntu only) if: matrix.platform == 'ubuntu-latest' run: | sudo apt-get update sudo apt-get install -y webkit2gtk-4.0 - name: CI run: | npm ci - name: install app dependencies and build it run: npm run build - uses: tauri-apps/tauri-action@v0 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} TAURI_KEY_PASSWORD: ${{ secrets.TAURI_KEY_PASSWORD }} TAURI_PRIVATE_KEY: ${{ secrets.TAURI_PRIVATE_KEY }} with: tagName: __VERSION__ # the action automatically replaces \_\_VERSION\_\_ with the app version releaseName: "androidInReact v__VERSION__" releaseBody: ${{ github.event.issue.body }} releaseDraft: false prerelease: false ================================================ FILE: .github/workflows/package-lock.yml ================================================ name: "Re generate the package-lock file" on: workflow_dispatch: jobs: rebuild: name: reBuild runs-on: windows-latest steps: - name: Checkout code uses: actions/checkout@v3 - name: Install Node.js uses: actions/setup-node@v1 with: node-version: '16.6.1' - name: remove old one run: rm package-lock.json - name: build new one run: npm install env: CI: false - name: cpr uses: peter-evans/create-pull-request@v4 with: token: ${{ secrets.GITHUB_TOKEN }} commit-message: Update package-lock title: Update package-lock body: Update package-lock ================================================ FILE: .github/workflows/virus.yml ================================================ name: released on: release: workflow_dispatch: jobs: virustotal: runs-on: ubuntu-latest steps: - name: VirusTotal Scan uses: crazy-max/ghaction-virustotal@v2 with: vt_api_key: ${{ secrets.VT_API_KEY }} update_release_body: true files: | .msi$ .exe$ .deb$ ================================================ FILE: .github/workflows/winget.yml ================================================ name: Publish to WinGet on: release: types: [released] jobs: publish: runs-on: windows-latest # action can only be run on windows steps: - uses: vedantmgoyal2009/winget-releaser@latest with: identifier: blueedge.android11react token: ${{ secrets.BOT }} ================================================ FILE: .gitignore ================================================ # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. # dependencies node_modules /.pnp .pnp.js .env todo* # testing /coverage # production /build /target/ WixTools *.py rough* # misc .DS_Store .env.local .env.development.local .env.test.local .env.production.local npm-debug.log* yarn-debug.log* yarn-error.log* ================================================ FILE: LICENSE ================================================ Creative Commons Legal Code CC0 1.0 Universal CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED HEREUNDER. Statement of Purpose The laws of most jurisdictions throughout the world automatically confer exclusive Copyright and Related Rights (defined below) upon the creator and subsequent owner(s) (each and all, an "owner") of an original work of authorship and/or a database (each, a "Work"). Certain owners wish to permanently relinquish those rights to a Work for the purpose of contributing to a commons of creative, cultural and scientific works ("Commons") that the public can reliably and without fear of later claims of infringement build upon, modify, incorporate in other works, reuse and redistribute as freely as possible in any form whatsoever and for any purposes, including without limitation commercial purposes. These owners may contribute to the Commons to promote the ideal of a free culture and the further production of creative, cultural and scientific works, or to gain reputation or greater distribution for their Work in part through the use and efforts of others. For these and/or other purposes and motivations, and without any expectation of additional consideration or compensation, the person associating CC0 with a Work (the "Affirmer"), to the extent that he or she is an owner of Copyright and Related Rights in the Work, voluntarily elects to apply CC0 to the Work and publicly distribute the Work under its terms, with knowledge of his or her Copyright and Related Rights in the Work and the meaning and intended legal effect of CC0 on those rights. 1. Copyright and Related Rights. A Work made available under CC0 may be protected by copyright and related or neighboring rights ("Copyright and Related Rights"). Copyright and Related Rights include, but are not limited to, the following: i. the right to reproduce, adapt, distribute, perform, display, communicate, and translate a Work; ii. moral rights retained by the original author(s) and/or performer(s); iii. publicity and privacy rights pertaining to a person's image or likeness depicted in a Work; iv. rights protecting against unfair competition in regards to a Work, subject to the limitations in paragraph 4(a), below; v. rights protecting the extraction, dissemination, use and reuse of data in a Work; vi. database rights (such as those arising under Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, and under any national implementation thereof, including any amended or successor version of such directive); and vii. other similar, equivalent or corresponding rights throughout the world based on applicable law or treaty, and any national implementations thereof. 2. Waiver. To the greatest extent permitted by, but not in contravention of, applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and unconditionally waives, abandons, and surrenders all of Affirmer's Copyright and Related Rights and associated claims and causes of action, whether now known or unknown (including existing as well as future claims and causes of action), in the Work (i) in all territories worldwide, (ii) for the maximum duration provided by applicable law or treaty (including future time extensions), (iii) in any current or future medium and for any number of copies, and (iv) for any purpose whatsoever, including without limitation commercial, advertising or promotional purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each member of the public at large and to the detriment of Affirmer's heirs and successors, fully intending that such Waiver shall not be subject to revocation, rescission, cancellation, termination, or any other legal or equitable action to disrupt the quiet enjoyment of the Work by the public as contemplated by Affirmer's express Statement of Purpose. 3. Public License Fallback. Should any part of the Waiver for any reason be judged legally invalid or ineffective under applicable law, then the Waiver shall be preserved to the maximum extent permitted taking into account Affirmer's express Statement of Purpose. In addition, to the extent the Waiver is so judged Affirmer hereby grants to each affected person a royalty-free, non transferable, non sublicensable, non exclusive, irrevocable and unconditional license to exercise Affirmer's Copyright and Related Rights in the Work (i) in all territories worldwide, (ii) for the maximum duration provided by applicable law or treaty (including future time extensions), (iii) in any current or future medium and for any number of copies, and (iv) for any purpose whatsoever, including without limitation commercial, advertising or promotional purposes (the "License"). The License shall be deemed effective as of the date CC0 was applied by Affirmer to the Work. Should any part of the License for any reason be judged legally invalid or ineffective under applicable law, such partial invalidity or ineffectiveness shall not invalidate the remainder of the License, and in such case Affirmer hereby affirms that he or she will not (i) exercise any of his or her remaining Copyright and Related Rights in the Work or (ii) assert any associated claims and causes of action with respect to the Work, in either case contrary to Affirmer's express Statement of Purpose. 4. Limitations and Disclaimers. a. No trademark or patent rights held by Affirmer are waived, abandoned, surrendered, licensed or otherwise affected by this document. b. Affirmer offers the Work as-is and makes no representations or warranties of any kind concerning the Work, express, implied, statutory or otherwise, including without limitation warranties of title, merchantability, fitness for a particular purpose, non infringement, or the absence of latent or other defects, accuracy, or the present or absence of errors, whether or not discoverable, all to the greatest extent permissible under applicable law. c. Affirmer disclaims responsibility for clearing rights of other persons that may apply to the Work or any use thereof, including without limitation any person's Copyright and Related Rights in the Work. Further, Affirmer disclaims responsibility for obtaining any necessary consents, permissions or other rights required for any use of the Work. d. Affirmer understands and acknowledges that Creative Commons is not a party to this document and has no duty or obligation with respect to this CC0 or use of the Work. ================================================ FILE: README.md ================================================ # Android on Web [![Follow me](https://img.shields.io/github/followers/blueedgetechno?label=follow%20me&style=social)](https://github.com/blueedgetechno) [![Follow Twitter](https://img.shields.io/twitter/follow/blueedgetechno?label=Follow%20me&style=social)](https://twitter.com/blueedgetechno) [![Join](https://img.shields.io/discord/868499076432408627.svg?label=&logo=discord&logoColor=ffffff&color=7389D8&labelColor=6A7EC2)](https://discord.gg/NcjaNdwtnR) [![coffee](https://www.buymeacoffee.com/assets/img/custom_images/orange_img.png)](https://www.buymeacoffee.com/blueedgetechno) An open-source project that aims to provide an indistinguishably accurate experience of Android on web. The project leverages different JavaScript Web APIs to imitates the Android functionalities and CSS animations to bring life into it. ------------ #### Visit the Live Application🌈:   [android.blueedge.me](https://android.blueedge.me) ## Gallery ![img1](public/gall1.png) ![img1](public/gall2.png) #### Visit the Live Application🌈:   [android.blueedge.me](https://android.blueedge.me) # Stack - Framework - React (^17.0.2) + Redux - Component/UI Library - Material UI - Styling Solution - SCSS and CSS Modules (+ tailwind). - Icons - fontAwesome/mui icons/custom svg icons # Features - [x] Home page, App icons - [x] Bottom Navigation bar - [x] Widgets like google search - [x] Calendar, Date, Clock Widgets - [x] Quick menu from slide up - [x] Recent menu and apps - [x] WhatsApp Application - [x] YouTube Application - [x] Google Search App # Dev Features - [x] Flexible and Scalable - [x] Easy to add custom Applications - [x] Easy to bind with existing system - [x] Built-In Navigation system per app - [x] Modular Applications and their styling - [x] Proper state management with Redux ## FAQ 1. Is this real android OS? - No, This is not a real operating system. It is just imitation of it with different technology. 2. How long did it take? - 6 weeks (without gaps) 3. Have you ran into problems during development? - Duhh. More than dozen big ones and hundreds of small problems ([more info](timeline.md)). 4. Can I contribute? - Yes, you can! Open an issue, create a pull request, head over to [discussions](https://github.com/blueedgetechno/androidInReact/discussions) or join the [discord](https://discord.gg/NcjaNdwtnR). 5. Where did you get the inspiration from, if you have? - I got the inspired to make the project on the suggestion of [Derry Shribman](https://github.com/xderry). 6. Why do JavaScript developers wear glasses? - Because they cannot C# (see sharp).     ![answer](public/hehe.jpg) ## Online Deployment [![Deploy](https://www.herokucdn.com/deploy/button.svg)](https://heroku.com/deploy) [![Deploy on Railway](https://railway.app/button.svg)](https://railway.app/new/template?template=https%3A%2F%2Fgithub.com%2Fblueedgetechno%2FandroidInReact&envs=PORT&PORTDesc=Port+of+the+application&PORTDefault=3000) [![Deploy to Netlify](https://www.netlify.com/img/deploy/button.svg)](https://app.netlify.com/start/deploy?repository=https://github.com/blueedgetechno/androidInReact) ## Acknowledgements - [Derry Shribman](https://github.com/xderry) - [React-hammerjs](https://github.com/JedWatson/react-hammerjs) - [React-slick](https://github.com/akiran/react-slick) ## Contributors [![contributors](https://contrib.rocks/image?repo=blueedgetechno/androidInReact)](https://github.com/blueedgetechno/androidInReact/graphs/contributors) ## License ⚖️ CC0-1.0 License ================================================ FILE: jsconfig.json ================================================ { "compilerOptions": { "baseUrl": "src" }, "include": ["src"] } ================================================ FILE: package.json ================================================ { "name": "Android11React", "description": "Android made in React", "repository": "https://github.com/blueedgetechno/androidInReact", "version": "0.0.1", "private": true, "dependencies": { "@emotion/react": "^11.9.0", "@emotion/styled": "^11.8.1", "@fortawesome/fontawesome-svg-core": "^6.1.1", "@fortawesome/free-regular-svg-icons": "^6.1.1", "@fortawesome/free-solid-svg-icons": "^6.1.1", "@fortawesome/react-fontawesome": "^0.1.18", "@mui/icons-material": "^5.6.2", "@mui/lab": "^5.0.0-alpha.83", "@mui/material": "^5.8.1", "@reduxjs/toolkit": "^1.8.2", "@sentry/react": "^6.19.7", "@sentry/tracing": "^6.19.7", "@tauri-apps/api": "^1.0.0-rc.6", "@win11react/react-hammerjs": "1.0.2", "axios": "^0.27.2", "color-parse": "^1.4.2", "color-rgba": "^2.4.0", "react": "^18.1.0", "react-calendar": "^3.7.0", "react-dom": "^18.1.0", "react-player": "^2.10.1", "react-redux": "^8.0.2", "react-scripts": "^5.0.1", "react-slick": "^0.29.0", "redux": "^4.2.0", "redux-thunk": "^2.4.1", "slick-carousel": "^1.8.1" }, "scripts": { "start": "react-scripts start", "build": "react-scripts build", "ghbuild": "CI=false react-scripts build", "test": "react-scripts test", "eject": "react-scripts eject", "tauri": "tauri" }, "eslintConfig": { "extends": [ "react-app", "react-app/jest" ] }, "browserslist": { "production": [ ">0.2%", "not dead", "not op_mini all" ], "development": [ "last 1 chrome version", "last 1 firefox version", "last 1 safari version" ] }, "devDependencies": { "@tauri-apps/cli": "^1.0.0-rc.12", "node-sass": "^7.0.1", "tailwindcss": "^3.0.24" } } ================================================ FILE: public/_redirects ================================================ /* /index.html 200 ================================================ FILE: public/index.html ================================================ Android in React
================================================ FILE: public/manifest.json ================================================ { "short_name": "Android In React", "name": "Android on web", "icons": [ { "src": "favicon.ico", "sizes": "64x64 32x32 24x24 16x16", "type": "image/x-icon" }, { "src": "logo192.png", "type": "image/png", "sizes": "192x192" }, { "src": "logo512.png", "type": "image/png", "sizes": "512x512" } ], "author": { "name": "Blue Edge", "website": "https://blueedge.me", "github": "https://github.com/blueedgetechno", "source-repo": "https://github.com/blueedgetechno/androidInReact" }, "start_url": ".", "display": "standalone", "theme_color": "#fefefe", "background_color": "#ffffff" } ================================================ FILE: public/robots.txt ================================================ # https://www.robotstxt.org/robotstxt.html User-agent: * ================================================ FILE: public/site.webmanifest ================================================ { "name": "", "short_name": "", "icons": [{ "src": "/android-chrome-192x192.png", "sizes": "192x192", "type": "image/png" }, { "src": "/android-chrome-512x512.png", "sizes": "512x512", "type": "image/png" }], "theme_color": "#ffffff", "background_color": "#ffffff", "display": "standalone" } ================================================ FILE: src/App.css ================================================ .App { --stbar-h: 2.4em; } *[data-ninja="true"] { pointer-events: none; } .uicon { position: relative; display: grid; place-items: center; overflow: hidden; } .text-xss { font-size: 0.64em; } .smooth-trans { transition: all 200ms ease-in-out; } .invert-true, img[data-invert="true"], svg[data-invert="true"], i[data-invert="true"] { filter: invert(1); } .rounded-true, img[data-rounded="true"], svg[data-rounded="true"], i[data-rounded="true"] { border-radius: 1000px; } .flip-true, img[data-flip="true"], svg[data-flip="true"], i[data-flip="true"] { transform: scale(-1, 1); } .uicon img { transform-origin: center; transition: 400ms ease-in-out; } .imageCont, .vidCont{ position: relative; display: grid; place-items: center; width: auto; height: auto; } .imageCont &[data-back="true"] { background-position: center; background-size: cover; } .imageCont img[data-free="false"] { max-width: 100%; max-height: 100%; } .imageCont.rounded { overflow: hidden; } .noscroll::-webkit-scrollbar { display: none; } .thinScroll::-webkit-scrollbar { width: 2px; height: 2px; background-color: transparent; } .medScroll::-webkit-scrollbar { width: 4px; height: 4px; background-color: transparent; } .thinScroll:hover::-webkit-scrollbar-thumb, .medScroll:hover::-webkit-scrollbar-thumb { background: rgba(32, 24, 148, 0.4); } .lightScroll:hover::-webkit-scrollbar-thumb { background: rgba(162, 159, 209, 0.4); } .thinScroll::-webkit-scrollbar-thumb { width: 2px; height: 2px; border-radius: 10px; background-color: transparent; } .medScroll::-webkit-scrollbar-thumb { width: 4px; height: 4px; border-radius: 10px; background-color: transparent; } .upbug::after { content: ""; position: absolute; left: 0; top: -2px; width: 100%; height: 4px; background: #128c7e; } .downbug::after { content: ""; position: absolute; z-index: 1; left: 0; bottom: -2px; width: 100%; height: 4px; background: #128c7e; } @media only screen and (min-width: 520px) { *{ /* cursor: url("data:image/svg+xml;utf8,"), auto; */ } } ================================================ FILE: src/App.js ================================================ import React, {useState, useEffect} from 'react'; import {Background, OverLay} from 'components/background'; import Home from 'containers/home'; import {loadSettings} from 'store/actions/index'; import 'slick-carousel/slick/slick.css'; import 'slick-carousel/slick/slick-theme.css'; import './App.css'; function App() { useEffect(() => { if (!window.onstart) { // console.log("Loading settings..."); window.onstart = loadSettings(); } }); return (
); } export default App; ================================================ FILE: src/components/background/back.scss ================================================ .background { min-width: 100vw; min-height: 100%; background-color: #fefefe; background-repeat: no-repeat; background-size: cover; background-position: center; transition: all 0.2s ease; } .app-overlay, .brightness-overlay{ position: absolute; pointer-events: none; inset: 0; } .brightness-overlay{ background: #000; } ================================================ FILE: src/components/background/index.js ================================================ import React, { useState, useEffect } from 'react'; import { useSelector } from 'react-redux'; import "./back.scss"; export const Background = () => { const wall = useSelector((state) => state.wallpaper); return (
); } export const OverLay = () => { const bright = useSelector((state) => state.quickpanel.lazy_bright) return (
); } ================================================ FILE: src/components/bottomnav/bottom.scss ================================================ .bottom-nav{ display: flex; flex-direction: column; align-items: center; transition: background-color 200ms ease-in-out; } .bt-nav-container{ display: flex; justify-content: space-around; padding: 0.1em 1em; width: 100%; max-width: 50em; .uicon{ padding: 0.5em; color: var(--med-txt); // filter: drop-shadow(1px 1px 4px rgba(254, 254, 254, 0.6)); } &[data-invert="true"]{ .uicon{ color: var(--gray-txt); } } .bar-icon{ transform: rotateZ(90deg); } } ================================================ FILE: src/components/bottomnav/index.js ================================================ import React, { useState, useEffect, useRef} from 'react'; import { useSelector, useDispatch } from 'react-redux'; import {Icon} from 'components/utils'; import parse from 'color-parse'; import rgba from 'color-rgba'; import './bottom.scss'; const BottomNav = (props) => { const [invert, setInvert] = useState(props.invert); const navBar = useRef(); const dispatch = useDispatch(); const istransparent = (bgcolor)=>{ var colors = parse(bgcolor) return colors.alpha < 0.1; } const refreshInvert = ()=>{ var bgcolor = getComputedStyle(navBar.current).getPropertyValue('background-color'); if(!istransparent(bgcolor)){ var arr = rgba(bgcolor), avg = (arr[0]+arr[1]+arr[2])/3 if(avg<128) setInvert(true) else setInvert(false) }else setInvert(false) } useEffect(()=>{ if(navBar.current && props.invert==null){ setTimeout(refreshInvert,100) }else if (props.invert!=null) { setInvert(props.invert) } }, [props.bg, props.invert]) return (
); }; export default BottomNav; ================================================ FILE: src/components/icons.js ================================================ export const NetworkIcon = (props) => { // network icon that is responsive to a status props indicating network strength const status = props.status || 4; return (
1 ? props.fill : props.filldim} > 2 ? props.fill : props.filldim} > 3 ? props.fill : props.filldim} >
); }; // Battery Icon by Google Inc. - Iconscout export const BatteryIcon = (props) => { var h = ((props.battery.level || 100)*33); return (
); }; export const pinned = (props) => { return ( ); }; export const seentick = (props) => { return ( ); }; ================================================ FILE: src/components/main.scss ================================================ body { --dark-txt: #000; --med-dark: #111; --txt-col: #222; --med-txt: #3c3c3c; --comp-txt: #ddd; --light-txt: #aaa; --comp-clr: #e6e6e6; --gray-txt: #555; --sat-txt: #777; --mid-txt: #888; --clrPrm: #0067c0; --scroll: rgb(255 255 255 / 80%); --white: #fefefe; --black: #010101; --active-blue: #0181fd; } .med-txt { color: var(--med-txt); } .light-txt { color: var(--light-txt); } .comp-txt { color: var(--comp-txt); } .gray-txt { color: var(--gray-txt); } .sat-txt { color: var(--sat-txt); } .backblur { backdrop-filter: blur(20px); -webkit-backdrop-filter: blur(20px); } .prtclk { * { pointer-events: none; } } .txt-ovf { display: -webkit-box; -webkit-line-clamp: 1; -webkit-box-orient: vertical; overflow: hidden; text-overflow: ellipsis; } .wb-line-2 { -webkit-line-clamp: 2; } .wb-line-3 { -webkit-line-clamp: 3; } .wb-line-4 { -webkit-line-clamp: 4; } .status-bar { // position: absolute; height: var(--stbar-h); width: 100%; display: flex; font-size: 0.8em; padding: 1em 1em 0; box-sizing: border-box; display: flex; align-items: center; justify-content: space-between; transition: background-color 200ms ease-in-out; color: var(--txt-col); &[data-invert="true"] { color: var(--comp-txt); } } .status-row { display: flex; align-items: center; & > div { margin: 0 2px; } .battery-level { font-size: 0.9em; height: 14px; margin-right: 0.25em; } } @keyframes fastfadein { 0% { opacity: 0; } 99% { opacity: 0; } 100% { opacity: 1; } } @keyframes pop-up { from { transform: scale(0.5); } to { transform: scale(1); } } @keyframes pop-up2 { from { transform: scale(0.5); } to { transform: scale(1); } } .press-in { transition: transform 200ms ease-in-out; &:active { transform: scale(0.86); } } .softpress-in { transition: transform 200ms ease-in-out; &:active { transform: scale(0.94); } } .quick-trans { transition: transform 100ms ease-in-out; } .flex-column { display: flex; flex-direction: column; } .active-light-lit { transition: all 200ms ease-in-out; &:active { background: rgba(254, 254, 254, 0.25); } } .active-dark-lit { transition: all 200ms ease-in-out; &:active { background: rgba(0, 0, 0, 0.25); } } .xlit:active { background: rgba(0, 0, 0, 0.12); } .vidCont { .react-video, video { height: 100%; } .play-icon { position: absolute; width: 60px; height: 60px; background: rgba(0, 0, 0, 0.5); border-radius: 4em; color: var(--white); z-index: 1; opacity: 0; transition: all 200ms ease-in-out; } &:hover .play-icon, .play-icon:hover { opacity: 1; } .play-icon.opacity-100 { opacity: 1; } } .video-control-container { width: 100%; display: flex; align-items: center; position: absolute; bottom: 0; .video-progress { flex-grow: 1; margin: 0 0.8em; } .MuiSlider-rail { background: var(--comp-txt); opacity: 0.8; } .MuiSlider-thumb, .MuiSlider-track { opacity: 1; } .prog-text { color: var(--comp-txt); font-size: 0.8em; font-weight: 500; padding: 0 0.5em; } } ================================================ FILE: src/components/quickpanel/index.js ================================================ import React, { useState, useEffect } from 'react'; import { useSelector, useDispatch } from 'react-redux'; import Hammer, { displayName, propTypes } from '@win11react/react-hammerjs'; import Slider from '@mui/material/Slider'; import Swiper from 'react-slick'; import { Icon } from 'components/utils'; import StatusBar from 'components/statusbar'; import { dispatchAction, dispatchAct } from 'store/actions'; import './qkpanel.scss'; const DateObj = (props) => { const date = useSelector((state) => state.global.date) const time = useSelector((state) => state.global.time) var datestring = new Date(date.year, date.month, date.day).toLocaleString( "en-us", { weekday: "short", day: "numeric", month: "long" } ); return props.showtime ? (
{time.hours}:{time.minutes}
{datestring}
) : (
{datestring}
) } export default function QuickPanel() { const [brightness, setBrightness] = useState(100) const quickpanel = useSelector((state) => state.quickpanel) const display = useSelector((state) => state.global.display) const closePanel = (e) => { if (e.target.classList.contains("quickpanel-container")) { dispatchAct({ type: "quickpanel/close" }) } } const handleBright = (e, value) => setBrightness(value) const extendPanel = () => dispatchAct({ type: "quickpanel/extend" }) const collapsePanel = (e) => { dispatchAct({ type: "quickpanel/collapse" }) } useEffect(() => { dispatchAct({type: "quickpanel/setLazyBright", payload: brightness}) }, [brightness]) return (
600} />
) } const QuickTool = (props) => { const [toolCount, setToolCount] = useState(12) const display = useSelector((state) => state.global.display) const settings = { dots: true, arrows: false, infinite: false, speed: 200 } useEffect(() => { if(display.height > 600) setToolCount(12) else setToolCount(8) },[display.height]) return (
{props.tools && props.tools.slice(0,6).map((item) => { return (
); })}
{props.tools && props.tools.map((temp, idx) => { if(idx%toolCount==0){ return (
{props.tools.slice(idx, idx+toolCount).map((item,i) => { return (
{item.name}
); })}
) } })}
) } ================================================ FILE: src/components/quickpanel/qkpanel.scss ================================================ .quickpanel-container { position: absolute; top: 0; width: 100%; height: 100%; pointer-events: none; background: rgba(0, 0, 0, 0); opacity: 0; z-index: -1; transition: 0.3s all ease-in-out; display: flex; flex-direction: column; align-items: center; &[data-open="true"] { pointer-events: auto; z-index: 1000; opacity: 1; background: rgba(0, 0, 0, 0.2); .quickpanel { transform: translateY(0); } } } .quickpanel { width: 100%; max-width: 540px; max-height: 50%; // padding: 0 1.6em 0.5em; padding-bottom: 0.5em; color: var(--med-txt); display: flex; flex-direction: column; align-items: center; overflow: hidden; & > div { width: 100%; padding: 0 1.6em; } .quick-panel-bottom-bar { width: 32px; height: 4px; background: var(--light-txt); border-radius: 10px; } .notif-panel { padding-left: 0; padding-right: 0; } border-radius: 0 0 1em 1em; background: #fefefe; transform: translateY(-100%); transition: all 0.3s ease-in-out; &[data-extended="true"] { max-height: 100%; } .date-and-setting { display: flex; justify-content: space-between; color: var(--med-txt); margin-bottom: 0.5em; transition: all 200ms ease-in-out; } .date-day { font-weight: 600; color: var(--txt-col); } .quick-panel-time { max-height: 0; padding: 0; opacity: 0; font-weight: 500; transition: all 200ms linear; display: flex; overflow: hidden; flex-direction: column; align-items: center; &[data-extended="true"] { opacity: 1; padding: 2em 0; max-height: 240px; } } } .notif-panel { padding-top: 1em; text-align: center; .mini-quick-panel { padding: 0 1.6em; display: flex; width: 100%; justify-content: space-between; transition: all 300ms ease-in-out; margin-bottom: 1em; &[data-ext="true"] { position: absolute; width: 150%; opacity: 0; z-index: -1; pointer-events: none; } } .mini-quick-panel-item { padding: 8px; background-color: var(--comp-txt); border-radius: 50%; .mini-quick-icon { color: var(--sat-txt); } &[data-active="true"] { background: var(--active-blue); svg { color: #fefefe; } } } .extended-quick { max-height: 0; overflow: hidden; opacity: 0; padding: 0 1.6em; pointer-events: none; transition: all 200ms ease-in-out; .quick-tool-container { width: 100%; display: grid !important; grid-template-columns: auto auto auto auto; place-items: center; align-items: flex-start; justify-content: space-between; // margin-right: 1em; // margin: 0 1em; } .quick-tool-item { max-width: 42px; margin: 0.5em 0; display: flex; flex-direction: column; align-items: center; .mini-quick-panel-item { margin-bottom: 0.5em; } .quick-tool-info { font-size: 0.75em; line-height: 1em; font-weight: 600; width: 200%; } } } .extended-quick-open { max-height: 800px; pointer-events: auto; // overflow: visible; opacity: 1; animation: fastfadein 200ms linear; } .slick-list { margin: 0 -2em; } .slick-slide > div { margin: 0 2em; } .slick-dots { position: relative; bottom: 0; li { width: 6px; } } } ================================================ FILE: src/components/statusbar.js ================================================ import React, {useState, useEffect, useRef} from 'react'; import { useSelector } from 'react-redux'; import Hammer from '@win11react/react-hammerjs'; import parse from 'color-parse'; import rgba from 'color-rgba'; import { Icon } from 'components/utils'; import { dispatchAction } from 'store/actions'; import { NetworkIcon, BatteryIcon } from 'components/icons'; import './main.scss'; const StatusBar = (props) => { const [invert, setInvert] = useState(props.invert); const statusBar = useRef(); const battery = useSelector((state) => state.global.battery); const time = useSelector((state) => state.global.time); const istransparent = (bgcolor)=>{ var colors = parse(bgcolor) return colors.alpha < 0.1; } useEffect(()=>{ if(props.invert!=null){ setInvert(props.invert) }else if(props.bg || (invert && !props.bg)){ if(statusBar.current){ var bgcolor = getComputedStyle(statusBar.current).getPropertyValue('background-color'); if(!istransparent(bgcolor)){ var arr = rgba(bgcolor), avg = (arr[0]+arr[1]+arr[2])/3 if(avg<128) setInvert(true) else setInvert(false) }else{ setInvert(false) } } } }, [props.bg]) return (
{time.hours}:{time.minutes}
{Math.round(battery.level * 100) + "%"}
); }; export default StatusBar; ================================================ FILE: src/components/utils.js ================================================ import React, { useState, useEffect, useRef } from 'react'; import {useSelector} from 'react-redux'; import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; import ReactPlayer from 'react-player'; import Slider from '@mui/material/Slider'; import { dispatchAction } from 'store/actions'; import * as FaIcons from '@fortawesome/free-solid-svg-icons'; import * as FaRegIcons from '@fortawesome/free-regular-svg-icons'; import * as MUIcons from '@mui/icons-material'; import * as AllIcons from 'components/icons'; const {round, floor, random, min, max, abs} = Math; export const MaterialIcon = (props) => { var icon = props.mui; if (props.out) icon += "Outlined"; if (props.round) icon += "Rounded"; if (props.twotone) icon += "TwoTone"; if (props.sharp) icon += "Sharp"; // const Icon =
const MuiIcon = MUIcons[icon]; return ( ); }; export const Icon = (props) => { var src = `img/icon/${props.ui ? "ui/" : ""}${props.src}`; if (props.src && !props.src.includes(".")) { src += ".png"; } if (props.ext || (props.src && props.src.startsWith("http"))) { src = props.src; } var dataset = {} Object.entries(props).forEach(([key, value]) => { if(key.includes("data-")){ dataset[key] = value; } }); var classname = `uicon prtclk ${props.className || ""}`.trim() var styles = { borderRadius: props.radii } const label = props.label!=null && {props.label} if (props.fafa) { return (
{label}
); } else if (props.mui) { return (
{label}
); }else if (props.icon) { var CustomIcon = AllIcons[props.icon]; return (
{label}
); } else { return (
{props.alt {label}
); } }; export const Image = (props) => { var src = `img/${(props.dir?props.dir+"/":"")+props.src}`; if (props.src && !props.src.includes(".")) { src += ".png"; } if (props.ext || (props.src && props.src.startsWith("http"))) { src = props.src; } const errorHandler = (e)=>{ if(props.err) e.target.src = props.err } var dataset = {} Object.entries(props).forEach(([key, value]) => { if(key.includes("data-")){ dataset[key] = value; } }); return (
{!props.back?:null}
) } export const isValidURL = (str)=>{ var res = str.match(/(http(s)?:\/\/.)?(www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#?&//=]*)/g); return (res !== null) }; const formatseconds = (sec)=>{ if (!sec) return "00:00"; var res = floor(sec / 60); res += ':'; sec %= 60; if (sec < 10) res += "0"; res += sec; return res; } export const Video = (props) => { const [play, setPlay] = useState(props.autoplay); const [prog, setProg] = useState(0); // time elapsed const [perProg, setPerProg] = useState(0); // time elapsed in % const vidplayer = useRef(); var src = `img/${(props.dir?props.dir+"/":"")+props.src}`; if (props.src && !props.src.includes(".")) src += ".mp4"; if (props.ext || (props.src && props.src.includes("http"))) { src = props.src; } const className = `vidCont ${(props.inactive || props.clickToggle)?'prtclk':''} ${props.className||''}`.trim() var dataset = {} Object.entries(props).forEach(([key, value]) => { if(key.includes("data-")){ dataset[key] = value } }); const handlePause = (e) => setPlay(false) const handlePlay = (e) => setPlay(true) const togglePlay = (e) => setPlay(!play) const handleProg = (e)=>{ setProg(floor(e.playedSeconds)) setPerProg(e.played) } const handleSliderChange = (e)=>{ if(!vidplayer.current) return var ip = e.target.value/100 vidplayer.current.seekTo(ip, 'fraction') setPerProg(ip); setProg(floor(ip*vidplayer.current.getDuration())); } return (
{!props.playIcon && play && } {!props.playIcon && !play && } {props.playIcon} {props.cstmctrl && (
{formatseconds(prog)} {formatseconds(floor(prog/perProg))}
)}
) } export const LazyComponent = ({ show, children }) => { const [loaded, setLoad] = useState(false); useEffect(() => { if (show && !loaded) setLoad(true); }, [show]); return show || loaded ? <>{children} : null; }; ================================================ FILE: src/components/widgets/index.js ================================================ import React, { useState, useEffect } from 'react' import { useSelector, useDispatch } from 'react-redux' import Calendar from 'react-calendar' import {Icon} from 'components/utils' import {dispatchAction, dispatchAct, openAppPage} from 'store/actions'; import './widget.scss' const ClockDate = (props)=>{ const date = useSelector((state) => state.global.date); var datestring = new Date(date.year, date.month, date.day).toLocaleString("en-us",{ weekday: "short", day: "numeric", month: props.datemin?"short":"long" }); var classNameString = props.className || "" return
{datestring}
} export const GoogleSearch = () => { const handleClick = () => { openAppPage("google","google.search") } return (
); }; export const AnalogClock = () => { const time = useSelector((state) => state.global.time); const calculateAngles = ()=>{ var hr = time.hours >= 12 ? time.hours - 12 : time.hours, mn = time.minutes hr *= 30 hr += mn/2 mn *= 6 return [hr, mn] } return (
); }; export const MinimalClock = () => { const time = useSelector((state) => state.global.time); return (
{time.hours}:{time.minutes}
{time.abb}
); }; export const MinimalVertClock = () => { const time = useSelector((state) => state.global.time); const fillZero = (x)=>{ return (x<9?"0":"") + x } return (
{fillZero(time.hours)}
{time.minutes}
); }; export const DayCountdown = ()=>{ return (
Mom's B'day
215
days left
) } export const WideCalender = ()=>{ const date = useSelector((state) => state.global.date); var datemonth = new Date(date.year, date.month, date.day).toLocaleString("en-us",{month: "long"}); const formatShortWeekday = (label, date)=>{ return date.toLocaleString("en-us",{weekday: "short"})[0] } return (
{datemonth}
Disneyland
All day
Meeting
11:00 AM - 2:00 PM
Business
3:30 PM - 8:00 PM
) } export const WideWeather = ()=>{ const date = useSelector((state) => state.global.date); const weather = useSelector((state) => state.widget.weather); var datemonth = new Date(date.year, date.month, date.day).toLocaleString("en-us",{month: "long"}); var iconurl = "https://www.metaweather.com/static/img/weather/" return (
{weather.city}
{weather.temperature}°
{weather && weather.predictions.map((pred, i)=>{ return(
{pred.day}
) })}
) } export const ShortWeather = ()=>{ const date = useSelector((state) => state.global.date); const weather = useSelector((state) => state.widget.weather); var datemonth = new Date(date.year, date.month, date.day).toLocaleString("en-us",{month: "long"}); var iconurl = "https://www.metaweather.com/static/img/weather/" return (
{weather.temperature}°
{weather.city}
) } ================================================ FILE: src/components/widgets/widget.scss ================================================ .google-search-container { width: 100%; padding: 0 1em; display: flex; } .google-input-container { background: #fefefe; border-radius: 200px; padding: 0.8em; flex-grow: 1; } .analog-clock-container { width: 100%; display: flex; flex-direction: column; align-items: center; .clock-body { width: 60%; aspect-ratio: 1 / 1; max-width: 160px; max-height: 160px; background: #fafafa; border-radius: 50%; position: relative; box-shadow: 0 -4px 16px rgba(36, 36, 36, 0.1), 0 4px 16px rgba(36, 36, 36, 0.1); .clock-center { position: absolute; background: #333; inset: 50%; width: 8px; height: 8px; margin-top: -4px; margin-left: -4px; border-radius: 50%; } .hour-container, .minute-container { width: 100%; height: 100%; position: absolute; inset: 0; display: grid; place-items: center; } .hour-hand, .minute-hand { width: 4px; border-radius: 8px; transform: translateY(-50%); } .hour-hand { height: 20%; background: #444; } .minute-hand { height: 40%; background: #888; } } .clock-date { font-size: 0.9em; margin-top: 0.5em; color: var(--med-txt); } } .digital-time-container, .vert-time-container { width: 100%; display: flex; flex-direction: column; align-items: center; color: var(--med-txt); } .vert-time-container > div { width: 100%; padding: 0 1em; } .cell-container { // box-sizing: border-box; // border: solid 1px red; } .calender-container { box-sizing: border-box; background: #fefefe; border-radius: 1em; padding: 0.6em 1em; position: absolute; inset: 0.5em 1em; overflow-x: hidden; overflow-y: scroll; .react-calendar { width: 66%; .react-calendar__month-view__days__day--weekend { color: red; } .react-calendar__tile--now { color: #fefefe; position: relative; transform: translateX(-36%); abbr { position: absolute; inset: 0 0.3em; text-align: center; font-weight: 400; background: #444; border-radius: 6px; } } abbr { display: block; text-decoration: none; font-size: 0.72em; font-weight: 600; padding: 0.2em 0; text-align: left; } } .calender-events { display: grid; grid-template-rows: 1fr 1fr 1fr; width: 33%; .event-container { color: var(--med-txt); border: 0 solid var(--comp-txt); border-left-width: 2px; padding-left: 0.5em; position: relative; &::after { content: ""; position: absolute; top: -2px; left: -4px; width: 6px; height: 6px; border-radius: 20px; background: #277beb; } .event-time { height: 16px; color: var(--sat-txt); font-weight: 300; overflow: hidden; } } } } .countdown-container { position: absolute; inset: 0.5em 1em; text-align: center; background: #fefefe; display: flex; flex-direction: column; justify-content: center; padding: 0.5em; border-radius: 1em; } .weather-container { box-sizing: border-box; background: #fefefe; border-radius: 1em; padding: 0.6em 1em; position: absolute; inset: 0.5em 1em; display: flex; flex-direction: column; align-items: center; color: var(--med-txt); letter-spacing: 1px; overflow-x: hidden; overflow-y: scroll; .city-container { display: flex; span { font-size: 1rem; } } .weather-date { font-size: 0.9em; font-weight: 100; color: var(--gray-txt); } .main-weather { display: flex; align-items: center; flex-grow: 1; } .today-temperature { font-size: 3em; font-weight: 100; margin-left: 0.3em; } .weather-pred-container { display: flex; justify-content: space-between; .weather-pred { margin: 0 0.8em; display: flex; flex-direction: column; align-items: center; } .pred-day { font-size: 0.8em; } } } .short-weather-container { .today-temperature { font-size: 2.5em; margin-left: 0.1em; } .main-weather .uicon { height: 100%; } } ================================================ FILE: src/containers/apps/google/google.scss ================================================ .google-home, .google-spage, .search-frame { padding: 1em 0; height: 100%; display: flex; flex-direction: column; align-items: center; box-sizing: border-box; } .google-land, .google-spage{ .namelogo { width: 100%; } .search-box-container { width: 96%; padding: 0.5em 1em; margin-top: 2em; margin-right: 2%; margin-bottom: 1em; border-radius: 2em; box-shadow: 1px 2px 8px rgba(74, 71, 71, 0.15); } .search-input { display: flex; align-items: center; svg { color: var(--light-txt); } .search-inp { flex-grow: 1; input { padding: 0.25em 0.5em; } fieldset { display: none; } } } .news-container { padding: 0 0.5em; .news-box { margin: 0.6em 0; color: var(--mid-txt); } .news-title { font-size: 0.96em; color: var(--med-txt); } .imageCont { border-radius: 0.8em; overflow: hidden; margin-bottom: 0.5em; } } } .google-spage{ .search-box-container{ box-sizing: border-box; padding: 0.5em 0.25em; margin: 0; width: 90%; border: 0 solid var(--comp-txt); border-radius: 0; border-bottom-width: 2px; box-shadow: none; .search-inp input{ padding: 0.25em 1em; } } .search-suggestions{ flex-grow: 1; width: 100%; overflow-y: scroll; margin-top: 0.5em; color: var(--light-txt); .trending-search{ margin-top: 1em; .sugg-title{ margin-bottom: 0.5em; } } .sugg-title{ padding: 0 0.5em; margin: 0 1.5em; font-size: 0.68em; letter-spacing: 1px; font-weight: 600; } .sugg-box{ display: flex; padding: 0.5em 1.5em; span{ margin-left: 1em; font-weight: 500; color: var(--txt-col); } } } } .search-frame{ padding: 0; iframe{ width: 100%; height: 100%; } } ================================================ FILE: src/containers/apps/google/index.js ================================================ import React, {useState, useEffect} from 'react' import {useSelector, useDispatch} from 'react-redux' import TextField from '@mui/material/TextField' import {Icon, Image} from 'components/utils' import {dispatchAction, dispatchAct} from 'store/actions' import './google.scss' import newsdata from './news.json' export const GoogleApp = () => { const app = useSelector(state => state.home.apps.google || {}) const home = useSelector(state => state.home) const show = home.ishome==false && home.stack.at(-1)==app.payload const pagetree = app && app.pagetree || { "main": { "search" : {}, "result" : {} } } useEffect(()=>{ if(app && !app.pagetree){ dispatchAct({type: "home/setApp", payload: { id: app.payload, data: { ... app, pagetree: pagetree, path: ['main'] } }}) } }, [app]) return } const AppContainer = ({app, show}) => { const [searchtxt, setTxt] = useState('') const clstring = `${app.payload}-wrapper` const path = app.path || ['main'] const handlleReset = () => setTxt('') const openResults = () => dispatchAct({ type: "home/navApp", payload: "google.result" }) const handleTxtChange = (e) => setTxt(e.target.value) const handleSuggClk = (e) => { setTxt(e.target.innerText) openResults() } const handleSearch = (e) => { if(e.key == "Enter" && searchtxt.length) openResults() } const checkstate = (comp) => { return path.includes(comp) ? ( path.at(-1) == comp ? 1 : 2 ) : 0; } const sdata = { "sugg": ["videos", "old songs", "hd wallpapers", "love", "new movies", "new songs", "cool photos", "images"], "trend": ["T20 World Cup", "Squid Game", "Afghanistan", "Ethereum Price", "Baked oats", "Battlefield 2042", "Black Widow"] } return (
{checkstate('main')==1 && (
{newsdata.articles.map((article,i) => { return (
{article.title}
{article.source.name}
) })}
)} {checkstate('search')==1 && (
{searchtxt.length ? ( ) : }
TRY SEARCHING FOR
{sdata.sugg.map((x,i) => (
{x}
))}
TRENDING SEARCHES
{sdata.trend.map((x,i) => (
{x}
))}
)} {checkstate('result')==1 && (
)}
); } ================================================ FILE: src/containers/apps/google/news.json ================================================ { "articles": [{ "source": { "id": null, "name": "NDTV News" }, "author": "NDTV Sports Desk", "title": "IPL 2022, SRH vs KKR Live Score: Kane Williamson, Rahul Tripathi Rebuild For SRH After Early Wicket - NDTV Sports", "description": "IPL 2022, SRH vs KKR Live Updates: Chasing a target of 176, SunRisers Hyderabad (SRH) lost both of their openers in the powerplay against Kolkata Knight Riders (KKR) in match 25 of IPL 2022 at the Brabourne Stadium in Mumbai.", "url": "https://sports.ndtv.com/ipl-2022/ipl-2022-srh-vs-kkr-live-score-updates-2891194", "urlToImage": "https://c.ndtvimg.com/2022-04/f6386o_kkr-bcci_625x300_15_April_22.jpg?im=FeatureCrop,algorithm=dnn,width=1200,height=675", "publishedAt": "2022-04-15T16:31:54Z", "content": "IPL 2022, SRH vs KKR Live Updates: Chasing a target of 176, SunRisers Hyderabad (SRH) lost both of their openers in the powerplay against Kolkata Knight Riders (KKR) in match 25 of IPL 2022 at the Br… [+1230 chars]" }, { "source": { "id": null, "name": "NDTV News" }, "author": null, "title": "WHO Monitors Hepatitis Of Unknown Origin In UK Children - NDTV", "description": "The World Health Organization said Friday it was monitoring cases of hepatitis of unknown origin in dozens of children in Britain, some of whom required a liver transplant.", "url": "https://www.ndtv.com/world-news/who-monitors-hepatitis-of-unknown-origin-in-uk-children-2891847", "urlToImage": "https://i.ndtvimg.com/i/2017-09/hepatitis-action-plan-to-come-in-october_650x400_41505196638.jpg", "publishedAt": "2022-04-15T16:17:52Z", "content": "The infection mainly affected children aged under 10.\r\nLondon, United Kingdom: The World Health Organization said Friday it was monitoring cases of hepatitis of unknown origin in dozens of children i… [+1589 chars]" }, { "source": { "id": null, "name": "NDTV News" }, "author": null, "title": "Karnataka Minister KS Eshwarappa, Named In Suicide Case, Resigns: Report - NDTV", "description": "After a meeting with Chief Minister Basavaraj Bommai at his residence in Bengaluru, Mr Eshwarappa submitted his resignation.", "url": "https://www.ndtv.com/india-news/karnataka-minister-ks-eshwarappa-named-in-suicide-case-resigns-2891676", "urlToImage": "https://c.ndtvimg.com/2022-04/88a73te8_ks-eswarappa-with-basavaraj-bommai-650_650x400_15_April_22.jpg", "publishedAt": "2022-04-15T15:46:11Z", "content": "\"I am also confident that I will come out clean,\" KS Eshwarappa said before resigning.\r\nBengaluru: BJP stalwart and Karnataka minister KS Eshwarappa, caught in a huge controversy following allegation… [+3084 chars]" }, { "source": { "id": null, "name": "The Indian Express" }, "author": "Express News Service", "title": "At Delhi BJP office, 8 accused of attacking Kejriwal residence are garlanded - The Indian Express", "description": "AAP MLA Atishi lashed out at the BJP, saying they had sent a message to its workers across the country that they will be felicitated if they indulge in “hooliganism and vandalism”.", "url": "https://indianexpress.com/article/cities/delhi/delhi-bjp-office-8-accused-attacking-kejriwal-residence-are-garlanded-7871100/", "urlToImage": "https://images.indianexpress.com/2022/04/BJYM.jpg", "publishedAt": "2022-04-15T15:35:42Z", "content": "Eight men who were arrested and later released on bail in connection with the attack on Chief Minister Arvind Kejriwals residence were on Thursday felicitated at the Delhi BJP office by the partys st… [+2134 chars]" }, { "source": { "id": null, "name": "The Indian Express" }, "author": "Man Aman Singh Chhina", "title": "Explained: Why is the Black Sea crucial to Russia, and the loss of the ‘Moskva’ a significant blow - The Indian Express", "description": "The sinking of the warship Moskva, the 600-foot, 12,500-tonne flagship of the Russian Black Sea Fleet — whether due to a Ukrainian missile strike or, as Russia claims, a fire on board — is a serious setback for Russia.", "url": "https://indianexpress.com/article/explained/everyday-explainers/explained-russia-warship-moksva-black-sea-7870946/", "urlToImage": "https://images.indianexpress.com/2022/04/Russia-warship-ex.jpg", "publishedAt": "2022-04-15T15:35:22Z", "content": "The sinking of the warship Moskva, the 600-foot, 12,500-tonne flagship of the Russian Black Sea Fleet whether due to a Ukrainian missile strike or, as Russia claims, a fire on board is a serious setb… [+6665 chars]" }, { "source": { "id": null, "name": "The Indian Express" }, "author": "Entertainment Desk", "title": "KGF 2 box office collection day 1: Yash-starrer registers biggest-ever opening day in Hindi belt, earns Rs 134.5 crore in India - The Indian Express", "description": "Yash's KGF 2 has received a massive opening across south Indian states. While the film dominated the box office in Karnataka, it also received a huge launch in Tamil Nadu, Kerala and the Telugu states.", "url": "https://indianexpress.com/article/entertainment/regional/kgf-chapter-2-box-office-day-1-yash-starrer-creates-history-7870297/", "urlToImage": "https://images.indianexpress.com/2022/04/kgf-box-office.jpg", "publishedAt": "2022-04-15T15:09:24Z", "content": "Kannada movie KGF: Chapter 2, starring Yash in the lead role, has stormed the Indian box office. Thanks to the huge demand created by the film’s first part in 2018, the sequel reaped the benefit by o… [+2922 chars]" }, { "source": { "id": null, "name": "PINKVILLA" }, "author": "Pinkvilla Desk", "title": "Ranbir Kapoor-Alia Bhatt Wedding: Actress skipped chooda ceremony due to her Hollywood debut; Reports - PINKVILLA", "description": "Alia Bhatt reportedly didn2019t do the traditional chooda ceremony due to her big Hollywood debut with Gal Gadot.", "url": "https://www.pinkvilla.com/entertainment/news/ranbir-kapoor-alia-bhatt-wedding-actress-skipped-chooda-ceremony-due-her-hollywood-debut-reports-1068918", "urlToImage": "https://www.pinkvilla.com/files/styles/fbimagesection/public/ranbir_alia_social_0.jpg?itok=RiRlyEBC", "publishedAt": "2022-04-15T14:21:48Z", "content": "Tinsel town's favourite couple, Alia Bhatt and Ranbir Kapoor got married on April 14th at the Yeh Jawaani Hai Deewani actor's Vastu residence in Bandra, Mumbai after dating for five years. The couple… [+1423 chars]" }, { "source": { "id": null, "name": "NDTV News" }, "author": null, "title": "India Receives S-400 Overhauled Engines, Spares From Russia: Report - NDTV", "description": "Amid the ongoing war between Russia and Ukraine, India has received the simulators and other equipment from Moscow for the training squadron of the S-400 Triumf air defence missile system.", "url": "https://www.ndtv.com/india-news/india-russia-s-400-deal-india-russia-defence-deal-russia-ukraine-war-india-recieves-s-400-overhauled-engines-spares-from-russia-report-2891267", "urlToImage": "https://i.ndtvimg.com/i/2016-10/s-400-missiles-reuters_650x400_51476365973.jpg", "publishedAt": "2022-04-15T13:02:56Z", "content": "India-Russia S-400 Missile System: The supplies from Russia included overhauled fighter engines.\r\nNew Delhi: Amid the ongoing war between Russia and Ukraine, India has received the simulators and oth… [+2188 chars]" }, { "source": { "id": null, "name": "Livemint" }, "author": "Livemint", "title": "Tata Sons Effects Major Reshuffle In Air India's Top Management | Mint - Mint", "description": "Aggarwal, who is also Senior Vice President at Tata Sons, replaces Air India veteran Meenakshi Malik, while Tripathi, who was Vice President of Human Resources at Tata Steel from 2012 to 2021, succeeds AI's Amrita Sharan.", "url": "https://www.livemint.com/companies/news/tata-sons-effects-major-reshuffle-in-air-india-s-top-management-11650026050123.html", "urlToImage": "https://images.livemint.com/img/2022/04/15/600x338/Air_India_1650026093350_1650026093656.jpg", "publishedAt": "2022-04-15T12:36:06Z", "content": "Tata Sons has effected a major reshuffle in the top management of Air India, news agency PTI reported on Friday.\r\nThe group chairman N Chandrasekaran issued the order, according to which, Air India v… [+1836 chars]" }, { "source": { "id": "the-times-of-india", "name": "The Times of India" }, "author": "Aishwarya Dharni", "title": "Indian-Origin NASA Astronaut Raja Chari All Set To Return To Earth After Six Months In Space - Indiatimes.com", "description": "After spending six months in microgravity, astronaut Raja Chari is all set to return home. The Crew-3 astronauts who docked to the International Space Station in November last year will return to planet Earth later this month. NASA astronauts Raja Chari, Tom …", "url": "https://www.indiatimes.com/trending/social-relevance/indian-american-astronaut-raja-chari-to-return-home-567090.html", "urlToImage": "https://im.indiatimes.in/content/2022/Apr/raja-chari_6259659bac146.png", "publishedAt": "2022-04-15T12:25:40Z", "content": "After spending six months in microgravity, astronaut Raja Chari is all set to return home. The Crew-3 astronauts who docked to the International Space Station in November last year will return to pla… [+2049 chars]" }, { "source": { "id": null, "name": "Livemint" }, "author": "Pooja Sitaram Jaiswar", "title": "Rakesh Jhunjhunwala Raises Stake In This Infra Stock During Q4 | Mint - Mint", "description": "The latest shareholding data of NCC on exchanges showed that Rekha Jhunjhunwala's holding in the company now stands at 1.6 crore equity shares or 2.62% as of March 2022.", "url": "https://www.livemint.com/market/stock-market-news/rakesh-jhunjhunwala-raises-stake-in-this-infra-stock-during-q4-11650024996162.html", "urlToImage": "https://images.livemint.com/img/2022/04/15/600x338/5244bf12-7a11-11ec-9eea-9c1e2652c262_1644643836353_1650025079879.jpg", "publishedAt": "2022-04-15T12:22:15Z", "content": "Ace investor Rakesh Jhunjhunwala has increased shareholding in the construction and engineering company, NCC Limited, through his wife's portfolio Rekha Jhunjhunwala. The investor who is referred to … [+3686 chars]" }, { "source": { "id": null, "name": "NDTV News" }, "author": null, "title": "Russia Pledges More Missile Attacks On Kyiv After Moskva Flagship Sinks - NDTV", "description": "Moscow warned Friday it would step up missile attacks on Kyiv in response to what it said were sorties across the border, the day after its Black Sea naval flagship sank.", "url": "https://www.ndtv.com/world-news/russia-ukraine-war-kyiv-missile-attacks-russia-pledges-more-missile-attacks-on-kyiv-after-moskva-flagship-sinks-2890987", "urlToImage": "https://c.ndtvimg.com/2022-03/2171rpvg_shelling-podil-districtkyivreuters-_625x300_21_March_22.jpg", "publishedAt": "2022-04-15T11:33:21Z", "content": "Russia-Ukraine War: Russia attacked a factory near Kyiv where Neptune missiles were manufactured. (File)\r\nKyiv: Moscow warned Friday it would step up missile attacks on Kyiv in response to what it sa… [+5437 chars]" }, { "source": { "id": "the-times-of-india", "name": "The Times of India" }, "author": "PTI", "title": "If harmed, India will not spare anyone, says Rajnath Singh in a strong message to China - Economic Times", "description": "Singh, in his address to the Indian-American community in San Francisco, also sent a subtle message to the US that New Delhi does not believe in a diplomacy of zero-sum game and its relationship with one country cannot be at the expense of the other.", "url": "https://economictimes.indiatimes.com/news/defence/if-harmed-india-will-not-spare-anyone-says-rajnath-singh-in-a-strong-message-to-china/articleshow/90863870.cms", "urlToImage": "https://img.etimg.com/thumb/msid-90863903,width-1070,height-580,imgsize-27366,overlay-etdefence/photo.jpg", "publishedAt": "2022-04-15T11:32:00Z", "content": "In a strong message to China, Defence Minister Rajnath Singh has said that if harmed, India will not spare anyone, as he asserted that India under Prime Minister Narendra Modi has emerged as a powerf… [+5028 chars]" }, { "source": { "id": null, "name": "India Today" }, "author": null, "title": "Closing schools would be last option, says Manish Sisodia amid rising Covid cases in Delhi - India Today", "description": "The Delhi Directorate of Education issued an advisory for students on Friday, following reports of rising Covid cases. \"Partial closure of schools would be implemented if required,\" said deputy CM Manish Sisodia.", "url": "https://www.indiatoday.in/coronavirus-outbreak/story/closing-schools-would-be-last-option-says-manish-sisodia-amid-reports-of-rising-covid-cases-in-delhi-1937939-2022-04-15", "urlToImage": "https://akm-img-a-in.tosshub.com/indiatoday/images/story/202204/Delhi_students_Covid_PTI-647x363.jpeg?gAOfpQ3bwoIzw92GXQJmhvLSnALaSyXL", "publishedAt": "2022-04-15T11:18:31Z", "content": "As Covid cases are again on the rise, the Delhi Directorate of Education issued guidelines for students on Friday. \"Closing schools would be the last option. Partial closure would be implemented if r… [+1557 chars]" }, { "source": { "id": null, "name": "Iplt20.com" }, "author": null, "title": "Deepak Chahar ruled out of TATA IPL 2022, Harshit Rana joins KKR as a replacement for Rasikh Salam - IPLT20.com", "description": "Deepak Chahar ruled out of TATA IPL 2022, Harshit Rana joins KKR as a replacement for Rasikh Salam", "url": "https://www.iplt20.com/news/3764/deepak-chahar-ruled-out-of-tata-ipl-2022-harshit-rana-joins-kkr-as-a-replacement-for-rasikh-salam", "urlToImage": "https://assets.iplt20.com/bcci/articles/1650020545_aa.jpeg", "publishedAt": "2022-04-15T11:08:49Z", "content": null }, { "source": { "id": null, "name": "Pragativadi.com" }, "author": "Pradeep Sahoo", "title": "iQOO Z6 Pro 5G India Launch Set To April 27; Snapdragon 778G 5G Chip & 66W Fast Charging Confirmed - Pragativadi", "description": "New Delhi: iQoo Z6 Pro 5G India launch date has been set for April 27 as the Chinese smartphone manufacturer announced. The handset will also feature the company’s VC liquid cooling technology and is claimed to offer the highest AnTuTu benchmark scor", "url": "https://pragativadi.com/iqoo-z6-pro-5g-india-launch-set-to-april-27-snapdragon-778g-5g-chip-66w-fast-charging-confirmed/", "urlToImage": "https://pragativadi.com/wp-content/uploads/2022/04/aaa.jpg", "publishedAt": "2022-04-15T11:04:21Z", "content": "New Delhi: iQoo Z6 Pro 5G India launch date has been set for April 27 as the Chinese smartphone manufacturer announced. The handset will also feature the companys VC liquid cooling technology and is … [+1414 chars]" }, { "source": { "id": "the-times-of-india", "name": "The Times of India" }, "author": "TIMESOFINDIA.COM", "title": "Twitter shareholder Saudi Prince rejects Elon Musk's offer; Tesla chief reacts - Times of India", "description": "International Business News: NEW DELHI: Saudi Prince Alwaleed bin Talal, who owns a major stake in social media platform Twitter, rejected Elon Musk's offer to acquire 100 per cen.", "url": "https://timesofindia.indiatimes.com/business/international-business/twitter-shareholder-saudi-prince-rejects-elon-musks-offer-tesla-chief-reacts/articleshow/90862756.cms", "urlToImage": "https://static.toiimg.com/thumb/msid-90862992,width-1070,height-580,imgsize-24050,resizemode-75,overlay-toi_sw,pt-32,y_pad-40/photo.jpg", "publishedAt": "2022-04-15T10:39:00Z", "content": "I don't believe that the proposed offer by @elonmusk ($54.20) comes close to the intrinsic value of @Twitter given https://t.co/PImKaphxuS\r\n— (@Alwaleed_Talal) 1649947559000" }, { "source": { "id": null, "name": "India.com" }, "author": "India.com Lifestyle Staff", "title": "7 Reasons Why You are Gaining Belly Fat and Tips to Reduce it - India.com", "description": "Make some changes to your lifestyle to help reverse the scale and feel better.", "url": "https://www.india.com/health/weight-loss-tips-7-reasons-why-you-gaining-belly-fat-and-tips-to-reduce-it-5339525/", "urlToImage": "https://static.india.com/wp-content/uploads/2022/04/pexels-andres-ayrton-6551059.jpg", "publishedAt": "2022-04-15T10:19:53Z", "content": "Has your waistline expanded since the pandemic began? Don’t worry, you are not alone. A lifestyle that confines you inside the four walls of a house, with limited movement, is bound to add inches to … [+4334 chars]" }, { "source": { "id": null, "name": "Hindustan Times" }, "author": "HT Tech", "title": "Top 5 Windows 11 features: If you are not using them, you’re missing out - HT Tech", "description": "Top 5 Windows 11 features: Windows 11 brought a wide range of changes and new additions, but these are arguably the best of them. Have you checked all of these out?", "url": "https://tech.hindustantimes.com/tech/news/top-5-windows-11-features-if-you-are-not-using-them-you-re-missing-out-71650017645967.html", "urlToImage": "https://images.hindustantimes.com/tech/img/2022/04/15/1600x900/Windows_11_(7)_1633403699297_1650017692498.jpg", "publishedAt": "2022-04-15T10:17:13Z", "content": "Top 5 Windows 11 features: Microsoft started rolling out Windows 11 starting October 2021 and promised a completely redesigned user-interface, new productivity tools and cool features that create a s… [+2581 chars]" }, { "source": { "id": null, "name": "News18" }, "author": "Buzz Staff", "title": "'Alien Footprints': NASA Image of Martian Crater is a Treat for Astronomy Nerds - News18", "description": "NASA has released a new image of a crater on Mars.", "url": "https://www.news18.com/news/buzz/alien-footprints-nasa-image-of-martian-crater-is-a-treat-for-astronomy-nerds-4988995.html", "urlToImage": "https://images.news18.com/ibnlive/uploads/2022/04/martian-crater--165001301416x9.jpg", "publishedAt": "2022-04-15T09:14:40Z", "content": "NASA recently shared an image on its Instagram handle leaving the netizens completely stunned. The space agency has released a new image of a Mars crater. In the caption, NASA wrote, “Youre looking a… [+2101 chars]" }, { "source": { "id": null, "name": "The Indian Express" }, "author": "Sports Desk", "title": "Joe Root steps down as England’s Test team captain - The Indian Express", "description": "Root was appointed as Sir Alastair Cook's successor in 2017, and holds the record for the most number of matches and wins as England Test captain.", "url": "https://indianexpress.com/article/sports/cricket/joe-root-resigns-as-englands-test-team-captain-7870558/", "urlToImage": "https://images.indianexpress.com/2022/03/joe-root.jpg", "publishedAt": "2022-04-15T08:28:50Z", "content": "Joe Root has stepped down as England Test captain following a run of poor results capped by dispiriting tours of Australia and the Caribbean.The 31-year-old was appointed as Alastair Cook’s successor… [+3209 chars]" }, { "source": { "id": null, "name": "The Indian Express" }, "author": "Shubhra Gupta", "title": "Mai review: Sakshi Tanwar shines in Netflix series - The Indian Express", "description": "Mai review: Despite the elements that stretch our credulity, Sakshi Tanwar manages to hold our attention.", "url": "https://indianexpress.com/article/entertainment/web-series/mai-review-sakshi-tanwar-raima-sen-7870464/", "urlToImage": "https://images.indianexpress.com/2022/04/Mai-review-120.jpg", "publishedAt": "2022-04-15T07:48:09Z", "content": "Mai cast: Sakshi Tanwar, Vivek Mushran, Wamiqa Gabbi, Raima Sen, Prashant Narayanan, Ankur Ratan, Anant Vidhaat, Vaibhav Raj Gupta, Seema PahwaMai directors: Anshai Lal, Atul MongiaMai pulls off a to… [+4294 chars]" }, { "source": { "id": null, "name": "NDTV News" }, "author": null, "title": "Moon Dust Collected By Neil Armstrong During Apollo 11 Mission Sells For $500,000 At Auction - NDTV", "description": "A minuscule amount of lunar dust collected by Neil Armstrong during Apollo 11, the mission that first put men on the Moon, has been sold for $504,375 at an auction on Wednesday.", "url": "https://www.ndtv.com/world-news/moon-dust-collected-by-neil-armstrong-during-apollo-11-mission-sells-for-500-000-at-auction-2890273", "urlToImage": "https://c.ndtvimg.com/2022-04/sa75jpj_moon-650_625x300_15_April_22.jpg", "publishedAt": "2022-04-15T06:54:03Z", "content": "NASA even went to court to fight for the ownership of the lunar dust.\r\nA minuscule amount of lunar dust collected by Neil Armstrong during the Apollo 11 mission, that first put men on the Moon, has b… [+2060 chars]" }, { "source": { "id": null, "name": "ESPN India" }, "author": "Sam Marsden", "title": "Furious Barcelona seek answers after 20,000 Frankfurt fans flood Camp Nou - ESPN India", "description": "Barcelona's coach and players want to know how at least 20,000 Eintracht Frankfurt fans gained access to the home end at Camp Nou.", "url": "https://www.espn.in/football/story/4642402/furious-barcelona-seek-answers-after-20,000-frankfurt-fans-flood-camp-nou", "urlToImage": "https://a3.espncdn.com/combiner/i?img=%2Fphoto%2F2022%2F0414%2Fr999905_1296x729_16%2D9.jpg", "publishedAt": "2022-04-15T06:45:36Z", "content": "Barcelona coach Xavi Hernandez says his players want to know how at least 20,000 Eintracht Frankfurt fans gained access to the home end at Camp Nou on Thursday as his side were knocked out of the Eur… [+3569 chars]" }, { "source": { "id": null, "name": "The Indian Express" }, "author": "Express News Service", "title": "Delhi: Cops remove saffron flags, banners put up by Hindu Sena near JNU campus - The Indian Express", "description": "Reacting to the police action, national president of Hindu Sena Vishnu Gupta said that by removing the flags, the police have disrespected the Constitution.", "url": "https://indianexpress.com/article/delhi/delhi-cops-remove-saffron-flags-banners-put-up-by-hindu-sena-near-jnu-campus-7870385/", "urlToImage": "https://images.indianexpress.com/2022/04/IMG-20220415-WA0017.jpg", "publishedAt": "2022-04-15T06:23:54Z", "content": "In protest against the violence that broke out at the Jawaharlal Nehru University (JNU) between two groups of students on Ram Navami, members of the Hindu Sena put up saffron flags and banners readin… [+2160 chars]" }, { "source": { "id": "the-times-of-india", "name": "The Times of India" }, "author": "PTI", "title": "Egypt approves India as wheat supplier: Piyush Goyal - Economic Times", "description": "“Indian farmers are feeding the world. Egypt approves India as a wheat supplier. Modi Govt. steps in as the world looks for reliable alternate sources for steady food supply. Our farmers have ensured our granaries overflow and we are ready to serve the world,…", "url": "https://economictimes.indiatimes.com/news/economy/foreign-trade/egypt-approves-india-as-wheat-supplier-piyush-goyal/articleshow/90858683.cms", "urlToImage": "https://img.etimg.com/thumb/msid-90858680,width-1070,height-580,imgsize-2041580,overlay-economictimes/photo.jpg", "publishedAt": "2022-04-15T05:21:00Z", "content": "Commerce and Industry Minister Piyush Goyal on Friday said Egypt, which is one of the largest importers of wheat from Ukraine and Russia, has approved India as a wheat supplier.\r\nThere is a sharp dec… [+2046 chars]" }, { "source": { "id": null, "name": "NDTV News" }, "author": null, "title": "China Hesitates On Bailing Out \"Sinking Ships\" Sri Lanka, Pakistan - NDTV", "description": "Over the past few years, the U.S. has accused China of using \"debt diplomacy\" to make developing nations across the world more dependent on Beijing.", "url": "https://www.ndtv.com/world-news/china-hesitates-on-bailing-out-sinking-ships-sri-lanka-pakistan-2887151", "urlToImage": "https://c.ndtvimg.com/2022-04/ui5tc3fg_sri-lanka-protestsbloomberg-_625x300_14_April_22.jpg", "publishedAt": "2022-04-15T04:23:00Z", "content": "Sri Lanka President Gotabaya Rajapaksa is facing pressure from protesters to step down.\r\nOver the past few years, the U.S. has accused China of using \"debt diplomacy\" to make developing nations acros… [+6157 chars]" }, { "source": { "id": null, "name": "The Indian Express" }, "author": "Lifestyle Desk", "title": "Good Friday 2022: Inspirational Quotes, Images, and Messages of Jesus Christ - The Indian Express", "description": "Good Friday 2022 Images, Quotes, Messages, Status, Jesus Christ Inspirational Quotes: It is held after the Christian holy day of Maundy Thursday, which commemorates the Last Supper of Jesus Christ, and on a Friday before Easter Sunday.", "url": "https://indianexpress.com/article/lifestyle/life-style/good-friday-2022-inspirational-quotes-images-and-messages-of-jesus-christ-7867753/", "urlToImage": "https://images.indianexpress.com/2022/04/good-friday-1200-1.jpg", "publishedAt": "2022-04-15T04:00:36Z", "content": "Good Friday 2022 Quotes: Good Friday, a Christian holy day, is observed the Friday before Easter Sunday to commemorate Jesus’ crucifixion. Christians believe that He sacrificed Himself to purge the w… [+1638 chars]" }, { "source": { "id": null, "name": "Moneycontrol" }, "author": "Nikhil Walavalkar", "title": "82 percent of large-cap schemes underperform benchmarks over 5 years: SPIVA report - Moneycontrol", "description": "The numbers for 2021 look better than the scorecard for 2020. The study showed 50 percent of the large cap equity funds underperformed the S&P BSE 100 index in 2021 compared with 80 percent in 2020.", "url": "https://www.moneycontrol.com/news/business/personal-finance/82-percent-of-large-cap-schemes-underperform-benchmarks-over-5-years-spiva-report-8361441.html", "urlToImage": "https://images.moneycontrol.com/static-mcnews/2022/03/MUTUAL-FUNDS-770x431.png", "publishedAt": "2022-04-15T02:44:47Z", "content": "Its getting tougher for actively managed equity funds to outperform their benchmark indices. Many actively managed equity mutual fund schemes have underperformed the indices, according to the S&P… [+4140 chars]" }, { "source": { "id": null, "name": "ThePrint" }, "author": null, "title": "‘Immersive’ look at 1998 Pokhran test, Emergency — new museum shows highs & lows of 13 past PMs - ThePrint", "description": "PM Modi inaugurated Rs 271 crore the Pradhan Mantri Sangrahalaya — Museum of Prime Ministers — Thursday. Exhibits range from civil nuclear agreement and Pokhran, to Bofors and Emergency.", "url": "https://theprint.in/india/immersive-look-at-1998-pokhran-test-emergency-new-museum-shows-highs-lows-of-13-past-pms/916716/", "urlToImage": "https://static.theprint.in/wp-content/uploads/2022/04/museum-1.jpg", "publishedAt": "2022-04-15T02:09:03Z", "content": "New Delhi: The new Rs 271 crore Pradhan Mantri Sangrahalaya (Museum of Prime Ministers), inaugurated by Prime Minister Narendra Modi Thursday, highlights the achievements as well as the controversies… [+4910 chars]" }, { "source": { "id": null, "name": "Hindustan Times" }, "author": "HT Entertainment Desk", "title": "Lock Upp: Poonam Pandey says her family was thrown out of a residential society - Hindustan Times", "description": "Lock Upp day 46 written update: Poonam Pandey recalled one of her tough times on the show. On the other hand, Payal Rohatgi fought with Saisha Shinde while Mandana Karimi got into a fight with Anjali Arora. | Web Series", "url": "https://www.hindustantimes.com/entertainment/web-series/lock-upp-day-46-written-update-poonam-pandey-recalls-the-time-her-family-was-thrown-out-of-a-residential-society-101649981922710.html", "urlToImage": "https://images.hindustantimes.com/img/2022/04/15/1600x900/poonam_Pandey_crying_1649984064242_1649984064498.JPG", "publishedAt": "2022-04-15T01:16:50Z", "content": "On Thursday's episode of the ongoing reality show Lock Upp, Poonam Pandey was seen crying as she recalled the time when she could not get a house for herself, after stepping out of a hospital. Poonam… [+1906 chars]" }, { "source": { "id": null, "name": "Thewire.in" }, "author": null, "title": "With Small Uptick in Cases, Should India Be Worried About a Fourth COVID Wave? - The Wire", "description": "Health researcher Anurag Agrawal says with almost everybody having been infected once and a large chunk vaccinated, the country should not be too concerned about the recent rise in cases.", "url": "https://thewire.in/health/with-small-uptick-in-cases-should-india-be-worried-about-a-fourth-covid-wave", "urlToImage": "https://cdn.thewire.in/wp-content/uploads/2022/04/14182312/2022_4img10_Apr_2022_PTI04_10_2022_000191B-800x400.jpg", "publishedAt": "2022-04-14T13:10:45Z", "content": "This article was originally published on The Wire Science, our website dedicated to science, health and environment reportage and analysis. Follow, read and share.\r\nNew Delhi: There is currently a sm… [+8054 chars]" }, { "source": { "id": "cnn", "name": "CNN" }, "author": "By Travis Caldwell, Helen Regan, Sana Noor Haq, Jack Bantock, Laura Smith-Spark, Adrienne Vogt and Melissa Macaya, CNN", "title": "Russia invades Ukraine: Live updates - CNN", "description": "Russian preparations continue in the east for an offensive operation, training additional units and gathering aviation forces, according to Ukraine's armed forces. Follow here for live news updates.", "url": "https://www.cnn.com/europe/live-news/ukraine-russia-putin-news-04-15-22/index.html", "urlToImage": "https://cdn.cnn.com/cnnnext/dam/assets/220414001151-mariupol-ukraine-burned-building-rivers-0412-super-tease.jpg", "publishedAt": "2022-04-15T16:13:00Z", "content": "Ukrainian President Volodymyr Zelensky told CNN Friday that \"all of the countries of the world\" should be prepared for the possibility that Russian President Vladimir Putin could use tactical nuclear… [+2268 chars]" }, { "source": { "id": "the-washington-post", "name": "The Washington Post" }, "author": "Steven Zeitchik", "title": "A Ukrainian refugee highlights the hope and heartbreak this Passover season - The Washington Post", "description": "Dr. Jacob Gaissinovitch and his family first fled their home in Donetsk in 2014 when war arrived. Now they've fled Dnipro.", "url": "https://www.washingtonpost.com/world/2022/04/15/ukraine-mohel-circumcision-refugee/", "urlToImage": "https://www.washingtonpost.com/wp-apps/imrs.php?src=https://arc-anglerfish-washpost-prod-washpost.s3.amazonaws.com/public/RM7Z2R7JTBDJ7HAYHHVPAJAEQ4.jpg&w=1440", "publishedAt": "2022-04-15T16:00:59Z", "content": "Placeholder while article actions load\r\nHe has circumcised males aged eight days to 80 years. He has taken out his kit in synagogues and hospitals, made nervous mothers feel calm and geriatric men fe… [+12501 chars]" }, { "source": { "id": null, "name": "The Guardian" }, "author": "Nina Lakhani", "title": "‘That was my beloved son’: family of Patrick Lyoya say police killed their son in an ‘execution’ - The Guardian", "description": "The family’s lawyer says Grand Rapid police officer broke protocol by using the Taser too close to Lyoya", "url": "https://amp.theguardian.com/us-news/2022/apr/15/patrick-lyoya-shooting-family-police-killed-execution", "urlToImage": null, "publishedAt": "2022-04-15T15:08:00Z", "content": "US policingThe familys lawyer says Grand Rapid police officer broke protocol by using the Taser too close to Lyoya\r\nFri 15 Apr 2022 16.08 BST\r\nThe grief-stricken parents of the Black man shot in the … [+5391 chars]" }, { "source": { "id": null, "name": "Gizmodo.com" }, "author": "Phillip Tracy", "title": "M2 Macs Are Coming to Make Your Brand New Laptop Obsolete - Gizmodo", "description": "Developer logs point to 9 M2 Mac models that are currently in testing.", "url": "https://gizmodo.com/m2-macbook-air-macbook-pro-mac-mini-coming-1848798141", "urlToImage": "https://i.kinja-img.com/gawker-media/image/upload/c_fill,f_auto,fl_progressive,g_center,h_675,pg_1,q_80,w_1200/82e18730953f1c53b02dc5864716636a.jpg", "publishedAt": "2022-04-15T14:31:44Z", "content": "Apple is readying its next fleet of laptops and desktops as it transitions into the second phase of Mac products powered by custom silicon, a new report from Bloomberg says.\r\nThe company is reportedl… [+3448 chars]" }, { "source": { "id": "the-wall-street-journal", "name": "The Wall Street Journal" }, "author": "Andrew Restuccia, Andrew Duehren", "title": "Biden to Nominate Michael Barr as Top Fed Banking Regulator - The Wall Street Journal", "description": "If confirmed, former Obama Treasury official would oversee the largest U.S. financial firms", "url": "https://www.wsj.com/articles/biden-to-nominate-michael-barr-as-top-fed-banking-regulator-11650013201", "urlToImage": "https://images.wsj.net/im-524842/social", "publishedAt": "2022-04-15T14:26:00Z", "content": "WASHINGTONPresident Biden will nominate Michael Barr, a former Treasury Department official, to serve as the Federal Reserves top banking regulator, the White House said, after Mr. Bidens first pick … [+295 chars]" }, { "source": { "id": "associated-press", "name": "Associated Press" }, "author": "Tom Krisher", "title": "Modest-income buyers being priced out of new-vehicle market - The Associated Press", "description": "DETROIT (AP) — Two years after the pandemic tore through the economy, America’s auto market looks something like this: Prices are drastically up. Supply is drastically down. And gasoline costs drastically more.", "url": "https://apnews.com/7a001990f2d63bf6b3fa0188e37feb12", "urlToImage": "https://storage.googleapis.com/afs-prod/media/9c9b5edf18e44fc18bbcbcf5061a2a5c/3000.jpeg", "publishedAt": "2022-04-15T14:17:50Z", "content": "DETROIT (AP) Two years after the pandemic tore through the economy, Americas auto market looks something like this: Prices are drastically up. Supply is drastically down. And gasoline costs drastical… [+5512 chars]" }, { "source": { "id": null, "name": "Salt Lake Tribune" }, "author": null, "title": "'Please tell me what I should be saying.' Text messages show Sen. Mike Lee assisting Trump efforts to overturn 2020 election - Salt Lake Tribune", "description": "Newly released text messages between Sen. Mike Lee and former White House chief of staff Mark Meadows show Lee's involvement in the effort to overturn the 2020 election results. Lee apparently was aware of a scheme to have states send competing slates of elec…", "url": "https://www.sltrib.com/news/politics/2022/04/15/please-tell-me-what-i/", "urlToImage": "https://www.sltrib.com/resizer/magQ0P9avDhcS8oCswvTqe0CLf8=/1200x630/cloudfront-us-east-1.images.arcpublishing.com/sltrib/XMRYVL4Q6NFCDH36TY5AHDULVA.jpg", "publishedAt": "2022-04-15T14:17:08Z", "content": "Newly released text messages between Sen. Mike Lee and former White House chief of staff Mark Meadows show Lee was advising and assisting former President Donald Trumps efforts to overturn the result… [+8474 chars]" }, { "source": { "id": null, "name": "New York Times" }, "author": "Patrick Kingsley, Raja Abdulrahim", "title": "Jerusalem Calms Following Israeli-Palestinian Clashes: Latest News and Live Updates - The New York Times", "description": "Violence broke out at the Aqsa Mosque compound, known to Jews as the Temple Mount, in the morning on the first day of a rare convergence of Ramadan, Easter and Passover.", "url": "https://www.nytimes.com/live/2022/04/15/world/jerusalem-al-aqsa-mosque", "urlToImage": "https://static01.nyt.com/images/2022/04/15/world/15jerusalem-briefing-promo02/merlin_205512273_76eafc23-06cc-4997-b821-3b61466d7222-facebookJumbo.jpg", "publishedAt": "2022-04-15T14:13:37Z", "content": "Palestinians and the Israeli police clashing at the Aqsa Mosque compound in Jerusalem on Friday.Credit...Mahmoud Illean/Associated Press\r\nJERUSALEM The midday Muslim prayers at one of Jerusalems holi… [+4188 chars]" }, { "source": { "id": null, "name": "NBCSports.com" }, "author": "Michael David Smith", "title": "Colts sign Stephon Gilmore - NBC Sports", "description": "The top available free agent has found his next team.Veteran cornerback Stephon Gilmore is signing with the Colts.Gilmore was the No. 18 player on our list of the NFL’s Top 100 free agents, and the highest-ranked player who wasn’t already spoken for. (Tyrann …", "url": "https://profootballtalk.nbcsports.com/2022/04/15/colts-sign-stephon-gilmore/", "urlToImage": "https://profootballtalk.nbcsports.com/wp-content/uploads/sites/25/2022/04/GettyImages-1277236370-e1650031375609.jpg", "publishedAt": "2022-04-15T14:03:00Z", "content": "The top available free agent has found his next team.\r\nVeteran cornerback Stephon Gilmore is signing with the Colts.\r\nGilmore was the No. 18 player on our list of the NFLs Top 100 free agents, and th… [+629 chars]" }, { "source": { "id": "reuters", "name": "Reuters" }, "author": null, "title": "Ukrainians hang on at Mariupol steel plant - Reuters", "description": "Explosions rumbled and smoke rose this week from a steel making district in besieged Mariupol where dwindling Ukrainian forces are holed up as Russia tries to take full control of its biggest city yet.", "url": "https://www.reuters.com/world/europe/fortress-city-ukrainians-cling-steel-plant-mariupol-2022-04-15/", "urlToImage": "https://www.reuters.com/resizer/rw9Il5SxtxE7Dovkg1WDcIaOCSM=/1200x628/smart/filters:quality(80)/cloudfront-us-east-2.images.arcpublishing.com/reuters/NGTFN2NGNRIEJGGLDLEY33B2IU.jpg", "publishedAt": "2022-04-15T13:45:00Z", "content": "April 15 (Reuters) - Explosions rumbled and smoke rose this week from a steel making district in besieged Mariupol where dwindling Ukrainian forces are holed up as Russia tries to take full control o… [+5199 chars]" }, { "source": { "id": null, "name": "Behind the Steel Curtain" }, "author": "Andrew_Wilbar", "title": "2022 NFL Mock Draft 4.0: 4 rounds, 7 trades, and a new Steelers QB - Behind The Steel Curtain", "description": "The Steelers grab a quarterback in round 1 of my latest four-round mock draft.", "url": "https://www.behindthesteelcurtain.com/2022/4/15/23025815/2022-nfl-mock-draft-4-0-steelers-qb-malik-willis-logan-hall-tyquan-thornton-isaac-taylor-stuart-news", "urlToImage": "https://cdn.vox-cdn.com/thumbor/juHNZDcBSsAh4ZgoQlSw5r1Vxno=/0x227:3163x1883/fit-in/1200x630/cdn.vox-cdn.com/uploads/chorus_asset/file/23391571/usa_today_17381077.jpg", "publishedAt": "2022-04-15T13:30:00Z", "content": "We are less than two weeks away from the 2022 NFL Draft, and the draft rumor mill is beginning to pick up the pace. After a blockbuster trade and several key free agent signings in the past two weeks… [+15704 chars]" }, { "source": { "id": "cnn", "name": "CNN" }, "author": "Lisa Respers France, CNN", "title": "Cardi B. and Offset reveal their son's name - CNN", "description": "Rappers Cardi B. and Offset welcomed their son seven months ago and we now know his name.", "url": "https://www.cnn.com/2022/04/15/entertainment/cardi-offset-son-name/index.html", "urlToImage": "https://cdn.cnn.com/cnnnext/dam/assets/220215130428-cardi-b-super-tease.jpg", "publishedAt": "2022-04-15T13:20:00Z", "content": null }, { "source": { "id": "cnn", "name": "CNN" }, "author": "Katherine Dillinger", "title": "FDA authorizes first Covid-19 breath test - CNN", "description": "The US Food and Drug Administration has granted emergency use authorization to the first Covid-19 test that spots chemical compounds associated with the coronavirus in breath, the agency said Thursday.", "url": "https://www.cnn.com/2022/04/14/health/covid-breath-test/index.html", "urlToImage": "https://media.cnn.com/api/v1/images/stellar/prod/220415085321-inspectir-pny-1000-covid-breathalyzer.jpg?c=16x9&q=w_800,c_fill", "publishedAt": "2022-04-15T13:01:00Z", "content": "The US Food and Drug Administration has granted emergency use authorization to the first Covid-19 test that spots chemical compounds associated with the coronavirus in breath, the agency said Thursda… [+1084 chars]" }, { "source": { "id": null, "name": "New York Post" }, "author": "Samantha Ibrahim", "title": "Late Gilbert Gottfried left behind secret 'Aladdin' outtakes, 200 hours of footage - New York Post ", "description": "We haven’t seen the last of Gilbert Gottfried, who passed away earlier this month at the age of 67.", "url": "https://nypost.com/2022/04/15/gilbert-gottfried-left-behind-secret-aladdin-outtakes-200-cameo-hours/", "urlToImage": "https://nypost.com/wp-content/uploads/sites/2/2022/04/gottfried-parrot.jpg?quality=75&strip=all&w=1024", "publishedAt": "2022-04-15T12:53:00Z", "content": "We haven’t seen the last of Gilbert Gottfried.\r\nThere is apparently unseen footage featuring the comedian, who died on April 12 at the age of 67, in his role of the clever parrot Iago in Disney’s “Al… [+3528 chars]" }, { "source": { "id": "fox-news", "name": "Fox News" }, "author": "Caitlin McFall", "title": "Psaki: 'Not sending' Biden to Ukraine, 'we should all be maybe relieved about that' - Fox News", "description": "White House press secretary Jen Psaki put a stop to questions about whether President Biden would travel to Ukraine Friday amid its ongoing war with Russia.", "url": "https://www.foxnews.com/politics/psaki-not-sending-biden-to-ukraine", "urlToImage": "https://static.foxnews.com/foxnews.com/content/uploads/2022/03/BIDEN-VISIT-POLAND-UKRAINE.jpg", "publishedAt": "2022-04-15T12:51:32Z", "content": "White House press secretary Jen Psaki put a stop to questions Friday about whether President Biden would travel to Ukraine amid its ongoing war with Russia.\r\n\"No. no,\" Psaki said in answer to questio… [+2564 chars]" }, { "source": { "id": null, "name": "ESPN" }, "author": "Doug Glanville", "title": "Why Jackie Robinson's story still resonates 75 years after his MLB debut - ESPN", "description": "Every time No. 42's tale is told to a new generation, it keeps the lessons he taught us alive.", "url": "https://www.espn.com/mlb/story/_/id/33729977/why-jackie-robinson-story-resonates-75-years-mlb-debut", "urlToImage": "https://a3.espncdn.com/combiner/i?img=%2Fphoto%2F2022%2F0413%2Fr999249_1296x729_16%2D9.jpg", "publishedAt": "2022-04-15T12:02:39Z", "content": "FIVE YEARS AGO, during one of my eldest daughter's first Little League games of the season, I noticed her bouncing around at first base on each pitch. It was clear she was imitating someone, and give… [+10230 chars]" }, { "source": { "id": "cnn", "name": "CNN" }, "author": "CNN", "title": "READ: Mark Meadows' texts with Mike Lee and Chip Roy - CNN", "description": "CNN has obtained text messages of separate conversations that then-White House chief of staff Mark Meadows had with Republican Sen. Mike Lee of Utah and Republican Rep. Chip Roy of Texas after the 2020 presidential election and through early January 2021.", "url": "https://www.cnn.com/2022/04/15/politics/read-mark-meadows-texts-mike-lee-chip-roy/index.html", "urlToImage": "https://cdn.cnn.com/cnnnext/dam/assets/220414181047-roy-meadows-lee-split-super-tease.jpg", "publishedAt": "2022-04-15T11:06:00Z", "content": "(CNN)CNN has obtained text messages of separate conversations that then-White House chief of staff Mark Meadows had with Republican Sen. Mike Lee of Utah and Republican Rep. Chip Roy of Texas after t… [+18257 chars]" }, { "source": { "id": "ars-technica", "name": "Ars Technica" }, "author": "Ron Amadeo", "title": "OnePlus 10 Pro review: There’s not much left of the original OnePlus appeal - Ars Technica", "description": "Janky software and lacking updates mean there's too much compromise for $900.", "url": "https://arstechnica.com/gadgets/2022/04/oneplus-10-pro-review-theres-not-much-left-of-the-original-oneplus-appeal/", "urlToImage": "https://cdn.arstechnica.net/wp-content/uploads/2022/03/16-1-760x380.jpg", "publishedAt": "2022-04-15T11:00:24Z", "content": "Enlarge/ The OnePlus 10 Pro. It's a pretty normal smartphone for $900. \r\n24 with 20 posters participating\r\nOnePlus is in a period of upheaval.\r\nThe Chinese company lost its co-founder, Carl Pei, in 2… [+4437 chars]" }, { "source": { "id": "the-wall-street-journal", "name": "The Wall Street Journal" }, "author": "Katherine Bindley", "title": "California Considers the Four-Day Workweek - The Wall Street Journal", "description": "Lawmakers propose 32 hours for private-sector companies with more than 500 employees", "url": "https://www.wsj.com/articles/california-considers-the-four-day-workweek-11649994203", "urlToImage": "https://images.wsj.net/im-523697/social", "publishedAt": "2022-04-15T11:00:00Z", "content": "Companies and governments around the world have been debating that question recently, driven by a tight labor market along with workers seeking more flexibility. A proposal in the California State Le… [+6090 chars]" }, { "source": { "id": null, "name": "Electrek" }, "author": null, "title": "Elon Musk claims that ‘funding was secured’ in infamous Tesla ‘420 take private’ attempt, but SEC/banks forced him to settle - Electrek.co", "description": "Elon Musk opened up in a new interview yesterday about the SEC lawsuit regarding his attempt to take Tesla private back in 2018 and his infamous “funding secured” announcement. The Tesla CEO now claims funding was indeed secured and that he was forced to sett…", "url": "https://electrek.co/2022/04/15/elon-musk-claims-funding-was-secured-in-infamous-tesla-420-take-private-attempt-sec-banks-forced-settle/", "urlToImage": "https://i0.wp.com/electrek.co/wp-content/uploads/sites/3/2020/09/VW-CEO-Hebert-Diess-Tesla-CEO-Elon-Musk-selfie-hero.jpg?resize=1200%2C628&quality=82&strip=all&ssl=1", "publishedAt": "2022-04-15T10:48:00Z", "content": "Elon Musk opened up in a new interview yesterday about the SEC lawsuit regarding his attempt to take Tesla private back in 2018 and his infamous “funding secured” announcement.\r\nThe Tesla CEO now cla… [+4861 chars]" }, { "source": { "id": null, "name": "YouTube" }, "author": null, "title": "Clashes in Shanghai, China, over Covid lockdown evictions – BBC News - BBC News", "description": "Video has emerged of clashes between police and people being forced out of their homes in Shanghai, as the city enters a third week of Covid lockdown.Some re...", "url": "https://www.youtube.com/watch?v=nSkSj9H_t9g", "urlToImage": "https://i.ytimg.com/vi/nSkSj9H_t9g/hqdefault.jpg", "publishedAt": "2022-04-15T10:33:43Z", "content": null }, { "source": { "id": "independent", "name": "Independent" }, "author": "Oliver O'Connell", "title": "Johnny Depp trial - live: Witness ejected from court as Amber Heard called ‘scum’ in ex’s texts - The Independent", "description": "Johnny Depp - Amber Heard trial", "url": "https://www.independent.co.uk/news/world/americas/johnny-depp-trial-live-amber-heard-court-b2058640.html", "urlToImage": "https://static.independent.co.uk/2022/04/11/10/newFile-8.jpg?quality=75&width=1200&auto=webp", "publishedAt": "2022-04-15T09:45:00Z", "content": "The trial for Johnny Depps defamation lawsuit against former wife, Amber Heard, has adjourned until Monday after a third day of testimony in Virginia.\r\nOn Thursday, witness Gina Deuters, a friend of … [+6957 chars]" }, { "source": { "id": "axios", "name": "Axios" }, "author": "Dan Primack, Sara Fischer", "title": "Billionaires eye parallel media universe - Axios", "description": "Tech moguls willing to spend big on \"free speech\" crisis", "url": "https://www.axios.com/elon-musk-twitter-billionaires-free-speech-social-media-c74547a6-e51d-48fa-b2bd-3d7458f2adb4.html", "urlToImage": "https://images.axios.com/cMrBX7vqRny-xhMZ-Hnm9Febnl8=/0x0:1920x1080/1366x768/2022/04/14/1649968930603.jpg", "publishedAt": "2022-04-15T09:03:09Z", "content": "Elon Musk doesn't seem to have much of a vision for how to actually run Twitter, if his takeover bid succeeds. He's not alone.\r\nWhy it matters: A small group of tech moguls believe America is in the … [+4393 chars]" }, { "source": { "id": "cnn", "name": "CNN" }, "author": "Radina Gigova, Sharon Braithwaite, Jorge Engels, Sarah Diab and Bethlehem Feleke, CNN", "title": "UK announces controversial plan to send asylum-seekers to Rwanda - CNN", "description": "People seeking asylum in the UK could now be relocated to Rwanda under a controversial new scheme blasted by international human rights groups as \"shockingly ill-conceived\" and contrary to international obligations.", "url": "https://www.cnn.com/2022/04/14/europe/uk-rwanda-migrant-deal-gbr-intl/index.html", "urlToImage": "https://cdn.cnn.com/cnnnext/dam/assets/220414165211-boris-johnson-illegal-migrants-041422-super-tease.jpg", "publishedAt": "2022-04-15T08:32:00Z", "content": null }, { "source": { "id": "politico", "name": "Politico" }, "author": null, "title": "Seeking: GOP dealmakers who won't 'burn the House down'. Apply to: Kevin McCarthy. - POLITICO", "description": "The undisputed frontrunner for speaker next year is set to lose a half-dozen Republicans from his conference who prefer negotiating to obstinacy. That could be a problem.", "url": "https://www.politico.com/news/2022/04/15/gop-dealmakers-house-kevin-mccarthy-00025261", "urlToImage": "https://static.politico.com/8a/b4/189aacde4147a61b395017dbf3d6/https-delivery.gettyimages.com/downloads/1177076170", "publishedAt": "2022-04-15T08:30:00Z", "content": "We cant have this mindset of burn the House down, said Rep. Don Bacon of Nebraska, another Republican with a bipartisan streak who plans to stick around next year. We got to be a governing party when… [+5953 chars]" }, { "source": { "id": null, "name": "Cbslocal.com" }, "author": "WCCO-TV Staff", "title": "Take Down Your Bird Feeders To Stop Spread Of Bird Flu, U Of M Raptor Center Says - CBS Minnesota", "description": "To help mitigate the spread of bird flu, the Raptor Center at the University of Minnesota is asking people to take down bird feeders and stop using bird baths this spring.", "url": "https://minnesota.cbslocal.com/2022/04/15/take-down-your-bird-feeders-to-stop-spread-of-bird-flu-u-of-m-raptor-center-says/", "urlToImage": "https://minnesota.cbslocal.com/wp-content/uploads/sites/15909630/2022/04/GettyImages-1201463951.jpg?w=1500", "publishedAt": "2022-04-15T07:41:00Z", "content": "MINNEAPOLIS (WCCO) – To help mitigate the spread of bird flu, the Raptor Center at the University of Minnesota is asking people to take down bird feeders and stop using bird baths this spring.\r\n“Beca… [+1237 chars]" }, { "source": { "id": null, "name": "Android Authority" }, "author": null, "title": "WhatsApp details upcoming communities feature and other big updates - Android Authority", "description": "Communities are coming to WhatsApp and the chat app has detailed how they will work. Several other new features are also headed to the app.", "url": "https://www.androidauthority.com/whatsapp-communities-new-features-3153950/", "urlToImage": "https://www.androidauthority.com/wp-content/uploads/2020/02/WhatsApp-by-Facebook-stock-photo-3.jpg", "publishedAt": "2022-04-15T04:21:26Z", "content": "