// Copyright 2017 The Cobalt Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

// Custom API for hiding, showing, focusing, blurring, and receiving input
// from an on screen keyboard.

[
  Conditional=COBALT_ENABLE_ON_SCREEN_KEYBOARD
] interface OnScreenKeyboard : EventTarget {
  Promise<void> show();
  Promise<void> hide();
  Promise<void> focus();
  Promise<void> blur();
  readonly attribute boolean shown;

  // If the keyboard is shown, return bounding rectangle in screen pixel
  // coordinates, otherwise return NULL.
  readonly attribute DOMRect? boundingRect;

  // If the keyboard should keep focus, preventing focus from moving away from
  // the keyboard due to user input.
  attribute boolean keepFocus;

  attribute DOMString data;

  attribute EventHandler onshow;
  attribute EventHandler onhide;
  attribute EventHandler onfocus;
  attribute EventHandler onblur;
  attribute EventHandler oninput;
};
