@khanacademy/perseus-editor 2.3.12 → 2.4.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.
@@ -23,6 +23,7 @@ declare class RadioEditor extends React.Component<any> {
23
23
  customKeypad: PropTypes.Requireable<boolean>;
24
24
  nativeKeypadProxy: PropTypes.Requireable<(...args: any[]) => any>;
25
25
  isMobile: PropTypes.Requireable<boolean>;
26
+ useV2Keypad: PropTypes.Requireable<boolean>;
26
27
  setDrawingAreaAvailable: PropTypes.Requireable<(...args: any[]) => any>;
27
28
  useDraftEditor: PropTypes.Requireable<boolean>;
28
29
  hintProgressColor: PropTypes.Requireable<string>;
@@ -33,6 +33,7 @@ declare class RadioEditor extends React.Component<any> {
33
33
  customKeypad: PropTypes.Requireable<boolean>,
34
34
  nativeKeypadProxy: PropTypes.Requireable<(...args: any[]) => any>,
35
35
  isMobile: PropTypes.Requireable<boolean>,
36
+ useV2Keypad: PropTypes.Requireable<boolean>,
36
37
  setDrawingAreaAvailable: PropTypes.Requireable<
37
38
  (...args: any[]) => any
38
39
  >,
@@ -33,6 +33,7 @@ declare class SequenceEditor extends React.Component<SequenceEditorProps> {
33
33
  customKeypad: PropTypes.Requireable<boolean>;
34
34
  nativeKeypadProxy: PropTypes.Requireable<(...args: any[]) => any>;
35
35
  isMobile: PropTypes.Requireable<boolean>;
36
+ useV2Keypad: PropTypes.Requireable<boolean>;
36
37
  setDrawingAreaAvailable: PropTypes.Requireable<(...args: any[]) => any>;
37
38
  useDraftEditor: PropTypes.Requireable<boolean>;
38
39
  hintProgressColor: PropTypes.Requireable<string>;
@@ -45,6 +45,7 @@ declare class SequenceEditor extends React.Component<SequenceEditorProps> {
45
45
  customKeypad: PropTypes.Requireable<boolean>,
46
46
  nativeKeypadProxy: PropTypes.Requireable<(...args: any[]) => any>,
47
47
  isMobile: PropTypes.Requireable<boolean>,
48
+ useV2Keypad: PropTypes.Requireable<boolean>,
48
49
  setDrawingAreaAvailable: PropTypes.Requireable<
49
50
  (...args: any[]) => any
50
51
  >,
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "description": "Perseus editors",
4
4
  "author": "Khan Academy",
5
5
  "license": "MIT",
6
- "version": "2.3.12",
6
+ "version": "2.4.0",
7
7
  "publishConfig": {
8
8
  "access": "public"
9
9
  },
@@ -23,7 +23,7 @@
23
23
  "dependencies": {
24
24
  "@khanacademy/kas": "^0.3.1",
25
25
  "@khanacademy/kmath": "^0.1.1",
26
- "@khanacademy/perseus": "^6.7.0"
26
+ "@khanacademy/perseus": "^7.0.1"
27
27
  },
28
28
  "devDependencies": {
29
29
  "@khanacademy/wonder-blocks-button": "^4.0.8",
@@ -14,10 +14,9 @@ import type {
14
14
  DeviceType,
15
15
  Hint,
16
16
  ImageUploader,
17
- RendererInterface,
18
17
  Version,
19
- KEScore,
20
18
  } from "@khanacademy/perseus";
19
+ import type {RendererInterface, KEScore} from "@khanacademy/perseus-core";
21
20
 
22
21
  const {HUD} = components;
23
22
 
@@ -97,6 +97,27 @@ const ImageEditor: any = createReactClass({
97
97
 
98
98
  const imageSettings = (
99
99
  <div className="image-settings">
100
+ <div>
101
+ <label>
102
+ <div>Preview:</div>
103
+ <img
104
+ alt="Editor preview of image"
105
+ src={backgroundImage.url}
106
+ style={{
107
+ width: "100%",
108
+ }}
109
+ />
110
+ </label>
111
+ </div>
112
+ <div>
113
+ <label>
114
+ <div>Dimensions:</div>
115
+ <p>
116
+ {backgroundImage.width}x{backgroundImage.height}
117
+ </p>
118
+ </label>
119
+ </div>
120
+
100
121
  <div>
101
122
  <label>
102
123
  <div>
@@ -277,7 +298,16 @@ const ImageEditor: any = createReactClass({
277
298
  // silently load the image when the component mounts
278
299
  // silently update url and sizes when the image loads
279
300
  // noisily load the image in response to the author changing it
280
- onUrlChange: function (url, silent) {
301
+ onUrlChange: async function (
302
+ url: string | undefined | null,
303
+ silent: boolean,
304
+ ) {
305
+ // Check if we've been passed something that looks like a URL
306
+ if (!url) {
307
+ this.setUrl(url, 0, 0, silent);
308
+ return;
309
+ }
310
+
281
311
  // All article content must be KA-owned!
282
312
  if (!INTERNALLY_HOSTED_URL_RE.test(url)) {
283
313
  this.setState({
@@ -288,25 +318,18 @@ const ImageEditor: any = createReactClass({
288
318
  });
289
319
  return;
290
320
  }
291
- this.setState({backgroundImageError: ""});
292
321
 
293
- // We update our background image prop after the image loads below. To
294
- // avoid weirdness when we change to a very slow URL, then a much
295
- // faster URL, we keep track of the URL we're trying to change to.
296
- this._leadingUrl = url;
322
+ // Clear previous errors
323
+ this.setState({backgroundImageError: ""});
297
324
 
298
- if (!url) {
299
- this.setUrl(url, 0, 0, silent);
300
- return;
325
+ try {
326
+ const size = await Util.getImageSizeModern(url);
327
+ this.setUrl(url, size[0], size[1], true);
328
+ } catch (error) {
329
+ this.setState({
330
+ backgroundImageError: `There was an error loading the image URL: ${error}`,
331
+ });
301
332
  }
302
-
303
- Util.getImageSize(url, (width, height) => {
304
- if (this._leadingUrl !== url) {
305
- return;
306
- }
307
-
308
- this.setUrl(url, width, height, true);
309
- });
310
333
  },
311
334
 
312
335
  onRangeChange: function (type, newRange) {