@flowmap.gl/data 8.0.0-alpha.1 → 8.0.0-alpha.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (97) hide show
  1. package/dist/FlowmapAggregateAccessors.d.ts +16 -0
  2. package/dist/FlowmapAggregateAccessors.d.ts.map +1 -0
  3. package/dist/FlowmapAggregateAccessors.js +46 -0
  4. package/dist/FlowmapSelectors.d.ts +188 -0
  5. package/dist/FlowmapSelectors.d.ts.map +1 -0
  6. package/dist/FlowmapSelectors.js +863 -0
  7. package/dist/FlowmapState.d.ts +27 -0
  8. package/dist/FlowmapState.d.ts.map +1 -0
  9. package/dist/FlowmapState.js +2 -0
  10. package/dist/cluster/cluster.d.ts.map +1 -1
  11. package/dist/cluster/cluster.js +8 -5
  12. package/dist/colors.d.ts +7 -7
  13. package/dist/colors.d.ts.map +1 -1
  14. package/dist/colors.js +55 -20
  15. package/dist/getViewStateForLocations.d.ts +18 -11
  16. package/dist/getViewStateForLocations.d.ts.map +1 -1
  17. package/dist/getViewStateForLocations.js +23 -20
  18. package/dist/index.d.ts +6 -6
  19. package/dist/index.js +6 -6
  20. package/dist/provider/FlowmapDataProvider.d.ts +16 -0
  21. package/dist/provider/FlowmapDataProvider.d.ts.map +1 -0
  22. package/dist/provider/FlowmapDataProvider.js +17 -0
  23. package/dist/provider/LocalFlowmapDataProvider.d.ts +20 -0
  24. package/dist/provider/LocalFlowmapDataProvider.d.ts.map +1 -0
  25. package/dist/provider/LocalFlowmapDataProvider.js +98 -0
  26. package/dist/types.d.ts +6 -4
  27. package/dist/types.d.ts.map +1 -1
  28. package/dist/types.js +1 -1
  29. package/dist/util.d.ts +0 -1
  30. package/dist/util.d.ts.map +1 -1
  31. package/dist/util.js +1 -4
  32. package/dist-es5/FlowmapAggregateAccessors.d.ts +16 -0
  33. package/dist-es5/FlowmapAggregateAccessors.d.ts.map +1 -0
  34. package/dist-es5/FlowmapAggregateAccessors.js +57 -0
  35. package/{dist/FlowMapSelectors.d.ts → dist-es5/FlowmapSelectors.d.ts} +55 -49
  36. package/dist-es5/FlowmapSelectors.d.ts.map +1 -0
  37. package/dist-es5/FlowmapSelectors.js +1507 -0
  38. package/{dist/FlowMapState.d.ts → dist-es5/FlowmapState.d.ts} +6 -3
  39. package/dist-es5/FlowmapState.d.ts.map +1 -0
  40. package/dist-es5/FlowmapState.js +3 -0
  41. package/dist-es5/cluster/ClusterIndex.d.ts +42 -0
  42. package/dist-es5/cluster/ClusterIndex.d.ts.map +1 -0
  43. package/dist-es5/cluster/ClusterIndex.js +297 -0
  44. package/dist-es5/cluster/cluster.d.ts +31 -0
  45. package/dist-es5/cluster/cluster.d.ts.map +1 -0
  46. package/dist-es5/cluster/cluster.js +266 -0
  47. package/dist-es5/colors.d.ts +103 -0
  48. package/dist-es5/colors.d.ts.map +1 -0
  49. package/dist-es5/colors.js +510 -0
  50. package/dist-es5/getViewStateForLocations.d.ts +23 -0
  51. package/dist-es5/getViewStateForLocations.d.ts.map +1 -0
  52. package/dist-es5/getViewStateForLocations.js +64 -0
  53. package/dist-es5/index.d.ts +11 -0
  54. package/dist-es5/index.d.ts.map +1 -0
  55. package/dist-es5/index.js +28 -0
  56. package/dist-es5/provider/FlowmapDataProvider.d.ts +16 -0
  57. package/dist-es5/provider/FlowmapDataProvider.d.ts.map +1 -0
  58. package/dist-es5/provider/FlowmapDataProvider.js +22 -0
  59. package/dist-es5/provider/LocalFlowmapDataProvider.d.ts +20 -0
  60. package/dist-es5/provider/LocalFlowmapDataProvider.d.ts.map +1 -0
  61. package/dist-es5/provider/LocalFlowmapDataProvider.js +154 -0
  62. package/dist-es5/time.d.ts +24 -0
  63. package/dist-es5/time.d.ts.map +1 -0
  64. package/dist-es5/time.js +168 -0
  65. package/dist-es5/types.d.ts +118 -0
  66. package/dist-es5/types.d.ts.map +1 -0
  67. package/dist-es5/types.js +29 -0
  68. package/dist-es5/util.d.ts +5 -0
  69. package/dist-es5/util.d.ts.map +1 -0
  70. package/dist-es5/util.js +14 -0
  71. package/package.json +7 -5
  72. package/src/{FlowMapAggregateAccessors.ts → FlowmapAggregateAccessors.ts} +14 -9
  73. package/src/{FlowMapSelectors.ts → FlowmapSelectors.ts} +213 -178
  74. package/src/{FlowMapState.ts → FlowmapState.ts} +5 -2
  75. package/src/cluster/cluster.ts +7 -4
  76. package/src/colors.ts +65 -21
  77. package/src/getViewStateForLocations.ts +41 -35
  78. package/src/index.ts +6 -6
  79. package/src/provider/{FlowMapDataProvider.ts → FlowmapDataProvider.ts} +14 -12
  80. package/src/provider/LocalFlowmapDataProvider.ts +122 -0
  81. package/src/types.ts +6 -4
  82. package/src/util.ts +0 -4
  83. package/tsconfig.es5.json +11 -0
  84. package/dist/FlowMapAggregateAccessors.d.ts +0 -15
  85. package/dist/FlowMapAggregateAccessors.d.ts.map +0 -1
  86. package/dist/FlowMapAggregateAccessors.js +0 -43
  87. package/dist/FlowMapSelectors.d.ts.map +0 -1
  88. package/dist/FlowMapSelectors.js +0 -834
  89. package/dist/FlowMapState.d.ts.map +0 -1
  90. package/dist/FlowMapState.js +0 -2
  91. package/dist/provider/FlowMapDataProvider.d.ts +0 -16
  92. package/dist/provider/FlowMapDataProvider.d.ts.map +0 -1
  93. package/dist/provider/FlowMapDataProvider.js +0 -17
  94. package/dist/provider/LocalFlowMapDataProvider.d.ts +0 -20
  95. package/dist/provider/LocalFlowMapDataProvider.d.ts.map +0 -1
  96. package/dist/provider/LocalFlowMapDataProvider.js +0 -87
  97. package/src/provider/LocalFlowMapDataProvider.ts +0 -105
@@ -0,0 +1,266 @@
1
+ "use strict";
2
+ /*
3
+ * Copyright 2022 FlowmapBlue
4
+ * Copyright 2018-2020 Teralytics, modified by FlowmapBlue
5
+ *
6
+ * Licensed under the Apache License, Version 2.0 (the "License");
7
+ * you may not use this file except in compliance with the License.
8
+ * You may obtain a copy of the License at
9
+ *
10
+ * http://www.apache.org/licenses/LICENSE-2.0
11
+ *
12
+ * Unless required by applicable law or agreed to in writing, software
13
+ * distributed under the License is distributed on an "AS IS" BASIS,
14
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ * See the License for the specific language governing permissions and
16
+ * limitations under the License.
17
+ *
18
+ */
19
+ var __assign = (this && this.__assign) || function () {
20
+ __assign = Object.assign || function(t) {
21
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
22
+ s = arguments[i];
23
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
24
+ t[p] = s[p];
25
+ }
26
+ return t;
27
+ };
28
+ return __assign.apply(this, arguments);
29
+ };
30
+ var __values = (this && this.__values) || function(o) {
31
+ var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
32
+ if (m) return m.call(o);
33
+ if (o && typeof o.length === "number") return {
34
+ next: function () {
35
+ if (o && i >= o.length) o = void 0;
36
+ return { value: o && o[i++], done: !o };
37
+ }
38
+ };
39
+ throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
40
+ };
41
+ var __importDefault = (this && this.__importDefault) || function (mod) {
42
+ return (mod && mod.__esModule) ? mod : { "default": mod };
43
+ };
44
+ Object.defineProperty(exports, "__esModule", { value: true });
45
+ exports.clusterLocations = exports.isClusterPoint = exports.isLeafPoint = void 0;
46
+ /**
47
+ * The code in this file is a based on https://github.com/mapbox/supercluster
48
+ */
49
+ // ISC License
50
+ //
51
+ // Copyright (c) 2016, Mapbox
52
+ //
53
+ // Permission to use, copy, modify, and/or distribute this software for any purpose
54
+ // with or without fee is hereby granted, provided that the above copyright notice
55
+ // and this permission notice appear in all copies.
56
+ //
57
+ // THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
58
+ // REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
59
+ // FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
60
+ // INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
61
+ // OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
62
+ // TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
63
+ // THIS SOFTWARE.
64
+ var d3_array_1 = require("d3-array");
65
+ var kdbush_1 = __importDefault(require("kdbush"));
66
+ var defaultOptions = {
67
+ minZoom: 0,
68
+ maxZoom: 16,
69
+ radius: 40,
70
+ extent: 512,
71
+ nodeSize: 64,
72
+ makeClusterName: function (id, numPoints) { return undefined; },
73
+ makeClusterId: function (id) { return "{[".concat(id, "]}"); },
74
+ };
75
+ function isLeafPoint(p) {
76
+ var index = p.index;
77
+ return index != null;
78
+ }
79
+ exports.isLeafPoint = isLeafPoint;
80
+ function isClusterPoint(p) {
81
+ var id = p.id;
82
+ return id != null;
83
+ }
84
+ exports.isClusterPoint = isClusterPoint;
85
+ function clusterLocations(locations, locationAccessors, getLocationWeight, options) {
86
+ var e_1, _a;
87
+ var getLocationLon = locationAccessors.getLocationLon, getLocationLat = locationAccessors.getLocationLat, getLocationId = locationAccessors.getLocationId;
88
+ var opts = __assign(__assign({}, defaultOptions), options);
89
+ var minZoom = opts.minZoom, maxZoom = opts.maxZoom, nodeSize = opts.nodeSize, makeClusterName = opts.makeClusterName, makeClusterId = opts.makeClusterId;
90
+ var trees = new Array(maxZoom + 1);
91
+ // generate a cluster object for each point and index input points into a KD-tree
92
+ var clusters = new Array();
93
+ for (var i = 0; i < locations.length; i++) {
94
+ var x = getLocationLon(locations[i]);
95
+ var y = getLocationLat(locations[i]);
96
+ clusters.push({
97
+ x: lngX(x),
98
+ y: latY(y),
99
+ weight: getLocationWeight(getLocationId(locations[i])),
100
+ zoom: Infinity,
101
+ index: i,
102
+ parentId: -1, // parent cluster id
103
+ });
104
+ }
105
+ trees[maxZoom + 1] = new kdbush_1.default(clusters, getX, getY, nodeSize, Float32Array);
106
+ // cluster points on max zoom, then cluster the results on previous zoom, etc.;
107
+ // results in a cluster hierarchy across zoom levels
108
+ for (var z = maxZoom; z >= minZoom; z--) {
109
+ // create a new set of clusters for the zoom and index them with a KD-tree
110
+ clusters = cluster(clusters, z, trees[z + 1], opts);
111
+ trees[z] = new kdbush_1.default(clusters, getX, getY, nodeSize, Float32Array);
112
+ }
113
+ if (trees.length === 0) {
114
+ return [];
115
+ }
116
+ var numbersOfClusters = trees.map(function (d) { return d.points.length; });
117
+ var maxAvailZoom = numbersOfClusters.indexOf(numbersOfClusters[numbersOfClusters.length - 1]);
118
+ var minAvailZoom = Math.min(maxAvailZoom, numbersOfClusters.lastIndexOf(numbersOfClusters[0]));
119
+ var clusterLevels = new Array();
120
+ for (var zoom = minAvailZoom; zoom <= maxAvailZoom; zoom++) {
121
+ var childrenByParent = void 0;
122
+ var tree = trees[zoom];
123
+ if (zoom < maxAvailZoom) {
124
+ childrenByParent = (0, d3_array_1.rollup)(trees[zoom + 1].points, function (points) {
125
+ return points.map(function (p) {
126
+ return p.id ? makeClusterId(p.id) : getLocationId(locations[p.index]);
127
+ });
128
+ }, function (point) { return point.parentId; });
129
+ }
130
+ var nodes = [];
131
+ try {
132
+ for (var _b = (e_1 = void 0, __values(tree.points)), _c = _b.next(); !_c.done; _c = _b.next()) {
133
+ var point = _c.value;
134
+ var x = point.x, y = point.y, numPoints = point.numPoints;
135
+ if (isLeafPoint(point)) {
136
+ var location_1 = locations[point.index];
137
+ nodes.push({
138
+ id: getLocationId(location_1),
139
+ zoom: zoom,
140
+ lat: getLocationLat(location_1),
141
+ lon: getLocationLon(location_1),
142
+ });
143
+ }
144
+ else if (isClusterPoint(point)) {
145
+ var id = point.id;
146
+ var children = childrenByParent && childrenByParent.get(id);
147
+ if (!children) {
148
+ throw new Error("Cluster ".concat(id, " doesn't have children"));
149
+ }
150
+ nodes.push({
151
+ id: makeClusterId(id),
152
+ name: makeClusterName(id, numPoints),
153
+ zoom: zoom,
154
+ lat: yLat(y),
155
+ lon: xLng(x),
156
+ children: children,
157
+ });
158
+ }
159
+ }
160
+ }
161
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
162
+ finally {
163
+ try {
164
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
165
+ }
166
+ finally { if (e_1) throw e_1.error; }
167
+ }
168
+ clusterLevels.push({
169
+ zoom: zoom,
170
+ nodes: nodes,
171
+ });
172
+ }
173
+ return clusterLevels;
174
+ }
175
+ exports.clusterLocations = clusterLocations;
176
+ function createCluster(x, y, id, numPoints, weight) {
177
+ return {
178
+ x: x,
179
+ y: y,
180
+ zoom: Infinity,
181
+ id: id,
182
+ parentId: -1,
183
+ numPoints: numPoints,
184
+ weight: weight,
185
+ };
186
+ }
187
+ function cluster(points, zoom, tree, options) {
188
+ var e_2, _a;
189
+ var clusters = [];
190
+ var radius = options.radius, extent = options.extent;
191
+ var r = radius / (extent * Math.pow(2, zoom));
192
+ // loop through each point
193
+ for (var i = 0; i < points.length; i++) {
194
+ var p = points[i];
195
+ // if we've already visited the point at this zoom level, skip it
196
+ if (p.zoom <= zoom) {
197
+ continue;
198
+ }
199
+ p.zoom = zoom;
200
+ // find all nearby points
201
+ var neighborIds = tree.within(p.x, p.y, r);
202
+ var weight = p.weight || 1;
203
+ var numPoints = isClusterPoint(p) ? p.numPoints : 1;
204
+ var wx = p.x * weight;
205
+ var wy = p.y * weight;
206
+ // encode both zoom and point index on which the cluster originated
207
+ var id = (i << 5) + (zoom + 1);
208
+ try {
209
+ for (var neighborIds_1 = (e_2 = void 0, __values(neighborIds)), neighborIds_1_1 = neighborIds_1.next(); !neighborIds_1_1.done; neighborIds_1_1 = neighborIds_1.next()) {
210
+ var neighborId = neighborIds_1_1.value;
211
+ var b = tree.points[neighborId];
212
+ // filter out neighbors that are already processed
213
+ if (b.zoom <= zoom) {
214
+ continue;
215
+ }
216
+ b.zoom = zoom; // save the zoom (so it doesn't get processed twice)
217
+ var weight2 = b.weight || 1;
218
+ var numPoints2 = b.numPoints || 1;
219
+ wx += b.x * weight2; // accumulate coordinates for calculating weighted center
220
+ wy += b.y * weight2;
221
+ weight += weight2;
222
+ numPoints += numPoints2;
223
+ b.parentId = id;
224
+ }
225
+ }
226
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
227
+ finally {
228
+ try {
229
+ if (neighborIds_1_1 && !neighborIds_1_1.done && (_a = neighborIds_1.return)) _a.call(neighborIds_1);
230
+ }
231
+ finally { if (e_2) throw e_2.error; }
232
+ }
233
+ if (numPoints === 1) {
234
+ clusters.push(p);
235
+ }
236
+ else {
237
+ p.parentId = id;
238
+ clusters.push(createCluster(wx / weight, wy / weight, id, numPoints, weight));
239
+ }
240
+ }
241
+ return clusters;
242
+ }
243
+ // spherical mercator to longitude/latitude
244
+ function xLng(x) {
245
+ return (x - 0.5) * 360;
246
+ }
247
+ function yLat(y) {
248
+ var y2 = ((180 - y * 360) * Math.PI) / 180;
249
+ return (360 * Math.atan(Math.exp(y2))) / Math.PI - 90;
250
+ }
251
+ // longitude/latitude to spherical mercator in [0..1] range
252
+ function lngX(lng) {
253
+ return lng / 360 + 0.5;
254
+ }
255
+ function latY(lat) {
256
+ var sin = Math.sin((lat * Math.PI) / 180);
257
+ var y = 0.5 - (0.25 * Math.log((1 + sin) / (1 - sin))) / Math.PI;
258
+ return y < 0 ? 0 : y > 1 ? 1 : y;
259
+ }
260
+ function getX(p) {
261
+ return p.x;
262
+ }
263
+ function getY(p) {
264
+ return p.y;
265
+ }
266
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2x1c3Rlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jbHVzdGVyL2NsdXN0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUg7O0dBRUc7QUFFSCxjQUFjO0FBQ2QsRUFBRTtBQUNGLDZCQUE2QjtBQUM3QixFQUFFO0FBQ0YsbUZBQW1GO0FBQ25GLGtGQUFrRjtBQUNsRixtREFBbUQ7QUFDbkQsRUFBRTtBQUNGLGdGQUFnRjtBQUNoRixrRkFBa0Y7QUFDbEYsMkVBQTJFO0FBQzNFLG1GQUFtRjtBQUNuRixpRkFBaUY7QUFDakYsa0ZBQWtGO0FBQ2xGLGlCQUFpQjtBQUVqQixxQ0FBZ0M7QUFDaEMsa0RBQTRCO0FBYzVCLElBQU0sY0FBYyxHQUFZO0lBQzlCLE9BQU8sRUFBRSxDQUFDO0lBQ1YsT0FBTyxFQUFFLEVBQUU7SUFDWCxNQUFNLEVBQUUsRUFBRTtJQUNWLE1BQU0sRUFBRSxHQUFHO0lBQ1gsUUFBUSxFQUFFLEVBQUU7SUFDWixlQUFlLEVBQUUsVUFBQyxFQUFVLEVBQUUsU0FBaUIsSUFBSyxPQUFBLFNBQVMsRUFBVCxDQUFTO0lBQzdELGFBQWEsRUFBRSxVQUFDLEVBQVUsSUFBSyxPQUFBLFlBQUssRUFBRSxPQUFJLEVBQVgsQ0FBVztDQUMzQyxDQUFDO0FBcUJGLFNBQWdCLFdBQVcsQ0FBQyxDQUFRO0lBQzNCLElBQUEsS0FBSyxHQUFJLENBQWMsTUFBbEIsQ0FBbUI7SUFDL0IsT0FBTyxLQUFLLElBQUksSUFBSSxDQUFDO0FBQ3ZCLENBQUM7QUFIRCxrQ0FHQztBQUVELFNBQWdCLGNBQWMsQ0FBQyxDQUFRO0lBQzlCLElBQUEsRUFBRSxHQUFJLENBQWlCLEdBQXJCLENBQXNCO0lBQy9CLE9BQU8sRUFBRSxJQUFJLElBQUksQ0FBQztBQUNwQixDQUFDO0FBSEQsd0NBR0M7QUFJRCxTQUFnQixnQkFBZ0IsQ0FD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QUM7QUFDYixDQUFDO0FBRUQsU0FBUyxJQUFJLENBQUMsQ0FBUTtJQUNwQixPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDYixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAyMDIyIEZsb3dtYXBCbHVlXG4gKiBDb3B5cmlnaHQgMjAxOC0yMDIwIFRlcmFseXRpY3MsIG1vZGlmaWVkIGJ5IEZsb3dtYXBCbHVlXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKlxuICovXG5cbi8qKlxuICogVGhlIGNvZGUgaW4gdGhpcyBmaWxlIGlzIGEgYmFzZWQgb24gaHR0cHM6Ly9naXRodWIuY29tL21hcGJveC9zdXBlcmNsdXN0ZXJcbiAqL1xuXG4vLyBJU0MgTGljZW5zZVxuLy9cbi8vIENvcHlyaWdodCAoYykgMjAxNiwgTWFwYm94XG4vL1xuLy8gUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2Vcbi8vIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2Vcbi8vIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEhcbi8vIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkRcbi8vIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULFxuLy8gSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1Ncbi8vIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUlxuLy8gVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRlxuLy8gVEhJUyBTT0ZUV0FSRS5cblxuaW1wb3J0IHtyb2xsdXB9IGZyb20gJ2QzLWFycmF5JztcbmltcG9ydCBLREJ1c2ggZnJvbSAna2RidXNoJztcbmltcG9ydCB7TG9jYXRpb25XZWlnaHRHZXR0ZXJ9IGZyb20gJy4vQ2x1c3RlckluZGV4JztcbmltcG9ydCB7Q2x1c3RlciwgQ2x1c3RlckxldmVsLCBDbHVzdGVyTm9kZSwgTG9jYXRpb25BY2Nlc3NvcnN9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGludGVyZmFjZSBPcHRpb25zIHtcbiAgbWluWm9vbTogbnVtYmVyOyAvLyBtaW4gem9vbSB0byBnZW5lcmF0ZSBjbHVzdGVycyBvblxuICBtYXhab29tOiBudW1iZXI7IC8vIG1heCB6b29tIGxldmVsIHRvIGNsdXN0ZXIgdGhlIHBvaW50cyBvblxuICByYWRpdXM6IG51bWJlcjsgLy8gY2x1c3RlciByYWRpdXMgaW4gcGl4ZWxzXG4gIGV4dGVudDogbnVtYmVyOyAvLyB0aWxlIGV4dGVudCAocmFkaXVzIGlzIGNhbGN1bGF0ZWQgcmVsYXRpdmUgdG8gaXQpXG4gIG5vZGVTaXplOiBudW1iZXI7IC8vIHNpemUgb2YgdGhlIEtELXRyZWUgbGVhZiBub2RlLCBhZmZlY3RzIHBlcmZvcm1hbmNlXG4gIG1ha2VDbHVzdGVyTmFtZTogKGlkOiBudW1iZXIsIG51bVBvaW50czogbnVtYmVyKSA9PiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIG1ha2VDbHVzdGVySWQ6IChpZDogbnVtYmVyKSA9PiBzdHJpbmc7XG59XG5cbmNvbnN0IGRlZmF1bHRPcHRpb25zOiBPcHRpb25zID0ge1xuICBtaW5ab29tOiAwLFxuICBtYXhab29tOiAxNixcbiAgcmFkaXVzOiA0MCxcbiAgZXh0ZW50OiA1MTIsXG4gIG5vZGVTaXplOiA2NCxcbiAgbWFrZUNsdXN0ZXJOYW1lOiAoaWQ6IG51bWJlciwgbnVtUG9pbnRzOiBudW1iZXIpID0+IHVuZGVmaW5lZCxcbiAgbWFrZUNsdXN0ZXJJZDogKGlkOiBudW1iZXIpID0+IGB7WyR7aWR9XX1gLFxufTtcblxuaW50ZXJmYWNlIEJhc2VQb2ludCB7XG4gIHg6IG51bWJlcjsgLy8gcHJvamVjdGVkIHBvaW50IGNvb3JkaW5hdGVzXG4gIHk6IG51bWJlcjtcbiAgd2VpZ2h0OiBudW1iZXI7XG4gIHpvb206IG51bWJlcjsgLy8gdGhlIGxhc3Qgem9vbSB0aGUgcG9pbnQgd2FzIHByb2Nlc3NlZCBhdFxuICBwYXJlbnRJZDogbnVtYmVyOyAvLyBwYXJlbnQgY2x1c3RlciBpZFxufVxuXG5pbnRlcmZhY2UgTGVhZlBvaW50IGV4dGVuZHMgQmFzZVBvaW50IHtcbiAgaW5kZXg6IG51bWJlcjsgLy8gaW5kZXggb2YgdGhlIHNvdXJjZSBmZWF0dXJlIGluIHRoZSBvcmlnaW5hbCBpbnB1dCBhcnJheSxcbn1cblxuaW50ZXJmYWNlIENsdXN0ZXJQb2ludCBleHRlbmRzIEJhc2VQb2ludCB7XG4gIGlkOiBudW1iZXI7XG4gIG51bVBvaW50czogbnVtYmVyO1xufVxuXG50eXBlIFBvaW50ID0gTGVhZlBvaW50IHwgQ2x1c3RlclBvaW50O1xuXG5leHBvcnQgZnVuY3Rpb24gaXNMZWFmUG9pbnQocDogUG9pbnQpOiBwIGlzIExlYWZQb2ludCB7XG4gIGNvbnN0IHtpbmRleH0gPSBwIGFzIExlYWZQb2ludDtcbiAgcmV0dXJuIGluZGV4ICE9IG51bGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0NsdXN0ZXJQb2ludChwOiBQb2ludCk6IHAgaXMgQ2x1c3RlclBvaW50IHtcbiAgY29uc3Qge2lkfSA9IHAgYXMgQ2x1c3RlclBvaW50O1xuICByZXR1cm4gaWQgIT0gbnVsbDtcbn1cblxudHlwZSBab29tTGV2ZWxLREJ1c2ggPSBhbnk7XG5cbmV4cG9ydCBmdW5jdGlvbiBjbHVzdGVyTG9jYXRpb25zPEw+KFxuICBsb2NhdGlvbnM6IExbXSxcbiAgbG9jYXRpb25BY2Nlc3NvcnM6IExvY2F0aW9uQWNjZXNzb3JzPEw+LFxuICBnZXRMb2NhdGlvbldlaWdodDogTG9jYXRpb25XZWlnaHRHZXR0ZXIsXG4gIG9wdGlvbnM/OiBQYXJ0aWFsPE9wdGlvbnM+LFxuKTogQ2x1c3RlckxldmVsW10ge1xuICBjb25zdCB7Z2V0TG9jYXRpb25Mb24sIGdldExvY2F0aW9uTGF0LCBnZXRMb2NhdGlvbklkfSA9IGxvY2F0aW9uQWNjZXNzb3JzO1xuICBjb25zdCBvcHRzID0ge1xuICAgIC4uLmRlZmF1bHRPcHRpb25zLFxuICAgIC4uLm9wdGlvbnMsXG4gIH07XG4gIGNvbnN0IHttaW5ab29tLCBtYXhab29tLCBub2RlU2l6ZSwgbWFrZUNsdXN0ZXJOYW1lLCBtYWtlQ2x1c3RlcklkfSA9IG9wdHM7XG5cbiAgY29uc3QgdHJlZXMgPSBuZXcgQXJyYXk8Wm9vbUxldmVsS0RCdXNoPihtYXhab29tICsgMSk7XG5cbiAgLy8gZ2VuZXJhdGUgYSBjbHVzdGVyIG9iamVjdCBmb3IgZWFjaCBwb2ludCBhbmQgaW5kZXggaW5wdXQgcG9pbnRzIGludG8gYSBLRC10cmVlXG4gIGxldCBjbHVzdGVycyA9IG5ldyBBcnJheTxQb2ludD4oKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsb2NhdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCB4ID0gZ2V0TG9jYXRpb25Mb24obG9jYXRpb25zW2ldKTtcbiAgICBjb25zdCB5ID0gZ2V0TG9jYXRpb25MYXQobG9jYXRpb25zW2ldKTtcbiAgICBjbHVzdGVycy5wdXNoKHtcbiAgICAgIHg6IGxuZ1goeCksIC8vIHByb2plY3RlZCBwb2ludCBjb29yZGluYXRlc1xuICAgICAgeTogbGF0WSh5KSxcbiAgICAgIHdlaWdodDogZ2V0TG9jYXRpb25XZWlnaHQoZ2V0TG9jYXRpb25JZChsb2NhdGlvbnNbaV0pKSxcbiAgICAgIHpvb206IEluZmluaXR5LCAvLyB0aGUgbGFzdCB6b29tIHRoZSBwb2ludCB3YXMgcHJvY2Vzc2VkIGF0XG4gICAgICBpbmRleDogaSwgLy8gaW5kZXggb2YgdGhlIHNvdXJjZSBmZWF0dXJlIGluIHRoZSBvcmlnaW5hbCBpbnB1dCBhcnJheSxcbiAgICAgIHBhcmVudElkOiAtMSwgLy8gcGFyZW50IGNsdXN0ZXIgaWRcbiAgICB9KTtcbiAgfVxuICB0cmVlc1ttYXhab29tICsgMV0gPSBuZXcgS0RCdXNoKGNsdXN0ZXJzLCBnZXRYLCBnZXRZLCBub2RlU2l6ZSwgRmxvYXQzMkFycmF5KTtcblxuICAvLyBjbHVzdGVyIHBvaW50cyBvbiBtYXggem9vbSwgdGhlbiBjbHVzdGVyIHRoZSByZXN1bHRzIG9uIHByZXZpb3VzIHpvb20sIGV0Yy47XG4gIC8vIHJlc3VsdHMgaW4gYSBjbHVzdGVyIGhpZXJhcmNoeSBhY3Jvc3Mgem9vbSBsZXZlbHNcbiAgZm9yIChsZXQgeiA9IG1heFpvb207IHogPj0gbWluWm9vbTsgei0tKSB7XG4gICAgLy8gY3JlYXRlIGEgbmV3IHNldCBvZiBjbHVzdGVycyBmb3IgdGhlIHpvb20gYW5kIGluZGV4IHRoZW0gd2l0aCBhIEtELXRyZWVcbiAgICBjbHVzdGVycyA9IGNsdXN0ZXIoY2x1c3RlcnMsIHosIHRyZWVzW3ogKyAxXSwgb3B0cyk7XG4gICAgdHJlZXNbel0gPSBuZXcgS0RCdXNoKGNsdXN0ZXJzLCBnZXRYLCBnZXRZLCBub2RlU2l6ZSwgRmxvYXQzMkFycmF5KTtcbiAgfVxuXG4gIGlmICh0cmVlcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgY29uc3QgbnVtYmVyc09mQ2x1c3RlcnMgPSB0cmVlcy5tYXAoKGQpID0+IGQucG9pbnRzLmxlbmd0aCk7XG4gIGNvbnN0IG1heEF2YWlsWm9vbSA9IG51bWJlcnNPZkNsdXN0ZXJzLmluZGV4T2YoXG4gICAgbnVtYmVyc09mQ2x1c3RlcnNbbnVtYmVyc09mQ2x1c3RlcnMubGVuZ3RoIC0gMV0sXG4gICk7XG4gIGNvbnN0IG1pbkF2YWlsWm9vbSA9IE1hdGgubWluKFxuICAgIG1heEF2YWlsWm9vbSxcbiAgICBudW1iZXJzT2ZDbHVzdGVycy5sYXN0SW5kZXhPZihudW1iZXJzT2ZDbHVzdGVyc1swXSksXG4gICk7XG5cbiAgY29uc3QgY2x1c3RlckxldmVscyA9IG5ldyBBcnJheTxDbHVzdGVyTGV2ZWw+KCk7XG4gIGZvciAobGV0IHpvb20gPSBtaW5BdmFpbFpvb207IHpvb20gPD0gbWF4QXZhaWxab29tOyB6b29tKyspIHtcbiAgICBsZXQgY2hpbGRyZW5CeVBhcmVudDogTWFwPG51bWJlciwgc3RyaW5nW10+IHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IHRyZWUgPSB0cmVlc1t6b29tXTtcbiAgICBpZiAoem9vbSA8IG1heEF2YWlsWm9vbSkge1xuICAgICAgY2hpbGRyZW5CeVBhcmVudCA9IHJvbGx1cDxQb2ludCwgc3RyaW5nW10sIG51bWJlcj4oXG4gICAgICAgIHRyZWVzW3pvb20gKyAxXS5wb2ludHMsXG4gICAgICAgIChwb2ludHM6IGFueVtdKSA9PlxuICAgICAgICAgIHBvaW50cy5tYXAoKHA6IGFueSkgPT5cbiAgICAgICAgICAgIHAuaWQgPyBtYWtlQ2x1c3RlcklkKHAuaWQpIDogZ2V0TG9jYXRpb25JZChsb2NhdGlvbnNbcC5pbmRleF0pLFxuICAgICAgICAgICksXG4gICAgICAgIChwb2ludDogYW55KSA9PiBwb2ludC5wYXJlbnRJZCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3Qgbm9kZXM6IENsdXN0ZXJOb2RlW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IHBvaW50IG9mIHRyZWUucG9pbnRzKSB7XG4gICAgICBjb25zdCB7eCwgeSwgbnVtUG9pbnRzfSA9IHBvaW50O1xuICAgICAgaWYgKGlzTGVhZlBvaW50KHBvaW50KSkge1xuICAgICAgICBjb25zdCBsb2NhdGlvbiA9IGxvY2F0aW9uc1twb2ludC5pbmRleF07XG4gICAgICAgIG5vZGVzLnB1c2goe1xuICAgICAgICAgIGlkOiBnZXRMb2NhdGlvbklkKGxvY2F0aW9uKSxcbiAgICAgICAgICB6b29tLFxuICAgICAgICAgIGxhdDogZ2V0TG9jYXRpb25MYXQobG9jYXRpb24pLFxuICAgICAgICAgIGxvbjogZ2V0TG9jYXRpb25Mb24obG9jYXRpb24pLFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAoaXNDbHVzdGVyUG9pbnQocG9pbnQpKSB7XG4gICAgICAgIGNvbnN0IHtpZH0gPSBwb2ludDtcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBjaGlsZHJlbkJ5UGFyZW50ICYmIGNoaWxkcmVuQnlQYXJlbnQuZ2V0KGlkKTtcbiAgICAgICAgaWYgKCFjaGlsZHJlbikge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2x1c3RlciAke2lkfSBkb2Vzbid0IGhhdmUgY2hpbGRyZW5gKTtcbiAgICAgICAgfVxuICAgICAgICBub2Rlcy5wdXNoKHtcbiAgICAgICAgICBpZDogbWFrZUNsdXN0ZXJJZChpZCksXG4gICAgICAgICAgbmFtZTogbWFrZUNsdXN0ZXJOYW1lKGlkLCBudW1Qb2ludHMpLFxuICAgICAgICAgIHpvb20sXG4gICAgICAgICAgbGF0OiB5TGF0KHkpLFxuICAgICAgICAgIGxvbjogeExuZyh4KSxcbiAgICAgICAgICBjaGlsZHJlbixcbiAgICAgICAgfSBhcyBDbHVzdGVyKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY2x1c3RlckxldmVscy5wdXNoKHtcbiAgICAgIHpvb20sXG4gICAgICBub2RlcyxcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gY2x1c3RlckxldmVscztcbn1cblxuZnVuY3Rpb24gY3JlYXRlQ2x1c3RlcihcbiAgeDogbnVtYmVyLFxuICB5OiBudW1iZXIsXG4gIGlkOiBudW1iZXIsXG4gIG51bVBvaW50czogbnVtYmVyLFxuICB3ZWlnaHQ6IG51bWJlcixcbik6IENsdXN0ZXJQb2ludCB7XG4gIHJldHVybiB7XG4gICAgeCwgLy8gd2VpZ2h0ZWQgY2x1c3RlciBjZW50ZXJcbiAgICB5LFxuICAgIHpvb206IEluZmluaXR5LCAvLyB0aGUgbGFzdCB6b29tIHRoZSBjbHVzdGVyIHdhcyBwcm9jZXNzZWQgYXRcbiAgICBpZCwgLy8gZW5jb2RlcyBpbmRleCBvZiB0aGUgZmlyc3QgY2hpbGQgb2YgdGhlIGNsdXN0ZXIgYW5kIGl0cyB6b29tIGxldmVsXG4gICAgcGFyZW50SWQ6IC0xLCAvLyBwYXJlbnQgY2x1c3RlciBpZFxuICAgIG51bVBvaW50cyxcbiAgICB3ZWlnaHQsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNsdXN0ZXIoXG4gIHBvaW50czogUG9pbnRbXSxcbiAgem9vbTogbnVtYmVyLFxuICB0cmVlOiBab29tTGV2ZWxLREJ1c2gsXG4gIG9wdGlvbnM6IE9wdGlvbnMsXG4pIHtcbiAgY29uc3QgY2x1c3RlcnM6IFBvaW50W10gPSBbXTtcbiAgY29uc3Qge3JhZGl1cywgZXh0ZW50fSA9IG9wdGlvbnM7XG4gIGNvbnN0IHIgPSByYWRpdXMgLyAoZXh0ZW50ICogTWF0aC5wb3coMiwgem9vbSkpO1xuXG4gIC8vIGxvb3AgdGhyb3VnaCBlYWNoIHBvaW50XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgcCA9IHBvaW50c1tpXTtcbiAgICAvLyBpZiB3ZSd2ZSBhbHJlYWR5IHZpc2l0ZWQgdGhlIHBvaW50IGF0IHRoaXMgem9vbSBsZXZlbCwgc2tpcCBpdFxuICAgIGlmIChwLnpvb20gPD0gem9vbSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIHAuem9vbSA9IHpvb207XG5cbiAgICAvLyBmaW5kIGFsbCBuZWFyYnkgcG9pbnRzXG4gICAgY29uc3QgbmVpZ2hib3JJZHMgPSB0cmVlLndpdGhpbihwLngsIHAueSwgcik7XG5cbiAgICBsZXQgd2VpZ2h0ID0gcC53ZWlnaHQgfHwgMTtcbiAgICBsZXQgbnVtUG9pbnRzID0gaXNDbHVzdGVyUG9pbnQocCkgPyBwLm51bVBvaW50cyA6IDE7XG4gICAgbGV0IHd4ID0gcC54ICogd2VpZ2h0O1xuICAgIGxldCB3eSA9IHAueSAqIHdlaWdodDtcblxuICAgIC8vIGVuY29kZSBib3RoIHpvb20gYW5kIHBvaW50IGluZGV4IG9uIHdoaWNoIHRoZSBjbHVzdGVyIG9yaWdpbmF0ZWRcbiAgICBjb25zdCBpZCA9IChpIDw8IDUpICsgKHpvb20gKyAxKTtcblxuICAgIGZvciAoY29uc3QgbmVpZ2hib3JJZCBvZiBuZWlnaGJvcklkcykge1xuICAgICAgY29uc3QgYiA9IHRyZWUucG9pbnRzW25laWdoYm9ySWRdO1xuICAgICAgLy8gZmlsdGVyIG91dCBuZWlnaGJvcnMgdGhhdCBhcmUgYWxyZWFkeSBwcm9jZXNzZWRcbiAgICAgIGlmIChiLnpvb20gPD0gem9vbSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGIuem9vbSA9IHpvb207IC8vIHNhdmUgdGhlIHpvb20gKHNvIGl0IGRvZXNuJ3QgZ2V0IHByb2Nlc3NlZCB0d2ljZSlcblxuICAgICAgY29uc3Qgd2VpZ2h0MiA9IGIud2VpZ2h0IHx8IDE7XG4gICAgICBjb25zdCBudW1Qb2ludHMyID0gYi5udW1Qb2ludHMgfHwgMTtcbiAgICAgIHd4ICs9IGIueCAqIHdlaWdodDI7IC8vIGFjY3VtdWxhdGUgY29vcmRpbmF0ZXMgZm9yIGNhbGN1bGF0aW5nIHdlaWdodGVkIGNlbnRlclxuICAgICAgd3kgKz0gYi55ICogd2VpZ2h0MjtcblxuICAgICAgd2VpZ2h0ICs9IHdlaWdodDI7XG4gICAgICBudW1Qb2ludHMgKz0gbnVtUG9pbnRzMjtcbiAgICAgIGIucGFyZW50SWQgPSBpZDtcbiAgICB9XG5cbiAgICBpZiAobnVtUG9pbnRzID09PSAxKSB7XG4gICAgICBjbHVzdGVycy5wdXNoKHApO1xuICAgIH0gZWxzZSB7XG4gICAgICBwLnBhcmVudElkID0gaWQ7XG4gICAgICBjbHVzdGVycy5wdXNoKFxuICAgICAgICBjcmVhdGVDbHVzdGVyKHd4IC8gd2VpZ2h0LCB3eSAvIHdlaWdodCwgaWQsIG51bVBvaW50cywgd2VpZ2h0KSxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNsdXN0ZXJzO1xufVxuXG4vLyBzcGhlcmljYWwgbWVyY2F0b3IgdG8gbG9uZ2l0dWRlL2xhdGl0dWRlXG5mdW5jdGlvbiB4TG5nKHg6IG51bWJlcikge1xuICByZXR1cm4gKHggLSAwLjUpICogMzYwO1xufVxuXG5mdW5jdGlvbiB5TGF0KHk6IG51bWJlcikge1xuICBjb25zdCB5MiA9ICgoMTgwIC0geSAqIDM2MCkgKiBNYXRoLlBJKSAvIDE4MDtcbiAgcmV0dXJuICgzNjAgKiBNYXRoLmF0YW4oTWF0aC5leHAoeTIpKSkgLyBNYXRoLlBJIC0gOTA7XG59XG5cbi8vIGxvbmdpdHVkZS9sYXRpdHVkZSB0byBzcGhlcmljYWwgbWVyY2F0b3IgaW4gWzAuLjFdIHJhbmdlXG5mdW5jdGlvbiBsbmdYKGxuZzogbnVtYmVyKSB7XG4gIHJldHVybiBsbmcgLyAzNjAgKyAwLjU7XG59XG5cbmZ1bmN0aW9uIGxhdFkobGF0OiBudW1iZXIpIHtcbiAgY29uc3Qgc2luID0gTWF0aC5zaW4oKGxhdCAqIE1hdGguUEkpIC8gMTgwKTtcbiAgY29uc3QgeSA9IDAuNSAtICgwLjI1ICogTWF0aC5sb2coKDEgKyBzaW4pIC8gKDEgLSBzaW4pKSkgLyBNYXRoLlBJO1xuICByZXR1cm4geSA8IDAgPyAwIDogeSA+IDEgPyAxIDogeTtcbn1cblxuZnVuY3Rpb24gZ2V0WChwOiBQb2ludCkge1xuICByZXR1cm4gcC54O1xufVxuXG5mdW5jdGlvbiBnZXRZKHA6IFBvaW50KSB7XG4gIHJldHVybiBwLnk7XG59XG4iXX0=
@@ -0,0 +1,103 @@
1
+ import { SettingsState } from './FlowmapState';
2
+ export declare type ColorScale = (value: number) => RGBA;
3
+ export declare type RGBA = [number, number, number, number];
4
+ export declare function opacityFloatToInteger(opacity: number): number;
5
+ export declare function opacifyHex(hexCode: string, opacity: number): string;
6
+ export declare function colorAsRgba(color: string | number[]): RGBA;
7
+ export declare enum ColorScheme {
8
+ primary = "#162d3c"
9
+ }
10
+ export declare const GRAYISH: string[];
11
+ export declare const schemeTeal: string[];
12
+ export declare const DEFAULT_COLOR_SCHEME: string[];
13
+ export declare const COLOR_SCHEMES: {
14
+ [key: string]: string[];
15
+ };
16
+ export declare const COLOR_SCHEME_KEYS: string[];
17
+ export declare function getFlowmapColors(settingsState: SettingsState): Colors | DiffColors;
18
+ export declare function getColors(diffMode: boolean, colorScheme: string | string[] | undefined, darkMode: boolean, fadeEnabled: boolean, fadeOpacityEnabled: boolean, fadeAmount: number, animate: boolean): Colors | DiffColors;
19
+ export declare function createFlowColorScale(domain: [number, number], scheme: string[], animate: boolean | undefined): ColorScale;
20
+ export declare function getFlowColorScale(colors: ColorsRGBA | DiffColorsRGBA, magnitudeExtent: [number, number] | undefined, animate: boolean | undefined): (magnitude: number) => [number, number, number, number];
21
+ export declare function isDiffColors(colors: DiffColors | Colors): colors is DiffColors;
22
+ export declare function isDiffColorsRGBA(colors: DiffColorsRGBA | ColorsRGBA): colors is DiffColorsRGBA;
23
+ export interface FlowColors {
24
+ scheme?: string[];
25
+ highlighted?: string;
26
+ }
27
+ export interface LocationCircleColors {
28
+ inner?: string;
29
+ outgoing?: string;
30
+ incoming?: string;
31
+ highlighted?: string;
32
+ empty?: string;
33
+ outlineEmptyMix?: number;
34
+ }
35
+ export interface LocationAreaColors {
36
+ outline?: string;
37
+ normal?: string;
38
+ selected?: string;
39
+ highlighted?: string;
40
+ connected?: string;
41
+ }
42
+ export interface BaseColors {
43
+ darkMode?: boolean;
44
+ locationAreas?: LocationAreaColors;
45
+ dimmedOpacity?: number;
46
+ outlineColor?: string;
47
+ }
48
+ export interface Colors extends BaseColors {
49
+ flows?: FlowColors;
50
+ locationCircles?: LocationCircleColors;
51
+ }
52
+ export interface FlowAndCircleColors {
53
+ flows?: FlowColors;
54
+ locationCircles?: LocationCircleColors;
55
+ }
56
+ export interface DiffColors extends BaseColors {
57
+ positive?: FlowAndCircleColors;
58
+ negative?: FlowAndCircleColors;
59
+ }
60
+ export interface FlowColorsRGBA {
61
+ scheme: string[];
62
+ highlighted: RGBA;
63
+ }
64
+ export interface LocationCircleColorsRGBA {
65
+ inner: RGBA;
66
+ outgoing: RGBA;
67
+ incoming: RGBA;
68
+ highlighted: RGBA;
69
+ empty: RGBA;
70
+ outlineEmptyMix: number;
71
+ }
72
+ export interface LocationAreaColorsRGBA {
73
+ outline: RGBA;
74
+ normal: RGBA;
75
+ selected: RGBA;
76
+ highlighted: RGBA;
77
+ connected: RGBA;
78
+ }
79
+ export interface BaseColorsRGBA {
80
+ darkMode: boolean;
81
+ locationAreas: LocationAreaColorsRGBA;
82
+ dimmedOpacity: number;
83
+ outlineColor: RGBA;
84
+ }
85
+ export interface ColorsRGBA extends BaseColorsRGBA {
86
+ flows: FlowColorsRGBA;
87
+ locationCircles: LocationCircleColorsRGBA;
88
+ }
89
+ export interface FlowAndCircleColorsRGBA {
90
+ flows: FlowColorsRGBA;
91
+ locationCircles: LocationCircleColorsRGBA;
92
+ }
93
+ export interface DiffColorsRGBA extends BaseColorsRGBA {
94
+ positive: FlowAndCircleColorsRGBA;
95
+ negative: FlowAndCircleColorsRGBA;
96
+ }
97
+ export declare function getColorsRGBA(colors: Colors | undefined): ColorsRGBA;
98
+ export declare function getDiffColorsRGBA(colors: DiffColors | undefined): DiffColorsRGBA;
99
+ export declare function rgbaAsString(color: RGBA): string;
100
+ export declare function midpoint(a: number, b: number, zeroToOne: number): number;
101
+ export declare function mixColorsRGBA(color1: RGBA, color2: RGBA, zeroToOne: number): RGBA;
102
+ export default getColors;
103
+ //# sourceMappingURL=colors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"colors.d.ts","sourceRoot":"","sources":["../src/colors.ts"],"names":[],"mappings":"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"}