Skip to content

🧩 A lightweight utility to safely handle paste & keydown events on number input fields in Safari.

License

Notifications You must be signed in to change notification settings

algrith/safari-numfix

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

10 Commits

Repository files navigation

🧩 A lightweight utility to safely handle paste and keydown events on number input fields in Safari.

Safari has a sanitization deficiency in <input type="number"> fields compared to modern browsers. It allows non-numeric characters and multiple decimal points, leading to unexpected or invalid values. This package provides a browser-aware workaround that intercepts paste & keydown events, corrects invalid numeric formats, and updates the input value correctly.


Algrith Safari Number Fix (safari-numfix) is released under the MIT license.npm downloads/month

🚀 Features

  • ✅ Ignores paste actions that include non-numeric characters
  • ✅ Fixes Safari-specific paste behavior for number inputs
  • ✅ Works with React, Vue, Angular, or plain JavaScript
  • ✅ Maintains accurate caret position on insert
  • ✅ Ensures only one decimal point is allowed
  • ✅ Restricts non-numeric entries on keydown
  • ✅ TypeScript support

📦 Installation

npm install @algrith/safari-numfix # or yarn add @algrith/safari-numfix

🔧 Usage

ReactJs

import{keyDownEventHandler,pasteEventHandler}from'@algrith/safari-numfix';consthandleChange=(event: React.ChangeEvent<HTMLInputElement>)=>{console.log(event.target.value);};<inputonPaste={(e)=>pasteEventHandler(e,handleChange)}onKeyDown={keyDownEventHandler}onChange={handleChange}type="number"/>

VueJs

<script setup>import{keyDownEventHandler, pasteEventHandler } from'@algrith/safari-numfix';consthandleChange= (e) =>{console.log(e.target.value);};</script> <template> <input@paste="(e) => pasteEventHandler(e, handleChange)"@keydown="keyDownEventHandler"@input="handleChange"type="number" /> </template>

Angular

import{keyDownEventHandler,pasteEventHandler}from'@algrith/safari-numfix';onKeyDown(event: KeyboardEvent){keyDownEventHandler(event);};onPaste(event: ClipboardEvent){pasteEventHandler(event,this.onChange.bind(this));}

VanillaJs

<inputid="numInput" type="number" /><scripttype="module">import{keyDownEventHandler,pasteEventHandler}from'https://cdn.skypack.dev/@algrith/safari-numfix';constinput=document.getElementById('numInput');input.addEventListener('keydown',keyDownEventHandler);input.addEventListener('paste',(e)=>{pasteEventHandler(e,(event)=>{console.log('Updated value:',event.target.value);});});</script>

TypeScript Support

Types files can be found at https://github.com/algrith/safari-numfix/tree/main/src/types.ts.

Contributing

About

🧩 A lightweight utility to safely handle paste & keydown events on number input fields in Safari.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published