diff --git a/.gitignore b/.gitignore
index 71d35fc7..27019fe0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -41,3 +41,9 @@ node_modules
# Ignore manual test scripts
manual_tests/
+
+# Design working files (local only — back up to opentdf/brand-assets)
+design/
+
+# Claude instructions (local only)
+CLAUDE.md
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index ea2e7d79..75fbbbba 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -1,6 +1,10 @@
-# Contributing
+# Contributing to opentdf/docs
-The information below is meant for documentation contributors.
+Thank you for contributing to OpenTDF documentation! For general contribution
+guidelines, community feedback channels, and branch/commit conventions, see
+[platform/CONTRIBUTING.md](https://github.com/opentdf/platform/blob/main/CONTRIBUTING.md).
+
+The information below is specific to documentation contributions.
## Prerequisites
diff --git a/docs/introduction.mdx b/docs/introduction.mdx
index 4e1e4fa2..c81c18d2 100644
--- a/docs/introduction.mdx
+++ b/docs/introduction.mdx
@@ -70,5 +70,11 @@ Find all the information you need to get started with OpenTDF.
"Learn about the OpenTDF CLI tool (otdfctl) and how it can be used to manage the OpenTDF platform.",
url: "/components/cli",
},
+ {
+ name: "Contributing",
+ description:
+ "Report bugs, request features, ask questions, or contribute code and docs. All community activity is welcome.",
+ url: "https://github.com/opentdf/platform/blob/main/CONTRIBUTING.md",
+ },
]}
/>
diff --git a/docusaurus.config.ts b/docusaurus.config.ts
index cb8d5e40..5a381bac 100644
--- a/docusaurus.config.ts
+++ b/docusaurus.config.ts
@@ -55,7 +55,7 @@ const config: Config = {
"@type": "Organization",
name: "OpenTDF",
url: "https://opentdf.io",
- logo: "https://docs.opentdf.io/img/opentdf-social.png",
+ logo: "https://opentdf.io/img/opentdf-icon.svg",
}),
},
],
@@ -92,7 +92,7 @@ const config: Config = {
},
blog: false,
theme: {
- customCss: "./src/css/custom.css",
+ customCss: ["./src/css/custom.css", "./src/css/landing.css"],
},
},
],
@@ -111,6 +111,7 @@ const config: Config = {
logo: {
alt: "OpenTDF - Protect the Data, Build the Future",
src: "img/OpenTDF-Logo.png",
+ srcDark: "img/OpenTDF-Logo-White.png",
width: 32,
height: 32,
},
@@ -122,84 +123,79 @@ const config: Config = {
label: "Docs",
},
{
- href: "https://github.com/opentdf",
- label: "GitHub",
- position: "right",
+ to: "/quickstart",
+ position: "left",
+ label: "Quickstart",
},
{
- type: "search",
+ to: "/sdks",
+ position: "left",
+ label: "SDKs",
+ },
+ {
+ to: "/spec",
+ position: "left",
+ label: "Specification",
+ },
+ {
+ href: "https://github.com/orgs/opentdf/discussions",
+ position: "left",
+ label: "Community",
+ },
+ {
+ href: "https://github.com/opentdf",
+ label: "GitHub",
position: "right",
},
],
},
footer: {
style: "dark",
- logo: {
- alt: "OpenTDF Logo",
- src: "img/opentdf-logo-horizontal.png",
- href: "https://opentdf.io",
- },
links: [
{
- title: "Sponsors",
+ title: "Project",
items: [
- {
- label: "Virtru",
- href: "https://virtru.com",
- },
+ { label: "About", to: "/introduction" },
+ { label: "Architecture", to: "/architecture" },
+ { label: "Specification", to: "/spec" },
+ { label: "License", href: "https://github.com/opentdf/platform/blob/main/LICENSE" },
],
},
{
- title: "Support",
+ title: "Developers",
items: [
- {
- label: "Getting Started",
- to: "/getting-started/configuration",
- },
- {
- label: "Documentation",
- to: "/introduction",
- },
- {
- label: "GitHub Discussions",
- href: "https://github.com/orgs/opentdf/discussions",
- },
+ { label: "Quickstart", to: "/quickstart" },
+ { label: "SDKs", to: "/sdks" },
+ { label: "Platform", href: "https://github.com/opentdf/platform" },
+ { label: "CLI Reference", href: "https://github.com/opentdf/otdfctl" },
],
},
{
- title: "More",
+ title: "Community",
items: [
- {
- label: "Showcase",
- href: "https://github.com/orgs/opentdf/discussions/categories/show-and-tell",
- },
- {
- label: "Roadmap",
- href: "https://opentdf.io/appendix/matrix",
- },
+ { label: "GitHub", href: "https://github.com/opentdf" },
+ { label: "Discussions", href: "https://github.com/orgs/opentdf/discussions" },
+ { label: "Contributing", href: "https://github.com/opentdf/platform/blob/main/CONTRIBUTING.md" },
+ { label: "Code of Conduct", href: "https://github.com/opentdf/platform/blob/main/CODE_OF_CONDUCT.md" },
],
},
{
- title: "Legal",
+ title: "Sponsor",
items: [
{
- label: "Privacy Policy",
- to: "/privacy-policy",
- },
- {
- label: "Cookie Policy",
- to: "/cookie-policy",
- },
- {
- label: "Terms of Service",
- to: "/terms-of-service",
+ html: `
`,
},
],
},
],
copyright: `
- Copyright © ${new Date().getFullYear()} OpenTDF
-
+
+ Copyright © ${new Date().getFullYear()} OpenTDF
+
+
`,
},
prism: {
diff --git a/package-lock.json b/package-lock.json
index 72df6c82..64845a39 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -19,10 +19,10 @@
"@mdx-js/react": "^3.1.0",
"clsx": "^2.0.0",
"docusaurus-lunr-search": "^3.6.0",
- "docusaurus-plugin-openapi-docs": "^4.4.0",
+ "docusaurus-plugin-openapi-docs": "^4.7.1",
"docusaurus-plugin-remote-content": "^4.0.0",
"docusaurus-theme-github-codeblock": "^2.0.2",
- "docusaurus-theme-openapi-docs": "^4.4.0",
+ "docusaurus-theme-openapi-docs": "^4.7.1",
"gray-matter": "^4.0.3",
"minimatch": "^10.2.1",
"octokit": "^4.0.2",
@@ -7085,19 +7085,21 @@
}
},
"node_modules/@reduxjs/toolkit": {
- "version": "1.9.7",
- "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-1.9.7.tgz",
- "integrity": "sha512-t7v8ZPxhhKgOKtU+uyJT13lu4vL7az5aFi4IdoDs/eS548edn2M8Ik9h8fxgvMjGoAUVFSt6ZC1P5cWmQ014QQ==",
+ "version": "2.11.2",
+ "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-2.11.2.tgz",
+ "integrity": "sha512-Kd6kAHTA6/nUpp8mySPqj3en3dm0tdMIgbttnQ1xFMVpufoj+ADi8pXLBsd4xzTRHQa7t/Jv8W5UnCuW4kuWMQ==",
"license": "MIT",
"dependencies": {
- "immer": "^9.0.21",
- "redux": "^4.2.1",
- "redux-thunk": "^2.4.2",
- "reselect": "^4.1.8"
+ "@standard-schema/spec": "^1.0.0",
+ "@standard-schema/utils": "^0.3.0",
+ "immer": "^11.0.0",
+ "redux": "^5.0.1",
+ "redux-thunk": "^3.1.0",
+ "reselect": "^5.1.0"
},
"peerDependencies": {
- "react": "^16.9.0 || ^17.0.0 || ^18",
- "react-redux": "^7.2.1 || ^8.0.2"
+ "react": "^16.9.0 || ^17.0.0 || ^18 || ^19",
+ "react-redux": "^7.2.1 || ^8.1.3 || ^9.0.0"
},
"peerDependenciesMeta": {
"react": {
@@ -7155,6 +7157,18 @@
"micromark-util-symbol": "^1.0.1"
}
},
+ "node_modules/@standard-schema/spec": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz",
+ "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==",
+ "license": "MIT"
+ },
+ "node_modules/@standard-schema/utils": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/@standard-schema/utils/-/utils-0.3.0.tgz",
+ "integrity": "sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g==",
+ "license": "MIT"
+ },
"node_modules/@svgr/babel-plugin-add-jsx-attribute": {
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-8.0.0.tgz",
@@ -7807,16 +7821,6 @@
"resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.11.tgz",
"integrity": "sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA=="
},
- "node_modules/@types/hoist-non-react-statics": {
- "version": "3.3.6",
- "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.6.tgz",
- "integrity": "sha512-lPByRJUer/iN/xa4qpyL0qmL11DqNW81iU/IG1S3uvRUq4oKagz8VCxZjiWkumgt66YT3vOdDgZ0o32sGKtCEw==",
- "license": "MIT",
- "dependencies": {
- "@types/react": "*",
- "hoist-non-react-statics": "^3.3.0"
- }
- },
"node_modules/@types/html-minifier-terser": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz",
@@ -7942,18 +7946,6 @@
"csstype": "^3.0.2"
}
},
- "node_modules/@types/react-redux": {
- "version": "7.1.34",
- "resolved": "https://registry.npmjs.org/@types/react-redux/-/react-redux-7.1.34.tgz",
- "integrity": "sha512-GdFaVjEbYv4Fthm2ZLvj1VSCedV7TqE5y1kNwnjSdBOTXuRSgowux6J8TAct15T3CKBr63UMk+2CO7ilRhyrAQ==",
- "license": "MIT",
- "dependencies": {
- "@types/hoist-non-react-statics": "^3.3.0",
- "@types/react": "*",
- "hoist-non-react-statics": "^3.3.0",
- "redux": "^4.0.0"
- }
- },
"node_modules/@types/react-router": {
"version": "5.1.20",
"resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.20.tgz",
@@ -8044,6 +8036,12 @@
"resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz",
"integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ=="
},
+ "node_modules/@types/use-sync-external-store": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.6.tgz",
+ "integrity": "sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg==",
+ "license": "MIT"
+ },
"node_modules/@types/ws": {
"version": "8.5.10",
"resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz",
@@ -8336,14 +8334,15 @@
}
},
"node_modules/ajv": {
- "version": "8.13.0",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.13.0.tgz",
- "integrity": "sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==",
+ "version": "8.18.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz",
+ "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==",
+ "license": "MIT",
"dependencies": {
"fast-deep-equal": "^3.1.3",
+ "fast-uri": "^3.0.1",
"json-schema-traverse": "^1.0.0",
- "require-from-string": "^2.0.2",
- "uri-js": "^4.4.1"
+ "require-from-string": "^2.0.2"
},
"funding": {
"type": "github",
@@ -8592,9 +8591,9 @@
}
},
"node_modules/async": {
- "version": "3.2.4",
- "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz",
- "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==",
+ "version": "3.2.6",
+ "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz",
+ "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==",
"license": "MIT"
},
"node_modules/asynckit": {
@@ -8603,14 +8602,6 @@
"integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
"license": "MIT"
},
- "node_modules/at-least-node": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz",
- "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==",
- "engines": {
- "node": ">= 4.0.0"
- }
- },
"node_modules/autocomplete.js": {
"version": "0.37.1",
"resolved": "https://registry.npmjs.org/autocomplete.js/-/autocomplete.js-0.37.1.tgz",
@@ -11292,15 +11283,6 @@
"url": "https://github.com/sponsors/wooorm"
}
},
- "node_modules/diff": {
- "version": "5.2.2",
- "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.2.tgz",
- "integrity": "sha512-vtcDfH3TOjP8UekytvnHH1o1P4FcUdt4eQ1Y+Abap1tk/OB2MWQvcwS2ClCd1zuIhc3JKOx6p3kod8Vfys3E+A==",
- "license": "BSD-3-Clause",
- "engines": {
- "node": ">=0.3.1"
- }
- },
"node_modules/dir-glob": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
@@ -11484,26 +11466,26 @@
}
},
"node_modules/docusaurus-plugin-openapi-docs": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/docusaurus-plugin-openapi-docs/-/docusaurus-plugin-openapi-docs-4.4.0.tgz",
- "integrity": "sha512-VFW0euAyM6i6U6Q2WrNXkp1LnxQFGszZbmloMFYrs1qwBjPLkuHfQ4OJMXGDsGcGl4zNDJ9cwODmJlmdwl1hwg==",
+ "version": "4.7.1",
+ "resolved": "https://registry.npmjs.org/docusaurus-plugin-openapi-docs/-/docusaurus-plugin-openapi-docs-4.7.1.tgz",
+ "integrity": "sha512-RpqvTEnhIfdSuTn/Fa/8bmxeufijLL9HCRb//ELD33AKqEbCw147SKR/CqWu4H4gwi50FZLUbiHKZJbPtXLt9Q==",
"license": "MIT",
"dependencies": {
"@apidevtools/json-schema-ref-parser": "^11.5.4",
- "@redocly/openapi-core": "^1.10.5",
+ "@redocly/openapi-core": "^1.34.3",
"allof-merge": "^0.6.6",
"chalk": "^4.1.2",
- "clsx": "^1.1.1",
- "fs-extra": "^9.0.1",
+ "clsx": "^2.1.1",
+ "fs-extra": "^11.3.0",
"json-pointer": "^0.6.2",
"json5": "^2.2.3",
- "lodash": "^4.17.20",
+ "lodash": "^4.17.21",
"mustache": "^4.2.0",
- "openapi-to-postmanv2": "^4.21.0",
- "postman-collection": "^4.4.0",
- "slugify": "^1.6.5",
+ "openapi-to-postmanv2": "^5.0.0",
+ "postman-collection": "^5.0.2",
+ "slugify": "^1.6.6",
"swagger2openapi": "^7.0.8",
- "xml-formatter": "^2.6.1"
+ "xml-formatter": "^3.6.6"
},
"engines": {
"node": ">=14"
@@ -11515,30 +11497,6 @@
"react": "^16.8.4 || ^17.0.0 || ^18.0.0 || ^19.0.0"
}
},
- "node_modules/docusaurus-plugin-openapi-docs/node_modules/clsx": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz",
- "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==",
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/docusaurus-plugin-openapi-docs/node_modules/fs-extra": {
- "version": "9.1.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz",
- "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==",
- "license": "MIT",
- "dependencies": {
- "at-least-node": "^1.0.0",
- "graceful-fs": "^4.2.0",
- "jsonfile": "^6.0.1",
- "universalify": "^2.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/docusaurus-plugin-remote-content": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/docusaurus-plugin-remote-content/-/docusaurus-plugin-remote-content-4.0.0.tgz",
@@ -11634,38 +11592,38 @@
}
},
"node_modules/docusaurus-theme-openapi-docs": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/docusaurus-theme-openapi-docs/-/docusaurus-theme-openapi-docs-4.4.0.tgz",
- "integrity": "sha512-wmc2b946rqBcdjgEHi6Up7e8orasYk5RnIUerTfmZ/Hi006I8FIjMnJEmHAF6t5PbFiiYnlkB6vYK0CC5xBnCQ==",
+ "version": "4.7.1",
+ "resolved": "https://registry.npmjs.org/docusaurus-theme-openapi-docs/-/docusaurus-theme-openapi-docs-4.7.1.tgz",
+ "integrity": "sha512-OPydf11LoEY3fdxaoqCVO+qCk7LBo6l6s28UvHJ5mIN/2xu+dOOio9+xnKZ5FIPOlD+dx0gVSKzaVCi/UFTxlg==",
"license": "MIT",
"dependencies": {
"@hookform/error-message": "^2.0.1",
- "@reduxjs/toolkit": "^1.7.1",
+ "@reduxjs/toolkit": "^2.8.2",
"allof-merge": "^0.6.6",
"buffer": "^6.0.3",
- "clsx": "^1.1.1",
- "copy-text-to-clipboard": "^3.1.0",
- "crypto-js": "^4.1.1",
+ "clsx": "^2.1.1",
+ "copy-text-to-clipboard": "^3.2.0",
+ "crypto-js": "^4.2.0",
"file-saver": "^2.0.5",
- "lodash": "^4.17.20",
+ "lodash": "^4.17.21",
"pako": "^2.1.0",
- "postman-code-generators": "^1.10.1",
- "postman-collection": "^4.4.0",
- "prism-react-renderer": "^2.3.0",
+ "postman-code-generators": "^2.0.0",
+ "postman-collection": "^5.0.2",
+ "prism-react-renderer": "^2.4.1",
"process": "^0.11.10",
- "react-hook-form": "^7.43.8",
- "react-live": "^4.0.0",
+ "react-hook-form": "^7.59.0",
+ "react-live": "^4.1.8",
"react-magic-dropzone": "^1.0.1",
- "react-markdown": "^8.0.1",
- "react-modal": "^3.15.1",
- "react-redux": "^7.2.0",
- "rehype-raw": "^6.1.1",
- "remark-gfm": "3.0.1",
- "sass": "^1.80.4",
- "sass-loader": "^16.0.2",
+ "react-markdown": "^10.1.0",
+ "react-modal": "^3.16.3",
+ "react-redux": "^9.2.0",
+ "rehype-raw": "^7.0.0",
+ "remark-gfm": "4.0.1",
+ "sass": "^1.89.2",
+ "sass-loader": "^16.0.5",
"unist-util-visit": "^5.0.0",
- "url": "^0.11.1",
- "xml-formatter": "^2.6.1"
+ "url": "^0.11.4",
+ "xml-formatter": "^3.6.6"
},
"engines": {
"node": ">=14"
@@ -11678,36 +11636,6 @@
"react-dom": "^16.8.4 || ^17.0.0 || ^18.0.0 || ^19.0.0"
}
},
- "node_modules/docusaurus-theme-openapi-docs/node_modules/@types/hast": {
- "version": "2.3.10",
- "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.10.tgz",
- "integrity": "sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw==",
- "license": "MIT",
- "dependencies": {
- "@types/unist": "^2"
- }
- },
- "node_modules/docusaurus-theme-openapi-docs/node_modules/@types/mdast": {
- "version": "3.0.15",
- "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz",
- "integrity": "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==",
- "license": "MIT",
- "dependencies": {
- "@types/unist": "^2"
- }
- },
- "node_modules/docusaurus-theme-openapi-docs/node_modules/@types/parse5": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-6.0.3.tgz",
- "integrity": "sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==",
- "license": "MIT"
- },
- "node_modules/docusaurus-theme-openapi-docs/node_modules/@types/unist": {
- "version": "2.0.11",
- "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz",
- "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==",
- "license": "MIT"
- },
"node_modules/docusaurus-theme-openapi-docs/node_modules/buffer": {
"version": "6.0.3",
"resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz",
@@ -11732,1237 +11660,144 @@
"ieee754": "^1.2.1"
}
},
- "node_modules/docusaurus-theme-openapi-docs/node_modules/clsx": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz",
- "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==",
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/docusaurus-theme-openapi-docs/node_modules/escape-string-regexp": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz",
- "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==",
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/docusaurus-theme-openapi-docs/node_modules/hast-util-from-parse5": {
- "version": "7.1.2",
- "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-7.1.2.tgz",
- "integrity": "sha512-Nz7FfPBuljzsN3tCQ4kCBKqdNhQE2l0Tn+X1ubgKBPRoiDIu1mL08Cfw4k7q71+Duyaw7DXDN+VTAp4Vh3oCOw==",
+ "node_modules/docusaurus-theme-openapi-docs/node_modules/react-markdown": {
+ "version": "10.1.0",
+ "resolved": "https://registry.npmjs.org/react-markdown/-/react-markdown-10.1.0.tgz",
+ "integrity": "sha512-qKxVopLT/TyA6BX3Ue5NwabOsAzm0Q7kAPwq6L+wWDwisYs7R8vZ0nRXqq6rkueboxpkjvLGU9fWifiX/ZZFxQ==",
"license": "MIT",
"dependencies": {
- "@types/hast": "^2.0.0",
- "@types/unist": "^2.0.0",
- "hastscript": "^7.0.0",
- "property-information": "^6.0.0",
- "vfile": "^5.0.0",
- "vfile-location": "^4.0.0",
- "web-namespaces": "^2.0.0"
+ "@types/hast": "^3.0.0",
+ "@types/mdast": "^4.0.0",
+ "devlop": "^1.0.0",
+ "hast-util-to-jsx-runtime": "^2.0.0",
+ "html-url-attributes": "^3.0.0",
+ "mdast-util-to-hast": "^13.0.0",
+ "remark-parse": "^11.0.0",
+ "remark-rehype": "^11.0.0",
+ "unified": "^11.0.0",
+ "unist-util-visit": "^5.0.0",
+ "vfile": "^6.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/unified"
+ },
+ "peerDependencies": {
+ "@types/react": ">=18",
+ "react": ">=18"
}
},
- "node_modules/docusaurus-theme-openapi-docs/node_modules/hast-util-parse-selector": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-3.1.1.tgz",
- "integrity": "sha512-jdlwBjEexy1oGz0aJ2f4GKMaVKkA9jwjr4MjAAI22E5fM/TXVZHuS5OpONtdeIkRKqAaryQ2E9xNQxijoThSZA==",
- "license": "MIT",
+ "node_modules/dom-converter": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz",
+ "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==",
"dependencies": {
- "@types/hast": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
+ "utila": "~0.4"
}
},
- "node_modules/docusaurus-theme-openapi-docs/node_modules/hast-util-raw": {
- "version": "7.2.3",
- "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-7.2.3.tgz",
- "integrity": "sha512-RujVQfVsOrxzPOPSzZFiwofMArbQke6DJjnFfceiEbFh7S05CbPt0cYN+A5YeD3pso0JQk6O1aHBnx9+Pm2uqg==",
- "license": "MIT",
+ "node_modules/dom-serializer": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz",
+ "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==",
"dependencies": {
- "@types/hast": "^2.0.0",
- "@types/parse5": "^6.0.0",
- "hast-util-from-parse5": "^7.0.0",
- "hast-util-to-parse5": "^7.0.0",
- "html-void-elements": "^2.0.0",
- "parse5": "^6.0.0",
- "unist-util-position": "^4.0.0",
- "unist-util-visit": "^4.0.0",
- "vfile": "^5.0.0",
- "web-namespaces": "^2.0.0",
- "zwitch": "^2.0.0"
+ "domelementtype": "^2.3.0",
+ "domhandler": "^5.0.2",
+ "entities": "^4.2.0"
},
"funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
+ "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1"
}
},
- "node_modules/docusaurus-theme-openapi-docs/node_modules/hast-util-raw/node_modules/unist-util-visit": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz",
- "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==",
- "license": "MIT",
+ "node_modules/domelementtype": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz",
+ "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/fb55"
+ }
+ ]
+ },
+ "node_modules/domhandler": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz",
+ "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==",
"dependencies": {
- "@types/unist": "^2.0.0",
- "unist-util-is": "^5.0.0",
- "unist-util-visit-parents": "^5.1.1"
+ "domelementtype": "^2.3.0"
+ },
+ "engines": {
+ "node": ">= 4"
},
"funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
+ "url": "https://github.com/fb55/domhandler?sponsor=1"
}
},
- "node_modules/docusaurus-theme-openapi-docs/node_modules/hast-util-to-parse5": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-7.1.0.tgz",
- "integrity": "sha512-YNRgAJkH2Jky5ySkIqFXTQiaqcAtJyVE+D5lkN6CdtOqrnkLfGYYrEcKuHOJZlp+MwjSwuD3fZuawI+sic/RBw==",
- "license": "MIT",
+ "node_modules/dompurify": {
+ "version": "3.2.6",
+ "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.2.6.tgz",
+ "integrity": "sha512-/2GogDQlohXPZe6D6NOgQvXLPSYBqIWMnZ8zzOhn09REE4eyAzb+Hed3jhoM9OkuaJ8P6ZGTTVWQKAi8ieIzfQ==",
+ "license": "(MPL-2.0 OR Apache-2.0)",
+ "optionalDependencies": {
+ "@types/trusted-types": "^2.0.7"
+ }
+ },
+ "node_modules/domutils": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz",
+ "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==",
"dependencies": {
- "@types/hast": "^2.0.0",
- "comma-separated-tokens": "^2.0.0",
- "property-information": "^6.0.0",
- "space-separated-tokens": "^2.0.0",
- "web-namespaces": "^2.0.0",
- "zwitch": "^2.0.0"
+ "dom-serializer": "^2.0.0",
+ "domelementtype": "^2.3.0",
+ "domhandler": "^5.0.3"
},
"funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
+ "url": "https://github.com/fb55/domutils?sponsor=1"
}
},
- "node_modules/docusaurus-theme-openapi-docs/node_modules/hast-util-whitespace": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-2.0.1.tgz",
- "integrity": "sha512-nAxA0v8+vXSBDt3AnRUNjyRIQ0rD+ntpbAp4LnPkumc5M9yUbSMa4XDU9Q6etY4f1Wp4bNgvc1yjiZtsTTrSng==",
- "license": "MIT",
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
+ "node_modules/dot-case": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz",
+ "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==",
+ "dependencies": {
+ "no-case": "^3.0.4",
+ "tslib": "^2.0.3"
}
},
- "node_modules/docusaurus-theme-openapi-docs/node_modules/hastscript": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-7.2.0.tgz",
- "integrity": "sha512-TtYPq24IldU8iKoJQqvZOuhi5CyCQRAbvDOX0x1eW6rsHSxa/1i2CCiptNTotGHJ3VoHRGmqiv6/D3q113ikkw==",
- "license": "MIT",
+ "node_modules/dot-prop": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz",
+ "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==",
"dependencies": {
- "@types/hast": "^2.0.0",
- "comma-separated-tokens": "^2.0.0",
- "hast-util-parse-selector": "^3.0.0",
- "property-information": "^6.0.0",
- "space-separated-tokens": "^2.0.0"
+ "is-obj": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
},
"funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/docusaurus-theme-openapi-docs/node_modules/html-void-elements": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-2.0.1.tgz",
- "integrity": "sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A==",
- "license": "MIT",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
+ "node_modules/dot-prop/node_modules/is-obj": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz",
+ "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==",
+ "engines": {
+ "node": ">=8"
}
},
- "node_modules/docusaurus-theme-openapi-docs/node_modules/mdast-util-find-and-replace": {
- "version": "2.2.2",
- "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-2.2.2.tgz",
- "integrity": "sha512-MTtdFRz/eMDHXzeK6W3dO7mXUlF82Gom4y0oOgvHhh/HXZAGvIQDUvQ0SuUx+j2tv44b8xTHOm8K/9OoRFnXKw==",
+ "node_modules/dunder-proto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
+ "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
"license": "MIT",
"dependencies": {
- "@types/mdast": "^3.0.0",
- "escape-string-regexp": "^5.0.0",
- "unist-util-is": "^5.0.0",
- "unist-util-visit-parents": "^5.0.0"
+ "call-bind-apply-helpers": "^1.0.1",
+ "es-errors": "^1.3.0",
+ "gopd": "^1.2.0"
},
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/docusaurus-theme-openapi-docs/node_modules/mdast-util-from-markdown": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.1.tgz",
- "integrity": "sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==",
- "license": "MIT",
- "dependencies": {
- "@types/mdast": "^3.0.0",
- "@types/unist": "^2.0.0",
- "decode-named-character-reference": "^1.0.0",
- "mdast-util-to-string": "^3.1.0",
- "micromark": "^3.0.0",
- "micromark-util-decode-numeric-character-reference": "^1.0.0",
- "micromark-util-decode-string": "^1.0.0",
- "micromark-util-normalize-identifier": "^1.0.0",
- "micromark-util-symbol": "^1.0.0",
- "micromark-util-types": "^1.0.0",
- "unist-util-stringify-position": "^3.0.0",
- "uvu": "^0.5.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/docusaurus-theme-openapi-docs/node_modules/mdast-util-gfm": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-2.0.2.tgz",
- "integrity": "sha512-qvZ608nBppZ4icQlhQQIAdc6S3Ffj9RGmzwUKUWuEICFnd1LVkN3EktF7ZHAgfcEdvZB5owU9tQgt99e2TlLjg==",
- "license": "MIT",
- "dependencies": {
- "mdast-util-from-markdown": "^1.0.0",
- "mdast-util-gfm-autolink-literal": "^1.0.0",
- "mdast-util-gfm-footnote": "^1.0.0",
- "mdast-util-gfm-strikethrough": "^1.0.0",
- "mdast-util-gfm-table": "^1.0.0",
- "mdast-util-gfm-task-list-item": "^1.0.0",
- "mdast-util-to-markdown": "^1.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/docusaurus-theme-openapi-docs/node_modules/mdast-util-gfm-autolink-literal": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-1.0.3.tgz",
- "integrity": "sha512-My8KJ57FYEy2W2LyNom4n3E7hKTuQk/0SES0u16tjA9Z3oFkF4RrC/hPAPgjlSpezsOvI8ObcXcElo92wn5IGA==",
- "license": "MIT",
- "dependencies": {
- "@types/mdast": "^3.0.0",
- "ccount": "^2.0.0",
- "mdast-util-find-and-replace": "^2.0.0",
- "micromark-util-character": "^1.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/docusaurus-theme-openapi-docs/node_modules/mdast-util-gfm-footnote": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-1.0.2.tgz",
- "integrity": "sha512-56D19KOGbE00uKVj3sgIykpwKL179QsVFwx/DCW0u/0+URsryacI4MAdNJl0dh+u2PSsD9FtxPFbHCzJ78qJFQ==",
- "license": "MIT",
- "dependencies": {
- "@types/mdast": "^3.0.0",
- "mdast-util-to-markdown": "^1.3.0",
- "micromark-util-normalize-identifier": "^1.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/docusaurus-theme-openapi-docs/node_modules/mdast-util-gfm-strikethrough": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-1.0.3.tgz",
- "integrity": "sha512-DAPhYzTYrRcXdMjUtUjKvW9z/FNAMTdU0ORyMcbmkwYNbKocDpdk+PX1L1dQgOID/+vVs1uBQ7ElrBQfZ0cuiQ==",
- "license": "MIT",
- "dependencies": {
- "@types/mdast": "^3.0.0",
- "mdast-util-to-markdown": "^1.3.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/docusaurus-theme-openapi-docs/node_modules/mdast-util-gfm-table": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-1.0.7.tgz",
- "integrity": "sha512-jjcpmNnQvrmN5Vx7y7lEc2iIOEytYv7rTvu+MeyAsSHTASGCCRA79Igg2uKssgOs1i1po8s3plW0sTu1wkkLGg==",
- "license": "MIT",
- "dependencies": {
- "@types/mdast": "^3.0.0",
- "markdown-table": "^3.0.0",
- "mdast-util-from-markdown": "^1.0.0",
- "mdast-util-to-markdown": "^1.3.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/docusaurus-theme-openapi-docs/node_modules/mdast-util-gfm-task-list-item": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-1.0.2.tgz",
- "integrity": "sha512-PFTA1gzfp1B1UaiJVyhJZA1rm0+Tzn690frc/L8vNX1Jop4STZgOE6bxUhnzdVSB+vm2GU1tIsuQcA9bxTQpMQ==",
- "license": "MIT",
- "dependencies": {
- "@types/mdast": "^3.0.0",
- "mdast-util-to-markdown": "^1.3.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/docusaurus-theme-openapi-docs/node_modules/mdast-util-phrasing": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-3.0.1.tgz",
- "integrity": "sha512-WmI1gTXUBJo4/ZmSk79Wcb2HcjPJBzM1nlI/OUWA8yk2X9ik3ffNbBGsU+09BFmXaL1IBb9fiuvq6/KMiNycSg==",
- "license": "MIT",
- "dependencies": {
- "@types/mdast": "^3.0.0",
- "unist-util-is": "^5.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/docusaurus-theme-openapi-docs/node_modules/mdast-util-to-hast": {
- "version": "12.3.0",
- "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-12.3.0.tgz",
- "integrity": "sha512-pits93r8PhnIoU4Vy9bjW39M2jJ6/tdHyja9rrot9uujkN7UTU9SDnE6WNJz/IGyQk3XHX6yNNtrBH6cQzm8Hw==",
- "license": "MIT",
- "dependencies": {
- "@types/hast": "^2.0.0",
- "@types/mdast": "^3.0.0",
- "mdast-util-definitions": "^5.0.0",
- "micromark-util-sanitize-uri": "^1.1.0",
- "trim-lines": "^3.0.0",
- "unist-util-generated": "^2.0.0",
- "unist-util-position": "^4.0.0",
- "unist-util-visit": "^4.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/docusaurus-theme-openapi-docs/node_modules/mdast-util-to-hast/node_modules/unist-util-visit": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz",
- "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==",
- "license": "MIT",
- "dependencies": {
- "@types/unist": "^2.0.0",
- "unist-util-is": "^5.0.0",
- "unist-util-visit-parents": "^5.1.1"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/docusaurus-theme-openapi-docs/node_modules/mdast-util-to-markdown": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-1.5.0.tgz",
- "integrity": "sha512-bbv7TPv/WC49thZPg3jXuqzuvI45IL2EVAr/KxF0BSdHsU0ceFHOmwQn6evxAh1GaoK/6GQ1wp4R4oW2+LFL/A==",
- "license": "MIT",
- "dependencies": {
- "@types/mdast": "^3.0.0",
- "@types/unist": "^2.0.0",
- "longest-streak": "^3.0.0",
- "mdast-util-phrasing": "^3.0.0",
- "mdast-util-to-string": "^3.0.0",
- "micromark-util-decode-string": "^1.0.0",
- "unist-util-visit": "^4.0.0",
- "zwitch": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/docusaurus-theme-openapi-docs/node_modules/mdast-util-to-markdown/node_modules/unist-util-visit": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz",
- "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==",
- "license": "MIT",
- "dependencies": {
- "@types/unist": "^2.0.0",
- "unist-util-is": "^5.0.0",
- "unist-util-visit-parents": "^5.1.1"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/docusaurus-theme-openapi-docs/node_modules/mdast-util-to-string": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz",
- "integrity": "sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==",
- "license": "MIT",
- "dependencies": {
- "@types/mdast": "^3.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/docusaurus-theme-openapi-docs/node_modules/micromark": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/micromark/-/micromark-3.2.0.tgz",
- "integrity": "sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "@types/debug": "^4.0.0",
- "debug": "^4.0.0",
- "decode-named-character-reference": "^1.0.0",
- "micromark-core-commonmark": "^1.0.1",
- "micromark-factory-space": "^1.0.0",
- "micromark-util-character": "^1.0.0",
- "micromark-util-chunked": "^1.0.0",
- "micromark-util-combine-extensions": "^1.0.0",
- "micromark-util-decode-numeric-character-reference": "^1.0.0",
- "micromark-util-encode": "^1.0.0",
- "micromark-util-normalize-identifier": "^1.0.0",
- "micromark-util-resolve-all": "^1.0.0",
- "micromark-util-sanitize-uri": "^1.0.0",
- "micromark-util-subtokenize": "^1.0.0",
- "micromark-util-symbol": "^1.0.0",
- "micromark-util-types": "^1.0.1",
- "uvu": "^0.5.0"
- }
- },
- "node_modules/docusaurus-theme-openapi-docs/node_modules/micromark-core-commonmark": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-1.1.0.tgz",
- "integrity": "sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "decode-named-character-reference": "^1.0.0",
- "micromark-factory-destination": "^1.0.0",
- "micromark-factory-label": "^1.0.0",
- "micromark-factory-space": "^1.0.0",
- "micromark-factory-title": "^1.0.0",
- "micromark-factory-whitespace": "^1.0.0",
- "micromark-util-character": "^1.0.0",
- "micromark-util-chunked": "^1.0.0",
- "micromark-util-classify-character": "^1.0.0",
- "micromark-util-html-tag-name": "^1.0.0",
- "micromark-util-normalize-identifier": "^1.0.0",
- "micromark-util-resolve-all": "^1.0.0",
- "micromark-util-subtokenize": "^1.0.0",
- "micromark-util-symbol": "^1.0.0",
- "micromark-util-types": "^1.0.1",
- "uvu": "^0.5.0"
- }
- },
- "node_modules/docusaurus-theme-openapi-docs/node_modules/micromark-extension-gfm": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-2.0.3.tgz",
- "integrity": "sha512-vb9OoHqrhCmbRidQv/2+Bc6pkP0FrtlhurxZofvOEy5o8RtuuvTq+RQ1Vw5ZDNrVraQZu3HixESqbG+0iKk/MQ==",
- "license": "MIT",
- "dependencies": {
- "micromark-extension-gfm-autolink-literal": "^1.0.0",
- "micromark-extension-gfm-footnote": "^1.0.0",
- "micromark-extension-gfm-strikethrough": "^1.0.0",
- "micromark-extension-gfm-table": "^1.0.0",
- "micromark-extension-gfm-tagfilter": "^1.0.0",
- "micromark-extension-gfm-task-list-item": "^1.0.0",
- "micromark-util-combine-extensions": "^1.0.0",
- "micromark-util-types": "^1.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/docusaurus-theme-openapi-docs/node_modules/micromark-extension-gfm-autolink-literal": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-1.0.5.tgz",
- "integrity": "sha512-z3wJSLrDf8kRDOh2qBtoTRD53vJ+CWIyo7uyZuxf/JAbNJjiHsOpG1y5wxk8drtv3ETAHutCu6N3thkOOgueWg==",
- "license": "MIT",
- "dependencies": {
- "micromark-util-character": "^1.0.0",
- "micromark-util-sanitize-uri": "^1.0.0",
- "micromark-util-symbol": "^1.0.0",
- "micromark-util-types": "^1.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/docusaurus-theme-openapi-docs/node_modules/micromark-extension-gfm-footnote": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-1.1.2.tgz",
- "integrity": "sha512-Yxn7z7SxgyGWRNa4wzf8AhYYWNrwl5q1Z8ii+CSTTIqVkmGZF1CElX2JI8g5yGoM3GAman9/PVCUFUSJ0kB/8Q==",
- "license": "MIT",
- "dependencies": {
- "micromark-core-commonmark": "^1.0.0",
- "micromark-factory-space": "^1.0.0",
- "micromark-util-character": "^1.0.0",
- "micromark-util-normalize-identifier": "^1.0.0",
- "micromark-util-sanitize-uri": "^1.0.0",
- "micromark-util-symbol": "^1.0.0",
- "micromark-util-types": "^1.0.0",
- "uvu": "^0.5.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/docusaurus-theme-openapi-docs/node_modules/micromark-extension-gfm-strikethrough": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-1.0.7.tgz",
- "integrity": "sha512-sX0FawVE1o3abGk3vRjOH50L5TTLr3b5XMqnP9YDRb34M0v5OoZhG+OHFz1OffZ9dlwgpTBKaT4XW/AsUVnSDw==",
- "license": "MIT",
- "dependencies": {
- "micromark-util-chunked": "^1.0.0",
- "micromark-util-classify-character": "^1.0.0",
- "micromark-util-resolve-all": "^1.0.0",
- "micromark-util-symbol": "^1.0.0",
- "micromark-util-types": "^1.0.0",
- "uvu": "^0.5.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/docusaurus-theme-openapi-docs/node_modules/micromark-extension-gfm-table": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-1.0.7.tgz",
- "integrity": "sha512-3ZORTHtcSnMQEKtAOsBQ9/oHp9096pI/UvdPtN7ehKvrmZZ2+bbWhi0ln+I9drmwXMt5boocn6OlwQzNXeVeqw==",
- "license": "MIT",
- "dependencies": {
- "micromark-factory-space": "^1.0.0",
- "micromark-util-character": "^1.0.0",
- "micromark-util-symbol": "^1.0.0",
- "micromark-util-types": "^1.0.0",
- "uvu": "^0.5.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/docusaurus-theme-openapi-docs/node_modules/micromark-extension-gfm-tagfilter": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-1.0.2.tgz",
- "integrity": "sha512-5XWB9GbAUSHTn8VPU8/1DBXMuKYT5uOgEjJb8gN3mW0PNW5OPHpSdojoqf+iq1xo7vWzw/P8bAHY0n6ijpXF7g==",
- "license": "MIT",
- "dependencies": {
- "micromark-util-types": "^1.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/docusaurus-theme-openapi-docs/node_modules/micromark-extension-gfm-task-list-item": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-1.0.5.tgz",
- "integrity": "sha512-RMFXl2uQ0pNQy6Lun2YBYT9g9INXtWJULgbt01D/x8/6yJ2qpKyzdZD3pi6UIkzF++Da49xAelVKUeUMqd5eIQ==",
- "license": "MIT",
- "dependencies": {
- "micromark-factory-space": "^1.0.0",
- "micromark-util-character": "^1.0.0",
- "micromark-util-symbol": "^1.0.0",
- "micromark-util-types": "^1.0.0",
- "uvu": "^0.5.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/docusaurus-theme-openapi-docs/node_modules/micromark-factory-destination": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-1.1.0.tgz",
- "integrity": "sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "micromark-util-character": "^1.0.0",
- "micromark-util-symbol": "^1.0.0",
- "micromark-util-types": "^1.0.0"
- }
- },
- "node_modules/docusaurus-theme-openapi-docs/node_modules/micromark-factory-label": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-1.1.0.tgz",
- "integrity": "sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "micromark-util-character": "^1.0.0",
- "micromark-util-symbol": "^1.0.0",
- "micromark-util-types": "^1.0.0",
- "uvu": "^0.5.0"
- }
- },
- "node_modules/docusaurus-theme-openapi-docs/node_modules/micromark-factory-title": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-1.1.0.tgz",
- "integrity": "sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "micromark-factory-space": "^1.0.0",
- "micromark-util-character": "^1.0.0",
- "micromark-util-symbol": "^1.0.0",
- "micromark-util-types": "^1.0.0"
- }
- },
- "node_modules/docusaurus-theme-openapi-docs/node_modules/micromark-factory-whitespace": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-1.1.0.tgz",
- "integrity": "sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "micromark-factory-space": "^1.0.0",
- "micromark-util-character": "^1.0.0",
- "micromark-util-symbol": "^1.0.0",
- "micromark-util-types": "^1.0.0"
- }
- },
- "node_modules/docusaurus-theme-openapi-docs/node_modules/micromark-util-chunked": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-1.1.0.tgz",
- "integrity": "sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "micromark-util-symbol": "^1.0.0"
- }
- },
- "node_modules/docusaurus-theme-openapi-docs/node_modules/micromark-util-classify-character": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-1.1.0.tgz",
- "integrity": "sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "micromark-util-character": "^1.0.0",
- "micromark-util-symbol": "^1.0.0",
- "micromark-util-types": "^1.0.0"
- }
- },
- "node_modules/docusaurus-theme-openapi-docs/node_modules/micromark-util-combine-extensions": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.1.0.tgz",
- "integrity": "sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "micromark-util-chunked": "^1.0.0",
- "micromark-util-types": "^1.0.0"
- }
- },
- "node_modules/docusaurus-theme-openapi-docs/node_modules/micromark-util-decode-numeric-character-reference": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.1.0.tgz",
- "integrity": "sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "micromark-util-symbol": "^1.0.0"
- }
- },
- "node_modules/docusaurus-theme-openapi-docs/node_modules/micromark-util-decode-string": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-1.1.0.tgz",
- "integrity": "sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "decode-named-character-reference": "^1.0.0",
- "micromark-util-character": "^1.0.0",
- "micromark-util-decode-numeric-character-reference": "^1.0.0",
- "micromark-util-symbol": "^1.0.0"
- }
- },
- "node_modules/docusaurus-theme-openapi-docs/node_modules/micromark-util-encode": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-1.1.0.tgz",
- "integrity": "sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
- "license": "MIT"
- },
- "node_modules/docusaurus-theme-openapi-docs/node_modules/micromark-util-html-tag-name": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.2.0.tgz",
- "integrity": "sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
- "license": "MIT"
- },
- "node_modules/docusaurus-theme-openapi-docs/node_modules/micromark-util-normalize-identifier": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.1.0.tgz",
- "integrity": "sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "micromark-util-symbol": "^1.0.0"
- }
- },
- "node_modules/docusaurus-theme-openapi-docs/node_modules/micromark-util-resolve-all": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-1.1.0.tgz",
- "integrity": "sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "micromark-util-types": "^1.0.0"
- }
- },
- "node_modules/docusaurus-theme-openapi-docs/node_modules/micromark-util-sanitize-uri": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.2.0.tgz",
- "integrity": "sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "micromark-util-character": "^1.0.0",
- "micromark-util-encode": "^1.0.0",
- "micromark-util-symbol": "^1.0.0"
- }
- },
- "node_modules/docusaurus-theme-openapi-docs/node_modules/micromark-util-subtokenize": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-1.1.0.tgz",
- "integrity": "sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "micromark-util-chunked": "^1.0.0",
- "micromark-util-symbol": "^1.0.0",
- "micromark-util-types": "^1.0.0",
- "uvu": "^0.5.0"
- }
- },
- "node_modules/docusaurus-theme-openapi-docs/node_modules/micromark-util-types": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.1.0.tgz",
- "integrity": "sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==",
- "funding": [
- {
- "type": "GitHub Sponsors",
- "url": "https://github.com/sponsors/unifiedjs"
- },
- {
- "type": "OpenCollective",
- "url": "https://opencollective.com/unified"
- }
- ],
- "license": "MIT"
- },
- "node_modules/docusaurus-theme-openapi-docs/node_modules/parse5": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz",
- "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==",
- "license": "MIT"
- },
- "node_modules/docusaurus-theme-openapi-docs/node_modules/react-is": {
- "version": "18.3.1",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz",
- "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==",
- "license": "MIT"
- },
- "node_modules/docusaurus-theme-openapi-docs/node_modules/react-markdown": {
- "version": "8.0.7",
- "resolved": "https://registry.npmjs.org/react-markdown/-/react-markdown-8.0.7.tgz",
- "integrity": "sha512-bvWbzG4MtOU62XqBx3Xx+zB2raaFFsq4mYiAzfjXJMEz2sixgeAfraA3tvzULF02ZdOMUOKTBFFaZJDDrq+BJQ==",
- "license": "MIT",
- "dependencies": {
- "@types/hast": "^2.0.0",
- "@types/prop-types": "^15.0.0",
- "@types/unist": "^2.0.0",
- "comma-separated-tokens": "^2.0.0",
- "hast-util-whitespace": "^2.0.0",
- "prop-types": "^15.0.0",
- "property-information": "^6.0.0",
- "react-is": "^18.0.0",
- "remark-parse": "^10.0.0",
- "remark-rehype": "^10.0.0",
- "space-separated-tokens": "^2.0.0",
- "style-to-object": "^0.4.0",
- "unified": "^10.0.0",
- "unist-util-visit": "^4.0.0",
- "vfile": "^5.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- },
- "peerDependencies": {
- "@types/react": ">=16",
- "react": ">=16"
- }
- },
- "node_modules/docusaurus-theme-openapi-docs/node_modules/react-markdown/node_modules/unist-util-visit": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz",
- "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==",
- "license": "MIT",
- "dependencies": {
- "@types/unist": "^2.0.0",
- "unist-util-is": "^5.0.0",
- "unist-util-visit-parents": "^5.1.1"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/docusaurus-theme-openapi-docs/node_modules/rehype-raw": {
- "version": "6.1.1",
- "resolved": "https://registry.npmjs.org/rehype-raw/-/rehype-raw-6.1.1.tgz",
- "integrity": "sha512-d6AKtisSRtDRX4aSPsJGTfnzrX2ZkHQLE5kiUuGOeEoLpbEulFF4hj0mLPbsa+7vmguDKOVVEQdHKDSwoaIDsQ==",
- "license": "MIT",
- "dependencies": {
- "@types/hast": "^2.0.0",
- "hast-util-raw": "^7.2.0",
- "unified": "^10.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/docusaurus-theme-openapi-docs/node_modules/remark-gfm": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-3.0.1.tgz",
- "integrity": "sha512-lEFDoi2PICJyNrACFOfDD3JlLkuSbOa5Wd8EPt06HUdptv8Gn0bxYTdbU/XXQ3swAPkEaGxxPN9cbnMHvVu1Ig==",
- "license": "MIT",
- "dependencies": {
- "@types/mdast": "^3.0.0",
- "mdast-util-gfm": "^2.0.0",
- "micromark-extension-gfm": "^2.0.0",
- "unified": "^10.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/docusaurus-theme-openapi-docs/node_modules/remark-parse": {
- "version": "10.0.2",
- "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-10.0.2.tgz",
- "integrity": "sha512-3ydxgHa/ZQzG8LvC7jTXccARYDcRld3VfcgIIFs7bI6vbRSxJJmzgLEIIoYKyrfhaY+ujuWaf/PJiMZXoiCXgw==",
- "license": "MIT",
- "dependencies": {
- "@types/mdast": "^3.0.0",
- "mdast-util-from-markdown": "^1.0.0",
- "unified": "^10.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/docusaurus-theme-openapi-docs/node_modules/remark-rehype": {
- "version": "10.1.0",
- "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-10.1.0.tgz",
- "integrity": "sha512-EFmR5zppdBp0WQeDVZ/b66CWJipB2q2VLNFMabzDSGR66Z2fQii83G5gTBbgGEnEEA0QRussvrFHxk1HWGJskw==",
- "license": "MIT",
- "dependencies": {
- "@types/hast": "^2.0.0",
- "@types/mdast": "^3.0.0",
- "mdast-util-to-hast": "^12.1.0",
- "unified": "^10.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/docusaurus-theme-openapi-docs/node_modules/unified": {
- "version": "10.1.2",
- "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz",
- "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==",
- "license": "MIT",
- "dependencies": {
- "@types/unist": "^2.0.0",
- "bail": "^2.0.0",
- "extend": "^3.0.0",
- "is-buffer": "^2.0.0",
- "is-plain-obj": "^4.0.0",
- "trough": "^2.0.0",
- "vfile": "^5.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/docusaurus-theme-openapi-docs/node_modules/unist-util-is": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz",
- "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==",
- "license": "MIT",
- "dependencies": {
- "@types/unist": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/docusaurus-theme-openapi-docs/node_modules/unist-util-position": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.4.tgz",
- "integrity": "sha512-kUBE91efOWfIVBo8xzh/uZQ7p9ffYRtUbMRZBNFYwf0RK8koUMx6dGUfwylLOKmaT2cs4wSW96QoYUSXAyEtpg==",
- "license": "MIT",
- "dependencies": {
- "@types/unist": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/docusaurus-theme-openapi-docs/node_modules/unist-util-stringify-position": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz",
- "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==",
- "license": "MIT",
- "dependencies": {
- "@types/unist": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/docusaurus-theme-openapi-docs/node_modules/unist-util-visit-parents": {
- "version": "5.1.3",
- "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz",
- "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==",
- "license": "MIT",
- "dependencies": {
- "@types/unist": "^2.0.0",
- "unist-util-is": "^5.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/docusaurus-theme-openapi-docs/node_modules/vfile": {
- "version": "5.3.7",
- "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.7.tgz",
- "integrity": "sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==",
- "license": "MIT",
- "dependencies": {
- "@types/unist": "^2.0.0",
- "is-buffer": "^2.0.0",
- "unist-util-stringify-position": "^3.0.0",
- "vfile-message": "^3.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/docusaurus-theme-openapi-docs/node_modules/vfile-location": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-4.1.0.tgz",
- "integrity": "sha512-YF23YMyASIIJXpktBa4vIGLJ5Gs88UB/XePgqPmTa7cDA+JeO3yclbpheQYCHjVHBn/yePzrXuygIL+xbvRYHw==",
- "license": "MIT",
- "dependencies": {
- "@types/unist": "^2.0.0",
- "vfile": "^5.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/docusaurus-theme-openapi-docs/node_modules/vfile-message": {
- "version": "3.1.4",
- "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.4.tgz",
- "integrity": "sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==",
- "license": "MIT",
- "dependencies": {
- "@types/unist": "^2.0.0",
- "unist-util-stringify-position": "^3.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/dom-converter": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz",
- "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==",
- "dependencies": {
- "utila": "~0.4"
- }
- },
- "node_modules/dom-serializer": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz",
- "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==",
- "dependencies": {
- "domelementtype": "^2.3.0",
- "domhandler": "^5.0.2",
- "entities": "^4.2.0"
- },
- "funding": {
- "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1"
- }
- },
- "node_modules/domelementtype": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz",
- "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/fb55"
- }
- ]
- },
- "node_modules/domhandler": {
- "version": "5.0.3",
- "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz",
- "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==",
- "dependencies": {
- "domelementtype": "^2.3.0"
- },
- "engines": {
- "node": ">= 4"
- },
- "funding": {
- "url": "https://github.com/fb55/domhandler?sponsor=1"
- }
- },
- "node_modules/dompurify": {
- "version": "3.2.6",
- "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.2.6.tgz",
- "integrity": "sha512-/2GogDQlohXPZe6D6NOgQvXLPSYBqIWMnZ8zzOhn09REE4eyAzb+Hed3jhoM9OkuaJ8P6ZGTTVWQKAi8ieIzfQ==",
- "license": "(MPL-2.0 OR Apache-2.0)",
- "optionalDependencies": {
- "@types/trusted-types": "^2.0.7"
- }
- },
- "node_modules/domutils": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz",
- "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==",
- "dependencies": {
- "dom-serializer": "^2.0.0",
- "domelementtype": "^2.3.0",
- "domhandler": "^5.0.3"
- },
- "funding": {
- "url": "https://github.com/fb55/domutils?sponsor=1"
- }
- },
- "node_modules/dot-case": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz",
- "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==",
- "dependencies": {
- "no-case": "^3.0.4",
- "tslib": "^2.0.3"
- }
- },
- "node_modules/dot-prop": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz",
- "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==",
- "dependencies": {
- "is-obj": "^2.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/dot-prop/node_modules/is-obj": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz",
- "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/dunder-proto": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
- "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
- "license": "MIT",
- "dependencies": {
- "call-bind-apply-helpers": "^1.0.1",
- "es-errors": "^1.3.0",
- "gopd": "^1.2.0"
- },
- "engines": {
- "node": ">= 0.4"
+ "engines": {
+ "node": ">= 0.4"
}
},
"node_modules/duplexer": {
@@ -13572,6 +12407,22 @@
"integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==",
"license": "MIT"
},
+ "node_modules/fast-uri": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz",
+ "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/fastify"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/fastify"
+ }
+ ],
+ "license": "BSD-3-Clause"
+ },
"node_modules/fastq": {
"version": "1.17.1",
"resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz",
@@ -13660,9 +12511,10 @@
}
},
"node_modules/file-loader/node_modules/ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "version": "6.14.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz",
+ "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==",
+ "license": "MIT",
"dependencies": {
"fast-deep-equal": "^3.1.1",
"fast-json-stable-stringify": "^2.0.0",
@@ -13920,9 +12772,10 @@
"license": "MIT"
},
"node_modules/fs-extra": {
- "version": "11.2.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz",
- "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==",
+ "version": "11.3.3",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.3.tgz",
+ "integrity": "sha512-VWSRii4t0AFm6ixFFmLLx1t7wS1gh+ckoa84aOeapGum0h+EZd1EhEumSB+ZdDLnEPuucsVB9oB7cxJHap6Afg==",
+ "license": "MIT",
"dependencies": {
"graceful-fs": "^4.2.0",
"jsonfile": "^6.0.1",
@@ -14097,6 +12950,27 @@
"resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.5.0.tgz",
"integrity": "sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw=="
},
+ "node_modules/glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me",
+ "license": "ISC",
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
"node_modules/glob-parent": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
@@ -14120,16 +12994,38 @@
"type": "github",
"url": "https://github.com/sponsors/streamich"
},
- "peerDependencies": {
- "tslib": "2"
+ "peerDependencies": {
+ "tslib": "2"
+ }
+ },
+ "node_modules/glob-to-regexp": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz",
+ "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==",
+ "license": "BSD-2-Clause"
+ },
+ "node_modules/glob/node_modules/brace-expansion": {
+ "version": "1.1.12",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
+ "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/glob/node_modules/minimatch": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.3.tgz",
+ "integrity": "sha512-M2GCs7Vk83NxkUyQV1bkABc4yxgz9kILhHImZiBPAZ9ybuvCb0/H7lEl5XvIg3g+9d4eNotkZA5IWwYl0tibaA==",
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
}
},
- "node_modules/glob-to-regexp": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz",
- "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==",
- "license": "BSD-2-Clause"
- },
"node_modules/global-dirs": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz",
@@ -15175,9 +14071,10 @@
"integrity": "sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q=="
},
"node_modules/immer": {
- "version": "9.0.21",
- "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.21.tgz",
- "integrity": "sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==",
+ "version": "11.1.4",
+ "resolved": "https://registry.npmjs.org/immer/-/immer-11.1.4.tgz",
+ "integrity": "sha512-XREFCPo6ksxVzP4E0ekD5aMdf8WMwmdNaz6vuvxgI40UaEiu6q3p8X52aU6GdyvLY3XXX/8R7JOTXStz/nBbRw==",
+ "license": "MIT",
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/immer"
@@ -15276,6 +14173,7 @@
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz",
"integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==",
+ "license": "MIT",
"engines": {
"node": ">= 0.10"
}
@@ -16146,78 +15044,6 @@
"node": ">= 0.4"
}
},
- "node_modules/mdast-util-definitions": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-5.1.2.tgz",
- "integrity": "sha512-8SVPMuHqlPME/z3gqVwWY4zVXn8lqKv/pAhC57FuJ40ImXyBpmO5ukh98zB2v7Blql2FiHjHv9LVztSIqjY+MA==",
- "license": "MIT",
- "dependencies": {
- "@types/mdast": "^3.0.0",
- "@types/unist": "^2.0.0",
- "unist-util-visit": "^4.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/mdast-util-definitions/node_modules/@types/mdast": {
- "version": "3.0.15",
- "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz",
- "integrity": "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==",
- "license": "MIT",
- "dependencies": {
- "@types/unist": "^2"
- }
- },
- "node_modules/mdast-util-definitions/node_modules/@types/unist": {
- "version": "2.0.11",
- "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz",
- "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==",
- "license": "MIT"
- },
- "node_modules/mdast-util-definitions/node_modules/unist-util-is": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-5.2.1.tgz",
- "integrity": "sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==",
- "license": "MIT",
- "dependencies": {
- "@types/unist": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/mdast-util-definitions/node_modules/unist-util-visit": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-4.1.2.tgz",
- "integrity": "sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==",
- "license": "MIT",
- "dependencies": {
- "@types/unist": "^2.0.0",
- "unist-util-is": "^5.0.0",
- "unist-util-visit-parents": "^5.1.1"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/mdast-util-definitions/node_modules/unist-util-visit-parents": {
- "version": "5.1.3",
- "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-5.1.3.tgz",
- "integrity": "sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==",
- "license": "MIT",
- "dependencies": {
- "@types/unist": "^2.0.0",
- "unist-util-is": "^5.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
"node_modules/mdast-util-directive": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/mdast-util-directive/-/mdast-util-directive-3.1.0.tgz",
@@ -18410,9 +17236,9 @@
}
},
"node_modules/mime-format": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/mime-format/-/mime-format-2.0.1.tgz",
- "integrity": "sha512-XxU3ngPbEnrYnNbIX+lYSaYg0M01v6p2ntd2YaFksTu0vayaw5OJvbdRyWs07EYRlLED5qadUZ+xo+XhOvFhwg==",
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/mime-format/-/mime-format-2.0.2.tgz",
+ "integrity": "sha512-Y5ERWVcyh3sby9Fx2U5F1yatiTFjNsqF5NltihTWI9QgNtr5o3dbCZdcKa1l2wyfhnwwoP9HGNxga7LqZLA6gw==",
"license": "Apache-2.0",
"dependencies": {
"charset": "^1.0.0"
@@ -18553,15 +17379,6 @@
"ufo": "^1.6.1"
}
},
- "node_modules/mri": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz",
- "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==",
- "license": "MIT",
- "engines": {
- "node": ">=4"
- }
- },
"node_modules/mrmime": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.0.tgz",
@@ -18848,9 +17665,9 @@
}
},
"node_modules/null-loader/node_modules/ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "version": "6.14.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz",
+ "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==",
"license": "MIT",
"dependencies": {
"fast-deep-equal": "^3.1.1",
@@ -19128,15 +17945,15 @@
}
},
"node_modules/openapi-to-postmanv2": {
- "version": "4.25.0",
- "resolved": "https://registry.npmjs.org/openapi-to-postmanv2/-/openapi-to-postmanv2-4.25.0.tgz",
- "integrity": "sha512-sIymbkQby0gzxt2Yez8YKB6hoISEel05XwGwNrAhr6+vxJWXNxkmssQc/8UEtVkuJ9ZfUXLkip9PYACIpfPDWg==",
+ "version": "5.8.0",
+ "resolved": "https://registry.npmjs.org/openapi-to-postmanv2/-/openapi-to-postmanv2-5.8.0.tgz",
+ "integrity": "sha512-7f02ypBlAx4G9z3bP/uDk8pBwRbYt97Eoso8XJLyclfyRvCC+CvERLUl0MD0x+GoumpkJYnQ0VGdib/kwtUdUw==",
"license": "Apache-2.0",
"dependencies": {
- "ajv": "8.11.0",
+ "ajv": "^8.11.0",
"ajv-draft-04": "1.0.0",
"ajv-formats": "2.1.1",
- "async": "3.2.4",
+ "async": "3.2.6",
"commander": "2.20.3",
"graphlib": "2.1.8",
"js-yaml": "4.1.0",
@@ -19147,7 +17964,7 @@
"oas-resolver-browser": "2.5.6",
"object-hash": "3.0.0",
"path-browserify": "1.0.1",
- "postman-collection": "^4.4.0",
+ "postman-collection": "^5.0.0",
"swagger2openapi": "7.0.8",
"yaml": "1.10.2"
},
@@ -19155,23 +17972,7 @@
"openapi2postmanv2": "bin/openapi2postmanv2.js"
},
"engines": {
- "node": ">=8"
- }
- },
- "node_modules/openapi-to-postmanv2/node_modules/ajv": {
- "version": "8.11.0",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz",
- "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==",
- "license": "MIT",
- "dependencies": {
- "fast-deep-equal": "^3.1.1",
- "json-schema-traverse": "^1.0.0",
- "require-from-string": "^2.0.2",
- "uri-js": "^4.2.2"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
+ "node": ">=18"
}
},
"node_modules/openapi-to-postmanv2/node_modules/commander": {
@@ -21125,9 +19926,9 @@
}
},
"node_modules/postman-code-generators": {
- "version": "1.14.2",
- "resolved": "https://registry.npmjs.org/postman-code-generators/-/postman-code-generators-1.14.2.tgz",
- "integrity": "sha512-qZAyyowfQAFE4MSCu2KtMGGQE/+oG1JhMZMJNMdZHYCSfQiVVeKxgk3oI4+KJ3d1y5rrm2D6C6x+Z+7iyqm+fA==",
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/postman-code-generators/-/postman-code-generators-2.1.0.tgz",
+ "integrity": "sha512-PCptfRoq6pyyqeB9qw87MfjpIZEZIykIna7Api9euhYftyrad/kCkIyXfWF6GrkcHv0nYid05xoRPWPX9JHkZg==",
"hasInstallScript": true,
"license": "Apache-2.0",
"dependencies": {
@@ -21135,11 +19936,11 @@
"detect-package-manager": "3.0.2",
"lodash": "4.17.21",
"path": "0.12.7",
- "postman-collection": "^4.4.0",
+ "postman-collection": "^5.0.0",
"shelljs": "0.8.5"
},
"engines": {
- "node": ">=12"
+ "node": ">=18"
}
},
"node_modules/postman-code-generators/node_modules/async": {
@@ -21149,9 +19950,9 @@
"license": "MIT"
},
"node_modules/postman-collection": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/postman-collection/-/postman-collection-4.5.0.tgz",
- "integrity": "sha512-152JSW9pdbaoJihwjc7Q8lc3nPg/PC9lPTHdMk7SHnHhu/GBJB7b2yb9zG7Qua578+3PxkQ/HYBuXpDSvsf7GQ==",
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/postman-collection/-/postman-collection-5.2.1.tgz",
+ "integrity": "sha512-KWzsR1RdLYuufabEEZ+UaMn/exDUNkGqC7tT8GkWumarGdpl/dAh3Lcgo7Z2fDqsGeb+EkqZgrYH8beXRtLmjA==",
"license": "Apache-2.0",
"dependencies": {
"@faker-js/faker": "5.5.3",
@@ -21159,15 +19960,15 @@
"http-reasons": "0.1.0",
"iconv-lite": "0.6.3",
"liquid-json": "0.3.1",
- "lodash": "4.17.21",
- "mime-format": "2.0.1",
- "mime-types": "2.1.35",
- "postman-url-encoder": "3.0.5",
- "semver": "7.6.3",
+ "lodash": "4.17.23",
+ "mime": "3.0.0",
+ "mime-format": "2.0.2",
+ "postman-url-encoder": "3.0.8",
+ "semver": "7.7.1",
"uuid": "8.3.2"
},
"engines": {
- "node": ">=10"
+ "node": ">=18"
}
},
"node_modules/postman-collection/node_modules/iconv-lite": {
@@ -21182,34 +19983,31 @@
"node": ">=0.10.0"
}
},
- "node_modules/postman-collection/node_modules/mime-db": {
- "version": "1.52.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
- "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
- "license": "MIT",
- "engines": {
- "node": ">= 0.6"
- }
+ "node_modules/postman-collection/node_modules/lodash": {
+ "version": "4.17.23",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz",
+ "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==",
+ "license": "MIT"
},
- "node_modules/postman-collection/node_modules/mime-types": {
- "version": "2.1.35",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
- "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "node_modules/postman-collection/node_modules/mime": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz",
+ "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==",
"license": "MIT",
- "dependencies": {
- "mime-db": "1.52.0"
+ "bin": {
+ "mime": "cli.js"
},
"engines": {
- "node": ">= 0.6"
+ "node": ">=10.0.0"
}
},
"node_modules/postman-url-encoder": {
- "version": "3.0.5",
- "resolved": "https://registry.npmjs.org/postman-url-encoder/-/postman-url-encoder-3.0.5.tgz",
- "integrity": "sha512-jOrdVvzUXBC7C+9gkIkpDJ3HIxOHTIqjpQ4C1EMt1ZGeMvSEpbFCKq23DEfgsj46vMnDgyQf+1ZLp2Wm+bKSsA==",
+ "version": "3.0.8",
+ "resolved": "https://registry.npmjs.org/postman-url-encoder/-/postman-url-encoder-3.0.8.tgz",
+ "integrity": "sha512-EOgUMBazo7JNP4TDrd64TsooCiWzzo4143Ws8E8WYGEpn2PKpq+S4XRTDhuRTYHm3VKOpUZs7ZYZq7zSDuesqA==",
"license": "Apache-2.0",
"dependencies": {
- "punycode": "^2.1.1"
+ "punycode": "^2.3.1"
},
"engines": {
"node": ">=10"
@@ -21302,9 +20100,10 @@
}
},
"node_modules/prism-react-renderer": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-2.4.0.tgz",
- "integrity": "sha512-327BsVCD/unU4CNLZTWVHyUHKnsqcvj2qbPlQ8MiBE2eq2rgctjigPA1Gp9HLF83kZ20zNN6jgizHJeEsyFYOw==",
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-2.4.1.tgz",
+ "integrity": "sha512-ey8Ls/+Di31eqzUxC46h8MksNuGx/n0AAC8uKpwFau4RPDYLuE3EXTp8N8G2vX2N7UC/+IXeNUnlWBGGcAG+Ig==",
+ "license": "MIT",
"dependencies": {
"@types/prismjs": "^1.26.0",
"clsx": "^2.0.0"
@@ -21583,9 +20382,9 @@
}
},
"node_modules/raw-loader/node_modules/ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "version": "6.14.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz",
+ "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==",
"license": "MIT",
"dependencies": {
"fast-deep-equal": "^3.1.1",
@@ -21725,9 +20524,9 @@
}
},
"node_modules/react-hook-form": {
- "version": "7.57.0",
- "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.57.0.tgz",
- "integrity": "sha512-RbEks3+cbvTP84l/VXGUZ+JMrKOS8ykQCRYdm5aYsxnDquL0vspsyNhGRO7pcH6hsZqWlPOjLye7rJqdtdAmlg==",
+ "version": "7.71.2",
+ "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.71.2.tgz",
+ "integrity": "sha512-1CHvcDYzuRUNOflt4MOq3ZM46AronNJtQ1S7tnX6YN4y72qhgiUItpacZUAQ0TyWYci3yz1X+rXaSxiuEm86PA==",
"license": "MIT",
"engines": {
"node": ">=18.0.0"
@@ -21857,36 +20656,28 @@
}
},
"node_modules/react-redux": {
- "version": "7.2.9",
- "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-7.2.9.tgz",
- "integrity": "sha512-Gx4L3uM182jEEayZfRbI/G11ZpYdNAnBs70lFVMNdHJI76XYtR+7m0MN+eAs7UHBPhWXcnFPaS+9owSCJQHNpQ==",
+ "version": "9.2.0",
+ "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-9.2.0.tgz",
+ "integrity": "sha512-ROY9fvHhwOD9ySfrF0wmvu//bKCQ6AeZZq1nJNtbDC+kk5DuSuNX/n6YWYF/SYy7bSba4D4FSz8DJeKY/S/r+g==",
"license": "MIT",
"dependencies": {
- "@babel/runtime": "^7.15.4",
- "@types/react-redux": "^7.1.20",
- "hoist-non-react-statics": "^3.3.2",
- "loose-envify": "^1.4.0",
- "prop-types": "^15.7.2",
- "react-is": "^17.0.2"
+ "@types/use-sync-external-store": "^0.0.6",
+ "use-sync-external-store": "^1.4.0"
},
"peerDependencies": {
- "react": "^16.8.3 || ^17 || ^18"
+ "@types/react": "^18.2.25 || ^19",
+ "react": "^18.0 || ^19",
+ "redux": "^5.0.0"
},
"peerDependenciesMeta": {
- "react-dom": {
+ "@types/react": {
"optional": true
},
- "react-native": {
+ "redux": {
"optional": true
}
}
},
- "node_modules/react-redux/node_modules/react-is": {
- "version": "17.0.2",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz",
- "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==",
- "license": "MIT"
- },
"node_modules/react-router": {
"version": "5.3.4",
"resolved": "https://registry.npmjs.org/react-router/-/react-router-5.3.4.tgz",
@@ -21971,21 +20762,18 @@
}
},
"node_modules/redux": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.1.tgz",
- "integrity": "sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==",
- "license": "MIT",
- "dependencies": {
- "@babel/runtime": "^7.9.2"
- }
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/redux/-/redux-5.0.1.tgz",
+ "integrity": "sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==",
+ "license": "MIT"
},
"node_modules/redux-thunk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.4.2.tgz",
- "integrity": "sha512-+P3TjtnP0k/FEjcBL5FZpoovtvrTNT/UXd4/sluaSyrURlSlhLSzEdfsTBW7WsKB6yPvgd7q/iZPICFjW4o57Q==",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-3.1.0.tgz",
+ "integrity": "sha512-NW2r5T6ksUKXCabzhL9z+h206HQw/NJkcLm1GPImRQ8IzfXwRGqjVhKJGauHirT0DAuyy6hjdnMZaRoAcy0Klw==",
"license": "MIT",
"peerDependencies": {
- "redux": "^4"
+ "redux": "^5.0.0"
}
},
"node_modules/reflect-metadata": {
@@ -22322,9 +21110,10 @@
}
},
"node_modules/remark-gfm": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.0.tgz",
- "integrity": "sha512-U92vJgBPkbw4Zfu/IiW2oTZLSL3Zpv+uI7My2eq8JxKgqraFdU8YUGicEJCEgSbeaG+QDFqIcwwfMTOEelPxuA==",
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.1.tgz",
+ "integrity": "sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==",
+ "license": "MIT",
"dependencies": {
"@types/mdast": "^4.0.0",
"mdast-util-gfm": "^3.0.0",
@@ -22528,9 +21317,9 @@
"integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ=="
},
"node_modules/reselect": {
- "version": "4.1.8",
- "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.1.8.tgz",
- "integrity": "sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ==",
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/reselect/-/reselect-5.1.1.tgz",
+ "integrity": "sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w==",
"license": "MIT"
},
"node_modules/resolve": {
@@ -22622,49 +21411,6 @@
"url": "https://github.com/sponsors/isaacs"
}
},
- "node_modules/rimraf/node_modules/brace-expansion": {
- "version": "1.1.12",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
- "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
- "license": "MIT",
- "dependencies": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "node_modules/rimraf/node_modules/glob": {
- "version": "7.2.3",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
- "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
- "deprecated": "Glob versions prior to v9 are no longer supported",
- "license": "ISC",
- "dependencies": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.1.1",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- },
- "engines": {
- "node": "*"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/rimraf/node_modules/minimatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
- "license": "ISC",
- "dependencies": {
- "brace-expansion": "^1.1.7"
- },
- "engines": {
- "node": "*"
- }
- },
"node_modules/robust-predicates": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz",
@@ -22741,18 +21487,6 @@
"integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==",
"license": "BSD-3-Clause"
},
- "node_modules/sade": {
- "version": "1.8.1",
- "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz",
- "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==",
- "license": "MIT",
- "dependencies": {
- "mri": "^1.1.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/safe-buffer": {
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
@@ -22941,9 +21675,9 @@
}
},
"node_modules/semver": {
- "version": "7.6.3",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
- "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
+ "version": "7.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz",
+ "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==",
"license": "ISC",
"bin": {
"semver": "bin/semver.js"
@@ -23273,6 +22007,7 @@
"version": "0.8.5",
"resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz",
"integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==",
+ "license": "BSD-3-Clause",
"dependencies": {
"glob": "^7.0.0",
"interpret": "^1.0.0",
@@ -23285,49 +22020,6 @@
"node": ">=4"
}
},
- "node_modules/shelljs/node_modules/brace-expansion": {
- "version": "1.1.12",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
- "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
- "license": "MIT",
- "dependencies": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "node_modules/shelljs/node_modules/glob": {
- "version": "7.2.3",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
- "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
- "deprecated": "Glob versions prior to v9 are no longer supported",
- "license": "ISC",
- "dependencies": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.1.1",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- },
- "engines": {
- "node": "*"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/shelljs/node_modules/minimatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
- "license": "ISC",
- "dependencies": {
- "brace-expansion": "^1.1.7"
- },
- "engines": {
- "node": "*"
- }
- },
"node_modules/should": {
"version": "13.2.3",
"resolved": "https://registry.npmjs.org/should/-/should-13.2.3.tgz",
@@ -24644,16 +23336,6 @@
"url": "https://opencollective.com/unified"
}
},
- "node_modules/unist-util-generated": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-2.0.1.tgz",
- "integrity": "sha512-qF72kLmPxAw0oN2fwpWIqbXAVyEqUzDHMsbtPvOudIlUzXYFIeQIuxXQCRCFh22B7cixvU0MG7m3MW8FTq/S+A==",
- "license": "MIT",
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
"node_modules/unist-util-is": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz",
@@ -24922,9 +23604,10 @@
}
},
"node_modules/url-loader/node_modules/ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "version": "6.14.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz",
+ "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==",
+ "license": "MIT",
"dependencies": {
"fast-deep-equal": "^3.1.1",
"fast-json-stable-stringify": "^2.0.0",
@@ -25000,6 +23683,15 @@
"react": ">= 16.8.0"
}
},
+ "node_modules/use-sync-external-store": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.6.0.tgz",
+ "integrity": "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==",
+ "license": "MIT",
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
+ }
+ },
"node_modules/util": {
"version": "0.10.4",
"resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz",
@@ -25049,33 +23741,6 @@
"uuid": "dist/bin/uuid"
}
},
- "node_modules/uvu": {
- "version": "0.5.6",
- "resolved": "https://registry.npmjs.org/uvu/-/uvu-0.5.6.tgz",
- "integrity": "sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==",
- "license": "MIT",
- "dependencies": {
- "dequal": "^2.0.0",
- "diff": "^5.0.0",
- "kleur": "^4.0.3",
- "sade": "^1.7.3"
- },
- "bin": {
- "uvu": "bin.js"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/uvu/node_modules/kleur": {
- "version": "4.1.5",
- "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz",
- "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==",
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/validate.io-array": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/validate.io-array/-/validate.io-array-1.0.6.tgz",
@@ -25833,15 +24498,15 @@
}
},
"node_modules/xml-formatter": {
- "version": "2.6.1",
- "resolved": "https://registry.npmjs.org/xml-formatter/-/xml-formatter-2.6.1.tgz",
- "integrity": "sha512-dOiGwoqm8y22QdTNI7A+N03tyVfBlQ0/oehAzxIZtwnFAHGeSlrfjF73YQvzSsa/Kt6+YZasKsrdu6OIpuBggw==",
+ "version": "3.6.7",
+ "resolved": "https://registry.npmjs.org/xml-formatter/-/xml-formatter-3.6.7.tgz",
+ "integrity": "sha512-IsfFYJQuoDqtUlKhm4EzeoBOb+fQwzQVeyxxAQ0sThn/nFnQmyLPTplqq4yRhaOENH/tAyujD2TBfIYzUKB6hg==",
"license": "MIT",
"dependencies": {
- "xml-parser-xo": "^3.2.0"
+ "xml-parser-xo": "^4.1.5"
},
"engines": {
- "node": ">= 10"
+ "node": ">= 16"
}
},
"node_modules/xml-js": {
@@ -25857,12 +24522,12 @@
}
},
"node_modules/xml-parser-xo": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/xml-parser-xo/-/xml-parser-xo-3.2.0.tgz",
- "integrity": "sha512-8LRU6cq+d7mVsoDaMhnkkt3CTtAs4153p49fRo+HIB3I1FD1o5CeXRjRH29sQevIfVJIcPjKSsPU/+Ujhq09Rg==",
+ "version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/xml-parser-xo/-/xml-parser-xo-4.1.5.tgz",
+ "integrity": "sha512-TxyRxk9sTOUg3glxSIY6f0nfuqRll2OEF8TspLgh5mZkLuBgheCn3zClcDSGJ58TvNmiwyCCuat4UajPud/5Og==",
"license": "MIT",
"engines": {
- "node": ">= 10"
+ "node": ">= 16"
}
},
"node_modules/xtend": {
@@ -25891,6 +24556,7 @@
"version": "1.10.2",
"resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
"integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
+ "license": "ISC",
"engines": {
"node": ">= 6"
}
diff --git a/package.json b/package.json
index 6ac4bdec..88f87564 100644
--- a/package.json
+++ b/package.json
@@ -13,8 +13,9 @@
"serve": "docusaurus serve",
"write-translations": "docusaurus write-translations",
"write-heading-ids": "docusaurus write-heading-ids",
- "gen-api-docs-all": "docusaurus gen-api-docs all --all-versions",
+ "gen-api-docs-all": "docusaurus gen-api-docs all --all-versions && npm run update-openapi-index",
"gen-api-docs-clean": "docusaurus clean-api-docs all",
+ "update-openapi-index": "tsx scripts/update-openapi-index.ts",
"check-vendored-yaml": "tsx src/openapi/check-vendored-yaml.ts",
"update-vendored-yaml": "tsx src/openapi/update-vendored-yaml.ts"
},
@@ -29,10 +30,10 @@
"@mdx-js/react": "^3.1.0",
"clsx": "^2.0.0",
"docusaurus-lunr-search": "^3.6.0",
- "docusaurus-plugin-openapi-docs": "^4.4.0",
+ "docusaurus-plugin-openapi-docs": "^4.7.1",
"docusaurus-plugin-remote-content": "^4.0.0",
"docusaurus-theme-github-codeblock": "^2.0.2",
- "docusaurus-theme-openapi-docs": "^4.4.0",
+ "docusaurus-theme-openapi-docs": "^4.7.1",
"gray-matter": "^4.0.3",
"minimatch": "^10.2.1",
"octokit": "^4.0.2",
@@ -51,6 +52,7 @@
"@docusaurus/tsconfig": "^3.6.3",
"@docusaurus/types": "^3.6.3",
"@iconify-icon/react": "^2.1.0",
+ "puppeteer-core": "^24.37.5",
"sharp": "^0.34.2",
"tsx": "^4.20.3",
"typescript": "^5.7.2"
diff --git a/scripts/update-openapi-index.ts b/scripts/update-openapi-index.ts
new file mode 100644
index 00000000..23276c64
--- /dev/null
+++ b/scripts/update-openapi-index.ts
@@ -0,0 +1,16 @@
+/**
+ * Post-processing script to update the OpenAPI index page with correct links
+ * after the OpenAPI docs have been generated.
+ */
+
+import { updateOpenApiIndex, renameInfoFilesToIndex } from '../src/openapi/preprocessing';
+
+try {
+ console.log('🔄 Running post-generation OpenAPI processing...');
+ renameInfoFilesToIndex();
+ updateOpenApiIndex();
+ console.log('✅ OpenAPI post-processing complete');
+} catch (error) {
+ console.error('❌ OpenAPI post-processing failed:', error);
+ process.exit(1);
+}
diff --git a/src/components/landing/Community.module.css b/src/components/landing/Community.module.css
new file mode 100644
index 00000000..ca0de0a7
--- /dev/null
+++ b/src/components/landing/Community.module.css
@@ -0,0 +1,137 @@
+.section {
+ position: relative;
+ padding: 6rem 0;
+ color: var(--otdf-text-primary);
+}
+
+.inner {
+ max-width: 80rem;
+ margin: 0 auto;
+ padding: 0 1rem;
+}
+
+.header {
+ max-width: 48rem;
+ margin: 0 auto 2.5rem;
+ text-align: center;
+}
+
+.heading {
+ font-size: 1.875rem;
+ font-weight: 700;
+ letter-spacing: -0.02em;
+ color: var(--otdf-text-primary);
+ margin: 0 0 1.5rem;
+}
+
+.body {
+ font-size: 1.125rem;
+ color: #9ca3af;
+ line-height: 1.7;
+ margin: 0;
+}
+
+/* Cards */
+.cards {
+ display: grid;
+ grid-template-columns: 1fr;
+ gap: 1.25rem;
+ max-width: 48rem;
+ margin: 0 auto;
+}
+
+.card {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ text-align: center;
+ padding: 1.5rem;
+ border-radius: 0.75rem;
+ border: 1px solid rgba(255, 255, 255, 0.05);
+ background: #161922;
+ text-decoration: none;
+ transition: border-color 0.2s ease, color 0.2s ease;
+ color: var(--otdf-text-primary);
+}
+
+.card:hover {
+ border-color: rgba(34, 211, 238, 0.2);
+ text-decoration: none;
+}
+
+.card:hover .cardIcon {
+ color: #22d3ee;
+}
+
+.card:hover .cardTitle {
+ color: #22d3ee;
+}
+
+.cardIcon {
+ width: 2rem;
+ height: 2rem;
+ color: #9ca3af;
+ transition: color 0.2s ease;
+}
+
+.cardTitle {
+ margin-top: 0.75rem;
+ font-weight: 600;
+ font-size: 1rem;
+ color: var(--otdf-text-primary);
+ transition: color 0.2s ease;
+}
+
+.cardDesc {
+ margin-top: 0.25rem;
+ font-size: 0.875rem;
+ color: #6b7280;
+}
+
+/* Responsive */
+@media (min-width: 640px) {
+ .cards {
+ grid-template-columns: repeat(3, 1fr);
+ }
+
+ .inner {
+ padding: 0 1.5rem;
+ }
+
+ .heading {
+ font-size: 2.25rem;
+ }
+}
+
+@media (min-width: 1024px) {
+ .inner {
+ padding: 0 2rem;
+ }
+}
+
+/* Light mode overrides */
+:global(html[data-theme='light']) .card {
+ background: #ffffff;
+ border-color: rgba(0, 0, 0, 0.07);
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);
+}
+
+:global(html[data-theme='light']) .card:hover {
+ border-color: rgba(8, 145, 178, 0.2);
+}
+
+:global(html[data-theme='light']) .card:hover .cardIcon {
+ color: #0891b2;
+}
+
+:global(html[data-theme='light']) .card:hover .cardTitle {
+ color: #0891b2;
+}
+
+:global(html[data-theme='light']) .body {
+ color: #4b5563;
+}
+
+:global(html[data-theme='light']) .cardIcon {
+ color: #6b7280;
+}
diff --git a/src/components/landing/Community.tsx b/src/components/landing/Community.tsx
new file mode 100644
index 00000000..b40894d4
--- /dev/null
+++ b/src/components/landing/Community.tsx
@@ -0,0 +1,76 @@
+import React from "react";
+import styles from "./Community.module.css";
+
+const GitHubIcon = () => (
+
+
+
+);
+
+const DiscussionsIcon = () => (
+
+
+
+);
+
+const ContributeIcon = () => (
+
+
+
+);
+
+const links = [
+ {
+ href: "https://github.com/opentdf",
+ external: true,
+ Icon: GitHubIcon,
+ title: "GitHub",
+ description: "Browse the source",
+ },
+ {
+ href: "https://github.com/opentdf/platform/discussions",
+ external: true,
+ Icon: DiscussionsIcon,
+ title: "Discussions",
+ description: "Ask questions, share ideas",
+ },
+ {
+ href: "https://github.com/opentdf/platform/blob/main/CONTRIBUTING.md",
+ external: true,
+ Icon: ContributeIcon,
+ title: "Contribute",
+ description: "Help build OpenTDF",
+ },
+];
+
+export default function Community() {
+ return (
+
+
+
+
Join the Movement
+
+ Open source, open community. Shape the future of data-centric security with developers,
+ security professionals, and organizations from around the world. Contribute code, share
+ ideas, and help build the next generation of data protection.
+
+
+
+
+
+
+ );
+}
diff --git a/src/components/landing/DeveloperFirst.module.css b/src/components/landing/DeveloperFirst.module.css
new file mode 100644
index 00000000..147b8ea1
--- /dev/null
+++ b/src/components/landing/DeveloperFirst.module.css
@@ -0,0 +1,269 @@
+.section {
+ position: relative;
+ padding: 6rem 0;
+ color: var(--otdf-text-primary);
+}
+
+.inner {
+ width: 100%;
+ max-width: 80rem;
+ margin: 0 auto;
+ padding: 0 1rem;
+}
+
+.header {
+ max-width: 48rem;
+ margin: 0 auto 3.5rem;
+ text-align: center;
+}
+
+.heading {
+ font-size: 1.875rem;
+ font-weight: 700;
+ letter-spacing: -0.02em;
+ color: var(--otdf-text-primary);
+ margin: 0 0 1.5rem;
+}
+
+.subheading {
+ font-size: 1.125rem;
+ color: #9ca3af;
+ line-height: 1.7;
+ margin: 0;
+}
+
+/* Cards grid */
+.cards {
+ display: grid;
+ grid-template-columns: 1fr;
+ gap: 1.25rem;
+}
+
+.card {
+ min-width: 0;
+ border-radius: 0.75rem;
+ background: #161922;
+ padding: 1.25rem;
+ display: flex;
+ flex-direction: column;
+}
+
+.cardHeader {
+ display: flex;
+ align-items: flex-start;
+ justify-content: space-between;
+ margin-bottom: 1rem;
+}
+
+.cardLeft {
+ display: flex;
+ align-items: center;
+ gap: 0.75rem;
+}
+
+.sdkIcon {
+ width: 2.5rem;
+ height: 2.5rem;
+ border-radius: 0.5rem;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ font-size: 0.8125rem;
+ font-weight: 700;
+ flex-shrink: 0;
+}
+
+.sdkName {
+ display: block;
+ font-weight: 600;
+ color: var(--otdf-text-primary);
+ text-decoration: none;
+ font-size: 0.9375rem;
+ transition: color 0.2s ease;
+}
+
+.sdkName:hover {
+ color: #22d3ee;
+ text-decoration: none;
+}
+
+.sdkLang {
+ font-size: 0.75rem;
+ color: #6b7280;
+ margin-top: 0.125rem;
+}
+
+.badge {
+ flex-shrink: 0;
+ font-size: 0.6875rem;
+ padding: 0.125rem 0.5rem;
+ border-radius: 9999px;
+ border: 1px solid rgba(34, 211, 238, 0.3);
+ color: #22d3ee;
+ background: rgba(34, 211, 238, 0.1);
+ font-weight: 500;
+}
+
+/* Install row */
+.installRow {
+ display: flex;
+ align-items: center;
+ gap: 0.5rem;
+ margin-top: auto;
+}
+
+.installCmd {
+ font-family: "JetBrains Mono", "Fira Code", monospace;
+ font-size: 0.75rem;
+ color: #9ca3af;
+ background: #0a0c10;
+ border-radius: 0.5rem;
+ padding: 0.5rem 0.75rem;
+ overflow-x: auto;
+ flex: 1;
+ min-width: 0;
+ white-space: nowrap;
+}
+
+.copyBtn {
+ flex-shrink: 0;
+ width: 2rem;
+ height: 2rem;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ border-radius: 0.5rem;
+ background: #0a0c10;
+ border: none;
+ color: #6b7280;
+ cursor: pointer;
+ transition: color 0.2s ease;
+}
+
+.copyBtn:hover {
+ color: #22d3ee;
+}
+
+/* CTAs */
+.ctas {
+ margin-top: 2.5rem;
+ display: flex;
+ justify-content: center;
+ gap: 1rem;
+ flex-wrap: wrap;
+}
+
+.btn {
+ display: inline-flex;
+ align-items: center;
+ padding: 0.625rem 1.25rem;
+ border-radius: 0.5rem;
+ font-weight: 600;
+ font-size: 0.9375rem;
+ text-decoration: none;
+ transition: all 0.2s ease;
+}
+
+.btnPrimary {
+ background: #22d3ee;
+ color: #0a0c10;
+}
+
+.btnPrimary:hover {
+ background: #67e8f9;
+ color: #0a0c10;
+ text-decoration: none;
+}
+
+.btnSecondary {
+ background: transparent;
+ color: var(--otdf-text-primary);
+ border: 1px solid rgba(255, 255, 255, 0.15);
+}
+
+.btnSecondary:hover {
+ border-color: #22d3ee;
+ color: #22d3ee;
+ text-decoration: none;
+}
+
+/* Responsive */
+@media (min-width: 640px) {
+ .cards {
+ grid-template-columns: repeat(2, 1fr);
+ }
+
+ .inner {
+ padding: 0 1.5rem;
+ }
+
+ .heading {
+ font-size: 2.25rem;
+ }
+}
+
+@media (min-width: 1024px) {
+ .cards {
+ grid-template-columns: repeat(4, 1fr);
+ }
+
+ .inner {
+ padding: 0 2rem;
+ }
+}
+
+/* Light mode overrides */
+:global(html[data-theme='light']) .card {
+ background: #ffffff;
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.06);
+}
+
+:global(html[data-theme='light']) .subheading {
+ color: #4b5563;
+}
+
+:global(html[data-theme='light']) .badge {
+ color: #0891b2;
+ border-color: rgba(8, 145, 178, 0.2);
+ background: rgba(8, 145, 178, 0.06);
+}
+
+:global(html[data-theme='light']) .sdkName:hover {
+ color: #0891b2;
+}
+
+:global(html[data-theme='light']) .installCmd {
+ background: #f1f5f9;
+ color: #334155;
+ border: 1px solid #e2e8f0;
+}
+
+:global(html[data-theme='light']) .copyBtn {
+ background: #f1f5f9;
+ border: 1px solid #e2e8f0;
+ color: #94a3b8;
+}
+
+:global(html[data-theme='light']) .copyBtn:hover {
+ color: #0891b2;
+ border-color: rgba(8, 145, 178, 0.2);
+}
+
+:global(html[data-theme='light']) .btnPrimary {
+ background: #0891b2;
+ color: #fff;
+}
+
+:global(html[data-theme='light']) .btnPrimary:hover {
+ background: #0e7490;
+ color: #fff;
+}
+
+:global(html[data-theme='light']) .btnSecondary {
+ border-color: rgba(0, 0, 0, 0.15);
+}
+
+:global(html[data-theme='light']) .btnSecondary:hover {
+ border-color: #0891b2;
+ color: #0891b2;
+}
diff --git a/src/components/landing/DeveloperFirst.tsx b/src/components/landing/DeveloperFirst.tsx
new file mode 100644
index 00000000..a2f5b775
--- /dev/null
+++ b/src/components/landing/DeveloperFirst.tsx
@@ -0,0 +1,141 @@
+import React, { useState } from "react";
+import styles from "./DeveloperFirst.module.css";
+
+const sdks = [
+ {
+ name: "Web SDK",
+ lang: "TypeScript / JS",
+ install: "npm install @opentdf/sdk",
+ colorClass: "sdk-js",
+ icon: "TS",
+ href: "/sdks",
+ recommended: true,
+ },
+ {
+ name: "Platform SDK",
+ lang: "Go",
+ install: "go get github.com/opentdf/platform/sdk",
+ colorClass: "sdk-go",
+ icon: "Go",
+ href: "/sdks",
+ recommended: false,
+ },
+ {
+ name: "Java SDK",
+ lang: "Java",
+ install: "implementation 'io.opentdf:sdk:latest'",
+ colorClass: "sdk-java",
+ icon: "Jv",
+ href: "/sdks",
+ recommended: false,
+ },
+ {
+ name: "CLI",
+ lang: "otdfctl",
+ install: "brew install opentdf/tap/otdfctl",
+ colorClass: "sdk-cli",
+ icon: ">_",
+ href: "/sdks",
+ recommended: false,
+ },
+];
+
+const CopyIcon = () => (
+
+
+
+);
+
+const CheckIcon = () => (
+
+
+
+);
+
+export default function DeveloperFirst() {
+ const [copied, setCopied] = useState(null);
+
+ async function handleCopy(text: string, key: string) {
+ try {
+ await navigator.clipboard.writeText(text);
+ } catch {
+ // Fallback for older browsers
+ const ta = document.createElement("textarea");
+ ta.value = text;
+ ta.style.position = "fixed";
+ ta.style.opacity = "0";
+ document.body.appendChild(ta);
+ ta.select();
+ document.execCommand("copy");
+ document.body.removeChild(ta);
+ }
+ setCopied(key);
+ setTimeout(() => setCopied(null), 2000);
+ }
+
+ return (
+
+
+
+
Built for Developers
+
+ Pick your language. Native SDKs for TypeScript, Go, and Java — plus a CLI for scripting
+ and automation. Everything you need to get building.
+
+
+
+
+ {sdks.map((sdk) => (
+
+
+
+ {sdk.recommended && (
+
Start here
+ )}
+
+
+
+
+ {sdk.install}
+
+
handleCopy(sdk.install, sdk.name)}
+ aria-label="Copy install command"
+ title="Copy"
+ >
+ {copied === sdk.name ? : }
+
+
+
+ ))}
+
+
+
+
+
+ );
+}
diff --git a/src/components/landing/FinalCTA.module.css b/src/components/landing/FinalCTA.module.css
new file mode 100644
index 00000000..6716d545
--- /dev/null
+++ b/src/components/landing/FinalCTA.module.css
@@ -0,0 +1,144 @@
+.section {
+ position: relative;
+ padding: 6rem 0;
+ overflow: hidden;
+ color: var(--otdf-text-primary);
+}
+
+.glow {
+ position: absolute;
+ top: 0;
+ left: 50%;
+ transform: translateX(-50%);
+ width: 37.5rem;
+ height: 37.5rem;
+ background: rgba(34, 211, 238, 0.05);
+ border-radius: 50%;
+ filter: blur(4rem);
+ pointer-events: none;
+}
+
+.inner {
+ position: relative;
+ max-width: 48rem;
+ margin: 0 auto;
+ padding: 0 1rem;
+ text-align: center;
+}
+
+.heading {
+ font-size: 1.875rem;
+ font-weight: 700;
+ letter-spacing: -0.02em;
+ color: var(--otdf-text-primary);
+ margin: 0 0 1rem;
+}
+
+.body {
+ font-size: 1.125rem;
+ color: #9ca3af;
+ margin: 0;
+}
+
+.ctas {
+ margin-top: 2.5rem;
+ display: flex;
+ flex-wrap: wrap;
+ justify-content: center;
+ gap: 1rem;
+}
+
+.btn {
+ display: inline-flex;
+ align-items: center;
+ padding: 0.75rem 1.5rem;
+ border-radius: 0.5rem;
+ font-weight: 600;
+ font-size: 1rem;
+ text-decoration: none;
+ transition: all 0.2s ease;
+}
+
+.btnPrimary {
+ background: #22d3ee;
+ color: #0a0c10;
+}
+
+.btnPrimary:hover {
+ background: #67e8f9;
+ color: #0a0c10;
+ text-decoration: none;
+}
+
+.btnSecondary {
+ background: transparent;
+ color: var(--otdf-text-primary);
+ border: 1px solid rgba(255, 255, 255, 0.15);
+}
+
+.btnSecondary:hover {
+ border-color: #22d3ee;
+ color: #22d3ee;
+ text-decoration: none;
+}
+
+.btnGhost {
+ background: transparent;
+ color: #6b7280;
+ border: 1px solid rgba(255, 255, 255, 0.06);
+}
+
+.btnGhost:hover {
+ color: var(--otdf-text-primary);
+ border-color: rgba(255, 255, 255, 0.2);
+ text-decoration: none;
+}
+
+/* Responsive */
+@media (min-width: 640px) {
+ .inner {
+ padding: 0 1.5rem;
+ }
+
+ .heading {
+ font-size: 2.25rem;
+ }
+}
+
+@media (min-width: 1024px) {
+ .inner {
+ padding: 0 2rem;
+ }
+}
+
+/* Light mode overrides */
+:global(html[data-theme='light']) .body {
+ color: #4b5563;
+}
+
+:global(html[data-theme='light']) .btnPrimary {
+ background: #0891b2;
+ color: #fff;
+}
+
+:global(html[data-theme='light']) .btnPrimary:hover {
+ background: #0e7490;
+ color: #fff;
+}
+
+:global(html[data-theme='light']) .btnSecondary {
+ border-color: rgba(0, 0, 0, 0.15);
+}
+
+:global(html[data-theme='light']) .btnSecondary:hover {
+ border-color: #0891b2;
+ color: #0891b2;
+}
+
+:global(html[data-theme='light']) .btnGhost {
+ border-color: rgba(0, 0, 0, 0.08);
+}
+
+:global(html[data-theme='light']) .btnGhost:hover {
+ border-color: rgba(0, 0, 0, 0.2);
+}
diff --git a/src/components/landing/FinalCTA.tsx b/src/components/landing/FinalCTA.tsx
new file mode 100644
index 00000000..f078f9c5
--- /dev/null
+++ b/src/components/landing/FinalCTA.tsx
@@ -0,0 +1,33 @@
+import React from "react";
+import styles from "./FinalCTA.module.css";
+
+export default function FinalCTA() {
+ return (
+
+ {/* Centered glow blob */}
+
+
+
+
Ready to Protect Your Data?
+
Choose your path and start building with OpenTDF today.
+
+
+
+
+ );
+}
diff --git a/src/components/landing/Hero.module.css b/src/components/landing/Hero.module.css
new file mode 100644
index 00000000..e4811821
--- /dev/null
+++ b/src/components/landing/Hero.module.css
@@ -0,0 +1,246 @@
+.section {
+ position: relative;
+ display: flex;
+ align-items: center;
+ overflow: hidden;
+ padding: 6rem 0 6rem;
+ min-height: 100vh;
+ color: var(--otdf-text-primary);
+}
+
+.inner {
+ position: relative;
+ width: 100%;
+ max-width: 80rem;
+ margin: 0 auto;
+ padding: 0 1rem;
+}
+
+.grid {
+ display: grid;
+ grid-template-columns: 1fr;
+ gap: 2.5rem;
+ align-items: center;
+}
+
+/* Badge */
+.badge {
+ display: inline-flex;
+ align-items: center;
+ gap: 0.5rem;
+ padding: 0.25rem 0.75rem;
+ margin-bottom: 1.5rem;
+ border-radius: 9999px;
+ border: 1px solid rgba(34, 211, 238, 0.2);
+ background: rgba(34, 211, 238, 0.05);
+ color: #22d3ee;
+ font-size: 0.875rem;
+}
+
+.badgeDot {
+ display: inline-block;
+ width: 0.5rem;
+ height: 0.5rem;
+ border-radius: 50%;
+ background: #22d3ee;
+ flex-shrink: 0;
+}
+
+/* Heading */
+.heading {
+ font-size: 2.5rem;
+ font-weight: 800;
+ line-height: 1.1;
+ letter-spacing: -0.02em;
+ color: var(--otdf-text-primary);
+ margin: 0 0 1.5rem;
+}
+
+/* Body */
+.bodyPrimary {
+ margin-top: 1.5rem;
+ font-size: 1.125rem;
+ color: #9ca3af;
+ line-height: 1.7;
+ max-width: 36rem;
+}
+
+.bodySecondary {
+ margin-top: 1.5rem;
+ font-size: 1rem;
+ color: #6b7280;
+ line-height: 1.7;
+ max-width: 36rem;
+}
+
+/* CTAs */
+.ctas {
+ margin-top: 2rem;
+ display: flex;
+ flex-wrap: wrap;
+ gap: 1rem;
+}
+
+.btn {
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ padding: 0.75rem 1.5rem;
+ border-radius: 0.5rem;
+ font-weight: 600;
+ font-size: 1rem;
+ text-decoration: none;
+ transition: all 0.2s ease;
+}
+
+.btnPrimary {
+ background: #22d3ee;
+ color: #0a0c10;
+}
+
+.btnPrimary:hover {
+ background: #67e8f9;
+ color: #0a0c10;
+ text-decoration: none;
+}
+
+.btnSecondary {
+ background: transparent;
+ color: var(--otdf-text-primary);
+ border: 1px solid rgba(255, 255, 255, 0.15);
+}
+
+.btnSecondary:hover {
+ border-color: #22d3ee;
+ color: #22d3ee;
+ text-decoration: none;
+}
+
+/* Code window */
+.codeWrap {
+ position: relative;
+}
+
+.codeWindow {
+ position: relative;
+ border-radius: 0.75rem;
+ border: 1px solid rgba(255, 255, 255, 0.1);
+ background: #0f1117;
+ overflow: hidden;
+}
+
+.windowChrome {
+ display: flex;
+ align-items: center;
+ gap: 0.5rem;
+ padding: 0.625rem 1rem;
+ border-bottom: 1px solid rgba(255, 255, 255, 0.05);
+}
+
+.dot {
+ width: 0.625rem;
+ height: 0.625rem;
+ border-radius: 50%;
+ flex-shrink: 0;
+}
+
+.dotRed { background: rgba(239, 68, 68, 0.6); }
+.dotYellow { background: rgba(234, 179, 8, 0.6); }
+.dotGreen { background: rgba(34, 197, 94, 0.6); }
+
+.filename {
+ margin-left: 0.75rem;
+ font-size: 0.75rem;
+ font-family: monospace;
+ color: #6b7280;
+}
+
+.code {
+ padding: 1rem 1.25rem;
+ font-family: "JetBrains Mono", "Fira Code", monospace;
+ font-size: 0.8125rem;
+ line-height: 1.7;
+ overflow-x: auto;
+ white-space: nowrap;
+}
+
+.mt {
+ margin-top: 0.75rem;
+}
+
+.indent {
+ padding-left: 1rem;
+ display: block;
+}
+
+/* Syntax colors */
+.cPurple { color: #c084fc; }
+.cYellow { color: #fde047; }
+.cCyan { color: #67e8f9; }
+.cBlue { color: #93c5fd; }
+.cGreen { color: #86efac; }
+.cGray { color: #6b7280; }
+
+/* Responsive */
+@media (min-width: 1024px) {
+ .inner {
+ padding: 0 2rem;
+ }
+
+ .grid {
+ grid-template-columns: 1fr 1fr;
+ gap: 4rem;
+ }
+
+ .heading {
+ font-size: 3.75rem;
+ }
+
+ .section {
+ padding-top: 6rem;
+ }
+}
+
+@media (min-width: 640px) {
+ .heading {
+ font-size: 3rem;
+ }
+
+ .inner {
+ padding: 0 1.5rem;
+ }
+}
+
+/* Light mode overrides — code window intentionally stays dark */
+:global(html[data-theme='light']) .badge {
+ color: #0891b2;
+ border-color: rgba(8, 145, 178, 0.2);
+ background: rgba(8, 145, 178, 0.06);
+}
+
+:global(html[data-theme='light']) .badgeDot {
+ background: #16a34a;
+}
+
+:global(html[data-theme='light']) .bodyPrimary {
+ color: #4b5563;
+}
+
+:global(html[data-theme='light']) .btnPrimary {
+ background: #0891b2;
+ color: #fff;
+}
+
+:global(html[data-theme='light']) .btnPrimary:hover {
+ background: #0e7490;
+ color: #fff;
+}
+
+:global(html[data-theme='light']) .btnSecondary {
+ border-color: rgba(0, 0, 0, 0.15);
+}
+
+:global(html[data-theme='light']) .btnSecondary:hover {
+ border-color: #0891b2;
+ color: #0891b2;
+}
diff --git a/src/components/landing/Hero.tsx b/src/components/landing/Hero.tsx
new file mode 100644
index 00000000..3cd00798
--- /dev/null
+++ b/src/components/landing/Hero.tsx
@@ -0,0 +1,114 @@
+import React from "react";
+import styles from "./Hero.module.css";
+
+export default function Hero() {
+ return (
+
+
+
+
+
+ {/* Left: Copy */}
+
+
+
+ Open Source · BSD-3-Clause-Clear
+
+
+
+ Protect the Data,
+
+ Build the Future
+
+
+
+ Open-source data-centric security for developers. OpenTDF delivers the
+ Trusted Data Format (TDF) specification, foundational services for key
+ management and access control, and SDKs — the building blocks to
+ cryptographically bind protection directly to your data, wherever it goes.
+
+
+
+ Explore the standard. Prototype custom applications. Build architectures
+ where security travels with the data, not the network.
+
+
+
+
+
+ {/* Right: Code preview */}
+
+
+ {/* Window chrome */}
+
+
+
+
+ encrypt.ts
+
+
+ {/* Code */}
+
+
+ import
+ {" { "}
+ OpenTDF
+ {" } "}
+ from
+ {" "}
+ '@opentdf/sdk' ;
+
+
+ {"// Connect to the platform"}
+
+
+ const
+ {" "}
+ client
+ {" = "}
+ await
+ {" "}
+ OpenTDF
+ {"."}connect
+ {"("}
+ 'http://localhost:8080'
+ {");"}
+
+
+ {"// Encrypt with attribute-based policy"}
+
+
+ const
+ {" "}
+ ciphertext
+ {" = "}
+ await
+ {" "}
+ client
+ {"."}encrypt
+ {"(data, {"}
+
+
+
+ attributes
+ {": ["}
+ 'https://example.com/attr/class/value/secret'
+ {"],"}
+
+
+
{"});"}
+
+
+
+
+
+
+ );
+}
diff --git a/src/components/landing/ProblemSolution.module.css b/src/components/landing/ProblemSolution.module.css
new file mode 100644
index 00000000..1b5ed479
--- /dev/null
+++ b/src/components/landing/ProblemSolution.module.css
@@ -0,0 +1,177 @@
+.section {
+ position: relative;
+ padding: 6rem 0;
+ color: var(--otdf-text-primary);
+}
+
+.inner {
+ max-width: 80rem;
+ margin: 0 auto;
+ padding: 0 1rem;
+}
+
+.header {
+ max-width: 48rem;
+ margin: 0 auto 3rem;
+ text-align: center;
+}
+
+.heading {
+ font-size: 1.875rem;
+ font-weight: 700;
+ letter-spacing: -0.02em;
+ color: var(--otdf-text-primary);
+ margin: 0 0 1.5rem;
+}
+
+.bodyPrimary {
+ font-size: 1.125rem;
+ color: #9ca3af;
+ line-height: 1.7;
+ margin: 0 0 1rem;
+}
+
+.bodySecondary {
+ font-size: 1rem;
+ color: #6b7280;
+ margin: 0;
+}
+
+/* Cards */
+.cards {
+ display: grid;
+ grid-template-columns: 1fr;
+ gap: 1.5rem;
+ max-width: 56rem;
+ margin: 0 auto;
+}
+
+.card {
+ border-radius: 0.75rem;
+ border: 1px solid rgba(255, 255, 255, 0.05);
+ background: #161922;
+ padding: 1.5rem;
+ transition: border-color 0.2s ease;
+}
+
+.card:hover {
+ border-color: rgba(34, 211, 238, 0.2);
+}
+
+.iconWrap {
+ width: 2.5rem;
+ height: 2.5rem;
+ border-radius: 0.5rem;
+ background: rgba(34, 211, 238, 0.1);
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ margin-bottom: 1rem;
+}
+
+.cardIcon {
+ width: 1.25rem;
+ height: 1.25rem;
+ color: #22d3ee;
+}
+
+.cardTitle {
+ font-size: 1.125rem;
+ font-weight: 600;
+ color: var(--otdf-text-primary);
+ margin: 0 0 0.5rem;
+}
+
+.cardBody {
+ font-size: 0.875rem;
+ color: #9ca3af;
+ line-height: 1.6;
+ margin: 0;
+}
+
+/* Tagline + CTA */
+.tagline {
+ margin-top: 2.5rem;
+ text-align: center;
+ font-size: 0.875rem;
+ color: #6b7280;
+}
+
+.cta {
+ margin-top: 2rem;
+ display: flex;
+ justify-content: center;
+}
+
+.btn {
+ display: inline-flex;
+ align-items: center;
+ padding: 0.625rem 1.25rem;
+ border-radius: 0.5rem;
+ font-weight: 600;
+ font-size: 0.9375rem;
+ text-decoration: none;
+ color: var(--otdf-text-primary);
+ border: 1px solid rgba(255, 255, 255, 0.15);
+ transition: all 0.2s ease;
+}
+
+.btn:hover {
+ border-color: #22d3ee;
+ color: #22d3ee;
+ text-decoration: none;
+}
+
+/* Responsive */
+@media (min-width: 768px) {
+ .cards {
+ grid-template-columns: repeat(3, 1fr);
+ }
+
+ .heading {
+ font-size: 2.25rem;
+ }
+
+ .inner {
+ padding: 0 1.5rem;
+ }
+}
+
+@media (min-width: 1024px) {
+ .inner {
+ padding: 0 2rem;
+ }
+}
+
+/* Light mode overrides */
+:global(html[data-theme='light']) .card {
+ background: #ffffff;
+ border-color: rgba(0, 0, 0, 0.07);
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);
+}
+
+:global(html[data-theme='light']) .card:hover {
+ border-color: rgba(8, 145, 178, 0.2);
+}
+
+:global(html[data-theme='light']) .iconWrap {
+ background: rgba(8, 145, 178, 0.06);
+}
+
+:global(html[data-theme='light']) .cardIcon {
+ color: #0891b2;
+}
+
+:global(html[data-theme='light']) .bodyPrimary,
+:global(html[data-theme='light']) .cardBody {
+ color: #4b5563;
+}
+
+:global(html[data-theme='light']) .btn {
+ border-color: rgba(0, 0, 0, 0.15);
+}
+
+:global(html[data-theme='light']) .btn:hover {
+ border-color: #0891b2;
+ color: #0891b2;
+}
diff --git a/src/components/landing/ProblemSolution.tsx b/src/components/landing/ProblemSolution.tsx
new file mode 100644
index 00000000..14883fee
--- /dev/null
+++ b/src/components/landing/ProblemSolution.tsx
@@ -0,0 +1,75 @@
+import React from "react";
+import styles from "./ProblemSolution.module.css";
+
+const cards = [
+ {
+ title: "Revoke After Sharing",
+ body: "Revoke access after sharing — even after data has left your environment.",
+ icon: (
+
+
+
+ ),
+ },
+ {
+ title: "Zero-Trust Enforcement",
+ body: "Enforce controls in zero-trust environments — no VPN, no network dependency.",
+ icon: (
+
+
+
+ ),
+ },
+ {
+ title: "Complete Audit Trail",
+ body: "Maintain a complete audit trail — know who accessed what, when, and where.",
+ icon: (
+
+
+
+ ),
+ },
+];
+
+export default function ProblemSolution() {
+ return (
+
+
+
+
+ Traditional Security Fails When Data Leaves the Perimeter
+
+
+ Firewalls, VPNs, and network policies protect the boundary — not the data.
+ The moment a file is shared, downloaded, or moved to a new environment,
+ those controls vanish. Access decisions remain at the perimeter, while the
+ data moves on without them.
+
+
+ OpenTDF inverts this model. Policies travel with the data itself, so you can:
+
+
+
+
+ {cards.map((card) => (
+
+
{card.icon}
+
{card.title}
+
{card.body}
+
+ ))}
+
+
+
+ This is data-centric security: protection that's embedded, not bolted on.
+
+
+
+
+
+ );
+}
diff --git a/src/components/landing/Standards.module.css b/src/components/landing/Standards.module.css
new file mode 100644
index 00000000..a6d91893
--- /dev/null
+++ b/src/components/landing/Standards.module.css
@@ -0,0 +1,208 @@
+.section {
+ position: relative;
+ padding: 6rem 0;
+ color: var(--otdf-text-primary);
+}
+
+.inner {
+ max-width: 80rem;
+ margin: 0 auto;
+ padding: 0 1rem;
+}
+
+.grid {
+ display: grid;
+ grid-template-columns: 1fr;
+ gap: 3rem;
+ align-items: center;
+}
+
+/* Diagram */
+.diagramOrder {
+ order: 2;
+}
+
+.contentOrder {
+ order: 1;
+}
+
+.diagramWrap {
+ /* intentional wrapper */
+}
+
+.diagram {
+ border-radius: 0.75rem;
+ border: 1px solid rgba(255, 255, 255, 0.1);
+ background: #0f1117;
+ padding: 1.5rem;
+ font-family: "JetBrains Mono", "Fira Code", monospace;
+ font-size: 0.875rem;
+}
+
+.diagramComment {
+ color: #4b5563;
+ margin-bottom: 1rem;
+}
+
+.diagramBody {
+ display: flex;
+ flex-direction: column;
+ gap: 0.5rem;
+}
+
+.diagramRow {
+ display: flex;
+ align-items: center;
+ gap: 0.75rem;
+}
+
+.pl4 { padding-left: 1rem; }
+.pl8 { padding-left: 2rem; }
+
+.cFaint { color: #4b5563; font-size: 0.75rem; margin-left: 0.5rem; }
+.cFaint2 { color: #4b5563; }
+.cCyan { color: #22d3ee; }
+.cLight { color: #d1d5db; }
+.cGreen { color: #86efac; }
+.cAmber { color: #fcd34d; }
+.cPurple { color: #c084fc; }
+
+/* Content */
+.heading {
+ font-size: 1.875rem;
+ font-weight: 700;
+ letter-spacing: -0.02em;
+ color: var(--otdf-text-primary);
+ margin: 0 0 1.5rem;
+}
+
+.body {
+ font-size: 1.125rem;
+ color: #9ca3af;
+ line-height: 1.7;
+ margin: 0 0 1.5rem;
+}
+
+.featureList {
+ list-style: none;
+ padding: 0;
+ margin: 0 0 2rem;
+ display: flex;
+ flex-direction: column;
+ gap: 0.75rem;
+}
+
+.featureItem {
+ display: flex;
+ align-items: flex-start;
+ gap: 0.75rem;
+ color: #9ca3af;
+ font-size: 1rem;
+}
+
+.checkIcon {
+ width: 1.25rem;
+ height: 1.25rem;
+ color: #22d3ee;
+ flex-shrink: 0;
+ margin-top: 0.125rem;
+}
+
+/* CTAs */
+.ctas {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 1rem;
+}
+
+.btn {
+ display: inline-flex;
+ align-items: center;
+ padding: 0.625rem 1.25rem;
+ border-radius: 0.5rem;
+ font-weight: 600;
+ font-size: 0.9375rem;
+ text-decoration: none;
+ transition: all 0.2s ease;
+}
+
+.btnSecondary {
+ background: transparent;
+ color: var(--otdf-text-primary);
+ border: 1px solid rgba(255, 255, 255, 0.15);
+}
+
+.btnSecondary:hover {
+ border-color: #22d3ee;
+ color: #22d3ee;
+ text-decoration: none;
+}
+
+.btnGhost {
+ background: transparent;
+ color: #6b7280;
+ border: 1px solid rgba(255, 255, 255, 0.06);
+}
+
+.btnGhost:hover {
+ color: var(--otdf-text-primary);
+ border-color: rgba(255, 255, 255, 0.2);
+ text-decoration: none;
+}
+
+/* Responsive */
+@media (min-width: 640px) {
+ .inner {
+ padding: 0 1.5rem;
+ }
+}
+
+@media (min-width: 1024px) {
+ .grid {
+ grid-template-columns: 1fr 1fr;
+ gap: 3rem;
+ }
+
+ .diagramOrder {
+ order: 1;
+ }
+
+ .contentOrder {
+ order: 2;
+ }
+
+ .inner {
+ padding: 0 2rem;
+ }
+
+ .heading {
+ font-size: 2.25rem;
+ }
+}
+
+/* Light mode overrides — diagram intentionally stays dark */
+:global(html[data-theme='light']) .checkIcon {
+ color: #0891b2;
+}
+
+:global(html[data-theme='light']) .body,
+:global(html[data-theme='light']) .featureItem {
+ color: #4b5563;
+}
+
+:global(html[data-theme='light']) .btnSecondary {
+ border-color: rgba(0, 0, 0, 0.15);
+}
+
+:global(html[data-theme='light']) .btnSecondary:hover {
+ border-color: #0891b2;
+ color: #0891b2;
+}
+
+:global(html[data-theme='light']) .btnGhost {
+ border-color: rgba(0, 0, 0, 0.08);
+}
+
+:global(html[data-theme='light']) .btnGhost:hover {
+ border-color: rgba(0, 0, 0, 0.2);
+}
diff --git a/src/components/landing/Standards.tsx b/src/components/landing/Standards.tsx
new file mode 100644
index 00000000..f1bd305f
--- /dev/null
+++ b/src/components/landing/Standards.tsx
@@ -0,0 +1,99 @@
+import React from "react";
+import styles from "./Standards.module.css";
+
+const CheckIcon = () => (
+
+
+
+);
+
+const features = [
+ "AES-256-GCM authenticated encryption",
+ "NIST SP 800-162 ABAC model",
+ "Cryptographic policy binding",
+ "Open specification — not proprietary",
+];
+
+export default function Standards() {
+ return (
+
+
+
+ {/* Left: TDF diagram */}
+
+
+
{""}
+
+
+ ┌
+ TDF Object
+
+
+ ├─
+ manifest.json
+ policy + key access
+
+
+ ├─
+ encryptionMethod
+ AES-256-GCM
+
+
+ ├─
+ keyAccess[]
+ wrapped DEK + KAS URL
+
+
+ ├─
+ policy
+ ABAC attributes
+
+
+ └─
+ assertions[]
+ signed bindings
+
+
+ └─
+ payload
+ encrypted content
+
+
+ └
+
+
+
+
+
+ {/* Right: Content */}
+
+
Standards-Based Security
+
+ Built on the proven NIST ABAC model for interoperability and compliance. OpenTDF
+ follows established standards for attribute-based access control, ensuring your data
+ protection strategy is future-proof and audit-ready.
+
+
+
+ {features.map((f) => (
+
+
+ {f}
+
+ ))}
+
+
+
+
+
+
+
+ );
+}
diff --git a/src/components/landing/index.ts b/src/components/landing/index.ts
new file mode 100644
index 00000000..e5b59856
--- /dev/null
+++ b/src/components/landing/index.ts
@@ -0,0 +1,6 @@
+export { default as Hero } from "./Hero";
+export { default as ProblemSolution } from "./ProblemSolution";
+export { default as DeveloperFirst } from "./DeveloperFirst";
+export { default as Standards } from "./Standards";
+export { default as Community } from "./Community";
+export { default as FinalCTA } from "./FinalCTA";
diff --git a/src/css/custom.css b/src/css/custom.css
index 4054e8a9..b8c1e05a 100644
--- a/src/css/custom.css
+++ b/src/css/custom.css
@@ -52,19 +52,18 @@
}
:root {
- --ifm-color-primary: #004987;
- --ifm-color-primary-dark: #003765;
- --ifm-color-primary-darker: #002544;
- --ifm-color-primary-darkest: #001e4a;
- --ifm-color-primary-light: #6aaae4;
- --ifm-color-primary-lighter: #92c0e9;
- --ifm-color-primary-lightest: #c2d5ed;
+ --ifm-color-primary: #0891b2;
+ --ifm-color-primary-dark: #0e7490;
+ --ifm-color-primary-darker: #155e75;
+ --ifm-color-primary-darkest: #164e63;
+ --ifm-color-primary-light: #22d3ee;
+ --ifm-color-primary-lighter: #67e8f9;
+ --ifm-color-primary-lightest: #a5f3fc;
--ifm-code-font-size: 95%;
- --ifm-blockquote-border-color: #B2D6FF;
- --ifm-blockquote-background-color: var(--ifm-color-white);
- ;
- --ifm-color-info-contrast-background: var(--ifm-color-white);
- --ifm-color-info-dark: var(--ifm-blockquote-border-color);
+ --ifm-blockquote-border-color: #0891b2;
+ --ifm-blockquote-background-color: #ecfeff;
+ --ifm-color-info-contrast-background: #ecfeff;
+ --ifm-color-info-dark: #0891b2;
--ifm-color-white: #FFF;
--ifm-heading-font-family: system-ui, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
--ifm-font-family-base: system-ui, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
@@ -76,20 +75,46 @@
***************/
.docusaurus-highlight-code-line {
- background-color: rgba(0, 0, 0, 0.1);
+ background-color: rgba(8, 145, 178, 0.09);
display: block;
margin: 0 calc(-1 * var(--ifm-pre-padding));
padding: 0 var(--ifm-pre-padding);
+ border-left: 2px solid #0891b2;
+}
+
+/* Tip admonition — amber, light mode */
+div[class*="admonition-tip"],
+div[class*="admonitionTip"] {
+ --ifm-alert-background-color: #fffbeb;
+ --ifm-alert-border-color: #f59e0b;
+ --ifm-alert-color: #92400e;
+}
+
+/* Tip admonition — amber, dark mode */
+html[data-theme='dark'] div[class*="admonition-tip"],
+html[data-theme='dark'] div[class*="admonitionTip"] {
+ --ifm-alert-background-color: #451a03;
+ --ifm-alert-border-color: #d97706;
+ --ifm-alert-color: #fde68a;
}
html[data-theme='dark'] {
+ /* Override primary to teal in dark mode */
+ --ifm-color-primary: #22d3ee;
+ --ifm-color-primary-dark: #0891b2;
+ --ifm-color-primary-darker: #0e7490;
+ --ifm-color-primary-darkest: #155e75;
+ --ifm-color-primary-light: #67e8f9;
+ --ifm-color-primary-lighter: #a5f3fc;
+ --ifm-color-primary-lightest: #cffafe;
+
--ifm-heading-color: var(--ifm-font-color-base);
--ifm-blockquote-background-color: none;
--ifm-color-info-contrast-background: #001E4A;
--ifm-color-info-dark: #174EB6;
- --ifm-link-color: var(--ifm-color-primary-light);
- --ifm-menu-color-active: var(--ifm-color-primary-light);
- --ifm-breadcrumb-color-active: var(--ifm-color-primary-light);
+ --ifm-link-color: var(--ifm-color-primary);
+ --ifm-menu-color-active: var(--ifm-color-primary);
+ --ifm-breadcrumb-color-active: var(--ifm-color-primary);
}
html[data-theme='dark'] .hero {
@@ -102,7 +127,7 @@ html[data-theme='dark'] .docusaurus-highlight-code-line {
html[data-theme='dark'] .table-of-contents__link:hover,
html[data-theme='dark'] .table-of-contents__link--active {
- color: var(--ifm-color-primary-light);
+ color: var(--ifm-color-primary);
}
/* Dark mode overrides for custom VDS colors and homepage */
@@ -119,16 +144,6 @@ html[data-theme='dark'] {
--vds-homepage-subtitle-color: #aaa;
}
-/* Dark mode navbar for homepage */
-html[data-theme='dark'] .homepage .navbar {
- background-color: var(--vds-color-blue-lightest);
- box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.3);
-}
-
-html[data-theme='dark'] .navbar .navbar__brand {
- color: var(--vds-color-blue-dark);
-}
-
/* Dark mode cookie consent */
html[data-theme='dark'] .cookie-consent-banner a {
color: var(--ifm-color-primary-light);
@@ -139,27 +154,6 @@ html[data-theme='dark'] .cookie-consent-accept-button {
color: #000;
}
-/* Dark mode footer */
-html[data-theme='dark'] .footer {
- background-color: #0a1929;
- color: #b3d4fc;
-}
-
-html[data-theme='dark'] .footer__link-item {
- color: #6aaae4;
-}
-
-html[data-theme='dark'] .footer__link-item:hover {
- color: #92c0e9;
-}
-
-html[data-theme='dark'] .footer__title {
- color: #6bbaff;
-}
-
-html[data-theme='dark'] .footer__copyright {
- color: #6aaae4;
-}
.star-logo {
width: 200px;
@@ -175,85 +169,100 @@ a[class*="embed_documentation_footer-"] {
***************/
.footer {
- height: auto;
- background-color: var(--vds-color-blue-darkest);
- color: var(--vds-color-blue-lighter);
-}
-.footer .container {
- display: flex;
- justify-content: space-between;
- gap: 3rem;
- flex-direction: row-reverse;
- padding: 1rem 0;
- align-items: flex-start;
+ background-color: #0a0c10;
+ border-top: 1px solid rgba(255, 255, 255, 0.05);
}
-.footer__links {
- flex: 1;
- display: flex;
- justify-content: flex-end;
+.footer__title {
+ font-size: 0.75rem;
+ font-weight: 700;
+ letter-spacing: 0.1em;
+ text-transform: uppercase;
+ color: #fff;
+ margin-bottom: 1rem;
}
.footer__link-item {
- font-size: 1.1rem;
- color: var(--vds-color-blue-light);
+ font-size: 0.875rem;
+ color: #6b7280;
+ transition: color 0.2s ease;
}
-.footer__title {
- font-size: .9rem;
- color: var(--vds-color-blue-dark);
+.footer__link-item:hover {
+ color: #22d3ee;
+ text-decoration: none;
}
.footer__bottom {
- flex: 1;
- text-align: left;
+ margin-top: 3rem;
+ padding-top: 2rem;
+ border-top: 1px solid rgba(255, 255, 255, 0.05);
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ flex-direction: row;
+ flex: unset;
+ text-align: unset;
+}
+
+.footer__copyright {
+ font-size: 0.75rem;
+ color: #374151;
+ display: block;
}
-.footer__bottom img {
- height: 46px;
+.footer__sponsor-text {
+ font-size: 0.875rem;
+ color: #6b7280;
+ line-height: 1.6;
margin: 0;
}
-.footer__copyright {
- display: flex;
- justify-content: space-between;
- color: var(--vds-color-blue-darker);
+.footer__sponsor-text a {
+ color: #22d3ee;
+ text-decoration: none;
+}
+
+.footer__sponsor-text a:hover {
+ color: #67e8f9;
+}
+
+/* Footer — light mode overrides */
+html[data-theme='light'] .footer {
+ background-color: #f1f5f9;
+ border-top: 1px solid rgba(0, 0, 0, 0.06);
+}
+
+html[data-theme='light'] .footer__title {
+ color: #0f172a;
}
-@media (min-width: 1201px) {
- /* Styles for xl breakpoint */
+html[data-theme='light'] .footer__link-item {
+ color: #4b5563;
}
-@media (max-width: 1200px) {
- .footer .container {
- padding: var(--vds-homepage-container-padding-lg);
- }
+html[data-theme='light'] .footer__link-item:hover {
+ color: #0891b2;
}
-@media (max-width: 1024px) {
- .footer .container {
- padding: var(--vds-homepage-container-padding-md);
- }
+html[data-theme='light'] .footer__bottom {
+ border-top: 1px solid rgba(0, 0, 0, 0.06);
}
-@media (max-width: 768px) {
- .footer .container {
- justify-content: center;
- padding: var(--vds-homepage-container-padding-sm);
- }
+html[data-theme='light'] .footer__copyright {
+ color: #6b7280;
+}
- .footer__copyright {
- flex-direction: column;
- gap: 1rem;
- }
+html[data-theme='light'] .footer__sponsor-text {
+ color: #4b5563;
}
-@media (max-width: 480px) {
- .footer .container {
- flex-direction: column;
- gap: 1rem;
- padding: var(--vds-homepage-container-padding-xs);
- }
+html[data-theme='light'] .footer__sponsor-text a {
+ color: #0891b2;
+}
+
+html[data-theme='light'] .footer__sponsor-text a:hover {
+ color: #0e7490;
}
/**************
@@ -348,14 +357,151 @@ Breakpoints:
line-height: var(--vds-homepage-body-line-height);
}
-.homepage .navbar {
- background-color: var(--vds-color-blue-lighter);
- border: 0;
- box-shadow: 0 1px 2px 0 var(--vds-color-blue-lighter);
+/**************
+** NAVBAR — THEME-AWARE (light + dark)
+***************/
+
+/* GitHub icon as a reusable CSS variable (avoids duplicating the long data URL) */
+:root {
+ --github-icon-svg: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12 2C6.477 2 2 6.477 2 12c0 4.42 2.865 8.166 6.839 9.49.5.092.682-.217.682-.482 0-.237-.009-.866-.013-1.7-2.782.604-3.369-1.34-3.369-1.34-.454-1.156-1.11-1.463-1.11-1.463-.908-.62.069-.608.069-.608 1.003.07 1.531 1.03 1.531 1.03.892 1.529 2.341 1.087 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.11-4.555-4.943 0-1.091.39-1.984 1.029-2.683-.103-.253-.446-1.27.098-2.647 0 0 .84-.269 2.75 1.025A9.578 9.578 0 0112 6.836c.85.004 1.705.115 2.504.337 1.909-1.294 2.747-1.025 2.747-1.025.546 1.377.203 2.394.1 2.647.64.699 1.028 1.592 1.028 2.683 0 3.842-2.339 4.687-4.566 4.935.359.309.678.919.678 1.852 0 1.336-.012 2.415-.012 2.743 0 .267.18.578.688.48C19.138 20.163 22 16.418 22 12c0-5.523-4.477-10-10-10z'/%3E%3C/svg%3E");
}
+
+/* Light mode: clean white glass */
+.navbar {
+ background-color: rgba(255, 255, 255, 0.9);
+ backdrop-filter: blur(12px);
+ -webkit-backdrop-filter: blur(12px);
+ border-bottom: 1px solid rgba(0, 0, 0, 0.06);
+ box-shadow: none;
+}
+
+/* Dark mode */
+html[data-theme='dark'] .navbar {
+ background-color: rgba(10, 12, 16, 0.9);
+ border-bottom: 1px solid rgba(255, 255, 255, 0.05);
+}
+
+/* Brand: size/weight only; color inherits from Docusaurus theme */
+.navbar .navbar__brand .navbar__title {
+ font-size: 1.125rem;
+ font-weight: 700;
+}
+
+html[data-theme='dark'] .navbar .navbar__brand .navbar__title {
+ color: #fff;
+}
+
+.navbar .navbar__brand:hover .navbar__title {
+ color: #22d3ee;
+}
+
+/* Nav links: font size in both modes */
+.navbar .navbar__link {
+ font-size: 0.875rem;
+}
+
+/* Dark mode: muted gray nav links */
+html[data-theme='dark'] .navbar .navbar__link {
+ color: #9ca3af;
+}
+
+/* Hide external-link icon on navbar items */
+.navbar [class*="iconExternalLink"] {
+ display: none;
+}
+
+.navbar .navbar__link:hover,
+.navbar .navbar__link--active {
+ color: #22d3ee;
+ background: rgba(34, 211, 238, 0.07);
+ text-decoration: none;
+}
+
+/**************
+** NAVBAR LAYOUT — 3 columns: Logo (left) | Nav items (center) | GitHub (right)
+**
+** Docusaurus puts brand + nav links in the same .navbar__items container
+** (there is NO --left modifier). We pull the brand out with position:absolute
+** so only nav links remain in flow, center the container with the parent,
+** and absolute-position .navbar__items--right to the far right.
+***************/
+
+.navbar__inner {
+ position: relative;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+}
+
.navbar .navbar__brand {
- color: var(--vds-color-blue-006);
- font-size: 1.5rem;
+ position: absolute;
+ left: var(--ifm-navbar-padding-horizontal);
+ top: 50%;
+ transform: translateY(-50%);
+ display: flex;
+ align-items: center;
+}
+
+/* Left items container: shrink-to-fit so parent can center it.
+ max-width prevents centered links from overlapping absolutely-positioned brand/right items. */
+.navbar__inner > .navbar__items:not(.navbar__items--right) {
+ flex: 0 0 auto;
+ justify-content: center;
+ max-width: calc(100% - 2 * (var(--ifm-navbar-padding-horizontal) + 8rem));
+}
+
+.navbar .navbar__items--right {
+ position: absolute;
+ right: var(--ifm-navbar-padding-horizontal);
+ top: 50%;
+ transform: translateY(-50%);
+ display: flex;
+ align-items: center;
+ gap: 0.5rem;
+}
+
+/* GitHub navbar button — bordered pill style, scoped to right container only */
+.navbar__items--right .navbar__item.navbar__link[href*="github.com"] {
+ display: inline-flex;
+ align-items: center;
+ gap: 0.375rem;
+ padding: 0.375rem 0.75rem;
+ border: 1px solid #d1d5db;
+ border-radius: 0.5rem;
+ font-size: 0.875rem;
+ transition: border-color 0.2s ease, color 0.2s ease;
+}
+
+html[data-theme='dark'] .navbar__items--right .navbar__item.navbar__link[href*="github.com"] {
+ border-color: #374151;
+ color: #9ca3af;
+}
+
+.navbar__items--right .navbar__item.navbar__link[href*="github.com"]::before {
+ content: "";
+ display: inline-block;
+ width: 1.125rem;
+ height: 1.125rem;
+ background-color: currentColor;
+ -webkit-mask-image: var(--github-icon-svg);
+ mask-image: var(--github-icon-svg);
+ -webkit-mask-size: contain;
+ mask-size: contain;
+ -webkit-mask-repeat: no-repeat;
+ mask-repeat: no-repeat;
+ flex-shrink: 0;
+}
+
+.navbar__items--right .navbar__item.navbar__link[href*="github.com"]:hover {
+ border-color: #22d3ee;
+ color: #22d3ee;
+ background: transparent;
+ text-decoration: none;
+}
+
+html[data-theme='dark'] .navbar__items--right .navbar__item.navbar__link[href*="github.com"]:hover {
+ border-color: #6b7280;
+ color: #fff;
}
/**************
@@ -371,3 +517,72 @@ div[class*="language-shell"] code::before {
html[data-theme='dark'] div[class*="language-shell"] code::before {
color: var(--ifm-color-gray-400);
}
+
+/**************
+** OPENTDF LANDING — DARK DESIGN TOKENS
+***************/
+:root {
+ /* Backgrounds */
+ --otdf-bg-deepest: #0a0c10;
+ --otdf-bg-deep: #0f1117;
+ --otdf-bg-surface: #161922;
+ --otdf-bg-raised: #1e2230;
+ --otdf-bg-subtle: #272c3d;
+
+ /* Text */
+ --otdf-text-primary: #e8eaf0;
+ --otdf-text-secondary: #9ca3b8;
+ --otdf-text-tertiary: #636b82;
+
+ /* Accent: Electric Cyan */
+ --otdf-accent: #22d3ee;
+ --otdf-accent-light: #67e8f9;
+ --otdf-accent-dark: #0891b2;
+ --otdf-accent-muted: #164e63;
+ --otdf-accent-glow: rgba(34, 211, 238, 0.15);
+
+ /* Secondary: Warm Amber */
+ --otdf-secondary: #f59e0b;
+ --otdf-secondary-muted: #78350f;
+
+ /* SDK Colors */
+ --otdf-go: #22c55e;
+ --otdf-js: #3b82f6;
+ --otdf-java: #f59e0b;
+ --otdf-cli: #a78bfa;
+
+ /* Gradients */
+ --otdf-gradient-hero: linear-gradient(135deg, #0891b2 0%, #22d3ee 50%, #67e8f9 100%);
+ --otdf-gradient-mesh: radial-gradient(ellipse at 20% 50%, rgba(34, 211, 238, 0.08) 0%, transparent 50%),
+ radial-gradient(ellipse at 80% 20%, rgba(245, 158, 11, 0.05) 0%, transparent 50%);
+}
+
+/* Light mode: flip landing page design tokens */
+html[data-theme='light'] {
+ --otdf-bg-deepest: #f8fafc;
+ --otdf-bg-deep: #f1f5f9;
+ --otdf-bg-surface: #ffffff;
+ --otdf-bg-raised: #f8fafc;
+ --otdf-bg-subtle: #e2e8f0;
+
+ --otdf-text-primary: #0f172a;
+ --otdf-text-secondary: #334155;
+ --otdf-text-tertiary: #64748b;
+
+ --otdf-accent-glow: rgba(34, 211, 238, 0.08);
+ --otdf-gradient-mesh: radial-gradient(ellipse at 20% 50%, rgba(34, 211, 238, 0.05) 0%, transparent 50%),
+ radial-gradient(ellipse at 80% 20%, rgba(245, 158, 11, 0.03) 0%, transparent 50%);
+}
+
+/**************
+** FOOTER
+***************/
+.footer__license-info {
+ margin-top: 0.5rem;
+ font-size: 0.85rem;
+ opacity: 0.8;
+}
+
+.footer__license-info a {
+ text-decoration: underline;
+}
diff --git a/src/css/landing.css b/src/css/landing.css
new file mode 100644
index 00000000..a9f45646
--- /dev/null
+++ b/src/css/landing.css
@@ -0,0 +1,128 @@
+/* OpenTDF Landing Page — Shared Dark Theme Utilities */
+
+/* ---- Grid background pattern ---- */
+.bg-grid {
+ background-image: linear-gradient(rgba(34, 211, 238, 0.03) 1px, transparent 1px),
+ linear-gradient(90deg, rgba(34, 211, 238, 0.03) 1px, transparent 1px);
+ background-size: 64px 64px;
+}
+
+/* ---- Gradient mesh backgrounds ---- */
+.bg-mesh {
+ background-image: radial-gradient(ellipse at 20% 50%, rgba(34, 211, 238, 0.08) 0%, transparent 50%),
+ radial-gradient(ellipse at 80% 20%, rgba(245, 158, 11, 0.05) 0%, transparent 50%);
+}
+
+.bg-mesh-reverse {
+ background-image: radial-gradient(ellipse at 80% 60%, rgba(34, 211, 238, 0.06) 0%, transparent 50%),
+ radial-gradient(ellipse at 20% 30%, rgba(245, 158, 11, 0.04) 0%, transparent 50%);
+}
+
+/* ---- Gradient text ---- */
+.text-gradient {
+ background: linear-gradient(135deg, #22d3ee 0%, #67e8f9 50%, #a78bfa 100%);
+ -webkit-background-clip: text;
+ -webkit-text-fill-color: transparent;
+ background-clip: text;
+}
+
+/* ---- Glow effects ---- */
+.glow-cyan {
+ box-shadow: 0 0 20px rgba(34, 211, 238, 0.15), 0 0 60px rgba(34, 211, 238, 0.05);
+}
+
+/* ---- Code block animation ---- */
+@keyframes otdfTypewriter {
+ from {
+ opacity: 0;
+ transform: translateY(4px);
+ }
+ to {
+ opacity: 1;
+ transform: translateY(0);
+ }
+}
+
+.code-line {
+ animation: otdfTypewriter 0.3s ease-out forwards;
+ opacity: 0;
+}
+
+.code-line:nth-child(1) { animation-delay: 0.1s; }
+.code-line:nth-child(2) { animation-delay: 0.3s; }
+.code-line:nth-child(3) { animation-delay: 0.5s; }
+.code-line:nth-child(4) { animation-delay: 0.7s; }
+.code-line:nth-child(5) { animation-delay: 0.9s; }
+.code-line:nth-child(6) { animation-delay: 1.1s; }
+.code-line:nth-child(7) { animation-delay: 1.3s; }
+
+/* ---- Section alternating backgrounds ---- */
+.section-dark {
+ background-color: #0a0c10;
+}
+
+.section-darker {
+ background-color: #0f1117;
+}
+
+/* ---- SDK card accent colors ---- */
+.sdk-go { --sdk-color: #22c55e; }
+.sdk-js { --sdk-color: #3b82f6; }
+.sdk-java { --sdk-color: #f59e0b; }
+.sdk-cli { --sdk-color: #a78bfa; }
+
+.sdk-card {
+ border: 1px solid rgba(255, 255, 255, 0.06);
+ transition: all 0.3s ease;
+}
+
+.sdk-card:hover {
+ border-color: var(--sdk-color, #22d3ee);
+ box-shadow: 0 0 30px color-mix(in srgb, var(--sdk-color, #22d3ee) 15%, transparent);
+}
+
+/* ---- Light mode overrides ---- */
+html[data-theme='light'] .section-dark {
+ background-color: #f8fafc;
+}
+
+html[data-theme='light'] .section-darker {
+ background-color: #ffffff;
+}
+
+html[data-theme='light'] .bg-grid {
+ background-image: linear-gradient(rgba(8, 145, 178, 0.04) 1px, transparent 1px),
+ linear-gradient(90deg, rgba(8, 145, 178, 0.04) 1px, transparent 1px);
+ background-size: 64px 64px;
+}
+
+html[data-theme='light'] .bg-mesh {
+ background-image: radial-gradient(ellipse at 20% 50%, rgba(8, 145, 178, 0.05) 0%, transparent 50%),
+ radial-gradient(ellipse at 80% 20%, rgba(245, 158, 11, 0.03) 0%, transparent 50%);
+}
+
+html[data-theme='light'] .bg-mesh-reverse {
+ background-image: radial-gradient(ellipse at 80% 60%, rgba(8, 145, 178, 0.04) 0%, transparent 50%),
+ radial-gradient(ellipse at 20% 30%, rgba(245, 158, 11, 0.02) 0%, transparent 50%);
+}
+
+html[data-theme='light'] .text-gradient {
+ background: none;
+ -webkit-background-clip: unset;
+ -webkit-text-fill-color: #0891b2;
+ background-clip: unset;
+ color: #0891b2;
+}
+
+html[data-theme='light'] .glow-cyan {
+ box-shadow: 0 4px 24px rgba(0, 0, 0, 0.08);
+}
+
+html[data-theme='light'] .sdk-card {
+ border-color: rgba(0, 0, 0, 0.08);
+}
+
+html[data-theme='light'] .sdk-card:hover {
+ box-shadow: 0 0 0 1px var(--sdk-color, #0891b2),
+ 0 1px 2px rgba(0, 0, 0, 0.04), 0 1px 3px rgba(0, 0, 0, 0.06);
+}
diff --git a/src/openapi/check-vendored-yaml.ts b/src/openapi/check-vendored-yaml.ts
index f82bd05d..285f21fd 100644
--- a/src/openapi/check-vendored-yaml.ts
+++ b/src/openapi/check-vendored-yaml.ts
@@ -3,8 +3,12 @@ When making changes to this file, consider: https://virtru.atlassian.net/browse/
*/
import * as fs from 'fs';
import * as crypto from 'crypto';
+import * as yaml from 'js-yaml';
import { openApiSpecsArray } from './preprocessing';
+const PLATFORM_API_BASE = 'https://api.github.com/repos/opentdf/platform';
+const PLATFORM_RAW_BASE = 'https://raw.githubusercontent.com/opentdf/platform/refs/heads/main';
+
function fileHash(filePath: string): string {
if (!fs.existsSync(filePath)) return '';
const data = fs.readFileSync(filePath);
@@ -32,16 +36,70 @@ function downloadFile(url: string, dest: string): Promise {
});
}
+function fetchJson(url: string): Promise {
+ return new Promise((resolve, reject) => {
+ import('https').then(https => {
+ https.get(url, { headers: { 'User-Agent': 'opentdf-docs-check-vendored-yaml' } } as any, (response: any) => {
+ let data = '';
+ response.on('data', (chunk: string) => { data += chunk; });
+ response.on('end', () => {
+ try { resolve(JSON.parse(data)); }
+ catch (e) { reject(new Error(`Failed to parse JSON from ${url}: ${e}`)); }
+ });
+ }).on('error', reject);
+ }).catch(reject);
+ });
+}
+
+function fetchText(url: string): Promise {
+ return new Promise((resolve, reject) => {
+ import('https').then(https => {
+ https.get(url, { headers: { 'User-Agent': 'opentdf-docs-check-vendored-yaml' } } as any, (response: any) => {
+ let data = '';
+ response.on('data', (chunk: string) => { data += chunk; });
+ response.on('end', () => resolve(data));
+ }).on('error', reject);
+ }).catch(reject);
+ });
+}
+
+/**
+ * Recursively fetches all .yaml file paths under docs/openapi/ in the platform repo.
+ */
+async function fetchRemoteSpecPaths(dirPath = 'docs/openapi'): Promise {
+ const specPaths: string[] = [];
+ const contents = await fetchJson(`${PLATFORM_API_BASE}/contents/${dirPath}`);
+
+ for (const item of contents) {
+ if (item.type === 'file' && item.name.endsWith('.yaml')) {
+ specPaths.push(item.path);
+ } else if (item.type === 'dir') {
+ specPaths.push(...await fetchRemoteSpecPaths(item.path));
+ }
+ }
+
+ return specPaths;
+}
+
+/**
+ * Returns true if the spec at the given raw URL has actual API paths defined
+ * (i.e. it is a real API spec, not a shared schema-only file like common or entity).
+ */
+async function hasApiPaths(rawUrl: string): Promise {
+ const content = await fetchText(rawUrl);
+ const spec = yaml.load(content) as any;
+ return spec?.paths != null && Object.keys(spec.paths).length > 0;
+}
+
async function main() {
let hasDiff = false;
+
+ // --- Check 1: vendored files are up to date ---
for (const spec of openApiSpecsArray) {
- if (!spec.url) continue; // Only process specs with a URL
- // absPaths is the absolute path to the spec file
+ if (!spec.url) continue;
const absPath = spec.specPath;
const tmpPath = absPath + '.tmp';
- // Download to tmpPath
await downloadFile(spec.url, tmpPath);
- // Compare hashes
const oldHash = fileHash(absPath);
const newHash = fileHash(tmpPath);
if (oldHash !== newHash) {
@@ -52,6 +110,32 @@ async function main() {
}
fs.unlinkSync(tmpPath);
}
+
+ // --- Check 2: no unregistered spec files in the platform repo ---
+ console.log('\n🔍 Checking for unregistered spec files in opentdf/platform...');
+ const registeredUrls = new Set(
+ openApiSpecsArray.flatMap(spec => spec.url ? [spec.url] : [])
+ );
+
+ const remoteSpecPaths = await fetchRemoteSpecPaths();
+
+ for (const remotePath of remoteSpecPaths) {
+ const expectedUrl = `${PLATFORM_RAW_BASE}/${remotePath}`;
+ if (registeredUrls.has(expectedUrl)) continue;
+
+ // Not registered — check if it actually has API paths (vs shared schema file)
+ if (await hasApiPaths(expectedUrl)) {
+ hasDiff = true;
+ console.error(
+ `❌ Unregistered spec found in platform repo: ${remotePath}\n` +
+ ` Add an entry to openApiSpecsArray in src/openapi/preprocessing.ts with:\n` +
+ ` url: '${expectedUrl}'`
+ );
+ } else {
+ console.log(`ℹ️ Skipping schema-only file (no paths): ${remotePath}`);
+ }
+ }
+
process.exit(hasDiff ? 1 : 0);
}
diff --git a/src/openapi/preprocessing.ts b/src/openapi/preprocessing.ts
index 1e410980..02fd8f20 100644
--- a/src/openapi/preprocessing.ts
+++ b/src/openapi/preprocessing.ts
@@ -4,6 +4,7 @@ When making changes to this file, consider: https://virtru.atlassian.net/browse/
import * as fs from 'fs';
import * as path from 'path';
import * as yaml from 'js-yaml';
+import matter from 'gray-matter';
import type * as OpenApiPlugin from "docusaurus-plugin-openapi-docs";
// Utility to find the repo root (directory containing package.json)
@@ -28,13 +29,42 @@ const ADD_TIMESTAMP_TO_DESCRIPTION = false;
const OUTPUT_PREFIX = path.join(repoRoot, 'docs', 'OpenAPI-clients');
// The index page for OpenAPI documentation, to support bookmarking & sharing the URL
-const OPENAPI_INDEX_PAGE = `${OUTPUT_PREFIX}/index.md`;
+const OPENAPI_INDEX_PAGE = path.join(OUTPUT_PREFIX, 'index.md');
+
+// Service descriptions and categorization for OpenAPI index generation
+const SERVICE_DESCRIPTIONS: Record = {
+ 'Well-Known Configuration': 'Platform configuration and service discovery',
+ 'kas': 'Key Access Service for TDF encryption/decryption',
+ 'V1 Authorization': 'Authorization decisions (v1)',
+ 'V2 Authorization': 'Authorization decisions (v2)',
+ 'V1 Entity Resolution': 'Entity resolution from JWT tokens (v1)',
+ 'V2 Entity Resolution': 'Entity resolution from tokens (v2)',
+ 'Policy Objects': 'Core policy objects and management',
+ 'Policy Attributes': 'Attribute definitions and values',
+ 'Policy Namespaces': 'Namespace management',
+ 'Policy Actions': 'Action definitions',
+ 'Policy Subject Mapping': 'Map subjects to attributes',
+ 'Policy Resource Mapping': 'Map resources to attributes',
+ 'Policy Obligations': 'Usage obligations and triggers',
+ 'Policy Registered Resources': 'Resource registration',
+ 'Policy KAS Registry': 'KAS registration and management',
+ 'Key Management': 'Cryptographic key management',
+ 'Policy Unsafe Service': 'Administrative operations',
+};
+
+const CATEGORY_MAPPING: Record = {
+ 'Core Services': ['Well-Known Configuration', 'kas'],
+ 'Authorization & Entity Resolution': ['V1 Authorization', 'V2 Authorization', 'V1 Entity Resolution', 'V2 Entity Resolution'],
+ 'Policy Management': ['Policy Objects', 'Policy Attributes', 'Policy Namespaces', 'Policy Actions',
+ 'Policy Subject Mapping', 'Policy Resource Mapping', 'Policy Obligations',
+ 'Policy Registered Resources', 'Policy KAS Registry', 'Key Management', 'Policy Unsafe Service'],
+};
// Read BUILD_OPENAPI_SAMPLES once
const BUILD_OPENAPI_SAMPLES = process.env.BUILD_OPENAPI_SAMPLES === '1';
// Initialize empty samples configuration - will be populated conditionally
-let samplesConfiguration = {};
+let samplesConfiguration: Record = {};
interface ApiSpecDefinition {
id: string; // Unique key for the API spec, e.g., "authorization"
@@ -408,33 +438,148 @@ async function preprocessOpenApiSpecs() {
console.error(`❌ Error processing ${sourcePath}:`, error);
}
- spec.specPath = spec.specPathModified; // Update the original specPath to the modified one
+ // Rebuild the entry with the processed path, dropping specPathModified cleanly
+ const { specPathModified: _, ...cleanSpec } = spec;
+ openApiSpecs[id] = { ...cleanSpec, specPath: spec.specPathModified! };
+ }
+
+ console.log('✨ OpenAPI preprocessing complete');
+};
+
- // Delete the specPathModified property to avoid confusion
- delete spec.specPathModified;
+/**
+ * Renames all .info.mdx files to index.mdx so they become category index pages
+ * instead of appearing as separate items in the sidebar.
+ */
+function renameInfoFilesToIndex() {
+ console.log('🔄 Renaming .info.mdx files to index.mdx...');
+
+ function processDirectory(dir: string) {
+ if (!fs.existsSync(dir)) return;
+
+ const items = fs.readdirSync(dir, { withFileTypes: true });
+
+ for (const item of items) {
+ const fullPath = path.join(dir, item.name);
+
+ if (item.isDirectory()) {
+ processDirectory(fullPath);
+ } else if (item.name.endsWith('.info.mdx')) {
+ const newPath = path.join(dir, 'index.mdx');
+ if (fs.existsSync(newPath)) {
+ console.warn(`⚠️ Skipping rename of ${fullPath} because destination ${newPath} already exists.`);
+ } else {
+ fs.renameSync(fullPath, newPath);
+ console.log(` Renamed: ${fullPath} → ${newPath}`);
+ }
+ }
+ }
+ }
+
+ processDirectory(OUTPUT_PREFIX);
+ console.log('✅ Renamed all .info.mdx files to index.mdx');
+}
+
+/**
+ * Reads the document ID from a generated index.mdx file and returns the doc path,
+ * or null if the file does not exist or has no id in frontmatter.
+ */
+function getDocIdFromInfoFile(outputDir: string): string | null {
+ try {
+ const indexPath = path.join(outputDir, 'index.mdx');
+ const fileContent = fs.readFileSync(indexPath, 'utf8');
+ const parsed = matter(fileContent);
+ if (parsed.data.id) {
+ const relativePath = path.relative(OUTPUT_PREFIX, outputDir);
+ return `OpenAPI-clients/${relativePath}`;
+ }
+ } catch (error) {
+ if (error instanceof Error && 'code' in error && (error as NodeJS.ErrnoException).code === 'ENOENT') {
+ // Missing index file likely means doc generation failed for this spec — link will be skipped.
+ console.warn(`⚠️ Could not find index file for an API spec, so it will be skipped. Path: ${path.join(outputDir, 'index.mdx')}`);
+ } else {
+ console.warn(`Could not read or parse info file in ${outputDir}:`, error);
+ }
+ }
+ return null;
+}
+
+/**
+ * Updates the OpenAPI index page with links to generated docs.
+ * This should be called AFTER the OpenAPI docs have been generated.
+ */
+function updateOpenApiIndex() {
+ console.log('📝 Updating OpenAPI index page with generated doc links...');
+
+ // Build service links dynamically from openApiSpecsArray
+ // Track which specs are categorized to find uncategorized ones
+ const specsById = new Map(openApiSpecsArray.map(spec => [spec.id, spec]));
+ const categorizedSpecs = new Set();
+ let serviceLinksMarkdown = '';
+
+ Object.entries(CATEGORY_MAPPING).forEach(([category, specIds]) => {
+ serviceLinksMarkdown += `\n## ${category}\n\n`;
+ specIds.forEach(specId => {
+ categorizedSpecs.add(specId);
+ const spec = specsById.get(specId);
+ if (spec) {
+ const docId = getDocIdFromInfoFile(spec.outputDir);
+ if (docId) {
+ let description = SERVICE_DESCRIPTIONS[specId];
+ if (!description) {
+ console.warn(`⚠️ Missing description for service "${specId}". Using default.`);
+ description = 'API documentation';
+ }
+ serviceLinksMarkdown += `- **[${spec.id}](/${docId})** - ${description}\n`;
+ }
+ }
+ });
+ });
+
+ // Add uncategorized APIs to a catch-all category
+ const uncategorizedSpecs = openApiSpecsArray.filter(spec => !categorizedSpecs.has(spec.id));
+ if (uncategorizedSpecs.length > 0) {
+ console.warn(`⚠️ Found ${uncategorizedSpecs.length} uncategorized API(s): ${uncategorizedSpecs.map(s => s.id).join(', ')}`);
+ serviceLinksMarkdown += `\n## Other APIs\n\n`;
+ uncategorizedSpecs.forEach(spec => {
+ const docId = getDocIdFromInfoFile(spec.outputDir);
+ if (docId) {
+ let description = SERVICE_DESCRIPTIONS[spec.id];
+ if (!description) {
+ console.warn(`⚠️ Missing description for service "${spec.id}". Using default.`);
+ description = 'API documentation';
+ }
+ serviceLinksMarkdown += `- **[${spec.id}](/${docId})** - ${description}\n`;
+ }
+ });
}
- // Create the index page for OpenAPI documentation
const indexContent = `---
title: OpenAPI Clients
sidebar_position: 7
---
# OpenAPI Clients
-OpenAPI client examples are available for platform endpoints.
+Interactive API documentation for OpenTDF Platform services. Each endpoint includes request/response examples, parameter descriptions, and the ability to try requests directly in your browser.
-Expand each section in the navigation panel to access the OpenAPI documentation for each service.
-`
+${serviceLinksMarkdown}
- // Ensure the file 'OPENAPI_INDEX_PAGE' exists
- fs.mkdirSync(path.dirname(OPENAPI_INDEX_PAGE), { recursive: true });
+## Getting Started
- fs.writeFileSync(OPENAPI_INDEX_PAGE, indexContent, 'utf8');
- console.log(`✅ Created OpenAPI index page at ${OPENAPI_INDEX_PAGE}`);
+1. Select a service from the list above or navigation sidebar
+2. Browse available endpoints and operations
+3. Review request parameters and response schemas
+4. Test endpoints using the "Try it" feature
- console.log('✨ OpenAPI preprocessing complete');
-};
+## Authentication
+Most endpoints require authentication. Configure your access token in the API documentation interface before testing endpoints.
+`;
+
+ fs.mkdirSync(path.dirname(OPENAPI_INDEX_PAGE), { recursive: true });
+ fs.writeFileSync(OPENAPI_INDEX_PAGE, indexContent, 'utf8');
+ console.log(`✅ Updated OpenAPI index page at ${OPENAPI_INDEX_PAGE}`);
+}
// Export the function and data without automatically executing it
-export { openApiSpecs, openApiSpecsArray, preprocessOpenApiSpecs };
\ No newline at end of file
+export { openApiSpecs, openApiSpecsArray, preprocessOpenApiSpecs, updateOpenApiIndex, renameInfoFilesToIndex };
\ No newline at end of file
diff --git a/src/pages/index.tsx b/src/pages/index.tsx
index 5304464d..ddf6dfff 100644
--- a/src/pages/index.tsx
+++ b/src/pages/index.tsx
@@ -1,103 +1,37 @@
import React from "react";
import Layout from "@theme/Layout";
import Head from "@docusaurus/Head";
-import { Columns, Hero, Features, Feedback } from "../components/Homepage";
+import { Hero, ProblemSolution, DeveloperFirst, Standards, Community, FinalCTA } from "../components/landing";
export default function Home() {
return (
-
-
+ {/* OpenGraph */}
+
+
+
+
+
+
+
+
+ {/* Twitter / X */}
+
+
+
+
-
-
-
- OpenTDF is an open source system for implementing data centric security.
- It provides the basic services required to enable the definition, application,
- and enforcement of attribute based policies using the Trust Data Format (TDF).
- TDF is an open standard that enables you to cryptographically bind
- attribute based access control (ABAC) policy to a data object so that
- the policy travels with the data wherever it goes.
-
-
- OpenTDF builds upon a decade of experience at Virtru
- protecting data objects at scale using the Trusted Data Format
- for organizations of all sizes and across all industries.
-
-
-
-
-
- Today's cybersecurity landscape is increasingly adopting and requiring Zero Trust models and frameworks.
- Zero Trust operates on the principle of "never trust, always verify,"
- ensuring that every access request is authenticated, authorized, and encrypted,
- regardless of its origin. OpenTDF implements this model by providing an open-source framework, specification, and set of services
- that prioritizes the protection and integrity of data at every stage.
-
-
- By integrating OpenTDF’s data security features with a Zero Trust architecture,
- organizations can enforce strict access controls, ensure data is continuously monitored,
- and maintain comprehensive visibility into data interactions. This synergy not only
- minimizes the risk of data breaches but also fosters a secure environment where data
- can be shared and utilized with confidence. Together, Zero Trust and OpenTDF empower businesses
- to uphold the highest standards of data security in an interconnected world.
-
-
-
-
- In 2023, the OpenTDF team undertook a significant re-architecture
- of the OpenTDF platform to enhance its extensibility and interoperability,
- responding to the evolving needs of our diverse user base and the dynamic cybersecurity landscape.
- See our {" "}Github Organization Page to navigate the new repositories.
-
-
- This comprehensive overhaul involved simplifying core service components,
- adopting standardized policy schemas, and improving platform APIs and SDKs both in
- developer experience and in capability. By focusing on extensibility, we have enabled
- developers to customize and extend OpenTDF’s functionalities to suit specific use cases,
- fostering innovation and adaptability. As we continue to advance, our focus remains on empowering the community with a secure, adaptable,
- and interoperable platform that meets the highest standards of data protection and fosters collaborative innovation.
-
-
- Through the sponsorship of Virtru and its partners, the OpenTDF project has been
- meeting the needs of customers across industries and use cases. Check out{" "}
-
- Virtru Data Security Platform
- {" "}
- for more.
-
-
-
-
- {/* */}
-
-
-
-
-
- Virtru, the sponsor of the OpenTDF developer community, would love to hear from you!
-
-
- We're developers, too, and as we mature the project, we're curious what you're building, and what kind of problems you may be encountering or are trying to solve.
-
-
- You can provide anonymous feedback (name, email, and company are not required fields on this form), or share your contact information for access to curated resources, updates, and if you request a response.
-
-
+
+
+
+
+
+
+
);
diff --git a/static/img/OpenTDF-Logo-White.png b/static/img/OpenTDF-Logo-White.png
new file mode 100644
index 00000000..97f87fe9
Binary files /dev/null and b/static/img/OpenTDF-Logo-White.png differ
diff --git a/static/img/opentdf-logo-horizontal.png b/static/img/opentdf-logo-horizontal.png
deleted file mode 100644
index 2cd53b2a..00000000
Binary files a/static/img/opentdf-logo-horizontal.png and /dev/null differ
diff --git a/static/img/opentdf-social.png b/static/img/opentdf-social.png
index 91d45cf1..f1b5fb52 100644
Binary files a/static/img/opentdf-social.png and b/static/img/opentdf-social.png differ