diff --git a/README.md b/README.md
index b4773d9..ddf04dd 100644
--- a/README.md
+++ b/README.md
@@ -2,7 +2,7 @@
-
+
@@ -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..fadbaeb
--- /dev/null
+++ b/web/app/modules/licenses.tsx
@@ -0,0 +1,122 @@
+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) => (
+
+ {column}
+ |
+ ))}
+
+
+
+ {licenses.map((license, index) => {
+ const values = [
+
+ {license.name}
+ {license.link && (
+
+
+
+ )}
+ ,
+ license.licensePeriod,
+ license.licenseType,
+
+ {license.remoteVersion === license.installedVersion ? (
+ license.remoteVersion
+ ) : (
+ <>
+ 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) => (
+
+ {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": {