{"version":3,"sources":["webpack:///./node_modules/@ckeditor/ckeditor5-engine/src/view/observer/focusobserver.js","webpack:///./node_modules/@ckeditor/ckeditor5-engine/src/view/observer/mutationobserver.js","webpack:///./node_modules/@ckeditor/ckeditor5-engine/src/view/observer/mouseobserver.js","webpack:///./node_modules/@ckeditor/ckeditor5-engine/src/view/observer/inputobserver.js","webpack:///./node_modules/@ckeditor/ckeditor5-engine/src/view/observer/keyobserver.js"],"names":["FocusObserver","view","_this","Object","D_Projects_UA_repo_Source_Client_UA_User_Web_node_modules_babel_runtime_helpers_esm_classCallCheck_js__WEBPACK_IMPORTED_MODULE_1__","this","_super","call","domEventType","useCapture","document","on","isFocused","_renderTimeoutId","setTimeout","change","evt","data","selectedEditable","selection","editableElement","target","domEvent","fire","type","clearTimeout","D_Projects_UA_repo_Source_Client_UA_User_Web_node_modules_babel_runtime_helpers_esm_get_js__WEBPACK_IMPORTED_MODULE_3__","D_Projects_UA_repo_Source_Client_UA_User_Web_node_modules_babel_runtime_helpers_esm_getPrototypeOf_js__WEBPACK_IMPORTED_MODULE_6__","prototype","DomEventObserver","MutationObserver","D_Projects_UA_repo_Source_Client_UA_User_Web_node_modules_babel_runtime_helpers_esm_classCallCheck_js__WEBPACK_IMPORTED_MODULE_10__","_config","childList","characterData","characterDataOldValue","subtree","domConverter","renderer","_renderer","_domElements","_mutationObserver","window","_onMutations","bind","D_Projects_UA_repo_Source_Client_UA_User_Web_node_modules_babel_runtime_helpers_esm_assertThisInitialized_js__WEBPACK_IMPORTED_MODULE_12__","takeRecords","domElement","push","isEnabled","observe","D_Projects_UA_repo_Source_Client_UA_User_Web_node_modules_babel_runtime_helpers_esm_get_js__WEBPACK_IMPORTED_MODULE_13__","D_Projects_UA_repo_Source_Client_UA_User_Web_node_modules_babel_runtime_helpers_esm_getPrototypeOf_js__WEBPACK_IMPORTED_MODULE_16__","_step","_iterator","_createForOfIteratorHelper","s","n","done","value","err","e","f","disconnect","domMutations","length","_step2","mutatedTexts","Map","mutatedElements","Set","_iterator2","mutation","element","mapDomToView","is","_isBogusBrMutation","add","_step3","_iterator3","text","findCorrespondingViewText","has","parent","set","oldText","newText","getDataWithoutFiller","node","startsWithFiller","parentNode","_step4","viewMutations","_iterator4","values","mutatedText","markToSync","_step5","_iterator5","viewElement","mapViewToDom","viewChildren","Array","from","getChildren","newViewChildren","domChildrenToView","withChildren","isEqualWith","sameNodes","oldChildren","newChildren","domSelection","ownerDocument","getSelection","viewSelection","anchorNode","viewSelectionAnchor","domPositionToView","anchorOffset","viewSelectionFocus","focusNode","focusOffset","ViewSelection","setFocus","forceRender","child1","child2","isArray","addedNode","nextSibling","removedNodes","addedNodes","domToView","Observer","MouseObserver","InputObserver","KeyObserver","domEvt","keyCode","altKey","ctrlKey","shiftKey","metaKey","keystroke","getCode"],"mappings":"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","file":"js/chunk-53b1654a.179c6ae8.js","sourcesContent":["/**\n * @license Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module engine/view/observer/focusobserver\n */\n\n/* globals setTimeout, clearTimeout */\n\nimport DomEventObserver from './domeventobserver';\n\n/**\n * {@link module:engine/view/document~Document#event:focus Focus}\n * and {@link module:engine/view/document~Document#event:blur blur} events observer.\n * Focus observer handle also {@link module:engine/view/rooteditableelement~RootEditableElement#isFocused isFocused} property of the\n * {@link module:engine/view/rooteditableelement~RootEditableElement root elements}.\n *\n * Note that this observer is attached by the {@link module:engine/view/view~View} and is available by default.\n *\n * @extends module:engine/view/observer/domeventobserver~DomEventObserver\n */\nexport default class FocusObserver extends DomEventObserver {\n\tconstructor( view ) {\n\t\tsuper( view );\n\n\t\tthis.domEventType = [ 'focus', 'blur' ];\n\t\tthis.useCapture = true;\n\t\tconst document = this.document;\n\n\t\tdocument.on( 'focus', () => {\n\t\t\tdocument.isFocused = true;\n\n\t\t\t// Unfortunately native `selectionchange` event is fired asynchronously.\n\t\t\t// We need to wait until `SelectionObserver` handle the event and then render. Otherwise rendering will\n\t\t\t// overwrite new DOM selection with selection from the view.\n\t\t\t// See https://github.com/ckeditor/ckeditor5-engine/issues/795 for more details.\n\t\t\t// Long timeout is needed to solve #676 and https://github.com/ckeditor/ckeditor5-engine/issues/1157 issues.\n\t\t\t//\n\t\t\t// Using `view.change()` instead of `view.forceRender()` to prevent double rendering\n\t\t\t// in a situation where `selectionchange` already caused selection change.\n\t\t\tthis._renderTimeoutId = setTimeout( () => view.change( () => {} ), 50 );\n\t\t} );\n\n\t\tdocument.on( 'blur', ( evt, data ) => {\n\t\t\tconst selectedEditable = document.selection.editableElement;\n\n\t\t\tif ( selectedEditable === null || selectedEditable === data.target ) {\n\t\t\t\tdocument.isFocused = false;\n\n\t\t\t\t// Re-render the document to update view elements\n\t\t\t\t// (changing document.isFocused already marked view as changed since last rendering).\n\t\t\t\tview.change( () => {} );\n\t\t\t}\n\t\t} );\n\n\t\t/**\n\t\t * Identifier of the timeout currently used by focus listener to delay rendering execution.\n\t\t *\n\t\t * @private\n\t\t * @member {Number} #_renderTimeoutId\n\t\t */\n\t}\n\n\tonDomEvent( domEvent ) {\n\t\tthis.fire( domEvent.type, domEvent );\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tdestroy() {\n\t\tif ( this._renderTimeoutId ) {\n\t\t\tclearTimeout( this._renderTimeoutId );\n\t\t}\n\n\t\tsuper.destroy();\n\t}\n}\n\n/**\n * Fired when one of the editables gets focus.\n *\n * Introduced by {@link module:engine/view/observer/focusobserver~FocusObserver}.\n *\n * Note that because {@link module:engine/view/observer/focusobserver~FocusObserver} is attached by the\n * {@link module:engine/view/view~View} this event is available by default.\n *\n * @see module:engine/view/observer/focusobserver~FocusObserver\n * @event module:engine/view/document~Document#event:focus\n * @param {module:engine/view/observer/domeventdata~DomEventData} data Event data.\n */\n\n/**\n * Fired when one of the editables loses focus.\n *\n * Introduced by {@link module:engine/view/observer/focusobserver~FocusObserver}.\n *\n * Note that because {@link module:engine/view/observer/focusobserver~FocusObserver} is attached by the\n * {@link module:engine/view/view~View} this event is available by default.\n *\n * @see module:engine/view/observer/focusobserver~FocusObserver\n * @event module:engine/view/document~Document#event:blur\n * @param {module:engine/view/observer/domeventdata~DomEventData} data Event data.\n */\n","/**\n * @license Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module engine/view/observer/mutationobserver\n */\n\n/* globals window */\n\nimport Observer from './observer';\nimport ViewSelection from '../selection';\nimport { startsWithFiller, getDataWithoutFiller } from '../filler';\nimport { isEqualWith } from 'lodash-es';\n\n/**\n * Mutation observer class observes changes in the DOM, fires {@link module:engine/view/document~Document#event:mutations} event, mark view\n * elements as changed and call {@link module:engine/view/renderer~Renderer#render}.\n * Because all mutated nodes are marked as \"to be rendered\" and the\n * {@link module:engine/view/renderer~Renderer#render} is called, all changes will be reverted, unless the mutation will be handled by the\n * {@link module:engine/view/document~Document#event:mutations} event listener. It means user will see only handled changes, and the editor\n * will block all changes which are not handled.\n *\n * Mutation Observer also take care of reducing number of mutations which are fired. It removes duplicates and\n * mutations on elements which do not have corresponding view elements. Also\n * {@link module:engine/view/observer/mutationobserver~MutatedText text mutation} is fired only if parent element do not change child list.\n *\n * Note that this observer is attached by the {@link module:engine/view/view~View} and is available by default.\n *\n * @extends module:engine/view/observer/observer~Observer\n */\nexport default class MutationObserver extends Observer {\n\tconstructor( view ) {\n\t\tsuper( view );\n\n\t\t/**\n\t\t * Native mutation observer config.\n\t\t *\n\t\t * @private\n\t\t * @member {Object}\n\t\t */\n\t\tthis._config = {\n\t\t\tchildList: true,\n\t\t\tcharacterData: true,\n\t\t\tcharacterDataOldValue: true,\n\t\t\tsubtree: true\n\t\t};\n\n\t\t/**\n\t\t * Reference to the {@link module:engine/view/view~View#domConverter}.\n\t\t *\n\t\t * @member {module:engine/view/domconverter~DomConverter}\n\t\t */\n\t\tthis.domConverter = view.domConverter;\n\n\t\t/**\n\t\t * Reference to the {@link module:engine/view/view~View#_renderer}.\n\t\t *\n\t\t * @member {module:engine/view/renderer~Renderer}\n\t\t */\n\t\tthis.renderer = view._renderer;\n\n\t\t/**\n\t\t * Observed DOM elements.\n\t\t *\n\t\t * @private\n\t\t * @member {Array.}\n\t\t */\n\t\tthis._domElements = [];\n\n\t\t/**\n\t\t * Native mutation observer.\n\t\t *\n\t\t * @private\n\t\t * @member {MutationObserver}\n\t\t */\n\t\tthis._mutationObserver = new window.MutationObserver( this._onMutations.bind( this ) );\n\t}\n\n\t/**\n\t * Synchronously fires {@link module:engine/view/document~Document#event:mutations} event with all mutations in record queue.\n\t * At the same time empties the queue so mutations will not be fired twice.\n\t */\n\tflush() {\n\t\tthis._onMutations( this._mutationObserver.takeRecords() );\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tobserve( domElement ) {\n\t\tthis._domElements.push( domElement );\n\n\t\tif ( this.isEnabled ) {\n\t\t\tthis._mutationObserver.observe( domElement, this._config );\n\t\t}\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tenable() {\n\t\tsuper.enable();\n\n\t\tfor ( const domElement of this._domElements ) {\n\t\t\tthis._mutationObserver.observe( domElement, this._config );\n\t\t}\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tdisable() {\n\t\tsuper.disable();\n\n\t\tthis._mutationObserver.disconnect();\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tdestroy() {\n\t\tsuper.destroy();\n\n\t\tthis._mutationObserver.disconnect();\n\t}\n\n\t/**\n\t * Handles mutations. Deduplicates, mark view elements to sync, fire event and call render.\n\t *\n\t * @private\n\t * @param {Array.} domMutations Array of native mutations.\n\t */\n\t_onMutations( domMutations ) {\n\t\t// As a result of this.flush() we can have an empty collection.\n\t\tif ( domMutations.length === 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst domConverter = this.domConverter;\n\n\t\t// Use map and set for deduplication.\n\t\tconst mutatedTexts = new Map();\n\t\tconst mutatedElements = new Set();\n\n\t\t// Handle `childList` mutations first, so we will be able to check if the `characterData` mutation is in the\n\t\t// element with changed structure anyway.\n\t\tfor ( const mutation of domMutations ) {\n\t\t\tif ( mutation.type === 'childList' ) {\n\t\t\t\tconst element = domConverter.mapDomToView( mutation.target );\n\n\t\t\t\t// Do not collect mutations from UIElements and RawElements.\n\t\t\t\tif ( element && ( element.is( 'uiElement' ) || element.is( 'rawElement' ) ) ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif ( element && !this._isBogusBrMutation( mutation ) ) {\n\t\t\t\t\tmutatedElements.add( element );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Handle `characterData` mutations later, when we have the full list of nodes which changed structure.\n\t\tfor ( const mutation of domMutations ) {\n\t\t\tconst element = domConverter.mapDomToView( mutation.target );\n\n\t\t\t// Do not collect mutations from UIElements and RawElements.\n\t\t\tif ( element && ( element.is( 'uiElement' ) || element.is( 'rawElement' ) ) ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif ( mutation.type === 'characterData' ) {\n\t\t\t\tconst text = domConverter.findCorrespondingViewText( mutation.target );\n\n\t\t\t\tif ( text && !mutatedElements.has( text.parent ) ) {\n\t\t\t\t\t// Use text as a key, for deduplication. If there will be another mutation on the same text element\n\t\t\t\t\t// we will have only one in the map.\n\t\t\t\t\tmutatedTexts.set( text, {\n\t\t\t\t\t\ttype: 'text',\n\t\t\t\t\t\toldText: text.data,\n\t\t\t\t\t\tnewText: getDataWithoutFiller( mutation.target ),\n\t\t\t\t\t\tnode: text\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t\t// When we added first letter to the text node which had only inline filler, for the DOM it is mutation\n\t\t\t\t// on text, but for the view, where filler text node did not existed, new text node was created, so we\n\t\t\t\t// need to fire 'children' mutation instead of 'text'.\n\t\t\t\telse if ( !text && startsWithFiller( mutation.target ) ) {\n\t\t\t\t\tmutatedElements.add( domConverter.mapDomToView( mutation.target.parentNode ) );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Now we build the list of mutations to fire and mark elements. We did not do it earlier to avoid marking the\n\t\t// same node multiple times in case of duplication.\n\n\t\t// List of mutations we will fire.\n\t\tconst viewMutations = [];\n\n\t\tfor ( const mutatedText of mutatedTexts.values() ) {\n\t\t\tthis.renderer.markToSync( 'text', mutatedText.node );\n\t\t\tviewMutations.push( mutatedText );\n\t\t}\n\n\t\tfor ( const viewElement of mutatedElements ) {\n\t\t\tconst domElement = domConverter.mapViewToDom( viewElement );\n\t\t\tconst viewChildren = Array.from( viewElement.getChildren() );\n\t\t\tconst newViewChildren = Array.from( domConverter.domChildrenToView( domElement, { withChildren: false } ) );\n\n\t\t\t// It may happen that as a result of many changes (sth was inserted and then removed),\n\t\t\t// both elements haven't really changed. #1031\n\t\t\tif ( !isEqualWith( viewChildren, newViewChildren, sameNodes ) ) {\n\t\t\t\tthis.renderer.markToSync( 'children', viewElement );\n\n\t\t\t\tviewMutations.push( {\n\t\t\t\t\ttype: 'children',\n\t\t\t\t\toldChildren: viewChildren,\n\t\t\t\t\tnewChildren: newViewChildren,\n\t\t\t\t\tnode: viewElement\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\n\t\t// Retrieve `domSelection` using `ownerDocument` of one of mutated nodes.\n\t\t// There should not be simultaneous mutation in multiple documents, so it's fine.\n\t\tconst domSelection = domMutations[ 0 ].target.ownerDocument.getSelection();\n\n\t\tlet viewSelection = null;\n\n\t\tif ( domSelection && domSelection.anchorNode ) {\n\t\t\t// If `domSelection` is inside a dom node that is already bound to a view node from view tree, get\n\t\t\t// corresponding selection in the view and pass it together with `viewMutations`. The `viewSelection` may\n\t\t\t// be used by features handling mutations.\n\t\t\t// Only one range is supported.\n\n\t\t\tconst viewSelectionAnchor = domConverter.domPositionToView( domSelection.anchorNode, domSelection.anchorOffset );\n\t\t\tconst viewSelectionFocus = domConverter.domPositionToView( domSelection.focusNode, domSelection.focusOffset );\n\n\t\t\t// Anchor and focus has to be properly mapped to view.\n\t\t\tif ( viewSelectionAnchor && viewSelectionFocus ) {\n\t\t\t\tviewSelection = new ViewSelection( viewSelectionAnchor );\n\t\t\t\tviewSelection.setFocus( viewSelectionFocus );\n\t\t\t}\n\t\t}\n\n\t\t// In case only non-relevant mutations were recorded it skips the event and force render (#5600).\n\t\tif ( viewMutations.length ) {\n\t\t\tthis.document.fire( 'mutations', viewMutations, viewSelection );\n\n\t\t\t// If nothing changes on `mutations` event, at this point we have \"dirty DOM\" (changed) and de-synched\n\t\t\t// view (which has not been changed). In order to \"reset DOM\" we render the view again.\n\t\t\tthis.view.forceRender();\n\t\t}\n\n\t\tfunction sameNodes( child1, child2 ) {\n\t\t\t// First level of comparison (array of children vs array of children) – use the Lodash's default behavior.\n\t\t\tif ( Array.isArray( child1 ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Elements.\n\t\t\tif ( child1 === child2 ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\t// Texts.\n\t\t\telse if ( child1.is( '$text' ) && child2.is( '$text' ) ) {\n\t\t\t\treturn child1.data === child2.data;\n\t\t\t}\n\n\t\t\t// Not matching types.\n\t\t\treturn false;\n\t\t}\n\t}\n\n\t/**\n\t * Checks if mutation was generated by the browser inserting bogus br on the end of the block element.\n\t * Such mutations are generated while pressing space or performing native spellchecker correction\n\t * on the end of the block element in Firefox browser.\n\t *\n\t * @private\n\t * @param {Object} mutation Native mutation object.\n\t * @returns {Boolean}\n\t */\n\t_isBogusBrMutation( mutation ) {\n\t\tlet addedNode = null;\n\n\t\t// Check if mutation added only one node on the end of its parent.\n\t\tif ( mutation.nextSibling === null && mutation.removedNodes.length === 0 && mutation.addedNodes.length == 1 ) {\n\t\t\taddedNode = this.domConverter.domToView( mutation.addedNodes[ 0 ], {\n\t\t\t\twithChildren: false\n\t\t\t} );\n\t\t}\n\n\t\treturn addedNode && addedNode.is( 'element', 'br' );\n\t}\n}\n\n/**\n * Fired when mutation occurred. If tree view is not changed on this event, DOM will be reverted to the state before\n * mutation, so all changes which should be applied, should be handled on this event.\n *\n * Introduced by {@link module:engine/view/observer/mutationobserver~MutationObserver}.\n *\n * Note that because {@link module:engine/view/observer/mutationobserver~MutationObserver} is attached by the\n * {@link module:engine/view/view~View} this event is available by default.\n *\n * @see module:engine/view/observer/mutationobserver~MutationObserver\n * @event module:engine/view/document~Document#event:mutations\n * @param {Array.}\n * viewMutations Array of mutations.\n * For mutated texts it will be {@link module:engine/view/observer/mutationobserver~MutatedText} and for mutated elements it will be\n * {@link module:engine/view/observer/mutationobserver~MutatedChildren}. You can recognize the type based on the `type` property.\n * @param {module:engine/view/selection~Selection|null} viewSelection View selection that is a result of converting DOM selection to view.\n * Keep in\n * mind that the DOM selection is already \"updated\", meaning that it already acknowledges changes done in mutation.\n */\n\n/**\n * Mutation item for text.\n *\n * @see module:engine/view/document~Document#event:mutations\n * @see module:engine/view/observer/mutationobserver~MutatedChildren\n *\n * @typedef {Object} module:engine/view/observer/mutationobserver~MutatedText\n *\n * @property {String} type For text mutations it is always 'text'.\n * @property {module:engine/view/text~Text} node Mutated text node.\n * @property {String} oldText Old text.\n * @property {String} newText New text.\n */\n\n/**\n * Mutation item for child nodes.\n *\n * @see module:engine/view/document~Document#event:mutations\n * @see module:engine/view/observer/mutationobserver~MutatedText\n *\n * @typedef {Object} module:engine/view/observer/mutationobserver~MutatedChildren\n *\n * @property {String} type For child nodes mutations it is always 'children'.\n * @property {module:engine/view/element~Element} node Parent of the mutated children.\n * @property {Array.} oldChildren Old child nodes.\n * @property {Array.} newChildren New child nodes.\n */\n","/**\n * @license Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module engine/view/observer/mouseobserver\n */\n\nimport DomEventObserver from './domeventobserver';\n\n/**\n * Mouse events observer.\n *\n * Note that this observer is not available by default. To make it available it needs to be added to\n * {@link module:engine/view/view~View} by {@link module:engine/view/view~View#addObserver} method.\n *\n * @extends module:engine/view/observer/domeventobserver~DomEventObserver\n */\nexport default class MouseObserver extends DomEventObserver {\n\tconstructor( view ) {\n\t\tsuper( view );\n\n\t\tthis.domEventType = [ 'mousedown', 'mouseup', 'mouseover', 'mouseout' ];\n\t}\n\n\tonDomEvent( domEvent ) {\n\t\tthis.fire( domEvent.type, domEvent );\n\t}\n}\n\n/**\n * Fired when the mouse button is pressed down on one of the editing roots of the editor.\n *\n * Introduced by {@link module:engine/view/observer/mouseobserver~MouseObserver}.\n *\n * Note that this event is not available by default. To make it available, {@link module:engine/view/observer/mouseobserver~MouseObserver}\n * needs to be added to {@link module:engine/view/view~View} by the {@link module:engine/view/view~View#addObserver} method.\n *\n * @see module:engine/view/observer/mouseobserver~MouseObserver\n * @event module:engine/view/document~Document#event:mousedown\n * @param {module:engine/view/observer/domeventdata~DomEventData} data The event data.\n */\n\n/**\n * Fired when the mouse button is released over one of the editing roots of the editor.\n *\n * Introduced by {@link module:engine/view/observer/mouseobserver~MouseObserver}.\n *\n * Note that this event is not available by default. To make it available, {@link module:engine/view/observer/mouseobserver~MouseObserver}\n * needs to be added to {@link module:engine/view/view~View} by the {@link module:engine/view/view~View#addObserver} method.\n *\n * @see module:engine/view/observer/mouseobserver~MouseObserver\n * @event module:engine/view/document~Document#event:mouseup\n * @param {module:engine/view/observer/domeventdata~DomEventData} data The event data.\n */\n","/**\n * @license Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md.\n */\n\n/**\n * @module engine/view/observer/inputobserver\n */\n\nimport DomEventObserver from './domeventobserver';\n\n/**\n * Observer for events connected with data input.\n *\n * Note that this observer is attached by the {@link module:engine/view/view~View} and is available by default.\n *\n * @extends module:engine/view/observer/domeventobserver~DomEventObserver\n */\nexport default class InputObserver extends DomEventObserver {\n\tconstructor( view ) {\n\t\tsuper( view );\n\n\t\tthis.domEventType = [ 'beforeinput' ];\n\t}\n\n\tonDomEvent( domEvent ) {\n\t\tthis.fire( domEvent.type, domEvent );\n\t}\n}\n\n/**\n * Fired before browser inputs (or deletes) some data.\n *\n * This event is available only on browsers which support DOM `beforeinput` event.\n *\n * Introduced by {@link module:engine/view/observer/inputobserver~InputObserver}.\n *\n * Note that because {@link module:engine/view/observer/inputobserver~InputObserver} is attached by the\n * {@link module:engine/view/view~View} this event is available by default.\n *\n * @see module:engine/view/observer/inputobserver~InputObserver\n * @event module:engine/view/document~Document#event:beforeinput\n * @param {module:engine/view/observer/domeventdata~DomEventData} data Event data.\n */\n","/**\n * @license Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license\n */\n\n/**\n * @module engine/view/observer/keyobserver\n */\n\nimport DomEventObserver from './domeventobserver';\nimport { getCode } from '@ckeditor/ckeditor5-utils/src/keyboard';\n\n/**\n * Observer for events connected with pressing keyboard keys.\n *\n * Note that this observer is attached by the {@link module:engine/view/view~View} and is available by default.\n *\n * @extends module:engine/view/observer/domeventobserver~DomEventObserver\n */\nexport default class KeyObserver extends DomEventObserver {\n\tconstructor( view ) {\n\t\tsuper( view );\n\n\t\tthis.domEventType = [ 'keydown', 'keyup' ];\n\t}\n\n\tonDomEvent( domEvt ) {\n\t\tthis.fire( domEvt.type, domEvt, {\n\t\t\tkeyCode: domEvt.keyCode,\n\n\t\t\taltKey: domEvt.altKey,\n\t\t\tctrlKey: domEvt.ctrlKey,\n\t\t\tshiftKey: domEvt.shiftKey,\n\t\t\tmetaKey: domEvt.metaKey,\n\n\t\t\tget keystroke() {\n\t\t\t\treturn getCode( this );\n\t\t\t}\n\t\t} );\n\t}\n}\n\n/**\n * Fired when a key has been pressed.\n *\n * Introduced by {@link module:engine/view/observer/keyobserver~KeyObserver}.\n *\n * Note that because {@link module:engine/view/observer/keyobserver~KeyObserver} is attached by the\n * {@link module:engine/view/view~View} this event is available by default.\n *\n * @see module:engine/view/observer/keyobserver~KeyObserver\n * @event module:engine/view/document~Document#event:keydown\n * @param {module:engine/view/observer/keyobserver~KeyEventData} keyEventData\n */\n\n/**\n * Fired when a key has been released.\n *\n * Introduced by {@link module:engine/view/observer/keyobserver~KeyObserver}.\n *\n * Note that because {@link module:engine/view/observer/keyobserver~KeyObserver} is attached by the\n * {@link module:engine/view/view~View} this event is available by default.\n *\n * @see module:engine/view/observer/keyobserver~KeyObserver\n * @event module:engine/view/document~Document#event:keyup\n * @param {module:engine/view/observer/keyobserver~KeyEventData} keyEventData\n */\n\n/**\n * The value of both events - {@link module:engine/view/document~Document#event:keydown} and\n * {@link module:engine/view/document~Document#event:keyup}.\n *\n * @class module:engine/view/observer/keyobserver~KeyEventData\n * @extends module:engine/view/observer/domeventdata~DomEventData\n * @implements module:utils/keyboard~KeystrokeInfo\n */\n\n/**\n * Code of the whole keystroke. See {@link module:utils/keyboard~getCode}.\n *\n * @readonly\n * @member {Number} module:engine/view/observer/keyobserver~KeyEventData#keystroke\n */\n"],"sourceRoot":""}