All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
Unreleased
0.1.1 - 2026-07-24
Added
- Editable HTML source view in the editor: a new
htmltoolbar group (enabled by default,</>button) toggles between the WYSIWYG surface and a textarea showing the document's pretty-printed HTML. Edits are parsed back into the Tiptap document (debounced), so change events and hidden-input sync keep working while in source mode. In collaborative editors the parsed document is written through the shared Y.Doc so source edits propagate to peers. Disable withextensions={%{html_view: false}}. JS exports:attachHtmlView/3,formatHtml/1,htmlToJSON/2. - Optional CodeMirror 6 surface for the HTML source view: build the hook
with
makeEditorHook({ htmlEditor: CodeMirrorHtmlEditor })(newtiptapex/html-editorentry point, optionalcodemirror/@codemirror/*peers) to upgrade the source textarea to a real code editor with HTML/CSS syntax highlighting, line numbers, and autocompletion. Any object implementing the same surface contract can be plugged in instead.
0.1.0 - 2026-07-22
Added
Tiptapex.Components.tiptapex_editor/1andtiptapex_viewer/1HEEx components withdata-ttx-*-driven configuration, two sync modes (:push_eventand{:hidden_input, field}), per-id namespacedset-contentevents, and an:actionsfooter slot.- JS hooks (
TiptapexEditor,TiptapexViewer) shipped as raw ESM inside the Hex package with@tiptap/*as npm peer dependencies; configurable toolbar (group registry, i18n labels, custom buttons), floating table menu, resizable image/video extensions, font-size/line-height/ background-color/trailing-node/selection-preserve extensions, attachment drag & drop. Tiptapex.Renderer— server-side Tiptap JSON → safe HTML with full node/mark coverage, URL and CSS sanitization, YouTube-only iframes, extensible node/mark registries,to_plain_text/1andheadings/1.Tiptapex.Uploadbehaviour,Tiptapex.Upload.Controllermacro, andTiptapex.Upload.Validatorwith size limits and magic-byte content-type verification;Tiptapex.Upload.LocalDiskconvenience handler.Tiptapex.Collab.Channelmacro implementing the Yjs-over-Phoenix- Channels relay protocol, withauthorize/3and optionalload_state/2/persist_update/3hooks;CollabPluginJS entry point (tiptapex/collaboration) kept separate so yjs stays out of non-collab bundles.Tiptapex.Schema.DocumentEcto type (optionalectodependency).- Themeable stylesheet (
priv/static/tiptapex.css) scoped underttx-*classes with--ttx-*custom properties falling back to daisyUI tokens. - Single-file dev/demo server (
iex -S mix dev).