We are happy to announce the release of CKEditor 5 v41.0.0.
Improved list suggestions behavior
We continue to improve the way the editor displays the formatting suggestions.
This release includes integration of the list features with the new suggestions behavior. All list-related suggestions are now visible in the editor content.
The dialog system
The dialogs finally come to the CKEditor 5 UI!
Some users found using the find and replace feature through a dropdown inconvenient as it might have covered the content, including the searched text. We listened to these voices and the find and replace UI will now be using a dialog.
If you liked the earlier user interface of this feature, you can still display it inside a dropdown by setting the config.findAndReplace.uiType
configuration option.
We have also introduced a dialog in the AI Assistant feature. Displaying the AI Assistant inside a balloon came with many UX hiccups, especially when you selected large content. It works great now.
The dialogs are now a part of the CKEditor 5 UI library so you can use them, too! Read the documentation to learn how to display your custom features inside dialogs and modals.
Case change
No more selecting, deleting, retyping with Caps Lock for long legal preambles. The case change plugin enables users to easily change text cases, applying UPPERCASE, lowercase, and Title Case. This feature simplifies text formatting by allowing quick alterations with a single click or a keyboard shortcut.
As a key component of CKEditor 5's Productivity Pack, this plugin complements and enhances the suite's editing capabilities, offering a practical tool for efficient text manipulation.
Improving CKEditor 5 installation methods
We start the new year with improvements in the new installation methods project. This includes an upgrade to the latest TypeScript version, ensuring enhanced type safety.
A key part of this release is the resolution of ECMAScript Module (ESM) compliance issues. We updated all packages and their definitions to be fully ESM-compliant. This ensures smoother integration and compatibility across various development environments.
We have also renamed exports of several classes, interfaces, and helpers to eliminate naming conflicts in the code for the new bundle that will appear later this year.
Take a look at the RFC to see what is coming: #15502.
Deprecation of lists v1
This release marks a significant change in the list feature. As announced before, we are phasing out the older implementation of the List
plugin, originally designed for plain lists. We are directing the development efforts towards the more advanced list v2 feature (formerly named DocumentList
). This change aims to eliminate confusion for integrators and optimize the number of list functionalities.
The DocumentList
plugins, which represent the advanced lists v2 feature, will now be available under the standard name List
. This change enables document lists across all integrations, with the new version ensuring no loss of features from the older one.
We renamed the previous List
plugins to LegacyList
, providing a fallback option for integrators after the update. We will keep the LegacyList
available for a couple of releases to lower the migration impact.
The existing DocumentList
plugins were replaced with aliases. Integrations using the older DocumentList
will continue to function without any need for configuration changes for a couple of releases. Users will be notified via console warnings to consider updating their configurations.
Additionally, we completely removed the ListStyle
plugin, which has been deprecated for a while. This change aligns with our goal to simplify the list features.
Release highlights
Refer to the update guide to learn more about these changes.
MAJOR BREAKING CHANGES ℹ️
- ai: From this release on, the UI of the AI Assistant feature is displayed in a dialog instead of a balloon. See #14973.
- find-and-replace: From this release on, the UI of the find and replace feature is displayed by default in a dialog instead of a dropdown. To bring the previous user experience back, you can use the
config.findAndReplace.uiType
configuration option. See #14973. - list: The
AdjacentListsSupport
plugin is moved from thedocumentlist
directory to thelist
directory. See #14942.
MINOR BREAKING CHANGES ℹ️
- adapter-ckfinder: Rename export of the
UploadAdapter
class toCKFinderUploadAdapter
. See #15511. - ai: The layout of the UI changed. Customizations based on certain CSS selectors may not work anymore because of a different DOM structure in the UI. Learn more about the scope of changes. See #14973.
- ckfinder: Moved the
browseFiles
icon to thecore
package and added it to theicons
object exported from it. See #15511. - ckbox: Moved the
browseFiles
icon to thecore
package and added it to theicons
object exported from it. See #15511. - code-block: Moved the
codeBlock
icon to thecore
package and added it to theicons
object exported from it. See #15511. - core: Bumped the TypeScript version to 5.0. See #15452.
- engine: Renamed export of the
View
class toEditingView
. See #15511. - engine: Moved the
findOptimalInsertionRange
function to theSchema
class as a new method. See #15511. - find-and-replace: The layout of the UI changed. Customizations based on certain CSS selectors may not work anymore because of a different DOM structure in the UI. Learn more about the scope of changes. See #14973.
- heading: Moved the
heading1
,heading2
,heading3
,heading4
,heading5
, andheading6
icons to thecore
package and added them to theicons
object exported from it. See #15511. - horizontal-line: Moved the
horizontalLine
icon to thecore
package and added it to theicons
object exported from it. See #15511. - html-embed: Moved the
html
icon to thecore
package and added it to theicons
object exported from it. See #15511. - indent: Moved the
indent
andoutdent
icons to thecore
package and added them to theicons
object exported from it. See #15511. - link: Added validation to the URL field to disallow empty URLs by default. See #12501.
- list: All old list plugins are now prefixed with
Legacy
(including directory names):List
->LegacyList
,ListProperties
->LegacyListProperties
,TodoList
->LegacyTodoList
,ListEditing
->LegacyListEditing
,ListUtils
->LegacyListUtils
,ListPropertiesEditing
->LegacyListPropertiesEditing
,TodoListEditing
->LegacyTodoListEditing
. See #14942. - list: The document list plugins are no longer prefixed with
Document
(including directory names):DocumentList
->List
,DocumentListProperties
->ListProperties
,TodoDocumentList
->TodoList
,DocumentListEditing
->ListEditing
,DocumentListUtils
->ListUtils
,DocumentListPropertiesEditing
->ListPropertiesEditing
,DocumentListPropertiesUtils
->ListPropertiesUtils
,TodoDocumentListEditing
->TodoListEditing
. See #14942. - list: The
ListStyle
plugin was removed since it had been deprecated for a while. Use theListProperties
plugin instead. See #14942. - list: Moved the
bulletedList
,numberedList
, andtodoList
icons to thecore
package and added them to theicons
object exported from it. See #15511. - table: Moved the
table
icon to thecore
package and added it to theicons
object exported from it. See #15511. - ui: Moved the
colorPalette
,previousArrow
, andnextArrow
icons to thecore
package and added them to theicons
object exported from it. See #15511. - ui: The
--ck-z-modal
CSS custom property was renamed to--ck-z-panel
. We recommend updating custom CSS and integrations that use this custom property to avoid presentation issues. See #14973. - ui: The view collection (
focusables
) required byFocusCycler#constructor()
must only contain views implementing theFocusableView
interface. Failing to do so will result in a TypeScript error. If your custom code createsFocusCycler
instances, make sure that all views passed infocusables
implement thefocus()
method. See #14973. - ui: The font size of the
FormHeaderView
component was increased. This change affects the look of the find and replace and table styling features as well as custom user interfaces that use this component. See #14973. - ui: The type of
AriaLiveAnnouncerPoliteness
changed (previouslyenum
, now a constantobject
). See #14973. - ui: The
#next
and#previous
properties of aFocusCycler
will now point to the same view if there is only one focusable view (previouslynull
). This change may affect integrations that use this helper to manage advanced focus navigation in dynamic UIs. See #14973. - undo: Moved the
undo
andredo
icons to thecore
package and added them to theicons
object exported from it. See #15511. - utils: Renamed the
Position
interface toDomPoint
. See #15511.
Features
- ai: The UI of the feature was migrated to a dialog for a better user experience. See #14973.
- case-change: Introduced the case change feature.
- find-and-replace: The UI of the feature was migrated to a dialog for a better user experience. See #14973. (commit)
- track-changes: Integrated the list feature with the new attribute suggestions. Tracked changes in lists are now immediately visible in the editor.
- ui: Implemented the
Dialog
plugin that allows for displaying dialog windows in the UI of the editor. Learn more about using dialogs. Closes #14973. (commit)
Bug fixes
- ai:
AWSTextAdapter
should be able to handle many data objects returned in one update (chunk). - ai:
AWSTextAdapter
should be able to handle data objects that were split between many updates (chunks). - ckbox: Replaced some toolbar icons with ones with improved alignment. Closes #15549. (commit)
- ckbox: Fixed the relative URL image editing. (commit)
- clipboard: Drag and drop into the document title element should not throw errors. Closes #15306. (commit)
- comments: Unlinked and resolved comment threads will now be correctly handled when added during the editor initialization.
- core: Replaced some toolbar icons with ones with improved alignment. Closes #15549. (commit)
- html-support: The editor should not be stuck in an infinite post-fixing loop while modifying a list structure inside a GHS element. Closes #15527, #15565. (commit)
- link: Fixed the editor crash using the
LinkImage
plugin loaded beforeImage
, which ends with extending the schema definitions before they registering them. Closes #15617. (commit) - media-embed: Replaced some toolbar icons with ones with improved alignment. Closes #15549. (commit)
- ui: The
TextareaView
component should correctly update its size if its value changes while it is invisible. See #14973. (commit) - Made all CKEditor 5 packages valid ES Modules. See #13673.
Other changes
- ckbox: Image editing should work with the on-premises CKBox. Closes #5834. (commit)
- core: Bumped the TypeScript version to 5.0. Closes #15452 . (commit)
- engine: Made the types of the
Schema.addChildCheck
andSchema.addAttributeCheck
callbacks more specific. See #15290. (commit) - list: The document list feature was promoted to the main list feature implementation. The
Document
prefix was removed. The old list implementation was prefixed with theLegacy
keyword. Aliases were introduced (DocumentList
,DocumentListProperties
,TodoDocumentList
) for backward compatibility but those are marked as deprecated and log a warning in the browser console. Closes #14942. (commit) - ui: The
FocusCycler#focusables
collection should only containFocusableView
instances. See #14973. (commit) - ui: The
#next
and#previous
properties of aFocusCycler
instance should point to the same view if there is only one focusable view registered in thefocusables
collection. See #14973. (commit) - Updated translations. (commit)
Released packages
Check out the Versioning policy guide for more information.
New packages:
Major releases (contain major breaking changes):
Minor releases (contain minor breaking changes):
Releases containing new features:
Other releases:
Released packages (summary)