edix
v0.0.1
Published
An experimental, framework agnostic, small (~2.5kB) contenteditable state manager.
Downloads
75
Maintainers
Readme
edix
An experimental, framework agnostic, small (~2.5kB) contenteditable state manager.
Motivation
TODO
Demo
Install
npm install edix
Getting 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
editable
on mount, withHTMLElement
which is the root of editable contents.Update your state with
onChange
, which will be called on edit.Call return value of
editable
on 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.