Some checks failed
CI / test (map[image:macos-latest name:macos], 1, 4) (push) Has been cancelled
CI / test (map[image:macos-latest name:macos], 2, 4) (push) Has been cancelled
CI / test (map[image:macos-latest name:macos], 3, 4) (push) Has been cancelled
CI / test (map[image:macos-latest name:macos], 4, 4) (push) Has been cancelled
CI / test (map[image:windows-latest name:windows], 1, 4) (push) Has been cancelled
CI / test (map[image:windows-latest name:windows], 2, 4) (push) Has been cancelled
CI / test (map[image:windows-latest name:windows], 3, 4) (push) Has been cancelled
CI / test (map[image:windows-latest name:windows], 4, 4) (push) Has been cancelled
CI / merge-reports (push) Has been cancelled
- Added a new integration script to manage custom features related to smart context. - Implemented handlers for smart context operations (get, update, clear, stats) in ipc. - Created a SmartContextStore class to manage context snippets and summaries. - Developed hooks for React to interact with smart context (useSmartContext, useUpdateSmartContext, useClearSmartContext, useSmartContextStats). - Included backup and restore functionality in the integration script. - Validated integration by checking for custom modifications and file existence.
81 lines
2.5 KiB
TypeScript
81 lines
2.5 KiB
TypeScript
import React from "react";
|
|
import { toast } from "sonner";
|
|
import { X, Copy, Check } from "lucide-react";
|
|
|
|
interface CustomErrorToastProps {
|
|
message: string;
|
|
toastId: string | number;
|
|
copied?: boolean;
|
|
onCopy?: () => void;
|
|
}
|
|
|
|
export function CustomErrorToast({
|
|
message,
|
|
toastId,
|
|
copied = false,
|
|
onCopy,
|
|
}: CustomErrorToastProps) {
|
|
const handleClose = () => {
|
|
toast.dismiss(toastId);
|
|
};
|
|
|
|
const handleCopy = () => {
|
|
if (onCopy) {
|
|
onCopy();
|
|
}
|
|
};
|
|
|
|
return (
|
|
<div className="relative bg-red-50/95 backdrop-blur-sm border border-red-200 rounded-xl shadow-lg min-w-[400px] max-w-[500px] overflow-hidden">
|
|
{/* Content */}
|
|
<div className="p-4">
|
|
<div className="flex items-start">
|
|
<div className="flex-1">
|
|
<div className="flex items-center mb-3">
|
|
<div className="flex-shrink-0">
|
|
<div className="w-5 h-5 bg-gradient-to-br from-red-400 to-red-500 rounded-full flex items-center justify-center shadow-sm">
|
|
<X className="w-3 h-3 text-white" />
|
|
</div>
|
|
</div>
|
|
<h3 className="ml-3 text-sm font-medium text-red-900">Error</h3>
|
|
|
|
{/* Action buttons */}
|
|
<div className="flex items-center space-x-1.5 ml-auto">
|
|
<button
|
|
onClick={(e) => {
|
|
e.stopPropagation();
|
|
handleCopy();
|
|
}}
|
|
className="p-1.5 text-red-500 hover:text-red-700 hover:bg-red-100/70 rounded-lg transition-all duration-150"
|
|
title="Copy to clipboard"
|
|
>
|
|
{copied ? (
|
|
<Check className="w-4 h-4 text-green-500" />
|
|
) : (
|
|
<Copy className="w-4 h-4" />
|
|
)}
|
|
</button>
|
|
<button
|
|
onClick={(e) => {
|
|
e.stopPropagation();
|
|
handleClose();
|
|
}}
|
|
className="p-1.5 text-red-500 hover:text-red-700 hover:bg-red-100/70 rounded-lg transition-all duration-150"
|
|
title="Close"
|
|
>
|
|
<X className="w-4 h-4" />
|
|
</button>
|
|
</div>
|
|
</div>
|
|
<div>
|
|
<p className="text-sm text-red-800 leading-relaxed whitespace-pre-wrap bg-red-100/50 backdrop-blur-sm p-3 rounded-lg border border-red-200/50">
|
|
{message}
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
);
|
|
}
|