'use strict';

Object.defineProperty(exports, '__esModule', { value: true });

var select = require('./select.js');
var selectAll = require('./selectAll.js');
var selectChild = require('./selectChild.js');
var selectChildren = require('./selectChildren.js');
var filter = require('./filter.js');
var data = require('./data.js');
var enter = require('./enter.js');
var exit = require('./exit.js');
var join = require('./join.js');
var merge = require('./merge.js');
var order = require('./order.js');
var sort = require('./sort.js');
var call = require('./call.js');
var nodes = require('./nodes.js');
var node = require('./node.js');
var size = require('./size.js');
var empty = require('./empty.js');
var each = require('./each.js');
var attr = require('./attr.js');
var style = require('./style.js');
var property = require('./property.js');
var classed = require('./classed.js');
var text = require('./text.js');
var html = require('./html.js');
var raise = require('./raise.js');
var lower = require('./lower.js');
var append = require('./append.js');
var insert = require('./insert.js');
var remove = require('./remove.js');
var clone = require('./clone.js');
var datum = require('./datum.js');
var on = require('./on.js');
var dispatch = require('./dispatch.js');
var iterator = require('./iterator.js');

var root = [null];

function Selection(groups, parents) {
  this._groups = groups;
  this._parents = parents;
}

function selection() {
  return new Selection([[document.documentElement]], root);
}

function selection_selection() {
  return this;
}

Selection.prototype = selection.prototype = {
  constructor: Selection,
  select: select.default,
  selectAll: selectAll.default,
  selectChild: selectChild.default,
  selectChildren: selectChildren.default,
  filter: filter.default,
  data: data.default,
  enter: enter.default,
  exit: exit.default,
  join: join.default,
  merge: merge.default,
  selection: selection_selection,
  order: order.default,
  sort: sort.default,
  call: call.default,
  nodes: nodes.default,
  node: node.default,
  size: size.default,
  empty: empty.default,
  each: each.default,
  attr: attr.default,
  style: style.default,
  property: property.default,
  classed: classed.default,
  text: text.default,
  html: html.default,
  raise: raise.default,
  lower: lower.default,
  append: append.default,
  insert: insert.default,
  remove: remove.default,
  clone: clone.default,
  datum: datum.default,
  on: on.default,
  dispatch: dispatch.default,
  [Symbol.iterator]: iterator.default
};

exports.Selection = Selection;
exports.default = selection;
exports.root = root;
