# Partners Section v4

> Static partners section: centered heading and description above a single row of eight square icon tiles (AWS, Cloudflare, DigitalOcean, Docker, Kubernetes, GitLab, Pulumi, Grafana).

A shadcn/ui block from the [@uiception](https://uiception.com) registry, listed on [shadcn.exchange](https://shadcn.exchange/r/uiception/partners-section-v4).

- Page, with a live preview: https://shadcn.exchange/r/uiception/partners-section-v4
- Screenshot: https://abzjhwgwpdpz7ua5.public.blob.vercel-storage.com/shots/uiception/partners-section-v4-light-f53672011e47c512.png
- Registry item: https://uiception.com/r/partners-section-v4.json
- Listed: 2026-10-13, source last changed 2026-10-13

## Install

```bash
npx shadcn@latest add https://uiception.com/r/partners-section-v4.json
```

Run it in a project that has shadcn/ui set up. It adds the files below and installs what they depend on.

## Files

### `registry/new-york/blocks/partners-section-v4/page.tsx`

```tsx
import PartnersSectionV4 from "./components/partners-section-v4"

export default function Page() {
  return <PartnersSectionV4 />
}
```

### `registry/new-york/blocks/partners-section-v4/components/partners-section-v4.tsx`

```tsx
import PartnerTile from "./partner-tile"
import { partnersSectionV4Content } from "../lib/config"
import { partners } from "../lib/partners"

export default function PartnersSectionV4() {
  const { heading, description } = partnersSectionV4Content

  return (
    <section className="py-16 md:py-24">
      <div className="mx-auto max-w-6xl px-4">
        <div className="mx-auto flex max-w-2xl flex-col items-center gap-5 text-center">
          <h2 className="text-3xl leading-[1.05] font-medium tracking-[-0.035em] text-balance text-foreground sm:text-4xl lg:text-5xl">
            {heading}
          </h2>
          <p className="max-w-xl text-base leading-relaxed text-pretty text-muted-foreground md:text-lg">
            {description}
          </p>
        </div>

        <ul
          aria-label="Partner companies"
          className="mx-auto mt-14 grid max-w-5xl grid-cols-8 gap-2 py-2 sm:gap-3 sm:py-4 md:mt-20 md:gap-4 lg:py-6"
        >
          {partners.map((partner) => (
            <PartnerTile key={partner.name} partner={partner} />
          ))}
        </ul>
      </div>
    </section>
  )
}
```

### `registry/new-york/blocks/partners-section-v4/components/partner-tile.tsx`

```tsx
import PartnerIcon from "./partner-icon"
import type { Partner } from "../lib/partners"

export default function PartnerTile({ partner }: { partner: Partner }) {
  return (
    <li className="flex items-center justify-center odd:-translate-y-2 even:translate-y-2 sm:odd:-translate-y-4 sm:even:translate-y-4 lg:odd:-translate-y-6 lg:even:translate-y-6">
      <PartnerIcon partner={partner} className="size-7 sm:size-10 lg:size-14" />
      <span className="sr-only">{partner.name}</span>
    </li>
  )
}
```

### `registry/new-york/blocks/partners-section-v4/components/partner-icon.tsx`

```tsx
import { cn } from "@/lib/utils"

import type { Partner } from "../lib/partners"

export default function PartnerIcon({
  partner,
  className,
}: {
  partner: Partner
  className?: string
}) {
  const Light = partner.light
  const Dark = partner.dark
  const shellClass = cn("inline-flex items-center justify-center", className)

  if (Dark) {
    return (
      <span className={shellClass}>
        <Light className="block h-full w-full dark:hidden" aria-hidden />
        <Dark className="hidden h-full w-full dark:block" aria-hidden />
      </span>
    )
  }

  return (
    <span className={shellClass}>
      <Light className="h-full w-full" aria-hidden />
    </span>
  )
}
```

### `registry/new-york/blocks/partners-section-v4/lib/config.ts`

```ts
export const partnersSectionV4Content = {
  heading: "The companies that keep Acme running",
  description:
    "Acme runs on tools from these partners. They help keep the app online and your data backed up.",
} as const
```

### `registry/new-york/blocks/partners-section-v4/lib/partners.ts`

```ts
import type { ComponentType, SVGProps } from "react"

import { AwsLight } from "@/components/ui/svgs/awsLight"
import { AwsDark } from "@/components/ui/svgs/awsDark"
import { Cloudflare } from "@/components/ui/svgs/cloudflare"
import { Digitalocean } from "@/components/ui/svgs/digitalocean"
import { Docker } from "@/components/ui/svgs/docker"
import { Kubernetes } from "@/components/ui/svgs/kubernetes"
import { Gitlab } from "@/components/ui/svgs/gitlab"
import { Pulumi } from "@/components/ui/svgs/pulumi"
import { Grafana } from "@/components/ui/svgs/grafana"

export type SvgComponent = ComponentType<SVGProps<SVGSVGElement>>

export type Partner = {
  name: string
  light: SvgComponent
  dark?: SvgComponent
}

export const partners: Partner[] = [
  { name: "AWS",          light: AwsLight, dark: AwsDark },
  { name: "Cloudflare",   light: Cloudflare },
  { name: "DigitalOcean", light: Digitalocean },
  { name: "Docker",       light: Docker },
  { name: "Kubernetes",   light: Kubernetes },
  { name: "GitLab",       light: Gitlab },
  { name: "Pulumi",       light: Pulumi },
  { name: "Grafana",      light: Grafana },
]
```

### `components/ui/svgs/awsLight.tsx`

```tsx
import type { SVGProps } from "react";

const AwsLight = (props: SVGProps<SVGSVGElement>) => (
  <svg {...props} xmlSpace="preserve" viewBox="0 0 304 182">
    <path
      fill="#252f3e"
      d="m86 66 2 9c0 3 1 5 3 8v2l-1 3-7 4-2 1-3-1-4-5-3-6c-8 9-18 14-29 14-9 0-16-3-20-8-5-4-8-11-8-19s3-15 9-20c6-6 14-8 25-8a79 79 0 0 1 22 3v-7c0-8-2-13-5-16-3-4-8-5-16-5l-11 1a80 80 0 0 0-14 5h-2c-1 0-2-1-2-3v-5l1-3c0-1 1-2 3-2l12-5 16-2c12 0 20 3 26 8 5 6 8 14 8 25v32zM46 82l10-2c4-1 7-4 10-7l3-6 1-9v-4a84 84 0 0 0-19-2c-6 0-11 1-15 4-3 2-4 6-4 11s1 8 3 11c3 2 6 4 11 4zm80 10-4-1-2-3-23-78-1-4 2-2h10l4 1 2 4 17 66 15-66 2-4 4-1h8l4 1 2 4 16 67 17-67 2-4 4-1h9c2 0 3 1 3 2v2l-1 2-24 78-2 4-4 1h-9l-4-1-1-4-16-65-15 64-2 4-4 1h-9zm129 3a66 66 0 0 1-27-6l-3-3-1-2v-5c0-2 1-3 2-3h2l3 1a54 54 0 0 0 23 5c6 0 11-2 14-4 4-2 5-5 5-9l-2-7-10-5-15-5c-7-2-13-6-16-10a24 24 0 0 1 5-34l10-5a44 44 0 0 1 20-2 110 110 0 0 1 12 3l4 2 3 2 1 4v4c0 3-1 4-2 4l-4-2c-6-2-12-3-19-3-6 0-11 0-14 2s-4 5-4 9c0 3 1 5 3 7s5 4 11 6l14 4c7 3 12 6 15 10s5 9 5 14l-3 12-7 8c-3 3-7 5-11 6l-14 2z"
    />
    <path
      d="M274 144A220 220 0 0 1 4 124c-4-3-1-6 2-4a300 300 0 0 0 263 16c5-2 10 4 5 8z"
      fill="#f90"
    />
    <path
      d="M287 128c-4-5-28-3-38-1-4 0-4-3-1-5 19-13 50-9 53-5 4 5-1 36-18 51-3 2-6 1-5-2 5-10 13-33 9-38z"
      fill="#f90"
    />
  </svg>
);

export { AwsLight };
```

### `components/ui/svgs/awsDark.tsx`

```tsx
import type { SVGProps } from "react";

const AwsDark = (props: SVGProps<SVGSVGElement>) => (
  <svg {...props} xmlSpace="preserve" viewBox="0 0 304 182">
    <path
      fill="#ffffff"
      d="m86 66 2 9c0 3 1 5 3 8v2l-1 3-7 4-2 1-3-1-4-5-3-6c-8 9-18 14-29 14-9 0-16-3-20-8-5-4-8-11-8-19s3-15 9-20c6-6 14-8 25-8a79 79 0 0 1 22 3v-7c0-8-2-13-5-16-3-4-8-5-16-5l-11 1a80 80 0 0 0-14 5h-2c-1 0-2-1-2-3v-5l1-3c0-1 1-2 3-2l12-5 16-2c12 0 20 3 26 8 5 6 8 14 8 25v32zM46 82l10-2c4-1 7-4 10-7l3-6 1-9v-4a84 84 0 0 0-19-2c-6 0-11 1-15 4-3 2-4 6-4 11s1 8 3 11c3 2 6 4 11 4zm80 10-4-1-2-3-23-78-1-4 2-2h10l4 1 2 4 17 66 15-66 2-4 4-1h8l4 1 2 4 16 67 17-67 2-4 4-1h9c2 0 3 1 3 2v2l-1 2-24 78-2 4-4 1h-9l-4-1-1-4-16-65-15 64-2 4-4 1h-9zm129 3a66 66 0 0 1-27-6l-3-3-1-2v-5c0-2 1-3 2-3h2l3 1a54 54 0 0 0 23 5c6 0 11-2 14-4 4-2 5-5 5-9l-2-7-10-5-15-5c-7-2-13-6-16-10a24 24 0 0 1 5-34l10-5a44 44 0 0 1 20-2 110 110 0 0 1 12 3l4 2 3 2 1 4v4c0 3-1 4-2 4l-4-2c-6-2-12-3-19-3-6 0-11 0-14 2s-4 5-4 9c0 3 1 5 3 7s5 4 11 6l14 4c7 3 12 6 15 10s5 9 5 14l-3 12-7 8c-3 3-7 5-11 6l-14 2z"
    />
    <path
      d="M274 144A220 220 0 0 1 4 124c-4-3-1-6 2-4a300 300 0 0 0 263 16c5-2 10 4 5 8z"
      fill="#f90"
    />
    <path
      d="M287 128c-4-5-28-3-38-1-4 0-4-3-1-5 19-13 50-9 53-5 4 5-1 36-18 51-3 2-6 1-5-2 5-10 13-33 9-38z"
      fill="#f90"
    />
  </svg>
);

export { AwsDark };
```

### `components/ui/svgs/cloudflare.tsx`

```tsx
import type { SVGProps } from "react";

const Cloudflare = (props: SVGProps<SVGSVGElement>) => (
  <svg {...props} viewBox="0 0 256 116" preserveAspectRatio="xMidYMid">
    <path
      fill="#FFF"
      d="m202.357 49.394-5.311-2.124C172.085 103.434 72.786 69.289 66.81 85.997c-.996 11.286 54.227 2.146 93.706 4.059 12.039.583 18.076 9.671 12.964 24.484l10.069.031c11.615-36.209 48.683-17.73 50.232-29.68-2.545-7.857-42.601 0-31.425-35.497Z"
    />
    <path
      fill="#F4811F"
      d="M176.332 108.348c1.593-5.31 1.062-10.622-1.593-13.809-2.656-3.187-6.374-5.31-11.154-5.842L71.17 87.634c-.531 0-1.062-.53-1.593-.53-.531-.532-.531-1.063 0-1.594.531-1.062 1.062-1.594 2.124-1.594l92.946-1.062c11.154-.53 22.839-9.56 27.087-20.182l5.312-13.809c0-.532.531-1.063 0-1.594C191.203 20.182 166.772 0 138.091 0 111.535 0 88.697 16.995 80.73 40.896c-5.311-3.718-11.684-5.843-19.12-5.31-12.747 1.061-22.838 11.683-24.432 24.43-.531 3.187 0 6.374.532 9.56C16.996 70.107 0 87.103 0 108.348c0 2.124 0 3.718.531 5.842 0 1.063 1.062 1.594 1.594 1.594h170.489c1.062 0 2.125-.53 2.125-1.594l1.593-5.842Z"
    />
    <path
      fill="#FAAD3F"
      d="M205.544 48.863h-2.656c-.531 0-1.062.53-1.593 1.062l-3.718 12.747c-1.593 5.31-1.062 10.623 1.594 13.809 2.655 3.187 6.373 5.31 11.153 5.843l19.652 1.062c.53 0 1.062.53 1.593.53.53.532.53 1.063 0 1.594-.531 1.063-1.062 1.594-2.125 1.594l-20.182 1.062c-11.154.53-22.838 9.56-27.087 20.182l-1.063 4.78c-.531.532 0 1.594 1.063 1.594h70.108c1.062 0 1.593-.531 1.593-1.593 1.062-4.25 2.124-9.03 2.124-13.81 0-27.618-22.838-50.456-50.456-50.456"
    />
  </svg>
);

export { Cloudflare };
```

### `components/ui/svgs/digitalocean.tsx`

```tsx
import type { SVGProps } from "react";

const Digitalocean = (props: SVGProps<SVGSVGElement>) => (
  <svg {...props} viewBox="0 -3.954 53.927 53.954">
    <g fill="#0080ff" fillRule="evenodd">
      <path d="M24.915 50v-9.661c10.226 0 18.164-10.141 14.237-20.904a14.438 14.438 0 0 0-8.615-8.616C19.774 6.921 9.633 14.83 9.633 25.056H0C0 8.758 15.763-3.954 32.853 1.384 40.311 3.73 46.271 9.661 48.588 17.12 53.927 34.237 41.243 50 24.915 50" />
      <path d="M15.339 40.367h9.604v-9.604H15.34zm-7.401 7.401h7.4v-7.4h-7.4zm-6.187-7.4h6.187V34.18H1.751z" />
    </g>
  </svg>
);

export { Digitalocean };
```

### `components/ui/svgs/docker.tsx`

```tsx
import type { SVGProps } from "react";

const Docker = (props: SVGProps<SVGSVGElement>) => (
  <svg {...props} viewBox="0 0 24 24" fill="#008fe2">
    <path d="M13.98 11.08h2.12a.19.19 0 0 0 .19-.19V9.01a.19.19 0 0 0-.19-.19h-2.12a.18.18 0 0 0-.18.18v1.9c0 .1.08.18.18.18m-2.95-5.43h2.12a.19.19 0 0 0 .18-.19V3.57a.19.19 0 0 0-.18-.18h-2.12a.18.18 0 0 0-.19.18v1.9c0 .1.09.18.19.18m0 2.71h2.12a.19.19 0 0 0 .18-.18V6.29a.19.19 0 0 0-.18-.18h-2.12a.18.18 0 0 0-.19.18v1.89c0 .1.09.18.19.18m-2.93 0h2.12a.19.19 0 0 0 .18-.18V6.29a.18.18 0 0 0-.18-.18H8.1a.18.18 0 0 0-.18.18v1.89c0 .1.08.18.18.18m-2.96 0h2.11a.19.19 0 0 0 .19-.18V6.29a.18.18 0 0 0-.19-.18H5.14a.19.19 0 0 0-.19.18v1.89c0 .1.08.18.19.18m5.89 2.72h2.12a.19.19 0 0 0 .18-.19V9.01a.19.19 0 0 0-.18-.19h-2.12a.18.18 0 0 0-.19.18v1.9c0 .1.09.18.19.18m-2.93 0h2.12a.18.18 0 0 0 .18-.19V9.01a.18.18 0 0 0-.18-.19H8.1a.18.18 0 0 0-.18.18v1.9c0 .1.08.18.18.18m-2.96 0h2.11a.18.18 0 0 0 .19-.19V9.01a.18.18 0 0 0-.18-.19H5.14a.19.19 0 0 0-.19.19v1.88c0 .1.08.19.19.19m-2.92 0h2.12a.18.18 0 0 0 .18-.19V9.01a.18.18 0 0 0-.18-.19H2.22a.18.18 0 0 0-.19.18v1.9c0 .1.08.18.19.18m21.54-1.19c-.06-.05-.67-.51-1.95-.51-.34 0-.68.03-1.01.09a3.77 3.77 0 0 0-1.72-2.57l-.34-.2-.23.33a4.6 4.6 0 0 0-.6 1.43c-.24.97-.1 1.88.4 2.66a4.7 4.7 0 0 1-1.75.42H.76a.75.75 0 0 0-.76.75 11.38 11.38 0 0 0 .7 4.06 6.03 6.03 0 0 0 2.4 3.12c1.18.73 3.1 1.14 5.28 1.14.98 0 1.96-.08 2.93-.26a12.25 12.25 0 0 0 3.82-1.4 10.5 10.5 0 0 0 2.61-2.13c1.25-1.42 2-3 2.55-4.4h.23c1.37 0 2.21-.55 2.68-1 .3-.3.55-.66.7-1.06l.1-.28Z" />
  </svg>
);

export { Docker };
```

### `components/ui/svgs/kubernetes.tsx`

```tsx
import type { SVGProps } from "react";

const Kubernetes = (props: SVGProps<SVGSVGElement>) => (
  <svg {...props} viewBox="0 0 722.8 702">
    <path
      style={{
        fill: "#326ce5",
        fillOpacity: "1",
        stroke: "#fff",
        strokeWidth: "0",
        strokeMiterlimit: "4",
        strokeOpacity: "1",
        strokeDasharray: "none",
      }}
      d="M365 185a47 46 0 0 0-18 4L103 306a47 46 0 0 0-25 32L18 600a47 46 0 0 0 6 35 47 46 0 0 0 3 4l169 210a47 46 0 0 0 36 18h271a47 46 0 0 0 37-18l169-210a47 46 0 0 0 9-39l-60-263a47 46 0 0 0-26-31L388 189a47 46 0 0 0-23-4z"
      transform="translate(-6 -175)"
    />
    <path
      d="M368 274c-8 0-15 7-15 16v4l2 14 2 27c-1 3-3 6-5 7v7a190 190 0 0 0-122 58l-6-3c-2 0-5 1-8-1l-20-18-10-10-3-3c-3-2-7-4-10-4-5 0-9 2-12 5-5 7-3 16 4 22l3 3 12 7 22 15c2 2 3 7 3 8l5 5c-26 37-37 84-30 131l-6 2c-2 2-4 6-7 7l-26 4-14 1-4 1c-9 2-14 10-13 18 2 8 11 12 19 11h1v-1h4l13-5c9-4 17-7 25-8l9 3 6-1c15 45 45 82 84 105l-2 7c1 2 2 5 1 8l-13 24-8 11-2 4c-4 8-1 18 6 21 8 4 17 0 20-8l2-4 5-13c3-10 6-20 11-27l6-3 3-6a189 189 0 0 0 135 1l4 5c2 1 5 2 7 5l10 24 4 14 2 4c4 8 13 11 20 8 8-4 10-13 7-21l-2-4-8-12c-6-8-10-15-13-23-1-4 0-6 1-8l-2-6c40-24 70-62 84-106l6 1c2-2 4-4 8-3 8 1 16 4 26 7l13 5 4 1c9 2 17-3 19-10 2-8-4-16-12-18l-5-1-14-1c-10-1-18-2-26-5-3-1-5-5-6-6l-6-2a189 189 0 0 0-31-131l6-5c0-3 0-5 2-8 6-6 13-10 22-16l12-7 4-2c7-6 8-16 3-22s-15-7-22-1l-3 2-10 11c-7 7-13 13-19 17-3 2-7 2-9 1l-6 4c-31-33-75-54-121-58v-7c-2-2-5-3-5-7-1-8 0-16 1-27l2-14v-4c0-9-6-16-14-16zm-19 113-4 77a13 13 0 0 1-21 10l-63-44a151 151 0 0 1 88-43zm37 0c33 5 64 20 88 43l-63 44a13 13 0 0 1-21-10zm-148 71 58 52a13 13 0 0 1-5 22l-74 22c-4-35 4-68 21-96zm259 0a153 153 0 0 1 22 95l-74-21a13 13 0 0 1-5-22h-1l58-52zm-141 56h23l15 18-5 23-21 10-21-10-6-23zm75 62h3l77 13c-12 32-33 59-61 77l-30-72a13 13 0 0 1 11-18zm-128 1a13 13 0 0 1 12 18l-29 71c-27-18-49-44-61-77l76-12h2zm64 31c2-1 4 0 6 1 3 1 5 3 6 5l38 68a154 154 0 0 1-98-1l37-67c3-4 7-6 11-6z"
      style={{
        fontSize: "medium",
        fontStyle: "normal",
        fontVariant: "normal",
        fontWeight: "400",
        fontStretch: "normal",
        textIndent: "0",
        textAlign: "start",
        textDecoration: "none",
        lineHeight: "normal",
        letterSpacing: "normal",
        wordSpacing: "normal",
        textTransform: "none",
        direction: "ltr",
        textAnchor: "start",
        baselineShift: "baseline",
        color: "#000",
        fill: "#fff",
        fillOpacity: "1",
        stroke: "#fff",
        strokeWidth: ".25",
        strokeMiterlimit: "4",
        strokeOpacity: "1",
        strokeDasharray: "none",
        marker: "none",
        visibility: "visible",
        display: "inline",
        overflow: "visible",
        fontFamily: "Sans",
      }}
      transform="translate(-6 -175)"
    />
  </svg>
);

export { Kubernetes };
```

### `components/ui/svgs/gitlab.tsx`

```tsx
import type { SVGProps } from "react";

const Gitlab = (props: SVGProps<SVGSVGElement>) => (
  <svg
    {...props}
    viewBox="0 0 32 32"
    fill="none"
    aria-labelledby="tanukiHomeDesktop"
  >
    <path
      d="m31.46 12.78-.04-.12-4.35-11.35A1.14 1.14 0 0 0 25.94.6c-.24 0-.47.1-.66.24-.19.15-.33.36-.39.6l-2.94 9h-11.9l-2.94-9A1.14 1.14 0 0 0 6.07.58a1.15 1.15 0 0 0-1.14.72L.58 12.68l-.05.11a8.1 8.1 0 0 0 2.68 9.34l.02.01.04.03 6.63 4.97 3.28 2.48 2 1.52a1.35 1.35 0 0 0 1.62 0l2-1.52 3.28-2.48 6.67-5h.02a8.09 8.09 0 0 0 2.7-9.36Z"
      fill="#E24329"
    />
    <path
      d="m31.46 12.78-.04-.12a14.75 14.75 0 0 0-5.86 2.64l-9.55 7.24 6.09 4.6 6.67-5h.02a8.09 8.09 0 0 0 2.67-9.36Z"
      fill="#FC6D26"
    />
    <path
      d="m9.9 27.14 3.28 2.48 2 1.52a1.35 1.35 0 0 0 1.62 0l2-1.52 3.28-2.48-6.1-4.6-6.07 4.6Z"
      fill="#FCA326"
    />
    <path
      d="M6.44 15.3a14.71 14.71 0 0 0-5.86-2.63l-.05.12a8.1 8.1 0 0 0 2.68 9.34l.02.01.04.03 6.63 4.97 6.1-4.6-9.56-7.24Z"
      fill="#FC6D26"
    />
  </svg>
);

export { Gitlab };
```

### `components/ui/svgs/pulumi.tsx`

```tsx
import type { SVGProps } from "react";

const Pulumi = (props: SVGProps<SVGSVGElement>) => (
  <svg {...props} preserveAspectRatio="xMidYMid" viewBox="0 0 256 271">
    <path
      d="M43.705 150.707c10.013-5.781 10.03-24.497.038-41.804-9.993-17.306-26.21-26.65-36.223-20.868-10.012 5.78-10.029 24.497-.037 41.803 9.992 17.307 26.21 26.65 36.222 20.869Zm.06 37.058c9.993 17.306 9.976 36.022-.037 41.803-10.013 5.781-26.23-3.562-36.222-20.869-9.992-17.306-9.976-36.022.037-41.803 10.013-5.781 26.23 3.562 36.222 20.869ZM112 227.214c9.992 17.306 9.976 36.021-.037 41.804-10.013 5.78-26.23-3.563-36.222-20.87-9.992-17.306-9.976-36.022.037-41.803 10.013-5.781 26.23 3.562 36.222 20.869Zm-.022-78.86c9.992 17.306 9.975 36.022-.037 41.803-10.013 5.781-26.23-3.562-36.222-20.869-9.993-17.306-9.976-36.022.037-41.803 10.012-5.781 26.23 3.562 36.222 20.868Z"
      fill="#F26E7E"
    />
    <path
      d="M248.477 129.882c9.992-17.307 9.976-36.023-.037-41.804-10.012-5.78-26.23 3.562-36.222 20.869-9.992 17.306-9.975 36.022.037 41.804 10.013 5.78 26.23-3.563 36.222-20.87Zm.002 37.039c10.013 5.78 10.03 24.497.038 41.803-9.992 17.307-26.21 26.65-36.222 20.869-10.013-5.781-10.03-24.497-.038-41.804 9.993-17.306 26.21-26.65 36.222-20.868Zm-68.22 39.384c10.013 5.781 10.03 24.497.038 41.804-9.992 17.305-26.21 26.649-36.223 20.868-10.012-5.78-10.029-24.497-.037-41.803 9.993-17.307 26.21-26.65 36.222-20.869Zm-.038-78.843c10.013 5.781 10.03 24.497.037 41.804-9.992 17.306-26.21 26.65-36.222 20.869-10.013-5.781-10.03-24.498-.037-41.804 9.992-17.307 26.209-26.65 36.222-20.869Z"
      fill="#8A3391"
    />
    <path
      d="M164.153 20.935c0 11.562-16.2 20.935-36.185 20.935-19.984 0-36.185-9.373-36.185-20.935S107.983 0 127.968 0c19.985 0 36.185 9.373 36.185 20.935Zm-68.22 39.344c0 11.562-16.2 20.935-36.184 20.935-19.985 0-36.185-9.373-36.185-20.935s16.2-20.935 36.185-20.935c19.984 0 36.185 9.373 36.185 20.935Zm100.344 20.935c19.985 0 36.185-9.373 36.185-20.935s-16.2-20.935-36.185-20.935c-19.984 0-36.185 9.373-36.185 20.935s16.2 20.935 36.185 20.935ZM164.153 99.71c0 11.562-16.2 20.935-36.185 20.935-19.984 0-36.185-9.373-36.185-20.935s16.2-20.935 36.185-20.935c19.985 0 36.185 9.373 36.185 20.935Z"
      fill="#F7BF2A"
    />
  </svg>
);

export { Pulumi };
```

### `components/ui/svgs/grafana.tsx`

```tsx
import type { SVGProps } from "react";

const Grafana = (props: SVGProps<SVGSVGElement>) => (
  <svg {...props} preserveAspectRatio="xMidYMid" viewBox="0 0 256 279">
    <defs>
      <linearGradient
        id="grafana__a"
        x1="49.995%"
        x2="49.995%"
        y1="122.45%"
        y2="31.139%"
      >
        <stop offset="0%" stopColor="#FFF100" />
        <stop offset="100%" stopColor="#F05A28" />
      </linearGradient>
    </defs>
    <path
      fill="url(#grafana__a)"
      d="M255.59 122.775c-.46-4.675-1.226-10.04-2.759-16.017a98.01 98.01 0 0 0-7.204-19.16 106.69 106.69 0 0 0-13.412-20.54c-2.222-2.681-4.675-5.287-7.28-7.816 3.908-15.558-4.752-29.046-4.752-29.046-14.945-.92-24.448 4.675-27.973 7.204-.613-.23-1.15-.537-1.763-.767-2.529-.996-5.135-1.992-7.894-2.835a130.374 130.374 0 0 0-8.277-2.3c-2.835-.69-5.67-1.226-8.583-1.686-.537-.076-.996-.153-1.533-.23C157.646 8.738 138.946 0 138.946 0c-20.922 13.258-24.831 31.805-24.831 31.805s-.077.383-.23 1.073c-1.15.307-2.299.69-3.449.996-1.609.46-3.218 1.073-4.751 1.686a123.11 123.11 0 0 0-4.752 1.916 117.205 117.205 0 0 0-9.35 4.599c-2.989 1.686-5.9 3.525-8.737 5.441l-.766-.307c-28.97-11.036-54.643 2.223-54.643 2.223-2.376 30.809 11.572 50.198 14.331 53.724-.69 1.916-1.303 3.832-1.916 5.748-2.146 6.974-3.755 14.101-4.751 21.535-.154 1.073-.307 2.146-.384 3.219C7.894 146.916 0 173.97 0 173.97c22.302 25.674 48.359 27.283 48.359 27.283l.077-.076c3.295 5.9 7.127 11.495 11.419 16.783a111.904 111.904 0 0 0 5.671 6.362c-8.124 23.298 1.15 42.61 1.15 42.61 24.83.92 41.155-10.882 44.603-13.564a84.473 84.473 0 0 0 7.511 2.222 109.703 109.703 0 0 0 23.298 3.449c1.916.076 3.909.153 5.825.076H150.672l1.226-.076v.076c11.726 16.708 32.265 19.084 32.265 19.084 14.638-15.405 15.48-30.733 15.48-34.028v-1.38c3.066-2.145 5.979-4.445 8.738-6.974 5.824-5.288 10.959-11.342 15.25-17.857l1.15-1.839c16.554.92 28.28-10.27 28.28-10.27-2.759-17.243-12.569-25.673-14.638-27.283 0 0-.077-.076-.23-.153-.153-.077-.153-.153-.153-.153-.077-.077-.23-.154-.383-.23.076-1.073.153-2.07.23-3.142.153-1.84.153-3.756.153-5.595v-2.913l-.077-1.149-.076-1.533c0-.536-.077-.996-.154-1.456-.076-.46-.076-.996-.153-1.456l-.153-1.456-.23-1.456c-.307-1.916-.613-3.756-1.073-5.672-1.763-7.433-4.675-14.484-8.43-20.845a70.373 70.373 0 0 0-14.025-16.707c-5.365-4.752-11.42-8.584-17.704-11.42-6.36-2.835-12.952-4.675-19.543-5.518-3.295-.46-6.59-.613-9.886-.536h-2.453l-1.226.077c-.46 0-.92.076-1.303.076a51.958 51.958 0 0 0-4.981.69c-6.591 1.226-12.799 3.602-18.24 6.897-5.441 3.296-10.193 7.358-14.025 11.956a54.7 54.7 0 0 0-8.89 15.021 52.857 52.857 0 0 0-3.525 16.094c-.077 1.303-.077 2.683-.077 3.986v.996l.077 1.073c.076.613.076 1.303.153 1.916.23 2.682.766 5.288 1.456 7.74 1.456 4.982 3.755 9.503 6.59 13.335 2.836 3.832 6.285 6.975 9.887 9.504 3.602 2.452 7.51 4.215 11.343 5.364 3.832 1.15 7.664 1.61 11.266 1.61H154.58c.23 0 .46 0 .689-.077.383 0 .766-.077 1.15-.077.076 0 .23 0 .306-.076l.383-.077c.23 0 .46-.076.69-.076.46-.077.843-.154 1.303-.23.46-.077.843-.154 1.226-.307.843-.153 1.61-.46 2.376-.69 1.533-.536 3.066-1.15 4.368-1.839 1.38-.69 2.606-1.533 3.832-2.3.307-.23.69-.459.997-.766 1.226-.996 1.456-2.835.46-4.061-.844-1.073-2.376-1.38-3.603-.69l-.92.46a24.914 24.914 0 0 1-3.295 1.38c-1.15.382-2.375.689-3.602.919-.613.076-1.226.153-1.916.23-.306 0-.613.076-.996.076h-1.84c-.383 0-.766 0-1.149-.076H154.58c-.153 0-.383 0-.536-.077-.383-.077-.69-.077-1.073-.153-2.836-.383-5.671-1.226-8.354-2.453a29.275 29.275 0 0 1-7.74-5.058c-2.376-2.146-4.445-4.675-6.055-7.587-1.61-2.912-2.759-6.131-3.295-9.503-.23-1.686-.383-3.449-.307-5.135 0-.46.077-.92.077-1.38v-.613c0-.23.077-.46.077-.69.076-.919.23-1.839.383-2.758 1.303-7.358 4.981-14.562 10.653-20.003 1.456-1.38 2.988-2.606 4.598-3.755a31.705 31.705 0 0 1 5.211-2.99 35.739 35.739 0 0 1 5.672-2.068c1.915-.537 3.908-.844 5.977-1.073.997-.077 1.993-.154 3.066-.154h2.376l.843.077c2.222.153 4.368.46 6.514.996 4.292.92 8.507 2.53 12.415 4.675 7.818 4.369 14.485 11.113 18.547 19.237 2.07 4.061 3.525 8.43 4.215 12.951.153 1.15.307 2.3.383 3.45l.077.842.077.843v3.296c0 .536-.077 1.456-.077 1.992-.077 1.227-.23 2.53-.383 3.756s-.383 2.452-.613 3.678a49.548 49.548 0 0 1-.843 3.602 64.129 64.129 0 0 1-2.3 7.128 62.417 62.417 0 0 1-7.204 13.105c-5.9 8.124-13.948 14.715-23.144 18.93-4.599 2.069-9.427 3.602-14.408 4.368-2.453.46-4.982.69-7.511.766h-3.832a36.08 36.08 0 0 1-4.062-.23c-5.365-.383-10.653-1.379-15.864-2.835-5.135-1.456-10.116-3.525-14.868-5.978-9.427-5.058-17.933-11.956-24.524-20.31a79.015 79.015 0 0 1-8.584-13.334 79.197 79.197 0 0 1-5.671-14.638c-1.38-5.058-2.223-10.193-2.606-15.405l-.077-.996v-6.821c.077-2.529.307-5.211.614-7.817.306-2.606.766-5.288 1.302-7.894.537-2.605 1.15-5.211 1.916-7.817a102.856 102.856 0 0 1 5.442-14.791c4.368-9.35 10.04-17.704 16.86-24.371 1.686-1.686 3.449-3.22 5.288-4.752a78.196 78.196 0 0 1 5.748-4.138c1.916-1.303 3.985-2.453 6.055-3.526a39.773 39.773 0 0 1 3.142-1.533 11118896.038 11118896.038 0 0 1 3.219-1.379c2.146-.92 4.368-1.686 6.667-2.376.537-.153 1.15-.306 1.686-.536.537-.154 1.15-.307 1.686-.46 1.15-.307 2.3-.613 3.45-.843.536-.153 1.149-.23 1.762-.383.613-.154 1.15-.23 1.763-.384.613-.076 1.15-.23 1.762-.306l.843-.153.92-.154c.613-.076 1.15-.153 1.763-.23.69-.076 1.302-.153 1.992-.23.537-.076 1.456-.153 1.993-.23.383-.076.843-.076 1.226-.153l.843-.076.383-.077h.46c.69-.077 1.303-.077 1.993-.153l.996-.077h.767c.536 0 1.149-.076 1.685-.076a98.944 98.944 0 0 1 6.745 0c4.445.153 8.813.69 13.028 1.456 8.507 1.61 16.478 4.291 23.758 7.893 7.28 3.526 13.719 7.894 19.39 12.646.383.306.69.613 1.073.92.306.306.69.613.996.92.69.612 1.303 1.225 1.993 1.838.69.614 1.303 1.227 1.916 1.84a44.302 44.302 0 0 1 1.839 1.916c2.376 2.529 4.598 5.058 6.59 7.664a98.897 98.897 0 0 1 9.734 15.25l.46.92.46.92c.306.613.613 1.226.843 1.84.306.613.536 1.149.843 1.762.23.613.536 1.15.766 1.763.92 2.299 1.84 4.521 2.53 6.59 1.149 3.373 1.992 6.362 2.682 8.967a2.043 2.043 0 0 0 2.299 1.61c1.15-.077 1.992-.996 1.992-2.146.077-2.759 0-6.054-.383-9.81Z"
    />
  </svg>
);

export { Grafana };
```
