@khanacademy/perseus 78.2.0 → 78.3.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 (43) hide show
  1. package/dist/components/button-group.d.ts +4 -0
  2. package/dist/components/gif-image.d.ts +2 -1
  3. package/dist/components/svg-image.d.ts +2 -0
  4. package/dist/es/index.css +1 -1
  5. package/dist/es/index.css.map +1 -1
  6. package/dist/es/index.js +43 -29
  7. package/dist/es/index.js.map +1 -1
  8. package/dist/es/strings.js +1 -1
  9. package/dist/es/strings.js.map +1 -1
  10. package/dist/index.css +1 -1
  11. package/dist/index.css.map +1 -1
  12. package/dist/index.js +43 -29
  13. package/dist/index.js.map +1 -1
  14. package/dist/perseus-markdown.new.d.ts +11 -0
  15. package/dist/renderer.d.ts +15 -202
  16. package/dist/renderer.new.d.ts +200 -0
  17. package/dist/renderer.old.d.ts +211 -0
  18. package/dist/server-item-renderer.d.ts +1 -1
  19. package/dist/strings.d.ts +136 -12
  20. package/dist/strings.js +1 -1
  21. package/dist/strings.js.map +1 -1
  22. package/dist/testing/feature-flags-util.d.ts +6 -13
  23. package/dist/testing/item-renderer-hooks.d.ts +1 -1
  24. package/dist/widgets/dropdown/dropdown.d.ts +1 -1
  25. package/dist/widgets/expression/expression.d.ts +2 -2
  26. package/dist/widgets/image/components/image-info-area.d.ts +3 -1
  27. package/dist/widgets/image/utils.d.ts +7 -0
  28. package/dist/widgets/interactive-graphs/graphs/components/movable-point-labels-layer/index.d.ts +1 -0
  29. package/dist/widgets/interactive-graphs/graphs/components/movable-point-labels-layer/movable-point-labels-layer.d.ts +7 -0
  30. package/dist/widgets/interactive-graphs/interactive-graph.d.ts +1 -1
  31. package/dist/widgets/interactive-graphs/label-stroke-filter.d.ts +15 -0
  32. package/dist/widgets/interactive-graphs/mafs-graph.d.ts +2 -0
  33. package/dist/widgets/interactive-graphs/stateful-mafs-graph.d.ts +2 -0
  34. package/dist/widgets/interactive-graphs/types.d.ts +2 -0
  35. package/dist/widgets/interactive-graphs/use-reinitialize-on-graph-change.d.ts +8 -0
  36. package/dist/widgets/interactive-graphs/utils/movable-point-labels.d.ts +10 -0
  37. package/dist/widgets/label-image/label-image.d.ts +1 -1
  38. package/dist/widgets/mock-widgets/mock-widget.d.ts +1 -1
  39. package/dist/widgets/numeric-input/numeric-input.class.d.ts +1 -1
  40. package/dist/widgets/numeric-input/numeric-input.d.ts +2 -2
  41. package/dist/widgets/table/table.d.ts +1 -1
  42. package/package.json +8 -8
  43. /package/dist/widgets/interactive-graphs/{point-labels.d.ts → utils/point-labels/point-labels.d.ts} +0 -0
package/dist/strings.d.ts CHANGED
@@ -342,21 +342,25 @@ export type PerseusStrings = {
342
342
  point2Y: string;
343
343
  }) => string;
344
344
  srVectorGraph: string;
345
- srVectorPoints: ({ tailX, tailY, tipX, tipY, }: {
345
+ srVectorPoints: ({ tailX, tailY, headX, headY, }: {
346
346
  tailX: string;
347
347
  tailY: string;
348
- tipX: string;
349
- tipY: string;
348
+ headX: string;
349
+ headY: string;
350
350
  }) => string;
351
- srVectorTipPoint: ({ x, y }: {
351
+ srVectorHeadPoint: ({ x, y }: {
352
352
  x: string;
353
353
  y: string;
354
354
  }) => string;
355
- srVectorGrabHandle: ({ tailX, tailY, tipX, tipY, }: {
355
+ srVectorMagnitudeDirection: ({ magnitude, direction, }: {
356
+ magnitude: string;
357
+ direction: string;
358
+ }) => string;
359
+ srVectorGrabHandle: ({ tailX, tailY, headX, headY, }: {
356
360
  tailX: string;
357
361
  tailY: string;
358
- tipX: string;
359
- tipY: string;
362
+ headX: string;
363
+ headY: string;
360
364
  }) => string;
361
365
  srQuadraticGraph: string;
362
366
  srQuadraticFaceUp: string;
@@ -462,13 +466,36 @@ export type PerseusStrings = {
462
466
  x: string;
463
467
  y: string;
464
468
  }) => string;
465
- srExponentialDescription: ({ point1X, point1Y, point2X, point2Y, asymptoteY, }: {
469
+ srExponentialDescriptionRightNeg: ({ point1X, point1Y, point2X, point2Y, asymptoteY, }: {
470
+ point1X: string;
471
+ point1Y: string;
472
+ point2X: string;
473
+ point2Y: string;
474
+ asymptoteY: string;
475
+ }) => string;
476
+ srExponentialDescriptionLeftPos: ({ point1X, point1Y, point2X, point2Y, asymptoteY, }: {
466
477
  point1X: string;
467
478
  point1Y: string;
468
479
  point2X: string;
469
480
  point2Y: string;
470
481
  asymptoteY: string;
471
482
  }) => string;
483
+ srExponentialAboveAsymptote: string;
484
+ srExponentialBelowAsymptote: string;
485
+ srExponentialNoCurve: ({ point1X, point1Y, point2X, point2Y, asymptoteY, }: {
486
+ point1X: string;
487
+ point1Y: string;
488
+ point2X: string;
489
+ point2Y: string;
490
+ asymptoteY: string;
491
+ }) => string;
492
+ srExponentialIntercepts: ({ xIntercept, yIntercept, }: {
493
+ xIntercept: string;
494
+ yIntercept: string;
495
+ }) => string;
496
+ srExponentialYIntercept: ({ yIntercept }: {
497
+ yIntercept: string;
498
+ }) => string;
472
499
  srExponentialInteractiveElements: ({ point1X, point1Y, point2X, point2Y, asymptoteY, }: {
473
500
  point1X: string;
474
501
  point1Y: string;
@@ -488,13 +515,50 @@ export type PerseusStrings = {
488
515
  x: string;
489
516
  y: string;
490
517
  }) => string;
491
- srLogarithmDescription: ({ point1X, point1Y, point2X, point2Y, asymptoteX, }: {
518
+ srLogarithmDescriptionRightNeg: ({ point1X, point1Y, point2X, point2Y, asymptoteX, }: {
519
+ point1X: string;
520
+ point1Y: string;
521
+ point2X: string;
522
+ point2Y: string;
523
+ asymptoteX: string;
524
+ }) => string;
525
+ srLogarithmDescriptionRightPos: ({ point1X, point1Y, point2X, point2Y, asymptoteX, }: {
526
+ point1X: string;
527
+ point1Y: string;
528
+ point2X: string;
529
+ point2Y: string;
530
+ asymptoteX: string;
531
+ }) => string;
532
+ srLogarithmDescriptionLeftNeg: ({ point1X, point1Y, point2X, point2Y, asymptoteX, }: {
492
533
  point1X: string;
493
534
  point1Y: string;
494
535
  point2X: string;
495
536
  point2Y: string;
496
537
  asymptoteX: string;
497
538
  }) => string;
539
+ srLogarithmDescriptionLeftPos: ({ point1X, point1Y, point2X, point2Y, asymptoteX, }: {
540
+ point1X: string;
541
+ point1Y: string;
542
+ point2X: string;
543
+ point2Y: string;
544
+ asymptoteX: string;
545
+ }) => string;
546
+ srLogarithmToRightOfAsymptote: string;
547
+ srLogarithmToLeftOfAsymptote: string;
548
+ srLogarithmNoCurve: ({ point1X, point1Y, point2X, point2Y, asymptoteX, }: {
549
+ point1X: string;
550
+ point1Y: string;
551
+ point2X: string;
552
+ point2Y: string;
553
+ asymptoteX: string;
554
+ }) => string;
555
+ srLogarithmIntercepts: ({ xIntercept, yIntercept, }: {
556
+ xIntercept: string;
557
+ yIntercept: string;
558
+ }) => string;
559
+ srLogarithmXIntercept: ({ xIntercept }: {
560
+ xIntercept: string;
561
+ }) => string;
498
562
  srLogarithmInteractiveElements: ({ point1X, point1Y, point2X, point2Y, asymptoteX, }: {
499
563
  point1X: string;
500
564
  point1Y: string;
@@ -900,7 +964,11 @@ export declare const strings: {
900
964
  context: string;
901
965
  message: string;
902
966
  };
903
- srVectorTipPoint: {
967
+ srVectorHeadPoint: {
968
+ context: string;
969
+ message: string;
970
+ };
971
+ srVectorMagnitudeDirection: {
904
972
  context: string;
905
973
  message: string;
906
974
  };
@@ -1048,7 +1116,31 @@ export declare const strings: {
1048
1116
  context: string;
1049
1117
  message: string;
1050
1118
  };
1051
- srExponentialDescription: {
1119
+ srExponentialDescriptionRightNeg: {
1120
+ context: string;
1121
+ message: string;
1122
+ };
1123
+ srExponentialDescriptionLeftPos: {
1124
+ context: string;
1125
+ message: string;
1126
+ };
1127
+ srExponentialAboveAsymptote: {
1128
+ context: string;
1129
+ message: string;
1130
+ };
1131
+ srExponentialBelowAsymptote: {
1132
+ context: string;
1133
+ message: string;
1134
+ };
1135
+ srExponentialNoCurve: {
1136
+ context: string;
1137
+ message: string;
1138
+ };
1139
+ srExponentialIntercepts: {
1140
+ context: string;
1141
+ message: string;
1142
+ };
1143
+ srExponentialYIntercept: {
1052
1144
  context: string;
1053
1145
  message: string;
1054
1146
  };
@@ -1072,7 +1164,39 @@ export declare const strings: {
1072
1164
  context: string;
1073
1165
  message: string;
1074
1166
  };
1075
- srLogarithmDescription: {
1167
+ srLogarithmDescriptionRightNeg: {
1168
+ context: string;
1169
+ message: string;
1170
+ };
1171
+ srLogarithmDescriptionRightPos: {
1172
+ context: string;
1173
+ message: string;
1174
+ };
1175
+ srLogarithmDescriptionLeftNeg: {
1176
+ context: string;
1177
+ message: string;
1178
+ };
1179
+ srLogarithmDescriptionLeftPos: {
1180
+ context: string;
1181
+ message: string;
1182
+ };
1183
+ srLogarithmToRightOfAsymptote: {
1184
+ context: string;
1185
+ message: string;
1186
+ };
1187
+ srLogarithmToLeftOfAsymptote: {
1188
+ context: string;
1189
+ message: string;
1190
+ };
1191
+ srLogarithmNoCurve: {
1192
+ context: string;
1193
+ message: string;
1194
+ };
1195
+ srLogarithmIntercepts: {
1196
+ context: string;
1197
+ message: string;
1198
+ };
1199
+ srLogarithmXIntercept: {
1076
1200
  context: string;
1077
1201
  message: string;
1078
1202
  };
package/dist/strings.js CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- const strings={characterCount:{one:"%(used)s / %(num)s Character",other:"%(used)s / %(num)s Characters"},closeKeypad:"close math keypad",openKeypad:"open math keypad",mathInputBox:"Math input box",removeHighlight:"Remove highlight",addHighlight:"Add highlight",hintPos:"Hint #%(pos)s",errorRendering:"Error rendering: %(error)s",APPROXIMATED_PI_ERROR:"Your answer is close, but you may "+"have approximated pi. Enter your "+"answer as a multiple of pi, like "+"12 pi or "+"2/3 pi",EMPTY_RESPONSE_ERROR:"There are still more parts of this question to answer.",EXTRA_SYMBOLS_ERROR:"We could not understand your "+"answer. Please check your answer for extra "+"text or symbols.",NEEDS_TO_BE_SIMPLFIED_ERROR:"Your answer is almost correct, "+"but it needs to be simplified.",MISSING_PERCENT_ERROR:"Your answer is almost correct, "+"but it is missing a "+"<code>\\\\%</code> at the end.",MULTIPLICATION_SIGN_ERROR:"I'm a computer. I only understand "+"multiplication if you use an asterisk "+"(*) as the multiplication sign.",USER_INPUT_EMPTY:"Your answer is empty.",USER_INPUT_TOO_LONG:"Please shorten your response.",WRONG_CASE_ERROR:"Your answer includes use of a variable with the wrong case.",WRONG_LETTER_ERROR:"Your answer includes a wrong variable letter.",invalidSelection:"Make sure you select something for every row.",INVALID_CHOICE_SELECTION:"Invalid choice selection",ERROR_TITLE:"Oops!",ERROR_MESSAGE:"Sorry, I don't understand that!",hints:"Hints",getAnotherHint:"Get another hint",deprecatedStandin:"Sorry, this part of the question is no longer available. 😅 Don't worry, you won't be graded on this part. Keep going!",keepTrying:"Keep trying",tryAgain:"Try again",check:"Check",correctExcited:"Correct!",nextQuestion:"Next question",skipToTitle:"Skip to %(title)s",current:"Current",correct:"Correct",correctSelected:"Correct (selected)",incorrect:"Incorrect",incorrectSelected:"Incorrect (selected)",hideExplanation:"Hide explanation",explain:"Explain",INVALID_MESSAGE_PREFIX:"We couldn't grade your answer.",DEFAULT_INVALID_MESSAGE_1:"It looks like you left something blank or ",DEFAULT_INVALID_MESSAGE_2:"entered in an invalid answer.",integerExample:"an integer, like $6$",properExample:"a *proper* fraction, like $1/2$ or $6/10$",simplifiedProperExample:"a *simplified proper* fraction, like $3/5$",improperExample:"an *improper* fraction, like $10/7$ or $14/8$",simplifiedImproperExample:"a *simplified improper* fraction, like $7/4$",mixedExample:"a mixed number, like $1\\\\ 3/4$",decimalExample:"an *exact* decimal, like $0.75$",percentExample:"a percent, like $12.34\\\\%$",piExample:"a multiple of pi, like $12$ pi or $2/3$ pi",yourAnswer:"**Your answer should be** ",yourAnswerLabel:"Your answer:",addPoints:"Click to add points",addVertices:"Click to add vertices",tapMultiple:"Tap each dot on the image to select all answers that apply.",tapSingle:"Tap each dot on the image to select an answer.",clickMultiple:"Click each dot on the image to select all answers that apply.",clickSingle:"Click each dot on the image to select an answer.",choices:"Choices:",answers:{one:"%(num)s answer",other:"%(num)s answers"},hideAnswersToggleLabel:"Hide answer choices",moves:{one:"Moves: %(num)s",other:"Moves: %(num)s"},clickTiles:"Click on the tiles to change the lights.",turnOffLights:"You must turn on all of the lights to continue.",fillAllCells:"Make sure you fill in all cells in the matrix.",molecularDrawing:"A molecular structure drawing. SMILES notation: %(content)s",switchDirection:"Switch direction",circleOpen:"Make circle open",circleFilled:"Make circle filled",numDivisions:"Number of divisions:",divisions:"Please make sure the number of divisions is in the range %(divRangeString)s.",dragHandles:"Drag handles to make graph",tapAddPoints:"Tap to add points",false:"False",true:"True",no:"No",yes:"Yes",chooseCorrectNum:"Please choose the correct number of answers.",notNoneOfTheAbove:"'None of the above' may not be selected when other answers are selected.",noneOfTheAbove:"None of the above",chooseNumAnswers:"Choose %(numCorrect)s answers:",chooseAllAnswers:"Choose all answers that apply:",chooseOneAnswer:"Choose 1 answer:",choiceCheckedCorrect:"(Choice %(letter)s, Checked, Correct)",choiceCorrect:"(Choice %(letter)s, Correct)",choiceCheckedIncorrect:"(Choice %(letter)s, Checked, Incorrect)",choiceIncorrect:"(Choice %(letter)s, Incorrect)",choiceChecked:"(Choice %(letter)s, Checked)",choice:"(Choice %(letter)s)",notSelected:{context:"Screen reader announcement for a choice that is not selected",message:"not selected"},choicesSelected:{one:"%(num)s choice selected",other:"%(num)s choices selected"},bringBack:"Bring back",openMenuForChoice:"Open menu for Choice %(letter)s",letters:{context:"This is a list of single-character labels that will appear in front of multiple-choice options. For instance, a multiple-choice question with three options would display (A) first option (B) second option (C) third option. There must be spaces between each of the different characters. The characters will show up next to options in the order that they are listed here. Most multiple choice questions have 5 or fewer options.",message:"A B C D E F G H I J K L M N O P Q R S T U V W X Y Z"},scrollAnswers:"Scroll Answers",scrollStart:"Scroll to view start of the content",scrollEnd:"Scroll to view the end of the content",rightArrow:"Reaction arrow pointing to the right.",dontUnderstandUnits:"I couldn't understand those units.",checkSigFigs:"Check your significant figures.",answerNumericallyIncorrect:"That answer is numerically incorrect.",checkUnits:"Check your units.",dontUnderstand:"I don't understand that",loading:"Loading...",videoTranscript:"See video transcript",somethingWrong:"Something went wrong.",videoWrapper:"Khan Academy video wrapper",pythonProgram:"Python program",computerScienceProgram:"Computer science program",embeddedContent:"Embedded content",mathInputTitle:"mathematics keyboard",mathInputDescription:"Use keyboard/mouse to interact with math-based input fields",sin:"sin",cos:"cos",tan:"tan",simulationLoadFail:"Sorry, this simulation cannot load.",simulationLocaleWarning:"Sorry, this simulation isn't available in your language.",selectAnAnswer:"Select an answer",addPoint:"Add Point",removePoint:"Remove Point",graphKeyboardPrompt:"Press Shift + Enter to interact with the graph",ungradedInteractiveGraph:"Use this graph to check your thinking, but it does not count as your answer.",srInteractiveElements:"Interactive elements: %(elements)s",srNoInteractiveElements:"No interactive elements",closePolygon:{context:"Button label for the button that closes an incomplete polygon created by the user in the interactive graph widget.",message:"Close shape"},openPolygon:{context:"Button label for the button that opens a closed polygon created by the user in the interactive graph widget.",message:"Re-open shape"},srGraphInstructions:{context:"Screen reader-only instructions for using the keyboard to move through the interactive elements in the interactive graph widget.",message:"Use the Tab key to move through the interactive elements in the graph. When an interactive element has focus, use Control + Shift + Arrows to move it."},srUnlimitedGraphInstructions:{context:"Screen reader-only instructions for using the keyboard to move through the 'unlimited' (addable/deletable by the user) interactive elements in the interactive graph widget.",message:"Press Shift + Enter to interact with the graph. Use the Tab key to move through the interactive elements in the graph and access the graph Action Bar. When an interactive element has focus, use Control + Shift + Arrows to move it or use the Delete key to remove it from the graph. Use the buttons in the Action Bar to add or adjust elements within the graph."},srPointAtCoordinates:{context:"Aria label for an interactive Point element in the interactive graph widget, including the count for its order in the points (e.g. 'Point 1 at 0 comma 0'). Coordinate (x, y) is written out as 'x comma y'.",message:"Point %(num)s at %(x)s comma %(y)s."},srCircleGraph:{context:"Aria label for the container containing the Circle and its interactive elements in the interactive graph widget.",message:"A circle on a coordinate plane."},srCircleShape:{context:"Aria label for the interactive Circle element in the interactive graph widget.",message:"Circle. The center point is at %(centerX)s comma %(centerY)s."},srCircleRadiusPointRight:{context:"Aria label for the interactive Point element that represents the radius endpoint when it's on the right side of the Circle in the interactive graph widget.",message:"Right radius endpoint at %(radiusPointX)s comma %(radiusPointY)s."},srCircleRadiusPointLeft:{context:"Aria label for the interactive Point element that represents the radius endpoint when it's on the left side of the Circle in the interactive graph widget.",message:"Left radius endpoint at %(radiusPointX)s comma %(radiusPointY)s."},srCircleRadius:{context:"Screen reader description for the radius of the Circle in the interactive graph widget.",message:"Circle radius is %(radius)s."},srCircleOuterPoints:{context:"Screen reader description for four key points on the Circle in the interactive graph widget.",message:"Points on the circle at %(point1X)s comma %(point1Y)s, %(point2X)s comma %(point2Y)s, %(point3X)s comma %(point3Y)s, %(point4X)s comma %(point4Y)s."},srLinearGraph:{context:"Aria label for the container containing the Line and its interactive elements in the interactive graph widget.",message:"A line on a coordinate plane."},srLinearGraphPoints:{context:"Screen reader description for the two points defining the Line in the interactive graph widget.",message:"The line has two points, point 1 at %(point1X)s comma %(point1Y)s and point 2 at %(point2X)s comma %(point2Y)s."},srLinearGraphSlopeIncreasing:{context:"Screen reader description for the upward slope of the Line in the interactive graph widget.",message:"Its slope increases from left to right."},srLinearGraphSlopeDecreasing:{context:"Screen reader description for the downward slope of the Line in the interactive graph widget.",message:"Its slope decreases from left to right."},srLinearGraphSlopeHorizontal:{context:"Screen reader description for the slope of a horizontal Line in the interactive graph widget.",message:"Its slope is zero."},srLinearGraphSlopeVertical:{context:"Screen reader description for the slope of a vertical Line in the interactive graph widget.",message:"Its slope is undefined."},srLinearGraphXOnlyIntercept:{context:"Screen reader description for the intercept of the Line in the interactive graph widget when it only intersects the X-axis.",message:"The line crosses the X-axis at %(xIntercept)s comma 0."},srLinearGraphYOnlyIntercept:{context:"Screen reader description for the intercept of the Line in the interactive graph widget when it only intersects the Y-axis.",message:"The line crosses the Y-axis at 0 comma %(yIntercept)s."},srLinearGraphBothIntercepts:{context:"Screen reader description for the intercepts of the Line in the interactive graph widget when it intersects both the X-axis and Y-axis.",message:"The line crosses the X-axis at %(xIntercept)s comma 0 and the Y-axis at 0 comma %(yIntercept)s."},srLinearGraphOriginIntercept:{context:"Screen reader description for the intercept of the Line in the interactive graph widget when it intersects both the X-axis and Y-axis at the origin.",message:"The line crosses the X and Y axes at the graph's origin."},srLinearGrabHandle:{context:"Aria label for the interactive segment that allows the user to move the whole Line in the interactive graph widget.",message:"Line going through point %(point1X)s comma %(point1Y)s and point %(point2X)s comma %(point2Y)s."},srAngleStartingSide:{context:"Aria label for interactive Point 3 of the Angle in the interactive graph widget, explaining it's on the starting side of the Angle.",message:"Point 3, starting side at %(x)s comma %(y)s."},srAngleEndingSide:{context:"Aria label for interactive Point 2 of the Angle in the interactive graph widget, explaining it's on the ending side of the Angle.",message:"Point 2, ending side at %(x)s comma %(y)s."},srAngleVertexWithAngleMeasure:{context:"Aria label for interactive Point 1 of the Angle in the interactive graph widget, explaining it's the vertex of the Angle.",message:"Point 1, vertex at %(x)s comma %(y)s. Angle %(angleMeasure)s degrees."},srAngleGraphAriaLabel:{context:"Aria label for the container containing the Angle and its interactive elements in the interactive graph widget.",message:"An angle on a coordinate plane."},srAngleGraphAriaDescription:{context:"Screen reader description for the measure of the Angle in the interactive graph widget.",message:"The angle measure is %(angleMeasure)s degrees with a vertex at %(vertexX)s comma %(vertexY)s, a point on the starting side at %(startingSideX)s comma %(startingSideY)s and a point on the ending side at %(endingSideX)s comma %(endingSideY)s"},srAngleInteractiveElements:{context:"Screen reader description of all the elements available to interact with within the Angle graph in the interactive graph widget.",message:"An angle formed by 3 points. The vertex is at %(vertexX)s comma %(vertexY)s. The starting side point is at %(startingSideX)s comma %(startingSideY)s. The ending side point is at %(endingSideX)s comma %(endingSideY)s."},srSingleSegmentGraphAriaLabel:{context:"Aria label for the container containing one Line Segment in the interactive graph widget.",message:"A line segment on a coordinate plane."},srMultipleSegmentGraphAriaLabel:{context:"Aria label for the container containing multiple Line Segments in the interactive graph widget.",message:"%(countOfSegments)s line segments on a coordinate plane."},srMultipleSegmentIndividualLabel:{context:"Screen reader description for one individual Line Segment in the interactive graph widget, including the count for its order in the segments (e.g. 'Segment 1', 'Segment 2', etc.)",message:"Segment %(indexOfSegment)s: Endpoint 1 at %(point1X)s comma %(point1Y)s. Endpoint 2 at %(point2X)s comma %(point2Y)s."},srSingleSegmentLabel:{context:"Screen reader description for one individual Line Segment in the interactive graph widget.",message:"Endpoint 1 at %(point1X)s comma %(point1Y)s. Endpoint 2 at %(point2X)s comma %(point2Y)s."},srSegmentLength:{context:"Screen reader description for the length of a Line Segment in the interactive graph widget.",message:"Segment length %(length)s units."},srSingleSegmentGraphEndpointAriaLabel:{context:"Screen reader description for the endpoint of a Line Segment in the interactive graph widget when there is only one segment.",message:"Endpoint %(endpointNumber)s at %(x)s comma %(y)s."},srMultipleSegmentGraphEndpointAriaLabel:{context:"Screen reader description for the endpoint of a Line Segment in the interactive graph widget when there are multiple segments. Includes the count for the segment's order (e.g. 'Segment 1', 'Segment 2', etc.)",message:"Endpoint %(endpointNumber)s on segment %(indexOfSegment)s at %(x)s comma %(y)s."},srSegmentGrabHandle:{context:"Aria label for the interactive segment that allows the user to move the whole Line Segment in the interactive graph widget.",message:"Segment from %(point1X)s comma %(point1Y)s to %(point2X)s comma %(point2Y)s."},srLinearSystemGraph:{context:"Aria label for the container containing two lines as part of a Linear System in the interactive graph widget.",message:"Two lines on a coordinate plane."},srLinearSystemPoints:{context:"Screen reader description for the points of a line in the Linear System in the interactive graph widget.",message:"Line %(lineNumber)s has two points, point 1 at %(point1X)s comma %(point1Y)s and point 2 at %(point2X)s comma %(point2Y)s."},srLinearSystemPoint:{context:"Screen reader description for a point on a line in the Linear System in the interactive graph widget.",message:"Point %(pointSequence)s on line %(lineNumber)s at %(x)s comma %(y)s."},srLinearSystemGrabHandle:{context:"Aria label for the interactive segment that allows the user to move a whole line in the Linear System in the interactive graph widget.",message:"Line %(lineNumber)s going through point %(point1X)s comma %(point1Y)s and point %(point2X)s comma %(point2Y)s."},srLinearSystemIntersection:{context:"Screen reader description for the intersection of two lines in the Linear System in the interactive graph widget.",message:"Line 1 and line 2 intersect at point %(x)s comma %(y)s."},srLinearSystemParallel:{context:"Screen reader description when two lines are parallel in the Linear System in the interactive graph widget.",message:"Line 1 and line 2 are parallel."},srRayGraph:{context:"Screen reader description for the container containing a Ray in the interactive graph widget.",message:"A ray on a coordinate plane."},srRayPoints:{context:"Screen reader description for the points of a ray in the interactive graph widget.",message:"The endpoint is at %(point1X)s comma %(point1Y)s and the ray goes through point %(point2X)s comma %(point2Y)s."},srRayGrabHandle:{context:"Aria label for the interactive segment that allows the user to move the whole Ray in the interactive graph widget.",message:"Ray with endpoint %(point1X)s comma %(point1Y)s going through point %(point2X)s comma %(point2Y)s."},srRayEndpoint:{context:"Aria label for the initial point of a Ray (the point at which the ray starts) in the interactive graph widget.",message:"Endpoint at %(x)s comma %(y)s."},srRayTerminalPoint:{context:"Aria label for the point that determines the direction of the Ray in the interactive graph widget. The ray passes through this point.",message:"Through point at %(x)s comma %(y)s."},srVectorGraph:{context:"Screen reader description for the container containing a Vector in the interactive graph widget.",message:"A vector on a coordinate plane."},srVectorPoints:{context:"Screen reader description for the tail and tip of a vector in the interactive graph widget.",message:"The tail is at %(tailX)s comma %(tailY)s and the tip is at %(tipX)s comma %(tipY)s."},srVectorTipPoint:{context:"Aria label for the tip point of a Vector (the point with the arrowhead) in the interactive graph widget.",message:"Tip point at %(x)s comma %(y)s."},srVectorGrabHandle:{context:"Aria label for the interactive segment that allows the user to move the whole Vector in the interactive graph widget.",message:"Vector from %(tailX)s comma %(tailY)s to %(tipX)s comma %(tipY)s."},srQuadraticGraph:{context:"Aria label for the container containing a Quadratic function in the interactive graph widget.",message:"A parabola on a 4-quadrant coordinate plane."},srQuadraticFaceUp:{context:"Screen reader description for the direction of the Quadratic function in the interactive graph widget when it opens upward.",message:"The parabola opens upward."},srQuadraticFaceDown:{context:"Screen reader description for the direction of the Quadratic function in the interactive graph widget when it opens downward.",message:"The parabola opens downward."},srQuadraticGraphVertexOrigin:{context:"Screen reader description for the Quadratic function in the interactive graph widget when its vertex is at the origin.",message:"Vertex is at the origin."},srQuadraticGraphVertexXAxis:{context:"Screen reader description for the Quadratic function in the interactive graph widget when its vertex is on the X-axis.",message:"Vertex is on the X-axis."},srQuadraticGraphVertexYAxis:{context:"Screen reader description for the Quadratic function in the interactive graph widget when its vertex is on the Y-axis.",message:"Vertex is on the Y-axis."},srQuadraticGraphVertexQuadrant:{context:"Screen reader description for the Quadratic function in the interactive graph widget when its vertex is in a specific quadrant (quadrant 1, 2, 3, or 4).",message:"Vertex is in quadrant %(quadrant)s."},srQuadraticTwoXIntercepts:{context:"Screen reader description for the X-intercepts of the Quadratic function in the interactive graph widget when there are two X-intercepts.",message:"The X-intercepts are at %(intercept1)s comma 0 and %(intercept2)s comma 0."},srQuadraticOneXIntercept:{context:"Screen reader description for the X-intercept of the Quadratic function in the interactive graph widget when there is only one X-intercept.",message:"The X-intercept is at %(intercept)s comma 0."},srQuadraticYIntercept:{context:"Screen reader description for the Y-intercept of the Quadratic function in the interactive graph widget.",message:"The Y-intercept is at 0 comma %(intercept)s."},srQuadraticPointOrigin:{context:"Aria label for an interactive Point on the Quadratic function in the interactive graph widget when the Point is at the origin.",message:"Point %(pointNumber)s on parabola at the origin."},srQuadraticPointAxis:{context:"Aria label for an interactive Point on the Quadratic function in the interactive graph widget when the Point is on the X-axis or Y-axis.",message:"Point %(pointNumber)s on parabola at %(x)s comma %(y)s."},srQuadraticPointQuadrant:{context:"Aria label for an interactive Point on the Quadratic function in the interactive graph widget when the Point is in a specific quadrant.",message:"Point %(pointNumber)s on parabola in quadrant %(quadrant)s at %(x)s comma %(y)s."},srQuadraticInteractiveElements:{context:"Screen reader description of all the elements available to interact with within the Quadratic function in the interactive graph widget.",message:"Parabola with points at %(point1X)s comma %(point1Y)s, %(point2X)s comma %(point2Y)s, and %(point3X)s comma %(point3Y)s."},srPolygonGraph:{context:"Aria label for the container containing a Polygon in the interactive graph widget when it's on a plane/grid without axes.",message:"A polygon."},srPolygonGraphCoordinatePlane:{context:"Aria label for the container containing a Polygon in the interactive graph widget when it's on a coordinate plane.",message:"A polygon on a coordinate plane."},srPolygonGraphPointsNum:{context:"Screen reader description for the number of points in the Polygon in the interactive graph widget.",message:"The polygon has %(num)s points."},srPolygonGraphPointsOne:{context:"Screen reader description for the number of points in the Polygon in the interactive graph widget when there is only one point.",message:"The polygon has 1 point."},srPolygonElementsNum:{context:"Screen reader description for the Polygon in the interactive graph widget explaining that it has a certain number of points.",message:"A polygon with %(num)s points."},srPolygonElementsOne:{context:"Screen reader description for the Polygon in the interactive graph widget explaining that it has one point.",message:"A polygon with 1 point."},srPolygonPointAngleApprox:{context:"Screen reader description for the angle of a point in the Polygon in the interactive graph widget when it's not an exact integer.",message:"Angle approximately equal to %(angle)s degrees."},srPolygonPointAngle:{context:"Screen reader description for the angle of a point in the Polygon in the interactive graph widget when it's an integer.",message:"Angle equal to %(angle)s degrees."},srPolygonSideLength:{context:"Screen reader description for the side of the Polygon in the interactive graph widget when its length is an exact integer.",message:"A line segment, length equal to %(length)s units, connects to point %(pointNum)s."},srPolygonSideLengthApprox:{context:"Screen reader description for the side of the Polygon in the interactive graph widget when its length is not an exact integer.",message:"A line segment, length approximately equal to %(length)s units, connects to point %(pointNum)s."},srUnlimitedPolygonEmpty:{context:"Screen reader description for the empty container that will eventually contain a Polygon in the interactive graph widget after the user has added points.",message:"An empty coordinate plane."},srSinusoidGraph:{context:"Aria label for the container containing a Sinusoid function in the interactive graph widget.",message:"A sinusoid function on a coordinate plane."},srSinusoidRootPoint:{context:"Aria label for the Point defining the midline intersection of the Sinusoid function in the interactive graph widget.",message:"Midline intersection at %(x)s comma %(y)s."},srSinusoidMaxPoint:{context:"Aria label for the Point defining the maximum of the Sinusoid function in the interactive graph widget.",message:"Maximum point at %(x)s comma %(y)s."},srSinusoidMinPoint:{context:"Aria label for the Point defining the minimum of the Sinusoid function in the interactive graph widget.",message:"Minimum point at %(x)s comma %(y)s."},srSinusoidFlatPoint:{context:"Aria label for the Point defining the amplitude of the Sinusoid function in the interactive graph widget when the amplitude is 0.",message:"Line through point at %(x)s comma %(y)s."},srSinusoidDescription:{context:"Screen reader description of the Sinusoid function in the interactive graph widget.",message:"The graph shows a wave with a minimum value of %(minValue)s and a maximum value of %(maxValue)s. The wave completes a full cycle from %(cycleStart)s to %(cycleEnd)s."},srSinusoidInteractiveElements:{context:"Screen reader description of all the elements available to interact with within the Sinusoid function in the interactive graph widget.",message:"Sinusoid graph with midline intersection point at %(point1X)s comma %(point1Y)s and extremum point at %(point2X)s comma %(point2Y)s."},srExponentialGraph:{context:"Aria label for the container containing an Exponential function in the interactive graph widget.",message:"An exponential curve on a coordinate plane."},srExponentialPoint1:{context:"Aria label for the first Point on the Exponential function in the interactive graph widget.",message:"Point 1 at %(x)s comma %(y)s."},srExponentialPoint2:{context:"Aria label for the second Point on the Exponential function in the interactive graph widget.",message:"Point 2 at %(x)s comma %(y)s."},srExponentialDescription:{context:"Screen reader description of the Exponential function in the interactive graph widget.",message:"The graph shows an exponential curve passing through point %(point1X)s comma %(point1Y)s and point %(point2X)s comma %(point2Y)s with a horizontal asymptote at y equals %(asymptoteY)s."},srExponentialInteractiveElements:{context:"Screen reader description of all the elements available to interact with within the Exponential function in the interactive graph widget.",message:"Exponential graph with point 1 at %(point1X)s comma %(point1Y)s, point 2 at %(point2X)s comma %(point2Y)s, and horizontal asymptote at y equals %(asymptoteY)s."},srExponentialAsymptote:{context:"Aria label for the draggable horizontal asymptote line in the Exponential function in the interactive graph widget.",message:"Horizontal asymptote at y equals %(asymptoteY)s. Use up and down arrow keys to move."},srLogarithmGraph:{context:"Aria label for the container containing a Logarithm function in the interactive graph widget.",message:"A logarithm function on a coordinate plane."},srLogarithmPoint1:{context:"Aria label for the first Point on the Logarithm function in the interactive graph widget.",message:"Point 1 at %(x)s comma %(y)s."},srLogarithmPoint2:{context:"Aria label for the second Point on the Logarithm function in the interactive graph widget.",message:"Point 2 at %(x)s comma %(y)s."},srLogarithmDescription:{context:"Screen reader description of the Logarithm function in the interactive graph widget.",message:"The graph shows a logarithm curve passing through point %(point1X)s comma %(point1Y)s and point %(point2X)s comma %(point2Y)s with a vertical asymptote at x equals %(asymptoteX)s."},srLogarithmInteractiveElements:{context:"Screen reader description of all the elements available to interact with within the Logarithm function in the interactive graph widget.",message:"Logarithm graph with point 1 at %(point1X)s comma %(point1Y)s, point 2 at %(point2X)s comma %(point2Y)s, and vertical asymptote at x equals %(asymptoteX)s."},srLogarithmAsymptote:{context:"Aria label for the draggable vertical asymptote line in the Logarithm function in the interactive graph widget.",message:"Vertical asymptote at x equals %(asymptoteX)s. Use left and right arrow keys to move."},srAbsoluteValueGraph:{context:"Aria label for the container containing an Absolute Value function in the interactive graph widget.",message:"An absolute value function on a coordinate plane."},srAbsoluteValueVertexPoint:{context:"Aria label for the Point defining the vertex of the Absolute Value function in the interactive graph widget.",message:"Vertex point at %(x)s comma %(y)s."},srAbsoluteValueSecondPoint:{context:"Aria label for the second Point defining the slope of the Absolute Value function in the interactive graph widget.",message:"Point on arm at %(x)s comma %(y)s."},srAbsoluteValueDescription:{context:"Screen reader description of the Absolute Value function in the interactive graph widget.",message:"The graph shows an absolute value function with vertex at %(x)s comma %(y)s and slope %(slope)s."},srAbsoluteValueInteractiveElements:{context:"Screen reader description of all the elements available to interact with within the Absolute Value function in the interactive graph widget.",message:"Absolute value graph with vertex point at %(point1X)s comma %(point1Y)s and arm point at %(point2X)s comma %(point2Y)s."},srTangentGraph:{context:"Aria label for the container containing a Tangent function in the interactive graph widget.",message:"A tangent function on a coordinate plane."},srTangentInflectionPoint:{context:"Aria label for the Point defining the inflection point of the Tangent function in the interactive graph widget.",message:"Inflection point at %(x)s comma %(y)s."},srTangentSecondPoint:{context:"Aria label for the second control point of the Tangent function in the interactive graph widget.",message:"Control point at %(x)s comma %(y)s."},srTangentDescription:{context:"Screen reader description of the Tangent function in the interactive graph widget.",message:"The graph shows a tangent function with an inflection point at %(inflectionX)s comma %(inflectionY)s."},srTangentInteractiveElements:{context:"Screen reader description of all the elements available to interact with within the Tangent function in the interactive graph widget.",message:"Tangent graph with inflection point at %(point1X)s comma %(point1Y)s and control point at %(point2X)s comma %(point2Y)s."},imageExploreButton:"Explore image",imageExploreButtonAriaLabel:"Explore image and description",imageAlternativeTitle:"Explore image and description",imageDescriptionLabel:"Description",imageZoomAriaLabel:"Make image bigger.",imageResetZoomAriaLabel:"Close image.",gifPlayButtonLabel:"Play Animation",gifPauseButtonLabel:"Pause Animation",definitionIdentifier:"Definition of: %(word)s"};const mockStrings={characterCount:({used,num})=>num===1?`${used} / ${num} Character`:`${used} / ${num} Characters`,closeKeypad:"close math keypad",openKeypad:"open math keypad",mathInputBox:"Math input box",removeHighlight:"Remove highlight",addHighlight:"Add highlight",hintPos:({pos})=>`Hint #${pos}`,errorRendering:({error})=>`Error rendering: ${error}`,APPROXIMATED_PI_ERROR:"Your answer is close, but you may "+"have approximated pi. Enter your "+"answer as a multiple of pi, like "+"<code>12\\ \\text{pi}</code> or "+"<code>2/3\\ \\text{pi}</code>",EMPTY_RESPONSE_ERROR:"There are still more parts of this question to answer.",EXTRA_SYMBOLS_ERROR:"We could not understand your "+"answer. Please check your answer for extra "+"text or symbols.",NEEDS_TO_BE_SIMPLFIED_ERROR:"Your answer is almost correct, "+"but it needs to be simplified.",MISSING_PERCENT_ERROR:"Your answer is almost correct, "+"but it is missing a "+"<code>\\%</code> at the end.",MULTIPLICATION_SIGN_ERROR:"I'm a computer. I only understand "+"multiplication if you use an asterisk "+"(*) as the multiplication sign.",USER_INPUT_EMPTY:"Your answer is empty.",USER_INPUT_TOO_LONG:"Please shorten your response.",WRONG_CASE_ERROR:"Your answer includes use of a variable with the wrong case.",WRONG_LETTER_ERROR:"Your answer includes a wrong variable letter.",invalidSelection:"Make sure you select something for every row.",INVALID_CHOICE_SELECTION:"Invalid choice selection",ERROR_TITLE:"Oops!",ERROR_MESSAGE:"Sorry, I don't understand that!",hints:"Hints",getAnotherHint:"Get another hint",deprecatedStandin:"Sorry, this part of the question is no longer available. 😅 Don't worry, you won't be graded on this part. Keep going!",keepTrying:"Keep trying",tryAgain:"Try again",check:"Check",correctExcited:"Correct!",nextQuestion:"Next question",skipToTitle:({title})=>`Skip to ${title}`,current:"Current",correct:"Correct",correctSelected:"Correct (selected)",incorrect:"Incorrect",incorrectSelected:"Incorrect (selected)",hideExplanation:"Hide explanation",explain:"Explain",INVALID_MESSAGE_PREFIX:"We couldn't grade your answer.",DEFAULT_INVALID_MESSAGE_1:"It looks like you left something blank or ",DEFAULT_INVALID_MESSAGE_2:"entered in an invalid answer.",integerExample:"an integer, like $6$",properExample:"a *proper* fraction, like $1/2$ or $6/10$",simplifiedProperExample:"a *simplified proper* fraction, like $3/5$",improperExample:"an *improper* fraction, like $10/7$ or $14/8$",simplifiedImproperExample:"a *simplified improper* fraction, like $7/4$",mixedExample:"a mixed number, like $1\\ 3/4$",decimalExample:"an *exact* decimal, like $0.75$",percentExample:"a percent, like $12.34\\%$",piExample:"a multiple of pi, like $12\\ \\text{pi}$ or $2/3\\ \\text{pi}$",yourAnswer:"**Your answer should be** ",yourAnswerLabel:"Your answer:",addPoints:"Click to add points",addVertices:"Click to add vertices",tapMultiple:"Tap each dot on the image to select all answers that apply.",tapSingle:"Tap each dot on the image to select an answer.",clickMultiple:"Click each dot on the image to select all answers that apply.",clickSingle:"Click each dot on the image to select an answer.",choices:"Choices:",answers:({num})=>num===1?`${num} answer`:`${num} answers`,hideAnswersToggleLabel:"Hide answer choices",moves:({num})=>num===1?`Moves: ${num}`:`Moves: ${num}`,clickTiles:"Click on the tiles to change the lights.",turnOffLights:"You must turn on all of the lights to continue.",fillAllCells:"Make sure you fill in all cells in the matrix.",molecularDrawing:({content})=>`A molecular structure drawing. SMILES notation: ${content}`,switchDirection:"Switch direction",circleOpen:"Make circle open",circleFilled:"Make circle filled",numDivisions:"Number of divisions:",divisions:({divRangeString})=>`Please make sure the number of divisions is in the range ${divRangeString}.`,dragHandles:"Drag handles to make graph",tapAddPoints:"Tap to add points",false:"False",true:"True",no:"No",yes:"Yes",chooseCorrectNum:"Please choose the correct number of answers.",notNoneOfTheAbove:"'None of the above' may not be selected when other answers are selected.",noneOfTheAbove:"None of the above",chooseNumAnswers:({numCorrect})=>`Choose ${numCorrect} answers:`,chooseAllAnswers:"Choose all answers that apply:",chooseOneAnswer:"Choose 1 answer:",choiceCheckedCorrect:({letter})=>`(Choice ${letter}, Checked, Correct)`,choiceCorrect:({letter})=>`(Choice ${letter}, Correct)`,choiceCheckedIncorrect:({letter})=>`(Choice ${letter}, Checked, Incorrect)`,choiceIncorrect:({letter})=>`(Choice ${letter}, Incorrect)`,choiceChecked:({letter})=>`(Choice ${letter}, Checked)`,choice:({letter})=>`(Choice ${letter})`,notSelected:"not selected",choicesSelected:({num})=>num===1?`${num} choice selected`:`${num} choices selected`,bringBack:"Bring back",openMenuForChoice:({letter})=>`Open menu for Choice ${letter}`,letters:"A B C D E F G H I J K L M N O P Q R S T U V W X Y Z",scrollAnswers:"Scroll Answers",scrollStart:"Scroll to view start of the content",scrollEnd:"Scroll to view the end of the content",rightArrow:"Reaction arrow pointing to the right.",dontUnderstandUnits:"I couldn't understand those units.",checkSigFigs:"Check your significant figures.",answerNumericallyIncorrect:"That answer is numerically incorrect.",checkUnits:"Check your units.",dontUnderstand:"I don't understand that",loading:"Loading...",videoTranscript:"See video transcript",somethingWrong:"Something went wrong.",videoWrapper:"Khan Academy video wrapper",pythonProgram:"Python program",computerScienceProgram:"Computer science program",embeddedContent:"Embedded content",mathInputTitle:"mathematics keyboard",mathInputDescription:"Use keyboard/mouse to interact with math-based input fields",sin:"sin",cos:"cos",tan:"tan",simulationLoadFail:"Sorry, this simulation cannot load.",simulationLocaleWarning:"Sorry, this simulation isn't available in your language.",selectAnAnswer:"Select an answer",srGraphInstructions:"Use the Tab key to move through the interactive elements in the graph. When an interactive element has focus, use Control + Shift + Arrows to move it.",srUnlimitedGraphInstructions:"Press Shift + Enter to interact with the graph. Use the Tab key to move through the interactive elements in the graph and access the graph Action Bar. When an interactive element has focus, use Control + Shift + Arrows to move it or use the Delete key to remove it from the graph. Use the buttons in the Action Bar to add or adjust elements within the graph.",graphKeyboardPrompt:"Press Shift + Enter to interact with the graph",addPoint:"Add Point",removePoint:"Remove Point",closePolygon:"Close shape",openPolygon:"Re-open shape",ungradedInteractiveGraph:"Use this graph to check your thinking, but it does not count as your answer.",srPointAtCoordinates:({num,x,y})=>`Point ${num} at ${x} comma ${y}.`,srInteractiveElements:({elements})=>`Interactive elements: ${elements}`,srNoInteractiveElements:"No interactive elements",srCircleGraph:"A circle on a coordinate plane.",srCircleShape:({centerX,centerY})=>`Circle. The center point is at ${centerX} comma ${centerY}.`,srCircleRadiusPointRight:({radiusPointX,radiusPointY})=>`Right radius endpoint at ${radiusPointX} comma ${radiusPointY}.`,srCircleRadiusPointLeft:({radiusPointX,radiusPointY})=>`Left radius endpoint at ${radiusPointX} comma ${radiusPointY}.`,srCircleRadius:({radius})=>`Circle radius is ${radius}.`,srCircleOuterPoints:({point1X,point1Y,point2X,point2Y,point3X,point3Y,point4X,point4Y})=>`Points on the circle at ${point1X} comma ${point1Y}, ${point2X} comma ${point2Y}, ${point3X} comma ${point3Y}, ${point4X} comma ${point4Y}.`,srLinearGraph:"A line on a coordinate plane.",srLinearGraphPoints:({point1X,point1Y,point2X,point2Y})=>`The line has two points, point 1 at ${point1X} comma ${point1Y} and point 2 at ${point2X} comma ${point2Y}.`,srLinearGraphSlopeIncreasing:"Its slope increases from left to right.",srLinearGraphSlopeDecreasing:"Its slope decreases from left to right.",srLinearGraphSlopeHorizontal:"Its slope is zero.",srLinearGraphSlopeVertical:"Its slope is undefined.",srLinearGraphXOnlyIntercept:({xIntercept})=>`The line crosses the X-axis at ${xIntercept} comma 0.`,srLinearGraphYOnlyIntercept:({yIntercept})=>`The line crosses the Y-axis at 0 comma ${yIntercept}.`,srLinearGraphBothIntercepts:({xIntercept,yIntercept})=>`The line crosses the X-axis at ${xIntercept} comma 0 and the Y-axis at 0 comma ${yIntercept}.`,srLinearGraphOriginIntercept:"The line crosses the X and Y axes at the graph's origin.",srLinearGrabHandle:({point1X,point1Y,point2X,point2Y})=>`Line going through point ${point1X} comma ${point1Y} and point ${point2X} comma ${point2Y}.`,srAngleStartingSide:({x,y})=>`Point 3, starting side at ${x} comma ${y}.`,srAngleEndingSide:({x,y})=>`Point 2, ending side at ${x} comma ${y}.`,srAngleVertexWithAngleMeasure:({x,y,angleMeasure})=>`Point 1, vertex at ${x} comma ${y}. Angle ${angleMeasure} degrees.`,srAngleGraphAriaLabel:"An angle on a coordinate plane.",srAngleGraphAriaDescription:({angleMeasure,vertexX,vertexY,startingSideX,startingSideY,endingSideX,endingSideY})=>`The angle measure is ${angleMeasure} degrees with a vertex at ${vertexX} comma ${vertexY}, a point on the starting side at ${startingSideX} comma ${startingSideY} and a point on the ending side at ${endingSideX} comma ${endingSideY}.`,srAngleInteractiveElements:({vertexX,vertexY,startingSideX,startingSideY,endingSideX,endingSideY})=>`An angle formed by 3 points. The vertex is at ${vertexX} comma ${vertexY}. The starting side point is at ${startingSideX} comma ${startingSideY}. The ending side point is at ${endingSideX} comma ${endingSideY}.`,srSingleSegmentGraphAriaLabel:"A line segment on a coordinate plane.",srMultipleSegmentGraphAriaLabel:({countOfSegments})=>`${countOfSegments} segments on a coordinate plane.`,srMultipleSegmentIndividualLabel:({point1X,point1Y,point2X,point2Y,indexOfSegment})=>`Segment ${indexOfSegment}: Endpoint 1 at ${point1X} comma ${point1Y}. Endpoint 2 at ${point2X} comma ${point2Y}.`,srSingleSegmentLabel:({point1X,point1Y,point2X,point2Y})=>`Endpoint 1 at ${point1X} comma ${point1Y}. Endpoint 2 at ${point2X} comma ${point2Y}.`,srSegmentLength:({length})=>`Segment length ${length} units.`,srSingleSegmentGraphEndpointAriaLabel:({endpointNumber,x,y})=>`Endpoint ${endpointNumber} at ${x} comma ${y}.`,srMultipleSegmentGraphEndpointAriaLabel:({endpointNumber,x,y,indexOfSegment})=>`Endpoint ${endpointNumber} on segment ${indexOfSegment} at ${x} comma ${y}.`,srSegmentGrabHandle:({point1X,point1Y,point2X,point2Y})=>`Segment from ${point1X} comma ${point1Y} to ${point2X} comma ${point2Y}.`,srLinearSystemGraph:"Two lines on a coordinate plane.",srLinearSystemPoints:({lineNumber,point1X,point1Y,point2X,point2Y})=>`Line ${lineNumber} has two points, point 1 at ${point1X} comma ${point1Y} and point 2 at ${point2X} comma ${point2Y}.`,srLinearSystemPoint:({lineNumber,pointSequence,x,y})=>`Point ${pointSequence} on line ${lineNumber} at ${x} comma ${y}.`,srLinearSystemGrabHandle:({lineNumber,point1X,point1Y,point2X,point2Y})=>`Line ${lineNumber} going through point ${point1X} comma ${point1Y} and point ${point2X} comma ${point2Y}.`,srLinearSystemIntersection:({x,y})=>`Line 1 and line 2 intersect at point ${x} comma ${y}.`,srLinearSystemParallel:"Line 1 and line 2 are parallel.",srRayGraph:"A ray on a coordinate plane.",srRayPoints:({point1X,point1Y,point2X,point2Y})=>`The endpoint is at ${point1X} comma ${point1Y} and the ray goes through point ${point2X} comma ${point2Y}.`,srRayGrabHandle:({point1X,point1Y,point2X,point2Y})=>`Ray with endpoint ${point1X} comma ${point1Y} going through point ${point2X} comma ${point2Y}.`,srRayEndpoint:({x,y})=>`Endpoint at ${x} comma ${y}.`,srRayTerminalPoint:({x,y})=>`Through point at ${x} comma ${y}.`,srVectorGraph:"A vector on a coordinate plane.",srVectorPoints:({tailX,tailY,tipX,tipY})=>`The tail is at ${tailX} comma ${tailY} and the tip is at ${tipX} comma ${tipY}.`,srVectorTipPoint:({x,y})=>`Tip point at ${x} comma ${y}.`,srVectorGrabHandle:({tailX,tailY,tipX,tipY})=>`Vector from ${tailX} comma ${tailY} to ${tipX} comma ${tipY}.`,srQuadraticGraph:"A parabola on a 4-quadrant coordinate plane.",srQuadraticFaceUp:"The parabola opens upward.",srQuadraticFaceDown:"The parabola opens downward.",srQuadraticGraphVertexOrigin:"Vertex is at the origin.",srQuadraticGraphVertexXAxis:"Vertex is on the X-axis.",srQuadraticGraphVertexYAxis:"Vertex is on the Y-axis.",srQuadraticGraphVertexQuadrant:({quadrant})=>`Vertex is in quadrant ${quadrant}.`,srQuadraticTwoXIntercepts:({intercept1,intercept2})=>`The X-intercepts are at ${intercept1} comma 0 and ${intercept2} comma 0.`,srQuadraticOneXIntercept:({intercept})=>`The X-intercept is at ${intercept} comma 0.`,srQuadraticYIntercept:({intercept})=>`The Y-intercept is at 0 comma ${intercept}.`,srQuadraticPointOrigin:({pointNumber})=>`Point ${pointNumber} on parabola at the origin.`,srQuadraticPointAxis:({pointNumber,x,y})=>`Point ${pointNumber} on parabola at ${x} comma ${y}.`,srQuadraticPointQuadrant:({pointNumber,x,y,quadrant})=>`Point ${pointNumber} on parabola in quadrant ${quadrant} at ${x} comma ${y}.`,srQuadraticInteractiveElements:({point1X,point1Y,point2X,point2Y,point3X,point3Y})=>`Parabola with points at ${point1X} comma ${point1Y}, ${point2X} comma ${point2Y}, and ${point3X} comma ${point3Y}.`,srPolygonGraph:"A polygon.",srPolygonGraphCoordinatePlane:"A polygon on a coordinate plane.",srPolygonGraphPointsNum:({num})=>`The polygon has ${num} points.`,srPolygonGraphPointsOne:"The polygon has 1 point.",srPolygonElementsNum:({num})=>`A polygon with ${num} points.`,srPolygonElementsOne:"A polygon with 1 point.",srPolygonPointAngleApprox:({angle})=>`Angle approximately equal to ${angle} degrees.`,srPolygonPointAngle:({angle})=>`Angle equal to ${angle} degrees.`,srPolygonSideLength:({pointNum,length})=>`A line segment, length equal to ${length} units, connects to point ${pointNum}.`,srPolygonSideLengthApprox:({pointNum,length})=>`A line segment, length approximately equal to ${length} units, connects to point ${pointNum}.`,srUnlimitedPolygonEmpty:"An empty coordinate plane.",srSinusoidGraph:"A sinusoid function on a coordinate plane.",srSinusoidRootPoint:({x,y})=>`Midline intersection at ${x} comma ${y}.`,srSinusoidMaxPoint:({x,y})=>`Maximum point at ${x} comma ${y}.`,srSinusoidMinPoint:({x,y})=>`Minimum point at ${x} comma ${y}.`,srSinusoidFlatPoint:({x,y})=>`Line through point at ${x} comma ${y}.`,srSinusoidDescription:({minValue,maxValue,cycleStart,cycleEnd})=>`The graph shows a wave with a minimum value of ${minValue} and a maximum value of ${maxValue}. The wave completes a full cycle from ${cycleStart} to ${cycleEnd}.`,srSinusoidInteractiveElements:({point1X,point1Y,point2X,point2Y})=>`Sinusoid graph with midline intersection point at ${point1X} comma ${point1Y} and extremum point at ${point2X} comma ${point2Y}.`,srExponentialGraph:"An exponential curve on a coordinate plane.",srExponentialPoint1:({x,y})=>`Point 1 at ${x} comma ${y}.`,srExponentialPoint2:({x,y})=>`Point 2 at ${x} comma ${y}.`,srExponentialDescription:({point1X,point1Y,point2X,point2Y,asymptoteY})=>`The graph shows an exponential curve passing through point ${point1X} comma ${point1Y} and point ${point2X} comma ${point2Y} with a horizontal asymptote at y equals ${asymptoteY}.`,srExponentialInteractiveElements:({point1X,point1Y,point2X,point2Y,asymptoteY})=>`Exponential graph with point 1 at ${point1X} comma ${point1Y}, point 2 at ${point2X} comma ${point2Y}, and horizontal asymptote at y equals ${asymptoteY}.`,srExponentialAsymptote:({asymptoteY})=>`Horizontal asymptote at y equals ${asymptoteY}. Use up and down arrow keys to move.`,srLogarithmGraph:"A logarithm function on a coordinate plane.",srLogarithmPoint1:({x,y})=>`Point 1 at ${x} comma ${y}.`,srLogarithmPoint2:({x,y})=>`Point 2 at ${x} comma ${y}.`,srLogarithmDescription:({point1X,point1Y,point2X,point2Y,asymptoteX})=>`The graph shows a logarithm curve passing through point ${point1X} comma ${point1Y} and point ${point2X} comma ${point2Y} with a vertical asymptote at x equals ${asymptoteX}.`,srLogarithmInteractiveElements:({point1X,point1Y,point2X,point2Y,asymptoteX})=>`Logarithm graph with point 1 at ${point1X} comma ${point1Y}, point 2 at ${point2X} comma ${point2Y}, and vertical asymptote at x equals ${asymptoteX}.`,srLogarithmAsymptote:({asymptoteX})=>`Vertical asymptote at x equals ${asymptoteX}. Use left and right arrow keys to move.`,srAbsoluteValueGraph:"An absolute value function on a coordinate plane.",srAbsoluteValueVertexPoint:({x,y})=>`Vertex point at ${x} comma ${y}.`,srAbsoluteValueSecondPoint:({x,y})=>`Point on arm at ${x} comma ${y}.`,srAbsoluteValueDescription:({x,y,slope})=>`The graph shows an absolute value function with vertex at ${x} comma ${y} and slope ${slope}.`,srAbsoluteValueInteractiveElements:({point1X,point1Y,point2X,point2Y})=>`Absolute value graph with vertex point at ${point1X} comma ${point1Y} and arm point at ${point2X} comma ${point2Y}.`,srTangentGraph:"A tangent function on a coordinate plane.",srTangentInflectionPoint:({x,y})=>`Inflection point at ${x} comma ${y}.`,srTangentSecondPoint:({x,y})=>`Control point at ${x} comma ${y}.`,srTangentDescription:({inflectionX,inflectionY})=>`The graph shows a tangent function with an inflection point at ${inflectionX} comma ${inflectionY}.`,srTangentInteractiveElements:({point1X,point1Y,point2X,point2Y})=>`Tangent graph with inflection point at ${point1X} comma ${point1Y} and control point at ${point2X} comma ${point2Y}.`,imageExploreButton:"Explore image",imageExploreButtonAriaLabel:"Explore image and description",imageAlternativeTitle:"Explore image and description",imageDescriptionLabel:"Description",imageZoomAriaLabel:"Make image bigger.",imageResetZoomAriaLabel:"Close image.",gifPlayButtonLabel:"Play Animation",gifPauseButtonLabel:"Pause Animation",definitionIdentifier:({word})=>`Definition of: ${word}`};const errorToString={APPROXIMATED_PI_ERROR:"APPROXIMATED_PI_ERROR",CHOOSE_CORRECT_NUM_ERROR:"chooseCorrectNum",EMPTY_RESPONSE_ERROR:"EMPTY_RESPONSE_ERROR",EXTRA_SYMBOLS_ERROR:"EXTRA_SYMBOLS_ERROR",FILL_ALL_CELLS_ERROR:"fillAllCells",INVALID_CHOICE_SELECTION:"INVALID_CHOICE_SELECTION",INVALID_SELECTION_ERROR:"invalidSelection",MISSING_PERCENT_ERROR:"MISSING_PERCENT_ERROR",MULTIPLICATION_SIGN_ERROR:"MULTIPLICATION_SIGN_ERROR",NEEDS_TO_BE_SIMPLIFIED_ERROR:"NEEDS_TO_BE_SIMPLFIED_ERROR",NOT_NONE_ABOVE_ERROR:"notNoneOfTheAbove",USER_INPUT_EMPTY:"USER_INPUT_EMPTY",USER_INPUT_TOO_LONG:"USER_INPUT_TOO_LONG",WRONG_CASE_ERROR:"WRONG_CASE_ERROR",WRONG_LETTER_ERROR:"WRONG_LETTER_ERROR"};function mapErrorToString(err,translatedStrings){if(!err){return err}return translatedStrings[errorToString[err]]||err}
5
+ const strings={characterCount:{one:"%(used)s / %(num)s Character",other:"%(used)s / %(num)s Characters"},closeKeypad:"close math keypad",openKeypad:"open math keypad",mathInputBox:"Math input box",removeHighlight:"Remove highlight",addHighlight:"Add highlight",hintPos:"Hint #%(pos)s",errorRendering:"Error rendering: %(error)s",APPROXIMATED_PI_ERROR:"Your answer is close, but you may "+"have approximated pi. Enter your "+"answer as a multiple of pi, like "+"12 pi or "+"2/3 pi",EMPTY_RESPONSE_ERROR:"There are still more parts of this question to answer.",EXTRA_SYMBOLS_ERROR:"We could not understand your "+"answer. Please check your answer for extra "+"text or symbols.",NEEDS_TO_BE_SIMPLFIED_ERROR:"Your answer is almost correct, "+"but it needs to be simplified.",MISSING_PERCENT_ERROR:"Your answer is almost correct, "+"but it is missing a "+"<code>\\\\%</code> at the end.",MULTIPLICATION_SIGN_ERROR:"I'm a computer. I only understand "+"multiplication if you use an asterisk "+"(*) as the multiplication sign.",USER_INPUT_EMPTY:"Your answer is empty.",USER_INPUT_TOO_LONG:"Please shorten your response.",WRONG_CASE_ERROR:"Your answer includes use of a variable with the wrong case.",WRONG_LETTER_ERROR:"Your answer includes a wrong variable letter.",invalidSelection:"Make sure you select something for every row.",INVALID_CHOICE_SELECTION:"Invalid choice selection",ERROR_TITLE:"Oops!",ERROR_MESSAGE:"Sorry, I don't understand that!",hints:"Hints",getAnotherHint:"Get another hint",deprecatedStandin:"Sorry, this part of the question is no longer available. 😅 Don't worry, you won't be graded on this part. Keep going!",keepTrying:"Keep trying",tryAgain:"Try again",check:"Check",correctExcited:"Correct!",nextQuestion:"Next question",skipToTitle:"Skip to %(title)s",current:"Current",correct:"Correct",correctSelected:"Correct (selected)",incorrect:"Incorrect",incorrectSelected:"Incorrect (selected)",hideExplanation:"Hide explanation",explain:"Explain",INVALID_MESSAGE_PREFIX:"We couldn't grade your answer.",DEFAULT_INVALID_MESSAGE_1:"It looks like you left something blank or ",DEFAULT_INVALID_MESSAGE_2:"entered in an invalid answer.",integerExample:"an integer, like $6$",properExample:"a *proper* fraction, like $1/2$ or $6/10$",simplifiedProperExample:"a *simplified proper* fraction, like $3/5$",improperExample:"an *improper* fraction, like $10/7$ or $14/8$",simplifiedImproperExample:"a *simplified improper* fraction, like $7/4$",mixedExample:"a mixed number, like $1\\\\ 3/4$",decimalExample:"an *exact* decimal, like $0.75$",percentExample:"a percent, like $12.34\\\\%$",piExample:"a multiple of pi, like $12$ pi or $2/3$ pi",yourAnswer:"**Your answer should be** ",yourAnswerLabel:"Your answer:",addPoints:"Click to add points",addVertices:"Click to add vertices",tapMultiple:"Tap each dot on the image to select all answers that apply.",tapSingle:"Tap each dot on the image to select an answer.",clickMultiple:"Click each dot on the image to select all answers that apply.",clickSingle:"Click each dot on the image to select an answer.",choices:"Choices:",answers:{one:"%(num)s answer",other:"%(num)s answers"},hideAnswersToggleLabel:"Hide answer choices",moves:{one:"Moves: %(num)s",other:"Moves: %(num)s"},clickTiles:"Click on the tiles to change the lights.",turnOffLights:"You must turn on all of the lights to continue.",fillAllCells:"Make sure you fill in all cells in the matrix.",molecularDrawing:"A molecular structure drawing. SMILES notation: %(content)s",switchDirection:"Switch direction",circleOpen:"Make circle open",circleFilled:"Make circle filled",numDivisions:"Number of divisions:",divisions:"Please make sure the number of divisions is in the range %(divRangeString)s.",dragHandles:"Drag handles to make graph",tapAddPoints:"Tap to add points",false:"False",true:"True",no:"No",yes:"Yes",chooseCorrectNum:"Please choose the correct number of answers.",notNoneOfTheAbove:"'None of the above' may not be selected when other answers are selected.",noneOfTheAbove:"None of the above",chooseNumAnswers:"Choose %(numCorrect)s answers:",chooseAllAnswers:"Choose all answers that apply:",chooseOneAnswer:"Choose 1 answer:",choiceCheckedCorrect:"(Choice %(letter)s, Checked, Correct)",choiceCorrect:"(Choice %(letter)s, Correct)",choiceCheckedIncorrect:"(Choice %(letter)s, Checked, Incorrect)",choiceIncorrect:"(Choice %(letter)s, Incorrect)",choiceChecked:"(Choice %(letter)s, Checked)",choice:"(Choice %(letter)s)",notSelected:{context:"Screen reader announcement for a choice that is not selected",message:"not selected"},choicesSelected:{one:"%(num)s choice selected",other:"%(num)s choices selected"},bringBack:"Bring back",openMenuForChoice:"Open menu for Choice %(letter)s",letters:{context:"This is a list of single-character labels that will appear in front of multiple-choice options. For instance, a multiple-choice question with three options would display (A) first option (B) second option (C) third option. There must be spaces between each of the different characters. The characters will show up next to options in the order that they are listed here. Most multiple choice questions have 5 or fewer options.",message:"A B C D E F G H I J K L M N O P Q R S T U V W X Y Z"},scrollAnswers:"Scroll Answers",scrollStart:"Scroll to view start of the content",scrollEnd:"Scroll to view the end of the content",rightArrow:"Reaction arrow pointing to the right.",dontUnderstandUnits:"I couldn't understand those units.",checkSigFigs:"Check your significant figures.",answerNumericallyIncorrect:"That answer is numerically incorrect.",checkUnits:"Check your units.",dontUnderstand:"I don't understand that",loading:"Loading...",videoTranscript:"See video transcript",somethingWrong:"Something went wrong.",videoWrapper:"Khan Academy video wrapper",pythonProgram:"Python program",computerScienceProgram:"Computer science program",embeddedContent:"Embedded content",mathInputTitle:"mathematics keyboard",mathInputDescription:"Use keyboard/mouse to interact with math-based input fields",sin:"sin",cos:"cos",tan:"tan",simulationLoadFail:"Sorry, this simulation cannot load.",simulationLocaleWarning:"Sorry, this simulation isn't available in your language.",selectAnAnswer:"Select an answer",addPoint:"Add Point",removePoint:"Remove Point",graphKeyboardPrompt:"Press Shift + Enter to interact with the graph",ungradedInteractiveGraph:"Use this graph to check your thinking, but it does not count as your answer.",srInteractiveElements:"Interactive elements: %(elements)s",srNoInteractiveElements:"No interactive elements",closePolygon:{context:"Button label for the button that closes an incomplete polygon created by the user in the interactive graph widget.",message:"Close shape"},openPolygon:{context:"Button label for the button that opens a closed polygon created by the user in the interactive graph widget.",message:"Re-open shape"},srGraphInstructions:{context:"Screen reader-only instructions for using the keyboard to move through the interactive elements in the interactive graph widget.",message:"Use the Tab key to move through the interactive elements in the graph. When an interactive element has focus, use Control + Shift + Arrows to move it."},srUnlimitedGraphInstructions:{context:"Screen reader-only instructions for using the keyboard to move through the 'unlimited' (addable/deletable by the user) interactive elements in the interactive graph widget.",message:"Press Shift + Enter to interact with the graph. Use the Tab key to move through the interactive elements in the graph and access the graph Action Bar. When an interactive element has focus, use Control + Shift + Arrows to move it or use the Delete key to remove it from the graph. Use the buttons in the Action Bar to add or adjust elements within the graph."},srPointAtCoordinates:{context:"Aria label for an interactive Point element in the interactive graph widget, including the count for its order in the points (e.g. 'Point 1 at 0 comma 0'). Coordinate (x, y) is written out as 'x comma y'.",message:"Point %(num)s at %(x)s comma %(y)s."},srCircleGraph:{context:"Aria label for the container containing the Circle and its interactive elements in the interactive graph widget.",message:"A circle on a coordinate plane."},srCircleShape:{context:"Aria label for the interactive Circle element in the interactive graph widget.",message:"Circle. The center point is at %(centerX)s comma %(centerY)s."},srCircleRadiusPointRight:{context:"Aria label for the interactive Point element that represents the radius endpoint when it's on the right side of the Circle in the interactive graph widget.",message:"Right radius endpoint at %(radiusPointX)s comma %(radiusPointY)s."},srCircleRadiusPointLeft:{context:"Aria label for the interactive Point element that represents the radius endpoint when it's on the left side of the Circle in the interactive graph widget.",message:"Left radius endpoint at %(radiusPointX)s comma %(radiusPointY)s."},srCircleRadius:{context:"Screen reader description for the radius of the Circle in the interactive graph widget.",message:"Circle radius is %(radius)s."},srCircleOuterPoints:{context:"Screen reader description for four key points on the Circle in the interactive graph widget.",message:"Points on the circle at %(point1X)s comma %(point1Y)s, %(point2X)s comma %(point2Y)s, %(point3X)s comma %(point3Y)s, %(point4X)s comma %(point4Y)s."},srLinearGraph:{context:"Aria label for the container containing the Line and its interactive elements in the interactive graph widget.",message:"A line on a coordinate plane."},srLinearGraphPoints:{context:"Screen reader description for the two points defining the Line in the interactive graph widget.",message:"The line has two points, point 1 at %(point1X)s comma %(point1Y)s and point 2 at %(point2X)s comma %(point2Y)s."},srLinearGraphSlopeIncreasing:{context:"Screen reader description for the upward slope of the Line in the interactive graph widget.",message:"Its slope increases from left to right."},srLinearGraphSlopeDecreasing:{context:"Screen reader description for the downward slope of the Line in the interactive graph widget.",message:"Its slope decreases from left to right."},srLinearGraphSlopeHorizontal:{context:"Screen reader description for the slope of a horizontal Line in the interactive graph widget.",message:"Its slope is zero."},srLinearGraphSlopeVertical:{context:"Screen reader description for the slope of a vertical Line in the interactive graph widget.",message:"Its slope is undefined."},srLinearGraphXOnlyIntercept:{context:"Screen reader description for the intercept of the Line in the interactive graph widget when it only intersects the X-axis.",message:"The line crosses the X-axis at %(xIntercept)s comma 0."},srLinearGraphYOnlyIntercept:{context:"Screen reader description for the intercept of the Line in the interactive graph widget when it only intersects the Y-axis.",message:"The line crosses the Y-axis at 0 comma %(yIntercept)s."},srLinearGraphBothIntercepts:{context:"Screen reader description for the intercepts of the Line in the interactive graph widget when it intersects both the X-axis and Y-axis.",message:"The line crosses the X-axis at %(xIntercept)s comma 0 and the Y-axis at 0 comma %(yIntercept)s."},srLinearGraphOriginIntercept:{context:"Screen reader description for the intercept of the Line in the interactive graph widget when it intersects both the X-axis and Y-axis at the origin.",message:"The line crosses the X and Y axes at the graph's origin."},srLinearGrabHandle:{context:"Aria label for the interactive segment that allows the user to move the whole Line in the interactive graph widget.",message:"Line going through point %(point1X)s comma %(point1Y)s and point %(point2X)s comma %(point2Y)s."},srAngleStartingSide:{context:"Aria label for interactive Point 3 of the Angle in the interactive graph widget, explaining it's on the starting side of the Angle.",message:"Point 3, starting side at %(x)s comma %(y)s."},srAngleEndingSide:{context:"Aria label for interactive Point 2 of the Angle in the interactive graph widget, explaining it's on the ending side of the Angle.",message:"Point 2, ending side at %(x)s comma %(y)s."},srAngleVertexWithAngleMeasure:{context:"Aria label for interactive Point 1 of the Angle in the interactive graph widget, explaining it's the vertex of the Angle.",message:"Point 1, vertex at %(x)s comma %(y)s. Angle %(angleMeasure)s degrees."},srAngleGraphAriaLabel:{context:"Aria label for the container containing the Angle and its interactive elements in the interactive graph widget.",message:"An angle on a coordinate plane."},srAngleGraphAriaDescription:{context:"Screen reader description for the measure of the Angle in the interactive graph widget.",message:"The angle measure is %(angleMeasure)s degrees with a vertex at %(vertexX)s comma %(vertexY)s, a point on the starting side at %(startingSideX)s comma %(startingSideY)s and a point on the ending side at %(endingSideX)s comma %(endingSideY)s"},srAngleInteractiveElements:{context:"Screen reader description of all the elements available to interact with within the Angle graph in the interactive graph widget.",message:"An angle formed by 3 points. The vertex is at %(vertexX)s comma %(vertexY)s. The starting side point is at %(startingSideX)s comma %(startingSideY)s. The ending side point is at %(endingSideX)s comma %(endingSideY)s."},srSingleSegmentGraphAriaLabel:{context:"Aria label for the container containing one Line Segment in the interactive graph widget.",message:"A line segment on a coordinate plane."},srMultipleSegmentGraphAriaLabel:{context:"Aria label for the container containing multiple Line Segments in the interactive graph widget.",message:"%(countOfSegments)s line segments on a coordinate plane."},srMultipleSegmentIndividualLabel:{context:"Screen reader description for one individual Line Segment in the interactive graph widget, including the count for its order in the segments (e.g. 'Segment 1', 'Segment 2', etc.)",message:"Segment %(indexOfSegment)s: Endpoint 1 at %(point1X)s comma %(point1Y)s. Endpoint 2 at %(point2X)s comma %(point2Y)s."},srSingleSegmentLabel:{context:"Screen reader description for one individual Line Segment in the interactive graph widget.",message:"Endpoint 1 at %(point1X)s comma %(point1Y)s. Endpoint 2 at %(point2X)s comma %(point2Y)s."},srSegmentLength:{context:"Screen reader description for the length of a Line Segment in the interactive graph widget.",message:"Segment length %(length)s units."},srSingleSegmentGraphEndpointAriaLabel:{context:"Screen reader description for the endpoint of a Line Segment in the interactive graph widget when there is only one segment.",message:"Endpoint %(endpointNumber)s at %(x)s comma %(y)s."},srMultipleSegmentGraphEndpointAriaLabel:{context:"Screen reader description for the endpoint of a Line Segment in the interactive graph widget when there are multiple segments. Includes the count for the segment's order (e.g. 'Segment 1', 'Segment 2', etc.)",message:"Endpoint %(endpointNumber)s on segment %(indexOfSegment)s at %(x)s comma %(y)s."},srSegmentGrabHandle:{context:"Aria label for the interactive segment that allows the user to move the whole Line Segment in the interactive graph widget.",message:"Segment from %(point1X)s comma %(point1Y)s to %(point2X)s comma %(point2Y)s."},srLinearSystemGraph:{context:"Aria label for the container containing two lines as part of a Linear System in the interactive graph widget.",message:"Two lines on a coordinate plane."},srLinearSystemPoints:{context:"Screen reader description for the points of a line in the Linear System in the interactive graph widget.",message:"Line %(lineNumber)s has two points, point 1 at %(point1X)s comma %(point1Y)s and point 2 at %(point2X)s comma %(point2Y)s."},srLinearSystemPoint:{context:"Screen reader description for a point on a line in the Linear System in the interactive graph widget.",message:"Point %(pointSequence)s on line %(lineNumber)s at %(x)s comma %(y)s."},srLinearSystemGrabHandle:{context:"Aria label for the interactive segment that allows the user to move a whole line in the Linear System in the interactive graph widget.",message:"Line %(lineNumber)s going through point %(point1X)s comma %(point1Y)s and point %(point2X)s comma %(point2Y)s."},srLinearSystemIntersection:{context:"Screen reader description for the intersection of two lines in the Linear System in the interactive graph widget.",message:"Line 1 and line 2 intersect at point %(x)s comma %(y)s."},srLinearSystemParallel:{context:"Screen reader description when two lines are parallel in the Linear System in the interactive graph widget.",message:"Line 1 and line 2 are parallel."},srRayGraph:{context:"Screen reader description for the container containing a Ray in the interactive graph widget.",message:"A ray on a coordinate plane."},srRayPoints:{context:"Screen reader description for the points of a ray in the interactive graph widget.",message:"The endpoint is at %(point1X)s comma %(point1Y)s and the ray goes through point %(point2X)s comma %(point2Y)s."},srRayGrabHandle:{context:"Aria label for the interactive segment that allows the user to move the whole Ray in the interactive graph widget.",message:"Ray with endpoint %(point1X)s comma %(point1Y)s going through point %(point2X)s comma %(point2Y)s."},srRayEndpoint:{context:"Aria label for the initial point of a Ray (the point at which the ray starts) in the interactive graph widget.",message:"Endpoint at %(x)s comma %(y)s."},srRayTerminalPoint:{context:"Aria label for the point that determines the direction of the Ray in the interactive graph widget. The ray passes through this point.",message:"Through point at %(x)s comma %(y)s."},srVectorGraph:{context:"Screen reader description for the container containing a Vector in the interactive graph widget.",message:"A vector on a coordinate plane."},srVectorPoints:{context:"Screen reader description for the tail and head of a vector in the interactive graph widget.",message:"The tail is at %(tailX)s comma %(tailY)s and the head is at %(headX)s comma %(headY)s."},srVectorHeadPoint:{context:"Aria label for the head point of a Vector (the point with the arrowhead) in the interactive graph widget.",message:"Vector head at %(x)s comma %(y)s."},srVectorMagnitudeDirection:{context:"Screen reader description of a vector's magnitude (length) and direction (angle in degrees, measured counterclockwise from the positive x-axis) in the interactive graph widget.",message:"The vector has a magnitude of %(magnitude)s and a direction of %(direction)s degrees."},srVectorGrabHandle:{context:"Aria label for the interactive segment that allows the user to move the whole Vector in the interactive graph widget.",message:"Vector from %(tailX)s comma %(tailY)s to %(headX)s comma %(headY)s."},srQuadraticGraph:{context:"Aria label for the container containing a Quadratic function in the interactive graph widget.",message:"A parabola on a 4-quadrant coordinate plane."},srQuadraticFaceUp:{context:"Screen reader description for the direction of the Quadratic function in the interactive graph widget when it opens upward.",message:"The parabola opens upward."},srQuadraticFaceDown:{context:"Screen reader description for the direction of the Quadratic function in the interactive graph widget when it opens downward.",message:"The parabola opens downward."},srQuadraticGraphVertexOrigin:{context:"Screen reader description for the Quadratic function in the interactive graph widget when its vertex is at the origin.",message:"Vertex is at the origin."},srQuadraticGraphVertexXAxis:{context:"Screen reader description for the Quadratic function in the interactive graph widget when its vertex is on the X-axis.",message:"Vertex is on the X-axis."},srQuadraticGraphVertexYAxis:{context:"Screen reader description for the Quadratic function in the interactive graph widget when its vertex is on the Y-axis.",message:"Vertex is on the Y-axis."},srQuadraticGraphVertexQuadrant:{context:"Screen reader description for the Quadratic function in the interactive graph widget when its vertex is in a specific quadrant (quadrant 1, 2, 3, or 4).",message:"Vertex is in quadrant %(quadrant)s."},srQuadraticTwoXIntercepts:{context:"Screen reader description for the X-intercepts of the Quadratic function in the interactive graph widget when there are two X-intercepts.",message:"The X-intercepts are at %(intercept1)s comma 0 and %(intercept2)s comma 0."},srQuadraticOneXIntercept:{context:"Screen reader description for the X-intercept of the Quadratic function in the interactive graph widget when there is only one X-intercept.",message:"The X-intercept is at %(intercept)s comma 0."},srQuadraticYIntercept:{context:"Screen reader description for the Y-intercept of the Quadratic function in the interactive graph widget.",message:"The Y-intercept is at 0 comma %(intercept)s."},srQuadraticPointOrigin:{context:"Aria label for an interactive Point on the Quadratic function in the interactive graph widget when the Point is at the origin.",message:"Point %(pointNumber)s on parabola at the origin."},srQuadraticPointAxis:{context:"Aria label for an interactive Point on the Quadratic function in the interactive graph widget when the Point is on the X-axis or Y-axis.",message:"Point %(pointNumber)s on parabola at %(x)s comma %(y)s."},srQuadraticPointQuadrant:{context:"Aria label for an interactive Point on the Quadratic function in the interactive graph widget when the Point is in a specific quadrant.",message:"Point %(pointNumber)s on parabola in quadrant %(quadrant)s at %(x)s comma %(y)s."},srQuadraticInteractiveElements:{context:"Screen reader description of all the elements available to interact with within the Quadratic function in the interactive graph widget.",message:"Parabola with points at %(point1X)s comma %(point1Y)s, %(point2X)s comma %(point2Y)s, and %(point3X)s comma %(point3Y)s."},srPolygonGraph:{context:"Aria label for the container containing a Polygon in the interactive graph widget when it's on a plane/grid without axes.",message:"A polygon."},srPolygonGraphCoordinatePlane:{context:"Aria label for the container containing a Polygon in the interactive graph widget when it's on a coordinate plane.",message:"A polygon on a coordinate plane."},srPolygonGraphPointsNum:{context:"Screen reader description for the number of points in the Polygon in the interactive graph widget.",message:"The polygon has %(num)s points."},srPolygonGraphPointsOne:{context:"Screen reader description for the number of points in the Polygon in the interactive graph widget when there is only one point.",message:"The polygon has 1 point."},srPolygonElementsNum:{context:"Screen reader description for the Polygon in the interactive graph widget explaining that it has a certain number of points.",message:"A polygon with %(num)s points."},srPolygonElementsOne:{context:"Screen reader description for the Polygon in the interactive graph widget explaining that it has one point.",message:"A polygon with 1 point."},srPolygonPointAngleApprox:{context:"Screen reader description for the angle of a point in the Polygon in the interactive graph widget when it's not an exact integer.",message:"Angle approximately equal to %(angle)s degrees."},srPolygonPointAngle:{context:"Screen reader description for the angle of a point in the Polygon in the interactive graph widget when it's an integer.",message:"Angle equal to %(angle)s degrees."},srPolygonSideLength:{context:"Screen reader description for the side of the Polygon in the interactive graph widget when its length is an exact integer.",message:"A line segment, length equal to %(length)s units, connects to point %(pointNum)s."},srPolygonSideLengthApprox:{context:"Screen reader description for the side of the Polygon in the interactive graph widget when its length is not an exact integer.",message:"A line segment, length approximately equal to %(length)s units, connects to point %(pointNum)s."},srUnlimitedPolygonEmpty:{context:"Screen reader description for the empty container that will eventually contain a Polygon in the interactive graph widget after the user has added points.",message:"An empty coordinate plane."},srSinusoidGraph:{context:"Aria label for the container containing a Sinusoid function in the interactive graph widget.",message:"A sinusoid function on a coordinate plane."},srSinusoidRootPoint:{context:"Aria label for the Point defining the midline intersection of the Sinusoid function in the interactive graph widget.",message:"Midline intersection at %(x)s comma %(y)s."},srSinusoidMaxPoint:{context:"Aria label for the Point defining the maximum of the Sinusoid function in the interactive graph widget.",message:"Maximum point at %(x)s comma %(y)s."},srSinusoidMinPoint:{context:"Aria label for the Point defining the minimum of the Sinusoid function in the interactive graph widget.",message:"Minimum point at %(x)s comma %(y)s."},srSinusoidFlatPoint:{context:"Aria label for the Point defining the amplitude of the Sinusoid function in the interactive graph widget when the amplitude is 0.",message:"Line through point at %(x)s comma %(y)s."},srSinusoidDescription:{context:"Screen reader description of the Sinusoid function in the interactive graph widget.",message:"The graph shows a wave with a minimum value of %(minValue)s and a maximum value of %(maxValue)s. The wave completes a full cycle from %(cycleStart)s to %(cycleEnd)s."},srSinusoidInteractiveElements:{context:"Screen reader description of all the elements available to interact with within the Sinusoid function in the interactive graph widget.",message:"Sinusoid graph with midline intersection point at %(point1X)s comma %(point1Y)s and extremum point at %(point2X)s comma %(point2Y)s."},srExponentialGraph:{context:"Aria label for the container containing an Exponential function in the interactive graph widget.",message:"An exponential curve on a coordinate plane."},srExponentialPoint1:{context:"Aria label for the first Point on the Exponential function in the interactive graph widget.",message:"Point 1 on an exponential curve at %(x)s comma %(y)s."},srExponentialPoint2:{context:"Aria label for the second Point on the Exponential function in the interactive graph widget.",message:"Point 2 on an exponential curve at %(x)s comma %(y)s."},srExponentialDescriptionRightNeg:{context:"Screen reader description of the Exponential function in the interactive graph widget. Variant for a curve whose flat tail hugs the asymptote on the right and trails off toward negative infinity.",message:"The curve passes through %(point1X)s comma %(point1Y)s and %(point2X)s comma %(point2Y)s as the curve approaches y equals %(asymptoteY)s from the right and extends to negative infinity."},srExponentialDescriptionLeftPos:{context:"Screen reader description of the Exponential function in the interactive graph widget. Variant for a curve whose flat tail hugs the asymptote on the left and trails off toward positive infinity.",message:"The curve passes through %(point1X)s comma %(point1Y)s and %(point2X)s comma %(point2Y)s as the curve approaches y equals %(asymptoteY)s from the left and extends to positive infinity."},srExponentialAboveAsymptote:{context:"Screen reader description noting that the Exponential curve lies entirely above its horizontal asymptote.",message:"The curve lies above the asymptote."},srExponentialBelowAsymptote:{context:"Screen reader description noting that the Exponential curve lies entirely below its horizontal asymptote.",message:"The curve lies below the asymptote."},srExponentialNoCurve:{context:"Screen reader description of the Exponential function in the interactive graph widget, used when the two points are positioned so that no exponential curve can be drawn (for example, the asymptote falls between them) and nothing is plotted.",message:"No exponential curve can be drawn through %(point1X)s comma %(point1Y)s and %(point2X)s comma %(point2Y)s with a horizontal asymptote at y equals %(asymptoteY)s. Move both points to the same side of the asymptote to draw the curve."},srExponentialIntercepts:{context:"Screen reader description of the x- and y-intercepts of the Exponential function in the interactive graph widget.",message:"The x-intercept is at %(xIntercept)s comma 0. The y-intercept is at 0 comma %(yIntercept)s."},srExponentialYIntercept:{context:"Screen reader description of the y-intercept of the Exponential function in the interactive graph widget, used when the curve has no x-intercept.",message:"The y-intercept is at 0 comma %(yIntercept)s."},srExponentialInteractiveElements:{context:"Screen reader description of all the elements available to interact with within the Exponential function in the interactive graph widget.",message:"Exponential graph with points at %(point1X)s comma %(point1Y)s, %(point2X)s comma %(point2Y)s, and a horizontal asymptote at y equals %(asymptoteY)s."},srExponentialAsymptote:{context:"Aria label for the draggable horizontal asymptote line in the Exponential function in the interactive graph widget.",message:"Horizontal asymptote at y equals %(asymptoteY)s"},srLogarithmGraph:{context:"Aria label for the container containing a Logarithm function in the interactive graph widget.",message:"A logarithmic curve on a coordinate plane."},srLogarithmPoint1:{context:"Aria label for the first Point on the Logarithm function in the interactive graph widget.",message:"Point 1 on a logarithmic curve at %(x)s comma %(y)s."},srLogarithmPoint2:{context:"Aria label for the second Point on the Logarithm function in the interactive graph widget.",message:"Point 2 on a logarithmic curve at %(x)s comma %(y)s."},srLogarithmDescriptionRightNeg:{context:"Screen reader description of the Logarithm function in the interactive graph widget. Variant for a curve to the right of the asymptote that trails off toward negative infinity near it.",message:"The curve passes through %(point1X)s comma %(point1Y)s and %(point2X)s comma %(point2Y)s as the curve approaches x equals %(asymptoteX)s from the right and extends to negative infinity."},srLogarithmDescriptionRightPos:{context:"Screen reader description of the Logarithm function in the interactive graph widget. Variant for a curve to the right of the asymptote that trails off toward positive infinity near it.",message:"The curve passes through %(point1X)s comma %(point1Y)s and %(point2X)s comma %(point2Y)s as the curve approaches x equals %(asymptoteX)s from the right and extends to positive infinity."},srLogarithmDescriptionLeftNeg:{context:"Screen reader description of the Logarithm function in the interactive graph widget. Variant for a curve to the left of the asymptote that trails off toward negative infinity near it.",message:"The curve passes through %(point1X)s comma %(point1Y)s and %(point2X)s comma %(point2Y)s as the curve approaches x equals %(asymptoteX)s from the left and extends to negative infinity."},srLogarithmDescriptionLeftPos:{context:"Screen reader description of the Logarithm function in the interactive graph widget. Variant for a curve to the left of the asymptote that trails off toward positive infinity near it.",message:"The curve passes through %(point1X)s comma %(point1Y)s and %(point2X)s comma %(point2Y)s as the curve approaches x equals %(asymptoteX)s from the left and extends to positive infinity."},srLogarithmToRightOfAsymptote:{context:"Screen reader description noting that the Logarithm curve lies to the right of its vertical asymptote.",message:"The curve is to the right of the asymptote."},srLogarithmToLeftOfAsymptote:{context:"Screen reader description noting that the Logarithm curve lies to the left of its vertical asymptote.",message:"The curve is to the left of the asymptote."},srLogarithmNoCurve:{context:"Screen reader description of the Logarithm function in the interactive graph widget, used when the two points are positioned so that no logarithm curve can be drawn (for example, the asymptote falls between them) and nothing is plotted.",message:"No curve can be drawn through %(point1X)s comma %(point1Y)s and %(point2X)s comma %(point2Y)s with a vertical asymptote at x equals %(asymptoteX)s. Move both points to the same side of the asymptote to draw the curve."},srLogarithmIntercepts:{context:"Screen reader description of the x- and y-intercepts of the Logarithm function in the interactive graph widget.",message:"The x-intercept is at %(xIntercept)s comma 0. The y-intercept is at 0 comma %(yIntercept)s."},srLogarithmXIntercept:{context:"Screen reader description of the x-intercept of the Logarithm function in the interactive graph widget, used when the curve has no y-intercept.",message:"The x-intercept is at %(xIntercept)s comma 0."},srLogarithmInteractiveElements:{context:"Screen reader description of all the elements available to interact with within the Logarithm function in the interactive graph widget.",message:"Logarithmic graph with points at %(point1X)s comma %(point1Y)s, %(point2X)s comma %(point2Y)s, and a vertical asymptote at x equals %(asymptoteX)s."},srLogarithmAsymptote:{context:"Aria label for the draggable vertical asymptote line in the Logarithm function in the interactive graph widget.",message:"Vertical asymptote at x equals %(asymptoteX)s"},srAbsoluteValueGraph:{context:"Aria label for the container containing an Absolute Value function in the interactive graph widget.",message:"An absolute value function on a coordinate plane."},srAbsoluteValueVertexPoint:{context:"Aria label for the Point defining the vertex of the Absolute Value function in the interactive graph widget.",message:"Vertex point at %(x)s comma %(y)s."},srAbsoluteValueSecondPoint:{context:"Aria label for the second Point defining the slope of the Absolute Value function in the interactive graph widget.",message:"Point on arm at %(x)s comma %(y)s."},srAbsoluteValueDescription:{context:"Screen reader description of the Absolute Value function in the interactive graph widget.",message:"The graph shows an absolute value function with vertex at %(x)s comma %(y)s and slope %(slope)s."},srAbsoluteValueInteractiveElements:{context:"Screen reader description of all the elements available to interact with within the Absolute Value function in the interactive graph widget.",message:"Absolute value graph with vertex point at %(point1X)s comma %(point1Y)s and arm point at %(point2X)s comma %(point2Y)s."},srTangentGraph:{context:"Aria label for the container containing a Tangent function in the interactive graph widget.",message:"A tangent function on a coordinate plane."},srTangentInflectionPoint:{context:"Aria label for the Point defining the inflection point of the Tangent function in the interactive graph widget.",message:"Inflection point at %(x)s comma %(y)s."},srTangentSecondPoint:{context:"Aria label for the second control point of the Tangent function in the interactive graph widget.",message:"Control point at %(x)s comma %(y)s."},srTangentDescription:{context:"Screen reader description of the Tangent function in the interactive graph widget.",message:"The graph shows a tangent function with an inflection point at %(inflectionX)s comma %(inflectionY)s."},srTangentInteractiveElements:{context:"Screen reader description of all the elements available to interact with within the Tangent function in the interactive graph widget.",message:"Tangent graph with inflection point at %(point1X)s comma %(point1Y)s and control point at %(point2X)s comma %(point2Y)s."},imageExploreButton:"Explore image",imageExploreButtonAriaLabel:"Explore image and description",imageAlternativeTitle:"Explore image and description",imageDescriptionLabel:"Description",imageZoomAriaLabel:"Make image bigger.",imageResetZoomAriaLabel:"Close image.",gifPlayButtonLabel:"Play Animation",gifPauseButtonLabel:"Pause Animation",definitionIdentifier:"Definition of: %(word)s"};const mockStrings={characterCount:({used,num})=>num===1?`${used} / ${num} Character`:`${used} / ${num} Characters`,closeKeypad:"close math keypad",openKeypad:"open math keypad",mathInputBox:"Math input box",removeHighlight:"Remove highlight",addHighlight:"Add highlight",hintPos:({pos})=>`Hint #${pos}`,errorRendering:({error})=>`Error rendering: ${error}`,APPROXIMATED_PI_ERROR:"Your answer is close, but you may "+"have approximated pi. Enter your "+"answer as a multiple of pi, like "+"<code>12\\ \\text{pi}</code> or "+"<code>2/3\\ \\text{pi}</code>",EMPTY_RESPONSE_ERROR:"There are still more parts of this question to answer.",EXTRA_SYMBOLS_ERROR:"We could not understand your "+"answer. Please check your answer for extra "+"text or symbols.",NEEDS_TO_BE_SIMPLFIED_ERROR:"Your answer is almost correct, "+"but it needs to be simplified.",MISSING_PERCENT_ERROR:"Your answer is almost correct, "+"but it is missing a "+"<code>\\%</code> at the end.",MULTIPLICATION_SIGN_ERROR:"I'm a computer. I only understand "+"multiplication if you use an asterisk "+"(*) as the multiplication sign.",USER_INPUT_EMPTY:"Your answer is empty.",USER_INPUT_TOO_LONG:"Please shorten your response.",WRONG_CASE_ERROR:"Your answer includes use of a variable with the wrong case.",WRONG_LETTER_ERROR:"Your answer includes a wrong variable letter.",invalidSelection:"Make sure you select something for every row.",INVALID_CHOICE_SELECTION:"Invalid choice selection",ERROR_TITLE:"Oops!",ERROR_MESSAGE:"Sorry, I don't understand that!",hints:"Hints",getAnotherHint:"Get another hint",deprecatedStandin:"Sorry, this part of the question is no longer available. 😅 Don't worry, you won't be graded on this part. Keep going!",keepTrying:"Keep trying",tryAgain:"Try again",check:"Check",correctExcited:"Correct!",nextQuestion:"Next question",skipToTitle:({title})=>`Skip to ${title}`,current:"Current",correct:"Correct",correctSelected:"Correct (selected)",incorrect:"Incorrect",incorrectSelected:"Incorrect (selected)",hideExplanation:"Hide explanation",explain:"Explain",INVALID_MESSAGE_PREFIX:"We couldn't grade your answer.",DEFAULT_INVALID_MESSAGE_1:"It looks like you left something blank or ",DEFAULT_INVALID_MESSAGE_2:"entered in an invalid answer.",integerExample:"an integer, like $6$",properExample:"a *proper* fraction, like $1/2$ or $6/10$",simplifiedProperExample:"a *simplified proper* fraction, like $3/5$",improperExample:"an *improper* fraction, like $10/7$ or $14/8$",simplifiedImproperExample:"a *simplified improper* fraction, like $7/4$",mixedExample:"a mixed number, like $1\\ 3/4$",decimalExample:"an *exact* decimal, like $0.75$",percentExample:"a percent, like $12.34\\%$",piExample:"a multiple of pi, like $12\\ \\text{pi}$ or $2/3\\ \\text{pi}$",yourAnswer:"**Your answer should be** ",yourAnswerLabel:"Your answer:",addPoints:"Click to add points",addVertices:"Click to add vertices",tapMultiple:"Tap each dot on the image to select all answers that apply.",tapSingle:"Tap each dot on the image to select an answer.",clickMultiple:"Click each dot on the image to select all answers that apply.",clickSingle:"Click each dot on the image to select an answer.",choices:"Choices:",answers:({num})=>num===1?`${num} answer`:`${num} answers`,hideAnswersToggleLabel:"Hide answer choices",moves:({num})=>num===1?`Moves: ${num}`:`Moves: ${num}`,clickTiles:"Click on the tiles to change the lights.",turnOffLights:"You must turn on all of the lights to continue.",fillAllCells:"Make sure you fill in all cells in the matrix.",molecularDrawing:({content})=>`A molecular structure drawing. SMILES notation: ${content}`,switchDirection:"Switch direction",circleOpen:"Make circle open",circleFilled:"Make circle filled",numDivisions:"Number of divisions:",divisions:({divRangeString})=>`Please make sure the number of divisions is in the range ${divRangeString}.`,dragHandles:"Drag handles to make graph",tapAddPoints:"Tap to add points",false:"False",true:"True",no:"No",yes:"Yes",chooseCorrectNum:"Please choose the correct number of answers.",notNoneOfTheAbove:"'None of the above' may not be selected when other answers are selected.",noneOfTheAbove:"None of the above",chooseNumAnswers:({numCorrect})=>`Choose ${numCorrect} answers:`,chooseAllAnswers:"Choose all answers that apply:",chooseOneAnswer:"Choose 1 answer:",choiceCheckedCorrect:({letter})=>`(Choice ${letter}, Checked, Correct)`,choiceCorrect:({letter})=>`(Choice ${letter}, Correct)`,choiceCheckedIncorrect:({letter})=>`(Choice ${letter}, Checked, Incorrect)`,choiceIncorrect:({letter})=>`(Choice ${letter}, Incorrect)`,choiceChecked:({letter})=>`(Choice ${letter}, Checked)`,choice:({letter})=>`(Choice ${letter})`,notSelected:"not selected",choicesSelected:({num})=>num===1?`${num} choice selected`:`${num} choices selected`,bringBack:"Bring back",openMenuForChoice:({letter})=>`Open menu for Choice ${letter}`,letters:"A B C D E F G H I J K L M N O P Q R S T U V W X Y Z",scrollAnswers:"Scroll Answers",scrollStart:"Scroll to view start of the content",scrollEnd:"Scroll to view the end of the content",rightArrow:"Reaction arrow pointing to the right.",dontUnderstandUnits:"I couldn't understand those units.",checkSigFigs:"Check your significant figures.",answerNumericallyIncorrect:"That answer is numerically incorrect.",checkUnits:"Check your units.",dontUnderstand:"I don't understand that",loading:"Loading...",videoTranscript:"See video transcript",somethingWrong:"Something went wrong.",videoWrapper:"Khan Academy video wrapper",pythonProgram:"Python program",computerScienceProgram:"Computer science program",embeddedContent:"Embedded content",mathInputTitle:"mathematics keyboard",mathInputDescription:"Use keyboard/mouse to interact with math-based input fields",sin:"sin",cos:"cos",tan:"tan",simulationLoadFail:"Sorry, this simulation cannot load.",simulationLocaleWarning:"Sorry, this simulation isn't available in your language.",selectAnAnswer:"Select an answer",srGraphInstructions:"Use the Tab key to move through the interactive elements in the graph. When an interactive element has focus, use Control + Shift + Arrows to move it.",srUnlimitedGraphInstructions:"Press Shift + Enter to interact with the graph. Use the Tab key to move through the interactive elements in the graph and access the graph Action Bar. When an interactive element has focus, use Control + Shift + Arrows to move it or use the Delete key to remove it from the graph. Use the buttons in the Action Bar to add or adjust elements within the graph.",graphKeyboardPrompt:"Press Shift + Enter to interact with the graph",addPoint:"Add Point",removePoint:"Remove Point",closePolygon:"Close shape",openPolygon:"Re-open shape",ungradedInteractiveGraph:"Use this graph to check your thinking, but it does not count as your answer.",srPointAtCoordinates:({num,x,y})=>`Point ${num} at ${x} comma ${y}.`,srInteractiveElements:({elements})=>`Interactive elements: ${elements}`,srNoInteractiveElements:"No interactive elements",srCircleGraph:"A circle on a coordinate plane.",srCircleShape:({centerX,centerY})=>`Circle. The center point is at ${centerX} comma ${centerY}.`,srCircleRadiusPointRight:({radiusPointX,radiusPointY})=>`Right radius endpoint at ${radiusPointX} comma ${radiusPointY}.`,srCircleRadiusPointLeft:({radiusPointX,radiusPointY})=>`Left radius endpoint at ${radiusPointX} comma ${radiusPointY}.`,srCircleRadius:({radius})=>`Circle radius is ${radius}.`,srCircleOuterPoints:({point1X,point1Y,point2X,point2Y,point3X,point3Y,point4X,point4Y})=>`Points on the circle at ${point1X} comma ${point1Y}, ${point2X} comma ${point2Y}, ${point3X} comma ${point3Y}, ${point4X} comma ${point4Y}.`,srLinearGraph:"A line on a coordinate plane.",srLinearGraphPoints:({point1X,point1Y,point2X,point2Y})=>`The line has two points, point 1 at ${point1X} comma ${point1Y} and point 2 at ${point2X} comma ${point2Y}.`,srLinearGraphSlopeIncreasing:"Its slope increases from left to right.",srLinearGraphSlopeDecreasing:"Its slope decreases from left to right.",srLinearGraphSlopeHorizontal:"Its slope is zero.",srLinearGraphSlopeVertical:"Its slope is undefined.",srLinearGraphXOnlyIntercept:({xIntercept})=>`The line crosses the X-axis at ${xIntercept} comma 0.`,srLinearGraphYOnlyIntercept:({yIntercept})=>`The line crosses the Y-axis at 0 comma ${yIntercept}.`,srLinearGraphBothIntercepts:({xIntercept,yIntercept})=>`The line crosses the X-axis at ${xIntercept} comma 0 and the Y-axis at 0 comma ${yIntercept}.`,srLinearGraphOriginIntercept:"The line crosses the X and Y axes at the graph's origin.",srLinearGrabHandle:({point1X,point1Y,point2X,point2Y})=>`Line going through point ${point1X} comma ${point1Y} and point ${point2X} comma ${point2Y}.`,srAngleStartingSide:({x,y})=>`Point 3, starting side at ${x} comma ${y}.`,srAngleEndingSide:({x,y})=>`Point 2, ending side at ${x} comma ${y}.`,srAngleVertexWithAngleMeasure:({x,y,angleMeasure})=>`Point 1, vertex at ${x} comma ${y}. Angle ${angleMeasure} degrees.`,srAngleGraphAriaLabel:"An angle on a coordinate plane.",srAngleGraphAriaDescription:({angleMeasure,vertexX,vertexY,startingSideX,startingSideY,endingSideX,endingSideY})=>`The angle measure is ${angleMeasure} degrees with a vertex at ${vertexX} comma ${vertexY}, a point on the starting side at ${startingSideX} comma ${startingSideY} and a point on the ending side at ${endingSideX} comma ${endingSideY}.`,srAngleInteractiveElements:({vertexX,vertexY,startingSideX,startingSideY,endingSideX,endingSideY})=>`An angle formed by 3 points. The vertex is at ${vertexX} comma ${vertexY}. The starting side point is at ${startingSideX} comma ${startingSideY}. The ending side point is at ${endingSideX} comma ${endingSideY}.`,srSingleSegmentGraphAriaLabel:"A line segment on a coordinate plane.",srMultipleSegmentGraphAriaLabel:({countOfSegments})=>`${countOfSegments} segments on a coordinate plane.`,srMultipleSegmentIndividualLabel:({point1X,point1Y,point2X,point2Y,indexOfSegment})=>`Segment ${indexOfSegment}: Endpoint 1 at ${point1X} comma ${point1Y}. Endpoint 2 at ${point2X} comma ${point2Y}.`,srSingleSegmentLabel:({point1X,point1Y,point2X,point2Y})=>`Endpoint 1 at ${point1X} comma ${point1Y}. Endpoint 2 at ${point2X} comma ${point2Y}.`,srSegmentLength:({length})=>`Segment length ${length} units.`,srSingleSegmentGraphEndpointAriaLabel:({endpointNumber,x,y})=>`Endpoint ${endpointNumber} at ${x} comma ${y}.`,srMultipleSegmentGraphEndpointAriaLabel:({endpointNumber,x,y,indexOfSegment})=>`Endpoint ${endpointNumber} on segment ${indexOfSegment} at ${x} comma ${y}.`,srSegmentGrabHandle:({point1X,point1Y,point2X,point2Y})=>`Segment from ${point1X} comma ${point1Y} to ${point2X} comma ${point2Y}.`,srLinearSystemGraph:"Two lines on a coordinate plane.",srLinearSystemPoints:({lineNumber,point1X,point1Y,point2X,point2Y})=>`Line ${lineNumber} has two points, point 1 at ${point1X} comma ${point1Y} and point 2 at ${point2X} comma ${point2Y}.`,srLinearSystemPoint:({lineNumber,pointSequence,x,y})=>`Point ${pointSequence} on line ${lineNumber} at ${x} comma ${y}.`,srLinearSystemGrabHandle:({lineNumber,point1X,point1Y,point2X,point2Y})=>`Line ${lineNumber} going through point ${point1X} comma ${point1Y} and point ${point2X} comma ${point2Y}.`,srLinearSystemIntersection:({x,y})=>`Line 1 and line 2 intersect at point ${x} comma ${y}.`,srLinearSystemParallel:"Line 1 and line 2 are parallel.",srRayGraph:"A ray on a coordinate plane.",srRayPoints:({point1X,point1Y,point2X,point2Y})=>`The endpoint is at ${point1X} comma ${point1Y} and the ray goes through point ${point2X} comma ${point2Y}.`,srRayGrabHandle:({point1X,point1Y,point2X,point2Y})=>`Ray with endpoint ${point1X} comma ${point1Y} going through point ${point2X} comma ${point2Y}.`,srRayEndpoint:({x,y})=>`Endpoint at ${x} comma ${y}.`,srRayTerminalPoint:({x,y})=>`Through point at ${x} comma ${y}.`,srVectorGraph:"A vector on a coordinate plane.",srVectorPoints:({tailX,tailY,headX,headY})=>`The tail is at ${tailX} comma ${tailY} and the head is at ${headX} comma ${headY}.`,srVectorHeadPoint:({x,y})=>`Vector head at ${x} comma ${y}.`,srVectorMagnitudeDirection:({magnitude,direction})=>`The vector has a magnitude of ${magnitude} and a direction of ${direction} degrees.`,srVectorGrabHandle:({tailX,tailY,headX,headY})=>`Vector from ${tailX} comma ${tailY} to ${headX} comma ${headY}.`,srQuadraticGraph:"A parabola on a 4-quadrant coordinate plane.",srQuadraticFaceUp:"The parabola opens upward.",srQuadraticFaceDown:"The parabola opens downward.",srQuadraticGraphVertexOrigin:"Vertex is at the origin.",srQuadraticGraphVertexXAxis:"Vertex is on the X-axis.",srQuadraticGraphVertexYAxis:"Vertex is on the Y-axis.",srQuadraticGraphVertexQuadrant:({quadrant})=>`Vertex is in quadrant ${quadrant}.`,srQuadraticTwoXIntercepts:({intercept1,intercept2})=>`The X-intercepts are at ${intercept1} comma 0 and ${intercept2} comma 0.`,srQuadraticOneXIntercept:({intercept})=>`The X-intercept is at ${intercept} comma 0.`,srQuadraticYIntercept:({intercept})=>`The Y-intercept is at 0 comma ${intercept}.`,srQuadraticPointOrigin:({pointNumber})=>`Point ${pointNumber} on parabola at the origin.`,srQuadraticPointAxis:({pointNumber,x,y})=>`Point ${pointNumber} on parabola at ${x} comma ${y}.`,srQuadraticPointQuadrant:({pointNumber,x,y,quadrant})=>`Point ${pointNumber} on parabola in quadrant ${quadrant} at ${x} comma ${y}.`,srQuadraticInteractiveElements:({point1X,point1Y,point2X,point2Y,point3X,point3Y})=>`Parabola with points at ${point1X} comma ${point1Y}, ${point2X} comma ${point2Y}, and ${point3X} comma ${point3Y}.`,srPolygonGraph:"A polygon.",srPolygonGraphCoordinatePlane:"A polygon on a coordinate plane.",srPolygonGraphPointsNum:({num})=>`The polygon has ${num} points.`,srPolygonGraphPointsOne:"The polygon has 1 point.",srPolygonElementsNum:({num})=>`A polygon with ${num} points.`,srPolygonElementsOne:"A polygon with 1 point.",srPolygonPointAngleApprox:({angle})=>`Angle approximately equal to ${angle} degrees.`,srPolygonPointAngle:({angle})=>`Angle equal to ${angle} degrees.`,srPolygonSideLength:({pointNum,length})=>`A line segment, length equal to ${length} units, connects to point ${pointNum}.`,srPolygonSideLengthApprox:({pointNum,length})=>`A line segment, length approximately equal to ${length} units, connects to point ${pointNum}.`,srUnlimitedPolygonEmpty:"An empty coordinate plane.",srSinusoidGraph:"A sinusoid function on a coordinate plane.",srSinusoidRootPoint:({x,y})=>`Midline intersection at ${x} comma ${y}.`,srSinusoidMaxPoint:({x,y})=>`Maximum point at ${x} comma ${y}.`,srSinusoidMinPoint:({x,y})=>`Minimum point at ${x} comma ${y}.`,srSinusoidFlatPoint:({x,y})=>`Line through point at ${x} comma ${y}.`,srSinusoidDescription:({minValue,maxValue,cycleStart,cycleEnd})=>`The graph shows a wave with a minimum value of ${minValue} and a maximum value of ${maxValue}. The wave completes a full cycle from ${cycleStart} to ${cycleEnd}.`,srSinusoidInteractiveElements:({point1X,point1Y,point2X,point2Y})=>`Sinusoid graph with midline intersection point at ${point1X} comma ${point1Y} and extremum point at ${point2X} comma ${point2Y}.`,srExponentialGraph:"An exponential curve on a coordinate plane.",srExponentialPoint1:({x,y})=>`Point 1 on an exponential curve at ${x} comma ${y}.`,srExponentialPoint2:({x,y})=>`Point 2 on an exponential curve at ${x} comma ${y}.`,srExponentialDescriptionRightNeg:({point1X,point1Y,point2X,point2Y,asymptoteY})=>`The curve passes through ${point1X} comma ${point1Y} and ${point2X} comma ${point2Y} as the curve approaches y equals ${asymptoteY} from the right and extends to negative infinity.`,srExponentialDescriptionLeftPos:({point1X,point1Y,point2X,point2Y,asymptoteY})=>`The curve passes through ${point1X} comma ${point1Y} and ${point2X} comma ${point2Y} as the curve approaches y equals ${asymptoteY} from the left and extends to positive infinity.`,srExponentialAboveAsymptote:"The curve lies above the asymptote.",srExponentialBelowAsymptote:"The curve lies below the asymptote.",srExponentialNoCurve:({point1X,point1Y,point2X,point2Y,asymptoteY})=>`No exponential curve can be drawn through ${point1X} comma ${point1Y} and ${point2X} comma ${point2Y} with a horizontal asymptote at y equals ${asymptoteY}. Move both points to the same side of the asymptote to draw the curve.`,srExponentialIntercepts:({xIntercept,yIntercept})=>`The x-intercept is at ${xIntercept} comma 0. The y-intercept is at 0 comma ${yIntercept}.`,srExponentialYIntercept:({yIntercept})=>`The y-intercept is at 0 comma ${yIntercept}.`,srExponentialInteractiveElements:({point1X,point1Y,point2X,point2Y,asymptoteY})=>`Exponential graph with points at ${point1X} comma ${point1Y}, ${point2X} comma ${point2Y}, and a horizontal asymptote at y equals ${asymptoteY}.`,srExponentialAsymptote:({asymptoteY})=>`Horizontal asymptote at y equals ${asymptoteY}`,srLogarithmGraph:"A logarithmic curve on a coordinate plane.",srLogarithmPoint1:({x,y})=>`Point 1 on a logarithmic curve at ${x} comma ${y}.`,srLogarithmPoint2:({x,y})=>`Point 2 on a logarithmic curve at ${x} comma ${y}.`,srLogarithmDescriptionRightNeg:({point1X,point1Y,point2X,point2Y,asymptoteX})=>`The curve passes through ${point1X} comma ${point1Y} and ${point2X} comma ${point2Y} as the curve approaches x equals ${asymptoteX} from the right and extends to negative infinity.`,srLogarithmDescriptionRightPos:({point1X,point1Y,point2X,point2Y,asymptoteX})=>`The curve passes through ${point1X} comma ${point1Y} and ${point2X} comma ${point2Y} as the curve approaches x equals ${asymptoteX} from the right and extends to positive infinity.`,srLogarithmDescriptionLeftNeg:({point1X,point1Y,point2X,point2Y,asymptoteX})=>`The curve passes through ${point1X} comma ${point1Y} and ${point2X} comma ${point2Y} as the curve approaches x equals ${asymptoteX} from the left and extends to negative infinity.`,srLogarithmDescriptionLeftPos:({point1X,point1Y,point2X,point2Y,asymptoteX})=>`The curve passes through ${point1X} comma ${point1Y} and ${point2X} comma ${point2Y} as the curve approaches x equals ${asymptoteX} from the left and extends to positive infinity.`,srLogarithmToRightOfAsymptote:"The curve is to the right of the asymptote.",srLogarithmToLeftOfAsymptote:"The curve is to the left of the asymptote.",srLogarithmNoCurve:({point1X,point1Y,point2X,point2Y,asymptoteX})=>`No curve can be drawn through ${point1X} comma ${point1Y} and ${point2X} comma ${point2Y} with a vertical asymptote at x equals ${asymptoteX}. Move both points to the same side of the asymptote to draw the curve.`,srLogarithmIntercepts:({xIntercept,yIntercept})=>`The x-intercept is at ${xIntercept} comma 0. The y-intercept is at 0 comma ${yIntercept}.`,srLogarithmXIntercept:({xIntercept})=>`The x-intercept is at ${xIntercept} comma 0.`,srLogarithmInteractiveElements:({point1X,point1Y,point2X,point2Y,asymptoteX})=>`Logarithmic graph with points at ${point1X} comma ${point1Y}, ${point2X} comma ${point2Y}, and a vertical asymptote at x equals ${asymptoteX}.`,srLogarithmAsymptote:({asymptoteX})=>`Vertical asymptote at x equals ${asymptoteX}`,srAbsoluteValueGraph:"An absolute value function on a coordinate plane.",srAbsoluteValueVertexPoint:({x,y})=>`Vertex point at ${x} comma ${y}.`,srAbsoluteValueSecondPoint:({x,y})=>`Point on arm at ${x} comma ${y}.`,srAbsoluteValueDescription:({x,y,slope})=>`The graph shows an absolute value function with vertex at ${x} comma ${y} and slope ${slope}.`,srAbsoluteValueInteractiveElements:({point1X,point1Y,point2X,point2Y})=>`Absolute value graph with vertex point at ${point1X} comma ${point1Y} and arm point at ${point2X} comma ${point2Y}.`,srTangentGraph:"A tangent function on a coordinate plane.",srTangentInflectionPoint:({x,y})=>`Inflection point at ${x} comma ${y}.`,srTangentSecondPoint:({x,y})=>`Control point at ${x} comma ${y}.`,srTangentDescription:({inflectionX,inflectionY})=>`The graph shows a tangent function with an inflection point at ${inflectionX} comma ${inflectionY}.`,srTangentInteractiveElements:({point1X,point1Y,point2X,point2Y})=>`Tangent graph with inflection point at ${point1X} comma ${point1Y} and control point at ${point2X} comma ${point2Y}.`,imageExploreButton:"Explore image",imageExploreButtonAriaLabel:"Explore image and description",imageAlternativeTitle:"Explore image and description",imageDescriptionLabel:"Description",imageZoomAriaLabel:"Make image bigger.",imageResetZoomAriaLabel:"Close image.",gifPlayButtonLabel:"Play Animation",gifPauseButtonLabel:"Pause Animation",definitionIdentifier:({word})=>`Definition of: ${word}`};const errorToString={APPROXIMATED_PI_ERROR:"APPROXIMATED_PI_ERROR",CHOOSE_CORRECT_NUM_ERROR:"chooseCorrectNum",EMPTY_RESPONSE_ERROR:"EMPTY_RESPONSE_ERROR",EXTRA_SYMBOLS_ERROR:"EXTRA_SYMBOLS_ERROR",FILL_ALL_CELLS_ERROR:"fillAllCells",INVALID_CHOICE_SELECTION:"INVALID_CHOICE_SELECTION",INVALID_SELECTION_ERROR:"invalidSelection",MISSING_PERCENT_ERROR:"MISSING_PERCENT_ERROR",MULTIPLICATION_SIGN_ERROR:"MULTIPLICATION_SIGN_ERROR",NEEDS_TO_BE_SIMPLIFIED_ERROR:"NEEDS_TO_BE_SIMPLFIED_ERROR",NOT_NONE_ABOVE_ERROR:"notNoneOfTheAbove",USER_INPUT_EMPTY:"USER_INPUT_EMPTY",USER_INPUT_TOO_LONG:"USER_INPUT_TOO_LONG",WRONG_CASE_ERROR:"WRONG_CASE_ERROR",WRONG_LETTER_ERROR:"WRONG_LETTER_ERROR"};function mapErrorToString(err,translatedStrings){if(!err){return err}return translatedStrings[errorToString[err]]||err}
6
6
 
7
7
  exports.mapErrorToString = mapErrorToString;
8
8
  exports.mockStrings = mockStrings;