text: 'use strict';
  
  var React = require('react');
  var RouteHandler = require('./components/RouteHandler');
  var PropTypes = require('./PropTypes');
  
  exports.Nested = React.createClass({
    displayName: 'Nested',
  
    render: function render() {
      return React.createElement(
        'div',
        null,
        React.createElement(
          'h1',
          { className: 'Nested' },
          'Nested'
        ),
        React.createElement(RouteHandler, null)
      );
    }
  });
  
  exports.Foo = React.createClass({
    displayName: 'Foo',
  
    render: function render() {
      return React.createElement(
        'div',
        { className: 'Foo' },
        'Foo'
      );
    }
  });
  
  exports.Bar = React.createClass({
    displayName: 'Bar',
  
    render: function render() {
      return React.createElement(
        'div',
        { className: 'Bar' },
        'Bar'
      );
    }
  });
  
  exports.Baz = React.createClass({
    displayName: 'Baz',
  
    render: function render() {
      return React.createElement(
        'div',
        { className: 'Baz' },
        'Baz'
      );
    }
  });
  
  exports.Async = React.createClass({
    displayName: 'Async',
  
    statics: {
      delay: 10,
  
      willTransitionTo: function willTransitionTo(transition, params, query, callback) {
        setTimeout(callback, exports.Async.delay);
      }
    },
  
    render: function render() {
      return React.createElement(
        'div',
        { className: 'Async' },
        'Async'
      );
    }
  });
  
  exports.RedirectToFoo = React.createClass({
    displayName: 'RedirectToFoo',
  
    statics: {
      willTransitionTo: function willTransitionTo(transition) {
        transition.redirect('/foo');
      }
    },
  
    render: function render() {
      return null;
    }
  });
  
  exports.RedirectToFooAsync = React.createClass({
    displayName: 'RedirectToFooAsync',
  
    statics: {
      delay: 10,
  
      willTransitionTo: function willTransitionTo(transition, params, query, callback) {
        setTimeout(function () {
          transition.redirect('/foo');
          callback();
        }, exports.RedirectToFooAsync.delay);
      }
    },
  
    render: function render() {
      return null;
    }
  });
  
  exports.Abort = React.createClass({
    displayName: 'Abort',
  
    statics: {
      willTransitionTo: function willTransitionTo(transition) {
        transition.abort();
      }
    },
  
    render: function render() {
      return null;
    }
  });
  
  exports.AbortAsync = React.createClass({
    displayName: 'AbortAsync',
  
    statics: {
      delay: 10,
  
      willTransitionTo: function willTransitionTo(transition, params, query, callback) {
        setTimeout(function () {
          transition.abort();
          callback();
        }, exports.AbortAsync.delay);
      }
    },
  
    render: function render() {
      return null;
    }
  });
  
  exports.EchoFooProp = React.createClass({
    displayName: 'EchoFooProp',
  
    render: function render() {
      return React.createElement(
        'div',
        null,
        this.props.foo
      );
    }
  });
  
  exports.EchoBarParam = React.createClass({
    displayName: 'EchoBarParam',
  
    contextTypes: {
      router: PropTypes.router.isRequired
    },
    render: function render() {
      return React.createElement(
        'div',
        { className: 'EchoBarParam' },
        this.context.router.getCurrentParams().bar
      );
    }
  });
  
  exports.TransitionContext = React.createClass({
    displayName: 'TransitionContext',
  
    statics: {
      willTransitionTo: function willTransitionTo(transition) {
        var service = transition.context.getService();
        if (!service.isLoggedIn) {
          transition.redirect('/foo');
        }
      }
    },
    render: function render() {
      return React.createElement(
        'div',
        null,
        'TransitionContext'
      );
    }
  });