import transition_attr from './attr.mjs';
import transition_attrTween from './attrTween.mjs';
import transition_delay from './delay.mjs';
import transition_duration from './duration.mjs';
import transition_ease from './ease.mjs';
import transition_easeVarying from './easeVarying.mjs';
import transition_filter from './filter.mjs';
import transition_merge from './merge.mjs';
import transition_on from './on.mjs';
import transition_remove from './remove.mjs';
import transition_select from './select.mjs';
import transition_selectAll from './selectAll.mjs';
import transition_selection from './selection.mjs';
import transition_style from './style.mjs';
import transition_styleTween from './styleTween.mjs';
import transition_text from './text.mjs';
import transition_textTween from './textTween.mjs';
import transition_transition from './transition.mjs';
import transition_tween from './tween.mjs';
import transition_end from './end.mjs';
import selection from '../../../../../d3-selection@3.0.0/node_modules/d3-selection/src/selection/index.mjs';

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 = selection.prototype;

Transition.prototype = {
  constructor: Transition,
  select: transition_select,
  selectAll: transition_selectAll,
  selectChild: selection_prototype.selectChild,
  selectChildren: selection_prototype.selectChildren,
  filter: transition_filter,
  merge: transition_merge,
  selection: transition_selection,
  transition: 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: transition_on,
  attr: transition_attr,
  attrTween: transition_attrTween,
  style: transition_style,
  styleTween: transition_styleTween,
  text: transition_text,
  textTween: transition_textTween,
  remove: transition_remove,
  tween: transition_tween,
  delay: transition_delay,
  duration: transition_duration,
  ease: transition_ease,
  easeVarying: transition_easeVarying,
  end: transition_end,
  [Symbol.iterator]: selection_prototype[Symbol.iterator]
};

export { Transition, newId };
