'use strict';

var attr = require('./attr.js');
var attrTween = require('./attrTween.js');
var delay = require('./delay.js');
var duration = require('./duration.js');
var ease = require('./ease.js');
var easeVarying = require('./easeVarying.js');
var filter = require('./filter.js');
var merge = require('./merge.js');
var on = require('./on.js');
var remove = require('./remove.js');
var select = require('./select.js');
var selectAll = require('./selectAll.js');
var selection = require('./selection.js');
var style = require('./style.js');
var styleTween = require('./styleTween.js');
var text = require('./text.js');
var textTween = require('./textTween.js');
var transition = require('./transition.js');
var tween = require('./tween.js');
var end = require('./end.js');
var index = require('../../../../../d3-selection@3.0.0/node_modules/d3-selection/src/selection/index.js');

var id = 0;

function Transition(groups, parents, name, id) {
  this._groups = groups;
  this._parents = parents;
  this._name = name;
  this._id = id;
}

function newId() {
  return ++id;
}

var selection_prototype = index.default.prototype;

Transition.prototype = {
  constructor: Transition,
  select: select,
  selectAll: selectAll,
  selectChild: selection_prototype.selectChild,
  selectChildren: selection_prototype.selectChildren,
  filter: filter,
  merge: merge,
  selection: selection,
  transition: transition,
  call: selection_prototype.call,
  nodes: selection_prototype.nodes,
  node: selection_prototype.node,
  size: selection_prototype.size,
  empty: selection_prototype.empty,
  each: selection_prototype.each,
  on: on,
  attr: attr,
  attrTween: attrTween,
  style: style,
  styleTween: styleTween,
  text: text,
  textTween: textTween,
  remove: remove,
  tween: tween.default,
  delay: delay,
  duration: duration,
  ease: ease,
  easeVarying: easeVarying,
  end: end,
  [Symbol.iterator]: selection_prototype[Symbol.iterator]
};

exports.Transition = Transition;
exports.newId = newId;
