@pie-lib/graphing 3.2.0-next.0 → 3.2.0-next.2

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 (113) hide show
  1. package/lib/__tests__/bg.test.js +282 -0
  2. package/lib/__tests__/coordinates-label.test.js +276 -0
  3. package/lib/__tests__/graph-with-controls.test.js +275 -0
  4. package/lib/__tests__/graph.test.js +927 -0
  5. package/lib/__tests__/grid-setup.test.js +729 -0
  6. package/lib/__tests__/grid.test.js +29 -0
  7. package/lib/__tests__/key-legend.test.js +321 -0
  8. package/lib/__tests__/label-svg-icon.test.js +373 -0
  9. package/lib/__tests__/labels.test.js +61 -0
  10. package/lib/__tests__/mark-label.test.js +133 -0
  11. package/lib/__tests__/toggle-bar.test.js +197 -0
  12. package/lib/__tests__/tool-menu.test.js +151 -0
  13. package/lib/__tests__/undo-redo.test.js +31 -0
  14. package/lib/__tests__/use-debounce.test.js +24 -0
  15. package/lib/__tests__/utils.js +70 -0
  16. package/lib/__tests__/utils.test.js +123 -0
  17. package/lib/axis/__tests__/arrow.test.js +60 -0
  18. package/lib/axis/__tests__/axes.test.js +195 -0
  19. package/lib/axis/arrow.js +1 -1
  20. package/lib/axis/axes.js +1 -1
  21. package/lib/axis/index.js +1 -1
  22. package/lib/bg.js +1 -1
  23. package/lib/container/__tests__/actions.test.js +108 -0
  24. package/lib/container/__tests__/index.test.js +503 -0
  25. package/lib/container/__tests__/marks.test.js +259 -0
  26. package/lib/container/__tests__/middleware.test.js +244 -0
  27. package/lib/container/__tests__/reducer.test.js +450 -0
  28. package/lib/container/actions.js +1 -1
  29. package/lib/container/index.js +1 -1
  30. package/lib/container/marks.js +1 -1
  31. package/lib/container/middleware.js +1 -1
  32. package/lib/container/reducer.js +1 -1
  33. package/lib/coordinates-label.js +1 -1
  34. package/lib/graph-with-controls.js +1 -1
  35. package/lib/graph.js +1 -1
  36. package/lib/grid-setup.js +1 -1
  37. package/lib/grid.js +1 -1
  38. package/lib/index.js +1 -1
  39. package/lib/key-legend.js +1 -1
  40. package/lib/label-svg-icon.js +1 -1
  41. package/lib/labels.js +1 -1
  42. package/lib/mark-label.js +1 -1
  43. package/lib/toggle-bar.js +1 -1
  44. package/lib/tool-menu.js +1 -1
  45. package/lib/tools/absolute/__tests__/component.test.js +65 -0
  46. package/lib/tools/absolute/component.js +1 -1
  47. package/lib/tools/absolute/index.js +1 -1
  48. package/lib/tools/circle/__tests__/bg-circle.test.js +33 -0
  49. package/lib/tools/circle/__tests__/component.test.js +615 -0
  50. package/lib/tools/circle/__tests__/index.test.js +576 -0
  51. package/lib/tools/circle/bg-circle.js +1 -1
  52. package/lib/tools/circle/component.js +1 -1
  53. package/lib/tools/circle/index.js +1 -1
  54. package/lib/tools/exponential/__tests__/component.test.js +64 -0
  55. package/lib/tools/exponential/__tests__/index.test.js +828 -0
  56. package/lib/tools/exponential/component.js +1 -1
  57. package/lib/tools/exponential/index.js +1 -1
  58. package/lib/tools/index.js +1 -1
  59. package/lib/tools/line/__tests__/component.test.js +45 -0
  60. package/lib/tools/line/component.js +1 -1
  61. package/lib/tools/line/index.js +1 -1
  62. package/lib/tools/parabola/__tests__/component.test.js +64 -0
  63. package/lib/tools/parabola/__tests__/index.test.js +564 -0
  64. package/lib/tools/parabola/component.js +1 -1
  65. package/lib/tools/parabola/index.js +1 -1
  66. package/lib/tools/point/__tests__/component.test.js +434 -0
  67. package/lib/tools/point/__tests__/index.test.js +262 -0
  68. package/lib/tools/point/component.js +1 -1
  69. package/lib/tools/point/index.js +1 -1
  70. package/lib/tools/polygon/__tests__/component.test.js +485 -0
  71. package/lib/tools/polygon/__tests__/index.test.js +303 -0
  72. package/lib/tools/polygon/__tests__/line.test.js +50 -0
  73. package/lib/tools/polygon/__tests__/polygon.test.js +85 -0
  74. package/lib/tools/polygon/component.js +1 -1
  75. package/lib/tools/polygon/index.js +1 -1
  76. package/lib/tools/polygon/line.js +1 -1
  77. package/lib/tools/polygon/polygon.js +1 -1
  78. package/lib/tools/ray/__tests__/component.test.js +35 -0
  79. package/lib/tools/ray/component.js +1 -1
  80. package/lib/tools/ray/index.js +1 -1
  81. package/lib/tools/segment/__tests__/component.test.js +35 -0
  82. package/lib/tools/segment/component.js +1 -1
  83. package/lib/tools/segment/index.js +1 -1
  84. package/lib/tools/shared/__tests__/arrow-head.test.js +45 -0
  85. package/lib/tools/shared/arrow-head.js +1 -1
  86. package/lib/tools/shared/icons/CorrectSVG.js +1 -1
  87. package/lib/tools/shared/icons/IncorrectSVG.js +1 -1
  88. package/lib/tools/shared/icons/MissingSVG.js +1 -1
  89. package/lib/tools/shared/line/__tests__/index.test.js +124 -0
  90. package/lib/tools/shared/line/__tests__/line-path.test.js +62 -0
  91. package/lib/tools/shared/line/__tests__/with-root-edge.test.js +90 -0
  92. package/lib/tools/shared/line/index.js +1 -1
  93. package/lib/tools/shared/line/line-path.js +1 -1
  94. package/lib/tools/shared/line/with-root-edge.js +1 -1
  95. package/lib/tools/shared/point/__tests__/arrow-point.test.js +127 -0
  96. package/lib/tools/shared/point/__tests__/base-point.test.js +122 -0
  97. package/lib/tools/shared/point/arrow-point.js +1 -1
  98. package/lib/tools/shared/point/arrow.js +1 -1
  99. package/lib/tools/shared/point/base-point.js +1 -1
  100. package/lib/tools/shared/point/index.js +1 -1
  101. package/lib/tools/shared/styles.js +1 -1
  102. package/lib/tools/shared/types.js +1 -1
  103. package/lib/tools/sine/__tests__/component.test.js +72 -0
  104. package/lib/tools/sine/component.js +1 -1
  105. package/lib/tools/sine/index.js +1 -1
  106. package/lib/tools/vector/__tests__/component.test.js +32 -0
  107. package/lib/tools/vector/component.js +1 -1
  108. package/lib/tools/vector/index.js +1 -1
  109. package/lib/undo-redo.js +1 -1
  110. package/lib/use-debounce.js +1 -1
  111. package/lib/utils.js +1 -1
  112. package/package.json +9 -12
  113. package/LICENSE.md +0 -5
@@ -0,0 +1,373 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _react = _interopRequireDefault(require("react"));
5
+ var _testUtils = require("@pie-lib/test-utils");
6
+ var _labelSvgIcon = _interopRequireDefault(require("../label-svg-icon"));
7
+ describe('SvgIcon', function () {
8
+ describe('rendering', function () {
9
+ it('renders without crashing with correct type', function () {
10
+ var _render = (0, _testUtils.render)(/*#__PURE__*/_react["default"].createElement(_labelSvgIcon["default"], {
11
+ type: "correct"
12
+ })),
13
+ container = _render.container;
14
+ expect(container.firstChild).toBeInTheDocument();
15
+ });
16
+ it('renders correct icon type', function () {
17
+ var _render2 = (0, _testUtils.render)(/*#__PURE__*/_react["default"].createElement(_labelSvgIcon["default"], {
18
+ type: "correct"
19
+ })),
20
+ container = _render2.container;
21
+ var svg = container.querySelector('svg');
22
+ expect(svg).toBeInTheDocument();
23
+ expect(svg).toHaveAttribute('width', '8');
24
+ expect(svg).toHaveAttribute('height', '6');
25
+ });
26
+ it('renders incorrect icon type', function () {
27
+ var _render3 = (0, _testUtils.render)(/*#__PURE__*/_react["default"].createElement(_labelSvgIcon["default"], {
28
+ type: "incorrect"
29
+ })),
30
+ container = _render3.container;
31
+ var svg = container.querySelector('svg');
32
+ expect(svg).toBeInTheDocument();
33
+ expect(svg).toHaveAttribute('width', '7');
34
+ expect(svg).toHaveAttribute('height', '7');
35
+ });
36
+ it('renders empty icon type', function () {
37
+ var _render4 = (0, _testUtils.render)(/*#__PURE__*/_react["default"].createElement(_labelSvgIcon["default"], {
38
+ type: "empty"
39
+ })),
40
+ container = _render4.container;
41
+ var svg = container.querySelector('svg');
42
+ expect(svg).toBeInTheDocument();
43
+ expect(svg).toHaveAttribute('width', '11');
44
+ expect(svg).toHaveAttribute('height', '12');
45
+ });
46
+ it('renders null for unknown icon type', function () {
47
+ var _render5 = (0, _testUtils.render)(/*#__PURE__*/_react["default"].createElement(_labelSvgIcon["default"], {
48
+ type: "unknown"
49
+ })),
50
+ container = _render5.container;
51
+ expect(container.firstChild).toBeNull();
52
+ });
53
+ it('renders null for invalid icon type', function () {
54
+ var _render6 = (0, _testUtils.render)(/*#__PURE__*/_react["default"].createElement(_labelSvgIcon["default"], {
55
+ type: "invalid"
56
+ })),
57
+ container = _render6.container;
58
+ expect(container.firstChild).toBeNull();
59
+ });
60
+ });
61
+ describe('correct icon', function () {
62
+ it('has correct viewBox attribute', function () {
63
+ var _render7 = (0, _testUtils.render)(/*#__PURE__*/_react["default"].createElement(_labelSvgIcon["default"], {
64
+ type: "correct"
65
+ })),
66
+ container = _render7.container;
67
+ var svg = container.querySelector('svg');
68
+ expect(svg).toHaveAttribute('viewBox', '0 0 8 6');
69
+ });
70
+ it('has correct fill color for path', function () {
71
+ var _render8 = (0, _testUtils.render)(/*#__PURE__*/_react["default"].createElement(_labelSvgIcon["default"], {
72
+ type: "correct"
73
+ })),
74
+ container = _render8.container;
75
+ var path = container.querySelector('path');
76
+ expect(path).toHaveAttribute('fill', '#0B7D38');
77
+ });
78
+ it('has correct path d attribute for checkmark', function () {
79
+ var _render9 = (0, _testUtils.render)(/*#__PURE__*/_react["default"].createElement(_labelSvgIcon["default"], {
80
+ type: "correct"
81
+ })),
82
+ container = _render9.container;
83
+ var path = container.querySelector('path');
84
+ expect(path).toHaveAttribute('d');
85
+ var dAttribute = path.getAttribute('d');
86
+ expect(dAttribute).toContain('M6.79688');
87
+ });
88
+ it('has xmlns attribute', function () {
89
+ var _render0 = (0, _testUtils.render)(/*#__PURE__*/_react["default"].createElement(_labelSvgIcon["default"], {
90
+ type: "correct"
91
+ })),
92
+ container = _render0.container;
93
+ var svg = container.querySelector('svg');
94
+ expect(svg).toHaveAttribute('xmlns', 'http://www.w3.org/2000/svg');
95
+ });
96
+ });
97
+ describe('incorrect icon', function () {
98
+ it('has correct viewBox attribute', function () {
99
+ var _render1 = (0, _testUtils.render)(/*#__PURE__*/_react["default"].createElement(_labelSvgIcon["default"], {
100
+ type: "incorrect"
101
+ })),
102
+ container = _render1.container;
103
+ var svg = container.querySelector('svg');
104
+ expect(svg).toHaveAttribute('viewBox', '0 0 7 7');
105
+ });
106
+ it('has correct fill color for path', function () {
107
+ var _render10 = (0, _testUtils.render)(/*#__PURE__*/_react["default"].createElement(_labelSvgIcon["default"], {
108
+ type: "incorrect"
109
+ })),
110
+ container = _render10.container;
111
+ var path = container.querySelector('path');
112
+ expect(path).toHaveAttribute('fill', '#BF0D00');
113
+ });
114
+ it('has correct path d attribute for X mark', function () {
115
+ var _render11 = (0, _testUtils.render)(/*#__PURE__*/_react["default"].createElement(_labelSvgIcon["default"], {
116
+ type: "incorrect"
117
+ })),
118
+ container = _render11.container;
119
+ var path = container.querySelector('path');
120
+ expect(path).toHaveAttribute('d');
121
+ var dAttribute = path.getAttribute('d');
122
+ expect(dAttribute).toContain('M4.23438');
123
+ });
124
+ it('has xmlns attribute', function () {
125
+ var _render12 = (0, _testUtils.render)(/*#__PURE__*/_react["default"].createElement(_labelSvgIcon["default"], {
126
+ type: "incorrect"
127
+ })),
128
+ container = _render12.container;
129
+ var svg = container.querySelector('svg');
130
+ expect(svg).toHaveAttribute('xmlns', 'http://www.w3.org/2000/svg');
131
+ });
132
+ });
133
+ describe('empty icon', function () {
134
+ it('has correct viewBox attribute', function () {
135
+ var _render13 = (0, _testUtils.render)(/*#__PURE__*/_react["default"].createElement(_labelSvgIcon["default"], {
136
+ type: "empty"
137
+ })),
138
+ container = _render13.container;
139
+ var svg = container.querySelector('svg');
140
+ expect(svg).toHaveAttribute('viewBox', '0 0 11 12');
141
+ });
142
+ it('has correct fill color for path', function () {
143
+ var _render14 = (0, _testUtils.render)(/*#__PURE__*/_react["default"].createElement(_labelSvgIcon["default"], {
144
+ type: "empty"
145
+ })),
146
+ container = _render14.container;
147
+ var path = container.querySelector('path');
148
+ expect(path).toHaveAttribute('fill', '#BF0D00');
149
+ });
150
+ it('has correct path d attribute for empty frame', function () {
151
+ var _render15 = (0, _testUtils.render)(/*#__PURE__*/_react["default"].createElement(_labelSvgIcon["default"], {
152
+ type: "empty"
153
+ })),
154
+ container = _render15.container;
155
+ var path = container.querySelector('path');
156
+ expect(path).toHaveAttribute('d');
157
+ var dAttribute = path.getAttribute('d');
158
+ expect(dAttribute).toContain('M0.25');
159
+ });
160
+ it('has xmlns attribute', function () {
161
+ var _render16 = (0, _testUtils.render)(/*#__PURE__*/_react["default"].createElement(_labelSvgIcon["default"], {
162
+ type: "empty"
163
+ })),
164
+ container = _render16.container;
165
+ var svg = container.querySelector('svg');
166
+ expect(svg).toHaveAttribute('xmlns', 'http://www.w3.org/2000/svg');
167
+ });
168
+ });
169
+ describe('icon structure', function () {
170
+ it('correct icon has one path element', function () {
171
+ var _render17 = (0, _testUtils.render)(/*#__PURE__*/_react["default"].createElement(_labelSvgIcon["default"], {
172
+ type: "correct"
173
+ })),
174
+ container = _render17.container;
175
+ var paths = container.querySelectorAll('path');
176
+ expect(paths.length).toBe(1);
177
+ });
178
+ it('incorrect icon has one path element', function () {
179
+ var _render18 = (0, _testUtils.render)(/*#__PURE__*/_react["default"].createElement(_labelSvgIcon["default"], {
180
+ type: "incorrect"
181
+ })),
182
+ container = _render18.container;
183
+ var paths = container.querySelectorAll('path');
184
+ expect(paths.length).toBe(1);
185
+ });
186
+ it('empty icon has one path element', function () {
187
+ var _render19 = (0, _testUtils.render)(/*#__PURE__*/_react["default"].createElement(_labelSvgIcon["default"], {
188
+ type: "empty"
189
+ })),
190
+ container = _render19.container;
191
+ var paths = container.querySelectorAll('path');
192
+ expect(paths.length).toBe(1);
193
+ });
194
+ it('each icon renders only one svg element', function () {
195
+ var _render20 = (0, _testUtils.render)(/*#__PURE__*/_react["default"].createElement(_labelSvgIcon["default"], {
196
+ type: "correct"
197
+ })),
198
+ correctContainer = _render20.container;
199
+ var _render21 = (0, _testUtils.render)(/*#__PURE__*/_react["default"].createElement(_labelSvgIcon["default"], {
200
+ type: "incorrect"
201
+ })),
202
+ incorrectContainer = _render21.container;
203
+ var _render22 = (0, _testUtils.render)(/*#__PURE__*/_react["default"].createElement(_labelSvgIcon["default"], {
204
+ type: "empty"
205
+ })),
206
+ emptyContainer = _render22.container;
207
+ expect(correctContainer.querySelectorAll('svg').length).toBe(1);
208
+ expect(incorrectContainer.querySelectorAll('svg').length).toBe(1);
209
+ expect(emptyContainer.querySelectorAll('svg').length).toBe(1);
210
+ });
211
+ });
212
+ describe('edge cases', function () {
213
+ it('handles empty string type gracefully', function () {
214
+ var _render23 = (0, _testUtils.render)(/*#__PURE__*/_react["default"].createElement(_labelSvgIcon["default"], {
215
+ type: ""
216
+ })),
217
+ container = _render23.container;
218
+ expect(container.firstChild).toBeNull();
219
+ });
220
+ it('handles null type gracefully', function () {
221
+ var _render24 = (0, _testUtils.render)(/*#__PURE__*/_react["default"].createElement(_labelSvgIcon["default"], {
222
+ type: null
223
+ })),
224
+ container = _render24.container;
225
+ expect(container.firstChild).toBeNull();
226
+ });
227
+ it('handles undefined type gracefully', function () {
228
+ var _render25 = (0, _testUtils.render)(/*#__PURE__*/_react["default"].createElement(_labelSvgIcon["default"], {
229
+ type: undefined
230
+ })),
231
+ container = _render25.container;
232
+ expect(container.firstChild).toBeNull();
233
+ });
234
+ it('handles numeric type gracefully', function () {
235
+ var _render26 = (0, _testUtils.render)(/*#__PURE__*/_react["default"].createElement(_labelSvgIcon["default"], {
236
+ type: 123
237
+ })),
238
+ container = _render26.container;
239
+ expect(container.firstChild).toBeNull();
240
+ });
241
+ it('handles object type gracefully', function () {
242
+ var _render27 = (0, _testUtils.render)(/*#__PURE__*/_react["default"].createElement(_labelSvgIcon["default"], {
243
+ type: {}
244
+ })),
245
+ container = _render27.container;
246
+ expect(container.firstChild).toBeNull();
247
+ });
248
+ });
249
+ describe('icon differentiation', function () {
250
+ it('correct and incorrect icons have different dimensions', function () {
251
+ var _render28 = (0, _testUtils.render)(/*#__PURE__*/_react["default"].createElement(_labelSvgIcon["default"], {
252
+ type: "correct"
253
+ })),
254
+ correctContainer = _render28.container;
255
+ var _render29 = (0, _testUtils.render)(/*#__PURE__*/_react["default"].createElement(_labelSvgIcon["default"], {
256
+ type: "incorrect"
257
+ })),
258
+ incorrectContainer = _render29.container;
259
+ var correctSvg = correctContainer.querySelector('svg');
260
+ var incorrectSvg = incorrectContainer.querySelector('svg');
261
+ expect(correctSvg.getAttribute('width')).not.toBe(incorrectSvg.getAttribute('width'));
262
+ });
263
+ it('correct and empty icons have different fill colors', function () {
264
+ var _render30 = (0, _testUtils.render)(/*#__PURE__*/_react["default"].createElement(_labelSvgIcon["default"], {
265
+ type: "correct"
266
+ })),
267
+ correctContainer = _render30.container;
268
+ var _render31 = (0, _testUtils.render)(/*#__PURE__*/_react["default"].createElement(_labelSvgIcon["default"], {
269
+ type: "empty"
270
+ })),
271
+ emptyContainer = _render31.container;
272
+ var correctPath = correctContainer.querySelector('path');
273
+ var emptyPath = emptyContainer.querySelector('path');
274
+ expect(correctPath.getAttribute('fill')).not.toBe(emptyPath.getAttribute('fill'));
275
+ });
276
+ it('incorrect and empty icons have same fill color', function () {
277
+ var _render32 = (0, _testUtils.render)(/*#__PURE__*/_react["default"].createElement(_labelSvgIcon["default"], {
278
+ type: "incorrect"
279
+ })),
280
+ incorrectContainer = _render32.container;
281
+ var _render33 = (0, _testUtils.render)(/*#__PURE__*/_react["default"].createElement(_labelSvgIcon["default"], {
282
+ type: "empty"
283
+ })),
284
+ emptyContainer = _render33.container;
285
+ var incorrectPath = incorrectContainer.querySelector('path');
286
+ var emptyPath = emptyContainer.querySelector('path');
287
+ expect(incorrectPath.getAttribute('fill')).toBe(emptyPath.getAttribute('fill'));
288
+ });
289
+ it('each icon type has unique path data', function () {
290
+ var _render34 = (0, _testUtils.render)(/*#__PURE__*/_react["default"].createElement(_labelSvgIcon["default"], {
291
+ type: "correct"
292
+ })),
293
+ correctContainer = _render34.container;
294
+ var _render35 = (0, _testUtils.render)(/*#__PURE__*/_react["default"].createElement(_labelSvgIcon["default"], {
295
+ type: "incorrect"
296
+ })),
297
+ incorrectContainer = _render35.container;
298
+ var _render36 = (0, _testUtils.render)(/*#__PURE__*/_react["default"].createElement(_labelSvgIcon["default"], {
299
+ type: "empty"
300
+ })),
301
+ emptyContainer = _render36.container;
302
+ var correctPath = correctContainer.querySelector('path').getAttribute('d');
303
+ var incorrectPath = incorrectContainer.querySelector('path').getAttribute('d');
304
+ var emptyPath = emptyContainer.querySelector('path').getAttribute('d');
305
+ expect(correctPath).not.toBe(incorrectPath);
306
+ expect(correctPath).not.toBe(emptyPath);
307
+ expect(incorrectPath).not.toBe(emptyPath);
308
+ });
309
+ });
310
+ describe('SVG attributes', function () {
311
+ it('all icons have fill="none" on svg element', function () {
312
+ var _render37 = (0, _testUtils.render)(/*#__PURE__*/_react["default"].createElement(_labelSvgIcon["default"], {
313
+ type: "correct"
314
+ })),
315
+ correctContainer = _render37.container;
316
+ var _render38 = (0, _testUtils.render)(/*#__PURE__*/_react["default"].createElement(_labelSvgIcon["default"], {
317
+ type: "incorrect"
318
+ })),
319
+ incorrectContainer = _render38.container;
320
+ var _render39 = (0, _testUtils.render)(/*#__PURE__*/_react["default"].createElement(_labelSvgIcon["default"], {
321
+ type: "empty"
322
+ })),
323
+ emptyContainer = _render39.container;
324
+ expect(correctContainer.querySelector('svg')).toHaveAttribute('fill', 'none');
325
+ expect(incorrectContainer.querySelector('svg')).toHaveAttribute('fill', 'none');
326
+ expect(emptyContainer.querySelector('svg')).toHaveAttribute('fill', 'none');
327
+ });
328
+ it('all icons have proper xmlns namespace', function () {
329
+ var _render40 = (0, _testUtils.render)(/*#__PURE__*/_react["default"].createElement(_labelSvgIcon["default"], {
330
+ type: "correct"
331
+ })),
332
+ correctContainer = _render40.container;
333
+ var _render41 = (0, _testUtils.render)(/*#__PURE__*/_react["default"].createElement(_labelSvgIcon["default"], {
334
+ type: "incorrect"
335
+ })),
336
+ incorrectContainer = _render41.container;
337
+ var _render42 = (0, _testUtils.render)(/*#__PURE__*/_react["default"].createElement(_labelSvgIcon["default"], {
338
+ type: "empty"
339
+ })),
340
+ emptyContainer = _render42.container;
341
+ var xmlns = 'http://www.w3.org/2000/svg';
342
+ expect(correctContainer.querySelector('svg')).toHaveAttribute('xmlns', xmlns);
343
+ expect(incorrectContainer.querySelector('svg')).toHaveAttribute('xmlns', xmlns);
344
+ expect(emptyContainer.querySelector('svg')).toHaveAttribute('xmlns', xmlns);
345
+ });
346
+ });
347
+ describe('accessibility', function () {
348
+ it('svg elements are properly structured for screen readers', function () {
349
+ var _render43 = (0, _testUtils.render)(/*#__PURE__*/_react["default"].createElement(_labelSvgIcon["default"], {
350
+ type: "correct"
351
+ })),
352
+ container = _render43.container;
353
+ var svg = container.querySelector('svg');
354
+
355
+ // SVG should be in DOM
356
+ expect(svg).toBeInTheDocument();
357
+
358
+ // Should have valid viewBox for proper scaling
359
+ expect(svg.getAttribute('viewBox')).toBeTruthy();
360
+ });
361
+ it('icons render as inline elements', function () {
362
+ var _render44 = (0, _testUtils.render)(/*#__PURE__*/_react["default"].createElement(_labelSvgIcon["default"], {
363
+ type: "correct"
364
+ })),
365
+ container = _render44.container;
366
+ var svg = container.querySelector('svg');
367
+
368
+ // SVG should be direct child (inline)
369
+ expect(container.firstChild).toBe(svg);
370
+ });
371
+ });
372
+ });
373
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl90ZXN0VXRpbHMiLCJfbGFiZWxTdmdJY29uIiwiZGVzY3JpYmUiLCJpdCIsIl9yZW5kZXIiLCJyZW5kZXIiLCJjcmVhdGVFbGVtZW50IiwidHlwZSIsImNvbnRhaW5lciIsImV4cGVjdCIsImZpcnN0Q2hpbGQiLCJ0b0JlSW5UaGVEb2N1bWVudCIsIl9yZW5kZXIyIiwic3ZnIiwicXVlcnlTZWxlY3RvciIsInRvSGF2ZUF0dHJpYnV0ZSIsIl9yZW5kZXIzIiwiX3JlbmRlcjQiLCJfcmVuZGVyNSIsInRvQmVOdWxsIiwiX3JlbmRlcjYiLCJfcmVuZGVyNyIsIl9yZW5kZXI4IiwicGF0aCIsIl9yZW5kZXI5IiwiZEF0dHJpYnV0ZSIsImdldEF0dHJpYnV0ZSIsInRvQ29udGFpbiIsIl9yZW5kZXIwIiwiX3JlbmRlcjEiLCJfcmVuZGVyMTAiLCJfcmVuZGVyMTEiLCJfcmVuZGVyMTIiLCJfcmVuZGVyMTMiLCJfcmVuZGVyMTQiLCJfcmVuZGVyMTUiLCJfcmVuZGVyMTYiLCJfcmVuZGVyMTciLCJwYXRocyIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJsZW5ndGgiLCJ0b0JlIiwiX3JlbmRlcjE4IiwiX3JlbmRlcjE5IiwiX3JlbmRlcjIwIiwiY29ycmVjdENvbnRhaW5lciIsIl9yZW5kZXIyMSIsImluY29ycmVjdENvbnRhaW5lciIsIl9yZW5kZXIyMiIsImVtcHR5Q29udGFpbmVyIiwiX3JlbmRlcjIzIiwiX3JlbmRlcjI0IiwiX3JlbmRlcjI1IiwidW5kZWZpbmVkIiwiX3JlbmRlcjI2IiwiX3JlbmRlcjI3IiwiX3JlbmRlcjI4IiwiX3JlbmRlcjI5IiwiY29ycmVjdFN2ZyIsImluY29ycmVjdFN2ZyIsIm5vdCIsIl9yZW5kZXIzMCIsIl9yZW5kZXIzMSIsImNvcnJlY3RQYXRoIiwiZW1wdHlQYXRoIiwiX3JlbmRlcjMyIiwiX3JlbmRlcjMzIiwiaW5jb3JyZWN0UGF0aCIsIl9yZW5kZXIzNCIsIl9yZW5kZXIzNSIsIl9yZW5kZXIzNiIsIl9yZW5kZXIzNyIsIl9yZW5kZXIzOCIsIl9yZW5kZXIzOSIsIl9yZW5kZXI0MCIsIl9yZW5kZXI0MSIsIl9yZW5kZXI0MiIsInhtbG5zIiwiX3JlbmRlcjQzIiwidG9CZVRydXRoeSIsIl9yZW5kZXI0NCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9fX3Rlc3RzX18vbGFiZWwtc3ZnLWljb24udGVzdC5qc3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHJlbmRlciB9IGZyb20gJ0BwaWUtbGliL3Rlc3QtdXRpbHMnO1xuXG5pbXBvcnQgU3ZnSWNvbiBmcm9tICcuLi9sYWJlbC1zdmctaWNvbic7XG5cbmRlc2NyaWJlKCdTdmdJY29uJywgKCkgPT4ge1xuICBkZXNjcmliZSgncmVuZGVyaW5nJywgKCkgPT4ge1xuICAgIGl0KCdyZW5kZXJzIHdpdGhvdXQgY3Jhc2hpbmcgd2l0aCBjb3JyZWN0IHR5cGUnLCAoKSA9PiB7XG4gICAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyKDxTdmdJY29uIHR5cGU9XCJjb3JyZWN0XCIgLz4pO1xuICAgICAgZXhwZWN0KGNvbnRhaW5lci5maXJzdENoaWxkKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlbmRlcnMgY29ycmVjdCBpY29uIHR5cGUnLCAoKSA9PiB7XG4gICAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyKDxTdmdJY29uIHR5cGU9XCJjb3JyZWN0XCIgLz4pO1xuICAgICAgY29uc3Qgc3ZnID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJ3N2ZycpO1xuICAgICAgZXhwZWN0KHN2ZykudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICAgIGV4cGVjdChzdmcpLnRvSGF2ZUF0dHJpYnV0ZSgnd2lkdGgnLCAnOCcpO1xuICAgICAgZXhwZWN0KHN2ZykudG9IYXZlQXR0cmlidXRlKCdoZWlnaHQnLCAnNicpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlbmRlcnMgaW5jb3JyZWN0IGljb24gdHlwZScsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXIoPFN2Z0ljb24gdHlwZT1cImluY29ycmVjdFwiIC8+KTtcbiAgICAgIGNvbnN0IHN2ZyA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCdzdmcnKTtcbiAgICAgIGV4cGVjdChzdmcpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgICBleHBlY3Qoc3ZnKS50b0hhdmVBdHRyaWJ1dGUoJ3dpZHRoJywgJzcnKTtcbiAgICAgIGV4cGVjdChzdmcpLnRvSGF2ZUF0dHJpYnV0ZSgnaGVpZ2h0JywgJzcnKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZW5kZXJzIGVtcHR5IGljb24gdHlwZScsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXIoPFN2Z0ljb24gdHlwZT1cImVtcHR5XCIgLz4pO1xuICAgICAgY29uc3Qgc3ZnID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJ3N2ZycpO1xuICAgICAgZXhwZWN0KHN2ZykudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICAgIGV4cGVjdChzdmcpLnRvSGF2ZUF0dHJpYnV0ZSgnd2lkdGgnLCAnMTEnKTtcbiAgICAgIGV4cGVjdChzdmcpLnRvSGF2ZUF0dHJpYnV0ZSgnaGVpZ2h0JywgJzEyJyk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVuZGVycyBudWxsIGZvciB1bmtub3duIGljb24gdHlwZScsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXIoPFN2Z0ljb24gdHlwZT1cInVua25vd25cIiAvPik7XG4gICAgICBleHBlY3QoY29udGFpbmVyLmZpcnN0Q2hpbGQpLnRvQmVOdWxsKCk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVuZGVycyBudWxsIGZvciBpbnZhbGlkIGljb24gdHlwZScsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXIoPFN2Z0ljb24gdHlwZT1cImludmFsaWRcIiAvPik7XG4gICAgICBleHBlY3QoY29udGFpbmVyLmZpcnN0Q2hpbGQpLnRvQmVOdWxsKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdjb3JyZWN0IGljb24nLCAoKSA9PiB7XG4gICAgaXQoJ2hhcyBjb3JyZWN0IHZpZXdCb3ggYXR0cmlidXRlJywgKCkgPT4ge1xuICAgICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlcig8U3ZnSWNvbiB0eXBlPVwiY29ycmVjdFwiIC8+KTtcbiAgICAgIGNvbnN0IHN2ZyA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCdzdmcnKTtcbiAgICAgIGV4cGVjdChzdmcpLnRvSGF2ZUF0dHJpYnV0ZSgndmlld0JveCcsICcwIDAgOCA2Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgnaGFzIGNvcnJlY3QgZmlsbCBjb2xvciBmb3IgcGF0aCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXIoPFN2Z0ljb24gdHlwZT1cImNvcnJlY3RcIiAvPik7XG4gICAgICBjb25zdCBwYXRoID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJ3BhdGgnKTtcbiAgICAgIGV4cGVjdChwYXRoKS50b0hhdmVBdHRyaWJ1dGUoJ2ZpbGwnLCAnIzBCN0QzOCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2hhcyBjb3JyZWN0IHBhdGggZCBhdHRyaWJ1dGUgZm9yIGNoZWNrbWFyaycsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXIoPFN2Z0ljb24gdHlwZT1cImNvcnJlY3RcIiAvPik7XG4gICAgICBjb25zdCBwYXRoID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJ3BhdGgnKTtcbiAgICAgIGV4cGVjdChwYXRoKS50b0hhdmVBdHRyaWJ1dGUoJ2QnKTtcbiAgICAgIGNvbnN0IGRBdHRyaWJ1dGUgPSBwYXRoLmdldEF0dHJpYnV0ZSgnZCcpO1xuICAgICAgZXhwZWN0KGRBdHRyaWJ1dGUpLnRvQ29udGFpbignTTYuNzk2ODgnKTtcbiAgICB9KTtcblxuICAgIGl0KCdoYXMgeG1sbnMgYXR0cmlidXRlJywgKCkgPT4ge1xuICAgICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlcig8U3ZnSWNvbiB0eXBlPVwiY29ycmVjdFwiIC8+KTtcbiAgICAgIGNvbnN0IHN2ZyA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCdzdmcnKTtcbiAgICAgIGV4cGVjdChzdmcpLnRvSGF2ZUF0dHJpYnV0ZSgneG1sbnMnLCAnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2luY29ycmVjdCBpY29uJywgKCkgPT4ge1xuICAgIGl0KCdoYXMgY29ycmVjdCB2aWV3Qm94IGF0dHJpYnV0ZScsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXIoPFN2Z0ljb24gdHlwZT1cImluY29ycmVjdFwiIC8+KTtcbiAgICAgIGNvbnN0IHN2ZyA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCdzdmcnKTtcbiAgICAgIGV4cGVjdChzdmcpLnRvSGF2ZUF0dHJpYnV0ZSgndmlld0JveCcsICcwIDAgNyA3Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgnaGFzIGNvcnJlY3QgZmlsbCBjb2xvciBmb3IgcGF0aCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXIoPFN2Z0ljb24gdHlwZT1cImluY29ycmVjdFwiIC8+KTtcbiAgICAgIGNvbnN0IHBhdGggPSBjb250YWluZXIucXVlcnlTZWxlY3RvcigncGF0aCcpO1xuICAgICAgZXhwZWN0KHBhdGgpLnRvSGF2ZUF0dHJpYnV0ZSgnZmlsbCcsICcjQkYwRDAwJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnaGFzIGNvcnJlY3QgcGF0aCBkIGF0dHJpYnV0ZSBmb3IgWCBtYXJrJywgKCkgPT4ge1xuICAgICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlcig8U3ZnSWNvbiB0eXBlPVwiaW5jb3JyZWN0XCIgLz4pO1xuICAgICAgY29uc3QgcGF0aCA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCdwYXRoJyk7XG4gICAgICBleHBlY3QocGF0aCkudG9IYXZlQXR0cmlidXRlKCdkJyk7XG4gICAgICBjb25zdCBkQXR0cmlidXRlID0gcGF0aC5nZXRBdHRyaWJ1dGUoJ2QnKTtcbiAgICAgIGV4cGVjdChkQXR0cmlidXRlKS50b0NvbnRhaW4oJ000LjIzNDM4Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgnaGFzIHhtbG5zIGF0dHJpYnV0ZScsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXIoPFN2Z0ljb24gdHlwZT1cImluY29ycmVjdFwiIC8+KTtcbiAgICAgIGNvbnN0IHN2ZyA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCdzdmcnKTtcbiAgICAgIGV4cGVjdChzdmcpLnRvSGF2ZUF0dHJpYnV0ZSgneG1sbnMnLCAnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2VtcHR5IGljb24nLCAoKSA9PiB7XG4gICAgaXQoJ2hhcyBjb3JyZWN0IHZpZXdCb3ggYXR0cmlidXRlJywgKCkgPT4ge1xuICAgICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlcig8U3ZnSWNvbiB0eXBlPVwiZW1wdHlcIiAvPik7XG4gICAgICBjb25zdCBzdmcgPSBjb250YWluZXIucXVlcnlTZWxlY3Rvcignc3ZnJyk7XG4gICAgICBleHBlY3Qoc3ZnKS50b0hhdmVBdHRyaWJ1dGUoJ3ZpZXdCb3gnLCAnMCAwIDExIDEyJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnaGFzIGNvcnJlY3QgZmlsbCBjb2xvciBmb3IgcGF0aCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXIoPFN2Z0ljb24gdHlwZT1cImVtcHR5XCIgLz4pO1xuICAgICAgY29uc3QgcGF0aCA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCdwYXRoJyk7XG4gICAgICBleHBlY3QocGF0aCkudG9IYXZlQXR0cmlidXRlKCdmaWxsJywgJyNCRjBEMDAnKTtcbiAgICB9KTtcblxuICAgIGl0KCdoYXMgY29ycmVjdCBwYXRoIGQgYXR0cmlidXRlIGZvciBlbXB0eSBmcmFtZScsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXIoPFN2Z0ljb24gdHlwZT1cImVtcHR5XCIgLz4pO1xuICAgICAgY29uc3QgcGF0aCA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCdwYXRoJyk7XG4gICAgICBleHBlY3QocGF0aCkudG9IYXZlQXR0cmlidXRlKCdkJyk7XG4gICAgICBjb25zdCBkQXR0cmlidXRlID0gcGF0aC5nZXRBdHRyaWJ1dGUoJ2QnKTtcbiAgICAgIGV4cGVjdChkQXR0cmlidXRlKS50b0NvbnRhaW4oJ00wLjI1Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgnaGFzIHhtbG5zIGF0dHJpYnV0ZScsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXIoPFN2Z0ljb24gdHlwZT1cImVtcHR5XCIgLz4pO1xuICAgICAgY29uc3Qgc3ZnID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJ3N2ZycpO1xuICAgICAgZXhwZWN0KHN2ZykudG9IYXZlQXR0cmlidXRlKCd4bWxucycsICdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnaWNvbiBzdHJ1Y3R1cmUnLCAoKSA9PiB7XG4gICAgaXQoJ2NvcnJlY3QgaWNvbiBoYXMgb25lIHBhdGggZWxlbWVudCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXIoPFN2Z0ljb24gdHlwZT1cImNvcnJlY3RcIiAvPik7XG4gICAgICBjb25zdCBwYXRocyA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCdwYXRoJyk7XG4gICAgICBleHBlY3QocGF0aHMubGVuZ3RoKS50b0JlKDEpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2luY29ycmVjdCBpY29uIGhhcyBvbmUgcGF0aCBlbGVtZW50JywgKCkgPT4ge1xuICAgICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlcig8U3ZnSWNvbiB0eXBlPVwiaW5jb3JyZWN0XCIgLz4pO1xuICAgICAgY29uc3QgcGF0aHMgPSBjb250YWluZXIucXVlcnlTZWxlY3RvckFsbCgncGF0aCcpO1xuICAgICAgZXhwZWN0KHBhdGhzLmxlbmd0aCkudG9CZSgxKTtcbiAgICB9KTtcblxuICAgIGl0KCdlbXB0eSBpY29uIGhhcyBvbmUgcGF0aCBlbGVtZW50JywgKCkgPT4ge1xuICAgICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlcig8U3ZnSWNvbiB0eXBlPVwiZW1wdHlcIiAvPik7XG4gICAgICBjb25zdCBwYXRocyA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCdwYXRoJyk7XG4gICAgICBleHBlY3QocGF0aHMubGVuZ3RoKS50b0JlKDEpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2VhY2ggaWNvbiByZW5kZXJzIG9ubHkgb25lIHN2ZyBlbGVtZW50JywgKCkgPT4ge1xuICAgICAgY29uc3QgeyBjb250YWluZXI6IGNvcnJlY3RDb250YWluZXIgfSA9IHJlbmRlcig8U3ZnSWNvbiB0eXBlPVwiY29ycmVjdFwiIC8+KTtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyOiBpbmNvcnJlY3RDb250YWluZXIgfSA9IHJlbmRlcig8U3ZnSWNvbiB0eXBlPVwiaW5jb3JyZWN0XCIgLz4pO1xuICAgICAgY29uc3QgeyBjb250YWluZXI6IGVtcHR5Q29udGFpbmVyIH0gPSByZW5kZXIoPFN2Z0ljb24gdHlwZT1cImVtcHR5XCIgLz4pO1xuXG4gICAgICBleHBlY3QoY29ycmVjdENvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCdzdmcnKS5sZW5ndGgpLnRvQmUoMSk7XG4gICAgICBleHBlY3QoaW5jb3JyZWN0Q29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoJ3N2ZycpLmxlbmd0aCkudG9CZSgxKTtcbiAgICAgIGV4cGVjdChlbXB0eUNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCdzdmcnKS5sZW5ndGgpLnRvQmUoMSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdlZGdlIGNhc2VzJywgKCkgPT4ge1xuICAgIGl0KCdoYW5kbGVzIGVtcHR5IHN0cmluZyB0eXBlIGdyYWNlZnVsbHknLCAoKSA9PiB7XG4gICAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyKDxTdmdJY29uIHR5cGU9XCJcIiAvPik7XG4gICAgICBleHBlY3QoY29udGFpbmVyLmZpcnN0Q2hpbGQpLnRvQmVOdWxsKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnaGFuZGxlcyBudWxsIHR5cGUgZ3JhY2VmdWxseScsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXIoPFN2Z0ljb24gdHlwZT17bnVsbH0gLz4pO1xuICAgICAgZXhwZWN0KGNvbnRhaW5lci5maXJzdENoaWxkKS50b0JlTnVsbCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2hhbmRsZXMgdW5kZWZpbmVkIHR5cGUgZ3JhY2VmdWxseScsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXIoPFN2Z0ljb24gdHlwZT17dW5kZWZpbmVkfSAvPik7XG4gICAgICBleHBlY3QoY29udGFpbmVyLmZpcnN0Q2hpbGQpLnRvQmVOdWxsKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnaGFuZGxlcyBudW1lcmljIHR5cGUgZ3JhY2VmdWxseScsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXIoPFN2Z0ljb24gdHlwZT17MTIzfSAvPik7XG4gICAgICBleHBlY3QoY29udGFpbmVyLmZpcnN0Q2hpbGQpLnRvQmVOdWxsKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnaGFuZGxlcyBvYmplY3QgdHlwZSBncmFjZWZ1bGx5JywgKCkgPT4ge1xuICAgICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlcig8U3ZnSWNvbiB0eXBlPXt7fX0gLz4pO1xuICAgICAgZXhwZWN0KGNvbnRhaW5lci5maXJzdENoaWxkKS50b0JlTnVsbCgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnaWNvbiBkaWZmZXJlbnRpYXRpb24nLCAoKSA9PiB7XG4gICAgaXQoJ2NvcnJlY3QgYW5kIGluY29ycmVjdCBpY29ucyBoYXZlIGRpZmZlcmVudCBkaW1lbnNpb25zJywgKCkgPT4ge1xuICAgICAgY29uc3QgeyBjb250YWluZXI6IGNvcnJlY3RDb250YWluZXIgfSA9IHJlbmRlcig8U3ZnSWNvbiB0eXBlPVwiY29ycmVjdFwiIC8+KTtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyOiBpbmNvcnJlY3RDb250YWluZXIgfSA9IHJlbmRlcig8U3ZnSWNvbiB0eXBlPVwiaW5jb3JyZWN0XCIgLz4pO1xuXG4gICAgICBjb25zdCBjb3JyZWN0U3ZnID0gY29ycmVjdENvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCdzdmcnKTtcbiAgICAgIGNvbnN0IGluY29ycmVjdFN2ZyA9IGluY29ycmVjdENvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCdzdmcnKTtcblxuICAgICAgZXhwZWN0KGNvcnJlY3RTdmcuZ2V0QXR0cmlidXRlKCd3aWR0aCcpKS5ub3QudG9CZShpbmNvcnJlY3RTdmcuZ2V0QXR0cmlidXRlKCd3aWR0aCcpKTtcbiAgICB9KTtcblxuICAgIGl0KCdjb3JyZWN0IGFuZCBlbXB0eSBpY29ucyBoYXZlIGRpZmZlcmVudCBmaWxsIGNvbG9ycycsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyOiBjb3JyZWN0Q29udGFpbmVyIH0gPSByZW5kZXIoPFN2Z0ljb24gdHlwZT1cImNvcnJlY3RcIiAvPik7XG4gICAgICBjb25zdCB7IGNvbnRhaW5lcjogZW1wdHlDb250YWluZXIgfSA9IHJlbmRlcig8U3ZnSWNvbiB0eXBlPVwiZW1wdHlcIiAvPik7XG5cbiAgICAgIGNvbnN0IGNvcnJlY3RQYXRoID0gY29ycmVjdENvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCdwYXRoJyk7XG4gICAgICBjb25zdCBlbXB0eVBhdGggPSBlbXB0eUNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCdwYXRoJyk7XG5cbiAgICAgIGV4cGVjdChjb3JyZWN0UGF0aC5nZXRBdHRyaWJ1dGUoJ2ZpbGwnKSkubm90LnRvQmUoZW1wdHlQYXRoLmdldEF0dHJpYnV0ZSgnZmlsbCcpKTtcbiAgICB9KTtcblxuICAgIGl0KCdpbmNvcnJlY3QgYW5kIGVtcHR5IGljb25zIGhhdmUgc2FtZSBmaWxsIGNvbG9yJywgKCkgPT4ge1xuICAgICAgY29uc3QgeyBjb250YWluZXI6IGluY29ycmVjdENvbnRhaW5lciB9ID0gcmVuZGVyKDxTdmdJY29uIHR5cGU9XCJpbmNvcnJlY3RcIiAvPik7XG4gICAgICBjb25zdCB7IGNvbnRhaW5lcjogZW1wdHlDb250YWluZXIgfSA9IHJlbmRlcig8U3ZnSWNvbiB0eXBlPVwiZW1wdHlcIiAvPik7XG5cbiAgICAgIGNvbnN0IGluY29ycmVjdFBhdGggPSBpbmNvcnJlY3RDb250YWluZXIucXVlcnlTZWxlY3RvcigncGF0aCcpO1xuICAgICAgY29uc3QgZW1wdHlQYXRoID0gZW1wdHlDb250YWluZXIucXVlcnlTZWxlY3RvcigncGF0aCcpO1xuXG4gICAgICBleHBlY3QoaW5jb3JyZWN0UGF0aC5nZXRBdHRyaWJ1dGUoJ2ZpbGwnKSkudG9CZShlbXB0eVBhdGguZ2V0QXR0cmlidXRlKCdmaWxsJykpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2VhY2ggaWNvbiB0eXBlIGhhcyB1bmlxdWUgcGF0aCBkYXRhJywgKCkgPT4ge1xuICAgICAgY29uc3QgeyBjb250YWluZXI6IGNvcnJlY3RDb250YWluZXIgfSA9IHJlbmRlcig8U3ZnSWNvbiB0eXBlPVwiY29ycmVjdFwiIC8+KTtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyOiBpbmNvcnJlY3RDb250YWluZXIgfSA9IHJlbmRlcig8U3ZnSWNvbiB0eXBlPVwiaW5jb3JyZWN0XCIgLz4pO1xuICAgICAgY29uc3QgeyBjb250YWluZXI6IGVtcHR5Q29udGFpbmVyIH0gPSByZW5kZXIoPFN2Z0ljb24gdHlwZT1cImVtcHR5XCIgLz4pO1xuXG4gICAgICBjb25zdCBjb3JyZWN0UGF0aCA9IGNvcnJlY3RDb250YWluZXIucXVlcnlTZWxlY3RvcigncGF0aCcpLmdldEF0dHJpYnV0ZSgnZCcpO1xuICAgICAgY29uc3QgaW5jb3JyZWN0UGF0aCA9IGluY29ycmVjdENvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCdwYXRoJykuZ2V0QXR0cmlidXRlKCdkJyk7XG4gICAgICBjb25zdCBlbXB0eVBhdGggPSBlbXB0eUNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCdwYXRoJykuZ2V0QXR0cmlidXRlKCdkJyk7XG5cbiAgICAgIGV4cGVjdChjb3JyZWN0UGF0aCkubm90LnRvQmUoaW5jb3JyZWN0UGF0aCk7XG4gICAgICBleHBlY3QoY29ycmVjdFBhdGgpLm5vdC50b0JlKGVtcHR5UGF0aCk7XG4gICAgICBleHBlY3QoaW5jb3JyZWN0UGF0aCkubm90LnRvQmUoZW1wdHlQYXRoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1NWRyBhdHRyaWJ1dGVzJywgKCkgPT4ge1xuICAgIGl0KCdhbGwgaWNvbnMgaGF2ZSBmaWxsPVwibm9uZVwiIG9uIHN2ZyBlbGVtZW50JywgKCkgPT4ge1xuICAgICAgY29uc3QgeyBjb250YWluZXI6IGNvcnJlY3RDb250YWluZXIgfSA9IHJlbmRlcig8U3ZnSWNvbiB0eXBlPVwiY29ycmVjdFwiIC8+KTtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyOiBpbmNvcnJlY3RDb250YWluZXIgfSA9IHJlbmRlcig8U3ZnSWNvbiB0eXBlPVwiaW5jb3JyZWN0XCIgLz4pO1xuICAgICAgY29uc3QgeyBjb250YWluZXI6IGVtcHR5Q29udGFpbmVyIH0gPSByZW5kZXIoPFN2Z0ljb24gdHlwZT1cImVtcHR5XCIgLz4pO1xuXG4gICAgICBleHBlY3QoY29ycmVjdENvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCdzdmcnKSkudG9IYXZlQXR0cmlidXRlKCdmaWxsJywgJ25vbmUnKTtcbiAgICAgIGV4cGVjdChpbmNvcnJlY3RDb250YWluZXIucXVlcnlTZWxlY3Rvcignc3ZnJykpLnRvSGF2ZUF0dHJpYnV0ZSgnZmlsbCcsICdub25lJyk7XG4gICAgICBleHBlY3QoZW1wdHlDb250YWluZXIucXVlcnlTZWxlY3Rvcignc3ZnJykpLnRvSGF2ZUF0dHJpYnV0ZSgnZmlsbCcsICdub25lJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnYWxsIGljb25zIGhhdmUgcHJvcGVyIHhtbG5zIG5hbWVzcGFjZScsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyOiBjb3JyZWN0Q29udGFpbmVyIH0gPSByZW5kZXIoPFN2Z0ljb24gdHlwZT1cImNvcnJlY3RcIiAvPik7XG4gICAgICBjb25zdCB7IGNvbnRhaW5lcjogaW5jb3JyZWN0Q29udGFpbmVyIH0gPSByZW5kZXIoPFN2Z0ljb24gdHlwZT1cImluY29ycmVjdFwiIC8+KTtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyOiBlbXB0eUNvbnRhaW5lciB9ID0gcmVuZGVyKDxTdmdJY29uIHR5cGU9XCJlbXB0eVwiIC8+KTtcblxuICAgICAgY29uc3QgeG1sbnMgPSAnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnO1xuICAgICAgZXhwZWN0KGNvcnJlY3RDb250YWluZXIucXVlcnlTZWxlY3Rvcignc3ZnJykpLnRvSGF2ZUF0dHJpYnV0ZSgneG1sbnMnLCB4bWxucyk7XG4gICAgICBleHBlY3QoaW5jb3JyZWN0Q29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJ3N2ZycpKS50b0hhdmVBdHRyaWJ1dGUoJ3htbG5zJywgeG1sbnMpO1xuICAgICAgZXhwZWN0KGVtcHR5Q29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJ3N2ZycpKS50b0hhdmVBdHRyaWJ1dGUoJ3htbG5zJywgeG1sbnMpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnYWNjZXNzaWJpbGl0eScsICgpID0+IHtcbiAgICBpdCgnc3ZnIGVsZW1lbnRzIGFyZSBwcm9wZXJseSBzdHJ1Y3R1cmVkIGZvciBzY3JlZW4gcmVhZGVycycsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXIoPFN2Z0ljb24gdHlwZT1cImNvcnJlY3RcIiAvPik7XG4gICAgICBjb25zdCBzdmcgPSBjb250YWluZXIucXVlcnlTZWxlY3Rvcignc3ZnJyk7XG5cbiAgICAgIC8vIFNWRyBzaG91bGQgYmUgaW4gRE9NXG4gICAgICBleHBlY3Qoc3ZnKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuXG4gICAgICAvLyBTaG91bGQgaGF2ZSB2YWxpZCB2aWV3Qm94IGZvciBwcm9wZXIgc2NhbGluZ1xuICAgICAgZXhwZWN0KHN2Zy5nZXRBdHRyaWJ1dGUoJ3ZpZXdCb3gnKSkudG9CZVRydXRoeSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2ljb25zIHJlbmRlciBhcyBpbmxpbmUgZWxlbWVudHMnLCAoKSA9PiB7XG4gICAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyKDxTdmdJY29uIHR5cGU9XCJjb3JyZWN0XCIgLz4pO1xuICAgICAgY29uc3Qgc3ZnID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJ3N2ZycpO1xuXG4gICAgICAvLyBTVkcgc2hvdWxkIGJlIGRpcmVjdCBjaGlsZCAoaW5saW5lKVxuICAgICAgZXhwZWN0KGNvbnRhaW5lci5maXJzdENoaWxkKS50b0JlKHN2Zyk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXSwibWFwcGluZ3MiOiI7OztBQUFBLElBQUFBLE1BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLFVBQUEsR0FBQUQsT0FBQTtBQUVBLElBQUFFLGFBQUEsR0FBQUgsc0JBQUEsQ0FBQUMsT0FBQTtBQUVBRyxRQUFRLENBQUMsU0FB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
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _typeof = require("@babel/runtime/helpers/typeof");
5
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
6
+ var _testUtils = require("@pie-lib/test-utils");
7
+ var _react = _interopRequireDefault(require("react"));
8
+ var _labels = _interopRequireWildcard(require("../labels"));
9
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
10
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
11
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
12
+ describe('Labels', function () {
13
+ var onChange = jest.fn();
14
+ var renderComponent = function renderComponent(extras) {
15
+ var defaults = {
16
+ classes: {},
17
+ className: 'className',
18
+ onChange: onChange,
19
+ graphProps: {
20
+ size: {
21
+ width: 400,
22
+ height: 400
23
+ },
24
+ domain: {
25
+ min: 0,
26
+ max: 10,
27
+ step: 1,
28
+ padding: 0
29
+ },
30
+ range: {
31
+ min: 0,
32
+ max: 10,
33
+ step: 1,
34
+ padding: 0
35
+ }
36
+ }
37
+ };
38
+ var props = _objectSpread(_objectSpread({}, defaults), extras);
39
+ return (0, _testUtils.render)(/*#__PURE__*/_react["default"].createElement(_labels["default"], props));
40
+ };
41
+ describe('rendering', function () {
42
+ it('renders without crashing', function () {
43
+ var _renderComponent = renderComponent(),
44
+ container = _renderComponent.container;
45
+ expect(container.firstChild).toBeInTheDocument();
46
+ });
47
+ });
48
+ });
49
+ describe('getTransform', function () {
50
+ var assertTransform = function assertTransform(side, expected) {
51
+ it("returns ".concat(expected, " for ").concat(side), function () {
52
+ var r = (0, _labels.getTransform)('left', 100, 100);
53
+ expect(r).toEqual('translate(-20, 50), rotate(-90)');
54
+ });
55
+ };
56
+ assertTransform('left', 'translate(-20, 50), rotate(-90)');
57
+ assertTransform('right', 'translate(130, 50), rotate(90)');
58
+ assertTransform('top', 'translate(50, -20), rotate(0)');
59
+ assertTransform('bottom', 'translate(50, 130), rotate(0)');
60
+ });
61
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdGVzdFV0aWxzIiwicmVxdWlyZSIsIl9yZWFjdCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfbGFiZWxzIiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJlIiwidCIsIldlYWtNYXAiLCJyIiwibiIsIl9fZXNNb2R1bGUiLCJvIiwiaSIsImYiLCJfX3Byb3RvX18iLCJfdHlwZW9mIiwiaGFzIiwiZ2V0Iiwic2V0IiwiX3QiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsIm93bktleXMiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiZmlsdGVyIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZGVzY3JpYmUiLCJvbkNoYW5nZSIsImplc3QiLCJmbiIsInJlbmRlckNvbXBvbmVudCIsImV4dHJhcyIsImRlZmF1bHRzIiwiY2xhc3NlcyIsImNsYXNzTmFtZSIsImdyYXBoUHJvcHMiLCJzaXplIiwid2lkdGgiLCJoZWlnaHQiLCJkb21haW4iLCJtaW4iLCJtYXgiLCJzdGVwIiwicGFkZGluZyIsInJhbmdlIiwicHJvcHMiLCJyZW5kZXIiLCJjcmVhdGVFbGVtZW50IiwiaXQiLCJfcmVuZGVyQ29tcG9uZW50IiwiY29udGFpbmVyIiwiZXhwZWN0IiwiZmlyc3RDaGlsZCIsInRvQmVJblRoZURvY3VtZW50IiwiYXNzZXJ0VHJhbnNmb3JtIiwic2lkZSIsImV4cGVjdGVkIiwiY29uY2F0IiwiZ2V0VHJhbnNmb3JtIiwidG9FcXVhbCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9fX3Rlc3RzX18vbGFiZWxzLnRlc3QuanN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJlbmRlciB9IGZyb20gJ0BwaWUtbGliL3Rlc3QtdXRpbHMnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuaW1wb3J0IExhYmVscywgeyBnZXRUcmFuc2Zvcm0gfSBmcm9tICcuLi9sYWJlbHMnO1xuXG5kZXNjcmliZSgnTGFiZWxzJywgKCkgPT4ge1xuICBsZXQgb25DaGFuZ2UgPSBqZXN0LmZuKCk7XG4gIGNvbnN0IHJlbmRlckNvbXBvbmVudCA9IChleHRyYXMpID0+IHtcbiAgICBjb25zdCBkZWZhdWx0cyA9IHtcbiAgICAgIGNsYXNzZXM6IHt9LFxuICAgICAgY2xhc3NOYW1lOiAnY2xhc3NOYW1lJyxcbiAgICAgIG9uQ2hhbmdlLFxuICAgICAgZ3JhcGhQcm9wczoge1xuICAgICAgICBzaXplOiB7XG4gICAgICAgICAgd2lkdGg6IDQwMCxcbiAgICAgICAgICBoZWlnaHQ6IDQwMCxcbiAgICAgICAgfSxcbiAgICAgICAgZG9tYWluOiB7XG4gICAgICAgICAgbWluOiAwLFxuICAgICAgICAgIG1heDogMTAsXG4gICAgICAgICAgc3RlcDogMSxcbiAgICAgICAgICBwYWRkaW5nOiAwLFxuICAgICAgICB9LFxuICAgICAgICByYW5nZToge1xuICAgICAgICAgIG1pbjogMCxcbiAgICAgICAgICBtYXg6IDEwLFxuICAgICAgICAgIHN0ZXA6IDEsXG4gICAgICAgICAgcGFkZGluZzogMCxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfTtcbiAgICBjb25zdCBwcm9wcyA9IHsgLi4uZGVmYXVsdHMsIC4uLmV4dHJhcyB9O1xuICAgIHJldHVybiByZW5kZXIoPExhYmVscyB7Li4ucHJvcHN9IC8+KTtcbiAgfTtcbiAgZGVzY3JpYmUoJ3JlbmRlcmluZycsICgpID0+IHtcbiAgICBpdCgncmVuZGVycyB3aXRob3V0IGNyYXNoaW5nJywgKCkgPT4ge1xuICAgICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlckNvbXBvbmVudCgpO1xuICAgICAgZXhwZWN0KGNvbnRhaW5lci5maXJzdENoaWxkKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnZ2V0VHJhbnNmb3JtJywgKCkgPT4ge1xuICBjb25zdCBhc3NlcnRUcmFuc2Zvcm0gPSAoc2lkZSwgZXhwZWN0ZWQpID0+IHtcbiAgICBpdChgcmV0dXJucyAke2V4cGVjdGVkfSBmb3IgJHtzaWRlfWAsICgpID0+IHtcbiAgICAgIGNvbnN0IHIgPSBnZXRUcmFuc2Zvcm0oJ2xlZnQnLCAxMDAsIDEwMCk7XG4gICAgICBleHBlY3QocikudG9FcXVhbCgndHJhbnNsYXRlKC0yMCwgNTApLCByb3RhdGUoLTkwKScpO1xuICAgIH0pO1xuICB9O1xuXG4gIGFzc2VydFRyYW5zZm9ybSgnbGVmdCcsICd0cmFuc2xhdGUoLTIwLCA1MCksIHJvdGF0ZSgtOTApJyk7XG4gIGFzc2VydFRyYW5zZm9ybSgncmlnaHQnLCAndHJhbnNsYXRlKDEzMCwgNTApLCByb3RhdGUoOTApJyk7XG4gIGFzc2VydFRyYW5zZm9ybSgndG9wJywgJ3RyYW5zbGF0ZSg1MCwgLTIwKSwgcm90YXRlKDApJyk7XG4gIGFzc2VydFRyYW5zZm9ybSgnYm90dG9tJywgJ3RyYW5zbGF0ZSg1MCwgMTMwKSwgcm90YXRlKDApJyk7XG59KTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxJQUFBQSxVQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxNQUFBLEdBQUFDLHNCQUFBLENBQUFGLE9BQUE7QUFFQSxJQUFBRyxPQUFBLEdBQUFDLHVCQUFBLENBQUFKLE9BQUE7QUFBaUQsU0FBQUksd0JBQUFDLENBQUEsRUFBQUMsQ0FBQSw2QkFBQUMsT0FBQSxNQUFBQyxDQUFBLE9BQUFELE9BQUEsSUFBQUUsQ0FBQSxPQUFBRixPQUFBLFlBQUFILHVCQUFBLFlBQUFBLHdCQUFBQyxDQUFBLEVBQUFDLENBQUEsU0FBQUEsQ0FBQSxJQUFBRCxDQUFBLElBQUFBLENBQUEsQ0FBQUssVUFBQSxTQUFBTCxDQUFBLE1BQUFN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QUNOQyxHQUFHLEVBQUUsRUFBRTtVQUNQQyxJQUFJLEVBQUUsQ0FBQztVQUNQQyxPQUFPLEVBQUU7UUFDWCxDQUFDO1FBQ0RDLEtBQUssRUFBRTtVQUNMSixHQUFHLEVBQUUsQ0FBQztVQUNOQyxHQUFHLEVBQUUsRUFBRTtVQUNQQyxJQUFJLEVBQUUsQ0FBQztVQUNQQyxPQUFPLEVBQUU7UUFDWDtNQUNGO0lBQ0YsQ0FBQztJQUNELElBQU1FLEtBQUssR0FBQTFCLGFBQUEsQ0FBQUEsYUFBQSxLQUFRYSxRQUFRLEdBQUtELE1BQU0sQ0FBRTtJQUN4QyxPQUFPLElBQUFlLGlCQUFNLGVBQUMxRCxNQUFBLFlBQUEyRCxhQUFBLENBQUN6RCxPQUFBLFdBQU0sRUFBS3VELEtBQVEsQ0FBQyxDQUFDO0VBQ3RDLENBQUM7RUFDRG5CLFFBQVEsQ0FBQyxXQUFXLEVBQUUsWUFBTTtJQUMxQnNCLEVBQUUsQ0FBQywwQkFBMEIsRUFBRSxZQUFNO01BQ25DLElBQUFDLGdCQUFBLEdBQXNCbkIsZUFBZSxDQUFDLENBQUM7UUFBL0JvQixTQUFTLEdBQUFELGdCQUFBLENBQVRDLFNBQVM7TUFDakJDLE1BQU0sQ0FBQ0QsU0FBUyxDQUFDRSxVQUFVLENBQUMsQ0FBQ0MsaUJBQWlCLENBQUMsQ0FBQztJQUNsRCxDQUFDLENBQUM7RUFDSixDQUFDLENBQUM7QUFDSixDQUFDLENBQUM7QUFFRjNCLFFBQVEsQ0FBQyxjQUFjLEVBQUUsWUFBTTtFQUM3QixJQUFNNEIsZUFBZSxHQUFHLFNBQWxCQSxlQUFlQSxDQUFJQyxJQUFJLEVBQUVDLFFBQVEsRUFBSztJQUMxQ1IsRUFBRSxZQUFBUyxNQUFBLENBQVlELFFBQVEsV0FBQUMsTUFBQSxDQUFRRixJQUFJLEdBQUksWUFBTTtNQUMxQyxJQUFNNUQsQ0FBQyxHQUFHLElBQUErRCxvQkFBWSxFQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDO01BQ3hDUCxNQUFNLENBQUN4RCxDQUFDLENBQUMsQ0FBQ2dFLE9BQU8sQ0FBQyxpQ0FBaUMsQ0FBQztJQUN0RCxDQUFDLENBQUM7RUFDSixDQUFDO0VBRURMLGVBQWUsQ0FBQyxNQUFNLEVBQUUsaUNBQWlDLENBQUM7RUFDMURBLGVBQWUsQ0FBQyxPQUFPLEVBQUUsZ0NBQWdDLENBQUM7RUFDMURBLGVBQWUsQ0FBQyxLQUFLLEVBQUUsK0JBQStCLENBQUM7RUFDdkRBLGVBQWUsQ0FBQyxRQUFRLEVBQUUsK0JBQStCLENBQUM7QUFDNUQsQ0FBQyxDQUFDIiwiaWdub3JlTGlzdCI6W119