Modules
The visual editor's Ash domain: the records only the editor writes and reads — its snippets, its change history and the snapshots that history restores from, its review notes — and the two resources with no data layer that back its Studio tables and its SEO form.
Activity source for the visual editor's own record — every change somebody made to a page, layout,
component or error page in the page builder, tagged badge_label: "EDITOR".
The seam the Assistant rail talks to, and an honest default that does not pretend to be an AI.
The default assistant: it restates the request, names the scope it would act on, and says plainly that no model is configured.
The builder's OTP application. It supervises the processes the visual editor keeps (the open
sessions, their history, the rendered palette-card previews and the presence of the people in a
session) and every mishka_installer plugin the package ships (plugins/0): the sidebar page, the
editor's address, the snippet installer, the activity source, the settings and the history release
of a deleted draft. A plugin registers on the event it listens on once it is supervised here.
Whole sections an author drops in one click — a hero, a feature row, a pricing table.
A policy check: the actor may open the builder the row's own section names — its runtime area or
admin:dashboard:code (MishkaCmsCore.Runtime.Authoring.Section.permissions/1).
What a palette card looks like before you drop it — the small document shown when the pointer rests on a card.
Named styles a site can reuse — style once, apply to twenty elements, change it in one place.
One short warning for a snippet that calls something worth reading twice.
The list or map an attribute is holding, read out of a document and written back into one.
The shape and the wording of a review note — what the storage layer is built around.
When an element is on the page at all, without anyone writing Elixir.
One form-control name per independent drop, renumbered the way MishkaCmsBuilder.Ids renumbers
an id.
Sample content for the editor's Assistant thread and its audit list, so those panels can be judged before there is anything real in them.
The Studio's Design tokens tab, as a Gervaz table.
Fills a page's editing history with every state the timeline can draw, so the whole sheet can be looked at without waiting months for the awkward ones to occur naturally.
One open editing session: the working tree plus everything around it — selection, hover, undo history, clipboard, per-node locks, the breakpoint and state being edited.
What happened to the document, in the words a person would use, and the stack that lets them go back.
Writes the edits an editing session holds and no draft does — on every change, on the way out of the editor, and before a reopened session is moved off its draft.
The example list behind a component's Examples modal — curated out of the two sets a kit bundle ships, which are not the same thing and were never reconciled.
Saves a builder section through its resource's own actions.
Colour for the code the editor shows, driven by tokenizers rather than by regular expressions.
Turns the editor's settled entries into durable rows, and reads them back.
One recorded change to a document in the visual editor — the durable half of the editor's history.
The document a history row can restore — gzipped HEEx, in a table of its own.
One DOM id per element, and the references inside a snippet follow when one has to change.
Whether a layout still renders the page it wraps.
Everything the Studio sheet shows — design tokens, presets, the package registry and snippets — behind one behaviour, so the panel is written once and the source can change underneath it.
A MishkaCmsBuilder.Marketplace adapter over the registry this install actually
has: the UI-kit bundles sitting on disk.
The default MishkaCmsBuilder.Marketplace adapter: the design prototype's exact
seed data, in memory.
One design token — the validated shape both the Mock adapter and any real backend must produce.
Naming somebody in a note: @who in the body, and the notification that follows it.
A note left on a document in the visual editor — on one element, or on the page as a whole.
A component in the builder's palette — from the database, or contributed by an extension.
Puts a kit's part in the component it belongs to, when it arrives where none of those holds it.
Where a thing lands — the answer shared by a click, a drag, and a template that arrives on its own.
Drops cached palette-card previews when the component they drew has been recompiled.
Answers runtime:document:editor_url with the visual editor's address for a document.
Saves the snippet an extension ships into the editor's Studio list when a site is set up, on
runtime:provision:snippets (MishkaCmsCore.Runtime.ExtensionProvision, which describes the
payload as MishkaCmsCore.Runtime.ExtensionProvision.snippet_payload/0).
Detaches a deleted draft's editing history from it, so the rows survive and join the live record's own timeline.
Releases the history of an error-page draft a site admin deletes.
Releases the history of an error-page draft a master deletes.
Releases the history of a layout draft a site admin deletes.
Releases the history of a layout draft a master deletes.
Releases the history of a page draft a site admin deletes.
Releases the history of a page draft a master deletes.
The editor's own settings, registered on settings:register (MishkaCmsCore.Settings).
Who else is in this editing session — real Phoenix.Presence on the session's own PubSub topic.
What a component should look like the moment it lands on a page — this site's answer, not the kit's.
Tells the people a note names that it names them.
A page and an error page are never global; a layout and a component can be.
Stops a tenant changing a row that belongs to no site.
The two things a reply's parent has to be.
Refuses a global row about a document that cannot itself be global.
What the builder needs from the review thread: the counter, and getting to an element.
The SEO a page or a layout stores, as the builder's settings modal edits it: a Gervaz form.
A number that says which one of these this is, kept in step when another arrives.
The properties a component draws only while one of its switches is on.
A named piece of markup an author saved out of the visual editor to reuse somewhere else.
The Studio's snippet list, over MishkaCmsBuilder.Snippet.
What a component should SAY the moment it is placed.
O(1) ETS cache of rendered palette-card previews, keyed by the template a card would drop.
What the undo history holds, kept beside the session rather than inside it.
The ETS table behind the page builder's live editing sessions, keyed by session token.
Puts a table around a cell, a row or a table section dropped where no table holds it.
The design tokens a site actually renders from — read out of, and written back into, its own stylesheet rows.
What you apply to one version of a document to get an earlier one back.
A box shadow as the five things an author is actually choosing, and back again.
Composing a component from its own option lists, before anything is placed.
The submit handler for the Studio's "Save as snippet" box.
The page builder's chrome: top bar, the two side panels, the crumb bar, the code drawer and the
overlays — everything around the canvas, which is its own LiveView inside an iframe
(MishkaCmsBuilderWeb.Live.CanvasLive).
The page-builder canvas: the document itself, rendered inside a same-origin iframe with the site's compiled CSS rather than the admin's.
Every region of the page-builder chrome as a function component: the 56px top bar, the two resizable side panels, the crumb bar, the canvas frames, the code drawer, the command palette and the overlay sheets.
The visual editor's addresses, spelled in one place.
The visual editor's routes, mounted like any extension's: the host lists the editor's web module
in config :mishka_cms_core, :extensions, and MishkaCmsCore.ExtensionRouter.extension_routes/1
finds this module beside it.
The visual editor's admin pages — a "sidebar:menus" plugin (MishkaCmsCore.Sidebar).
Everything the builder's Assets sheet draws around its files, shared by both of its views.
A MishkaGervaz table template: the file grid in the builder's Assets sheet.
A MishkaGervaz table template: the file LIST in the builder's Assets sheet.
The visual editor's history, drawn as a MishkaGervaz custom table template: a vertical rail with a bucket-tinted node per change, the assistant's own words where it has them, and a Revert on every row whose document was kept.
A MishkaGervaz custom form template: the composer at the FOOT of the builder's Review sheet.
A MishkaGervaz custom table template: the thread in the builder's Review sheet.
A MishkaGervaz custom form template, and the events its markup sends: the SEO tab of the builder's
settings modal, over MishkaCmsBuilder.SeoSettings.
A MishkaGervaz custom form template: the "Save as snippet" box at the top of the Studio's Snippets tab.
A MishkaGervaz custom table template: the saved-snippet list inside the page builder's Studio.
A MishkaGervaz custom table template: the Design tokens list inside the page builder's Studio.
The UI adapter for the builder's Review panel — the editor's own look, over Gervaz's behaviour.