@pie-element/drawing-response 3.6.0 → 3.6.1-beta.587

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 (87) hide show
  1. package/CHANGELOG.md +507 -0
  2. package/configure/CHANGELOG.md +446 -0
  3. package/configure/lib/button.js.map +1 -1
  4. package/configure/lib/defaults.js +22 -7
  5. package/configure/lib/defaults.js.map +1 -1
  6. package/configure/lib/image-container.js +44 -24
  7. package/configure/lib/image-container.js.map +1 -1
  8. package/configure/lib/index.js +65 -12
  9. package/configure/lib/index.js.map +1 -1
  10. package/configure/lib/root.js +78 -48
  11. package/configure/lib/root.js.map +1 -1
  12. package/configure/package.json +4 -4
  13. package/configure/src/__tests__/__snapshots__/image-container.test.jsx.snap +3 -2
  14. package/configure/src/__tests__/__snapshots__/root.test.jsx.snap +38 -18
  15. package/configure/src/__tests__/image-container.test.jsx +42 -35
  16. package/configure/src/__tests__/index.test.js +7 -7
  17. package/configure/src/__tests__/root.test.jsx +18 -25
  18. package/configure/src/button.jsx +4 -4
  19. package/configure/src/defaults.js +25 -10
  20. package/configure/src/image-container.jsx +80 -59
  21. package/configure/src/index.js +46 -14
  22. package/configure/src/root.jsx +72 -76
  23. package/controller/CHANGELOG.md +58 -0
  24. package/controller/lib/defaults.js.map +1 -1
  25. package/controller/lib/index.js +13 -12
  26. package/controller/lib/index.js.map +1 -1
  27. package/controller/package.json +1 -1
  28. package/controller/src/__tests__/index.test.js +35 -34
  29. package/controller/src/defaults.js +2 -2
  30. package/controller/src/index.js +13 -17
  31. package/docs/config-schema.json +111 -1
  32. package/docs/config-schema.json.md +87 -3
  33. package/docs/demo/config.js +2 -2
  34. package/docs/demo/generate.js +5 -2
  35. package/docs/demo/session.js +4 -4
  36. package/docs/pie-schema.json +70 -6
  37. package/docs/pie-schema.json.md +55 -4
  38. package/lib/drawing-response/button.js.map +1 -1
  39. package/lib/drawing-response/constants.js.map +1 -1
  40. package/lib/drawing-response/container.js +80 -25
  41. package/lib/drawing-response/container.js.map +1 -1
  42. package/lib/drawing-response/drawable-circle.js +1 -1
  43. package/lib/drawing-response/drawable-circle.js.map +1 -1
  44. package/lib/drawing-response/drawable-eraser.js +1 -1
  45. package/lib/drawing-response/drawable-eraser.js.map +1 -1
  46. package/lib/drawing-response/drawable-free-path.js +1 -1
  47. package/lib/drawing-response/drawable-free-path.js.map +1 -1
  48. package/lib/drawing-response/drawable-helper.js.map +1 -1
  49. package/lib/drawing-response/drawable-image.js +1 -0
  50. package/lib/drawing-response/drawable-image.js.map +1 -1
  51. package/lib/drawing-response/drawable-line.js +1 -1
  52. package/lib/drawing-response/drawable-line.js.map +1 -1
  53. package/lib/drawing-response/drawable-main.js +46 -16
  54. package/lib/drawing-response/drawable-main.js.map +1 -1
  55. package/lib/drawing-response/drawable-palette.js +7 -2
  56. package/lib/drawing-response/drawable-palette.js.map +1 -1
  57. package/lib/drawing-response/drawable-rectangle.js +1 -1
  58. package/lib/drawing-response/drawable-rectangle.js.map +1 -1
  59. package/lib/drawing-response/drawable-text.js +15 -5
  60. package/lib/drawing-response/drawable-text.js.map +1 -1
  61. package/lib/drawing-response/drawable-transformer.js +1 -1
  62. package/lib/drawing-response/drawable-transformer.js.map +1 -1
  63. package/lib/drawing-response/factory.js.map +1 -1
  64. package/lib/drawing-response/icon.js.map +1 -1
  65. package/lib/drawing-response/index.js +11 -15
  66. package/lib/drawing-response/index.js.map +1 -1
  67. package/lib/index.js +4 -1
  68. package/lib/index.js.map +1 -1
  69. package/package.json +5 -4
  70. package/src/__tests__/drawing-index-test.jsx +4 -4
  71. package/src/drawing-response/__tests__/__snapshots__/container.test.jsx.snap +174 -290
  72. package/src/drawing-response/__tests__/__snapshots__/drawing-main.test.jsx.snap +26 -2
  73. package/src/drawing-response/__tests__/container.test.jsx +9 -2
  74. package/src/drawing-response/__tests__/drawable-helper.test.jsx +1 -1
  75. package/src/drawing-response/__tests__/drawing-main.test.jsx +74 -86
  76. package/src/drawing-response/button.jsx +5 -8
  77. package/src/drawing-response/constants.js +42 -34
  78. package/src/drawing-response/container.jsx +93 -70
  79. package/src/drawing-response/drawable-image.jsx +5 -4
  80. package/src/drawing-response/drawable-main.jsx +46 -17
  81. package/src/drawing-response/drawable-palette.jsx +18 -35
  82. package/src/drawing-response/drawable-text.jsx +34 -48
  83. package/src/drawing-response/drawable-transformer.jsx +3 -1
  84. package/src/drawing-response/factory.js +3 -11
  85. package/src/drawing-response/icon.jsx +19 -20
  86. package/src/drawing-response/index.jsx +14 -20
  87. package/src/index.js +8 -11
@@ -3,37 +3,52 @@
3
3
  exports[`Root snapshot renders 1`] = `
4
4
  <div>
5
5
  <ConfigLayout
6
+ hideSettings={false}
6
7
  settings={
7
8
  <Panel
8
9
  configuration={
9
10
  Object {
10
11
  "backgroundImage": Object {
11
- "enabled": true,
12
12
  "label": "Background Image",
13
13
  "settings": true,
14
14
  },
15
+ "maxImageHeight": Object {
16
+ "prompt": 300,
17
+ "teacherInstructions": 300,
18
+ },
19
+ "maxImageWidth": Object {
20
+ "prompt": 300,
21
+ "teacherInstructions": 300,
22
+ },
15
23
  "prompt": Object {
16
24
  "label": "Prompt",
17
25
  "settings": true,
18
26
  },
19
- "rationale": Object {
20
- "label": "Rationale",
21
- "settings": true,
27
+ "settingsPanelDisabled": false,
28
+ "spellCheck": Object {
29
+ "enabled": true,
30
+ "label": "Spellcheck",
31
+ "settings": false,
22
32
  },
23
33
  "teacherInstructions": Object {
24
34
  "label": "Teacher Instructions",
25
35
  "settings": true,
26
36
  },
37
+ "withRubric": Object {
38
+ "label": "Add Rubric",
39
+ "settings": false,
40
+ },
27
41
  }
28
42
  }
29
43
  groups={
30
44
  Object {
31
45
  "Properties": Object {
32
- "rationaleEnabled": undefined,
46
+ "rubricEnabled": false,
47
+ "spellCheckEnabled": false,
33
48
  "teacherInstructionsEnabled": undefined,
34
49
  },
35
50
  "Settings": Object {
36
- "backgroundImage.enabled": undefined,
51
+ "backgroundImageEnabled": undefined,
37
52
  "promptEnabled": undefined,
38
53
  },
39
54
  }
@@ -59,22 +74,27 @@ exports[`Root snapshot renders 1`] = `
59
74
  label="Item Stem"
60
75
  >
61
76
  <EditableHtml
77
+ languageCharactersProps={
78
+ Array [
79
+ Object {
80
+ "language": "spanish",
81
+ },
82
+ Object {
83
+ "language": "special",
84
+ },
85
+ ]
86
+ }
62
87
  markup="Test Prompt"
88
+ maxImageHeight={300}
89
+ maxImageWidth={300}
63
90
  onChange={[Function]}
91
+ toolbarOpts={
92
+ Object {
93
+ "position": "bottom",
94
+ }
95
+ }
64
96
  />
65
97
  </Component>
66
- <div>
67
- <WithStyles(Typography)
68
- variant="subheading"
69
- >
70
- Define Background Image
71
- </WithStyles(Typography)>
72
- <WithStyles(ImageContainer)
73
- imageUrl=""
74
- onImageUpload={[Function]}
75
- onUpdateImageDimension={[Function]}
76
- />
77
- </div>
78
98
  </div>
79
99
  </ConfigLayout>
80
100
  </div>
@@ -5,14 +5,14 @@ import { ImageContainer } from '../image-container';
5
5
 
6
6
  jest.mock('@pie-lib/config-ui', () => ({
7
7
  settings: {
8
- Panel: props => <div {...props} />,
8
+ Panel: (props) => <div {...props} />,
9
9
  toggle: jest.fn(),
10
10
  radio: jest.fn(),
11
- dropdown: jest.fn()
11
+ dropdown: jest.fn(),
12
12
  },
13
13
  layout: {
14
- ConfigLayout: props => <div>{props.children}</div>
15
- }
14
+ ConfigLayout: (props) => <div>{props.children}</div>,
15
+ },
16
16
  }));
17
17
 
18
18
  describe('ImageContainer', () => {
@@ -25,7 +25,7 @@ describe('ImageContainer', () => {
25
25
  classes: {},
26
26
  imageUrl: 'url',
27
27
  onUpdateImageDimension,
28
- onImageUpload
28
+ onImageUpload,
29
29
  };
30
30
  wrapper = () => shallow(<ImageContainer {...props} />);
31
31
  });
@@ -73,30 +73,32 @@ describe('ImageContainer', () => {
73
73
  w.instance().handleOnDrop({
74
74
  preventDefault: jest.fn(),
75
75
  dataTransfer: {
76
- items: [{
77
- kind: 'file',
78
- getAsFile: jest.fn().mockReturnValue({ type: 'image', key: 'item' })
79
- }
76
+ items: [
77
+ {
78
+ kind: 'file',
79
+ getAsFile: jest.fn().mockReturnValue({ type: 'image', key: 'item' }),
80
+ },
80
81
  ],
81
- files: []
82
- }
82
+ files: [],
83
+ },
83
84
  });
84
85
 
85
86
  expect(onImageUpload).toBeCalledWith({ type: 'image', key: 'item' });
86
87
  expect(onImageUpload).toHaveBeenCalledTimes(3);
87
88
  });
88
89
 
89
- it('handleOnDrop calls handleFileRead which doesn\'t call onImageUpload if item is file but not image', () => {
90
+ it("handleOnDrop calls handleFileRead which doesn't call onImageUpload if item is file but not image", () => {
90
91
  w.instance().handleOnDrop({
91
92
  preventDefault: jest.fn(),
92
93
  dataTransfer: {
93
- items: [{
94
- kind: 'file',
95
- getAsFile: jest.fn().mockReturnValue({ type: 'jpg' })
96
- }
94
+ items: [
95
+ {
96
+ kind: 'file',
97
+ getAsFile: jest.fn().mockReturnValue({ type: 'jpg' }),
98
+ },
97
99
  ],
98
- files: []
99
- }
100
+ files: [],
101
+ },
100
102
  });
101
103
 
102
104
  // same times number as in previous test, meaning that is was not called again
@@ -107,30 +109,32 @@ describe('ImageContainer', () => {
107
109
  w.instance().handleOnDrop({
108
110
  preventDefault: jest.fn(),
109
111
  dataTransfer: {
110
- items: [{
111
- kind: 'something else',
112
- getAsFile: jest.fn().mockReturnValue({ type: 'image' })
113
- }
112
+ items: [
113
+ {
114
+ kind: 'something else',
115
+ getAsFile: jest.fn().mockReturnValue({ type: 'image' }),
116
+ },
114
117
  ],
115
- files: [{ type: 'image', key: 'file' }]
116
- }
118
+ files: [{ type: 'image', key: 'file' }],
119
+ },
117
120
  });
118
121
 
119
122
  expect(onImageUpload).toBeCalledWith({ type: 'image', key: 'file' });
120
123
  expect(onImageUpload).toHaveBeenCalledTimes(4);
121
124
  });
122
125
 
123
- it('handleOnDrop calls handleFileRead which doesn\'t call onImageUpload if item is not file and file is not image', () => {
126
+ it("handleOnDrop calls handleFileRead which doesn't call onImageUpload if item is not file and file is not image", () => {
124
127
  w.instance().handleOnDrop({
125
128
  preventDefault: jest.fn(),
126
129
  dataTransfer: {
127
- items: [{
128
- kind: 'something else',
129
- getAsFile: jest.fn().mockReturnValue({ type: 'image' })
130
- }
130
+ items: [
131
+ {
132
+ kind: 'something else',
133
+ getAsFile: jest.fn().mockReturnValue({ type: 'image' }),
134
+ },
131
135
  ],
132
- files: [{ type: 'something else', key: 'file' }]
133
- }
136
+ files: [{ type: 'something else', key: 'file' }],
137
+ },
134
138
  });
135
139
 
136
140
  // same times number as in previous test, meaning that is was not called again
@@ -138,16 +142,20 @@ describe('ImageContainer', () => {
138
142
  });
139
143
 
140
144
  it('handleOnImageLoad calls onUpdateImageDimension', () => {
141
- w.instance().handleOnImageLoad({ target: { offsetHeight: 50, offsetWidth: 50 }});
145
+ w.instance().handleOnImageLoad({
146
+ target: { offsetHeight: 50, offsetWidth: 50, naturalWidth: 50, naturalHeight: 50 },
147
+ });
142
148
 
143
149
  expect(onUpdateImageDimension).toHaveBeenCalledWith({
144
150
  height: 50,
145
- width: 50
151
+ width: 50,
146
152
  });
147
153
  });
148
154
 
149
155
  it('stopResizing calls onUpdateImageDimension', () => {
150
- w.instance().handleOnImageLoad({ target: { offsetHeight: 50, offsetWidth: 50 }});
156
+ w.instance().handleOnImageLoad({
157
+ target: { offsetHeight: 50, offsetWidth: 50, naturalWidth: 50, naturalHeight: 50 },
158
+ });
151
159
 
152
160
  expect(onUpdateImageDimension).toHaveBeenCalledWith(w.instance().state.dimensions);
153
161
  });
@@ -157,4 +165,3 @@ describe('ImageContainer', () => {
157
165
  });
158
166
  });
159
167
  });
160
-
@@ -4,13 +4,13 @@ import { shallow } from 'enzyme';
4
4
 
5
5
  jest.mock('@pie-lib/config-ui', () => ({
6
6
  choiceUtils: {
7
- firstAvailableIndex: jest.fn()
7
+ firstAvailableIndex: jest.fn(),
8
8
  },
9
9
  settings: {
10
- Panel: props => <div {...props} />,
10
+ Panel: (props) => <div {...props} />,
11
11
  toggle: jest.fn(),
12
- radio: jest.fn()
13
- }
12
+ radio: jest.fn(),
13
+ },
14
14
  }));
15
15
 
16
16
  const model = () => ({
@@ -19,12 +19,12 @@ const model = () => ({
19
19
  imageUrl: '',
20
20
  imageDimensions: {
21
21
  height: 0,
22
- width: 0
23
- }
22
+ width: 0,
23
+ },
24
24
  });
25
25
 
26
26
  jest.mock('react-dom', () => ({
27
- render: jest.fn()
27
+ render: jest.fn(),
28
28
  }));
29
29
 
30
30
  describe('index', () => {
@@ -6,14 +6,14 @@ import defaults from '../defaults';
6
6
 
7
7
  jest.mock('@pie-lib/config-ui', () => ({
8
8
  settings: {
9
- Panel: props => <div {...props} />,
9
+ Panel: (props) => <div {...props} />,
10
10
  toggle: jest.fn(),
11
11
  radio: jest.fn(),
12
- dropdown: jest.fn()
12
+ dropdown: jest.fn(),
13
13
  },
14
14
  layout: {
15
- ConfigLayout: props => <div>{props.children}</div>
16
- }
15
+ ConfigLayout: (props) => <div>{props.children}</div>,
16
+ },
17
17
  }));
18
18
 
19
19
  const model = {
@@ -22,8 +22,8 @@ const model = {
22
22
  imageUrl: '',
23
23
  imageDimensions: {
24
24
  height: 100,
25
- width: 100
26
- }
25
+ width: 100,
26
+ },
27
27
  };
28
28
 
29
29
  describe('Root', () => {
@@ -58,44 +58,37 @@ describe('Root', () => {
58
58
  it('onPromptChanged calls onModelChanged', () => {
59
59
  w.instance().onPromptChanged('New Prompt');
60
60
 
61
- expect(onModelChanged).toHaveBeenCalledWith(
62
- expect.objectContaining({ prompt: 'New Prompt' }))
63
- });
64
-
65
- it('onRationaleChanged calls onModelChanged', () => {
66
- w.instance().onRationaleChanged('New Rationale');
67
-
68
- expect(onModelChanged).toHaveBeenCalledWith(
69
- expect.objectContaining({ rationale: 'New Rationale' }))
61
+ expect(onModelChanged).toHaveBeenCalledWith(expect.objectContaining({ prompt: 'New Prompt' }));
70
62
  });
71
63
 
72
64
  it('onTeacherInstructionsChanged calls onModelChanged', () => {
73
65
  w.instance().onTeacherInstructionsChanged('New Teacher Instructions');
74
66
 
75
67
  expect(onModelChanged).toHaveBeenCalledWith(
76
- expect.objectContaining({ teacherInstructions: 'New Teacher Instructions' }))
68
+ expect.objectContaining({ teacherInstructions: 'New Teacher Instructions' }),
69
+ );
77
70
  });
78
71
 
79
72
  it('onUpdateImageDimension calls onModelChanged', () => {
80
73
  w.instance().onUpdateImageDimension({
81
74
  height: 200,
82
- width: 200
75
+ width: 200,
83
76
  });
84
77
 
85
78
  expect(onModelChanged).toHaveBeenCalledWith(
86
- expect.objectContaining({ imageDimensions: {
87
- height: 200,
88
- width: 200
89
- }
90
- }))
79
+ expect.objectContaining({
80
+ imageDimensions: {
81
+ height: 200,
82
+ width: 200,
83
+ },
84
+ }),
85
+ );
91
86
  });
92
87
 
93
88
  it('onImageUpload calls onModelChanged', () => {
94
89
  w.instance().onImageUpload('url');
95
90
 
96
- expect(onModelChanged).toHaveBeenCalledWith(
97
- expect.objectContaining({ imageUrl: 'url' }))
91
+ expect(onModelChanged).toHaveBeenCalledWith(expect.objectContaining({ imageUrl: 'url' }));
98
92
  });
99
93
  });
100
94
  });
101
-
@@ -22,20 +22,20 @@ RawButton.propTypes = {
22
22
  className: PropTypes.string,
23
23
  disabled: PropTypes.bool,
24
24
  label: PropTypes.string,
25
- onClick: PropTypes.func
25
+ onClick: PropTypes.func,
26
26
  };
27
27
 
28
28
  RawButton.defaultProps = {
29
29
  className: '',
30
30
  disabled: false,
31
31
  label: 'Add',
32
- onClick: () => {}
32
+ onClick: () => {},
33
33
  };
34
34
 
35
35
  const styles = () => ({
36
36
  addButton: {
37
- marginLeft: 8
38
- }
37
+ marginLeft: 8,
38
+ },
39
39
  });
40
40
 
41
41
  const ButtonStyled = withStyles(styles)(RawButton);
@@ -4,30 +4,45 @@ export default {
4
4
  imageUrl: '',
5
5
  imageDimensions: {
6
6
  height: 0,
7
- width: 0
7
+ width: 0,
8
8
  },
9
- rationaleEnabled: true,
10
9
  promptEnabled: true,
11
10
  teacherInstructionsEnabled: true,
12
11
  studentInstructionsEnabled: true,
12
+ backgroundImageEnabled: true,
13
+ spellCheckEnabled: true,
14
+ toolbarEditorPosition: 'bottom',
13
15
  },
14
16
  configuration: {
17
+ spellCheck: {
18
+ label: 'Spellcheck',
19
+ settings: false,
20
+ enabled: true,
21
+ },
15
22
  backgroundImage: {
16
23
  settings: true,
17
24
  label: 'Background Image',
18
- enabled: true
19
- },
20
- rationale: {
21
- settings: true,
22
- label: 'Rationale'
23
25
  },
24
26
  prompt: {
25
27
  settings: true,
26
- label: 'Prompt'
28
+ label: 'Prompt',
27
29
  },
30
+ settingsPanelDisabled: false,
28
31
  teacherInstructions: {
29
32
  settings: true,
30
33
  label: 'Teacher Instructions',
31
- }
32
- }
34
+ },
35
+ maxImageWidth: {
36
+ teacherInstructions: 300,
37
+ prompt: 300,
38
+ },
39
+ maxImageHeight: {
40
+ teacherInstructions: 300,
41
+ prompt: 300,
42
+ },
43
+ withRubric: {
44
+ settings: false,
45
+ label: 'Add Rubric',
46
+ },
47
+ },
33
48
  };