v0.1.3
<p>A big admin-UX pass: Cmd/Ctrl+K spotlight search replaces the sidebar, per-file metadata fields become a general mechanism, drag-and-drop lands for uploads and reordering, and Users gets the same master-detail treatment as Views.</p>
25 September 2026
Added
- Admin "spotlight" search: a Cmd/Ctrl+K popup with arrow-key navigation, replacing the always-visible sidebar searchbar - the sidebar itself is replaced by a top toolbar (logo, page title, search, and a dropdown menu for former sidebar links).
- Drag-and-drop file upload in the Files tab (hand-rolled, reuses the existing file input's htmx wiring via
DataTransfer- no external library). - Drag-and-drop reordering via
sortablejs: view-assigned fields (View::reorderFields()) and repeater-shaped fieldtypes (blocks,stack, via a newui/repeater/reorderroute). - Per-file custom metadata fields generalized:
App::fileFields(string $type)resolves declared fields fromfiles/{type}/index.jsonper mime-category (image/video/audio/document/etc.), the sameTemplateFieldsmechanism pages/views already use - alt text is now just the first field defined this way, not a hardcoded constructor parameter onPageFile/PageImage. - Users admin page rewritten into the same two-panel master-detail layout as Views; the separate
/admin/user/{username}page is removed. - Per-view tab visibility: a view's
index.jsoncan declare a"tabs"key to restrict which of the built-in editor tabs (data/files/history) it shows. - History tab pagination, fetching one entry past the limit to detect "load more" instead of a fixed 20-entry log.
Fixed
Page::parents()'s ancestor walk (added last release) could spin unbounded on a malformed/relative URL - replaced with a segment-count-bounded walk.SessionRoot::isLoggedIn()now checks for a session cookie before touching session storage, so anonymous visitors no longer triggersession_start()'s file lock just to answer "are you logged in".App::views()now only lists view directories that actually contain anindex.json, excluding template-partial folders likeviews/fields/views/uithat previously polluted the admin's view list.- The file picker converted from a nested
<form>to a plain<div>+ buttons - a form here silently truncated the outer page-data form it renders inside. - Hidden dotfiles (e.g.
.DS_Store) are now skipped when listing a page's files and during rebuild.
Changed
deploy.php's production composer install now passes--classmap-authoritative.- Delete buttons across the admin (files, pages) switched from a labeled button to an icon-only button.
Comments
No comments yet. Be the first!
Loading form…