diff --git a/docs/link/e2e_channels/index.md b/docs/link/channels/e2e_channels/index.md similarity index 100% rename from docs/link/e2e_channels/index.md rename to docs/link/channels/e2e_channels/index.md diff --git a/docs/link/e2e_channels/setup.md b/docs/link/channels/e2e_channels/setup.md similarity index 100% rename from docs/link/e2e_channels/setup.md rename to docs/link/channels/e2e_channels/setup.md diff --git a/docs/link/e2e_channels/supported_handsets.md b/docs/link/channels/e2e_channels/supported_handsets.md similarity index 100% rename from docs/link/e2e_channels/supported_handsets.md rename to docs/link/channels/e2e_channels/supported_handsets.md diff --git a/docs/link/google_channel.md b/docs/link/channels/google_channel.md similarity index 100% rename from docs/link/google_channel.md rename to docs/link/channels/google_channel.md diff --git a/docs/link/channels/index.mdx b/docs/link/channels/index.mdx new file mode 100644 index 0000000..c68f061 --- /dev/null +++ b/docs/link/channels/index.mdx @@ -0,0 +1,11 @@ +--- +sidebar_position: 20 +sidebar_label: Channels Guide +--- + +import DocCardList from '@theme/DocCardList'; +import {useCurrentSidebarCategory} from '@docusaurus/theme-common'; + +# Channels Guide + + diff --git a/docs/link/channels/proton.md b/docs/link/channels/proton.md new file mode 100644 index 0000000..c135dda --- /dev/null +++ b/docs/link/channels/proton.md @@ -0,0 +1,65 @@ +--- +title: Proton Mail Channel +sidebar_label: Proton Mail Channel +sidebar_position: 55 +description: Using a ProtonMail email account +--- + +[Proton Mail](https://proton.me/mail) is the largest end-to-end encrypted email hosting service. +It was launched in 2014 and is headquartered in Geneva, Switzerland. +It is owned by the non-profit Proton Foundation through its subsidiary Proton AG. +Proton Mail uses client-side encryption to protect email content and user data before they are sent to Proton Mail +servers, unlike other common email providers. + +The source code for the back end of Proton Mail remains closed-source, but Proton Mail released the source code for the +web interface, iOS and Android apps, and the [Proton Mail Bridge app](https://github.com/ProtonMail/proton-bridge) +under an open-source licence. + +Although Proton Mail's encryption uses the open standard OpenPGP, and the Link platform support OpenPGP when used with +other email providers, it is not possible to directly interact with the encryption from the Link platform. +This is because Proton Mail does not provide the traditional IMAP and SMTP server endpoints to send and receive emails +and only allows connection via the Proton Mail bridge app which handles all encryption and decryption of messages. + +## Requirements + +* You must have a paid plan to use the Proton Mail channel as the use of the Proton Mail Bridge app is not possible on +a free account. +* Additionally, a user must be dedicated for the use of the helpdesk, it is not sufficient to create an alias on an +existing user. + +## Encryption & Key Management + +OpenPGP private keys are created automatically for each Proton Mail account, although these are stored in a way that +they are not generally available other than when successfully authenticated to the platform. +In the case of Link, this means that the Proton Mail Bridge app is authenticated and then has access to the OpenPGP +private key. + +It is not currently possible to import public keys of 3rd-party (i.e. non-Proton Mail) email addresses, and so only +emails between Proton Mail users will be end-to-end encrypted. +The service also +[does not support the Autocrypt standard](https://protonmail.uservoice.com/forums/945460-general-ideas/suggestions/32845105-autocrypt-support), +which allows other clients to import discovered public keys automatically on new conversations. +The Proton Mail documentation [has more on this topic](https://proton.me/support/proton-mail-encryption-explained). + +We will provide you with your public OpenPGP key when the channel is set up, and you can make this discoverable via your +website, but for conversations with 3rd-party accounts we expect the conversations will only be encrypted in one +direction and your replies will not be encrypted. + +The helpdesk is unaware of the encryption happening in Protonmail, and cannot inform agents when an email that was sent +or received by the helpdesk was encrypted or not. + +## Setting up + +If you do not have an organisational account, we can fully manage the Proton Mail account setup including billing. +Please [contact us](https://www.sr2.uk/contact) to discuss this. + +If you have an organisational account, +[send an invite for the new user](https://proton.me/support/add-users-organization#create-a-new-user) (the new helpdesk +channel address) to contact@sr2.uk, and email the same address to let us know you are doing this and that you would +like the channel added to your helpdesk. + +Once the setup is complete we will provide you with OpenPGP public key and will also upload it to +[keys.openpgp.org](https://keys.openpgp.org/) to aid in its discovery by users. +We can also provide support on setting up Web Key Discovery (WKD) on your custom email domain if desired to further +increase the chances that inbound emails will be automatically encrypted, although this still cannot help to encrypt +replies to 3rd-party email services. \ No newline at end of file diff --git a/docs/link/backups.md b/docs/link/features/backups.md similarity index 98% rename from docs/link/backups.md rename to docs/link/features/backups.md index 3112fdc..16c3c4b 100644 --- a/docs/link/backups.md +++ b/docs/link/features/backups.md @@ -1,6 +1,6 @@ --- title: Backups -sidebar_position: 90 +sidebar_position: 20 --- ## Daily Backups diff --git a/docs/link/features/index.mdx b/docs/link/features/index.mdx new file mode 100644 index 0000000..76069b6 --- /dev/null +++ b/docs/link/features/index.mdx @@ -0,0 +1,11 @@ +--- +sidebar_position: 10 +sidebar_label: Features +--- + +import DocCardList from '@theme/DocCardList'; +import {useCurrentSidebarCategory} from '@docusaurus/theme-common'; + +# Features + + diff --git a/docs/link/security.md b/docs/link/features/security.md similarity index 98% rename from docs/link/security.md rename to docs/link/features/security.md index 834382d..c38bfd3 100644 --- a/docs/link/security.md +++ b/docs/link/features/security.md @@ -1,6 +1,6 @@ --- title: Security -sidebar_position: 50 +sidebar_position: 10 --- ## Application Security diff --git a/docs/link/autoresponders.md b/docs/link/guide/autoresponders.md similarity index 100% rename from docs/link/autoresponders.md rename to docs/link/guide/autoresponders.md diff --git a/docs/link/guide/index.mdx b/docs/link/guide/index.mdx new file mode 100644 index 0000000..7da5f98 --- /dev/null +++ b/docs/link/guide/index.mdx @@ -0,0 +1,11 @@ +--- +sidebar_position: 20 +sidebar_label: Agents Guide +--- + +import DocCardList from '@theme/DocCardList'; +import {useCurrentSidebarCategory} from '@docusaurus/theme-common'; + +# Features + + diff --git a/docs/link/logging_in.md b/docs/link/guide/logging_in.md similarity index 100% rename from docs/link/logging_in.md rename to docs/link/guide/logging_in.md diff --git a/docs/link/notifications.md b/docs/link/guide/notifications.md similarity index 100% rename from docs/link/notifications.md rename to docs/link/guide/notifications.md diff --git a/docs/link/pgp.md b/docs/link/guide/pgp.md similarity index 100% rename from docs/link/pgp.md rename to docs/link/guide/pgp.md diff --git a/docs/link/project_separation.md b/docs/link/guide/project_separation.md similarity index 100% rename from docs/link/project_separation.md rename to docs/link/guide/project_separation.md diff --git a/docs/link/hosted.md b/docs/link/hosted.md index 0540182..b418acc 100644 --- a/docs/link/hosted.md +++ b/docs/link/hosted.md @@ -4,6 +4,15 @@ sidebar_position: 500 # CDR Link FAQ +:::warning[CDR Sunset] +The Center for Digital Resilience will be sunsetting, with all programs and activities drawing to a full close on +December 31st, 2026. +Existing CDR users have been contacted and will all be offered to migrate their service contracts to SR2 at time of +renewal. +Read more [on our blog](https://www.sr2.uk/posts/2026-link-new-home/). +::: + + CDR offers hosted Link helpdesk instances managed by [SR2 Communications](https://www.sr2.uk/), a trusted team within the digital rights community, with a proven track record of securely handling sensitive data. diff --git a/docs/link/index.mdx b/docs/link/index.mdx index 579a575..d0e2312 100644 --- a/docs/link/index.mdx +++ b/docs/link/index.mdx @@ -8,14 +8,13 @@ import {useCurrentSidebarCategory} from '@docusaurus/theme-common'; # Link Helpdesk -:::warning[Under construction] -This documentation is a work in progress. Please [get in touch with us](mailto:contact@sr2.uk) if you have any questions. -::: - -Our secure digital helpdesk platform, Link, is customised and hardened version of Zammad, an open source, flexible, -multi-channel ticketing platform that enables those in need to ask for help, and providers to respond. +Our secure digital helpdesk platform, Link, is customised and hardened version of [Zammad](https://zammad.com/en), +an open source, flexible, multi-channel ticketing platform that enables those in need to ask for help, and providers to +respond. The helpdesks have integrations with popular messaging apps, including Signal, WhatsApp, and Telegram, making it easier to securely allow responders to request assistance. + + diff --git a/docs/link/moving_away.md b/docs/link/moving_away.md index fefab06..1093a4d 100644 --- a/docs/link/moving_away.md +++ b/docs/link/moving_away.md @@ -1,6 +1,6 @@ --- title: Moving Away -sidebar_position: 100 +sidebar_position: 150 --- ## Data Portability diff --git a/docs/link/troubleshooting.md b/docs/link/troubleshooting.md index 2533d86..31add3f 100644 --- a/docs/link/troubleshooting.md +++ b/docs/link/troubleshooting.md @@ -24,6 +24,7 @@ please contact us. ### Google mail not working, Oauth token expired + #### Instructions First, someone with admin permissions in your Google organisation needs to navigate to https://console.cloud.google.com/apis/credentials diff --git a/package-lock.json b/package-lock.json index 2135c4d..ad94568 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,7 @@ "dependencies": { "@docusaurus/core": "3.9.2", "@docusaurus/preset-classic": "3.9.2", - "@docusaurus/theme-mermaid": "^3.9.2", + "@docusaurus/theme-mermaid": "3.9.2", "@mdx-js/react": "^3.0.0", "clsx": "^2.0.0", "prism-react-renderer": "^2.3.0", @@ -3937,16 +3937,16 @@ } }, "node_modules/@docusaurus/theme-mermaid": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-mermaid/-/theme-mermaid-3.10.1.tgz", - "integrity": "sha512-2gxpmln8Pc4EN1oWzshQEx2HTs67jk14v7MmgqGs8ZU7Nm8oihg+fTouof2u4vN8DtB3Fln4cDJu4UprSX1S3Q==", + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-mermaid/-/theme-mermaid-3.9.2.tgz", + "integrity": "sha512-5vhShRDq/ntLzdInsQkTdoKWSzw8d1jB17sNPYhA/KvYYFXfuVEGHLM6nrf8MFbV8TruAHDG21Fn3W4lO8GaDw==", "license": "MIT", "dependencies": { - "@docusaurus/core": "3.10.1", - "@docusaurus/module-type-aliases": "3.10.1", - "@docusaurus/theme-common": "3.10.1", - "@docusaurus/types": "3.10.1", - "@docusaurus/utils-validation": "3.10.1", + "@docusaurus/core": "3.9.2", + "@docusaurus/module-type-aliases": "3.9.2", + "@docusaurus/theme-common": "3.9.2", + "@docusaurus/types": "3.9.2", + "@docusaurus/utils-validation": "3.9.2", "mermaid": ">=11.6.0", "tslib": "^2.6.0" }, @@ -3964,382 +3964,6 @@ } } }, - "node_modules/@docusaurus/theme-mermaid/node_modules/@docusaurus/babel": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/@docusaurus/babel/-/babel-3.10.1.tgz", - "integrity": "sha512-DZzFO1K3v/GoEt1fx1DiYHF4en+PuhtQf1AkQJa5zu3CoeKSpr5cpQRUlz3jr0m44wyzmSXu9bVpfir+N4+8bg==", - "license": "MIT", - "dependencies": { - "@babel/core": "^7.25.9", - "@babel/generator": "^7.25.9", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-transform-runtime": "^7.25.9", - "@babel/preset-env": "^7.25.9", - "@babel/preset-react": "^7.25.9", - "@babel/preset-typescript": "^7.25.9", - "@babel/runtime": "^7.25.9", - "@babel/traverse": "^7.25.9", - "@docusaurus/logger": "3.10.1", - "@docusaurus/utils": "3.10.1", - "babel-plugin-dynamic-import-node": "^2.3.3", - "fs-extra": "^11.1.1", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=20.0" - } - }, - "node_modules/@docusaurus/theme-mermaid/node_modules/@docusaurus/bundler": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/@docusaurus/bundler/-/bundler-3.10.1.tgz", - "integrity": "sha512-HIqQPvbqnnQRe4NsBd1774KRarjXqS6wHsWELtyuSs1gCfvixJO2jUGH/OEBtr1Gvzpw+ze5CjGMvSJ8UE1KUw==", - "license": "MIT", - "dependencies": { - "@babel/core": "^7.25.9", - "@docusaurus/babel": "3.10.1", - "@docusaurus/cssnano-preset": "3.10.1", - "@docusaurus/logger": "3.10.1", - "@docusaurus/types": "3.10.1", - "@docusaurus/utils": "3.10.1", - "babel-loader": "^9.2.1", - "clean-css": "^5.3.3", - "copy-webpack-plugin": "^11.0.0", - "css-loader": "^6.11.0", - "css-minimizer-webpack-plugin": "^5.0.1", - "cssnano": "^6.1.2", - "file-loader": "^6.2.0", - "html-minifier-terser": "^7.2.0", - "mini-css-extract-plugin": "^2.9.2", - "null-loader": "^4.0.1", - "postcss": "^8.5.4", - "postcss-loader": "^7.3.4", - "postcss-preset-env": "^10.2.1", - "terser-webpack-plugin": "^5.3.9", - "tslib": "^2.6.0", - "url-loader": "^4.1.1", - "webpack": "^5.95.0", - "webpackbar": "^7.0.0" - }, - "engines": { - "node": ">=20.0" - }, - "peerDependencies": { - "@docusaurus/faster": "*" - }, - "peerDependenciesMeta": { - "@docusaurus/faster": { - "optional": true - } - } - }, - "node_modules/@docusaurus/theme-mermaid/node_modules/@docusaurus/core": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-3.10.1.tgz", - "integrity": "sha512-3pf2fXXw0eVk8WnC3T4LIigRDupcpvngpKo9Vy7mYyBhuddc0klDUuZAIfzMoK6z05pdlk6EFC/vBSX43+1O5w==", - "license": "MIT", - "dependencies": { - "@docusaurus/babel": "3.10.1", - "@docusaurus/bundler": "3.10.1", - "@docusaurus/logger": "3.10.1", - "@docusaurus/mdx-loader": "3.10.1", - "@docusaurus/utils": "3.10.1", - "@docusaurus/utils-common": "3.10.1", - "@docusaurus/utils-validation": "3.10.1", - "boxen": "^6.2.1", - "chalk": "^4.1.2", - "chokidar": "^3.5.3", - "cli-table3": "^0.6.3", - "combine-promises": "^1.1.0", - "commander": "^5.1.0", - "core-js": "^3.31.1", - "detect-port": "^1.5.1", - "escape-html": "^1.0.3", - "eta": "^2.2.0", - "eval": "^0.1.8", - "execa": "^5.1.1", - "fs-extra": "^11.1.1", - "html-tags": "^3.3.1", - "html-webpack-plugin": "^5.6.0", - "leven": "^3.1.0", - "lodash": "^4.17.21", - "open": "^8.4.0", - "p-map": "^4.0.0", - "prompts": "^2.4.2", - "react-helmet-async": "npm:@slorber/react-helmet-async@1.3.0", - "react-loadable": "npm:@docusaurus/react-loadable@6.0.0", - "react-loadable-ssr-addon-v5-slorber": "^1.0.3", - "react-router": "^5.3.4", - "react-router-config": "^5.1.1", - "react-router-dom": "^5.3.4", - "semver": "^7.5.4", - "serve-handler": "^6.1.7", - "tinypool": "^1.0.2", - "tslib": "^2.6.0", - "update-notifier": "^6.0.2", - "webpack": "^5.95.0", - "webpack-bundle-analyzer": "^4.10.2", - "webpack-dev-server": "^5.2.2", - "webpack-merge": "^6.0.1" - }, - "bin": { - "docusaurus": "bin/docusaurus.mjs" - }, - "engines": { - "node": ">=20.0" - }, - "peerDependencies": { - "@docusaurus/faster": "*", - "@mdx-js/react": "^3.0.0", - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - }, - "peerDependenciesMeta": { - "@docusaurus/faster": { - "optional": true - } - } - }, - "node_modules/@docusaurus/theme-mermaid/node_modules/@docusaurus/cssnano-preset": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-3.10.1.tgz", - "integrity": "sha512-eNfHGcTKCSq6xmcavAkX3RRclHaE2xRCMParlDXLdXVP01/a2e/jKXMj/0ULnLFQSNwwuI62L0Ge8J+nZsR7UQ==", - "license": "MIT", - "dependencies": { - "cssnano-preset-advanced": "^6.1.2", - "postcss": "^8.5.4", - "postcss-sort-media-queries": "^5.2.0", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=20.0" - } - }, - "node_modules/@docusaurus/theme-mermaid/node_modules/@docusaurus/logger": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-3.10.1.tgz", - "integrity": "sha512-oPjNFnfJsRCkePVjkGrxWGq4MvJKRQT0r9jOP0eRBTZ7Wr9FAbzdP/Gjs0I2Ss6YRkPoEgygKG112OkE6skvJw==", - "license": "MIT", - "dependencies": { - "chalk": "^4.1.2", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=20.0" - } - }, - "node_modules/@docusaurus/theme-mermaid/node_modules/@docusaurus/mdx-loader": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-3.10.1.tgz", - "integrity": "sha512-GRmeb/wQ+iXRrFwcHBfgQhrJxGElgCsoTWZYDhccjsZVne1p8MK/EpQVIloXttz76TCe78kKD5AEG9n1xc1oxQ==", - "license": "MIT", - "dependencies": { - "@docusaurus/logger": "3.10.1", - "@docusaurus/utils": "3.10.1", - "@docusaurus/utils-validation": "3.10.1", - "@mdx-js/mdx": "^3.0.0", - "@slorber/remark-comment": "^1.0.0", - "escape-html": "^1.0.3", - "estree-util-value-to-estree": "^3.0.1", - "file-loader": "^6.2.0", - "fs-extra": "^11.1.1", - "image-size": "^2.0.2", - "mdast-util-mdx": "^3.0.0", - "mdast-util-to-string": "^4.0.0", - "rehype-raw": "^7.0.0", - "remark-directive": "^3.0.0", - "remark-emoji": "^4.0.0", - "remark-frontmatter": "^5.0.0", - "remark-gfm": "^4.0.0", - "stringify-object": "^3.3.0", - "tslib": "^2.6.0", - "unified": "^11.0.3", - "unist-util-visit": "^5.0.0", - "url-loader": "^4.1.1", - "vfile": "^6.0.1", - "webpack": "^5.88.1" - }, - "engines": { - "node": ">=20.0" - }, - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/theme-mermaid/node_modules/@docusaurus/module-type-aliases": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-3.10.1.tgz", - "integrity": "sha512-YoOZKUdGlp8xSYhuAkGdSo5Ydkbq4V4eK3sD8v0a2hloxCWdQbNBhkc+Ko9QyjpESc0BYcIGM5iHVAy5hdFV6w==", - "license": "MIT", - "dependencies": { - "@docusaurus/types": "3.10.1", - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router-config": "*", - "@types/react-router-dom": "*", - "react-helmet-async": "npm:@slorber/react-helmet-async@1.3.0", - "react-loadable": "npm:@docusaurus/react-loadable@6.0.0" - }, - "peerDependencies": { - "react": "*", - "react-dom": "*" - } - }, - "node_modules/@docusaurus/theme-mermaid/node_modules/@docusaurus/theme-common": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-3.10.1.tgz", - "integrity": "sha512-0YtmIeoNo1fIw65LO8+/1dPgmDV86UmhMkow37gzjytuiCSQm9xob6PJy0L4kuQEMTLfUOGvkXvZr7GPrHquMA==", - "license": "MIT", - "dependencies": { - "@docusaurus/mdx-loader": "3.10.1", - "@docusaurus/module-type-aliases": "3.10.1", - "@docusaurus/utils": "3.10.1", - "@docusaurus/utils-common": "3.10.1", - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router-config": "*", - "clsx": "^2.0.0", - "parse-numeric-range": "^1.3.0", - "prism-react-renderer": "^2.3.0", - "tslib": "^2.6.0", - "utility-types": "^3.10.0" - }, - "engines": { - "node": ">=20.0" - }, - "peerDependencies": { - "@docusaurus/plugin-content-docs": "*", - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/theme-mermaid/node_modules/@docusaurus/types": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.10.1.tgz", - "integrity": "sha512-XYMK8k1szDCFMw2V+Xyen0g7Kee1sP3dtFnl7vkGkZOkeAJ/oPDQPL8iz4HBKOo/cwU8QeV6onVjMqtP+tFzsw==", - "license": "MIT", - "dependencies": { - "@mdx-js/mdx": "^3.0.0", - "@types/history": "^4.7.11", - "@types/mdast": "^4.0.2", - "@types/react": "*", - "commander": "^5.1.0", - "joi": "^17.9.2", - "react-helmet-async": "npm:@slorber/react-helmet-async@1.3.0", - "utility-types": "^3.10.0", - "webpack": "^5.95.0", - "webpack-merge": "^5.9.0" - }, - "peerDependencies": { - "react": "^18.0.0 || ^19.0.0", - "react-dom": "^18.0.0 || ^19.0.0" - } - }, - "node_modules/@docusaurus/theme-mermaid/node_modules/@docusaurus/types/node_modules/webpack-merge": { - "version": "5.10.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", - "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", - "license": "MIT", - "dependencies": { - "clone-deep": "^4.0.1", - "flat": "^5.0.2", - "wildcard": "^2.0.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@docusaurus/theme-mermaid/node_modules/@docusaurus/utils": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-3.10.1.tgz", - "integrity": "sha512-3ojeJry9xBYdJO6qoyyzqeJFSJBVx2mXhyDzSdjwL2+URFQMf+h25gG38iswGImicK0ELjTd1EL2xzk8hf3QPw==", - "license": "MIT", - "dependencies": { - "@docusaurus/logger": "3.10.1", - "@docusaurus/types": "3.10.1", - "@docusaurus/utils-common": "3.10.1", - "escape-string-regexp": "^4.0.0", - "execa": "^5.1.1", - "file-loader": "^6.2.0", - "fs-extra": "^11.1.1", - "github-slugger": "^1.5.0", - "globby": "^11.1.0", - "gray-matter": "^4.0.3", - "jiti": "^1.20.0", - "js-yaml": "^4.1.0", - "lodash": "^4.17.21", - "micromatch": "^4.0.5", - "p-queue": "^6.6.2", - "prompts": "^2.4.2", - "resolve-pathname": "^3.0.0", - "tslib": "^2.6.0", - "url-loader": "^4.1.1", - "utility-types": "^3.10.0", - "webpack": "^5.88.1" - }, - "engines": { - "node": ">=20.0" - } - }, - "node_modules/@docusaurus/theme-mermaid/node_modules/@docusaurus/utils-common": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-3.10.1.tgz", - "integrity": "sha512-5mFSgEADtnFxFH7RLw02QA5MpU5JVUCj0MPeIvi/aF4Fi45tQRIuTwXoXDqJ+1VfQJuYJGz3SI63wmGz4HvXzA==", - "license": "MIT", - "dependencies": { - "@docusaurus/types": "3.10.1", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=20.0" - } - }, - "node_modules/@docusaurus/theme-mermaid/node_modules/@docusaurus/utils-validation": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-3.10.1.tgz", - "integrity": "sha512-cRv1X69jwaWv47waglllgZVWzeBFLhl53XT/XED/83BerVBTC5FTP8WTcVl8Z6sZOegDSwitu/wpCSPCDOT6lg==", - "license": "MIT", - "dependencies": { - "@docusaurus/logger": "3.10.1", - "@docusaurus/utils": "3.10.1", - "@docusaurus/utils-common": "3.10.1", - "fs-extra": "^11.2.0", - "joi": "^17.9.2", - "js-yaml": "^4.1.0", - "lodash": "^4.17.21", - "tslib": "^2.6.0" - }, - "engines": { - "node": ">=20.0" - } - }, - "node_modules/@docusaurus/theme-mermaid/node_modules/webpackbar": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/webpackbar/-/webpackbar-7.0.0.tgz", - "integrity": "sha512-aS9soqSO2iCHgqHoCrj4LbfGQUboDCYJPSFOAchEK+9psIjNrfSWW4Y0YEz67MKURNvMmfo0ycOg9d/+OOf9/Q==", - "license": "MIT", - "dependencies": { - "ansis": "^3.2.0", - "consola": "^3.2.3", - "pretty-time": "^1.1.0", - "std-env": "^3.7.0" - }, - "engines": { - "node": ">=14.21.3" - }, - "peerDependencies": { - "@rspack/core": "*", - "webpack": "3 || 4 || 5" - }, - "peerDependenciesMeta": { - "@rspack/core": { - "optional": true - }, - "webpack": { - "optional": true - } - } - }, "node_modules/@docusaurus/theme-search-algolia": { "version": "3.9.2", "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-3.9.2.tgz", @@ -6735,15 +6359,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/ansis": { - "version": "3.17.0", - "resolved": "https://registry.npmjs.org/ansis/-/ansis-3.17.0.tgz", - "integrity": "sha512-0qWUglt9JEqLFr3w1I1pbrChn1grhaiAR2ocX1PP/flRmxgtwTzPFFFnfIlD6aMOLQZgSuCRlidD70lvx8yhzg==", - "license": "ISC", - "engines": { - "node": ">=14" - } - }, "node_modules/anymatch": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", diff --git a/package.json b/package.json index 20dbb88..87ed8f7 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,7 @@ "dependencies": { "@docusaurus/core": "3.9.2", "@docusaurus/preset-classic": "3.9.2", - "@docusaurus/theme-mermaid": "^3.9.2", + "@docusaurus/theme-mermaid": "3.9.2", "@mdx-js/react": "^3.0.0", "clsx": "^2.0.0", "prism-react-renderer": "^2.3.0", diff --git a/static/docs/link/active_support.png b/static/docs/link/active_support.png new file mode 100644 index 0000000..b26741d Binary files /dev/null and b/static/docs/link/active_support.png differ