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

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions src/app/globals.css
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,11 @@
.animate-gradient-text {
animation: gradient-flow 20s ease infinite;
}

/* Cursor pointer for interactive elements (#1003) */
.cursor-pointer {
cursor: pointer;
}
}

@keyframes gradient-flow {
Expand Down
6 changes: 3 additions & 3 deletions src/components/layout/header.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -559,7 +559,7 @@ export function Header({ authProvider = "credentials", allowRegistration = true
<Button
variant="ghost"
size="icon"
className="h-8 w-8"
className="h-8 w-8 cursor-pointer"
onClick={() => {
const newTheme = theme === "dark" ? "light" : "dark";
analyticsSettings.changeTheme(newTheme);
Expand Down Expand Up @@ -619,7 +619,7 @@ export function Header({ authProvider = "credentials", allowRegistration = true
)}
<DropdownMenuSeparator />
<DropdownMenuSub>
<DropdownMenuSubTrigger>
<DropdownMenuSubTrigger className="cursor-pointer">
<Globe className="mr-2 h-4 w-4" />
{t("settings.language")}
</DropdownMenuSubTrigger>
Expand Down Expand Up @@ -652,7 +652,7 @@ export function Header({ authProvider = "credentials", allowRegistration = true
{/* Language selector for non-logged in users */}
<DropdownMenu>
<DropdownMenuTrigger asChild>
<Button variant="ghost" size="icon" className="h-8 w-8">
<Button variant="ghost" size="icon" className="h-8 w-8 cursor-pointer">
<Globe className="h-4 w-4" />
</Button>
</DropdownMenuTrigger>
Expand Down
2 changes: 1 addition & 1 deletion src/components/promptmasters/promptmasters-content.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -202,7 +202,7 @@ export function PromptmastersContent({ translations }: PromptmastersContentProps
variant="outline"
size="icon"
onClick={() => setSortMode(sortMode === "total" ? "perPrompt" : "total")}
className="shrink-0"
className="shrink-0 cursor-pointer"
>
{sortMode === "total" ? (
<BarChart3 className="h-4 w-4" />
Expand Down
2 changes: 1 addition & 1 deletion src/components/prompts/copy-button.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ export function CopyButton({ content, promptId }: CopyButtonProps) {
};

return (
<Button variant="ghost" size="sm" onClick={copyToClipboard}>
<Button variant="ghost" size="sm" onClick={copyToClipboard} className="cursor-pointer">
{copied ? (
<Check className="h-4 w-4 text-green-500" />
) : (
Expand Down
4 changes: 2 additions & 2 deletions src/components/prompts/prompt-filters.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -151,7 +151,7 @@ export function PromptFilters({ categories, tags, currentFilters, aiSearchEnable
<Button
variant="ghost"
size="sm"
className={`h-6 text-xs px-2 ${hasFilters ? "visible" : "invisible"}`}
className={`h-6 text-xs px-2 cursor-pointer ${hasFilters ? "visible" : "invisible"}`}
onClick={clearFilters}
>
<X className="h-3 w-3 mr-1" />{t("search.clear")}
Expand All @@ -169,7 +169,7 @@ export function PromptFilters({ categories, tags, currentFilters, aiSearchEnable
<Button
variant="ghost"
size="sm"
className={`h-6 text-xs px-2 ${hasFilters ? "visible" : "invisible"}`}
className={`h-6 text-xs px-2 cursor-pointer ${hasFilters ? "visible" : "invisible"}`}
onClick={clearFilters}
>
<X className="h-3 w-3 mr-1" />{t("search.clear")}
Expand Down
14 changes: 7 additions & 7 deletions src/components/prompts/run-prompt-button.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -380,7 +380,7 @@ export function RunPromptButton({
<button
key={option.baseUrl}
onClick={() => handleRunAndClose(platform, option.baseUrl)}
className="flex items-center gap-3 w-full px-3 py-3 text-base hover:bg-accent rounded-md text-left"
className="flex items-center gap-3 w-full px-3 py-3 text-base hover:bg-accent rounded-md text-left cursor-pointer"
>
{option.name}
</button>
Expand All @@ -393,7 +393,7 @@ export function RunPromptButton({
<button
key={platform.id}
onClick={() => handleRunAndClose(platform, platform.baseUrl)}
className="flex items-center gap-3 w-full px-3 py-3 text-base hover:bg-accent rounded-md text-left"
className="flex items-center gap-3 w-full px-3 py-3 text-base hover:bg-accent rounded-md text-left cursor-pointer"
>
{platform.sponsor && !useCloneBranding ? (
<Heart className="h-4 w-4 text-pink-500 fill-pink-500" />
Expand All @@ -412,7 +412,7 @@ export function RunPromptButton({
if (platform.subOptions) {
return (
<DropdownMenuSub key={platform.id}>
<DropdownMenuSubTrigger className="flex items-center gap-2">
<DropdownMenuSubTrigger className="flex items-center gap-2 cursor-pointer">
{platform.sponsor && !useCloneBranding ? (
<Heart className="h-3 w-3 text-pink-500 fill-pink-500" />
) : (
Expand Down Expand Up @@ -456,7 +456,7 @@ export function RunPromptButton({
<div className={`flex gap-1 ${size === "small" ? "p-1" : "p-1.5"} bg-muted rounded-md`}>
<button
onClick={() => setActiveTab("chat")}
className={`flex-1 ${size === "small" ? "px-2 py-1 text-xs" : "px-3 py-1.5 text-sm"} font-medium rounded transition-colors ${
className={`flex-1 ${size === "small" ? "px-2 py-1 text-xs" : "px-3 py-1.5 text-sm"} font-medium rounded transition-colors cursor-pointer ${
activeTab === "chat"
? "bg-background text-foreground shadow-sm"
: "text-muted-foreground hover:text-foreground"
Expand All @@ -466,7 +466,7 @@ export function RunPromptButton({
</button>
<button
onClick={() => setActiveTab("code")}
className={`flex-1 ${size === "small" ? "px-2 py-1 text-xs" : "px-3 py-1.5 text-sm"} font-medium rounded transition-colors ${
className={`flex-1 ${size === "small" ? "px-2 py-1 text-xs" : "px-3 py-1.5 text-sm"} font-medium rounded transition-colors cursor-pointer ${
activeTab === "code"
? "bg-background text-foreground shadow-sm"
: "text-muted-foreground hover:text-foreground"
Expand All @@ -483,7 +483,7 @@ export function RunPromptButton({
{isMobile ? (
<Sheet open={sheetOpen} onOpenChange={setSheetOpen}>
<SheetTrigger asChild>
<Button variant={emphasized ? undefined : variant} size={size} className={emphasized ? `bg-green-600 hover:bg-green-700 text-white ${className || ""}` : className}>
<Button variant={emphasized ? undefined : variant} size={size} className={emphasized ? `bg-green-600 hover:bg-green-700 text-white cursor-pointer ${className || ""}` : `cursor-pointer ${className || ""}`}>
<Play className="h-4 w-4" />
{size !== "icon" && <span className="ml-1.5">{t("run")}</span>}
</Button>
Expand All @@ -504,7 +504,7 @@ export function RunPromptButton({
/* Desktop: Dropdown */
<DropdownMenu>
<DropdownMenuTrigger asChild>
<Button variant={emphasized ? undefined : variant} size={size} className={emphasized ? `bg-green-600 hover:bg-green-700 text-white ${className || ""}` : className}>
<Button variant={emphasized ? undefined : variant} size={size} className={emphasized ? `bg-green-600 hover:bg-green-700 text-white cursor-pointer ${className || ""}` : `cursor-pointer ${className || ""}`}>
<Play className="h-4 w-4" />
{size !== "icon" && <span className="ml-1.5">{t("run")}</span>}
</Button>
Expand Down
6 changes: 3 additions & 3 deletions src/components/prompts/upvote-button.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ export function UpvoteButton({
onClick={handleVote}
disabled={isLoading}
className={cn(
"flex flex-col items-center justify-center w-14 h-14 rounded-full border-2 transition-all",
"flex flex-col items-center justify-center w-14 h-14 rounded-full border-2 transition-all cursor-pointer",
isVoted
? "bg-primary text-primary-foreground border-primary"
: "bg-background text-muted-foreground border-border hover:border-primary hover:text-primary"
Expand All @@ -142,7 +142,7 @@ export function UpvoteButton({
onClick={handleVote}
disabled={isLoading}
className={cn(
"flex items-center gap-0.5 text-xs transition-colors",
"flex items-center gap-0.5 text-xs transition-colors cursor-pointer",
isVoted ? "text-primary" : "text-muted-foreground hover:text-foreground"
)}
>
Expand All @@ -165,7 +165,7 @@ export function UpvoteButton({
size="sm"
onClick={handleVote}
disabled={isLoading}
className="gap-1.5"
className="gap-1.5 cursor-pointer"
>
{isLoading ? (
<Loader2 className="h-4 w-4 animate-spin" />
Expand Down
2 changes: 1 addition & 1 deletion src/components/ui/tabs.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ function TabsTrigger({
<TabsPrimitive.Trigger
data-slot="tabs-trigger"
className={cn(
"data-[state=active]:bg-background dark:data-[state=active]:text-foreground focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:outline-ring dark:data-[state=active]:border-input dark:data-[state=active]:bg-input/30 text-foreground dark:text-muted-foreground inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 rounded-md border border-transparent px-2 py-1 text-sm font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:ring-[3px] focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:shadow-sm [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
"data-[state=active]:bg-background dark:data-[state=active]:text-foreground focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:outline-ring dark:data-[state=active]:border-input dark:data-[state=active]:bg-input/30 text-foreground dark:text-muted-foreground inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 rounded-md border border-transparent px-2 py-1 text-sm font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:ring-[3px] focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:shadow-sm [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 cursor-pointer",
className
)}
{...props}
Expand Down