diff --git a/modules/@angular/common/src/common_directives.ts b/modules/@angular/common/src/common_directives.ts
index 4b5b5505ab..efa84f22c6 100644
--- a/modules/@angular/common/src/common_directives.ts
+++ b/modules/@angular/common/src/common_directives.ts
@@ -44,5 +44,7 @@ import {CORE_DIRECTIVES} from './directives';
* ...
* }
* ```
+ *
+ * @experimental Contains forms which are experimental.
*/
export const COMMON_DIRECTIVES: Type[][] = /*@ts2dart_const*/[CORE_DIRECTIVES, FORM_DIRECTIVES];
diff --git a/modules/@angular/common/src/directives/core_directives.ts b/modules/@angular/common/src/directives/core_directives.ts
index 3cc397897b..3e680937c2 100644
--- a/modules/@angular/common/src/directives/core_directives.ts
+++ b/modules/@angular/common/src/directives/core_directives.ts
@@ -46,6 +46,8 @@ import {NgPlural, NgPluralCase} from './ng_plural';
* ...
* }
* ```
+ *
+ * @stable
*/
export const CORE_DIRECTIVES: Type[] = /*@ts2dart_const*/[
NgClass,
diff --git a/modules/@angular/common/src/directives/ng_class.ts b/modules/@angular/common/src/directives/ng_class.ts
index 66b051bd5b..29c9b9f1c0 100644
--- a/modules/@angular/common/src/directives/ng_class.ts
+++ b/modules/@angular/common/src/directives/ng_class.ts
@@ -72,6 +72,8 @@ import {StringMapWrapper, isListLikeIterable} from '../../src/facade/collection'
* }
* }
* ```
+ *
+ * @stable
*/
@Directive({selector: '[ngClass]', inputs: ['rawClass: ngClass', 'initialClasses: class']})
export class NgClass implements DoCheck, OnDestroy {
diff --git a/modules/@angular/common/src/directives/ng_for.ts b/modules/@angular/common/src/directives/ng_for.ts
index e9e82eab64..221172f7ed 100644
--- a/modules/@angular/common/src/directives/ng_for.ts
+++ b/modules/@angular/common/src/directives/ng_for.ts
@@ -76,6 +76,8 @@ export class NgForRow {
*
* See a [live demo](http://plnkr.co/edit/KVuXxDp0qinGDyo307QW?p=preview) for a more detailed
* example.
+ *
+ * @stable
*/
@Directive({selector: '[ngFor][ngForOf]', inputs: ['ngForTrackBy', 'ngForOf', 'ngForTemplate']})
export class NgFor implements DoCheck {
diff --git a/modules/@angular/common/src/directives/ng_if.ts b/modules/@angular/common/src/directives/ng_if.ts
index a3b6ecb488..1037c55c9f 100644
--- a/modules/@angular/common/src/directives/ng_if.ts
+++ b/modules/@angular/common/src/directives/ng_if.ts
@@ -22,6 +22,8 @@ import {isBlank} from '../../src/facade/lang';
* - `
...
`
* - `...
`
* - `...
`
+ *
+ * @stable
*/
@Directive({selector: '[ngIf]', inputs: ['ngIf']})
export class NgIf {
diff --git a/modules/@angular/common/src/directives/ng_plural.ts b/modules/@angular/common/src/directives/ng_plural.ts
index ed79280e95..60def2bbd5 100644
--- a/modules/@angular/common/src/directives/ng_plural.ts
+++ b/modules/@angular/common/src/directives/ng_plural.ts
@@ -15,6 +15,9 @@ import {SwitchView} from './ng_switch';
const _CATEGORY_DEFAULT = 'other';
+/**
+ * @experimental
+ */
export abstract class NgLocalization { abstract getPluralCategory(value: any): string; }
/**
@@ -71,6 +74,7 @@ export abstract class NgLocalization { abstract getPluralCategory(value: any): s
* }
*
* ```
+ * @experimental
*/
@Directive({selector: '[ngPluralCase]'})
@@ -84,6 +88,9 @@ export class NgPluralCase {
}
+/**
+ * @experimental
+ */
@Directive({selector: '[ngPlural]'})
export class NgPlural implements AfterContentInit {
private _switchValue: number;
diff --git a/modules/@angular/common/src/directives/ng_style.ts b/modules/@angular/common/src/directives/ng_style.ts
index e721e3061d..07043989b2 100644
--- a/modules/@angular/common/src/directives/ng_style.ts
+++ b/modules/@angular/common/src/directives/ng_style.ts
@@ -59,6 +59,8 @@ import {isPresent, isBlank} from '../../src/facade/lang';
*
* In this example the `font-style`, `font-size` and `font-weight` styles will be updated
* based on the `style` property's value changes.
+ *
+ * @stable
*/
@Directive({selector: '[ngStyle]', inputs: ['rawStyle: ngStyle']})
export class NgStyle implements DoCheck {
diff --git a/modules/@angular/common/src/directives/ng_switch.ts b/modules/@angular/common/src/directives/ng_switch.ts
index b8893144e2..5ac0c6c17d 100644
--- a/modules/@angular/common/src/directives/ng_switch.ts
+++ b/modules/@angular/common/src/directives/ng_switch.ts
@@ -68,6 +68,8 @@ export class SwitchView {
*
* bootstrap(App).catch(err => console.error(err));
* ```
+ *
+ * @experimental
*/
@Directive({selector: '[ngSwitch]', inputs: ['ngSwitch']})
export class NgSwitch {
@@ -166,6 +168,8 @@ export class NgSwitch {
* If multiple match expression match the switch expression value, all of them are displayed.
*
* See {@link NgSwitch} for more details and example.
+ *
+ * @experimental
*/
@Directive({selector: '[ngSwitchWhen]', inputs: ['ngSwitchWhen']})
export class NgSwitchWhen {
@@ -193,6 +197,8 @@ export class NgSwitchWhen {
* value.
*
* See {@link NgSwitch} for more details and example.
+ *
+ * @experimental
*/
@Directive({selector: '[ngSwitchDefault]'})
export class NgSwitchDefault {
diff --git a/modules/@angular/common/src/directives/ng_template_outlet.ts b/modules/@angular/common/src/directives/ng_template_outlet.ts
index b34ff8d610..8cb31e93a6 100644
--- a/modules/@angular/common/src/directives/ng_template_outlet.ts
+++ b/modules/@angular/common/src/directives/ng_template_outlet.ts
@@ -6,6 +6,8 @@ import {isPresent} from '../../src/facade/lang';
*
* ### Syntax
* - ``
+ *
+ * @experimental
*/
@Directive({selector: '[ngTemplateOutlet]'})
export class NgTemplateOutlet {
diff --git a/modules/@angular/common/src/forms.ts b/modules/@angular/common/src/forms.ts
index e2126eb4c4..13c6f31d74 100644
--- a/modules/@angular/common/src/forms.ts
+++ b/modules/@angular/common/src/forms.ts
@@ -52,12 +52,7 @@ import {Type} from '@angular/core';
* ```typescript
* bootstrap(MyApp, [FORM_PROVIDERS]);
* ```
+ *
+ * @experimental
*/
export const FORM_PROVIDERS: Type[] = /*@ts2dart_const*/[FormBuilder, RadioControlRegistry];
-
-/**
- * See {@link FORM_PROVIDERS} instead.
- *
- * @deprecated
- */
-export const FORM_BINDINGS = /*@ts2dart_const*/ FORM_PROVIDERS;
diff --git a/modules/@angular/common/src/forms/directives.ts b/modules/@angular/common/src/forms/directives.ts
index 7ef3b2215c..6f370f5796 100644
--- a/modules/@angular/common/src/forms/directives.ts
+++ b/modules/@angular/common/src/forms/directives.ts
@@ -71,6 +71,7 @@ export {ControlValueAccessor} from './directives/control_value_accessor';
* })
* class MyApp {}
* ```
+ * @experimental
*/
export const FORM_DIRECTIVES: Type[] = /*@ts2dart_const*/[
NgControlName,
diff --git a/modules/@angular/common/src/forms/directives/abstract_control_directive.ts b/modules/@angular/common/src/forms/directives/abstract_control_directive.ts
index 52c221e9f1..a5ffab45c7 100644
--- a/modules/@angular/common/src/forms/directives/abstract_control_directive.ts
+++ b/modules/@angular/common/src/forms/directives/abstract_control_directive.ts
@@ -6,6 +6,8 @@ import {unimplemented} from '../../../src/facade/exceptions';
* Base class for control directives.
*
* Only used internally in the forms module.
+ *
+ * @experimental
*/
export abstract class AbstractControlDirective {
get control(): AbstractControl { return unimplemented(); }
diff --git a/modules/@angular/common/src/forms/directives/checkbox_value_accessor.ts b/modules/@angular/common/src/forms/directives/checkbox_value_accessor.ts
index 4c39bded97..15a1c9b238 100644
--- a/modules/@angular/common/src/forms/directives/checkbox_value_accessor.ts
+++ b/modules/@angular/common/src/forms/directives/checkbox_value_accessor.ts
@@ -14,6 +14,8 @@ export const CHECKBOX_VALUE_ACCESSOR: any = /*@ts2dart_const*/ {
* ```
*
* ```
+ *
+ * @experimental
*/
@Directive({
selector:
diff --git a/modules/@angular/common/src/forms/directives/control_container.ts b/modules/@angular/common/src/forms/directives/control_container.ts
index a84ad46430..e321b51aa8 100644
--- a/modules/@angular/common/src/forms/directives/control_container.ts
+++ b/modules/@angular/common/src/forms/directives/control_container.ts
@@ -5,6 +5,8 @@ import {AbstractControlDirective} from './abstract_control_directive';
* A directive that contains multiple {@link NgControl}s.
*
* Only used by the forms module.
+ *
+ * @experimental
*/
export class ControlContainer extends AbstractControlDirective {
name: string;
diff --git a/modules/@angular/common/src/forms/directives/control_value_accessor.ts b/modules/@angular/common/src/forms/directives/control_value_accessor.ts
index de7c114590..f080268e77 100644
--- a/modules/@angular/common/src/forms/directives/control_value_accessor.ts
+++ b/modules/@angular/common/src/forms/directives/control_value_accessor.ts
@@ -7,6 +7,8 @@ import {OpaqueToken} from '@angular/core';
* DOM element representing an input control.
*
* Please see {@link DefaultValueAccessor} for more information.
+ *
+ * @experimental
*/
export interface ControlValueAccessor {
/**
@@ -29,6 +31,7 @@ export interface ControlValueAccessor {
* Used to provide a {@link ControlValueAccessor} for form controls.
*
* See {@link DefaultValueAccessor} for how to implement one.
+ * @experimental
*/
export const NG_VALUE_ACCESSOR: OpaqueToken =
/*@ts2dart_const*/ new OpaqueToken("NgValueAccessor");
diff --git a/modules/@angular/common/src/forms/directives/default_value_accessor.ts b/modules/@angular/common/src/forms/directives/default_value_accessor.ts
index ad2c45be41..4f0f000fa1 100644
--- a/modules/@angular/common/src/forms/directives/default_value_accessor.ts
+++ b/modules/@angular/common/src/forms/directives/default_value_accessor.ts
@@ -17,6 +17,8 @@ export const DEFAULT_VALUE_ACCESSOR: any = /*@ts2dart_const*/
* ```
*
* ```
+ *
+ * @experimental
*/
@Directive({
selector:
diff --git a/modules/@angular/common/src/forms/directives/form_interface.ts b/modules/@angular/common/src/forms/directives/form_interface.ts
index 70aded2bb8..f1092f46b2 100644
--- a/modules/@angular/common/src/forms/directives/form_interface.ts
+++ b/modules/@angular/common/src/forms/directives/form_interface.ts
@@ -6,6 +6,8 @@ import {Control, ControlGroup} from '../model';
* An interface that {@link NgFormModel} and {@link NgForm} implement.
*
* Only used by the forms module.
+ *
+ * @experimental
*/
export interface Form {
/**
diff --git a/modules/@angular/common/src/forms/directives/ng_control.ts b/modules/@angular/common/src/forms/directives/ng_control.ts
index 5cbe83e79b..ae9899d84a 100644
--- a/modules/@angular/common/src/forms/directives/ng_control.ts
+++ b/modules/@angular/common/src/forms/directives/ng_control.ts
@@ -9,6 +9,8 @@ import {AsyncValidatorFn, ValidatorFn} from './validators';
* It binds a {@link Control} object to a DOM element.
*
* Used internally by Angular forms.
+ *
+ * @experimental
*/
export abstract class NgControl extends AbstractControlDirective {
name: string = null;
diff --git a/modules/@angular/common/src/forms/directives/ng_control_group.ts b/modules/@angular/common/src/forms/directives/ng_control_group.ts
index bbca73f17e..94928dfe1a 100644
--- a/modules/@angular/common/src/forms/directives/ng_control_group.ts
+++ b/modules/@angular/common/src/forms/directives/ng_control_group.ts
@@ -66,6 +66,8 @@ export const controlGroupProvider: any =
*
* This example declares a control group for a user's name. The value and validation state of
* this group can be accessed separately from the overall form.
+ *
+ * @experimental
*/
@Directive({
selector: '[ngControlGroup]',
diff --git a/modules/@angular/common/src/forms/directives/ng_control_name.ts b/modules/@angular/common/src/forms/directives/ng_control_name.ts
index 19d2908734..b9ac348057 100644
--- a/modules/@angular/common/src/forms/directives/ng_control_name.ts
+++ b/modules/@angular/common/src/forms/directives/ng_control_name.ts
@@ -87,6 +87,8 @@ export const controlNameBinding: any =
* }
* }
* ```
+ *
+ * @experimental
*/
@Directive({
selector: '[ngControl]',
diff --git a/modules/@angular/common/src/forms/directives/ng_control_status.ts b/modules/@angular/common/src/forms/directives/ng_control_status.ts
index 43761e4ca4..0bd917cb38 100644
--- a/modules/@angular/common/src/forms/directives/ng_control_status.ts
+++ b/modules/@angular/common/src/forms/directives/ng_control_status.ts
@@ -5,6 +5,8 @@ import {isPresent} from '../../../src/facade/lang';
/**
* Directive automatically applied to Angular forms that sets CSS classes
* based on control status (valid/invalid/dirty/etc).
+ *
+ * @experimental
*/
@Directive({
selector: '[ngControl],[ngModel],[ngFormControl]',
diff --git a/modules/@angular/common/src/forms/directives/ng_form.ts b/modules/@angular/common/src/forms/directives/ng_form.ts
index 8109f88a20..d72ad5b5cf 100644
--- a/modules/@angular/common/src/forms/directives/ng_form.ts
+++ b/modules/@angular/common/src/forms/directives/ng_form.ts
@@ -75,6 +75,8 @@ export const formDirectiveProvider: any =
* }
* }
* ```
+ *
+ * @experimental
*/
@Directive({
selector: 'form:not([ngNoForm]):not([ngFormModel]),ngForm,[ngForm]',
diff --git a/modules/@angular/common/src/forms/directives/ng_form_control.ts b/modules/@angular/common/src/forms/directives/ng_form_control.ts
index 1389990992..a7620fa106 100644
--- a/modules/@angular/common/src/forms/directives/ng_form_control.ts
+++ b/modules/@angular/common/src/forms/directives/ng_form_control.ts
@@ -76,6 +76,8 @@ export const formControlBinding: any =
* login:string;
* }
* ```
+ *
+ * @experimental
*/
@Directive({
selector: '[ngFormControl]',
diff --git a/modules/@angular/common/src/forms/directives/ng_form_model.ts b/modules/@angular/common/src/forms/directives/ng_form_model.ts
index 6067ea020e..6ea56ab801 100644
--- a/modules/@angular/common/src/forms/directives/ng_form_model.ts
+++ b/modules/@angular/common/src/forms/directives/ng_form_model.ts
@@ -96,6 +96,8 @@ export const formDirectiveProvider: any =
* }
* }
* ```
+ *
+ * @experimental
*/
@Directive({
selector: '[ngFormModel]',
diff --git a/modules/@angular/common/src/forms/directives/ng_model.ts b/modules/@angular/common/src/forms/directives/ng_model.ts
index c36dd7dbea..fae8b177c9 100644
--- a/modules/@angular/common/src/forms/directives/ng_model.ts
+++ b/modules/@angular/common/src/forms/directives/ng_model.ts
@@ -47,6 +47,8 @@ export const formControlBinding: any =
* searchQuery: string;
* }
* ```
+ *
+ * @experimental
*/
@Directive({
selector: '[ngModel]:not([ngControl]):not([ngFormControl])',
diff --git a/modules/@angular/common/src/forms/directives/radio_control_value_accessor.ts b/modules/@angular/common/src/forms/directives/radio_control_value_accessor.ts
index e0ce6c3838..9a1a9d36ea 100644
--- a/modules/@angular/common/src/forms/directives/radio_control_value_accessor.ts
+++ b/modules/@angular/common/src/forms/directives/radio_control_value_accessor.ts
@@ -58,6 +58,8 @@ export class RadioControlRegistry {
/**
* The value provided by the forms API for radio buttons.
+ *
+ * @experimental
*/
export class RadioButtonState {
constructor(public checked: boolean, public value: string) {}
diff --git a/modules/@angular/common/src/forms/directives/select_control_value_accessor.ts b/modules/@angular/common/src/forms/directives/select_control_value_accessor.ts
index 3a90be3e1d..3212fec1e5 100644
--- a/modules/@angular/common/src/forms/directives/select_control_value_accessor.ts
+++ b/modules/@angular/common/src/forms/directives/select_control_value_accessor.ts
@@ -43,6 +43,7 @@ function _extractId(valueString: string): string {
* https://bugzilla.mozilla.org/show_bug.cgi?id=1024350
* https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/4660045/
*
+ * @experimental
*/
@Directive({
selector:
@@ -104,6 +105,8 @@ export class SelectControlValueAccessor implements ControlValueAccessor {
*
*
* ```
+ *
+ * @experimental
*/
@Directive({selector: 'option'})
export class NgSelectOption implements OnDestroy {
diff --git a/modules/@angular/common/src/forms/directives/validators.ts b/modules/@angular/common/src/forms/directives/validators.ts
index abbe81d77a..bc4ffbbc20 100644
--- a/modules/@angular/common/src/forms/directives/validators.ts
+++ b/modules/@angular/common/src/forms/directives/validators.ts
@@ -41,6 +41,8 @@ export const REQUIRED_VALIDATOR: any = /*@ts2dart_const*/ /*@ts2dart_Provider*/
* ```
*
* ```
+ *
+ * @experimental
*/
@Directive({
selector: '[required][ngControl],[required][ngFormControl],[required][ngModel]',
@@ -70,6 +72,8 @@ export const MIN_LENGTH_VALIDATOR: any = /*@ts2dart_const*/ /*@ts2dart_Provider*
/**
* A directive which installs the {@link MinLengthValidator} for any `ngControl`,
* `ngFormControl`, or control with `ngModel` that also has a `minlength` attribute.
+ *
+ * @experimental
*/
@Directive({
selector: '[minlength][ngControl],[minlength][ngFormControl],[minlength][ngModel]',
@@ -101,6 +105,8 @@ export const MAX_LENGTH_VALIDATOR: any = /*@ts2dart_const*/ /*@ts2dart_Provider*
/**
* A directive which installs the {@link MaxLengthValidator} for any `ngControl, `ngFormControl`,
* or control with `ngModel` that also has a `maxlength` attribute.
+ *
+ * @experimental
*/
@Directive({
selector: '[maxlength][ngControl],[maxlength][ngFormControl],[maxlength][ngModel]',
@@ -117,6 +123,13 @@ export class MaxLengthValidator implements Validator {
}
+export const PATTERN_VALIDATOR: any = /*@ts2dart_const*/ /*@ts2dart_Provider*/ {
+ provide: NG_VALIDATORS,
+ useExisting: forwardRef(() => PatternValidator),
+ multi: true
+};
+
+
/**
* A Directive that adds the `pattern` validator to any controls marked with the
* `pattern` attribute, via the {@link NG_VALIDATORS} binding. Uses attribute value
@@ -128,12 +141,8 @@ export class MaxLengthValidator implements Validator {
* ```
*
* ```
+ * @experimental
*/
-export const PATTERN_VALIDATOR: any = /*@ts2dart_const*/ /*@ts2dart_Provider*/ {
- provide: NG_VALIDATORS,
- useExisting: forwardRef(() => PatternValidator),
- multi: true
-};
@Directive({
selector: '[pattern][ngControl],[pattern][ngFormControl],[pattern][ngModel]',
providers: [PATTERN_VALIDATOR]
diff --git a/modules/@angular/common/src/forms/form_builder.ts b/modules/@angular/common/src/forms/form_builder.ts
index 2109cf13b5..e7f147e697 100644
--- a/modules/@angular/common/src/forms/form_builder.ts
+++ b/modules/@angular/common/src/forms/form_builder.ts
@@ -45,6 +45,8 @@ import {ValidatorFn, AsyncValidatorFn} from './directives/validators';
* }
* }
* ```
+ *
+ * @experimental
*/
@Injectable()
export class FormBuilder {
diff --git a/modules/@angular/common/src/forms/model.ts b/modules/@angular/common/src/forms/model.ts
index ca04c4c0ce..b4df59bc1f 100644
--- a/modules/@angular/common/src/forms/model.ts
+++ b/modules/@angular/common/src/forms/model.ts
@@ -50,7 +50,7 @@ function toObservable(r: any): Observable {
}
/**
- *
+ * @experimental
*/
export abstract class AbstractControl {
/** @internal */
@@ -266,6 +266,8 @@ export abstract class AbstractControl {
* validation function.
*
* ### Example ([live demo](http://plnkr.co/edit/23DESOpbNnBpBHZt1BR4?p=preview))
+ *
+ * @experimental
*/
export class Control extends AbstractControl {
/** @internal */
@@ -331,6 +333,8 @@ export class Control extends AbstractControl {
* controls, but is of variable length.
*
* ### Example ([live demo](http://plnkr.co/edit/23DESOpbNnBpBHZt1BR4?p=preview))
+ *
+ * @experimental
*/
export class ControlGroup extends AbstractControl {
private _optionals: {[key: string]: boolean};
@@ -448,6 +452,8 @@ export class ControlGroup extends AbstractControl {
* as broken change detection.
*
* ### Example ([live demo](http://plnkr.co/edit/23DESOpbNnBpBHZt1BR4?p=preview))
+ *
+ * @experimental
*/
export class ControlArray extends AbstractControl {
constructor(public controls: AbstractControl[], validator: ValidatorFn = null,
diff --git a/modules/@angular/common/src/forms/validators.ts b/modules/@angular/common/src/forms/validators.ts
index 62990e8780..8976fd0aff 100644
--- a/modules/@angular/common/src/forms/validators.ts
+++ b/modules/@angular/common/src/forms/validators.ts
@@ -14,6 +14,7 @@ import {ValidatorFn, AsyncValidatorFn} from './directives/validators';
* ### Example
*
* {@example core/forms/ts/ng_validators/ng_validators.ts region='ng_validators'}
+ * @experimental
*/
export const NG_VALIDATORS: OpaqueToken = /*@ts2dart_const*/ new OpaqueToken("NgValidators");
@@ -24,6 +25,8 @@ export const NG_VALIDATORS: OpaqueToken = /*@ts2dart_const*/ new OpaqueToken("Ng
* Provide this using `multi: true` to add validators.
*
* See {@link NG_VALIDATORS} for more details.
+ *
+ * @experimental
*/
export const NG_ASYNC_VALIDATORS: OpaqueToken =
/*@ts2dart_const*/ new OpaqueToken("NgAsyncValidators");
@@ -39,6 +42,8 @@ export const NG_ASYNC_VALIDATORS: OpaqueToken =
* ```typescript
* var loginControl = new Control("", Validators.required)
* ```
+ *
+ * @experimental
*/
export class Validators {
/**
diff --git a/modules/@angular/common/src/location/hash_location_strategy.ts b/modules/@angular/common/src/location/hash_location_strategy.ts
index 7ee09e2e0f..741688f3ba 100644
--- a/modules/@angular/common/src/location/hash_location_strategy.ts
+++ b/modules/@angular/common/src/location/hash_location_strategy.ts
@@ -45,6 +45,8 @@ import {UrlChangeListener, PlatformLocation} from './platform_location';
* provide(LocationStrategy, {useClass: HashLocationStrategy})
* ]);
* ```
+ *
+ * @stable
*/
@Injectable()
export class HashLocationStrategy extends LocationStrategy {
diff --git a/modules/@angular/common/src/location/location.ts b/modules/@angular/common/src/location/location.ts
index 284d4c650f..b778ce7d8a 100644
--- a/modules/@angular/common/src/location/location.ts
+++ b/modules/@angular/common/src/location/location.ts
@@ -42,6 +42,8 @@ import {LocationStrategy} from './location_strategy';
*
* bootstrap(AppCmp, [ROUTER_PROVIDERS]);
* ```
+ *
+ * @stable
*/
@Injectable()
export class Location {
diff --git a/modules/@angular/common/src/location/location_strategy.ts b/modules/@angular/common/src/location/location_strategy.ts
index 03db6278ec..966415b2d0 100644
--- a/modules/@angular/common/src/location/location_strategy.ts
+++ b/modules/@angular/common/src/location/location_strategy.ts
@@ -16,6 +16,8 @@ import {UrlChangeListener} from './platform_location';
* `http://example.com/foo` as an equivalent URL.
*
* See these two classes for more.
+ *
+ * @stable
*/
export abstract class LocationStrategy {
abstract path(): string;
@@ -57,5 +59,6 @@ export abstract class LocationStrategy {
* provide(APP_BASE_HREF, {useValue: '/my/app'})
* ]);
* ```
+ * @stable
*/
export const APP_BASE_HREF: OpaqueToken = /*@ts2dart_const*/ new OpaqueToken('appBaseHref');
diff --git a/modules/@angular/common/src/location/path_location_strategy.ts b/modules/@angular/common/src/location/path_location_strategy.ts
index f58968d01a..1763eb9a75 100644
--- a/modules/@angular/common/src/location/path_location_strategy.ts
+++ b/modules/@angular/common/src/location/path_location_strategy.ts
@@ -53,6 +53,8 @@ import {Location} from './location';
* provide(APP_BASE_HREF, {useValue: '/my/app'})
* ]);
* ```
+ *
+ * @stable
*/
@Injectable()
export class PathLocationStrategy extends LocationStrategy {
diff --git a/modules/@angular/common/src/location/platform_location.ts b/modules/@angular/common/src/location/platform_location.ts
index 7c41d2e692..0ca4de54ca 100644
--- a/modules/@angular/common/src/location/platform_location.ts
+++ b/modules/@angular/common/src/location/platform_location.ts
@@ -21,6 +21,8 @@
* {@link Location} / {@link LocationStrategy} and DOM apis flow through the `PlatformLocation`
* class
* they are all platform independent.
+ *
+ * @stable
*/
export abstract class PlatformLocation {
abstract getBaseHrefFromDOM(): string;
@@ -42,6 +44,8 @@ export abstract class PlatformLocation {
/**
* A serializable version of the event from onPopState or onHashChange
+ *
+ * @stable
*/
export interface UrlChangeEvent { type: string; }
diff --git a/modules/@angular/common/src/pipes/async_pipe.ts b/modules/@angular/common/src/pipes/async_pipe.ts
index 4ae366e6be..4d3d8a38cc 100644
--- a/modules/@angular/common/src/pipes/async_pipe.ts
+++ b/modules/@angular/common/src/pipes/async_pipe.ts
@@ -59,6 +59,8 @@ var __unused: Promise; // avoid unused import when Promise union types are
* to the view. Every 500ms, the `time` Observable updates the view with the current time.
*
* {@example core/pipes/ts/async_pipe/async_pipe_example.ts region='AsyncPipeObservable'}
+ *
+ * @stable
*/
@Pipe({name: 'async', pure: false})
@Injectable()
diff --git a/modules/@angular/common/src/pipes/common_pipes.ts b/modules/@angular/common/src/pipes/common_pipes.ts
index 7222ceee52..5964b1e8c1 100644
--- a/modules/@angular/common/src/pipes/common_pipes.ts
+++ b/modules/@angular/common/src/pipes/common_pipes.ts
@@ -20,6 +20,8 @@ import {I18nSelectPipe} from './i18n_select_pipe';
*
* This collection can be used to quickly enumerate all the built-in pipes in the `pipes`
* property of the `@Component` decorator.
+ *
+ * @experimental Contains i18n pipes which are experimental
*/
export const COMMON_PIPES = /*@ts2dart_const*/[
AsyncPipe,
diff --git a/modules/@angular/common/src/pipes/date_pipe.ts b/modules/@angular/common/src/pipes/date_pipe.ts
index 29c5992967..d442099157 100644
--- a/modules/@angular/common/src/pipes/date_pipe.ts
+++ b/modules/@angular/common/src/pipes/date_pipe.ts
@@ -81,6 +81,8 @@ var defaultLocale: string = 'en-US';
* ```
*
* {@example core/pipes/ts/date_pipe/date_pipe_example.ts region='DatePipe'}
+ *
+ * @experimental
*/
@Pipe({name: 'date', pure: true})
@Injectable()
diff --git a/modules/@angular/common/src/pipes/i18n_plural_pipe.ts b/modules/@angular/common/src/pipes/i18n_plural_pipe.ts
index d674e964f5..aa755e9c2f 100644
--- a/modules/@angular/common/src/pipes/i18n_plural_pipe.ts
+++ b/modules/@angular/common/src/pipes/i18n_plural_pipe.ts
@@ -34,9 +34,9 @@ var interpolationExp: RegExp = RegExpWrapper.create('#');
* }
* ```
*
+ * @experimental
*/
@Pipe({name: 'i18nPlural', pure: true})
-@Injectable()
export class I18nPluralPipe implements PipeTransform {
transform(value: number, pluralMap: {[count: string]: string}): string {
var key: string;
diff --git a/modules/@angular/common/src/pipes/i18n_select_pipe.ts b/modules/@angular/common/src/pipes/i18n_select_pipe.ts
index 5ff6925789..6208ca7edd 100644
--- a/modules/@angular/common/src/pipes/i18n_select_pipe.ts
+++ b/modules/@angular/common/src/pipes/i18n_select_pipe.ts
@@ -31,9 +31,10 @@ import {InvalidPipeArgumentException} from './invalid_pipe_argument_exception';
* ...
* }
* ```
+ *
+ * @experimental
*/
@Pipe({name: 'i18nSelect', pure: true})
-@Injectable()
export class I18nSelectPipe implements PipeTransform {
transform(value: string, mapping: {[key: string]: string}): string {
if (!isStringMap(mapping)) {
diff --git a/modules/@angular/common/src/pipes/json_pipe.ts b/modules/@angular/common/src/pipes/json_pipe.ts
index c47dace1f7..99fa5df8cd 100644
--- a/modules/@angular/common/src/pipes/json_pipe.ts
+++ b/modules/@angular/common/src/pipes/json_pipe.ts
@@ -7,10 +7,10 @@ import {Json} from '../../src/facade/lang';
*
* ### Example
* {@example core/pipes/ts/json_pipe/json_pipe_example.ts region='JsonPipe'}
+ *
+ * @stable
*/
-/* @ts2dart_const */
@Pipe({name: 'json', pure: false})
-@Injectable()
export class JsonPipe implements PipeTransform {
transform(value: any): string { return Json.stringify(value); }
}
diff --git a/modules/@angular/common/src/pipes/lowercase_pipe.ts b/modules/@angular/common/src/pipes/lowercase_pipe.ts
index 0dfa4fbeb3..13bc53b647 100644
--- a/modules/@angular/common/src/pipes/lowercase_pipe.ts
+++ b/modules/@angular/common/src/pipes/lowercase_pipe.ts
@@ -8,10 +8,10 @@ import {InvalidPipeArgumentException} from './invalid_pipe_argument_exception';
* ### Example
*
* {@example core/pipes/ts/lowerupper_pipe/lowerupper_pipe_example.ts region='LowerUpperPipe'}
+ *
+ * @experimental
*/
-/* @ts2dart_const */
@Pipe({name: 'lowercase'})
-@Injectable()
export class LowerCasePipe implements PipeTransform {
transform(value: string): string {
if (isBlank(value)) return value;
diff --git a/modules/@angular/common/src/pipes/replace_pipe.ts b/modules/@angular/common/src/pipes/replace_pipe.ts
index e5ecd49faa..9f2f58f62b 100644
--- a/modules/@angular/common/src/pipes/replace_pipe.ts
+++ b/modules/@angular/common/src/pipes/replace_pipe.ts
@@ -35,6 +35,10 @@ import {InvalidPipeArgumentException} from './invalid_pipe_argument_exception';
* --Note--: The 'pattern' parameter will be converted to a RegExp instance. Make sure to escape the
* string properly if you are matching for regular expression special characters like parenthesis,
* brackets etc.
+ *
+ * @deprecated The current pipe has limited functionality. The pipe api is not meant to be able
+ * express complex yet generic value transformations. We recommend that these transformations happen
+ * in the component logic instead.
*/
@Pipe({name: 'replace'})
diff --git a/modules/@angular/common/src/pipes/slice_pipe.ts b/modules/@angular/common/src/pipes/slice_pipe.ts
index 5b746b388e..b4027ec9e5 100644
--- a/modules/@angular/common/src/pipes/slice_pipe.ts
+++ b/modules/@angular/common/src/pipes/slice_pipe.ts
@@ -58,10 +58,11 @@ import {InvalidPipeArgumentException} from './invalid_pipe_argument_exception';
* ## String Examples
*
* {@example core/pipes/ts/slice_pipe/slice_pipe_example.ts region='SlicePipe_string'}
+ *
+ * @stable
*/
@Pipe({name: 'slice', pure: false})
-@Injectable()
export class SlicePipe implements PipeTransform {
transform(value: any, start: number, end: number = null): any {
if (isBlank(value)) return value;
diff --git a/modules/@angular/common/src/pipes/uppercase_pipe.ts b/modules/@angular/common/src/pipes/uppercase_pipe.ts
index b937479a35..a534e2c3ba 100644
--- a/modules/@angular/common/src/pipes/uppercase_pipe.ts
+++ b/modules/@angular/common/src/pipes/uppercase_pipe.ts
@@ -8,9 +8,10 @@ import {InvalidPipeArgumentException} from './invalid_pipe_argument_exception';
* ### Example
*
* {@example core/pipes/ts/lowerupper_pipe/lowerupper_pipe_example.ts region='LowerUpperPipe'}
+ *
+ * @experimental
*/
@Pipe({name: 'uppercase'})
-@Injectable()
export class UpperCasePipe implements PipeTransform {
transform(value: string): string {
if (isBlank(value)) return value;
diff --git a/modules/@angular/core/testing/test_injector.ts b/modules/@angular/core/testing/test_injector.ts
index fe80ffac0d..06fe532d00 100644
--- a/modules/@angular/core/testing/test_injector.ts
+++ b/modules/@angular/core/testing/test_injector.ts
@@ -158,7 +158,7 @@ export class InjectSetupWrapper {
};
}
- /** @Deprecated {use async(withProviders().inject())} */
+ /** @deprecated {use async(withProviders().inject())} */
injectAsync(tokens: any[], fn: Function): Function {
return () => {
this._addProviders();
@@ -172,7 +172,7 @@ export function withProviders(providers: () => any) {
}
/**
- * @Deprecated {use async(inject())}
+ * @deprecated {use async(inject())}
*
* Allows injecting dependencies in `beforeEach()` and `it()`. The test must return
* a promise which will resolve when all asynchronous activity is complete.
diff --git a/modules/@angular/integration_test/public_api_spec.ts b/modules/@angular/integration_test/public_api_spec.ts
index 862bc901c3..ad0680cb88 100644
--- a/modules/@angular/integration_test/public_api_spec.ts
+++ b/modules/@angular/integration_test/public_api_spec.ts
@@ -52,7 +52,6 @@ var COMMON: string[] = [
'DatePipe',
'DecimalPipe',
'DefaultValueAccessor',
- 'FORM_BINDINGS',
'FORM_DIRECTIVES',
'FORM_PROVIDERS',
'Form:dart',