text: /**
   * @license Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.
   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
   */
  
  /**
   * @module table/utils/ui/widget
   */
  
  import { isWidget } from '@ckeditor/ckeditor5-widget/src/utils';
  
  /**
   * Returns a table widget editing view element if one is selected.
   *
   * @param {module:engine/view/selection~Selection|module:engine/view/documentselection~DocumentSelection} selection
   * @returns {module:engine/view/element~Element|null}
   */
  export function getSelectedTableWidget( selection ) {
  	const viewElement = selection.getSelectedElement();
  
  	if ( viewElement && isTableWidget( viewElement ) ) {
  		return viewElement;
  	}
  
  	return null;
  }
  
  /**
   * Returns a table widget editing view element if one is among the selection's ancestors.
   *
   * @param {module:engine/view/selection~Selection|module:engine/view/documentselection~DocumentSelection} selection
   * @returns {module:engine/view/element~Element|null}
   */
  export function getTableWidgetAncestor( selection ) {
  	const parentTable = findAncestor( 'table', selection.getFirstPosition() );
  
  	if ( parentTable && isTableWidget( parentTable.parent ) ) {
  		return parentTable.parent;
  	}
  
  	return null;
  }
  
  // Checks if a given view element is a table widget.
  //
  // @param {module:engine/view/element~Element} viewElement
  // @returns {Boolean}
  function isTableWidget( viewElement ) {
  	return !!viewElement.getCustomProperty( 'table' ) && isWidget( viewElement );
  }
  
  function findAncestor( parentName, positionOrElement ) {
  	let parent = positionOrElement.parent;
  
  	while ( parent ) {
  		if ( parent.name === parentName ) {
  			return parent;
  		}
  
  		parent = parent.parent;
  	}
  }
  