diff --git a/.changeset/smooth-trainers-walk.md b/.changeset/smooth-trainers-walk.md
new file mode 100644
index 0000000000..28b9a7b580
--- /dev/null
+++ b/.changeset/smooth-trainers-walk.md
@@ -0,0 +1,5 @@
+---
+"@nextui-org/input-otp": patch
+---
+
+Fixing the autofocus functionality in input-otp component(#4250)
diff --git a/apps/docs/content/docs/components/input-otp.mdx b/apps/docs/content/docs/components/input-otp.mdx
index 38e03653b1..854a35ec30 100644
--- a/apps/docs/content/docs/components/input-otp.mdx
+++ b/apps/docs/content/docs/components/input-otp.mdx
@@ -303,6 +303,12 @@ You can customize the styles of the `InputOtp` component using the `classNames`
description: "Allows to set custom class names for the Input slots.",
default: "-"
},
+ {
+ attribute: "autoFocus",
+ type: "boolean",
+ description: "Whether the element should receive focus on render.",
+ default: "false"
+ },
{
attribute: "textAlign",
type: "left | center | right",
diff --git a/packages/components/input-otp/__tests__/input-otp.test.tsx b/packages/components/input-otp/__tests__/input-otp.test.tsx
index c8abb683fb..36f967f183 100644
--- a/packages/components/input-otp/__tests__/input-otp.test.tsx
+++ b/packages/components/input-otp/__tests__/input-otp.test.tsx
@@ -168,6 +168,21 @@ describe("InputOtp Component", () => {
expect(onComplete).toHaveBeenCalledTimes(2);
expect(onComplete).toHaveBeenCalledWith("1234");
});
+
+ it("should autofocus when autofocus prop is passed.", () => {
+ // eslint-disable-next-line jsx-a11y/no-autofocus
+ render();
+ const segments = screen.getAllByRole("presentation");
+
+ expect(segments[0]).toHaveAttribute("data-focus", "true");
+ });
+
+ it("should not autofocus when autofocus prop is not passed.", () => {
+ render();
+ const segments = screen.getAllByRole("presentation");
+
+ expect(segments[0]).not.toHaveAttribute("data-focus", "true");
+ });
});
describe("InputOtp with react-hook-form", () => {
diff --git a/packages/components/input-otp/src/use-input-otp.ts b/packages/components/input-otp/src/use-input-otp.ts
index c7967ad8cd..2604ba6a63 100644
--- a/packages/components/input-otp/src/use-input-otp.ts
+++ b/packages/components/input-otp/src/use-input-otp.ts
@@ -230,6 +230,7 @@ export function useInputOtp(originalProps: UseInputOtpProps) {
ref: inputRef,
name: name,
value: value,
+ autoFocus,
onChange: setValue,
onBlur: chain(focusProps.onBlur, props?.onBlur),
onComplete: onComplete,
@@ -254,6 +255,7 @@ export function useInputOtp(originalProps: UseInputOtpProps) {
setValue,
props.onBlur,
onComplete,
+ autoFocus,
],
);