@pie-element/hotspot 9.3.4-next.3 → 10.0.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (106) hide show
  1. package/CHANGELOG.md +0 -11
  2. package/configure/CHANGELOG.md +0 -11
  3. package/configure/lib/DeleteWidget.js +30 -43
  4. package/configure/lib/DeleteWidget.js.map +1 -1
  5. package/configure/lib/button.js +26 -45
  6. package/configure/lib/button.js.map +1 -1
  7. package/configure/lib/buttons/circle.js +20 -27
  8. package/configure/lib/buttons/circle.js.map +1 -1
  9. package/configure/lib/buttons/polygon.js +26 -33
  10. package/configure/lib/buttons/polygon.js.map +1 -1
  11. package/configure/lib/buttons/rectangle.js +26 -33
  12. package/configure/lib/buttons/rectangle.js.map +1 -1
  13. package/configure/lib/defaults.js +2 -3
  14. package/configure/lib/defaults.js.map +1 -1
  15. package/configure/lib/hotspot-circle.js +132 -198
  16. package/configure/lib/hotspot-circle.js.map +1 -1
  17. package/configure/lib/hotspot-container.js +250 -355
  18. package/configure/lib/hotspot-container.js.map +1 -1
  19. package/configure/lib/hotspot-drawable.js +360 -472
  20. package/configure/lib/hotspot-drawable.js.map +1 -1
  21. package/configure/lib/hotspot-palette.js +92 -139
  22. package/configure/lib/hotspot-palette.js.map +1 -1
  23. package/configure/lib/hotspot-polygon.js +212 -317
  24. package/configure/lib/hotspot-polygon.js.map +1 -1
  25. package/configure/lib/hotspot-rectangle.js +128 -192
  26. package/configure/lib/hotspot-rectangle.js.map +1 -1
  27. package/configure/lib/icons.js.map +1 -1
  28. package/configure/lib/image-konva.js +46 -86
  29. package/configure/lib/image-konva.js.map +1 -1
  30. package/configure/lib/index.js +162 -222
  31. package/configure/lib/index.js.map +1 -1
  32. package/configure/lib/root.js +302 -394
  33. package/configure/lib/root.js.map +1 -1
  34. package/configure/lib/shapes/circle.js +69 -101
  35. package/configure/lib/shapes/circle.js.map +1 -1
  36. package/configure/lib/shapes/index.js +4 -12
  37. package/configure/lib/shapes/index.js.map +1 -1
  38. package/configure/lib/shapes/polygon.js +64 -96
  39. package/configure/lib/shapes/polygon.js.map +1 -1
  40. package/configure/lib/shapes/rectagle.js +69 -101
  41. package/configure/lib/shapes/rectagle.js.map +1 -1
  42. package/configure/lib/shapes/utils.js +2 -8
  43. package/configure/lib/shapes/utils.js.map +1 -1
  44. package/configure/lib/upload-control.js +25 -52
  45. package/configure/lib/upload-control.js.map +1 -1
  46. package/configure/lib/utils.js +84 -137
  47. package/configure/lib/utils.js.map +1 -1
  48. package/configure/package.json +11 -10
  49. package/configure/src/__tests__/hotspot-container.test.js +50 -19
  50. package/configure/src/__tests__/hotspot-drawable.test.js +55 -34
  51. package/configure/src/__tests__/index.test.js +167 -5
  52. package/configure/src/__tests__/root.test.js +89 -63
  53. package/configure/src/button.jsx +12 -20
  54. package/configure/src/hotspot-circle.jsx +5 -18
  55. package/configure/src/hotspot-container.jsx +82 -98
  56. package/configure/src/hotspot-drawable.jsx +43 -45
  57. package/configure/src/hotspot-palette.jsx +45 -37
  58. package/configure/src/hotspot-polygon.jsx +4 -20
  59. package/configure/src/hotspot-rectangle.jsx +4 -17
  60. package/configure/src/index.js +12 -2
  61. package/configure/src/root.jsx +86 -80
  62. package/configure/src/upload-control.jsx +6 -16
  63. package/controller/CHANGELOG.md +0 -11
  64. package/controller/lib/defaults.js +2 -3
  65. package/controller/lib/defaults.js.map +1 -1
  66. package/controller/lib/index.js +151 -205
  67. package/controller/lib/index.js.map +1 -1
  68. package/controller/lib/utils.js +14 -34
  69. package/controller/lib/utils.js.map +1 -1
  70. package/controller/package.json +2 -2
  71. package/lib/hotspot/circle.js +110 -169
  72. package/lib/hotspot/circle.js.map +1 -1
  73. package/lib/hotspot/container.js +174 -260
  74. package/lib/hotspot/container.js.map +1 -1
  75. package/lib/hotspot/icons.js.map +1 -1
  76. package/lib/hotspot/image-konva-tooltip.js +65 -112
  77. package/lib/hotspot/image-konva-tooltip.js.map +1 -1
  78. package/lib/hotspot/index.js +135 -198
  79. package/lib/hotspot/index.js.map +1 -1
  80. package/lib/hotspot/polygon.js +150 -214
  81. package/lib/hotspot/polygon.js.map +1 -1
  82. package/lib/hotspot/rectangle.js +128 -185
  83. package/lib/hotspot/rectangle.js.map +1 -1
  84. package/lib/index.js +187 -256
  85. package/lib/index.js.map +1 -1
  86. package/lib/session-updater.js +12 -18
  87. package/lib/session-updater.js.map +1 -1
  88. package/package.json +14 -11
  89. package/src/__tests__/container.test.jsx +27 -175
  90. package/src/__tests__/index.test.js +70 -30
  91. package/src/hotspot/circle.jsx +2 -13
  92. package/src/hotspot/container.jsx +35 -50
  93. package/src/hotspot/index.jsx +16 -28
  94. package/src/hotspot/polygon.jsx +4 -13
  95. package/src/hotspot/rectangle.jsx +5 -15
  96. package/src/index.js +21 -12
  97. package/configure/src/__tests__/DeleteWidget.test.js +0 -64
  98. package/configure/src/__tests__/__snapshots__/hotspot-container.test.js.snap +0 -192
  99. package/configure/src/__tests__/__snapshots__/hotspot-drawable.test.js.snap +0 -562
  100. package/configure/src/__tests__/__snapshots__/root.test.js.snap +0 -469
  101. package/src/__tests__/__snapshots__/container.test.jsx.snap +0 -264
  102. package/src/__tests__/__snapshots__/index.test.js.snap +0 -81
  103. package/src/__tests__/__snapshots__/polygon.test.jsx.snap +0 -192
  104. package/src/__tests__/__snapshots__/rectangle.test.jsx.snap +0 -127
  105. package/src/__tests__/polygon.test.jsx +0 -230
  106. package/src/__tests__/rectangle.test.jsx +0 -232
@@ -1,230 +0,0 @@
1
- import React from 'react';
2
- import { shallow } from 'enzyme';
3
- import toJson from 'enzyme-to-json';
4
- import Konva from 'konva';
5
- import { Line } from 'react-konva';
6
-
7
- import { shallowChild } from '@pie-lib/test-utils';
8
-
9
- import Polygon from '../hotspot/polygon';
10
- import ImageComponent from '../hotspot/image-konva-tooltip';
11
- import { faCorrect, faWrong } from '../hotspot/icons';
12
-
13
- Konva.isBrowser = false;
14
-
15
- describe('Polygon', () => {
16
- let onClick, wrapper;
17
-
18
- const mkWrapper = (opts = {}) => {
19
- opts = {
20
- classes: { base: 'base' },
21
- height: 200,
22
- hotspotColor: 'rgba(137, 183, 244, 0.65)',
23
- id: '1',
24
- isCorrect: false,
25
- isEvaluateMode: false,
26
- evaluateText: null,
27
- disabled: false,
28
- outlineColor: 'blue',
29
- selected: false,
30
- points: [
31
- { x: 94, y: 4 },
32
- { x: 89, y: 4 },
33
- { x: 36, y: 40 },
34
- ],
35
- ...opts,
36
- };
37
-
38
- return shallow(<Polygon {...opts} onClick={onClick} />);
39
- };
40
-
41
- beforeEach(() => {
42
- onClick = jest.fn();
43
- wrapper = mkWrapper();
44
- });
45
-
46
- describe('snapshots', () => {
47
- describe('outline color', () => {
48
- it('renders', () => {
49
- const wrapper = mkWrapper({ outlineColor: 'red' });
50
- expect(toJson(wrapper)).toMatchSnapshot();
51
- });
52
- });
53
-
54
- describe('outline width', () => {
55
- it('renders with default border width', () => {
56
- const wrapper = mkWrapper();
57
- expect(toJson(wrapper)).toMatchSnapshot();
58
- });
59
-
60
- it('renders with given border width', () => {
61
- const wrapper = mkWrapper({ strokeWidth: 10 });
62
- expect(toJson(wrapper)).toMatchSnapshot();
63
- });
64
- });
65
-
66
- describe('hotspot color', () => {
67
- it('renders', () => {
68
- const wrapper = mkWrapper({ hotspotColor: 'rgba(217, 30, 24, 0.65)' });
69
- expect(toJson(wrapper)).toMatchSnapshot();
70
- });
71
- });
72
-
73
- describe('evaluate with correct answer', () => {
74
- it('renders', () => {
75
- const wrapper = mkWrapper({ isEvaluateMode: true, isCorrect: true, evaluateText: 'Correctly\nselected' });
76
- expect(toJson(wrapper)).toMatchSnapshot();
77
- });
78
- });
79
- });
80
-
81
- describe('in evaluate mode', () => {
82
- const defaultModel = {
83
- height: 200,
84
- hotspotColor: 'rgba(137, 183, 244, 0.65)',
85
- id: '1',
86
- isCorrect: false,
87
- isEvaluateMode: true,
88
- evaluateText: null,
89
- disabled: true,
90
- outlineColor: 'blue',
91
- strokeWidth: 5,
92
- selected: false,
93
- points: [
94
- { x: 94, y: 4 },
95
- { x: 89, y: 4 },
96
- { x: 36, y: 40 },
97
- ],
98
- markAsCorrect: false,
99
- showCorrectEnabled: false,
100
- onClick,
101
- };
102
-
103
- const getComponents = (model) => {
104
- const testWrapper = shallowChild(
105
- Polygon,
106
- {
107
- ...defaultModel,
108
- ...model,
109
- },
110
- 1,
111
- );
112
- const polygonComponent = testWrapper();
113
- const lineComponent = polygonComponent.find(Line);
114
- return {
115
- polygonComponent,
116
- lineComponent,
117
- };
118
- };
119
-
120
- describe('when correctly selected', () => {
121
- const { polygonComponent, lineComponent } = getComponents({
122
- selected: true,
123
- isCorrect: true,
124
- });
125
-
126
- it('should have a blue outline', () => {
127
- expect(lineComponent.prop('stroke')).toEqual('blue');
128
- expect(lineComponent.prop('strokeWidth')).toEqual(defaultModel.strokeWidth);
129
- });
130
-
131
- it('should have a green checkmark icon', () => {
132
- const imgComponent = polygonComponent.find(ImageComponent);
133
- expect(imgComponent.length).toEqual(1);
134
- expect(imgComponent.prop('src')).toEqual(faCorrect);
135
- });
136
- });
137
-
138
- describe('when correctly not selected', () => {
139
- const { polygonComponent, lineComponent } = getComponents({
140
- selected: false,
141
- isCorrect: true,
142
- });
143
-
144
- it('should have no outline', () => {
145
- expect(lineComponent.prop('strokeWidth')).toEqual(0);
146
- });
147
-
148
- it('should have no icon', () => {
149
- const imgComponent = polygonComponent.find(ImageComponent);
150
- expect(imgComponent.length).toEqual(0);
151
- });
152
- });
153
-
154
- describe('when incorrectly selected', () => {
155
- const { polygonComponent, lineComponent } = getComponents({
156
- selected: true,
157
- isCorrect: false,
158
- });
159
-
160
- it('should have a red outline', () => {
161
- expect(lineComponent.prop('stroke')).toEqual('red');
162
- expect(lineComponent.prop('strokeWidth')).toEqual(defaultModel.strokeWidth);
163
- });
164
-
165
- it('should have a red x icon', () => {
166
- const imgComponent = polygonComponent.find(ImageComponent);
167
- expect(imgComponent.length).toEqual(1);
168
- expect(imgComponent.prop('src')).toEqual(faWrong);
169
- });
170
- });
171
-
172
- describe('when incorrectly not selected', () => {
173
- const { polygonComponent, lineComponent } = getComponents({
174
- selected: false,
175
- isCorrect: false,
176
- });
177
-
178
- it('should have no outline', () => {
179
- expect(lineComponent.prop('strokeWidth')).toEqual(0);
180
- });
181
-
182
- it('should have a red x icon', () => {
183
- const imgComponent = polygonComponent.find(ImageComponent);
184
- expect(imgComponent.length).toEqual(1);
185
- expect(imgComponent.prop('src')).toEqual(faWrong);
186
- });
187
- });
188
-
189
- describe('when showing correct answer (showCorrectEnabled = true)', () => {
190
- it('should have a green outline', () => {
191
- const { lineComponent } = getComponents({
192
- showCorrectEnabled: true,
193
- markAsCorrect: true,
194
- });
195
- expect(lineComponent.prop('stroke')).toEqual('green');
196
- expect(lineComponent.prop('strokeWidth')).toEqual(defaultModel.strokeWidth);
197
- });
198
-
199
- it('should have a green checkmark icon', () => {
200
- const { polygonComponent } = getComponents({
201
- showCorrectEnabled: true,
202
- markAsCorrect: true,
203
- });
204
- const imgComponent = polygonComponent.find(ImageComponent);
205
- expect(imgComponent.prop('src')).toEqual(faCorrect);
206
- });
207
-
208
- it('should not be selected if the answer is incorrect', () => {
209
- const { lineComponent } = getComponents({
210
- showCorrectEnabled: true,
211
- markAsCorrect: false,
212
- selected: true,
213
- isCorrect: false,
214
- });
215
- expect(lineComponent.prop('strokeWidth')).toEqual(0);
216
- });
217
-
218
- it('should not render an icon if the answer is incorrect', () => {
219
- const { polygonComponent } = getComponents({
220
- showCorrectEnabled: true,
221
- markAsCorrect: false,
222
- selected: true,
223
- isCorrect: false,
224
- });
225
- const imgComponent = polygonComponent.find(ImageComponent);
226
- expect(imgComponent.length).toEqual(0);
227
- });
228
- });
229
- });
230
- });
@@ -1,232 +0,0 @@
1
- import React from 'react';
2
- import { shallow } from 'enzyme';
3
- import toJson from 'enzyme-to-json';
4
- import Konva from 'konva';
5
- import { Rect } from 'react-konva';
6
-
7
- import { shallowChild } from '@pie-lib/test-utils';
8
-
9
- import Rectangle from '../hotspot/rectangle';
10
- import ImageComponent from '../hotspot/image-konva-tooltip';
11
- import { faCorrect, faWrong } from '../hotspot/icons';
12
-
13
- global.MutationObserver = class {
14
- constructor(callback) {}
15
- disconnect() {}
16
- observe(element, initObject) {}
17
- };
18
-
19
- Konva.isBrowser = false;
20
-
21
- describe('Rectangle', () => {
22
- let onClick, wrapper;
23
-
24
- const mkWrapper = (opts = {}) => {
25
- opts = {
26
- classes: { base: 'base' },
27
- height: 200,
28
- hotspotColor: 'rgba(137, 183, 244, 0.65)',
29
- id: '1',
30
- isCorrect: false,
31
- isEvaluateMode: false,
32
- evaluateText: null,
33
- disabled: false,
34
- outlineColor: 'blue',
35
- selected: false,
36
- width: 300,
37
- x: 5,
38
- y: 5,
39
- ...opts,
40
- };
41
-
42
- return shallow(<Rectangle {...opts} onClick={onClick} />);
43
- };
44
-
45
- beforeEach(() => {
46
- onClick = jest.fn();
47
- wrapper = mkWrapper();
48
- });
49
-
50
- describe('snapshots', () => {
51
- describe('outline color', () => {
52
- it('renders', () => {
53
- const wrapper = mkWrapper({ outlineColor: 'red' });
54
- expect(toJson(wrapper)).toMatchSnapshot();
55
- });
56
- });
57
-
58
- describe('outline width', () => {
59
- it('renders with default border width', () => {
60
- const wrapper = mkWrapper();
61
- expect(toJson(wrapper)).toMatchSnapshot();
62
- });
63
-
64
- it('renders with given border width', () => {
65
- const wrapper = mkWrapper({ strokeWidth: 10 });
66
- expect(toJson(wrapper)).toMatchSnapshot();
67
- });
68
- });
69
-
70
- describe('hotspot color', () => {
71
- it('renders', () => {
72
- const wrapper = mkWrapper({ hotspotColor: 'rgba(217, 30, 24, 0.65)' });
73
- expect(toJson(wrapper)).toMatchSnapshot();
74
- });
75
- });
76
-
77
- describe('evaluate with correct answer', () => {
78
- it('renders', () => {
79
- const wrapper = mkWrapper({ isEvaluateMode: true, isCorrect: true, evaluateText: 'Correctly\nselected' });
80
- expect(toJson(wrapper)).toMatchSnapshot();
81
- });
82
- });
83
- });
84
-
85
- describe('in evaluate mode', () => {
86
- const defaultModel = {
87
- onClick,
88
- id: '1',
89
- height: 200,
90
- hotspotColor: 'rgba(137, 183, 244, 0.65)',
91
- disabled: true,
92
- width: 300,
93
- x: 5,
94
- y: 5,
95
- selected: false,
96
- isCorrect: false,
97
- isEvaluateMode: true,
98
- evaluateText: null,
99
- strokeWidth: 5,
100
- outlineColor: 'blue',
101
- markAsCorrect: false,
102
- showCorrectEnabled: false,
103
- };
104
-
105
- const getComponents = (model) => {
106
- const testWrapper = shallowChild(
107
- Rectangle,
108
- {
109
- ...defaultModel,
110
- ...model,
111
- },
112
- 1,
113
- );
114
- const rectangleComponent = testWrapper();
115
- const rectComponent = rectangleComponent.find(Rect);
116
- return {
117
- rectangleComponent,
118
- rectComponent,
119
- };
120
- };
121
-
122
- describe('when correctly selected', () => {
123
- const { rectangleComponent, rectComponent } = getComponents({
124
- selected: true,
125
- isCorrect: true,
126
- });
127
-
128
- it('should have a blue outline', () => {
129
- expect(rectComponent.prop('stroke')).toEqual('blue');
130
- expect(rectComponent.prop('strokeWidth')).toEqual(defaultModel.strokeWidth);
131
- });
132
-
133
- it('should have a green checkmark icon', () => {
134
- const imgComponent = rectangleComponent.find(ImageComponent);
135
- expect(imgComponent.length).toEqual(1);
136
- expect(imgComponent.prop('src')).toEqual(faCorrect);
137
- });
138
- });
139
-
140
- describe('when correctly not selected', () => {
141
- const { rectangleComponent, rectComponent } = getComponents({
142
- selected: false,
143
- isCorrect: true,
144
- });
145
-
146
- it('should have no outline', () => {
147
- expect(rectComponent.prop('strokeWidth')).toEqual(0);
148
- });
149
-
150
- it('should have no icon', () => {
151
- const imgComponent = rectangleComponent.find(ImageComponent);
152
- expect(imgComponent.length).toEqual(0);
153
- });
154
- });
155
-
156
- describe('when incorrectly selected', () => {
157
- const { rectangleComponent, rectComponent } = getComponents({
158
- selected: true,
159
- isCorrect: false,
160
- });
161
-
162
- it('should have a red outline', () => {
163
- expect(rectComponent.prop('stroke')).toEqual('red');
164
- expect(rectComponent.prop('strokeWidth')).toEqual(defaultModel.strokeWidth);
165
- });
166
-
167
- it('should have a red x icon', () => {
168
- const imgComponent = rectangleComponent.find(ImageComponent);
169
- expect(imgComponent.length).toEqual(1);
170
- expect(imgComponent.prop('src')).toEqual(faWrong);
171
- });
172
- });
173
-
174
- describe('when incorrectly not selected', () => {
175
- const { rectangleComponent, rectComponent } = getComponents({
176
- selected: false,
177
- isCorrect: false,
178
- });
179
-
180
- it('should have no outline', () => {
181
- expect(rectComponent.prop('strokeWidth')).toEqual(0);
182
- });
183
-
184
- it('should have a red x icon', () => {
185
- const imgComponent = rectangleComponent.find(ImageComponent);
186
- expect(imgComponent.length).toEqual(1);
187
- expect(imgComponent.prop('src')).toEqual(faWrong);
188
- });
189
- });
190
-
191
- describe('when showing correct answer (showCorrectEnabled = true)', () => {
192
- it('should have a green outline', () => {
193
- const { rectComponent } = getComponents({
194
- showCorrectEnabled: true,
195
- markAsCorrect: true,
196
- });
197
- expect(rectComponent.prop('stroke')).toEqual('green');
198
- expect(rectComponent.prop('strokeWidth')).toEqual(defaultModel.strokeWidth);
199
- });
200
-
201
- it('should have a green checkmark icon', () => {
202
- const { rectangleComponent } = getComponents({
203
- showCorrectEnabled: true,
204
- markAsCorrect: true,
205
- });
206
- const imgComponent = rectangleComponent.find(ImageComponent);
207
- expect(imgComponent.prop('src')).toEqual(faCorrect);
208
- });
209
-
210
- it('should not be selected if the answer is incorrect', () => {
211
- const { rectComponent } = getComponents({
212
- showCorrectEnabled: true,
213
- markAsCorrect: false,
214
- selected: true,
215
- isCorrect: false,
216
- });
217
- expect(rectComponent.prop('strokeWidth')).toEqual(0);
218
- });
219
-
220
- it('should not render an icon if the answer is incorrect', () => {
221
- const { rectangleComponent } = getComponents({
222
- showCorrectEnabled: true,
223
- markAsCorrect: false,
224
- selected: true,
225
- isCorrect: false,
226
- });
227
- const imgComponent = rectangleComponent.find(ImageComponent);
228
- expect(imgComponent.length).toEqual(0);
229
- });
230
- });
231
- });
232
- });