@linkurious/ogma-linkurious-parser 3.1.13 → 4.0.1

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 (39) hide show
  1. package/dist/captions/captions.js +42 -54
  2. package/dist/captions/captions.js.map +1 -1
  3. package/dist/filters/filters.d.ts +1 -1
  4. package/dist/filters/filters.js +55 -76
  5. package/dist/filters/filters.js.map +1 -1
  6. package/dist/index.js +34 -33
  7. package/dist/index.js.map +1 -1
  8. package/dist/ogma/features/OgmaStore.js +16 -30
  9. package/dist/ogma/features/OgmaStore.js.map +1 -1
  10. package/dist/ogma/features/captions.js +43 -87
  11. package/dist/ogma/features/captions.js.map +1 -1
  12. package/dist/ogma/features/reactive.js +58 -75
  13. package/dist/ogma/features/reactive.js.map +1 -1
  14. package/dist/ogma/features/selectors.d.ts +5 -5
  15. package/dist/ogma/features/selectors.js +25 -16
  16. package/dist/ogma/features/selectors.js.map +1 -1
  17. package/dist/ogma/features/styles.js +115 -137
  18. package/dist/ogma/features/styles.js.map +1 -1
  19. package/dist/ogma/features/transformations.js +39 -87
  20. package/dist/ogma/features/transformations.js.map +1 -1
  21. package/dist/ogma/index.js +140 -230
  22. package/dist/ogma/index.js.map +1 -1
  23. package/dist/styles/edgeAttributes.js +31 -47
  24. package/dist/styles/edgeAttributes.js.map +1 -1
  25. package/dist/styles/itemAttributes.js +33 -42
  26. package/dist/styles/itemAttributes.js.map +1 -1
  27. package/dist/styles/nodeAttributes.js +49 -71
  28. package/dist/styles/nodeAttributes.js.map +1 -1
  29. package/dist/styles/styleRule.js +57 -68
  30. package/dist/styles/styleRule.js.map +1 -1
  31. package/dist/styles/styleRules.js +150 -192
  32. package/dist/styles/styleRules.js.map +1 -1
  33. package/dist/tools/colorPalette.js +1 -0
  34. package/dist/tools/colorPalette.js.map +1 -1
  35. package/dist/tools/ogmaTool.js +28 -30
  36. package/dist/tools/ogmaTool.js.map +1 -1
  37. package/dist/tools/tools.js +88 -91
  38. package/dist/tools/tools.js.map +1 -1
  39. package/package.json +7 -7
@@ -1,16 +1,10 @@
1
1
  'use strict';
2
- var __spreadArrays = (this && this.__spreadArrays) || function () {
3
- for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
4
- for (var r = Array(s), k = 0, i = 0; i < il; i++)
5
- for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
6
- r[k] = a[j];
7
- return r;
8
- };
9
2
  Object.defineProperty(exports, "__esModule", { value: true });
10
- var rest_client_1 = require("@linkurious/rest-client");
11
- var tools_1 = require("../tools/tools");
12
- var styleRule_1 = require("./styleRule");
13
- var itemAttributes_1 = require("./itemAttributes");
3
+ exports.StyleRules = exports.SORTING_RULE = exports.StyleType = void 0;
4
+ const rest_client_1 = require("@linkurious/rest-client");
5
+ const tools_1 = require("../tools/tools");
6
+ const styleRule_1 = require("./styleRule");
7
+ const itemAttributes_1 = require("./itemAttributes");
14
8
  var StyleType;
15
9
  (function (StyleType) {
16
10
  StyleType["COLOR"] = "color";
@@ -21,146 +15,116 @@ var StyleType;
21
15
  StyleType["WIDTH"] = "width";
22
16
  })(StyleType = exports.StyleType || (exports.StyleType = {}));
23
17
  exports.SORTING_RULE = ['specificity', 'itemType', 'index'];
24
- var StyleRules = /** @class */ (function () {
25
- function StyleRules(rules) {
18
+ class StyleRules {
19
+ constructor(rules) {
26
20
  this._rules = rules;
27
21
  }
28
- Object.defineProperty(StyleRules.prototype, "color", {
29
- /**
30
- * Return an array of StyleRule with only 'color' rules and sorted by specificity, itemType and index
31
- *
32
- * @return {Array<StyleRule>}
33
- */
34
- get: function () {
35
- return tools_1.sortBy(StyleRules.getBy(StyleType.COLOR, this._rules), exports.SORTING_RULE);
36
- },
37
- enumerable: true,
38
- configurable: true
39
- });
40
- Object.defineProperty(StyleRules.prototype, "icon", {
41
- /**
42
- * Return an array of StyleRule with only 'icon' rules and sorted by specificity, itemType and index
43
- *
44
- * @return {Array<StyleRule>}
45
- */
46
- get: function () {
47
- return tools_1.sortBy(__spreadArrays((StyleRules.getBy(StyleType.ICON, this._rules) || []), (StyleRules.getBy(StyleType.IMAGE, this._rules) || [])), exports.SORTING_RULE);
48
- },
49
- enumerable: true,
50
- configurable: true
51
- });
52
- Object.defineProperty(StyleRules.prototype, "image", {
53
- /**
54
- * Return an array of StyleRule with only 'image' rules and sorted by specificity, itemType and index
55
- *
56
- * @return {Array<StyleRule>}
57
- */
58
- get: function () {
59
- return tools_1.sortBy(StyleRules.getBy(StyleType.IMAGE, this._rules), exports.SORTING_RULE);
60
- },
61
- enumerable: true,
62
- configurable: true
63
- });
64
- Object.defineProperty(StyleRules.prototype, "shape", {
65
- /**
66
- * Return an array of StyleRule with only 'shape' rules and sorted by specificity, itemType and index
67
- *
68
- * @return {Array<StyleRule>}
69
- */
70
- get: function () {
71
- return tools_1.sortBy(StyleRules.getBy(StyleType.SHAPE, this._rules), exports.SORTING_RULE);
72
- },
73
- enumerable: true,
74
- configurable: true
75
- });
76
- Object.defineProperty(StyleRules.prototype, "size", {
77
- /**
78
- * Return an array of StyleRule with only 'size' rules and sorted by specificity, itemType and index
79
- *
80
- * @return {Array<StyleRule>}
81
- */
82
- get: function () {
83
- return tools_1.sortBy(StyleRules.getBy(StyleType.SIZE, this._rules), exports.SORTING_RULE);
84
- },
85
- enumerable: true,
86
- configurable: true
87
- });
88
- Object.defineProperty(StyleRules.prototype, "width", {
89
- /**
90
- * Return an array of StyleRule with only 'width' rules and sorted by specificity, itemType and index
91
- *
92
- * @return {Array<StyleRule>}
93
- */
94
- get: function () {
95
- return tools_1.sortBy(StyleRules.getBy(StyleType.WIDTH, this._rules), exports.SORTING_RULE);
96
- },
97
- enumerable: true,
98
- configurable: true
99
- });
100
- Object.defineProperty(StyleRules.prototype, "nodeRules", {
101
- /**
102
- * Return an object containing for each node style a sorted array of StyleRule
103
- *
104
- * @return {any}
105
- */
106
- get: function () {
107
- return {
108
- color: this.color,
109
- icon: this.icon,
110
- image: this.image,
111
- shape: this.shape,
112
- size: this.size
113
- };
114
- },
115
- enumerable: true,
116
- configurable: true
117
- });
118
- Object.defineProperty(StyleRules.prototype, "edgeRules", {
119
- /**
120
- * Return an object containing for each edge style a sorted array of StyleRule
121
- *
122
- * @return {any}
123
- */
124
- get: function () {
125
- return {
126
- color: this.color,
127
- shape: this.shape,
128
- width: this.width
129
- };
130
- },
131
- enumerable: true,
132
- configurable: true
133
- });
22
+ /**
23
+ * Return an array of StyleRule with only 'color' rules and sorted by specificity, itemType and index
24
+ *
25
+ * @return {Array<StyleRule>}
26
+ */
27
+ get color() {
28
+ return (0, tools_1.sortBy)(StyleRules.getBy(StyleType.COLOR, this._rules), exports.SORTING_RULE);
29
+ }
30
+ /**
31
+ * Return an array of StyleRule with only 'icon' rules and sorted by specificity, itemType and index
32
+ *
33
+ * @return {Array<StyleRule>}
34
+ */
35
+ get icon() {
36
+ return (0, tools_1.sortBy)([
37
+ ...(StyleRules.getBy(StyleType.ICON, this._rules) || []),
38
+ ...(StyleRules.getBy(StyleType.IMAGE, this._rules) || [])
39
+ ], exports.SORTING_RULE);
40
+ }
41
+ /**
42
+ * Return an array of StyleRule with only 'image' rules and sorted by specificity, itemType and index
43
+ *
44
+ * @return {Array<StyleRule>}
45
+ */
46
+ get image() {
47
+ return (0, tools_1.sortBy)(StyleRules.getBy(StyleType.IMAGE, this._rules), exports.SORTING_RULE);
48
+ }
49
+ /**
50
+ * Return an array of StyleRule with only 'shape' rules and sorted by specificity, itemType and index
51
+ *
52
+ * @return {Array<StyleRule>}
53
+ */
54
+ get shape() {
55
+ return (0, tools_1.sortBy)(StyleRules.getBy(StyleType.SHAPE, this._rules), exports.SORTING_RULE);
56
+ }
57
+ /**
58
+ * Return an array of StyleRule with only 'size' rules and sorted by specificity, itemType and index
59
+ *
60
+ * @return {Array<StyleRule>}
61
+ */
62
+ get size() {
63
+ return (0, tools_1.sortBy)(StyleRules.getBy(StyleType.SIZE, this._rules), exports.SORTING_RULE);
64
+ }
65
+ /**
66
+ * Return an array of StyleRule with only 'width' rules and sorted by specificity, itemType and index
67
+ *
68
+ * @return {Array<StyleRule>}
69
+ */
70
+ get width() {
71
+ return (0, tools_1.sortBy)(StyleRules.getBy(StyleType.WIDTH, this._rules), exports.SORTING_RULE);
72
+ }
73
+ /**
74
+ * Return an object containing for each node style a sorted array of StyleRule
75
+ *
76
+ * @return {any}
77
+ */
78
+ get nodeRules() {
79
+ return {
80
+ color: this.color,
81
+ icon: this.icon,
82
+ image: this.image,
83
+ shape: this.shape,
84
+ size: this.size
85
+ };
86
+ }
87
+ /**
88
+ * Return an object containing for each edge style a sorted array of StyleRule
89
+ *
90
+ * @return {any}
91
+ */
92
+ get edgeRules() {
93
+ return {
94
+ color: this.color,
95
+ shape: this.shape,
96
+ width: this.width
97
+ };
98
+ }
134
99
  /**
135
100
  * Generate a legend with an array of style rules and existing items in visualization
136
101
  */
137
- StyleRules.prototype.generateLegend = function (itemsData) {
138
- var _this = this;
139
- var result = {};
102
+ generateLegend(itemsData) {
103
+ const result = {};
140
104
  if (itemsData.length === 0) {
141
105
  return result;
142
106
  }
143
107
  if ('categories' in itemsData[0]) {
144
- Object.keys(this.nodeRules).forEach(function (style) {
145
- result[style] = StyleRules.getLegendForStyle(style, _this.nodeRules[style], itemsData);
108
+ Object.keys(this.nodeRules).forEach((style) => {
109
+ result[style] = StyleRules.getLegendForStyle(style, this.nodeRules[style], itemsData);
146
110
  });
147
111
  }
148
112
  else {
149
- Object.keys(this.edgeRules).forEach(function (style) {
150
- result[style] = StyleRules.getLegendForStyle(style, _this.edgeRules[style], itemsData);
113
+ Object.keys(this.edgeRules).forEach((style) => {
114
+ result[style] = StyleRules.getLegendForStyle(style, this.edgeRules[style], itemsData);
151
115
  });
152
116
  }
153
117
  return result;
154
- };
118
+ }
155
119
  /**
156
120
  * Return the legend for a specific style type (color, icon, image...)
157
121
  */
158
- StyleRules.getLegendForStyle = function (styleType, styles, itemsData) {
159
- var result = [];
160
- var data = itemsData.filter(function (i) { return i; });
161
- var _loop_1 = function (i) {
162
- var styleRule = new styleRule_1.StyleRule(styles[i]);
163
- var ruleExistsInViz = data.some(function (itemData) {
122
+ static getLegendForStyle(styleType, styles, itemsData) {
123
+ const result = [];
124
+ const data = itemsData.filter((i) => i);
125
+ for (let i = 0; i < styles.length; i++) {
126
+ const styleRule = new styleRule_1.StyleRule(styles[i]);
127
+ const ruleExistsInViz = data.some((itemData) => {
164
128
  return styleRule.canApplyTo(itemData);
165
129
  });
166
130
  if (ruleExistsInViz) {
@@ -169,10 +133,10 @@ var StyleRules = /** @class */ (function () {
169
133
  }
170
134
  else if (styleType === StyleType.ICON && 'image' in styleRule.style) {
171
135
  // style is a custom icon
172
- var label = tools_1.Tools.isDefined(styleRule.input)
173
- ? StyleRules.getTypeLabel(styleRule.itemType) + "." + styleRule.input[1] + " " + StyleRules.sanitizeValue(styleRule.type, styleRule.value)
174
- : "" + StyleRules.getTypeLabel(styleRule.itemType);
175
- var imageStyle = styleRule.style.image;
136
+ const label = tools_1.Tools.isDefined(styleRule.input)
137
+ ? `${StyleRules.getTypeLabel(styleRule.itemType)}.${styleRule.input[1]} ${StyleRules.sanitizeValue(styleRule.type, styleRule.value)}`
138
+ : `${StyleRules.getTypeLabel(styleRule.itemType)}`;
139
+ const imageStyle = styleRule.style.image;
176
140
  if (imageStyle.url &&
177
141
  typeof imageStyle.url === 'object' &&
178
142
  imageStyle.url.type === 'data') {
@@ -181,95 +145,91 @@ var StyleRules = /** @class */ (function () {
181
145
  // thus bloating the legend.
182
146
  }
183
147
  else {
184
- var value = styleRule.style.image;
148
+ const value = styleRule.style.image;
185
149
  StyleRules.updateLegend(result, { label: label, value: value });
186
150
  }
187
151
  }
188
152
  else {
189
- var label = tools_1.Tools.isDefined(styleRule.input)
190
- ? StyleRules.getTypeLabel(styleRule.itemType) + "." + styleRule.input[1] + " " + StyleRules.sanitizeValue(styleRule.type, styleRule.value)
191
- : "" + StyleRules.getTypeLabel(styleRule.itemType);
192
- var value = styleRule.style[styleType];
153
+ const label = tools_1.Tools.isDefined(styleRule.input)
154
+ ? `${StyleRules.getTypeLabel(styleRule.itemType)}.${styleRule.input[1]} ${StyleRules.sanitizeValue(styleRule.type, styleRule.value)}`
155
+ : `${StyleRules.getTypeLabel(styleRule.itemType)}`;
156
+ const value = styleRule.style[styleType];
193
157
  StyleRules.updateLegend(result, { label: label, value: value });
194
158
  }
195
159
  }
196
- };
197
- for (var i = 0; i < styles.length; i++) {
198
- _loop_1(i);
199
160
  }
200
161
  return result;
201
- };
162
+ }
202
163
  /**
203
164
  * Sanitize value for legend
204
165
  */
205
- StyleRules.sanitizeValue = function (styleType, value) {
166
+ static sanitizeValue(styleType, value) {
206
167
  switch (styleType) {
207
168
  case rest_client_1.SelectorType.NO_VALUE:
208
169
  return 'is undefined';
209
170
  case rest_client_1.SelectorType.NAN:
210
171
  return 'is not an number';
211
172
  case rest_client_1.SelectorType.RANGE:
212
- var template_1 = '';
213
- Object.keys(value).forEach(function (k, i) {
173
+ let template = '';
174
+ Object.keys(value).forEach((k, i) => {
214
175
  if (i > 0) {
215
- template_1 += ' and ';
176
+ template += ' and ';
216
177
  }
217
- template_1 += k + " " + value[k];
178
+ template += `${k} ${value[k]}`;
218
179
  });
219
- return template_1;
180
+ return template;
220
181
  }
221
- return typeof value === 'object' ? "= " + JSON.stringify(value) : "= " + value;
222
- };
182
+ return typeof value === 'object' ? `= ${JSON.stringify(value)}` : `= ${value}`;
183
+ }
223
184
  /**
224
185
  * Add items in legend for automatic coloring
225
186
  */
226
- StyleRules.addLegendAutoColors = function (itemsData, styleRule, currentLegend) {
227
- var propertyKey = styleRule.style.color.input[1];
228
- itemsData.forEach(function (data) {
229
- var propValue = tools_1.Tools.getIn(data, styleRule.style.color.input);
187
+ static addLegendAutoColors(itemsData, styleRule, currentLegend) {
188
+ const propertyKey = styleRule.style.color.input[1];
189
+ itemsData.forEach((data) => {
190
+ const propValue = tools_1.Tools.getIn(data, styleRule.style.color.input);
230
191
  if (Array.isArray(propValue)) {
231
- propValue.forEach(function (value) {
232
- var label = styleRule.style.color.input.includes('properties')
233
- ? StyleRules.getTypeLabel(styleRule.itemType) + "." + propertyKey + " = " + value
234
- : "" + StyleRules.getTypeLabel(value);
235
- var color = itemAttributes_1.ItemAttributes.autoColor(value, styleRule.style.color.ignoreCase);
192
+ propValue.forEach((value) => {
193
+ const label = styleRule.style.color.input.includes('properties')
194
+ ? `${StyleRules.getTypeLabel(styleRule.itemType)}.${propertyKey} = ${value}`
195
+ : `${StyleRules.getTypeLabel(value)}`;
196
+ const color = itemAttributes_1.ItemAttributes.autoColor(value, styleRule.style.color.ignoreCase);
236
197
  StyleRules.updateLegend(currentLegend, { label: label, value: color });
237
198
  });
238
199
  }
239
200
  else {
240
- var label = styleRule.style.color.input.includes('properties')
241
- ? StyleRules.getTypeLabel(styleRule.itemType) + "." + propertyKey + " = " + propValue
242
- : "" + StyleRules.getTypeLabel(propValue);
243
- var value = itemAttributes_1.ItemAttributes.autoColor(propValue, styleRule.style.color.ignoreCase);
201
+ const label = styleRule.style.color.input.includes('properties')
202
+ ? `${StyleRules.getTypeLabel(styleRule.itemType)}.${propertyKey} = ${propValue}`
203
+ : `${StyleRules.getTypeLabel(propValue)}`;
204
+ const value = itemAttributes_1.ItemAttributes.autoColor(propValue, styleRule.style.color.ignoreCase);
244
205
  StyleRules.updateLegend(currentLegend, { label: label, value: value });
245
206
  }
246
207
  });
247
- };
208
+ }
248
209
  /**
249
210
  * Return the label of item type for a legend item
250
211
  */
251
- StyleRules.getTypeLabel = function (type) {
212
+ static getTypeLabel(type) {
252
213
  return type === undefined ? 'All' : type === null ? 'Others' : type;
253
- };
214
+ }
254
215
  /**
255
216
  * Check if a legend item already exists and overwrite it / push it
256
217
  */
257
- StyleRules.updateLegend = function (legend, _a) {
258
- var label = _a.label, value = _a.value;
259
- var indexOfLegendItem = legend.map(function (r) { return r.label; }).indexOf(label);
218
+ static updateLegend(legend, { label, value }) {
219
+ const indexOfLegendItem = legend.map((r) => r.label).indexOf(label);
260
220
  if (indexOfLegendItem < 0) {
261
221
  legend.push({ label: label, value: value });
262
222
  }
263
223
  else {
264
224
  legend[indexOfLegendItem] = { label: label, value: value };
265
225
  }
266
- };
226
+ }
267
227
  /**
268
228
  * return an array of StyleRule, containing only the desired style
269
229
  */
270
- StyleRules.getBy = function (styleType, rules) {
230
+ static getBy(styleType, rules) {
271
231
  return rules
272
- .filter(function (style) {
232
+ .filter((style) => {
273
233
  switch (styleType) {
274
234
  case StyleType.COLOR:
275
235
  return style.style.color !== undefined;
@@ -285,25 +245,24 @@ var StyleRules = /** @class */ (function () {
285
245
  return 'width' in style.style && style.style.width !== undefined;
286
246
  }
287
247
  })
288
- .map(function (style) { return StyleRules.getRule(style, styleType); });
289
- };
248
+ .map((style) => StyleRules.getRule(style, styleType));
249
+ }
290
250
  /**
291
251
  * From a RawStyle, generate a StyleRule of a specific style
292
252
  */
293
- StyleRules.getRule = function (rawRule, styleType) {
294
- var _a;
295
- var rule = tools_1.Tools.clone(rawRule);
296
- rule.style = (_a = {}, _a[styleType] = rule.style[styleType], _a);
253
+ static getRule(rawRule, styleType) {
254
+ const rule = tools_1.Tools.clone(rawRule);
255
+ rule.style = { [styleType]: rule.style[styleType] };
297
256
  return new styleRule_1.StyleRule(rule);
298
- };
257
+ }
299
258
  /**
300
259
  * Check for non unique index in styles rules and update them if exists
301
260
  */
302
- StyleRules.sanitizeStylesIndex = function (styles) {
303
- var seenIndex = [];
304
- var sanitizedStyles = tools_1.Tools.clone(styles);
305
- var maxIndex = Math.max.apply(Math, __spreadArrays(styles.node.map(function (s) { return s.index; }), styles.edge.map(function (s) { return s.index; }))) + 1;
306
- sanitizedStyles.node = sanitizedStyles.node.map(function (style) {
261
+ static sanitizeStylesIndex(styles) {
262
+ const seenIndex = [];
263
+ const sanitizedStyles = tools_1.Tools.clone(styles);
264
+ let maxIndex = Math.max(...[...styles.node.map((s) => s.index), ...styles.edge.map((s) => s.index)]) + 1;
265
+ sanitizedStyles.node = sanitizedStyles.node.map((style) => {
307
266
  if (seenIndex.includes(style.index)) {
308
267
  style.index = maxIndex;
309
268
  maxIndex++;
@@ -313,7 +272,7 @@ var StyleRules = /** @class */ (function () {
313
272
  }
314
273
  return style;
315
274
  });
316
- sanitizedStyles.edge = sanitizedStyles.edge.map(function (style) {
275
+ sanitizedStyles.edge = sanitizedStyles.edge.map((style) => {
317
276
  if (seenIndex.includes(style.index)) {
318
277
  style.index = maxIndex;
319
278
  maxIndex++;
@@ -324,8 +283,7 @@ var StyleRules = /** @class */ (function () {
324
283
  return style;
325
284
  });
326
285
  return sanitizedStyles;
327
- };
328
- return StyleRules;
329
- }());
286
+ }
287
+ }
330
288
  exports.StyleRules = StyleRules;
331
289
  //# sourceMappingURL=styleRules.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"styleRules.js","sourceRoot":"","sources":["../../src/styles/styleRules.ts"],"names":[],"mappings":"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","sourcesContent":["'use strict';\n\nimport {\n IEdgeStyle,\n IStyleRule,\n LkEdgeData,\n LkNodeData,\n INodeStyle,\n SelectorType,\n IStyleIcon,\n IStyleImage,\n IStyles\n} from '@linkurious/rest-client';\n\nimport {sortBy, Tools} from '../tools/tools';\n\nimport {StyleRule} from './styleRule';\nimport {ItemAttributes} from './itemAttributes';\n\nexport enum StyleType {\n COLOR = 'color',\n ICON = 'icon',\n SIZE = 'size',\n IMAGE = 'image',\n SHAPE = 'shape',\n WIDTH = 'width'\n}\n\nexport interface Legend {\n [key: string]: Array<{label: string; value: string | IStyleIcon | IStyleImage | number}>;\n}\n\nexport const SORTING_RULE = ['specificity', 'itemType', 'index'];\n\nexport class StyleRules {\n private _rules: Array<IStyleRule<INodeStyle | IEdgeStyle>>;\n\n constructor(rules: Array<IStyleRule<INodeStyle | IEdgeStyle>>) {\n this._rules = rules;\n }\n\n /**\n * Return an array of StyleRule with only 'color' rules and sorted by specificity, itemType and index\n *\n * @return {Array<StyleRule>}\n */\n public get color(): Array<StyleRule> {\n return sortBy(StyleRules.getBy(StyleType.COLOR, this._rules), SORTING_RULE);\n }\n\n /**\n * Return an array of StyleRule with only 'icon' rules and sorted by specificity, itemType and index\n *\n * @return {Array<StyleRule>}\n */\n public get icon(): Array<StyleRule> {\n return sortBy(\n [\n ...(StyleRules.getBy(StyleType.ICON, this._rules) || []),\n ...(StyleRules.getBy(StyleType.IMAGE, this._rules) || [])\n ],\n SORTING_RULE\n );\n }\n\n /**\n * Return an array of StyleRule with only 'image' rules and sorted by specificity, itemType and index\n *\n * @return {Array<StyleRule>}\n */\n public get image(): Array<StyleRule> {\n return sortBy(StyleRules.getBy(StyleType.IMAGE, this._rules), SORTING_RULE);\n }\n\n /**\n * Return an array of StyleRule with only 'shape' rules and sorted by specificity, itemType and index\n *\n * @return {Array<StyleRule>}\n */\n public get shape(): Array<StyleRule> {\n return sortBy(StyleRules.getBy(StyleType.SHAPE, this._rules), SORTING_RULE);\n }\n\n /**\n * Return an array of StyleRule with only 'size' rules and sorted by specificity, itemType and index\n *\n * @return {Array<StyleRule>}\n */\n public get size(): Array<StyleRule> {\n return sortBy(StyleRules.getBy(StyleType.SIZE, this._rules), SORTING_RULE);\n }\n\n /**\n * Return an array of StyleRule with only 'width' rules and sorted by specificity, itemType and index\n *\n * @return {Array<StyleRule>}\n */\n public get width(): Array<StyleRule> {\n return sortBy(StyleRules.getBy(StyleType.WIDTH, this._rules), SORTING_RULE);\n }\n\n /**\n * Return an object containing for each node style a sorted array of StyleRule\n *\n * @return {any}\n */\n public get nodeRules(): {[key: string]: Array<StyleRule>} {\n return {\n color: this.color,\n icon: this.icon,\n image: this.image,\n shape: this.shape,\n size: this.size\n };\n }\n\n /**\n * Return an object containing for each edge style a sorted array of StyleRule\n *\n * @return {any}\n */\n public get edgeRules(): {[key: string]: Array<StyleRule>} {\n return {\n color: this.color,\n shape: this.shape,\n width: this.width\n };\n }\n\n /**\n * Generate a legend with an array of style rules and existing items in visualization\n */\n public generateLegend(itemsData: Array<LkNodeData | LkEdgeData>): Legend {\n const result: Legend = {};\n if (itemsData.length === 0) {\n return result;\n }\n\n if ('categories' in itemsData[0]) {\n Object.keys(this.nodeRules).forEach((style: string) => {\n result[style] = StyleRules.getLegendForStyle(style, this.nodeRules[style], itemsData);\n });\n } else {\n Object.keys(this.edgeRules).forEach((style: string) => {\n result[style] = StyleRules.getLegendForStyle(style, this.edgeRules[style], itemsData);\n });\n }\n return result;\n }\n\n /**\n * Return the legend for a specific style type (color, icon, image...)\n */\n public static getLegendForStyle(\n styleType: string,\n styles: Array<StyleRule>,\n itemsData: Array<LkNodeData | LkEdgeData>\n ): Array<{label: string; value: string | number | IStyleIcon | IStyleImage}> {\n const result: Array<{label: string; value: string | number | IStyleIcon | IStyleImage}> = [];\n const data = itemsData.filter((i) => i);\n for (let i = 0; i < styles.length; i++) {\n const styleRule = new StyleRule(styles[i]);\n const ruleExistsInViz = data.some((itemData) => {\n return styleRule.canApplyTo(itemData);\n });\n if (ruleExistsInViz) {\n if (styleType === StyleType.COLOR && typeof styleRule.style.color === 'object') {\n StyleRules.addLegendAutoColors(data, styleRule, result);\n } else if (styleType === StyleType.ICON && 'image' in styleRule.style) {\n // style is a custom icon\n const label = Tools.isDefined(styleRule.input)\n ? `${StyleRules.getTypeLabel(styleRule.itemType)}.${\n styleRule.input[1]\n } ${StyleRules.sanitizeValue(styleRule.type, styleRule.value)}`\n : `${StyleRules.getTypeLabel(styleRule.itemType)}`;\n const imageStyle = styleRule.style.image as IStyleImage;\n if (\n imageStyle.url &&\n typeof imageStyle.url === 'object' &&\n imageStyle.url.type === 'data'\n ) {\n // If the custom icon is read from a node property-value dynamically, then we\n // skip it from the legend, because it could be a different image for each node,\n // thus bloating the legend.\n } else {\n const value = styleRule.style.image;\n StyleRules.updateLegend(result, {label: label, value: value});\n }\n } else {\n const label = Tools.isDefined(styleRule.input)\n ? `${StyleRules.getTypeLabel(styleRule.itemType)}.${\n styleRule.input[1]\n } ${StyleRules.sanitizeValue(styleRule.type, styleRule.value)}`\n : `${StyleRules.getTypeLabel(styleRule.itemType)}`;\n const value = styleRule.style[styleType];\n StyleRules.updateLegend(result, {label: label, value: value});\n }\n }\n }\n\n return result;\n }\n\n /**\n * Sanitize value for legend\n */\n public static sanitizeValue(styleType: SelectorType, value: any): string {\n switch (styleType) {\n case SelectorType.NO_VALUE:\n return 'is undefined';\n\n case SelectorType.NAN:\n return 'is not an number';\n\n case SelectorType.RANGE:\n let template = '';\n Object.keys(value).forEach((k, i) => {\n if (i > 0) {\n template += ' and ';\n }\n template += `${k} ${value[k]}`;\n });\n return template;\n }\n\n return typeof value === 'object' ? `= ${JSON.stringify(value)}` : `= ${value}`;\n }\n\n /**\n * Add items in legend for automatic coloring\n */\n public static addLegendAutoColors(\n itemsData: Array<LkNodeData | LkEdgeData>,\n styleRule: StyleRule,\n currentLegend: Array<{label: string; value: string | number | IStyleIcon | IStyleImage}>\n ): void {\n const propertyKey: string = styleRule.style.color.input[1];\n itemsData.forEach((data) => {\n const propValue = Tools.getIn(data, styleRule.style.color.input);\n if (Array.isArray(propValue)) {\n propValue.forEach((value) => {\n const label = styleRule.style.color.input.includes('properties')\n ? `${StyleRules.getTypeLabel(styleRule.itemType)}.${propertyKey} = ${value}`\n : `${StyleRules.getTypeLabel(value)}`;\n const color = ItemAttributes.autoColor(value, styleRule.style.color.ignoreCase);\n StyleRules.updateLegend(currentLegend, {label: label, value: color});\n });\n } else {\n const label = styleRule.style.color.input.includes('properties')\n ? `${StyleRules.getTypeLabel(styleRule.itemType)}.${propertyKey} = ${propValue}`\n : `${StyleRules.getTypeLabel(propValue)}`;\n const value = ItemAttributes.autoColor(propValue, styleRule.style.color.ignoreCase);\n StyleRules.updateLegend(currentLegend, {label: label, value: value});\n }\n });\n }\n\n /**\n * Return the label of item type for a legend item\n */\n public static getTypeLabel(type: string | undefined | null): string {\n return type === undefined ? 'All' : type === null ? 'Others' : type;\n }\n\n /**\n * Check if a legend item already exists and overwrite it / push it\n */\n public static updateLegend(\n legend: Array<{label: string; value: string | number | IStyleIcon | IStyleImage}>,\n {label, value}: {[key: string]: string}\n ): void {\n const indexOfLegendItem = legend.map((r) => r.label).indexOf(label);\n if (indexOfLegendItem < 0) {\n legend.push({label: label, value: value});\n } else {\n legend[indexOfLegendItem] = {label: label, value: value};\n }\n }\n\n /**\n * return an array of StyleRule, containing only the desired style\n */\n public static getBy(\n styleType: StyleType,\n rules: Array<IStyleRule<INodeStyle | IEdgeStyle>>\n ): Array<StyleRule> {\n return rules\n .filter((style: IStyleRule<INodeStyle | IEdgeStyle>) => {\n switch (styleType) {\n case StyleType.COLOR:\n return style.style.color !== undefined;\n\n case StyleType.ICON:\n return 'icon' in style.style && style.style.icon !== undefined;\n\n case StyleType.IMAGE:\n return 'image' in style.style && style.style.image !== undefined;\n\n case StyleType.SHAPE:\n return style.style.shape !== undefined;\n\n case StyleType.SIZE:\n return 'size' in style.style && style.style.size !== undefined;\n\n case StyleType.WIDTH:\n return 'width' in style.style && style.style.width !== undefined;\n }\n })\n .map((style: IStyleRule<INodeStyle | IEdgeStyle>) => StyleRules.getRule(style, styleType));\n }\n\n /**\n * From a RawStyle, generate a StyleRule of a specific style\n */\n public static getRule(\n rawRule: IStyleRule<INodeStyle | IEdgeStyle>,\n styleType: StyleType\n ): StyleRule {\n const rule = Tools.clone(rawRule);\n rule.style = {[styleType]: rule.style[styleType]};\n return new StyleRule(rule);\n }\n\n /**\n * Check for non unique index in styles rules and update them if exists\n */\n public static sanitizeStylesIndex(styles: IStyles): IStyles {\n const seenIndex: Array<number> = [];\n const sanitizedStyles: IStyles = Tools.clone(styles);\n let maxIndex =\n Math.max(...[...styles.node.map((s) => s.index), ...styles.edge.map((s) => s.index)]) + 1;\n sanitizedStyles.node = sanitizedStyles.node.map((style) => {\n if (seenIndex.includes(style.index)) {\n style.index = maxIndex;\n maxIndex++;\n } else {\n seenIndex.push(style.index);\n }\n return style;\n });\n sanitizedStyles.edge = sanitizedStyles.edge.map((style) => {\n if (seenIndex.includes(style.index)) {\n style.index = maxIndex;\n maxIndex++;\n } else {\n seenIndex.push(style.index);\n }\n return style;\n });\n return sanitizedStyles;\n }\n}\n"]}
1
+ {"version":3,"file":"styleRules.js","sourceRoot":"","sources":["../../src/styles/styleRules.ts"],"names":[],"mappings":"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","sourcesContent":["'use strict';\n\nimport {\n IEdgeStyle,\n IStyleRule,\n LkEdgeData,\n LkNodeData,\n INodeStyle,\n SelectorType,\n IStyleIcon,\n IStyleImage,\n IStyles\n} from '@linkurious/rest-client';\n\nimport {sortBy, Tools} from '../tools/tools';\n\nimport {StyleRule} from './styleRule';\nimport {ItemAttributes} from './itemAttributes';\n\nexport enum StyleType {\n COLOR = 'color',\n ICON = 'icon',\n SIZE = 'size',\n IMAGE = 'image',\n SHAPE = 'shape',\n WIDTH = 'width'\n}\n\nexport interface Legend {\n [key: string]: Array<{label: string; value: string | IStyleIcon | IStyleImage | number}>;\n}\n\nexport const SORTING_RULE = ['specificity', 'itemType', 'index'];\n\nexport class StyleRules {\n private _rules: Array<IStyleRule<INodeStyle | IEdgeStyle>>;\n\n constructor(rules: Array<IStyleRule<INodeStyle | IEdgeStyle>>) {\n this._rules = rules;\n }\n\n /**\n * Return an array of StyleRule with only 'color' rules and sorted by specificity, itemType and index\n *\n * @return {Array<StyleRule>}\n */\n public get color(): Array<StyleRule> {\n return sortBy(StyleRules.getBy(StyleType.COLOR, this._rules), SORTING_RULE);\n }\n\n /**\n * Return an array of StyleRule with only 'icon' rules and sorted by specificity, itemType and index\n *\n * @return {Array<StyleRule>}\n */\n public get icon(): Array<StyleRule> {\n return sortBy(\n [\n ...(StyleRules.getBy(StyleType.ICON, this._rules) || []),\n ...(StyleRules.getBy(StyleType.IMAGE, this._rules) || [])\n ],\n SORTING_RULE\n );\n }\n\n /**\n * Return an array of StyleRule with only 'image' rules and sorted by specificity, itemType and index\n *\n * @return {Array<StyleRule>}\n */\n public get image(): Array<StyleRule> {\n return sortBy(StyleRules.getBy(StyleType.IMAGE, this._rules), SORTING_RULE);\n }\n\n /**\n * Return an array of StyleRule with only 'shape' rules and sorted by specificity, itemType and index\n *\n * @return {Array<StyleRule>}\n */\n public get shape(): Array<StyleRule> {\n return sortBy(StyleRules.getBy(StyleType.SHAPE, this._rules), SORTING_RULE);\n }\n\n /**\n * Return an array of StyleRule with only 'size' rules and sorted by specificity, itemType and index\n *\n * @return {Array<StyleRule>}\n */\n public get size(): Array<StyleRule> {\n return sortBy(StyleRules.getBy(StyleType.SIZE, this._rules), SORTING_RULE);\n }\n\n /**\n * Return an array of StyleRule with only 'width' rules and sorted by specificity, itemType and index\n *\n * @return {Array<StyleRule>}\n */\n public get width(): Array<StyleRule> {\n return sortBy(StyleRules.getBy(StyleType.WIDTH, this._rules), SORTING_RULE);\n }\n\n /**\n * Return an object containing for each node style a sorted array of StyleRule\n *\n * @return {any}\n */\n public get nodeRules(): {[key: string]: Array<StyleRule>} {\n return {\n color: this.color,\n icon: this.icon,\n image: this.image,\n shape: this.shape,\n size: this.size\n };\n }\n\n /**\n * Return an object containing for each edge style a sorted array of StyleRule\n *\n * @return {any}\n */\n public get edgeRules(): {[key: string]: Array<StyleRule>} {\n return {\n color: this.color,\n shape: this.shape,\n width: this.width\n };\n }\n\n /**\n * Generate a legend with an array of style rules and existing items in visualization\n */\n public generateLegend(itemsData: Array<LkNodeData | LkEdgeData>): Legend {\n const result: Legend = {};\n if (itemsData.length === 0) {\n return result;\n }\n\n if ('categories' in itemsData[0]) {\n Object.keys(this.nodeRules).forEach((style: string) => {\n result[style] = StyleRules.getLegendForStyle(style, this.nodeRules[style], itemsData);\n });\n } else {\n Object.keys(this.edgeRules).forEach((style: string) => {\n result[style] = StyleRules.getLegendForStyle(style, this.edgeRules[style], itemsData);\n });\n }\n return result;\n }\n\n /**\n * Return the legend for a specific style type (color, icon, image...)\n */\n public static getLegendForStyle(\n styleType: string,\n styles: Array<StyleRule>,\n itemsData: Array<LkNodeData | LkEdgeData>\n ): Array<{label: string; value: string | number | IStyleIcon | IStyleImage}> {\n const result: Array<{label: string; value: string | number | IStyleIcon | IStyleImage}> = [];\n const data = itemsData.filter((i) => i);\n for (let i = 0; i < styles.length; i++) {\n const styleRule = new StyleRule(styles[i]);\n const ruleExistsInViz = data.some((itemData) => {\n return styleRule.canApplyTo(itemData);\n });\n if (ruleExistsInViz) {\n if (styleType === StyleType.COLOR && typeof styleRule.style.color === 'object') {\n StyleRules.addLegendAutoColors(data, styleRule, result);\n } else if (styleType === StyleType.ICON && 'image' in styleRule.style) {\n // style is a custom icon\n const label = Tools.isDefined(styleRule.input)\n ? `${StyleRules.getTypeLabel(styleRule.itemType)}.${\n styleRule.input[1]\n } ${StyleRules.sanitizeValue(styleRule.type, styleRule.value)}`\n : `${StyleRules.getTypeLabel(styleRule.itemType)}`;\n const imageStyle = styleRule.style.image as IStyleImage;\n if (\n imageStyle.url &&\n typeof imageStyle.url === 'object' &&\n imageStyle.url.type === 'data'\n ) {\n // If the custom icon is read from a node property-value dynamically, then we\n // skip it from the legend, because it could be a different image for each node,\n // thus bloating the legend.\n } else {\n const value = styleRule.style.image;\n StyleRules.updateLegend(result, {label: label, value: value});\n }\n } else {\n const label = Tools.isDefined(styleRule.input)\n ? `${StyleRules.getTypeLabel(styleRule.itemType)}.${\n styleRule.input[1]\n } ${StyleRules.sanitizeValue(styleRule.type, styleRule.value)}`\n : `${StyleRules.getTypeLabel(styleRule.itemType)}`;\n const value = styleRule.style[styleType];\n StyleRules.updateLegend(result, {label: label, value: value});\n }\n }\n }\n\n return result;\n }\n\n /**\n * Sanitize value for legend\n */\n public static sanitizeValue(styleType: SelectorType, value: any): string {\n switch (styleType) {\n case SelectorType.NO_VALUE:\n return 'is undefined';\n\n case SelectorType.NAN:\n return 'is not an number';\n\n case SelectorType.RANGE:\n let template = '';\n Object.keys(value).forEach((k, i) => {\n if (i > 0) {\n template += ' and ';\n }\n template += `${k} ${value[k]}`;\n });\n return template;\n }\n\n return typeof value === 'object' ? `= ${JSON.stringify(value)}` : `= ${value}`;\n }\n\n /**\n * Add items in legend for automatic coloring\n */\n public static addLegendAutoColors(\n itemsData: Array<LkNodeData | LkEdgeData>,\n styleRule: StyleRule,\n currentLegend: Array<{label: string; value: string | number | IStyleIcon | IStyleImage}>\n ): void {\n const propertyKey: string = styleRule.style.color.input[1];\n itemsData.forEach((data) => {\n const propValue = Tools.getIn(data, styleRule.style.color.input);\n if (Array.isArray(propValue)) {\n propValue.forEach((value) => {\n const label = styleRule.style.color.input.includes('properties')\n ? `${StyleRules.getTypeLabel(styleRule.itemType)}.${propertyKey} = ${value}`\n : `${StyleRules.getTypeLabel(value)}`;\n const color = ItemAttributes.autoColor(value, styleRule.style.color.ignoreCase);\n StyleRules.updateLegend(currentLegend, {label: label, value: color});\n });\n } else {\n const label = styleRule.style.color.input.includes('properties')\n ? `${StyleRules.getTypeLabel(styleRule.itemType)}.${propertyKey} = ${propValue}`\n : `${StyleRules.getTypeLabel(propValue)}`;\n const value = ItemAttributes.autoColor(propValue, styleRule.style.color.ignoreCase);\n StyleRules.updateLegend(currentLegend, {label: label, value: value});\n }\n });\n }\n\n /**\n * Return the label of item type for a legend item\n */\n public static getTypeLabel(type: string | undefined | null): string {\n return type === undefined ? 'All' : type === null ? 'Others' : type;\n }\n\n /**\n * Check if a legend item already exists and overwrite it / push it\n */\n public static updateLegend(\n legend: Array<{label: string; value: string | number | IStyleIcon | IStyleImage}>,\n {label, value}: {[key: string]: string}\n ): void {\n const indexOfLegendItem = legend.map((r) => r.label).indexOf(label);\n if (indexOfLegendItem < 0) {\n legend.push({label: label, value: value});\n } else {\n legend[indexOfLegendItem] = {label: label, value: value};\n }\n }\n\n /**\n * return an array of StyleRule, containing only the desired style\n */\n public static getBy(\n styleType: StyleType,\n rules: Array<IStyleRule<INodeStyle | IEdgeStyle>>\n ): Array<StyleRule> {\n return rules\n .filter((style: IStyleRule<INodeStyle | IEdgeStyle>) => {\n switch (styleType) {\n case StyleType.COLOR:\n return style.style.color !== undefined;\n\n case StyleType.ICON:\n return 'icon' in style.style && style.style.icon !== undefined;\n\n case StyleType.IMAGE:\n return 'image' in style.style && style.style.image !== undefined;\n\n case StyleType.SHAPE:\n return style.style.shape !== undefined;\n\n case StyleType.SIZE:\n return 'size' in style.style && style.style.size !== undefined;\n\n case StyleType.WIDTH:\n return 'width' in style.style && style.style.width !== undefined;\n }\n })\n .map((style: IStyleRule<INodeStyle | IEdgeStyle>) => StyleRules.getRule(style, styleType));\n }\n\n /**\n * From a RawStyle, generate a StyleRule of a specific style\n */\n public static getRule(\n rawRule: IStyleRule<INodeStyle | IEdgeStyle>,\n styleType: StyleType\n ): StyleRule {\n const rule = Tools.clone(rawRule);\n rule.style = {[styleType]: rule.style[styleType]};\n return new StyleRule(rule);\n }\n\n /**\n * Check for non unique index in styles rules and update them if exists\n */\n public static sanitizeStylesIndex(styles: IStyles): IStyles {\n const seenIndex: Array<number> = [];\n const sanitizedStyles: IStyles = Tools.clone(styles);\n let maxIndex =\n Math.max(...[...styles.node.map((s) => s.index), ...styles.edge.map((s) => s.index)]) + 1;\n sanitizedStyles.node = sanitizedStyles.node.map((style) => {\n if (seenIndex.includes(style.index)) {\n style.index = maxIndex;\n maxIndex++;\n } else {\n seenIndex.push(style.index);\n }\n return style;\n });\n sanitizedStyles.edge = sanitizedStyles.edge.map((style) => {\n if (seenIndex.includes(style.index)) {\n style.index = maxIndex;\n maxIndex++;\n } else {\n seenIndex.push(style.index);\n }\n return style;\n });\n return sanitizedStyles;\n }\n}\n"]}
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.HTML_COLORS = void 0;
3
4
  exports.HTML_COLORS = {
4
5
  lightsalmon: { hex: '#FFA07A', rgb: 'rbg(255,160,122)' },
5
6
  salmon: { hex: '#FA8072', rgb: 'rgb(250,128,114)' },