/** * @license Copyright (c) 2003-2026, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options */ /** * @module track-changes/trackchangesconfig * @publicApi */ import { type SuggestionThreadView } from './ui/view/suggestionthreadview.js'; import { type SuggestionView } from './ui/view/suggestionview.js'; /** * The configuration of the track changes feature. * * Example: * * ```ts * ClassicEditor * .create( { * // Track changes feature configuration. * trackChanges: { * // Do not allow users to comment suggestions (default is `false`). * disableComments: true, * // Do not track styling and formatting changes (default is `default`). * trackFormatChanges: 'never', * // Merges suggestion changes inside a block. (default is `true`). * mergeNestedSuggestions: true * } * } ) * .then( ... ) * .catch( ... ); * ``` * * See {@link module:core/editor/editorconfig~EditorConfig all editor options}. */ export interface TrackChangesConfig { /** * A property that specifies if the comments for suggestions are enabled or disabled. * When the option is set to `true`, the comment thread UI for suggestions will be hidden * and commenting suggestions will be disabled. * * Suggestion thread views will be marked with the additional `ck-suggestion--disabled-comments` class when the suggestion comments * are disabled. * * @default false */ disableComments?: boolean; /** * A property that specifies whether formatting changes should be tracked. * * Formatting changes are all changes other than insertions and deletions, including: styling, structure, widgets properties, etc. * * By default, formatting changes are tracked. However, if you make a formatting change inside your own insertion suggestion, it * is immediately applied, without creating a suggestion. * * Possible values are: * * * `'default'` - format changes are tracked, but when made inside your own insertion suggestion, they will be immediately applied. * * `'always'` - format changes will always be tracked, even inside your own insertion suggestion. * * `'never'` - format changes will never be tracked (suggestions for such changes will not be created). * * @default 'default' */ trackFormatChanges?: 'never' | 'default' | 'always'; /** * Specifies whether suggestions on an object (e.g. image, table) should be automatically merged * with suggestions inside the object (e.g. image caption, table cell). * * For example, when set to `true`, creating a table and writing some text inside the table will result in one suggestion. * When set to `false`, it will be two separate suggestions, one for the inserted table and one for the inserted text. * * Keep in mind that only suggestions from the same author and of the same type are merged this way. * * @default true */ mergeNestedSuggestions?: boolean; /** * A view class to be used to create suggestion thread views. * * {@link module:track-changes/ui/view/suggestionthreadview~SuggestionThreadView} is used by default * when this property is not set. */ SuggestionThreadView?: typeof SuggestionThreadView; /** * A view class to be used to create the suggestion view. * * {@link module:track-changes/ui/view/suggestionview~SuggestionView} is used by default when this property is not set. */ SuggestionView?: typeof SuggestionView; /** * Configuration of the track changes preview feature. */ preview?: TrackChangesPreviewConfig; } export interface TrackChangesPreviewConfig { /** * A callback function that allows for modifying the structure of the * {@link module:track-changes/trackchangespreview~TrackChangesPreview track changes preview} container. * * The callback receives the container element (`.ck-track-changes-preview`) and an array of root elements. * * * If the editor only has one root, there's only one element in the array. * * If the editor has multiple roots, the there's one element per root. They are ordered either by `order` * root attribute or, if it's not present, by DOM order. * * The callback should append all array elements to the container, but can also add custom classes, elements in between etc. * * The default callback simply appends all elements to the container in the order they are provided. */ renderFunction?: (container: HTMLElement, elements: Array) => void; }