Package Exports
- edix
- edix/package.json
Readme
edix
An experimental, framework agnostic, small (~2.5kB) contenteditable state manager.
Motivation
TODO
Demo
Install
npm install edixGetting started
Define your contents declaratively. There are rules you have to follow:
- Direct children of the root are treated as rows. They must be elements, not text.
- You must render
<br/>in empty row (limitation of contenteditable). - TODO
Call
editableon mount, withHTMLElementwhich is the root of editable contents.Update your state with
onChange, which will be called on edit.Call return value of
editableon unmount for cleanup.
Here is an example for React.
import { useState, useEffect, useRef } from "react";
import { editable } from "edix";
export const App = () => {
const ref = useRef<HTMLDivElement>(null);
const [value, setValue] = useState("Hello world.");
useEffect(() => {
// 2. init
const cleanup = editable(ref.current, {
onChange: (v) => {
// 3. update state
setValue(v);
},
});
return () => {
// 4. cleanup
cleanup();
};
}, []);
// 1. render contents from state
return (
<div
ref={ref}
style={{
backgroundColor: "white",
border: "solid 1px darkgray",
padding: 8,
}}
>
{value.split("\n").map((t, i) => (
<div key={i}>{t ? t : <br />}</div>
))}
</div>
);
};Other examples
...and more! Contribution welcome!
Documentation
Contribute
All contributions are welcome. If you find a problem, feel free to create an issue or a PR. If you have a question, ask in discussions.
Making a Pull Request
- Fork this repo.
- Run
npm install. - Commit your fix.
- Make a PR and confirm all the CI checks passed.