UNPKG

3.67 kBPlain TextView Raw
1/**
2 * Copyright (c) 2017 ~ present NAVER Corp.
3 * billboard project is licensed under the MIT license
4 */
5import Chart from "./Chart/Chart";
6import {isObject, mergeObj} from "./module/util";
7
8// eslint-disable-next-line no-use-before-define
9export {bb, bb as default};
10
11let defaults = {};
12
13/**
14 * @namespace bb
15 * @version __VERSION__
16 */
17const bb = {
18 /**
19 * Version information
20 * @property {string} version version
21 * @example
22 * bb.version; // "1.0.0"
23 * @memberof bb
24 */
25 version: "__VERSION__",
26
27 /**
28 * Generate chart
29 * - **NOTE:** Bear in mind for the possiblity of ***throwing an error***, during the generation when:
30 * - Unused option value is given.
31 * - ex) For `data.type="pie"` option, setting 'axis' option can cause unexpected generation error.
32 * - Insufficient value is given for certain option used.
33 * - ex) `data: { x: "x", columns: [["x"], ["data1", 30, 200, 100]] }`
34 * @param {Options} config chart options
35 * @memberof bb
36 * @returns {Chart}
37 * @see {@link Options} for different generation options
38 * @see {@link Chart} for different methods API
39 * @example
40 * <!-- chart holder -->
41 * <div id="LineChart"></div>
42 * @example
43 * // Generate chart with options
44 * var chart = bb.generate({
45 * "bindto": "#LineChart"
46 * "data": {
47 * "columns": [
48 * ["data1", 30, 200, 100, 400, 150, 250],
49 * ["data2", 50, 20, 10, 40, 15, 25]
50 * ],
51 * "type": "line"
52 * }
53 * });
54 *
55 * // call some API
56 * // ex) get the data of 'data1'
57 * chart.data("data1");
58 * @example
59 * // Generate chart by importing ESM
60 * // Import types to be used only, where this will make smaller bundle size.
61 * import bb, {
62 * area,
63 * areaLineRange,
64 * areaSpline,
65 * areaSplineRange,
66 * areaStep,
67 * bar,
68 * bubble,
69 * donut,
70 * gauge,
71 * line,
72 * pie,
73 * radar,
74 * scatter,
75 * spline,
76 * step
77 * }
78 *
79 * bb.generate({
80 * "bindto": "#LineChart"
81 * "data": {
82 * "columns": [
83 * ["data1", 30, 200, 100, 400, 150, 250],
84 * ["data2", 50, 20, 10, 40, 15, 25]
85 * ]
86 * },
87 * type: line(),
88 *
89 * // or
90 * types: {
91 * data1: bar(),
92 * data2: step()
93 * }
94 * });
95 */
96 generate(config) {
97 const options = mergeObj({}, defaults, config);
98 const inst = new Chart(options);
99
100 inst.internal.charts = this.instance;
101 this.instance.push(inst);
102
103 return inst;
104 },
105
106 /**
107 * Set or get global default options.
108 * - **NOTE:**
109 * - The options values settings are valid within page context only.
110 * - If is called multiple times, will override the last value.
111 * @param {Options} options chart options
112 * @memberof bb
113 * @returns {Options}
114 * @see {@link Options}
115 * @example
116 * // Set same option value as for `.generate()`
117 * bb.defaults({
118 * data: {
119 * type: "bar"
120 * }
121 * });
122 *
123 * bb.defaults(); // {data:{type: "bar"}}
124 *
125 * // data.type defaults to 'bar'
126 * var chart = bb.generate({ ... });
127 */
128 defaults(options?) {
129 if (isObject(options)) {
130 defaults = options;
131 }
132
133 return defaults;
134 },
135
136 /**
137 * An array containing instance created
138 * @property {Array} instance instance array
139 * @example
140 * // generate charts
141 * var chart1 = bb.generate(...);
142 * var chart2 = bb.generate(...);
143 *
144 * bb.instance; // [ chart1, chart2, ... ]
145 * @memberof bb
146 */
147 instance: [],
148
149 /**
150 * Namespace for plugins
151 * @property {object} plugin plugin namespace
152 * @example
153 * // Stanford diagram plugin
154 * bb.plugin.stanford;
155 * @memberof bb
156 */
157 plugin: {}
158};