text: /**
   * @license Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved.
   * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
   */
  
  /**
   * @module ui/dropdown/dropdownpanelview
   */
  
  import View from '../view';
  
  /**
   * The dropdown panel view class.
   *
   * See {@link module:ui/dropdown/dropdownview~DropdownView} to learn about the common usage.
   *
   * @extends module:ui/view~View
   */
  export default class DropdownPanelView extends View {
    /**
     * @inheritDoc
     */
    constructor(locale) {
      super(locale);
  
      const bind = this.bindTemplate;
  
      /**
       * Controls whether the panel is visible.
       *
       * @observable
       * @member {Boolean} #isVisible
       */
      this.set('isVisible', false);
  
      /**
       * The position of the panel, relative to the parent.
       *
       * This property is reflected in the CSS class set to {@link #element} that controls
       * the position of the panel.
       *
       * @observable
       * @default 'se'
       * @member {'se'|'sw'|'ne'|'nw'} #position
       */
      this.set('position', 'se');
  
      /**
       * Collection of the child views in this panel.
       *
       * A common child type is the {@link module:ui/list/listview~ListView} and {@link module:ui/toolbar/toolbarview~ToolbarView}.
       * See {@link module:ui/dropdown/utils~addListToDropdown} and
       * {@link module:ui/dropdown/utils~addToolbarToDropdown} to learn more about child views of dropdowns.
       *
       * @readonly
       * @member {module:ui/viewcollection~ViewCollection}
       */
      this.children = this.createCollection();
  
      this.setTemplate({
        tag: 'div',
  
        attributes: {
          class: [
            'ck',
            'ck-reset',
            'ck-dropdown__panel',
            bind.to('position', value => `ck-dropdown__panel_${value}`),
            bind.if('isVisible', 'ck-dropdown__panel-visible'),
          ],
        },
  
        children: this.children,
  
        on: {
          // Drag and drop in the panel should not break the selection in the editor.
          // https://github.com/ckeditor/ckeditor5-ui/issues/228
          selectstart: bind.to(evt => evt.preventDefault()),
        },
      });
    }
  
    /**
     * Focuses the view element or first item in view collection on opening dropdown's panel.
     *
     * See also {@link module:ui/dropdown/dropdownpanelfocusable~DropdownPanelFocusable}.
     */
    focus() {
      if (this.children.length) {
        this.children.first.focus();
      }
    }
  
    /**
     * Focuses the view element or last item in view collection on opening dropdown's panel.
     *
     * See also {@link module:ui/dropdown/dropdownpanelfocusable~DropdownPanelFocusable}.
     */
    focusLast() {
      if (this.children.length) {
        const lastChild = this.children.last;
  
        if (typeof lastChild.focusLast === 'function') {
          lastChild.focusLast();
        } else {
          lastChild.focus();
        }
      }
    }
  }
  