diff --git a/.changeset/empty-helper-wrapper-div.md b/.changeset/empty-helper-wrapper-div.md
new file mode 100644
index 0000000000..ca62626cd4
--- /dev/null
+++ b/.changeset/empty-helper-wrapper-div.md
@@ -0,0 +1,6 @@
+---
+"@nextui-org/select": patch
+"@nextui-org/input": patch
+---
+
+- Fixed a UI sliding issue caused by the helper wrapper being rendered when `isInvalid` was false but `errorMessage` was present
diff --git a/packages/components/input/src/input.tsx b/packages/components/input/src/input.tsx
index 10c5ecf10e..91dadea0e9 100644
--- a/packages/components/input/src/input.tsx
+++ b/packages/components/input/src/input.tsx
@@ -43,15 +43,18 @@ const Input = forwardRef<"input", InputProps>((props, ref) => {
}, [isClearable, getClearButtonProps]);
const helperWrapper = useMemo(() => {
- if (!hasHelper) return null;
+ const shouldShowError = isInvalid && errorMessage;
+ const hasContent = shouldShowError || description;
+
+ if (!hasHelper || !hasContent) return null;
return (
- {isInvalid && errorMessage ? (
+ {shouldShowError ? (
{errorMessage}
- ) : description ? (
+ ) : (
{description}
- ) : null}
+ )}
);
}, [
diff --git a/packages/components/input/src/textarea.tsx b/packages/components/input/src/textarea.tsx
index ace8ae4b53..16b22cb5a7 100644
--- a/packages/components/input/src/textarea.tsx
+++ b/packages/components/input/src/textarea.tsx
@@ -136,6 +136,9 @@ const Textarea = forwardRef<"textarea", TextAreaProps>(
return {content}
;
}, [startContent, inputProps, endContent, getInnerWrapperProps]);
+ const shouldShowError = isInvalid && errorMessage;
+ const hasHelperContent = shouldShowError || description;
+
return (
{shouldLabelBeOutside ? labelContent : null}
@@ -143,13 +146,13 @@ const Textarea = forwardRef<"textarea", TextAreaProps>(
{shouldLabelBeInside ? labelContent : null}
{innerWrapper}
- {hasHelper ? (
+ {hasHelper && hasHelperContent ? (
- {isInvalid && errorMessage ? (
+ {shouldShowError ? (
{errorMessage}
- ) : description ? (
+ ) : (
{description}
- ) : null}
+ )}
) : null}
diff --git a/packages/components/select/src/select.tsx b/packages/components/select/src/select.tsx
index 87ee33d17a..da29639daf 100644
--- a/packages/components/select/src/select.tsx
+++ b/packages/components/select/src/select.tsx
@@ -53,15 +53,18 @@ function Select(props: Props, ref: ForwardedRef {
- if (!hasHelper) return null;
+ const shouldShowError = isInvalid && errorMessage;
+ const hasContent = shouldShowError || description;
+
+ if (!hasHelper || !hasContent) return null;
return (
- {isInvalid && errorMessage ? (
+ {shouldShowError ? (
{errorMessage}
- ) : description ? (
+ ) : (
{description}
- ) : null}
+ )}
);
}, [