From a7ccc93e36aae02b75d22080a2520e110b18525a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=20Scho=CC=88nmann?= Date: Sat, 2 Nov 2024 21:18:42 +0100 Subject: [PATCH 1/3] feat: add licenses to about --- README.md | 23 +- web/README.md | 40 --- web/app/licenses.json | 1 + web/app/modules/licenses.tsx | 113 +++++++ web/app/routes/_page.about._index.tsx | 15 +- web/package-lock.json | 451 +++++++++++++++++++++++++- web/package.json | 7 +- web/public/entry.worker.js | 18 +- 8 files changed, 575 insertions(+), 93 deletions(-) delete mode 100644 web/README.md create mode 100644 web/app/licenses.json create mode 100644 web/app/modules/licenses.tsx diff --git a/README.md b/README.md index b4773d9..ddf04dd 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@

-

+

CRAN/E

@@ -18,20 +18,12 @@ ## [PWA (Progressive Web App)](https://cran-e.com) -You can use CRAN/E directly in any modern browser. If supported, CRAN/E can provide its best performance by using local databases and effective caching. CRAN/E can also be installed locally in Chromium-based browsers. For more information regarding PWAs, please visit [this great guide](https://web.dev/progressive-web-apps/). +You can use CRAN/E directly in any modern browser. CRAN/E can also be installed as a PWA locally in Chromium-based browsers as well as the latest Safari. For more information regarding PWAs, please visit [this great guide](https://web.dev/progressive-web-apps/). ## [Raycast Extension](https://www.raycast.com/flaming-codes/cran-e-search) You can directly use the typeahead search of CRAN/E in Raycast. We published an extension on the Raycast Store to search for packages and authors. All CRAN/E Raycast extensions are developed as FOSS as well at [flaming-codes/crane-raycast](https://github.com/flaming-codes/crane-raycast). -## [Google Play Store](https://play.google.com/store/apps/details?id=com.cran_e.twa) - -CRAN/E is also available via the Play Store on Android and Chrome OS devices. Please note that this store app is equivalant to the PWA and only repackaged for the Play Store. - -## [Microsoft Store](https://apps.microsoft.com/store/detail/crane/9PL1GMMSC8L3) - -If you prefer, you can also install CRAN/E via the Microsoft Store. Please note that this store app is equivalant to the PWA and only repackaged for the Microsoft Store. -

@@ -41,7 +33,7 @@ This repository contains all code required to build the Frontend of CRAN/E. We d > CRAN/E is not a package hosting solution for R-code. It's sole purpose is to provide a simple and effective interface for finding packages hosted on CRAN. -You find the site code (frontend & main backend) in `/web`. You find different smaller backend-only services in `/services/...`. The main code in `/web` is deployed on **Vercel's Edge Platform** and uses SvelteKit to deliver the pages as well as serve endpoints to fetch their data. The `/services/...` contain different smaller backend-only services that are deployed on other platforms, like **fly.io**. +You find the site code (frontend & main backend) in `/web`. The main code in `/web` is deployed on [DigitalOcean](https://www.digitalocean.com/) and uses [Remix](https://remix.run/) to deliver the pages as well as serve endpoints to fetch their data. ## Motivation @@ -58,7 +50,7 @@ Therefore we decided to develop a new user interface with search capabilities, t # Structure -This repo uses the `web`-directory for the PWA codebase. Isolated backend services are located in the `services`-directory. The `web`-directory is a SvelteKit project. The `services`-directory contains different backend-only services that can be deployed on different platforms. +This repo uses the `web`-directory for the PWA codebase. The `web`-directory is a Remix-project and contains all necessary code to run the frontend of CRAN/E.

@@ -78,13 +70,6 @@ For new bug reports, please create an issue in this repository. The issue setup

-# Application architecture - -Please visit the [wiki-pages](https://github.com/flaming-codes/crane-app/wiki) of this repo for an overview of the architecture. - -
-
- # Maintainer This code is mainly created and maintained by [flaming.codes](https://flaming.codes). diff --git a/web/README.md b/web/README.md deleted file mode 100644 index 6c4d216..0000000 --- a/web/README.md +++ /dev/null @@ -1,40 +0,0 @@ -# Welcome to Remix! - -- 📖 [Remix docs](https://remix.run/docs) - -## Development - -Run the dev server: - -```shellscript -npm run dev -``` - -## Deployment - -First, build your app for production: - -```sh -npm run build -``` - -Then run the app in production mode: - -```sh -npm start -``` - -Now you'll need to pick a host to deploy it to. - -### DIY - -If you're familiar with deploying Node applications, the built-in Remix app server is production-ready. - -Make sure to deploy the output of `npm run build` - -- `build/server` -- `build/client` - -## Styling - -This template comes with [Tailwind CSS](https://tailwindcss.com/) already configured for a simple default starting experience. You can use whatever css framework you prefer. See the [Vite docs on css](https://vitejs.dev/guide/features.html#css) for more information. diff --git a/web/app/licenses.json b/web/app/licenses.json new file mode 100644 index 0000000..f9f5b62 --- /dev/null +++ b/web/app/licenses.json @@ -0,0 +1 @@ +[{"department":"kessler","relatedTo":"stuff","name":"@radix-ui/react-slot","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/radix-ui/primitives.git","remoteVersion":"1.1.0","installedVersion":"1.1.0","definedVersion":"^1.1.0","author":"n/a"},{"department":"kessler","relatedTo":"stuff","name":"@remix-pwa/client","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+ssh://git@github.com/remix-pwa/monorepo.git","remoteVersion":"3.0.7","installedVersion":"3.0.7","definedVersion":"^3.0.7","author":"n/a"},{"department":"kessler","relatedTo":"stuff","name":"@remix-pwa/sw","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+ssh://git@github.com/remix-pwa/monorepo.git","remoteVersion":"3.0.10","installedVersion":"3.0.10","definedVersion":"^3.0.10","author":"n/a"},{"department":"kessler","relatedTo":"stuff","name":"@remix-pwa/worker-runtime","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"https://remix-pwa.run","remoteVersion":"2.1.4","installedVersion":"2.1.4","definedVersion":"^2.1.4","author":"n/a"},{"department":"kessler","relatedTo":"stuff","name":"@remix-run/node","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/remix-run/remix.git","remoteVersion":"2.13.1","installedVersion":"2.13.1","definedVersion":"^2.13.1","author":"n/a"},{"department":"kessler","relatedTo":"stuff","name":"@remix-run/react","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/remix-run/remix.git","remoteVersion":"2.13.1","installedVersion":"2.13.1","definedVersion":"^2.13.1","author":"n/a"},{"department":"kessler","relatedTo":"stuff","name":"@remix-run/serve","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/remix-run/remix.git","remoteVersion":"2.13.1","installedVersion":"2.13.1","definedVersion":"^2.13.1","author":"n/a"},{"department":"kessler","relatedTo":"stuff","name":"@remixicon/react","licensePeriod":"perpetual","material":"material","licenseType":"Apache-2.0","link":"git+https://github.com/Remix-Design/remixicon.git","remoteVersion":"4.5.0","installedVersion":"4.5.0","definedVersion":"^4.5.0","author":"Wendy Gao "},{"department":"kessler","relatedTo":"stuff","name":"@resvg/resvg-js","licensePeriod":"perpetual","material":"material","licenseType":"MPL-2.0","link":"git+ssh://git@github.com/yisibl/resvg-js.git","remoteVersion":"2.6.2","installedVersion":"2.6.2","definedVersion":"^2.6.2","author":"n/a"},{"department":"kessler","relatedTo":"stuff","name":"@splinetool/react-spline","licensePeriod":"perpetual","material":"material","licenseType":"n/a","link":"https://registry.npmjs.org/@splinetool/react-spline/-/react-spline-4.0.0.tgz","remoteVersion":"4.0.0","installedVersion":"4.0.0","definedVersion":"^4.0.0","author":"n/a"},{"department":"kessler","relatedTo":"stuff","name":"@uidotdev/usehooks","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/uidotdev/usehooks.git","remoteVersion":"2.4.1","installedVersion":"2.4.1","definedVersion":"^2.4.1","author":"Tyler McGinnis, Ben Adam"},{"department":"kessler","relatedTo":"stuff","name":"clsx","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/lukeed/clsx.git","remoteVersion":"2.1.1","installedVersion":"2.1.1","definedVersion":"^2.1.1","author":"Luke Edwards luke.edwards05@gmail.com https://lukeed.com"},{"department":"kessler","relatedTo":"stuff","name":"cva","licensePeriod":"perpetual","material":"material","licenseType":"Apache-2.0","link":"git+https://github.com/joe-bell/cva.git","remoteVersion":"1.0.0-beta.1","installedVersion":"1.0.0-beta.1","definedVersion":"^1.0.0-beta.1","author":"Joe Bell (https://joebell.co.uk)"},{"department":"kessler","relatedTo":"stuff","name":"date-fns","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/date-fns/date-fns.git","remoteVersion":"4.1.0","installedVersion":"4.1.0","definedVersion":"^4.1.0","author":"n/a"},{"department":"kessler","relatedTo":"stuff","name":"es-toolkit","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/toss/es-toolkit.git","remoteVersion":"1.26.1","installedVersion":"1.26.1","definedVersion":"^1.26.1","author":"n/a"},{"department":"kessler","relatedTo":"stuff","name":"eslint-plugin-unused-imports","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/sweepline/eslint-plugin-unused-imports.git","remoteVersion":"4.1.4","installedVersion":"4.1.4","definedVersion":"^4.1.4","author":"Mikkel Holmer Pedersen"},{"department":"kessler","relatedTo":"stuff","name":"isbot","licensePeriod":"perpetual","material":"material","licenseType":"Unlicense","link":"git+https://github.com/omrilotan/isbot.git","remoteVersion":"5.1.17","installedVersion":"5.1.17","definedVersion":"^5.1.17","author":"n/a"},{"department":"kessler","relatedTo":"stuff","name":"lru-ttl-cache","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/rafikalid/lru-ttl-cache.git","remoteVersion":"2.4.8","installedVersion":"2.4.8","definedVersion":"^2.4.8","author":"khalid RAFIK"},{"department":"kessler","relatedTo":"stuff","name":"minisearch","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"https://github.com/lucaong/minisearch.git","remoteVersion":"7.1.0","installedVersion":"7.1.0","definedVersion":"^7.1.0","author":"Luca Ongaro"},{"department":"kessler","relatedTo":"stuff","name":"react","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/facebook/react.git","remoteVersion":"18.3.1","installedVersion":"18.3.1","definedVersion":"^18.2.0","author":"n/a"},{"department":"kessler","relatedTo":"stuff","name":"react-dom","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/facebook/react.git","remoteVersion":"18.3.1","installedVersion":"18.3.1","definedVersion":"^18.2.0","author":"n/a"},{"department":"kessler","relatedTo":"stuff","name":"remix-utils","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/sergiodxa/remix-utils.git","remoteVersion":"7.7.0","installedVersion":"7.7.0","definedVersion":"^7.7.0","author":"Sergio Xalambrí hello@sergiodxa.com https://sergiodxa.com"},{"department":"kessler","relatedTo":"stuff","name":"satori","licensePeriod":"perpetual","material":"material","licenseType":"MPL-2.0","link":"git+https://github.com/vercel/satori.git","remoteVersion":"0.11.2","installedVersion":"0.11.2","definedVersion":"^0.11.2","author":"Shu Ding "},{"department":"kessler","relatedTo":"stuff","name":"schema-dts","licensePeriod":"perpetual","material":"material","licenseType":"Apache-2.0","link":"git+https://github.com/google/schema-dts.git","remoteVersion":"1.1.2","installedVersion":"1.1.2","definedVersion":"^1.1.2","author":"Eyas Sharaiha (https://eyas.sh/)"},{"department":"kessler","relatedTo":"stuff","name":"sonner","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/emilkowalski/sonner.git","remoteVersion":"1.5.0","installedVersion":"1.5.0","definedVersion":"^1.5.0","author":"Emil Kowalski "},{"department":"kessler","relatedTo":"stuff","name":"tailwindcss-animated","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/new-data-services/tailwindcss-animated.git","remoteVersion":"1.1.2","installedVersion":"1.1.2","definedVersion":"^1.1.2","author":"new-data-services"},{"department":"kessler","relatedTo":"stuff","name":"zod","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/colinhacks/zod.git","remoteVersion":"3.23.8","installedVersion":"3.23.8","definedVersion":"^3.23.8","author":"Colin McDonnell "},{"department":"kessler","relatedTo":"stuff","name":"@remix-pwa/dev","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+ssh://git@github.com/remix-pwa/monorepo.git","remoteVersion":"3.1.0","installedVersion":"3.1.0","definedVersion":"^3.1.0","author":"n/a"},{"department":"kessler","relatedTo":"stuff","name":"@remix-run/dev","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/remix-run/remix.git","remoteVersion":"2.13.1","installedVersion":"2.13.1","definedVersion":"^2.13.1","author":"n/a"},{"department":"kessler","relatedTo":"stuff","name":"@types/react","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"https://github.com/DefinitelyTyped/DefinitelyTyped.git","remoteVersion":"18.3.12","installedVersion":"18.3.12","definedVersion":"^18.3.11","author":"n/a"},{"department":"kessler","relatedTo":"stuff","name":"@types/react-dom","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"https://github.com/DefinitelyTyped/DefinitelyTyped.git","remoteVersion":"18.3.1","installedVersion":"18.3.1","definedVersion":"^18.3.1","author":"n/a"},{"department":"kessler","relatedTo":"stuff","name":"@typescript-eslint/eslint-plugin","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/typescript-eslint/typescript-eslint.git","remoteVersion":"8.12.2","installedVersion":"8.12.2","definedVersion":"^8.12.2","author":"n/a"},{"department":"kessler","relatedTo":"stuff","name":"@typescript-eslint/parser","licensePeriod":"perpetual","material":"material","licenseType":"BSD-2-Clause","link":"git+https://github.com/typescript-eslint/typescript-eslint.git","remoteVersion":"8.12.2","installedVersion":"8.12.2","definedVersion":"^8.12.2","author":"n/a"},{"department":"kessler","relatedTo":"stuff","name":"autoprefixer","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/postcss/autoprefixer.git","remoteVersion":"10.4.20","installedVersion":"10.4.20","definedVersion":"^10.4.19","author":"Andrey Sitnik "},{"department":"kessler","relatedTo":"stuff","name":"dotenv-cli","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/entropitor/dotenv-cli.git","remoteVersion":"7.4.2","installedVersion":"7.4.2","definedVersion":"^7.4.2","author":"entropitor"},{"department":"kessler","relatedTo":"stuff","name":"eslint","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/eslint/eslint.git","remoteVersion":"8.57.1","installedVersion":"8.57.1","definedVersion":"^8.38.0","author":"Nicholas C. Zakas "},{"department":"kessler","relatedTo":"stuff","name":"eslint-import-resolver-typescript","licensePeriod":"perpetual","material":"material","licenseType":"ISC","link":"git+https://github.com/import-js/eslint-import-resolver-typescript.git","remoteVersion":"3.6.3","installedVersion":"3.6.3","definedVersion":"^3.6.1","author":"Alex Gorbatchev "},{"department":"kessler","relatedTo":"stuff","name":"eslint-plugin-import","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/import-js/eslint-plugin-import.git","remoteVersion":"2.31.0","installedVersion":"2.31.0","definedVersion":"^2.31.0","author":"Ben Mosher "},{"department":"kessler","relatedTo":"stuff","name":"eslint-plugin-jsx-a11y","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/jsx-eslint/eslint-plugin-jsx-a11y.git","remoteVersion":"6.10.2","installedVersion":"6.10.2","definedVersion":"^6.10.1","author":"Ethan Cohen"},{"department":"kessler","relatedTo":"stuff","name":"eslint-plugin-react","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/jsx-eslint/eslint-plugin-react.git","remoteVersion":"7.37.2","installedVersion":"7.37.2","definedVersion":"^7.37.1","author":"Yannick Croissant "},{"department":"kessler","relatedTo":"stuff","name":"eslint-plugin-react-hooks","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/facebook/react.git","remoteVersion":"5.0.0","installedVersion":"5.0.0","definedVersion":"^5.0.0","author":"n/a"},{"department":"kessler","relatedTo":"stuff","name":"license-report","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/kessler/license-report.git","remoteVersion":"6.7.0","installedVersion":"6.7.0","definedVersion":"^6.7.0","author":"Yaniv Kessler"},{"department":"kessler","relatedTo":"stuff","name":"msw","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/mswjs/msw.git","remoteVersion":"2.6.0","installedVersion":"2.6.0","definedVersion":"^2.6.0","author":"Artem Zakharchenko https://github.com/kettanaito"},{"department":"kessler","relatedTo":"stuff","name":"npm-check","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/dylang/npm-check.git","remoteVersion":"6.0.1","installedVersion":"6.0.1","definedVersion":"^6.0.1","author":"Dylan Greene dylang@gmail.com"},{"department":"kessler","relatedTo":"stuff","name":"postcss","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/postcss/postcss.git","remoteVersion":"8.4.47","installedVersion":"8.4.47","definedVersion":"^8.4.38","author":"Andrey Sitnik "},{"department":"kessler","relatedTo":"stuff","name":"prettier","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/prettier/prettier.git","remoteVersion":"3.3.3","installedVersion":"3.3.3","definedVersion":"^3.3.3","author":"James Long"},{"department":"kessler","relatedTo":"stuff","name":"prettier-plugin-tailwindcss","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/tailwindlabs/prettier-plugin-tailwindcss.git","remoteVersion":"0.6.8","installedVersion":"0.6.8","definedVersion":"^0.6.8","author":"n/a"},{"department":"kessler","relatedTo":"stuff","name":"tailwindcss","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/tailwindlabs/tailwindcss.git","remoteVersion":"3.4.14","installedVersion":"3.4.14","definedVersion":"^3.4.14","author":"n/a"},{"department":"kessler","relatedTo":"stuff","name":"tailwindcss-bg-patterns","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+ssh://git@github.com/thillmann/tailwind-patterns.git","remoteVersion":"0.3.0","installedVersion":"0.3.0","definedVersion":"^0.3.0","author":"Timo Hillmann "},{"department":"kessler","relatedTo":"stuff","name":"tailwindcss-radix-colors","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/mrcaidev/tailwindcss-radix-colors.git","remoteVersion":"1.4.1","installedVersion":"1.4.1","definedVersion":"^1.4.1","author":"Yuwang Cai mrcaidev@gmail.com https://mrcai.dev"},{"department":"kessler","relatedTo":"stuff","name":"typescript","licensePeriod":"perpetual","material":"material","licenseType":"Apache-2.0","link":"git+https://github.com/microsoft/TypeScript.git","remoteVersion":"5.6.3","installedVersion":"5.6.3","definedVersion":"^5.6.3","author":"Microsoft Corp."},{"department":"kessler","relatedTo":"stuff","name":"vite","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/vitejs/vite.git","remoteVersion":"5.4.10","installedVersion":"5.4.10","definedVersion":"^5.4.9","author":"Evan You"},{"department":"kessler","relatedTo":"stuff","name":"vite-tsconfig-paths","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/aleclarson/vite-tsconfig-paths.git","remoteVersion":"5.0.1","installedVersion":"5.0.1","definedVersion":"^5.0.1","author":"aleclarson"}] diff --git a/web/app/modules/licenses.tsx b/web/app/modules/licenses.tsx new file mode 100644 index 0000000..f369a10 --- /dev/null +++ b/web/app/modules/licenses.tsx @@ -0,0 +1,113 @@ +import clsx from "clsx"; +import licenses from "../licenses.json"; +import { RiExternalLinkLine } from "@remixicon/react"; + +const columns = [ + "Name", + "License Period", + "License Type", + "Version Info", +] as const; + +export function LicenseTable() { + const handleRowClick = (link: string) => { + if (link) { + const clean = link + .replace(/\/$/, "") + .replace("git+", "") + .replace("ssh://git@", "https://"); + window.open(clean, "_blank", "noopener,noreferrer"); + } + }; + + return ( +
+ + + + {columns.map((column, index) => ( + + ))} + + + + {licenses.map((license, index) => { + const values = [ + + {license.name} + {license.link && ( + + + + )} + , + license.licensePeriod, + license.licenseType, + + Remote: {license.remoteVersion} + Installed: {license.installedVersion} + , + ]; + + return ( + handleRowClick(license.link)} + onKeyDown={(e) => { + if (e.key === "Enter" && license.link) { + handleRowClick(license.link); + } + }} + role="row" + aria-label={`Row for ${license.name}`} + > + {values.map((value, index) => ( + + ))} + + ); + })} + +
+ {column} +
+ {value} +
+
+ ); +} diff --git a/web/app/routes/_page.about._index.tsx b/web/app/routes/_page.about._index.tsx index b4c0d10..16cb3e0 100644 --- a/web/app/routes/_page.about._index.tsx +++ b/web/app/routes/_page.about._index.tsx @@ -15,6 +15,7 @@ import { import { Header } from "../modules/header"; import { PlausibleChoicePillButton } from "../modules/plausible"; import { mergeMeta } from "../modules/meta"; +import { LicenseTable } from "../modules/licenses"; const anchors = ["Mission", "Team", "Analytics", "Source Code", "Licenses"]; @@ -167,13 +168,15 @@ export default function PrivacyPage() { - {/* - - The following list contains all package dependencies of external code - used by CRAN/E. Click each link to visit the respective source code - page. - */} + +

+ The following list contains all package dependencies of external + code used by CRAN/E. Click each link to visit the respective source + code page. +

+ +
); diff --git a/web/package-lock.json b/web/package-lock.json index e68ec0f..49488d3 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -1,12 +1,13 @@ { "name": "app", - "version": "2.0.5", + "version": "2.1.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "app", - "version": "2.0.5", + "version": "2.1.0", + "hasInstallScript": true, "dependencies": { "@radix-ui/react-slot": "^1.1.0", "@remix-pwa/client": "^3.0.7", @@ -19,7 +20,6 @@ "@resvg/resvg-js": "^2.6.2", "@splinetool/react-spline": "^4.0.0", "@uidotdev/usehooks": "^2.4.1", - "@uiw/react-heat-map": "^2.2.2", "clsx": "^2.1.1", "cva": "^1.0.0-beta.1", "date-fns": "^4.1.0", @@ -52,6 +52,7 @@ "eslint-plugin-jsx-a11y": "^6.10.1", "eslint-plugin-react": "^7.37.1", "eslint-plugin-react-hooks": "^5.0.0", + "license-report": "^6.7.0", "msw": "^2.6.0", "npm-check": "^6.0.1", "postcss": "^8.4.38", @@ -1374,6 +1375,13 @@ "integrity": "sha512-3sRl+pkyFY/kLmHl0cgHiFp2xEqErA8N3ECjMs7serSUBmoJ70lBa0PG5t0IM6WJgdZNyyI0R8YFfi5wM8+mzg==", "license": "Apache-2.0" }, + "node_modules/@kessler/tableify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@kessler/tableify/-/tableify-1.0.2.tgz", + "integrity": "sha512-e4psVV9Fe2eBfS9xK2rzQ9lE5xS4tARm7EJzDb6sVZy3F+EMyHJ67i0NdBVR9BRyQx7YhogMCbB6R1QwXuBxMg==", + "dev": true, + "license": "MIT" + }, "node_modules/@mdx-js/mdx": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-2.3.0.tgz", @@ -3041,6 +3049,13 @@ "dev": true, "license": "MIT" }, + "node_modules/@sec-ant/readable-stream": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz", + "integrity": "sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==", + "dev": true, + "license": "MIT" + }, "node_modules/@shuding/opentype.js": { "version": "1.4.0-beta.0", "resolved": "https://registry.npmjs.org/@shuding/opentype.js/-/opentype.js-1.4.0-beta.0.tgz", @@ -3160,6 +3175,13 @@ "@types/unist": "^2" } }, + "node_modules/@types/http-cache-semantics": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", + "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/json5": { "version": "0.0.29", "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", @@ -3490,20 +3512,6 @@ "react-dom": ">=18.0.0" } }, - "node_modules/@uiw/react-heat-map": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@uiw/react-heat-map/-/react-heat-map-2.2.2.tgz", - "integrity": "sha512-9aNjDd8fz6tXhWj5rQ8+5MmQRhDQOfOri2CeIyMjnHunPBagg49FIPEu7H/5pRet0JD6pUrfSyMf+UpZNX5FgA==", - "license": "MIT", - "funding": { - "url": "https://jaywcjlove.github.io/#/sponsor" - }, - "peerDependencies": { - "@babel/runtime": ">=7.10.0", - "react": ">=16.9.0", - "react-dom": ">=16.9.0" - } - }, "node_modules/@ungap/structured-clone": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", @@ -4487,6 +4495,16 @@ "node": ">=12" } }, + "node_modules/cacheable-lookup": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz", + "integrity": "sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.16" + } + }, "node_modules/cacheable-request": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", @@ -6060,6 +6078,16 @@ "url": "https://github.com/fb55/entities?sponsor=1" } }, + "node_modules/eol": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/eol/-/eol-0.10.0.tgz", + "integrity": "sha512-+w3ktYrOphcIqC1XKmhQYvM+o2uxgQFiimL7B6JPZJlWVxf7Lno9e/JWLPIgbHo7DoZ+b7jsf/NzrUcNe6ZTZQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ryanve" + } + }, "node_modules/err-code": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", @@ -7553,6 +7581,16 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/form-data-encoder": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-4.0.2.tgz", + "integrity": "sha512-KQVhvhK8ZkWzxKxOr56CPulAhH3dobtuQ4+hNQ+HekH/Wp5gSOafqRAeTphQUJAIk0GBvHZgJ2ZGRWd5kphMuw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 18" + } + }, "node_modules/format": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz", @@ -7742,6 +7780,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/get-stdin": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.1.tgz", + "integrity": "sha512-jZV7n6jGE3Gt7fgSTJoz91Ak5MuTLwMwkoYdjxuJ/AmjIsE1UC03y/IWkZCQGEvVNS9qoRNwy5BCqxImv0FVeA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, "node_modules/get-stream": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", @@ -8358,6 +8406,33 @@ "node": ">= 0.8" } }, + "node_modules/http2-wrapper": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.1.tgz", + "integrity": "sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.2.0" + }, + "engines": { + "node": ">=10.19.0" + } + }, + "node_modules/http2-wrapper/node_modules/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/human-signals": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", @@ -9481,6 +9556,235 @@ "node": ">= 0.8.0" } }, + "node_modules/license-report": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/license-report/-/license-report-6.7.0.tgz", + "integrity": "sha512-bcSuFdOUQpcf1JQGJKtggFppNR8ZSh8FDx49jyRE7jLYWTw6NQh3O/48WAWt417mrqRCrxfC/yhjqbQVtmD7NA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@kessler/tableify": "^1.0.2", + "debug": "^4.3.6", + "eol": "^0.10.0", + "got": "^14.4.2", + "rc": "^1.2.8", + "semver": "^7.6.3", + "tablemark": "^3.1.0", + "text-table": "^0.2.0", + "visit-values": "^2.0.0" + }, + "bin": { + "license-report": "index.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/license-report/node_modules/@sindresorhus/is": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-7.0.1.tgz", + "integrity": "sha512-QWLl2P+rsCJeofkDNIT3WFmb6NrRud1SUYW8dIhXK/46XFV8Q/g7Bsvib0Askb0reRLe+WYPeeE+l5cH7SlkuQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" + } + }, + "node_modules/license-report/node_modules/@szmarczak/http-timer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz", + "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==", + "dev": true, + "license": "MIT", + "dependencies": { + "defer-to-connect": "^2.0.1" + }, + "engines": { + "node": ">=14.16" + } + }, + "node_modules/license-report/node_modules/cacheable-request": { + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-12.0.1.tgz", + "integrity": "sha512-Yo9wGIQUaAfIbk+qY0X4cDQgCosecfBe3V9NSyeY4qPC2SAkbCS4Xj79VP8WOzitpJUZKc/wsRCYF5ariDIwkg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/http-cache-semantics": "^4.0.4", + "get-stream": "^9.0.1", + "http-cache-semantics": "^4.1.1", + "keyv": "^4.5.4", + "mimic-response": "^4.0.0", + "normalize-url": "^8.0.1", + "responselike": "^3.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/license-report/node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/license-report/node_modules/decompress-response/node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/license-report/node_modules/defer-to-connect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/license-report/node_modules/get-stream": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-9.0.1.tgz", + "integrity": "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sec-ant/readable-stream": "^0.4.1", + "is-stream": "^4.0.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/license-report/node_modules/got": { + "version": "14.4.3", + "resolved": "https://registry.npmjs.org/got/-/got-14.4.3.tgz", + "integrity": "sha512-iTC0Z87yxSijWTh/IpvGpwOhIQK7+GgWkYrMRoN/hB9qeRj9RPuLGODwevs0p5idUf7nrxCVa5IlOmK3b8z+KA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sindresorhus/is": "^7.0.1", + "@szmarczak/http-timer": "^5.0.1", + "cacheable-lookup": "^7.0.0", + "cacheable-request": "^12.0.1", + "decompress-response": "^6.0.0", + "form-data-encoder": "^4.0.2", + "http2-wrapper": "^2.2.1", + "lowercase-keys": "^3.0.0", + "p-cancelable": "^4.0.1", + "responselike": "^3.0.0", + "type-fest": "^4.26.1" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sindresorhus/got?sponsor=1" + } + }, + "node_modules/license-report/node_modules/is-stream": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-4.0.1.tgz", + "integrity": "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/license-report/node_modules/lowercase-keys": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", + "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/license-report/node_modules/mimic-response": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-4.0.0.tgz", + "integrity": "sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/license-report/node_modules/normalize-url": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.1.tgz", + "integrity": "sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/license-report/node_modules/p-cancelable": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-4.0.1.tgz", + "integrity": "sha512-wBowNApzd45EIKdO1LaU+LrMBwAcjfPaYtVzV3lmfM3gf8Z4CHZsiIqlM8TZZ8okYvh5A1cP6gTfCRQtwUpaUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.16" + } + }, + "node_modules/license-report/node_modules/responselike": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz", + "integrity": "sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==", + "dev": true, + "license": "MIT", + "dependencies": { + "lowercase-keys": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/lilconfig": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz", @@ -9670,6 +9974,23 @@ "loose-envify": "cli.js" } }, + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/lower-case/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD" + }, "node_modules/lowercase-keys": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", @@ -11236,6 +11557,24 @@ "node": ">= 0.6" } }, + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "dev": true, + "license": "MIT", + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node_modules/no-case/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD" + }, "node_modules/node-emoji": { "version": "1.11.0", "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", @@ -13262,6 +13601,13 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/resolve-alpn": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", + "dev": true, + "license": "MIT" + }, "node_modules/resolve-dir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", @@ -13729,6 +14075,25 @@ "node": ">= 0.8" } }, + "node_modules/sentence-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/sentence-case/-/sentence-case-3.0.4.tgz", + "integrity": "sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3", + "upper-case-first": "^2.0.2" + } + }, + "node_modules/sentence-case/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD" + }, "node_modules/serve-static": { "version": "1.16.2", "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", @@ -13933,6 +14298,20 @@ "integrity": "sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw==", "license": "CC0-1.0" }, + "node_modules/split-text-to-chunks": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/split-text-to-chunks/-/split-text-to-chunks-1.0.0.tgz", + "integrity": "sha512-HLtEwXK/T4l7QZSJ/kOSsZC0o5e2Xg3GzKKFxm0ZexJXw0Bo4CaEl39l7MCSRHk9EOOL5jT8JIDjmhTtcoe6lQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-stdin": "^5.0.1", + "minimist": "^1.2.0" + }, + "bin": { + "wordwrap": "cli.js" + } + }, "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", @@ -14335,6 +14714,20 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/tablemark": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/tablemark/-/tablemark-3.1.0.tgz", + "integrity": "sha512-IwO6f0SEzp1Z+zqz/7ANUmeEac4gaNlknWyj/S9aSg11wZmWYnLeyI/xXvEOU88BYUIf8y30y0wxB58xIKrVlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "sentence-case": "^3.0.4", + "split-text-to-chunks": "^1.0.0" + }, + "engines": { + "node": ">=14.16" + } + }, "node_modules/tailwindcss": { "version": "3.4.14", "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.14.tgz", @@ -15241,6 +15634,23 @@ "url": "https://github.com/yeoman/update-notifier?sponsor=1" } }, + "node_modules/upper-case-first": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/upper-case-first/-/upper-case-first-2.0.2.tgz", + "integrity": "sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/upper-case-first/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD" + }, "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -15378,6 +15788,13 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/visit-values": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/visit-values/-/visit-values-2.0.0.tgz", + "integrity": "sha512-vLFU70y3D915d611GnHYeHkEmq6ZZETzTH4P1hM6I9E3lBwH2VeBBEESe/bGCY+gAyK0qqLFn5bNFpui/GKmww==", + "dev": true, + "license": "MIT" + }, "node_modules/vite": { "version": "5.4.10", "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.10.tgz", diff --git a/web/package.json b/web/package.json index c7bb8ce..6e22890 100644 --- a/web/package.json +++ b/web/package.json @@ -5,6 +5,8 @@ "type": "module", "version": "2.1.0", "scripts": { + "postinstall": "npm run licenses.build", + "postuninstall": "npm run licenses.build", "build": "remix vite:build", "dev": "remix vite:dev", "preview": "npm run build && dotenv -- npm run start", @@ -12,7 +14,8 @@ "start": "remix-serve ./build/server/index.js", "typecheck": "tsc", "format": "prettier --write .", - "update.all": "npm-check -u" + "update.all": "npm-check -u", + "licenses.build": "license-report --output=json > ./app/licenses.json" }, "dependencies": { "@radix-ui/react-slot": "^1.1.0", @@ -26,7 +29,6 @@ "@resvg/resvg-js": "^2.6.2", "@splinetool/react-spline": "^4.0.0", "@uidotdev/usehooks": "^2.4.1", - "@uiw/react-heat-map": "^2.2.2", "clsx": "^2.1.1", "cva": "^1.0.0-beta.1", "date-fns": "^4.1.0", @@ -59,6 +61,7 @@ "eslint-plugin-jsx-a11y": "^6.10.1", "eslint-plugin-react": "^7.37.1", "eslint-plugin-react-hooks": "^5.0.0", + "license-report": "^6.7.0", "msw": "^2.6.0", "npm-check": "^6.0.1", "postcss": "^8.4.38", diff --git a/web/public/entry.worker.js b/web/public/entry.worker.js index a57fbe4..30900df 100644 --- a/web/public/entry.worker.js +++ b/web/public/entry.worker.js @@ -435,6 +435,7 @@ const assets = [ "/manifest.webmanifest", "/robots.txt", "/fonts/Inter-Regular.ttf", + "/images/logo.jpeg", "/icons/apple-icon-180.png", "/icons/apple-splash-1125-2436.jpg", "/icons/apple-splash-1136-640.jpg", @@ -472,7 +473,6 @@ const assets = [ "/icons/manifest-icon-192.maskable.png", "/icons/manifest-icon-512.maskable.png", "/icons/safari-pinned-tab.svg", - "/images/logo.jpeg", "/news/crane-v2-0-light.webp", "/news/crane-v2-0.webp", "/news/crane-v2-1.webp", @@ -480,13 +480,6 @@ const assets = [ "/news/crane-v2-3.webp", "/images/we/lukas.webp", "/images/we/tom.webp", - "/images/screenshots/screenshot-portrait-0.jpg", - "/images/screenshots/screenshot-portrait-1.jpg", - "/images/screenshots/screenshot-portrait-2.jpg", - "/images/screenshots/screenshot-wide-0.jpg", - "/images/screenshots/screenshot-wide-1.jpg", - "/images/screenshots/screenshot-wide-2.jpg", - "/images/screenshots/screenshot-wide-3.jpg", "/images/og/cover-1.jpg", "/images/og/cover-2.jpg", "/images/og/cover-3.jpg", @@ -495,7 +488,14 @@ const assets = [ "/images/og/cover-6.jpg", "/images/og/cover-7.jpg", "/images/og/cover-8.jpg", - "/images/og/cover-9.jpg" + "/images/og/cover-9.jpg", + "/images/screenshots/screenshot-portrait-0.jpg", + "/images/screenshots/screenshot-portrait-1.jpg", + "/images/screenshots/screenshot-portrait-2.jpg", + "/images/screenshots/screenshot-wide-0.jpg", + "/images/screenshots/screenshot-wide-1.jpg", + "/images/screenshots/screenshot-wide-2.jpg", + "/images/screenshots/screenshot-wide-3.jpg" ]; const routes = { "root": { From 99611e2c5a768e203f11d860023031bd1d02e9a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=20Scho=CC=88nmann?= Date: Sat, 2 Nov 2024 21:19:28 +0100 Subject: [PATCH 2/3] chore: self review --- web/app/modules/licenses.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/app/modules/licenses.tsx b/web/app/modules/licenses.tsx index f369a10..e0115f7 100644 --- a/web/app/modules/licenses.tsx +++ b/web/app/modules/licenses.tsx @@ -53,10 +53,10 @@ export function LicenseTable() { href={license.link} target="_blank" rel="noopener noreferrer" + tabIndex={-1} aria-label={`More information about ${license.name}`} > From 9e53c7158e9696ab8565b99dcdb0fc0518506630 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=20Scho=CC=88nmann?= Date: Sat, 2 Nov 2024 21:22:01 +0100 Subject: [PATCH 3/3] chore: simplify --- web/app/modules/licenses.tsx | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/web/app/modules/licenses.tsx b/web/app/modules/licenses.tsx index e0115f7..fadbaeb 100644 --- a/web/app/modules/licenses.tsx +++ b/web/app/modules/licenses.tsx @@ -65,9 +65,18 @@ export function LicenseTable() { , license.licensePeriod, license.licenseType, - - Remote: {license.remoteVersion} - Installed: {license.installedVersion} + + {license.remoteVersion === license.installedVersion ? ( + license.remoteVersion + ) : ( + <> + Remote: {license.remoteVersion} + Installed: {license.installedVersion} + + )} , ];