v3.79.0

payloadcms/payloadv3.79.0Mar 4, 2026by denolfe

AI Summary

Upgraded the Lexical rich text editor from 0.35.0 to 0.41.0 and separated block icon configuration. It also adds i18n translations for modular dashboards and improves German translations.

Key Highlights

  • Upgraded Lexical rich text editor to version 0.41.0
  • Separated configuration for Lexical block icons and thumbnails
  • Added i18n translations for modular dashboards
  • Improved German translations for consistency and accuracy

Breaking Changes

  • Renamed `Widget.ComponentPath` to `Widget.Component` and typed as `PayloadComponent`

New Features

  • Lexical upgrade to 0.41.0
  • Separate block icon/thumbnail configuration
  • Modular dashboard translations
  • Plugin-SEO file renaming

Full Release Notes

## [v3.79.0](https://github.com/payloadcms/payload/compare/v3.78.0...v3.79.0) (2026-03-04)


### πŸš€ Features

* **richtext-lexical:** separate configuration for lexical block icons ([#15632](https://github.com/payloadcms/payload/issues/15632)) ([f0498f2](https://github.com/payloadcms/payload/commit/f0498f2))
* **richtext-lexical:** upgrade lexical from 0.35.0 to 0.41.0 ([#15760](https://github.com/payloadcms/payload/issues/15760)) ([ba3bd74](https://github.com/payloadcms/payload/commit/ba3bd74))
* **translations:** add i18n translations for modular dashboards ([#15004](https://github.com/payloadcms/payload/issues/15004)) ([cef2838](https://github.com/payloadcms/payload/commit/cef2838))

---

**Separate Block Icon Configuration (richtext-lexical)** β€” Configure different images for Lexical block icons and block drawer thumbnails independently. Previously, `imageURL` served both contexts, forcing a compromise between a good 20x20px icon and a good drawer thumbnail. The new `images` property supports separate `icon` and `thumbnail` values with automatic fallback. Fully backwards compatible β€” `imageURL` still works but is deprecated. [#15632](https://github.com/payloadcms/payload/pull/15632)

<img width="562" height="370" alt="image" src="https://github.com/user-attachments/assets/912e1482-0b37-40f7-a144-e21e43fc7aec" />

```ts
const QuoteBlock: Block = {
  slug: 'quote',
  images: {
    icon: 'https://example.com/icons/quote-20x20.svg',
    thumbnail: { url: 'https://example.com/thumbnails/quote-480x320.jpg', alt: 'Quote block' },
  },
  fields: [...],
}
```

**Lexical Upgrade 0.35.0 β†’ 0.41.0 (richtext-lexical)** β€” Upgrades the Lexical rich text editor dependency from v0.35.0 to v0.41.0. Includes upstream fixes like `normalizeMarkdown` ([facebook/lexical#7812](https://github.com/facebook/lexical/pull/7812)). All Lexical breaking changes are handled internally by Payload β€” no action required for standard usage. If you installed `lexical` manually, update it to 0.41.0 (though using the re-exported versions from `@payloadcms/richtext-lexical/lexical/*` is recommended). [#15760](https://github.com/payloadcms/payload/pull/15760)

**Modular Dashboard Translations (translations)** β€” Adds i18n translation support for the Modular Dashboards feature, covering all dashboard widget buttons and error messages. Previously, dashboard UI elements lacked translation keys, making them inaccessible for non-English users. Also updates the automatic translation script to use GPT-4.1 for improved cost efficiency. [#15004](https://github.com/payloadcms/payload/pull/15004)

<img width="830" height="399" alt="image" src="https://github.com/user-attachments/assets/ca6cd857-e0dd-47b0-8b36-6242396f2c73" />

### πŸ› Bug Fixes

* restoreVersion validation for localized required fields ([#15821](https://github.com/payloadcms/payload/issues/15821)) ([e899182](https://github.com/payloadcms/payload/commit/e899182))
* draft doc validation when duplicating docs ([#15816](https://github.com/payloadcms/payload/issues/15816)) ([f470699](https://github.com/payloadcms/payload/commit/f470699))
* **plugin-ecommerce:** pass req to Payload API calls in Stripe adapter ([#15839](https://github.com/payloadcms/payload/issues/15839)) ([74799ea](https://github.com/payloadcms/payload/commit/74799ea))
* **plugin-import-export:** automatically inherit locale and limit from URL queries ([#15812](https://github.com/payloadcms/payload/issues/15812)) ([ee083f0](https://github.com/payloadcms/payload/commit/ee083f0))
* **plugin-import-export:** fix imports with locales in a different column order than exported ([#15808](https://github.com/payloadcms/payload/issues/15808)) ([410912c](https://github.com/payloadcms/payload/commit/410912c))
* **plugin-import-export:** fix exports in other non-latin scripts being broken when opened in excel ([#15813](https://github.com/payloadcms/payload/issues/15813)) ([d931894](https://github.com/payloadcms/payload/commit/d931894))
* **ui:** drag and drop not working for sortable hasMany fields ([#15845](https://github.com/payloadcms/payload/issues/15845)) ([2c7ef3f](https://github.com/payloadcms/payload/commit/2c7ef3f))
* **ui:** prevent false positive stale data modal on autosave-enabled documents ([#15817](https://github.com/payloadcms/payload/issues/15817)) ([6aff717](https://github.com/payloadcms/payload/commit/6aff717))
* **ui:** typo in CodeEditor export statement ([#15795](https://github.com/payloadcms/payload/issues/15795)) ([c5b2a91](https://github.com/payloadcms/payload/commit/c5b2a91))

### πŸ›  Refactors

* rename widget ComponentPath to Component for consistency ([#15780](https://github.com/payloadcms/payload/issues/15780)) ([f7d0d04](https://github.com/payloadcms/payload/commit/f7d0d04))

### πŸ“š Documentation

* add documentation for conditional tabs ([#15809](https://github.com/payloadcms/payload/issues/15809)) ([a1d6733](https://github.com/payloadcms/payload/commit/a1d6733))
* fix table formatting in import-export plugin ([#15792](https://github.com/payloadcms/payload/issues/15792)) ([0dba95a](https://github.com/payloadcms/payload/commit/0dba95a))

### πŸ§ͺ Tests

* update suites selected by default in runTestsWithSummary ([#15789](https://github.com/payloadcms/payload/issues/15789)) ([07f2f05](https://github.com/payloadcms/payload/commit/07f2f05))

### 🏑 Chores

* prevent dev server from dirtying tracked files ([#15826](https://github.com/payloadcms/payload/issues/15826)) ([cb6f426](https://github.com/payloadcms/payload/commit/cb6f426))
* **plugin-search:** clean up .DS_Store file and resulting empty images directory ([#14506](https://github.com/payloadcms/payload/issues/14506)) ([f6f73dd](https://github.com/payloadcms/payload/commit/f6f73dd))

### ⚠️ BREAKING CHANGES

* rename widget ComponentPath to Component for consistency ([#15780](https://github.com/payloadcms/payload/issues/15780)) ([f7d0d04](https://github.com/payloadcms/payload/commit/f7d0d04))

  - Renames `Widget.ComponentPath` to `Widget.Component` and types it as PayloadComponent` instead of `string`
  - This aligns dashboard widgets with every other component reference in (collections, globals, fields, admin components) - none of them _path_ in the property name, and all of them are typed as `PayloadComponent`
  - Enables new [typescript plugin](https://github.com/payloadcms/payload/pull/15779) to work for widget paths (the plugin uses `PayloadComponent` contextual type detection - `string`-typed properties were invisible to it)


* **ui:** typo in CodeEditor export statement ([#15795](https://github.com/payloadcms/payload/issues/15795)) ([c5b2a91](https://github.com/payloadcms/payload/commit/c5b2a91))

### 🀝 Contributors

- Patrik (@PatrikKozak)
- Jens Becker (@jhb-dev)
- Paul (@paulpopus)
- German Jablonski (@GermanJablo)
- Elliot DeNolf (@denolfe)
- Luiz ClΓ‘udio (@lcnogueira)
- Palamar Roman (@VeiaG)
- Sebastian Blank (@blankse)
- Alessio Gravili (@AlessioGr)
- Mahmoud Hassan (@Mhmod-Hsn)