# Changelog All notable changes to Rapid are documented here. Format follows [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). --- ## [1.2.5] — 2026-07-11 ### Added - Comprehensive `DOCUMENTATION.md` covering installation, configuration, public APIs, frontend editing, security, development and troubleshooting. - Dashboard with Rapid field, page, block usage, registered renderer, and bundle statistics. - Frontend field editing with configurable save URL and permission checks. - CSS framework mappings for Tailwind CSS, Bootstrap 5, and UIkit 3. - Alert, toggle, link preview, gallery, slideshow, columns, and layout renderers, including legacy block support. - Per-field editor alignment, toolbar position, heading levels, inline tools, upload limits, image defaults, and output wrapper configuration. - Security smoke tests for rich text, Raw HTML, URL, attribute, and CSS sanitization. ### Changed - Module suite version updated to `1.2.5` (`125`). - Added `Rapid.module.php` as the primary installer module. The actual field type remains `FieldtypeRapid.module.php`, retaining the required `Fieldtype` class prefix so ProcessWire recognizes it in the field type list. - Block rendering split into reusable value, renderer, attribute, framework, and block-renderer components. - Runtime PHP code is organized under `src/`, public styles and scripts under `assets/`, endpoint helpers are extracted into a reusable trait, and built-in block renderers are split into thematic files. - Editor.js integration moved to a bundled, cache-busted frontend asset with server-side rendering. - Image URLs are normalized for portable storage and resolved for the active page at render time. - Upload configuration is resolved from the exact Rapid field rather than the first Rapid field on a template. - Swiper updated to 14.0.5 and vulnerable transitive `uuid` versions overridden with 11.1.1. ### Security - Rich text and Raw block HTML are sanitized with explicit element and attribute allowlists. - Unsafe URL schemes, event handlers, executable attachments, CSS declaration injection, and unsafe SVG content are rejected. - Link preview requests allow only public HTTP/HTTPS targets, reject private and reserved IPv4/IPv6 addresses, disable redirects, and limit response size. - Frontend save nonces are bound to the authenticated user and expire after one hour. - Save requests validate payload shape, size, permissions, and field assignment to the page template. - Internal save exceptions are logged without exposing implementation details to clients. ### Fixed - Custom frontend save URLs are now used consistently by both the editor and request hook. - External attachment URLs retain their original host. - Dashboard assets are returned correctly instead of being left behind unreachable code. - Multiple Rapid fields on one template retain their independent upload restrictions. ## [1.0.2] — 2026-04-27 ### Fixed - **`ProcessRapidFrontend`** — PHP warning `Attempt to read property "url" on null` in Adminer and other non-PW request contexts. `$this->wire('page')` can return `null` when the request is not routed through ProcessWire; accessing `->url` on `null` produced a fatal-level warning. Added a null-guard before the property read. - **`js/dist/editor.js`** — `TypeError: can't access property "blocks", y is undefined` on first keystroke in the admin editor. `onChange` was firing before Editor.js finished initializing (`isReady` promise not yet resolved), causing `api.saver.save()` to fail while `BlockManager` was still `undefined`. Added an `editorReady` flag that is set to `true` inside `isReady.then()` and checked at the top of the `onChange` handler. ### Changed - **`rapid.css`** — Integrated with AdminThemeUikit Design System. All hardcoded hex colors replaced with `--pw-*` CSS custom properties. Added `--rapid-*` token block on `:root` for project-level overrides. Dark mode is automatic via CSS `light-dark()` — no media queries or extra classes needed. Affected components: table, code, quote, warning, checklist, attaches, embed, gallery, toggle, link preview, alert variants. - **`js/editor.css`** — Same design system integration for the admin editor. All hardcoded colors replaced with `--pw-*` variables. Added overrides for Editor.js-injected `