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.uiTypeconfiguration option. See #14973. - list: The
AdjacentListsSupportplugin is moved from thedocumentlistdirectory to thelistdirectory. See #14942.
MINOR BREAKING CHANGES ℹ️
- adapter-ckfinder: Rename export of the
UploadAdapterclass 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
browseFilesicon to thecorepackage and added it to theiconsobject exported from it. See #15511. - ckbox: Moved the
browseFilesicon to thecorepackage and added it to theiconsobject exported from it. See #15511. - code-block: Moved the
codeBlockicon to thecorepackage and added it to theiconsobject exported from it. See #15511. - core: Bumped the TypeScript version to 5.0. See #15452.
- engine: Renamed export of the
Viewclass toEditingView. See #15511. - engine: Moved the
findOptimalInsertionRangefunction to theSchemaclass 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, andheading6icons to thecorepackage and added them to theiconsobject exported from it. See #15511. - horizontal-line: Moved the
horizontalLineicon to thecorepackage and added it to theiconsobject exported from it. See #15511. - html-embed: Moved the
htmlicon to thecorepackage and added it to theiconsobject exported from it. See #15511. - indent: Moved the
indentandoutdenticons to thecorepackage and added them to theiconsobject 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
ListStyleplugin was removed since it had been deprecated for a while. Use theListPropertiesplugin instead. See #14942. - list: Moved the
bulletedList,numberedList, andtodoListicons to thecorepackage and added them to theiconsobject exported from it. See #15511. - table: Moved the
tableicon to thecorepackage and added it to theiconsobject exported from it. See #15511. - ui: Moved the
colorPalette,previousArrow, andnextArrowicons to thecorepackage and added them to theiconsobject exported from it. See #15511. - ui: The
--ck-z-modalCSS 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 theFocusableViewinterface. Failing to do so will result in a TypeScript error. If your custom code createsFocusCyclerinstances, make sure that all views passed infocusablesimplement thefocus()method. See #14973. - ui: The font size of the
FormHeaderViewcomponent 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
AriaLiveAnnouncerPolitenesschanged (previouslyenum, now a constantobject). See #14973. - ui: The
#nextand#previousproperties of aFocusCyclerwill 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
undoandredoicons to thecorepackage and added them to theiconsobject exported from it. See #15511. - utils: Renamed the
Positioninterface 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
Dialogplugin that allows for displaying dialog windows in the UI of the editor. Learn more about using dialogs. Closes #14973. (commit)
Bug fixes
- ai:
AWSTextAdaptershould be able to handle many data objects returned in one update (chunk). - ai:
AWSTextAdaptershould 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
LinkImageplugin 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
TextareaViewcomponent 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.addChildCheckandSchema.addAttributeCheckcallbacks more specific. See #15290. (commit) - list: The document list feature was promoted to the main list feature implementation. The
Documentprefix was removed. The old list implementation was prefixed with theLegacykeyword. 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#focusablescollection should only containFocusableViewinstances. See #14973. (commit) - ui: The
#nextand#previousproperties of aFocusCyclerinstance should point to the same view if there is only one focusable view registered in thefocusablescollection. 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)