@khanacademy/perseus 1.1.1 → 1.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/dist/es/index.css +1 -0
  3. package/dist/es/index.js +15254 -15218
  4. package/dist/es/index.js.map +1 -1
  5. package/dist/index.css +1 -0
  6. package/dist/index.js +15270 -15233
  7. package/dist/index.js.map +1 -1
  8. package/dist/strings.js +1 -0
  9. package/package.json +1 -1
  10. package/src/__stories__/hints-renderer.stories.jsx +52 -0
  11. package/src/hints-renderer.jsx +13 -4
  12. package/src/mixins/__tests__/widget-prop-blacklist_test.js +23 -0
  13. package/src/mixins/widget-prop-blacklist.js +15 -1
  14. package/src/multi-items/__tests__/__snapshots__/multi-renderer_test.js.snap +30 -10
  15. package/src/styles/widgets/passage.less +1 -0
  16. package/src/types.js +1 -1
  17. package/src/widgets/__tests__/__snapshots__/graded-group-set-jipt_test.jsx.snap +3 -3
  18. package/src/widgets/__tests__/__snapshots__/graded-group-set_test.jsx.snap +7 -1
  19. package/src/widgets/__tests__/__snapshots__/graded-group_test.jsx.snap +2 -2
  20. package/src/widgets/__tests__/__snapshots__/group_test.jsx.snap +30 -10
  21. package/src/widgets/__tests__/__snapshots__/passage-ref_test.jsx.snap +3 -3
  22. package/src/widgets/__tests__/__snapshots__/passage_test.jsx.snap +6 -6
  23. package/src/widgets/__tests__/__snapshots__/radio_test.jsx.snap +300 -218
  24. package/src/widgets/__tests__/radio/base-radio_test.jsx +90 -6
  25. package/src/widgets/__tests__/radio/choice-icon_test.jsx +74 -0
  26. package/src/widgets/__tests__/radio/choice_test.jsx +39 -30
  27. package/src/widgets/__tests__/radio_test.jsx +228 -22
  28. package/src/widgets/graded-group-set.jsx +8 -1
  29. package/src/widgets/graded-group.jsx +2 -1
  30. package/src/widgets/passage-ref.jsx +21 -5
  31. package/src/widgets/passage.jsx +3 -1
  32. package/src/widgets/radio/__stories__/base-radio.stories.jsx +7 -3
  33. package/src/widgets/radio/base-radio.jsx +3 -1
  34. package/src/widgets/radio/choice-icon/cross-out-line.jsx +3 -2
  35. package/src/widgets/radio/choice-icon/library-choice-icon.jsx +17 -6
  36. package/src/widgets/radio/choice.jsx +2 -1
package/dist/strings.js CHANGED
@@ -52,6 +52,7 @@ module.exports = [
52
52
  i18n._("Correct (but you crossed it out)", {}),
53
53
  i18n._("Correct (selected)", {}),
54
54
  i18n._("Correct!", {}),
55
+ i18n._("Current", {}),
55
56
  // I18N: As in the command, "Dilate the polygon"
56
57
  i18n._("Dilate", {}),
57
58
  i18n._("dilation", {}),
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "description": "Core Perseus API (includes renderers and widgets)",
4
4
  "author": "Khan Academy",
5
5
  "license": "MIT",
6
- "version": "1.1.1",
6
+ "version": "1.1.2",
7
7
  "publishConfig": {
8
8
  "access": "public"
9
9
  },
@@ -0,0 +1,52 @@
1
+ // @flow
2
+
3
+ import React from "react";
4
+
5
+ import HintsRenderer from "../hints-renderer.jsx";
6
+
7
+ type StoryArgs = {|
8
+ hints: $ReadOnlyArray<$FlowFixMe>,
9
+ hintsVisible: number,
10
+ |};
11
+
12
+ type Story = {|
13
+ title: string,
14
+ argTypes: $FlowFixMe,
15
+ |};
16
+
17
+ export default ({
18
+ title: "Perseus/Renderers/Hints Renderer",
19
+ argTypes: {
20
+ hints: {
21
+ control: "object",
22
+ defaultValue: [
23
+ {
24
+ content: "this is hint 1",
25
+ images: {},
26
+ replace: false,
27
+ widgets: {},
28
+ },
29
+ {
30
+ content: "this is hint 2",
31
+ images: {},
32
+ replace: false,
33
+ widgets: {},
34
+ },
35
+ {
36
+ content: "this is hint 3",
37
+ images: {},
38
+ replace: false,
39
+ widgets: {},
40
+ },
41
+ ],
42
+ },
43
+ hintsVisible: {
44
+ control: {type: "number", min: 0},
45
+ defaultValue: 3,
46
+ },
47
+ },
48
+ }: Story);
49
+
50
+ export const Interactive = (args: StoryArgs): $FlowFixMe => {
51
+ return <HintsRenderer {...args} />;
52
+ };
@@ -26,6 +26,8 @@ import type {APIOptionsWithDefaults} from "./types.js";
26
26
  type Props = {|
27
27
  ...React.ElementConfig<Renderer>,
28
28
  className?: string,
29
+ // note (mcurtis): I think this should be $ReadOnlyArray<PerseusRenderer>,
30
+ // but things spiraled out of control when I tried to change it
29
31
  hints: $ReadOnlyArray<$FlowFixMe>,
30
32
  hintsVisible?: number,
31
33
  |};
@@ -72,11 +74,18 @@ class HintsRenderer extends React.Component<Props, State> {
72
74
  this._cacheHintImages();
73
75
  }
74
76
 
77
+ // Force number to make Flow happy
78
+ const prevHintsVisible = prevProps.hintsVisible || 0;
79
+ const nextHintsVisible = this.props.hintsVisible || 0;
80
+
75
81
  // When a new hint is displayed we immediately focus it
76
- // $FlowFixMe[invalid-compare]
77
- if (prevProps.hintsVisible < this.props.hintsVisible) {
78
- // $FlowFixMe[unsafe-addition]
79
- const pos = this.props.hintsVisible - 1;
82
+ // (keeping within the boundaries of hint count)
83
+ if (
84
+ prevHintsVisible < nextHintsVisible &&
85
+ nextHintsVisible <= this.props.hints.length &&
86
+ nextHintsVisible >= 0
87
+ ) {
88
+ const pos = nextHintsVisible - 1;
80
89
  // $FlowFixMe[prop-missing]
81
90
  // $FlowFixMe[incompatible-use]
82
91
  ReactDOM.findDOMNode(this.refs["hintRenderer" + pos]).focus(); // eslint-disable-line react/no-string-refs
@@ -0,0 +1,23 @@
1
+ // @flow
2
+
3
+ import {removeDenylistProps} from "../widget-prop-blacklist.js";
4
+
5
+ describe("removeDenylistProps", () => {
6
+ it("removes props that are in denylist from input", () => {
7
+ // Arrange
8
+ const props = {
9
+ // These props are not on the denylist
10
+ foo: "bar",
11
+ gandalf: "awesome",
12
+ // These props are on the denylist
13
+ key: "f-sharp",
14
+ id: 42,
15
+ };
16
+
17
+ // Act
18
+ const result = removeDenylistProps(props);
19
+
20
+ // Assert
21
+ expect(result).toStrictEqual({foo: "bar", gandalf: "awesome"});
22
+ });
23
+ });
@@ -9,8 +9,10 @@
9
9
  * circular JSON structures sometimes).
10
10
  *
11
11
  * This blacklists things that we know don't need to be serialized.
12
+ *
13
+ * TODO(TB): Go through and update usage of BLACKLIST to DENYLIST: https://khanacademy.atlassian.net/browse/LP-13149?atlOrigin=eyJpIjoiNTI0Y2UwNzQ0MzA4NDYzOGI1YWRmNjEwY2E5YzZlZWUiLCJwIjoiaiJ9
12
14
  */
13
- export default [
15
+ const denylist = [
14
16
  // standard props "added" by react
15
17
  // (technically the renderer still adds them)
16
18
  "key",
@@ -34,3 +36,15 @@ export default [
34
36
  "trackInteraction",
35
37
  "keypadElement",
36
38
  ];
39
+
40
+ export const removeDenylistProps = (props: Object): Object => {
41
+ const newProps = {...props};
42
+ for (const prop of denylist) {
43
+ if (prop in newProps) {
44
+ delete newProps[prop];
45
+ }
46
+ }
47
+ return newProps;
48
+ };
49
+
50
+ export default denylist;
@@ -218,7 +218,7 @@ exports[`multi-item renderer should snapshot: initial render 1`] = `
218
218
  type="button"
219
219
  >
220
220
  <div
221
- style="display: flex; flex-direction: row; justify-content: center; align-content: center; padding-top: 8px; padding-bottom: 8px;"
221
+ style="display: flex; flex-direction: row; justify-content: center; align-content: center; padding-top: 8px; padding-bottom: 8px; padding-left: 8px;"
222
222
  >
223
223
  <div
224
224
  class="iconWrapper_17y0hv9"
@@ -234,7 +234,11 @@ exports[`multi-item renderer should snapshot: initial render 1`] = `
234
234
  data-test-id="choice-icon__library-choice-icon"
235
235
  style="border-color: rgba(33,36,44,0.64); color: rgba(33, 36, 44, 0.64); border-radius: 24px;"
236
236
  >
237
- A
237
+ <div
238
+ class="innerWrapper_177sg8x"
239
+ >
240
+ A
241
+ </div>
238
242
  </div>
239
243
  </span>
240
244
  </div>
@@ -389,7 +393,7 @@ exports[`multi-item renderer should snapshot: initial render 1`] = `
389
393
  type="button"
390
394
  >
391
395
  <div
392
- style="display: flex; flex-direction: row; justify-content: center; align-content: center; padding-top: 8px; padding-bottom: 8px;"
396
+ style="display: flex; flex-direction: row; justify-content: center; align-content: center; padding-top: 8px; padding-bottom: 8px; padding-left: 8px;"
393
397
  >
394
398
  <div
395
399
  class="iconWrapper_17y0hv9"
@@ -405,7 +409,11 @@ exports[`multi-item renderer should snapshot: initial render 1`] = `
405
409
  data-test-id="choice-icon__library-choice-icon"
406
410
  style="border-color: rgba(33,36,44,0.64); color: rgba(33, 36, 44, 0.64); border-radius: 24px;"
407
411
  >
408
- B
412
+ <div
413
+ class="innerWrapper_177sg8x"
414
+ >
415
+ B
416
+ </div>
409
417
  </div>
410
418
  </span>
411
419
  </div>
@@ -560,7 +568,7 @@ exports[`multi-item renderer should snapshot: initial render 1`] = `
560
568
  type="button"
561
569
  >
562
570
  <div
563
- style="display: flex; flex-direction: row; justify-content: center; align-content: center; padding-top: 8px; padding-bottom: 8px;"
571
+ style="display: flex; flex-direction: row; justify-content: center; align-content: center; padding-top: 8px; padding-bottom: 8px; padding-left: 8px;"
564
572
  >
565
573
  <div
566
574
  class="iconWrapper_17y0hv9"
@@ -576,7 +584,11 @@ exports[`multi-item renderer should snapshot: initial render 1`] = `
576
584
  data-test-id="choice-icon__library-choice-icon"
577
585
  style="border-color: rgba(33,36,44,0.64); color: rgba(33, 36, 44, 0.64); border-radius: 24px;"
578
586
  >
579
- C
587
+ <div
588
+ class="innerWrapper_177sg8x"
589
+ >
590
+ C
591
+ </div>
580
592
  </div>
581
593
  </span>
582
594
  </div>
@@ -731,7 +743,7 @@ exports[`multi-item renderer should snapshot: initial render 1`] = `
731
743
  type="button"
732
744
  >
733
745
  <div
734
- style="display: flex; flex-direction: row; justify-content: center; align-content: center; padding-top: 8px; padding-bottom: 8px;"
746
+ style="display: flex; flex-direction: row; justify-content: center; align-content: center; padding-top: 8px; padding-bottom: 8px; padding-left: 8px;"
735
747
  >
736
748
  <div
737
749
  class="iconWrapper_17y0hv9"
@@ -747,7 +759,11 @@ exports[`multi-item renderer should snapshot: initial render 1`] = `
747
759
  data-test-id="choice-icon__library-choice-icon"
748
760
  style="border-color: rgba(33,36,44,0.64); color: rgba(33, 36, 44, 0.64); border-radius: 24px;"
749
761
  >
750
- D
762
+ <div
763
+ class="innerWrapper_177sg8x"
764
+ >
765
+ D
766
+ </div>
751
767
  </div>
752
768
  </span>
753
769
  </div>
@@ -902,7 +918,7 @@ exports[`multi-item renderer should snapshot: initial render 1`] = `
902
918
  type="button"
903
919
  >
904
920
  <div
905
- style="display: flex; flex-direction: row; justify-content: center; align-content: center; padding-top: 8px; padding-bottom: 8px;"
921
+ style="display: flex; flex-direction: row; justify-content: center; align-content: center; padding-top: 8px; padding-bottom: 8px; padding-left: 8px;"
906
922
  >
907
923
  <div
908
924
  class="iconWrapper_17y0hv9"
@@ -918,7 +934,11 @@ exports[`multi-item renderer should snapshot: initial render 1`] = `
918
934
  data-test-id="choice-icon__library-choice-icon"
919
935
  style="border-color: rgba(33,36,44,0.64); color: rgba(33, 36, 44, 0.64); border-radius: 24px;"
920
936
  >
921
- E
937
+ <div
938
+ class="innerWrapper_177sg8x"
939
+ >
940
+ E
941
+ </div>
922
942
  </div>
923
943
  </span>
924
944
  </div>
@@ -50,6 +50,7 @@
50
50
  font-weight: 400;
51
51
  font-size: 20px;
52
52
  line-height: 24px;
53
+ text-indent: 20px;
53
54
 
54
55
  span {
55
56
  text-indent: 0;
package/src/types.js CHANGED
@@ -491,7 +491,7 @@ export type WidgetProps<RenderProps, Rubric> = {|
491
491
  questionCompleted?: boolean,
492
492
  onFocus: (blurPath: FocusPath) => void,
493
493
  onBlur: (blurPath: FocusPath) => void,
494
- findWidgets: (FilterCriterion) => any,
494
+ findWidgets: (FilterCriterion) => $ReadOnlyArray<Widget>,
495
495
  reviewModeRubric: Rubric,
496
496
  onChange: ChangeHandler,
497
497
  trackInteraction: (extraData?: any) => void,
@@ -33,7 +33,7 @@ exports[`graded-group-set should render all graded groups 1`] = `
33
33
  class="perseus-graded-group"
34
34
  >
35
35
  <div
36
- class="title_6pk9ag"
36
+ class="title_1lagzkb"
37
37
  >
38
38
  Problem 1a
39
39
  </div>
@@ -270,7 +270,7 @@ exports[`graded-group-set should render all graded groups 1`] = `
270
270
  class="perseus-graded-group"
271
271
  >
272
272
  <div
273
- class="title_6pk9ag"
273
+ class="title_1lagzkb"
274
274
  >
275
275
  Problem 1b
276
276
  </div>
@@ -507,7 +507,7 @@ exports[`graded-group-set should render all graded groups 1`] = `
507
507
  class="perseus-graded-group"
508
508
  >
509
509
  <div
510
- class="title_6pk9ag"
510
+ class="title_1lagzkb"
511
511
  >
512
512
  Problem 1c
513
513
  </div>
@@ -47,7 +47,13 @@ exports[`graded group widget should snapshot 1`] = `
47
47
  aria-label="Skip to Problem 1a"
48
48
  class="indicator_1ezvcme-o_O-selectedIndicator_1v68a6x"
49
49
  role="button"
50
- />
50
+ >
51
+ <span
52
+ class="srOnly_19bpjuy"
53
+ >
54
+ Current
55
+ </span>
56
+ </div>
51
57
  <div
52
58
  aria-label="Skip to Problem 1b"
53
59
  class="indicator_1ezvcme"
@@ -36,7 +36,7 @@ exports[`graded-group should snapshot: initial render (mobile: false) 1`] = `
36
36
  class="perseus-graded-group"
37
37
  >
38
38
  <div
39
- class="title_6pk9ag"
39
+ class="title_1lagzkb"
40
40
  >
41
41
  Metabolic strategies of bacteria
42
42
  </div>
@@ -525,7 +525,7 @@ exports[`graded-group should snapshot: initial render (mobile: true) 1`] = `
525
525
  class="gradedGroup_14sgdtb perseus-graded-group"
526
526
  >
527
527
  <div
528
- class="title_6pk9ag"
528
+ class="title_1lagzkb"
529
529
  >
530
530
  Metabolic strategies of bacteria
531
531
  </div>
@@ -197,7 +197,7 @@ exports[`group widget should snapshot: initial render 1`] = `
197
197
  type="button"
198
198
  >
199
199
  <div
200
- style="display: flex; flex-direction: row; justify-content: center; align-content: center; padding-top: 8px; padding-bottom: 8px;"
200
+ style="display: flex; flex-direction: row; justify-content: center; align-content: center; padding-top: 8px; padding-bottom: 8px; padding-left: 8px;"
201
201
  >
202
202
  <div
203
203
  class="iconWrapper_17y0hv9"
@@ -213,7 +213,11 @@ exports[`group widget should snapshot: initial render 1`] = `
213
213
  data-test-id="choice-icon__library-choice-icon"
214
214
  style="border-color: rgba(33,36,44,0.64); color: rgba(33, 36, 44, 0.64); border-radius: 24px;"
215
215
  >
216
- A
216
+ <div
217
+ class="innerWrapper_177sg8x"
218
+ >
219
+ A
220
+ </div>
217
221
  </div>
218
222
  </span>
219
223
  </div>
@@ -316,7 +320,7 @@ exports[`group widget should snapshot: initial render 1`] = `
316
320
  type="button"
317
321
  >
318
322
  <div
319
- style="display: flex; flex-direction: row; justify-content: center; align-content: center; padding-top: 8px; padding-bottom: 8px;"
323
+ style="display: flex; flex-direction: row; justify-content: center; align-content: center; padding-top: 8px; padding-bottom: 8px; padding-left: 8px;"
320
324
  >
321
325
  <div
322
326
  class="iconWrapper_17y0hv9"
@@ -332,7 +336,11 @@ exports[`group widget should snapshot: initial render 1`] = `
332
336
  data-test-id="choice-icon__library-choice-icon"
333
337
  style="border-color: rgba(33,36,44,0.64); color: rgba(33, 36, 44, 0.64); border-radius: 24px;"
334
338
  >
335
- B
339
+ <div
340
+ class="innerWrapper_177sg8x"
341
+ >
342
+ B
343
+ </div>
336
344
  </div>
337
345
  </span>
338
346
  </div>
@@ -435,7 +443,7 @@ exports[`group widget should snapshot: initial render 1`] = `
435
443
  type="button"
436
444
  >
437
445
  <div
438
- style="display: flex; flex-direction: row; justify-content: center; align-content: center; padding-top: 8px; padding-bottom: 8px;"
446
+ style="display: flex; flex-direction: row; justify-content: center; align-content: center; padding-top: 8px; padding-bottom: 8px; padding-left: 8px;"
439
447
  >
440
448
  <div
441
449
  class="iconWrapper_17y0hv9"
@@ -451,7 +459,11 @@ exports[`group widget should snapshot: initial render 1`] = `
451
459
  data-test-id="choice-icon__library-choice-icon"
452
460
  style="border-color: rgba(33,36,44,0.64); color: rgba(33, 36, 44, 0.64); border-radius: 24px;"
453
461
  >
454
- C
462
+ <div
463
+ class="innerWrapper_177sg8x"
464
+ >
465
+ C
466
+ </div>
455
467
  </div>
456
468
  </span>
457
469
  </div>
@@ -554,7 +566,7 @@ exports[`group widget should snapshot: initial render 1`] = `
554
566
  type="button"
555
567
  >
556
568
  <div
557
- style="display: flex; flex-direction: row; justify-content: center; align-content: center; padding-top: 8px; padding-bottom: 8px;"
569
+ style="display: flex; flex-direction: row; justify-content: center; align-content: center; padding-top: 8px; padding-bottom: 8px; padding-left: 8px;"
558
570
  >
559
571
  <div
560
572
  class="iconWrapper_17y0hv9"
@@ -570,7 +582,11 @@ exports[`group widget should snapshot: initial render 1`] = `
570
582
  data-test-id="choice-icon__library-choice-icon"
571
583
  style="border-color: rgba(33,36,44,0.64); color: rgba(33, 36, 44, 0.64); border-radius: 24px;"
572
584
  >
573
- D
585
+ <div
586
+ class="innerWrapper_177sg8x"
587
+ >
588
+ D
589
+ </div>
574
590
  </div>
575
591
  </span>
576
592
  </div>
@@ -673,7 +689,7 @@ exports[`group widget should snapshot: initial render 1`] = `
673
689
  type="button"
674
690
  >
675
691
  <div
676
- style="display: flex; flex-direction: row; justify-content: center; align-content: center; padding-top: 8px; padding-bottom: 8px;"
692
+ style="display: flex; flex-direction: row; justify-content: center; align-content: center; padding-top: 8px; padding-bottom: 8px; padding-left: 8px;"
677
693
  >
678
694
  <div
679
695
  class="iconWrapper_17y0hv9"
@@ -689,7 +705,11 @@ exports[`group widget should snapshot: initial render 1`] = `
689
705
  data-test-id="choice-icon__library-choice-icon"
690
706
  style="border-color: rgba(33,36,44,0.64); color: rgba(33, 36, 44, 0.64); border-radius: 24px;"
691
707
  >
692
- E
708
+ <div
709
+ class="innerWrapper_177sg8x"
710
+ >
711
+ E
712
+ </div>
693
713
  </div>
694
714
  </span>
695
715
  </div>
@@ -55,7 +55,7 @@ exports[`passage-ref widget should render with invalid reference 1`] = `
55
55
  <div>
56
56
  <div>
57
57
  <div
58
- class="measurer_1ugaxv"
58
+ class="measurer_vtwrnx"
59
59
  >
60
60
  <div>
61
61
  <div
@@ -200,7 +200,7 @@ exports[`passage-ref widget should render with multi-line reference 1`] = `
200
200
  <div>
201
201
  <div>
202
202
  <div
203
- class="measurer_1ugaxv"
203
+ class="measurer_vtwrnx"
204
204
  >
205
205
  <div>
206
206
  <div
@@ -350,7 +350,7 @@ exports[`passage-ref widget should render with single-line reference 1`] = `
350
350
  <div>
351
351
  <div>
352
352
  <div
353
- class="measurer_1ugaxv"
353
+ class="measurer_vtwrnx"
354
354
  >
355
355
  <div>
356
356
  <div
@@ -219,7 +219,7 @@ exports[`passage widget should snapshot multiple passages (mobile: false) 1`] =
219
219
  <div>
220
220
  <div>
221
221
  <div
222
- class="measurer_1ugaxv"
222
+ class="measurer_vtwrnx"
223
223
  >
224
224
  <div>
225
225
  <div
@@ -711,7 +711,7 @@ exports[`passage widget should snapshot multiple passages (mobile: false) 1`] =
711
711
  <div>
712
712
  <div>
713
713
  <div
714
- class="measurer_1ugaxv"
714
+ class="measurer_vtwrnx"
715
715
  >
716
716
  <div>
717
717
  <div
@@ -1090,7 +1090,7 @@ exports[`passage widget should snapshot multiple passages (mobile: true) 1`] = `
1090
1090
  <div>
1091
1091
  <div>
1092
1092
  <div
1093
- class="measurer_1ugaxv"
1093
+ class="measurer_vtwrnx"
1094
1094
  >
1095
1095
  <div>
1096
1096
  <div
@@ -1582,7 +1582,7 @@ exports[`passage widget should snapshot multiple passages (mobile: true) 1`] = `
1582
1582
  <div>
1583
1583
  <div>
1584
1584
  <div
1585
- class="measurer_1ugaxv"
1585
+ class="measurer_vtwrnx"
1586
1586
  >
1587
1587
  <div>
1588
1588
  <div
@@ -1840,7 +1840,7 @@ exports[`passage widget should snapshot simple passage (mobile: false) 1`] = `
1840
1840
  <div>
1841
1841
  <div>
1842
1842
  <div
1843
- class="measurer_1ugaxv"
1843
+ class="measurer_vtwrnx"
1844
1844
  >
1845
1845
  <div>
1846
1846
  <div
@@ -1941,7 +1941,7 @@ exports[`passage widget should snapshot simple passage (mobile: true) 1`] = `
1941
1941
  <div>
1942
1942
  <div>
1943
1943
  <div
1944
- class="measurer_1ugaxv"
1944
+ class="measurer_vtwrnx"
1945
1945
  >
1946
1946
  <div>
1947
1947
  <div