# 28-Jul-2026 — H1–H6 headings and extract TipTap/composer helpers [ref #303](https://github.com/nbarrett/ngx-ramblers/issues/303)

## [build 801](https://github.com/nbarrett/ngx-ramblers/actions/runs/30386038443) — [commit 004a302](https://github.com/nbarrett/ngx-ramblers/commit/004a3023a1b1b252905ac9fc9f7eb2185ec2b662)

_____

## What's new

The shared TipTap editor now supports the full set of heading levels used on the site (Heading 1 through Heading 6), so existing content and paste that use any of those levels keep working in the toolbar and in the document. Styles for the editor live in a dedicated stylesheet next to the component, and paste clean-up helpers are shared pure functions rather than buried in the component class.

Email composer helpers that used to sit in the model file (merge-field labels, example values, divider HTML, default fragment order, and related builders) now live under `functions/`, so the model keeps types, enums and catalogues only.

## At a glance

- Toolbar offers Heading 1–6 plus Normal text
- TipTap StarterKit accepts heading levels 1–6 (matches content already stored on sites)
- Editor styles moved out of the TypeScript file into `tiptap-markdown-editor.sass`
- Paste sanitisation for HTML and markdown is in `tiptap-paste.ts`
- Merge-field brace stripping is shared (`stripMergeFieldBraces`) so insert and edit paths stay consistent
- Friendly labels and example values for merge fields and link tokens come from `functions/merge-fields.ts`
- Divider HTML, fragment builders, recycled-tracking URL scan and default composer state come from `functions/email-composer.ts`
- Fragment-order state fields are named via `EmailComposerFragmentOrderField` instead of an ad hoc string union