Files
moteva/frontend/src/ui/components/BrandMark.tsx
T
root 44406b72db Initial commit: img-infinite-canvas AI design workbench MVP
Moteva-style AI design workbench replica. Home prompt creates a project;
the project page provides an infinite canvas with node drag, zoom/pan,
a design chat panel, history replay, image asset upload, and project
save/regenerate.

- Backend: go-zero, DDD layering, sqlc/pgx, optional PostgreSQL; memory
  or Redis cache; asynq job queue; MinIO/S3/R2/OSS object storage;
  sky-valley/pi agent runtime adapter.
- Frontend: Next.js App Router + Vite artifact build, TypeScript, i18n,
  shadcn/ui components, auth (OTP/Turnstile/Google/WeChat).
- Deploy: Docker Compose and k3s manifests.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-07 23:15:37 +08:00

17 lines
2.3 KiB
TypeScript

const leftPath =
"M 42.63 409.42 A 0.78 0.77 47.7 0 0 43.65 409.47 Q 44.14 409.09 44.45 408.55 Q 70.73 362.99 80.23 346.56 C 80.95 345.32 81.71 344.08 83.21 344.04 Q 84.84 344.00 85.49 345.54 Q 91.39 359.81 91.65 360.74 Q 92.76 364.68 92.27 368.28 Q 91.95 370.67 89.28 375.18 Q 55.65 432.31 47.17 446.75 C 44.63 451.08 40.18 454.53 35.21 453.22 C 23.65 450.21 22.78 433.75 22.78 424.14 Q 22.72 274.61 22.77 215.37 C 22.78 205.72 21.87 197.86 26.17 191.34 C 29.34 186.53 35.51 186.89 38.31 191.92 Q 73.85 256.06 90.76 286.51 C 93.21 290.92 92.29 296.56 89.85 301.88 Q 88.22 305.46 85.62 312.37 Q 84.94 314.17 83.50 314.55 A 2.56 2.55 66.0 0 1 80.72 313.47 Q 79.33 311.35 77.57 308.18 Q 56.93 270.88 43.95 247.58 A 1.01 1.01 0.0 0 0 42.31 247.40 C 40.61 249.29 41.00 255.03 41.01 257.69 Q 41.15 380.51 41.01 405.19 Q 40.99 407.86 42.63 409.42 Z";
const rightPath =
"M 171.40 409.52 Q 173.04 407.96 173.02 405.28 Q 172.88 380.57 173.02 257.61 C 173.03 254.95 173.42 249.20 171.72 247.31 A 1.01 1.01 0.0 0 0 170.08 247.49 Q 157.08 270.82 136.42 308.16 Q 134.66 311.34 133.26 313.46 A 2.57 2.55 -66.0 0 1 130.48 314.54 Q 129.04 314.16 128.36 312.36 Q 125.76 305.44 124.12 301.86 C 121.68 296.53 120.76 290.88 123.21 286.47 Q 140.14 255.98 175.72 191.77 C 178.52 186.73 184.70 186.37 187.87 191.19 C 192.18 197.72 191.27 205.58 191.28 215.25 Q 191.33 274.55 191.27 424.25 C 191.27 433.88 190.40 450.35 178.83 453.37 C 173.85 454.68 169.40 451.23 166.85 446.89 Q 158.36 432.43 124.69 375.24 Q 122.02 370.72 121.70 368.33 Q 121.21 364.73 122.32 360.78 Q 122.58 359.85 128.49 345.57 Q 129.14 344.02 130.77 344.06 C 132.27 344.10 133.03 345.35 133.75 346.59 Q 143.27 363.04 169.58 408.65 Q 169.89 409.19 170.38 409.57 A 0.78 0.78 0.0 0 0 171.40 409.52 Z";
export function BrandMark({ className }: { className?: string }) {
return (
<svg className={className} viewBox="8 184 198 276" aria-hidden="true" focusable="false" xmlns="http://www.w3.org/2000/svg">
<g transform="translate(107 322) scale(1.16 1) translate(-107 -322)" stroke="currentColor" strokeWidth={9} strokeLinecap="round" strokeLinejoin="round">
<path fill="currentColor" d={leftPath} />
<path fill="currentColor" d={rightPath} />
<ellipse fill="currentColor" cx="0" cy="0" transform="translate(106.95 328.63) rotate(-90)" rx="23.87" ry="13.32" />
</g>
</svg>
);
}