Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import { Empty, EmptyDescription, EmptyHeader, EmptyMedia, EmptyTitle } from "@m
import { formatRelativeTimeOrDate, toEpochMs } from "@maple/ui/lib/time-format"
import { formatSessionDuration } from "@maple/ui/lib/replay-format"
import { ChatBubbleSparkleIcon } from "@/components/icons"
import { vendorIcon } from "@/lib/agent-sessions/vendor-icon"
import { vendorLabel } from "@/lib/agent-sessions/vendor-label"

/** The wire row from `listAiSessions` — one AI agent session, newest first. */
Expand Down Expand Up @@ -58,6 +59,7 @@ export function AgentSessionsList({ sessions, limit }: AgentSessionsListProps) {
<div className="@container">
{sessions.map((session) => {
const hasErrors = session.errorSpanCount > 0
const VendorIcon = vendorIcon(session.vendorId)
const vendor = vendorLabel(session.vendorId)
const secondary =
session.vendorVersion && session.vendorVersion !== "0"
Expand Down Expand Up @@ -95,7 +97,10 @@ export function AgentSessionsList({ sessions, limit }: AgentSessionsListProps) {
{formatRelativeTimeOrDate(session.startTime)}
</span>
</div>
<div className="mt-0.5 truncate text-xs text-muted-foreground">{secondary}</div>
<div className="mt-0.5 flex items-center gap-1.5 text-xs text-muted-foreground">
<VendorIcon size={13} className="shrink-0" aria-hidden />
<span className="truncate">{secondary}</span>
</div>
{hasErrors && (
<div className="mt-1.5 flex items-center gap-1.5 @2xl:hidden">
<ErrorChip count={session.errorSpanCount} />
Expand Down
20 changes: 20 additions & 0 deletions apps/web/src/components/icons/claude.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import type { IconProps } from "./icon"

/** The Claude spark mark — Claude-branded agent frameworks. */
function ClaudeIcon({ size = 24, className, ...props }: IconProps) {
return (
<svg
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 24 24"
width={size}
height={size}
className={className}
fill="currentColor"
aria-hidden="true"
{...props}
>
<path d="m4.7144 15.9555 4.7174-2.6471.079-.2307-.079-.1275h-.2307l-.7893-.0486-2.6956-.0729-2.3375-.0971-2.2646-.1214-.5707-.1215-.5343-.7042.0546-.3522.4797-.3218.686.0608 1.5179.1032 2.2767.1578 1.6514.0972 2.4468.255h.3886l.0546-.1579-.1336-.0971-.1032-.0972L6.973 9.8356l-2.55-1.6879-1.3356-.9714-.7225-.4918-.3643-.4614-.1578-1.0078.6557-.7225.8803.0607.2246.0607.8925.686 1.9064 1.4754 2.4893 1.8336.3643.3035.1457-.1032.0182-.0728-.164-.2733-1.3539-2.4467-1.445-2.4893-.6435-1.032-.17-.6194c-.0607-.255-.1032-.4674-.1032-.7285L6.287.1335 6.6997 0l.9957.1336.419.3642.6192 1.4147 1.0018 2.2282 1.5543 3.0296.4553.8985.2429.8318.091.255h.1579v-.1457l.1275-1.706.2368-2.0947.2307-2.6957.0789-.7589.3764-.9107.7468-.4918.5828.2793.4797.686-.0668.4433-.2853 1.8517-.5586 2.9021-.3643 1.9429h.2125l.2429-.2429.9835-1.3053 1.6514-2.0643.7286-.8196.85-.9046.5464-.4311h1.0321l.759 1.1293-.34 1.1657-1.0625 1.3478-.8804 1.1414-1.2628 1.7-.7893 1.36.0729.1093.1882-.0183 2.8535-.607 1.5421-.2794 1.8396-.3157.8318.3886.091.3946-.3278.8075-1.967.4857-2.3072.4614-3.4364.8136-.0425.0304.0486.0607 1.5482.1457.6618.0364h1.621l3.0175.2247.7892.522.4736.6376-.079.4857-1.2142.6193-1.6393-.3886-3.825-.9107-1.3113-.3279h-.1822v.1093l1.0929 1.0686 2.0035 1.8092 2.5075 2.3314.1275.5768-.3218.4554-.34-.0486-2.2039-1.6575-.85-.7468-1.9246-1.621h-.1275v.17l.4432.6496 2.3436 3.5214.1214 1.0807-.17.3521-.6071.2125-.6679-.1214-1.3721-1.9246L14.38 17.959l-1.1414-1.9428-.1397.079-.674 7.2552-.3156.3703-.7286.2793-.6071-.4614-.3218-.7468.3218-1.4753.3886-1.9246.3157-1.53.2853-1.9004.17-.6314-.0121-.0425-.1397.0182-1.4328 1.9672-2.1796 2.9446-1.7243 1.8456-.4128.164-.7164-.3704.0667-.6618.4008-.5889 2.386-3.0357 1.4389-1.882.929-1.0868-.0062-.1579h-.0546l-6.3385 4.1164-1.1293.1457-.4857-.4554.0608-.7467.2307-.2429 1.9064-1.3114Z" />
</svg>
)
}
export { ClaudeIcon }
20 changes: 20 additions & 0 deletions apps/web/src/components/icons/crewai.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import type { IconProps } from "./icon"

/** The CrewAI mark. */
function CrewAiIcon({ size = 24, className, ...props }: IconProps) {
return (
<svg
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 24 24"
width={size}
height={size}
className={className}
fill="currentColor"
aria-hidden="true"
{...props}
>
<path d="M12.482.18C7.161 1.319 1.478 9.069 1.426 15.372c-.051 5.527 3.1 8.68 8.68 8.627 6.716-.05 14.259-6.87 12.09-10.9-.672-1.292-1.396-1.344-2.687-.207-1.602 1.395-1.654.31-.207-2.893 1.757-3.98 1.705-5.322-.31-7.544C17.03.388 14.962-.388 12.482.181Zm5.322 2.068c2.273 2.015 2.376 4.236.465 8.42-1.395 3.1-2.17 3.515-3.824 1.86-1.24-1.24-1.343-3.46-.258-6.044 1.137-2.635.982-3.1-.568-1.653-3.72 3.358-6.458 9.765-5.424 12.503.464 1.189.825 1.395 2.737 1.395 2.79 0 6.303-1.705 7.957-3.926 1.756-2.274 2.79-2.274 2.79-.052 0 3.875-6.459 8.627-11.625 8.627-6.251 0-9.351-4.752-7.491-11.47.878-2.995 4.443-7.904 7.077-9.66 3.255-2.17 5.684-2.17 8.164 0z" />
</svg>
)
}
export { CrewAiIcon }
20 changes: 20 additions & 0 deletions apps/web/src/components/icons/effect.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import type { IconProps } from "./icon"

/** The Effect mark, for Effect AI. */
function EffectIcon({ size = 24, className, ...props }: IconProps) {
return (
<svg
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 24 24"
width={size}
height={size}
className={className}
fill="currentColor"
aria-hidden="true"
{...props}
>
<path d="M11.846.007a.8.8 0 0 0-.312.103L.454 6.346a.8.8 0 0 0-.397.855.8.8 0 0 0 .408.78L3.99 9.976 1.033 11.64a.76.76 0 0 0-.374.838c-.033.265.07.541.378.715l10.546 5.967a.8.8 0 0 0 .61.073.8.8 0 0 0 .27-.094l10.548-5.968c.31-.175.412-.454.376-.72a.76.76 0 0 0-.383-.79l-3.01-1.693 3.554-2.012a.8.8 0 0 0 .399-.836.8.8 0 0 0-.412-.753L12.455.13a.8.8 0 0 0-.28-.097.8.8 0 0 0-.227-.033m6.482 10.853 2.78 1.566-9.205 5.21-9.21-5.213 2.76-1.554 5.99 3.387a.83.83 0 0 0 .638.076.8.8 0 0 0 .285-.098zm3.572 6.03a.75.75 0 0 0-.35.098l-9.67 5.47-9.635-5.45a.75.75 0 0 0-1.01.267.717.717 0 0 0 .27.99l9.976 5.644a.75.75 0 0 0 .372.098c.079 0 .294-.026.46-.117l9.978-5.645a.716.716 0 0 0 .27-.99.75.75 0 0 0-.661-.364" />
</svg>
)
}
export { EffectIcon }
20 changes: 20 additions & 0 deletions apps/web/src/components/icons/haystack.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import type { IconProps } from "./icon"

/** The Haystack mark. */
function HaystackIcon({ size = 24, className, ...props }: IconProps) {
return (
<svg
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 24 24"
width={size}
height={size}
className={className}
fill="currentColor"
aria-hidden="true"
{...props}
>
<path d="M2.0084 0C.8992 0 0 .8992 0 2.0084v19.9832C0 23.1006.8992 24 2.0084 24h19.9832C23.1006 24 24 23.1007 24 21.9916V2.0084C24 .8992 23.1007 0 21.9916 0Zm9.9624 3.84c3.4303 0 6.2108 2.7626 6.2108 6.1709v6.4875a.2688.2688 0 0 1-.2697.2681c-1.3425 0-2.4306-1.0811-2.4306-2.415v-4.3409c0-1.9265-1.572-3.488-3.5105-3.488s-3.424 1.562-3.424 3.488v1.608a.2633.2633 0 0 0 .259.2681h1.5394a.2693.2693 0 0 0 .2753-.263V9.9453c0-.7412.6044-1.3414 1.3503-1.3414s1.3502.6002 1.3502 1.3414V20.029a.2747.2747 0 0 1-.2807.2682c-1.3362 0-2.4198-1.0766-2.4198-2.4043v-3.2307a.2747.2747 0 0 0-.2753-.268H8.8114a.2637.2637 0 0 0-.2646.263v1.0789c0 1.3338-1.1746 2.4152-2.517 2.4152a.2688.2688 0 0 1-.2698-.268v-7.8724c0-3.4083 2.7805-6.1709 6.2108-6.1709Z" />
</svg>
)
}
export { HaystackIcon }
20 changes: 20 additions & 0 deletions apps/web/src/components/icons/huggingface.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import type { IconProps } from "./icon"

/** The Hugging Face mark, for smolagents. */
function HuggingFaceIcon({ size = 24, className, ...props }: IconProps) {
return (
<svg
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 24 24"
width={size}
height={size}
className={className}
fill="currentColor"
aria-hidden="true"
{...props}
>
<path d="M12.025 1.13c-5.77 0-10.449 4.647-10.449 10.378 0 1.112.178 2.181.503 3.185.064-.222.203-.444.416-.577a.96.96 0 0 1 .524-.15c.293 0 .584.124.84.284.278.173.48.408.71.694.226.282.458.611.684.951v-.014c.017-.324.106-.622.264-.874s.403-.487.762-.543c.3-.047.596.06.787.203s.31.313.4.467c.15.257.212.468.233.542.01.026.653 1.552 1.657 2.54.616.605 1.01 1.223 1.082 1.912.055.537-.096 1.059-.38 1.572.637.121 1.294.187 1.967.187.657 0 1.298-.063 1.921-.178-.287-.517-.44-1.041-.384-1.581.07-.69.465-1.307 1.081-1.913 1.004-.987 1.647-2.513 1.657-2.539.021-.074.083-.285.233-.542.09-.154.208-.323.4-.467a1.08 1.08 0 0 1 .787-.203c.359.056.604.29.762.543s.247.55.265.874v.015c.225-.34.457-.67.683-.952.23-.286.432-.52.71-.694.257-.16.547-.284.84-.285a.97.97 0 0 1 .524.151c.228.143.373.388.43.625l.006.04a10.3 10.3 0 0 0 .534-3.273c0-5.731-4.678-10.378-10.449-10.378M8.327 6.583a1.5 1.5 0 0 1 .713.174 1.487 1.487 0 0 1 .617 2.013c-.183.343-.762-.214-1.102-.094-.38.134-.532.914-.917.71a1.487 1.487 0 0 1 .69-2.803m7.486 0a1.487 1.487 0 0 1 .689 2.803c-.385.204-.536-.576-.916-.71-.34-.12-.92.437-1.103.094a1.487 1.487 0 0 1 .617-2.013 1.5 1.5 0 0 1 .713-.174m-10.68 1.55a.96.96 0 1 1 0 1.921.96.96 0 0 1 0-1.92m13.838 0a.96.96 0 1 1 0 1.92.96.96 0 0 1 0-1.92M8.489 11.458c.588.01 1.965 1.157 3.572 1.164 1.607-.007 2.984-1.155 3.572-1.164.196-.003.305.12.305.454 0 .886-.424 2.328-1.563 3.202-.22-.756-1.396-1.366-1.63-1.32q-.011.001-.02.006l-.044.026-.01.008-.03.024q-.018.017-.035.036l-.032.04a1 1 0 0 0-.058.09l-.014.025q-.049.088-.11.19a1 1 0 0 1-.083.116 1.2 1.2 0 0 1-.173.18q-.035.029-.075.058a1.3 1.3 0 0 1-.251-.243 1 1 0 0 1-.076-.107c-.124-.193-.177-.363-.337-.444-.034-.016-.104-.008-.2.022q-.094.03-.216.087-.06.028-.125.063l-.13.074q-.067.04-.136.086a3 3 0 0 0-.135.096 3 3 0 0 0-.26.219 2 2 0 0 0-.12.121 2 2 0 0 0-.106.128l-.002.002a2 2 0 0 0-.09.132l-.001.001a1.2 1.2 0 0 0-.105.212q-.013.036-.024.073c-1.139-.875-1.563-2.317-1.563-3.203 0-.334.109-.457.305-.454m.836 10.354c.824-1.19.766-2.082-.365-3.194-1.13-1.112-1.789-2.738-1.789-2.738s-.246-.945-.806-.858-.97 1.499.202 2.362c1.173.864-.233 1.45-.685.64-.45-.812-1.683-2.896-2.322-3.295s-1.089-.175-.938.647 2.822 2.813 2.562 3.244-1.176-.506-1.176-.506-2.866-2.567-3.49-1.898.473 1.23 2.037 2.16c1.564.932 1.686 1.178 1.464 1.53s-3.675-2.511-4-1.297c-.323 1.214 3.524 1.567 3.287 2.405-.238.839-2.71-1.587-3.216-.642-.506.946 3.49 2.056 3.522 2.064 1.29.33 4.568 1.028 5.713-.624m5.349 0c-.824-1.19-.766-2.082.365-3.194 1.13-1.112 1.789-2.738 1.789-2.738s.246-.945.806-.858.97 1.499-.202 2.362c-1.173.864.233 1.45.685.64.451-.812 1.683-2.896 2.322-3.295s1.089-.175.938.647-2.822 2.813-2.562 3.244 1.176-.506 1.176-.506 2.866-2.567 3.49-1.898-.473 1.23-2.037 2.16c-1.564.932-1.686 1.178-1.464 1.53s3.675-2.511 4-1.297c.323 1.214-3.524 1.567-3.287 2.405.238.839 2.71-1.587 3.216-.642.506.946-3.49 2.056-3.522 2.064-1.29.33-4.568 1.028-5.713-.624" />
</svg>
)
}
export { HuggingFaceIcon }
11 changes: 11 additions & 0 deletions apps/web/src/components/icons/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -73,8 +73,10 @@ export { ChartBarTrendUpIcon } from "./chart-bar-trend-up"
export { ChartLineIcon } from "./chart-line"
export { CirclePercentageIcon } from "./circle-percentage"
export { CircleQuestionIcon } from "./circle-question"
export { ClaudeIcon } from "./claude"
export { ClickhouseIcon } from "./clickhouse"
export { CloudflareIcon, CloudflareMonoIcon } from "./cloudflare"
export { CrewAiIcon } from "./crewai"
export { ChromeIcon } from "./chrome"
export { CompactLinesIcon } from "./compact-lines"
export { CornerDownLeftIcon } from "./corner-down-left"
Expand All @@ -83,6 +85,7 @@ export { CursorPointerIcon } from "./cursor-pointer"
export { CreditCardIcon } from "./credit-card"
export { CubeIcon } from "./cube"
export { DiscordIcon } from "./discord"
export { EffectIcon } from "./effect"
export { DotsVerticalIcon } from "./dots-vertical"
export { DownloadIcon } from "./download"
export { EdgeIcon } from "./edge"
Expand All @@ -96,6 +99,8 @@ export { FolderIcon } from "./folder"
export { GearIcon } from "./gear"
export { GithubIcon } from "./github"
export { GoogleIcon } from "./google"
export { HaystackIcon } from "./haystack"
export { HuggingFaceIcon } from "./huggingface"
export { GridIcon } from "./grid"
export { GridSquareCirclePlusIcon } from "./grid-square-circle-plus"
export { GripDotsIcon } from "./grip-dots"
Expand All @@ -107,6 +112,7 @@ export { HouseIcon } from "./house"
export { IdBadgeIcon } from "./id-badge"
export { ImageIcon } from "./image"
export { KafkaIcon } from "./kafka"
export { LangchainIcon } from "./langchain"
export { KeyIcon } from "./key"
export { KeyboardIcon } from "./keyboard"
export { KubernetesIcon } from "./kubernetes"
Expand All @@ -118,18 +124,21 @@ export { LogoutIcon } from "./logout"
export { MaximizeIcon } from "./maximize"
export { MediaPauseIcon } from "./media-pause"
export { MediaPlayIcon } from "./media-play"
export { MicrosoftIcon } from "./microsoft"
export { MinimizeIcon } from "./minimize"
export { MongodbIcon } from "./mongodb"
export { MoonIcon } from "./moon"
export { MysqlIcon } from "./mysql"
export { NatsIcon } from "./nats"
export { NodejsIcon } from "./nodejs"
export { OpenAiIcon } from "./openai"
export { OpenjdkIcon } from "./openjdk"
export { OperaIcon } from "./opera"
export { PaletteIcon } from "./palette"
export { PaperPlaneIcon } from "./paper-plane"
export { PencilIcon } from "./pencil"
export { PlanetScaleIcon } from "./planetscale"
export { PydanticIcon } from "./pydantic"
// Nucleo Pixel Essential — a deliberately separate family, used where a row
// needs a type marker rather than an action affordance (the session replay
// event rail). Don't mix them with the outline icons inside one control.
Expand All @@ -151,6 +160,7 @@ export { SafariIcon } from "./safari"
export { ServerIcon } from "./server"
export { ShieldIcon } from "./shield"
export { SlackIcon, SlackMonoIcon } from "./slack"
export { SpringIcon } from "./spring"
export { SlidersIcon } from "./sliders"
export { SpinnerIcon } from "./spinner"
export { SquareIcon } from "./square"
Expand All @@ -160,6 +170,7 @@ export { SunIcon } from "./sun"
export { TelegramIcon, TelegramMonoIcon } from "./telegram"
export { TranscriptIcon } from "./transcript"
export { TruckIcon } from "./truck"
export { VercelIcon } from "./vercel"
export { WarpStreamIcon } from "./warpstream"
export { UploadIcon } from "./upload"
export { WorkflowRingIcon, WORKFLOW_LABEL, WORKFLOW_COLOR } from "./workflow-ring"
20 changes: 20 additions & 0 deletions apps/web/src/components/icons/langchain.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import type { IconProps } from "./icon"

/** The LangChain chain-link mark. */
function LangchainIcon({ size = 24, className, ...props }: IconProps) {
return (
<svg
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 24 24"
width={size}
height={size}
className={className}
fill="currentColor"
aria-hidden="true"
{...props}
>
<path d="M13.796 0a6.93 6.93 0 0 0-4.91 2.019L5.451 5.455l3.273 3.27 3.432-3.432a2.284 2.284 0 0 1 3.277 0 2.28 2.28 0 0 1 0 3.275L12 12.001l3.273 3.273 3.433-3.435c2.692-2.692 2.692-7.127 0-9.82A6.92 6.92 0 0 0 13.796 0m-5.07 8.728-3.433 3.434c-2.692 2.693-2.692 7.126 0 9.819A6.92 6.92 0 0 0 10.203 24a6.93 6.93 0 0 0 4.911-2.02l3.432-3.432-3.271-3.272-3.433 3.433a2.284 2.284 0 0 1-3.277 0 2.28 2.28 0 0 1 0-3.276L12 12z" />
</svg>
)
}
export { LangchainIcon }
20 changes: 20 additions & 0 deletions apps/web/src/components/icons/microsoft.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import type { IconProps } from "./icon"

/** The Microsoft four-square mark, flattened to one colour. */
function MicrosoftIcon({ size = 24, className, ...props }: IconProps) {
return (
<svg
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 24 24"
width={size}
height={size}
className={className}
fill="currentColor"
aria-hidden="true"
{...props}
>
<path d="M0 0h11.377v11.377H0zM12.623 0H24v11.377H12.623zM0 12.623h11.377V24H0zM12.623 12.623H24V24H12.623z" />
</svg>
)
}
export { MicrosoftIcon }
19 changes: 19 additions & 0 deletions apps/web/src/components/icons/openai.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import type { IconProps } from "./icon"

function OpenAiIcon({ size = 24, className, ...props }: IconProps) {
return (
<svg
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 24 24"
width={size}
height={size}
className={className}
fill="currentColor"
aria-hidden="true"
{...props}
>
<path d="M22.2819 9.8211a5.9847 5.9847 0 0 0-.5157-4.9108 6.0462 6.0462 0 0 0-6.5098-2.9A6.0651 6.0651 0 0 0 4.9807 4.1818a5.9847 5.9847 0 0 0-3.9977 2.9 6.0462 6.0462 0 0 0 .7427 7.0966 5.98 5.98 0 0 0 .511 4.9107 6.051 6.051 0 0 0 6.5146 2.9001A5.9847 5.9847 0 0 0 13.2599 24a6.0557 6.0557 0 0 0 5.7718-4.2058 5.9894 5.9894 0 0 0 3.9977-2.9001 6.0557 6.0557 0 0 0-.7475-7.0729zm-9.022 12.6081a4.4755 4.4755 0 0 1-2.8764-1.0408l.1419-.0804 4.7783-2.7582a.7948.7948 0 0 0 .3927-.6813v-6.7369l2.02 1.1686a.071.071 0 0 1 .038.052v5.5826a4.504 4.504 0 0 1-4.4945 4.4944zm-9.6607-4.1254a4.4708 4.4708 0 0 1-.5346-3.0137l.142.0852 4.783 2.7582a.7712.7712 0 0 0 .7806 0l5.8428-3.3685v2.3324a.0804.0804 0 0 1-.0332.0615L9.74 19.9502a4.4992 4.4992 0 0 1-6.1408-1.6464zM2.3408 7.8956a4.485 4.485 0 0 1 2.3655-1.9728V11.6a.7664.7664 0 0 0 .3879.6765l5.8144 3.3543-2.0201 1.1685a.0757.0757 0 0 1-.071 0l-4.8303-2.7865A4.504 4.504 0 0 1 2.3408 7.872zm16.5963 3.8558L13.1038 8.364 15.1192 7.2a.0757.0757 0 0 1 .071 0l4.8303 2.7913a4.4944 4.4944 0 0 1-.6765 8.1042v-5.6772a.79.79 0 0 0-.407-.667zm2.0107-3.0231l-.142-.0852-4.7735-2.7818a.7759.7759 0 0 0-.7854 0L9.409 9.2297V6.8974a.0662.0662 0 0 1 .0284-.0615l4.8303-2.7865a4.4992 4.4992 0 0 1 6.6802 4.66zM8.3065 12.863l-2.02-1.1638a.0804.0804 0 0 1-.038-.0567V6.0742a4.4992 4.4992 0 0 1 7.3757-3.4537l-.142.0805L8.704 5.459a.7948.7948 0 0 0-.3927.6813zm1.0976-2.3654l2.602-1.4998 2.6069 1.4998v2.9994l-2.5974 1.4997-2.6067-1.4997Z" />
</svg>
)
}
export { OpenAiIcon }
20 changes: 20 additions & 0 deletions apps/web/src/components/icons/pydantic.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import type { IconProps } from "./icon"

/** The Pydantic mark, for Pydantic AI. */
function PydanticIcon({ size = 24, className, ...props }: IconProps) {
return (
<svg
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 24 24"
width={size}
height={size}
className={className}
fill="currentColor"
aria-hidden="true"
{...props}
>
<path d="m23.826 17.316-4.23-5.866-6.847-9.496c-.348-.48-1.151-.48-1.497 0l-6.845 9.494-4.233 5.868a.925.925 0 0 0 .46 1.417l11.078 3.626h.002a.92.92 0 0 0 .572 0h.002l11.077-3.626c.28-.092.5-.31.59-.592a.916.916 0 0 0-.13-.825h.002ZM12.001 4.07l4.44 6.158-4.152-1.36c-.032-.01-.066-.008-.098-.016a.8.8 0 0 0-.096-.016c-.032-.004-.062-.016-.094-.016s-.062.012-.094.016a.74.74 0 0 0-.096.016c-.032.006-.066.006-.096.016L7.59 10.221l-.026.008 4.44-6.158h-.002Zm-6.273 8.7 4.834-1.583.516-.168v9.19L2.41 17.372l3.317-4.6Zm7.197 7.437V11.02l5.35 1.752 3.316 4.598-8.666 2.838Z" />
</svg>
)
}
export { PydanticIcon }
20 changes: 20 additions & 0 deletions apps/web/src/components/icons/spring.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import type { IconProps } from "./icon"

/** The Spring mark, for Spring AI. */
function SpringIcon({ size = 24, className, ...props }: IconProps) {
return (
<svg
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 24 24"
width={size}
height={size}
className={className}
fill="currentColor"
aria-hidden="true"
{...props}
>
<path d="M21.8537 1.4158a10.4504 10.4504 0 0 1-1.284 2.2471A11.9666 11.9666 0 1 0 3.8518 20.7757l.4445.3951a11.9543 11.9543 0 0 0 19.6316-8.2971c.3457-3.0126-.568-6.8649-2.0743-11.458zM5.5805 20.8745a1.0174 1.0174 0 1 1-.1482-1.4323 1.0396 1.0396 0 0 1 .1482 1.4323zm16.1991-3.5806c-2.9385 3.9263-9.2601 2.5928-13.2852 2.7904 0 0-.7161.0494-1.4323.1481 0 0 .2717-.1234.6174-.2469 2.8398-.9877 4.1732-1.1853 5.9018-2.0743 3.2349-1.6545 6.4698-5.2844 7.1118-9.0379-1.2347 3.6053-4.9881 6.7167-8.3959 7.9761-2.3459.8643-6.5685 1.7039-6.5685 1.7039l-.1729-.0988c-2.8645-1.4076-2.9632-7.6304 2.2718-9.6306 2.2966-.889 4.4696-.395 6.9637-.9877 2.6422-.6174 5.7043-2.5929 6.939-5.1857 1.3828 4.1732 3.062 10.643.0493 14.6434z" />
</svg>
)
}
export { SpringIcon }
19 changes: 19 additions & 0 deletions apps/web/src/components/icons/vercel.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import type { IconProps } from "./icon"

function VercelIcon({ size = 24, className, ...props }: IconProps) {
return (
<svg
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 24 24"
width={size}
height={size}
className={className}
fill="currentColor"
aria-hidden="true"
{...props}
>
<path d="M24 22.525H0l12-21.05 12 21.05z" />
</svg>
)
}
export { VercelIcon }
Loading
Loading