@khanacademy/perseus 0.4.3 → 1.1.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 (71) hide show
  1. package/.eslintrc.js +6 -1
  2. package/CHANGELOG.md +45 -0
  3. package/dist/es/index.css +15 -8
  4. package/dist/es/index.js +1214 -1404
  5. package/dist/es/index.js.map +1 -1
  6. package/dist/index.css +15 -8
  7. package/dist/index.js +1217 -1411
  8. package/dist/index.js.map +1 -1
  9. package/dist/strings.js +0 -4
  10. package/package.json +9 -8
  11. package/src/components/number-input.jsx +2 -2
  12. package/src/components/simple-keypad-input.jsx +18 -21
  13. package/src/index.js +1 -1
  14. package/src/multi-items/__tests__/__snapshots__/multi-renderer_test.js.snap +426 -135
  15. package/src/multi-items/__tests__/multi-renderer_test.js +9 -9
  16. package/src/perseus-api.jsx +10 -36
  17. package/src/perseus-types.js +18 -145
  18. package/src/styles/constants.js +0 -2
  19. package/src/styles/perseus-renderer.less +8 -2
  20. package/src/styles/variables.less +0 -2
  21. package/src/styles/widgets/passage.less +9 -5
  22. package/src/types.js +18 -35
  23. package/src/util/answer-types.js +2 -3
  24. package/src/util/math.js +3 -10
  25. package/src/util.js +0 -6
  26. package/src/version.js +1 -1
  27. package/src/widgets/__stories__/numeric-input.stories.jsx +43 -2
  28. package/src/widgets/__testdata__/base-radio_testdata.js +22 -0
  29. package/src/widgets/__tests__/__snapshots__/definition_test.js.snap +4 -4
  30. package/src/widgets/__tests__/__snapshots__/group_test.jsx.snap +291 -130
  31. package/src/widgets/__tests__/__snapshots__/radio_test.jsx.snap +3293 -1415
  32. package/src/widgets/__tests__/group_test.jsx +4 -4
  33. package/src/widgets/__tests__/numeric-input_test.jsx +12 -8
  34. package/src/widgets/__tests__/passage_test.jsx +81 -0
  35. package/src/widgets/__tests__/radio/base-radio_test.jsx +291 -41
  36. package/src/widgets/__tests__/radio/choice-icon_test.jsx +67 -0
  37. package/src/widgets/__tests__/radio/choice_test.jsx +302 -0
  38. package/src/widgets/__tests__/radio/focus-ring_test.jsx +23 -0
  39. package/src/widgets/__tests__/radio/option-status_test.jsx +65 -0
  40. package/src/widgets/__tests__/radio_test.jsx +39 -15
  41. package/src/widgets/definition.jsx +1 -1
  42. package/src/widgets/group.jsx +84 -102
  43. package/src/widgets/input-number.jsx +6 -1
  44. package/src/widgets/numeric-input.jsx +87 -80
  45. package/src/widgets/passage/__tests__/passage-markdown_test.jsx +0 -9
  46. package/src/widgets/passage/get-line-height-for-node.js +4 -5
  47. package/src/widgets/passage/passage-markdown.jsx +176 -120
  48. package/src/widgets/passage.jsx +48 -46
  49. package/src/widgets/radio/__stories__/base-radio.stories.jsx +164 -17
  50. package/src/widgets/radio/__stories__/choice-icon.stories.jsx +202 -111
  51. package/src/widgets/radio/__stories__/choice-none-above.stories.jsx +21 -6
  52. package/src/widgets/radio/__stories__/choice.stories.jsx +138 -0
  53. package/src/widgets/radio/__stories__/focus-ring.stories.jsx +29 -23
  54. package/src/widgets/radio/__stories__/option-status.stories.jsx +93 -99
  55. package/src/widgets/radio/base-radio.jsx +485 -556
  56. package/src/widgets/radio/choice-a11y-text.js +62 -0
  57. package/src/widgets/radio/choice-icon/choice-icon.jsx +87 -0
  58. package/src/widgets/radio/choice-icon/cross-out-line.jsx +55 -0
  59. package/src/widgets/radio/choice-icon/library-choice-icon.jsx +214 -0
  60. package/src/widgets/radio/choice-icon/sat-choice-icon.jsx +120 -0
  61. package/src/widgets/radio/choice-icon/shared-styles.js +17 -0
  62. package/src/widgets/radio/choice-none-above.jsx +49 -40
  63. package/src/widgets/radio/choice.jsx +319 -347
  64. package/src/widgets/radio/choice.jsx.fixture.js +0 -18
  65. package/src/widgets/radio/focus-ring.jsx +29 -22
  66. package/src/widgets/radio/option-status.jsx +58 -36
  67. package/src/widgets/radio/widget.jsx +181 -136
  68. package/src/widgets/radio.jsx +16 -17
  69. package/src/widgets/radio/__stories__/cross-out-button.stories.jsx +0 -64
  70. package/src/widgets/radio/choice-icon.jsx +0 -469
  71. package/src/widgets/radio/cross-out-button.jsx +0 -134
@@ -4,9 +4,6 @@
4
4
 
5
5
  import type {Coord} from "./interactive2/types.js";
6
6
 
7
- // sync-start:perseus-data-format 445282759 services/content-editing/perseus/perseus_data.go
8
-
9
- // sync-start:perseus-data-format-perseus-item 1142141354 services/content-editing/perseus/perseus_data.go
10
7
  export type PerseusItem = {|
11
8
  // The details of the question being asked to the user.
12
9
  question: PerseusRenderer,
@@ -21,22 +18,16 @@ export type PerseusItem = {|
21
18
  // Deprecated field
22
19
  answer: *,
23
20
  |};
24
- // sync-end:perseus-data-format-perseus-item
25
21
 
26
- // sync-start:perseus-data-format-perseus-article 702711982 services/content-editing/perseus/perseus_data.go
27
22
  export type PerseusArticle = $ReadOnlyArray<PerseusRenderer>;
28
- // sync-end:perseus-data-format-perseus-article
29
23
 
30
- // sync-start:perseus-data-format-perseus-version 402776191 services/content-editing/perseus/perseus_data.go
31
24
  export type Version = {|
32
25
  // The major part of the version
33
26
  major: number,
34
27
  // The minor part of the version
35
28
  minor: number,
36
29
  |};
37
- // sync-end:perseus-data-format-perseus-version
38
30
 
39
- // sync-start:perseus-data-format-perseus-renderer 43032456 services/content-editing/perseus/perseus_data.go
40
31
  export type PerseusRenderer = {|
41
32
  // Translatable Markdown content to be rendered. May include references to
42
33
  // widgets (as [[☃ widgetName]]) or images (as ![image text](imageUrl)).
@@ -54,18 +45,14 @@ export type PerseusRenderer = {|
54
45
  // A dictionary of {[imageUrl]: PerseusImageDetail}.
55
46
  images: {|[string]: PerseusImageDetail|},
56
47
  |};
57
- // sync-end:perseus-data-format-perseus-renderer
58
48
 
59
- // sync-start:perseus-data-format-image-size 1357702236 services/content-editing/perseus/translation/types.go
60
49
  export type PerseusImageDetail = {|
61
50
  // The width of the image
62
51
  width: number,
63
52
  // the height of the image
64
53
  height: number,
65
54
  |};
66
- // sync-end:perseus-data-format-image-size
67
55
 
68
- // sync-start:perseus-data-format-answer-area 2042787453 services/content-editing/perseus/perseus_data.go
69
56
  export type PerseusAnswerArea = {|
70
57
  // The user might benefit from using a statistics Z Table like https://www.ztable.net/
71
58
  zTable: boolean,
@@ -78,9 +65,7 @@ export type PerseusAnswerArea = {|
78
65
  // The user might benefit from using a Periodic Table of Elements. Provided on Khan Academy when true
79
66
  periodicTable: boolean,
80
67
  |};
81
- // sync-end:perseus-data-format-answer-area
82
68
 
83
- // sync-start:perseus-data-format-perseus-header 444775300 services/content-editing/perseus/perseus_data.go
84
69
  type Widget<Type: string, Options> = {|
85
70
  // The "type" of widget which will define what the Options field looks like
86
71
  type: Type,
@@ -102,7 +87,6 @@ type Widget<Type: string, Options> = {|
102
87
  // NOTE: perseus_data.go says this is required even though it isn't necessary.
103
88
  version?: Version,
104
89
  |};
105
- // sync-end:perseus-data-format-perseus-header
106
90
 
107
91
  // prettier-ignore
108
92
  export type CategorizerWidget = Widget<"categorizer", PerseusCategorizerWidgetOptions>;
@@ -228,7 +212,6 @@ export type PerseusWidget =
228
212
  | UnitInputWidget
229
213
  | VideoWidget;
230
214
 
231
- // sync-start:perseus-data-format-image-background 705138305 services/content-editing/perseus/perseus_data.go
232
215
  export type PerseusImageBackground = {|
233
216
  // The URL of the image
234
217
  url: ?string,
@@ -254,9 +237,7 @@ export type PerseusImageBackground = {|
254
237
  // it isn't necessary at all.
255
238
  bottom?: number,
256
239
  |};
257
- // sync-end:perseus-data-format-image-background
258
240
 
259
- // sync-start:perseus-data-format-categorizer 196107932 services/content-editing/perseus/perseus_data.go
260
241
  export type PerseusCategorizerWidgetOptions = {|
261
242
  // Translatable text; a list of items to categorize. e.g. ["banana", "yellow", "apple", "purple", "shirt"]
262
243
  items: $ReadOnlyArray<string>,
@@ -273,7 +254,6 @@ export type PerseusCategorizerWidgetOptions = {|
273
254
  // Internal editor configuration. Can be ignored by consumers.
274
255
  linterContext?: PerseusLinterContext,
275
256
  |};
276
- // sync-end:perseus-data-format-categorizer
277
257
 
278
258
  export type PerseusLinterContext = {|
279
259
  contentType: string,
@@ -281,7 +261,6 @@ export type PerseusLinterContext = {|
281
261
  stack: $ReadOnlyArray<string>,
282
262
  |};
283
263
 
284
- // sync-start:perseus-data-format-definition 1136634440 services/content-editing/perseus/perseus_data.go
285
264
  export type PerseusDefinitionWidgetOptions = {|
286
265
  // Translatable text; the word to define. e.g. "vertex"
287
266
  togglePrompt: string,
@@ -290,9 +269,7 @@ export type PerseusDefinitionWidgetOptions = {|
290
269
  // Always false. Not used for this widget
291
270
  static: boolean,
292
271
  |};
293
- // sync-end:perseus-data-format-definition
294
272
 
295
- // sync-start:perseus-data-format-dropdown 680573227 services/content-editing/perseus/perseus_data.go
296
273
  export type PerseusDropdownWidgetOptions = {|
297
274
  // A list of choices for the dropdown
298
275
  choices: $ReadOnlyArray<PerseusDropdownChoice>,
@@ -301,18 +278,14 @@ export type PerseusDropdownWidgetOptions = {|
301
278
  // Always false. Not used for this widget
302
279
  static: boolean,
303
280
  |};
304
- // sync-end:perseus-data-format-dropdown
305
281
 
306
- // sync-start:perseus-data-format-dropdown-choice 1551360173 services/content-editing/perseus/perseus_data.go
307
282
  export type PerseusDropdownChoice = {|
308
283
  // Translatable text; The text for the option. e.g. "Banana" or "Orange"
309
284
  content: string,
310
285
  // Whether this is the correct option or not
311
286
  correct: boolean,
312
287
  |};
313
- // sync-end:perseus-data-format-dropdown-choice
314
288
 
315
- // sync-start:perseus-data-format-explanation 1697542234 services/content-editing/perseus/perseus_data.go
316
289
  export type PerseusExplanationWidgetOptions = {|
317
290
  // Translatable Text; The clickable text to expand an explanation. e.g. "What is an apple?"
318
291
  showPrompt: string,
@@ -325,9 +298,7 @@ export type PerseusExplanationWidgetOptions = {|
325
298
  // Always false. Not used for this widget
326
299
  static: boolean,
327
300
  |};
328
- // sync-end:perseus-data-format-explanation
329
301
 
330
- // sync-start:perseus-data-format-expression 786922927 services/content-editing/perseus/perseus_data.go
331
302
  export type PerseusExpressionWidgetOptions = {|
332
303
  // The expression forms the answer may come in
333
304
  answerForms: $ReadOnlyArray<PerseusExpressionAnswerForm>,
@@ -343,9 +314,7 @@ export type PerseusExpressionWidgetOptions = {|
343
314
  // appears in item data in the datastore.
344
315
  buttonsVisible?: "always" | "never" | "focused",
345
316
  |};
346
- // sync-end:perseus-data-format-expression
347
317
 
348
- // sync-start:perseus-data-format-expression-answer-form 786922927 services/content-editing/perseus/perseus_data.go
349
318
  export type PerseusExpressionAnswerForm = {|
350
319
  // The Katex form of the expression. e.g. "x\\cdot3=y"
351
320
  value: string,
@@ -359,9 +328,7 @@ export type PerseusExpressionAnswerForm = {|
359
328
  // NOTE: perseus-format.js says this is required even though it isn't necessary.
360
329
  key?: string,
361
330
  |};
362
- // sync-end:perseus-data-format-expression-answer-form
363
331
 
364
- // sync-start:perseus-data-format-graded-group 1776015670 services/content-editing/perseus/perseus_data.go
365
332
  export type PerseusGradedGroupWidgetOptions = {|
366
333
  // Translatable Text; A title to be displayed for the group.
367
334
  title: string,
@@ -380,16 +347,12 @@ export type PerseusGradedGroupWidgetOptions = {|
380
347
  // See PerseusRenderer.images
381
348
  images: {|[string]: PerseusImageDetail|},
382
349
  |};
383
- // sync-end:perseus-data-format-graded-group
384
350
 
385
- // sync-start:perseus-data-format-graded-group-set 692073834 services/content-editing/perseus/perseus_data.go
386
351
  export type PerseusGradedGroupSetWidgetOptions = {|
387
352
  // A list of Widget Groups
388
353
  gradedGroups: $ReadOnlyArray<PerseusGradedGroupWidgetOptions>,
389
354
  |};
390
- // sync-end:perseus-data-format-graded-group-set
391
355
 
392
- // sync-start:perseus-data-format-grapher 666534562 services/content-editing/perseus/perseus_data.go
393
356
  export type PerseusGrapherWidgetOptions = {|
394
357
  availableTypes: $ReadOnlyArray<
395
358
  | "absolute_value"
@@ -479,15 +442,11 @@ export type PerseusGrapherWidgetOptions = {|
479
442
  valid?: boolean | string,
480
443
  |},
481
444
  |};
482
- // sync-end:perseus-data-format-grapher
483
445
 
484
- // sync-start:perseus-data-format-group 683548434 services/content-editing/perseus/perseus_data.go
485
446
  export type PerseusGroupWidgetOptions = {|
486
447
  ...PerseusRenderer,
487
448
  |};
488
- // sync-end:perseus-data-format-group
489
449
 
490
- // sync-start:perseus-data-format-image 1902443006 services/content-editing/perseus/perseus_data.go
491
450
  export type PerseusImageWidgetOptions = {|
492
451
  // Translatable Markdown; Text to be shown for the title of the image
493
452
  // NOTE: perseus_data.go says this is required even though it isn't necessary.
@@ -513,9 +472,7 @@ export type PerseusImageWidgetOptions = {|
513
472
  // NOTE: perseus_data.go says this is required even though it isn't necessary.
514
473
  box?: $ReadOnlyArray<number>,
515
474
  |};
516
- // sync-end:perseus-data-format-image
517
475
 
518
- // sync-start:perseus-data-format-image-label 1815359548 services/content-editing/perseus/perseus_data.go
519
476
  export type PerseusImageLabel = {|
520
477
  // Translatable Text; The content of the label to display
521
478
  content: string,
@@ -524,9 +481,7 @@ export type PerseusImageLabel = {|
524
481
  // The point on the image to display the label
525
482
  coordinates: $ReadOnlyArray<number>,
526
483
  |};
527
- // sync-end:perseus-data-format-image-label
528
484
 
529
- // sync-start:perseus-data-format-interactive-graph 1553046458 services/content-editing/perseus/perseus_data.go
530
485
  export type PerseusInteractiveGraphWidgetOptions = {|
531
486
  // The tick steps. default [1, 1]
532
487
  // NOTE(kevinb): perseus_data.go defines this as Array<number>
@@ -563,9 +518,6 @@ export type PerseusInteractiveGraphWidgetOptions = {|
563
518
  // The correct kind of graph, if being used to select function type
564
519
  correct: PerseusGraphType,
565
520
  |};
566
- // sync-end:perseus-data-format-interactive-graph
567
-
568
- // sync-start:perseus-data-format-graph-type 1191842797 services/content-editing/perseus/perseus_data.go
569
521
 
570
522
  export type PerseusGraphType =
571
523
  | PerseusGraphTypeAngle
@@ -673,9 +625,6 @@ export type PerseusGraphTypeRay = {|
673
625
  ...PerseusGraphTypeCommon,
674
626
  |};
675
627
 
676
- // sync-end:perseus-data-format-graph-type
677
-
678
- // sync-start:perseus-data-format-label-image 2032676206 services/content-editing/perseus/perseus_data.go
679
628
  export type PerseusLabelImageWidgetOptions = {|
680
629
  // Translatable Text; Katex representation of choices
681
630
  choices: $ReadOnlyArray<string>,
@@ -696,9 +645,7 @@ export type PerseusLabelImageWidgetOptions = {|
696
645
  // Always false. Not used for this widget
697
646
  static: boolean,
698
647
  |};
699
- // sync-end:perseus-data-format-label-image
700
648
 
701
- // sync-start:perseus-data-format-label-image-marker 1027558334 services/content-editing/perseus/perseus_data.go
702
649
  export type PerseusLabelImageMarker = {|
703
650
  // A list of correct answers for this marker. Often only one but can have multiple
704
651
  answers: $ReadOnlyArray<string>,
@@ -709,9 +656,7 @@ export type PerseusLabelImageMarker = {|
709
656
  // Y Coordinate location of the marker on the image
710
657
  y: number,
711
658
  |};
712
- // sync-end:perseus-data-format-label-image-marker
713
659
 
714
- // sync-start:perseus-data-format-matcher 601321477 services/content-editing/perseus/perseus_data.go
715
660
  export type PerseusMatcherWidgetOptions = {|
716
661
  // Translatable Text; Labels to adorn the headings for the columns. Only 2 values [left, right]. e.g. ["Concepts", "Things"]
717
662
  labels: $ReadOnlyArray<string>,
@@ -724,9 +669,7 @@ export type PerseusMatcherWidgetOptions = {|
724
669
  // Adds padding to the rows. Padding is good for text, but not needed for images.
725
670
  padding: boolean,
726
671
  |};
727
- // sync-end:perseus-data-format-matcher
728
672
 
729
- // sync-start:perseus-data-format-matrix 1000243376 services/content-editing/perseus/perseus_data.go
730
673
  export type PerseusMatrixWidgetOptions = {|
731
674
  // Translatable Text; Shown before the matrix
732
675
  prefix: string,
@@ -741,9 +684,7 @@ export type PerseusMatrixWidgetOptions = {|
741
684
  // Whether this is meant to statically display the answers (true) or be used as an input field, graded against the answers
742
685
  static: boolean,
743
686
  |};
744
- // sync-end:perseus-data-format-matrix
745
687
 
746
- // sync-start:perseus-data-format-measurer 150148873 services/content-editing/perseus/perseus_data.go
747
688
  export type PerseusMeasurerWidgetOptions = {|
748
689
  // The image that the user is meant to measure
749
690
  image: PerseusImageBackground,
@@ -764,9 +705,21 @@ export type PerseusMeasurerWidgetOptions = {|
764
705
  // Always false. Not used for this widget
765
706
  static: boolean,
766
707
  |};
767
- // sync-end:perseus-data-format-measurer
768
708
 
769
- // sync-start:perseus-data-format-numeric-input 1220587654 services/content-editing/perseus/perseus_data.go
709
+ export type MathFormat =
710
+ | "integer"
711
+ | "mixed"
712
+ | "improper"
713
+ | "proper"
714
+ | "decimal"
715
+ | "percent"
716
+ | "pi";
717
+
718
+ export type PerseusNumericInputAnswerForm = {|
719
+ simplify: ?("required" | "correct" | "enforced" | "optional"),
720
+ name: MathFormat,
721
+ |};
722
+
770
723
  export type PerseusNumericInputWidgetOptions = {|
771
724
  // A list of all the possible correct and incorrect answers
772
725
  answers: $ReadOnlyArray<PerseusNumericInputAnswer>,
@@ -787,24 +740,19 @@ export type PerseusNumericInputWidgetOptions = {|
787
740
 
788
741
  // Used by examples, maybe not used and should be removed in the future
789
742
  // see TODO in numeric-input
790
- answerForms?: $ReadOnlyArray<{|
791
- simplify: ?("required" | "correct" | "enforced"),
792
- name: "integer" | "decimal" | "proper" | "improper" | "mixed" | "pi",
793
- |}>,
743
+ answerForms?: $ReadOnlyArray<PerseusNumericInputAnswerForm>,
794
744
  |};
795
- // sync-end:perseus-data-format-numeric-input
796
745
 
797
- // sync-start:perseus-data-format-numeric-input-answer 2103478468 services/content-editing/perseus/perseus_data.go
798
746
  export type PerseusNumericInputAnswer = {|
799
747
  // Translatable Display; A description for why this answer is correct, wrong, or ungraded
800
748
  message: string,
801
749
  // The expected answer
802
- value: ?number,
750
+ value: number,
803
751
  // Whether this answer is "correct", "wrong", or "ungraded"
804
752
  status: string,
805
753
  // The forms available for this answer. Options: "integer, ""decimal", "proper", "improper", "mixed", or "pi"
806
754
  // NOTE: perseus_data.go says this is required even though it isn't necessary.
807
- answerForms?: $ReadOnlyArray<string>,
755
+ answerForms?: $ReadOnlyArray<MathFormat>,
808
756
  // Whether the answerForms should be strictly matched
809
757
  strict: boolean,
810
758
  // A range of error +/- the value
@@ -813,9 +761,7 @@ export type PerseusNumericInputAnswer = {|
813
761
  // Unsimplified answers are Ungraded, Accepted, or Wrong. Options: "required", "correct", or "enforced"
814
762
  simplify: ?string,
815
763
  |};
816
- // sync-end:perseus-data-format-numeric-input-answer
817
764
 
818
- // sync-start:perseus-data-format-number-line 786922927 services/content-editing/perseus/perseus_data.go
819
765
  export type PerseusNumberLineWidgetOptions = {|
820
766
  // The position of the endpoints of the number line. Setting the range constrains the position of the answer and the labels.
821
767
  range: $ReadOnlyArray<number>,
@@ -846,9 +792,7 @@ export type PerseusNumberLineWidgetOptions = {|
846
792
  // When true, the answer is displayed and is immutable
847
793
  static: boolean,
848
794
  |};
849
- // sync-end:perseus-data-format-number-line
850
795
 
851
- // sync-start:perseus-data-format-orderer 42703989 services/content-editing/perseus/perseus_data.go
852
796
  export type PerseusOrdererWidgetOptions = {|
853
797
  // All of the options available to the user. Place the cards in the correct order. The same card can be used more than once in the answer but will only be displayed once at the top of a stack of identical cards.
854
798
  options: $ReadOnlyArray<PerseusRenderer>,
@@ -861,9 +805,7 @@ export type PerseusOrdererWidgetOptions = {|
861
805
  // Use the "horizontal" layout for short text and small images. The "vertical" layout is best for longer text (e.g. proofs).
862
806
  layout: string,
863
807
  |};
864
- // sync-end:perseus-data-format-orderer
865
808
 
866
- // sync-start:perseus-data-format-passage 1782937597 services/content-editing/perseus/perseus_data.go
867
809
  export type PerseusPassageWidgetOptions = {|
868
810
  // Translatable Text; To add footnotes, add ^ characters where they belong in the passage. Then, add ^ in the footnotes area to reference the footnotes in the passage.
869
811
  footnotes: string,
@@ -876,9 +818,7 @@ export type PerseusPassageWidgetOptions = {|
876
818
  // Always false. Not used for this widget
877
819
  static: boolean,
878
820
  |};
879
- // sync-end:perseus-data-format-passage
880
821
 
881
- // sync-start:perseus-data-format-passage-ref 786922927 services/content-editing/perseus/perseus_data.go
882
822
  export type PerseusPassageRefWidgetOptions = {|
883
823
  // The passage number
884
824
  passageNumber: number,
@@ -887,9 +827,7 @@ export type PerseusPassageRefWidgetOptions = {|
887
827
  // Short summary of the referenced section. This will be included in parentheses and quotes automatically.
888
828
  summaryText: string,
889
829
  |};
890
- // sync-end:perseus-data-format-passage-ref
891
830
 
892
- // sync-start:perseus-data-format-plotter 1511242700 services/content-editing/perseus/perseus_data.go
893
831
  export type PerseusPlotterWidgetOptions = {|
894
832
  // Translatable Text; The Axis labels. e.g. ["X Label", "Y Label"]
895
833
  labels: $ReadOnlyArray<string>,
@@ -918,9 +856,7 @@ export type PerseusPlotterWidgetOptions = {|
918
856
  // deprecated
919
857
  plotDimensions: $ReadOnlyArray<number>,
920
858
  |};
921
- // sync-end:perseus-data-format-plotter
922
859
 
923
- // sync-start:perseus-data-format-radio 1165510766 services/content-editing/perseus/perseus_data.go
924
860
  export type PerseusRadioWidgetOptions = {|
925
861
  // The choices provided to the user.
926
862
  choices: $ReadOnlyArray<PerseusRadioChoice>,
@@ -950,9 +886,7 @@ export type PerseusRadioWidgetOptions = {|
950
886
  // `noneOfTheAbove` is still in use (but only set to `false`).
951
887
  noneOfTheAbove?: false,
952
888
  |};
953
- // sync-end:perseus-data-format-radio
954
889
 
955
- // sync-start:perseus-data-format-radio-choice 1184662431 services/content-editing/perseus/perseus_data.go
956
890
  export type PerseusRadioChoice = {|
957
891
  // Translatable Markdown; The label for this choice
958
892
  content: string,
@@ -969,16 +903,12 @@ export type PerseusRadioChoice = {|
969
903
  // NOTE: perseus_data.go says this is required even though it isn't necessary.
970
904
  widgets?: {|[string]: PerseusWidget|},
971
905
  |};
972
- // sync-end:perseus-data-format-radio-choice
973
906
 
974
- // sync-start:perseus-data-format-sequence 1719933825 services/content-editing/perseus/perseus_data.go
975
907
  export type PerseusSequenceWidgetOptions = {|
976
908
  // A list of Renderers to display in sequence
977
909
  json: $ReadOnlyArray<PerseusRenderer>,
978
910
  |};
979
- // sync-end:perseus-data-format-sequence
980
911
 
981
- // sync-start:perseus-data-format-simulator 235177664 services/content-editing/perseus/perseus_data.go
982
912
  export type PerseusSimulatorWidgetOptions = {|
983
913
  // Translatable Text; The X Axis
984
914
  xAxisLabel: string,
@@ -991,9 +921,7 @@ export type PerseusSimulatorWidgetOptions = {|
991
921
  // The number of times to run the simulation
992
922
  numTrials: number,
993
923
  |};
994
- // sync-end:perseus-data-format-simulator
995
924
 
996
- // sync-start:perseus-data-format-sorter 1524711769 services/content-editing/perseus/perseus_data.go
997
925
  export type PerseusSorterWidgetOptions = {|
998
926
  // Translatable Text; The correct answer (in the correct order). The user will see the cards in a randomized order.
999
927
  correct: $ReadOnlyArray<string>,
@@ -1002,9 +930,7 @@ export type PerseusSorterWidgetOptions = {|
1002
930
  // Use the "horizontal" layout for short text and small images. The "vertical" layout is best for longer text and larger images.
1003
931
  layout: string,
1004
932
  |};
1005
- // sync-end:perseus-data-format-sorter
1006
933
 
1007
- // sync-start:perseus-data-format-table 1956164389 services/content-editing/perseus/perseus_data.go
1008
934
  export type PerseusTableWidgetOptions = {|
1009
935
  // Translatable Text; A list of column headers
1010
936
  headers: $ReadOnlyArray<string>,
@@ -1015,9 +941,7 @@ export type PerseusTableWidgetOptions = {|
1015
941
  // Translatable Text; A 2-dimensional array of text to populate the table with
1016
942
  answers: $ReadOnlyArray<$ReadOnlyArray<string>>,
1017
943
  |};
1018
- // sync-end:perseus-data-format-table
1019
944
 
1020
- // sync-start:perseus-data-format-transformer 28164718 services/content-editing/perseus/perseus_data.go
1021
945
  export type PerseusTransformerWidgetOptions = {|
1022
946
  correct: {|
1023
947
  shape: {|
@@ -1197,9 +1121,6 @@ export type PerseusTransformerToolConstraints = {|
1197
1121
  fixed: boolean,
1198
1122
  |};
1199
1123
 
1200
- // sync-end:perseus-data-format-transformer
1201
-
1202
- // sync-start:perseus-data-format-interaction 1099589221 services/content-editing/perseus/perseus_data.go
1203
1124
  export type PerseusInteractionWidgetOptions = {|
1204
1125
  // The definition of the graph
1205
1126
  graph: PerseusInteractionGraph,
@@ -1208,9 +1129,7 @@ export type PerseusInteractionWidgetOptions = {|
1208
1129
  // Always false. Not used for this widget
1209
1130
  static: boolean,
1210
1131
  |};
1211
- // sync-end:perseus-data-format-interaction
1212
1132
 
1213
- // sync-start:perseus-data-format-interaction-graph 174409695 services/content-editing/perseus/perseus_data.go
1214
1133
  export type PerseusInteractionGraph = {|
1215
1134
  // "canvas", "graph"
1216
1135
  editableSettings?: $ReadOnlyArray<"canvas" | "graph">,
@@ -1245,9 +1164,7 @@ export type PerseusInteractionGraph = {|
1245
1164
  // This controls the number (and position) of the tick marks for the X and Y axis. e.g. [1, 1]
1246
1165
  tickStep: $ReadOnlyArray<number>,
1247
1166
  |};
1248
- // sync-end:perseus-data-format-interaction-graph
1249
1167
 
1250
- // sync-start:perseus-data-format-interaction-element 865922566 services/content-editing/perseus/perseus_data.go
1251
1168
  export type PerseusInteractionElement =
1252
1169
  | {|
1253
1170
  type: "function",
@@ -1298,9 +1215,6 @@ export type PerseusInteractionElement =
1298
1215
  options: PerseusInteractionRectangleElementOptions,
1299
1216
  |};
1300
1217
 
1301
- // sync-end:perseus-data-format-interaction-element
1302
-
1303
- // sync-start:perseus-data-format-interaction-function 81160594 services/content-editing/perseus/perseus_data.go
1304
1218
  export type PerseusInteractionFunctionElementOptions = {|
1305
1219
  // The definition of the function to draw on the graph. e.g "x^2 + 1"
1306
1220
  value: string,
@@ -1317,9 +1231,7 @@ export type PerseusInteractionFunctionElementOptions = {|
1317
1231
  // The thickness of the stroke
1318
1232
  strokeWidth: number,
1319
1233
  |};
1320
- // sync-end:perseus-data-format-interaction-function
1321
1234
 
1322
- // sync-start:perseus-data-format-interaction-label 1111537285 services/content-editing/perseus/perseus_data.go
1323
1235
  export type PerseusInteractionLabelElementOptions = {|
1324
1236
  // Translatable Text; the content of the label
1325
1237
  label: string,
@@ -1330,9 +1242,7 @@ export type PerseusInteractionLabelElementOptions = {|
1330
1242
  // The Y location of the label
1331
1243
  coordY: string,
1332
1244
  |};
1333
- // sync-end:perseus-data-format-interaction-label
1334
1245
 
1335
- // sync-start:perseus-data-format-interaction-line 1331716694 services/content-editing/perseus/perseus_data.go
1336
1246
  export type PerseusInteractionLineElementOptions = {|
1337
1247
  // A color code for the line segment. e.g. "#FFOOAF"
1338
1248
  color: string,
@@ -1351,9 +1261,7 @@ export type PerseusInteractionLineElementOptions = {|
1351
1261
  // Does the line have an arrow point to it? options: "", "->"
1352
1262
  arrows: string,
1353
1263
  |};
1354
- // sync-end:perseus-data-format-interaction-line
1355
1264
 
1356
- // sync-start:perseus-data-format-interaction-movable-line 1201996829 services/content-editing/perseus/perseus_data.go
1357
1265
  export type PerseusInteractionMovableLineElementOptions = {|
1358
1266
  // The start of the line segment (X)
1359
1267
  startX: string,
@@ -1382,9 +1290,7 @@ export type PerseusInteractionMovableLineElementOptions = {|
1382
1290
  // The highest possible Y value
1383
1291
  constraintYMax: string,
1384
1292
  |};
1385
- // sync-end:perseus-data-format-interaction-movable-line
1386
1293
 
1387
- // sync-start:perseus-data-format-interaction-movable-point 993274163 services/content-editing/perseus/perseus_data.go
1388
1294
  export type PerseusInteractionMovablePointElementOptions = {|
1389
1295
  // The X position of the point
1390
1296
  startX: string,
@@ -1407,9 +1313,7 @@ export type PerseusInteractionMovablePointElementOptions = {|
1407
1313
  // The highest possible Y value
1408
1314
  constraintYMax: string,
1409
1315
  |};
1410
- // sync-end:perseus-data-format-interaction-movable-point
1411
1316
 
1412
- // sync-start:perseus-data-format-interaction-parametric 2038394914 services/content-editing/perseus/perseus_data.go
1413
1317
  export type PerseusInteractionParametricElementOptions = {|
1414
1318
  // The function for the X coordinate. e.g. "\\cos(t)"
1415
1319
  x: string,
@@ -1426,9 +1330,7 @@ export type PerseusInteractionParametricElementOptions = {|
1426
1330
  // The thickness of the stroke
1427
1331
  strokeWidth: number,
1428
1332
  |};
1429
- // sync-end:perseus-data-format-interaction-parametric
1430
1333
 
1431
- // sync-start:perseus-data-format-interaction-point 489666139 services/content-editing/perseus/perseus_data.go
1432
1334
  export type PerseusInteractionPointElementOptions = {|
1433
1335
  // The color of the point. e.g. "black"
1434
1336
  color: string,
@@ -1437,9 +1339,7 @@ export type PerseusInteractionPointElementOptions = {|
1437
1339
  // The Y coordinate of the point
1438
1340
  coordY: string,
1439
1341
  |};
1440
- // sync-end:perseus-data-format-interaction-point
1441
1342
 
1442
- // sync-start:perseus-data-format-interaction-rectangle 999004794 services/content-editing/perseus/perseus_data.go
1443
1343
  export type PerseusInteractionRectangleElementOptions = {|
1444
1344
  // The fill color. e.g. "#EDD19B"
1445
1345
  color: string,
@@ -1452,9 +1352,7 @@ export type PerseusInteractionRectangleElementOptions = {|
1452
1352
  // The height of the rectangle
1453
1353
  height: string,
1454
1354
  |};
1455
- // sync-end:perseus-data-format-interaction-rectangle
1456
1355
 
1457
- // sync-start:perseus-data-format-cs-program 786922927 services/content-editing/perseus/perseus_data.go
1458
1356
  export type PerseusCSProgramWidgetOptions = {|
1459
1357
  // The ID of the CS program to embed
1460
1358
  programID: string,
@@ -1480,9 +1378,7 @@ export type PerseusCSProgramSetting = {|
1480
1378
  // The value of the setting
1481
1379
  value: string,
1482
1380
  |};
1483
- // sync-end:perseus-data-format-cs-program
1484
1381
 
1485
- // sync-start:perseus-data-format-iframe 786922927 services/content-editing/perseus/perseus_data.go
1486
1382
  export type PerseusIFrameWidgetOptions = {|
1487
1383
  // A URL to display OR a CS Program ID
1488
1384
  url: string,
@@ -1499,16 +1395,12 @@ export type PerseusIFrameWidgetOptions = {|
1499
1395
  // Always false
1500
1396
  static: boolean,
1501
1397
  |};
1502
- // sync-end:perseus-data-format-iframe
1503
1398
 
1504
- // sync-start:perseus-data-format-video 786922927 services/content-editing/perseus/perseus_data.go
1505
1399
  export type PerseusVideoWidgetOptions = {|
1506
1400
  location: string,
1507
1401
  static?: boolean,
1508
1402
  |};
1509
- // sync-end:perseus-data-format-video
1510
1403
 
1511
- // sync-start:perseus-data-format-input-number 786922927 services/content-editing/perseus/perseus_data.go
1512
1404
  export type PerseusInputNumberWidgetOptions = {|
1513
1405
  answerType?:
1514
1406
  | "number"
@@ -1523,36 +1415,19 @@ export type PerseusInputNumberWidgetOptions = {|
1523
1415
  rightAlign?: boolean,
1524
1416
  simplify: "required" | "optional" | "enforced",
1525
1417
  size: "normal" | "small",
1526
- value: string | number | boolean,
1418
+ value: string | number,
1527
1419
  customKeypad?: boolean,
1528
1420
  |};
1529
- // sync-end:perseus-data-format-input-number
1530
1421
 
1531
1422
  // TODO(FEI-3983): Create proper flow types for these.
1532
- // sync-start:perseus-data-format-example-graphie 786922927 services/content-editing/perseus/perseus_data.go
1533
1423
  export type PerseusExampleGraphieWidgetOptions = $FlowFixMe;
1534
- // sync-end:perseus-data-format-example-graphie
1535
- // sync-start:perseus-data-format-example 786922927 services/content-editing/perseus/perseus_data.go
1536
1424
  export type PerseusExampleWidgetOptions = $FlowFixMe;
1537
- // sync-end:perseus-data-format-example
1538
- // sync-start:perseus-data-format-lights-puzzle 786922927 services/content-editing/perseus/perseus_data.go
1539
1425
  export type PerseusLightsPuzzleWidgetOptions = $FlowFixMe;
1540
- // sync-end:perseus-data-format-lights-puzzle
1541
- // sync-start:perseus-data-format-molecule-renderer 786922927 services/content-editing/perseus/perseus_data.go
1542
1426
  export type PerseusMoleculeRendererWidgetOptions = $FlowFixMe;
1543
- // sync-end:perseus-data-format-molecule-renderer
1544
- // sync-start:perseus-data-format-passage-ref-target 786922927 services/content-editing/perseus/perseus_data.go
1545
1427
  export type PerseusPassageRefTargetWidgetOptions = $FlowFixMe;
1546
- // sync-end:perseus-data-format-passage-ref-target
1547
- // sync-start:perseus-data-format-reaction-diagram 786922927 services/content-editing/perseus/perseus_data.go
1548
1428
  export type PerseusReactionDiagramWidgetOptions = $FlowFixMe;
1549
- // sync-end:perseus-data-format-reaction-diagram
1550
- // sync-start:perseus-data-format-simple-markdown-tester 786922927 services/content-editing/perseus/perseus_data.go
1551
1429
  export type PerseusSimpleMarkdownTesterWidgetOptions = $FlowFixMe;
1552
- // sync-end:perseus-data-format-simple-markdown-tester
1553
- // sync-start:perseus-data-format-unit-input 786922927 services/content-editing/perseus/perseus_data.go
1554
1430
  export type PerseusUnitInputWidgetOptions = $FlowFixMe;
1555
- // sync-end:perseus-data-format-unit-input
1556
1431
 
1557
1432
  export type PerseusWidgetOptions =
1558
1433
  | PerseusCategorizerWidgetOptions
@@ -1593,5 +1468,3 @@ export type PerseusWidgetOptions =
1593
1468
  | PerseusTransformerWidgetOptions
1594
1469
  | PerseusUnitInputWidgetOptions
1595
1470
  | PerseusVideoWidgetOptions;
1596
-
1597
- // sync-end:perseus-data-format
@@ -113,7 +113,5 @@ export const publishBlockingErrorColor = "#be2612";
113
113
  export const radioBorderColor = "#BABEC2";
114
114
  export const checkedColor = "#71B307";
115
115
 
116
- // sync-start:article-max-width 986452807 services/static/javascript/perseus-all-package/styles/variables.less
117
116
  export const articleMaxWidthInPx = 688;
118
117
  export const articleMaxWidthTableInPx = 512;
119
- // sync-end:article-max-width
@@ -107,7 +107,10 @@
107
107
  }
108
108
 
109
109
  div.paragraph {
110
- .legacy-typography;
110
+ font-family: "Noto Serif", serif;
111
+ font-weight: 400;
112
+ font-size: 18px;
113
+ line-height: 22px;
111
114
  margin: 22px 0px;
112
115
  }
113
116
 
@@ -131,8 +134,11 @@
131
134
 
132
135
  div.instructions {
133
136
  display: block;
137
+ font-family: "Noto Serif", serif;
138
+ font-weight: 800;
139
+ font-size: 18px;
140
+ line-height: 22px;
134
141
  font-style: italic;
135
- font-weight: bold;
136
142
  }
137
143
 
138
144
  .perseus-renderer > .paragraph > ul:not(.perseus-widget-radio),
@@ -62,7 +62,5 @@
62
62
  // Responsive variables
63
63
  @phoneMargin: 16px;
64
64
 
65
- // sync-start:article-max-width 1144921561 services/static/javascript/perseus-all-package/styles/constants.js
66
65
  @articleMaxWidth: 688px;
67
66
  @articleMaxWidthTablet: 512px;
68
- // sync-end:article-max-width