diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..5f34eb8 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,6 @@ +{ + "name": "www.aboutcode.org", + "lockfileVersion": 3, + "requires": true, + "packages": {} +} diff --git a/website/blog/atom-chen-aboutcode/2025-02-04-atom-chen-aboutcode.md b/website/blog/atom-chen-aboutcode/2025-02-04-atom-chen-aboutcode.md index 9a9b5df..9d3d9a4 100644 --- a/website/blog/atom-chen-aboutcode/2025-02-04-atom-chen-aboutcode.md +++ b/website/blog/atom-chen-aboutcode/2025-02-04-atom-chen-aboutcode.md @@ -11,7 +11,9 @@ hide_table_of_contents: false [atom](https://github.com/AppThreat/atom) and [chen](https://github.com/AppThreat/chen), two open source tools for high-quality code analysis built by the + [AppThreat](https://www.appthreat.com/) team, are now part of the + non-profit [AboutCode](https://aboutcode.org/) organization committed to making open source easier and safer to use by building critical open source tools for Software Composition diff --git a/website/docusaurus.config.js b/website/docusaurus.config.js index 285dc71..d408db7 100644 --- a/website/docusaurus.config.js +++ b/website/docusaurus.config.js @@ -156,8 +156,9 @@ const config = { { label: 'Privacy Policy', to: '/privacy' }, { label: 'Terms of Service', to: '/terms' }, + { label: 'Credits', to: '/credits' }, ], - copyright: `Copyright AboutCode Europe ASBL.   All rights reserved.   Built with Docusaurus.`, + copyright: `Copyright AboutCode Europe ASBL.   Content licensed under CC-BY-SA-4.0.   Built with Docusaurus.`, }, prism: { theme: prismThemes.github, diff --git a/website/package-lock.json b/website/package-lock.json index e9f3bc4..053bb12 100644 --- a/website/package-lock.json +++ b/website/package-lock.json @@ -230,6 +230,7 @@ "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.46.0.tgz", "integrity": "sha512-22SHEEVNjZfFWkFks3P6HilkR3rS7a6GjnCIqR22Zz4HNxdfT0FG+RE7efTcFVfLUkTTMQQybvaUcwMrHXYa7Q==", "license": "MIT", + "peer": true, "dependencies": { "@algolia/client-common": "5.46.0", "@algolia/requester-browser-xhr": "5.46.0", @@ -355,6 +356,7 @@ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.5.tgz", "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", "license": "MIT", + "peer": true, "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.5", @@ -2144,6 +2146,7 @@ } ], "license": "MIT", + "peer": true, "engines": { "node": ">=18" }, @@ -2166,6 +2169,7 @@ } ], "license": "MIT", + "peer": true, "engines": { "node": ">=18" } @@ -2275,6 +2279,7 @@ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", "license": "MIT", + "peer": true, "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -2696,6 +2701,7 @@ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", "license": "MIT", + "peer": true, "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -3630,6 +3636,7 @@ "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-3.9.2.tgz", "integrity": "sha512-C5wZsGuKTY8jEYsqdxhhFOe1ZDjH0uIYJ9T/jebHwkyxqnr4wW0jTkB72OMqNjsoQRcb0JN3PcSeTwFlVgzCZg==", "license": "MIT", + "peer": true, "dependencies": { "@docusaurus/core": "3.9.2", "@docusaurus/logger": "3.9.2", @@ -4326,6 +4333,7 @@ "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-3.1.1.tgz", "integrity": "sha512-f++rKLQgUVYDAtECQ6fn/is15GkEH9+nZPM3MS0RcxVqoTfawHvDlSCH7JbMhAM6uJ32v3eXLvLmLvjGu7PTQw==", "license": "MIT", + "peer": true, "dependencies": { "@types/mdx": "^2.0.0" }, @@ -4644,6 +4652,7 @@ "resolved": "https://registry.npmjs.org/@svgr/core/-/core-8.1.0.tgz", "integrity": "sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA==", "license": "MIT", + "peer": true, "dependencies": { "@babel/core": "^7.21.3", "@svgr/babel-preset": "8.1.0", @@ -5015,6 +5024,7 @@ "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.7.tgz", "integrity": "sha512-MWtvHrGZLFttgeEj28VXHxpmwYbor/ATPYbBfSFZEIRK0ecCFLl2Qo55z52Hss+UV9CRN7trSeq1zbgx7YDWWg==", "license": "MIT", + "peer": true, "dependencies": { "csstype": "^3.2.2" } @@ -5365,6 +5375,7 @@ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "license": "MIT", + "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -5450,6 +5461,7 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "license": "MIT", + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -5495,6 +5507,7 @@ "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.46.0.tgz", "integrity": "sha512-7ML6fa2K93FIfifG3GMWhDEwT5qQzPTmoHKCTvhzGEwdbQ4n0yYUWZlLYT75WllTGJCJtNUI0C1ybN4BCegqvg==", "license": "MIT", + "peer": true, "dependencies": { "@algolia/abtesting": "1.12.0", "@algolia/client-abtesting": "5.46.0", @@ -5958,6 +5971,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", @@ -6914,6 +6928,7 @@ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", "license": "MIT", + "peer": true, "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -8287,6 +8302,7 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "license": "MIT", + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -12742,6 +12758,7 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "license": "MIT", + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -13257,6 +13274,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", @@ -14160,6 +14178,7 @@ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", "license": "MIT", + "peer": true, "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -14956,6 +14975,7 @@ "resolved": "https://registry.npmjs.org/react/-/react-19.2.1.tgz", "integrity": "sha512-DGrYcCWK7tvYMnWh79yrPHt+vdx9tY+1gPZa7nJQtO/p8bLTDaHp4dzwEhQB7pZ4Xe3ok4XKuEPrVuc+wlpkmw==", "license": "MIT", + "peer": true, "engines": { "node": ">=0.10.0" } @@ -14965,6 +14985,7 @@ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.1.tgz", "integrity": "sha512-ibrK8llX2a4eOskq1mXKu/TGZj9qzomO+sNfO98M6d9zIPOEhlBkMkBUBLd1vgS0gQsLDBzA+8jJBVXDnfHmJg==", "license": "MIT", + "peer": true, "dependencies": { "scheduler": "^0.27.0" }, @@ -15020,6 +15041,7 @@ "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-6.0.0.tgz", "integrity": "sha512-YMMxTUQV/QFSnbgrP3tjDzLHRg7vsbMn8e9HAa8o/1iXoiomo48b7sk/kkmWEuWNDPJVlKSJRB6Y2fHqdJk+SQ==", "license": "MIT", + "peer": true, "dependencies": { "@types/react": "*" }, @@ -15048,6 +15070,7 @@ "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.3.4.tgz", "integrity": "sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA==", "license": "MIT", + "peer": true, "dependencies": { "@babel/runtime": "^7.12.13", "history": "^4.9.0", @@ -16918,7 +16941,8 @@ "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" + "license": "0BSD", + "peer": true }, "node_modules/type-fest": { "version": "2.19.0", @@ -17308,6 +17332,7 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "license": "MIT", + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -17515,6 +17540,7 @@ "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.103.0.tgz", "integrity": "sha512-HU1JOuV1OavsZ+mfigY0j8d1TgQgbZ6M+J75zDkpEAwYeXjWSqrGJtgnPblJjd/mAyTNQ7ygw0MiKOn6etz8yw==", "license": "MIT", + "peer": true, "dependencies": { "@types/eslint-scope": "^3.7.7", "@types/estree": "^1.0.8", @@ -18105,6 +18131,7 @@ "resolved": "https://registry.npmjs.org/zod/-/zod-4.1.13.tgz", "integrity": "sha512-AvvthqfqrAhNH9dnfmrfKzX5upOdjUVJYFqNSlkmGf64gRaTzlPwz99IHYnVs28qYAybvAlBV+H7pn0saFY4Ig==", "license": "MIT", + "peer": true, "funding": { "url": "https://github.com/sponsors/colinhacks" } diff --git a/website/package.json b/website/package.json deleted file mode 100644 index 34fc5e7..0000000 --- a/website/package.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "name": "website", - "version": "0.0.0", - "private": true, - "scripts": { - "docusaurus": "docusaurus", - "start": "docusaurus start", - "build": "docusaurus build", - "swizzle": "docusaurus swizzle", - "deploy": "docusaurus deploy", - "clear": "docusaurus clear", - "serve": "docusaurus serve", - "write-translations": "docusaurus write-translations", - "write-heading-ids": "docusaurus write-heading-ids" - }, - "dependencies": { - "@docusaurus/core": "3.9.2", - "@docusaurus/preset-classic": "3.9.2", - "@mdx-js/react": "^3.0.0", - "clsx": "^2.0.0", - "prism-react-renderer": "^2.3.0", - "react": "^19.0.0", - "react-dom": "^19.0.0" - }, - "devDependencies": { - "@docusaurus/module-type-aliases": "3.9.2", - "@docusaurus/types": "3.9.2" - }, - "browserslist": { - "production": [ - ">0.5%", - "not dead", - "not op_mini all" - ], - "development": [ - "last 3 chrome version", - "last 3 firefox version", - "last 5 safari version" - ] - }, - "engines": { - "node": ">=20.0" - } -} diff --git a/website/src/components/ProjectGridTemplate/index.js b/website/src/components/ProjectGridTemplate/index.js index 13f89b5..db1d8dc 100644 --- a/website/src/components/ProjectGridTemplate/index.js +++ b/website/src/components/ProjectGridTemplate/index.js @@ -82,7 +82,7 @@ export default function ProjectGrids() { // check if content is overflowing its container setShowTooltip( el.scrollHeight > el.clientHeight || - el.scrollWidth > el.clientWidth + el.scrollWidth > el.clientWidth ); } }, [text]); @@ -111,6 +111,28 @@ export default function ProjectGrids() { const leadMaintainers = normalizeToArray(selectedProject?.lead_maintainer); + function getFirstSentence(descriptionArr) { + if (!descriptionArr || descriptionArr.length === 0) return ''; + const firstPara = descriptionArr[0]; + // Split by period, exclamation, or question mark followed by space or end of string + const sentences = firstPara.split(/([.!?])(?:\s|$)/); + if (sentences.length >= 2) { + return sentences[0] + sentences[1]; + } + return firstPara; + } + + function isValidLink(url) { + return url && url !== 'n/a' && url !== '#' && url.trim() !== ''; + } + + function isValidValue(value) { + if (!value) return false; + if (Array.isArray(value)) return value.length > 0; + const lower = String(value).toLowerCase(); + return lower !== 'n/a' && lower !== '#' && lower.trim() !== ''; + } + return (
{/* Iterate through each data source */} @@ -134,52 +156,76 @@ export default function ProjectGrids() { className={styles.projectCard} onClick={() => openModal(project)} > -
-
-

- {project.repository_url ? ( - - e.stopPropagation() - } - > - {project.name} - - ) : ( - project.name - )} -

-
+
+

+ {project.name} +

+ {isValidLink(project.repository_url) && ( + e.stopPropagation()} + > + + + + + + + )}
-
-
- ( -

{para}

- ) - )} - /> -
+
+

+ {getFirstSentence(project.description)} +

+
+ +
+ {isValidLink(project.documentation_url) && ( +
+ Documentation: + e.stopPropagation()} + > + {project.documentation_url} + +
+ )} + {isValidLink(project.repository_url) && ( +
+ Repository: + e.stopPropagation()} + > + {project.repository_url} + +
+ )} + {isValidLink(project.service_url) && ( +
+ Service URL: + e.stopPropagation()} + > + {project.service_url} + +
+ )}
))} @@ -215,47 +261,28 @@ export default function ProjectGrids() {
-
- - Repository URL:{' '} - - {selectedProject.repository_url && - selectedProject.repository_url !== - 'n/a' && - selectedProject.repository_url !== - '#' ? ( + {isValidLink(selectedProject.repository_url) && ( +
+ + Repository URL:{' '} + {selectedProject.repository_url} - ) : ( - n/a - )} -
+
+ )} - {/* Catch empty and n/a and just display n/a as text. */} -
- Package Download URL: - {selectedProject.package_download_url?.filter( - (url) => - url && - url !== 'n/a' && - url !== '#' && - url.trim() !== '' - ).length > 0 ? ( -
+ )} -
- - Documentation URL:{' '} - - {selectedProject.documentation_url && - selectedProject.documentation_url !== - 'n/a' && - selectedProject.documentation_url !== - '#' ? ( + {isValidLink(selectedProject.documentation_url) && ( +
+ + Documentation URL:{' '} + - { - selectedProject.documentation_url - } + {selectedProject.documentation_url} - ) : ( - n/a - )} -
+
+ )} -
- - Service URL:{' '} - - {selectedProject.service_url && - selectedProject.service_url !== 'n/a' && - selectedProject.service_url !== '#' ? ( + {isValidLink(selectedProject.service_url) && ( +
+ + Service URL:{' '} + {selectedProject.service_url} - ) : ( - n/a - )} -
- -
- - Language(s):{' '} - -
- {selectedProject.languages}
-
+ )} -
- - Platform:{' '} - -
- {selectedProject.platform} + {isValidValue(selectedProject.languages) && ( +
+ + Language(s):{' '} + +
+ {selectedProject.languages} +
-
+ )} -
- - Software License:{' '} - -
- {selectedProject.software_license} + {isValidValue(selectedProject.platform) && ( +
+ + Platform:{' '} + +
+ {selectedProject.platform} +
-
+ )} -
- - Data License:{' '} - -
- {selectedProject.data_license} + {isValidValue(selectedProject.software_license) && ( +
+ + Software License:{' '} + +
+ {selectedProject.software_license} +
-
+ )} -
- - Lead Maintainer(s): - + {isValidValue(selectedProject.data_license) && ( +
+ + Data License:{' '} + +
+ {selectedProject.data_license} +
+
+ )} - {leadMaintainers.length > 0 ? ( -
    - {leadMaintainers.map( - (url, idx) => ( -
  • - - {url} - -
  • - ) + {leadMaintainers.filter(isValidLink).length > 0 && ( +
    + + Lead Maintainer(s): + +
      + {leadMaintainers.filter(isValidLink).map((url, idx) => ( +
    • + + {url} + +
    • + ) )}
    - ) : ( - n/a - )} -
    +
+ )}
diff --git a/website/src/components/ProjectGridTemplate/styles.module.css b/website/src/components/ProjectGridTemplate/styles.module.css index d726a53..4841b2b 100644 --- a/website/src/components/ProjectGridTemplate/styles.module.css +++ b/website/src/components/ProjectGridTemplate/styles.module.css @@ -11,6 +11,7 @@ border: 0; padding: 0rem; } + [data-theme='dark'] .projectGridWrapper01 { background: #1b1b1d; color: #e5e5e5; @@ -33,9 +34,11 @@ border-radius: 12px; border: 0; } + [data-theme='dark'] .projectGridContainer01 { background: #020202; } + [data-theme='dark'] .projectGridContainer01 { background: #303030; } @@ -43,9 +46,11 @@ /* Replace flexbox with a proper grid -- 3 columns */ .projectGrid { display: grid; - grid-template-columns: repeat(3, 1fr); /* 3 columns */ + grid-template-columns: repeat(3, 1fr); + /* 3 columns */ gap: 1.5rem; - align-items: stretch; /* Auto-match heights per row */ + align-items: stretch; + /* Auto-match heights per row */ } .projectCard { @@ -68,6 +73,8 @@ /* Modern approach: */ overflow-wrap: break-word; word-break: normal; + text-decoration: none; + color: inherit; } .projectCard:hover { @@ -75,6 +82,57 @@ box-shadow: 0 4px 10px rgba(0, 0, 0, 0.15); } +.externalLinkIcon { + opacity: 0.6; + transition: opacity 0.2s; + flex-shrink: 0; + color: #0366d6; + display: flex; + align-items: center; +} + +.externalLinkIcon:hover { + opacity: 1; +} + +.cardLinks { + margin-top: auto; + padding-top: 1rem; + display: flex; + flex-direction: column; + gap: 0.25rem; + font-size: 0.85rem; +} + +.cardLinkRow { + display: flex; + align-items: center; + gap: 0.5rem; + min-width: 0; +} + +.cardLinkLabel { + font-weight: 600; + color: #666; + flex-shrink: 0; +} + +[data-theme='dark'] .cardLinkLabel { + color: #aaa; +} + +.cardLinkValue { + color: #0366d6; + text-decoration: none; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.cardLinkValue:hover { + text-decoration: underline; +} + /* Breakpoints for tablets */ @media (max-width: 1024px) { .projectGrid { @@ -151,6 +209,7 @@ padding-top: 5px; line-height: 1.25rem; } + .modalLinks01 a { margin-right: 1rem; text-decoration: none; @@ -160,6 +219,7 @@ word-break: break-all; overflow-wrap: anywhere; } + .modalLinks01 a:hover { text-decoration: underline; } @@ -202,6 +262,7 @@ flex-direction: column; box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); } + [data-theme='dark'] .modalContent { background: #202020; border: solid 1px #404040; @@ -262,6 +323,7 @@ border-bottom: 1px solid #e0e0e0; line-height: 1.25rem; } + [data-theme='dark'] .fullWidthSection { border-bottom: 1px solid #404040; } @@ -312,6 +374,7 @@ display: flex; justify-content: flex-end; } + [data-theme='dark'] .modalFooter { border-top: solid 1px #404040; } @@ -352,10 +415,11 @@ overflow: hidden; text-overflow: ellipsis; display: -webkit-box; - -webkit-line-clamp: 8; - line-clamp: 8; + -webkit-line-clamp: 3; + line-clamp: 3; -webkit-box-orient: vertical; cursor: default; + margin-bottom: 0; } .projectDescriptionWrapper { @@ -405,6 +469,7 @@ .projectDescriptionWrapper:hover .tooltip { opacity: 1; } + [data-theme='dark'] .tooltip { background: #282828; color: #f0f0f0; @@ -432,11 +497,13 @@ font-size: 0.9rem; animation: fadeIn 0.3s ease; } + @keyframes fadeIn { from { opacity: 0; transform: translateY(4px); } + to { opacity: 1; transform: translateY(0); @@ -460,11 +527,13 @@ animation: fadeIn 0.3s ease; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); } + @keyframes fadeIn { from { opacity: 0; transform: translate(-50%, 4px); } + to { opacity: 1; transform: translate(-50%, 0); @@ -493,14 +562,17 @@ opacity: 0; transform: translate(-50%, 10px); } + 10% { opacity: 1; transform: translate(-50%, 0); } + 90% { opacity: 1; transform: translate(-50%, 0); } + 100% { opacity: 0; transform: translate(-50%, 10px); @@ -525,11 +597,13 @@ animation: fadeIn 0.3s ease; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); } + @keyframes fadeIn { from { opacity: 0; transform: translate(-50%, 4px); } + to { opacity: 1; transform: translate(-50%, 0); @@ -592,7 +666,8 @@ } .logoWrapper { - flex-shrink: 0; /* logo never shrinks */ + flex-shrink: 0; + /* logo never shrinks */ width: 40px; height: 40px; display: flex; @@ -607,9 +682,12 @@ } .wordWrap { - word-wrap: break-word; /* old name, still works */ - overflow-wrap: break-word; /* modern standard */ - word-break: break-all; /* fallback for very stubborn strings */ + word-wrap: break-word; + /* old name, still works */ + overflow-wrap: break-word; + /* modern standard */ + word-break: break-all; + /* fallback for very stubborn strings */ } .sectionTitle h2 { @@ -617,10 +695,9 @@ margin-top: 20px; margin-bottom: 20px; } + [data-theme='dark'] .sectionTitle h2 { - color: #666699; color: #a0a0a0; - color: #gridSection; } .sectionIntro { @@ -632,6 +709,7 @@ margin-bottom: 30px; padding-bottom: 30px; } + [data-theme='dark'] .gridSection { border-bottom: solid 1px #505050; -} +} \ No newline at end of file diff --git a/website/src/pages/credits.md b/website/src/pages/credits.md new file mode 100644 index 0000000..ec97bea --- /dev/null +++ b/website/src/pages/credits.md @@ -0,0 +1,13 @@ +# Open Source Credits + +We gratefully acknowledge the following open source projects that make this website possible: + +## Projects + +* **[Docusaurus](https://docusaurus.io/)** - [MIT License](https://github.com/facebook/docusaurus/blob/main/LICENSE) +* **[React](https://reactjs.org/)** - [MIT License](https://github.com/facebook/react/blob/main/LICENSE) +* **[MDX](https://mdxjs.com/)** - [MIT License](https://github.com/mdx-js/mdx/blob/main/license) +* **[Prism React Renderer](https://github.com/FormidableLabs/prism-react-renderer)** - [MIT License](https://github.com/FormidableLabs/prism-react-renderer/blob/master/LICENSE) +* **[clsx](https://github.com/lukeed/clsx)** - [MIT License](https://github.com/lukeed/clsx/blob/master/license) + + diff --git a/website/src/pages/privacy.md b/website/src/pages/privacy.md index 11b86d2..f1a6ddd 100644 --- a/website/src/pages/privacy.md +++ b/website/src/pages/privacy.md @@ -1,3 +1,9 @@ # Privacy Policy -Coming soon. +Last updated: January 2026 + +## Data Collection +We do not currently collect any visitor data on this website. + +## GDPR Compliance +As we do not collect, process, or store any personal data from visitors, this website is designed to be compliant with the General Data Protection Regulation (GDPR). If this changes in the future, we will update this policy accordingly. diff --git a/website/src/pages/terms.md b/website/src/pages/terms.md index a1edd9d..dbf8a60 100644 --- a/website/src/pages/terms.md +++ b/website/src/pages/terms.md @@ -1,3 +1,27 @@ -# Terms +# Terms of Use -Coming soon. +Last updated: January 2026 + +## Acceptance of Terms +nexB Inc. (“nexB” or “us” or “we”) operates this website (the “Website”). These Website Terms of Use govern all access to and use of the Website and constitute a binding legal agreement. Please read this Website Terms of Use and our Website Privacy Policy at [/privacy](/privacy). By accessing, browsing or using the Website, you are agreeing to these Terms of Use, our Privacy Policy and all other policies or notices posted by us on the Website. + +If you do not agree to these Terms of Use, do not use the Website. We can change these Terms of Use at any time without any notice to you. It is your responsibility to review these Terms of Use from time to time for any changes. + +## Site Content and License +All content included on the Website (collectively, “Site Content”) is the property of AboutCode Europe ASBL, nexB Inc., or its licensors. + +**License**: Unless otherwise noted, the content on this website is licensed under the [Creative Commons Attribution-ShareAlike 4.0 International License (CC-BY-SA-4.0)](https://creativecommons.org/licenses/by-sa/4.0/). + +**Trademarks**: All brand, product and service names used on the Website which identify nexB, AboutCode, or our products and services are the trademarks or service marks of their respective owners. Nothing in this Terms of Use shall be deemed to confer on any person any license or right with respect to any such image, logo or name. + +## Use of the Website +You may use the Website solely in accordance with these Website Terms of Use. Subject to your compliance with these Website Terms of Use, you may view, download and print the materials we make available on this Website, subject to the CC-BY-SA-4.0 license where applicable. + +## Disclaimer +The Website and Site Content are provided “as is”, without warranty of any kind, either express or implied. nexB and AboutCode Europe ASBL express disclaim any warranties of merchantability, fitness for a particular purpose, quiet enjoyment or non-infringement. + +## Limitation of Liability +To the fullest extent permitted by applicable law, in no event shall nexB or AboutCode Europe ASBL be liable to you or any third party for any indirect, consequential, exemplary, incidental, special or punitive damages. + +## Contacting Us +For questions regarding these Terms of Use, please contact us at [info@nexb.com](mailto:info@nexb.com).