// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

// @dart = 2.5

library metadata;

/**
 * An annotation used to mark a feature as only being supported by a subset
 * of the browsers that Dart supports by default.
 *
 * If an API is not annotated with [SupportedBrowser] then it is assumed to
 * work on all browsers Dart supports.
 */
class SupportedBrowser {
  static const String CHROME = "Chrome";
  static const String FIREFOX = "Firefox";
  static const String IE = "Internet Explorer";
  static const String OPERA = "Opera";
  static const String SAFARI = "Safari";

  /// The name of the browser.
  final String browserName;

  /// The minimum version of the browser that supports the feature, or null
  /// if supported on all versions.
  final String minimumVersion;

  const SupportedBrowser(this.browserName, [this.minimumVersion]);
}

/**
 * An annotation used to mark an API as being experimental.
 *
 * An API is considered to be experimental if it is still going through the
 * process of stabilizing and is subject to change or removal.
 *
 * See also:
 *
 * * [W3C recommendation](http://en.wikipedia.org/wiki/W3C_recommendation)
 */
class Experimental {
  const Experimental();
}

/**
 * Annotation that specifies that a member is editable through generate files.
 *
 * This is used for API generation.
 *
 * [name] should be formatted as `interface.member`.
 */
class DomName {
  final String name;
  const DomName(this.name);
}

/**
 * Metadata that specifies that that member is editable through generated
 * files.
 */
class DocsEditable {
  const DocsEditable();
}

/**
 * Annotation that indicates that an API is not expected to change but has
 * not undergone enough testing to be considered stable.
 */
class Unstable {
  const Unstable();
}
