{"version":3,"sources":["webpack:///./node_modules/@ckeditor/ckeditor5-widget/src/widgetresize.js"],"names":["WidgetResize","_this","this","editing","editor","domDocument","global","window","document","set","_resizers","Map","view","addObserver","MouseObserver","_observer","Object","create","DomEmitterMixin","listenTo","_mouseDownListener","bind","priority","_mouseMoveListener","_mouseUpListener","redrawFocusedResizer","visibleResizer","redraw","_redrawFocusedResizerThrottled","throttle","on","ui","model","_step","_iterator","_createForOfIteratorHelper","s","n","done","_step$value","D_Projects_UA_repo_Source_Client_UA_User_Web_node_modules_babel_runtime_helpers_esm_slicedToArray_js__WEBPACK_IMPORTED_MODULE_6__","value","viewElement","resizer","isAttached","delete","destroy","err","e","f","viewSelection","selection","selectedElement","getSelectedElement","getResizerByViewElement","stopListening","_step2","_iterator2","values","cancel","options","Resizer","plugins","attach","has","widgetToolbarRepository","get","forceDisabled","clearForceDisabled","domResizeHandle","_step3","_iterator3","containsHandle","event","domEventData","resizeHandle","domTarget","isResizeHandle","_activeResizer","_getResizerByHandle","begin","stop","preventDefault","updateSize","commit","Plugin","mix","ObservableMixin"],"mappings":"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","file":"js/chunk-2d0e491b.1b9a47ba.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 widget/widgetresize\n */\n\nimport Plugin from '@ckeditor/ckeditor5-core/src/plugin';\nimport Resizer from './widgetresize/resizer';\nimport DomEmitterMixin from '@ckeditor/ckeditor5-utils/src/dom/emittermixin';\nimport global from '@ckeditor/ckeditor5-utils/src/dom/global';\nimport ObservableMixin from '@ckeditor/ckeditor5-utils/src/observablemixin';\nimport MouseObserver from '@ckeditor/ckeditor5-engine/src/view/observer/mouseobserver';\nimport mix from '@ckeditor/ckeditor5-utils/src/mix';\nimport { throttle } from 'lodash-es';\n\nimport '../theme/widgetresize.css';\n\n/**\n * The widget resize feature plugin.\n *\n * Use the {@link module:widget/widgetresize~WidgetResize#attachTo} method to create a resizer for the specified widget.\n *\n * @extends module:core/plugin~Plugin\n * @mixes module:utils/observablemixin~ObservableMixin\n */\nexport default class WidgetResize extends Plugin {\n\t/**\n\t * @inheritDoc\n\t */\n\tstatic get pluginName() {\n\t\treturn 'WidgetResize';\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tinit() {\n\t\tconst editing = this.editor.editing;\n\t\tconst domDocument = global.window.document;\n\n\t\t/**\n\t\t * The currently visible resizer.\n\t\t *\n\t\t * @observable\n\t\t * @member {module:widget/widgetresize/resizer~Resizer|null} #visibleResizer\n\t\t */\n\t\tthis.set( 'visibleResizer', null );\n\n\t\t/**\n\t\t * References an active resizer.\n\t\t *\n\t\t * Active resizer means a resizer which handle is actively used by the end user.\n\t\t *\n\t\t * @protected\n\t\t * @observable\n\t\t * @member {module:widget/widgetresize/resizer~Resizer|null} #_activeResizer\n\t\t */\n\t\tthis.set( '_activeResizer', null );\n\n\t\t/**\n\t\t * A map of resizers created using this plugin instance.\n\t\t *\n\t\t * @protected\n\t\t * @type {Map.}\n\t\t */\n\t\tthis._resizers = new Map();\n\n\t\tediting.view.addObserver( MouseObserver );\n\n\t\tthis._observer = Object.create( DomEmitterMixin );\n\n\t\tthis.listenTo( editing.view.document, 'mousedown', this._mouseDownListener.bind( this ), { priority: 'high' } );\n\n\t\tthis._observer.listenTo( domDocument, 'mousemove', this._mouseMoveListener.bind( this ) );\n\t\tthis._observer.listenTo( domDocument, 'mouseup', this._mouseUpListener.bind( this ) );\n\n\t\tconst redrawFocusedResizer = () => {\n\t\t\tif ( this.visibleResizer ) {\n\t\t\t\tthis.visibleResizer.redraw();\n\t\t\t}\n\t\t};\n\n\t\tthis._redrawFocusedResizerThrottled = throttle( redrawFocusedResizer, 200 );\n\n\t\t// Redraws occurring upon a change of visible resizer must not be throttled, as it is crucial for the initial\n\t\t// render. Without it the resizer frame would be misaligned with resizing host for a fraction of second.\n\t\tthis.on( 'change:visibleResizer', redrawFocusedResizer );\n\n\t\t// Redrawing on any change of the UI of the editor (including content changes).\n\t\tthis.editor.ui.on( 'update', this._redrawFocusedResizerThrottled );\n\n\t\t// Remove view widget-resizer mappings for widgets that have been removed from the document.\n\t\t// https://github.com/ckeditor/ckeditor5/issues/10156\n\t\t// https://github.com/ckeditor/ckeditor5/issues/10266\n\t\tthis.editor.model.document.on( 'change', () => {\n\t\t\tfor ( const [ viewElement, resizer ] of this._resizers ) {\n\t\t\t\tif ( !viewElement.isAttached() ) {\n\t\t\t\t\tthis._resizers.delete( viewElement );\n\t\t\t\t\tresizer.destroy();\n\t\t\t\t}\n\t\t\t}\n\t\t}, { priority: 'lowest' } );\n\n\t\t// Resizers need to be redrawn upon window resize, because new window might shrink resize host.\n\t\tthis._observer.listenTo( global.window, 'resize', this._redrawFocusedResizerThrottled );\n\n\t\tconst viewSelection = this.editor.editing.view.document.selection;\n\n\t\tviewSelection.on( 'change', () => {\n\t\t\tconst selectedElement = viewSelection.getSelectedElement();\n\n\t\t\tthis.visibleResizer = this.getResizerByViewElement( selectedElement ) || null;\n\t\t} );\n\t}\n\n\t/**\n\t * @inheritDoc\n\t */\n\tdestroy() {\n\t\tthis._observer.stopListening();\n\n\t\tfor ( const resizer of this._resizers.values() ) {\n\t\t\tresizer.destroy();\n\t\t}\n\n\t\tthis._redrawFocusedResizerThrottled.cancel();\n\t}\n\n\t/**\n\t * @param {module:widget/widgetresize~ResizerOptions} [options] Resizer options.\n\t * @returns {module:widget/widgetresize/resizer~Resizer}\n\t */\n\tattachTo( options ) {\n\t\tconst resizer = new Resizer( options );\n\t\tconst plugins = this.editor.plugins;\n\n\t\tresizer.attach();\n\n\t\tif ( plugins.has( 'WidgetToolbarRepository' ) ) {\n\t\t\t// Hiding widget toolbar to improve the performance\n\t\t\t// (https://github.com/ckeditor/ckeditor5-widget/pull/112#issuecomment-564528765).\n\t\t\tconst widgetToolbarRepository = plugins.get( 'WidgetToolbarRepository' );\n\n\t\t\tresizer.on( 'begin', () => {\n\t\t\t\twidgetToolbarRepository.forceDisabled( 'resize' );\n\t\t\t}, { priority: 'lowest' } );\n\n\t\t\tresizer.on( 'cancel', () => {\n\t\t\t\twidgetToolbarRepository.clearForceDisabled( 'resize' );\n\t\t\t}, { priority: 'highest' } );\n\n\t\t\tresizer.on( 'commit', () => {\n\t\t\t\twidgetToolbarRepository.clearForceDisabled( 'resize' );\n\t\t\t}, { priority: 'highest' } );\n\t\t}\n\n\t\tthis._resizers.set( options.viewElement, resizer );\n\n\t\tconst viewSelection = this.editor.editing.view.document.selection;\n\t\tconst selectedElement = viewSelection.getSelectedElement();\n\n\t\t// If the element the resizer is created for is currently focused, it should become visible.\n\t\tif ( this.getResizerByViewElement( selectedElement ) == resizer ) {\n\t\t\tthis.visibleResizer = resizer;\n\t\t}\n\n\t\treturn resizer;\n\t}\n\n\t/**\n\t * Returns a resizer created for a given view element (widget element).\n\t *\n\t * @param {module:engine/view/containerelement~ContainerElement} viewElement View element associated with the resizer.\n\t * @returns {module:widget/widgetresize/resizer~Resizer|undefined}\n\t */\n\tgetResizerByViewElement( viewElement ) {\n\t\treturn this._resizers.get( viewElement );\n\t}\n\n\t/**\n\t * Returns a resizer that contains a given resize handle.\n\t *\n\t * @protected\n\t * @param {HTMLElement} domResizeHandle\n\t * @returns {module:widget/widgetresize/resizer~Resizer}\n\t */\n\t_getResizerByHandle( domResizeHandle ) {\n\t\tfor ( const resizer of this._resizers.values() ) {\n\t\t\tif ( resizer.containsHandle( domResizeHandle ) ) {\n\t\t\t\treturn resizer;\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @protected\n\t * @param {module:utils/eventinfo~EventInfo} event\n\t * @param {Event} domEventData Native DOM event.\n\t */\n\t_mouseDownListener( event, domEventData ) {\n\t\tconst resizeHandle = domEventData.domTarget;\n\n\t\tif ( !Resizer.isResizeHandle( resizeHandle ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._activeResizer = this._getResizerByHandle( resizeHandle );\n\n\t\tif ( this._activeResizer ) {\n\t\t\tthis._activeResizer.begin( resizeHandle );\n\n\t\t\t// Do not call other events when resizing. See: #6755.\n\t\t\tevent.stop();\n\t\t\tdomEventData.preventDefault();\n\t\t}\n\t}\n\n\t/**\n\t * @protected\n\t * @param {module:utils/eventinfo~EventInfo} event\n\t * @param {Event} domEventData Native DOM event.\n\t */\n\t_mouseMoveListener( event, domEventData ) {\n\t\tif ( this._activeResizer ) {\n\t\t\tthis._activeResizer.updateSize( domEventData );\n\t\t}\n\t}\n\n\t/**\n\t * @protected\n\t */\n\t_mouseUpListener() {\n\t\tif ( this._activeResizer ) {\n\t\t\tthis._activeResizer.commit();\n\t\t\tthis._activeResizer = null;\n\t\t}\n\t}\n}\n\nmix( WidgetResize, ObservableMixin );\n\n/**\n * Interface describing a resizer. It allows to specify the resizing host, custom logic for calculating aspect ratio, etc.\n *\n * @interface ResizerOptions\n */\n\n/**\n * Editor instance associated with the resizer.\n *\n * @member {module:core/editor/editor~Editor} module:widget/widgetresize~ResizerOptions#editor\n */\n\n/**\n * @member {module:engine/model/element~Element} module:widget/widgetresize~ResizerOptions#modelElement\n */\n\n/**\n * A view of an element to be resized. Typically it's the main widget's view instance.\n *\n * @member {module:engine/view/containerelement~ContainerElement} module:widget/widgetresize~ResizerOptions#viewElement\n */\n\n/**\n * A callback to be executed once the resizing process is done.\n *\n * It receives a `Number` (`newValue`) as a parameter.\n *\n * For example, {@link module:image/imageresize~ImageResize} uses it to execute the resize image command\n * which puts the new value into the model.\n *\n * ```js\n * {\n *\teditor,\n *\tmodelElement: data.item,\n *\tviewElement: widget,\n *\n *\tonCommit( newValue ) {\n *\t\teditor.execute( 'resizeImage', { width: newValue } );\n *\t}\n * };\n * ```\n *\n *\n * @member {Function} module:widget/widgetresize~ResizerOptions#onCommit\n */\n\n/**\n * @member {Function} module:widget/widgetresize~ResizerOptions#getResizeHost\n */\n\n/**\n * @member {Function} module:widget/widgetresize~ResizerOptions#isCentered\n */\n"],"sourceRoot":""}