text: /*---------------------------------------------------------------------------------------------
   *  Copyright (c) Microsoft Corporation. All rights reserved.
   *  Licensed under the MIT License. See License.txt in the project root for license information.
   *--------------------------------------------------------------------------------------------*/
  import { StandardWheelEvent } from '../../mouseEvent.js';
  import { AbstractScrollbar } from './abstractScrollbar.js';
  import { ARROW_IMG_SIZE } from './scrollbarArrow.js';
  import { ScrollbarState } from './scrollbarState.js';
  import { Codicon, registerCodicon } from '../../../common/codicons.js';
  const scrollbarButtonUpIcon = registerCodicon('scrollbar-button-up', Codicon.triangleUp);
  const scrollbarButtonDownIcon = registerCodicon('scrollbar-button-down', Codicon.triangleDown);
  export class VerticalScrollbar extends AbstractScrollbar {
      constructor(scrollable, options, host) {
          const scrollDimensions = scrollable.getScrollDimensions();
          const scrollPosition = scrollable.getCurrentScrollPosition();
          super({
              lazyRender: options.lazyRender,
              host: host,
              scrollbarState: new ScrollbarState((options.verticalHasArrows ? options.arrowSize : 0), (options.vertical === 2 /* Hidden */ ? 0 : options.verticalScrollbarSize), 
              // give priority to vertical scroll bar over horizontal and let it scroll all the way to the bottom
              0, scrollDimensions.height, scrollDimensions.scrollHeight, scrollPosition.scrollTop),
              visibility: options.vertical,
              extraScrollbarClassName: 'vertical',
              scrollable: scrollable,
              scrollByPage: options.scrollByPage
          });
          if (options.verticalHasArrows) {
              const arrowDelta = (options.arrowSize - ARROW_IMG_SIZE) / 2;
              const scrollbarDelta = (options.verticalScrollbarSize - ARROW_IMG_SIZE) / 2;
              this._createArrow({
                  className: 'scra',
                  icon: scrollbarButtonUpIcon,
                  top: arrowDelta,
                  left: scrollbarDelta,
                  bottom: undefined,
                  right: undefined,
                  bgWidth: options.verticalScrollbarSize,
                  bgHeight: options.arrowSize,
                  onActivate: () => this._host.onMouseWheel(new StandardWheelEvent(null, 0, 1)),
              });
              this._createArrow({
                  className: 'scra',
                  icon: scrollbarButtonDownIcon,
                  top: undefined,
                  left: scrollbarDelta,
                  bottom: arrowDelta,
                  right: undefined,
                  bgWidth: options.verticalScrollbarSize,
                  bgHeight: options.arrowSize,
                  onActivate: () => this._host.onMouseWheel(new StandardWheelEvent(null, 0, -1)),
              });
          }
          this._createSlider(0, Math.floor((options.verticalScrollbarSize - options.verticalSliderSize) / 2), options.verticalSliderSize, undefined);
      }
      _updateSlider(sliderSize, sliderPosition) {
          this.slider.setHeight(sliderSize);
          this.slider.setTop(sliderPosition);
      }
      _renderDomNode(largeSize, smallSize) {
          this.domNode.setWidth(smallSize);
          this.domNode.setHeight(largeSize);
          this.domNode.setRight(0);
          this.domNode.setTop(0);
      }
      onDidScroll(e) {
          this._shouldRender = this._onElementScrollSize(e.scrollHeight) || this._shouldRender;
          this._shouldRender = this._onElementScrollPosition(e.scrollTop) || this._shouldRender;
          this._shouldRender = this._onElementSize(e.height) || this._shouldRender;
          return this._shouldRender;
      }
      _mouseDownRelativePosition(offsetX, offsetY) {
          return offsetY;
      }
      _sliderMousePosition(e) {
          return e.posy;
      }
      _sliderOrthogonalMousePosition(e) {
          return e.posx;
      }
      _updateScrollbarSize(size) {
          this.slider.setWidth(size);
      }
      writeScrollPosition(target, scrollPosition) {
          target.scrollTop = scrollPosition;
      }
  }
  