@itgold/grandbazar-ui-kit
Version:
Grandbazar.io UI component library: React, Typescript, Tailwind, Rollup, Storybook, Jest.
48 lines (42 loc) • 2.11 kB
text/typescript
import { TInputThemes } from '@/components/inputs/types';
import { classNames } from '@/utils/classNames';
export type TUseInputClasses = {
theme: TInputThemes;
error: boolean;
disabled?: boolean;
isFocusedWrapper: boolean;
};
export function useInputClasses({ theme, error, isFocusedWrapper, disabled }: TUseInputClasses) {
const commonInputClasses = classNames(
'transition-all duration-std border rounded-lg text-sm [&>input]:transition-all [&>input]:duration-std [&>input]:autofill:shadow-[0_0_0_1000px_rgba(255,255,0,0)]',
isFocusedWrapper ? 'ring-3 ring-inset' : 'focus:ring-3 focus:ring-inset',
);
const getInputThemeClasses = () => {
switch (theme) {
case 'light':
return classNames(
'ring-gray-ui/20 hover:bg-gray-ui/5 focus:ring-gray-ui/20 placeholder-gray-ui-700 disabled:border-gray-ui-300 disabled:bg-gray-ui/5 ',
disabled ? 'border-gray-ui-300 !bg-gray-ui/5' : 'border-gray-ui/ba',
error
? '[&>input]:placeholder-red-ui bg-red-ui/10 border-red-ui'
: '[&>input]:placeholder-gray-ui-700 bg-transparent',
);
case 'dark':
return classNames(
'ring-gray-ui-100/25 text-gray-ui-100 disabled:bg-gray-ui-100/5 disabled:placeholder-gray-ui-700/50 placeholder-gray-ui-50' +
'focus:placeholder-gray-ui-100 hover:bg-gray-ui-100/5 focus:ring-gray-ui-100/25 focus:bg-gray-ui-100/10',
isFocusedWrapper ? 'bg-gray-ui-100/10 border-gray-ui-100/25' : 'border-gray-ui-700',
disabled ? 'bg-gray-ui-100/5 placeholder-gray-ui-700/50' : 'placeholder-gray-ui-100/50',
error
? '[&>input]:placeholder-red-ui bg-red-ui/10'
: isFocusedWrapper
? '[&>input]:placeholder-gray-ui-100 '
: '[&>input]:placeholder-gray-ui-100/50',
);
}
};
const errorClasses = error
? 'text-red-ui bg-red-ui/10 [&>input]:text-red-ui placeholder-red-ui border-red-ui ring-0 focus:ring-0 bg-red-ui/10 hover:bg-red-ui/10'
: '';
return classNames(commonInputClasses, getInputThemeClasses(), errorClasses);
}