feat(nx-dev): add ui-enterprise library (#23086)
This commit is contained in:
parent
abd80cf3f1
commit
22ef42a475
@ -48,8 +48,8 @@ Nx Cloud guarantees your cache entries will remain immutable - once they've been
|
|||||||
|
|
||||||
### Use An On-Premise Version of Nx Cloud If Needed
|
### Use An On-Premise Version of Nx Cloud If Needed
|
||||||
|
|
||||||
If you need to have all cache artifacts on servers that you control, there is an on-premise version of Nx Cloud that you can use as part of the [Enterprise plan](https://nx.app/enterprise).
|
If you need to have all cache artifacts on servers that you control, there is an on-premise version of Nx Cloud that you can use as part of the [Enterprise plan](/enterprise).
|
||||||
|
|
||||||
## Security Decisions
|
## Security Decisions
|
||||||
|
|
||||||
In any security discussion, there is a trade off between convenience and security. It could be that some of these threats do not apply to your organization. If that is the case you could relax some of the security precautions and gain the performance benefits of more task results being stored in the remote cache. Every organization is different and Nx can be adapted to best meet your needs without opening up vulnerabilities. If you would Nx team members to help your organization fine tune your set up, [talk to us about Nx Enterprise](https://nx.app/enterprise).
|
In any security discussion, there is a trade off between convenience and security. It could be that some of these threats do not apply to your organization. If that is the case you could relax some of the security precautions and gain the performance benefits of more task results being stored in the remote cache. Every organization is different and Nx can be adapted to best meet your needs without opening up vulnerabilities. If you would Nx team members to help your organization fine tune your set up, [talk to us about Nx Enterprise](/enterprise).
|
||||||
|
|||||||
@ -100,4 +100,4 @@ In the same way that Nx efficiently assigns tasks to parallel processes on a sin
|
|||||||
|
|
||||||
If your repo is starting to grow large enough that CI times are suffering, or if your parallelization strategy is growing too complex to manage effectively, try [setting up Nx Agents](/ci/features/distribute-task-execution). You can [generate a simple workflow](/nx-api/workspace/generators/ci-workflow) for common CI providers with a `nx g ci-workflow` or follow one of the [CI setup recipes](/ci/recipes/set-up).
|
If your repo is starting to grow large enough that CI times are suffering, or if your parallelization strategy is growing too complex to manage effectively, try [setting up Nx Agents](/ci/features/distribute-task-execution). You can [generate a simple workflow](/nx-api/workspace/generators/ci-workflow) for common CI providers with a `nx g ci-workflow` or follow one of the [CI setup recipes](/ci/recipes/set-up).
|
||||||
|
|
||||||
Organizations that want extra help setting up Nx Cloud or getting the most out of Nx can [sign up for Nx Enterprise](https://nx.app/enterprise/). This package comes with extra support from the Nx team and the option to host Nx Cloud on your own servers.
|
Organizations that want extra help setting up Nx Cloud or getting the most out of Nx can [sign up for Nx Enterprise](/enterprise). This package comes with extra support from the Nx team and the option to host Nx Cloud on your own servers.
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
# Custom Distributed Task Execution on Azure Pipelines
|
# Custom Distributed Task Execution on Azure Pipelines
|
||||||
|
|
||||||
Using [Nx Agents](/ci/features/distribute-task-execution) is the easiest way to distribute task execution, but it your organization may not be able to use hosted Nx Agents. With an [enterprise license](https://nx.app/enterprise), you can set up distributed task execution on your own CI provider using the recipe below.
|
Using [Nx Agents](/ci/features/distribute-task-execution) is the easiest way to distribute task execution, but it your organization may not be able to use hosted Nx Agents. With an [enterprise license](/enterprise), you can set up distributed task execution on your own CI provider using the recipe below.
|
||||||
|
|
||||||
## Run Custom Agents on Azure Pipelines
|
## Run Custom Agents on Azure Pipelines
|
||||||
|
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
# Custom Distributed Task Execution on Bitbucket Pipelines
|
# Custom Distributed Task Execution on Bitbucket Pipelines
|
||||||
|
|
||||||
Using [Nx Agents](/ci/features/distribute-task-execution) is the easiest way to distribute task execution, but it your organization may not be able to use hosted Nx Agents. With an [enterprise license](https://nx.app/enterprise), you can set up distributed task execution on your own CI provider using the recipe below.
|
Using [Nx Agents](/ci/features/distribute-task-execution) is the easiest way to distribute task execution, but it your organization may not be able to use hosted Nx Agents. With an [enterprise license](/enterprise), you can set up distributed task execution on your own CI provider using the recipe below.
|
||||||
|
|
||||||
## Run Custom Agents on Bitbucket Pipelines
|
## Run Custom Agents on Bitbucket Pipelines
|
||||||
|
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
# Custom Distributed Task Execution on Circle CI
|
# Custom Distributed Task Execution on Circle CI
|
||||||
|
|
||||||
Using [Nx Agents](/ci/features/distribute-task-execution) is the easiest way to distribute task execution, but it your organization may not be able to use hosted Nx Agents. With an [enterprise license](https://nx.app/enterprise), you can set up distributed task execution on your own CI provider using the recipe below.
|
Using [Nx Agents](/ci/features/distribute-task-execution) is the easiest way to distribute task execution, but it your organization may not be able to use hosted Nx Agents. With an [enterprise license](/enterprise), you can set up distributed task execution on your own CI provider using the recipe below.
|
||||||
|
|
||||||
## Run Custom Agents on Circle CI
|
## Run Custom Agents on Circle CI
|
||||||
|
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
# Custom Distributed Task Execution on Github Actions
|
# Custom Distributed Task Execution on Github Actions
|
||||||
|
|
||||||
Using [Nx Agents](/ci/features/distribute-task-execution) is the easiest way to distribute task execution, but it your organization may not be able to use hosted Nx Agents. With an [enterprise license](https://nx.app/enterprise), you can set up distributed task execution on your own CI provider using the recipe below.
|
Using [Nx Agents](/ci/features/distribute-task-execution) is the easiest way to distribute task execution, but it your organization may not be able to use hosted Nx Agents. With an [enterprise license](/enterprise), you can set up distributed task execution on your own CI provider using the recipe below.
|
||||||
|
|
||||||
## Run Custom Agents on GitHub
|
## Run Custom Agents on GitHub
|
||||||
|
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
# Custom Distributed Task Execution on GitLab
|
# Custom Distributed Task Execution on GitLab
|
||||||
|
|
||||||
Using [Nx Agents](/ci/features/distribute-task-execution) is the easiest way to distribute task execution, but it your organization may not be able to use hosted Nx Agents. With an [enterprise license](https://nx.app/enterprise), you can set up distributed task execution on your own CI provider using the recipe below.
|
Using [Nx Agents](/ci/features/distribute-task-execution) is the easiest way to distribute task execution, but it your organization may not be able to use hosted Nx Agents. With an [enterprise license](/enterprise), you can set up distributed task execution on your own CI provider using the recipe below.
|
||||||
|
|
||||||
## Run Custom Agents on GitLab
|
## Run Custom Agents on GitLab
|
||||||
|
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
# Custom Distributed Task Execution on Jenkins
|
# Custom Distributed Task Execution on Jenkins
|
||||||
|
|
||||||
Using [Nx Agents](/ci/features/distribute-task-execution) is the easiest way to distribute task execution, but it your organization may not be able to use hosted Nx Agents. With an [enterprise license](https://nx.app/enterprise), you can set up distributed task execution on your own CI provider using the recipe below.
|
Using [Nx Agents](/ci/features/distribute-task-execution) is the easiest way to distribute task execution, but it your organization may not be able to use hosted Nx Agents. With an [enterprise license](/enterprise), you can set up distributed task execution on your own CI provider using the recipe below.
|
||||||
|
|
||||||
## Distribute Tasks Across Custom Agents on Jenkins
|
## Distribute Tasks Across Custom Agents on Jenkins
|
||||||
|
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
We offer multiple ways of running Nx Cloud for our Enterprise customers. The below options are listed in recommended order, from easiest to most complex in terms of set-up and maintenance for your team. Please carefully consider your organization's requirements and level of infrastructure expertise before deciding on a deployment option.
|
We offer multiple ways of running Nx Cloud for our Enterprise customers. The below options are listed in recommended order, from easiest to most complex in terms of set-up and maintenance for your team. Please carefully consider your organization's requirements and level of infrastructure expertise before deciding on a deployment option.
|
||||||
|
|
||||||
{% call-to-action title="Get in Touch" icon="nxcloud" description="Get the package that best fits your needs" url="https://nx.app/enterprise?utm_source=nx.dev" /%}
|
{% call-to-action title="Get in Touch" icon="nxcloud" description="Get the package that best fits your needs" url="/enterprise" /%}
|
||||||
|
|
||||||
## Managed Setup
|
## Managed Setup
|
||||||
|
|
||||||
|
|||||||
@ -55,7 +55,7 @@ npx nx g ci-workflow
|
|||||||
|
|
||||||
Connect on our channels and with the Nx Community to ask questions, get help and keep up to date with the latest news.
|
Connect on our channels and with the Nx Community to ask questions, get help and keep up to date with the latest news.
|
||||||
|
|
||||||
- Reach out for [Enterprise Support](https://nx.app/enterprise)
|
- Reach out for [Enterprise Support](/enterprise)
|
||||||
- Join our [Discord Community](https://go.nx.dev/community)
|
- Join our [Discord Community](https://go.nx.dev/community)
|
||||||
- Subscribe to our [Youtube Channel](https://www.youtube.com/@nxdevtools)
|
- Subscribe to our [Youtube Channel](https://www.youtube.com/@nxdevtools)
|
||||||
- Follow us on [Twitter](https://twitter.com/nxdevtools)
|
- Follow us on [Twitter](https://twitter.com/nxdevtools)
|
||||||
|
|||||||
75
nx-dev/nx-dev/pages/enterprise.tsx
Normal file
75
nx-dev/nx-dev/pages/enterprise.tsx
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
import { useRouter } from 'next/router';
|
||||||
|
import { NextSeo } from 'next-seo';
|
||||||
|
import { DefaultLayout } from '@nx/nx-dev/ui-common';
|
||||||
|
import {
|
||||||
|
CallToAction,
|
||||||
|
DownloadEbook,
|
||||||
|
EnterpriseAddons,
|
||||||
|
Hero,
|
||||||
|
MetricsAndCustomers,
|
||||||
|
ScaleYourPeople,
|
||||||
|
Security,
|
||||||
|
TrustedBy,
|
||||||
|
SolveYourCi,
|
||||||
|
} from '@nx/nx-dev/ui-enterprise';
|
||||||
|
|
||||||
|
export function Enterprise(): JSX.Element {
|
||||||
|
const router = useRouter();
|
||||||
|
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<NextSeo
|
||||||
|
title="Nx Enterprise"
|
||||||
|
description="Accelerate your organization's journey to tighter collaboration, better developer experience, and speed…lots of speed."
|
||||||
|
openGraph={{
|
||||||
|
url: 'https://nx.dev' + router.asPath,
|
||||||
|
title: 'Nx Enterprise',
|
||||||
|
description:
|
||||||
|
"Accelerate your organization's journey to tighter collaboration, better developer experience, and speed…lots of speed.",
|
||||||
|
images: [
|
||||||
|
{
|
||||||
|
url: 'https://nx.dev/socials/nx-media.png',
|
||||||
|
width: 800,
|
||||||
|
height: 421,
|
||||||
|
alt: 'Nx: Smart Monorepos · Fast CI',
|
||||||
|
type: 'image/jpeg',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
siteName: 'NxDev',
|
||||||
|
type: 'website',
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
<DefaultLayout>
|
||||||
|
<div>
|
||||||
|
<Hero />
|
||||||
|
</div>
|
||||||
|
<div className="mt-32 lg:mt-40">
|
||||||
|
<MetricsAndCustomers />
|
||||||
|
</div>
|
||||||
|
<div className="mt-32 lg:mt-56">
|
||||||
|
<ScaleYourPeople />
|
||||||
|
</div>
|
||||||
|
<div className="mt-32 lg:mt-56">
|
||||||
|
<Security />
|
||||||
|
</div>
|
||||||
|
<div className="mt-32 lg:mt-56">
|
||||||
|
<SolveYourCi />
|
||||||
|
</div>
|
||||||
|
<div className="mt-32 lg:mt-56">
|
||||||
|
<DownloadEbook />
|
||||||
|
</div>
|
||||||
|
<div className="mt-32 lg:mt-56">
|
||||||
|
<EnterpriseAddons />
|
||||||
|
</div>
|
||||||
|
<div className="mt-32">
|
||||||
|
<TrustedBy />
|
||||||
|
</div>
|
||||||
|
<div className="mt-32 lg:mt-56">
|
||||||
|
<CallToAction />
|
||||||
|
</div>
|
||||||
|
</DefaultLayout>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Enterprise;
|
||||||
BIN
nx-dev/nx-dev/public/images/enterprise/graphs.jpg
Normal file
BIN
nx-dev/nx-dev/public/images/enterprise/graphs.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 290 KiB |
BIN
nx-dev/nx-dev/public/images/white-paper-ebook.avif
Normal file
BIN
nx-dev/nx-dev/public/images/white-paper-ebook.avif
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 52 KiB |
@ -60,7 +60,6 @@ module.exports = {
|
|||||||
require('@tailwindcss/aspect-ratio'),
|
require('@tailwindcss/aspect-ratio'),
|
||||||
require('@tailwindcss/typography'),
|
require('@tailwindcss/typography'),
|
||||||
require('@tailwindcss/forms'),
|
require('@tailwindcss/forms'),
|
||||||
require('@tailwindcss/line-clamp'),
|
|
||||||
FlipAnimation,
|
FlipAnimation,
|
||||||
],
|
],
|
||||||
};
|
};
|
||||||
|
|||||||
@ -4,9 +4,12 @@ export * from './lib/breadcrumbs';
|
|||||||
export * from './lib/button';
|
export * from './lib/button';
|
||||||
export * from './lib/champion-card';
|
export * from './lib/champion-card';
|
||||||
export * from './lib/champion-perks';
|
export * from './lib/champion-perks';
|
||||||
|
export * from './lib/default-layout';
|
||||||
export * from './lib/headers/header';
|
export * from './lib/headers/header';
|
||||||
export * from './lib/flip-card';
|
export * from './lib/flip-card';
|
||||||
|
export * from './lib/nx-agents-icon';
|
||||||
export * from './lib/nx-cloud-icon';
|
export * from './lib/nx-cloud-icon';
|
||||||
|
export * from './lib/nx-replay-icon';
|
||||||
export * from './lib/footer';
|
export * from './lib/footer';
|
||||||
export * from './lib/sidebar-container';
|
export * from './lib/sidebar-container';
|
||||||
export * from './lib/sidebar';
|
export * from './lib/sidebar';
|
||||||
|
|||||||
27
nx-dev/ui-common/src/lib/default-layout.tsx
Normal file
27
nx-dev/ui-common/src/lib/default-layout.tsx
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
import { Footer } from './footer';
|
||||||
|
import { Header } from './headers/header';
|
||||||
|
import { PropsWithChildren } from 'react';
|
||||||
|
|
||||||
|
export function DefaultLayout({ children }: PropsWithChildren): JSX.Element {
|
||||||
|
return (
|
||||||
|
<div className="dark:bg-slate-950">
|
||||||
|
<Header />
|
||||||
|
<div className="relative isolate pt-14">
|
||||||
|
<div
|
||||||
|
className="absolute inset-x-0 -top-40 -z-10 h-full transform-gpu overflow-hidden blur-3xl sm:-top-80"
|
||||||
|
aria-hidden="true"
|
||||||
|
>
|
||||||
|
<div
|
||||||
|
className="relative left-[calc(50%-11rem)] aspect-[1155/678] w-[46.125rem] -translate-x-1/2 rotate-[35deg] bg-gradient-to-tr from-[#9333ea] to-[#3b82f6] opacity-25 sm:left-[calc(70%-30rem)] sm:w-[92.1875rem] dark:from-[#3b82f6] dark:to-[#9333ea] dark:opacity-15"
|
||||||
|
style={{
|
||||||
|
clipPath:
|
||||||
|
'polygon(74.1% 44.1%, 100% 61.6%, 97.5% 26.9%, 95.5% 0.1%, 80.7% 2%, 72.5% 32.5%, 60.2% 62.4%, 52.4% 68.1%, 47.5% 58.3%, 45.2% 34.5%, 67.5% 76.7%, 0.1% 64.9%, 77.9% 100%, 27.6% 76.8%, 76.1% 97.7%, 84.1% 44.1%)',
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<main className="py-24 sm:py-32">{children}</main>
|
||||||
|
</div>
|
||||||
|
<Footer />
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
@ -5,6 +5,7 @@ import Link from 'next/link';
|
|||||||
export function Footer(): JSX.Element {
|
export function Footer(): JSX.Element {
|
||||||
const navigation = {
|
const navigation = {
|
||||||
solutions: [
|
solutions: [
|
||||||
|
{ name: 'Nx Enterprise', href: '/enterprise' },
|
||||||
{ name: 'Nx', href: 'https://nx.dev' },
|
{ name: 'Nx', href: 'https://nx.dev' },
|
||||||
{ name: 'Nx Cloud', href: 'https://nx.app/?utm_source=nx.dev' },
|
{ name: 'Nx Cloud', href: 'https://nx.app/?utm_source=nx.dev' },
|
||||||
],
|
],
|
||||||
@ -155,7 +156,7 @@ export function Footer(): JSX.Element {
|
|||||||
</h2>
|
</h2>
|
||||||
<div className="mx-auto max-w-7xl px-4 pt-12 opacity-50 transition-opacity hover:opacity-100 sm:px-6 lg:px-8 lg:pt-16">
|
<div className="mx-auto max-w-7xl px-4 pt-12 opacity-50 transition-opacity hover:opacity-100 sm:px-6 lg:px-8 lg:pt-16">
|
||||||
<div className="xl:grid xl:grid-cols-3 xl:gap-8">
|
<div className="xl:grid xl:grid-cols-3 xl:gap-8">
|
||||||
<div className="space-y-4 text-slate-700 dark:text-slate-300 xl:col-span-1">
|
<div className="space-y-4 text-slate-700 xl:col-span-1 dark:text-slate-300">
|
||||||
<svg
|
<svg
|
||||||
className="h-14 subpixel-antialiased"
|
className="h-14 subpixel-antialiased"
|
||||||
role="img"
|
role="img"
|
||||||
|
|||||||
@ -46,7 +46,7 @@ export function Header(): JSX.Element {
|
|||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="relative flex print:hidden">
|
<div className="relative inset-x-0 top-0 z-50 flex print:hidden">
|
||||||
{/*DESKTOP*/}
|
{/*DESKTOP*/}
|
||||||
<div className="mx-auto hidden w-full max-w-7xl items-center justify-between space-x-10 p-4 px-8 lg:flex">
|
<div className="mx-auto hidden w-full max-w-7xl items-center justify-between space-x-10 p-4 px-8 lg:flex">
|
||||||
{/*PRIMARY NAVIGATION*/}
|
{/*PRIMARY NAVIGATION*/}
|
||||||
@ -156,14 +156,14 @@ export function Header(): JSX.Element {
|
|||||||
<Link
|
<Link
|
||||||
href="/getting-started/intro"
|
href="/getting-started/intro"
|
||||||
title="Documentation"
|
title="Documentation"
|
||||||
className="hidden px-3 py-2 font-medium leading-tight hover:text-blue-500 dark:text-slate-200 dark:hover:text-sky-500 md:inline-flex"
|
className="hidden px-3 py-2 font-medium leading-tight hover:text-blue-500 md:inline-flex dark:text-slate-200 dark:hover:text-sky-500"
|
||||||
>
|
>
|
||||||
Documentation
|
Documentation
|
||||||
</Link>
|
</Link>
|
||||||
<Link
|
<Link
|
||||||
href="/blog"
|
href="/blog"
|
||||||
title="Blog"
|
title="Blog"
|
||||||
className="hidden px-3 py-2 font-medium leading-tight hover:text-blue-500 dark:text-slate-200 dark:hover:text-sky-500 md:inline-flex"
|
className="hidden px-3 py-2 font-medium leading-tight hover:text-blue-500 md:inline-flex dark:text-slate-200 dark:hover:text-sky-500"
|
||||||
>
|
>
|
||||||
Blog
|
Blog
|
||||||
</Link>
|
</Link>
|
||||||
@ -171,7 +171,7 @@ export function Header(): JSX.Element {
|
|||||||
href="https://nx.app/pricing"
|
href="https://nx.app/pricing"
|
||||||
title="Nx Cloud"
|
title="Nx Cloud"
|
||||||
target="_blank"
|
target="_blank"
|
||||||
className="hidden gap-2 px-3 py-2 font-medium leading-tight hover:text-blue-500 dark:text-slate-200 dark:hover:text-sky-500 md:inline-flex"
|
className="hidden gap-2 px-3 py-2 font-medium leading-tight hover:text-blue-500 md:inline-flex dark:text-slate-200 dark:hover:text-sky-500"
|
||||||
>
|
>
|
||||||
CI Pricing
|
CI Pricing
|
||||||
<ArrowUpRightIcon className="h-2 w-2 align-super" />
|
<ArrowUpRightIcon className="h-2 w-2 align-super" />
|
||||||
@ -225,7 +225,7 @@ export function Header(): JSX.Element {
|
|||||||
<div className="flex-shrink-0 text-sm">
|
<div className="flex-shrink-0 text-sm">
|
||||||
<nav className="flex items-center justify-center space-x-1">
|
<nav className="flex items-center justify-center space-x-1">
|
||||||
<Link
|
<Link
|
||||||
className="hidden cursor-pointer px-3 py-2 font-medium leading-tight hover:text-blue-500 dark:text-slate-200 dark:hover:text-sky-500 md:inline-flex"
|
className="hidden cursor-pointer px-3 py-2 font-medium leading-tight hover:text-blue-500 md:inline-flex dark:text-slate-200 dark:hover:text-sky-500"
|
||||||
title="Contact Us"
|
title="Contact Us"
|
||||||
href="/contact"
|
href="/contact"
|
||||||
>
|
>
|
||||||
|
|||||||
@ -110,7 +110,7 @@ export const plans: MenuItem[] = [
|
|||||||
name: 'Nx Enterprise',
|
name: 'Nx Enterprise',
|
||||||
description:
|
description:
|
||||||
'The ultimate Nx & Nx Cloud toolchain, tailored to your needs.',
|
'The ultimate Nx & Nx Cloud toolchain, tailored to your needs.',
|
||||||
href: 'https://nx.app/enterprise',
|
href: '/enterprise',
|
||||||
icon: null,
|
icon: null,
|
||||||
isNew: false,
|
isNew: false,
|
||||||
isHighlight: false,
|
isHighlight: false,
|
||||||
|
|||||||
@ -92,7 +92,7 @@ function SidebarSectionItems({ item }: { item: MenuItem }): JSX.Element {
|
|||||||
data-testid={`section-h5:${item.id}`}
|
data-testid={`section-h5:${item.id}`}
|
||||||
className={cx(
|
className={cx(
|
||||||
'flex py-2',
|
'flex py-2',
|
||||||
'text-sm font-semibold uppercase tracking-wide text-slate-800 dark:text-slate-200 lg:text-xs',
|
'text-sm font-semibold uppercase tracking-wide text-slate-800 lg:text-xs dark:text-slate-200',
|
||||||
item.disableCollapsible ? 'cursor-text' : 'cursor-pointer'
|
item.disableCollapsible ? 'cursor-text' : 'cursor-pointer'
|
||||||
)}
|
)}
|
||||||
onClick={handleCollapseToggle}
|
onClick={handleCollapseToggle}
|
||||||
@ -193,12 +193,12 @@ export function SidebarMobile({
|
|||||||
{ name: 'Launch Nx', href: '/launch-nx', current: false },
|
{ name: 'Launch Nx', href: '/launch-nx', current: false },
|
||||||
{
|
{
|
||||||
name: 'Contact',
|
name: 'Contact',
|
||||||
href: 'https://nx.app/enterprise?utm_source=nx.dev&utm_medium=header-menu',
|
href: '/contact',
|
||||||
current: false,
|
current: false,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'Go to app',
|
name: 'Go to app',
|
||||||
href: 'https://nx.app/?utm_source=nx.dev&utm_medium=header-menu',
|
href: 'https://cloud.nx.app',
|
||||||
current: false,
|
current: false,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
|||||||
@ -23,6 +23,7 @@ export function TalkToOurSalesTeam(): JSX.Element {
|
|||||||
<div className="mx-auto mt-6 grid w-full grid-cols-4 gap-2 md:grid-cols-2 lg:mt-12">
|
<div className="mx-auto mt-6 grid w-full grid-cols-4 gap-2 md:grid-cols-2 lg:mt-12">
|
||||||
<div className="col-span-1 flex h-14 items-center justify-center lg:h-28">
|
<div className="col-span-1 flex h-14 items-center justify-center lg:h-28">
|
||||||
<svg
|
<svg
|
||||||
|
aria-hidden="true"
|
||||||
role="img"
|
role="img"
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
fill="currentColor"
|
fill="currentColor"
|
||||||
@ -36,18 +37,20 @@ export function TalkToOurSalesTeam(): JSX.Element {
|
|||||||
|
|
||||||
<div className="col-span-1 flex h-14 items-center justify-center lg:h-28">
|
<div className="col-span-1 flex h-14 items-center justify-center lg:h-28">
|
||||||
<svg
|
<svg
|
||||||
|
aria-hidden="true"
|
||||||
role="img"
|
role="img"
|
||||||
viewBox="0 0 24 24"
|
viewBox="0 0 24 24"
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
fill="currentColor"
|
fill="currentColor"
|
||||||
className="h-14 w-14 text-[#FF9900]"
|
className="h-14 w-14 text-[#E40045]"
|
||||||
>
|
>
|
||||||
<title>AWS Amplify</title>
|
<title>MAN</title>
|
||||||
<path d="M5.223 17.905h6.76l1.731 3.047H0l4.815-8.344 2.018-3.494 1.733 3.002zm2.52-10.371L9.408 4.65l9.415 16.301h-3.334zm2.59-4.486h3.33L24 20.952h-3.334z" />
|
<path d="M10.979 14.943h2.05L15.46 18.7h-2.054l-.263-.409h-2.278l-.264.41H8.548zm1.025 1.568l-.458.711h.916l-.458-.712zM0 17.372C0 10.704 5.372 5.3 12 5.3s12 5.405 12 12.073c0 .449-.024.892-.072 1.328H22.58c.054-.435.082-.878.082-1.328 0-5.924-4.774-10.726-10.662-10.726-5.889 0-10.661 4.802-10.661 10.726 0 .45.027.893.08 1.328H.073A12.254 12.274 0 0 1 0 17.372zm2.237-2.43h1.83l1.22 1.228 1.22-1.227h1.831V18.7H6.363v-1.38l-1.075 1.082-1.076-1.082v1.38H2.237v-3.757zm13.42 0h1.927l2.17 1.62v-1.62h1.975V18.7h-1.942l-2.156-1.605V18.7h-1.975Z" />
|
||||||
</svg>
|
</svg>
|
||||||
</div>
|
</div>
|
||||||
<div className="col-span-1 flex h-14 items-center justify-center lg:h-28">
|
<div className="col-span-1 flex h-14 items-center justify-center lg:h-28">
|
||||||
<svg
|
<svg
|
||||||
|
aria-hidden="true"
|
||||||
role="img"
|
role="img"
|
||||||
viewBox="0 0 24 24"
|
viewBox="0 0 24 24"
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
@ -60,6 +63,7 @@ export function TalkToOurSalesTeam(): JSX.Element {
|
|||||||
</div>
|
</div>
|
||||||
<div className="col-span-1 flex h-14 items-center justify-center lg:h-28">
|
<div className="col-span-1 flex h-14 items-center justify-center lg:h-28">
|
||||||
<svg
|
<svg
|
||||||
|
aria-hidden="true"
|
||||||
role="img"
|
role="img"
|
||||||
viewBox="0 0 24 24"
|
viewBox="0 0 24 24"
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
@ -77,6 +81,7 @@ export function TalkToOurSalesTeam(): JSX.Element {
|
|||||||
</div>
|
</div>
|
||||||
<div className="col-span-1 flex h-14 items-center justify-center lg:h-28">
|
<div className="col-span-1 flex h-14 items-center justify-center lg:h-28">
|
||||||
<svg
|
<svg
|
||||||
|
aria-hidden="true"
|
||||||
role="img"
|
role="img"
|
||||||
viewBox="0 0 24 24"
|
viewBox="0 0 24 24"
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
@ -89,6 +94,7 @@ export function TalkToOurSalesTeam(): JSX.Element {
|
|||||||
</div>
|
</div>
|
||||||
<div className="col-span-1 flex h-14 items-center justify-center lg:h-28">
|
<div className="col-span-1 flex h-14 items-center justify-center lg:h-28">
|
||||||
<svg
|
<svg
|
||||||
|
aria-hidden="true"
|
||||||
role="img"
|
role="img"
|
||||||
viewBox="0 0 24 24"
|
viewBox="0 0 24 24"
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
@ -101,6 +107,7 @@ export function TalkToOurSalesTeam(): JSX.Element {
|
|||||||
</div>
|
</div>
|
||||||
<div className="col-span-1 flex h-14 items-center justify-center lg:h-28">
|
<div className="col-span-1 flex h-14 items-center justify-center lg:h-28">
|
||||||
<svg
|
<svg
|
||||||
|
aria-hidden="true"
|
||||||
role="img"
|
role="img"
|
||||||
viewBox="0 0 24 24"
|
viewBox="0 0 24 24"
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
@ -113,14 +120,15 @@ export function TalkToOurSalesTeam(): JSX.Element {
|
|||||||
</div>
|
</div>
|
||||||
<div className="col-span-1 flex h-14 items-center justify-center lg:h-28">
|
<div className="col-span-1 flex h-14 items-center justify-center lg:h-28">
|
||||||
<svg
|
<svg
|
||||||
|
aria-hidden="true"
|
||||||
role="img"
|
role="img"
|
||||||
viewBox="0 0 24 24"
|
viewBox="0 0 24 24"
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
fill="currentColor"
|
fill="currentColor"
|
||||||
className="h-20 w-20 text-[#1BA0D7]"
|
className="h-14 w-14 text-[#FFCD11]"
|
||||||
>
|
>
|
||||||
<title>Cisco</title>
|
<title>Caterpillar</title>
|
||||||
<path d="M16.331 18.171V17.06l-.022.01c-.25.121-.522.19-.801.203a1.186 1.186 0 01-.806-.237 1.038 1.038 0 01-.352-.498 1.21 1.21 0 01-.023-.667c.052-.225.178-.426.357-.569.16-.134.355-.218.562-.242a1.85 1.85 0 011.061.198l.024.013v-1.117l-.051-.014a2.862 2.862 0 00-1.011-.132 2.34 2.34 0 00-.903.206c-.287.132-.54.327-.739.571a2.221 2.221 0 00-.04 2.705c.295.378.709.645 1.175.756.491.12 1.006.102 1.487-.052l.082-.023M5.336 18.171V17.06l-.022.01c-.25.121-.522.19-.801.203a1.183 1.183 0 01-.806-.237 1.03 1.03 0 01-.351-.498 1.202 1.202 0 01-.024-.667c.052-.225.177-.426.357-.569.16-.134.355-.218.562-.242a1.85 1.85 0 011.061.198l.024.013v-1.117l-.051-.014a2.862 2.862 0 00-1.011-.132 2.344 2.344 0 00-.903.206 2.08 2.08 0 00-.74.571 2.224 2.224 0 00-.041 2.705 2.11 2.11 0 001.176.756c.491.12 1.005.102 1.487-.052l.083-.023M9.26 17.249l-.004.957.07.012c.22.041.441.069.664.085.195.019.391.022.587.012.187-.014.372-.049.551-.104.21-.06.405-.163.571-.305a1.16 1.16 0 00.333-.478 1.31 1.31 0 00-.007-.96 1.068 1.068 0 00-.298-.414 1.261 1.261 0 00-.438-.255l-.722-.268a.388.388 0 01-.197-.188.245.245 0 01.008-.219.382.382 0 01.154-.142.798.798 0 01.257-.074c.153-.022.308-.021.46.005.18.02.358.051.533.096l.038.008v-.883l-.069-.015a4.749 4.749 0 00-.543-.097 2.844 2.844 0 00-.714-.003c-.3.027-.585.143-.821.33-.16.126-.281.293-.351.484-.104.29-.105.608 0 .899.054.145.14.274.252.381.097.093.207.173.327.236.157.084.324.149.497.195.057.017.114.035.17.054l.085.031.024.01c.084.03.162.078.226.14.045.042.08.094.101.151a.325.325 0 01.001.161.339.339 0 01-.166.198.856.856 0 01-.275.086 2.032 2.032 0 01-.427.021 5.208 5.208 0 01-.557-.074 9.195 9.195 0 01-.287-.067l-.033-.006zm-2.475.995h1.05v-4.167h-1.05v4.167zm12.162-2.936a1.095 1.095 0 011.541.158 1.094 1.094 0 01-.157 1.541l-.017.014a1.096 1.096 0 01-1.367-1.713m-1.525.854a2.193 2.193 0 002.666 2.107 2.139 2.139 0 00.701-3.937 2.207 2.207 0 00-3.367 1.83M22.961 10.728a.52.52 0 001.039 0V9.573a.52.52 0 00-1.039 0v1.155M20.117 10.728a.522.522 0 001.041 0V8.139a.521.521 0 00-1.04 0v2.589M17.231 11.771a.521.521 0 001.039 0V6.17a.52.52 0 00-1.039 0v5.601M14.393 10.728a.521.521 0 001.04 0V8.139a.52.52 0 00-1.039 0v2.589M11.494 10.728a.522.522 0 001.039 0V9.573a.52.52 0 00-1.039 0v1.155M8.624 10.728a.52.52 0 001.039 0V8.139a.52.52 0 00-1.039 0v2.589M5.737 11.771a.52.52 0 001.039 0V6.17a.52.52 0 00-1.039 0v5.601M2.876 10.728a.522.522 0 001.04 0V8.139a.52.52 0 00-1.039 0v2.589M0 10.728a.521.521 0 001.039 0V9.573a.52.52 0 00-1.039 0v1.155" />
|
<path d="M11.901 11.554l.802-4.1.798 4.1zm2.869-6.52h-4.15L8.2 15.884l4.503-3.635 4.695 3.934zm-2.067 8.156l-7.509 6.072H19.95zM24 5.02v2.77h-2.066v11.45h-.882l-2.436-2.04V7.79h-2.057V5.02zM6.872 16.864c.548-.458.642-1.024.642-1.532V13.2h-2.98v2.894a.75.75 0 0 1-.748.751c-.414 0-.722-.336-.722-.75V7.893c0-.414.308-.75.722-.75a.75.75 0 0 1 .749.75v2.913H7.51V7.785c0-1.67-1.092-3.044-3.75-3.047-2.728 0-3.76 1.38-3.76 3.05v8.563c0 1.655 1.314 2.907 2.995 2.907h.922Z" />
|
||||||
</svg>
|
</svg>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
12
nx-dev/ui-enterprise/.babelrc
Normal file
12
nx-dev/ui-enterprise/.babelrc
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
{
|
||||||
|
"presets": [
|
||||||
|
[
|
||||||
|
"@nx/react/babel",
|
||||||
|
{
|
||||||
|
"runtime": "automatic",
|
||||||
|
"useBuiltIns": "usage"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"plugins": []
|
||||||
|
}
|
||||||
18
nx-dev/ui-enterprise/.eslintrc.json
Normal file
18
nx-dev/ui-enterprise/.eslintrc.json
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
{
|
||||||
|
"extends": ["plugin:@nx/react", "../../.eslintrc.json"],
|
||||||
|
"ignorePatterns": ["!**/*"],
|
||||||
|
"overrides": [
|
||||||
|
{
|
||||||
|
"files": ["*.ts", "*.tsx", "*.js", "*.jsx"],
|
||||||
|
"rules": {}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"files": ["*.ts", "*.tsx"],
|
||||||
|
"rules": {}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"files": ["*.js", "*.jsx"],
|
||||||
|
"rules": {}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
7
nx-dev/ui-enterprise/README.md
Normal file
7
nx-dev/ui-enterprise/README.md
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
# nx-dev-ui-enterprise
|
||||||
|
|
||||||
|
This library was generated with [Nx](https://nx.dev).
|
||||||
|
|
||||||
|
## Running unit tests
|
||||||
|
|
||||||
|
Run `nx test nx-dev-ui-enterprise` to execute the unit tests via [Jest](https://jestjs.io).
|
||||||
10
nx-dev/ui-enterprise/jest.config.ts
Normal file
10
nx-dev/ui-enterprise/jest.config.ts
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
/* eslint-disable */
|
||||||
|
export default {
|
||||||
|
displayName: 'nx-dev-ui-enterprise',
|
||||||
|
transform: {
|
||||||
|
'^.+\\.[tj]sx?$': 'babel-jest',
|
||||||
|
},
|
||||||
|
moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx'],
|
||||||
|
coverageDirectory: '../../coverage/nx-dev/ui-enterprise',
|
||||||
|
preset: '../../jest.preset.js',
|
||||||
|
};
|
||||||
11
nx-dev/ui-enterprise/project.json
Normal file
11
nx-dev/ui-enterprise/project.json
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"name": "nx-dev-ui-enterprise",
|
||||||
|
"$schema": "../../node_modules/nx/schemas/project-schema.json",
|
||||||
|
"sourceRoot": "nx-dev/ui-enterprise/src",
|
||||||
|
"projectType": "library",
|
||||||
|
"tags": ["scope:nx-dev", "type:ui"],
|
||||||
|
"targets": {
|
||||||
|
"lint": {},
|
||||||
|
"test": {}
|
||||||
|
}
|
||||||
|
}
|
||||||
10
nx-dev/ui-enterprise/src/index.ts
Normal file
10
nx-dev/ui-enterprise/src/index.ts
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
export * from './lib/call-to-action';
|
||||||
|
export * from './lib/download-case-study';
|
||||||
|
export * from './lib/download-ebook';
|
||||||
|
export * from './lib/enterprise-addons';
|
||||||
|
export * from './lib/hero';
|
||||||
|
export * from './lib/metrics-and-customers';
|
||||||
|
export * from './lib/scale-your-people';
|
||||||
|
export * from './lib/security';
|
||||||
|
export * from './lib/trusted-by';
|
||||||
|
export * from './lib/solve-your-ci';
|
||||||
77
nx-dev/ui-enterprise/src/lib/bento-grid.tsx
Normal file
77
nx-dev/ui-enterprise/src/lib/bento-grid.tsx
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
import Link from 'next/link';
|
||||||
|
import { ReactNode } from 'react';
|
||||||
|
import { cx } from '@nx/nx-dev/ui-primitives';
|
||||||
|
|
||||||
|
export const BentoGrid = ({
|
||||||
|
className,
|
||||||
|
children,
|
||||||
|
}: {
|
||||||
|
className?: string;
|
||||||
|
children?: ReactNode;
|
||||||
|
}) => {
|
||||||
|
return (
|
||||||
|
<div
|
||||||
|
className={cx(
|
||||||
|
'mx-auto grid max-w-7xl grid-cols-1 gap-4 md:auto-rows-[24rem] md:grid-cols-2 lg:grid-cols-3 ',
|
||||||
|
className
|
||||||
|
)}
|
||||||
|
>
|
||||||
|
{children}
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export const BentoGridItem = ({
|
||||||
|
className,
|
||||||
|
title = null,
|
||||||
|
description = null,
|
||||||
|
header,
|
||||||
|
url = null,
|
||||||
|
icon,
|
||||||
|
}: {
|
||||||
|
className?: string;
|
||||||
|
title?: string | ReactNode | null;
|
||||||
|
description?: string | ReactNode | null;
|
||||||
|
header: ReactNode;
|
||||||
|
icon?: ReactNode;
|
||||||
|
url?: string | null;
|
||||||
|
}) => {
|
||||||
|
return (
|
||||||
|
<div
|
||||||
|
className={cx(
|
||||||
|
'group/bento shadow-input relative row-span-1 flex flex-col justify-between space-y-4 overflow-hidden rounded-xl border border-slate-200 bg-white p-4 transition duration-200 dark:border-slate-800 dark:bg-slate-950 dark:shadow-none',
|
||||||
|
className
|
||||||
|
)}
|
||||||
|
>
|
||||||
|
{header}
|
||||||
|
<div className="mt-2 flex items-start">
|
||||||
|
<div className="grow">
|
||||||
|
<div className="flex items-center gap-2 font-sans font-bold text-slate-800 transition duration-200 group-hover/bento:text-blue-500 dark:text-slate-200 group-hover/bento:dark:text-sky-500">
|
||||||
|
{icon} {title}
|
||||||
|
</div>
|
||||||
|
{description && (
|
||||||
|
<div className="mt-2 font-sans text-sm font-normal text-slate-600 transition duration-200 group-hover/bento:text-blue-500 dark:text-slate-400 group-hover/bento:dark:text-sky-500">
|
||||||
|
{description}
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
{url ? (
|
||||||
|
<Link
|
||||||
|
href={url}
|
||||||
|
title="Learn more"
|
||||||
|
className="float-right text-sm font-medium transition duration-200 group-hover/bento:text-blue-500 group-hover/bento:dark:text-sky-500"
|
||||||
|
>
|
||||||
|
<span className="group absolute inset-0" />
|
||||||
|
|
||||||
|
<span
|
||||||
|
className="inline-block transition duration-200 group-hover/bento:translate-x-2"
|
||||||
|
aria-hidden="true"
|
||||||
|
>
|
||||||
|
→
|
||||||
|
</span>
|
||||||
|
</Link>
|
||||||
|
) : null}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
};
|
||||||
84
nx-dev/ui-enterprise/src/lib/call-to-action.tsx
Normal file
84
nx-dev/ui-enterprise/src/lib/call-to-action.tsx
Normal file
@ -0,0 +1,84 @@
|
|||||||
|
import Link from 'next/link';
|
||||||
|
|
||||||
|
export function CallToAction(): JSX.Element {
|
||||||
|
return (
|
||||||
|
<section className="relative isolate px-6 py-32 sm:py-40 lg:px-8">
|
||||||
|
<svg
|
||||||
|
className="absolute inset-0 -z-10 h-full w-full stroke-black/10 [mask-image:radial-gradient(100%_100%_at_top_right,white,transparent)] dark:stroke-white/10"
|
||||||
|
aria-hidden="true"
|
||||||
|
>
|
||||||
|
<defs>
|
||||||
|
<pattern
|
||||||
|
id="1d4240dd-898f-445f-932d-e2872fd12de3"
|
||||||
|
width={200}
|
||||||
|
height={200}
|
||||||
|
x="50%"
|
||||||
|
y={0}
|
||||||
|
patternUnits="userSpaceOnUse"
|
||||||
|
>
|
||||||
|
<path d="M.5 200V.5H200" fill="none" />
|
||||||
|
</pattern>
|
||||||
|
</defs>
|
||||||
|
<svg
|
||||||
|
x="50%"
|
||||||
|
y={0}
|
||||||
|
className="overflow-visible fill-slate-200/20 dark:fill-slate-800/20"
|
||||||
|
>
|
||||||
|
<path
|
||||||
|
d="M-200 0h201v201h-201Z M600 0h201v201h-201Z M-400 600h201v201h-201Z M200 800h201v201h-201Z"
|
||||||
|
strokeWidth={0}
|
||||||
|
/>
|
||||||
|
</svg>
|
||||||
|
<rect
|
||||||
|
width="100%"
|
||||||
|
height="100%"
|
||||||
|
strokeWidth={0}
|
||||||
|
fill="url(#1d4240dd-898f-445f-932d-e2872fd12de3)"
|
||||||
|
/>
|
||||||
|
</svg>
|
||||||
|
<div
|
||||||
|
className="absolute inset-x-0 top-10 -z-10 flex transform-gpu justify-center overflow-hidden blur-3xl"
|
||||||
|
aria-hidden="true"
|
||||||
|
>
|
||||||
|
<div
|
||||||
|
className="aspect-[1108/632] w-[69.25rem] flex-none bg-gradient-to-r from-[#80caff] to-[#4f46e5] opacity-20"
|
||||||
|
style={{
|
||||||
|
clipPath:
|
||||||
|
'polygon(73.6% 51.7%, 91.7% 11.8%, 100% 46.4%, 97.4% 82.2%, 92.5% 84.9%, 75.7% 64%, 55.3% 47.5%, 46.5% 49.4%, 45% 62.9%, 50.3% 87.2%, 21.3% 64.1%, 0.1% 100%, 5.4% 51.1%, 21.4% 63.9%, 58.9% 0.2%, 73.6% 51.7%)',
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div className="mx-auto max-w-2xl text-center">
|
||||||
|
<h2
|
||||||
|
id="cta"
|
||||||
|
className="text-3xl font-medium tracking-tight text-slate-950 sm:text-5xl dark:text-white"
|
||||||
|
>
|
||||||
|
Your organization's transformation
|
||||||
|
<br />
|
||||||
|
starts now
|
||||||
|
</h2>
|
||||||
|
<div className="mt-10 flex items-center justify-center gap-x-6">
|
||||||
|
<Link
|
||||||
|
href="/contact/sales"
|
||||||
|
className="rounded-md bg-slate-950 px-3.5 py-2.5 text-sm font-semibold text-slate-100 shadow-sm hover:bg-slate-800 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-white dark:bg-white dark:text-slate-900 dark:hover:bg-slate-100"
|
||||||
|
>
|
||||||
|
Contact us
|
||||||
|
</Link>
|
||||||
|
{/*<Link*/}
|
||||||
|
{/* href="/enterprise#talk"*/}
|
||||||
|
{/* title="Get in touch"*/}
|
||||||
|
{/* className="group text-sm font-semibold leading-6 text-slate-950 dark:text-white"*/}
|
||||||
|
{/*>*/}
|
||||||
|
{/* Contact us{' '}*/}
|
||||||
|
{/* <span*/}
|
||||||
|
{/* aria-hidden="true"*/}
|
||||||
|
{/* className="inline-block transition group-hover:translate-x-1"*/}
|
||||||
|
{/* >*/}
|
||||||
|
{/* →*/}
|
||||||
|
{/* </span>*/}
|
||||||
|
{/*</Link>*/}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
);
|
||||||
|
}
|
||||||
31
nx-dev/ui-enterprise/src/lib/download-case-study.tsx
Normal file
31
nx-dev/ui-enterprise/src/lib/download-case-study.tsx
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
import { ButtonLink } from '@nx/nx-dev/ui-common';
|
||||||
|
|
||||||
|
export function DownloadCaseStudy(): JSX.Element {
|
||||||
|
return (
|
||||||
|
<div className="border border-slate-100 bg-white shadow-lg sm:rounded-lg dark:border-slate-800/60 dark:bg-slate-950">
|
||||||
|
<div className="px-4 py-5 sm:p-6">
|
||||||
|
<h3 className="text-base font-semibold leading-6 text-slate-900 dark:text-slate-100">
|
||||||
|
Our case study
|
||||||
|
</h3>
|
||||||
|
<div className="mt-2 sm:flex sm:items-start sm:justify-between">
|
||||||
|
<div className="max-w-xl text-sm">
|
||||||
|
<p>
|
||||||
|
See how a $7B bank saved money, reduced CI times by 62% and
|
||||||
|
improved developer productivity.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<div className="mt-5 sm:ml-6 sm:mt-0 sm:flex sm:flex-shrink-0 sm:items-center">
|
||||||
|
<ButtonLink
|
||||||
|
href="https://go.nx.dev/bank-case-study"
|
||||||
|
title="Download the case study"
|
||||||
|
variant="primary"
|
||||||
|
size="small"
|
||||||
|
>
|
||||||
|
Download (pdf)
|
||||||
|
</ButtonLink>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
63
nx-dev/ui-enterprise/src/lib/download-ebook.tsx
Normal file
63
nx-dev/ui-enterprise/src/lib/download-ebook.tsx
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
import { ButtonLink } from '@nx/nx-dev/ui-common';
|
||||||
|
|
||||||
|
export function DownloadEbook(): JSX.Element {
|
||||||
|
return (
|
||||||
|
<div className="mx-auto max-w-7xl sm:px-6 lg:px-8">
|
||||||
|
<div className="relative isolate overflow-hidden bg-slate-50/70 px-6 pt-16 shadow-2xl ring-1 ring-slate-200 sm:rounded-3xl sm:px-16 md:pt-24 lg:flex lg:gap-x-20 lg:px-24 lg:pt-0 dark:border dark:border-slate-800/60 dark:bg-slate-950 dark:ring-slate-800/60">
|
||||||
|
<svg
|
||||||
|
viewBox="0 0 1024 1024"
|
||||||
|
className="absolute left-1/2 top-1/2 -z-10 h-[64rem] w-[64rem] -translate-y-1/2 [mask-image:radial-gradient(closest-side,white,transparent)] sm:left-full sm:-ml-80 lg:left-1/2 lg:ml-0 lg:-translate-x-1/2 lg:translate-y-0"
|
||||||
|
aria-hidden="true"
|
||||||
|
>
|
||||||
|
<circle
|
||||||
|
cx={512}
|
||||||
|
cy={512}
|
||||||
|
r={512}
|
||||||
|
fill="url(#759c1415-0410-454c-8f7c-9a820de03641)"
|
||||||
|
fillOpacity="0.7"
|
||||||
|
/>
|
||||||
|
<defs>
|
||||||
|
<radialGradient id="759c1415-0410-454c-8f7c-9a820de03641">
|
||||||
|
<stop stopColor="#7775D6" />
|
||||||
|
<stop offset={1} stopColor="#a855f7" />
|
||||||
|
</radialGradient>
|
||||||
|
</defs>
|
||||||
|
</svg>
|
||||||
|
<div className="mx-auto max-w-md text-center lg:mx-0 lg:flex-auto lg:py-12 lg:text-left">
|
||||||
|
<h2 className="text-3xl font-bold tracking-tight text-slate-950 sm:text-4xl dark:text-slate-50">
|
||||||
|
Download
|
||||||
|
<br />
|
||||||
|
Fast CI for monorepos
|
||||||
|
</h2>
|
||||||
|
<p className="mt-6 text-lg leading-8">
|
||||||
|
Discover how to scale your organization without feeling the pain of
|
||||||
|
CI, while having a better developer experience and fitting your
|
||||||
|
requirements.
|
||||||
|
</p>
|
||||||
|
<div className="mt-10 flex items-center justify-center gap-x-6 lg:justify-start">
|
||||||
|
<ButtonLink
|
||||||
|
href="https://go.nx.dev/fast-CI-whitepaper?utm_source=nx-dev&utm_medium=download-whitepaper-enterprise-banner"
|
||||||
|
title="Download Fast CI whitepaper"
|
||||||
|
target="_blank"
|
||||||
|
>
|
||||||
|
<span>Download</span>{' '}
|
||||||
|
<span className="text-xs italic">(pdf)</span>
|
||||||
|
</ButtonLink>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div className="relative mt-16 h-72 lg:mt-8">
|
||||||
|
<img
|
||||||
|
className="absolute left-0 top-0 w-[42rem] max-w-none rounded-md bg-white/5 ring-1 ring-white/10"
|
||||||
|
src="images/white-paper-ebook.avif"
|
||||||
|
alt="App screenshot"
|
||||||
|
width={1200}
|
||||||
|
height={675}
|
||||||
|
/>
|
||||||
|
<span className="absolute left-4 top-4 inline-flex items-center rounded-md bg-blue-50 px-2 py-1 text-xs font-medium text-blue-700 ring-1 ring-inset ring-blue-700/10">
|
||||||
|
ebook
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
79
nx-dev/ui-enterprise/src/lib/enterprise-addons.tsx
Normal file
79
nx-dev/ui-enterprise/src/lib/enterprise-addons.tsx
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
import { SectionHeading } from './temp/typography';
|
||||||
|
import {
|
||||||
|
BoltIcon,
|
||||||
|
ChevronDoubleRightIcon,
|
||||||
|
UsersIcon,
|
||||||
|
WrenchIcon,
|
||||||
|
} from '@heroicons/react/24/outline';
|
||||||
|
|
||||||
|
export function EnterpriseAddons(): JSX.Element {
|
||||||
|
return (
|
||||||
|
<section id="partner-with-the-nx-team">
|
||||||
|
<div className="mx-auto max-w-7xl px-6 lg:px-8">
|
||||||
|
<div className="mx-auto max-w-2xl text-center">
|
||||||
|
<SectionHeading as="h2" variant="title">
|
||||||
|
Partner with the Nx team
|
||||||
|
</SectionHeading>
|
||||||
|
</div>
|
||||||
|
<div className="mx-auto mt-16 max-w-2xl sm:mt-20 lg:mt-24 lg:max-w-none">
|
||||||
|
<dl className="grid max-w-xl grid-cols-1 gap-x-8 gap-y-16 lg:max-w-none lg:grid-cols-3">
|
||||||
|
<div className="flex flex-col">
|
||||||
|
<dt className="text-base font-semibold leading-7 text-black dark:text-white">
|
||||||
|
<div className="mb-6 flex h-10 w-10 items-center justify-center rounded-lg bg-black dark:bg-white">
|
||||||
|
<BoltIcon
|
||||||
|
className="h-6 w-6 text-white dark:text-black"
|
||||||
|
aria-hidden="true"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
Move fast, move together
|
||||||
|
</dt>
|
||||||
|
<dd className="mt-1 flex flex-auto flex-col text-base leading-7">
|
||||||
|
<p className="flex-auto">
|
||||||
|
We know Nx, you know your code. Together, we can build your
|
||||||
|
ultimate developer platform, tailored to your team.
|
||||||
|
</p>
|
||||||
|
</dd>
|
||||||
|
</div>
|
||||||
|
<div className="flex flex-col">
|
||||||
|
<dt className="text-base font-semibold leading-7 text-black dark:text-white">
|
||||||
|
<div className="mb-6 flex h-10 w-10 items-center justify-center rounded-lg bg-black dark:bg-white">
|
||||||
|
<UsersIcon
|
||||||
|
className="h-6 w-6 text-white dark:text-black"
|
||||||
|
aria-hidden="true"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
No trial and error necessary
|
||||||
|
</dt>
|
||||||
|
<dd className="mt-1 flex flex-auto flex-col text-base leading-7">
|
||||||
|
<p className="flex-auto">
|
||||||
|
With the help of the developers of Nx, you'll use Nx and Nx
|
||||||
|
Cloud to its full potential, the first time. No matter how
|
||||||
|
long you've been using Nx, we'll find ways to make it more
|
||||||
|
powerful.
|
||||||
|
</p>
|
||||||
|
</dd>
|
||||||
|
</div>
|
||||||
|
<div className="flex flex-col">
|
||||||
|
<dt className="text-base font-semibold leading-7 text-black dark:text-white">
|
||||||
|
<div className="mb-6 flex h-10 w-10 items-center justify-center rounded-lg bg-black dark:bg-white">
|
||||||
|
<ChevronDoubleRightIcon
|
||||||
|
className="h-6 w-6 text-white dark:text-black"
|
||||||
|
aria-hidden="true"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
Migrate to Nx & Nx Cloud
|
||||||
|
</dt>
|
||||||
|
<dd className="mt-1 flex flex-auto flex-col text-base leading-7">
|
||||||
|
<p className="flex-auto">
|
||||||
|
Wherever your team is at in their Nx journey, our experts will
|
||||||
|
make it easy to move ahead and capture the full value of Nx
|
||||||
|
and Nx Cloud.
|
||||||
|
</p>
|
||||||
|
</dd>
|
||||||
|
</div>
|
||||||
|
</dl>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
);
|
||||||
|
}
|
||||||
49
nx-dev/ui-enterprise/src/lib/hero.tsx
Normal file
49
nx-dev/ui-enterprise/src/lib/hero.tsx
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
import { SectionHeading } from './temp/typography';
|
||||||
|
import { ButtonLink } from '@nx/nx-dev/ui-common';
|
||||||
|
import Link from 'next/link';
|
||||||
|
|
||||||
|
export function Hero(): JSX.Element {
|
||||||
|
return (
|
||||||
|
<section>
|
||||||
|
<div className="relative mx-auto max-w-7xl px-6 lg:px-8">
|
||||||
|
<div className="mx-auto max-w-3xl text-center">
|
||||||
|
<SectionHeading id="fast-ci-for-monorepo" as="h1" variant="display">
|
||||||
|
Nx Enterprise
|
||||||
|
</SectionHeading>
|
||||||
|
<SectionHeading
|
||||||
|
as="p"
|
||||||
|
variant="subtitle"
|
||||||
|
className="mx-auto mt-6 max-w-3xl "
|
||||||
|
>
|
||||||
|
Accelerate your organization's journey to tighter collaboration,
|
||||||
|
better developer experience, and speed…lots of speed.
|
||||||
|
</SectionHeading>
|
||||||
|
<div className="mt-10 flex items-center justify-center gap-x-6">
|
||||||
|
<ButtonLink
|
||||||
|
href="/contact/sales"
|
||||||
|
title="Contact sales"
|
||||||
|
variant="primary"
|
||||||
|
size="default"
|
||||||
|
>
|
||||||
|
Contact sales
|
||||||
|
</ButtonLink>
|
||||||
|
|
||||||
|
{/*<Link*/}
|
||||||
|
{/* className="group text-sm font-semibold leading-6 text-slate-950 dark:text-white"*/}
|
||||||
|
{/* href="/contact/sales"*/}
|
||||||
|
{/* rel="nofollow"*/}
|
||||||
|
{/*>*/}
|
||||||
|
{/* Book a demo{' '}*/}
|
||||||
|
{/* <span*/}
|
||||||
|
{/* aria-hidden="true"*/}
|
||||||
|
{/* className="inline-block transition group-hover:translate-x-1"*/}
|
||||||
|
{/* >*/}
|
||||||
|
{/* →*/}
|
||||||
|
{/* </span>*/}
|
||||||
|
{/*</Link>*/}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
);
|
||||||
|
}
|
||||||
38
nx-dev/ui-enterprise/src/lib/logos/7eleven.tsx
Normal file
38
nx-dev/ui-enterprise/src/lib/logos/7eleven.tsx
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
import { FC, SVGProps } from 'react';
|
||||||
|
|
||||||
|
export const SevenElevenIcon: FC<SVGProps<SVGSVGElement>> = (props) => (
|
||||||
|
<svg
|
||||||
|
role="img"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
fill="currentColor"
|
||||||
|
{...props}
|
||||||
|
>
|
||||||
|
<title>7eleven</title>
|
||||||
|
<path d="M20 6.5V1c-5.4022 1.43-9.6333 5.64667-10.91778 11h5.77998C15.7311 9.54333 17.62 7.56333 20 6.5ZM8.66667 22.9633h5.66663v-5.5H8.66667ZM17.2422 1H3v5.5h7.5178c1.7-2.38333 4.0044-4.29 6.7244-5.5zM12.86 12.8433 12.4444 15.3l-.0377.44v.0367h-.0378V15.74l-.0378-.44-.4155-2.4567H10.82l.9067 3.8867h1.36l.9066-3.8867zm1.4356 3.8867h2.2666v-.77h-1.1711v-.8433h1.1711v-.7334h-1.1711V13.65h1.1711v-.8067h-2.2666zm-6.04449 0h2.26669v-.77H9.34667v-.8433h1.17113v-.7334H9.34667V13.65h1.17113v-.8067H8.25111ZM3 16.73h2.22889v-.77H4.09556v-.8433h1.13333v-.7334H4.09556V13.65h1.13333v-.8067H3Zm3.74-.8433h1.13333v.8433H5.64444v-3.8867H6.74Zm12.2022-3.0434c-.34 0-.5666.1467-.7933.33l-.1511.22-.0378-.0366.1889-.2934V12.88H16.94v3.8867h1.0956V14.31c0-.4033.2644-.5133.4533-.55.1889-.0367.4155.0733.4155.2933v2.7134H20V14.09c0-.8433-.3778-1.2467-1.0578-1.2467zM15.92 17.5c.34 0 .6422.2933.6422.6233 0 .33-.2644.6234-.6422.6234-.34 0-.6044-.2934-.6044-.6234 0-.33.2644-.6233.6044-.6233zm0 1.1c.2644 0 .4911-.22.4911-.4767 0-.2933-.2267-.4766-.4911-.4766-.2644 0-.4911.22-.4911.4766 0 .2934.2267.4767.4911.4767zm-.0756-.1467h-.1133v-.66h.2267c.1511 0 .2266.0734.2266.22 0 .11-.0755.1834-.1511.1834l.1511.2566h-.1511l-.1511-.2566h-.0378Zm.0756-.3666c.0756 0 .1133-.0367.1133-.11 0-.0734-.0377-.11-.1133-.11h-.0756v.1833h.0756Z" />
|
||||||
|
</svg>
|
||||||
|
);
|
||||||
|
|
||||||
|
export const SevenElevenColoredIcon: FC<SVGProps<SVGSVGElement>> = (props) => (
|
||||||
|
<svg
|
||||||
|
role="img"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
{...props}
|
||||||
|
fill="none"
|
||||||
|
>
|
||||||
|
<title>7eleven</title>
|
||||||
|
<path
|
||||||
|
fill="#147350"
|
||||||
|
d="M15.92 17.5c.34 0 .6422.2933.6422.6233 0 .33-.2644.6234-.6422.6234-.34 0-.6044-.2934-.6044-.6234 0-.33.2644-.6233.6044-.6233Zm0 1.1c.2644 0 .4911-.22.4911-.4767 0-.2933-.2267-.4766-.4911-.4766-.2644 0-.4911.22-.4911.4766 0 .2934.2267.4767.4911.4767Zm-.0756-.1467h-.1133v-.66h.2267c.1511 0 .2266.0734.2266.22 0 .11-.0755.1834-.1511.1834l.1511.2566h-.1511l-.1511-.2566h-.0378v.2566Zm.0756-.3666c.0756 0 .1133-.0367.1133-.11 0-.0734-.0377-.11-.1133-.11h-.0756v.1833h.0756v.0367ZM18.9422 12.8433c-.34 0-.5666.1467-.7933.33l-.1511.22-.0378-.0366.1889-.2934V12.88H16.94v3.8867h1.0956V14.31c0-.4033.2644-.5133.4533-.55.1889-.0367.4155.0733.4155.2933v2.7134H20V14.09c0-.8433-.3778-1.2467-1.0578-1.2467ZM6.74 15.8867h1.13333v.8433H5.64444v-3.8867H6.74v3.0434ZM3 16.73h2.22889v-.77H4.09556v-.8433h1.13333v-.7334H4.09556V13.65h1.13333v-.8067H3V16.73ZM8.25111 16.73h2.26669v-.77H9.34667v-.8433h1.17113v-.7334H9.34667V13.65h1.17113v-.8067H8.25111V16.73ZM14.2956 16.73h2.2666v-.77h-1.1711v-.8433h1.1711v-.7334h-1.1711V13.65h1.1711v-.8067h-2.2666V16.73ZM12.86 12.8433 12.4444 15.3l-.0377.44v.0367h-.0378V15.74l-.0378-.44-.4155-2.4567H10.82l.9067 3.8867h1.36l.9066-3.8867H12.86Z"
|
||||||
|
/>
|
||||||
|
<path
|
||||||
|
fill="#FF6C00"
|
||||||
|
d="M17.2422 1H3v5.5h7.5178c1.7-2.38333 4.0044-4.29 6.7244-5.5Z"
|
||||||
|
/>
|
||||||
|
<path
|
||||||
|
fill="#EB0F2A"
|
||||||
|
d="M8.66667 22.9633h5.66663v-5.5H8.66667v5.5ZM20 6.5V1c-5.4022 1.43-9.6333 5.64667-10.91778 11h5.77998C15.7311 9.54333 17.62 7.56333 20 6.5Z"
|
||||||
|
/>
|
||||||
|
</svg>
|
||||||
|
);
|
||||||
17
nx-dev/ui-enterprise/src/lib/logos/american-airlines.tsx
Normal file
17
nx-dev/ui-enterprise/src/lib/logos/american-airlines.tsx
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
import { FC, SVGProps } from 'react';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Use `#0071CE` for a colored version.
|
||||||
|
*/
|
||||||
|
export const AmericanAirlinesIcon: FC<SVGProps<SVGSVGElement>> = (props) => (
|
||||||
|
<svg
|
||||||
|
role="img"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
fill="currentColor"
|
||||||
|
{...props}
|
||||||
|
>
|
||||||
|
<title>American Airlines</title>
|
||||||
|
<path d="M0 .244h3.264c1.377 0 1.942.563 2.499 1.116.637.58 2.57 3.196 6.657 8.303H7.997c-1.809 0-2.38-.308-3.08-1.375zm10.424 17.072l-2.427-4.013c-.292-.455-.372-.854-.372-1.318 0-.51.217-.79 1.053-1.233.973-.466 2.933-.67 4.954-.67 3.283 0 4.07 1.055 4.405 2.192 0 0-.464-.185-1.554-.185-3.459 0-6.223 1.68-6.223 4.221 0 .534.164 1.006.164 1.006zm4.936-3.417c-2.547.089-5.032 1.869-4.936 3.416l2.7 4.486c.836 1.344 2.215 1.955 3.932 1.955H24l-8.13-9.852a5.55 5.55 0 0 0-.51-.005Z" />
|
||||||
|
</svg>
|
||||||
|
);
|
||||||
17
nx-dev/ui-enterprise/src/lib/logos/aws-amplify.tsx
Normal file
17
nx-dev/ui-enterprise/src/lib/logos/aws-amplify.tsx
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
import { FC, SVGProps } from 'react';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Use `#FF9900` for a colored version.
|
||||||
|
*/
|
||||||
|
export const AwsAmplifyIcon: FC<SVGProps<SVGSVGElement>> = (props) => (
|
||||||
|
<svg
|
||||||
|
role="img"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
fill="currentColor"
|
||||||
|
{...props}
|
||||||
|
>
|
||||||
|
<title>AWS Amplify</title>
|
||||||
|
<path d="M5.223 17.905h6.76l1.731 3.047H0l4.815-8.344 2.018-3.494 1.733 3.002zm2.52-10.371L9.408 4.65l9.415 16.301h-3.334zm2.59-4.486h3.33L24 20.952h-3.334z" />
|
||||||
|
</svg>
|
||||||
|
);
|
||||||
34
nx-dev/ui-enterprise/src/lib/logos/bill.tsx
Normal file
34
nx-dev/ui-enterprise/src/lib/logos/bill.tsx
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
import { FC, SVGProps } from 'react';
|
||||||
|
|
||||||
|
export const BillIcon: FC<SVGProps<SVGSVGElement>> = (props) => (
|
||||||
|
<svg
|
||||||
|
role="img"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
fill="currentColor"
|
||||||
|
{...props}
|
||||||
|
>
|
||||||
|
<title>bill</title>
|
||||||
|
<path d="M11.8195 9.04933c.8127 0 1.4715-.68261 1.4715-1.52466C13.291 6.68262 12.6322 6 11.8195 6c-.8128 0-1.4716.68262-1.4716 1.52467s.6588 1.52466 1.4716 1.52466zM6.81983 15.778c0 .3762-.31493.685-.67095.685H4.22621v-4.0196h1.92267c.35824 0 .67095.3052.67095.6849zM4.2412 10.2533V6.26878H2V18.6942h4.69013c1.31946 0 2.38841-1.1629 2.38841-2.5983v-3.2443c0-1.4354-1.06895-2.5983-2.38841-2.5983zm16.6149-3.9896h-2.2525v12.4318h2.2525zm-3.9475 0H14.656v12.4318h2.2526zm-3.9493 3.9868h-2.2525v8.4449h2.2525zm-8.11129-.68905V6.36853l3.01048 2.41372c1.04256.84687 1.2403 2.07955 1.21589 2.04875-.67876-.87376-1.58524-1.25717-2.20927-1.26744Z" />
|
||||||
|
</svg>
|
||||||
|
);
|
||||||
|
|
||||||
|
export const BillColoredIcon: FC<SVGProps<SVGSVGElement>> = (props) => (
|
||||||
|
<svg
|
||||||
|
role="img"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
{...props}
|
||||||
|
fill="none"
|
||||||
|
>
|
||||||
|
<title>bill</title>
|
||||||
|
<path
|
||||||
|
fill="#FF9C6C"
|
||||||
|
d="M4.84801 9.56145V6.36853l3.01048 2.41372c1.04256.84687 1.2403 2.07955 1.21589 2.04875-.67876-.87376-1.58524-1.25717-2.20927-1.26744l-2.0171-.00211Z"
|
||||||
|
/>
|
||||||
|
<path
|
||||||
|
fill="#FF5A0A"
|
||||||
|
d="M12.9593 10.2505h-2.2525v8.4449h2.2525v-8.4449ZM16.9086 6.2637H14.656v12.4318h2.2526V6.2637ZM20.8561 6.2637h-2.2525v12.4318h2.2525V6.2637ZM6.81983 15.778c0 .3762-.31493.685-.67095.685H4.22621v-4.0196h1.92267c.35824 0 .67095.3052.67095.6849v2.6497ZM4.2412 10.2533V6.26878H2V18.6942h4.69013c1.31946 0 2.38841-1.1629 2.38841-2.5983v-3.2443c0-1.4354-1.06895-2.5983-2.38841-2.5983H4.2412ZM11.8195 9.04933c.8127 0 1.4715-.68261 1.4715-1.52466C13.291 6.68262 12.6322 6 11.8195 6c-.8128 0-1.4716.68262-1.4716 1.52467s.6588 1.52466 1.4716 1.52466Z"
|
||||||
|
/>
|
||||||
|
</svg>
|
||||||
|
);
|
||||||
38
nx-dev/ui-enterprise/src/lib/logos/capital-one.tsx
Normal file
38
nx-dev/ui-enterprise/src/lib/logos/capital-one.tsx
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
import { FC, SVGProps } from 'react';
|
||||||
|
|
||||||
|
export const CapitalOneIcon: FC<SVGProps<SVGSVGElement>> = (props) => (
|
||||||
|
<svg
|
||||||
|
role="img"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
fill="currentColor"
|
||||||
|
{...props}
|
||||||
|
>
|
||||||
|
<title>Capital One</title>
|
||||||
|
<path d="M15.55 13.706c.015.487.326.883.728.883.778 0 1.109-.954 1.089-1.596-.015-.487-.331-.888-.733-.888-.678.01-1.11.958-1.084 1.6zm-.411-.025c-.03-.834.622-1.682 1.566-1.682.632 0 1.044.422 1.069 1.07.03.877-.578 1.68-1.566 1.68-.633 0-1.05-.42-1.07-1.069zm-8.96-.221a.6.6 0 0 1-.13.035c-.055.01-.15.03-.296.05a.47.47 0 0 0-.206.065c-.035.03-.06.06-.065.1-.01.045.005.076.045.106.04.025.1.04.19.04.066 0 .131-.01.197-.03.065-.02.12-.05.16-.085.03-.025.05-.06.07-.1.005-.026.02-.086.035-.181zm.824-.507a2.388 2.388 0 0 1-.035.26l-.141.784c-.01.07.015.125.08.16l-.005.03h-.798l-.005-.2a1.59 1.59 0 0 1-.382.165 1.47 1.47 0 0 1-.381.045c-.256 0-.407-.025-.507-.115-.105-.09-.156-.15-.15-.281a.44.44 0 0 1 .095-.231.567.567 0 0 1 .211-.146c.08-.04.18-.065.321-.09a6.58 6.58 0 0 1 .598-.065c.135-.01.22-.045.26-.06.056-.02.076-.046.086-.091.015-.08-.01-.126-.115-.146-.286-.055-.823.035-1.104.106l.15-.407a7.014 7.014 0 0 1 1.07-.085c.57-.01.757.156.752.367zm2.308 1.23.276-1.562h.763l-.276 1.561h-.763Zm.317-1.923c.025-.13.226-.23.451-.23.226 0 .392.105.372.23-.025.13-.226.231-.452.231-.23.005-.391-.1-.371-.23zm3.427 1.205c-.035.01-.08.025-.13.035-.055.015-.15.03-.296.05a.47.47 0 0 0-.206.065.149.149 0 0 0-.065.1c-.01.046.01.08.045.106.04.025.1.04.19.04.066 0 .131-.01.197-.03.065-.02.12-.05.16-.085.03-.025.05-.06.07-.1.005-.026.02-.086.035-.181zm.824-.512a1.652 1.652 0 0 1-.04.26l-.141.784c-.01.07.015.125.075.16l-.005.026h-.798l-.005-.2c-.115.07-.256.13-.381.165a1.307 1.307 0 0 1-.382.045c-.256 0-.401-.026-.507-.116-.105-.09-.155-.15-.15-.28a.425.425 0 0 1 .095-.232.635.635 0 0 1 .211-.15c.08-.04.181-.065.316-.09.141-.02.337-.046.603-.066a.9.9 0 0 0 .26-.055c.056-.02.076-.045.086-.09.015-.08-.01-.126-.115-.146-.287-.056-.824.035-1.104.105l.15-.407c.366-.055.708-.09 1.069-.09.582.006.768.166.763.377zm-9.305.668a2.73 2.73 0 0 1-.633.07c-.366 0-.652-.181-.637-.512.01-.221.27-.688.938-.688.211 0 .372.035.593.161l.095-.542a1.763 1.763 0 0 0-.753-.126c-.873.01-1.706.407-1.812 1.21-.105.818.894 1.023 1.335 1.023.256 0 .522-.01.773-.035l.1-.562zm6.193-1.004.055-.317.798-.175-.085.492h.391l-.075.316h-.377l-.23 1.255s-.769-.005-.773 0l.23-1.25h-.29l.06-.316h.296zm3.885 1.565h-.778l.391-2.173.758.02zm-6.35-1.194c-.1 0-.19.03-.27.09-.08.06-.13.15-.15.267-.026.135-.01.235.044.296.056.06.13.09.236.09.07 0 .14-.01.196-.04a.38.38 0 0 0 .15-.13.54.54 0 0 0 .086-.206c.02-.126.005-.216-.056-.276a.322.322 0 0 0-.235-.091Zm-1.39 1.731.372-2.088h.668l-.05.267c.06-.08.15-.146.28-.201.13-.055.277-.09.432-.09.176 0 .281.01.412.075.13.07.22.165.27.296a.8.8 0 0 1 .036.427.934.934 0 0 1-.377.612c-.205.15-.386.19-.652.19-.096 0-.17-.01-.236-.025a.421.421 0 0 1-.15-.06.823.823 0 0 1-.126-.115l-.125.718h-.753v-.006zm13.843-1.54c-.005-.126-.065-.211-.196-.211-.311 0-.648.612-.703.858.512.005.909-.301.899-.647zm.065.963.06.04c-.15.312-.461.563-.828.563-.296 0-.542-.2-.557-.572-.025-.668.602-1.29 1.114-1.29.221 0 .422.096.432.331.02.532-.728.693-1.22.703a.714.714 0 0 0-.02.196c.01.22.14.407.417.407.246-.001.481-.192.602-.377zm-3.057-.978c.056-.005.14-.015.176-.015.055 0 .11.01.11.065 0 .035-.06.27-.07.326l-.12.522c-.05.216-.1.442-.146.617h.306l.17-.833c.523-.547.728-.723.849-.723.055 0 .095.03.095.096.006.096-.055.316-.075.376l-.176.607c-.04.136-.07.261-.065.347.005.135.085.19.206.19.22 0 .386-.23.527-.461l-.04-.075c-.056.09-.191.29-.296.29-.036 0-.066-.02-.066-.075-.005-.07.026-.176.045-.246l.196-.708c.05-.195.076-.32.076-.386-.005-.13-.08-.196-.2-.196-.201 0-.468.146-1.035.798h-.01l.07-.316c.041-.176.076-.356.116-.482-.196.07-.477.15-.647.181l.004.1zm3.328-.567a.27.27 0 0 1 .276-.271c.146 0 .276.115.276.27a.27.27 0 0 1-.276.271.265.265 0 0 1-.276-.27zm.276.23a.22.22 0 0 0 .22-.226.218.218 0 0 0-.22-.226.218.218 0 0 0-.22.226c0 .131.095.226.22.226zm-.055-.07h-.05v-.311h.12c.076 0 .11.025.11.09 0 .056-.034.08-.08.085l.091.136h-.055l-.08-.136h-.056zm.055-.175c.04 0 .076-.006.076-.05 0-.04-.036-.046-.07-.046h-.066v.096zm-6.33 1.49c-.798.567-1.741 1.16-2.755 1.777l-.04.025a.027.027 0 0 0-.005.04c.01.016.03.016.04.006l.035-.02c.858-.447 1.847-.984 2.84-1.531l.016-.01a1.414 1.414 0 0 1-.13-.287zm5.225-4.23c-1.255-1.386-9.325-.142-12.758.611l-.08.016a.038.038 0 0 0-.026.035c.006.015.02.025.036.025l.08-.015c2.845-.507 8.758-1.21 10.033.055.386.387.296.883-.156 1.466.24.155.417.402.492.707 1.757-1.17 2.941-2.283 2.379-2.9z" />
|
||||||
|
</svg>
|
||||||
|
);
|
||||||
|
|
||||||
|
export const CapitalOneColoredIcon: FC<SVGProps<SVGSVGElement>> = (props) => (
|
||||||
|
<svg
|
||||||
|
role="img"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
{...props}
|
||||||
|
fill="none"
|
||||||
|
>
|
||||||
|
<title>7eleven</title>
|
||||||
|
<path
|
||||||
|
fill="#147350"
|
||||||
|
d="M15.92 17.5c.34 0 .6422.2933.6422.6233 0 .33-.2644.6234-.6422.6234-.34 0-.6044-.2934-.6044-.6234 0-.33.2644-.6233.6044-.6233Zm0 1.1c.2644 0 .4911-.22.4911-.4767 0-.2933-.2267-.4766-.4911-.4766-.2644 0-.4911.22-.4911.4766 0 .2934.2267.4767.4911.4767Zm-.0756-.1467h-.1133v-.66h.2267c.1511 0 .2266.0734.2266.22 0 .11-.0755.1834-.1511.1834l.1511.2566h-.1511l-.1511-.2566h-.0378v.2566Zm.0756-.3666c.0756 0 .1133-.0367.1133-.11 0-.0734-.0377-.11-.1133-.11h-.0756v.1833h.0756v.0367ZM18.9422 12.8433c-.34 0-.5666.1467-.7933.33l-.1511.22-.0378-.0366.1889-.2934V12.88H16.94v3.8867h1.0956V14.31c0-.4033.2644-.5133.4533-.55.1889-.0367.4155.0733.4155.2933v2.7134H20V14.09c0-.8433-.3778-1.2467-1.0578-1.2467ZM6.74 15.8867h1.13333v.8433H5.64444v-3.8867H6.74v3.0434ZM3 16.73h2.22889v-.77H4.09556v-.8433h1.13333v-.7334H4.09556V13.65h1.13333v-.8067H3V16.73ZM8.25111 16.73h2.26669v-.77H9.34667v-.8433h1.17113v-.7334H9.34667V13.65h1.17113v-.8067H8.25111V16.73ZM14.2956 16.73h2.2666v-.77h-1.1711v-.8433h1.1711v-.7334h-1.1711V13.65h1.1711v-.8067h-2.2666V16.73ZM12.86 12.8433 12.4444 15.3l-.0377.44v.0367h-.0378V15.74l-.0378-.44-.4155-2.4567H10.82l.9067 3.8867h1.36l.9066-3.8867H12.86Z"
|
||||||
|
/>
|
||||||
|
<path
|
||||||
|
fill="#FF6C00"
|
||||||
|
d="M17.2422 1H3v5.5h7.5178c1.7-2.38333 4.0044-4.29 6.7244-5.5Z"
|
||||||
|
/>
|
||||||
|
<path
|
||||||
|
fill="#EB0F2A"
|
||||||
|
d="M8.66667 22.9633h5.66663v-5.5H8.66667v5.5ZM20 6.5V1c-5.4022 1.43-9.6333 5.64667-10.91778 11h5.77998C15.7311 9.54333 17.62 7.56333 20 6.5Z"
|
||||||
|
/>
|
||||||
|
</svg>
|
||||||
|
);
|
||||||
17
nx-dev/ui-enterprise/src/lib/logos/caterpillar.tsx
Normal file
17
nx-dev/ui-enterprise/src/lib/logos/caterpillar.tsx
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
import { FC, SVGProps } from 'react';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Use `#FFCD11` for a colored version.
|
||||||
|
*/
|
||||||
|
export const CaterpillarIcon: FC<SVGProps<SVGSVGElement>> = (props) => (
|
||||||
|
<svg
|
||||||
|
role="img"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
fill="currentColor"
|
||||||
|
{...props}
|
||||||
|
>
|
||||||
|
<title>Caterpillar</title>
|
||||||
|
<path d="M11.901 11.554l.802-4.1.798 4.1zm2.869-6.52h-4.15L8.2 15.884l4.503-3.635 4.695 3.934zm-2.067 8.156l-7.509 6.072H19.95zM24 5.02v2.77h-2.066v11.45h-.882l-2.436-2.04V7.79h-2.057V5.02zM6.872 16.864c.548-.458.642-1.024.642-1.532V13.2h-2.98v2.894a.75.75 0 0 1-.748.751c-.414 0-.722-.336-.722-.75V7.893c0-.414.308-.75.722-.75a.75.75 0 0 1 .749.75v2.913H7.51V7.785c0-1.67-1.092-3.044-3.75-3.047-2.728 0-3.76 1.38-3.76 3.05v8.563c0 1.655 1.314 2.907 2.995 2.907h.922Z" />
|
||||||
|
</svg>
|
||||||
|
);
|
||||||
17
nx-dev/ui-enterprise/src/lib/logos/cisco.tsx
Normal file
17
nx-dev/ui-enterprise/src/lib/logos/cisco.tsx
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
import { FC, SVGProps } from 'react';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Use `#1BA0D7` for a colored version.
|
||||||
|
*/
|
||||||
|
export const CiscoIcon: FC<SVGProps<SVGSVGElement>> = (props) => (
|
||||||
|
<svg
|
||||||
|
role="img"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
fill="currentColor"
|
||||||
|
{...props}
|
||||||
|
>
|
||||||
|
<title>Cisco</title>
|
||||||
|
<path d="M16.331 18.171V17.06l-.022.01c-.25.121-.522.19-.801.203a1.186 1.186 0 01-.806-.237 1.038 1.038 0 01-.352-.498 1.21 1.21 0 01-.023-.667c.052-.225.178-.426.357-.569.16-.134.355-.218.562-.242a1.85 1.85 0 011.061.198l.024.013v-1.117l-.051-.014a2.862 2.862 0 00-1.011-.132 2.34 2.34 0 00-.903.206c-.287.132-.54.327-.739.571a2.221 2.221 0 00-.04 2.705c.295.378.709.645 1.175.756.491.12 1.006.102 1.487-.052l.082-.023M5.336 18.171V17.06l-.022.01c-.25.121-.522.19-.801.203a1.183 1.183 0 01-.806-.237 1.03 1.03 0 01-.351-.498 1.202 1.202 0 01-.024-.667c.052-.225.177-.426.357-.569.16-.134.355-.218.562-.242a1.85 1.85 0 011.061.198l.024.013v-1.117l-.051-.014a2.862 2.862 0 00-1.011-.132 2.344 2.344 0 00-.903.206 2.08 2.08 0 00-.74.571 2.224 2.224 0 00-.041 2.705 2.11 2.11 0 001.176.756c.491.12 1.005.102 1.487-.052l.083-.023M9.26 17.249l-.004.957.07.012c.22.041.441.069.664.085.195.019.391.022.587.012.187-.014.372-.049.551-.104.21-.06.405-.163.571-.305a1.16 1.16 0 00.333-.478 1.31 1.31 0 00-.007-.96 1.068 1.068 0 00-.298-.414 1.261 1.261 0 00-.438-.255l-.722-.268a.388.388 0 01-.197-.188.245.245 0 01.008-.219.382.382 0 01.154-.142.798.798 0 01.257-.074c.153-.022.308-.021.46.005.18.02.358.051.533.096l.038.008v-.883l-.069-.015a4.749 4.749 0 00-.543-.097 2.844 2.844 0 00-.714-.003c-.3.027-.585.143-.821.33-.16.126-.281.293-.351.484-.104.29-.105.608 0 .899.054.145.14.274.252.381.097.093.207.173.327.236.157.084.324.149.497.195.057.017.114.035.17.054l.085.031.024.01c.084.03.162.078.226.14.045.042.08.094.101.151a.325.325 0 01.001.161.339.339 0 01-.166.198.856.856 0 01-.275.086 2.032 2.032 0 01-.427.021 5.208 5.208 0 01-.557-.074 9.195 9.195 0 01-.287-.067l-.033-.006zm-2.475.995h1.05v-4.167h-1.05v4.167zm12.162-2.936a1.095 1.095 0 011.541.158 1.094 1.094 0 01-.157 1.541l-.017.014a1.096 1.096 0 01-1.367-1.713m-1.525.854a2.193 2.193 0 002.666 2.107 2.139 2.139 0 00.701-3.937 2.207 2.207 0 00-3.367 1.83M22.961 10.728a.52.52 0 001.039 0V9.573a.52.52 0 00-1.039 0v1.155M20.117 10.728a.522.522 0 001.041 0V8.139a.521.521 0 00-1.04 0v2.589M17.231 11.771a.521.521 0 001.039 0V6.17a.52.52 0 00-1.039 0v5.601M14.393 10.728a.521.521 0 001.04 0V8.139a.52.52 0 00-1.039 0v2.589M11.494 10.728a.522.522 0 001.039 0V9.573a.52.52 0 00-1.039 0v1.155M8.624 10.728a.52.52 0 001.039 0V8.139a.52.52 0 00-1.039 0v2.589M5.737 11.771a.52.52 0 001.039 0V6.17a.52.52 0 00-1.039 0v5.601M2.876 10.728a.522.522 0 001.04 0V8.139a.52.52 0 00-1.039 0v2.589M0 10.728a.521.521 0 001.039 0V9.573a.52.52 0 00-1.039 0v1.155" />
|
||||||
|
</svg>
|
||||||
|
);
|
||||||
17
nx-dev/ui-enterprise/src/lib/logos/fico.tsx
Normal file
17
nx-dev/ui-enterprise/src/lib/logos/fico.tsx
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
import { FC, SVGProps } from 'react';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Use `#0A6DE6` for a colored version.
|
||||||
|
*/
|
||||||
|
export const FicoIcon: FC<SVGProps<SVGSVGElement>> = (props) => (
|
||||||
|
<svg
|
||||||
|
role="img"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
fill="currentColor"
|
||||||
|
{...props}
|
||||||
|
>
|
||||||
|
<title>Fico</title>
|
||||||
|
<path d="M19.0319 14.4832c-.0002-.0378.0047-.0755.0144-.1121.0093-.0348.023-.0684.0407-.0999.0171-.0303.0379-.0584.0621-.0836.0242-.0246.0515-.0461.0813-.0639.0459-.027.0969-.0445.1499-.0516.053-.007.1069-.0033.1584.0109.0334.0093.0654.023.0951.0407.0297.0176.0569.0391.0807.0639.0246.025.0457.0531.0627.0836.0178.0315.0315.0651.0407.0999.0193.0738.0193.1512 0 .2249-.0092.0349-.0229.0684-.0407.0999-.0168.0309-.0379.0592-.0627.0843-.0242.0246-.0513.0463-.0807.0646-.0297.0177-.0617.0314-.0951.0407-.0694.02-.1431.02-.2124 0-.0337-.0092-.0659-.0229-.0959-.0407-.0295-.0185-.0568-.0401-.0813-.0646-.0244-.0253-.0452-.0536-.0621-.0843-.0177-.0315-.0314-.065-.0407-.0999-.0097-.0368-.0146-.0747-.0144-.1128zm.0648 0c-.0001.0466.009.0928.0269.136.0156.041.039.0788.0689.1114.0304.0313.0667.0565.1069.0741.0412.0175.0855.0265.1303.0265.0448 0 .0892-.009.1303-.0265.0399-.0178.0759-.043.1062-.0741.0299-.0326.0533-.0704.069-.1114.0178-.0432.0269-.0894.0269-.136.0002-.0466-.0089-.0928-.0269-.1359-.0157-.0409-.0391-.0784-.069-.1108-.0301-.0311-.0662-.0561-.1062-.0733-.0411-.0175-.0855-.0266-.1303-.0266-.0448 0-.0891.0091-.1303.0266-.0403.017-.0767.042-.1069.0733-.0298.0324-.0532.0699-.0689.1108-.018.0431-.0272.0893-.0269.1359zm.253.0422v.1875h-.08v-.4743h.1559c.0253-.0004.0506.0025.0751.0088.0206.0052.04.0142.0573.0265.0158.0115.0283.0267.0365.0442.0086.0197.0128.041.0124.0625.0004.0217-.0058.043-.0179.0612-.0141.0186-.0325.0335-.0538.0435.0118.0048.0228.0114.0324.0197.0084.0075.0157.0162.0214.0258.0053.0103.0092.0213.0117.0326.0023.0121.0034.0244.0035.0367v.0306c-.0008.0131-.0008.0263 0 .0394.0011.0107.0037.0212.0076.0313v.0088h-.0814c-.0023-.0059-.0039-.0121-.0048-.0183V14.6008c.0017-.0213-.005-.0425-.0187-.0591-.018-.0144-.041-.0213-.0641-.019zm0-.0714h.0876c.0116-.0001.0232-.0017.0345-.0047.0102-.003.02-.0073.0289-.013.0082-.0053.0148-.0125.0193-.021.0055-.0088.0082-.019.0076-.0292.0001-.0133-.0025-.0265-.0076-.0388-.0032-.0092-.0092-.0173-.0172-.0231-.0092-.0065-.0198-.0107-.031-.0122-.0159-.003-.0321-.0044-.0483-.0041h-.0758zm-2.53-5.45086c-.5944 0-1.1754.17371-1.6696.49917-.4942.32545-.8793.78799-1.1067 1.32919-.2275.5412-.2869 1.1368-.1709 1.7113.116.5745.4023 1.1022.8226 1.5164.4203.4141.9558.6961 1.5388.8103.5829.1142 1.1872.0555 1.7362-.1688.5491-.2242 1.0184-.6039 1.3485-1.0911.3301-.4871.5062-1.0598.5061-1.6455 0-.3889-.0777-.774-.2287-1.1333-.1511-.3593-.3724-.6857-.6515-.96067-.279-.27495-.6103-.49304-.9749-.6418-.3646-.14876-.7553-.22528-1.1499-.22519Zm0 4.71966c-.353.0002-.6981-.1029-.9916-.2961-.2936-.1931-.5224-.4678-.6576-.7891-.1352-.3214-.1706-.675-.1018-1.0162.0688-.3412.2387-.6547.4882-.9007.2496-.2461.5675-.4136.9137-.4815.3462-.068.705-.0332 1.0312.0999.3261.1331.6048.3585.8009.6478.1962.2892.3008.6293.3008.9772 0 .4663-.1879.9135-.5224 1.2434-.3345.3298-.7882.5151-1.2614.5153zm-3.3484-.4866c-.2525.2359-.5695.3938-.912.4543-.3425.0604-.6954.0209-1.0153-.1139-.3199-.1347-.5929-.3588-.7852-.6445-.1923-.2857-.2956-.6207-.2972-.9635-.0016-.3429.0987-.6788.2884-.9662.1897-.2874.4606-.5139.7792-.6515.3187-.1376.6713-.1803 1.0143-.1228.343.0574.6614.2125.9161.4461.1479-.3824.3618-.73672.6323-1.04722-.4448-.34217-.9784-.554-1.5396-.61124-.5613-.05725-1.1275.0424-1.634.28753-.5065.24514-.9327.62586-1.22986 1.09863-.29718.4727-.45329 1.0183-.45048 1.5744.00279.5561.16441 1.1002.46632 1.57.30192.4698.73192.8463 1.24082 1.0865.509.2401 1.0762.3342 1.6369.2715.5606-.0627 1.092-.2798 1.5333-.6263-.2736-.3084-.4914-.6608-.644-1.0418zM8.7949 9.1309H7.54752v5.7377H8.7949Zm-1.63628 1.2294V9.1309H3v5.7377h1.24807v-2.049h2.49476v-1.2293H4.24807v-1.23z" />
|
||||||
|
</svg>
|
||||||
|
);
|
||||||
14
nx-dev/ui-enterprise/src/lib/logos/hilton.tsx
Normal file
14
nx-dev/ui-enterprise/src/lib/logos/hilton.tsx
Normal file
File diff suppressed because one or more lines are too long
17
nx-dev/ui-enterprise/src/lib/logos/man.tsx
Normal file
17
nx-dev/ui-enterprise/src/lib/logos/man.tsx
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
import { FC, SVGProps } from 'react';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Use `#E40045` for a colored version.
|
||||||
|
*/
|
||||||
|
export const ManIcon: FC<SVGProps<SVGSVGElement>> = (props) => (
|
||||||
|
<svg
|
||||||
|
role="img"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
fill="currentColor"
|
||||||
|
{...props}
|
||||||
|
>
|
||||||
|
<title>MAN</title>
|
||||||
|
<path d="M10.979 14.943h2.05L15.46 18.7h-2.054l-.263-.409h-2.278l-.264.41H8.548zm1.025 1.568l-.458.711h.916l-.458-.712zM0 17.372C0 10.704 5.372 5.3 12 5.3s12 5.405 12 12.073c0 .449-.024.892-.072 1.328H22.58c.054-.435.082-.878.082-1.328 0-5.924-4.774-10.726-10.662-10.726-5.889 0-10.661 4.802-10.661 10.726 0 .45.027.893.08 1.328H.073A12.254 12.274 0 0 1 0 17.372zm2.237-2.43h1.83l1.22 1.228 1.22-1.227h1.831V18.7H6.363v-1.38l-1.075 1.082-1.076-1.082v1.38H2.237v-3.757zm13.42 0h1.927l2.17 1.62v-1.62h1.975V18.7h-1.942l-2.156-1.605V18.7h-1.975Z" />
|
||||||
|
</svg>
|
||||||
|
);
|
||||||
17
nx-dev/ui-enterprise/src/lib/logos/react-query.tsx
Normal file
17
nx-dev/ui-enterprise/src/lib/logos/react-query.tsx
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
import { FC, SVGProps } from 'react';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Use `#FF4154` for a colored version.
|
||||||
|
*/
|
||||||
|
export const ReactQueryIcon: FC<SVGProps<SVGSVGElement>> = (props) => (
|
||||||
|
<svg
|
||||||
|
role="img"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
fill="currentColor"
|
||||||
|
{...props}
|
||||||
|
>
|
||||||
|
<title>React Query</title>
|
||||||
|
<path d="M6.9297 13.6875c.164-.0938.375-.0352.4687.1328l.0625.1055c.4805.8515.9805 1.6601 1.5 2.4258.6133.9023 1.3047 1.8164 2.0743 2.7421a.3455.3455 0 0 1-.0391.4844l-.0742.0664c-2.543 2.2227-4.1914 2.664-4.9532 1.332-.746-1.3046-.4765-3.6718.8086-7.1093a.3437.3437 0 0 1 .1524-.1797ZM17.75 16.3008c.1836-.0313.3594.086.3945.2695l.0196.1016c.6289 3.2851.1875 4.9297-1.3243 4.9297-1.4804 0-3.3593-1.4024-5.6484-4.2032a.3271.3271 0 0 1-.0742-.2226c0-.1875.1562-.3399.3437-.3399h.1211a32.9838 32.9838 0 0 0 2.8086-.0976c1.0703-.086 2.1914-.2305 3.3594-.4375zm.871-6.9766a.3528.3528 0 0 1 .4454-.211l.1016.0352c3.2617 1.1094 4.5039 2.332 3.7187 3.6641-.7656 1.3047-2.9922 2.254-6.6836 2.8477-.082.0117-.168-.004-.2383-.047-.168-.0976-.2265-.3085-.125-.4765l.0625-.1054c.504-.8438.957-1.6836 1.3672-2.5235.4766-.9883.9297-2.0508 1.3516-3.1836zM7.797 8.3398c.082-.0117.168.004.2383.047.168.0976.2265.3085.125.4765l-.0625.1054a34.0882 34.0882 0 0 0-1.3672 2.5235c-.4766.9883-.9297 2.0508-1.3516 3.1836a.3528.3528 0 0 1-.4453.211l-.1016-.0352c-3.2617-1.1094-4.5039-2.332-3.7187-3.6641.7656-1.3047 2.9922-2.254 6.6836-2.8477Zm5.2812-3.9843c2.543-2.2227 4.1914-2.664 4.9532-1.332.746 1.3046.4765 3.6718-.8086 7.1093a.3436.3436 0 0 1-.1524.1797c-.164.0938-.375.0352-.4687-.1328l-.0625-.1055c-.4805-.8515-.9805-1.6601-1.5-2.4258-.6133-.9023-1.3047-1.8164-2.0743-2.7421a.3455.3455 0 0 1 .0391-.4844Zm-5.793-2.082c1.4805 0 3.3633 1.4023 5.6485 4.203a.3488.3488 0 0 1 .0781.2188c-.0039.1914-.1562.3438-.3476.3438l-.1172-.004a34.5835 34.5835 0 0 0-2.8086.1016c-1.0742.086-2.1953.2305-3.3633.4375a.343.343 0 0 1-.3945-.2734l-.0196-.0977c-.629-3.2851-.1876-4.9297 1.3242-4.9297Zm2.8711 5.8124h3.6875a.638.638 0 0 1 .5508.3164l1.8477 3.2188a.6437.6437 0 0 1 0 .6289l-1.8477 3.2227a.638.638 0 0 1-.5507.3164h-3.6875c-.2266 0-.4375-.1211-.547-.3164L7.7579 12.25a.6437.6437 0 0 1 0-.629l1.8516-3.2187c.1093-.1953.3203-.3164.5468-.3164Zm3.2305.793a.638.638 0 0 1 .5508.3164l1.3906 2.4258a.6437.6437 0 0 1 0 .6289l-1.3906 2.4297a.638.638 0 0 1-.5508.3164h-2.7734c-.2266 0-.4375-.1211-.5469-.3164L8.672 12.25a.6437.6437 0 0 1 0-.629l1.3945-2.4257c.1094-.1953.3203-.3164.5469-.3164Zm-.4922.8672h-1.789c-.2266 0-.4336.1172-.547.3164l-.8983 1.5586a.6437.6437 0 0 0 0 .6289l.8984 1.5625a.6317.6317 0 0 0 .5469.3164h1.789a.6317.6317 0 0 0 .547-.3164l.8983-1.5625a.6437.6437 0 0 0 0-.629l-.8984-1.5585c-.1133-.1992-.3203-.3164-.5469-.3164Zm-.4765.8281c.2265 0 .4375.1211.5468.3164l.422.7305c.1132.1953.1132.4375 0 .6289l-.422.7344c-.1093.1953-.3203.3164-.5468.3164h-.836a.6317.6317 0 0 1-.5468-.3164l-.422-.7344c-.1132-.1914-.1132-.4336 0-.629l.422-.7304a.6317.6317 0 0 1 .5468-.3164zm-.418.8164a.548.548 0 0 0-.4727.2735c-.0976.168-.0976.375 0 .5468a.5444.5444 0 0 0 .4727.2696.5444.5444 0 0 0 .4727-.2696c.0976-.1718.0976-.3789 0-.5468A.548.548 0 0 0 12 11.3906Zm-4.4219.5469h.9805M18.9805 7.75c.3906-1.8945.4765-3.3438.2226-4.3984-.1484-.629-.4218-1.1368-.8398-1.5078-.4414-.3907-1-.582-1.625-.582-1.0352 0-2.1211.4726-3.2813 1.3671-.4726.3633-.9648.8047-1.4726 1.3164-.043-.0508-.086-.1015-.1367-.1445-1.4454-1.2852-2.6602-2.082-3.6993-2.3906-.6171-.1836-1.1953-.1993-1.7226-.0235-.5586.1875-1.004.5742-1.3164 1.1172-.5156.8945-.6524 2.0742-.461 3.5274.0782.5898.2149 1.2343.4024 1.9335a1.1187 1.1187 0 0 0-.2149.047C3.008 8.621 1.711 9.2694.9258 10.0155c-.4649.4414-.7695.9375-.8828 1.4805-.1133.5781 0 1.1562.3125 1.6992.5156.8945 1.4648 1.5977 2.8164 2.1563.543.2226 1.1562.4257 1.8437.6093a1.0227 1.0227 0 0 0-.0703.2266c-.3906 1.8906-.4765 3.3438-.2226 4.3945.1484.629.4257 1.1407.8398 1.5078.4414.3907 1 .582 1.625.582 1.0352 0 2.121-.4726 3.2813-1.3632.4765-.3711.9726-.8164 1.4882-1.336a1.2 1.2 0 0 0 .1953.2266c1.4454 1.2852 2.6602 2.082 3.6993 2.3906.6172.1836 1.1953.1993 1.7226.0235.5586-.1875 1.004-.5742 1.3164-1.1172.5157-.8945.6524-2.0742.461-3.5273-.082-.6133-.2227-1.2813-.4258-2.0118a1.2248 1.2248 0 0 0 .2383-.0468c1.828-.6094 3.125-1.2578 3.9101-2.004.4649-.4413.7696-.9374.8828-1.4804.1133-.5781 0-1.1563-.3125-1.6992-.5156-.8946-1.4648-1.5977-2.8164-2.1563-.5586-.2304-1.1953-.4414-1.9062-.625a.8647.8647 0 0 0 .0586-.1953z" />
|
||||||
|
</svg>
|
||||||
|
);
|
||||||
17
nx-dev/ui-enterprise/src/lib/logos/redwood-js.tsx
Normal file
17
nx-dev/ui-enterprise/src/lib/logos/redwood-js.tsx
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
import { FC, SVGProps } from 'react';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Use `#BF4722` for a colored version.
|
||||||
|
*/
|
||||||
|
export const RedwoodJsIcon: FC<SVGProps<SVGSVGElement>> = (props) => (
|
||||||
|
<svg
|
||||||
|
role="img"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
fill="currentColor"
|
||||||
|
{...props}
|
||||||
|
>
|
||||||
|
<title>RedwoodJS</title>
|
||||||
|
<path d="M6.989 3.47l4.66 3.181c.105.07.228.108.354.111a.634.634 0 0 0 .354-.111l4.664-3.192a.637.637 0 0 0-.089-1.087L12.272.065a.64.64 0 0 0-.56 0L7.067 2.372a.636.636 0 0 0-.078 1.098zm6.597 4.179c0 .211.104.408.276.528l3.736 2.553a.628.628 0 0 0 .776-.05l3.134-2.803a.637.637 0 0 0-.028-.973l-2.992-2.393a.635.635 0 0 0-.751-.029l-3.874 2.65a.644.644 0 0 0-.277.517zm-9.291 3.474a.64.64 0 0 1 .209.538.625.625 0 0 1-.315.485l-2.231 1.337a.63.63 0 0 1-.718-.049.64.64 0 0 1-.21-.693l.825-2.596a.63.63 0 0 1 1.023-.281l1.417 1.259zm12.1.271l-4.033-2.76a.634.634 0 0 0-.708 0l-4.033 2.76a.646.646 0 0 0-.276.485.664.664 0 0 0 .212.521l4.03 3.605a.635.635 0 0 0 .842 0l4.03-3.605a.647.647 0 0 0-.064-1.006zm-10.758-.713l-3.13-2.803a.648.648 0 0 1-.213-.503.626.626 0 0 1 .237-.481l2.992-2.407a.641.641 0 0 1 .754-.029l3.87 2.65a.639.639 0 0 1 0 1.07l-3.732 2.553a.633.633 0 0 1-.778-.05zm16.073 4.026l-3.187-1.908a.627.627 0 0 0-.744.071l-3.895 3.477a.644.644 0 0 0-.204.587.636.636 0 0 0 .388.483l5.404 2.19a.634.634 0 0 0 .815-.332l1.675-3.752a.64.64 0 0 0-.252-.816zm.442-4.561l.825 2.596h-.007a.635.635 0 0 1-.927.742l-2.234-1.337a.623.623 0 0 1-.305-.485.631.631 0 0 1 .209-.538l1.416-1.262a.63.63 0 0 1 1.023.284zm-11.82 6.786a.637.637 0 0 0-.202-.585L6.235 12.87a.627.627 0 0 0-.744-.071l-3.187 1.908a.648.648 0 0 0-.255.813l1.678 3.752a.632.632 0 0 0 .814.332l5.4-2.19a.637.637 0 0 0 .391-.482zm1.912 1.07l4.334 1.755c.212.091.358.29.382.521a.635.635 0 0 1-.269.596l-4.338 3.013A.625.625 0 0 1 12 24a.64.64 0 0 1-.354-.114l-4.334-3.013a.635.635 0 0 1 .124-1.117l4.334-1.755a.642.642 0 0 1 .474.001z" />
|
||||||
|
</svg>
|
||||||
|
);
|
||||||
52
nx-dev/ui-enterprise/src/lib/logos/royal-bank-of-canada.tsx
Normal file
52
nx-dev/ui-enterprise/src/lib/logos/royal-bank-of-canada.tsx
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
import { FC, SVGProps } from 'react';
|
||||||
|
|
||||||
|
export const RoyalBankOfCanadaIcon: FC<SVGProps<SVGSVGElement>> = (props) => (
|
||||||
|
<svg
|
||||||
|
role="img"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
fill="currentColor"
|
||||||
|
{...props}
|
||||||
|
>
|
||||||
|
<title>Royal Bank of Canada</title>
|
||||||
|
<path d="M3 0v21.047c0 .805.318 1.235.953 1.504C6.388 23.517 9.247 24 12 24c2.753 0 5.612-.483 8.047-1.45.635-.268.953-.698.953-1.503V0H3zm3.793 1.092h1.361v.914h5.233v1.4c0 .216 0 .537-.053.752 0 .162-.053.379-.314.594-.157.108-.417.16-.784.16-.314 0-.629.001-.943-.053-.576-.053-.785.215-.785.43v.162c.261-.215.68-.376 1.1-.215.784.27.993.269 1.412-.054l.052.107a.622.622 0 0 0-.047.057c-.043.057-.102.135-.214.213h.367V7.71l1.203-.752h3.35l1.62.861c.21.108.263.269.315.43 0 .161 0 .377-.105.484-.053.108-.418.754-.627 1.077.627.7.941 1.561.941 2.476s-.315 2.045-1.361 2.906c.418.108.732.377.994.754l-.26 1.184h-.158c0-.969-.837-1.184-1.727-1.184H14.59c.105.485.105 1.024.053 1.508h-.157c-.261-2.1-1.413-3.176-3.035-4.307v.97h-.158c-.419-1.024-1.359-1.939-2.3-2.585l-.735-.537v1.022h-.156c-.367-1.023-1.1-1.83-2.041-2.745-1.047-.968-1.518-1.562-1.727-2.261a3.143 3.143 0 0 1-.209-1.184c0-.807.365-1.56.889-1.83v.377c-.262.323-.366.753-.366 1.184 0 .376.105.861.262 1.238.628 1.184 2.616 2.637 3.924 3.498l.531.361c3.57 2.43 4.314 2.939 4.963 4.377.016.05.036.102.059.16.052.136.114.297.15.485.576-.108 2.67-.43 3.088-.485a.618.618 0 0 0 .107-.02c.066-.014.146-.032.207-.032.367-.216.628-.54.89-.916l-1.518-.108c-.037.113-.099.226-.15.32-.023.041-.044.077-.06.11h-.103c.026-.08.038-.162.05-.242.014-.081.027-.162.054-.242l-.418-.053v-.108l.418-.054c.104-.43.105-.862.105-1.239l-1.937-.107v.592h-.104c-.026-.108-.04-.201-.053-.295a2.869 2.869 0 0 0-.052-.297h-.418v-.107h.418a13.494 13.494 0 0 1-.053-1.454l-1.15-.054.156.324c.261.7.21 1.506.105 1.883h-.156c0-.43-.158-.968-.315-1.291-.314-.754-.993-1.454-2.197-2.207v.968h-.158c-.366-1.291-1.36-1.99-2.824-2.744-1.204-.646-1.57-1.4-1.518-2.584l.418.268c.105 1.076.942 1.723 1.78 1.723a6.44 6.44 0 0 0 1.464-.16c.68-.162 1.256-.27 1.78-.055v-.647h-.418c-.157.108-.42.27-.838.27-.471 0-1.362-.269-1.362-1.291 0-.915.733-1.024 1.309-1.024h1.047a.437.437 0 0 0 .254-.074l.06-.033a.41.41 0 0 0 .104-.215v-1.13H9.775v1.13L8.73 3.566v-.27h.522v-.429h-1.83v-.914h-.629c-.366 0-.733.215-.785.7 0 .484.158.86.629.86h.105v.538h-.105c-.785 0-1.412-.592-1.412-1.453 0-.862.678-1.506 1.568-1.506zm4.584 4.521-.012.002c-.214.013-.38.098-.543.266.157.054.314.107.471.107.262-.054.419-.214.523-.322a1.685 1.685 0 0 0-.427-.053h-.012zm.545 2.098c-.312 0-.739.094-1.098.174-.183.04-.349.077-.472.095.05.035.15.098.275.176.26.164.627.396.875.578l1.309-.806c-.262-.162-.575-.217-.89-.217zm2.826 0L12.34 9.166c.47.323.838.645 1.152 1.021.628-.968 1.778-1.56 2.877-1.56.262 0 .68.054 1.047.162l.209-.27-.262-.376.053-.108.785.43-.158.539c.105.054.263.162.42.27l.523-.862-1.308-.701h-2.93zM4.439 8.789l.21.16a4.281 4.281 0 0 0-.106.809c.052 1.076.89 1.775 3.35 3.336 2.616 1.668 3.347 2.692 3.609 3.984h-.156c-.576-1.292-1.727-1.992-3.035-2.746v1.023h-.157c-.366-.915-1.046-1.775-1.988-2.529-.89-.646-1.257-1.024-1.623-1.562a2.585 2.585 0 0 1-.418-1.399c0-.377.105-.753.314-1.076zm11.512.537c-.157.377-.262.808-.367 1.238l1.361-.052a5.594 5.594 0 0 0-.47-1.186h-.524zm1.412.215c.105.323.21.647.262.916l.941-.055c-.314-.376-.732-.646-1.203-.861zm-2.25.11c-.523.269-.89.591-1.256 1.076l1.1-.055c.052-.538.104-.86.156-1.022zm.367 1.29c-.093.432-.146.863-.193 1.256l-.017.145 1.937-.11c0-.43-.053-.805-.158-1.236l-1.569-.055zm2.25.108c.053.43.051.807.051 1.183l1.57-.107a3.306 3.306 0 0 0-.314-1.021l-1.307-.055zm-.052 1.668c-.053.43-.158.809-.315 1.185l1.727-.214c.105-.27.209-.593.209-.862l-1.621-.11zM5.25 17.455h2.4c1.1 0 1.55.351 1.55 1.104 0 .652-.5 1.001-1.1 1.152l1.55 2.008h-1.2l-1.4-1.907H6.7v1.907h-1v-3.31c0-.352-.05-.604-.2-.755-.05-.05-.15-.1-.25-.15v-.049zm4.85 0h2.25c1.35 0 1.55.502 1.55.953 0 .502-.4.852-.85.903.6.05 1.15.35 1.1 1.103 0 .903-.7 1.305-1.75 1.305h-1.85v-3.412c0-.301-.05-.502-.2-.653-.05-.05-.2-.15-.25-.15v-.049zm7.35 0c.9 0 1.3.25 1.3.25l-.2.703h-.05s-.1-.2-.35-.351c-.15-.1-.35-.2-.75-.1-.75 0-1.3.401-1.3 1.705 0 1.405.9 1.705 1.55 1.705.75 0 1.1-.351 1.1-.351v.502s-.4.3-1.4.3c-1.05 0-2.3-.45-2.3-2.156 0-1.505 1-2.207 2.4-2.207zm-10.7.4v1.606h.5c.6 0 .95-.352.95-.854 0-.601-.3-.752-.85-.752h-.6zm4.75 0v1.305h.45c.5 0 .95-.151.95-.703 0-.502-.3-.602-.8-.602h-.6zm.05 1.706v1.755h.6c.65 0 1.05-.3 1.1-.902 0-.602-.3-.853-1.1-.853h-.6z" />
|
||||||
|
</svg>
|
||||||
|
);
|
||||||
|
|
||||||
|
export const RoyalBankOfCanadaColoredIcon: FC<SVGProps<SVGSVGElement>> = (
|
||||||
|
props
|
||||||
|
) => (
|
||||||
|
<svg
|
||||||
|
role="img"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
{...props}
|
||||||
|
fill="none"
|
||||||
|
>
|
||||||
|
<title>Royal Bank of Canada</title>
|
||||||
|
<g clipPath="url(#a)">
|
||||||
|
<path
|
||||||
|
fill="#0059B3"
|
||||||
|
d="M21 21.047c0 .8053-.3176 1.2349-.9529 1.5033C17.6118 23.5168 14.7529 24 12 24c-2.75294 0-5.61176-.4832-8.04706-1.4497C3.31765 22.2819 3 21.8523 3 21.047V0h18v21.047Z"
|
||||||
|
/>
|
||||||
|
{/*<path*/}
|
||||||
|
{/* stroke="#fff"*/}
|
||||||
|
{/* strokeWidth="1"*/}
|
||||||
|
{/* d="M21 21.047c0 .8053-.3176 1.2349-.9529 1.5033C17.6118 23.5168 14.7529 24 12 24c-2.75294 0-5.61176-.4832-8.04706-1.4497C3.31765 22.2819 3 21.8523 3 21.047V0h18v21.047Z"*/}
|
||||||
|
{/*/>*/}
|
||||||
|
<path
|
||||||
|
fill="#FFDF01"
|
||||||
|
d="M7.82724 12.7368c-2.49834-1.5263-3.34883-2.2105-3.40199-3.26312 0-.21052.05316-.57894.10631-.78947l-.21262-.15789C4.10631 8.84211 4 9.21053 4 9.57895c0 .57895.21262 1.05265.42525 1.36845.37209.5263.74419.8947 1.64784 1.5263.95681.7368 1.64784 1.5789 2.01993 2.4737h.15947v-1c1.3289.7368 2.49831 1.421 3.08301 2.6842h.1595c-.2658-1.2632-1.01-2.2632-3.66776-3.8948Zm7.33556-3.36838c-.5316.26316-.9037.57895-1.2758 1.05268l1.1163-.0527c.0532-.52629.1063-.84208.1595-.99998Zm4.0399 3.94738c.1063-.2632.2126-.579.2126-.8421l-1.6479-.1053c-.0531.4211-.1594.7895-.3189 1.1579l1.7542-.2105Zm-1.7542-4.05264c.1063.31579.2126.63158.2658.89474l.9568-.0526c-.3189-.36846-.7442-.63162-1.2226-.84214Zm-.4252.94734c-.1064-.36839-.2658-.78945-.4784-1.15787h-.5316c-.1595.36842-.2658.78948-.3721 1.21057l1.3821-.0527Zm.7973.5263c.0532.4211.0532.7895.0532 1.1579l1.5946-.1052c-.0531-.3684-.1594-.6842-.3189-1l-1.3289-.0527Zm-.5316 1.1579c0-.421-.0531-.7894-.1594-1.2105l-1.5947-.0526c-.1063.4737-.1595.9473-.2126 1.3684l1.9667-.1053Zm.2127-3.36838.2126-.26316-.2658-.36842.0532-.10527.7973.42106-.1595.52631c.1063.05263.2658.1579.4253.26316l.5315-.8421-1.3289-.68422h-2.9767l-2.4452 1.42106c.4784.31579.8505.63158 1.1694 1 .6379-.94737 1.8074-1.52632 2.9236-1.52632.2658 0 .6911.05263 1.0632.1579Zm-6.0067-.05264 1.3289-.78947c-.2658-.15789-.5847-.21053-.9036-.21053-.4784 0-1.2226.21053-1.5947.26316.1594.10527.7973.47369 1.1694.73684Zm.319-3c-.4785-.10526-.7442-.05263-1.01.21053.1595.05263.3189.10526.4784.10526.2658-.05263.4252-.21052.5316-.31579Zm7.5481 11.21052h-.1594c0-.9474-.8505-1.1579-1.7542-1.1579h-2.8173c.1063.4737.1063 1 .0532 1.4737h-.1595c-.2658-2.0526-1.4352-3.1053-3.083-4.2105v.9473h-.1595c-.4253-1-1.38207-1.8947-2.33888-2.5263l-.74418-.5263v1h-.15947c-.3721-1-1.11628-1.78946-2.07309-2.6842-1.06313-.94737-1.54153-1.52632-1.75416-2.21053C4.05316 6.36842 4 6.05263 4 5.63158c0-.78948.37209-1.52632.90365-1.78947v.36842c-.26578.31579-.37209.73684-.37209 1.15789 0 .36842.10631.84211.26578 1.21053C5.43522 7.73684 7.45515 9.1579 8.78405 10c4.09305 2.6842 4.89035 3.1579 5.58135 4.6316.0532.1579.1595.3684.2127.6316.5847-.1053 2.7109-.4211 3.1362-.4737.0531 0 .2126-.0527.3189-.0527.3721-.2105.6379-.5263.9037-.8947l-1.5416-.1053c-.0531.1579-.1594.3158-.2126.4211h-.1063c.0532-.1579.0532-.3158.1063-.4737l-.4252-.0526v-.1053l.4252-.0526c.1063-.4211.1063-.8421.1063-1.2105l-1.9667-.1053v.5789h-.1064c-.0531-.2105-.0531-.3684-.1063-.5789h-.4252v-.1053h.4252c-.0531-.4737-.0531-.9473-.0531-1.421l-1.1695-.0527.1595.3158c.2658.6842.2126 1.4737.1063 1.8421h-.1594c0-.421-.1595-.9473-.319-1.2631-.3189-.7369-1.0099-1.4211-2.2325-2.15791v.94741h-.1595C10.9103 9 9.90033 8.31579 8.41196 7.57895c-1.22259-.63158-1.59468-1.36842-1.54153-2.52632l.42525.26316C7.40199 6.36842 8.25249 7 9.10299 7c.53156 0 1.01001-.05263 1.48841-.15789.691-.1579 1.2757-.26316 1.8073-.05264v-.63158h-.4253c-.1594.10527-.4252.26316-.8505.26316-.4784 0-1.38204-.26316-1.38204-1.26316 0-.89473.74414-.99999 1.32894-.99999h1.0631c.1595 0 .2126-.05264.3189-.10527.0532-.05263.1063-.15789.1063-.21052V2.73684H9.74086v1.10527l-1.06312-.42106v-.26316h.53156v-.42105H7.34884v-.89473h-.63788c-.37209 0-.74418.21052-.79734.68421 0 .47368.15947.8421.63787.8421h.10632v.52632h-.10632c-.79734 0-1.43521-.57895-1.43521-1.42106C5.11628 1.63158 5.80731 1 6.71096 1h1.38206v.89474h5.31558v1.36842c0 .21052 0 .52631-.0531.73684 0 .1579-.0532.36842-.319.57895-.1594.10526-.4252.15789-.7973.15789-.3189 0-.6379 0-.9568-.05263-.5847-.05263-.7974.21053-.7974.42105v.1579c.2658-.21053.6911-.36842 1.1163-.21053.7974.26316 1.01.26316 1.4352-.05263l.0532.10526c-.0532.05263-.1063.1579-.2658.26316h.3721v2.10526l1.2226-.73684h3.402l1.6478.84211c.2127.10526.2658.26316.319.42105 0 .15789 0 .36842-.1063.47368-.0532.10527-.4253.73685-.6379 1.05264.6379.68418.9568 1.52628.9568 2.42108 0 .8947-.3189 2-1.3821 2.8421.4253.1052.7442.3684 1.01.7368l-.2658 1.1579Z"
|
||||||
|
/>
|
||||||
|
<path
|
||||||
|
fill="#fff"
|
||||||
|
d="M12.1556 21.4253h-.6223v-2.0115h.6223c.8296 0 1.1407.2873 1.1407.977-.0519.6897-.4667 1.0345-1.1407 1.0345Zm-.0519-3.9655c.5185 0 .8296.1149.8296.6896 0 .6322-.4666.8046-.9852.8046h-.4666v-1.4942h.6222Zm.9852 1.6666c.4667-.0574.8815-.4597.8815-1.0344 0-.5173-.2074-1.092-1.6074-1.092h-2.3334v.0575c.0519 0 .2074.1149.2593.1724.1555.1724.2074.4023.2074.7471v3.9081h1.9185c1.0889 0 1.8148-.4598 1.8148-1.4943.0519-.8621-.5185-1.2069-1.1407-1.2644Zm-6.5852-1.6666h.67408c.57037 0 .88148.1724.88148.862 0 .5748-.36296.9771-.98519.9771h-.51851v-1.8391H6.5037Zm1.81482 4.4253h1.24444l-1.6074-2.2989c.62222-.1724 1.14074-.5747 1.14074-1.3218 0-.8621-.46667-1.2644-1.60741-1.2644H5v.0575c.1037.0574.20741.1149.25926.1724.15555.1724.20741.4598.20741.8621v3.7931H6.5037v-2.184h.36297l1.45185 2.184Zm10.05928-4.1954c.2592.1724.3629.4023.3629.4023h.0519L19 17.2874S18.5852 17 17.6519 17c-1.4519 0-2.4889.8046-2.4889 2.5287 0 1.9541 1.2963 2.4713 2.3851 2.4713C18.5852 22 19 21.6552 19 21.6552v-.5747s-.363.4023-1.1407.4023c-.6741 0-1.6074-.3449-1.6074-1.9541 0-1.4942.5703-1.954 1.3481-1.954.4148-.1149.6222 0 .7778.115Z"
|
||||||
|
/>
|
||||||
|
</g>
|
||||||
|
<defs>
|
||||||
|
<clipPath id="a">
|
||||||
|
<path fill="#fff" d="M0 0h24v24H0z" />
|
||||||
|
</clipPath>
|
||||||
|
</defs>
|
||||||
|
</svg>
|
||||||
|
);
|
||||||
17
nx-dev/ui-enterprise/src/lib/logos/shopify.tsx
Normal file
17
nx-dev/ui-enterprise/src/lib/logos/shopify.tsx
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
import { FC, SVGProps } from 'react';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Use `#7AB55C` for a colored version.
|
||||||
|
*/
|
||||||
|
export const ShopifyIcon: FC<SVGProps<SVGSVGElement>> = (props) => (
|
||||||
|
<svg
|
||||||
|
role="img"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
fill="currentColor"
|
||||||
|
{...props}
|
||||||
|
>
|
||||||
|
<title>Shopify</title>
|
||||||
|
<path d="M15.337 23.979l7.216-1.561s-2.604-17.613-2.625-17.73c-.018-.116-.114-.192-.211-.192s-1.929-.136-1.929-.136-1.275-1.274-1.439-1.411c-.045-.037-.075-.057-.121-.074l-.914 21.104h.023zM11.71 11.305s-.81-.424-1.774-.424c-1.447 0-1.504.906-1.504 1.141 0 1.232 3.24 1.715 3.24 4.629 0 2.295-1.44 3.76-3.406 3.76-2.354 0-3.54-1.465-3.54-1.465l.646-2.086s1.245 1.066 2.28 1.066c.675 0 .975-.545.975-.932 0-1.619-2.654-1.694-2.654-4.359-.034-2.237 1.571-4.416 4.827-4.416 1.257 0 1.875.361 1.875.361l-.945 2.715-.02.01zM11.17.83c.136 0 .271.038.405.135-.984.465-2.064 1.639-2.508 3.992-.656.213-1.293.405-1.889.578C7.697 3.75 8.951.84 11.17.84V.83zm1.235 2.949v.135c-.754.232-1.583.484-2.394.736.466-1.777 1.333-2.645 2.085-2.971.193.501.309 1.176.309 2.1zm.539-2.234c.694.074 1.141.867 1.429 1.755-.349.114-.735.231-1.158.366v-.252c0-.752-.096-1.371-.271-1.871v.002zm2.992 1.289c-.02 0-.06.021-.078.021s-.289.075-.714.21c-.423-1.233-1.176-2.37-2.508-2.37h-.115C12.135.209 11.669 0 11.265 0 8.159 0 6.675 3.877 6.21 5.846c-1.194.365-2.063.636-2.16.674-.675.213-.694.232-.772.87-.075.462-1.83 14.063-1.83 14.063L15.009 24l.927-21.166z" />
|
||||||
|
</svg>
|
||||||
|
);
|
||||||
17
nx-dev/ui-enterprise/src/lib/logos/storybook.tsx
Normal file
17
nx-dev/ui-enterprise/src/lib/logos/storybook.tsx
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
import { FC, SVGProps } from 'react';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Use `#FF4785` for a colored version.
|
||||||
|
*/
|
||||||
|
export const StorybookIcon: FC<SVGProps<SVGSVGElement>> = (props) => (
|
||||||
|
<svg
|
||||||
|
role="img"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
fill="currentColor"
|
||||||
|
{...props}
|
||||||
|
>
|
||||||
|
<title>Storybook</title>
|
||||||
|
<path d="M16.71.243l-.12 2.71a.18.18 0 00.29.15l1.06-.8.9.7a.18.18 0 00.28-.14l-.1-2.76 1.33-.1a1.2 1.2 0 011.279 1.2v21.596a1.2 1.2 0 01-1.26 1.2l-16.096-.72a1.2 1.2 0 01-1.15-1.16l-.75-19.797a1.2 1.2 0 011.13-1.27L16.7.222zM13.64 9.3c0 .47 3.16.24 3.59-.08 0-3.2-1.72-4.89-4.859-4.89-3.15 0-4.899 1.72-4.899 4.29 0 4.45 5.999 4.53 5.999 6.959 0 .7-.32 1.1-1.05 1.1-.96 0-1.35-.49-1.3-2.16 0-.36-3.649-.48-3.769 0-.27 4.03 2.23 5.2 5.099 5.2 2.79 0 4.969-1.49 4.969-4.18 0-4.77-6.099-4.64-6.099-6.999 0-.97.72-1.1 1.13-1.1.45 0 1.25.07 1.19 1.87z" />
|
||||||
|
</svg>
|
||||||
|
);
|
||||||
17
nx-dev/ui-enterprise/src/lib/logos/vmware.tsx
Normal file
17
nx-dev/ui-enterprise/src/lib/logos/vmware.tsx
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
import { FC, SVGProps } from 'react';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Use `#607078` for a colored version.
|
||||||
|
*/
|
||||||
|
export const VmwareIcon: FC<SVGProps<SVGSVGElement>> = (props) => (
|
||||||
|
<svg
|
||||||
|
role="img"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
fill="currentColor"
|
||||||
|
{...props}
|
||||||
|
>
|
||||||
|
<title>VMware</title>
|
||||||
|
<path d="M.5 10.1a.505.505 0 00-.197.048.497.497 0 00-.25.68l1.138 2.475c.179.38.38.592.721.592.342 0 .542-.22.72-.592l1.003-2.186a.144.144 0 01.144-.092.16.16 0 01.157.16v2.118a.535.535 0 101.066 0v-1.73a.531.531 0 01.566-.552.52.52 0 01.541.551v1.73a.531.531 0 00.53.593.539.539 0 00.535-.592v-1.73a.531.531 0 01.564-.552.52.52 0 01.543.551v1.73a.531.531 0 00.528.593.535.535 0 00.535-.592v-1.969a1.234 1.234 0 00-1.283-1.23 1.647 1.647 0 00-1.14.486 1.26 1.26 0 00-1.095-.483 1.807 1.807 0 00-1.074.483 1.287 1.287 0 00-.961-.483 1.177 1.177 0 00-1.158.786l-.729 1.716-.933-2.203.011-.004A.505.505 0 00.5 10.1zm18.43.06a.27.27 0 00-.266.274h.002v3.142a.27.27 0 10.535 0v-1.222c0-1.037.571-1.56 1.27-1.643a.266.266 0 00.238-.274.258.258 0 00-.266-.269 1.465 1.465 0 00-1.242.88v-.614a.266.266 0 00-.271-.274zm-6.735.008a.273.273 0 00-.25.217l-.912 2.627-.902-2.62a.28.28 0 00-.274-.22.266.266 0 00-.27.258.493.493 0 00.034.144l1.09 3.037.02-.007a.319.319 0 00.298.242.3.3 0 00.293-.242l.903-2.583.896 2.583a.3.3 0 00.293.242h.018a.319.319 0 00.293-.242l1.097-3.038a.512.512 0 00.033-.144.258.258 0 00-.265-.25.262.262 0 00-.258.209l-.918 2.63-.904-2.626a.285.285 0 00-.278-.217h-.025a.273.273 0 00-.012 0zm10.168.008a1.75 1.75 0 00-1.691 1.851 1.765 1.765 0 001.76 1.858l-.008.013a1.784 1.784 0 001.33-.539.228.228 0 00.082-.17.228.228 0 00-.379-.168 1.435 1.435 0 01-1.018.415 1.237 1.237 0 01-1.24-1.207h2.555a.247.247 0 00.246-.247c0-.945-.593-1.806-1.637-1.806zm-5.744.002a1.571 1.571 0 00-.158.006 2.384 2.384 0 00-1.078.205.22.22 0 00-.143.222.24.24 0 00.235.229.266.266 0 00.095-.024 1.822 1.822 0 01.834-.162c.691 0 1.07.334 1.07.979v.125a3.796 3.796 0 00-1.103-.15c-.892 0-1.52.4-1.52 1.16l-.003-.004c0 .736.671 1.117 1.34 1.117a1.575 1.575 0 001.298-.62v.343a.247.247 0 00.254.25.254.254 0 00.258-.262v-1.983a1.416 1.416 0 00-.379-1.046 1.571 1.571 0 00-1-.385zm5.719.43c.714 0 1.085.565 1.139 1.214h-2.278a1.222 1.222 0 011.139-1.215zm-5.885 1.382a3.75 3.75 0 011.057.153V12.49c0 .57-.539.973-1.2.973-.485 0-.904-.261-.904-.713 0-.467.375-.76 1.047-.76Z" />
|
||||||
|
</svg>
|
||||||
|
);
|
||||||
17
nx-dev/ui-enterprise/src/lib/logos/wallmart.tsx
Normal file
17
nx-dev/ui-enterprise/src/lib/logos/wallmart.tsx
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
import { FC, SVGProps } from 'react';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Use `#0078D2` for a colored version.
|
||||||
|
*/
|
||||||
|
export const WalmartIcon: FC<SVGProps<SVGSVGElement>> = (props) => (
|
||||||
|
<svg
|
||||||
|
role="img"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
fill="currentColor"
|
||||||
|
{...props}
|
||||||
|
>
|
||||||
|
<title>Walmart</title>
|
||||||
|
<path d="M21.41818 9.10219c-.22048 0-.39583.12308-.39583.27297l.13393 1.51627c.01478.09132.12669.16185.26197.16185.13555-.00017.24705-.07065.26214-.16185l.13424-1.51627c0-.1499-.17555-.27297-.39645-.27297zM-.00002 10.3184s.59713 2.44699.69242 2.84417c.11123.46362.3117.63419.88954.51913l.37291-1.51718c.0945-.37683.1579-.64553.21866-1.02883h.01065c.04269.3871.10354.65314.18131 1.03017 0 0 .15176.68869.22949 1.05042.07795.36163.29482.5895.86083.46542l.88851-3.3633h-.71735l-.30339 1.45411c-.08155.42325-.15544.75396-.21251 1.14117h-.01022c-.05189-.38347-.11777-.70096-.20072-1.11331l-.31586-1.48197h-.7474l-.3378 1.44462c-.09569.43899-.18528.79337-.2422 1.16745h-.01023c-.05832-.35224-.13599-.7977-.22006-1.22261 0 0-.20074-1.03328-.27115-1.38946zm6.83845 0v3.3633h.68299v-3.3633zm9.6188 0v2.48118c0 .34202.0644.5817.20213.72811.12033.12806.31854.21094.55604.21094.20193 0 .40062-.0383.49426-.07317l-.0088-.53367c-.06968.01711-.1498.03078-.25942.03078-.23265 0-.31068-.149-.31068-.45611v-.94921h.59479v-.64351h-.59481v-.79533zm2.77885 0c-.11446.0027-.24452.08936-.32723.23277-.11062.19096-.09105.40434.03838.47923l1.3799.64254c.0862.03205.20323-.02912.27103-.14597.06814-.11745.0629-.2496-.0088-.3082l-1.24635-.8741c-.03237-.01874-.06877-.02717-.10693-.02627zm4.36427 0c-.03815-.0009-.0745.0075-.1068.02628l-1.2464.8741c-.07112.05846-.07653.1901-.0092.30734.00006.00013.00015.00023.00025.00036.00009.00016.00015.00033.00024.00049.06804.11686.18472.17803.27091.14598l1.38004-.64254c.12997-.0749.14861-.28827.03874-.47923-.08309-.1434-.21333-.23006-.32777-.23277zM5.312 11.0981c-.42444 0-.76136.11916-.94501.22529l.13442.46019c.16808-.10595.43566-.19366.68907-.19366.41954-.0011.48817.23728.48817.39012v.03613c-.9142-.0014-1.49164.31493-1.49164.9598 0 .3937.29399.76266.80512.76266.31466 0 .57778-.12554.73548-.32662h.01545s.10445.4367.67982.26969c-.03022-.18174-.04002-.37546-.04002-.60884v-.89849c0-.57263-.24452-1.07627-1.07086-1.07627zm4.08552 0c-.42739 0-.61944.2166-.7359.40034h-.01016v-.34335h-.65173v2.5266h.68658V12.2c0-.06945.00799-.1429.03223-.2068.05689-.1492.19565-.3237.41725-.3237.27704 0 .40667.2342.40667.57222v1.44h.68585v-1.4996c0-.06636.0091-.14622.02859-.20486.05639-.16969.20602-.30776.41201-.30776.28086 0 .41567.23012.41567.62788v1.38434h.68633v-1.48805c0-.78478-.39845-1.09555-.8483-1.09555-.19922 0-.35646.04996-.49863.13722-.1195.07334-.22655.17753-.32006.3147h-.0101c-.10853-.27228-.36375-.45192-.6963-.45192zm3.7702 0c-.42435 0-.76113.11916-.94495.22529l.13454.46019c.16792-.10595.43572-.19366.689-.19366.41926-.0011.48806.23728.48806.39012v.03613c-.91407-.0014-1.49164.31494-1.49164.9598 0 .3937.29418.76266.8056.76266.31441 0 .57759-.12554.735-.32662h.01557s.10437.4367.67982.26969c-.03027-.18174-.03996-.37546-.03996-.60884v-.89849c0-.57263-.24458-1.07627-1.07104-1.07627zm2.85129 0c-.26292 0-.56205.1697-.68761.53354h-.0191v-.47655h-.6181v2.5266h.70453V12.388c0-.06985.0042-.1307.01527-.1865.0521-.27102.25945-.44425.55696-.44425.08167 0 .1401.0088.20333.018v-.66151c-.05302-.0107-.0893-.01563-.15528-.01563zm4.35946 1.22067c-.01785-.00025-.03513.0026-.05134.0087l-1.3799.6418c-.12943.07519-.149.28868-.03838.47984.11028.1906.30469.28118.43415.20644l1.24634-.87349c.0717-.05929.07696-.19127.0088-.30862l.0006.00025c-.05507-.09558-.14292-.15388-.22027-.15492zm2.07955 0c-.07727.001-.1649.05934-.22012.15491l.00049-.00025c-.06781.11735-.06254.24934.0088.30862l1.2464.87349c.12921.07474.3238-.01584.43458-.20644.10986-.19116.09122-.40466-.03875-.47983l-1.38012-.64181c-.0162-.0061-.03344-.0089-.05128-.0087zm-16.75741.14518v.31519c0 .0466-.00406.09467-.01697.13673-.05286.17506-.23415.32303-.46086.32303-.18901 0-.33916-.1073-.33916-.33422 0-.34707.38204-.443.81699-.44073zm7.85577 0v.31519c0 .0466-.0041.09467-.0169.13673-.05287.17506-.23421.32303-.46093.32303-.18905 0-.3392-.1073-.3392-.33422 0-.34707.38209-.443.81703-.44073zm7.86138.48324c-.13506.00016-.24672.07024-.26148.16137l-.13393 1.5162c0 .15015.17535.27304.39583.27304.2209 0 .39645-.12289.39645-.27303l-.13424-1.51621c-.01509-.09113-.12659-.1612-.26214-.16137z" />
|
||||||
|
</svg>
|
||||||
|
);
|
||||||
180
nx-dev/ui-enterprise/src/lib/metrics-and-customers.tsx
Normal file
180
nx-dev/ui-enterprise/src/lib/metrics-and-customers.tsx
Normal file
@ -0,0 +1,180 @@
|
|||||||
|
import { motion, Variants } from 'framer-motion';
|
||||||
|
import { DownloadCaseStudy } from './download-case-study';
|
||||||
|
import { RoyalBankOfCanadaColoredIcon } from './logos/royal-bank-of-canada';
|
||||||
|
import { ManIcon } from './logos/man';
|
||||||
|
import { ShopifyIcon } from './logos/shopify';
|
||||||
|
import { CapitalOneIcon } from './logos/capital-one';
|
||||||
|
import { VmwareIcon } from './logos/vmware';
|
||||||
|
import { StorybookIcon } from './logos/storybook';
|
||||||
|
import { RedwoodJsIcon } from './logos/redwood-js';
|
||||||
|
import { CaterpillarIcon } from './logos/caterpillar';
|
||||||
|
import { SevenElevenColoredIcon } from './logos/7eleven';
|
||||||
|
import { BillColoredIcon } from './logos/bill';
|
||||||
|
import { FicoIcon } from './logos/fico';
|
||||||
|
import { HiltonIcon } from './logos/hilton';
|
||||||
|
import { CiscoIcon } from './logos/cisco';
|
||||||
|
|
||||||
|
export function MetricsAndCustomers(): JSX.Element {
|
||||||
|
const downloadElement: Variants = {
|
||||||
|
hidden: {
|
||||||
|
opacity: 0,
|
||||||
|
translateY: 90,
|
||||||
|
},
|
||||||
|
visible: {
|
||||||
|
opacity: 1,
|
||||||
|
translateY: 0,
|
||||||
|
transition: {
|
||||||
|
duration: 1,
|
||||||
|
ease: 'easeInOut',
|
||||||
|
type: 'tween',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
return (
|
||||||
|
<div className="relative isolate pb-24 pt-16">
|
||||||
|
<svg
|
||||||
|
className="absolute inset-0 -z-10 h-full w-full rotate-180 transform stroke-slate-100 [mask-image:radial-gradient(100%_100%_at_top,white,transparent)] dark:stroke-slate-800/60 dark:[mask-image:radial-gradient(100%_100%_at_top,black,transparent)]"
|
||||||
|
aria-hidden="true"
|
||||||
|
>
|
||||||
|
<defs>
|
||||||
|
<pattern
|
||||||
|
id="83dwp7e5a-9d52-45fc-17c6-718e5d7fe918"
|
||||||
|
width={200}
|
||||||
|
height={200}
|
||||||
|
x="50%"
|
||||||
|
y={-1}
|
||||||
|
patternUnits="userSpaceOnUse"
|
||||||
|
>
|
||||||
|
<path d="M100 200V.5M.5 .5H200" fill="none" />
|
||||||
|
</pattern>
|
||||||
|
</defs>
|
||||||
|
<svg
|
||||||
|
x="50%"
|
||||||
|
y={-1}
|
||||||
|
className="overflow-visible fill-slate-50 dark:fill-slate-900"
|
||||||
|
>
|
||||||
|
<path
|
||||||
|
d="M-100.5 0h201v201h-201Z M699.5 0h201v201h-201Z M499.5 400h201v201h-201Z M-300.5 600h201v201h-201Z"
|
||||||
|
strokeWidth={0}
|
||||||
|
/>
|
||||||
|
</svg>
|
||||||
|
<rect
|
||||||
|
width="100%"
|
||||||
|
height="100%"
|
||||||
|
strokeWidth={0}
|
||||||
|
fill="url(#83dwp7e5a-9d52-45fc-17c6-718e5d7fe918)"
|
||||||
|
/>
|
||||||
|
</svg>
|
||||||
|
<div className="mx-auto max-w-7xl px-6 lg:px-8">
|
||||||
|
<dl className="grid grid-cols-1 gap-4 text-center md:grid-cols-3">
|
||||||
|
<div className="p-4 text-xl">
|
||||||
|
<dt className="text-center text-xs uppercase">Speed</dt>
|
||||||
|
<dd className="mt-2 ">
|
||||||
|
<span className="text-3xl font-semibold text-slate-950 dark:text-slate-50">
|
||||||
|
30-70% Faster
|
||||||
|
</span>
|
||||||
|
</dd>
|
||||||
|
</div>
|
||||||
|
<div className="p-4 text-xl">
|
||||||
|
<dt className="text-center text-xs uppercase">Infra Cost</dt>
|
||||||
|
<dd className="mt-2 ">
|
||||||
|
<span className="text-3xl font-semibold text-slate-950 dark:text-slate-50">
|
||||||
|
40-75% Cheaper
|
||||||
|
</span>
|
||||||
|
</dd>
|
||||||
|
</div>
|
||||||
|
<div className="p-4 text-xl">
|
||||||
|
<dt className="text-center text-xs uppercase">Compute</dt>
|
||||||
|
<dd className="mt-2 ">
|
||||||
|
<span className="text-3xl font-semibold text-slate-950 dark:text-slate-50">
|
||||||
|
30-60% Less
|
||||||
|
</span>
|
||||||
|
</dd>
|
||||||
|
</div>
|
||||||
|
</dl>
|
||||||
|
<div className="mt-12 flex justify-between gap-2 md:mt-0">
|
||||||
|
<div className="col-span-1 hidden h-14 items-center justify-center lg:flex lg:h-28">
|
||||||
|
<ManIcon aria-hidden="true" className="h-14 w-14 text-[#E40045]" />
|
||||||
|
</div>
|
||||||
|
<div className="col-span-1 flex h-14 items-center justify-center lg:h-28">
|
||||||
|
<CapitalOneIcon
|
||||||
|
aria-hidden="true"
|
||||||
|
className="h-28 w-28 text-black dark:text-white"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div className="col-span-1 hidden h-14 items-center justify-center lg:flex lg:h-28">
|
||||||
|
<ShopifyIcon
|
||||||
|
aria-hidden="true"
|
||||||
|
className="h-12 w-12 text-[#7AB55C]"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div className="col-span-1 flex h-14 items-center justify-center lg:h-28">
|
||||||
|
<RoyalBankOfCanadaColoredIcon
|
||||||
|
aria-hidden="true"
|
||||||
|
className="h-14 w-14"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div className="col-span-1 flex h-14 items-center justify-center lg:h-28">
|
||||||
|
<VmwareIcon
|
||||||
|
aria-hidden="true"
|
||||||
|
className="h-28 w-28 text-black dark:text-white"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div className="col-span-1 hidden h-14 items-center justify-center lg:flex lg:h-28">
|
||||||
|
<StorybookIcon
|
||||||
|
aria-hidden="true"
|
||||||
|
className="h-12 w-12 text-[#FF4785]"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div className="col-span-1 flex h-14 items-center justify-center lg:h-28">
|
||||||
|
<FicoIcon aria-hidden="true" className="h-28 w-28 text-[#0A6DE6]" />
|
||||||
|
</div>
|
||||||
|
<div className="col-span-1 hidden h-14 items-center justify-center lg:flex lg:h-28">
|
||||||
|
<CaterpillarIcon
|
||||||
|
aria-hidden="true"
|
||||||
|
className="h-14 w-14 text-[#FFCD11]"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div className="relative mt-12 flex">
|
||||||
|
<div className="hidden w-1/4 items-center gap-20 lg:flex">
|
||||||
|
<div className="col-span-1 hidden h-14 items-center justify-center lg:flex lg:h-28">
|
||||||
|
<CiscoIcon
|
||||||
|
aria-hidden="true"
|
||||||
|
className="h-16 w-16 text-[#1BA0D7]"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div className="col-span-1 hidden h-14 items-center justify-center lg:flex lg:h-28">
|
||||||
|
<BillColoredIcon aria-hidden="true" className="h-14 w-14" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div className="grow lg:w-1/2">
|
||||||
|
<motion.div
|
||||||
|
initial="hidden"
|
||||||
|
animate="visible"
|
||||||
|
variants={downloadElement}
|
||||||
|
whileInView="visible"
|
||||||
|
className="mx-auto max-w-xl"
|
||||||
|
>
|
||||||
|
<DownloadCaseStudy />
|
||||||
|
</motion.div>
|
||||||
|
</div>
|
||||||
|
<div className="hidden w-1/4 items-center justify-end gap-20 lg:flex">
|
||||||
|
<div className="col-span-1 hidden h-14 items-center justify-center lg:flex lg:h-28">
|
||||||
|
<SevenElevenColoredIcon
|
||||||
|
aria-hidden="true"
|
||||||
|
className="h-14 w-14"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div className="col-span-1 hidden h-14 items-center justify-center lg:flex lg:h-28">
|
||||||
|
<HiltonIcon
|
||||||
|
aria-hidden="true"
|
||||||
|
className="h-20 w-20 text-black dark:text-white"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
62
nx-dev/ui-enterprise/src/lib/scale-ci-and-teams.tsx
Normal file
62
nx-dev/ui-enterprise/src/lib/scale-ci-and-teams.tsx
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
import { BoltIcon, UserGroupIcon } from '@heroicons/react/24/outline';
|
||||||
|
import {
|
||||||
|
NxAgentsIcon,
|
||||||
|
NxReplayIcon,
|
||||||
|
SectionHeading,
|
||||||
|
} from '@nx/nx-dev/ui-common';
|
||||||
|
|
||||||
|
const features = [
|
||||||
|
{
|
||||||
|
name: 'Cache with Nx Replay',
|
||||||
|
description:
|
||||||
|
'Quis tellus eget adipiscing convallis sit sit eget aliquet quis. Suspendisse eget egestas a elementum pulvinar et feugiat blandit at. In mi viverra elit nunc.',
|
||||||
|
icon: NxReplayIcon,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'Distribution with Nx Agents',
|
||||||
|
description:
|
||||||
|
'Quis tellus eget adipiscing convallis sit sit eget aliquet quis. Suspendisse eget egestas a elementum pulvinar et feugiat blandit at. In mi viverra elit nunc.',
|
||||||
|
icon: NxAgentsIcon,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'Split tasks with Atomizer',
|
||||||
|
description:
|
||||||
|
'Quis tellus eget adipiscing convallis sit sit eget aliquet quis. Suspendisse eget egestas a elementum pulvinar et feugiat blandit at. In mi viverra elit nunc.',
|
||||||
|
icon: BoltIcon,
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
export function ScaleCiAndTeams(): JSX.Element {
|
||||||
|
return (
|
||||||
|
<div className="mx-auto max-w-7xl px-6 lg:px-8">
|
||||||
|
<div className="max-w-3xl">
|
||||||
|
<SectionHeading as="h2" variant="display" id="scale-ci-and-teams">
|
||||||
|
Scale CI & teams
|
||||||
|
</SectionHeading>
|
||||||
|
<p className="mt-6 text-lg leading-8">
|
||||||
|
Quis tellus eget adipiscing convallis sit sit eget aliquet quis.
|
||||||
|
Suspendisse eget egestas a elementum pulvinar et feugiat blandit at.
|
||||||
|
In mi viverra elit nunc.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<div className="mx-auto mt-16 max-w-2xl lg:max-w-none">
|
||||||
|
<dl className="grid max-w-xl grid-cols-1 gap-x-8 gap-y-16 lg:max-w-none lg:grid-cols-3">
|
||||||
|
{features.map((feature) => (
|
||||||
|
<div key={feature.name} className="flex flex-col">
|
||||||
|
<dt className="flex items-center gap-x-3 text-base font-semibold leading-7">
|
||||||
|
<feature.icon
|
||||||
|
className="h-5 w-5 flex-none"
|
||||||
|
aria-hidden="true"
|
||||||
|
/>
|
||||||
|
{feature.name}
|
||||||
|
</dt>
|
||||||
|
<dd className="mt-4 flex flex-auto flex-col text-base leading-7 text-slate-500">
|
||||||
|
<p className="flex-auto">{feature.description}</p>
|
||||||
|
</dd>
|
||||||
|
</div>
|
||||||
|
))}
|
||||||
|
</dl>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
278
nx-dev/ui-enterprise/src/lib/scale-your-people.tsx
Normal file
278
nx-dev/ui-enterprise/src/lib/scale-your-people.tsx
Normal file
@ -0,0 +1,278 @@
|
|||||||
|
import {
|
||||||
|
BuildingOffice2Icon,
|
||||||
|
Cog6ToothIcon,
|
||||||
|
CubeTransparentIcon,
|
||||||
|
IdentificationIcon,
|
||||||
|
PhotoIcon,
|
||||||
|
SquaresPlusIcon,
|
||||||
|
UserGroupIcon,
|
||||||
|
} from '@heroicons/react/24/outline';
|
||||||
|
import { SectionHeading } from './temp/typography';
|
||||||
|
|
||||||
|
export function ScaleYourPeople(): JSX.Element {
|
||||||
|
return (
|
||||||
|
<section id="scale-your-people">
|
||||||
|
<div className="mx-auto max-w-7xl px-6 lg:px-8">
|
||||||
|
<div className="mx-auto max-w-3xl text-center">
|
||||||
|
<SectionHeading as="h2" variant="title">
|
||||||
|
Scale your people
|
||||||
|
</SectionHeading>
|
||||||
|
</div>
|
||||||
|
<SectionHeading as="p" variant="subtitle" className="mt-6">
|
||||||
|
Build big things with the efficiency of a small team by increasing
|
||||||
|
collaboration and developer mobility, reducing wait time and
|
||||||
|
duplication, and establishing clear ownership.
|
||||||
|
</SectionHeading>
|
||||||
|
<div className="mx-auto mt-12 grid max-w-2xl grid-cols-1 gap-2 md:gap-y-16 lg:max-w-none lg:grid-cols-4">
|
||||||
|
<div className="relative rounded-md bg-slate-100 px-4 py-3 text-slate-900 dark:bg-slate-800 dark:text-slate-100">
|
||||||
|
<div className="flex items-center gap-3 text-lg font-medium leading-6">
|
||||||
|
<CubeTransparentIcon
|
||||||
|
aria-hidden="true"
|
||||||
|
className="h-5 w-5 flex-none"
|
||||||
|
/>
|
||||||
|
Visibility
|
||||||
|
</div>
|
||||||
|
<svg
|
||||||
|
aria-hidden="true"
|
||||||
|
viewBox="0 0 4 12"
|
||||||
|
fill="currentColor"
|
||||||
|
className="absolute right-0 top-1/2 hidden h-6 w-2 -translate-y-1/2 translate-x-full transform text-slate-100 lg:block dark:text-slate-800"
|
||||||
|
>
|
||||||
|
<path
|
||||||
|
d="M3.26 4.9a2 2 0 0 1 0 2.2L0 12V0l3.26 4.9z"
|
||||||
|
fillRule="evenodd"
|
||||||
|
/>
|
||||||
|
</svg>
|
||||||
|
</div>
|
||||||
|
<div className="relative rounded-md bg-slate-100 px-4 py-3 text-slate-900 dark:bg-slate-800 dark:text-slate-100">
|
||||||
|
<svg
|
||||||
|
aria-hidden="true"
|
||||||
|
viewBox="0 0 4 12"
|
||||||
|
fill="currentColor"
|
||||||
|
className="absolute left-0 top-1/2 hidden h-6 w-2 -translate-y-1/2 transform text-white lg:block dark:text-slate-950"
|
||||||
|
>
|
||||||
|
<path
|
||||||
|
d="M3.26 4.9a2 2 0 0 1 0 2.2L0 12V0l3.26 4.9z"
|
||||||
|
fillRule="evenodd"
|
||||||
|
/>
|
||||||
|
</svg>
|
||||||
|
<div className="flex items-center gap-3 text-lg font-medium leading-6">
|
||||||
|
<IdentificationIcon
|
||||||
|
aria-hidden="true"
|
||||||
|
className="h-5 w-5 flex-none"
|
||||||
|
/>
|
||||||
|
Ownership
|
||||||
|
</div>
|
||||||
|
<svg
|
||||||
|
aria-hidden="true"
|
||||||
|
viewBox="0 0 4 12"
|
||||||
|
fill="currentColor"
|
||||||
|
className="absolute right-0 top-1/2 hidden h-6 w-2 -translate-y-1/2 translate-x-full transform text-slate-100 lg:block dark:text-slate-800"
|
||||||
|
>
|
||||||
|
<path
|
||||||
|
d="M3.26 4.9a2 2 0 0 1 0 2.2L0 12V0l3.26 4.9z"
|
||||||
|
fillRule="evenodd"
|
||||||
|
/>
|
||||||
|
</svg>
|
||||||
|
</div>
|
||||||
|
<div className="relative rounded-md bg-slate-100 px-4 py-3 text-slate-900 dark:bg-slate-800 dark:text-slate-100">
|
||||||
|
<svg
|
||||||
|
aria-hidden="true"
|
||||||
|
viewBox="0 0 4 12"
|
||||||
|
fill="currentColor"
|
||||||
|
className="absolute left-0 top-1/2 hidden h-6 w-2 -translate-y-1/2 transform text-white lg:block dark:text-slate-950"
|
||||||
|
>
|
||||||
|
<path
|
||||||
|
d="M3.26 4.9a2 2 0 0 1 0 2.2L0 12V0l3.26 4.9z"
|
||||||
|
fillRule="evenodd"
|
||||||
|
/>
|
||||||
|
</svg>
|
||||||
|
<div className="flex items-center gap-3 text-lg font-medium leading-6">
|
||||||
|
<UserGroupIcon aria-hidden="true" className="h-5 w-5 flex-none" />
|
||||||
|
Control
|
||||||
|
</div>
|
||||||
|
<svg
|
||||||
|
aria-hidden="true"
|
||||||
|
viewBox="0 0 4 12"
|
||||||
|
fill="currentColor"
|
||||||
|
className="absolute right-0 top-1/2 hidden h-6 w-2 -translate-y-1/2 translate-x-full transform text-slate-100 lg:block dark:text-slate-800"
|
||||||
|
>
|
||||||
|
<path
|
||||||
|
d="M3.26 4.9a2 2 0 0 1 0 2.2L0 12V0l3.26 4.9z"
|
||||||
|
fillRule="evenodd"
|
||||||
|
/>
|
||||||
|
</svg>
|
||||||
|
</div>
|
||||||
|
<div className="relative rounded-md bg-slate-100 px-4 py-3 text-slate-900 dark:bg-slate-800 dark:text-slate-100">
|
||||||
|
<svg
|
||||||
|
aria-hidden="true"
|
||||||
|
viewBox="0 0 4 12"
|
||||||
|
fill="currentColor"
|
||||||
|
className="absolute left-0 top-1/2 hidden h-6 w-2 -translate-y-1/2 transform text-white lg:block dark:text-slate-950"
|
||||||
|
>
|
||||||
|
<path
|
||||||
|
d="M3.26 4.9a2 2 0 0 1 0 2.2L0 12V0l3.26 4.9z"
|
||||||
|
fillRule="evenodd"
|
||||||
|
/>
|
||||||
|
</svg>
|
||||||
|
<div className="flex items-center gap-3 text-lg font-medium leading-6">
|
||||||
|
<Cog6ToothIcon aria-hidden="true" className="h-5 w-5 flex-none" />
|
||||||
|
Automation
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<picture className="block py-12">
|
||||||
|
<img
|
||||||
|
src="/images/enterprise/graphs.jpg"
|
||||||
|
alt="Product screenshot"
|
||||||
|
className="mx-auto max-w-full rounded-xl shadow-xl ring-1 ring-slate-400/10"
|
||||||
|
width={2500}
|
||||||
|
height={1616}
|
||||||
|
/>
|
||||||
|
</picture>
|
||||||
|
<div className="relative mx-auto mt-16 max-w-2xl space-y-12 sm:mt-20">
|
||||||
|
<svg
|
||||||
|
className="absolute left-0 top-0 -z-10 -ml-20 hidden -translate-x-full -translate-y-1/2 transform lg:block"
|
||||||
|
width={200}
|
||||||
|
height={400}
|
||||||
|
fill="none"
|
||||||
|
viewBox="0 0 200 400"
|
||||||
|
aria-hidden="true"
|
||||||
|
>
|
||||||
|
<defs>
|
||||||
|
<pattern
|
||||||
|
id="de316486-4a29-4312-bdfc-fbce2132a2c1"
|
||||||
|
x={0}
|
||||||
|
y={0}
|
||||||
|
width={20}
|
||||||
|
height={20}
|
||||||
|
patternUnits="userSpaceOnUse"
|
||||||
|
>
|
||||||
|
<rect
|
||||||
|
x={0}
|
||||||
|
y={0}
|
||||||
|
width={4}
|
||||||
|
height={4}
|
||||||
|
className="text-slate-100 dark:text-slate-800/60"
|
||||||
|
fill="currentColor"
|
||||||
|
/>
|
||||||
|
</pattern>
|
||||||
|
</defs>
|
||||||
|
<rect
|
||||||
|
width={200}
|
||||||
|
height={400}
|
||||||
|
fill="url(#de316486-4a29-4312-bdfc-fbce2132a2c1)"
|
||||||
|
/>
|
||||||
|
</svg>
|
||||||
|
<svg
|
||||||
|
className="absolute bottom-0 right-0 -z-10 -mr-20 hidden translate-x-full translate-y-1/2 transform lg:block"
|
||||||
|
width={200}
|
||||||
|
height={400}
|
||||||
|
fill="none"
|
||||||
|
viewBox="0 0 200 400"
|
||||||
|
aria-hidden="true"
|
||||||
|
>
|
||||||
|
<defs>
|
||||||
|
<pattern
|
||||||
|
id="de316486-4a29-4312-bdfc-fbce2132a2c1"
|
||||||
|
x={0}
|
||||||
|
y={0}
|
||||||
|
width={20}
|
||||||
|
height={20}
|
||||||
|
patternUnits="userSpaceOnUse"
|
||||||
|
>
|
||||||
|
<rect
|
||||||
|
x={0}
|
||||||
|
y={0}
|
||||||
|
width={4}
|
||||||
|
height={4}
|
||||||
|
className="text-slate-100 dark:text-slate-800/60"
|
||||||
|
fill="currentColor"
|
||||||
|
/>
|
||||||
|
</pattern>
|
||||||
|
</defs>
|
||||||
|
<rect
|
||||||
|
width={200}
|
||||||
|
height={400}
|
||||||
|
fill="url(#de316486-4a29-4312-bdfc-fbce2132a2c1)"
|
||||||
|
/>
|
||||||
|
</svg>
|
||||||
|
<div className="space-y-6 lg:space-y-12">
|
||||||
|
<div className="flex justify-center">
|
||||||
|
<span className="inline-flex items-center rounded-md bg-blue-50 px-2 py-1 text-xs font-medium text-blue-700 ring-1 ring-inset ring-blue-700/10 dark:bg-blue-400/10 dark:text-blue-400 dark:ring-blue-400/30">
|
||||||
|
coming soon
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<div className="flex items-start gap-6">
|
||||||
|
<div className="rounded-full p-3 shadow-sm ring-1 ring-slate-200 dark:ring-slate-800/60">
|
||||||
|
<SquaresPlusIcon className="h-5 w-5 text-slate-900 dark:text-slate-100" />
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<h4 className="relative text-base font-medium leading-6 text-slate-900 dark:text-slate-100">
|
||||||
|
Monorepo, polyrepo, multi-monorepo?
|
||||||
|
</h4>
|
||||||
|
<p className="mt-2">
|
||||||
|
Whatever you’re working with, Nx Enterprise will give you the
|
||||||
|
visibility you need to understand what they have in common,
|
||||||
|
how they relate, and how they differ.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div className="flex items-start gap-6">
|
||||||
|
<div className="rounded-full p-3 shadow-sm ring-1 ring-slate-200 dark:ring-slate-800/60">
|
||||||
|
<Cog6ToothIcon className="h-5 w-5 text-slate-900 dark:text-slate-100" />
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<h4 className="relative text-base font-medium leading-6 text-slate-900 dark:text-slate-100">
|
||||||
|
Monorepo experience in a polyrepo environment
|
||||||
|
</h4>
|
||||||
|
<p className="mt-2">
|
||||||
|
Nx Enterprise will support optional monorepo-like constraints
|
||||||
|
to be applied across Nx Workspace boundaries in a seamless and
|
||||||
|
flexible way. Move fast with confidence.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div className="flex items-start gap-6">
|
||||||
|
<div className="rounded-full p-3 shadow-sm ring-1 ring-slate-200 dark:ring-slate-800/60">
|
||||||
|
<BuildingOffice2Icon className="h-5 w-5 text-slate-900 dark:text-slate-100" />
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<h4 className="relative text-base font-medium leading-6 text-slate-900 dark:text-slate-100">
|
||||||
|
Automation over coordination
|
||||||
|
</h4>
|
||||||
|
<p className="mt-2">
|
||||||
|
Testing and cross-repo coordination can be left to Nx
|
||||||
|
Enterprise tooling instead of manual human intervention to
|
||||||
|
test and enforce cross-repo dependencies & constraints.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{/*<div className="mt-16">*/}
|
||||||
|
{/* <picture className="block py-12">*/}
|
||||||
|
{/* <img*/}
|
||||||
|
{/* src="/images/enterprise/graphs.jpg"*/}
|
||||||
|
{/* alt="Product screenshot"*/}
|
||||||
|
{/* className="mx-auto max-w-full rounded-xl shadow-xl ring-1 ring-slate-400/10"*/}
|
||||||
|
{/* width={2500}*/}
|
||||||
|
{/* height={1616}*/}
|
||||||
|
{/* />*/}
|
||||||
|
{/* </picture>*/}
|
||||||
|
{/* <div className="mx-auto mt-4 max-w-2xl">*/}
|
||||||
|
{/* <h4 className="relative text-base font-medium capitalize leading-6 text-slate-900 dark:text-slate-100">*/}
|
||||||
|
{/* Crystal clear organizations*/}
|
||||||
|
{/* </h4>*/}
|
||||||
|
{/* <p>*/}
|
||||||
|
{/* Regardless of how many Nx Workspaces your company has, Nx Enterprise*/}
|
||||||
|
{/* can give you the visibility you need to understand what they have in*/}
|
||||||
|
{/* common, how they relate, and how they differ. Developers are no*/}
|
||||||
|
{/* longer relegated to contributing to one Nx Workspace.*/}
|
||||||
|
{/* </p>*/}
|
||||||
|
{/* </div>*/}
|
||||||
|
{/*</div>*/}
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
);
|
||||||
|
}
|
||||||
112
nx-dev/ui-enterprise/src/lib/security.tsx
Normal file
112
nx-dev/ui-enterprise/src/lib/security.tsx
Normal file
File diff suppressed because one or more lines are too long
825
nx-dev/ui-enterprise/src/lib/solve-your-ci.tsx
Normal file
825
nx-dev/ui-enterprise/src/lib/solve-your-ci.tsx
Normal file
@ -0,0 +1,825 @@
|
|||||||
|
import {
|
||||||
|
ArrowsRightLeftIcon,
|
||||||
|
BanknotesIcon,
|
||||||
|
ChartBarSquareIcon,
|
||||||
|
ChevronRightIcon,
|
||||||
|
ClipboardDocumentIcon,
|
||||||
|
CloudArrowDownIcon,
|
||||||
|
CursorArrowRaysIcon,
|
||||||
|
LightBulbIcon,
|
||||||
|
SparklesIcon,
|
||||||
|
Square3Stack3DIcon,
|
||||||
|
} from '@heroicons/react/24/outline';
|
||||||
|
import { animate, motion, useMotionValue, useTransform } from 'framer-motion';
|
||||||
|
import { useEffect } from 'react';
|
||||||
|
import { SectionHeading } from './temp/typography';
|
||||||
|
import { BentoGrid, BentoGridItem } from './bento-grid';
|
||||||
|
import { cx } from '@nx/nx-dev/ui-primitives';
|
||||||
|
|
||||||
|
export function SolveYourCi(): JSX.Element {
|
||||||
|
return (
|
||||||
|
<section id="solve-your-ci">
|
||||||
|
<div className="mx-auto max-w-7xl px-6 lg:px-8">
|
||||||
|
<div className="mx-auto max-w-2xl text-center">
|
||||||
|
<SectionHeading as="h2" variant="title">
|
||||||
|
Solve your CI
|
||||||
|
</SectionHeading>
|
||||||
|
</div>
|
||||||
|
<SectionHeading as="p" variant="subtitle" className="mt-6">
|
||||||
|
Monorepos help you scale your people but they can also make CI a
|
||||||
|
challenge. Nx Enterprise solves it by providing efficient, fast and
|
||||||
|
reliable CI that can handle workflows of any size.
|
||||||
|
</SectionHeading>
|
||||||
|
{/*FEATURES CONTAINER*/}
|
||||||
|
<BentoGrid className="mx-auto mt-20 w-full md:auto-rows-[22rem]">
|
||||||
|
{items.map((item, i) => (
|
||||||
|
<BentoGridItem
|
||||||
|
key={i}
|
||||||
|
title={item.title}
|
||||||
|
description={item.description}
|
||||||
|
header={item.header}
|
||||||
|
className={cx('[&>p:text-lg]', item.className)}
|
||||||
|
icon={item.icon}
|
||||||
|
url={item.url}
|
||||||
|
/>
|
||||||
|
))}
|
||||||
|
</BentoGrid>
|
||||||
|
|
||||||
|
{/*TEXT*/}
|
||||||
|
<div className="relative mx-auto mt-16 max-w-2xl space-y-12 sm:my-32">
|
||||||
|
<svg
|
||||||
|
className="absolute left-0 top-0 -z-10 -ml-20 hidden -translate-x-full -translate-y-1/2 transform lg:block"
|
||||||
|
width={200}
|
||||||
|
height={400}
|
||||||
|
fill="none"
|
||||||
|
viewBox="0 0 200 400"
|
||||||
|
aria-hidden="true"
|
||||||
|
>
|
||||||
|
<defs>
|
||||||
|
<pattern
|
||||||
|
id="de316486-4a29-4312-bdfc-fbce2132a2c1"
|
||||||
|
x={0}
|
||||||
|
y={0}
|
||||||
|
width={20}
|
||||||
|
height={20}
|
||||||
|
patternUnits="userSpaceOnUse"
|
||||||
|
>
|
||||||
|
<rect
|
||||||
|
x={0}
|
||||||
|
y={0}
|
||||||
|
width={4}
|
||||||
|
height={4}
|
||||||
|
className="text-slate-100 dark:text-slate-800/60"
|
||||||
|
fill="currentColor"
|
||||||
|
/>
|
||||||
|
</pattern>
|
||||||
|
<pattern
|
||||||
|
id="de316486-4a29-4312-bdfc-fbce2132a2c1"
|
||||||
|
x={0}
|
||||||
|
y={0}
|
||||||
|
width={20}
|
||||||
|
height={20}
|
||||||
|
patternUnits="userSpaceOnUse"
|
||||||
|
>
|
||||||
|
<rect
|
||||||
|
x={0}
|
||||||
|
y={0}
|
||||||
|
width={4}
|
||||||
|
height={4}
|
||||||
|
className="text-pink-200 dark:text-slate-800/60"
|
||||||
|
fill="currentColor"
|
||||||
|
/>
|
||||||
|
</pattern>
|
||||||
|
</defs>
|
||||||
|
<rect
|
||||||
|
width={200}
|
||||||
|
height={400}
|
||||||
|
fill="url(#de316486-4a29-4312-bdfc-fbce2132a2c1)"
|
||||||
|
/>
|
||||||
|
</svg>
|
||||||
|
<svg
|
||||||
|
className="absolute bottom-0 right-0 -z-10 -mr-20 hidden translate-x-full translate-y-1/2 transform lg:block"
|
||||||
|
width={200}
|
||||||
|
height={400}
|
||||||
|
fill="none"
|
||||||
|
viewBox="0 0 200 400"
|
||||||
|
aria-hidden="true"
|
||||||
|
>
|
||||||
|
<defs>
|
||||||
|
<pattern
|
||||||
|
id="de316486-4a29-4312-bdfc-fbce2132a2c1"
|
||||||
|
x={0}
|
||||||
|
y={0}
|
||||||
|
width={20}
|
||||||
|
height={20}
|
||||||
|
patternUnits="userSpaceOnUse"
|
||||||
|
>
|
||||||
|
<rect
|
||||||
|
x={0}
|
||||||
|
y={0}
|
||||||
|
width={4}
|
||||||
|
height={4}
|
||||||
|
className="text-slate-100 dark:text-slate-800/60"
|
||||||
|
fill="currentColor"
|
||||||
|
/>
|
||||||
|
</pattern>
|
||||||
|
</defs>
|
||||||
|
<rect
|
||||||
|
width={200}
|
||||||
|
height={400}
|
||||||
|
fill="url(#de316486-4a29-4312-bdfc-fbce2132a2c1)"
|
||||||
|
/>
|
||||||
|
</svg>
|
||||||
|
|
||||||
|
<div className="space-y-6 lg:space-y-12">
|
||||||
|
<div className="flex items-start gap-6">
|
||||||
|
<div className="rounded-full p-3 shadow-sm ring-1 ring-slate-200 dark:ring-slate-800/60">
|
||||||
|
<BanknotesIcon className="h-5 w-5 text-slate-900 dark:text-slate-100" />
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<h4 className="relative text-base font-medium leading-6 text-slate-900 dark:text-slate-100">
|
||||||
|
Both faster and cheaper
|
||||||
|
</h4>
|
||||||
|
<p className="mt-2">
|
||||||
|
Current CI providers aren’t made for monorepos. They’re
|
||||||
|
low-level and static in their configuration. The combination
|
||||||
|
of Nx Agents and Nx Replay lets you reuse computation from
|
||||||
|
other runs and utilizes the allocated VMs in the most optimal
|
||||||
|
way.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div className="flex items-start gap-6">
|
||||||
|
<div className="rounded-full p-3 shadow-sm ring-1 ring-slate-200 dark:ring-slate-800/60">
|
||||||
|
<CursorArrowRaysIcon className="h-5 w-5 text-slate-900 dark:text-slate-100" />
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<h4 className="relative text-base font-medium leading-6 text-slate-900 dark:text-slate-100">
|
||||||
|
Solving E2E tests
|
||||||
|
</h4>
|
||||||
|
<p className="mt-2">
|
||||||
|
Atomizer splits large e2e projects into fine-grained test
|
||||||
|
runs, enabling more efficient distribution and dramatically
|
||||||
|
reducing CI times. It also identifies flaky e2e tests at the
|
||||||
|
file level and re-runs those specific tests.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div className="flex items-start gap-6">
|
||||||
|
<div className="rounded-full p-3 shadow-sm ring-1 ring-slate-200 dark:ring-slate-800/60">
|
||||||
|
<LightBulbIcon className="h-5 w-5 text-slate-900 dark:text-slate-100" />
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<h4 className="relative text-base font-medium leading-6 text-slate-900 dark:text-slate-100">
|
||||||
|
What, not how
|
||||||
|
</h4>
|
||||||
|
<p className="mt-2">
|
||||||
|
Nx Enterprise simplifies CI configuration, emphasizing which
|
||||||
|
tasks to execute over how with no need to tweak your CI
|
||||||
|
scripts as your monorepo evolves. This simplified
|
||||||
|
configuration cuts down on CI maintenance and increases
|
||||||
|
stability.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
const Caching = () => {
|
||||||
|
const variants = {
|
||||||
|
hidden: {
|
||||||
|
opacity: 0,
|
||||||
|
transition: {
|
||||||
|
when: 'afterChildren',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
visible: {
|
||||||
|
opacity: 1,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
const items = [
|
||||||
|
{
|
||||||
|
cache: 'remote',
|
||||||
|
target: 'build',
|
||||||
|
project: 'website',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
cache: 'remote',
|
||||||
|
target: 'test',
|
||||||
|
project: 'express',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
cache: 'remote',
|
||||||
|
target: 'build',
|
||||||
|
project: 'eslint',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
cache: 'remote',
|
||||||
|
target: 'lint',
|
||||||
|
project: 'autoloan',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
cache: 'remote',
|
||||||
|
target: 'test',
|
||||||
|
project: 'website',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
cache: 'remote',
|
||||||
|
target: 'lint',
|
||||||
|
project: 'website',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
cache: 'remote',
|
||||||
|
target: 'build-base',
|
||||||
|
project: 'express',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
cache: 'remote',
|
||||||
|
target: 'build',
|
||||||
|
project: 'express',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
cache: 'remote',
|
||||||
|
target: 'lint',
|
||||||
|
project: 'express',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
cache: 'remote',
|
||||||
|
target: 'test',
|
||||||
|
project: 'autoloan',
|
||||||
|
},
|
||||||
|
];
|
||||||
|
return (
|
||||||
|
<motion.div
|
||||||
|
initial="hidden"
|
||||||
|
variants={variants}
|
||||||
|
whileInView="visible"
|
||||||
|
viewport={{ once: true }}
|
||||||
|
className="flex h-full min-h-[12rem] w-full flex-1 flex-col gap-2"
|
||||||
|
>
|
||||||
|
<motion.div className="flex items-center gap-1.5 text-center text-sm italic">
|
||||||
|
<SparklesIcon aria-hidden="true" className="h-4 w-4" />
|
||||||
|
<span className="font-semibold">
|
||||||
|
<Counter value={items.length + 123} duration={5} />
|
||||||
|
</span>
|
||||||
|
tasks replayed instantly with cache
|
||||||
|
</motion.div>
|
||||||
|
<div className="flex flex-1 flex-col divide-y divide-slate-100 overflow-hidden rounded-lg border border-slate-100 dark:divide-slate-700 dark:border-slate-700 dark:bg-slate-950">
|
||||||
|
{items.map((i, idx) => (
|
||||||
|
<div
|
||||||
|
key={`project-${i}-${idx}`}
|
||||||
|
className="flex w-full flex-row items-center gap-2 p-2 transition-colors ease-out hover:bg-slate-50/40 dark:hover:bg-slate-900/40"
|
||||||
|
>
|
||||||
|
<div className="m-1 h-2.5 w-2.5 flex-none rounded-full bg-emerald-500" />
|
||||||
|
<div className="flex min-w-[4rem]">
|
||||||
|
<span className="inline-flex cursor-default items-center rounded-md bg-slate-50 px-2 py-1 text-xs font-medium text-slate-600 ring-1 ring-inset ring-slate-500/10 dark:bg-slate-400/10 dark:text-slate-400 dark:ring-slate-400/20">
|
||||||
|
{i.cache}
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<div
|
||||||
|
className="grow truncate text-left text-sm font-medium"
|
||||||
|
data-testid="task-target"
|
||||||
|
>
|
||||||
|
{i.project}:{i.target}
|
||||||
|
</div>
|
||||||
|
<div className="text-xs">< 1s</div>
|
||||||
|
</div>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
</motion.div>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
const Atomizer = () => {
|
||||||
|
const variants = {
|
||||||
|
hidden: {
|
||||||
|
opacity: 0,
|
||||||
|
transition: {
|
||||||
|
when: 'afterChildren',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
visible: {
|
||||||
|
opacity: 1,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
const itemVariants = {
|
||||||
|
visible: (i: number) => ({
|
||||||
|
opacity: 1,
|
||||||
|
x: 0,
|
||||||
|
transition: {
|
||||||
|
delay: i * 0.2,
|
||||||
|
duration: 0.275,
|
||||||
|
ease: 'easeOut',
|
||||||
|
when: 'beforeChildren',
|
||||||
|
staggerChildren: 0.3,
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
hidden: {
|
||||||
|
opacity: 0,
|
||||||
|
x: -100,
|
||||||
|
transition: {
|
||||||
|
when: 'afterChildren',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
const uiDialogsTests = ['e2e-ui-cdk:e2e', 'e2e-ui-layout:e2e'];
|
||||||
|
const loansTests = [
|
||||||
|
'loans-front-store:e2e',
|
||||||
|
'loans-loans:e2e',
|
||||||
|
'loans-credit-card:e2e',
|
||||||
|
'loans-workflows:e2e',
|
||||||
|
'loans-mortgage:e2e',
|
||||||
|
'loans-submission:e2e',
|
||||||
|
];
|
||||||
|
const DefaultConnector = () => (
|
||||||
|
<>
|
||||||
|
<span
|
||||||
|
className="absolute left-4 top-0 -ml-px -mt-px h-[105%] w-0.5 bg-slate-100 dark:bg-slate-700"
|
||||||
|
aria-hidden="true"
|
||||||
|
/>
|
||||||
|
<span
|
||||||
|
className="absolute left-4 top-1/2 -ml-px h-0.5 w-3 bg-slate-100 dark:bg-slate-700"
|
||||||
|
aria-hidden="true"
|
||||||
|
/>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
const BottomConnector = () => (
|
||||||
|
<>
|
||||||
|
<span
|
||||||
|
className="absolute left-4 top-0 -ml-px -mt-px h-[55%] w-0.5 bg-slate-100 dark:bg-slate-700"
|
||||||
|
aria-hidden="true"
|
||||||
|
/>
|
||||||
|
<span
|
||||||
|
className="absolute left-4 top-1/2 -ml-px h-0.5 w-3 bg-slate-100 dark:bg-slate-700"
|
||||||
|
aria-hidden="true"
|
||||||
|
/>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<motion.div
|
||||||
|
initial="hidden"
|
||||||
|
variants={variants}
|
||||||
|
whileInView="visible"
|
||||||
|
viewport={{ once: true }}
|
||||||
|
className="flex h-full min-h-[12rem] w-full flex-1 flex-col gap-2"
|
||||||
|
>
|
||||||
|
<motion.div className="flex items-center gap-1.5 text-center text-sm">
|
||||||
|
Running
|
||||||
|
<ChevronRightIcon aria-hidden="true" className="h-3 w-3" />
|
||||||
|
<code className="text-xs font-medium">nx affected --targets=e2e</code>
|
||||||
|
</motion.div>
|
||||||
|
<div className="flex flex-1 flex-col divide-y divide-slate-100 overflow-hidden rounded-lg border border-slate-100 bg-white dark:divide-slate-700 dark:border-slate-700 dark:bg-slate-950">
|
||||||
|
<div className="flex w-full flex-row items-center gap-2 p-2 transition-colors ease-out hover:bg-slate-50/40 dark:hover:bg-slate-900/40">
|
||||||
|
<div className="flex items-center gap-2">
|
||||||
|
<div className="flex-none animate-pulse rounded-full bg-yellow-500/20 p-1">
|
||||||
|
<div className="h-2 w-2 rounded-full bg-yellow-500" />
|
||||||
|
</div>
|
||||||
|
<div className="flex min-w-[5rem]">
|
||||||
|
<span className="whitespace-nowrap text-sm font-medium">
|
||||||
|
In progress
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div className="grow truncate text-left text-sm font-medium">
|
||||||
|
E2E {'>'} CI
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{uiDialogsTests.map((i, idx) => (
|
||||||
|
<div
|
||||||
|
key={`${i}-${idx}`}
|
||||||
|
className="relative flex w-full flex-row items-center gap-2 p-2 transition-colors ease-out hover:bg-slate-50/40 dark:hover:bg-slate-900/40"
|
||||||
|
>
|
||||||
|
{uiDialogsTests.length === idx + 1 ? (
|
||||||
|
<BottomConnector />
|
||||||
|
) : (
|
||||||
|
<DefaultConnector />
|
||||||
|
)}
|
||||||
|
<span aria-hidden="true" className="h-4 w-4" />
|
||||||
|
<div className="flex-none animate-pulse rounded-full bg-yellow-500/20 p-1">
|
||||||
|
<div className="h-2 w-2 rounded-full bg-yellow-500" />
|
||||||
|
</div>
|
||||||
|
<div className="grow truncate text-left text-sm">{i}</div>
|
||||||
|
</div>
|
||||||
|
))}
|
||||||
|
<motion.div
|
||||||
|
custom={1}
|
||||||
|
variants={itemVariants}
|
||||||
|
className="flex w-full flex-row items-center gap-2 p-2 transition-colors ease-out hover:bg-slate-50/40 dark:hover:bg-slate-900/40"
|
||||||
|
>
|
||||||
|
<div className="m-1 h-2.5 w-2.5 flex-none rounded-full bg-emerald-500" />
|
||||||
|
<div className="flex min-w-[5rem]">
|
||||||
|
<span className="inline-flex cursor-default items-center rounded-md bg-slate-50 px-2 py-1 text-xs font-medium text-slate-600 ring-1 ring-inset ring-slate-500/10 dark:bg-slate-400/10 dark:text-slate-400 dark:ring-slate-400/20">
|
||||||
|
miss
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<div className="grow truncate text-left text-sm font-medium">
|
||||||
|
website:e2e
|
||||||
|
</div>
|
||||||
|
<motion.span
|
||||||
|
custom={3}
|
||||||
|
variants={itemVariants}
|
||||||
|
className="inline-flex cursor-default items-center rounded-md bg-yellow-400/10 px-2 py-1 text-xs font-medium text-yellow-500 ring-1 ring-inset ring-yellow-400/20 dark:bg-yellow-400/10 dark:text-yellow-500 dark:ring-yellow-400/20"
|
||||||
|
>
|
||||||
|
flaky
|
||||||
|
</motion.span>
|
||||||
|
<motion.span
|
||||||
|
custom={2}
|
||||||
|
variants={itemVariants}
|
||||||
|
className="inline-flex cursor-default items-center rounded-md bg-slate-50 px-2 py-1 text-xs font-medium text-slate-600 ring-1 ring-inset ring-slate-500/10 dark:bg-slate-400/10 dark:text-slate-400 dark:ring-slate-400/20"
|
||||||
|
>
|
||||||
|
1 retry
|
||||||
|
</motion.span>
|
||||||
|
</motion.div>
|
||||||
|
<div className="flex w-full flex-row items-center gap-2 p-2 transition-colors ease-out hover:bg-slate-50/40 dark:hover:bg-slate-900/40">
|
||||||
|
<div className="flex items-center gap-2">
|
||||||
|
<div className="flex-none animate-pulse rounded-full bg-yellow-500/20 p-1">
|
||||||
|
<div className="h-2 w-2 rounded-full bg-yellow-500" />
|
||||||
|
</div>
|
||||||
|
<div className="flex min-w-[5rem]">
|
||||||
|
<span className="whitespace-nowrap text-sm font-medium">
|
||||||
|
In progress
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div className="grow truncate text-left text-sm font-medium">
|
||||||
|
loans {'>'} e2e
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{loansTests.map((i, idx) => (
|
||||||
|
<div
|
||||||
|
key={`${i}-${idx}`}
|
||||||
|
className="relative flex w-full flex-row items-center gap-2 p-2 transition-colors ease-out hover:bg-slate-50/40 dark:hover:bg-slate-900/40"
|
||||||
|
>
|
||||||
|
{loansTests.length === idx + 1 ? (
|
||||||
|
<BottomConnector />
|
||||||
|
) : (
|
||||||
|
<DefaultConnector />
|
||||||
|
)}
|
||||||
|
<span aria-hidden="true" className="h-4 w-4" />
|
||||||
|
<div className="flex-none animate-pulse rounded-full bg-yellow-500/20 p-1">
|
||||||
|
<div className="h-2 w-2 rounded-full bg-yellow-500" />
|
||||||
|
</div>
|
||||||
|
<div className="grow truncate text-left text-sm">{i}</div>
|
||||||
|
</div>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
</motion.div>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
const TaskDistribution = () => {
|
||||||
|
const variants = {
|
||||||
|
hidden: {
|
||||||
|
opacity: 0,
|
||||||
|
transition: {
|
||||||
|
when: 'afterChildren',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
visible: {
|
||||||
|
opacity: 1,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
const itemVariants = {
|
||||||
|
visible: (i: number) => ({
|
||||||
|
opacity: 1,
|
||||||
|
x: 0,
|
||||||
|
transition: {
|
||||||
|
delay: i * 0.2,
|
||||||
|
duration: 0.275,
|
||||||
|
ease: 'easeOut',
|
||||||
|
when: 'beforeChildren',
|
||||||
|
staggerChildren: 0.3,
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
hidden: {
|
||||||
|
opacity: 0,
|
||||||
|
x: -100,
|
||||||
|
transition: {
|
||||||
|
when: 'afterChildren',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
const agent1Items = ['website:build-base', 'website:build'];
|
||||||
|
const agent2Items = ['docs:lint', 'express:test', 'website:lint'];
|
||||||
|
const agent3Items = ['graph-client:build', 'plugin:test'];
|
||||||
|
const nxReplayItems = [
|
||||||
|
'graph-client:lint',
|
||||||
|
'plugin:lint',
|
||||||
|
'website:test',
|
||||||
|
'vite:test',
|
||||||
|
'vite:build',
|
||||||
|
];
|
||||||
|
|
||||||
|
const notStartedTasks = ['js:build', 'js:lint'];
|
||||||
|
return (
|
||||||
|
<motion.div
|
||||||
|
initial="hidden"
|
||||||
|
variants={variants}
|
||||||
|
whileInView="visible"
|
||||||
|
viewport={{ once: true }}
|
||||||
|
className="relative flex h-full min-h-[12rem] w-full flex-1 flex-col gap-2"
|
||||||
|
>
|
||||||
|
<div className="grid max-h-full grid-cols-2 items-stretch gap-8 overflow-hidden p-1 lg:grid-cols-3">
|
||||||
|
<motion.div
|
||||||
|
custom={2}
|
||||||
|
variants={itemVariants}
|
||||||
|
className="relative overflow-x-hidden rounded-lg bg-white p-2 ring-1 ring-slate-100 dark:bg-slate-950 dark:ring-slate-700"
|
||||||
|
>
|
||||||
|
<p className="text-sm font-medium text-slate-700 dark:text-slate-400">
|
||||||
|
Main Workflow
|
||||||
|
</p>
|
||||||
|
<div className="mt-2 flex flex-col gap-1">
|
||||||
|
<p className="overflow-x-auto truncate py-2 font-mono text-xs font-medium text-slate-900 dark:text-slate-400">
|
||||||
|
nx affected --target=build,lint,test
|
||||||
|
</p>
|
||||||
|
<div className="flex h-1.5 w-full flex-row rounded-full">
|
||||||
|
<div
|
||||||
|
title="2 tasks in completed"
|
||||||
|
className="cursor-pointer rounded-l-full bg-green-400 dark:bg-green-600"
|
||||||
|
style={{ flexGrow: 8 }}
|
||||||
|
/>
|
||||||
|
<div
|
||||||
|
title="12 tasks in progress"
|
||||||
|
className="cursor-pointer bg-yellow-400 dark:bg-yellow-600"
|
||||||
|
style={{ flexGrow: 12 }}
|
||||||
|
/>
|
||||||
|
<div
|
||||||
|
title="24 tasks not started"
|
||||||
|
className="cursor-pointer rounded-r-full bg-slate-100 dark:bg-slate-600"
|
||||||
|
style={{ flexGrow: 24 }}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div className="mt-2 flex flex-1 flex-col divide-y divide-slate-100 overflow-auto rounded-lg border border-slate-100 dark:divide-slate-700 dark:border-slate-700">
|
||||||
|
{notStartedTasks.map((i, idx) => (
|
||||||
|
<motion.div
|
||||||
|
key={`${i}-${idx}`}
|
||||||
|
custom={idx + 3}
|
||||||
|
variants={itemVariants}
|
||||||
|
className="flex w-full flex-row items-center gap-2 p-2 transition-colors ease-out hover:bg-slate-50/40 dark:hover:bg-slate-800/40"
|
||||||
|
>
|
||||||
|
<div className="text-xs">{i}</div>
|
||||||
|
</motion.div>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</motion.div>
|
||||||
|
<motion.div
|
||||||
|
custom={3}
|
||||||
|
variants={itemVariants}
|
||||||
|
className="relative flex flex-col gap-2 overflow-x-hidden rounded-lg bg-white p-2 ring-1 ring-slate-100 dark:bg-slate-950 dark:ring-slate-700"
|
||||||
|
>
|
||||||
|
<p className="text-sm font-medium text-slate-700 dark:text-slate-400">
|
||||||
|
Nx Agents
|
||||||
|
</p>
|
||||||
|
<div className="flex flex-1 flex-col overflow-hidden">
|
||||||
|
<motion.div custom={4} variants={itemVariants} className="relative">
|
||||||
|
<div className="sticky top-0 z-10 mt-1 rounded-md border border-slate-100 bg-slate-50 p-2 transition hover:bg-slate-100 dark:border-slate-800 dark:bg-slate-900 dark:hover:bg-slate-800">
|
||||||
|
<div className="flex items-center gap-x-2 text-xs font-medium">
|
||||||
|
<div className="flex-none animate-pulse rounded-full bg-yellow-500/20 p-1">
|
||||||
|
<div className="h-2 w-2 rounded-full bg-yellow-500"></div>
|
||||||
|
</div>
|
||||||
|
Agent 1<span className="flex-grow"></span>
|
||||||
|
<span className="mr-1 opacity-80">{agent1Items.length}</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<ul className="my-2 overflow-y-auto overflow-x-hidden">
|
||||||
|
{agent1Items.map((i, idx) => (
|
||||||
|
<motion.li
|
||||||
|
key={`agent-${i}-${idx}`}
|
||||||
|
custom={idx + 5}
|
||||||
|
variants={itemVariants}
|
||||||
|
className="truncate p-1 pl-4 text-xs"
|
||||||
|
>
|
||||||
|
{i}
|
||||||
|
</motion.li>
|
||||||
|
))}
|
||||||
|
</ul>
|
||||||
|
</motion.div>
|
||||||
|
<motion.div custom={6} variants={itemVariants} className="relative">
|
||||||
|
<div className="sticky top-0 z-10 mt-1 rounded-md border border-slate-100 bg-slate-50 p-2 transition hover:bg-slate-100 dark:border-slate-800 dark:bg-slate-900 dark:hover:bg-slate-800">
|
||||||
|
<div className="flex items-center gap-x-2 text-xs font-medium">
|
||||||
|
<div className="flex-none animate-pulse rounded-full bg-yellow-500/20 p-1">
|
||||||
|
<div className="h-2 w-2 rounded-full bg-yellow-500"></div>
|
||||||
|
</div>
|
||||||
|
Agent 2<span className="flex-grow"></span>
|
||||||
|
<span className="mr-1 opacity-80">{agent2Items.length}</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<ul className="my-2 overflow-y-auto overflow-x-hidden">
|
||||||
|
{agent2Items.map((i, idx) => (
|
||||||
|
<motion.li
|
||||||
|
key={`agent-${i}-${idx}`}
|
||||||
|
custom={idx + 7}
|
||||||
|
variants={itemVariants}
|
||||||
|
className="truncate p-1 pl-4 text-xs"
|
||||||
|
>
|
||||||
|
{i}
|
||||||
|
</motion.li>
|
||||||
|
))}
|
||||||
|
</ul>
|
||||||
|
</motion.div>
|
||||||
|
<motion.div
|
||||||
|
custom={8}
|
||||||
|
variants={itemVariants}
|
||||||
|
className="relative hidden lg:block"
|
||||||
|
>
|
||||||
|
<div className="sticky top-0 z-10 mt-1 rounded-md border border-slate-100 bg-slate-50 p-2 transition hover:bg-slate-100 dark:border-slate-800 dark:bg-slate-900 dark:hover:bg-slate-800">
|
||||||
|
<div className="flex items-center gap-x-2 text-xs font-medium">
|
||||||
|
<div className="flex-none animate-pulse rounded-full bg-yellow-500/20 p-1">
|
||||||
|
<div className="h-2 w-2 rounded-full bg-yellow-500"></div>
|
||||||
|
</div>
|
||||||
|
Agent 3<span className="flex-grow"></span>
|
||||||
|
<span className="mr-1 opacity-80">{agent3Items.length}</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<ul className="my-2 overflow-y-auto overflow-x-hidden">
|
||||||
|
{agent3Items.map((i, idx) => (
|
||||||
|
<motion.li
|
||||||
|
key={`agent-${i}-${idx}`}
|
||||||
|
custom={idx + 9}
|
||||||
|
variants={itemVariants}
|
||||||
|
className="truncate p-1 pl-4 text-xs"
|
||||||
|
>
|
||||||
|
{i}
|
||||||
|
</motion.li>
|
||||||
|
))}
|
||||||
|
</ul>
|
||||||
|
</motion.div>
|
||||||
|
</div>
|
||||||
|
</motion.div>
|
||||||
|
<motion.div
|
||||||
|
custom={4}
|
||||||
|
variants={itemVariants}
|
||||||
|
className="relative hidden flex-col gap-2 overflow-x-hidden rounded-lg bg-white p-2 ring-1 ring-slate-100 lg:flex dark:bg-slate-950 dark:ring-slate-700"
|
||||||
|
>
|
||||||
|
<p className="text-sm font-medium text-slate-700 dark:text-slate-400">
|
||||||
|
Nx Replay
|
||||||
|
</p>
|
||||||
|
<div className="flex flex-1 flex-col divide-y divide-slate-100 overflow-auto rounded-lg border border-slate-100 dark:divide-slate-800 dark:border-slate-800">
|
||||||
|
{nxReplayItems.map((i, idx) => (
|
||||||
|
<motion.div
|
||||||
|
key={`replay-${i}-${idx}`}
|
||||||
|
custom={idx + 10}
|
||||||
|
variants={itemVariants}
|
||||||
|
className="flex w-full flex-row items-center gap-2 p-2 text-xs transition-colors ease-out hover:bg-slate-50/40 dark:hover:bg-slate-800/40"
|
||||||
|
>
|
||||||
|
{i}
|
||||||
|
</motion.div>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
</motion.div>
|
||||||
|
</div>
|
||||||
|
</motion.div>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
const IncreasedVisibility = () => {
|
||||||
|
const variants = {
|
||||||
|
hidden: {
|
||||||
|
opacity: 0,
|
||||||
|
transition: {
|
||||||
|
when: 'afterChildren',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
visible: {
|
||||||
|
opacity: 1,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
return (
|
||||||
|
<motion.div
|
||||||
|
initial="hidden"
|
||||||
|
variants={variants}
|
||||||
|
whileInView="visible"
|
||||||
|
viewport={{ once: true }}
|
||||||
|
className="flex h-full min-h-[12rem] w-full flex-1 flex-col gap-4"
|
||||||
|
>
|
||||||
|
<div className="flex items-center gap-1.5">
|
||||||
|
{/*STATUS*/}
|
||||||
|
<div className="flex items-center gap-2">
|
||||||
|
<div className="m-1 h-2.5 w-2.5 flex-none rounded-full bg-red-500"></div>
|
||||||
|
<span
|
||||||
|
className="whitespace-nowrap text-lg font-medium"
|
||||||
|
data-testid="status-label"
|
||||||
|
>
|
||||||
|
Failed
|
||||||
|
</span>
|
||||||
|
with code: 1
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{/*COMPARE & FLAKY*/}
|
||||||
|
{/*<div className="flex items-center justify-end gap-1.5">
|
||||||
|
<button
|
||||||
|
type="button"
|
||||||
|
className="cursor-default rounded bg-white px-2 py-1 text-xs font-semibold text-slate-900 shadow-sm ring-1 ring-inset ring-slate-300 dark:bg-white/10 dark:text-slate-400 dark:ring-slate-700"
|
||||||
|
>
|
||||||
|
Compare to similar tasks
|
||||||
|
</button>
|
||||||
|
<button
|
||||||
|
type="button"
|
||||||
|
className="cursor-default rounded bg-white px-2 py-1 text-xs font-semibold text-slate-900 shadow-sm ring-1 ring-inset ring-slate-300 dark:bg-white/10 dark:text-slate-400 dark:ring-slate-700"
|
||||||
|
>
|
||||||
|
Set as "not flaky"
|
||||||
|
</button>
|
||||||
|
</div>*/}
|
||||||
|
<div>
|
||||||
|
<div className="border-b border-slate-100 dark:border-slate-700">
|
||||||
|
<div className="-mb-px flex space-x-4">
|
||||||
|
<span className="cursor-default whitespace-nowrap border-b-2 border-transparent px-0.5 py-2 text-xs font-medium text-slate-500 dark:text-slate-400">
|
||||||
|
Attempt 1
|
||||||
|
</span>
|
||||||
|
<span className="cursor-default whitespace-nowrap border-b-2 border-blue-500 px-0.5 py-2 text-xs font-medium text-blue-500 dark:border-sky-600 dark:text-sky-600">
|
||||||
|
Attempt 2
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<p className="text-xs">Feb 23, 2024 08:57:49 - 08:57:54 (4s)</p>
|
||||||
|
<motion.div className="terminal-output flex max-h-full min-h-[2rem] flex-col overflow-visible rounded-lg border border-slate-200 bg-slate-50 font-mono text-xs leading-normal text-slate-800 subpixel-antialiased dark:border-slate-700 dark:bg-slate-900 dark:text-slate-200">
|
||||||
|
<div className="flex items-center justify-between gap-4 rounded-t-lg border-b border-slate-200 bg-slate-100 px-2 py-1 dark:border-slate-700 dark:bg-slate-800">
|
||||||
|
<div className="font-sans text-sm font-medium">
|
||||||
|
<span className="group relative flex cursor-pointer items-center overflow-hidden whitespace-nowrap subpixel-antialiased dark:text-slate-300">
|
||||||
|
<span>nx run nx-dev:build</span>
|
||||||
|
<span className="transform opacity-0 transition-all">
|
||||||
|
<ClipboardDocumentIcon className="h-4 w-4" />
|
||||||
|
</span>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div className="overflow-hidden">
|
||||||
|
<pre className="overflow-x-hidden p-1 dark:text-slate-400">
|
||||||
|
{`nx run nx-dev:sitemap ✨ [next-sitemap]
|
||||||
|
Loading next-sitemap config:file:///home/workflows/workspace/nx-dev/nx-dev/next-sitemap.config.js
|
||||||
|
❌ [next-sitemap] Unable to find export-maker.
|
||||||
|
Make sure to build the project using "next build" command
|
||||||
|
node:internal/process/promises:289
|
||||||
|
triggerUncaughtException(err, true /* fromPromise */); ^
|
||||||
|
[Error:ENOENT: no such file or directory, stat '/home/workflows/workspace/dist/nx-dev/nx-dev/.next/export-marker.json']
|
||||||
|
errno: -2, code: 'ENOENT', syscall: 'stat', path: '/home/workflows/workspace/dist/nx-dev/nx-dev/.next/export-marker.json'
|
||||||
|
Node.js v20.9.0 Warning: command "pnpm next-sitemap --config
|
||||||
|
./nx-dev/nx-dev/next-sitemap.config.js" exited with non-zero status code`}
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
</motion.div>
|
||||||
|
</motion.div>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export function Counter({
|
||||||
|
value,
|
||||||
|
duration = 2,
|
||||||
|
}: {
|
||||||
|
value: number;
|
||||||
|
duration?: number;
|
||||||
|
}) {
|
||||||
|
const count = useMotionValue(0);
|
||||||
|
const rounded = useTransform(count, Math.round);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
const animation = animate(count, value, {
|
||||||
|
type: 'tween',
|
||||||
|
ease: 'easeOut',
|
||||||
|
duration,
|
||||||
|
});
|
||||||
|
|
||||||
|
return animation.stop;
|
||||||
|
}, []);
|
||||||
|
|
||||||
|
return <motion.span>{rounded}</motion.span>;
|
||||||
|
}
|
||||||
|
|
||||||
|
const items = [
|
||||||
|
{
|
||||||
|
title: 'Nx Agents: seamless task distribution',
|
||||||
|
header: <TaskDistribution />,
|
||||||
|
className: 'md:col-span-2',
|
||||||
|
icon: <ArrowsRightLeftIcon className="h-4 w-4 text-slate-500" />,
|
||||||
|
url: '/ci/features/distribute-task-execution',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'Nx Replay: secure computation cache',
|
||||||
|
header: <Caching />,
|
||||||
|
className: 'md:col-span-1',
|
||||||
|
icon: <CloudArrowDownIcon className="h-4 w-4 text-slate-500" />,
|
||||||
|
url: '/ci/features/remote-cache',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'Increased visibility',
|
||||||
|
header: <IncreasedVisibility />,
|
||||||
|
className: 'md:col-span-1',
|
||||||
|
icon: <ChartBarSquareIcon className="h-4 w-4 text-slate-500" />,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'Atomizer: task splitting & flaky rerun',
|
||||||
|
description: null,
|
||||||
|
header: <Atomizer />,
|
||||||
|
className: 'md:col-span-2',
|
||||||
|
icon: <Square3Stack3DIcon className="h-4 w-4 text-slate-500" />,
|
||||||
|
url: '/ci/features/split-e2e-tasks',
|
||||||
|
},
|
||||||
|
];
|
||||||
150
nx-dev/ui-enterprise/src/lib/statistics.tsx
Normal file
150
nx-dev/ui-enterprise/src/lib/statistics.tsx
Normal file
@ -0,0 +1,150 @@
|
|||||||
|
import { motion } from 'framer-motion';
|
||||||
|
import { useEffect, useState } from 'react';
|
||||||
|
import { SectionHeading } from './temp/typography';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Calculate the total number of years worth of compute.
|
||||||
|
*
|
||||||
|
* @param {number} millis - The total number of seconds.
|
||||||
|
* @return {number} The total number of years.
|
||||||
|
*/
|
||||||
|
function getTotalYears(millis: number): number {
|
||||||
|
/**
|
||||||
|
* The number of millis in a year is approximately:
|
||||||
|
* 86 400 000 millis/day * 365.25 days/year ≈ 31 557 600 000 seconds/year.
|
||||||
|
*/
|
||||||
|
const yearMillis = Number(31557600000);
|
||||||
|
return Math.round(millis / yearMillis);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fetches the time saved from a remote API.
|
||||||
|
*
|
||||||
|
* @returns {Promise} A promise that resolves to an object containing the time saved data.
|
||||||
|
* @returns {Date} The date the time saved data was retrieved.
|
||||||
|
* @returns {number} The time saved in the last 7 days.
|
||||||
|
* @returns {number} The time saved in the last 30 days.
|
||||||
|
* @returns {number} The time's saved since the start.
|
||||||
|
*/
|
||||||
|
function fetchTimeSaved(): Promise<{
|
||||||
|
date: Date;
|
||||||
|
last7days: number;
|
||||||
|
last30days: number;
|
||||||
|
sinceStart: number;
|
||||||
|
}> {
|
||||||
|
const apiUrl = 'https://cloud.nx.app/time-saved';
|
||||||
|
|
||||||
|
return fetch(apiUrl)
|
||||||
|
.then((response) => response.json())
|
||||||
|
.catch(() => ({
|
||||||
|
date: new Date(),
|
||||||
|
last7days: Math.round(Math.random() * 1000000000),
|
||||||
|
last30days: Math.round(Math.random() * 100000000000),
|
||||||
|
sinceStart: Math.round(Math.random() * 10000000000000),
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
|
const stats = [
|
||||||
|
{
|
||||||
|
id: 1,
|
||||||
|
name: 'Developers using Nx',
|
||||||
|
value: 2,
|
||||||
|
suffix: 'M+',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 3,
|
||||||
|
name: 'Active workspaces',
|
||||||
|
value: '4k',
|
||||||
|
suffix: '+',
|
||||||
|
},
|
||||||
|
{ id: 2, name: 'Compute time saved', value: 800, suffix: '+ years' },
|
||||||
|
{ id: 4, name: 'Runs daily', value: 100, suffix: 'k+' },
|
||||||
|
];
|
||||||
|
|
||||||
|
export function Statistics(): JSX.Element {
|
||||||
|
const variants = {
|
||||||
|
hidden: {
|
||||||
|
opacity: 0,
|
||||||
|
transition: {
|
||||||
|
when: 'afterChildren',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
visible: (i: number) => ({
|
||||||
|
opacity: 1,
|
||||||
|
transition: {
|
||||||
|
delay: i || 0,
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
};
|
||||||
|
const itemVariants = {
|
||||||
|
visible: (i: number) => ({
|
||||||
|
opacity: 1,
|
||||||
|
y: 0,
|
||||||
|
transition: {
|
||||||
|
delay: i * 0.25,
|
||||||
|
duration: 0.65,
|
||||||
|
ease: 'easeOut',
|
||||||
|
when: 'beforeChildren',
|
||||||
|
staggerChildren: 0.3,
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
hidden: {
|
||||||
|
opacity: 0,
|
||||||
|
y: 4,
|
||||||
|
transition: {
|
||||||
|
when: 'afterChildren',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
const [timeSaved, setTimeSaved] = useState<number>(800);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
let ignore = false;
|
||||||
|
fetchTimeSaved().then((data) => {
|
||||||
|
if (!ignore) {
|
||||||
|
setTimeSaved(getTotalYears(data.sinceStart));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return () => {
|
||||||
|
ignore = true;
|
||||||
|
};
|
||||||
|
}, []);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<section className="mx-auto max-w-7xl px-6 lg:px-8">
|
||||||
|
<div className="mx-auto max-w-2xl lg:mx-0 lg:max-w-xl">
|
||||||
|
<SectionHeading as="h2" variant="title" id="statistics">
|
||||||
|
Trusted by startups and Fortune 500 companies
|
||||||
|
</SectionHeading>
|
||||||
|
{/*<SectionHeading as="p" variant="subtitle" className="mt-6">*/}
|
||||||
|
{/* Nx Cloud provides plans for open source projects, startups, and large*/}
|
||||||
|
{/* enterprises.*/}
|
||||||
|
{/*</SectionHeading>*/}
|
||||||
|
</div>
|
||||||
|
<motion.dl
|
||||||
|
initial="hidden"
|
||||||
|
variants={variants}
|
||||||
|
whileInView="visible"
|
||||||
|
viewport={{ once: true }}
|
||||||
|
className="mx-auto mt-16 grid max-w-2xl grid-cols-1 gap-x-8 gap-y-10 text-slate-950 sm:mt-20 sm:grid-cols-2 sm:gap-y-16 lg:mx-0 lg:max-w-none lg:grid-cols-4 dark:text-white"
|
||||||
|
>
|
||||||
|
{stats.map((stat, idx) => (
|
||||||
|
<motion.div
|
||||||
|
key={`statistic-${idx}`}
|
||||||
|
custom={idx}
|
||||||
|
variants={itemVariants}
|
||||||
|
className="flex flex-col gap-y-3 border-l border-black/10 pl-6 dark:border-white/10"
|
||||||
|
>
|
||||||
|
<dt className="text-sm leading-6 text-slate-600 dark:text-slate-500">
|
||||||
|
{stat.name}
|
||||||
|
</dt>
|
||||||
|
<dd className="order-first text-3xl font-semibold tracking-tight">
|
||||||
|
{stat.name === 'Compute time saved' ? timeSaved : stat.value}
|
||||||
|
{stat.suffix}
|
||||||
|
</dd>
|
||||||
|
</motion.div>
|
||||||
|
))}
|
||||||
|
</motion.dl>
|
||||||
|
</section>
|
||||||
|
);
|
||||||
|
}
|
||||||
59
nx-dev/ui-enterprise/src/lib/temp/typography.tsx
Normal file
59
nx-dev/ui-enterprise/src/lib/temp/typography.tsx
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
import { cx } from '@nx/nx-dev/ui-primitives';
|
||||||
|
import { ElementType, ReactNode } from 'react';
|
||||||
|
|
||||||
|
type AllowedVariants = 'title' | 'display' | 'subtitle';
|
||||||
|
|
||||||
|
type Headings = {
|
||||||
|
as: ElementType;
|
||||||
|
className?: string;
|
||||||
|
children: ReactNode | ReactNode[];
|
||||||
|
id?: string;
|
||||||
|
variant: AllowedVariants;
|
||||||
|
};
|
||||||
|
|
||||||
|
type Description = {
|
||||||
|
as: ElementType;
|
||||||
|
className?: string;
|
||||||
|
children: ReactNode | ReactNode[];
|
||||||
|
id?: string;
|
||||||
|
};
|
||||||
|
|
||||||
|
const variants: Record<AllowedVariants, string> = {
|
||||||
|
title:
|
||||||
|
'text-3xl font-medium tracking-tight text-slate-950 dark:text-white sm:text-5xl',
|
||||||
|
display:
|
||||||
|
'text-4xl font-medium tracking-tight text-slate-950 dark:text-white sm:text-7xl',
|
||||||
|
subtitle: 'text-lg leading-8 text-slate-700 dark:text-slate-300 sm:text-2xl',
|
||||||
|
};
|
||||||
|
|
||||||
|
export function SectionHeading({
|
||||||
|
as = 'div',
|
||||||
|
children,
|
||||||
|
className,
|
||||||
|
variant,
|
||||||
|
...rest
|
||||||
|
}: Headings): JSX.Element {
|
||||||
|
const Tag = as;
|
||||||
|
return (
|
||||||
|
<Tag className={cx(variants[variant], className)} {...rest}>
|
||||||
|
{children}
|
||||||
|
</Tag>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export function SectionDescription({
|
||||||
|
as = 'div',
|
||||||
|
children,
|
||||||
|
className,
|
||||||
|
...rest
|
||||||
|
}: Description): JSX.Element {
|
||||||
|
const Tag = as;
|
||||||
|
return (
|
||||||
|
<Tag
|
||||||
|
className={cx('text-slate-700 dark:text-slate-400', className)}
|
||||||
|
{...rest}
|
||||||
|
>
|
||||||
|
{children}
|
||||||
|
</Tag>
|
||||||
|
);
|
||||||
|
}
|
||||||
220
nx-dev/ui-enterprise/src/lib/trusted-by.tsx
Normal file
220
nx-dev/ui-enterprise/src/lib/trusted-by.tsx
Normal file
@ -0,0 +1,220 @@
|
|||||||
|
import { AwsAmplifyIcon } from './logos/aws-amplify';
|
||||||
|
import { RoyalBankOfCanadaColoredIcon } from './logos/royal-bank-of-canada';
|
||||||
|
import { CiscoIcon } from './logos/cisco';
|
||||||
|
import { ManIcon } from './logos/man';
|
||||||
|
import { CapitalOneIcon } from './logos/capital-one';
|
||||||
|
import { ShopifyIcon } from './logos/shopify';
|
||||||
|
import { VmwareIcon } from './logos/vmware';
|
||||||
|
import { StorybookIcon } from './logos/storybook';
|
||||||
|
import { FicoIcon } from './logos/fico';
|
||||||
|
import { CaterpillarIcon } from './logos/caterpillar';
|
||||||
|
import { SectionHeading } from './temp/typography';
|
||||||
|
import { motion } from 'framer-motion';
|
||||||
|
import { AmericanAirlinesIcon } from './logos/american-airlines';
|
||||||
|
import { BillColoredIcon } from './logos/bill';
|
||||||
|
import { SevenElevenColoredIcon } from './logos/7eleven';
|
||||||
|
import { HiltonIcon } from './logos/hilton';
|
||||||
|
import { RedwoodJsIcon } from './logos/redwood-js';
|
||||||
|
import { ReactQueryIcon } from './logos/react-query';
|
||||||
|
|
||||||
|
export function TrustedBy(): JSX.Element {
|
||||||
|
const variants = {
|
||||||
|
hidden: {
|
||||||
|
opacity: 0,
|
||||||
|
transition: {
|
||||||
|
when: 'afterChildren',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
visible: (i: number) => ({
|
||||||
|
opacity: 1,
|
||||||
|
transition: {
|
||||||
|
delay: i || 0,
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
};
|
||||||
|
const itemVariants = {
|
||||||
|
visible: (i: number) => ({
|
||||||
|
opacity: 1,
|
||||||
|
y: 0,
|
||||||
|
transition: {
|
||||||
|
delay: i * 0.25,
|
||||||
|
duration: 0.65,
|
||||||
|
ease: 'easeOut',
|
||||||
|
when: 'beforeChildren',
|
||||||
|
staggerChildren: 0.3,
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
hidden: {
|
||||||
|
opacity: 0,
|
||||||
|
y: 4,
|
||||||
|
transition: {
|
||||||
|
when: 'afterChildren',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
return (
|
||||||
|
<section className="">
|
||||||
|
<div className="mx-auto max-w-7xl px-4 pb-12 sm:px-6 lg:px-8 lg:pb-16">
|
||||||
|
{/*<div className="mx-auto max-w-2xl lg:mx-0 lg:max-w-xl">*/}
|
||||||
|
{/* <SectionHeading as="h2" variant="title" id="trusted-by">*/}
|
||||||
|
{/* Trusted by startups and Fortune 500 companies*/}
|
||||||
|
{/* </SectionHeading>*/}
|
||||||
|
{/*</div>*/}
|
||||||
|
<motion.dl
|
||||||
|
initial="hidden"
|
||||||
|
variants={variants}
|
||||||
|
whileInView="visible"
|
||||||
|
viewport={{ once: true }}
|
||||||
|
className="mt-4 grid grid-cols-2 gap-0.5 md:grid-cols-5"
|
||||||
|
>
|
||||||
|
<motion.div
|
||||||
|
custom={1}
|
||||||
|
variants={itemVariants}
|
||||||
|
className="col-span-1 flex items-center justify-center"
|
||||||
|
>
|
||||||
|
<AwsAmplifyIcon className="h-14 w-14 text-[#FF9900]" />
|
||||||
|
</motion.div>
|
||||||
|
<motion.div
|
||||||
|
custom={2}
|
||||||
|
variants={itemVariants}
|
||||||
|
className="col-span-1 flex h-14 items-center justify-center lg:h-28"
|
||||||
|
>
|
||||||
|
<ManIcon aria-hidden="true" className="h-14 w-14 text-[#E40045]" />
|
||||||
|
</motion.div>
|
||||||
|
<motion.div
|
||||||
|
custom={3}
|
||||||
|
variants={itemVariants}
|
||||||
|
className="col-span-1 flex h-14 items-center justify-center lg:h-28"
|
||||||
|
>
|
||||||
|
<CapitalOneIcon
|
||||||
|
aria-hidden="true"
|
||||||
|
className="h-28 w-28 text-black dark:text-white"
|
||||||
|
/>
|
||||||
|
</motion.div>
|
||||||
|
<motion.div
|
||||||
|
custom={4}
|
||||||
|
variants={itemVariants}
|
||||||
|
className="col-span-1 flex h-14 items-center justify-center lg:h-28"
|
||||||
|
>
|
||||||
|
<ShopifyIcon
|
||||||
|
aria-hidden="true"
|
||||||
|
className="h-12 w-12 text-[#7AB55C]"
|
||||||
|
/>
|
||||||
|
</motion.div>
|
||||||
|
<motion.div
|
||||||
|
custom={5}
|
||||||
|
variants={itemVariants}
|
||||||
|
className="col-span-1 flex h-14 items-center justify-center lg:h-28"
|
||||||
|
>
|
||||||
|
<RoyalBankOfCanadaColoredIcon
|
||||||
|
aria-hidden="true"
|
||||||
|
className="h-14 w-14"
|
||||||
|
/>
|
||||||
|
</motion.div>
|
||||||
|
<motion.div
|
||||||
|
custom={6}
|
||||||
|
variants={itemVariants}
|
||||||
|
className="col-span-1 flex h-14 items-center justify-center lg:h-28"
|
||||||
|
>
|
||||||
|
<VmwareIcon
|
||||||
|
aria-hidden="true"
|
||||||
|
className="h-28 w-28 text-black dark:text-white"
|
||||||
|
/>
|
||||||
|
</motion.div>
|
||||||
|
<motion.div
|
||||||
|
custom={7}
|
||||||
|
variants={itemVariants}
|
||||||
|
className="col-span-1 flex h-14 items-center justify-center lg:h-28"
|
||||||
|
>
|
||||||
|
<StorybookIcon
|
||||||
|
aria-hidden="true"
|
||||||
|
className="h-12 w-12 text-[#FF4785]"
|
||||||
|
/>
|
||||||
|
</motion.div>
|
||||||
|
<motion.div
|
||||||
|
custom={8}
|
||||||
|
variants={itemVariants}
|
||||||
|
className="col-span-1 flex h-14 items-center justify-center lg:h-28"
|
||||||
|
>
|
||||||
|
<FicoIcon aria-hidden="true" className="h-28 w-28 text-[#0A6DE6]" />
|
||||||
|
</motion.div>
|
||||||
|
<motion.div
|
||||||
|
custom={9}
|
||||||
|
variants={itemVariants}
|
||||||
|
className="col-span-1 flex h-14 items-center justify-center lg:h-28"
|
||||||
|
>
|
||||||
|
<CaterpillarIcon
|
||||||
|
aria-hidden="true"
|
||||||
|
className="h-14 w-14 text-[#FFCD11]"
|
||||||
|
/>
|
||||||
|
</motion.div>
|
||||||
|
<motion.div
|
||||||
|
custom={10}
|
||||||
|
variants={itemVariants}
|
||||||
|
className="col-span-1 flex items-center justify-center"
|
||||||
|
>
|
||||||
|
<CiscoIcon
|
||||||
|
aria-hidden="true"
|
||||||
|
className="h-20 w-20 text-[#1BA0D7]"
|
||||||
|
/>
|
||||||
|
</motion.div>
|
||||||
|
<motion.div
|
||||||
|
custom={11}
|
||||||
|
variants={itemVariants}
|
||||||
|
className="col-span-1 flex items-center justify-center"
|
||||||
|
>
|
||||||
|
<BillColoredIcon aria-hidden="true" className="h-14 w-14" />
|
||||||
|
</motion.div>
|
||||||
|
<motion.div
|
||||||
|
custom={12}
|
||||||
|
variants={itemVariants}
|
||||||
|
className="col-span-1 flex items-center justify-center"
|
||||||
|
>
|
||||||
|
<SevenElevenColoredIcon aria-hidden="true" className="h-14 w-14" />
|
||||||
|
</motion.div>
|
||||||
|
<motion.div
|
||||||
|
custom={13}
|
||||||
|
variants={itemVariants}
|
||||||
|
className="col-span-1 flex items-center justify-center"
|
||||||
|
>
|
||||||
|
<HiltonIcon
|
||||||
|
aria-hidden="true"
|
||||||
|
className="h-20 w-20 text-black dark:text-white"
|
||||||
|
/>
|
||||||
|
</motion.div>
|
||||||
|
<motion.div
|
||||||
|
custom={14}
|
||||||
|
variants={itemVariants}
|
||||||
|
className="col-span-1 flex items-center justify-center"
|
||||||
|
>
|
||||||
|
<RedwoodJsIcon
|
||||||
|
aria-hidden="true"
|
||||||
|
className="h-14 w-14 text-[#BF4722]"
|
||||||
|
/>
|
||||||
|
</motion.div>
|
||||||
|
<motion.div
|
||||||
|
custom={14}
|
||||||
|
variants={itemVariants}
|
||||||
|
className="col-span-1 flex items-center justify-center"
|
||||||
|
>
|
||||||
|
<ReactQueryIcon
|
||||||
|
aria-hidden="true"
|
||||||
|
className="h-14 w-14 text-[#FF4154]"
|
||||||
|
/>
|
||||||
|
</motion.div>
|
||||||
|
{/*<motion.div*/}
|
||||||
|
{/* custom={11}*/}
|
||||||
|
{/* variants={itemVariants}*/}
|
||||||
|
{/* className="col-span-1 flex items-center justify-center"*/}
|
||||||
|
{/*>*/}
|
||||||
|
{/* <AmericanAirlinesIcon*/}
|
||||||
|
{/* aria-hidden="true"*/}
|
||||||
|
{/* className="h-12 w-12 text-[#0071CE]"*/}
|
||||||
|
{/* />*/}
|
||||||
|
{/*</motion.div>*/}
|
||||||
|
</motion.dl>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
);
|
||||||
|
}
|
||||||
25
nx-dev/ui-enterprise/tsconfig.json
Normal file
25
nx-dev/ui-enterprise/tsconfig.json
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
{
|
||||||
|
"extends": "../../tsconfig.base.json",
|
||||||
|
"compilerOptions": {
|
||||||
|
"jsx": "react-jsx",
|
||||||
|
"allowJs": true,
|
||||||
|
"esModuleInterop": true,
|
||||||
|
"allowSyntheticDefaultImports": true,
|
||||||
|
"forceConsistentCasingInFileNames": true,
|
||||||
|
"strict": true,
|
||||||
|
"noImplicitOverride": true,
|
||||||
|
"noPropertyAccessFromIndexSignature": true,
|
||||||
|
"noImplicitReturns": true,
|
||||||
|
"noFallthroughCasesInSwitch": true
|
||||||
|
},
|
||||||
|
"files": [],
|
||||||
|
"include": [],
|
||||||
|
"references": [
|
||||||
|
{
|
||||||
|
"path": "./tsconfig.lib.json"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "./tsconfig.spec.json"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
24
nx-dev/ui-enterprise/tsconfig.lib.json
Normal file
24
nx-dev/ui-enterprise/tsconfig.lib.json
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
{
|
||||||
|
"extends": "./tsconfig.json",
|
||||||
|
"compilerOptions": {
|
||||||
|
"outDir": "../../dist/out-tsc",
|
||||||
|
"types": ["node"],
|
||||||
|
"lib": ["dom"]
|
||||||
|
},
|
||||||
|
"files": [
|
||||||
|
"../../node_modules/@nx/react/typings/cssmodule.d.ts",
|
||||||
|
"../../node_modules/@nx/react/typings/image.d.ts"
|
||||||
|
],
|
||||||
|
"exclude": [
|
||||||
|
"**/*.spec.ts",
|
||||||
|
"**/*.test.ts",
|
||||||
|
"**/*.spec.tsx",
|
||||||
|
"**/*.test.tsx",
|
||||||
|
"**/*.spec.js",
|
||||||
|
"**/*.test.js",
|
||||||
|
"**/*.spec.jsx",
|
||||||
|
"**/*.test.jsx",
|
||||||
|
"jest.config.ts"
|
||||||
|
],
|
||||||
|
"include": ["**/*.js", "**/*.jsx", "**/*.ts", "**/*.tsx"]
|
||||||
|
}
|
||||||
20
nx-dev/ui-enterprise/tsconfig.spec.json
Normal file
20
nx-dev/ui-enterprise/tsconfig.spec.json
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
{
|
||||||
|
"extends": "./tsconfig.json",
|
||||||
|
"compilerOptions": {
|
||||||
|
"outDir": "../../dist/out-tsc",
|
||||||
|
"module": "commonjs",
|
||||||
|
"types": ["jest", "node"]
|
||||||
|
},
|
||||||
|
"include": [
|
||||||
|
"**/*.test.ts",
|
||||||
|
"**/*.spec.ts",
|
||||||
|
"**/*.test.tsx",
|
||||||
|
"**/*.spec.tsx",
|
||||||
|
"**/*.test.js",
|
||||||
|
"**/*.spec.js",
|
||||||
|
"**/*.test.jsx",
|
||||||
|
"**/*.spec.jsx",
|
||||||
|
"**/*.d.ts",
|
||||||
|
"jest.config.ts"
|
||||||
|
]
|
||||||
|
}
|
||||||
11
package.json
11
package.json
@ -309,16 +309,15 @@
|
|||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@docsearch/react": "^3.3.0",
|
"@docsearch/react": "^3.3.0",
|
||||||
"@headlessui/react": "^1.7.3",
|
"@headlessui/react": "^1.7.19",
|
||||||
"@heroicons/react": "^2.0.12",
|
"@heroicons/react": "^2.1.3",
|
||||||
"@markdoc/markdoc": "0.2.2",
|
"@markdoc/markdoc": "0.2.2",
|
||||||
"@monaco-editor/react": "^4.4.6",
|
"@monaco-editor/react": "^4.4.6",
|
||||||
"@napi-rs/canvas": "^0.1.19",
|
"@napi-rs/canvas": "^0.1.19",
|
||||||
"@swc/helpers": "~0.5.2",
|
"@swc/helpers": "~0.5.2",
|
||||||
"@tailwindcss/aspect-ratio": "^0.4.2",
|
"@tailwindcss/aspect-ratio": "^0.4.2",
|
||||||
"@tailwindcss/forms": "^0.5.3",
|
"@tailwindcss/forms": "^0.5.7",
|
||||||
"@tailwindcss/line-clamp": "^0.4.2",
|
"@tailwindcss/typography": "^0.5.12",
|
||||||
"@tailwindcss/typography": "^0.5.7",
|
|
||||||
"@types/license-checker": "^25.0.3",
|
"@types/license-checker": "^25.0.3",
|
||||||
"@types/minimatch": "^5.1.2",
|
"@types/minimatch": "^5.1.2",
|
||||||
"@widgetbot/react-embed": "^1.9.0",
|
"@widgetbot/react-embed": "^1.9.0",
|
||||||
@ -350,7 +349,7 @@
|
|||||||
"send": "0.17.1",
|
"send": "0.17.1",
|
||||||
"string-width": "^4.2.3",
|
"string-width": "^4.2.3",
|
||||||
"strong-log-transformer": "^2.1.0",
|
"strong-log-transformer": "^2.1.0",
|
||||||
"tailwind-merge": "^1.8.1",
|
"tailwind-merge": "^2.3.0",
|
||||||
"tailwindcss": "3.4.3",
|
"tailwindcss": "3.4.3",
|
||||||
"tslib": "^2.3.0",
|
"tslib": "^2.3.0",
|
||||||
"weak-napi": "^2.0.2",
|
"weak-napi": "^2.0.2",
|
||||||
|
|||||||
85
pnpm-lock.yaml
generated
85
pnpm-lock.yaml
generated
@ -13,11 +13,11 @@ dependencies:
|
|||||||
specifier: ^3.3.0
|
specifier: ^3.3.0
|
||||||
version: 3.3.0(@algolia/client-search@4.22.1)(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0)
|
version: 3.3.0(@algolia/client-search@4.22.1)(@types/react@18.2.33)(react-dom@18.2.0)(react@18.2.0)
|
||||||
'@headlessui/react':
|
'@headlessui/react':
|
||||||
specifier: ^1.7.3
|
specifier: ^1.7.19
|
||||||
version: 1.7.3(react-dom@18.2.0)(react@18.2.0)
|
version: 1.7.19(react-dom@18.2.0)(react@18.2.0)
|
||||||
'@heroicons/react':
|
'@heroicons/react':
|
||||||
specifier: ^2.0.12
|
specifier: ^2.1.3
|
||||||
version: 2.0.12(react@18.2.0)
|
version: 2.1.3(react@18.2.0)
|
||||||
'@markdoc/markdoc':
|
'@markdoc/markdoc':
|
||||||
specifier: 0.2.2
|
specifier: 0.2.2
|
||||||
version: 0.2.2(@types/react@18.2.33)(react@18.2.0)
|
version: 0.2.2(@types/react@18.2.33)(react@18.2.0)
|
||||||
@ -34,14 +34,11 @@ dependencies:
|
|||||||
specifier: ^0.4.2
|
specifier: ^0.4.2
|
||||||
version: 0.4.2(tailwindcss@3.4.3)
|
version: 0.4.2(tailwindcss@3.4.3)
|
||||||
'@tailwindcss/forms':
|
'@tailwindcss/forms':
|
||||||
specifier: ^0.5.3
|
|
||||||
version: 0.5.3(tailwindcss@3.4.3)
|
|
||||||
'@tailwindcss/line-clamp':
|
|
||||||
specifier: ^0.4.2
|
|
||||||
version: 0.4.2(tailwindcss@3.4.3)
|
|
||||||
'@tailwindcss/typography':
|
|
||||||
specifier: ^0.5.7
|
specifier: ^0.5.7
|
||||||
version: 0.5.7(tailwindcss@3.4.3)
|
version: 0.5.7(tailwindcss@3.4.3)
|
||||||
|
'@tailwindcss/typography':
|
||||||
|
specifier: ^0.5.12
|
||||||
|
version: 0.5.12(tailwindcss@3.4.3)
|
||||||
'@types/license-checker':
|
'@types/license-checker':
|
||||||
specifier: ^25.0.3
|
specifier: ^25.0.3
|
||||||
version: 25.0.3
|
version: 25.0.3
|
||||||
@ -136,8 +133,8 @@ dependencies:
|
|||||||
specifier: ^2.1.0
|
specifier: ^2.1.0
|
||||||
version: 2.1.0
|
version: 2.1.0
|
||||||
tailwind-merge:
|
tailwind-merge:
|
||||||
specifier: ^1.8.1
|
specifier: ^2.3.0
|
||||||
version: 1.8.1
|
version: 2.3.0
|
||||||
tailwindcss:
|
tailwindcss:
|
||||||
specifier: 3.4.3
|
specifier: 3.4.3
|
||||||
version: 3.4.3(ts-node@10.9.1)
|
version: 3.4.3(ts-node@10.9.1)
|
||||||
@ -4809,13 +4806,6 @@ packages:
|
|||||||
regenerator-runtime: 0.14.0
|
regenerator-runtime: 0.14.0
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/@babel/runtime@7.23.9:
|
|
||||||
resolution: {integrity: sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw==}
|
|
||||||
engines: {node: '>=6.9.0'}
|
|
||||||
dependencies:
|
|
||||||
regenerator-runtime: 0.14.0
|
|
||||||
dev: true
|
|
||||||
|
|
||||||
/@babel/runtime@7.24.0:
|
/@babel/runtime@7.24.0:
|
||||||
resolution: {integrity: sha512-Chk32uHMg6TnQdvw2e9IlqPpFX/6NLuK0Ys2PqLb7/gL5uFn9mXvK715FGLlOLQrcO4qIkNHkvPGktzzXexsFw==}
|
resolution: {integrity: sha512-Chk32uHMg6TnQdvw2e9IlqPpFX/6NLuK0Ys2PqLb7/gL5uFn9mXvK715FGLlOLQrcO4qIkNHkvPGktzzXexsFw==}
|
||||||
engines: {node: '>=6.9.0'}
|
engines: {node: '>=6.9.0'}
|
||||||
@ -4823,6 +4813,13 @@ packages:
|
|||||||
regenerator-runtime: 0.14.0
|
regenerator-runtime: 0.14.0
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
|
/@babel/runtime@7.24.4:
|
||||||
|
resolution: {integrity: sha512-dkxf7+hn8mFBwKjs9bvBlArzLVxVbS8usaPUDd5p2a9JCL9tB8OaOVN1isD4+Xyk4ns89/xeOmbQvgdK7IIVdA==}
|
||||||
|
engines: {node: '>=6.9.0'}
|
||||||
|
dependencies:
|
||||||
|
regenerator-runtime: 0.14.0
|
||||||
|
dev: false
|
||||||
|
|
||||||
/@babel/standalone@7.23.10:
|
/@babel/standalone@7.23.10:
|
||||||
resolution: {integrity: sha512-xqWviI/pt1Zb/d+6ilWa5IDL2mkDzsBnlHbreqnfyP3/QB/ofQ1bNVcHj8YQX154Rf/xZKR6y0s1ydVF3nAS8g==}
|
resolution: {integrity: sha512-xqWviI/pt1Zb/d+6ilWa5IDL2mkDzsBnlHbreqnfyP3/QB/ofQ1bNVcHj8YQX154Rf/xZKR6y0s1ydVF3nAS8g==}
|
||||||
engines: {node: '>=6.9.0'}
|
engines: {node: '>=6.9.0'}
|
||||||
@ -6543,19 +6540,21 @@ packages:
|
|||||||
resolution: {integrity: sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==}
|
resolution: {integrity: sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==}
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/@headlessui/react@1.7.3(react-dom@18.2.0)(react@18.2.0):
|
/@headlessui/react@1.7.19(react-dom@18.2.0)(react@18.2.0):
|
||||||
resolution: {integrity: sha512-LGp06SrGv7BMaIQlTs8s2G06moqkI0cb0b8stgq7KZ3xcHdH3qMP+cRyV7qe5x4XEW/IGY48BW4fLesD6NQLng==}
|
resolution: {integrity: sha512-Ll+8q3OlMJfJbAKM/+/Y2q6PPYbryqNTXDbryx7SXLIDamkF6iQFbriYHga0dY44PvDhvvBWCx1Xj4U5+G4hOw==}
|
||||||
engines: {node: '>=10'}
|
engines: {node: '>=10'}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
react: ^16 || ^17 || ^18
|
react: ^16 || ^17 || ^18
|
||||||
react-dom: ^16 || ^17 || ^18
|
react-dom: ^16 || ^17 || ^18
|
||||||
dependencies:
|
dependencies:
|
||||||
|
'@tanstack/react-virtual': 3.4.0(react-dom@18.2.0)(react@18.2.0)
|
||||||
|
client-only: 0.0.1
|
||||||
react: 18.2.0
|
react: 18.2.0
|
||||||
react-dom: 18.2.0(react@18.2.0)
|
react-dom: 18.2.0(react@18.2.0)
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/@heroicons/react@2.0.12(react@18.2.0):
|
/@heroicons/react@2.1.3(react@18.2.0):
|
||||||
resolution: {integrity: sha512-FZxKh3i9aKIDxyALTgIpSF2t6V6/eZfF5mRu41QlwkX3Oxzecdm1u6dpft6PQGxIBwO7TKYWaMAYYL8mp/EaOg==}
|
resolution: {integrity: sha512-fEcPfo4oN345SoqdlCDdSa4ivjaKbk0jTd+oubcgNxnNgAfzysfwWfQUr+51wigiWHQQRiZNd1Ao0M5Y3M2EGg==}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
react: '>= 16'
|
react: '>= 16'
|
||||||
dependencies:
|
dependencies:
|
||||||
@ -12614,8 +12613,8 @@ packages:
|
|||||||
tailwindcss: 3.4.3(ts-node@10.9.1)
|
tailwindcss: 3.4.3(ts-node@10.9.1)
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/@tailwindcss/forms@0.5.3(tailwindcss@3.4.3):
|
/@tailwindcss/forms@0.5.7(tailwindcss@3.4.3):
|
||||||
resolution: {integrity: sha512-y5mb86JUoiUgBjY/o6FJSFZSEttfb3Q5gllE4xoKjAAD+vBrnIhE4dViwUuow3va8mpH4s9jyUbUbrRGoRdc2Q==}
|
resolution: {integrity: sha512-QE7X69iQI+ZXwldE+rzasvbJiyV/ju1FGHH0Qn2W3FKbuYtqp8LKcy6iSw79fVUT5/Vvf+0XgLCeYVG+UV6hOw==}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
tailwindcss: '>=3.0.0 || >= 3.0.0-alpha.1'
|
tailwindcss: '>=3.0.0 || >= 3.0.0-alpha.1'
|
||||||
dependencies:
|
dependencies:
|
||||||
@ -12623,16 +12622,8 @@ packages:
|
|||||||
tailwindcss: 3.4.3(ts-node@10.9.1)
|
tailwindcss: 3.4.3(ts-node@10.9.1)
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/@tailwindcss/line-clamp@0.4.2(tailwindcss@3.4.3):
|
/@tailwindcss/typography@0.5.12(tailwindcss@3.4.3):
|
||||||
resolution: {integrity: sha512-HFzAQuqYCjyy/SX9sLGB1lroPzmcnWv1FHkIpmypte10hptf4oPUfucryMKovZh2u0uiS9U5Ty3GghWfEJGwVw==}
|
resolution: {integrity: sha512-CNwpBpconcP7ppxmuq3qvaCxiRWnbhANpY/ruH4L5qs2GCiVDJXde/pjj2HWPV1+Q4G9+V/etrwUYopdcjAlyg==}
|
||||||
peerDependencies:
|
|
||||||
tailwindcss: '>=2.0.0 || >=3.0.0 || >=3.0.0-alpha.1'
|
|
||||||
dependencies:
|
|
||||||
tailwindcss: 3.4.3(ts-node@10.9.1)
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/@tailwindcss/typography@0.5.7(tailwindcss@3.4.3):
|
|
||||||
resolution: {integrity: sha512-JTTSTrgZfp6Ki4svhPA4mkd9nmQ/j9EfE7SbHJ1cLtthKkpW2OxsFXzSmxbhYbEkfNIyAyhle5p4SYyKRbz/jg==}
|
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
tailwindcss: '>=3.0.0 || insiders'
|
tailwindcss: '>=3.0.0 || insiders'
|
||||||
dependencies:
|
dependencies:
|
||||||
@ -12643,12 +12634,27 @@ packages:
|
|||||||
tailwindcss: 3.4.3(ts-node@10.9.1)
|
tailwindcss: 3.4.3(ts-node@10.9.1)
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
|
/@tanstack/react-virtual@3.4.0(react-dom@18.2.0)(react@18.2.0):
|
||||||
|
resolution: {integrity: sha512-GZN4xn/Tg5w7gvYeVcMVCeL4pEyUhvg+Cp6KX2Z01C4FRNxIWMgIQ9ibgMarNQfo+gt0PVLcEER4A9sNv/jlow==}
|
||||||
|
peerDependencies:
|
||||||
|
react: ^16.8.0 || ^17.0.0 || ^18.0.0
|
||||||
|
react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
|
||||||
|
dependencies:
|
||||||
|
'@tanstack/virtual-core': 3.4.0
|
||||||
|
react: 18.2.0
|
||||||
|
react-dom: 18.2.0(react@18.2.0)
|
||||||
|
dev: false
|
||||||
|
|
||||||
|
/@tanstack/virtual-core@3.4.0:
|
||||||
|
resolution: {integrity: sha512-75jXqXxqq5M5Veb9KP1STi8kA5u408uOOAefk2ftHDGCpUk3RP6zX++QqfbmHJTBiU72NQ+ghgCZVts/Wocz8Q==}
|
||||||
|
dev: false
|
||||||
|
|
||||||
/@testing-library/dom@9.3.4:
|
/@testing-library/dom@9.3.4:
|
||||||
resolution: {integrity: sha512-FlS4ZWlp97iiNWig0Muq8p+3rVDjRiYE+YKGbAqXOu9nwJFFOdL00kFpz42M+4huzYi86vAK1sOOfyOG45muIQ==}
|
resolution: {integrity: sha512-FlS4ZWlp97iiNWig0Muq8p+3rVDjRiYE+YKGbAqXOu9nwJFFOdL00kFpz42M+4huzYi86vAK1sOOfyOG45muIQ==}
|
||||||
engines: {node: '>=14'}
|
engines: {node: '>=14'}
|
||||||
dependencies:
|
dependencies:
|
||||||
'@babel/code-frame': 7.23.5
|
'@babel/code-frame': 7.23.5
|
||||||
'@babel/runtime': 7.23.9
|
'@babel/runtime': 7.24.0
|
||||||
'@types/aria-query': 5.0.4
|
'@types/aria-query': 5.0.4
|
||||||
aria-query: 5.1.3
|
aria-query: 5.1.3
|
||||||
chalk: 4.1.2
|
chalk: 4.1.2
|
||||||
@ -28953,7 +28959,6 @@ packages:
|
|||||||
|
|
||||||
/regenerator-runtime@0.14.0:
|
/regenerator-runtime@0.14.0:
|
||||||
resolution: {integrity: sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==}
|
resolution: {integrity: sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==}
|
||||||
dev: true
|
|
||||||
|
|
||||||
/regenerator-transform@0.15.2:
|
/regenerator-transform@0.15.2:
|
||||||
resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==}
|
resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==}
|
||||||
@ -30867,8 +30872,10 @@ packages:
|
|||||||
resolution: {integrity: sha512-SYJSIgeyXW7EuX1ytdneO5e8jip42oHWg9xl/o3oTYhmXusZVgiA+VlPvjIN+kHii9v90AmzTZEBcsEvuAY+TA==}
|
resolution: {integrity: sha512-SYJSIgeyXW7EuX1ytdneO5e8jip42oHWg9xl/o3oTYhmXusZVgiA+VlPvjIN+kHii9v90AmzTZEBcsEvuAY+TA==}
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
/tailwind-merge@1.8.1:
|
/tailwind-merge@2.3.0:
|
||||||
resolution: {integrity: sha512-+fflfPxvHFr81hTJpQ3MIwtqgvefHZFUHFiIHpVIRXvG/nX9+gu2P7JNlFu2bfDMJ+uHhi/pUgzaYacMoXv+Ww==}
|
resolution: {integrity: sha512-vkYrLpIP+lgR0tQCG6AP7zZXCTLc1Lnv/CCRT3BqJ9CZ3ui2++GPaGb1x/ILsINIMSYqqvrpqjUFsMNLlW99EA==}
|
||||||
|
dependencies:
|
||||||
|
'@babel/runtime': 7.24.4
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/tailwindcss@3.4.3(ts-node@10.9.1):
|
/tailwindcss@3.4.3(ts-node@10.9.1):
|
||||||
|
|||||||
@ -93,6 +93,7 @@
|
|||||||
"@nx/nx-dev/ui-community": ["nx-dev/ui-community/src/index.ts"],
|
"@nx/nx-dev/ui-community": ["nx-dev/ui-community/src/index.ts"],
|
||||||
"@nx/nx-dev/ui-conference": ["nx-dev/ui-conference/src/index.ts"],
|
"@nx/nx-dev/ui-conference": ["nx-dev/ui-conference/src/index.ts"],
|
||||||
"@nx/nx-dev/ui-contact": ["nx-dev/ui-contact/src/index.ts"],
|
"@nx/nx-dev/ui-contact": ["nx-dev/ui-contact/src/index.ts"],
|
||||||
|
"@nx/nx-dev/ui-enterprise": ["nx-dev/ui-enterprise/src/index.ts"],
|
||||||
"@nx/nx-dev/ui-fence": ["nx-dev/ui-fence/src/index.ts"],
|
"@nx/nx-dev/ui-fence": ["nx-dev/ui-fence/src/index.ts"],
|
||||||
"@nx/nx-dev/ui-home": ["nx-dev/ui-home/src/index.ts"],
|
"@nx/nx-dev/ui-home": ["nx-dev/ui-home/src/index.ts"],
|
||||||
"@nx/nx-dev/ui-markdoc": ["nx-dev/ui-markdoc/src/index.ts"],
|
"@nx/nx-dev/ui-markdoc": ["nx-dev/ui-markdoc/src/index.ts"],
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user