v3.29.0
payloadcms/payloadv3.29.0Mar 20, 2025by denolfe
AI Summary
Upgrades the Lexical dependency to 0.28.0 and introduces support for conditional tabs. It also adds a vector raw column type for Postgres, implements form state select, and adds radio field support to the Form Builder plugin.
Key Highlights
- Lexical upgrade to 0.28.0
- Conditional tabs support
- Postgres vector raw column type
- Form state select implementation
- Radio field support in Form Builder
New Features
- Conditional tabs
- Postgres vector column type
- Lexical 0.28.0 upgrade
- Form state select
- Radio field (Form builder)
Full Release Notes
## [v3.29.0](https://github.com/payloadcms/payload/compare/v3.28.1...v3.29.0) (2025-03-20) ## Important This release upgrades the lexical dependency from `0.27.1` to `0.28.0`. If you installed lexical manually, update it to `0.28.0`. Installing lexical manually is not recommended, as it may break between updates, and our re-exported versions should be used. See the [yellow banner box](https://payloadcms.com/docs/rich-text/custom-features) for details. If you still encounter richtext-lexical errors, do the following, in this order: 1. Delete `node_modules` 2. Delete your lockfile (e.g. `pnpm-lock.json`) 3. Reinstall your dependencies (e.g. `pnpm install`) --- ### 🚀 Features * pass i18n through field label and description functions ([#11802](https://github.com/payloadcms/payload/issues/11802)) ([31211e9](https://github.com/payloadcms/payload/commit/31211e9)) * sort support for payload.update operation ([#11769](https://github.com/payloadcms/payload/issues/11769)) ([20e975b](https://github.com/payloadcms/payload/commit/20e975b)) * add find to payloadDataLoader to cache local API queries ([#11685](https://github.com/payloadcms/payload/issues/11685)) ([975bbb7](https://github.com/payloadcms/payload/commit/975bbb7)) * distinct error for unverified email login ([#11647](https://github.com/payloadcms/payload/issues/11647)) ([fd99a30](https://github.com/payloadcms/payload/commit/fd99a30)) * aligns user _strategy returned from API ([#11701](https://github.com/payloadcms/payload/issues/11701)) ([8a51fe1](https://github.com/payloadcms/payload/commit/8a51fe1)) * form state select ([#11689](https://github.com/payloadcms/payload/issues/11689)) ([9ea8a7a](https://github.com/payloadcms/payload/commit/9ea8a7a)) * add `forceSelect` collection / global config property ([#11627](https://github.com/payloadcms/payload/issues/11627)) ([5e3d07b](https://github.com/payloadcms/payload/commit/5e3d07b)) * added support for conditional tabs ([#8720](https://github.com/payloadcms/payload/issues/8720)) ([878dc54](https://github.com/payloadcms/payload/commit/878dc54)) * **db-*:** support sort in db.updateMany ([#11768](https://github.com/payloadcms/payload/issues/11768)) ([e96d3c8](https://github.com/payloadcms/payload/commit/e96d3c8)) * **db-*:** allow to thread `id` to create operation data without custom IDs ([#11709](https://github.com/payloadcms/payload/issues/11709)) ([f442d22](https://github.com/payloadcms/payload/commit/f442d22)) * **db-postgres:** add vector raw column type ([#10422](https://github.com/payloadcms/payload/issues/10422)) ([11d7487](https://github.com/payloadcms/payload/commit/11d7487)) * **plugin-form-builder:** radio field ([#11716](https://github.com/payloadcms/payload/issues/11716)) ([427a5f1](https://github.com/payloadcms/payload/commit/427a5f1)) * **richtext-lexical:** support escaping markdown characters ([#11784](https://github.com/payloadcms/payload/issues/11784)) ([43cdccd](https://github.com/payloadcms/payload/commit/43cdccd)) * **richtext-lexical:** upgrade lexical from 0.27.2 to 0.28.0 ([#11764](https://github.com/payloadcms/payload/issues/11764)) ([240730f](https://github.com/payloadcms/payload/commit/240730f)) * **richtext-lexical:** allow disabling TabNode ([#11656](https://github.com/payloadcms/payload/issues/11656)) ([013b515](https://github.com/payloadcms/payload/commit/013b515)) * **richtext-lexical:** upgrade lexical from 0.27.1 to 0.27.2 ([#11706](https://github.com/payloadcms/payload/issues/11706)) ([adb42cb](https://github.com/payloadcms/payload/commit/adb42cb)) * **ui:** don't trigger preventLeave when opening a new tab ([#11683](https://github.com/payloadcms/payload/issues/11683)) ([398607f](https://github.com/payloadcms/payload/commit/398607f)) ### 🐛 Bug Fixes * add locale support to relationship filter options in WhereBuilder ([#11783](https://github.com/payloadcms/payload/issues/11783)) ([90f2491](https://github.com/payloadcms/payload/commit/90f2491)) * add locale support to relationship filter options in WhereBuilder ([#11783](https://github.com/payloadcms/payload/issues/11783)) ([39ad31a](https://github.com/payloadcms/payload/commit/39ad31a)) * save button styles in edit-many modal ([#11780](https://github.com/payloadcms/payload/issues/11780)) ([7bc75e2](https://github.com/payloadcms/payload/commit/7bc75e2)) * wrap login redirect routes with encodeURIComponent ([#11778](https://github.com/payloadcms/payload/issues/11778)) ([a02e476](https://github.com/payloadcms/payload/commit/a02e476)) * email format validation with hyphens ([#11761](https://github.com/payloadcms/payload/issues/11761)) ([afe4432](https://github.com/payloadcms/payload/commit/afe4432)) * improves email validation format rules ([#11757](https://github.com/payloadcms/payload/issues/11757)) ([875afcc](https://github.com/payloadcms/payload/commit/875afcc)) * field appending on duplicate should ignore non string values ([#11621](https://github.com/payloadcms/payload/issues/11621)) ([74996fd](https://github.com/payloadcms/payload/commit/74996fd)) * passes id and data to read access func when accessing upload URLs ([#11684](https://github.com/payloadcms/payload/issues/11684)) ([4a712e1](https://github.com/payloadcms/payload/commit/4a712e1)) * bulk upload validation when files are missing ([#11744](https://github.com/payloadcms/payload/issues/11744)) ([ea66e21](https://github.com/payloadcms/payload/commit/ea66e21)) * ensures `select` & `radio` field option labels accept JSX elements ([#11658](https://github.com/payloadcms/payload/issues/11658)) ([3c92fbd](https://github.com/payloadcms/payload/commit/3c92fbd)) * add classes for picture tag in media component ([#11605](https://github.com/payloadcms/payload/issues/11605)) ([d66cdbd](https://github.com/payloadcms/payload/commit/d66cdbd)) * **db-mongodb:** spread version schema options correctly ([#11793](https://github.com/payloadcms/payload/issues/11793)) ([1d25b16](https://github.com/payloadcms/payload/commit/1d25b16)) * **plugin-cloud-storage:** s3Storage client uploads working with more than 2 instances of the plugin ([#11732](https://github.com/payloadcms/payload/issues/11732)) ([bb39c87](https://github.com/payloadcms/payload/commit/bb39c87)) * **plugin-import-export:** export with draft true ([#11762](https://github.com/payloadcms/payload/issues/11762)) ([67a7358](https://github.com/payloadcms/payload/commit/67a7358)) * **plugin-import-export:** translated preview labels ([#11758](https://github.com/payloadcms/payload/issues/11758)) ([e83f452](https://github.com/payloadcms/payload/commit/e83f452)) * **plugin-multi-tenant:** ensures redirect route is correctly formatted ([#11753](https://github.com/payloadcms/payload/issues/11753)) ([06aa940](https://github.com/payloadcms/payload/commit/06aa940)) * **plugin-multi-tenant:** missing key console message ([#11693](https://github.com/payloadcms/payload/issues/11693)) ([3d129e8](https://github.com/payloadcms/payload/commit/3d129e8)) * **richtext-lexical:** error in admin panel when block collapsed preference is not an array ([#11771](https://github.com/payloadcms/payload/issues/11771)) ([b857273](https://github.com/payloadcms/payload/commit/b857273)) * **richtext-lexical:** error in admin panel when setting a richtext field in `useAsTitle` ([#11707](https://github.com/payloadcms/payload/issues/11707)) ([ef527fe](https://github.com/payloadcms/payload/commit/ef527fe)) * **richtext-lexical:** make the toolbar indent button consider the disabledNodes property on IndentFeature ([#11739](https://github.com/payloadcms/payload/issues/11739)) ([dd80f52](https://github.com/payloadcms/payload/commit/dd80f52)) * **richtext-lexical:** unchecked list items were rendered as checked in html converter ([#11747](https://github.com/payloadcms/payload/issues/11747)) ([3f23160](https://github.com/payloadcms/payload/commit/3f23160)) * **richtext-lexical:** remove undefined rel and target attributes in link HTML converter ([#11754](https://github.com/payloadcms/payload/issues/11754)) ([aa3737c](https://github.com/payloadcms/payload/commit/aa3737c)) * **ui:** adding guard check for populate docs in upload field ([#11800](https://github.com/payloadcms/payload/issues/11800)) ([7d9d067](https://github.com/payloadcms/payload/commit/7d9d067)) * **ui:** bulk edit subfields ([#10035](https://github.com/payloadcms/payload/issues/10035)) ([b5fc8c6](https://github.com/payloadcms/payload/commit/b5fc8c6)) * **ui:** excess error css coming from group fields ([#11700](https://github.com/payloadcms/payload/issues/11700)) ([0fe922e](https://github.com/payloadcms/payload/commit/0fe922e)) * **ui:** fallback localization data was appearing in document ([#11743](https://github.com/payloadcms/payload/issues/11743)) ([ebfb0eb](https://github.com/payloadcms/payload/commit/ebfb0eb)) * **ui:** scheduled publish not displaying the timezone's label and timezones being reset when scheduling a publish, brisbane is now a default timezone ([#11699](https://github.com/payloadcms/payload/issues/11699)) ([e0bf505](https://github.com/payloadcms/payload/commit/e0bf505)) * **ui:** processing and initializing form does not disable standalone fields ([#11714](https://github.com/payloadcms/payload/issues/11714)) ([0b1a1b5](https://github.com/payloadcms/payload/commit/0b1a1b5)) ### ⚡ Performance * use direct db calls in job-queue system ([#11489](https://github.com/payloadcms/payload/issues/11489)) ([032c424](https://github.com/payloadcms/payload/commit/032c424)) * download only images and optimize image selection for upload list view, prioritize best-fit size ([#11696](https://github.com/payloadcms/payload/issues/11696)) ([6270d73](https://github.com/payloadcms/payload/commit/6270d73)) * **ui:** implements select in bulk edit ([#11708](https://github.com/payloadcms/payload/issues/11708)) ([d8bfb22](https://github.com/payloadcms/payload/commit/d8bfb22)) ### 🛠 Refactors * **richtext-lexical:** new plaintext and markdown converters, restructure converter docs ([#11675](https://github.com/payloadcms/payload/issues/11675)) ([82840aa](https://github.com/payloadcms/payload/commit/82840aa)) ### 📚 Documentation * mention correct --disable-transpile flag ([#11788](https://github.com/payloadcms/payload/issues/11788)) ([6640b1c](https://github.com/payloadcms/payload/commit/6640b1c)) * updates docs for `useDocumentInfo` ([#11686](https://github.com/payloadcms/payload/issues/11686)) ([ff2df62](https://github.com/payloadcms/payload/commit/ff2df62)) ### 🧪 Tests * dedicated bulk edit test suite ([#11756](https://github.com/payloadcms/payload/issues/11756)) ([a44a252](https://github.com/payloadcms/payload/commit/a44a252)) ### 🏡 Chores * export type FieldAccessArgs ([#11749](https://github.com/payloadcms/payload/issues/11749)) ([f31e5e6](https://github.com/payloadcms/payload/commit/f31e5e6)) * bump prettier, re-enable prettier for docs ([#11695](https://github.com/payloadcms/payload/issues/11695)) ([9f9db3f](https://github.com/payloadcms/payload/commit/9f9db3f)) * **deps:** bump next.js from 15.2.2 to 15.2.3 in monorepo ([#11748](https://github.com/payloadcms/payload/issues/11748)) ([95821c6](https://github.com/payloadcms/payload/commit/95821c6)) * **examples:** add locale to revalidatePath in Pages hook ([#11775](https://github.com/payloadcms/payload/issues/11775)) ([68f2582](https://github.com/payloadcms/payload/commit/68f2582)) ### 🤝 Contributors - Jacob Fletcher (@jacobsfletch) - Alessio Gravili (@AlessioGr) - Ainsley Clark (@ainsleyclark) - Anders Semb Hermansen (@andershermansen) - Nacho Martin (@nachomglz) - Jarrod Flesch (@JarrodMFlesch) - Patrik (@PatrikKozak) - Terry Yuen (@tyuen) - Germán Jabloñski (@GermanJablo) - Dan Ribbens (@DanRibbens) - Said Akhrarov (@akhrarovsaid) - Jessica Chowdhury (@JessChowdhury) - Sasha (@r1tsuu) - Paul (@paulpopus) - DriesCruyskens (@DriesCruyskens) - AoiYamada (@AoiYamada) - Md. Tajmirul Islam Akhand (@Tajmirul) - Philipp Schneider (@philipp-tailor) - Tobias Odendahl (@tak-amboss)