151 lines
4 KiB
TypeScript
151 lines
4 KiB
TypeScript
import { toast } from "@/hooks/use-toast";
|
||
|
||
interface AethexToastOptions {
|
||
title?: string;
|
||
description?: string;
|
||
duration?: number;
|
||
accentColor?: string;
|
||
}
|
||
|
||
export const aethexToast = {
|
||
success: (options: AethexToastOptions) => {
|
||
const normalize = (d?: any) => {
|
||
if (d == null) return undefined;
|
||
if (typeof d === "string") return d;
|
||
if (typeof d === "object") {
|
||
if ((d as any).message) return String((d as any).message);
|
||
try {
|
||
return JSON.stringify(d);
|
||
} catch (e) {
|
||
return String(d);
|
||
}
|
||
}
|
||
return String(d);
|
||
};
|
||
return toast({
|
||
title: `✅ ${options.title || "Success"}`,
|
||
description: normalize(options.description),
|
||
duration: options.duration || 5000,
|
||
variant: "success" as any,
|
||
});
|
||
},
|
||
|
||
error: (options: AethexToastOptions) => {
|
||
const normalize = (d?: any) => {
|
||
if (d == null) return undefined;
|
||
if (typeof d === "string") return d;
|
||
if (typeof d === "object") {
|
||
if ((d as any).message) return String((d as any).message);
|
||
try {
|
||
return JSON.stringify(d);
|
||
} catch (e) {
|
||
return String(d);
|
||
}
|
||
}
|
||
return String(d);
|
||
};
|
||
return toast({
|
||
title: `⚡ ${options.title || "Error"}`,
|
||
description: normalize(options.description),
|
||
duration: options.duration || 5000,
|
||
variant: "destructive",
|
||
});
|
||
},
|
||
|
||
warning: (options: AethexToastOptions) => {
|
||
const normalize = (d?: any) => {
|
||
if (d == null) return undefined;
|
||
if (typeof d === "string") return d;
|
||
if (typeof d === "object") {
|
||
if ((d as any).message) return String((d as any).message);
|
||
try {
|
||
return JSON.stringify(d);
|
||
} catch (e) {
|
||
return String(d);
|
||
}
|
||
}
|
||
return String(d);
|
||
};
|
||
return toast({
|
||
title: `⚠️ ${options.title || "Warning"}`,
|
||
description: normalize(options.description),
|
||
duration: options.duration || 5000,
|
||
variant: "warning" as any,
|
||
});
|
||
},
|
||
|
||
info: (options: AethexToastOptions) => {
|
||
const normalize = (d?: any) => {
|
||
if (d == null) return undefined;
|
||
if (typeof d === "string") return d;
|
||
if (typeof d === "object") {
|
||
if ((d as any).message) return String((d as any).message);
|
||
try {
|
||
return JSON.stringify(d);
|
||
} catch (e) {
|
||
return String(d);
|
||
}
|
||
}
|
||
return String(d);
|
||
};
|
||
return toast({
|
||
title: `ℹ️ ${options.title || "Information"}`,
|
||
description: normalize(options.description),
|
||
duration: options.duration || 5000,
|
||
variant: "info" as any,
|
||
});
|
||
},
|
||
|
||
aethex: (options: AethexToastOptions) => {
|
||
return toast({
|
||
title: `✨ ${options.title || "AeThex OS"}`,
|
||
description: options.description,
|
||
duration: options.duration || 6000,
|
||
variant: "aethex" as any,
|
||
});
|
||
},
|
||
|
||
system: (message: string, accentColor?: string) => {
|
||
// If accentColor is provided, use arm variant
|
||
if (accentColor) {
|
||
return toast({
|
||
title: "🔧 AeThex OS",
|
||
description: message,
|
||
duration: 4000,
|
||
variant: "arm" as any,
|
||
accentColor: accentColor,
|
||
});
|
||
}
|
||
|
||
// Otherwise use default aethex variant
|
||
return toast({
|
||
title: "🔧 AeThex OS",
|
||
description: message,
|
||
duration: 4000,
|
||
variant: "aethex" as any,
|
||
});
|
||
},
|
||
|
||
arm: (options: AethexToastOptions & { accentColor: string }) => {
|
||
const normalize = (d?: any) => {
|
||
if (d == null) return undefined;
|
||
if (typeof d === "string") return d;
|
||
if (typeof d === "object") {
|
||
if ((d as any).message) return String((d as any).message);
|
||
try {
|
||
return JSON.stringify(d);
|
||
} catch (e) {
|
||
return String(d);
|
||
}
|
||
}
|
||
return String(d);
|
||
};
|
||
return toast({
|
||
title: options.title,
|
||
description: normalize(options.description),
|
||
duration: options.duration || 5000,
|
||
variant: "arm" as any,
|
||
accentColor: options.accentColor,
|
||
});
|
||
},
|
||
};
|