chore(FE-140): adjust border radius

This commit is contained in:
ValdiANS
2025-10-20 10:14:04 +07:00
parent 376fa29f7e
commit 406cfad31a
4 changed files with 45 additions and 60 deletions
+1 -1
View File
@@ -43,7 +43,7 @@ const Button = ({
'btn-warning': color === 'warning', 'btn-warning': color === 'warning',
'btn-error': color === 'error', 'btn-error': color === 'error',
}, },
'h-fit justify-center items-center gap-2 rounded-xl p-2 text-base transition-all' 'h-fit justify-center items-center gap-2 rounded p-2 text-base transition-all'
); );
return ( return (
+14 -25
View File
@@ -1,12 +1,6 @@
'use client'; 'use client';
import { import { ComponentType, ReactNode, useEffect, useMemo, useState } from 'react';
ComponentType,
ReactNode,
useEffect,
useMemo,
useState,
} from 'react';
import Select, { import Select, {
OptionProps, OptionProps,
GroupBase, GroupBase,
@@ -98,10 +92,7 @@ const SelectInput = <T extends OptionType>(props: SelectInputProps<T>) => {
return { ...base, IndicatorSeparator: () => null }; return { ...base, IndicatorSeparator: () => null };
}, [isAnimated]); }, [isAnimated]);
const internalInputChangeHandler = ( const internalInputChangeHandler = (val: string, meta: InputActionMeta) => {
val: string,
meta: InputActionMeta
) => {
if (meta.action === 'input-change') setInternalInputValue(val); if (meta.action === 'input-change') setInternalInputValue(val);
if (meta.action === 'menu-close') setInternalInputValue(''); if (meta.action === 'menu-close') setInternalInputValue('');
}; };
@@ -113,9 +104,7 @@ const SelectInput = <T extends OptionType>(props: SelectInputProps<T>) => {
const SelectComponent = createables ? CreatableSelect : Select; const SelectComponent = createables ? CreatableSelect : Select;
/** 🎯 handleChange tanpa any */ /** 🎯 handleChange tanpa any */
const handleChange = ( const handleChange = (val: MultiValue<T> | SingleValue<T>): void => {
val: MultiValue<T> | SingleValue<T>
): void => {
if (!val) { if (!val) {
onChange?.(null); onChange?.(null);
return; return;
@@ -145,15 +134,15 @@ const SelectInput = <T extends OptionType>(props: SelectInputProps<T>) => {
> >
{label} {label}
{required && ( {required && (
<span className="tooltip tooltip-error" data-tip="required"> <span className='tooltip tooltip-error' data-tip='required'>
<span className="text-error"> *</span> <span className='text-error'> *</span>
</span> </span>
)} )}
</span> </span>
)} )}
<SelectComponent<T, boolean, GroupBase<T>> <SelectComponent<T, boolean, GroupBase<T>>
instanceId="select" instanceId='select'
value={value ?? (isMulti ? [] : null)} value={value ?? (isMulti ? [] : null)}
onChange={handleChange} onChange={handleChange}
options={options} options={options}
@@ -171,7 +160,7 @@ const SelectInput = <T extends OptionType>(props: SelectInputProps<T>) => {
classNames={{ classNames={{
control: ({ isFocused, isDisabled }) => control: ({ isFocused, isDisabled }) =>
cn( cn(
'w-full min-h-12! rounded-lg! border bg-white transition-shadow cursor-pointer!', 'w-full min-h-12! rounded! border bg-base-100 transition-shadow cursor-pointer!',
{ {
'border-red-500! ring-2 ring-red-200': isError, 'border-red-500! ring-2 ring-red-200': isError,
'border-indigo-500 ring-2 ring-indigo-200': isFocused, 'border-indigo-500 ring-2 ring-indigo-200': isFocused,
@@ -187,24 +176,24 @@ const SelectInput = <T extends OptionType>(props: SelectInputProps<T>) => {
input: () => cn('text-gray-900'), input: () => cn('text-gray-900'),
indicatorsContainer: () => cn('flex items-center gap-1 pr-2'), indicatorsContainer: () => cn('flex items-center gap-1 pr-2'),
dropdownIndicator: ({ isFocused }) => dropdownIndicator: ({ isFocused }) =>
cn('p-1 rounded-md hover:bg-gray-100', { cn('p-1 rounded hover:bg-gray-100', {
'text-gray-900': isFocused, 'text-gray-900': isFocused,
'text-gray-500': !isFocused, 'text-gray-500': !isFocused,
'text-error!': isError, 'text-error!': isError,
}), }),
menu: () => menu: () =>
cn('border border-gray-200 rounded-lg bg-white shadow-lg!'), cn('border border-gray-200 rounded! bg-base-100 shadow-lg!'),
menuList: () => cn('p-2! max-h-60 overflow-auto'), menuList: () => cn('p-2! max-h-60 overflow-auto'),
option: ({ isFocused, isSelected }) => option: ({ isFocused, isSelected }) =>
cn('mt-1 px-3 py-2 rounded-md cursor-pointer!', { cn('mt-1 px-3 py-2 rounded cursor-pointer!', {
'bg-indigo-600 text-white': isFocused, 'bg-indigo-600 text-base-100': isFocused,
'bg-blue-500!': isSelected, 'bg-blue-500!': isSelected,
'text-gray-700': !isFocused && !isSelected, 'text-gray-700': !isFocused && !isSelected,
}), }),
multiValue: ({ getValue, index }) => { multiValue: ({ getValue, index }) => {
const selectedValues = getValue() as T[]; const selectedValues = getValue() as T[];
return cn( return cn(
'bg-indigo-50 rounded-md py-0.5 pl-2 pr-1 flex items-center gap-1!', 'bg-indigo-50 rounded py-0.5 pl-2 pr-1 flex items-center gap-1!',
selectedValues[index]?.className selectedValues[index]?.className
); );
}, },
@@ -225,9 +214,9 @@ const SelectInput = <T extends OptionType>(props: SelectInputProps<T>) => {
}} }}
/> />
{isError && <p className="w-full text-sm text-error">{errorMessage}</p>} {isError && <p className='w-full text-sm text-error'>{errorMessage}</p>}
{!isError && bottomLabel && ( {!isError && bottomLabel && (
<p className="w-full text-sm opacity-60">{bottomLabel}</p> <p className='w-full text-sm opacity-60'>{bottomLabel}</p>
)} )}
</div> </div>
); );
+29 -33
View File
@@ -1,10 +1,6 @@
'use client'; 'use client';
import { import { ChangeEventHandler, FocusEventHandler, ReactNode } from 'react';
ChangeEventHandler,
FocusEventHandler,
ReactNode,
} from 'react';
import { cn } from '@/lib/helper'; import { cn } from '@/lib/helper';
@@ -52,7 +48,7 @@ const TextArea = ({
onBlur, onBlur,
readOnly = false, readOnly = false,
isLoading = false, isLoading = false,
rows = 3 rows = 3,
}: TextAreaProps) => { }: TextAreaProps) => {
return ( return (
<div <div
@@ -83,35 +79,35 @@ const TextArea = ({
)} )}
</label> </label>
)} )}
{startAdornment && startAdornment} {startAdornment && startAdornment}
<textarea <textarea
className={cn( className={cn(
'input h-auto px-4 py-2 text-base font-normal leading-6 w-full rounded-lg! outline-none! transition-all', 'input h-auto px-4 py-2 text-base font-normal leading-6 w-full rounded! outline-none! transition-all',
{ {
'border-error': isError, 'border-error': isError,
'border-success!': isValid, 'border-success!': isValid,
}, },
className?.inputWrapper className?.inputWrapper
)}
id={name}
name={name}
placeholder={placeholder}
value={value}
rows={rows}
onChange={onChange}
onBlur={onBlur}
disabled={disabled}
readOnly={readOnly}
/>
{(isLoading || endAdornment) && (
<div className='flex flex-row gap-2'>
{isLoading && <span className='loading loading-spinner' />}
{endAdornment && endAdornment}
</div>
)} )}
id={name}
name={name}
placeholder={placeholder}
value={value}
rows={rows}
onChange={onChange}
onBlur={onBlur}
disabled={disabled}
readOnly={readOnly}
/>
{(isLoading || endAdornment) && (
<div className='flex flex-row gap-2'>
{isLoading && <span className='loading loading-spinner' />}
{endAdornment && endAdornment}
</div>
)}
{!isError && bottomLabel && ( {!isError && bottomLabel && (
<p className='w-full text-sm opacity-60'>{bottomLabel}</p> <p className='w-full text-sm opacity-60'>{bottomLabel}</p>
+1 -1
View File
@@ -87,7 +87,7 @@ const TextInput = ({
<div <div
className={cn( className={cn(
'input h-12 px-4 py-2 text-base font-normal leading-6 w-full rounded-lg! outline-none! transition-all duration-200', 'input h-12 px-4 py-2 text-base font-normal leading-6 w-full rounded! outline-none! transition-all duration-200',
{ {
'border-error': isError, 'border-error': isError,
'border-success!': isValid, 'border-success!': isValid,