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.
While the version is in the 0.x range, any release MAY contain breaking
changes; the minor version is bumped for each one. See
CONTRIBUTING.md for the full policy.
Unreleased
0.1.0-beta.1 - 2026-06-02
First public beta. API may shift before 0.1.0 based on early
feedback. Pin tightly ({:athanor, "== 0.1.0-beta.1"}) if integrating
during the beta window.
Added
Athanor.Tree— pure-data manipulation of the editor content tree (insert, remove, move, find, withString.t()-keyed node ids and child-zone slots).Athanor.Component— behaviour +use Athanor.Componentmacro for declaring page-builder components. Optional callbacks:metadata/0,default_props/0,required_props/0,validate/1,fields/0,resolve_fields/2,resolve_data/2,render/3,editor_form/0,child_zones/1. Inspired by Puck.js's dynamic fields + data hooks.Athanor.Registry— runtime lookup of component modules bytypestring, sourced fromconfig :athanor, :components.Athanor.Ctx— render/edit context struct carryingaccount_id,brand_id,edit_mode?, callbacks, and a freeform:extramap.Athanor.Renderer— dispatches each node in the tree to its component'srender/3and wraps the result in edit chrome whenctx.edit_mode?.Athanor.Fields— auto-renders a component's field schema (text, textarea, number, select, color, checkbox, custom) into HTML form inputs. Custom fields delegate to consumer-provided LiveComponents.Athanor.Field— behaviour-style contract for custom field LiveComponents (value/on_change/ctx/label/opts assigns).Athanor.AutoEditorForm— LiveComponent wrappingAthanor.Fieldswith the form/state plumbing (phx-change, custom field callbacks).Athanor.Editor— function components (canvas,components_panel,config_panel,zone_picker_modal,shell) for composing custom editor layouts, plus a@behaviourfor the consumer LiveView.Athanor.Editor.Live— turn-keyusemacro injectingmount/3,render/1,handle_event/3,handle_info/2. Consumer implementsload/3andsave/2; optional overrides forrender_header/1andrender_top_bar_actions/1.Athanor.Editor.State— typed struct for editor state (content, metadata, ctx, selected_component_id, preview_viewport, show_components_panel, column_picker, open_sections).- Built-in primitive components:
Athanor.Components.Button,Athanor.Components.Columns,Athanor.Components.Divider,Athanor.Components.Heading,Athanor.Components.Text. Athanor.Components.Formatting+Athanor.Components.Formatting.EditorForm— shared formatting tab (alignment / colors / padding / margin / borders) reused across every component's config panel. Color swatches ship with a Clear button (pure client-side, no JS hooks).- Page settings as a regular
Athanor.Component: consumers pass any Athanor.Component module as the:page_settings_componentopt and the library auto-renders itsfields/0at the top of the sidebar.