mirror of
https://github.com/checktheroads/hyperglass
synced 2024-05-11 05:55:08 +00:00
60 lines
1.3 KiB
TypeScript
60 lines
1.3 KiB
TypeScript
import { useMemo, useState } from 'react';
|
|
import { useToken } from '@chakra-ui/react';
|
|
import { useMobile } from '~/context';
|
|
|
|
// Mobile:
|
|
// xs: 32
|
|
// sm: 28
|
|
// md: 24
|
|
// lg: 20
|
|
// xl: 16
|
|
// 2xl: 14
|
|
// 3xl: 12
|
|
// 4xl: 10
|
|
// 5xl: 7
|
|
type Sizes = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | '3xl' | '4xl' | '5xl';
|
|
|
|
export function useTitleSize(title: string, defaultSize: Sizes, deps: any[] = []) {
|
|
const [size, setSize] = useState<Sizes>(defaultSize);
|
|
const realSize = useToken('fontSizes', size);
|
|
const isMobile = useMobile();
|
|
function getSize(l: number): void {
|
|
switch (true) {
|
|
case l > 32:
|
|
setSize('xs');
|
|
break;
|
|
case l <= 32 && l > 28:
|
|
setSize('xs');
|
|
break;
|
|
case l <= 28 && l > 24:
|
|
setSize('sm');
|
|
break;
|
|
case l <= 24 && l > 20:
|
|
setSize('md');
|
|
break;
|
|
case l <= 20 && l > 16:
|
|
setSize('lg');
|
|
break;
|
|
case l <= 16 && l > 14:
|
|
setSize('xl');
|
|
break;
|
|
case l <= 14 && l > 12:
|
|
setSize('2xl');
|
|
break;
|
|
case l <= 12 && l > 10:
|
|
setSize('3xl');
|
|
break;
|
|
case l <= 10 && l > 7:
|
|
setSize('4xl');
|
|
break;
|
|
case l <= 7:
|
|
setSize('5xl');
|
|
break;
|
|
}
|
|
}
|
|
return useMemo(() => {
|
|
getSize(title.length);
|
|
return realSize;
|
|
}, [title, isMobile, ...deps]);
|
|
}
|