JSPM

use-caret-position

0.0.2
  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 135
  • Score
    100M100P100Q87258F
  • License MIT

A custom React hook for grabbing the caret position in an input field

Package Exports

  • use-caret-position

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (use-caret-position) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

use-caret-position

A custom React hook for grabbing the caret position in an input field.

Install

npm i use-caret-position
yarn add use-caret-position

Usage

Refer to src/app/index.js for common usage examples.

At a high-level, you pass the hook an input ref.

import useCaretPosition from 'use-caret-position'
const { x, y, getPosition, getSelection } = useCaretPosition(inputRef)

You get an x and y coordinate that you can use to display a marker with. I'd recommend using CSS variables for this. This is what the demos do. getPosition and getSelection are functions you can trigger whenever needed to update the x and y positions.

getPosition returns the position at selectionStart for an input. getSelection returns a midpoint between selectionStart and selectionEnd for an input. It's tricky to provide an exact accurate x and y for the caret in all scenarios so often you might need to adjust the positioning slightly with CSS transforms.

Development

Package is built with parcel-bundler. To get to work, use yarn dev.

To work with the test app, you'll also need to run yarn and yarn dev from within src/app.

To work with the published node module directly, use npm link in the root of the repo.

Then use npm link use-caret-position within src/app.


Made in haste by @jh3y 2020 😅