diff --git a/apps/web/components/memories-grid.tsx b/apps/web/components/memories-grid.tsx
index ce947181..be363274 100644
--- a/apps/web/components/memories-grid.tsx
+++ b/apps/web/components/memories-grid.tsx
@@ -55,10 +55,17 @@ import {
CheckIcon,
LayoutGrid,
Loader,
+ MoreHorizontal,
Trash2Icon,
UserRound,
XIcon,
} from "lucide-react"
+import {
+ DropdownMenu,
+ DropdownMenuContent,
+ DropdownMenuItem,
+ DropdownMenuTrigger,
+} from "@ui/components/dropdown-menu"
import { useProcessingDocuments } from "@/hooks/use-processing-documents"
import { TimelineView } from "./timeline-view"
import { SpaceProfilePanel } from "@/components/space-profile-panel"
@@ -633,32 +640,53 @@ export function MemoriesGrid({
Timeline
-
-
- Profile
-
- {onEnterSelectionMode && (
-
+
+
+
+ More
+
+
+
-
-
- )}
+ {onEnterSelectionMode && (
+
+
+ Select memories
+
+ )}
+
+
+ Space profile
+
+
+
)}
@@ -837,7 +865,11 @@ export function MemoriesGrid({
{profileOpen && !isMobile && (
-
+ setProfileOpen(false)}
+ />
)}
diff --git a/apps/web/components/settings/org-context.tsx b/apps/web/components/settings/org-context.tsx
index 614f7685..dac97f7e 100644
--- a/apps/web/components/settings/org-context.tsx
+++ b/apps/web/components/settings/org-context.tsx
@@ -15,6 +15,9 @@ type ContextTemplate = {
prompt: string
}
+const SURFACE_SHADOW =
+ "0 2.842px 14.211px 0 rgba(0,0,0,0.25), 0.711px 0.711px 0.711px 0 rgba(255,255,255,0.10) inset"
+
const CONTEXT_TEMPLATES: ContextTemplate[] = [
{
id: "personal-general",
@@ -100,12 +103,14 @@ function PillButton({
disabled={disabled}
className={cn(
dmSansClassName(),
- "inline-flex h-9 items-center justify-center gap-2 rounded-[9px] border px-3 text-[13px] font-medium transition-colors cursor-pointer disabled:cursor-not-allowed disabled:opacity-50",
+ "inline-flex h-9 items-center justify-center gap-2 rounded-full border px-4 text-[13px] font-semibold transition-opacity cursor-pointer disabled:cursor-not-allowed disabled:opacity-50",
+ "bg-[#0D121A] text-[#FAFAFA] hover:opacity-80",
+ "shadow-[inset_1.5px_1.5px_4.5px_rgba(0,0,0,0.7)]",
variant === "primary"
- ? "border-transparent bg-[#0054AD] text-[#FAFAFA] hover:bg-[#0B65C9]"
+ ? "border-transparent"
: variant === "danger"
- ? "border-red-500/20 bg-red-500/10 text-red-300 hover:bg-red-500/15"
- : "border-[#161F2C] bg-[#0D121A] text-[#FAFAFA] hover:bg-[#00173C] hover:border-[#2261CA33]",
+ ? "border-transparent"
+ : "border-transparent",
)}
>
{children}
@@ -224,7 +229,7 @@ export function OrgContext() {
{enabled && !isManaging && savedPrompt && (
-
+
{savedPrompt}
@@ -245,54 +250,56 @@ export function OrgContext() {
)}
{enabled && isManaging && (
-
-
-
- What should Nova focus on?
-
-
+
+
+
+
+ What should Nova focus on?
+
+
-
- {CONTEXT_TEMPLATES.map((template) => {
- const isSelected = selectedTemplateId === template.id
- return (
-
setPrompt(template.prompt)}
- className={cn(
- "rounded-[10px] border p-3 text-left transition-colors cursor-pointer",
- "bg-[#0D121A] hover:bg-[#121A24]",
- isSelected
- ? "border-[#1C2B3E] bg-[#1C2B3E]"
- : "border-white/10",
- )}
- >
-
- {template.label}
-
-
- {template.description}
-
-
- )
- })}
+
+ {CONTEXT_TEMPLATES.map((template) => {
+ const isSelected = selectedTemplateId === template.id
+ return (
+
setPrompt(template.prompt)}
+ className={cn(
+ "rounded-[14px] border p-4 text-left transition-colors cursor-pointer",
+ "bg-[#14161A] hover:bg-[#121820]",
+ isSelected
+ ? "border-white/[0.16] bg-[#171B22]"
+ : "border-white/[0.08]",
+ )}
+ >
+
+ {template.label}
+
+
+ {template.description}
+
+
+ )
+ })}
+
-
+
CANCEL
@@ -347,13 +357,7 @@ export function OrgContext() {
: "Nova will stop using this guidance for new content, and the saved context will be cleared."}
-
+
Close
diff --git a/apps/web/components/space-profile-modal.tsx b/apps/web/components/space-profile-modal.tsx
index d89eeb83..b9fe14b0 100644
--- a/apps/web/components/space-profile-modal.tsx
+++ b/apps/web/components/space-profile-modal.tsx
@@ -19,15 +19,19 @@ export function SpaceProfileModal({
return (
Space Profile
-
+ onOpenChange(false)}
+ />
diff --git a/apps/web/components/space-profile-panel.tsx b/apps/web/components/space-profile-panel.tsx
index 80b1bd43..11d83a04 100644
--- a/apps/web/components/space-profile-panel.tsx
+++ b/apps/web/components/space-profile-panel.tsx
@@ -1,6 +1,6 @@
"use client"
-import { Brain } from "lucide-react"
+import { Brain, X } from "lucide-react"
import { motion } from "motion/react"
import { dmSans125ClassName, dmSansClassName } from "@/lib/fonts"
import { useSpaceProfile } from "@/hooks/use-space-profile"
@@ -9,15 +9,17 @@ import { cn } from "@lib/utils"
type SpaceProfilePanelProps = {
containerTag: string
isOpen: boolean
+ onClose: () => void
}
type SpaceProfileContentProps = {
containerTag: string
+ onClose?: () => void
}
function CountBadge({ children }: { children: React.ReactNode }) {
return (
-
+
{children}
)
@@ -38,9 +40,9 @@ function LoadingState() {
function EmptyState() {
return (
-
-
-
+
+
+
No profile yet
@@ -87,6 +89,7 @@ function ProfileSection({ label, items }: { label: string; items: string[] }) {
export function SpaceProfileContent({
containerTag,
+ onClose,
}: SpaceProfileContentProps) {
const { data, isLoading, error } = useSpaceProfile(containerTag)
const keyFacts = data?.static ?? []
@@ -95,7 +98,7 @@ export function SpaceProfileContent({
return (
-
+
+ {onClose ? (
+
+
+
+ ) : null}
{isLoading ? (
) : error ? (
-
+
Failed to load space profile.
) : totalCount === 0 ? (
@@ -134,6 +147,7 @@ export function SpaceProfileContent({
export function SpaceProfilePanel({
containerTag,
isOpen,
+ onClose,
}: SpaceProfilePanelProps) {
if (!isOpen) return null
@@ -144,11 +158,11 @@ export function SpaceProfilePanel({
exit={{ opacity: 0, width: 0, x: 12 }}
transition={{ duration: 0.2, ease: [0.4, 0, 0.2, 1] }}
className={cn(
- "hidden h-full w-[300px] shrink-0 flex-col rounded-[14px] bg-[#14161A] p-4 md:flex",
- "shadow-[inset_2.42px_2.42px_4.263px_rgba(11,15,21,0.7)]",
+ "hidden h-full w-[300px] shrink-0 flex-col rounded-[18px] border border-white/[0.08] bg-[#1B1F24] p-4 md:flex",
+ "shadow-[0_2.842px_14.211px_rgba(0,0,0,0.25),inset_0.711px_0.711px_0.711px_rgba(255,255,255,0.10)]",
)}
>
-
+
)
}