Custom nodes in Word content controls
This example stores a custom legal citation as a Word content control. You can insert, edit, and save the citation.
Run the example
From the repository root, run:
bun install
bun run dev:custom-nodes
Open http://localhost:5179.
Open any .docx, put the caret somewhere, and click Insert citation.
What to read
| File | What it shows |
|---|---|
src/citation.ts |
defineCustomNode: identity, tag prefix, recognition, chip color, sidebar card |
src/App.tsx |
Registering the module, CustomNodeChrome, the context menu, insert and update |
The round trip
Save the document and open it in Word. The citation is an ordinary content control there, so Word shows its text and gives it back untouched. Reopen the file here and fromDocx recognizes it from the same w:tag.
A reader without your definition registered sees the control's content rendered literally, which is also what Word does. Nothing is lost either way.
Two things the API makes you handle
Recognition input is untrusted. attrs and text in fromDocx came out of a file whoever sent it controls end to end. They are rendered as text and nothing builds a URL or DOM from them.
Writes report refusal. insertCustomNode and updateCustomNode return an ExecResult rather than throwing, so a locked range or a missing caret gives you ok: false and a reason to show.
Known limit
There is no schema-driven edit dialog. The host owns the form; updateCustomNode rewrites a node in place from a node id, which is what src/App.tsx does.
Next steps
- Follow the quickstart to load, edit, and save a document in your own app.
- Read installation options for framework-specific setup.
This page renders the example’s README from eigenpal/docx-editor at release v2.26.0. Read it in the repository for the version you have checked out.
