Skip to content

ChrisUser/react-basic-contenteditable

React Basic Contenteditable

React Basic Content Editable

A React component that allows you to create an editable area in your application. It's perfect for situations where you need to provide a user-friendly, in-place editing functionality.

Installation

Install via npm

npm install --save react-basic-contenteditable

or yarn

yarn add react-basic-contenteditable

Usage

Live demo at https://chrisuser.github.io/react-basic-contenteditable/

Example

import ContentEditable from "react-basic-contenteditable"

const App = () => {
  const [content, setContent] = useState("")

  return (
    <div>
      <div>{content}</div>
      <ContentEditable
        placeholder="Type here"
        containerClassName="container-class"
        contentEditableClassName="contenteditable-class"
        placeholderClassName="placeholder-class"
        onChange={(content) => setContent(content)}
      />
    </div>
  )
}

export default App

Ref & Imperative API

The component supports forwardRef to expose an imperative handle for programmatic control.

import { useRef } from "react"
import ContentEditable from "react-basic-contenteditable"
import type { ContentEditableHandle } from "react-basic-contenteditable"

const App = () => {
  const editorRef = useRef<ContentEditableHandle>(null)

  return (
    <>
      <ContentEditable ref={editorRef} placeholder="Type here" />
      <button onClick={() => editorRef.current?.focus()}>Focus</button>
      <button onClick={() => editorRef.current?.insertAtCaret("๐Ÿ‘‹")}>
        Insert emoji
      </button>
      <button onClick={() => editorRef.current?.clear()}>Clear</button>
    </>
  )
}

Available methods:

Method Return Description
focus() void Focuses the editable element
blur() void Removes focus from the editable element
insertAtCaret(text) void Inserts text at the current cursor position
clear() void Clears all content
getCaretPosition() number Returns the current cursor offset

Props

All props are optional, that's how you can fully customize it!

Name Optional Type Description
containerClassName โœ”๏ธ string Custom classes for the wrapper div
contentEditableClassName โœ”๏ธ string Custom classes for the input element
placeholderClassName โœ”๏ธ string Custom classes for the placeholder text
charsCounterClassName โœ”๏ธ string Custom classes for the character counter text (if maxLength is specified)
placeholder โœ”๏ธ string Input placeholder text
disabled โœ”๏ธ boolean Flag that disables the input element
maxLength โœ”๏ธ number Indicates the maximum number of characters a user can enter
autoFocus โœ”๏ธ boolean Flag to automatically focus the input element on mount
tagName โœ”๏ธ string HTML tag for the editable element (default: "div")
multiLine โœ”๏ธ boolean Allow multi-line input (default: true). Set to false for single-line
sanitize โœ”๏ธ (content: string) => string Callback to sanitize content before onChange fires
updatedContent โœ”๏ธ string Text injected from parent element into the input as the current value
onContentExternalUpdate โœ”๏ธ (content) => void Method that emits the injected content by the updatedContent prop
onChange โœ”๏ธ (content, meta?) => void Emits current content and optional { caretPosition } metadata
onKeyUp โœ”๏ธ (e) => void Method that emits the keyUp keyboard event
onKeyDown โœ”๏ธ (e) => void Method that emits the keyDown keyboard event
onFocus โœ”๏ธ (e) => void Method that emits the focus event
onBlur โœ”๏ธ (e) => void Method that emits the blur event
onPaste โœ”๏ธ (e) => void Method that emits the paste event

The component also accepts any standard HTML attribute (id, data-*, tabIndex, spellCheck, style, className, etc.) which will be forwarded to the editable element.

Types

The package exports the following TypeScript types:

import type { ContentEditableHandle, ContentEditableProps } from "react-basic-contenteditable"

Keyboard shortcuts

  • Undo: Ctrl + Z (Windows/Linux) / Cmd + Z (macOS)
  • Redo: Ctrl + Y / Ctrl + Shift + Z (Windows/Linux) / Cmd + Shift + Z (macOS)

Contribution

If you have a suggestion that would make this component better feel free to fork the project and open a pull request or create an issue for any idea or bug you find.
Remeber to follow the Contributing Guidelines.

Licence

React Basic Contenteditable is MIT licensed.

About

React contenteditable component. Super-customizable!

Topics

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Contributors