+ );
+}
+```
+
+
\ No newline at end of file
diff --git a/packages/react/src/input-otp/demo/basic.md b/packages/react/src/input-otp/demo/basic.md
new file mode 100644
index 00000000..c8a4bf56
--- /dev/null
+++ b/packages/react/src/input-otp/demo/basic.md
@@ -0,0 +1,19 @@
+
+
+### Basic
+
+A basic OTP input.
+
+```jsx live
+() => {
+ const [value, setValue] = React.useState('');
+ return (
+
+ setValue(val)} />
+
Entered: {value}
+
+ );
+}
+```
+
+
diff --git a/packages/react/src/input-otp/demo/disabled.md b/packages/react/src/input-otp/demo/disabled.md
new file mode 100644
index 00000000..28b98ecc
--- /dev/null
+++ b/packages/react/src/input-otp/demo/disabled.md
@@ -0,0 +1,13 @@
+
+
+### Disabled
+
+Disable the OTP input using the `disabled` prop.
+
+```jsx live
+() => {
+ return ;
+}
+```
+
+
\ No newline at end of file
diff --git a/packages/react/src/input-otp/demo/formatter.md b/packages/react/src/input-otp/demo/formatter.md
new file mode 100644
index 00000000..f037fafe
--- /dev/null
+++ b/packages/react/src/input-otp/demo/formatter.md
@@ -0,0 +1,29 @@
+
+
+### Controlled & Formatter
+
+Use `value` for controlled mode and `formatter` to restrict input.
+
+```jsx live
+() => {
+ const [value, setValue] = React.useState('');
+
+ // Only allow digits
+ const formatter = (val) => val.replace(/\D/g, '');
+
+ return (
+
+
+
Value: {value}
+
Only digits are allowed
+
+ );
+}
+```
+
+
\ No newline at end of file
diff --git a/packages/react/src/input-otp/demo/length.md b/packages/react/src/input-otp/demo/length.md
new file mode 100644
index 00000000..4de32988
--- /dev/null
+++ b/packages/react/src/input-otp/demo/length.md
@@ -0,0 +1,28 @@
+
+
+### Length
+
+Set the number of OTP cells using the `length` prop.
+
+```jsx live
+() => {
+ return (
+
+
+
4 digits
+
+
+
+
6 digits (default)
+
+
+
+
8 digits
+
+
+
+ );
+}
+```
+
+
\ No newline at end of file
diff --git a/packages/react/src/input-otp/demo/mask.md b/packages/react/src/input-otp/demo/mask.md
new file mode 100644
index 00000000..25137214
--- /dev/null
+++ b/packages/react/src/input-otp/demo/mask.md
@@ -0,0 +1,30 @@
+
+
+### Mask
+
+Use `mask` to hide the input values (useful for PIN codes). You can also set a custom mask character.
+
+```jsx live
+() => {
+ const [value, setValue] = React.useState('');
+ return (
+
+
+
Default mask (•)
+
+
+
+
Custom mask character (*)
+
+
+
+
No mask (default)
+
+
+
Value: {value}
+
+ );
+}
+```
+
+
\ No newline at end of file
diff --git a/packages/react/src/input-otp/demo/separator.md b/packages/react/src/input-otp/demo/separator.md
new file mode 100644
index 00000000..d0ff2cf0
--- /dev/null
+++ b/packages/react/src/input-otp/demo/separator.md
@@ -0,0 +1,31 @@
+
+
+### Separator
+
+Customize the separator between cells using the `separator` prop.
+
+```jsx live
+() => {
+ return (
+
+
+
Default (no separator)
+
+
+
+
Dash separator
+
+
+
+
Custom separator element
+ /}
+ />
+
+
+ );
+}
+```
+
+
\ No newline at end of file
diff --git a/packages/react/src/input-otp/demo/size.md b/packages/react/src/input-otp/demo/size.md
new file mode 100644
index 00000000..b346c7f6
--- /dev/null
+++ b/packages/react/src/input-otp/demo/size.md
@@ -0,0 +1,19 @@
+
+
+### Size
+
+Three sizes are available: `sm`, `md` (default), and `lg`.
+
+```jsx live
+() => {
+ return (
+