cx(
"relative flex w-full flex-row place-content-center place-items-center rounded-lg bg-primary shadow-xs border border-secondary transition-shadow duration-100 ease-linear",
isFocusWithin && !isDisabled && "ring-2 ring-brand border-transparent",
// Disabled state styles
isDisabled && "cursor-not-allowed bg-disabled_subtle ring-disabled",
"group-disabled:cursor-not-allowed group-disabled:bg-disabled_subtle group-disabled:ring-disabled",
// Invalid state styles
isInvalid && "ring-error_subtle",
"group-invalid:ring-error_subtle",
// Invalid state with focus-within styles
isInvalid && isFocusWithin && "ring-2 ring-error",
isFocusWithin && "group-invalid:ring-2 group-invalid:ring-error",
context?.wrapperClassName,
wrapperClassName,
)
}
>
{/* Leading icon and Payment icon */}
{Icon && (
)}
{/* Input field */}
{/* Tooltip and help icon */}
{tooltip && !isInvalid && (
)}
{/* Invalid icon */}
{isInvalid && (
)}
{/* Shortcut */}
{shortcut && (
{typeof shortcut === "string" ? shortcut : "⌘K"}
)}
);
};
InputBase.displayName = "InputBase";
interface BaseProps {
/** Label text for the input */
label?: string;
/** Helper text displayed below the input */
hint?: ReactNode;
}
interface TextFieldProps
extends BaseProps,
AriaTextFieldProps,
Pick