import { PUBLIC_B2_BUCKET, PUBLIC_B2_ENDPOINT } from "$env/static/public";
import { clsx, type ClassValue } from "clsx";
import { twMerge } from "tailwind-merge";
export function cn(...inputs: ClassValue[]) {
return twMerge(clsx(inputs));
}
// eslint-disable-next-line @typescript-eslint/no-explicit-any
export type WithoutChild<T> = T extends { child?: any } ? Omit<T, "child"> : T;
export type WithoutChildren<T> = T extends { children?: any } ? Omit<T, "children"> : T;
export type WithoutChildrenOrChild<T> = WithoutChildren<WithoutChild<T>>;
export type WithElementRef<T, U extends HTMLElement = HTMLElement> = T & { ref?: U | null };
export function getTimeBasedGreeting(name: string): string {
const hour = new Date().getHours();
if (hour < 12) {
return `Good morning, ${name}`;
} else if (hour < 17) {
return `Good afternoon, ${name}`;
} else if (hour < 22) {
return `Good evening, ${name}`;
} else {
return `Good night, ${name}`;
export function getPublicUrl(key: string | null): string | null {
if (!key) return null;
return `${PUBLIC_B2_ENDPOINT}/${PUBLIC_B2_BUCKET}/${key}`;
export function debounce(func: (...args: any[]) => void, wait: number) {
let timeout: number | undefined;
return function executedFunction(...args: any[]) {
const later = () => {
clearTimeout(timeout);
func(...args);
};
timeout = setTimeout(later, wait);