text: /**
   * @license
   * Copyright Google Inc. All Rights Reserved.
   *
   * Use of this source code is governed by an MIT-style license that can be
   * found in the LICENSE file at https://angular.io/license
   */
  import { Attribute, Directive, Host, Input, TemplateRef, ViewContainerRef } from '@angular/core';
  import { isPresent } from '../facade/lang';
  import { NgLocalization, getPluralCategory } from '../localization';
  import { SwitchView } from './ng_switch';
  /**
   * `ngPlural` is an i18n directive that displays DOM sub-trees that match the switch expression
   * value, or failing that, DOM sub-trees that match the switch expression's pluralization category.
   *
   * To use this directive you must provide a container element that sets the `[ngPlural]` attribute
   * to a
   * switch expression.
   *    - Inner elements defined with an `[ngPluralCase]` attribute will display based on their
   * expression.
   *    - If `[ngPluralCase]` is set to a value starting with `=`, it will only display if the value
   * matches the switch expression exactly.
   *    - Otherwise, the view will be treated as a "category match", and will only display if exact
   * value matches aren't found and the value maps to its category for the defined locale.
   *
   * ```typescript
   * @Component({
   *    selector: 'app',
   *    // best practice is to define the locale at the application level
   *    providers: [{provide: LOCALE_ID, useValue: 'en_US'}]
   * })
   * @View({
   *   template: `
   *     <p>Value = {{value}}</p>
   *     <button (click)="inc()">Increment</button>
   *
   *     <div [ngPlural]="value">
   *       <template ngPluralCase="=0">there is nothing</template>
   *       <template ngPluralCase="=1">there is one</template>
   *       <template ngPluralCase="few">there are a few</template>
   *       <template ngPluralCase="other">there is some number</template>
   *     </div>
   *   `,
   *   directives: [NgPlural, NgPluralCase]
   * })
   * export class App {
   *   value = 'init';
   *
   *   inc() {
   *     this.value = this.value === 'init' ? 0 : this.value + 1;
   *   }
   * }
   *
   * ```
   * @experimental
   */
  export var NgPlural = (function () {
      function NgPlural(_localization) {
          this._localization = _localization;
          this._caseViews = {};
      }
      Object.defineProperty(NgPlural.prototype, "ngPlural", {
          set: function (value) {
              this._switchValue = value;
              this._updateView();
          },
          enumerable: true,
          configurable: true
      });
      NgPlural.prototype.addCase = function (value, switchView) { this._caseViews[value] = switchView; };
      /** @internal */
      NgPlural.prototype._updateView = function () {
          this._clearViews();
          var key = getPluralCategory(this._switchValue, Object.keys(this._caseViews), this._localization);
          this._activateView(this._caseViews[key]);
      };
      /** @internal */
      NgPlural.prototype._clearViews = function () {
          if (isPresent(this._activeView))
              this._activeView.destroy();
      };
      /** @internal */
      NgPlural.prototype._activateView = function (view) {
          if (!isPresent(view))
              return;
          this._activeView = view;
          this._activeView.create();
      };
      NgPlural.decorators = [
          { type: Directive, args: [{ selector: '[ngPlural]' },] },
      ];
      /** @nocollapse */
      NgPlural.ctorParameters = [
          { type: NgLocalization, },
      ];
      NgPlural.propDecorators = {
          'ngPlural': [{ type: Input },],
      };
      return NgPlural;
  }());
  /**
   * @experimental
   */
  export var NgPluralCase = (function () {
      function NgPluralCase(value, template, viewContainer, ngPlural) {
          this.value = value;
          ngPlural.addCase(value, new SwitchView(viewContainer, template));
      }
      NgPluralCase.decorators = [
          { type: Directive, args: [{ selector: '[ngPluralCase]' },] },
      ];
      /** @nocollapse */
      NgPluralCase.ctorParameters = [
          { type: undefined, decorators: [{ type: Attribute, args: ['ngPluralCase',] },] },
          { type: TemplateRef, },
          { type: ViewContainerRef, },
          { type: NgPlural, decorators: [{ type: Host },] },
      ];
      return NgPluralCase;
  }());
  //# sourceMappingURL=ng_plural.js.map