text: define(function () {
    return function ChartSplitFactory(d3) {
      /*
       * Adds div DOM elements to the `.chart-wrapper` element based on the data layout.
       * For example, if the data has rows, it returns the same number of
       * `.chart` elements as row objects.
       */
      return function split(selection) {
        selection.each(function (data) {
          var div = d3.select(this)
            .attr('class', function () {
              // Determine the parent class
              if (data.rows) {
                return 'chart-wrapper-row';
              } else if (data.columns) {
                return 'chart-wrapper-column';
              } else {
                return 'chart-wrapper';
              }
            });
          var divClass;
  
          var charts = div.selectAll('charts')
            .append('div')
            .data(function (d) {
              // Determine the child class
              if (d.rows) {
                divClass = 'chart-row';
                return d.rows;
              } else if (d.columns) {
                divClass = 'chart-column';
                return d.columns;
              } else {
                divClass = 'chart';
                return [d];
              }
            })
            .enter()
            .append('div')
            .attr('class', function () {
              return divClass;
            });
  
          if (!data.geoJson) {
            charts.call(split);
          }
        });
      };
    };
  });
  