chore: improve the codebase with react doctor (#917)

This commit is contained in:
MaheshtheDev 2026-05-09 19:12:01 +00:00
parent 0cbcd44e76
commit 8f6c16de49
61 changed files with 292 additions and 326 deletions

View file

@ -53,7 +53,7 @@ function XIcon({ className }: { className?: string }) {
fill="currentColor"
aria-hidden="true"
>
<path d="M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-4.714-6.231-5.401 6.231H2.744l7.73-8.835L1.254 2.25H8.08l4.253 5.622 5.911-5.622Zm-1.161 17.52h1.833L7.084 4.126H5.117z" />
<path d="M18.24 2.25h3.31l-7.23 8.26 8.5 11.24H16.17l-4.71-6.23-5.4 6.23H2.74l7.73-8.84L1.25 2.25H8.08l4.25 5.62 5.91-5.62Zm-1.16 17.52h1.83L7.08 4.13H5.12z" />
</svg>
)
}
@ -66,7 +66,7 @@ function LinkedInIcon({ className }: { className?: string }) {
fill="currentColor"
aria-hidden="true"
>
<path d="M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433a2.062 2.062 0 0 1-2.063-2.065 2.064 2.064 0 1 1 2.063 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z" />
<path d="M20.45 20.45h-3.55v-5.57c0-1.33-.027-3.04-1.85-3.04-1.85 0-2.14 1.45-2.14 2.94v5.67H9.35V9h3.41v1.56h.046c.477-.9 1.64-1.85 3.37-1.85 3.6 0 4.27 2.37 4.27 5.46v6.29zM5.34 7.43a2.06 2.06 0 0 1-2.06-2.06 2.06 2.06 0 1 1 2.06 2.06zm1.78 13.02H3.56V9h3.56v11.45zM22.23 0H1.77C.792 0 0 .774 0 1.73v20.54C0 23.23.792 24 1.77 24h20.45C23.2 24 24 23.23 24 22.27V1.73C24 .774 23.2 0 22.22 0h.003z" />
</svg>
)
}
@ -76,7 +76,7 @@ function SubmitArrow() {
<svg width="12" height="9" viewBox="0 0 12 9" fill="none">
<title>Submit</title>
<path
d="M8.05099 9.60156L6.93234 8.49987L9.00014 6.44902L9.62726 6.04224L9.54251 5.788L8.79675 5.90665H0.0170898V4.31343H8.79675L9.54251 4.43207L9.62726 4.17783L9.00014 3.77105L6.93234 1.72021L8.05099 0.601562L11.9832 4.53377V5.68631L8.05099 9.60156Z"
d="M8.05 9.6L6.93 8.5L9 6.45L9.63 6.04L9.54 5.79L8.8 5.91H0.02V4.31H8.8L9.54 4.43L9.63 4.18L9 3.77L6.93 1.72L8.05 0.6L11.98 4.53V5.69L8.05 9.6Z"
fill="#FAFAFA"
/>
</svg>
@ -809,7 +809,7 @@ export default function OnboardingPage() {
Finishing your first save
</p>
<p className="text-sm text-[#6b7c91] leading-relaxed">
Most finish in under a minute. Below is optional ways to add
Most finish in under a minute. Below is optional: ways to add
more later.
</p>
</div>
@ -948,7 +948,7 @@ export default function OnboardingPage() {
</p>
<p className="text-sm text-[#8B9DB5] leading-relaxed">
Your first save is ready. When you want more, use Integrations
for browser, phone, editor, and AI tools all in one place.
for browser, phone, editor, and AI tools, all in one place.
</p>
</div>

View file

@ -313,7 +313,7 @@ export default function LoginPage() {
<ExternalAuthButton
authIcon={
<svg
className="w-4 h-4 sm:w-5 sm:h-5"
className="size-4 sm:size-5"
fill="none"
height="25"
viewBox="0 0 24 25"
@ -322,19 +322,19 @@ export default function LoginPage() {
>
<title>Google</title>
<path
d="M21.8055 10.2563H21V10.2148H12V14.2148H17.6515C16.827 16.5433 14.6115 18.2148 12 18.2148C8.6865 18.2148 6 15.5283 6 12.2148C6 8.90134 8.6865 6.21484 12 6.21484C13.5295 6.21484 14.921 6.79184 15.9805 7.73434L18.809 4.90584C17.023 3.24134 14.634 2.21484 12 2.21484C6.4775 2.21484 2 6.69234 2 12.2148C2 17.7373 6.4775 22.2148 12 22.2148C17.5225 22.2148 22 17.7373 22 12.2148C22 11.5443 21.931 10.8898 21.8055 10.2563Z"
d="M21.81 10.26H21V10.21H12V14.21H17.65C16.83 16.54 14.61 18.21 12 18.21C8.69 18.21 6 15.53 6 12.21C6 8.9 8.69 6.21 12 6.21C13.53 6.21 14.92 6.79 15.98 7.73L18.81 4.91C17.02 3.24 14.63 2.21 12 2.21C6.48 2.21 2 6.69 2 12.21C2 17.74 6.48 22.21 12 22.21C17.52 22.21 22 17.74 22 12.21C22 11.54 21.93 10.89 21.81 10.26Z"
fill="#FFC107"
/>
<path
d="M3.15234 7.56034L6.43784 9.96984C7.32684 7.76884 9.47984 6.21484 11.9993 6.21484C13.5288 6.21484 14.9203 6.79184 15.9798 7.73434L18.8083 4.90584C17.0223 3.24134 14.6333 2.21484 11.9993 2.21484C8.15834 2.21484 4.82734 4.38334 3.15234 7.56034Z"
d="M3.15 7.56L6.44 9.97C7.33 7.77 9.48 6.21 12 6.21C13.53 6.21 14.92 6.79 15.98 7.73L18.81 4.91C17.02 3.24 14.63 2.21 12 2.21C8.16 2.21 4.83 4.38 3.15 7.56Z"
fill="#FF3D00"
/>
<path
d="M12.0002 22.2152C14.5832 22.2152 16.9302 21.2267 18.7047 19.6192L15.6097 17.0002C14.5721 17.7897 13.3039 18.2166 12.0002 18.2152C9.39916 18.2152 7.19066 16.5567 6.35866 14.2422L3.09766 16.7547C4.75266 19.9932 8.11366 22.2152 12.0002 22.2152Z"
d="M12 22.22C14.58 22.22 16.93 21.23 18.7 19.62L15.61 17C14.57 17.79 13.3 18.22 12 18.22C9.4 18.22 7.19 16.56 6.36 14.24L3.1 16.75C4.75 19.99 8.11 22.22 12 22.22Z"
fill="#4CAF50"
/>
<path
d="M21.8055 10.2563H21V10.2148H12V14.2148H17.6515C17.2571 15.3231 16.5467 16.2914 15.608 17.0003L15.6095 16.9993L18.7045 19.6183C18.4855 19.8173 22 17.2148 22 12.2148C22 11.5443 21.931 10.8898 21.8055 10.2563Z"
d="M21.81 10.26H21V10.21H12V14.21H17.65C17.26 15.32 16.55 16.29 15.61 17L15.61 17L18.7 19.62C18.49 19.82 22 17.21 22 12.21C22 11.54 21.93 10.89 21.81 10.26Z"
fill="#1976D2"
/>
</svg>
@ -378,7 +378,7 @@ export default function LoginPage() {
<ExternalAuthButton
authIcon={
<svg
className="w-4 h-4 sm:w-5 sm:h-5 text-foreground"
className="size-4 sm:size-5 text-foreground"
fill="none"
height="25"
viewBox="0 0 26 25"
@ -389,7 +389,7 @@ export default function LoginPage() {
<g clipPath="url(#clip0_2579_3356)">
<path
clipRule="evenodd"
d="M12.9635 0.214844C6.20975 0.214844 0.75 5.71484 0.75 12.5191C0.75 17.9581 4.24825 22.5621 9.10125 24.1916C9.708 24.3141 9.93025 23.9268 9.93025 23.6011C9.93025 23.3158 9.91025 22.3381 9.91025 21.3193C6.51275 22.0528 5.80525 19.8526 5.80525 19.8526C5.25925 18.4266 4.45025 18.0601 4.45025 18.0601C3.33825 17.3063 4.53125 17.3063 4.53125 17.3063C5.76475 17.3878 6.412 18.5693 6.412 18.5693C7.50375 20.4433 9.263 19.9138 9.97075 19.5878C10.0718 18.7933 10.3955 18.2433 10.7393 17.9378C8.0295 17.6526 5.1785 16.5933 5.1785 11.8671C5.1785 10.5226 5.6635 9.42259 6.432 8.56709C6.31075 8.26159 5.886 6.99834 6.5535 5.30759C6.5535 5.30759 7.58475 4.98159 9.91 6.57059C10.9055 6.30126 11.9322 6.16425 12.9635 6.16309C13.9948 6.16309 15.046 6.30584 16.0168 6.57059C18.3423 4.98159 19.3735 5.30759 19.3735 5.30759C20.041 6.99834 19.616 8.26159 19.4948 8.56709C20.2835 9.42259 20.7485 10.5226 20.7485 11.8671C20.7485 16.5933 17.8975 17.6321 15.1675 17.9378C15.6125 18.3248 15.9965 19.0581 15.9965 20.2193C15.9965 21.8693 15.9765 23.1936 15.9765 23.6008C15.9765 23.9268 16.199 24.3141 16.8055 24.1918C21.6585 22.5618 25.1568 17.9581 25.1568 12.5191C25.1768 5.71484 19.697 0.214844 12.9635 0.214844Z"
d="M12.96 0.21C6.21 0.21 0.75 5.71 0.75 12.52C0.75 17.96 4.25 22.56 9.1 24.19C9.71 24.31 9.93 23.93 9.93 23.6C9.93 23.32 9.91 22.34 9.91 21.32C6.51 22.05 5.81 19.85 5.81 19.85C5.26 18.43 4.45 18.06 4.45 18.06C3.34 17.31 4.53 17.31 4.53 17.31C5.76 17.39 6.41 18.57 6.41 18.57C7.5 20.44 9.26 19.91 9.97 19.59C10.07 18.79 10.4 18.24 10.74 17.94C8.03 17.65 5.18 16.59 5.18 11.87C5.18 10.52 5.66 9.42 6.43 8.57C6.31 8.26 5.89 7 6.55 5.31C6.55 5.31 7.58 4.98 9.91 6.57C10.91 6.3 11.93 6.16 12.96 6.16C13.99 6.16 15.05 6.31 16.02 6.57C18.34 4.98 19.37 5.31 19.37 5.31C20.04 7 19.62 8.26 19.49 8.57C20.28 9.42 20.75 10.52 20.75 11.87C20.75 16.59 17.9 17.63 15.17 17.94C15.61 18.32 16 19.06 16 20.22C16 21.87 15.98 23.19 15.98 23.6C15.98 23.93 16.2 24.31 16.81 24.19C21.66 22.56 25.16 17.96 25.16 12.52C25.18 5.71 19.7 0.21 12.96 0.21Z"
fill="currentColor"
fillRule="evenodd"
/>
@ -399,7 +399,7 @@ export default function LoginPage() {
<rect
fill="currentColor"
height="24"
transform="translate(0.75 0.214844)"
transform="translate(0.75 0.21)"
width="24.5"
/>
</clipPath>

View file

@ -3,7 +3,7 @@ import { ImageResponse } from "next/og"
export async function GET() {
return new ImageResponse(
<div tw="w-full h-full flex flex-col justify-center items-center">
<div tw="size-full flex flex-col justify-center items-center">
<img
src="https://pub-1be2b1df2c7e456f8e21149e972f4caf.r2.dev/bust.png"
alt="Google Logo"

View file

@ -191,7 +191,7 @@ function AuthConnectContent() {
<div className={pageWrapperClass}>
<div className={cardClass}>
<div className="flex flex-col items-center gap-5">
<div className="flex h-10 w-10 items-center justify-center rounded-lg border border-[#1E293B] bg-[#080B0F]">
<div className="flex size-10 items-center justify-center rounded-lg border border-[#1E293B] bg-[#080B0F]">
{pluginInfo ? (
<Image
alt={pluginInfo.name}
@ -270,7 +270,7 @@ function AuthConnectContent() {
<div className={pageWrapperClass}>
<div className={cardClass}>
<div className="flex flex-col items-center gap-5">
<div className="flex h-10 w-10 items-center justify-center rounded-lg border border-[#1E293B] bg-[#080B0F]">
<div className="flex size-10 items-center justify-center rounded-lg border border-[#1E293B] bg-[#080B0F]">
{pluginInfo ? (
<Image
alt={pluginInfo.name}
@ -340,7 +340,7 @@ function AuthConnectContent() {
{isUpgrading || autumn.isLoading ? (
<>
<Loader className="size-4 animate-spin mr-2" />
Upgrading...
Upgrading
</>
) : (
"Upgrade to Pro \u2014 $19/month"
@ -418,9 +418,9 @@ function AuthConnectContent() {
<div className="flex flex-col items-center gap-3">
<div className="size-6 border-2 border-[#4BA0FA] border-t-transparent rounded-full animate-spin" />
<p className={dmSans125ClassName("text-sm text-[#737373]")}>
{status === "creating" && `Connecting ${displayName}...`}
{status === "creating" && `Connecting ${displayName}`}
{status === "success" &&
`Success! Redirecting back to ${displayName}...`}
`Success! Redirecting back to ${displayName}`}
</p>
</div>
</div>

View file

@ -82,8 +82,8 @@ export default function ReferralPage() {
return (
<div className="min-h-screen flex items-center justify-center p-4 bg-[#0f1419]">
<div className="flex flex-col items-center gap-4">
<LoaderIcon className="w-8 h-8 text-orange-500 animate-spin" />
<p className="text-white/60">Checking invitation...</p>
<LoaderIcon className="size-8 text-orange-500 animate-spin" />
<p className="text-white/60">Checking invitation</p>
</div>
</div>
)
@ -119,8 +119,8 @@ export default function ReferralPage() {
{/* Welcome Card */}
<Card className="bg-[#1a1f2a] border-white/10">
<CardHeader className="text-center">
<div className="mx-auto mb-4 w-16 h-16 rounded-full bg-orange-500/10 flex items-center justify-center">
<ShareIcon className="w-8 h-8 text-orange-500" />
<div className="mx-auto mb-4 size-16 rounded-full bg-orange-500/10 flex items-center justify-center">
<ShareIcon className="size-8 text-orange-500" />
</div>
<CardTitle className="text-2xl font-bold text-white">
You're invited to supermemory!
@ -181,9 +181,9 @@ export default function ReferralPage() {
className="shrink-0 border-white/10 hover:bg-white/5"
>
{copiedLink ? (
<CheckIcon className="w-4 h-4" />
<CheckIcon className="size-4" />
) : (
<CopyIcon className="w-4 h-4" />
<CopyIcon className="size-4" />
)}
</Button>
</div>
@ -193,7 +193,7 @@ export default function ReferralPage() {
variant="outline"
className="w-full border-white/10 text-white hover:bg-white/5"
>
<ShareIcon className="w-4 h-4" />
<ShareIcon className="size-4" />
Share this link
</Button>
</div>

View file

@ -16,8 +16,8 @@ export default function ReferralHomePage() {
<div className="min-h-screen flex items-center justify-center p-4 bg-[#0f1419]">
<Card className="max-w-md w-full bg-[#1a1f2a] border-white/10">
<CardHeader className="text-center">
<div className="mx-auto mb-4 w-16 h-16 rounded-full bg-orange-500/10 flex items-center justify-center">
<ShareIcon className="w-8 h-8 text-orange-500" />
<div className="mx-auto mb-4 size-16 rounded-full bg-orange-500/10 flex items-center justify-center">
<ShareIcon className="size-8 text-orange-500" />
</div>
<CardTitle className="text-2xl font-bold text-white">
Missing Referral Code

View file

@ -152,7 +152,7 @@ export default function MigrateMCPPage() {
<div className="relative">
<div className="absolute inset-0 bg-blue-500/20 rounded-full blur-xl" />
<div className="relative bg-blue-500/10 p-3 rounded-full border border-blue-500/20">
<Zap className="w-6 h-6 text-blue-400" />
<Zap className="size-6 text-blue-400" />
</div>
</div>
</div>
@ -177,7 +177,7 @@ export default function MigrateMCPPage() {
className="text-sm font-medium text-slate-200 flex items-center gap-2"
htmlFor="mcpUrl"
>
<Upload className="w-4 h-4" />
<Upload className="size-4" />
MCP URL
</label>
<div className="relative">
@ -231,13 +231,13 @@ export default function MigrateMCPPage() {
>
{migrateMutation.isPending ? (
<>
<Spinner className="mr-2 w-4 h-4" />
Migrating documents...
<Spinner className="mr-2 size-4" />
Migrating documents
</>
) : (
<>
Start Upgrade
<ArrowRight className="ml-2 w-4 h-4" />
<ArrowRight className="ml-2 size-4" />
</>
)}
</Button>
@ -260,7 +260,7 @@ export default function MigrateMCPPage() {
<div className="relative p-4 border border-green-500/20 rounded-xl">
<div className="text-green-400">
<div className="flex items-center gap-2 mb-2">
<CheckCircle className="w-5 h-5" />
<CheckCircle className="size-5" />
<p className="font-medium">
Migration completed successfully!
</p>

View file

@ -409,7 +409,7 @@ export function ConnectContent({ selectedProject }: ConnectContentProps) {
className="bg-[#14161A] rounded-[12px] px-4 py-3 flex items-center justify-between gap-3"
>
<div className="flex items-center gap-3 flex-1">
<Icon className="w-6 h-6 text-[#737373]" />
<Icon className="size-6 text-[#737373]" />
<div className="space-y-[6px] flex-1">
<p className="text-[16px] font-medium">{config.title}</p>
<p className="text-[16px] text-[#737373]">
@ -431,7 +431,7 @@ export function ConnectContent({ selectedProject }: ConnectContentProps) {
className="bg-[#4BA0FA] text-black hover:bg-[#4BA0FA]/90 text-[14px] font-medium px-3 h-8 disabled:opacity-50 disabled:cursor-not-allowed transition-colors"
>
{isConnecting ? (
<Loader className="h-4 w-4 animate-spin" />
<Loader className="size-4 animate-spin" />
) : (
"Connect"
)}
@ -443,7 +443,7 @@ export function ConnectContent({ selectedProject }: ConnectContentProps) {
type="button"
className="bg-[#4BA0FA] text-black hover:bg-[#4BA0FA]/90 px-1.5 h-8 flex items-center transition-colors"
>
<ChevronDown className="w-3 h-3" />
<ChevronDown className="size-3" />
</button>
</DropdownMenuTrigger>
<DropdownMenuContent align="end" className="w-40">
@ -463,7 +463,7 @@ export function ConnectContent({ selectedProject }: ConnectContentProps) {
>
{label}
{gdriveSyncScope === scope && (
<Check className="w-3 h-3 text-[#4BA0FA]" />
<Check className="size-3 text-[#4BA0FA]" />
)}
</DropdownMenuItem>
))}
@ -483,7 +483,7 @@ export function ConnectContent({ selectedProject }: ConnectContentProps) {
className="bg-[#4BA0FA] text-black hover:bg-[#4BA0FA]/90 text-[14px] font-medium px-3 py-1.5 h-8"
>
{isConnecting ? (
<Loader className="h-4 w-4 animate-spin" />
<Loader className="size-4 animate-spin" />
) : (
"Connect"
)}
@ -524,7 +524,7 @@ export function ConnectContent({ selectedProject }: ConnectContentProps) {
className="flex items-center gap-1.5 bg-[#4BA0FA] text-black hover:bg-[#4BA0FA]/90 disabled:opacity-50 disabled:cursor-not-allowed text-[13px] font-medium rounded-full h-8 px-3 transition-colors shrink-0"
>
{isAnyConnecting ? (
<Loader className="h-3.5 w-3.5 animate-spin" />
<Loader className="size-3.5 animate-spin" />
) : (
<>
<span>+ Add a connection</span>
@ -650,14 +650,14 @@ export function ConnectContent({ selectedProject }: ConnectContentProps) {
id="no-active-connections"
className="bg-[#14161A] shadow-inside-out rounded-[12px] px-4 py-6 h-full mb-4 flex flex-col justify-center items-center"
>
<Zap className="w-6 h-6 text-[#737373] mb-3" />
<Zap className="size-6 text-[#737373] mb-3" />
{!isProUser ? (
<>
<p className="text-[14px] text-[#737373] mb-4 text-center">
{isUpgrading || autumn.isLoading ? (
<span className="inline-flex items-center gap-2">
<Loader className="h-4 w-4 animate-spin" />
Upgrading...
<Loader className="size-4 animate-spin" />
Upgrading
</span>
) : (
<>
@ -676,19 +676,19 @@ export function ConnectContent({ selectedProject }: ConnectContentProps) {
</p>
<div className="space-y-2 text-[14px]">
<div className="flex items-center gap-2">
<Check className="w-4 h-4 text-[#4BA0FA]" />
<Check className="size-4 text-[#4BA0FA]" />
<span>Unlimited memories</span>
</div>
<div className="flex items-center gap-2">
<Check className="w-4 h-4 text-[#4BA0FA]" />
<Check className="size-4 text-[#4BA0FA]" />
<span>10 connections</span>
</div>
<div className="flex items-center gap-2">
<Check className="w-4 h-4 text-[#4BA0FA]" />
<Check className="size-4 text-[#4BA0FA]" />
<span>Advanced search</span>
</div>
<div className="flex items-center gap-2">
<Check className="w-4 h-4 text-[#4BA0FA]" />
<Check className="size-4 text-[#4BA0FA]" />
<span>Priority support</span>
</div>
</div>

View file

@ -210,10 +210,10 @@ export function FileContent({
multiple
onChange={handleFileSelect}
disabled={isSubmitting}
className="absolute inset-0 w-full h-full opacity-0 cursor-pointer disabled:cursor-not-allowed"
className="absolute inset-0 size-full opacity-0 cursor-pointer disabled:cursor-not-allowed"
accept={FILE_ACCEPT}
/>
<div className="flex items-center justify-center w-12 h-12 rounded-full bg-[#0F1217]">
<div className="flex items-center justify-center size-12 rounded-full bg-[#0F1217]">
<FileIcon className="size-6 text-[#737373]" />
</div>
{hasItems ? (

View file

@ -311,54 +311,27 @@ export function AddDocument({
</div>
{isMobile && (
<div className="mt-3 flex flex-col gap-2">
<div className="flex justify-between items-center">
<span
className={cn(
"text-[#FAFAFA] text-sm font-medium",
dmSansClassName(),
)}
>
Plan usage
</span>
<span
className={cn(
"text-sm font-medium tabular-nums",
hasPaidPlan ? "text-[#4BA0FA]" : "text-[#737373]",
dmSansClassName(),
)}
>
{isLoadingUsage
<div className="mt-3 grid grid-cols-2 gap-2">
<UsageMeter
label="Credits"
value={
isLoadingUsage
? "…"
: `${planUsagePct < 1 && planUsagePct > 0 ? "< 1" : Math.round(planUsagePct)}% used`}
</span>
</div>
<div className="h-2 w-full rounded-[40px] bg-[#2E353D] p-px overflow-hidden">
<div
className="h-full rounded-[40px]"
style={{
width: `${planUsagePct}%`,
background:
planUsagePct > 80
? "#ef4444"
: hasPaidPlan
? "linear-gradient(to right, #4BA0FA 80%, #002757 100%)"
: "#0054AD",
}}
title={`${formatUsageNumber(tokensUsed)} tokens · ${formatUsageNumber(searchesUsed)} queries`}
/>
</div>
{!isLoadingUsage && (
<p
className={cn(
"text-xs text-[#737373] tabular-nums",
dmSansClassName(),
)}
>
{formatUsageNumber(tokensUsed)} tokens ·{" "}
{formatUsageNumber(searchesUsed)} queries
</p>
)}
: `${tokensToCredits(tokensUsed)} / ${tokensToCredits(tokensLimit)}`
}
percent={tokensPercent}
active={hasPaidPlan}
/>
<UsageMeter
label="Searches"
value={
isLoadingUsage
? "…"
: `${formatUsageNumber(searchesUsed)} / ${formatUsageNumber(searchesLimit)}`
}
percent={searchesPercent}
active={hasPaidPlan}
/>
</div>
)}
@ -448,7 +421,7 @@ export function AddDocument({
{isUpgrading ? (
<>
<Loader2 className="size-3 animate-spin mr-1.5" />
Upgrading...
Upgrading
</>
) : (
"Upgrade to Pro"
@ -545,7 +518,7 @@ export function AddDocument({
{isSubmitting ? (
<>
<Loader2 className="size-4 animate-spin mr-2" />
Adding...
Adding
</>
) : (
<>

View file

@ -173,7 +173,7 @@ export function LinkContent({
{isPreviewLoading ? (
<>
<Loader2 className="size-4 animate-spin mr-2" />
Loading...
Loading
</>
) : (
"Preview Link"
@ -216,7 +216,7 @@ export function LinkContent({
<img
src={image}
alt={title || "Link preview"}
className="w-full h-full object-cover"
className="size-full object-cover"
onError={(e) => {
e.currentTarget.style.display = "none"
e.currentTarget.parentElement?.classList.add("opacity-50")
@ -228,7 +228,7 @@ export function LinkContent({
</div>
) : (
<div className="w-full max-w-md aspect-4/2 bg-[#0F1217] opacity-50 rounded-xl flex items-center justify-center">
<ImageIcon className="w-8 h-8 text-[#737373]" />
<ImageIcon className="size-8 text-[#737373]" />
</div>
)}
</div>

View file

@ -150,7 +150,7 @@ export function AddSpaceModal({
</p>
</div>
<DialogPrimitive.Close
className="bg-[#0D121A] w-7 h-7 flex items-center justify-center focus:ring-ring rounded-full transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 border border-[rgba(115,115,115,0.2)] shrink-0"
className="bg-[#0D121A] size-7 flex items-center justify-center focus:ring-ring rounded-full transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 border border-[rgba(115,115,115,0.2)] shrink-0"
style={{
boxShadow: "inset 1.313px 1.313px 3.938px 0px rgba(0,0,0,0.7)",
}}
@ -243,7 +243,7 @@ export function AddSpaceModal({
{createProjectMutation.isPending ? (
<>
<Loader2 className="size-4 animate-spin mr-2" />
Creating...
Creating
</>
) : (
<>

View file

@ -69,12 +69,12 @@ function ChatEmptyStatePlaceholder({
id="chat-empty-state"
className="flex flex-col items-center justify-center h-full"
>
<div className="relative w-32 h-32">
<GradientLogo className="absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 w-16 h-16" />
<LogoBgGradient className="w-full h-full" />
<div className="relative size-32">
<GradientLogo className="absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 size-16" />
<LogoBgGradient className="size-full" />
</div>
<div className="gap-3 flex flex-col items-center justify-center">
<p>Ask me anything about your memories...</p>
<p>Ask me anything about your memories</p>
<div
className={cn(
dmSansClassName(),
@ -622,7 +622,7 @@ export function ChatSidebar({
<div className="py-4">
{isLoadingThreads ? (
<div className="flex items-center justify-center py-8">
<SuperLoader label="Loading..." />
<SuperLoader label="Loading" />
</div>
) : threads.length === 0 ? (
<div className="py-8 text-center text-sm text-[#737373]">
@ -659,7 +659,7 @@ export function ChatSidebar({
e.stopPropagation()
deleteThread(thread.id)
}}
className="h-7 w-7 bg-red-500 text-white hover:bg-red-600"
className="size-7 bg-red-500 text-white hover:bg-red-600"
>
<Check className="size-3" />
</Button>
@ -671,7 +671,7 @@ export function ChatSidebar({
e.stopPropagation()
setConfirmingDeleteId(null)
}}
className="h-7 w-7"
className="size-7"
>
<XIcon className="size-3 text-[#737373]" />
</Button>
@ -685,7 +685,7 @@ export function ChatSidebar({
e.stopPropagation()
setConfirmingDeleteId(thread.id)
}}
className="ml-2 h-7 w-7"
className="ml-2 size-7"
>
<Trash2 className="size-3 text-[#737373]" />
</Button>
@ -883,7 +883,7 @@ export function ChatSidebar({
))}
{(status === "submitted" || status === "streaming") && (
<div className="flex gap-2">
<SuperLoader label="Thinking..." />
<SuperLoader label="Thinking" />
</div>
)}
</div>
@ -965,10 +965,10 @@ export function ChatSidebar({
isResponding={status === "submitted" || status === "streaming"}
activeStatus={
status === "submitted"
? "Thinking..."
? "Thinking"
: status === "streaming"
? "Structuring response..."
: "Waiting for input..."
? "Structuring response"
: "Waiting for input"
}
onExpandedChange={setIsInputExpanded}
chainOfThoughtComponent={

View file

@ -29,7 +29,7 @@ export function SendButton({
>
<title>Send Icon</title>
<path
d="M12 6L10.55 7.4L7 3.85L7 16L5 16L5 3.85L1.45 7.4L-4.37114e-07 6L6 -2.62268e-07L12 6Z"
d="M12 6L10.55 7.4L7 3.85L7 16L5 16L5 3.85L1.45 7.4L-4.37e-07 6L6 -2.62e-07L12 6Z"
fill="#FAFAFA"
/>
</svg>

View file

@ -165,11 +165,9 @@ function BashToolDisplay({ part }: { part: ToolCallDisplayPart }) {
: "text-white/70",
)}
>
{cmd ?? "..."}
{cmd ?? ""}
</span>
{isLoading && (
<span className="text-white/30 shrink-0">running...</span>
)}
{isLoading && <span className="text-white/30 shrink-0">running</span>}
{isDone && !hasOutput && (
<span className="text-white/30 shrink-0">done</span>
)}
@ -261,7 +259,7 @@ function ToolCallDisplay({ part }: { part: ToolCallDisplayPart }) {
>
{label}
</span>
{isLoading && <span className="text-white/40 ml-auto">running...</span>}
{isLoading && <span className="text-white/40 ml-auto">running</span>}
{isDone && <span className="text-white/40 ml-auto">done</span>}
{isError && <span className="text-red-400/60 ml-auto">error</span>}
{expanded ? (

View file

@ -351,7 +351,7 @@ export function ConnectAIModal({
{/* Step 1: Client Selection */}
<div className="space-y-4">
<div className="flex items-center gap-3">
<div className="w-8 h-8 rounded-full flex items-center justify-center text-sm font-semibold bg-accent text-accent-foreground">
<div className="size-8 rounded-full flex items-center justify-center text-sm font-semibold bg-accent text-accent-foreground">
1
</div>
<h3 className="text-sm font-medium">Select Your AI Client</h3>
@ -373,7 +373,7 @@ export function ConnectAIModal({
type="button"
>
<div className="flex items-center gap-1">
<div className="w-8 h-8 flex items-center justify-center">
<div className="size-8 flex items-center justify-center">
<Image
alt={clientName}
className="rounded object-contain"
@ -499,7 +499,7 @@ export function ConnectAIModal({
href={getCursorDeeplink()}
onClick={() => {
analytics.mcpInstallCmdCopied()
toast.success("Opening Cursor installer...")
toast.success("Opening Cursor installer")
}}
>
<img
@ -673,7 +673,7 @@ export function ConnectAIModal({
</p>
{createMcpApiKeyMutation.isPending ? (
<div className="flex items-center justify-center p-8">
<Loader2 className="h-6 w-6 animate-spin text-primary" />
<Loader2 className="size-6 animate-spin text-primary" />
</div>
) : (
<>
@ -684,7 +684,7 @@ export function ConnectAIModal({
</code>
</pre>
<Button
className="absolute top-2 right-2 h-8 w-8 cursor-pointer p-0 bg-muted/80 hover:bg-muted"
className="absolute top-2 right-2 size-8 cursor-pointer p-0 bg-muted/80 hover:bg-muted"
onClick={() =>
copyManualSnippet(remoteSnippet)
}
@ -722,7 +722,7 @@ export function ConnectAIModal({
</code>
</pre>
<Button
className="absolute top-2 right-2 h-8 w-8 cursor-pointer p-0 bg-muted/80 hover:bg-muted"
className="absolute top-2 right-2 size-8 cursor-pointer p-0 bg-muted/80 hover:bg-muted"
onClick={() => copyManualSnippet(manual.snippet)}
size="icon"
variant="ghost"
@ -788,21 +788,21 @@ export function ConnectAIModal({
<div className="flex items-center gap-2 text-xs">
{isCheckingConnection ? (
<>
<Loader2 className="w-3 h-3 animate-spin text-muted-foreground" />
<span className="text-muted-foreground">Checking...</span>
<Loader2 className="size-3 animate-spin text-muted-foreground" />
<span className="text-muted-foreground">Checking</span>
</>
) : connectionStatus?.previousLogin ? (
<>
<div className="w-2 h-2 rounded-full bg-green-500" />
<div className="size-2 rounded-full bg-green-500" />
<span className="text-green-600 font-medium">
Connected
</span>
</>
) : (
<>
<div className="w-2 h-2 rounded-full bg-yellow-500" />
<div className="size-2 rounded-full bg-yellow-500" />
<span className="text-yellow-600 font-medium">
Waiting for connection...
Waiting for connection
</span>
</>
)}
@ -828,7 +828,7 @@ export function ConnectAIModal({
}
variant="outline"
>
<ExternalLink className="w-2 h-2 mr-2" />
<ExternalLink className="size-2 mr-2" />
Learn More
</Button>
@ -919,8 +919,8 @@ export function ConnectAIModal({
>
{migrateMCPMutation.isPending ? (
<>
<Loader2 className="h-4 w-4 animate-spin mr-2" />
Migrating...
<Loader2 className="size-4 animate-spin mr-2" />
Migrating
</>
) : (
"Migrate"

View file

@ -454,7 +454,7 @@ function MemoryOfDayCard({ data }: { data: MemoryOfDay }) {
type="button"
onClick={() => router.push(href)}
className={cn(
"group w-full h-full text-left bg-surface-card/60 backdrop-blur-md rounded-[18px] p-3 flex flex-col justify-between transition-colors cursor-pointer shadow-[0_12px_40px_rgba(0,0,0,0.22)]",
"group size-full text-left bg-surface-card/60 backdrop-blur-md rounded-[18px] p-3 flex flex-col justify-between transition-colors cursor-pointer shadow-[0_12px_40px_rgba(0,0,0,0.22)]",
dmSansClassName(),
)}
>
@ -873,7 +873,7 @@ export function DashboardView({
onClick={() => onOpenDocument(doc)}
className="group flex w-full items-center gap-3 rounded-lg px-2.5 py-2 text-left transition-colors hover:bg-surface-hover"
>
<div className="flex h-6 w-6 shrink-0 items-center justify-center rounded-md bg-surface-card ring-1 ring-surface-border group-hover:bg-[#182333] transition-colors">
<div className="flex size-6 shrink-0 items-center justify-center rounded-md bg-surface-card ring-1 ring-surface-border group-hover:bg-[#182333] transition-colors">
{isLink ? (
<ExternalLink className="size-3 text-fg-subtle" />
) : (

View file

@ -95,7 +95,7 @@ export const FilePreview = memo(function FilePreview({
key={retryKey}
src={document.url}
alt={document.title || "Image preview"}
className="relative max-w-full max-h-full w-auto h-auto object-contain z-10"
className="relative max-w-full max-h-full size-auto object-contain z-10"
onError={handleImageError}
loading="lazy"
/>
@ -106,7 +106,7 @@ export const FilePreview = memo(function FilePreview({
<DocumentIcon
type={document.type}
url={document.url}
className="w-4 h-4"
className="size-4"
/>
<p
className={cn(dmSansClassName(), "text-[11px] font-semibold")}

View file

@ -22,7 +22,7 @@ export function GoogleDocsPreview({
<DocumentIcon
type={document.type}
url={document.url}
className="w-4 h-4"
className="size-4"
/>
<p className={cn(dmSansClassName(), "text-[13px] font-semibold")}>
{label}

View file

@ -13,7 +13,7 @@ export function NotePreview({ document }: { document: DocumentWithMemories }) {
return (
<div className="bg-[#0B1017] p-3 rounded-[18px] space-y-2">
<div className="flex items-center gap-1">
<DocumentIcon type="note" className="w-4 h-4" />
<DocumentIcon type="note" className="size-4" />
<p className={cn(dmSansClassName(), "text-[13px] font-semibold")}>
Note
</p>

View file

@ -73,9 +73,9 @@ export function NotionPreview({
</div>
{/* Decorative dots mimicking Notion's block handles */}
<div className="flex gap-[3px]">
<div className="w-[3px] h-[3px] rounded-full bg-[#333]" />
<div className="w-[3px] h-[3px] rounded-full bg-[#333]" />
<div className="w-[3px] h-[3px] rounded-full bg-[#333]" />
<div className="size-[3px] rounded-full bg-[#333]" />
<div className="size-[3px] rounded-full bg-[#333]" />
<div className="size-[3px] rounded-full bg-[#333]" />
</div>
</div>
@ -118,7 +118,7 @@ export function NotionPreview({
<div key={i} className="flex items-start gap-1.5">
<div
className={cn(
"mt-[2px] w-[10px] h-[10px] rounded-[2px] border shrink-0",
"mt-[2px] size-[10px] rounded-[2px] border shrink-0",
block.checked
? "bg-[#2F81F7] border-[#2F81F7]"
: "border-[#3B3B3B] bg-transparent",
@ -127,7 +127,7 @@ export function NotionPreview({
{block.checked && (
<svg
viewBox="0 0 10 10"
className="w-full h-full text-white"
className="size-full text-white"
aria-label="Checked"
role="img"
>
@ -159,7 +159,7 @@ export function NotionPreview({
if (block.type === "bullet") {
return (
<div key={i} className="flex items-start gap-1.5">
<div className="mt-[5px] w-[4px] h-[4px] rounded-full bg-[#555] shrink-0" />
<div className="mt-[5px] size-[4px] rounded-full bg-[#555] shrink-0" />
<p className="text-[11px] text-[#737373] line-clamp-1 leading-[140%]">
{block.text}
</p>

View file

@ -105,7 +105,7 @@ function CustomTweetMedia({
<img
src={previewUrl}
alt="Tweet media"
className="w-full h-full object-cover"
className="size-full object-cover"
/>
{isVideo && (
<div className="absolute inset-0 bg-[rgba(4,5,5,0.8)] flex items-center justify-center">

View file

@ -32,7 +32,7 @@ export const WebsitePreview = memo(function WebsitePreview({
<img
src={displayOgImage}
alt={document.title || "Website preview"}
className="w-full h-full object-cover"
className="size-full object-cover"
onError={() => setImageError(true)}
loading="lazy"
/>

View file

@ -42,7 +42,7 @@ export const YoutubePreview = memo(function YoutubePreview({
<iframe
src={embedUrl}
title={document.title || "YouTube video"}
className="w-full h-full"
className="size-full"
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
allowFullScreen
loading="lazy"

View file

@ -28,8 +28,8 @@ function MCPIcon({ className }: { className?: string }) {
xmlns="http://www.w3.org/2000/svg"
>
<title>ModelContextProtocol</title>
<path d="M15.688 2.343a2.588 2.588 0 00-3.61 0l-9.626 9.44a.863.863 0 01-1.203 0 .823.823 0 010-1.18l9.626-9.44a4.313 4.313 0 016.016 0 4.116 4.116 0 011.204 3.54 4.3 4.3 0 013.609 1.18l.05.05a4.115 4.115 0 010 5.9l-8.706 8.537a.274.274 0 000 .393l1.788 1.754a.823.823 0 010 1.18.863.863 0 01-1.203 0l-1.788-1.753a1.92 1.92 0 010-2.754l8.706-8.538a2.47 2.47 0 000-3.54l-.05-.049a2.588 2.588 0 00-3.607-.003l-7.172 7.034-.002.002-.098.097a.863.863 0 01-1.204 0 .823.823 0 010-1.18l7.273-7.133a2.47 2.47 0 00-.003-3.537z" />
<path d="M14.485 4.703a.823.823 0 000-1.18.863.863 0 00-1.204 0l-7.119 6.982a4.115 4.115 0 000 5.9 4.314 4.314 0 006.016 0l7.12-6.982a.823.823 0 000-1.18.863.863 0 00-1.204 0l-7.119 6.982a2.588 2.588 0 01-3.61 0 2.47 2.47 0 010-3.54l7.12-6.982z" />
<path d="M15.69 2.34a2.59 2.59 0 00-3.61 0l-9.63 9.44a.863.86 0 01-1.2 0 .823.82 0 010-1.18l9.63-9.44a4.31 4.31 0 16.02 0 4.12 4.12 0 11.2 3.54 4.3 4.3 0 13.61 1.18l.05.05a4.12 4.12 0 010 5.9l-8.71 8.54a.274.27 0 000 .393l1.79 1.75a.823.82 0 010 1.18.86.863 0 01-1.2 0l-1.79-1.75a1.92 1.92 0 010-2.75l8.71-8.54a2.47 2.47 0 000-3.54l-.05-.049a2.59 2.59 0 00-3.61-.003l-7.17 7.03-.2-.98.1a.863.86 0 01-1.2 0 .823.82 0 010-1.18l7.27-7.13a2.47 2.47 0 00-.003-3.54z" />
<path d="M14.48 4.7a.823.82 0 000-1.18.86.863 0 00-1.2 0l-7.12 6.98a4.12 4.12 0 000 5.9 4.31 4.31 0 6.02 0l7.12-6.98a.823.82 0 000-1.18.86.863 0 00-1.2 0l-7.12 6.98a2.59 2.59 0 01-3.61 0 2.47 2.47 0 010-3.54l7.12-6.98z" />
</svg>
)
}
@ -101,7 +101,7 @@ function YouTubeIcon({ className }: { className?: string }) {
>
<title>YouTube</title>
<path
d="M8 10L13.19 7L8 4V10ZM19.56 2.17C19.69 2.64 19.78 3.27 19.84 4.07C19.91 4.87 19.94 5.56 19.94 6.16L20 7C20 9.19 19.84 10.8 19.56 11.83C19.31 12.73 18.73 13.31 17.83 13.56C17.36 13.69 16.5 13.78 15.18 13.84C13.88 13.91 12.69 13.94 11.59 13.94L10 14C5.81 14 3.2 13.84 2.17 13.56C1.27 13.31 0.69 12.73 0.44 11.83C0.31 11.36 0.22 10.73 0.16 9.93C0.0900001 9.13 0.0599999 8.44 0.0599999 7.84L0 7C0 4.81 0.16 3.2 0.44 2.17C0.69 1.27 1.27 0.69 2.17 0.44C2.64 0.31 3.5 0.22 4.82 0.16C6.12 0.0899998 7.31 0.0599999 8.41 0.0599999L10 0C14.19 0 16.8 0.16 17.83 0.44C18.73 0.69 19.31 1.27 19.56 2.17Z"
d="M8 10L13.19 7L8 4V10ZM19.56 2.17C19.69 2.64 19.78 3.27 19.84 4.07C19.91 4.87 19.94 5.56 19.94 6.16L20 7C20 9.19 19.84 10.8 19.56 11.83C19.31 12.73 18.73 13.31 17.83 13.56C17.36 13.69 16.5 13.78 15.18 13.84C13.88 13.91 12.69 13.94 11.59 13.94L10 14C5.81 14 3.2 13.84 2.17 13.56C1.27 13.31 0.69 12.73 0.44 11.83C0.31 11.36 0.22 10.73 0.16 9.93C0.09 9.13 0.06 8.44 0.06 7.84L0 7C0 4.81 0.16 3.2 0.44 2.17C0.69 1.27 1.27 0.69 2.17 0.44C2.64 0.31 3.5 0.22 4.82 0.16C6.12 0.09 7.31 0.06 8.41 0.06L10 0C14.19 0 16.8 0.16 17.83 0.44C18.73 0.69 19.31 1.27 19.56 2.17Z"
fill="#FF0000"
/>
<path d="M8 10L13.19 7L8 4V10Z" fill="white" />
@ -119,7 +119,7 @@ function TextDocumentIcon({ className }: { className?: string }) {
>
<title>Text Document</title>
<path
d="M3.33333 8.33333H9.16667L10.8333 6.66667H3.33333V8.33333ZM3.33333 5H8.33333V3.33333H3.33333V5ZM1.66667 1.66667V10H7.5L5.83333 11.6667H0V0H16.6667V2.5H15V1.66667H1.66667ZM17.4167 6.08333C17.4861 6.15278 17.5208 6.22917 17.5208 6.3125C17.5208 6.39583 17.4861 6.47222 17.4167 6.54167L16.6667 7.29167L15.2083 5.83333L15.9583 5.08333C16.0278 5.01389 16.1042 4.97917 16.1875 4.97917C16.2708 4.97917 16.3472 5.01389 16.4167 5.08333L17.4167 6.08333ZM9.16667 13.3333V11.875L14.7083 6.33333L16.1667 7.79167L10.625 13.3333H9.16667Z"
d="M3.33 8.33H9.17L10.83 6.67H3.33V8.33ZM3.33 5H8.33V3.33H3.33V5ZM1.67 1.67V10H7.5L5.83 11.67H0V0H16.67V2.5H15V1.67H1.67ZM17.42 6.08C17.49 6.15 17.52 6.23 17.52 6.31C17.52 6.4 17.49 6.47 17.42 6.54L16.67 7.29L15.21 5.83L15.96 5.08C16.03 5.01 16.1 4.98 16.19 4.98C16.27 4.98 16.35 5.01 16.42 5.08L17.42 6.08ZM9.17 13.33V11.88L14.71 6.33L16.17 7.79L10.63 13.33H9.17Z"
fill="currentColor"
/>
</svg>
@ -135,7 +135,7 @@ function XIcon({ className }: { className?: string }) {
className={cn("text-white", className)}
>
<title>X (Twitter)</title>
<path d="M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-4.714-6.231-5.401 6.231H2.746l7.73-8.835L1.254 2.25H8.08l4.253 5.622 5.911-5.622zm-1.161 17.52h1.833L7.084 4.126H5.117z" />
<path d="M18.24 2.25h3.31l-7.23 8.26 8.5 11.24H16.17l-4.71-6.23-5.4 6.23H2.75l7.73-8.84L1.25 2.25H8.08l4.25 5.62 5.91-5.62zm-1.16 17.52h1.83L7.08 4.13H5.12z" />
</svg>
)
}
@ -153,7 +153,7 @@ export function DocumentIcon({
url,
className,
}: DocumentIconProps) {
const iconClassName = cn("w-4 h-4", className)
const iconClassName = cn("size-4", className)
if (source === "mcp") {
return <MCPIcon className={iconClassName} />

View file

@ -33,11 +33,11 @@ export function GoogleDocViewer({ url, customId, type }: GoogleDocViewerProps) {
}
return (
<div className="flex flex-col h-full w-full overflow-hidden">
<div className="flex flex-col size-full overflow-hidden">
{loading && (
<div className="absolute inset-0 flex items-center justify-center bg-[#14161A] z-10">
<div className="flex items-center gap-2 text-gray-400">
<Loader2 className="w-5 h-5 animate-spin" />
<Loader2 className="size-5 animate-spin" />
<span>Loading {typeLabels[type]}...</span>
</div>
</div>
@ -49,7 +49,7 @@ export function GoogleDocViewer({ url, customId, type }: GoogleDocViewerProps) {
)}
<iframe
src={embedUrl}
className="flex-1 w-full h-full border-0 rounded-[14px]"
className="flex-1 size-full border-0 rounded-[14px]"
onLoad={() => setLoading(false)}
onError={() => {
setLoading(false)

View file

@ -34,10 +34,10 @@ export function ImagePreview({ url, title }: ImagePreviewProps) {
}
return (
<div className="relative w-full h-full overflow-hidden flex items-center justify-center bg-[#0B1017]">
<div className="relative size-full overflow-hidden flex items-center justify-center bg-[#0B1017]">
{isLoading && (
<div className="absolute inset-0 bg-cover bg-center animate-pulse">
<div className="w-full h-full bg-[#1B1F24]" />
<div className="size-full bg-[#1B1F24]" />
</div>
)}
<div
@ -55,7 +55,7 @@ export function ImagePreview({ url, title }: ImagePreviewProps) {
src={url}
alt={title || "Image preview"}
className={cn(
"relative max-w-full max-h-full w-auto h-auto object-contain z-10",
"relative max-w-full max-h-full size-auto object-contain z-10",
isLoading && "opacity-0",
)}
onError={handleImageError}

View file

@ -21,7 +21,7 @@ const PdfViewer = dynamic(
ssr: false,
loading: () => (
<div className="flex items-center justify-center h-full text-gray-400">
Loading PDF viewer...
Loading PDF viewer
</div>
),
},

View file

@ -55,10 +55,10 @@ export function PdfViewer({ url }: PdfViewerProps) {
)
return (
<div className="flex flex-col h-full w-full overflow-hidden scrollbar-thin">
<div className="flex flex-col size-full overflow-hidden scrollbar-thin">
{loading && (
<div className="flex items-center justify-center h-full text-gray-400">
Loading PDF...
Loading PDF
</div>
)}
{error && (

View file

@ -67,7 +67,7 @@ export function TextEditorContent({
{isSaving ? (
<>
<Loader2 className="size-4 animate-spin mr-1" />
Saving...
Saving
</>
) : (
<>

View file

@ -37,7 +37,7 @@ export function TweetContent({
className="flex items-center gap-1.5 text-sm text-blue-400 hover:underline mt-4"
>
View on X
<ExternalLinkIcon className="w-3.5 h-3.5" />
<ExternalLinkIcon className="size-3.5" />
</a>
)}
</div>
@ -55,7 +55,7 @@ export function TweetContent({
className="flex items-center gap-1.5 text-sm text-blue-400 hover:underline"
>
View on X
<ExternalLinkIcon className="w-3.5 h-3.5" />
<ExternalLinkIcon className="size-3.5" />
</a>
)}
</div>

View file

@ -60,7 +60,7 @@ export function YoutubeVideo({ url }: YoutubeVideoProps) {
if (loading) {
return (
<div className="flex items-center justify-center h-full text-gray-400">
Loading video...
Loading video
</div>
)
}
@ -81,7 +81,7 @@ export function YoutubeVideo({ url }: YoutubeVideoProps) {
title="YouTube video player"
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
allowFullScreen
className="w-full h-full rounded-lg shadow-lg"
className="size-full rounded-lg shadow-lg"
/>
</div>
</div>

View file

@ -38,21 +38,21 @@ function VersionStatus({
<path
fillRule="evenodd"
clipRule="evenodd"
d="M5.00069 0L9.33082 2.5V7.5L5.00069 10L0.670563 7.5V2.5L5.00069 0ZM7.5008 2.5H5.0008H2.50069L2.5008 7.5H7.5008V5V2.5Z"
d="M5 0L9.33 2.5V7.5L5 10L0.67 7.5V2.5L5 0ZM7.5 2.5H5H2.5L2.5 7.5H7.5V5V2.5Z"
fill="#00FFA9"
/>
<path
fillRule="evenodd"
clipRule="evenodd"
d="M5.0008 2.5H2.50069L2.5008 7.5H7.5008V5C6.12009 5 5.0008 3.88071 5.0008 2.5Z"
d="M5 2.5H2.5L2.5 7.5H7.5V5C6.12 5 5 3.88 5 2.5Z"
fill="#005236"
/>
<path
d="M7.5008 2.5H5.0008C5.0008 3.88071 6.12009 5 7.5008 5V2.5Z"
d="M7.5 2.5H5C5 3.88 6.12 5 7.5 5V2.5Z"
fill="#00FFA9"
/>
<path
d="M9.08072 2.64453V7.35449L5.00064 9.71094L0.920563 7.35449V2.64453L5.00064 0.288086L9.08072 2.64453ZM2.25064 2.25V7.75H7.75064V2.25H2.25064ZM4.76334 2.75C4.88226 4.0691 5.93157 5.11728 7.25064 5.23633V7.25H2.75064V2.75H4.76334ZM7.25064 2.75V4.73438C6.20794 4.61894 5.3806 3.79274 5.26529 2.75H7.25064Z"
d="M9.08 2.64V7.35L5 9.71L0.92 7.35V2.64L5 0.29L9.08 2.64ZM2.25 2.25V7.75H7.75V2.25H2.25ZM4.76 2.75C4.88 4.07 5.93 5.12 7.25 5.24V7.25H2.75V2.75H4.76ZM7.25 2.75V4.73C6.21 4.62 5.38 3.79 5.27 2.75H7.25Z"
stroke="#00FFA9"
strokeWidth="0.5"
/>
@ -71,19 +71,11 @@ function VersionStatus({
xmlns="http://www.w3.org/2000/svg"
>
<title>Static</title>
<circle cx="5.00061" cy="5.00073" r="1.25" fill="#369BFD" />
<circle cx="5" cy="5" r="1.25" fill="#369BFD" />
<circle
cx="5.00061"
cy="5.00073"
r="0.833333"
stroke="#369BFD"
strokeOpacity="0.5"
strokeWidth="0.833333"
/>
<circle
cx="5.00057"
cy="5.00081"
r="2.91667"
cx="5"
cy="5"
r="0.83"
stroke="#369BFD"
strokeOpacity="0.5"
strokeWidth="0.833333"
@ -91,7 +83,15 @@ function VersionStatus({
<circle
cx="5"
cy="5"
r="4.58333"
r="2.92"
stroke="#369BFD"
strokeOpacity="0.5"
strokeWidth="0.833333"
/>
<circle
cx="5"
cy="5"
r="4.58"
stroke="#369BFD"
strokeOpacity="0.2"
strokeWidth="0.833333"
@ -114,17 +114,17 @@ function VersionStatus({
<path
fillRule="evenodd"
clipRule="evenodd"
d="M2.50066 2.5H7.50077V7.5H2.50077L2.50066 2.5Z"
d="M2.5 2.5H7.5V7.5H2.5L2.5 2.5Z"
fill="#4D2E00"
/>
<path
fillRule="evenodd"
clipRule="evenodd"
d="M5.00066 0L9.33078 2.5V7.5L5.00066 10L0.670532 7.5V2.5L5.00066 0ZM7.50077 2.5H2.50066L2.50077 7.5H7.50077V2.5Z"
d="M5 0L9.33 2.5V7.5L5 10L0.67 7.5V2.5L5 0ZM7.5 2.5H2.5L2.5 7.5H7.5V2.5Z"
fill="#FE9900"
/>
<path
d="M9.08069 2.64453V7.35449L5.00061 9.71094L0.920532 7.35449V2.64453L5.00061 0.288086L9.08069 2.64453ZM2.25061 2.25V7.75H7.75061V2.25H2.25061ZM7.25061 2.75V7.25H2.75061V2.75H7.25061Z"
d="M9.08 2.64V7.35L5 9.71L0.92 7.35V2.64L5 0.29L9.08 2.64ZM2.25 2.25V7.75H7.75V2.25H2.25ZM7.25 2.75V7.25H2.75V2.75H7.25Z"
stroke="#FE9900"
strokeWidth="0.5"
/>
@ -145,13 +145,13 @@ function VersionStatus({
<title>Forgotten</title>
<path
opacity="0.6"
d="M9.08008 2.64453V7.35449L5 9.71094L0.919922 7.35449V2.64453L5 0.288086L9.08008 2.64453Z"
d="M9.08 2.64V7.35L5 9.71L0.92 7.35V2.64L5 0.29L9.08 2.64Z"
fill="#60272C"
stroke="#FF6467"
strokeWidth="0.5"
/>
<path
d="M2.08333 2.08341L7.91677 7.91685M7.91667 2.08341L2.08333 7.91675"
d="M2.08 2.08L7.92 7.92M7.92 2.08L2.08 7.92"
stroke="#9C4044"
strokeWidth="0.5"
/>
@ -226,7 +226,7 @@ export function GraphListMemories({
</mask>
<g mask="url(#mask0_891_45456)">
<path
d="M7.00057 12.8334C6.51446 12.8334 6.10126 12.6632 5.76099 12.3229C5.42071 11.9827 5.25057 11.5695 5.25057 11.0834C5.25057 11.0347 5.253 10.9813 5.25786 10.9229C5.26272 10.8646 5.27001 10.8111 5.27974 10.7625L4.06932 10.0771C3.91376 10.2132 3.73876 10.3177 3.54432 10.3906C3.34988 10.4636 3.14085 10.5 2.91724 10.5C2.43113 10.5 2.01793 10.3299 1.67765 9.9896C1.33738 9.64933 1.16724 9.23613 1.16724 8.75002C1.16724 8.26391 1.33738 7.85071 1.67765 7.51044C2.01793 7.17016 2.43113 7.00002 2.91724 7.00002C3.15057 7.00002 3.36932 7.04377 3.57349 7.13127C3.77765 7.21877 3.96238 7.3403 4.12765 7.49585L5.86307 6.62085C5.8339 6.39724 5.84606 6.17849 5.89953 5.9646C5.953 5.75071 6.04779 5.55141 6.1839 5.36669L5.68807 4.60835C5.62001 4.6278 5.54953 4.64238 5.47661 4.6521C5.40369 4.66183 5.32835 4.66669 5.25057 4.66669C4.76446 4.66669 4.35126 4.49655 4.01099 4.15627C3.67071 3.81599 3.50057 3.4028 3.50057 2.91669C3.50057 2.43058 3.67071 2.01738 4.01099 1.6771C4.35126 1.33683 4.76446 1.16669 5.25057 1.16669C5.73668 1.16669 6.14988 1.33683 6.49015 1.6771C6.83043 2.01738 7.00057 2.43058 7.00057 2.91669C7.00057 3.11113 6.96897 3.29828 6.90578 3.47815C6.84258 3.65801 6.75751 3.82085 6.65057 3.96669L7.16099 4.72502C7.23876 4.70558 7.31168 4.69099 7.37974 4.68127C7.44779 4.67155 7.52071 4.66669 7.59849 4.66669C7.76376 4.66669 7.91932 4.68613 8.06515 4.72502C8.21099 4.76391 8.35196 4.82224 8.48807 4.90002L9.45057 4.11252C9.41168 4.0153 9.38251 3.91565 9.36307 3.81356C9.34363 3.71148 9.3339 3.60696 9.3339 3.50002C9.3339 3.01391 9.50404 2.60071 9.84432 2.26044C10.1846 1.92016 10.5978 1.75002 11.0839 1.75002C11.57 1.75002 11.9832 1.92016 12.3235 2.26044C12.6638 2.60071 12.8339 3.01391 12.8339 3.50002C12.8339 3.98613 12.6638 4.39933 12.3235 4.7396C11.9832 5.07988 11.57 5.25002 11.0839 5.25002C10.9186 5.25002 10.7631 5.22815 10.6172 5.1844C10.4714 5.14065 10.3304 5.07988 10.1943 5.0021L9.23182 5.80419C9.27071 5.90141 9.29988 6.00106 9.31932 6.10315C9.33876 6.20523 9.34849 6.30974 9.34849 6.41669C9.34849 6.9028 9.17835 7.31599 8.83807 7.65627C8.49779 7.99655 8.0846 8.16669 7.59849 8.16669C7.36515 8.16669 7.14397 8.12294 6.93494 8.03544C6.72592 7.94794 6.53876 7.82641 6.37349 7.67085L4.65265 8.53127C4.6721 8.61877 4.67939 8.70627 4.67453 8.79377C4.66967 8.88127 4.65751 8.96877 4.63807 9.05627L5.86307 9.75627C6.01863 9.62016 6.19119 9.51565 6.38078 9.44273C6.57036 9.36981 6.77696 9.33335 7.00057 9.33335C7.48668 9.33335 7.89988 9.50349 8.24015 9.84377C8.58043 10.184 8.75057 10.5972 8.75057 11.0834C8.75057 11.5695 8.58043 11.9827 8.24015 12.3229C7.89988 12.6632 7.48668 12.8334 7.00057 12.8334ZM2.91724 9.33335C3.08251 9.33335 3.22106 9.27745 3.33286 9.16565C3.44467 9.05384 3.50057 8.9153 3.50057 8.75002C3.50057 8.58474 3.44467 8.4462 3.33286 8.3344C3.22106 8.22259 3.08251 8.16669 2.91724 8.16669C2.75196 8.16669 2.61342 8.22259 2.50161 8.3344C2.38981 8.4462 2.3339 8.58474 2.3339 8.75002C2.3339 8.9153 2.38981 9.05384 2.50161 9.16565C2.61342 9.27745 2.75196 9.33335 2.91724 9.33335ZM5.25057 3.50002C5.41585 3.50002 5.55439 3.44412 5.66619 3.33231C5.778 3.22051 5.8339 3.08196 5.8339 2.91669C5.8339 2.75141 5.778 2.61287 5.66619 2.50106C5.55439 2.38926 5.41585 2.33335 5.25057 2.33335C5.08529 2.33335 4.94675 2.38926 4.83494 2.50106C4.72314 2.61287 4.66724 2.75141 4.66724 2.91669C4.66724 3.08196 4.72314 3.22051 4.83494 3.33231C4.94675 3.44412 5.08529 3.50002 5.25057 3.50002ZM7.00057 11.6667C7.16585 11.6667 7.30439 11.6108 7.41619 11.499C7.528 11.3872 7.5839 11.2486 7.5839 11.0834C7.5839 10.9181 7.528 10.7795 7.41619 10.6677C7.30439 10.5559 7.16585 10.5 7.00057 10.5C6.83529 10.5 6.69675 10.5559 6.58494 10.6677C6.47314 10.7795 6.41724 10.9181 6.41724 11.0834C6.41724 11.2486 6.47314 11.3872 6.58494 11.499C6.69675 11.6108 6.83529 11.6667 7.00057 11.6667ZM7.5839 7.00002C7.74918 7.00002 7.88772 6.94412 7.99953 6.83231C8.11133 6.72051 8.16724 6.58196 8.16724 6.41669C8.16724 6.25141 8.11133 6.11287 7.99953 6.00106C7.88772 5.88926 7.74918 5.83335 7.5839 5.83335C7.41862 5.83335 7.28008 5.88926 7.16828 6.00106C7.05647 6.11287 7.00057 6.25141 7.00057 6.41669C7.00057 6.58196 7.05647 6.72051 7.16828 6.83231C7.28008 6.94412 7.41862 7.00002 7.5839 7.00002ZM11.0839 4.08335C11.2492 4.08335 11.3877 4.02745 11.4995 3.91565C11.6113 3.80384 11.6672 3.6653 11.6672 3.50002C11.6672 3.33474 11.6113 3.1962 11.4995 3.0844C11.3877 2.97259 11.2492 2.91669 11.0839 2.91669C10.9186 2.91669 10.7801 2.97259 10.6683 3.0844C10.5565 3.1962 10.5006 3.33474 10.5006 3.50002C10.5006 3.6653 10.5565 3.80384 10.6683 3.91565C10.7801 4.02745 10.9186 4.08335 11.0839 4.08335Z"
d="M7 12.83C6.51 12.83 6.1 12.66 5.76 12.32C5.42 11.98 5.25 11.57 5.25 11.08C5.25 11.03 5.25 10.98 5.26 10.92C5.26 10.86 5.27 10.81 5.28 10.76L4.07 10.08C3.91 10.21 3.74 10.32 3.54 10.39C3.35 10.46 3.14 10.5 2.92 10.5C2.43 10.5 2.02 10.33 1.68 9.99C1.34 9.65 1.17 9.24 1.17 8.75C1.17 8.26 1.34 7.85 1.68 7.51C2.02 7.17 2.43 7 2.92 7C3.15 7 3.37 7.04 3.57 7.13C3.78 7.22 3.96 7.34 4.13 7.5L5.86 6.62C5.83 6.4 5.85 6.18 5.9 5.96C5.95 5.75 6.05 5.55 6.18 5.37L5.69 4.61C5.62 4.63 5.55 4.64 5.48 4.65C5.4 4.66 5.33 4.67 5.25 4.67C4.76 4.67 4.35 4.5 4.01 4.16C3.67 3.82 3.5 3.4 3.5 2.92C3.5 2.43 3.67 2.02 4.01 1.68C4.35 1.34 4.76 1.17 5.25 1.17C5.74 1.17 6.15 1.34 6.49 1.68C6.83 2.02 7 2.43 7 2.92C7 3.11 6.97 3.3 6.91 3.48C6.84 3.66 6.76 3.82 6.65 3.97L7.16 4.73C7.24 4.71 7.31 4.69 7.38 4.68C7.45 4.67 7.52 4.67 7.6 4.67C7.76 4.67 7.92 4.69 8.07 4.73C8.21 4.76 8.35 4.82 8.49 4.9L9.45 4.11C9.41 4.02 9.38 3.92 9.36 3.81C9.34 3.71 9.33 3.61 9.33 3.5C9.33 3.01 9.5 2.6 9.84 2.26C10.18 1.92 10.6 1.75 11.08 1.75C11.57 1.75 11.98 1.92 12.32 2.26C12.66 2.6 12.83 3.01 12.83 3.5C12.83 3.99 12.66 4.4 12.32 4.74C11.98 5.08 11.57 5.25 11.08 5.25C10.92 5.25 10.76 5.23 10.62 5.18C10.47 5.14 10.33 5.08 10.19 5L9.23 5.8C9.27 5.9 9.3 6 9.32 6.1C9.34 6.21 9.35 6.31 9.35 6.42C9.35 6.9 9.18 7.32 8.84 7.66C8.5 8 8.08 8.17 7.6 8.17C7.37 8.17 7.14 8.12 6.93 8.04C6.73 7.95 6.54 7.83 6.37 7.67L4.65 8.53C4.67 8.62 4.68 8.71 4.67 8.79C4.67 8.88 4.66 8.97 4.64 9.06L5.86 9.76C6.02 9.62 6.19 9.52 6.38 9.44C6.57 9.37 6.78 9.33 7 9.33C7.49 9.33 7.9 9.5 8.24 9.84C8.58 10.18 8.75 10.6 8.75 11.08C8.75 11.57 8.58 11.98 8.24 12.32C7.9 12.66 7.49 12.83 7 12.83ZM2.92 9.33C3.08 9.33 3.22 9.28 3.33 9.17C3.44 9.05 3.5 8.92 3.5 8.75C3.5 8.58 3.44 8.45 3.33 8.33C3.22 8.22 3.08 8.17 2.92 8.17C2.75 8.17 2.61 8.22 2.5 8.33C2.39 8.45 2.33 8.58 2.33 8.75C2.33 8.92 2.39 9.05 2.5 9.17C2.61 9.28 2.75 9.33 2.92 9.33ZM5.25 3.5C5.42 3.5 5.55 3.44 5.67 3.33C5.78 3.22 5.83 3.08 5.83 2.92C5.83 2.75 5.78 2.61 5.67 2.5C5.55 2.39 5.42 2.33 5.25 2.33C5.09 2.33 4.95 2.39 4.83 2.5C4.72 2.61 4.67 2.75 4.67 2.92C4.67 3.08 4.72 3.22 4.83 3.33C4.95 3.44 5.09 3.5 5.25 3.5ZM7 11.67C7.17 11.67 7.3 11.61 7.42 11.5C7.53 11.39 7.58 11.25 7.58 11.08C7.58 10.92 7.53 10.78 7.42 10.67C7.3 10.56 7.17 10.5 7 10.5C6.84 10.5 6.7 10.56 6.58 10.67C6.47 10.78 6.42 10.92 6.42 11.08C6.42 11.25 6.47 11.39 6.58 11.5C6.7 11.61 6.84 11.67 7 11.67ZM7.58 7C7.75 7 7.89 6.94 8 6.83C8.11 6.72 8.17 6.58 8.17 6.42C8.17 6.25 8.11 6.11 8 6C7.89 5.89 7.75 5.83 7.58 5.83C7.42 5.83 7.28 5.89 7.17 6C7.06 6.11 7 6.25 7 6.42C7 6.58 7.06 6.72 7.17 6.83C7.28 6.94 7.42 7 7.58 7ZM11.08 4.08C11.25 4.08 11.39 4.03 11.5 3.92C11.61 3.8 11.67 3.67 11.67 3.5C11.67 3.33 11.61 3.2 11.5 3.08C11.39 2.97 11.25 2.92 11.08 2.92C10.92 2.92 10.78 2.97 10.67 3.08C10.56 3.2 10.5 3.33 10.5 3.5C10.5 3.67 10.56 3.8 10.67 3.92C10.78 4.03 10.92 4.08 11.08 4.08Z"
className="fill-[#737373] group-hover:fill-white group-data-[state=active]:fill-white"
/>
</g>
@ -251,7 +251,7 @@ export function GraphListMemories({
>
<title>List</title>
<path
d="M0.00153996 1.78136H0.0032201C0.00332596 1.86499 0.0363955 1.94522 0.095258 2.00463C0.15412 2.06404 0.23403 2.09786 0.31766 2.09874L8.76792 2.09902C8.85189 2.09861 8.93229 2.06485 8.99154 2.00536C9.0508 1.94586 9.08411 1.86533 9.08418 1.78136H9.08558V0.3171C9.08539 0.23296 9.05185 0.152327 8.9923 0.0928833C8.93275 0.0334395 8.85206 3.68622e-05 8.76792 0H0.31766C0.233423 3.71008e-05 0.152646 0.0335166 0.0930814 0.0930814C0.0335167 0.152646 3.71008e-05 0.233423 0 0.31766C0 0.32312 0.00139988 0.3283 0.00167988 0.33376L0.00153996 1.78136ZM8.76778 4.49314H0.31766C0.233423 4.49318 0.152646 4.52666 0.0930814 4.58622C0.0335167 4.64579 3.71008e-05 4.72656 0 4.8108C0 4.81626 0.00139988 4.82144 0.00167988 4.8269V6.2745H0.00336002C0.00346588 6.35813 0.0365354 6.43836 0.0953979 6.49777C0.15426 6.55718 0.234171 6.591 0.3178 6.59188L8.76806 6.59216C8.85203 6.59175 8.93243 6.55799 8.99168 6.4985C9.05094 6.439 9.08425 6.35847 9.08432 6.2745H9.08572V4.81024C9.08553 4.72605 9.05195 4.64538 8.99234 4.58592C8.93273 4.52647 8.85197 4.4931 8.76778 4.49314ZM8.76778 8.98614H0.31766C0.233423 8.98618 0.152646 9.01966 0.0930814 9.07922C0.0335167 9.13879 3.71008e-05 9.21956 0 9.3038C0 9.30926 0.00139988 9.31444 0.00167988 9.3199V10.7675H0.00336002C0.00346588 10.8511 0.0365354 10.9314 0.0953979 10.9908C0.15426 11.0502 0.234171 11.084 0.3178 11.0849L8.76806 11.0852C8.85205 11.0848 8.93247 11.051 8.99173 10.9914C9.051 10.9319 9.08428 10.8514 9.08432 10.7674H9.08572V9.3031C9.0855 9.21894 9.0519 9.1383 8.99229 9.07887C8.93269 9.01945 8.85194 8.9861 8.76778 8.98614Z"
d="M0 1.78H0C0 1.86 0.04 1.95 0.1 2C0.15 2.06 0.23 2.1 0.32 2.1L8.77 2.1C8.85 2.1 8.93 2.06 8.99 2.01C9.05 1.95 9.08 1.87 9.08 1.78H9.09V0.32C9.09 0.23 9.05 0.15 8.99 0.09C8.93 0.03 8.85 3.69e-05 8.77 0H0.32C0.23 3.71e-05 0.15 0.03 0.09 0.09C0.03 0.15 3.71e-05 0.23 0 0.32C0 0.32 0 0.33 0 0.33L0 1.78ZM8.77 4.49H0.32C0.23 4.49 0.15 4.53 0.09 4.59C0.03 4.65 3.71e-05 4.73 0 4.81C0 4.82 0 4.82 0 4.83V6.27H0C0 6.36 0.04 6.44 0.1 6.5C0.15 6.56 0.23 6.59 0.32 6.59L8.77 6.59C8.85 6.59 8.93 6.56 8.99 6.5C9.05 6.44 9.08 6.36 9.08 6.27H9.09V4.81C9.09 4.73 9.05 4.65 8.99 4.59C8.93 4.53 8.85 4.49 8.77 4.49ZM8.77 8.99H0.32C0.23 8.99 0.15 9.02 0.09 9.08C0.03 9.14 3.71e-05 9.22 0 9.3C0 9.31 0 9.31 0 9.32V10.77H0C0 10.85 0.04 10.93 0.1 10.99C0.15 11.05 0.23 11.08 0.32 11.08L8.77 11.09C8.85 11.08 8.93 11.05 8.99 10.99C9.05 10.93 9.08 10.85 9.08 10.77H9.09V9.3C9.09 9.22 9.05 9.14 8.99 9.08C8.93 9.02 8.85 8.99 8.77 8.99Z"
className="fill-[#737373] group-hover:fill-white group-data-[state=active]:fill-white"
/>
</svg>
@ -261,7 +261,7 @@ export function GraphListMemories({
</TabsTrigger>
</TabsList>
<TabsContent value="graph" className="flex-1 min-h-0 mt-3">
<div className="w-full h-full rounded-lg overflow-hidden">
<div className="size-full rounded-lg overflow-hidden">
<MemoryGraph
documentIds={documentId ? [documentId] : undefined}
variant="consumer"

View file

@ -110,10 +110,10 @@ function DeleteButton({
transition={{ duration: 0.15 }}
onClick={() => setDeleteConfirmOpen(true)}
tabIndex={-1}
className="bg-[#0D121A] w-7 h-7 flex items-center justify-center rounded-full transition-opacity hover:opacity-100 focus-visible:ring-2 focus-visible:ring-offset-2 focus:outline-none cursor-pointer shadow-[inset_0_2px_4px_rgba(0,0,0,0.3),inset_0_1px_2px_rgba(0,0,0,0.1)]"
className="bg-[#0D121A] size-7 flex items-center justify-center rounded-full transition-opacity hover:opacity-100 focus-visible:ring-2 focus-visible:ring-offset-2 focus:outline-none cursor-pointer shadow-[inset_0_2px_4px_rgba(0,0,0,0.3),inset_0_1px_2px_rgba(0,0,0,0.1)]"
disabled={deleteMutation.isPending}
>
<Trash2Icon className="w-4 h-4 text-red-500" />
<Trash2Icon className="size-4 text-red-500" />
<span className="sr-only">Delete document</span>
</motion.button>
) : (
@ -129,21 +129,21 @@ function DeleteButton({
type="button"
onClick={() => setDeleteConfirmOpen(false)}
disabled={deleteMutation.isPending}
className="w-6 h-6 flex items-center justify-center rounded-full transition-opacity hover:opacity-100 focus-visible:ring-2 focus-visible:ring-offset-2 focus:outline-none cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed"
className="size-6 flex items-center justify-center rounded-full transition-opacity hover:opacity-100 focus-visible:ring-2 focus-visible:ring-offset-2 focus:outline-none cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed"
>
<XIcon className="w-4 h-4 text-[#737373]" />
<XIcon className="size-4 text-[#737373]" />
<span className="sr-only">Cancel delete</span>
</button>
<button
type="button"
onClick={handleDelete}
disabled={deleteMutation.isPending}
className="w-6 h-6 flex items-center justify-center rounded-full transition-opacity hover:opacity-100 focus-visible:ring-2 focus-visible:ring-offset-2 focus:outline-none cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed"
className="size-6 flex items-center justify-center rounded-full transition-opacity hover:opacity-100 focus-visible:ring-2 focus-visible:ring-offset-2 focus:outline-none cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed"
>
{deleteMutation.isPending ? (
<Loader2 className="w-4 h-4 text-green-500 animate-spin" />
<Loader2 className="size-4 text-green-500 animate-spin" />
) : (
<CheckIcon className="w-4 h-4 text-green-500" />
<CheckIcon className="size-4 text-green-500" />
)}
<span className="sr-only">Confirm delete</span>
</button>
@ -268,17 +268,17 @@ export function DocumentModal({
rel="noopener noreferrer"
className={cn(
"flex items-center gap-1 bg-[#0D121A] rounded-full shadow-[inset_0_2px_4px_rgba(0,0,0,0.3),inset_0_1px_2px_rgba(0,0,0,0.1)]",
isMobile ? "w-7 h-7 justify-center" : "px-3 py-2",
isMobile ? "size-7 justify-center" : "px-3 py-2",
)}
>
{!isMobile && (
<span className="line-clamp-1">Visit source</span>
)}
<ArrowUpRightIcon className="w-4 h-4 text-[#737373]" />
<ArrowUpRightIcon className="size-4 text-[#737373]" />
</a>
)}
<DialogPrimitive.Close
className="bg-[#0D121A] w-7 h-7 flex items-center justify-center rounded-full transition-opacity hover:opacity-100 focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus:outline-none disabled:pointer-events-none cursor-pointer [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 shadow-[inset_0_2px_4px_rgba(0,0,0,0.3),inset_0_1px_2px_rgba(0,0,0,0.1)]"
className="bg-[#0D121A] size-7 flex items-center justify-center rounded-full transition-opacity hover:opacity-100 focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus:outline-none disabled:pointer-events-none cursor-pointer [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 shadow-[inset_0_2px_4px_rgba(0,0,0,0.3),inset_0_1px_2px_rgba(0,0,0,0.1)]"
data-slot="dialog-close"
type="button"
tabIndex={-1}

View file

@ -12,7 +12,7 @@ function CalendarIcon() {
>
<title>Calendar Icon</title>
<path
d="M1.33333 13.3333C0.966667 13.3333 0.652778 13.2028 0.391667 12.9417C0.130556 12.6806 0 12.3667 0 12V2.66667C0 2.3 0.130556 1.98611 0.391667 1.725C0.652778 1.46389 0.966667 1.33333 1.33333 1.33333H2V0H3.33333V1.33333H8.66667V0H10V1.33333H10.6667C11.0333 1.33333 11.3472 1.46389 11.6083 1.725C11.8694 1.98611 12 2.3 12 2.66667V6H10.6667V5.33333H1.33333V12H6V13.3333H1.33333ZM1.33333 4H10.6667V2.66667H1.33333V4ZM7.33333 13.3333V11.2833L11.0167 7.61667C11.1167 7.51667 11.2278 7.44444 11.35 7.4C11.4722 7.35556 11.5944 7.33333 11.7167 7.33333C11.85 7.33333 11.9778 7.35833 12.1 7.40833C12.2222 7.45833 12.3333 7.53333 12.4333 7.63333L13.05 8.25C13.1389 8.35 13.2083 8.46111 13.2583 8.58333C13.3083 8.70555 13.3333 8.82778 13.3333 8.95C13.3333 9.07222 13.3111 9.19722 13.2667 9.325C13.2222 9.45278 13.15 9.56667 13.05 9.66667L9.38333 13.3333H7.33333ZM8.33333 12.3333H8.96667L10.9833 10.3L10.6833 9.98333L10.3667 9.68333L8.33333 11.7V12.3333ZM10.6833 9.98333L10.3667 9.68333L10.9833 10.3L10.6833 9.98333Z"
d="M1.33 13.33C0.97 13.33 0.65 13.2 0.39 12.94C0.13 12.68 0 12.37 0 12V2.67C0 2.3 0.13 1.99 0.39 1.73C0.65 1.46 0.97 1.33 1.33 1.33H2V0H3.33V1.33H8.67V0H10V1.33H10.67C11.03 1.33 11.35 1.46 11.61 1.73C11.87 1.99 12 2.3 12 2.67V6H10.67V5.33H1.33V12H6V13.33H1.33ZM1.33 4H10.67V2.67H1.33V4ZM7.33 13.33V11.28L11.02 7.62C11.12 7.52 11.23 7.44 11.35 7.4C11.47 7.36 11.59 7.33 11.72 7.33C11.85 7.33 11.98 7.36 12.1 7.41C12.22 7.46 12.33 7.53 12.43 7.63L13.05 8.25C13.14 8.35 13.21 8.46 13.26 8.58C13.31 8.71 13.33 8.83 13.33 8.95C13.33 9.07 13.31 9.2 13.27 9.32C13.22 9.45 13.15 9.57 13.05 9.67L9.38 13.33H7.33ZM8.33 12.33H8.97L10.98 10.3L10.68 9.98L10.37 9.68L8.33 11.7V12.33ZM10.68 9.98L10.37 9.68L10.98 10.3L10.68 9.98Z"
fill="#737373"
/>
</svg>
@ -38,7 +38,7 @@ export function Summary({
Summary
</p>
<div className="flex items-center gap-1 text-[#737373] opacity-50 text-[10px] leading-[150%]">
<SyncLogoIcon className="w-[10px] h-[10px]" />
<SyncLogoIcon className="size-[10px]" />
powered by supermemory
</div>
</div>

View file

@ -30,7 +30,7 @@ export function Title({
)}
>
<div className="pl-1 flex items-center gap-1 shrink-0">
<DocumentIcon type={documentType} url={url} className="w-5 h-5" />
<DocumentIcon type={documentType} url={url} className="size-5" />
{extension && (
<p
className={cn(dmSansClassName(), "text-[12px] font-semibold")}

View file

@ -129,10 +129,11 @@ export function DocumentsCommandPalette({
if (queryData?.pages) {
setCachedDocs(queryData.pages.flatMap((page) => page.documents ?? []))
}
setTimeout(() => inputRef.current?.focus(), 0)
const focusTimer = setTimeout(() => inputRef.current?.focus(), 0)
setSearch(initialSearch)
setSelectedIndex(0)
setSearchResults([])
return () => clearTimeout(focusTimer)
}
}, [open, queryClient, projectId, initialSearch])

View file

@ -117,7 +117,7 @@ export function FeedbackModal({ isOpen, onClose }: FeedbackModalProps) {
<DialogPrimitive.Close
onClick={handleClose}
disabled={isSubmitting}
className="bg-[#0D121A] w-7 h-7 flex items-center justify-center focus:ring-ring rounded-full transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 border border-[rgba(115,115,115,0.2)] shrink-0"
className="bg-[#0D121A] size-7 flex items-center justify-center focus:ring-ring rounded-full transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 border border-[rgba(115,115,115,0.2)] shrink-0"
style={{
boxShadow:
"0 0.711px 2.842px 0 rgba(0, 0, 0, 0.25), 0.178px 0.178px 0.178px 0 rgba(255, 255, 255, 0.10) inset",
@ -133,7 +133,7 @@ export function FeedbackModal({ isOpen, onClose }: FeedbackModalProps) {
value={feedback}
onChange={(e) => setFeedback(e.target.value)}
onKeyDown={handleKeyDown}
placeholder="Share your thoughts..."
placeholder="Share your thoughts"
className={cn(
"min-h-[120px] bg-[#0D121A] border border-[rgba(115,115,115,0.2)] text-[#fafafa] placeholder:text-[#737373] focus-visible:border-[#2261CA] focus-visible:ring-[#2261CA33] resize-none",
dmSansClassName(),
@ -164,7 +164,7 @@ export function FeedbackModal({ isOpen, onClose }: FeedbackModalProps) {
{isSubmitting ? (
<>
<Loader2 className="size-4 animate-spin mr-2" />
Submitting...
Submitting
</>
) : (
"Submit"

View file

@ -198,7 +198,7 @@ export function FullscreenNoteModal({
>
<title>Command Key</title>
<path
d="M6.66663 0.416626C6.33511 0.416626 6.01716 0.548322 5.78274 0.782743C5.54832 1.01716 5.41663 1.33511 5.41663 1.66663V6.66663C5.41663 6.99815 5.54832 7.31609 5.78274 7.55051C6.01716 7.78493 6.33511 7.91663 6.66663 7.91663C6.99815 7.91663 7.31609 7.78493 7.55051 7.55051C7.78493 7.31609 7.91663 6.99815 7.91663 6.66663C7.91663 6.33511 7.78493 6.01716 7.55051 5.78274C7.31609 5.54832 6.99815 5.41663 6.66663 5.41663H1.66663C1.33511 5.41663 1.01716 5.54832 0.782743 5.78274C0.548322 6.01716 0.416626 6.33511 0.416626 6.66663C0.416626 6.99815 0.548322 7.31609 0.782743 7.55051C1.01716 7.78493 1.33511 7.91663 1.66663 7.91663C1.99815 7.91663 2.31609 7.78493 2.55051 7.55051C2.78493 7.31609 2.91663 6.99815 2.91663 6.66663V1.66663C2.91663 1.33511 2.78493 1.01716 2.55051 0.782743C2.31609 0.548322 1.99815 0.416626 1.66663 0.416626C1.33511 0.416626 1.01716 0.548322 0.782743 0.782743C0.548322 1.01716 0.416626 1.33511 0.416626 1.66663C0.416626 1.99815 0.548322 2.31609 0.782743 2.55051C1.01716 2.78493 1.33511 2.91663 1.66663 2.91663H6.66663C6.99815 2.91663 7.31609 2.78493 7.55051 2.55051C7.78493 2.31609 7.91663 1.99815 7.91663 1.66663C7.91663 1.33511 7.78493 1.01716 7.55051 0.782743C7.31609 0.548322 6.99815 0.416626 6.66663 0.416626Z"
d="M6.67 0.42C6.34 0.42 6.02 0.55 5.78 0.78C5.55 1.02 5.42 1.34 5.42 1.67V6.67C5.42 7 5.55 7.32 5.78 7.55C6.02 7.78 6.34 7.92 6.67 7.92C7 7.92 7.32 7.78 7.55 7.55C7.78 7.32 7.92 7 7.92 6.67C7.92 6.34 7.78 6.02 7.55 5.78C7.32 5.55 7 5.42 6.67 5.42H1.67C1.34 5.42 1.02 5.55 0.78 5.78C0.55 6.02 0.42 6.34 0.42 6.67C0.42 7 0.55 7.32 0.78 7.55C1.02 7.78 1.34 7.92 1.67 7.92C2 7.92 2.32 7.78 2.55 7.55C2.78 7.32 2.92 7 2.92 6.67V1.67C2.92 1.34 2.78 1.02 2.55 0.78C2.32 0.55 2 0.42 1.67 0.42C1.34 0.42 1.02 0.55 0.78 0.78C0.55 1.02 0.42 1.34 0.42 1.67C0.42 2 0.55 2.32 0.78 2.55C1.02 2.78 1.34 2.92 1.67 2.92H6.67C7 2.92 7.32 2.78 7.55 2.55C7.78 2.32 7.92 2 7.92 1.67C7.92 1.34 7.78 1.02 7.55 0.78C7.32 0.55 7 0.42 6.67 0.42Z"
stroke="#737373"
strokeWidth="0.833333"
strokeLinecap="round"

View file

@ -101,7 +101,7 @@ export function Header({ onAddMemory, onOpenSearch }: HeaderProps) {
className="px-3 py-2.5 rounded-md hover:bg-[#293952]/40 cursor-pointer text-white text-sm font-medium gap-2"
>
<Link href="/">
<Home className="h-4 w-4 text-[#737373]" />
<Home className="size-4 text-[#737373]" />
Home
</Link>
</DropdownMenuItem>
@ -114,7 +114,7 @@ export function Header({ onAddMemory, onOpenSearch }: HeaderProps) {
target="_blank"
rel="noreferrer"
>
<Code2 className="h-4 w-4 text-[#737373]" />
<Code2 className="size-4 text-[#737373]" />
Developer console
</a>
</DropdownMenuItem>
@ -123,7 +123,7 @@ export function Header({ onAddMemory, onOpenSearch }: HeaderProps) {
className="px-3 py-2.5 rounded-md hover:bg-[#293952]/40 cursor-pointer text-white text-sm font-medium gap-2"
>
<a href="https://supermemory.ai" target="_blank" rel="noreferrer">
<ExternalLink className="h-4 w-4 text-[#737373]" />
<ExternalLink className="size-4 text-[#737373]" />
supermemory.ai
</a>
</DropdownMenuItem>
@ -148,7 +148,7 @@ export function Header({ onAddMemory, onOpenSearch }: HeaderProps) {
aria-current={viewMode === "dashboard" ? "page" : undefined}
onClick={() => void setViewMode("dashboard")}
className={cn(
"flex h-10 w-10 shrink-0 cursor-pointer items-center justify-center rounded-full border transition-colors",
"flex size-10 shrink-0 cursor-pointer items-center justify-center rounded-full border transition-colors",
viewMode === "dashboard"
? "border-[#2261CA33] bg-[#00173C] text-white"
: "border-[#161F2C] bg-muted text-muted-foreground hover:bg-white/5",
@ -236,7 +236,7 @@ export function Header({ onAddMemory, onOpenSearch }: HeaderProps) {
aria-current={viewMode === "chat" ? "page" : undefined}
onClick={() => void setViewMode("chat")}
className={cn(
"flex h-10 w-10 shrink-0 cursor-pointer items-center justify-center rounded-full border transition-colors",
"flex size-10 shrink-0 cursor-pointer items-center justify-center rounded-full border transition-colors",
viewMode === "chat"
? "border-[#2261CA33] bg-[#00173C] text-white"
: "border-[#161F2C] bg-muted text-muted-foreground hover:bg-white/5",
@ -286,49 +286,49 @@ export function Header({ onAddMemory, onOpenSearch }: HeaderProps) {
onClick={onAddMemory}
className="px-3 py-2.5 rounded-md hover:bg-[#293952]/40 cursor-pointer text-white text-sm font-medium gap-2"
>
<Plus className="h-4 w-4 text-[#737373]" />
<Plus className="size-4 text-[#737373]" />
Add memory
</DropdownMenuItem>
<DropdownMenuItem
onClick={() => void setViewMode("dashboard")}
className="px-3 py-2.5 rounded-md hover:bg-[#293952]/40 cursor-pointer text-white text-sm font-medium gap-2"
>
<Home className="h-4 w-4 text-[#737373]" />
<Home className="size-4 text-[#737373]" />
Home
</DropdownMenuItem>
<DropdownMenuItem
onClick={() => setViewMode("integrations")}
className="px-3 py-2.5 rounded-md hover:bg-[#293952]/40 cursor-pointer text-white text-sm font-medium gap-2"
>
<Sun className="h-4 w-4 text-[#737373]" />
<Sun className="size-4 text-[#737373]" />
Integrations
</DropdownMenuItem>
<DropdownMenuItem
onClick={() => void setViewMode("graph")}
className="px-3 py-2.5 rounded-md hover:bg-[#293952]/40 cursor-pointer text-white text-sm font-medium gap-2"
>
<GraphIcon className="h-4 w-4 text-[#737373]" />
<GraphIcon className="size-4 text-[#737373]" />
Graph
</DropdownMenuItem>
<DropdownMenuItem
onClick={() => onOpenSearch?.()}
className="px-3 py-2.5 rounded-md hover:bg-[#293952]/40 cursor-pointer text-white text-sm font-medium gap-2"
>
<SearchIcon className="h-4 w-4 text-[#737373]" />
<SearchIcon className="size-4 text-[#737373]" />
Search
</DropdownMenuItem>
<DropdownMenuItem
onClick={() => void setViewMode("list")}
className="px-3 py-2.5 rounded-md hover:bg-[#293952]/40 cursor-pointer text-white text-sm font-medium gap-2"
>
<LayoutGrid className="h-4 w-4 text-[#737373]" />
<LayoutGrid className="size-4 text-[#737373]" />
Memories
</DropdownMenuItem>
<DropdownMenuItem
onClick={() => void setViewMode("chat")}
className="px-3 py-2.5 rounded-md hover:bg-[#293952]/40 cursor-pointer text-white text-sm font-medium gap-2"
>
<MessageCircleIcon className="h-4 w-4 text-[#737373]" />
<MessageCircleIcon className="size-4 text-[#737373]" />
Chat with Nova
</DropdownMenuItem>
<DropdownMenuSeparator className="bg-[#2E3033]" />
@ -336,14 +336,14 @@ export function Header({ onAddMemory, onOpenSearch }: HeaderProps) {
onClick={handleFeedback}
className="px-3 py-2.5 rounded-md hover:bg-[#293952]/40 cursor-pointer text-white text-sm font-medium gap-2"
>
<LifeBuoy className="h-4 w-4 text-[#737373]" />
<LifeBuoy className="size-4 text-[#737373]" />
Feedback
</DropdownMenuItem>
<DropdownMenuItem
onClick={() => router.push("/settings")}
className="px-3 py-2.5 rounded-md hover:bg-[#293952]/40 cursor-pointer text-white text-sm font-medium gap-2"
>
<Settings className="h-4 w-4 text-[#737373]" />
<Settings className="size-4 text-[#737373]" />
Settings
</DropdownMenuItem>
</DropdownMenuContent>

View file

@ -13,28 +13,28 @@ export function IntegrationsIcon({ className }: { className?: string }) {
>
<title>Integrations</title>
<path
d="M15.6654 18.0026C16.954 18.0026 17.9987 16.9579 17.9987 15.6693C17.9987 14.3806 16.954 13.3359 15.6654 13.3359C14.3767 13.3359 13.332 14.3806 13.332 15.6693C13.332 16.9579 14.3767 18.0026 15.6654 18.0026Z"
d="M15.67 18C16.95 18 18 16.96 18 15.67C18 14.38 16.95 13.34 15.67 13.34C14.38 13.34 13.33 14.38 13.33 15.67C13.33 16.96 14.38 18 15.67 18Z"
stroke="currentColor"
strokeWidth="1.55556"
strokeLinecap="round"
strokeLinejoin="round"
/>
<path
d="M6.33333 8.66667C7.622 8.66667 8.66667 7.622 8.66667 6.33333C8.66667 5.04467 7.622 4 6.33333 4C5.04467 4 4 5.04467 4 6.33333C4 7.622 5.04467 8.66667 6.33333 8.66667Z"
d="M6.33 8.67C7.62 8.67 8.67 7.62 8.67 6.33C8.67 5.04 7.62 4 6.33 4C5.04 4 4 5.04 4 6.33C4 7.62 5.04 8.67 6.33 8.67Z"
stroke="currentColor"
strokeWidth="1.55556"
strokeLinecap="round"
strokeLinejoin="round"
/>
<path
d="M11.7773 6.33594H14.1107C14.5232 6.33594 14.9189 6.49983 15.2106 6.79155C15.5023 7.08327 15.6662 7.47893 15.6662 7.89149V13.3359"
d="M11.78 6.34H14.11C14.52 6.34 14.92 6.5 15.21 6.79C15.5 7.08 15.67 7.48 15.67 7.89V13.34"
stroke="currentColor"
strokeWidth="1.55556"
strokeLinecap="round"
strokeLinejoin="round"
/>
<path
d="M6.33203 8.66406V17.9974"
d="M6.33 8.66V18"
stroke="currentColor"
strokeWidth="1.55556"
strokeLinecap="round"
@ -55,23 +55,23 @@ export function ChromeIcon({ className }: { className?: string }) {
<title>Google Chrome Icon</title>
<path
fill="#fff"
d="M95.252 142.873c26.304 0 47.627-21.324 47.627-47.628s-21.323-47.628-47.627-47.628-47.627 21.324-47.627 47.628 21.323 47.628 47.627 47.628z"
d="M95.25 142.87c26.3 0 47.63-21.32 47.63-47.63s-21.32-47.63-47.63-47.63-47.63 21.32-47.63 47.63 21.32 47.63 47.63 47.63z"
/>
<path
fill="#229342"
d="m54.005 119.07-41.24-71.43a95.227 95.227 0 0 0-.003 95.25 95.234 95.234 0 0 0 82.496 47.61l41.24-71.43v-.011a47.613 47.613 0 0 1-17.428 17.443 47.62 47.62 0 0 1-47.632.007 47.62 47.62 0 0 1-17.433-17.437z"
d="m54.01 119.07-41.24-71.43a95.23 95.23 0 0 0-.003 95.25 95.23 95.23 0 0 0 82.5 47.61l41.24-71.43v-.011a47.61 47.61 0 0 1-17.43 17.44 47.62 47.62 0 0 1-47.63.007 47.62 47.62 0 0 1-17.43-17.44z"
/>
<path
fill="#fbc116"
d="m136.495 119.067-41.239 71.43a95.229 95.229 0 0 0 82.489-47.622A95.24 95.24 0 0 0 190.5 95.248a95.237 95.237 0 0 0-12.772-47.623H95.249l-.01.007a47.62 47.62 0 0 1 23.819 6.372 47.618 47.618 0 0 1 17.439 17.431 47.62 47.62 0 0 1-.001 47.633z"
d="m136.5 119.07-41.24 71.43a95.23 95.23 0 0 0 82.49-47.62A95.24 95.24 0 0 0 190.5 95.25a95.24 95.24 0 0 0-12.77-47.62H95.25l-.1.01a47.62 47.62 0 0 1 23.82 6.37 47.62 47.62 0 0 1 17.44 17.43 47.62 47.62 0 0 1-.001 47.63z"
/>
<path
fill="#1a73e8"
d="M95.252 132.961c20.824 0 37.705-16.881 37.705-37.706S116.076 57.55 95.252 57.55 57.547 74.431 57.547 95.255s16.881 37.706 37.705 37.706z"
d="M95.25 132.96c20.82 0 37.7-16.88 37.7-37.71S116.08 57.55 95.25 57.55 57.55 74.43 57.55 95.25s16.88 37.71 37.7 37.71z"
/>
<path
fill="#e33b2e"
d="M95.252 47.628h82.479A95.237 95.237 0 0 0 142.87 12.76 95.23 95.23 0 0 0 95.245 0a95.222 95.222 0 0 0-47.623 12.767 95.23 95.23 0 0 0-34.856 34.872l41.24 71.43.011.006a47.62 47.62 0 0 1-.015-47.633 47.61 47.61 0 0 1 41.252-23.815z"
d="M95.25 47.63h82.48A95.24 95.24 0 0 0 142.87 12.76 95.23 95.23 0 0 0 95.25 0a95.22 95.22 0 0 0-47.62 12.77 95.23 95.23 0 0 0-34.86 34.87l41.24 71.43.01.006a47.62 47.62 0 0 1-.015-47.63 47.61 47.61 0 0 1 41.25-23.82z"
/>
</svg>
)
@ -105,7 +105,7 @@ export function RaycastIcon({ className }: { className?: string }) {
<path
fillRule="evenodd"
clipRule="evenodd"
d="M7 18.079V21L0 14L1.46 12.54L7 18.081V18.079ZM9.921 21H7L14 28L15.46 26.54L9.921 21ZM26.535 15.462L27.996 14L13.996 0L12.538 1.466L18.077 7.004H14.73L10.864 3.146L9.404 4.606L11.809 7.01H10.129V17.876H20.994V16.196L23.399 18.6L24.859 17.14L20.994 13.274V9.927L26.535 15.462ZM7.73 6.276L6.265 7.738L7.833 9.304L9.294 7.844L7.73 6.276ZM20.162 18.708L18.702 20.17L20.268 21.738L21.73 20.276L20.162 18.708ZM4.596 9.41L3.134 10.872L7 14.738V11.815L4.596 9.41ZM16.192 21.006H13.268L17.134 24.872L18.596 23.41L16.192 21.006Z"
d="M7 18.08V21L0 14L1.46 12.54L7 18.08V18.08ZM9.92 21H7L14 28L15.46 26.54L9.92 21ZM26.54 15.46L28 14L14 0L12.54 1.47L18.08 7H14.73L10.86 3.15L9.4 4.61L11.81 7.01H10.13V17.88H20.99V16.2L23.4 18.6L24.86 17.14L20.99 13.27V9.93L26.54 15.46ZM7.73 6.28L6.26 7.74L7.83 9.3L9.29 7.84L7.73 6.28ZM20.16 18.71L18.7 20.17L20.27 21.74L21.73 20.28L20.16 18.71ZM4.6 9.41L3.13 10.87L7 14.74V11.81L4.6 9.41ZM16.19 21.01H13.27L17.13 24.87L18.6 23.41L16.19 21.01Z"
fill="#FF6363"
/>
</svg>

View file

@ -47,7 +47,7 @@ export function ChromeDetail() {
>
<div className="flex flex-col gap-6">
<div className="flex items-center gap-4">
<ChromeIcon className="shrink-0 w-10 h-10" />
<ChromeIcon className="shrink-0 size-10" />
<div className="flex flex-col gap-1">
<p
className={cn(

View file

@ -154,7 +154,7 @@ function ConnectedPluginRow({
>
<div className="flex items-center gap-3">
{info && (
<div className="flex h-10 w-10 items-center justify-center rounded-lg border border-[#1E293B] bg-[#080B0F]">
<div className="flex size-10 items-center justify-center rounded-lg border border-[#1E293B] bg-[#080B0F]">
<Image
alt={info.name}
className="size-6"
@ -187,7 +187,7 @@ function ConnectedPluginRow({
"text-[12px] text-[#737373] font-mono",
)}
>
{plugin.keyStart}...
{plugin.keyStart}
</span>
)}
</div>
@ -237,7 +237,7 @@ function PluginCard({
<div className="flex items-start gap-3">
<div
className={cn(
"flex h-10 w-10 shrink-0 items-center justify-center rounded-lg border border-[#1E293B] bg-[#080B0F]",
"flex size-10 shrink-0 items-center justify-center rounded-lg border border-[#1E293B] bg-[#080B0F]",
needsProUpgrade && "opacity-50",
)}
>
@ -335,7 +335,7 @@ function PluginCard({
>
{isCurrentlyConnecting ? (
<>
<Loader className="size-3.5 animate-spin" /> Connecting...
<Loader className="size-3.5 animate-spin" /> Connecting
</>
) : (
"Connect Plugin"
@ -614,7 +614,7 @@ export function PluginsDetail() {
</DialogHeader>
<div className="space-y-4">
<p className={cn(dmSans125ClassName(), "text-sm text-[#737373]")}>
Save your API key now you won't be able to see it again.
Save your API key now: you won't be able to see it again.
</p>
<div className="flex items-center gap-2">
<input
@ -632,9 +632,9 @@ export function PluginsDetail() {
className="p-2 rounded-lg bg-[#0D121A] border border-white/10 text-[#737373] hover:text-[#FAFAFA] transition-colors"
>
{keyCopied ? (
<Check className="h-4 w-4 text-[#4BA0FA]" />
<Check className="size-4 text-[#4BA0FA]" />
) : (
<Copy className="h-4 w-4" />
<Copy className="size-4" />
)}
</button>
</div>

View file

@ -99,7 +99,7 @@ export function RaycastDetail() {
>
<div className="flex flex-col gap-6">
<div className="flex items-center gap-4">
<RaycastIcon className="shrink-0 w-10 h-10" />
<RaycastIcon className="shrink-0 size-10" />
<div className="flex flex-col gap-1">
<p
className={cn(
@ -196,9 +196,9 @@ export function RaycastDetail() {
className="p-2 rounded-lg bg-[#0D121A] border border-white/10 text-[#737373] hover:text-[#FAFAFA] transition-colors"
>
{copied ? (
<Check className="h-4 w-4 text-[#4BA0FA]" />
<Check className="size-4 text-[#4BA0FA]" />
) : (
<Copy className="h-4 w-4" />
<Copy className="size-4" />
)}
</button>
</div>
@ -219,7 +219,7 @@ export function RaycastDetail() {
'Use "Add Memory" or "Search Memories" commands!',
].map((text, i) => (
<div key={text} className="flex items-start gap-3">
<div className="shrink-0 w-6 h-6 bg-[#FF6363]/20 text-[#FF6363] rounded-full flex items-center justify-center text-xs font-medium">
<div className="shrink-0 size-6 bg-[#FF6363]/20 text-[#FF6363] rounded-full flex items-center justify-center text-xs font-medium">
{i + 1}
</div>
<p

View file

@ -229,9 +229,9 @@ export function ShortcutsDetail() {
className="p-2 rounded-lg bg-[#0D121A] border border-white/10 text-[#737373] hover:text-[#FAFAFA] transition-colors"
>
{copied ? (
<Check className="h-4 w-4 text-[#4BA0FA]" />
<Check className="size-4 text-[#4BA0FA]" />
) : (
<Copy className="h-4 w-4" />
<Copy className="size-4" />
)}
</button>
</div>
@ -252,7 +252,7 @@ export function ShortcutsDetail() {
"Start using your shortcut!",
].map((text, i) => (
<div key={text} className="flex items-start gap-3">
<div className="shrink-0 w-6 h-6 bg-[#4BA0FA]/20 text-[#4BA0FA] rounded-full flex items-center justify-center text-xs font-medium">
<div className="shrink-0 size-6 bg-[#4BA0FA]/20 text-[#4BA0FA] rounded-full flex items-center justify-center text-xs font-medium">
{i + 1}
</div>
<p

View file

@ -168,7 +168,7 @@ export function ClaudeDesktopManualTimeline({
</code>
</pre>
<Button
className="absolute top-2 right-2 h-8 w-8 cursor-pointer p-0 bg-muted/80 hover:bg-muted"
className="absolute top-2 right-2 size-8 cursor-pointer p-0 bg-muted/80 hover:bg-muted"
onClick={onCopySnippet}
size="icon"
type="button"

View file

@ -594,7 +594,7 @@ export function MemoriesGrid({
)}
onClick={() => handleSetViewMode("grid")}
>
<LayoutGrid className="w-3.5 h-3.5" />
<LayoutGrid className="size-3.5" />
Grid
</button>
<button
@ -609,7 +609,7 @@ export function MemoriesGrid({
)}
onClick={() => handleSetViewMode("timeline")}
>
<AlignLeft className="w-3.5 h-3.5" />
<AlignLeft className="size-3.5" />
Timeline
</button>
</div>
@ -618,10 +618,10 @@ export function MemoriesGrid({
type="button"
aria-label="Select documents"
title="Select documents"
className="w-8 h-8 flex items-center justify-center rounded-full border border-[#161F2C] bg-[#0D121A] hover:bg-[#00173C] hover:border-[#2261CA33] transition-colors cursor-pointer"
className="size-8 flex items-center justify-center rounded-full border border-[#161F2C] bg-[#0D121A] hover:bg-[#00173C] hover:border-[#2261CA33] transition-colors cursor-pointer"
onClick={onEnterSelectionMode}
>
<BoxSelect className="w-4 h-4 text-[#737373]" />
<BoxSelect className="size-4 text-[#737373]" />
</button>
)}
</div>
@ -675,7 +675,7 @@ export function MemoriesGrid({
onClick={handleBulkDeleteClick}
disabled={selectedDocumentIds.size === 0 || isBulkDeleting}
>
<Trash2Icon className="w-3 h-3" />
<Trash2Icon className="size-3" />
<span>Delete</span>
{selectedDocumentIds.size > 0 && (
<span className="text-red-400/70">
@ -690,7 +690,7 @@ export function MemoriesGrid({
className="flex items-center gap-1 text-xs px-3 h-7 rounded-full text-[#737373] hover:text-white hover:bg-white/5 transition-colors cursor-pointer"
onClick={onClearSelection}
>
<XIcon className="w-3 h-3" />
<XIcon className="size-3" />
<span>Done</span>
</button>
</div>
@ -866,9 +866,9 @@ function ProcessingBadge() {
return (
<div className="flex items-center gap-1">
<span className="relative flex h-1.5 w-1.5 shrink-0">
<span className="animate-ping absolute inline-flex h-full w-full rounded-full bg-sky-400 opacity-75" />
<span className="relative inline-flex rounded-full h-1.5 w-1.5 bg-sky-400" />
<span className="relative flex size-1.5 shrink-0">
<span className="animate-ping absolute inline-flex size-full rounded-full bg-sky-400 opacity-75" />
<span className="relative inline-flex rounded-full size-1.5 bg-sky-400" />
</span>
<span
className={cn(
@ -886,7 +886,7 @@ function DoneBadge() {
return (
<div className="flex items-center gap-1">
<CheckIcon
className="w-2.5 h-2.5 text-emerald-400 shrink-0"
className="size-2.5 text-emerald-400 shrink-0"
strokeWidth={3}
/>
<span
@ -1019,11 +1019,11 @@ const DocumentCard = memo(
}}
>
{isSelected ? (
<div className="w-3 h-3 rounded-[2.25px] border border-[#369BFD] bg-[#369BFD] flex items-center justify-center">
<CheckIcon className="w-2 h-2 text-white" strokeWidth={3} />
<div className="size-3 rounded-[2.25px] border border-[#369BFD] bg-[#369BFD] flex items-center justify-center">
<CheckIcon className="size-2 text-white" strokeWidth={3} />
</div>
) : (
<div className="w-3 h-3 rounded-[2.25px] border border-[#737373]" />
<div className="size-3 rounded-[2.25px] border border-[#737373]" />
)}
</button>
)}
@ -1080,7 +1080,7 @@ const DocumentCard = memo(
<img
src={getFaviconUrl(document.url) || ""}
alt=""
className="w-4 h-4 shrink-0 rounded-lg"
className="size-4 shrink-0 rounded-lg"
onError={(e) => {
e.currentTarget.style.display = "none"
}}

View file

@ -157,7 +157,7 @@ export const GraphCard = memo<GraphCardProps>(
<div className="flex-1 w-full relative overflow-hidden rounded-lg">
{isLoading ? (
<div className="absolute inset-0 flex items-center justify-center">
<div className="w-6 h-6 border-2 border-blue-400/30 border-t-blue-400 rounded-full animate-spin" />
<div className="size-6 border-2 border-blue-400/30 border-t-blue-400 rounded-full animate-spin" />
</div>
) : documentCount > 0 || memoryCount > 0 ? (
<StaticGraphPreview
@ -175,7 +175,7 @@ export const GraphCard = memo<GraphCardProps>(
)}
<div className="absolute inset-0 flex items-center justify-center bg-black/0 group-hover:bg-black/30 transition-colors">
<Expand className="w-5 h-5 text-white opacity-0 group-hover:opacity-100 transition-opacity" />
<Expand className="size-5 text-white opacity-0 group-hover:opacity-100 transition-opacity" />
</div>
</div>

View file

@ -59,7 +59,7 @@ export function MemoryGraph({
})
return (
<div ref={containerRef} className="w-full h-full [&>div]:!bg-none">
<div ref={containerRef} className="size-full [&>div]:!bg-none">
<MemoryGraphBase
documents={documents}
isLoading={externalIsLoading || apiIsLoading}

View file

@ -200,7 +200,7 @@ export function NextAppResearchCta() {
"mt-1 text-[12px] text-[#737373] tracking-[-0.12px]",
)}
>
Share what you want nextwed love a quick call.
Share what you want next. Wed love a quick call.
</p>
<div className="mt-2.5 flex justify-end">
<a

View file

@ -135,7 +135,7 @@ export function QuickNoteCard({
>
<title>Command Key</title>
<path
d="M6.66663 0.416626C6.33511 0.416626 6.01716 0.548322 5.78274 0.782743C5.54832 1.01716 5.41663 1.33511 5.41663 1.66663V6.66663C5.41663 6.99815 5.54832 7.31609 5.78274 7.55051C6.01716 7.78493 6.33511 7.91663 6.66663 7.91663C6.99815 7.91663 7.31609 7.78493 7.55051 7.55051C7.78493 7.31609 7.91663 6.99815 7.91663 6.66663C7.91663 6.33511 7.78493 6.01716 7.55051 5.78274C7.31609 5.54832 6.99815 5.41663 6.66663 5.41663H1.66663C1.33511 5.41663 1.01716 5.54832 0.782743 5.78274C0.548322 6.01716 0.416626 6.33511 0.416626 6.66663C0.416626 6.99815 0.548322 7.31609 0.782743 7.55051C1.01716 7.78493 1.33511 7.91663 1.66663 7.91663C1.99815 7.91663 2.31609 7.78493 2.55051 7.55051C2.78493 7.31609 2.91663 6.99815 2.91663 6.66663V1.66663C2.91663 1.33511 2.78493 1.01716 2.55051 0.782743C2.31609 0.548322 1.99815 0.416626 1.66663 0.416626C1.33511 0.416626 1.01716 0.548322 0.782743 0.782743C0.548322 1.01716 0.416626 1.33511 0.416626 1.66663C0.416626 1.99815 0.548322 2.31609 0.782743 2.55051C1.01716 2.78493 1.33511 2.91663 1.66663 2.91663H6.66663C6.99815 2.91663 7.31609 2.78493 7.55051 2.55051C7.78493 2.31609 7.91663 1.99815 7.91663 1.66663C7.91663 1.33511 7.78493 1.01716 7.55051 0.782743C7.31609 0.548322 6.99815 0.416626 6.66663 0.416626Z"
d="M6.67 0.42C6.34 0.42 6.02 0.55 5.78 0.78C5.55 1.02 5.42 1.34 5.42 1.67V6.67C5.42 7 5.55 7.32 5.78 7.55C6.02 7.78 6.34 7.92 6.67 7.92C7 7.92 7.32 7.78 7.55 7.55C7.78 7.32 7.92 7 7.92 6.67C7.92 6.34 7.78 6.02 7.55 5.78C7.32 5.55 7 5.42 6.67 5.42H1.67C1.34 5.42 1.02 5.55 0.78 5.78C0.55 6.02 0.42 6.34 0.42 6.67C0.42 7 0.55 7.32 0.78 7.55C1.02 7.78 1.34 7.92 1.67 7.92C2 7.92 2.32 7.78 2.55 7.55C2.78 7.32 2.92 7 2.92 6.67V1.67C2.92 1.34 2.78 1.02 2.55 0.78C2.32 0.55 2 0.42 1.67 0.42C1.34 0.42 1.02 0.55 0.78 0.78C0.55 1.02 0.42 1.34 0.42 1.67C0.42 2 0.55 2.32 0.78 2.55C1.02 2.78 1.34 2.92 1.67 2.92H6.67C7 2.92 7.32 2.78 7.55 2.55C7.78 2.32 7.92 2 7.92 1.67C7.92 1.34 7.78 1.02 7.55 0.78C7.32 0.55 7 0.42 6.67 0.42Z"
stroke="#737373"
strokeWidth="0.833333"
strokeLinecap="round"

View file

@ -87,7 +87,7 @@ export function RemoveConnectionDialog({
</DialogTitle>
<DialogPrimitive.Close
disabled={isDeleting}
className="bg-[#0D121A] w-7 h-7 flex items-center justify-center focus:ring-ring rounded-full transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 border border-[rgba(115,115,115,0.2)] shrink-0"
className="bg-[#0D121A] size-7 flex items-center justify-center focus:ring-ring rounded-full transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 border border-[rgba(115,115,115,0.2)] shrink-0"
style={{
boxShadow: "inset 1.313px 1.313px 3.938px 0px rgba(0,0,0,0.7)",
}}
@ -152,7 +152,7 @@ export function RemoveConnectionDialog({
{isDeleting ? (
<>
<Loader2 className="size-4 animate-spin" />
Disconnecting...
Disconnecting
</>
) : alsoDelete ? (
`Disconnect and delete ${memoryNoun}`

View file

@ -132,7 +132,7 @@ export function SelectSpacesModal({
</p>
</div>
<DialogPrimitive.Close
className="bg-[#0D121A] w-7 h-7 flex items-center justify-center focus:ring-ring rounded-full transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 border border-[rgba(115,115,115,0.2)] shrink-0"
className="bg-[#0D121A] size-7 flex items-center justify-center focus:ring-ring rounded-full transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 border border-[rgba(115,115,115,0.2)] shrink-0"
style={{
boxShadow: "inset 1.313px 1.313px 3.938px 0px rgba(0,0,0,0.7)",
}}
@ -184,18 +184,18 @@ export function SelectSpacesModal({
{singleSelect ? (
<div
className={cn(
"w-5 h-5 rounded-full border-2 flex items-center justify-center shrink-0 transition-colors",
"size-5 rounded-full border-2 flex items-center justify-center shrink-0 transition-colors",
isSelected ? "border-blue-500" : "border-[#737373]",
)}
>
{isSelected && (
<div className="w-2.5 h-2.5 rounded-full bg-blue-500" />
<div className="size-2.5 rounded-full bg-blue-500" />
)}
</div>
) : (
<div
className={cn(
"w-5 h-5 rounded-md border-2 flex items-center justify-center shrink-0 transition-colors",
"size-5 rounded-md border-2 flex items-center justify-center shrink-0 transition-colors",
isSelected
? "bg-blue-500 border-blue-500"
: "border-[#737373]",

View file

@ -618,7 +618,7 @@ export default function Account() {
{isUpgrading || isCheckingStatus || autumn.isLoading ? (
<>
<LoaderIcon className="size-4 animate-spin mr-2" />
Upgrading...
Upgrading
</>
) : (
"Upgrade to Pro - $19/month"

View file

@ -273,7 +273,7 @@ export default function Integrations() {
<IntegrationCard id="chrome-extension-card">
<div className="flex flex-col gap-6">
<div id="chrome-extension-header" className="flex items-center gap-4">
<ChromeIcon className="shrink-0 w-10 h-10" />
<ChromeIcon className="shrink-0 size-10" />
<div className="flex flex-col gap-1.5">
<p
className={cn(
@ -384,7 +384,7 @@ export default function Integrations() {
id="raycast-extension-header"
className="flex items-center gap-4"
>
<RaycastIcon className="shrink-0 w-10 h-10" />
<RaycastIcon className="shrink-0 size-10" />
<div className="flex flex-col gap-1.5">
<p
className={cn(
@ -476,9 +476,9 @@ export default function Integrations() {
className="p-2 rounded-lg bg-[#0D121A] border border-white/10 text-[#737373] hover:text-[#FAFAFA] transition-colors"
>
{copied ? (
<Check className="h-4 w-4 text-[#4BA0FA]" />
<Check className="size-4 text-[#4BA0FA]" />
) : (
<Copy className="h-4 w-4" />
<Copy className="size-4" />
)}
</button>
</div>
@ -495,7 +495,7 @@ export default function Integrations() {
</h4>
<div className="space-y-2">
<div className="flex items-start gap-3">
<div className="shrink-0 w-6 h-6 bg-[#4BA0FA]/20 text-[#4BA0FA] rounded-full flex items-center justify-center text-xs font-medium">
<div className="shrink-0 size-6 bg-[#4BA0FA]/20 text-[#4BA0FA] rounded-full flex items-center justify-center text-xs font-medium">
1
</div>
<p
@ -508,7 +508,7 @@ export default function Integrations() {
</p>
</div>
<div className="flex items-start gap-3">
<div className="shrink-0 w-6 h-6 bg-[#4BA0FA]/20 text-[#4BA0FA] rounded-full flex items-center justify-center text-xs font-medium">
<div className="shrink-0 size-6 bg-[#4BA0FA]/20 text-[#4BA0FA] rounded-full flex items-center justify-center text-xs font-medium">
2
</div>
<p
@ -521,7 +521,7 @@ export default function Integrations() {
</p>
</div>
<div className="flex items-start gap-3">
<div className="shrink-0 w-6 h-6 bg-[#4BA0FA]/20 text-[#4BA0FA] rounded-full flex items-center justify-center text-xs font-medium">
<div className="shrink-0 size-6 bg-[#4BA0FA]/20 text-[#4BA0FA] rounded-full flex items-center justify-center text-xs font-medium">
3
</div>
<p
@ -612,9 +612,9 @@ export default function Integrations() {
className="p-2 rounded-lg bg-[#0D121A] border border-white/10 text-[#737373] hover:text-[#FAFAFA] transition-colors"
>
{raycastCopied ? (
<Check className="h-4 w-4 text-[#4BA0FA]" />
<Check className="size-4 text-[#4BA0FA]" />
) : (
<Copy className="h-4 w-4" />
<Copy className="size-4" />
)}
</button>
</div>
@ -631,7 +631,7 @@ export default function Integrations() {
</h4>
<div className="space-y-2">
<div className="flex items-start gap-3">
<div className="shrink-0 w-6 h-6 bg-[#FF6363]/20 text-[#FF6363] rounded-full flex items-center justify-center text-xs font-medium">
<div className="shrink-0 size-6 bg-[#FF6363]/20 text-[#FF6363] rounded-full flex items-center justify-center text-xs font-medium">
1
</div>
<p
@ -644,7 +644,7 @@ export default function Integrations() {
</p>
</div>
<div className="flex items-start gap-3">
<div className="shrink-0 w-6 h-6 bg-[#FF6363]/20 text-[#FF6363] rounded-full flex items-center justify-center text-xs font-medium">
<div className="shrink-0 size-6 bg-[#FF6363]/20 text-[#FF6363] rounded-full flex items-center justify-center text-xs font-medium">
2
</div>
<p
@ -657,7 +657,7 @@ export default function Integrations() {
</p>
</div>
<div className="flex items-start gap-3">
<div className="shrink-0 w-6 h-6 bg-[#FF6363]/20 text-[#FF6363] rounded-full flex items-center justify-center text-xs font-medium">
<div className="shrink-0 size-6 bg-[#FF6363]/20 text-[#FF6363] rounded-full flex items-center justify-center text-xs font-medium">
3
</div>
<p

View file

@ -36,7 +36,7 @@ const XIcon2 = ({ className }: { className?: string }) => (
aria-hidden="true"
>
<path
d="M12.6 0.75H15.054L9.694 6.89L16 15.25H11.063L7.196 10.176L2.771 15.25H0.316L6.05 8.682L0 0.75H5.063L8.558 5.391L12.6 0.75ZM11.74 13.77H13.1L4.324 2.145H2.865L11.74 13.77Z"
d="M12.6 0.75H15.05L9.69 6.89L16 15.25H11.06L7.2 10.18L2.77 15.25H0.32L6.05 8.68L0 0.75H5.06L8.56 5.39L12.6 0.75ZM11.74 13.77H13.1L4.32 2.15H2.87L11.74 13.77Z"
fill="#737373"
/>
</svg>
@ -52,7 +52,7 @@ const LinkedInIcon = ({ className }: { className?: string }) => (
aria-hidden="true"
>
<path
d="M3.58065 4.89474H0V16H3.58065V4.89474ZM1.79032 0C0.801613 0 0 0.801613 0 1.79032C0 2.77903 0.801613 3.58065 1.79032 3.58065C2.77903 3.58065 3.58065 2.77903 3.58065 1.79032C3.58065 0.801613 2.77903 0 1.79032 0ZM8.71613 4.89474H5.33871V16H8.71613V10.0645C8.71613 8.46774 9.11774 6.93548 11.1613 6.93548C13.1774 6.93548 13.2097 8.75806 13.2097 10.1613V16H16V9.48387C16 6.74194 15.3871 4.64516 12.1935 4.64516C10.6452 4.64516 9.59677 5.48387 9.16129 6.27419H9.12903V4.89474H8.71613Z"
d="M3.58 4.89H0V16H3.58V4.89ZM1.79 0C0.8 0 0 0.8 0 1.79C0 2.78 0.8 3.58 1.79 3.58C2.78 3.58 3.58 2.78 3.58 1.79C3.58 0.8 2.78 0 1.79 0ZM8.72 4.89H5.34V16H8.72V10.06C8.72 8.47 9.12 6.94 11.16 6.94C13.18 6.94 13.21 8.76 13.21 10.16V16H16V9.48C16 6.74 15.39 4.65 12.19 4.65C10.65 4.65 9.6 5.48 9.16 6.27H9.13V4.89H8.72Z"
fill="#737373"
/>
</svg>
@ -68,22 +68,16 @@ const InstagramIcon = ({ className }: { className?: string }) => (
aria-hidden="true"
>
<rect
x="1.08333"
y="1.08333"
x="1.08"
y="1.08"
width="10.8333"
height="10.8333"
rx="2.58333"
stroke="#737373"
strokeWidth="1.08333"
/>
<circle
cx="6.5"
cy="6.5"
r="2.16667"
stroke="#737373"
strokeWidth="1.08333"
/>
<circle cx="9.75" cy="3.25" r="0.8125" fill="#737373" />
<circle cx="6.5" cy="6.5" r="2.17" stroke="#737373" strokeWidth="1.08333" />
<circle cx="9.75" cy="3.25" r="0.81" fill="#737373" />
</svg>
)
@ -195,11 +189,11 @@ const ThemeButton = ({
}) => {
const getPreviewContent = () => {
if (theme === "black") {
return <div className="w-full h-full bg-black rounded" />
return <div className="size-full bg-black rounded" />
}
if (theme === "dark-gradient") {
return (
<div className="w-full h-full rounded relative overflow-hidden">
<div className="size-full rounded relative overflow-hidden">
<div className="absolute inset-0 bg-[#030710]" />
<div
className="absolute inset-0"
@ -212,7 +206,7 @@ const ThemeButton = ({
)
}
return (
<div className="w-full h-full rounded relative overflow-hidden">
<div className="size-full rounded relative overflow-hidden">
<div
className="absolute inset-0"
style={{
@ -264,7 +258,7 @@ const SocialButton = ({
<button
type="button"
onClick={onClick}
className="w-8 h-8 flex items-center justify-center rounded-full hover:bg-white/10 transition-colors"
className="size-8 flex items-center justify-center rounded-full hover:bg-white/10 transition-colors"
style={{
background: "#0D121A",
border: "0.875px solid rgba(115, 115, 115, 0.2)",
@ -413,7 +407,7 @@ export function ShareModal({
</DialogHeader>
<DialogPrimitive.Close
onClick={handleClose}
className="bg-[#0D121A] w-7 h-7 flex items-center justify-center focus:ring-ring rounded-full transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 border border-[rgba(115,115,115,0.2)] shrink-0"
className="bg-[#0D121A] size-7 flex items-center justify-center focus:ring-ring rounded-full transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 border border-[rgba(115,115,115,0.2)] shrink-0"
style={{
boxShadow:
"0 0.711px 2.842px 0 rgba(0, 0, 0, 0.25), 0.178px 0.178px 0.178px 0 rgba(255, 255, 255, 0.10) inset",

View file

@ -472,7 +472,7 @@ export function SpaceSelector({
</DialogDescription>
</div>
<DialogPrimitive.Close
className="bg-[#0D121A] w-7 h-7 flex items-center justify-center focus:ring-ring rounded-full transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 border border-[rgba(115,115,115,0.2)] shrink-0"
className="bg-[#0D121A] size-7 flex items-center justify-center focus:ring-ring rounded-full transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 border border-[rgba(115,115,115,0.2)] shrink-0"
style={{
boxShadow:
"inset 1.313px 1.313px 3.938px 0px rgba(0,0,0,0.7)",
@ -505,14 +505,14 @@ export function SpaceSelector({
>
<div
className={cn(
"w-4 h-4 rounded-full border-2 flex items-center justify-center shrink-0",
"size-4 rounded-full border-2 flex items-center justify-center shrink-0",
deleteDialog.action === "move"
? "border-blue-500"
: "border-[#737373]",
)}
>
{deleteDialog.action === "move" && (
<div className="w-2 h-2 rounded-full bg-blue-500" />
<div className="size-2 rounded-full bg-blue-500" />
)}
</div>
<span className="text-[#fafafa] text-sm font-medium">
@ -602,14 +602,14 @@ export function SpaceSelector({
>
<div
className={cn(
"w-4 h-4 rounded-full border-2 flex items-center justify-center shrink-0",
"size-4 rounded-full border-2 flex items-center justify-center shrink-0",
deleteDialog.action === "delete"
? "border-red-500"
: "border-[#737373]",
)}
>
{deleteDialog.action === "delete" && (
<div className="w-2 h-2 rounded-full bg-red-500" />
<div className="size-2 rounded-full bg-red-500" />
)}
</div>
<span className="text-[#fafafa] text-sm font-medium">

View file

@ -36,7 +36,7 @@ const strokeVariants: Variants = {
export function SuperLoader({
size = 42,
colorClassName = "text-sky-400",
label = "Loading...",
label = "Loading",
className = "",
}: NovaPathLoaderProps) {
const prefersReducedMotion = useReducedMotion()
@ -56,7 +56,7 @@ export function SuperLoader({
height={size * 0.5}
className={`shrink-0 ${colorClassName}`}
>
<title>Loading...</title>
<title>Loading</title>
{/* Right path */}
<motion.path
d={PATH_RIGHT}

View file

@ -129,7 +129,7 @@ export function TextEditor({
tabIndex={0}
ref={containerRef}
onClick={handleClick}
className="h-full w-full cursor-text outline-none prose prose-invert max-w-none text-editor-prose [&_.ProseMirror]:min-h-full [&_.ProseMirror]:outline-none [&_.ProseMirror]:text-[15px] [&_.ProseMirror]:leading-6 [&_.ProseMirror]:text-[#D7DEE8] [&_.ProseMirror-focused]:outline-none [&_.ProseMirror]:focus:outline-none"
className="size-full cursor-text outline-none prose prose-invert max-w-none text-editor-prose [&_.ProseMirror]:min-h-full [&_.ProseMirror]:outline-none [&_.ProseMirror]:text-[15px] [&_.ProseMirror]:leading-6 [&_.ProseMirror]:text-[#D7DEE8] [&_.ProseMirror-focused]:outline-none [&_.ProseMirror]:focus:outline-none"
>
<EditorContent editor={editor} />
</div>

View file

@ -187,7 +187,7 @@ function TimelineCard({
type={doc.type}
source={doc.source ?? undefined}
url={doc.url ?? undefined}
className="w-3.5 h-3.5 shrink-0 opacity-60"
className="size-3.5 shrink-0 opacity-60"
/>
<span className="text-[10px] text-white/40 uppercase tracking-widest">
{typeLabel}
@ -280,14 +280,14 @@ function GroupCard({
type={firstDoc.type}
source={firstDoc.source ?? undefined}
url={firstDoc.url ?? undefined}
className="w-3.5 h-3.5 shrink-0 opacity-60"
className="size-3.5 shrink-0 opacity-60"
/>
<span className="text-[13px] text-white/75 font-medium whitespace-nowrap shrink-0">
{countLabel}
</span>
{preview && (
<span className="text-[12px] text-white/35 truncate">
{preview}
· {preview}
</span>
)}
{totalMemories > 0 && (
@ -308,7 +308,7 @@ function GroupCard({
<ChevronDownIcon
className={cn(
"w-3.5 h-3.5 text-white/20 shrink-0 transition-transform duration-200",
"size-3.5 text-white/20 shrink-0 transition-transform duration-200",
isExpanded && "rotate-180",
)}
/>

View file

@ -141,14 +141,14 @@ export function UserProfileMenu({
onClick={() => router.push("/settings")}
className="px-3 py-2.5 rounded-md hover:bg-[#293952]/40 cursor-pointer text-white text-sm font-medium gap-2"
>
<Settings className="h-4 w-4 text-[#737373]" />
<Settings className="size-4 text-[#737373]" />
Settings
</DropdownMenuItem>
<DropdownMenuItem
onClick={handleTryOnboarding}
className="px-3 py-2.5 rounded-md hover:bg-[#293952]/40 cursor-pointer text-white text-sm font-medium gap-2"
>
<RotateCcw className="h-4 w-4 text-[#737373]" />
<RotateCcw className="size-4 text-[#737373]" />
Try onboarding
</DropdownMenuItem>
{onOpenFeedback ? (
@ -156,7 +156,7 @@ export function UserProfileMenu({
onClick={onOpenFeedback}
className="px-3 py-2.5 rounded-md hover:bg-[#293952]/40 cursor-pointer text-white text-sm font-medium gap-2"
>
<LifeBuoy className="h-4 w-4 text-[#737373]" />
<LifeBuoy className="size-4 text-[#737373]" />
Feedback
</DropdownMenuItem>
) : null}
@ -166,7 +166,7 @@ export function UserProfileMenu({
className="px-3 py-2.5 rounded-md hover:bg-[#293952]/40 cursor-pointer text-white text-sm font-medium gap-2"
>
<a href="mailto:support@supermemory.com">
<HelpCircle className="h-4 w-4 text-[#737373]" />
<HelpCircle className="size-4 text-[#737373]" />
Help & Support
</a>
</DropdownMenuItem>
@ -180,7 +180,7 @@ export function UserProfileMenu({
rel="noreferrer"
>
<svg
className="h-4 w-4 text-[#737373]"
className="size-4 text-[#737373]"
viewBox="0 0 24 24"
fill="currentColor"
aria-hidden="true"
@ -195,7 +195,7 @@ export function UserProfileMenu({
onClick={handleSignOut}
className="px-3 py-2.5 rounded-md hover:bg-[#293952]/40 cursor-pointer text-white text-sm font-medium gap-2"
>
<LogOut className="h-4 w-4 text-[#737373]" />
<LogOut className="size-4 text-[#737373]" />
Logout
</DropdownMenuItem>
</DropdownMenuContent>