UNPKG

20.4 kBJavaScriptView Raw
1import range from 'lodash/range';
2import random from 'lodash/random';
3import shuffle from 'lodash/shuffle';
4import { timeDays } from 'd3-time';
5import { timeFormat } from 'd3-time-format';
6
7var randColor = function randColor() {
8 return "hsl(".concat(Math.round(Math.random() * 360), ", 70%, 50%)");
9};
10
11var countryCodes = ['AD', 'AE', 'AF', 'AG', 'AI', 'AL', 'AM', 'AO', 'AQ', 'AR', 'AS', 'AT', 'AU', 'AW', 'AX', 'AZ', 'BA', 'BB', 'BD', 'BE', 'BF', 'BG', 'BH', 'BI', 'BJ', 'BL', 'BM', 'BN', 'BO', 'BQ', 'BQ', 'BR', 'BS', 'BT', 'BV', 'BW', 'BY', 'BZ', 'CA', 'CC', 'CD', 'CF', 'CG', 'CH', 'CI', 'CK', 'CL', 'CM', 'CN', 'CO', 'CR', 'CU', 'CV', 'CW', 'CX', 'CY', 'CZ', 'DE', 'DJ', 'DK', 'DM', 'DO', 'DZ', 'EC', 'EE', 'EG', 'EH', 'ER', 'ES', 'ET', 'FI', 'FJ', 'FK', 'FM', 'FO', 'FR', 'GA', 'GB', 'GD', 'GE', 'GF', 'GG', 'GH', 'GI', 'GL', 'GM', 'GN', 'GP', 'GQ', 'GR', 'GS', 'GT', 'GU', 'GW', 'GY', 'HK', 'HM', 'HN', 'HR', 'HT', 'HU', 'ID', 'IE', 'IL', 'IM', 'IN', 'IO', 'IQ', 'IR', 'IS', 'IT', 'JE', 'JM', 'JO', 'JP', 'KE', 'KG', 'KH', 'KI', 'KM', 'KN', 'KP', 'KR', 'KW', 'KY', 'KZ', 'LA', 'LB', 'LC', 'LI', 'LK', 'LR', 'LS', 'LT', 'LU', 'LV', 'LY', 'MA', 'MC', 'MD', 'ME', 'MF', 'MG', 'MH', 'MK', 'ML', 'MM', 'MN', 'MO', 'MP', 'MQ', 'MR', 'MS', 'MT', 'MU', 'MV', 'MW', 'MX', 'MY', 'MZ', 'NA', 'NC', 'NE', 'NF', 'NG', 'NI', 'NL', 'NO', 'NP', 'NR', 'NU', 'NZ', 'OM', 'PA', 'PE', 'PF', 'PG', 'PH', 'PK', 'PL', 'PM', 'PN', 'PR', 'PS', 'PT', 'PW', 'PY', 'QA', 'RE', 'RO', 'RS', 'RU', 'RW', 'SA', 'SB', 'SC', 'SD', 'SE', 'SG', 'SH', 'SI', 'SJ', 'SK', 'SL', 'SM', 'SN', 'SO', 'SR', 'SS', 'ST', 'SV', 'SX', 'SY', 'SZ', 'TC', 'TD', 'TF', 'TG', 'TH', 'TJ', 'TK', 'TL', 'TM', 'TN', 'TO', 'TR', 'TT', 'TV', 'TW', 'TZ', 'UA', 'UG', 'UM', 'US', 'UY', 'UZ', 'VA', 'VC', 'VE', 'VG', 'VI', 'VN', 'VU', 'WF', 'WS', 'YE', 'YT', 'ZA', 'ZM', 'ZW'];
12
13var names = ['John', 'Raoul', 'Jane', 'Marcel', 'Ibrahim', 'Junko', 'Lyu', 'André', 'Maki', 'Véronique', 'Thibeau', 'Josiane', 'Raphaël', 'Mathéo', 'Margot', 'Hugo', 'Christian', 'Louis', 'Ella', 'Alton', 'Jimmy', 'Guillaume', 'Sébastien', 'Alfred', 'Bon', 'Solange', 'Kendrick', 'Jared', 'Satoko', 'Tomoko', 'Line', 'Delphine', 'Leonard', 'Alphonse', 'Lisa', 'Bart', 'Benjamin', 'Homer', 'Jack'];
14
15var programmingLanguages = ['php', 'make', 'javascript', 'go', 'erlang', 'elixir', 'lisp', 'haskell', 'python', 'ruby', 'hack', 'scala', 'java', 'rust', 'c', 'css', 'sass', 'stylus'];
16
17
18
19var index = /*#__PURE__*/Object.freeze({
20 countryCodes: countryCodes,
21 names: names,
22 programmingLanguages: programmingLanguages
23});
24
25function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); }
26function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance"); }
27function _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); }
28function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } }
29var generateBulletData = function generateBulletData(id, max) {
30 var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},
31 title = _ref.title,
32 subtitle = _ref.subtitle,
33 _ref$rangeCount = _ref.rangeCount,
34 rangeCount = _ref$rangeCount === void 0 ? 5 : _ref$rangeCount,
35 _ref$measureCount = _ref.measureCount,
36 measureCount = _ref$measureCount === void 0 ? 1 : _ref$measureCount,
37 _ref$markerCount = _ref.markerCount,
38 markerCount = _ref$markerCount === void 0 ? 1 : _ref$markerCount,
39 _ref$float = _ref.float,
40 float = _ref$float === void 0 ? false : _ref$float;
41 var ranges = range(rangeCount - 1).reduce(function (acc) {
42 var remaining = max - acc[0];
43 return [random(remaining, float)].concat(_toConsumableArray(acc));
44 }, [max]);
45 var measures = range(measureCount).reduce(function (acc) {
46 if (acc.length === 0) return [random(max, float)];
47 return [random(acc[0], float)].concat(_toConsumableArray(acc));
48 }, []);
49 var markers = range(markerCount).map(function () {
50 return max * 0.6 + random(max * 0.4);
51 });
52 return {
53 id: id,
54 title: title,
55 subtitle: subtitle,
56 ranges: ranges,
57 measures: measures,
58 markers: markers
59 };
60};
61
62var generateChordData = function generateChordData() {
63 var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
64 _ref$keys = _ref.keys,
65 keys = _ref$keys === void 0 ? names : _ref$keys,
66 _ref$size = _ref.size,
67 size = _ref$size === void 0 ? 7 : _ref$size,
68 _ref$minValue = _ref.minValue,
69 minValue = _ref$minValue === void 0 ? 0 : _ref$minValue,
70 _ref$maxValue = _ref.maxValue,
71 maxValue = _ref$maxValue === void 0 ? 2000 : _ref$maxValue;
72 var maxSize = Math.min(keys.length, size);
73 var selectedKeys = keys.slice(0, maxSize);
74 var matrix = range(maxSize).map(function () {
75 return range(maxSize).map(function () {
76 if (Math.random() < 0.66) return random(minValue, maxValue / 4);
77 return random(minValue, maxValue);
78 });
79 });
80 return {
81 matrix: matrix,
82 keys: selectedKeys
83 };
84};
85
86function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }
87function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
88function _toConsumableArray$1(arr) { return _arrayWithoutHoles$1(arr) || _iterableToArray$1(arr) || _nonIterableSpread$1(); }
89function _nonIterableSpread$1() { throw new TypeError("Invalid attempt to spread non-iterable instance"); }
90function _iterableToArray$1(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); }
91function _arrayWithoutHoles$1(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } }
92var generateParallelCoordinatesData = function generateParallelCoordinatesData() {
93 var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
94 _ref$size = _ref.size,
95 size = _ref$size === void 0 ? 26 : _ref$size,
96 _ref$keys = _ref.keys,
97 keys = _ref$keys === void 0 ? [{
98 key: 'temp',
99 random: [-10, 40]
100 }, {
101 key: 'cost',
102 random: [200, 400000]
103 }, {
104 key: 'color',
105 shuffle: ['red', 'yellow', 'green']
106 }, {
107 key: 'target',
108 shuffle: ['A', 'B', 'C', 'D', 'E']
109 }, {
110 key: 'volume',
111 random: [0.2, 7.6]
112 }] : _ref$keys;
113 var datumGenerator = function datumGenerator() {
114 return keys.reduce(function (acc, key) {
115 var value;
116 if (key.random !== undefined) {
117 value = random.apply(void 0, _toConsumableArray$1(key.random));
118 } else if (key.shuffle !== undefined) {
119 value = shuffle(key.shuffle)[0];
120 }
121 return _objectSpread({}, acc, _defineProperty({}, key.key, value));
122 }, {});
123 };
124 return range(size).map(datumGenerator);
125};
126
127function _toConsumableArray$2(arr) { return _arrayWithoutHoles$2(arr) || _iterableToArray$2(arr) || _nonIterableSpread$2(); }
128function _nonIterableSpread$2() { throw new TypeError("Invalid attempt to spread non-iterable instance"); }
129function _iterableToArray$2(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); }
130function _arrayWithoutHoles$2(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } }
131var availableNodes = names.map(function (name) {
132 return {
133 id: name
134 };
135});
136var getNodeTargets = function getNodeTargets(id, links, currentPath) {
137 var targets = links.filter(function (_ref) {
138 var source = _ref.source;
139 return source === id;
140 }).map(function (_ref2) {
141 var target = _ref2.target;
142 if (target === id) {
143 throw new Error("[sankey] a node cannot be linked on itself:\n link: ".concat(id, " \u2014> ").concat(id));
144 }
145 if (currentPath && currentPath.includes(target)) {
146 throw new Error("[sankey] found cyclic dependency:\n link: ".concat(currentPath.join(' —> '), " \u2014> ").concat(target));
147 }
148 return target;
149 });
150 return targets.reduce(function (acc, targetId) {
151 return acc.concat(getNodeTargets(targetId, links, currentPath ? [].concat(_toConsumableArray$2(currentPath), [targetId]) : [id, targetId]));
152 }, targets);
153};
154var getNodesTargets = function getNodesTargets(links) {
155 return links.reduce(function (targetsById, link) {
156 if (!targetsById[link.source]) {
157 targetsById[link.source] = getNodeTargets(link.source, links);
158 }
159 return targetsById;
160 }, {});
161};
162var generateSankeyData = function generateSankeyData() {
163 var _ref3 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
164 nodeCount = _ref3.nodeCount,
165 _ref3$maxIterations = _ref3.maxIterations,
166 maxIterations = _ref3$maxIterations === void 0 ? 3 : _ref3$maxIterations;
167 var nodes = availableNodes.slice(0, nodeCount).map(function (node) {
168 return Object.assign({}, node, {
169 color: randColor()
170 });
171 });
172 var links = [];
173 shuffle(nodes).forEach(function (_ref4) {
174 var id = _ref4.id;
175 range(random(1, maxIterations)).forEach(function () {
176 var targetsById = getNodesTargets(links);
177 var randId = shuffle(nodes.filter(function (n) {
178 return n.id !== id;
179 }).map(function (n) {
180 return n.id;
181 }))[0];
182 if ((!targetsById[randId] || !targetsById[randId].includes(id)) && (!targetsById[id] || !targetsById[id].includes(randId))) {
183 links.push({
184 source: id,
185 target: randId,
186 value: random(5, 200)
187 });
188 }
189 });
190 });
191 return {
192 nodes: nodes,
193 links: links
194 };
195};
196
197function _objectSpread$1(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty$1(target, key, source[key]); }); } return target; }
198function _defineProperty$1(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
199function _toConsumableArray$3(arr) { return _arrayWithoutHoles$3(arr) || _iterableToArray$3(arr) || _nonIterableSpread$3(); }
200function _nonIterableSpread$3() { throw new TypeError("Invalid attempt to spread non-iterable instance"); }
201function _iterableToArray$3(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); }
202function _arrayWithoutHoles$3(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } }
203var randomPrice = function randomPrice() {
204 return random(0, 500);
205};
206var randomVolume = function randomVolume() {
207 return random(4, 20);
208};
209var randomCategory = function randomCategory() {
210 return random(3, 17);
211};
212var generateSwarmPlotData = function generateSwarmPlotData(groups, _ref) {
213 var _ref$min = _ref.min,
214 min = _ref$min === void 0 ? 60 : _ref$min,
215 _ref$max = _ref.max,
216 max = _ref$max === void 0 ? 100 : _ref$max,
217 _ref$categoryCount = _ref.categoryCount,
218 categoryCount = _ref$categoryCount === void 0 ? 0 : _ref$categoryCount;
219 return {
220 groups: groups,
221 data: groups.reduce(function (acc, group, groupIndex) {
222 return [].concat(_toConsumableArray$3(acc), _toConsumableArray$3(range(random(min, max)).map(function () {
223 return randomPrice();
224 }).map(function (price, index) {
225 var datum = {
226 id: "".concat(groupIndex, ".").concat(index),
227 group: group,
228 price: price,
229 volume: randomVolume()
230 };
231 if (categoryCount > 0) {
232 datum.categories = range(categoryCount).map(randomCategory);
233 }
234 return datum;
235 })));
236 }, [])
237 };
238};
239var randomizeSwarmPlotData = function randomizeSwarmPlotData(previousData) {
240 return {
241 groups: previousData.groups,
242 data: previousData.data.map(function (d) {
243 var datum = _objectSpread$1({}, d, {
244 group: shuffle(previousData.groups)[0],
245 price: randomPrice(),
246 volume: randomVolume()
247 });
248 if (d.categories !== undefined) {
249 datum.categories = range(3).map(randomCategory);
250 }
251 return datum;
252 })
253 };
254};
255
256var randColor$1 = randColor;
257var generateProgrammingLanguageStats = function generateProgrammingLanguageStats() {
258 var shouldShuffle = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
259 var limit = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : -1;
260 var langs = programmingLanguages;
261 if (shouldShuffle) {
262 langs = shuffle(langs);
263 }
264 if (limit < 1) {
265 limit = 1 + Math.round(Math.random() * (programmingLanguages.length - 1));
266 }
267 return langs.slice(0, limit).map(function (language) {
268 return {
269 label: language,
270 value: Math.round(Math.random() * 600),
271 color: randColor$1()
272 };
273 });
274};
275var uniqRand = function uniqRand(generator) {
276 var used = [];
277 return function () {
278 var value;
279 do {
280 value = generator.apply(void 0, arguments);
281 } while (used.includes(value));
282 used.push(value);
283 return value;
284 };
285};
286var randCountryCode = function randCountryCode() {
287 return shuffle(countryCodes)[0];
288};
289var generateDrinkStats = function generateDrinkStats() {
290 var xSize = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 16;
291 var rand = function rand() {
292 return random(0, 60);
293 };
294 var types = ['whisky', 'rhum', 'gin', 'vodka', 'cognac'];
295 var country = uniqRand(randCountryCode);
296 var data = types.map(function (id) {
297 return {
298 id: id,
299 color: randColor$1(),
300 data: []
301 };
302 });
303 range(xSize).forEach(function () {
304 var x = country();
305 types.forEach(function (id) {
306 data.find(function (d) {
307 return d.id === id;
308 }).data.push({
309 color: randColor$1(),
310 x: x,
311 y: rand()
312 });
313 });
314 });
315 return data;
316};
317var generateSerie = function generateSerie() {
318 var xSize = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 20;
319 var max = 100 + Math.random() * (Math.random() * 600);
320 return range(xSize).map(function () {
321 return Math.round(Math.random() * max);
322 });
323};
324var generateSeries = function generateSeries(ids, xKeys) {
325 return ids.map(function (id) {
326 return {
327 id: id,
328 color: randColor$1(),
329 data: xKeys.map(function (x) {
330 return {
331 x: x,
332 y: Math.round(Math.random() * 300)
333 };
334 })
335 };
336 });
337};
338var generateStackData = function generateStackData() {
339 var size = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 3;
340 var length = 16;
341 return range(size).map(function () {
342 return generateSerie(length).map(function (v, i) {
343 return {
344 x: i,
345 y: v
346 };
347 });
348 });
349};
350var generateCountriesPopulation = function generateCountriesPopulation(size) {
351 var countryCode = uniqRand(randCountryCode());
352 return range(size).map(function () {
353 return {
354 country: countryCode(),
355 population: 200 + Math.round(Math.random() * Math.random() * 1000000)
356 };
357 });
358};
359var generateDayCounts = function generateDayCounts(from, to) {
360 var maxSize = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0.9;
361 var days = timeDays(from, to);
362 var size = Math.round(days.length * (maxSize * 0.4)) + Math.round(Math.random() * (days.length * (maxSize * 0.6)));
363 var dayFormat = timeFormat('%Y-%m-%d');
364 return shuffle(days).slice(0, size).map(function (day) {
365 return {
366 day: dayFormat(day),
367 value: Math.round(Math.random() * 400)
368 };
369 });
370};
371var generateCountriesData = function generateCountriesData(keys) {
372 var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
373 _ref$size = _ref.size,
374 size = _ref$size === void 0 ? 12 : _ref$size,
375 _ref$min = _ref.min,
376 min = _ref$min === void 0 ? 0 : _ref$min,
377 _ref$max = _ref.max,
378 max = _ref$max === void 0 ? 200 : _ref$max,
379 _ref$withColors = _ref.withColors,
380 withColors = _ref$withColors === void 0 ? true : _ref$withColors;
381 return countryCodes.slice(0, size).map(function (country) {
382 var d = {
383 country: country
384 };
385 keys.forEach(function (key) {
386 d[key] = random(min, max);
387 if (withColors === true) {
388 d["".concat(key, "Color")] = randColor$1();
389 }
390 });
391 return d;
392 });
393};
394var libTreeItems = [['viz', [['stack', [['chart'], ['xAxis'], ['yAxis'], ['layers']]], ['pie', [['chart', [['pie', [['outline'], ['slices'], ['bbox']]], ['donut'], ['gauge']]], ['legends']]]]], ['colors', [['rgb'], ['hsl']]], ['utils', [['randomize'], ['resetClock'], ['noop'], ['tick'], ['forceGC'], ['stackTrace'], ['dbg']]], ['generators', [['address'], ['city'], ['animal'], ['movie'], ['user']]], ['set', [['clone'], ['intersect'], ['merge'], ['reverse'], ['toArray'], ['toObject'], ['fromCSV'], ['slice'], ['append'], ['prepend'], ['shuffle'], ['pick'], ['plouc']]], ['text', [['trim'], ['slugify'], ['snakeCase'], ['camelCase'], ['repeat'], ['padLeft'], ['padRight'], ['sanitize'], ['ploucify']]], ['misc', [['whatever', [['hey'], ['WTF'], ['lol'], ['IMHO']]], ['other'], ['crap', [['crapA'], ['crapB', [['crapB1'], ['crapB2'], ['crapB3'], ['crapB4']]], ['crapC', [['crapC1'], ['crapC2'], ['crapC3'], ['crapC4'], ['crapC5'], ['crapC6'], ['crapC7'], ['crapC8'], ['crapC9']]]]]]]];
395var generateLibTree = function generateLibTree() {
396 var name = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'nivo';
397 var limit = arguments.length > 1 ? arguments[1] : undefined;
398 var children = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : libTreeItems;
399 limit = limit || children.length;
400 if (limit > children.length) {
401 limit = children.length;
402 }
403 var tree = {
404 name: name,
405 color: randColor$1()
406 };
407 if (children && children.length > 0) {
408 tree.children = range(limit).map(function (o, i) {
409 var leaf = children[i];
410 return generateLibTree(leaf[0], null, leaf[1] || []);
411 });
412 } else {
413 tree.loc = Math.round(Math.random() * 200000);
414 }
415 return tree;
416};
417var wines = ['chardonay', 'carmenere', 'syrah'];
418var wineTastes = ['fruity', 'bitter', 'heavy', 'strong', 'sunny'];
419var generateWinesTastes = function generateWinesTastes() {
420 var _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
421 _ref2$randMin = _ref2.randMin,
422 randMin = _ref2$randMin === void 0 ? 20 : _ref2$randMin,
423 _ref2$randMax = _ref2.randMax,
424 randMax = _ref2$randMax === void 0 ? 120 : _ref2$randMax;
425 var data = wineTastes.map(function (taste) {
426 var d = {
427 taste: taste
428 };
429 wines.forEach(function (wine) {
430 d[wine] = random(randMin, randMax);
431 });
432 return d;
433 });
434 return {
435 data: data,
436 keys: wines
437 };
438};
439
440export { generateBulletData, generateChordData, generateCountriesData, generateCountriesPopulation, generateDayCounts, generateDrinkStats, generateLibTree, generateParallelCoordinatesData, generateProgrammingLanguageStats, generateSankeyData, generateSerie, generateSeries, generateStackData, generateSwarmPlotData, generateWinesTastes, randColor$1 as randColor, randCountryCode, randomizeSwarmPlotData, index as sets, uniqRand };