@pie-lib/graphing 3.0.0-next.0 → 3.1.0-next.0

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 (102) hide show
  1. package/lib/__tests__/graph-with-controls.test.js +226 -0
  2. package/lib/__tests__/graph.test.js +187 -0
  3. package/lib/__tests__/grid.test.js +29 -0
  4. package/lib/__tests__/labels.test.js +61 -0
  5. package/lib/__tests__/mark-label.test.js +133 -0
  6. package/lib/__tests__/toggle-bar.test.js +150 -0
  7. package/lib/__tests__/tool-menu.test.js +101 -0
  8. package/lib/__tests__/undo-redo.test.js +31 -0
  9. package/lib/__tests__/use-debounce.test.js +24 -0
  10. package/lib/__tests__/utils.js +70 -0
  11. package/lib/__tests__/utils.test.js +123 -0
  12. package/lib/axis/__tests__/arrow.test.js +60 -0
  13. package/lib/axis/__tests__/axes.test.js +195 -0
  14. package/lib/axis/arrow.js +1 -1
  15. package/lib/axis/axes.js +1 -1
  16. package/lib/axis/index.js +1 -1
  17. package/lib/bg.js +1 -1
  18. package/lib/container/actions.js +1 -1
  19. package/lib/container/index.js +1 -1
  20. package/lib/container/marks.js +1 -1
  21. package/lib/container/middleware.js +1 -1
  22. package/lib/container/reducer.js +1 -1
  23. package/lib/coordinates-label.js +1 -1
  24. package/lib/graph-with-controls.js +1 -1
  25. package/lib/graph.js +1 -1
  26. package/lib/grid-setup.js +3 -3
  27. package/lib/grid-setup.js.map +1 -1
  28. package/lib/grid.js +1 -1
  29. package/lib/index.js +1 -1
  30. package/lib/key-legend.js +1 -1
  31. package/lib/label-svg-icon.js +1 -1
  32. package/lib/labels.js +3 -3
  33. package/lib/labels.js.map +1 -1
  34. package/lib/mark-label.js +1 -1
  35. package/lib/toggle-bar.js +1 -1
  36. package/lib/tool-menu.js +1 -1
  37. package/lib/tools/absolute/__tests__/component.test.js +67 -0
  38. package/lib/tools/absolute/component.js +1 -1
  39. package/lib/tools/absolute/index.js +1 -1
  40. package/lib/tools/circle/__tests__/bg-circle.test.js +33 -0
  41. package/lib/tools/circle/__tests__/component.test.js +68 -0
  42. package/lib/tools/circle/bg-circle.js +1 -1
  43. package/lib/tools/circle/component.js +1 -1
  44. package/lib/tools/circle/index.js +1 -1
  45. package/lib/tools/exponential/__tests__/component.test.js +66 -0
  46. package/lib/tools/exponential/component.js +1 -1
  47. package/lib/tools/exponential/index.js +1 -1
  48. package/lib/tools/index.js +1 -1
  49. package/lib/tools/line/__tests__/component.test.js +45 -0
  50. package/lib/tools/line/component.js +1 -1
  51. package/lib/tools/line/index.js +1 -1
  52. package/lib/tools/parabola/__tests__/component.test.js +66 -0
  53. package/lib/tools/parabola/component.js +1 -1
  54. package/lib/tools/parabola/index.js +1 -1
  55. package/lib/tools/point/__tests__/component.test.js +50 -0
  56. package/lib/tools/point/component.js +1 -1
  57. package/lib/tools/point/index.js +1 -1
  58. package/lib/tools/polygon/__tests__/component.test.js +85 -0
  59. package/lib/tools/polygon/__tests__/index.test.js +92 -0
  60. package/lib/tools/polygon/__tests__/line.test.js +29 -0
  61. package/lib/tools/polygon/__tests__/polygon.test.js +59 -0
  62. package/lib/tools/polygon/component.js +1 -1
  63. package/lib/tools/polygon/index.js +1 -1
  64. package/lib/tools/polygon/line.js +1 -1
  65. package/lib/tools/polygon/polygon.js +1 -1
  66. package/lib/tools/ray/__tests__/component.test.js +35 -0
  67. package/lib/tools/ray/component.js +1 -1
  68. package/lib/tools/ray/index.js +1 -1
  69. package/lib/tools/segment/__tests__/component.test.js +35 -0
  70. package/lib/tools/segment/component.js +1 -1
  71. package/lib/tools/segment/index.js +1 -1
  72. package/lib/tools/shared/__tests__/arrow-head.test.js +45 -0
  73. package/lib/tools/shared/arrow-head.js +1 -1
  74. package/lib/tools/shared/icons/CorrectSVG.js +1 -1
  75. package/lib/tools/shared/icons/IncorrectSVG.js +1 -1
  76. package/lib/tools/shared/icons/MissingSVG.js +1 -1
  77. package/lib/tools/shared/line/__tests__/index.test.js +124 -0
  78. package/lib/tools/shared/line/__tests__/line-path.test.js +62 -0
  79. package/lib/tools/shared/line/__tests__/with-root-edge.test.js +91 -0
  80. package/lib/tools/shared/line/index.js +1 -1
  81. package/lib/tools/shared/line/line-path.js +1 -1
  82. package/lib/tools/shared/line/with-root-edge.js +1 -1
  83. package/lib/tools/shared/point/__tests__/arrow-point.test.js +127 -0
  84. package/lib/tools/shared/point/__tests__/base-point.test.js +122 -0
  85. package/lib/tools/shared/point/arrow-point.js +1 -1
  86. package/lib/tools/shared/point/arrow.js +1 -1
  87. package/lib/tools/shared/point/base-point.js +1 -1
  88. package/lib/tools/shared/point/index.js +1 -1
  89. package/lib/tools/shared/styles.js +1 -1
  90. package/lib/tools/shared/types.js +1 -1
  91. package/lib/tools/sine/__tests__/component.test.js +72 -0
  92. package/lib/tools/sine/component.js +1 -1
  93. package/lib/tools/sine/index.js +1 -1
  94. package/lib/tools/vector/__tests__/component.test.js +32 -0
  95. package/lib/tools/vector/component.js +1 -1
  96. package/lib/tools/vector/index.js +1 -1
  97. package/lib/undo-redo.js +1 -1
  98. package/lib/use-debounce.js +1 -1
  99. package/lib/utils.js +1 -1
  100. package/package.json +9 -17
  101. package/src/grid-setup.jsx +28 -34
  102. package/src/labels.jsx +1 -1
@@ -0,0 +1,133 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
5
+ var _testUtils = require("@pie-lib/test-utils");
6
+ var _react = _interopRequireDefault(require("react"));
7
+ var _markLabel = require("../mark-label");
8
+ var _utils = require("./utils");
9
+ 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; }
10
+ 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; }
11
+ describe('MarkLabel', function () {
12
+ var onChange = jest.fn();
13
+ var inputRef = jest.fn();
14
+ var renderComponent = function renderComponent(extras) {
15
+ var defaults = {
16
+ classes: {},
17
+ className: 'className',
18
+ onChange: onChange,
19
+ inputRef: inputRef,
20
+ mark: {
21
+ x: 1,
22
+ y: 1
23
+ },
24
+ graphProps: (0, _utils.graphProps)(0, 10, 0, 10)
25
+ };
26
+ var props = _objectSpread(_objectSpread({}, defaults), extras);
27
+ return (0, _testUtils.render)(/*#__PURE__*/_react["default"].createElement(_markLabel.MarkLabel, props));
28
+ };
29
+ describe('rendering', function () {
30
+ it('renders without crashing', function () {
31
+ var _renderComponent = renderComponent(),
32
+ container = _renderComponent.container;
33
+ expect(container.firstChild).toBeInTheDocument();
34
+ });
35
+ it('renders with different mark position', function () {
36
+ var _renderComponent2 = renderComponent({
37
+ mark: {
38
+ x: 10,
39
+ y: 10
40
+ }
41
+ }),
42
+ container = _renderComponent2.container;
43
+ expect(container.firstChild).toBeInTheDocument();
44
+ });
45
+ });
46
+ });
47
+ describe('position', function () {
48
+ var assertPosition = function assertPosition(mark, rect, expected) {
49
+ it("".concat(mark.x, ",").concat(mark.y, " + ").concat(rect.width, ",").concat(rect.height, " => ").concat(expected), function () {
50
+ // we set range.min to a value because in pixels - the greater the Y the lower down on the screen.
51
+ var graphProps = (0, _utils.graphProps)(0, 12, 12, 0);
52
+ var result = (0, _markLabel.position)(graphProps, mark, rect);
53
+ expect(result).toEqual(expected);
54
+ });
55
+ };
56
+ assertPosition({
57
+ x: 0,
58
+ y: 0
59
+ }, {
60
+ width: 10,
61
+ height: 10
62
+ }, 'top-left');
63
+ assertPosition({
64
+ x: 0,
65
+ y: 0
66
+ }, {
67
+ width: 1,
68
+ height: 1
69
+ }, 'bottom-right');
70
+ assertPosition({
71
+ x: 0,
72
+ y: 0
73
+ }, {
74
+ width: 10,
75
+ height: 0
76
+ }, 'bottom-left');
77
+ assertPosition({
78
+ x: 0,
79
+ y: 0
80
+ }, {
81
+ width: 0,
82
+ height: 10
83
+ }, 'top-right');
84
+ });
85
+ describe('coordinates', function () {
86
+ var assertCoordinates = function assertCoordinates(mark, rect, pos, expected) {
87
+ it("".concat(mark.x, ", ").concat(mark.y, " -> ").concat(pos, " = ").concat(expected.left, ", ").concat(expected.top), function () {
88
+ var result = (0, _markLabel.coordinates)((0, _utils.graphProps)(), mark, rect, pos);
89
+ expect(result).toEqual(expected);
90
+ });
91
+ };
92
+ assertCoordinates({
93
+ x: 0,
94
+ y: 0
95
+ }, {
96
+ width: 0,
97
+ height: 0
98
+ }, 'top-left', {
99
+ left: -5,
100
+ top: -5
101
+ });
102
+ assertCoordinates({
103
+ x: 0,
104
+ y: 0
105
+ }, {
106
+ width: 0,
107
+ height: 0
108
+ }, 'bottom-left', {
109
+ left: -5,
110
+ top: 5
111
+ });
112
+ assertCoordinates({
113
+ x: 0,
114
+ y: 0
115
+ }, {
116
+ width: 0,
117
+ height: 0
118
+ }, 'top-right', {
119
+ left: 5,
120
+ top: -5
121
+ });
122
+ assertCoordinates({
123
+ x: 0,
124
+ y: 0
125
+ }, {
126
+ width: 0,
127
+ height: 0
128
+ }, 'bottom-right', {
129
+ left: 5,
130
+ top: 5
131
+ });
132
+ });
133
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdGVzdFV0aWxzIiwicmVxdWlyZSIsIl9yZWFjdCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfbWFya0xhYmVsIiwiX3V0aWxzIiwib3duS2V5cyIsImUiLCJyIiwidCIsIk9iamVjdCIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJvIiwiZmlsdGVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZGVmaW5lUHJvcGVydHkiLCJkZXNjcmliZSIsIm9uQ2hhbmdlIiwiamVzdCIsImZuIiwiaW5wdXRSZWYiLCJyZW5kZXJDb21wb25lbnQiLCJleHRyYXMiLCJkZWZhdWx0cyIsImNsYXNzZXMiLCJjbGFzc05hbWUiLCJtYXJrIiwieCIsInkiLCJncmFwaFByb3BzIiwiZ2V0R3JhcGhQcm9wcyIsInByb3BzIiwicmVuZGVyIiwiY3JlYXRlRWxlbWVudCIsIk1hcmtMYWJlbCIsIml0IiwiX3JlbmRlckNvbXBvbmVudCIsImNvbnRhaW5lciIsImV4cGVjdCIsImZpcnN0Q2hpbGQiLCJ0b0JlSW5UaGVEb2N1bWVudCIsIl9yZW5kZXJDb21wb25lbnQyIiwiYXNzZXJ0UG9zaXRpb24iLCJyZWN0IiwiZXhwZWN0ZWQiLCJjb25jYXQiLCJ3aWR0aCIsImhlaWdodCIsInJlc3VsdCIsInBvc2l0aW9uIiwidG9FcXVhbCIsImFzc2VydENvb3JkaW5hdGVzIiwicG9zIiwibGVmdCIsInRvcCIsImNvb3JkaW5hdGVzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL19fdGVzdHNfXy9tYXJrLWxhYmVsLnRlc3QuanN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJlbmRlciB9IGZyb20gJ0BwaWUtbGliL3Rlc3QtdXRpbHMnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IE1hcmtMYWJlbCwgcG9zaXRpb24sIGNvb3JkaW5hdGVzIH0gZnJvbSAnLi4vbWFyay1sYWJlbCc7XG5pbXBvcnQgeyBncmFwaFByb3BzIGFzIGdldEdyYXBoUHJvcHMgfSBmcm9tICcuL3V0aWxzJztcblxuZGVzY3JpYmUoJ01hcmtMYWJlbCcsICgpID0+IHtcbiAgbGV0IG9uQ2hhbmdlID0gamVzdC5mbigpO1xuICBsZXQgaW5wdXRSZWYgPSBqZXN0LmZuKCk7XG4gIGNvbnN0IHJlbmRlckNvbXBvbmVudCA9IChleHRyYXMpID0+IHtcbiAgICBjb25zdCBkZWZhdWx0cyA9IHtcbiAgICAgIGNsYXNzZXM6IHt9LFxuICAgICAgY2xhc3NOYW1lOiAnY2xhc3NOYW1lJyxcbiAgICAgIG9uQ2hhbmdlLFxuICAgICAgaW5wdXRSZWYsXG4gICAgICBtYXJrOiB7IHg6IDEsIHk6IDEgfSxcbiAgICAgIGdyYXBoUHJvcHM6IGdldEdyYXBoUHJvcHMoMCwgMTAsIDAsIDEwKSxcbiAgICB9O1xuICAgIGNvbnN0IHByb3BzID0geyAuLi5kZWZhdWx0cywgLi4uZXh0cmFzIH07XG4gICAgcmV0dXJuIHJlbmRlcig8TWFya0xhYmVsIHsuLi5wcm9wc30gLz4pO1xuICB9O1xuICBkZXNjcmliZSgncmVuZGVyaW5nJywgKCkgPT4ge1xuICAgIGl0KCdyZW5kZXJzIHdpdGhvdXQgY3Jhc2hpbmcnLCAoKSA9PiB7XG4gICAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyQ29tcG9uZW50KCk7XG4gICAgICBleHBlY3QoY29udGFpbmVyLmZpcnN0Q2hpbGQpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG4gICAgaXQoJ3JlbmRlcnMgd2l0aCBkaWZmZXJlbnQgbWFyayBwb3NpdGlvbicsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXJDb21wb25lbnQoeyBtYXJrOiB7IHg6IDEwLCB5OiAxMCB9IH0pO1xuICAgICAgZXhwZWN0KGNvbnRhaW5lci5maXJzdENoaWxkKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgncG9zaXRpb24nLCAoKSA9PiB7XG4gIGNvbnN0IGFzc2VydFBvc2l0aW9uID0gKG1hcmssIHJlY3QsIGV4cGVjdGVkKSA9PiB7XG4gICAgaXQoYCR7bWFyay54fSwke21hcmsueX0gKyAke3JlY3Qud2lkdGh9LCR7cmVjdC5oZWlnaHR9ID0+ICR7ZXhwZWN0ZWR9YCwgKCkgPT4ge1xuICAgICAgLy8gd2Ugc2V0IHJhbmdlLm1pbiB0byBhIHZhbHVlIGJlY2F1c2UgaW4gcGl4ZWxzIC0gdGhlIGdyZWF0ZXIgdGhlIFkgdGhlIGxvd2VyIGRvd24gb24gdGhlIHNjcmVlbi5cbiAgICAgIGNvbnN0IGdyYXBoUHJvcHMgPSBnZXRHcmFwaFByb3BzKDAsIDEyLCAxMiwgMCk7XG4gICAgICBjb25zdCByZXN1bHQgPSBwb3NpdGlvbihncmFwaFByb3BzLCBtYXJrLCByZWN0KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWQpO1xuICAgIH0pO1xuICB9O1xuXG4gIGFzc2VydFBvc2l0aW9uKHsgeDogMCwgeTogMCB9LCB7IHdpZHRoOiAxMCwgaGVpZ2h0OiAxMCB9LCAndG9wLWxlZnQnKTtcbiAgYXNzZXJ0UG9zaXRpb24oeyB4OiAwLCB5OiAwIH0sIHsgd2lkdGg6IDEsIGhlaWdodDogMSB9LCAnYm90dG9tLXJpZ2h0Jyk7XG4gIGFzc2VydFBvc2l0aW9uKHsgeDogMCwgeTogMCB9LCB7IHdpZHRoOiAxMCwgaGVpZ2h0OiAwIH0sICdib3R0b20tbGVmdCcpO1xuICBhc3NlcnRQb3NpdGlvbih7IHg6IDAsIHk6IDAgfSwgeyB3aWR0aDogMCwgaGVpZ2h0OiAxMCB9LCAndG9wLXJpZ2h0Jyk7XG59KTtcblxuZGVzY3JpYmUoJ2Nvb3JkaW5hdGVzJywgKCkgPT4ge1xuICBjb25zdCBhc3NlcnRDb29yZGluYXRlcyA9IChtYXJrLCByZWN0LCBwb3MsIGV4cGVjdGVkKSA9PiB7XG4gICAgaXQoYCR7bWFyay54fSwgJHttYXJrLnl9IC0+ICR7cG9zfSA9ICR7ZXhwZWN0ZWQubGVmdH0sICR7ZXhwZWN0ZWQudG9wfWAsICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGNvb3JkaW5hdGVzKGdldEdyYXBoUHJvcHMoKSwgbWFyaywgcmVjdCwgcG9zKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWQpO1xuICAgIH0pO1xuICB9O1xuICBhc3NlcnRDb29yZGluYXRlcyh7IHg6IDAsIHk6IDAgfSwgeyB3aWR0aDogMCwgaGVpZ2h0OiAwIH0sICd0b3AtbGVmdCcsIHsgbGVmdDogLTUsIHRvcDogLTUgfSk7XG4gIGFzc2VydENvb3JkaW5hdGVzKHsgeDogMCwgeTogMCB9LCB7IHdpZHRoOiAwLCBoZWlnaHQ6IDAgfSwgJ2JvdHRvbS1sZWZ0JywgeyBsZWZ0OiAtNSwgdG9wOiA1IH0pO1xuICBhc3NlcnRDb29yZGluYXRlcyh7IHg6IDAsIHk6IDAgfSwgeyB3aWR0aDogMCwgaGVpZ2h0OiAwIH0sICd0b3AtcmlnaHQnLCB7IGxlZnQ6IDUsIHRvcDogLTUgfSk7XG4gIGFzc2VydENvb3JkaW5hdGVzKHsgeDogMCwgeTogMCB9LCB7IHdpZHRoOiAwLCBoZWlnaHQ6IDAgfSwgJ2JvdHRvbS1yaWdodCcsIHtcbiAgICBsZWZ0OiA1LFxuICAgIHRvcDogNSxcbiAgfSk7XG59KTtcbiJdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLElBQUFBLFVBQUEsR0FBQUMsT0FBQTtBQUNBLElBQUFDLE1BQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFHLFVBQUEsR0FBQUgsT0FBQTtBQUNBLElBQUFJLE1BQUEsR0FBQUosT0FBQTtBQUFzRCxTQUFBSyxRQUFBQyxDQUFBLEVBQUFDLENBQUEsUUFBQUMsQ0FBQSxHQUFBQyxNQUFBLENBQUFDLElBQUEsQ0FBQUosQ0FBQSxPQUFBRyxNQUFBLENBQUFF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
@@ -0,0 +1,150 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
5
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
6
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
7
+ var _testUtils = require("@pie-lib/test-utils");
8
+ var _userEvent = _interopRequireDefault(require("@testing-library/user-event"));
9
+ var _react = _interopRequireDefault(require("react"));
10
+ var _toggleBar = require("../toggle-bar");
11
+ 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; }
12
+ 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; }
13
+ // Mock DragProvider to avoid @dnd-kit React version conflicts
14
+ jest.mock('@pie-lib/drag', function () {
15
+ return {
16
+ DragProvider: function DragProvider(_ref) {
17
+ var children = _ref.children;
18
+ return /*#__PURE__*/_react["default"].createElement("div", {
19
+ "data-testid": "drag-provider"
20
+ }, children);
21
+ }
22
+ };
23
+ });
24
+
25
+ // Mock Translator to return the key as-is for testing
26
+ jest.mock('@pie-lib/translator', function () {
27
+ return {
28
+ translator: {
29
+ t: function t(key) {
30
+ // Extract tool name from key like "graphing.point" -> "point"
31
+ var parts = key.split('.');
32
+ return parts[parts.length - 1];
33
+ }
34
+ }
35
+ };
36
+ });
37
+ describe('ToggleBar', function () {
38
+ var onChange = jest.fn();
39
+ var onChangeToolsOrder = jest.fn();
40
+ beforeEach(function () {
41
+ onChange.mockClear();
42
+ onChangeToolsOrder.mockClear();
43
+ });
44
+ var renderComponent = function renderComponent(extras) {
45
+ var defaults = {
46
+ className: 'className',
47
+ onChange: onChange,
48
+ onChangeToolsOrder: onChangeToolsOrder,
49
+ options: ['point', 'line'],
50
+ language: 'en'
51
+ };
52
+ var props = _objectSpread(_objectSpread({}, defaults), extras);
53
+ return (0, _testUtils.render)(/*#__PURE__*/_react["default"].createElement(_toggleBar.ToggleBar, props));
54
+ };
55
+ describe('rendering', function () {
56
+ it('renders without crashing', function () {
57
+ var _renderComponent = renderComponent(),
58
+ container = _renderComponent.container;
59
+ expect(container.firstChild).toBeInTheDocument();
60
+ });
61
+ it('renders tool buttons for valid tools', function () {
62
+ renderComponent({
63
+ options: ['point', 'line', 'circle']
64
+ });
65
+ expect(_testUtils.screen.getByText(/point/i)).toBeInTheDocument();
66
+ expect(_testUtils.screen.getByText(/line/i)).toBeInTheDocument();
67
+ expect(_testUtils.screen.getByText(/circle/i)).toBeInTheDocument();
68
+ });
69
+ it('does not render invalid tool options', function () {
70
+ renderComponent({
71
+ options: ['point', 'invalid-tool', 'line']
72
+ });
73
+ expect(_testUtils.screen.getByText(/point/i)).toBeInTheDocument();
74
+ expect(_testUtils.screen.getByText(/line/i)).toBeInTheDocument();
75
+ expect(_testUtils.screen.queryByText(/invalid-tool/i)).not.toBeInTheDocument();
76
+ });
77
+ it('highlights selected tool', function () {
78
+ var _renderComponent2 = renderComponent({
79
+ selectedToolType: 'line'
80
+ }),
81
+ container = _renderComponent2.container;
82
+ var selectedButton = _testUtils.screen.getByText(/line/i).closest('button');
83
+ expect(selectedButton).toHaveAttribute('value', 'line');
84
+ });
85
+ });
86
+ describe('interactions', function () {
87
+ it('calls onChange when tool button is clicked', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee() {
88
+ var user, pointButton;
89
+ return _regenerator["default"].wrap(function (_context) {
90
+ while (1) switch (_context.prev = _context.next) {
91
+ case 0:
92
+ user = _userEvent["default"].setup();
93
+ renderComponent({
94
+ options: ['point', 'line']
95
+ });
96
+ pointButton = _testUtils.screen.getByText(/point/i).closest('button');
97
+ _context.next = 1;
98
+ return user.click(pointButton);
99
+ case 1:
100
+ expect(onChange).toHaveBeenCalledWith('point');
101
+ case 2:
102
+ case "end":
103
+ return _context.stop();
104
+ }
105
+ }, _callee);
106
+ })));
107
+ it('calls onChange with selected tool type', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee2() {
108
+ var user, lineButton;
109
+ return _regenerator["default"].wrap(function (_context2) {
110
+ while (1) switch (_context2.prev = _context2.next) {
111
+ case 0:
112
+ user = _userEvent["default"].setup();
113
+ renderComponent({
114
+ options: ['point', 'line'],
115
+ selectedToolType: 'point'
116
+ });
117
+ lineButton = _testUtils.screen.getByText(/line/i).closest('button');
118
+ _context2.next = 1;
119
+ return user.click(lineButton);
120
+ case 1:
121
+ expect(onChange).toHaveBeenCalledWith('line');
122
+ case 2:
123
+ case "end":
124
+ return _context2.stop();
125
+ }
126
+ }, _callee2);
127
+ })));
128
+ it('disables buttons when disabled prop is true', function () {
129
+ renderComponent({
130
+ disabled: true,
131
+ options: ['point', 'line']
132
+ });
133
+ var pointButton = _testUtils.screen.getByText(/point/i).closest('button');
134
+ var lineButton = _testUtils.screen.getByText(/line/i).closest('button');
135
+ expect(pointButton).toBeDisabled();
136
+ expect(lineButton).toBeDisabled();
137
+ });
138
+ it('does not call onChange when disabled', function () {
139
+ renderComponent({
140
+ disabled: true,
141
+ options: ['point']
142
+ });
143
+ var pointButton = _testUtils.screen.getByText(/point/i).closest('button');
144
+ expect(pointButton).toBeDisabled();
145
+ // Note: Cannot test click on disabled button with pointer-events: none
146
+ // The disabled state is verified above
147
+ });
148
+ });
149
+ });
150
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdGVzdFV0aWxzIiwicmVxdWlyZSIsIl91c2VyRXZlbnQiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX3JlYWN0IiwiX3RvZ2dsZUJhciIsIm93bktleXMiLCJlIiwiciIsInQiLCJPYmplY3QiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwibyIsImZpbHRlciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwiamVzdCIsIm1vY2siLCJEcmFnUHJvdmlkZXIiLCJfcmVmIiwiY2hpbGRyZW4iLCJjcmVhdGVFbGVtZW50IiwidHJhbnNsYXRvciIsImtleSIsInBhcnRzIiwic3BsaXQiLCJkZXNjcmliZSIsIm9uQ2hhbmdlIiwiZm4iLCJvbkNoYW5nZVRvb2xzT3JkZXIiLCJiZWZvcmVFYWNoIiwibW9ja0NsZWFyIiwicmVuZGVyQ29tcG9uZW50IiwiZXh0cmFzIiwiZGVmYXVsdHMiLCJjbGFzc05hbWUiLCJvcHRpb25zIiwibGFuZ3VhZ2UiLCJwcm9wcyIsInJlbmRlciIsIlRvZ2dsZUJhciIsIml0IiwiX3JlbmRlckNvbXBvbmVudCIsImNvbnRhaW5lciIsImV4cGVjdCIsImZpcnN0Q2hpbGQiLCJ0b0JlSW5UaGVEb2N1bWVudCIsInNjcmVlbiIsImdldEJ5VGV4dCIsInF1ZXJ5QnlUZXh0Iiwibm90IiwiX3JlbmRlckNvbXBvbmVudDIiLCJzZWxlY3RlZFRvb2xUeXBlIiwic2VsZWN0ZWRCdXR0b24iLCJjbG9zZXN0IiwidG9IYXZlQXR0cmlidXRlIiwiX2FzeW5jVG9HZW5lcmF0b3IyIiwiX3JlZ2VuZXJhdG9yIiwibWFyayIsIl9jYWxsZWUiLCJ1c2VyIiwicG9pbnRCdXR0b24iLCJ3cmFwIiwiX2NvbnRleHQiLCJwcmV2IiwibmV4dCIsInVzZXJFdmVudCIsInNldHVwIiwiY2xpY2siLCJ0b0hhdmVCZWVuQ2FsbGVkV2l0aCIsInN0b3AiLCJfY2FsbGVlMiIsImxpbmVCdXR0b24iLCJfY29udGV4dDIiLCJkaXNhYmxlZCIsInRvQmVEaXNhYmxlZCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9fX3Rlc3RzX18vdG9nZ2xlLWJhci50ZXN0LmpzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByZW5kZXIsIHNjcmVlbiB9IGZyb20gJ0BwaWUtbGliL3Rlc3QtdXRpbHMnO1xuaW1wb3J0IHVzZXJFdmVudCBmcm9tICdAdGVzdGluZy1saWJyYXJ5L3VzZXItZXZlbnQnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuaW1wb3J0IHsgVG9nZ2xlQmFyIH0gZnJvbSAnLi4vdG9nZ2xlLWJhcic7XG5cbi8vIE1vY2sgRHJhZ1Byb3ZpZGVyIHRvIGF2b2lkIEBkbmQta2l0IFJlYWN0IHZlcnNpb24gY29uZmxpY3RzXG5qZXN0Lm1vY2soJ0BwaWUtbGliL2RyYWcnLCAoKSA9PiAoe1xuICBEcmFnUHJvdmlkZXI6ICh7IGNoaWxkcmVuIH0pID0+IDxkaXYgZGF0YS10ZXN0aWQ9XCJkcmFnLXByb3ZpZGVyXCI+e2NoaWxkcmVufTwvZGl2Pixcbn0pKTtcblxuLy8gTW9jayBUcmFuc2xhdG9yIHRvIHJldHVybiB0aGUga2V5IGFzLWlzIGZvciB0ZXN0aW5nXG5qZXN0Lm1vY2soJ0BwaWUtbGliL3RyYW5zbGF0b3InLCAoKSA9PiAoe1xuICB0cmFuc2xhdG9yOiB7XG4gICAgdDogKGtleSkgPT4ge1xuICAgICAgLy8gRXh0cmFjdCB0b29sIG5hbWUgZnJvbSBrZXkgbGlrZSBcImdyYXBoaW5nLnBvaW50XCIgLT4gXCJwb2ludFwiXG4gICAgICBjb25zdCBwYXJ0cyA9IGtleS5zcGxpdCgnLicpO1xuICAgICAgcmV0dXJuIHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdO1xuICAgIH0sXG4gIH0sXG59KSk7XG5cbmRlc2NyaWJlKCdUb2dnbGVCYXInLCAoKSA9PiB7XG4gIGxldCBvbkNoYW5nZSA9IGplc3QuZm4oKTtcbiAgbGV0IG9uQ2hhbmdlVG9vbHNPcmRlciA9IGplc3QuZm4oKTtcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBvbkNoYW5nZS5tb2NrQ2xlYXIoKTtcbiAgICBvbkNoYW5nZVRvb2xzT3JkZXIubW9ja0NsZWFyKCk7XG4gIH0pO1xuXG4gIGNvbnN0IHJlbmRlckNvbXBvbmVudCA9IChleHRyYXMpID0+IHtcbiAgICBjb25zdCBkZWZhdWx0cyA9IHtcbiAgICAgIGNsYXNzTmFtZTogJ2NsYXNzTmFtZScsXG4gICAgICBvbkNoYW5nZSxcbiAgICAgIG9uQ2hhbmdlVG9vbHNPcmRlcixcbiAgICAgIG9wdGlvbnM6IFsncG9pbnQnLCAnbGluZSddLFxuICAgICAgbGFuZ3VhZ2U6ICdlbicsXG4gICAgfTtcbiAgICBjb25zdCBwcm9wcyA9IHsgLi4uZGVmYXVsdHMsIC4uLmV4dHJhcyB9O1xuICAgIHJldHVybiByZW5kZXIoPFRvZ2dsZUJhciB7Li4ucHJvcHN9IC8+KTtcbiAgfTtcblxuICBkZXNjcmliZSgncmVuZGVyaW5nJywgKCkgPT4ge1xuICAgIGl0KCdyZW5kZXJzIHdpdGhvdXQgY3Jhc2hpbmcnLCAoKSA9PiB7XG4gICAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyQ29tcG9uZW50KCk7XG4gICAgICBleHBlY3QoY29udGFpbmVyLmZpcnN0Q2hpbGQpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVuZGVycyB0b29sIGJ1dHRvbnMgZm9yIHZhbGlkIHRvb2xzJywgKCkgPT4ge1xuICAgICAgcmVuZGVyQ29tcG9uZW50KHsgb3B0aW9uczogWydwb2ludCcsICdsaW5lJywgJ2NpcmNsZSddIH0pO1xuICAgICAgZXhwZWN0KHNjcmVlbi5nZXRCeVRleHQoL3BvaW50L2kpKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgICAgZXhwZWN0KHNjcmVlbi5nZXRCeVRleHQoL2xpbmUvaSkpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgICBleHBlY3Qoc2NyZWVuLmdldEJ5VGV4dCgvY2lyY2xlL2kpKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2RvZXMgbm90IHJlbmRlciBpbnZhbGlkIHRvb2wgb3B0aW9ucycsICgpID0+IHtcbiAgICAgIHJlbmRlckNvbXBvbmVudCh7IG9wdGlvbnM6IFsncG9pbnQnLCAnaW52YWxpZC10b29sJywgJ2xpbmUnXSB9KTtcbiAgICAgIGV4cGVjdChzY3JlZW4uZ2V0QnlUZXh0KC9wb2ludC9pKSkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICAgIGV4cGVjdChzY3JlZW4uZ2V0QnlUZXh0KC9saW5lL2kpKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgICAgZXhwZWN0KHNjcmVlbi5xdWVyeUJ5VGV4dCgvaW52YWxpZC10b29sL2kpKS5ub3QudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdoaWdobGlnaHRzIHNlbGVjdGVkIHRvb2wnLCAoKSA9PiB7XG4gICAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyQ29tcG9uZW50KHsgc2VsZWN0ZWRUb29sVHlwZTogJ2xpbmUnIH0pO1xuICAgICAgY29uc3Qgc2VsZWN0ZWRCdXR0b24gPSBzY3JlZW4uZ2V0QnlUZXh0KC9saW5lL2kpLmNsb3Nlc3QoJ2J1dHRvbicpO1xuICAgICAgZXhwZWN0KHNlbGVjdGVkQnV0dG9uKS50b0hhdmVBdHRyaWJ1dGUoJ3ZhbHVlJywgJ2xpbmUnKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2ludGVyYWN0aW9ucycsICgpID0+IHtcbiAgICBpdCgnY2FsbHMgb25DaGFuZ2Ugd2hlbiB0b29sIGJ1dHRvbiBpcyBjbGlja2VkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdXNlciA9IHVzZXJFdmVudC5zZXR1cCgpO1xuICAgICAgcmVuZGVyQ29tcG9uZW50KHsgb3B0aW9uczogWydwb2ludCcsICdsaW5lJ10gfSk7XG5cbiAgICAgIGNvbnN0IHBvaW50QnV0dG9uID0gc2NyZWVuLmdldEJ5VGV4dCgvcG9pbnQvaSkuY2xvc2VzdCgnYnV0dG9uJyk7XG4gICAgICBhd2FpdCB1c2VyLmNsaWNrKHBvaW50QnV0dG9uKTtcblxuICAgICAgZXhwZWN0KG9uQ2hhbmdlKS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgncG9pbnQnKTtcbiAgICB9KTtcblxuICAgIGl0KCdjYWxscyBvbkNoYW5nZSB3aXRoIHNlbGVjdGVkIHRvb2wgdHlwZScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHVzZXIgPSB1c2VyRXZlbnQuc2V0dXAoKTtcbiAgICAgIHJlbmRlckNvbXBvbmVudCh7IG9wdGlvbnM6IFsncG9pbnQnLCAnbGluZSddLCBzZWxlY3RlZFRvb2xUeXBlOiAncG9pbnQnIH0pO1xuXG4gICAgICBjb25zdCBsaW5lQnV0dG9uID0gc2NyZWVuLmdldEJ5VGV4dCgvbGluZS9pKS5jbG9zZXN0KCdidXR0b24nKTtcbiAgICAgIGF3YWl0IHVzZXIuY2xpY2sobGluZUJ1dHRvbik7XG5cbiAgICAgIGV4cGVjdChvbkNoYW5nZSkudG9IYXZlQmVlbkNhbGxlZFdpdGgoJ2xpbmUnKTtcbiAgICB9KTtcblxuICAgIGl0KCdkaXNhYmxlcyBidXR0b25zIHdoZW4gZGlzYWJsZWQgcHJvcCBpcyB0cnVlJywgKCkgPT4ge1xuICAgICAgcmVuZGVyQ29tcG9uZW50KHsgZGlzYWJsZWQ6IHRydWUsIG9wdGlvbnM6IFsncG9pbnQnLCAnbGluZSddIH0pO1xuXG4gICAgICBjb25zdCBwb2ludEJ1dHRvbiA9IHNjcmVlbi5nZXRCeVRleHQoL3BvaW50L2kpLmNsb3Nlc3QoJ2J1dHRvbicpO1xuICAgICAgY29uc3QgbGluZUJ1dHRvbiA9IHNjcmVlbi5nZXRCeVRleHQoL2xpbmUvaSkuY2xvc2VzdCgnYnV0dG9uJyk7XG5cbiAgICAgIGV4cGVjdChwb2ludEJ1dHRvbikudG9CZURpc2FibGVkKCk7XG4gICAgICBleHBlY3QobGluZUJ1dHRvbikudG9CZURpc2FibGVkKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnZG9lcyBub3QgY2FsbCBvbkNoYW5nZSB3aGVuIGRpc2FibGVkJywgKCkgPT4ge1xuICAgICAgcmVuZGVyQ29tcG9uZW50KHsgZGlzYWJsZWQ6IHRydWUsIG9wdGlvbnM6IFsncG9pbnQnXSB9KTtcblxuICAgICAgY29uc3QgcG9pbnRCdXR0b24gPSBzY3JlZW4uZ2V0QnlUZXh0KC9wb2ludC9pKS5jbG9zZXN0KCdidXR0b24nKTtcbiAgICAgIGV4cGVjdChwb2ludEJ1dHRvbikudG9CZURpc2FibGVkKCk7XG4gICAgICAvLyBOb3RlOiBDYW5ub3QgdGVzdCBjbGljayBvbiBkaXNhYmxlZCBidXR0b24gd2l0aCBwb2ludGVyLWV2ZW50czogbm9uZVxuICAgICAgLy8gVGhlIGRpc2FibGVkIHN0YXRlIGlzIHZlcmlmaWVkIGFib3ZlXG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQUFBLFVBQUEsR0FBQUMsT0FBQTtBQUNBLElBQUFDLFVBQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFHLE1BQUEsR0FBQUQsc0JBQUEsQ0FBQUYsT0FBQTtBQUVBLElBQUFJLFVBQUEsR0FBQUosT0FBQTtBQUEwQyxTQUFBSyxRQUFBQyxDQUFBLEVBQUFDLENBQUEsUUFBQUMsQ0FBQSxHQUFBQyxNQUFBLENBQUFDLElBQUEsQ0FBQUosQ0FBQSxPQUFBRyxNQUFBLENBQUFFLHFCQUFBLFFBQUFDLENBQUEsR0FBQUgsTUFBQSxDQUFBRSxxQkFBQSxDQUFBTCxDQUFBLEdBQUFDLENBQUEsS0FBQUssQ0FBQSxHQUFBQSxDQUFBLENBQUFDLE1BQUEsV0FBQU4sQ0FBQSxXQUFBRSxNQUFBLENBQUFLLHdCQUFBLENBQUFSLENBQUEsRUFBQUMsQ0FBQSxFQUFBUSxVQUFBLE9BQUFQLENBQUEsQ0FBQVEsSUFB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
@@ -0,0 +1,101 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
5
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
6
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
7
+ var _testUtils = require("@pie-lib/test-utils");
8
+ var _userEvent = _interopRequireDefault(require("@testing-library/user-event"));
9
+ var _react = _interopRequireDefault(require("react"));
10
+ var _toolMenu = _interopRequireDefault(require("../tool-menu"));
11
+ 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; }
12
+ 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; }
13
+ // Mock DragProvider to avoid @dnd-kit React version conflicts
14
+ jest.mock('@pie-lib/drag', function () {
15
+ return {
16
+ DragProvider: function DragProvider(_ref) {
17
+ var children = _ref.children;
18
+ return /*#__PURE__*/_react["default"].createElement("div", {
19
+ "data-testid": "drag-provider"
20
+ }, children);
21
+ }
22
+ };
23
+ });
24
+ describe('ToolMenu', function () {
25
+ var onChange = jest.fn();
26
+ var onChangeTools = jest.fn();
27
+ beforeEach(function () {
28
+ onChange.mockClear();
29
+ onChangeTools.mockClear();
30
+ });
31
+ var renderComponent = function renderComponent(extras) {
32
+ var defaults = {
33
+ className: 'className',
34
+ onChange: onChange,
35
+ onChangeTools: onChangeTools,
36
+ currentToolType: 'point',
37
+ toolbarTools: ['point', 'line'],
38
+ language: 'en'
39
+ };
40
+ var props = _objectSpread(_objectSpread({}, defaults), extras);
41
+ return (0, _testUtils.render)(/*#__PURE__*/_react["default"].createElement(_toolMenu["default"], props));
42
+ };
43
+ describe('rendering', function () {
44
+ it('renders without crashing', function () {
45
+ var _renderComponent = renderComponent(),
46
+ container = _renderComponent.container;
47
+ expect(container.firstChild).toBeInTheDocument();
48
+ });
49
+ it('renders ToggleBar with correct props', function () {
50
+ renderComponent({
51
+ toolbarTools: ['point', 'line', 'circle']
52
+ });
53
+ expect(_testUtils.screen.getByText(/point/i)).toBeInTheDocument();
54
+ expect(_testUtils.screen.getByText(/line/i)).toBeInTheDocument();
55
+ expect(_testUtils.screen.getByText(/circle/i)).toBeInTheDocument();
56
+ });
57
+ it('passes currentToolType to ToggleBar', function () {
58
+ renderComponent({
59
+ currentToolType: 'line'
60
+ });
61
+ var selectedButton = _testUtils.screen.getByText(/line/i).closest('button');
62
+ expect(selectedButton).toBeInTheDocument();
63
+ });
64
+ });
65
+ describe('interactions', function () {
66
+ it('calls onChange when tool is selected', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee() {
67
+ var user, lineButton;
68
+ return _regenerator["default"].wrap(function (_context) {
69
+ while (1) switch (_context.prev = _context.next) {
70
+ case 0:
71
+ user = _userEvent["default"].setup();
72
+ renderComponent();
73
+ lineButton = _testUtils.screen.getByText(/line/i).closest('button');
74
+ _context.next = 1;
75
+ return user.click(lineButton);
76
+ case 1:
77
+ expect(onChange).toHaveBeenCalledWith('line');
78
+ case 2:
79
+ case "end":
80
+ return _context.stop();
81
+ }
82
+ }, _callee);
83
+ })));
84
+ it('calls onChangeTools when tools order changes', function () {
85
+ renderComponent({
86
+ draggableTools: true
87
+ });
88
+ // Note: Drag-and-drop testing requires more complex setup with @dnd-kit/test-utils
89
+ // For now, we verify the component renders with draggableTools enabled
90
+ expect(_testUtils.screen.getByText(/point/i)).toBeInTheDocument();
91
+ });
92
+ it('disables tools when disabled prop is true', function () {
93
+ renderComponent({
94
+ disabled: true
95
+ });
96
+ var pointButton = _testUtils.screen.getByText(/point/i).closest('button');
97
+ expect(pointButton).toBeDisabled();
98
+ });
99
+ });
100
+ });
101
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdGVzdFV0aWxzIiwicmVxdWlyZSIsIl91c2VyRXZlbnQiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX3JlYWN0IiwiX3Rvb2xNZW51Iiwib3duS2V5cyIsImUiLCJyIiwidCIsIk9iamVjdCIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJvIiwiZmlsdGVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZGVmaW5lUHJvcGVydHkiLCJqZXN0IiwibW9jayIsIkRyYWdQcm92aWRlciIsIl9yZWYiLCJjaGlsZHJlbiIsImNyZWF0ZUVsZW1lbnQiLCJkZXNjcmliZSIsIm9uQ2hhbmdlIiwiZm4iLCJvbkNoYW5nZVRvb2xzIiwiYmVmb3JlRWFjaCIsIm1vY2tDbGVhciIsInJlbmRlckNvbXBvbmVudCIsImV4dHJhcyIsImRlZmF1bHRzIiwiY2xhc3NOYW1lIiwiY3VycmVudFRvb2xUeXBlIiwidG9vbGJhclRvb2xzIiwibGFuZ3VhZ2UiLCJwcm9wcyIsInJlbmRlciIsIml0IiwiX3JlbmRlckNvbXBvbmVudCIsImNvbnRhaW5lciIsImV4cGVjdCIsImZpcnN0Q2hpbGQiLCJ0b0JlSW5UaGVEb2N1bWVudCIsInNjcmVlbiIsImdldEJ5VGV4dCIsInNlbGVjdGVkQnV0dG9uIiwiY2xvc2VzdCIsIl9hc3luY1RvR2VuZXJhdG9yMiIsIl9yZWdlbmVyYXRvciIsIm1hcmsiLCJfY2FsbGVlIiwidXNlciIsImxpbmVCdXR0b24iLCJ3cmFwIiwiX2NvbnRleHQiLCJwcmV2IiwibmV4dCIsInVzZXJFdmVudCIsInNldHVwIiwiY2xpY2siLCJ0b0hhdmVCZWVuQ2FsbGVkV2l0aCIsInN0b3AiLCJkcmFnZ2FibGVUb29scyIsImRpc2FibGVkIiwicG9pbnRCdXR0b24iLCJ0b0JlRGlzYWJsZWQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvX190ZXN0c19fL3Rvb2wtbWVudS50ZXN0LmpzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByZW5kZXIsIHNjcmVlbiB9IGZyb20gJ0BwaWUtbGliL3Rlc3QtdXRpbHMnO1xuaW1wb3J0IHVzZXJFdmVudCBmcm9tICdAdGVzdGluZy1saWJyYXJ5L3VzZXItZXZlbnQnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuaW1wb3J0IFRvb2xNZW51IGZyb20gJy4uL3Rvb2wtbWVudSc7XG5cbi8vIE1vY2sgRHJhZ1Byb3ZpZGVyIHRvIGF2b2lkIEBkbmQta2l0IFJlYWN0IHZlcnNpb24gY29uZmxpY3RzXG5qZXN0Lm1vY2soJ0BwaWUtbGliL2RyYWcnLCAoKSA9PiAoe1xuICBEcmFnUHJvdmlkZXI6ICh7IGNoaWxkcmVuIH0pID0+IDxkaXYgZGF0YS10ZXN0aWQ9XCJkcmFnLXByb3ZpZGVyXCI+e2NoaWxkcmVufTwvZGl2Pixcbn0pKTtcblxuZGVzY3JpYmUoJ1Rvb2xNZW51JywgKCkgPT4ge1xuICBsZXQgb25DaGFuZ2UgPSBqZXN0LmZuKCk7XG4gIGxldCBvbkNoYW5nZVRvb2xzID0gamVzdC5mbigpO1xuXG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIG9uQ2hhbmdlLm1vY2tDbGVhcigpO1xuICAgIG9uQ2hhbmdlVG9vbHMubW9ja0NsZWFyKCk7XG4gIH0pO1xuXG4gIGNvbnN0IHJlbmRlckNvbXBvbmVudCA9IChleHRyYXMpID0+IHtcbiAgICBjb25zdCBkZWZhdWx0cyA9IHtcbiAgICAgIGNsYXNzTmFtZTogJ2NsYXNzTmFtZScsXG4gICAgICBvbkNoYW5nZSxcbiAgICAgIG9uQ2hhbmdlVG9vbHMsXG4gICAgICBjdXJyZW50VG9vbFR5cGU6ICdwb2ludCcsXG4gICAgICB0b29sYmFyVG9vbHM6IFsncG9pbnQnLCAnbGluZSddLFxuICAgICAgbGFuZ3VhZ2U6ICdlbicsXG4gICAgfTtcbiAgICBjb25zdCBwcm9wcyA9IHsgLi4uZGVmYXVsdHMsIC4uLmV4dHJhcyB9O1xuICAgIHJldHVybiByZW5kZXIoPFRvb2xNZW51IHsuLi5wcm9wc30gLz4pO1xuICB9O1xuXG4gIGRlc2NyaWJlKCdyZW5kZXJpbmcnLCAoKSA9PiB7XG4gICAgaXQoJ3JlbmRlcnMgd2l0aG91dCBjcmFzaGluZycsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXJDb21wb25lbnQoKTtcbiAgICAgIGV4cGVjdChjb250YWluZXIuZmlyc3RDaGlsZCkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZW5kZXJzIFRvZ2dsZUJhciB3aXRoIGNvcnJlY3QgcHJvcHMnLCAoKSA9PiB7XG4gICAgICByZW5kZXJDb21wb25lbnQoeyB0b29sYmFyVG9vbHM6IFsncG9pbnQnLCAnbGluZScsICdjaXJjbGUnXSB9KTtcbiAgICAgIGV4cGVjdChzY3JlZW4uZ2V0QnlUZXh0KC9wb2ludC9pKSkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICAgIGV4cGVjdChzY3JlZW4uZ2V0QnlUZXh0KC9saW5lL2kpKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgICAgZXhwZWN0KHNjcmVlbi5nZXRCeVRleHQoL2NpcmNsZS9pKSkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdwYXNzZXMgY3VycmVudFRvb2xUeXBlIHRvIFRvZ2dsZUJhcicsICgpID0+IHtcbiAgICAgIHJlbmRlckNvbXBvbmVudCh7IGN1cnJlbnRUb29sVHlwZTogJ2xpbmUnIH0pO1xuICAgICAgY29uc3Qgc2VsZWN0ZWRCdXR0b24gPSBzY3JlZW4uZ2V0QnlUZXh0KC9saW5lL2kpLmNsb3Nlc3QoJ2J1dHRvbicpO1xuICAgICAgZXhwZWN0KHNlbGVjdGVkQnV0dG9uKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnaW50ZXJhY3Rpb25zJywgKCkgPT4ge1xuICAgIGl0KCdjYWxscyBvbkNoYW5nZSB3aGVuIHRvb2wgaXMgc2VsZWN0ZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB1c2VyID0gdXNlckV2ZW50LnNldHVwKCk7XG4gICAgICByZW5kZXJDb21wb25lbnQoKTtcblxuICAgICAgY29uc3QgbGluZUJ1dHRvbiA9IHNjcmVlbi5nZXRCeVRleHQoL2xpbmUvaSkuY2xvc2VzdCgnYnV0dG9uJyk7XG4gICAgICBhd2FpdCB1c2VyLmNsaWNrKGxpbmVCdXR0b24pO1xuXG4gICAgICBleHBlY3Qob25DaGFuZ2UpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKCdsaW5lJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnY2FsbHMgb25DaGFuZ2VUb29scyB3aGVuIHRvb2xzIG9yZGVyIGNoYW5nZXMnLCAoKSA9PiB7XG4gICAgICByZW5kZXJDb21wb25lbnQoeyBkcmFnZ2FibGVUb29sczogdHJ1ZSB9KTtcbiAgICAgIC8vIE5vdGU6IERyYWctYW5kLWRyb3AgdGVzdGluZyByZXF1aXJlcyBtb3JlIGNvbXBsZXggc2V0dXAgd2l0aCBAZG5kLWtpdC90ZXN0LXV0aWxzXG4gICAgICAvLyBGb3Igbm93LCB3ZSB2ZXJpZnkgdGhlIGNvbXBvbmVudCByZW5kZXJzIHdpdGggZHJhZ2dhYmxlVG9vbHMgZW5hYmxlZFxuICAgICAgZXhwZWN0KHNjcmVlbi5nZXRCeVRleHQoL3BvaW50L2kpKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2Rpc2FibGVzIHRvb2xzIHdoZW4gZGlzYWJsZWQgcHJvcCBpcyB0cnVlJywgKCkgPT4ge1xuICAgICAgcmVuZGVyQ29tcG9uZW50KHsgZGlzYWJsZWQ6IHRydWUgfSk7XG4gICAgICBjb25zdCBwb2ludEJ1dHRvbiA9IHNjcmVlbi5nZXRCeVRleHQoL3BvaW50L2kpLmNsb3Nlc3QoJ2J1dHRvbicpO1xuICAgICAgZXhwZWN0KHBvaW50QnV0dG9uKS50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
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
5
+ var _testUtils = require("@pie-lib/test-utils");
6
+ var _react = _interopRequireDefault(require("react"));
7
+ var _undoRedo = _interopRequireDefault(require("../undo-redo"));
8
+ 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; }
9
+ 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; }
10
+ describe('UndoRedo', function () {
11
+ var onUndo = jest.fn();
12
+ var onRedo = jest.fn();
13
+ var onReset = jest.fn();
14
+ var renderComponent = function renderComponent(extras) {
15
+ var defaults = {
16
+ onUndo: onUndo,
17
+ onRedo: onRedo,
18
+ onReset: onReset
19
+ };
20
+ var props = _objectSpread(_objectSpread({}, defaults), extras);
21
+ return (0, _testUtils.render)(/*#__PURE__*/_react["default"].createElement(_undoRedo["default"], props));
22
+ };
23
+ describe('rendering', function () {
24
+ it('renders without crashing', function () {
25
+ var _renderComponent = renderComponent(),
26
+ container = _renderComponent.container;
27
+ expect(container.firstChild).toBeInTheDocument();
28
+ });
29
+ });
30
+ });
31
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdGVzdFV0aWxzIiwicmVxdWlyZSIsIl9yZWFjdCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfdW5kb1JlZG8iLCJvd25LZXlzIiwiZSIsInIiLCJ0IiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsIm8iLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJkZWZpbmVQcm9wZXJ0eSIsImRlc2NyaWJlIiwib25VbmRvIiwiamVzdCIsImZuIiwib25SZWRvIiwib25SZXNldCIsInJlbmRlckNvbXBvbmVudCIsImV4dHJhcyIsImRlZmF1bHRzIiwicHJvcHMiLCJyZW5kZXIiLCJjcmVhdGVFbGVtZW50IiwiaXQiLCJfcmVuZGVyQ29tcG9uZW50IiwiY29udGFpbmVyIiwiZXhwZWN0IiwiZmlyc3RDaGlsZCIsInRvQmVJblRoZURvY3VtZW50Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL19fdGVzdHNfXy91bmRvLXJlZG8udGVzdC5qc3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmVuZGVyIH0gZnJvbSAnQHBpZS1saWIvdGVzdC11dGlscyc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFVuZG9SZWRvIGZyb20gJy4uL3VuZG8tcmVkbyc7XG5cbmRlc2NyaWJlKCdVbmRvUmVkbycsICgpID0+IHtcbiAgbGV0IG9uVW5kbyA9IGplc3QuZm4oKTtcbiAgbGV0IG9uUmVkbyA9IGplc3QuZm4oKTtcbiAgbGV0IG9uUmVzZXQgPSBqZXN0LmZuKCk7XG4gIGNvbnN0IHJlbmRlckNvbXBvbmVudCA9IChleHRyYXMpID0+IHtcbiAgICBjb25zdCBkZWZhdWx0cyA9IHtcbiAgICAgIG9uVW5kbyxcbiAgICAgIG9uUmVkbyxcbiAgICAgIG9uUmVzZXQsXG4gICAgfTtcbiAgICBjb25zdCBwcm9wcyA9IHsgLi4uZGVmYXVsdHMsIC4uLmV4dHJhcyB9O1xuICAgIHJldHVybiByZW5kZXIoPFVuZG9SZWRvIHsuLi5wcm9wc30gLz4pO1xuICB9O1xuICBkZXNjcmliZSgncmVuZGVyaW5nJywgKCkgPT4ge1xuICAgIGl0KCdyZW5kZXJzIHdpdGhvdXQgY3Jhc2hpbmcnLCAoKSA9PiB7XG4gICAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyQ29tcG9uZW50KCk7XG4gICAgICBleHBlY3QoY29udGFpbmVyLmZpcnN0Q2hpbGQpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxJQUFBQSxVQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxNQUFBLEdBQUFDLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBRyxTQUFBLEdBQUFELHNCQUFBLENBQUFGLE9BQUE7QUFBb0MsU0FBQUksUUFBQUMsQ0FBQSxFQUFBQyxDQUFBLFFBQUFDLENBQUEsR0FBQUMsTUFBQSxDQUFBQyxJQUFBLENBQUFKLENBQUEsT0FBQUcsTUFBQSxDQUFBRSxxQkFBQSxRQUFBQyxDQUFBLEdBQUFILE1BQUEsQ0FBQUUscUJBQUEsQ0FBQUwsQ0FBQSxHQUFBQyxDQUFBLEtBQUFLLENBQUEsR0FBQUEsQ0FBQSxDQUFBQyxNQUFBLFdBQUFOLENBQUEsV0FBQUUsTUFBQSxDQUFBSyx3QkFBQSxDQUFBUixDQUFBLEVBQUFDLENBQUEsRUFBQVEsVUFBQSxPQUFBUCxDQUFBLENBQUFRLElBQUEsQ0FBQUMsS0FBQSxDQUFBVCxDQUFBLEVBQUFJLENBQUEsWUFBQUosQ0FBQTtBQUFBLFNBQUFVLGNBQUFaLENBQUEsYUFBQUMsQ0FBQSxNQUFBQSxDQUFBLEdBQUFZLFNBQUEsQ0FBQUMsTUFBQSxFQUFBYixDQUFBLFVBQUFDLENBQUEsV0FBQVcsU0FBQSxDQUFBWixDQUFBLElBQUFZLFNBQUEsQ0FBQVosQ0FBQSxRQUFBQSxDQUFBLE9BQUFGLE9BQUEsQ0FBQUksTUFBQSxDQUFBRCxDQUFBLE9BQUFhLE9BQUEsV0FBQWQsQ0FBQSxRQUFBZSxnQkFBQSxhQUFBaEIsQ0FBQSxFQUFBQyxDQUFBLEVBQUFDLENBQUEsQ0FBQUQsQ0FBQSxTQUFBRSxNQUFBLENBQUFjLHlCQUFBLEdBQUFkLE1BQUEsQ0FBQWUsZ0JBQUEsQ0FBQWxCLENBQUEsRUFBQUcsTUFBQSxDQUFBYyx5QkFBQSxDQUFBZixDQUFBLEtBQUFILE9BQUEsQ0FBQUksTUFBQSxDQUFBRCxDQUFBLEdBQUFhLE9BQUEsV0FBQWQsQ0FBQSxJQUFBRSxNQUFBLENBQUFnQixjQUFBLENBQUFuQixDQUFBLEVBQUFDLENBQUEsRUFBQUUsTUFBQSxDQUFBSyx3QkFBQSxDQUFBTixDQUFBLEVBQUFELENBQUEsaUJBQUFELENBQUE7QUFFcENvQixRQUFRLENBQUMsVUFBVSxFQUFFLFlBQU07RUFDekIsSUFBSUMsTUFBTSxHQUFHQyxJQUFJLENBQUNDLEVBQUUsQ0FBQyxDQUFDO0VBQ3RCLElBQUlDLE1BQU0sR0FBR0YsSUFBSSxDQUFDQyxFQUFFLENBQUMsQ0FBQztFQUN0QixJQUFJRSxPQUFPLEdBQUdILElBQUksQ0FBQ0MsRUFBRSxDQUFDLENBQUM7RUFDdkIsSUFBTUcsZUFBZSxHQUFHLFNBQWxCQSxlQUFlQSxDQUFJQyxNQUFNLEVBQUs7SUFDbEMsSUFBTUMsUUFBUSxHQUFHO01BQ2ZQLE1BQU0sRUFBTkEsTUFBTTtNQUNORyxNQUFNLEVBQU5BLE1BQU07TUFDTkMsT0FBTyxFQUFQQTtJQUNGLENBQUM7SUFDRCxJQUFNSSxLQUFLLEdBQUFqQixhQUFBLENBQUFBLGFBQUEsS0FBUWdCLFFBQVEsR0FBS0QsTUFBTSxDQUFFO0lBQ3hDLE9BQU8sSUFBQUcsaUJBQU0sZUFBQ2xDLE1BQUEsWUFBQW1DLGFBQUEsQ0FBQ2pDLFNBQUEsV0FBUSxFQUFLK0IsS0FBUSxDQUFDLENBQUM7RUFDeEMsQ0FBQztFQUNEVCxRQUFRLENBQUMsV0FBVyxFQUFFLFlBQU07SUFDMUJZLEVBQUUsQ0FBQywwQkFBMEIsRUFBRSxZQUFNO01BQ25DLElBQUFDLGdCQUFBLEdBQXNCUCxlQUFlLENBQUMsQ0FBQztRQUEvQlEsU0FBUyxHQUFBRCxnQkFBQSxDQUFUQyxTQUFTO01BQ2pCQyxNQUFNLENBQUNELFNBQVMsQ0FBQ0UsVUFBVSxDQUFDLENBQUNDLGlCQUFpQixDQUFDLENBQUM7SUFDbEQsQ0FBQyxDQUFDO0VBQ0osQ0FBQyxDQUFDO0FBQ0osQ0FBQyxDQUFDIiwiaWdub3JlTGlzdCI6W119
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+
3
+ var _react = require("react");
4
+ var _useDebounce = require("../use-debounce");
5
+ jest.useFakeTimers();
6
+ jest.mock('react', function () {
7
+ return {
8
+ useState: jest.fn(),
9
+ useEffect: jest.fn(function (fn, deps) {
10
+ return fn();
11
+ })
12
+ };
13
+ });
14
+ describe('useDebounce', function () {
15
+ it('..', function () {
16
+ var debouncedValue = null;
17
+ var setDebouncedValue = jest.fn();
18
+ _react.useState.mockReturnValue([debouncedValue, setDebouncedValue]);
19
+ (0, _useDebounce.useDebounce)('foo', 1000);
20
+ jest.runAllTimers();
21
+ expect(setDebouncedValue).toHaveBeenCalledWith('foo');
22
+ });
23
+ });
24
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJyZXF1aXJlIiwiX3VzZURlYm91bmNlIiwiamVzdCIsInVzZUZha2VUaW1lcnMiLCJtb2NrIiwidXNlU3RhdGUiLCJmbiIsInVzZUVmZmVjdCIsImRlcHMiLCJkZXNjcmliZSIsIml0IiwiZGVib3VuY2VkVmFsdWUiLCJzZXREZWJvdW5jZWRWYWx1ZSIsIm1vY2tSZXR1cm5WYWx1ZSIsInVzZURlYm91bmNlIiwicnVuQWxsVGltZXJzIiwiZXhwZWN0IiwidG9IYXZlQmVlbkNhbGxlZFdpdGgiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvX190ZXN0c19fL3VzZS1kZWJvdW5jZS50ZXN0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVzZVN0YXRlLCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VEZWJvdW5jZSB9IGZyb20gJy4uL3VzZS1kZWJvdW5jZSc7XG5cbmplc3QudXNlRmFrZVRpbWVycygpO1xuXG5qZXN0Lm1vY2soJ3JlYWN0JywgKCkgPT4gKHtcbiAgdXNlU3RhdGU6IGplc3QuZm4oKSxcbiAgdXNlRWZmZWN0OiBqZXN0LmZuKChmbiwgZGVwcykgPT4gZm4oKSksXG59KSk7XG5cbmRlc2NyaWJlKCd1c2VEZWJvdW5jZScsICgpID0+IHtcbiAgaXQoJy4uJywgKCkgPT4ge1xuICAgIGNvbnN0IGRlYm91bmNlZFZhbHVlID0gbnVsbDtcbiAgICBjb25zdCBzZXREZWJvdW5jZWRWYWx1ZSA9IGplc3QuZm4oKTtcblxuICAgIHVzZVN0YXRlLm1vY2tSZXR1cm5WYWx1ZShbZGVib3VuY2VkVmFsdWUsIHNldERlYm91bmNlZFZhbHVlXSk7XG4gICAgdXNlRGVib3VuY2UoJ2ZvbycsIDEwMDApO1xuICAgIGplc3QucnVuQWxsVGltZXJzKCk7XG4gICAgZXhwZWN0KHNldERlYm91bmNlZFZhbHVlKS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgnZm9vJyk7XG4gIH0pO1xufSk7XG4iXSwibWFwcGluZ3MiOiI7O0FBQUEsSUFBQUEsTUFBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsWUFBQSxHQUFBRCxPQUFBO0FBRUFFLElBQUksQ0FBQ0MsYUFBYSxDQUFDLENBQUM7QUFFcEJELElBQUksQ0FBQ0UsSUFBSSxDQUFDLE9BQU8sRUFBRTtFQUFBLE9BQU87SUFDeEJDLFFBQVEsRUFBRUgsSUFBSSxDQUFDSSxFQUFFLENBQUMsQ0FBQztJQUNuQkMsU0FBUyxFQUFFTCxJQUFJLENBQUNJLEVBQUUsQ0FBQyxVQUFDQSxFQUFFLEVBQUVFLElBQUk7TUFBQSxPQUFLRixFQUFFLENBQUMsQ0FBQztJQUFBO0VBQ3ZDLENBQUM7QUFBQSxDQUFDLENBQUM7QUFFSEcsUUFBUSxDQUFDLGFBQWEsRUFBRSxZQUFNO0VBQzVCQyxFQUFFLENBQUMsSUFBSSxFQUFFLFlBQU07SUFDYixJQUFNQyxjQUFjLEdBQUcsSUFBSTtJQUMzQixJQUFNQyxpQkFBaUIsR0FBR1YsSUFBSSxDQUFDSSxFQUFFLENBQUMsQ0FBQztJQUVuQ0QsZUFBUSxDQUFDUSxlQUFlLENBQUMsQ0FBQ0YsY0FBYyxFQUFFQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQzdELElBQUFFLHdCQUFXLEVBQUMsS0FBSyxFQUFFLElBQUksQ0FBQztJQUN4QlosSUFBSSxDQUFDYSxZQUFZLENBQUMsQ0FBQztJQUNuQkMsTUFBTSxDQUFDSixpQkFBaUIsQ0FBQyxDQUFDSyxvQkFBb0IsQ0FBQyxLQUFLLENBQUM7RUFDdkQsQ0FBQyxDQUFDO0FBQ0osQ0FBQyxDQUFDIiwiaWdub3JlTGlzdCI6W119
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.xy = exports.scaleMock = exports.graphProps = void 0;
7
+ var _scaleMock = exports.scaleMock = function scaleMock() {
8
+ var fn = jest.fn(function (n) {
9
+ return n;
10
+ });
11
+ fn.invert = jest.fn(function (n) {
12
+ return n;
13
+ });
14
+ fn.domain = jest.fn(function () {
15
+ return fn;
16
+ });
17
+ fn.range = jest.fn(function () {
18
+ return fn;
19
+ });
20
+ fn.copy = jest.fn(function () {
21
+ return _scaleMock();
22
+ });
23
+ return fn;
24
+ };
25
+ var graphProps = exports.graphProps = function graphProps() {
26
+ var dmin = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
27
+ var dmax = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
28
+ var rmin = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
29
+ var rmax = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 1;
30
+ return {
31
+ scale: {
32
+ x: _scaleMock(),
33
+ y: _scaleMock()
34
+ },
35
+ snap: {
36
+ x: jest.fn(function (n) {
37
+ return n;
38
+ }),
39
+ y: jest.fn(function (n) {
40
+ return n;
41
+ })
42
+ },
43
+ domain: {
44
+ min: dmin,
45
+ max: dmax,
46
+ step: 1
47
+ },
48
+ range: {
49
+ min: rmin,
50
+ max: rmax,
51
+ step: 1
52
+ },
53
+ size: {
54
+ width: 400,
55
+ height: 400
56
+ }
57
+ };
58
+ };
59
+ var xy = exports.xy = function xy(x, y, index) {
60
+ var out = {
61
+ x: x,
62
+ y: y,
63
+ index: index
64
+ };
65
+ if (!Number.isFinite(index)) {
66
+ delete out.index;
67
+ }
68
+ return out;
69
+ };
70
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJzY2FsZU1vY2siLCJleHBvcnRzIiwiZm4iLCJqZXN0IiwibiIsImludmVydCIsImRvbWFpbiIsInJhbmdlIiwiY29weSIsImdyYXBoUHJvcHMiLCJkbWluIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwidW5kZWZpbmVkIiwiZG1heCIsInJtaW4iLCJybWF4Iiwic2NhbGUiLCJ4IiwieSIsInNuYXAiLCJtaW4iLCJtYXgiLCJzdGVwIiwic2l6ZSIsIndpZHRoIiwiaGVpZ2h0IiwieHkiLCJpbmRleCIsIm91dCIsIk51bWJlciIsImlzRmluaXRlIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL19fdGVzdHNfXy91dGlscy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3Qgc2NhbGVNb2NrID0gKCkgPT4ge1xuICBjb25zdCBmbiA9IGplc3QuZm4oKG4pID0+IG4pO1xuICBmbi5pbnZlcnQgPSBqZXN0LmZuKChuKSA9PiBuKTtcbiAgZm4uZG9tYWluID0gamVzdC5mbigoKSA9PiBmbik7XG4gIGZuLnJhbmdlID0gamVzdC5mbigoKSA9PiBmbik7XG4gIGZuLmNvcHkgPSBqZXN0LmZuKCgpID0+IHNjYWxlTW9jaygpKTtcbiAgcmV0dXJuIGZuO1xufTtcblxuZXhwb3J0IGNvbnN0IGdyYXBoUHJvcHMgPSAoZG1pbiA9IDAsIGRtYXggPSAxLCBybWluID0gMCwgcm1heCA9IDEpID0+ICh7XG4gIHNjYWxlOiB7XG4gICAgeDogc2NhbGVNb2NrKCksXG4gICAgeTogc2NhbGVNb2NrKCksXG4gIH0sXG4gIHNuYXA6IHtcbiAgICB4OiBqZXN0LmZuKChuKSA9PiBuKSxcbiAgICB5OiBqZXN0LmZuKChuKSA9PiBuKSxcbiAgfSxcbiAgZG9tYWluOiB7XG4gICAgbWluOiBkbWluLFxuICAgIG1heDogZG1heCxcbiAgICBzdGVwOiAxLFxuICB9LFxuICByYW5nZToge1xuICAgIG1pbjogcm1pbixcbiAgICBtYXg6IHJtYXgsXG4gICAgc3RlcDogMSxcbiAgfSxcbiAgc2l6ZToge1xuICAgIHdpZHRoOiA0MDAsXG4gICAgaGVpZ2h0OiA0MDAsXG4gIH0sXG59KTtcblxuZXhwb3J0IGNvbnN0IHh5ID0gKHgsIHksIGluZGV4KSA9PiB7XG4gIGNvbnN0IG91dCA9IHsgeCwgeSwgaW5kZXggfTtcbiAgaWYgKCFOdW1iZXIuaXNGaW5pdGUoaW5kZXgpKSB7XG4gICAgZGVsZXRlIG91dC5pbmRleDtcbiAgfVxuICByZXR1cm4gb3V0O1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQU8sSUFBTUEsVUFBUyxHQUFBQyxPQUFBLENBQUFELFNBQUEsR0FBRyxTQUFaQSxTQUFTQSxDQUFBLEVBQVM7RUFDN0IsSUFBTUUsRUFBRSxHQUFHQyxJQUFJLENBQUNELEVBQUUsQ0FBQyxVQUFDRSxDQUFDO0lBQUEsT0FBS0EsQ0FBQztFQUFBLEVBQUM7RUFDNUJGLEVBQUUsQ0FBQ0csTUFBTSxHQUFHRixJQUFJLENBQUNELEVBQUUsQ0FBQyxVQUFDRSxDQUFDO0lBQUEsT0FBS0EsQ0FBQztFQUFBLEVBQUM7RUFDN0JGLEVBQUUsQ0FBQ0ksTUFBTSxHQUFHSCxJQUFJLENBQUNELEVBQUUsQ0FBQztJQUFBLE9BQU1BLEVBQUU7RUFBQSxFQUFDO0VBQzdCQSxFQUFFLENBQUNLLEtBQUssR0FBR0osSUFBSSxDQUFDRCxFQUFFLENBQUM7SUFBQSxPQUFNQSxFQUFFO0VBQUEsRUFBQztFQUM1QkEsRUFBRSxDQUFDTSxJQUFJLEdBQUdMLElBQUksQ0FBQ0QsRUFBRSxDQUFDO0lBQUEsT0FBTUYsVUFBUyxDQUFDLENBQUM7RUFBQSxFQUFDO0VBQ3BDLE9BQU9FLEVBQUU7QUFDWCxDQUFDO0FBRU0sSUFBTU8sVUFBVSxHQUFBUixPQUFBLENBQUFRLFVBQUEsR0FBRyxTQUFiQSxVQUFVQSxDQUFBO0VBQUEsSUFBSUMsSUFBSSxHQUFBQyxTQUFBLENBQUFDLE1BQUEsUUFBQUQsU0FBQSxRQUFBRSxTQUFBLEdBQUFGLFNBQUEsTUFBRyxDQUFDO0VBQUEsSUFBRUcsSUFBSSxHQUFBSCxTQUFBLENBQUFDLE1BQUEsUUFBQUQsU0FBQSxRQUFBRSxTQUFBLEdBQUFGLFNBQUEsTUFBRyxDQUFDO0VBQUEsSUFBRUksSUFBSSxHQUFBSixTQUFBLENBQUFDLE1BQUEsUUFBQUQsU0FBQSxRQUFBRSxTQUFBLEdBQUFGLFNBQUEsTUFBRyxDQUFDO0VBQUEsSUFBRUssSUFBSSxHQUFBTCxTQUFBLENBQUFDLE1BQUEsUUFBQUQsU0FBQSxRQUFBRSxTQUFBLEdBQUFGLFNBQUEsTUFBRyxDQUFDO0VBQUEsT0FBTTtJQUNyRU0sS0FBSyxFQUFFO01BQ0xDLENBQUMsRUFBRWxCLFVBQVMsQ0FBQyxDQUFDO01BQ2RtQixDQUFDLEVBQUVuQixVQUFTLENBQUM7SUFDZixDQUFDO0lBQ0RvQixJQUFJLEVBQUU7TUFDSkYsQ0FBQyxFQUFFZixJQUFJLENBQUNELEVBQUUsQ0FBQyxVQUFDRSxDQUFDO1FBQUEsT0FBS0EsQ0FBQztNQUFBLEVBQUM7TUFDcEJlLENBQUMsRUFBRWhCLElBQUksQ0FBQ0QsRUFBRSxDQUFDLFVBQUNFLENBQUM7UUFBQSxPQUFLQSxDQUFDO01BQUE7SUFDckIsQ0FBQztJQUNERSxNQUFNLEVBQUU7TUFDTmUsR0FBRyxFQUFFWCxJQUFJO01BQ1RZLEdBQUcsRUFBRVIsSUFBSTtNQUNUUyxJQUFJLEVBQUU7SUFDUixDQUFDO0lBQ0RoQixLQUFLLEVBQUU7TUFDTGMsR0FBRyxFQUFFTixJQUFJO01BQ1RPLEdBQUcsRUFBRU4sSUFBSTtNQUNUTyxJQUFJLEVBQUU7SUFDUixDQUFDO0lBQ0RDLElBQUksRUFBRTtNQUNKQyxLQUFLLEVBQUUsR0FBRztNQUNWQyxNQUFNLEVBQUU7SUFDVjtFQUNGLENBQUM7QUFBQSxDQUFDO0FBRUssSUFBTUMsRUFBRSxHQUFBMUIsT0FBQSxDQUFBMEIsRUFBQSxHQUFHLFNBQUxBLEVBQUVBLENBQUlULENBQUMsRUFBRUMsQ0FBQyxFQUFFUyxLQUFLLEVBQUs7RUFDakMsSUFBTUMsR0FBRyxHQUFHO0lBQUVYLENBQUMsRUFBREEsQ0FBQztJQUFFQyxDQUFDLEVBQURBLENBQUM7SUFBRVMsS0FBSyxFQUFMQTtFQUFNLENBQUM7RUFDM0IsSUFBSSxDQUFDRSxNQUFNLENBQUNDLFFBQVEsQ0FBQ0gsS0FBSyxDQUFDLEVBQUU7SUFDM0IsT0FBT0MsR0FBRyxDQUFDRCxLQUFLO0VBQ2xCO0VBQ0EsT0FBT0MsR0FBRztBQUNaLENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=