/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

#include "nsIArray.idl"
#include "nsISupports.idl"
#include "nsIURI.idl"

[scriptable, function, uuid(001ab07c-1b3a-4dbf-a657-fada0065ff55)]
interface nsITouchBarInputCallback : nsISupports
{
  void onCommand();
};

/**
 * Implements an input to be registered on the Mac Touch Bar.
 */

[scriptable, uuid(77441d17-f29c-49d7-982f-f20a5ab5a900)]
interface nsITouchBarInput : nsISupports
{
  readonly attribute AString key;

  /**
   * The lookup key for the button's localized text title.
   */
  attribute AString title;

  /**
   * The URI of an icon file.
   */
  attribute nsIURI image;

  /**
   * The type of the input.
   * Takes one of:
   *   `button`:
   *     A standard button.
   *     If an image is available, only the image is displayed.
   *   `mainButton`:
   *     An extra-wide button. Displays both the image and title.
   *   `scrubber`:
   *     A Scrubber element. Not yet implemented, except in the case of Apple's
   *     pre-built Share scrubber.
   *   `popover`:
   *     An element that displays a new instance of nsTouchBar when tapped.
   *     The elements in the new Touch Bar should be defined in the
   *     input's `children` property.
   *   `label`:
   *     A text label.
   *   `scrollView`:
   *     Contains several buttons, defined in the input's `children` property.
   *     The user can scroll through the buttons.
   */
  attribute AString type;

  /**
   * A callback function to be invoked when an element is touched.
   */
  attribute nsITouchBarInputCallback callback;

  /**
   * A hexadecimal uint32_t specifying the input's
   * background color. If omitted, the default background color is used.
   */
  attribute uint32_t color;

  /**
   * If `true`, the Touch Bar input is greyed out and inoperable.
   */
  attribute boolean disabled;

  /**
   * An array containing an input's children.
   * Available for  type = ("scrollView" || "popover").
   */
  attribute nsIArray children;
};
