text: /**
   * Copyright (c) 2013-present, Facebook, Inc.
   *
   * This source code is licensed under the MIT license found in the
   * LICENSE file in the root directory of this source tree.
   *
   * @typechecks
   * 
   */
  
  /**
   * Constants to represent text directionality
   *
   * Also defines a *global* direciton, to be used in bidi algorithms as a
   * default fallback direciton, when no better direction is found or provided.
   *
   * NOTE: Use `setGlobalDir()`, or update `initGlobalDir()`, to set the initial
   *       global direction value based on the application.
   *
   * Part of the implementation of Unicode Bidirectional Algorithm (UBA)
   * Unicode Standard Annex #9 (UAX9)
   * http://www.unicode.org/reports/tr9/
   */
  
  'use strict';
  
  var invariant = require('./invariant');
  
  var NEUTRAL = 'NEUTRAL'; // No strong direction
  var LTR = 'LTR'; // Left-to-Right direction
  var RTL = 'RTL'; // Right-to-Left direction
  
  var globalDir = null;
  
  // == Helpers ==
  
  /**
   * Check if a directionality value is a Strong one
   */
  function isStrong(dir) {
    return dir === LTR || dir === RTL;
  }
  
  /**
   * Get string value to be used for `dir` HTML attribute or `direction` CSS
   * property.
   */
  function getHTMLDir(dir) {
    !isStrong(dir) ? process.env.NODE_ENV !== 'production' ? invariant(false, '`dir` must be a strong direction to be converted to HTML Direction') : invariant(false) : void 0;
    return dir === LTR ? 'ltr' : 'rtl';
  }
  
  /**
   * Get string value to be used for `dir` HTML attribute or `direction` CSS
   * property, but returns null if `dir` has same value as `otherDir`.
   * `null`.
   */
  function getHTMLDirIfDifferent(dir, otherDir) {
    !isStrong(dir) ? process.env.NODE_ENV !== 'production' ? invariant(false, '`dir` must be a strong direction to be converted to HTML Direction') : invariant(false) : void 0;
    !isStrong(otherDir) ? process.env.NODE_ENV !== 'production' ? invariant(false, '`otherDir` must be a strong direction to be converted to HTML Direction') : invariant(false) : void 0;
    return dir === otherDir ? null : getHTMLDir(dir);
  }
  
  // == Global Direction ==
  
  /**
   * Set the global direction.
   */
  function setGlobalDir(dir) {
    globalDir = dir;
  }
  
  /**
   * Initialize the global direction
   */
  function initGlobalDir() {
    setGlobalDir(LTR);
  }
  
  /**
   * Get the global direction
   */
  function getGlobalDir() {
    if (!globalDir) {
      this.initGlobalDir();
    }
    !globalDir ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Global direction not set.') : invariant(false) : void 0;
    return globalDir;
  }
  
  var UnicodeBidiDirection = {
    // Values
    NEUTRAL: NEUTRAL,
    LTR: LTR,
    RTL: RTL,
    // Helpers
    isStrong: isStrong,
    getHTMLDir: getHTMLDir,
    getHTMLDirIfDifferent: getHTMLDirIfDifferent,
    // Global Direction
    setGlobalDir: setGlobalDir,
    initGlobalDir: initGlobalDir,
    getGlobalDir: getGlobalDir
  };
  
  module.exports = UnicodeBidiDirection;
  