2025-05-23 16:26:02 +03:00
import { PUBLIC_B2_BUCKET , PUBLIC_B2_ENDPOINT } from "$env/static/public" ;
2025-05-21 21:34:22 +03:00
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 ;
// eslint-disable-next-line @typescript-eslint/no-explicit-any
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 } ;
2025-05-22 14:00:43 +03:00
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 } ` ;
}
}
2025-05-23 16:26:02 +03:00
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 ) ;
} ;
clearTimeout ( timeout ) ;
timeout = setTimeout ( later , wait ) ;
} ;
2025-05-24 15:50:10 +03:00
}
export function formatPrice ( price : number ) : string {
if ( price < 0.01 ) {
return price . toFixed ( 6 ) ;
} else if ( price < 1 ) {
return price . toFixed ( 4 ) ;
} else {
return price . toLocaleString ( undefined , {
minimumFractionDigits : 2 ,
maximumFractionDigits : 2
} ) ;
}
}
export function formatValue ( value : number ) : string {
if ( value >= 1 e9 ) return ` $ ${ ( value / 1 e9 ) . toFixed ( 2 ) } B ` ;
if ( value >= 1 e6 ) return ` $ ${ ( value / 1 e6 ) . toFixed ( 2 ) } M ` ;
if ( value >= 1 e3 ) return ` $ ${ ( value / 1 e3 ) . toFixed ( 2 ) } K ` ;
return ` $ ${ value . toFixed ( 2 ) } ` ;
}
export function formatQuantity ( value : number ) : string {
if ( value >= 1 e9 ) return ` ${ ( value / 1 e9 ) . toFixed ( 2 ) } B ` ;
if ( value >= 1 e6 ) return ` ${ ( value / 1 e6 ) . toFixed ( 2 ) } M ` ;
if ( value >= 1 e3 ) return ` ${ ( value / 1 e3 ) . toFixed ( 2 ) } K ` ;
return value . toLocaleString ( ) ;
}
export function formatDate ( timestamp : string ) : string {
const date = new Date ( timestamp ) ;
return date . toLocaleDateString ( 'en-US' , {
month : 'short' ,
day : 'numeric' ,
hour : '2-digit' ,
minute : '2-digit'
} ) ;
}
export const formatMarketCap = formatValue ;