Source: core/dimension.js

import _dimensionType from './_dimensionType';

/**
 * appends a dimension to {@link Core#dimensions dimensions} array. A dimenension(key) acts as an index that is used to look up measure(value). A synonym for dimension is independent attribute. Jelly-chart has {@link Core#data data} in an array to be grouped into a hierarchical tree structure with dimensions; multi-dimensions can make multiple levels of grouping. The combination of all dimensions would be unique for each item. Each dimension is converted into a mark(region or node) according to its chart type and level.
 * 
 * @memberOf Core#
 * @function
 * @example
 * core.dimension({field:'Sales', order:'ascending'});
 * core.dimension({field: 'Sales Date', format: '%y', interval: 'year'})
 * core.dimension('Profit');
 * @param {(string|object)} dimension
 * @param {string} dimension.field refers a key property in objects from the {@link Core#data data array}. The key property will be invoked for each element in the input array and must return a string identifier to assign the element to its group. 
 * @param {string} [dimension.order=natural] chooses comparator types among natural, ascending and descending, sorting nodes in selected order. 
 * @param {number} [dimension.max=100] maximum number of nodes
 * @param {string|function} [dimension.format=undefined] a time formatter for the given string {@link https://github.com/d3/d3-time-format#locale_format specifier}
 * @param {string|function} [dimension.formatSub=undefined] a sub-time formatter for the given string {@link https://github.com/d3/d3-time-format#locale_format specifier}, which used sub-ticks on it's axis.
 * @param {string} [dimension.interval=undefined] If the dimension has Date type values, set an {@link https://github.com/d3/d3-time#intervals interval} which is a conventional unit of time to grouped its value.
 * @return {Core}
 */
function dimension(dimension) {
  this.__attrs__.dimensions.push(_dimensionType(dimension));
  return this;
}

export default dimension;