diff --git a/apps/site/components/Common/Partners/PartnerLogo/index.module.css b/apps/site/components/Common/Partners/PartnerButton/index.module.css similarity index 69% rename from apps/site/components/Common/Partners/PartnerLogo/index.module.css rename to apps/site/components/Common/Partners/PartnerButton/index.module.css index 8f7b772426abe..12c4633d4994b 100644 --- a/apps/site/components/Common/Partners/PartnerLogo/index.module.css +++ b/apps/site/components/Common/Partners/PartnerButton/index.module.css @@ -1,6 +1,6 @@ @reference "../../../../styles/index.css"; -.partnerIcon { +.large { @apply flex h-28 max-h-28 @@ -17,3 +17,14 @@ !w-auto; } } + +.small { + @apply h-9 + w-auto + min-w-9; + + svg { + @apply h-4 + w-auto; + } +} diff --git a/apps/site/components/Common/Partners/PartnerButton/index.tsx b/apps/site/components/Common/Partners/PartnerButton/index.tsx new file mode 100644 index 0000000000000..760cb96cb0b4f --- /dev/null +++ b/apps/site/components/Common/Partners/PartnerButton/index.tsx @@ -0,0 +1,26 @@ +import Button from '#site/components/Common/Button'; + +import type { AnchorHTMLAttributes, FC } from 'react'; + +import style from './index.module.css'; + +type PartnerProps = AnchorHTMLAttributes & { + size?: 'large' | 'small'; +}; + +const PartnerButton: FC = ({ + href, + size = 'small', + ...props +}) => ( + - - -); - -export default PartnersIcon; diff --git a/apps/site/components/Common/Partners/PartnerLogo/index.tsx b/apps/site/components/Common/Partners/PartnerLogo/index.tsx deleted file mode 100644 index 206712775764c..0000000000000 --- a/apps/site/components/Common/Partners/PartnerLogo/index.tsx +++ /dev/null @@ -1,30 +0,0 @@ -import Skeleton from '@node-core/ui-components/Common/Skeleton'; -import { cloneElement } from 'react'; - -import Button from '#site/components/Common/Button'; - -import type { Partners } from '#site/types'; -import type { ComponentProps, FC } from 'react'; - -import style from './index.module.css'; - -type PartnersLogoProps = Partners & ComponentProps; - -const PartnersLogo: FC = ({ href, logo, loading }) => ( - - - -); - -export default PartnersLogo; diff --git a/apps/site/components/Common/Partners/PartnersIconList/index.module.css b/apps/site/components/Common/Partners/PartnersIconList/index.module.css deleted file mode 100644 index ebba90ad3787b..0000000000000 --- a/apps/site/components/Common/Partners/PartnersIconList/index.module.css +++ /dev/null @@ -1,9 +0,0 @@ -@reference "../../../../styles/index.css"; - -.partnersIconList { - @apply flex - flex-row - flex-wrap - items-center - gap-2; -} diff --git a/apps/site/components/Common/Partners/PartnersIconList/index.tsx b/apps/site/components/Common/Partners/PartnersIconList/index.tsx deleted file mode 100644 index 8022fe54b0df9..0000000000000 --- a/apps/site/components/Common/Partners/PartnersIconList/index.tsx +++ /dev/null @@ -1,41 +0,0 @@ -'use client'; - -import usePartnersList from '#site/hooks/react-client/usePartnersList'; -import { ICON_PARTNERS } from '#site/next.partners.constants'; - -import type { PartnerCategory } from '#site/types'; -import type { FC } from 'react'; - -import PartnerIcon from '../PartnerIcon'; - -import style from './index.module.css'; - -type PartnersIconListProps = { - maxLength?: number; - categories?: PartnerCategory; -}; - -const PartnersIconList: FC = ({ - maxLength = 6, - categories, -}) => { - const { seedList, initialRenderer } = usePartnersList({ - logos: ICON_PARTNERS, - maxLength, - categories, - }); - - return ( -
- {seedList.map((partner, index) => ( - - ))} -
- ); -}; - -export default PartnersIconList; diff --git a/apps/site/components/Common/Partners/PartnersLogoList/index.module.css b/apps/site/components/Common/Partners/PartnersLogoList/index.module.css deleted file mode 100644 index 52efa7168171c..0000000000000 --- a/apps/site/components/Common/Partners/PartnersLogoList/index.module.css +++ /dev/null @@ -1,8 +0,0 @@ -@reference "../../../../styles/index.css"; - -.partnersLogoList { - @apply grid - w-full - grid-cols-[repeat(auto-fill,minmax(240px,1fr))] - gap-4; -} diff --git a/apps/site/components/Common/Partners/PartnersLogoList/index.tsx b/apps/site/components/Common/Partners/PartnersLogoList/index.tsx deleted file mode 100644 index 042b891b26212..0000000000000 --- a/apps/site/components/Common/Partners/PartnersLogoList/index.tsx +++ /dev/null @@ -1,44 +0,0 @@ -'use client'; - -import usePartnersList from '#site/hooks/react-client/usePartnersList'; -import { LOGO_PARTNERS } from '#site/next.partners.constants'; - -import type { PartnerCategory } from '#site/types'; -import type { FC } from 'react'; - -import PartnerLogo from '../PartnerLogo'; - -import style from './index.module.css'; - -type PartnersLogoListProps = { - maxLength?: number; - categories?: PartnerCategory; - sort?: 'name' | 'weight'; -}; - -const PartnersLogoList: FC = ({ - maxLength = 3, - sort = 'weight', - categories, -}) => { - const { seedList, initialRenderer } = usePartnersList({ - logos: LOGO_PARTNERS, - maxLength, - sort, - categories, - }); - - return ( -
- {seedList.map((partner, index) => ( - - ))} -
- ); -}; - -export default PartnersLogoList; diff --git a/apps/site/components/Common/Partners/index.module.css b/apps/site/components/Common/Partners/index.module.css new file mode 100644 index 0000000000000..f419d06f3c67d --- /dev/null +++ b/apps/site/components/Common/Partners/index.module.css @@ -0,0 +1,22 @@ +@reference "../../../styles/index.css"; + +.small { + @apply flex + flex-row + flex-wrap + items-center + gap-2; +} + +.large { + @apply grid + w-full + grid-cols-[repeat(auto-fill,minmax(240px,1fr))] + gap-4; +} + +.tooltip { + @apply p-2 + text-neutral-900 + dark:text-neutral-200; +} diff --git a/apps/site/components/Common/Partners/index.tsx b/apps/site/components/Common/Partners/index.tsx new file mode 100644 index 0000000000000..d1a774e000a8a --- /dev/null +++ b/apps/site/components/Common/Partners/index.tsx @@ -0,0 +1,85 @@ +'use server'; + +import Tooltip from '@node-core/ui-components/Common/Tooltip'; +import * as PartnerLogos from '@node-core/ui-components/Icons/PartnerLogos'; + +import providePartners from '#site/next-data/providers/partners'; +import { partners } from '#site/next.json.mjs'; + +import type { Partner, PartnerCategory } from '#site/types'; +import type { FC } from 'react'; + +import PartnerButton from './PartnerButton'; + +import style from './index.module.css'; + +type PartnersListProps = { + size?: 'large' | 'small'; + category?: PartnerCategory; + sort?: 'name' | 'weight'; + length?: number; +}; + +const getPartners = async ( + length?: number, + category?: PartnerCategory, + sort?: 'name' | 'weight' +) => { + let result = sort === 'name' ? partners : await providePartners(); + + result = category + ? result.filter(p => p.categories.includes(category)) + : result; + + return length ? result.slice(0, length) : result; +}; + +const renderSmallPartner = (partner: Partner) => { + const Logo = PartnerLogos[partner.id]; + + return ( + {partner.name}} + > + + + + + ); +}; + +const renderLargePartner = (partner: Partner) => { + const Logo = PartnerLogos[partner.id]; + + return ( + + + + ); +}; + +const PartnersList: FC = async ({ + size = 'small', + category, + sort = 'name', + length, +}) => { + const isSmall = size === 'small'; + + const SMALL_PARTNER_LIMIT = 6; + + const partners = await getPartners( + length ?? (isSmall ? SMALL_PARTNER_LIMIT : undefined), + category, + sort + ); + + return ( +
+ {partners.map(isSmall ? renderSmallPartner : renderLargePartner)} +
+ ); +}; + +export default PartnersList; diff --git a/apps/site/components/Common/Partners/utils.ts b/apps/site/components/Common/Partners/utils.ts deleted file mode 100644 index 8ce9a6f4809ee..0000000000000 --- a/apps/site/components/Common/Partners/utils.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { shuffle } from '#site/util/array'; - -import type { RandomPartnerListConfig, Partners } from '#site/types'; - -async function randomPartnerList( - partners: Array, - config: RandomPartnerListConfig -): Promise> { - const { pick = 4, dateSeed = 5, category } = config; - - // Generate a deterministic seed based on current time that changes every X minutes - const seed = Math.floor(Date.now() / (dateSeed * 60 * 1000)); - - // Filter by category if provided - const filtered = category - ? partners.filter(p => p.categories.includes(category)) - : partners; - - const shuffled = await shuffle(filtered, seed); - - return shuffled.slice(0, pick ?? filtered.length); -} - -export { randomPartnerList }; diff --git a/apps/site/components/Common/Supporters/index.tsx b/apps/site/components/Common/Supporters/index.tsx index 15bf295dc8722..06dddf7f23b44 100644 --- a/apps/site/components/Common/Supporters/index.tsx +++ b/apps/site/components/Common/Supporters/index.tsx @@ -1,10 +1,10 @@ import Avatar from '@node-core/ui-components/Common/AvatarGroup/Avatar'; -import type { Supporters } from '#site/types'; +import type { Supporter } from '#site/types'; import type { FC } from 'react'; type SupportersListProps = { - supporters: Array; + supporters: Array>; }; const SupportersList: FC = ({ supporters }) => ( diff --git a/apps/site/hooks/react-client/usePartnersList.ts b/apps/site/hooks/react-client/usePartnersList.ts deleted file mode 100644 index f98301563080d..0000000000000 --- a/apps/site/hooks/react-client/usePartnersList.ts +++ /dev/null @@ -1,62 +0,0 @@ -'use client'; - -import { useEffect, useRef, useState } from 'react'; - -import { randomPartnerList } from '#site/components/Common/Partners/utils'; - -import type { PartnerCategory, Partners } from '#site/types/partners'; - -const usePartnersList = ({ - logos, - maxLength, - sort, - categories, -}: { - logos: Array; - maxLength: number; - sort?: 'name' | 'weight'; - categories?: PartnerCategory; -}) => { - const initialRenderer = useRef(true); - - const [seedList, setSeedList] = useState>(() => { - const filteredLogos = logos.filter( - partner => !categories || partner.categories.includes(categories) - ); - - return filteredLogos.slice(0, maxLength || filteredLogos.length); - }); - - useEffect(() => { - // We intentionally render the initial default "mock" list of sponsors - // to have the Skeletons loading, and then we render the actual list - // after an enough amount of time has passed to give a proper sense of Animation - // We do this client-side effect, to ensure that a random-amount of sponsors is renderered - // on every page load. Since our page is natively static, we need to ensure that - // on the client-side we have a random amount of sponsors rendered. - // Although whilst we are deployed on Vercel or other environment that supports ISR - // (Incremental Static Generation) whose would invalidate the cache every 5 minutes - // We want to ensure that this feature is compatible on a full-static environment - const renderSponsorsAnimation = setTimeout(async () => { - initialRenderer.current = false; - - setSeedList( - await randomPartnerList(logos, { - pick: maxLength, - dateSeed: 1, - category: categories, - sort, - }) - ); - }, 0); - - return () => clearTimeout(renderSponsorsAnimation); - // We only want this to run once on initial render - // We don't really care if the props change as realistically they shouldn't ever - // eslint-disable-next-line react-hooks/exhaustive-deps - }, []); - - return { seedList, initialRenderer }; -}; - -export default usePartnersList; diff --git a/apps/site/mdx/components.mjs b/apps/site/mdx/components.mjs index 1f4a7e06e0a41..46db7dc2afe11 100644 --- a/apps/site/mdx/components.mjs +++ b/apps/site/mdx/components.mjs @@ -12,8 +12,7 @@ import { import Button from '#site/components/Common/Button'; import LinkWithArrow from '#site/components/Common/LinkWithArrow'; -import PartnersIconList from '#site/components/Common/Partners/PartnersIconList'; -import PartnersLogoList from '#site/components/Common/Partners/PartnersLogoList'; +import PartnersList from '#site/components/Common/Partners'; import DownloadButton from '#site/components/Downloads/DownloadButton'; import DownloadsTable from '#site/components/Downloads/DownloadsTable'; import BlogPostLink from '#site/components/Downloads/Release/BlogPostLink'; @@ -82,10 +81,8 @@ export default { ChangelogLink, DownloadLink: ReleaseDownloadLink, }, - // Shows a list of Node.js Partners with Icons - PartnersIconList, - // Shows a list of Node.js Partners with Logos - PartnersLogoList, + // Shows a list of Node.js Partners + PartnersList, // HOC for providing the Download Archive Page properties WithDownloadArchive, DownloadsTable, diff --git a/apps/site/next-data/generators/partners.mjs b/apps/site/next-data/generators/partners.mjs new file mode 100644 index 0000000000000..0e9539c210044 --- /dev/null +++ b/apps/site/next-data/generators/partners.mjs @@ -0,0 +1,25 @@ +import { partners } from '#site/next.json.mjs'; +import { shuffle } from '#site/util/array'; + +/** + * Provides the weighted and shuffled partners array. + * Results are cached using React's cache directive. + */ +const providePartners = async () => { + // For weight sorting, use cached weighted partners + const seconds = 300; // Change every 5 minutes + const seed = Math.floor(Date.now() / (seconds * 1000)); + + // Create weighted array (duplicates based on weight) + const weightedPartners = partners.flatMap(partner => { + const weight = partner.weight ?? 0; + return Array(weight > 0 ? weight : 1).fill(partner); + }); + + // Shuffle and remove duplicates + const shuffled = await shuffle(weightedPartners, seed); + + return Array.from(new Set(shuffled)); +}; + +export default providePartners; diff --git a/apps/site/next-data/providers/partners.ts b/apps/site/next-data/providers/partners.ts new file mode 100644 index 0000000000000..ab35d17c31a31 --- /dev/null +++ b/apps/site/next-data/providers/partners.ts @@ -0,0 +1,5 @@ +'use cache'; + +import providePartners from '#site/next-data/generators/partners.mjs'; + +export default providePartners; diff --git a/apps/site/next-env.d.ts b/apps/site/next-env.d.ts index 2d5420ebae639..c05d9f7d66f17 100644 --- a/apps/site/next-env.d.ts +++ b/apps/site/next-env.d.ts @@ -1,7 +1,7 @@ /// /// /// -import "./.next/types/routes.d.ts"; +import './.next/types/routes.d.ts'; // NOTE: This file should not be edited // see https://nextjs.org/docs/app/api-reference/config/typescript for more information. diff --git a/apps/site/next.json.mjs b/apps/site/next.json.mjs index 27fb92885f8a1..7749603d9140f 100644 --- a/apps/site/next.json.mjs +++ b/apps/site/next.json.mjs @@ -3,6 +3,7 @@ import _authors from './authors.json' with { type: 'json' }; import _siteNavigation from './navigation.json' with { type: 'json' }; import _blogData from './public/blog-data.json' with { type: 'json' }; +import _partners from './public/static/partners/constants.json' with { type: 'json' }; import _siteRedirects from './redirects.json' with { type: 'json' }; import _siteConfig from './site.json' with { type: 'json' }; @@ -20,3 +21,6 @@ export const siteConfig = _siteConfig; /** @type {import('./types').BlogData} */ export const blogData = _blogData; + +/** @type {Array} */ +export const partners = _partners; diff --git a/apps/site/next.partners.constants.tsx b/apps/site/next.partners.constants.tsx deleted file mode 100644 index 88979aad3485a..0000000000000 --- a/apps/site/next.partners.constants.tsx +++ /dev/null @@ -1,12 +0,0 @@ -import partners from '#site/public/static/partners/constants.json' with { type: 'json' }; -import { createPartnersList } from '#site/util/partners'; - -import type { Partners } from '#site/types'; - -const getPartnersByType = (type?: 'Logo' | 'Favicon') => - createPartnersList(partners as Array>, type); - -const ICON_PARTNERS = getPartnersByType('Favicon'); -const LOGO_PARTNERS = getPartnersByType('Logo'); - -export { ICON_PARTNERS, LOGO_PARTNERS }; diff --git a/apps/site/pages/en/about/partners.mdx b/apps/site/pages/en/about/partners.mdx index 1d524d8873ba9..7fd69d685fdfc 100644 --- a/apps/site/pages/en/about/partners.mdx +++ b/apps/site/pages/en/about/partners.mdx @@ -18,7 +18,7 @@ The infrastructure partners provide important support for the Node.js project, providing hardware and machines for our continuous integration and testing processes, without we can't test and release new versions of Node.js. - + ## Supporters @@ -38,7 +38,7 @@ End-Of-Life versions, please visit [End-Of-Life Node.js Releases](/about/eol) > Using EOL releases through commercial support should be viewed as a temporary solution, the goal should always > be to upgrade to actively supported versions. - + ## Become a Partner diff --git a/apps/site/pages/en/download/current.mdx b/apps/site/pages/en/download/current.mdx index 551c4a9aed447..cc435c8af1e41 100644 --- a/apps/site/pages/en/download/current.mdx +++ b/apps/site/pages/en/download/current.mdx @@ -45,6 +45,6 @@ or the unof proudly due to the support of these partners, and more.
- +
diff --git a/apps/site/pages/en/download/index.mdx b/apps/site/pages/en/download/index.mdx index ffed0112321dd..9767b0d9bda2f 100644 --- a/apps/site/pages/en/download/index.mdx +++ b/apps/site/pages/en/download/index.mdx @@ -45,6 +45,6 @@ or the unof proudly due to the support of these partners, and more.
- +
diff --git a/apps/site/pages/en/index.mdx b/apps/site/pages/en/index.mdx index 14a15f91d0431..e5cd7a93f48c1 100644 --- a/apps/site/pages/en/index.mdx +++ b/apps/site/pages/en/index.mdx @@ -28,7 +28,7 @@ layout: home
- +
Node.js is proudly supported by the partners above and more. diff --git a/apps/site/pages/fr/about/partners.mdx b/apps/site/pages/fr/about/partners.mdx index 6d73dd1f5c711..ce51a757cf766 100644 --- a/apps/site/pages/fr/about/partners.mdx +++ b/apps/site/pages/fr/about/partners.mdx @@ -18,7 +18,7 @@ Les partenaires infrastructurels apportent un soutien important au projet Node.j en fournissant le matériel et les machines nécessaires à nos processus d'intégration et de test continus, sans lesquels nous ne pourrions pas tester et publier de nouvelles versions de Node.js. - + ## Contributeurs @@ -37,7 +37,7 @@ versions en fin de vie, veuillez consulter [End-Of-Life Node.js Releases](/about > L'utilisation des versions EOL(fin de vie) via NES doit être considérée comme une solution temporaire. L'objectif doit toujours être de passer à des versions activement prises en charge. - + ## Devenir un partenaire diff --git a/apps/site/pages/fr/download/current.mdx b/apps/site/pages/fr/download/current.mdx index b1f688b00c1b5..390c4bfa90d4c 100644 --- a/apps/site/pages/fr/download/current.mdx +++ b/apps/site/pages/fr/download/current.mdx @@ -41,6 +41,6 @@ Consultez nos binaires - + diff --git a/apps/site/pages/fr/download/index.mdx b/apps/site/pages/fr/download/index.mdx index 8a12ee096261a..212d6d204e99b 100644 --- a/apps/site/pages/fr/download/index.mdx +++ b/apps/site/pages/fr/download/index.mdx @@ -41,6 +41,6 @@ Consultez nos binaires - + diff --git a/apps/site/pages/fr/index.mdx b/apps/site/pages/fr/index.mdx index ed40c5c018b65..363d6a6c5090f 100644 --- a/apps/site/pages/fr/index.mdx +++ b/apps/site/pages/fr/index.mdx @@ -28,7 +28,7 @@ layout: home
- +
Node.js est fièrement soutenu par les partenaires ci-dessus et bien d'autres encore. diff --git a/apps/site/pages/id/about/partners.mdx b/apps/site/pages/id/about/partners.mdx index 4b3ab21af203e..d483a92667d96 100644 --- a/apps/site/pages/id/about/partners.mdx +++ b/apps/site/pages/id/about/partners.mdx @@ -16,7 +16,7 @@ dan pengembangan berkelanjutan dari Node.js. ... - + ## Pendukung @@ -36,7 +36,7 @@ untuk menjembatani kebutuhan sementara kamu merencanakan strategi peningkatan ve > Menggunakan rilis EOL melalui dukungan komersial harus dianggap sebagai solusi sementara. Tujuan utama tetap harus meningkatkan ke versi yang masih didukung secara aktif. - + ## Menjadi Mitra diff --git a/apps/site/pages/id/download/current.mdx b/apps/site/pages/id/download/current.mdx index 8f94265639400..2b4804de5e040 100644 --- a/apps/site/pages/id/download/current.mdx +++ b/apps/site/pages/id/download/current.mdx @@ -43,6 +43,6 @@ atau biner
- +
diff --git a/apps/site/pages/id/download/index.mdx b/apps/site/pages/id/download/index.mdx index f086615bd4254..7eb783d799834 100644 --- a/apps/site/pages/id/download/index.mdx +++ b/apps/site/pages/id/download/index.mdx @@ -43,6 +43,6 @@ atau biner
- +
diff --git a/apps/site/pages/id/index.mdx b/apps/site/pages/id/index.mdx index 03bbd5303ac1e..8bd969571652d 100644 --- a/apps/site/pages/id/index.mdx +++ b/apps/site/pages/id/index.mdx @@ -30,7 +30,7 @@ layout: home
- +
Node.js dengan bangga didukung oleh para mitra di atas dan lainnya. diff --git a/apps/site/pages/ja/about/partners.mdx b/apps/site/pages/ja/about/partners.mdx index 41f179a0a1162..09a89b788a0fd 100644 --- a/apps/site/pages/ja/about/partners.mdx +++ b/apps/site/pages/ja/about/partners.mdx @@ -13,7 +13,7 @@ Node.jsの成功と継続的な発展に欠かせないパートナーのみな インフラストラクチャーのパートナーのみなさまにはNode.jsプロジェクトに多大なご支援をいただいております。継続的インテグレーションやテストに必要なハードウェアや機器をご提供いただいているおかげで新しいNode.jsのバージョンのテストやリリースを行うことができます。 - + ## サポーター @@ -27,7 +27,7 @@ Node.jsの成功と継続的な発展に欠かせないパートナーのみな > 商用サポートによるEOLバージョンの利用は一時的な解決策と捉えるべきであり、常に積極的にサポートされているバージョンへのアップグレードを目標とすべきです。 - + ## パートナーになる diff --git a/apps/site/pages/ja/download/current.mdx b/apps/site/pages/ja/download/current.mdx index 01810b027a8cc..1dffb99443dd8 100644 --- a/apps/site/pages/ja/download/current.mdx +++ b/apps/site/pages/ja/download/current.mdx @@ -41,6 +41,6 @@ title: Node.js®をダウンロードする
- +
diff --git a/apps/site/pages/ja/download/index.mdx b/apps/site/pages/ja/download/index.mdx index b298c94029a35..047628c37f35c 100644 --- a/apps/site/pages/ja/download/index.mdx +++ b/apps/site/pages/ja/download/index.mdx @@ -41,6 +41,6 @@ title: Node.js®をダウンロードする
- +
diff --git a/apps/site/pages/ja/index.mdx b/apps/site/pages/ja/index.mdx index 28d8a87bfd63f..3c157ecffb485 100644 --- a/apps/site/pages/ja/index.mdx +++ b/apps/site/pages/ja/index.mdx @@ -28,7 +28,7 @@ layout: home
- +
Node.jsは上記パートナー企業など数多くの企業からご支援いただいています。 diff --git a/apps/site/pages/pt-br/about/partners.mdx b/apps/site/pages/pt-br/about/partners.mdx index 1bfee1a7603db..498d9788a4c2b 100644 --- a/apps/site/pages/pt-br/about/partners.mdx +++ b/apps/site/pages/pt-br/about/partners.mdx @@ -13,7 +13,7 @@ Agradecemos o apoio de nossos parceiros, que desempenham um papel crucial no suc Os parceiros de infraestrutura fornecem um apoio fundamental para o projeto Node.js, disponibilizando hardware e máquinas para nossos processos de integração contínua e testes, sem os quais não conseguimos testar e lançar novas versões do Node.js. - + ## Apoiadores @@ -30,7 +30,7 @@ Fim de Vida Útil por favor visite os [Lançamentos em Fim de Vida Útil (_EOL_) > O uso de versões _EOL_ através de suporte comercial deve ser visto como uma solução temporária, o objetivo deve ser sempre atualizar para versões ativamente mantidas. - + ## Torne-se um Parceiro diff --git a/apps/site/pages/pt-br/download/current.mdx b/apps/site/pages/pt-br/download/current.mdx index eb8bf9e303352..73c14fd44258c 100644 --- a/apps/site/pages/pt-br/download/current.mdx +++ b/apps/site/pages/pt-br/download/current.mdx @@ -41,6 +41,6 @@ Confira nossos binários - + diff --git a/apps/site/pages/pt-br/download/index.mdx b/apps/site/pages/pt-br/download/index.mdx index 5a5e7f812ca6d..6854d0e9ceff6 100644 --- a/apps/site/pages/pt-br/download/index.mdx +++ b/apps/site/pages/pt-br/download/index.mdx @@ -43,6 +43,6 @@ ou os binários - + diff --git a/apps/site/pages/pt-br/index.mdx b/apps/site/pages/pt-br/index.mdx index e47afb933c53e..9c6f34ecd1278 100644 --- a/apps/site/pages/pt-br/index.mdx +++ b/apps/site/pages/pt-br/index.mdx @@ -28,7 +28,7 @@ layout: home
- +
O Node.js é apoiado orgulhosamente pelos parceiros acima e outros. diff --git a/apps/site/pages/ro/index.mdx b/apps/site/pages/ro/index.mdx index cc0b9270d488c..d22f3f8ee1619 100644 --- a/apps/site/pages/ro/index.mdx +++ b/apps/site/pages/ro/index.mdx @@ -30,7 +30,7 @@ layout: home
- +
Node.js este susținut cu mândrie de partenerii de mai sus și mulți alții. diff --git a/apps/site/pages/uk/about/partners.mdx b/apps/site/pages/uk/about/partners.mdx index 6b26ad4ec4e3c..ba1a5b30e1e9c 100644 --- a/apps/site/pages/uk/about/partners.mdx +++ b/apps/site/pages/uk/about/partners.mdx @@ -13,7 +13,7 @@ layout: about Партнери інфраструктури здійснюють важливу підтримку для проєкту Node.js, надаючи апаратне забезпечення та пристрої для постійної інтеграції та тестування. Без них ми не зможемо тестувати та випускати нові версії Node.js. - + ## Підтримувачі @@ -28,7 +28,7 @@ layout: about > Використання EOL-релізів із комерційною підтримкою повинне бути тимчасовим рішенням, і за можливості слід оновлюватися до підтримуваних версій. - + ## Як стати партнером? diff --git a/apps/site/pages/uk/download/current.mdx b/apps/site/pages/uk/download/current.mdx index 5ef68c7a26ecb..8a47dc9b68f00 100644 --- a/apps/site/pages/uk/download/current.mdx +++ b/apps/site/pages/uk/download/current.mdx @@ -43,6 +43,6 @@ title: Завантажити Node.js®
- +
diff --git a/apps/site/pages/uk/download/index.mdx b/apps/site/pages/uk/download/index.mdx index 985a71b4e768a..54482e06783ef 100644 --- a/apps/site/pages/uk/download/index.mdx +++ b/apps/site/pages/uk/download/index.mdx @@ -43,6 +43,6 @@ title: Завантажити Node.js®
- +
diff --git a/apps/site/pages/uk/index.mdx b/apps/site/pages/uk/index.mdx index 45e10b26519e5..97f666524372e 100644 --- a/apps/site/pages/uk/index.mdx +++ b/apps/site/pages/uk/index.mdx @@ -29,7 +29,7 @@ layout: home
- +
Node.js підтримується партнерами вище і не тільки. diff --git a/apps/site/pages/zh-cn/download/current.mdx b/apps/site/pages/zh-cn/download/current.mdx index 01e480b37ed49..f770f4f9f86c8 100644 --- a/apps/site/pages/zh-cn/download/current.mdx +++ b/apps/site/pages/zh-cn/download/current.mdx @@ -43,6 +43,6 @@ title: 下载 Node.js®
- +
diff --git a/apps/site/pages/zh-cn/download/index.mdx b/apps/site/pages/zh-cn/download/index.mdx index 922bad7be93b9..b50954baa93fe 100644 --- a/apps/site/pages/zh-cn/download/index.mdx +++ b/apps/site/pages/zh-cn/download/index.mdx @@ -41,6 +41,6 @@ title: 下载 Node.js®
- +
diff --git a/apps/site/pages/zh-cn/index.mdx b/apps/site/pages/zh-cn/index.mdx index abd55fe424b5a..86c7518c78951 100644 --- a/apps/site/pages/zh-cn/index.mdx +++ b/apps/site/pages/zh-cn/index.mdx @@ -29,7 +29,7 @@ layout: home
- +
Node.js 很荣幸得到上述及更多合作伙伴的支持。 diff --git a/apps/site/types/partners.ts b/apps/site/types/partners.ts index 705dada162e5a..f0c4fc23acf77 100644 --- a/apps/site/types/partners.ts +++ b/apps/site/types/partners.ts @@ -1,7 +1,8 @@ +import type * as PartnerLogos from '@node-core/ui-components/Icons/PartnerLogos'; import type { ReactElement, SVGProps } from 'react'; -export type Partners = { - id: string; +export type Partner = { + id: keyof typeof PartnerLogos; /** * The name of the partner */ @@ -29,33 +30,3 @@ export type Partners = { }; export type PartnerCategory = 'infrastructure' | 'esp'; - -export type Supporters = { - name: string; - image: string; - url: string; - profile: string; - source: 'opencollective' | 'github'; -}; - -export type RandomPartnerListConfig = { - /** - * Number of partners to pick from the list. - * If null, all partners will be returned. - */ - pick?: number | null; - /** - * Date seed to use for the randomization. - * This is used to ensure that the same partners are returned for the same date. - */ - dateSeed?: number; - /** - * Category of partners to filter by. - * If not provided, all partners will be returned. - */ - category?: PartnerCategory; - /** - * Whether to randomize the partners or not. - */ - sort?: 'name' | 'weight' | null; -}; diff --git a/apps/site/util/array.ts b/apps/site/util/array.ts index c9e1856495bc1..f6aec1ed9c97b 100644 --- a/apps/site/util/array.ts +++ b/apps/site/util/array.ts @@ -1,10 +1,8 @@ -import type { Partners } from '#site/types'; - // Fisher-Yates shuffle algorithm with a seed for deterministic results -export const shuffle = async ( - array: Array, +export const shuffle = async ( + array: Array, seed: number -): Promise> => { +): Promise> => { const shuffled = [...array]; const encoder = new TextEncoder(); const buffer = encoder.encode(String(seed)); diff --git a/apps/site/util/partners/index.tsx b/apps/site/util/partners/index.tsx deleted file mode 100644 index e2f1fbc5cdd9f..0000000000000 --- a/apps/site/util/partners/index.tsx +++ /dev/null @@ -1,27 +0,0 @@ -import * as PartnersLogo from '@node-core/ui-components/Icons/PartnerLogos'; - -import type { Partners } from '#site/types'; -import type { ElementType } from 'react'; - -/** - * Creates an icon element for a component - */ -const createIcon = ( - IconModule: Record>, - iconName: string, - type: 'Logo' | 'Favicon' = 'Favicon' -) => { - const IconComponent = IconModule[iconName][type || 'Favicon']; - return ; -}; - -// Creates a list of partners with their respective icons -export const createPartnersList = ( - partnerLists: Array>, - type?: 'Logo' | 'Favicon' -) => - partnerLists.map(({ id, ...partner }) => ({ - id, - logo: createIcon(PartnersLogo, id, type), - ...partner, - }));