UNPKG

@ckeditor/ckeditor5-widget

Version:
108 lines (107 loc) 3.97 kB
/** * @license Copyright (c) 2003-2025, CKSource Holding sp. z o.o. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-licensing-options */ /** * @module widget/widget */ import { Plugin } from '@ckeditor/ckeditor5-core'; import { type ModelElement, type ModelNode } from '@ckeditor/ckeditor5-engine'; import { Delete } from '@ckeditor/ckeditor5-typing'; import { WidgetTypeAround } from './widgettypearound/widgettypearound.js'; import '../theme/widget.css'; /** * The widget plugin. It enables base support for widgets. * * See {@glink api/widget package page} for more details and documentation. * * This plugin enables multiple behaviors required by widgets: * * * The model to view selection converter for the editing pipeline (it handles widget custom selection rendering). * If a converted selection wraps around a widget element, that selection is marked as * {@link module:engine/view/selection~ViewSelection#isFake fake}. Additionally, the `ck-widget_selected` CSS class * is added to indicate that widget has been selected. * * The mouse and keyboard events handling on and around widget elements. */ export declare class Widget extends Plugin { /** * Holds previously selected widgets. */ private _previouslySelected; /** * @inheritDoc */ static get pluginName(): "Widget"; /** * @inheritDoc */ static get isOfficialPlugin(): true; /** * @inheritDoc */ static get requires(): readonly [typeof WidgetTypeAround, typeof Delete]; /** * @inheritDoc */ init(): void; /** * Handles {@link module:engine/view/document~ViewDocument#event:mousedown mousedown} events on widget elements. */ private _onMousedown; /** * Selects entire block content, e.g. on triple click it selects entire paragraph. */ private _selectBlockContent; /** * Handles {@link module:engine/view/document~ViewDocument#event:keydown keydown} events and changes * the model selection when: * * * arrow key is pressed when the widget is selected, * * the selection is next to a widget and the widget should become selected upon the arrow key press. * * See {@link #_preventDefaultOnArrowKeyPress}. */ private _handleSelectionChangeOnArrowKeyPress; /** * Handles {@link module:engine/view/document~ViewDocument#event:keydown keydown} events and prevents * the default browser behavior to make sure the fake selection is not being moved from a fake selection * container. * * See {@link #_handleSelectionChangeOnArrowKeyPress}. */ private _preventDefaultOnArrowKeyPress; /** * Handles delete keys: backspace and delete. * * @param isForward Set to true if delete was performed in forward direction. * @returns Returns `true` if keys were handled correctly. */ private _handleDelete; /** * Sets {@link module:engine/model/selection~ModelSelection document's selection} over given element. * * @internal */ _setSelectionOverElement(element: ModelNode): void; /** * Checks if {@link module:engine/model/element~ModelElement element} placed next to the current * {@link module:engine/model/selection~ModelSelection model selection} exists and is marked in * {@link module:engine/model/schema~ModelSchema schema} as `object`. * * @internal * @param forward Direction of checking. */ _getObjectElementNextToSelection(forward: boolean): ModelElement | null; /** * Removes CSS class from previously selected widgets. */ private _clearPreviouslySelectedWidgets; /** * Moves the document selection into the first nested editable. */ private _selectFirstNestedEditable; /** * Updates the document selection so that it selects first ancestor widget. */ private _selectAncestorWidget; }