@emdash-cms/admin@0.37.0
Minor Changes
-
#2899
595a6b1Thanks @khoinguyenpham04! - Adds Replace image to the Media Library for ready JPEG, PNG, and WebP files stored by EmDash.Choose a same-format file to update every existing use of an image while preserving its media ID, filename, URL, alt text, caption, and location. The replacement can use different dimensions or an aspect ratio from the original. EmDash overwrites the original bytes and clears the focal point; it does not retain the previous file. The action works with local disk, R2, and S3-compatible storage.
-
#2905
de8b03aThanks @khoinguyenpham04! - Adds in-context Media Library asset editing to admin image pickers, image fields, and rich text
images and galleries. Editors can update asset metadata and focal points, create and select cropped
copies, or replace original image data while staying in the content editor. Gallery images also
support keyboard reordering. -
#2861
05d5596Thanks @khoinguyenpham04! - Adds cropping for JPEG, PNG, and WebP images stored by EmDash on local disk, Cloudflare R2, or S3-compatible storage.Move and resize a rule-of-thirds crop frame with corner handles for fixed ratios and eight handles for Freeform. Choose the original ratio, Freeform, or a common aspect ratio. Create cropped copy creates a separate media item with any ratio and names it for the selected ratio or output dimensions. Replace original uses the original ratio and replaces the existing item under the same ID and URL, so every reference uses the cropped image without rewriting or republishing content. Local media and responsive renditions revalidate their stable URLs so sites load the replacement instead of keeping a stale cached image. The original bytes and crop history are not retained.
-
#2900
9def325Thanks @khoinguyenpham04! - Adds Media Library browsing and inline uploads to admin media pickers. Editors can search, filter
by type, browse folders, switch between grid and list views, use numbered pages, and select media
from configured providers or a direct URL without leaving the content editor.Uploads appear in the picker with an uploading or failed status. Successful uploads become
selected media cards, and gallery selections can be reordered before they are added. -
#2969
9a66ff0Thanks @khoinguyenpham04! - Adds drag-and-drop uploads to empty Featured Image and OG Image fields in the content editor. Drop one image to upload and select it, or click the dashed control to choose an image from the media picker. Upload progress and errors appear inline. -
#2746
c7b6fdfThanks @ascorbic! - AddsDirectPdsClientfor reading package profiles and releases with AT Protocol repository proofs, and updates experimental decentralized registry installs and updates to verify current signed records directly from the publisher's PDS.Aggregator record integrity
Install and update reject aggregator-supplied profile or release metadata whose URI or CID does not match the publisher's signed records. The server returns
AGGREGATOR_RECORD_MISMATCHbefore fetching the artifact or requesting consent.Publisher identity display
The admin treats handle resolution as an advisory identity signal. It keeps the install button disabled while attempting to resolve the package DID back to a handle, then blocks installation when
resolveDidToHandle()conclusively returns"invalid". An indeterminate result caused by a network failure, unsupported DID method, or missing handle displays the publisher DID and does not block installation.Install and update trust the publisher DID and the signed repository proofs for the profile and release records. A handle is display metadata and is not an authorization or record-integrity input.
Provenance and release policy
The installer applies the signed profile's release policy, independently fetches and verifies supplied Sigstore/SLSA provenance, and binds moderation labels to the exact profile or release CID. Missing required provenance and any supplied provenance that is unavailable, malformed, mismatched, or unsupported block installation and updates. Artifact checksums, archive paths, bundle limits, manifest identity, and version use the same verification rules as the registry release tooling.
The verification package also exports
inspectPackageReleaseRecordsfor validating signed records and policy before artifact and provenance evidence is available.Registry install and update consent now show the exact verified profile and release CIDs, signed publisher policy, and provenance status. Install consent uses permissions and MCP tools read from the verified bundle rather than the aggregator's record copy.
Install, update, and delegated-release verification require lowercase base32 multibase
sha2-256multihashes for package artifacts and provenance documents. The plugin CLI already produces this format. The authenticated image-artifact proxy still accepts legacy bare hexadecimal SHA-256 checksums for display-only images.
Patch Changes
-
#2895
76946e4Thanks @ismail-rt! - Fixes admin “View published” and “Live View” links so translated entries include the locale prefix required by the site’s Astro i18n routing configuration. -
#2931
6676283Thanks @khoinguyenpham04! - Fixes the editor image settings panel overflowing at narrow widths and aligns its fields, help, and actions with the standard editor sidebar.Changing image alignment or text preserves the existing display size. Reset clears custom dimensions, constrained editor images retain their aspect ratio, floated images stay visible, and None and Center have distinct positions.
Preserves image alignment through the exported Portable Text converters. Image settings offer None, Left, Center, and Right; existing imported Wide and Full values and public theme hooks are retained.
-
#2963
85f8b5aThanks @khoinguyenpham04! - Updates admin editor paragraphs with tighter line spacing, clearer paragraph breaks, and 16px text on mobile. Wrapped writing hints no longer overlap following content and use softer colours in both themes. -
#2761
8fb13cfThanks @khoinguyenpham04! - Adds a dedicated Used in tab to media details, keeping file information and focal-point controls separate from usage references. -
#2922
096cd91Thanks @danielmlr! - Completes the German admin translations: every string in the admin catalog now has a German translation, so German-speaking editors no longer see English in the media, publishing, byline, editor and plugin screens. -
#2126
7887577Thanks @swissky! - Fixes a silent draft-overwrite in the page editor. The editor now echoes the entry's_revtoken on save and autosave, so the server rejects a save that is based on a stale read with a 409 conflict instead of silently replacing a newer draft revision. Editors who hit a conflict now see a clear error and can reload instead of losing work. -
#2902
87c7884Thanks @danielmlr! - Fixes the content editor refusing every later save once another writer changed the same entry, so what you typed is kept and can be saved over the newer version. Autosave pauses for that entry until you decide, so your copy never goes over the other version without you choosing it. -
#2865
5f9eb67Thanks @khoinguyenpham04! - Updates sidebar navigation icons to use Phosphor's filled style for the active page. -
#2761
8fb13cfThanks @khoinguyenpham04! - Updates Media Library grid cards to show filenames and file formats below larger previews. -
#2972
d267a2cThanks @danielmlr! - Fixes editor changes being silently discarded when the publication date of a published entry is saved. Unsaved changes are now written first, so the entry keeps them and the save indicator no longer reports "Saved" over lost work. -
#2939
c81e5e7Thanks @ascorbic! - Fixes the admin rich-text editor replacing payload-less custom blocks with an[Unknown block type: …]paragraph during autosave. Custom blocks, existing block and span keys, supported marks, and link definitions survive editor round trips, and the editor does not save a synthetic trailing paragraph.Applications using the exported converters can pass
{ preserveIdentity: true }toportableTextToProsemirror()and addportableTextIdentityExtensionsto their TipTap schema for the same lossless behavior. The default conversion remains compatible with standard ProseMirror schemas. -
#2830
965bf33Thanks @khoinguyenpham04! - Fixes image fields and Portable Text editors so they preserve direct image URLs and external provider identities, allowing selected images to continue rendering after saving or replacement. -
#2860
afa81c5Thanks @ascorbic! - Fixes Publish saving and awaiting the editor's latest changes before making content live. Validation errors, failed saves, and revision conflicts now stop publishing instead of promoting stale draft data. -
#2858
bb8b087Thanks @ascorbic! - Fixes sandboxedcontent:beforeSavehooks being unable to reject content creation or updates.Return a version 1 sandbox hook result with a
SAVE_REJECTEDerror to stop the save and show the reason to the editor:return { __emdashSandboxHookResult: true, version: 1, error: { code: "SAVE_REJECTED", reason: "Add a title before saving.", }, };
The reason must contain 1–500 characters of plain text. Invalid error results and unexpected sandbox exceptions stop the save with a generic hook error instead of exposing internal details.
-
#2891
98ef920Thanks @khoinguyenpham04! - Updates the content editor's Publish section so authors can distinguish the live version from draft changes and choose immediate or scheduled publishing from one contextual action menu.Publishing dates and schedules display in the browser's local time zone while stored timestamp values remain unchanged.
Schedule and unschedule responses now return the current revision token so subsequent editor saves retain optimistic-concurrency protection.
-
#2952
b2da4f2Thanks @khoinguyenpham04! - Fixes Media Library pagination scrolling out of view by keeping its controls visible at the bottom while browsing media. -
#2761
8fb13cfThanks @khoinguyenpham04! - Updates image previews to show a theme-aware checkerboard behind transparent areas. -
#2961
8efac35Thanks @khoinguyenpham04! - Fixes excessive vertical space between images and surrounding text in the admin editor. -
#2807
013156dThanks @LeanderG! - Fixes the admin Trash tab on multilingual sites, where it listed trashed entries from every locale regardless of the locale picker. Trash now follows the same locale filter as the All tab and shows a Locale column, so switching locales narrows the trash to that locale's entries.GET /_emdash/api/content/{collection}/trashaccepts an optionallocalequery parameter to scope the listing, and each item in the response now carrieslocaleandtranslationGroup. Omittinglocalestill returns every locale, so existing API callers are unaffected. -
Updated dependencies [
ecdba4d,66aeecd,52fffdc,3b124f2,920e1f3,e0e60ba,c7b6fdf]:- @emdash-cms/plugin-types@0.3.1
- @emdash-cms/registry-client@0.5.0
- @emdash-cms/blocks@0.37.0