@khanacademy/perseus 59.0.1 → 59.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/strings.js CHANGED
@@ -2,970 +2,7 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- /**
6
- * The translated strings that are used to render Perseus.
7
- */
8
-
9
- /**
10
- * Untranslated strings used in Perseus. To be used by an external
11
- * translator to produce translated strings, passed in as `PerseusStrings`.
12
- * !! Note: Ensure that all escape sequences are double-escaped. (e.g. `\\text` -> `\\\\text`)
13
- */
14
- const strings = {
15
- closeKeypad: "close math keypad",
16
- openKeypad: "open math keypad",
17
- mathInputBox: "Math input box",
18
- removeHighlight: "Remove highlight",
19
- addHighlight: "Add highlight",
20
- hintPos: "Hint #%(pos)s",
21
- errorRendering: "Error rendering: %(error)s",
22
- 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",
23
- EXTRA_SYMBOLS_ERROR: "We could not understand your " + "answer. Please check your answer for extra " + "text or symbols.",
24
- NEEDS_TO_BE_SIMPLFIED_ERROR: "Your answer is almost correct, " + "but it needs to be simplified.",
25
- MISSING_PERCENT_ERROR: "Your answer is almost correct, " + "but it is missing a " + "<code>\\\\%</code> at the end.",
26
- MULTIPLICATION_SIGN_ERROR: "I'm a computer. I only understand " + "multiplication if you use an asterisk " + "(*) as the multiplication sign.",
27
- WRONG_CASE_ERROR: "Your answer includes use of a variable with the wrong case.",
28
- WRONG_LETTER_ERROR: "Your answer includes a wrong variable letter.",
29
- invalidSelection: "Make sure you select something for every row.",
30
- ERROR_TITLE: "Oops!",
31
- ERROR_MESSAGE: "Sorry, I don't understand that!",
32
- hints: "Hints",
33
- getAnotherHint: "Get another hint",
34
- deprecatedStandin: "Sorry, this part of the question is no longer available. 😅 Don't worry, you won't be graded on this part. Keep going!",
35
- keepTrying: "Keep trying",
36
- tryAgain: "Try again",
37
- check: "Check",
38
- correctExcited: "Correct!",
39
- nextQuestion: "Next question",
40
- skipToTitle: "Skip to %(title)s",
41
- current: "Current",
42
- correct: "Correct",
43
- correctSelected: "Correct (selected)",
44
- correctCrossedOut: "Correct (but you crossed it out)",
45
- incorrect: "Incorrect",
46
- incorrectSelected: "Incorrect (selected)",
47
- hideExplanation: "Hide explanation",
48
- explain: "Explain",
49
- INVALID_MESSAGE_PREFIX: "We couldn't grade your answer.",
50
- DEFAULT_INVALID_MESSAGE_1: "It looks like you left something blank or ",
51
- DEFAULT_INVALID_MESSAGE_2: "entered in an invalid answer.",
52
- integerExample: "an integer, like $6$",
53
- properExample: "a *proper* fraction, like $1/2$ or $6/10$",
54
- simplifiedProperExample: "a *simplified proper* fraction, like $3/5$",
55
- improperExample: "an *improper* fraction, like $10/7$ or $14/8$",
56
- simplifiedImproperExample: "a *simplified improper* fraction, like $7/4$",
57
- mixedExample: "a mixed number, like $1\\\\ 3/4$",
58
- decimalExample: "an *exact* decimal, like $0.75$",
59
- percentExample: "a percent, like $12.34\\\\%$",
60
- piExample: "a multiple of pi, like $12$ pi or $2/3$ pi",
61
- yourAnswer: "**Your answer should be** ",
62
- yourAnswerLabel: "Your answer:",
63
- addPoints: "Click to add points",
64
- addVertices: "Click to add vertices",
65
- tapMultiple: "Tap each dot on the image to select all answers that apply.",
66
- tapSingle: "Tap each dot on the image to select an answer.",
67
- clickMultiple: "Click each dot on the image to select all answers that apply.",
68
- clickSingle: "Click each dot on the image to select an answer.",
69
- choices: "Choices:",
70
- answers: {
71
- one: "%(num)s answer",
72
- other: "%(num)s answers"
73
- },
74
- hideAnswersToggleLabel: "Hide answer choices",
75
- moves: {
76
- one: "Moves: %(num)s",
77
- other: "Moves: %(num)s"
78
- },
79
- clickTiles: "Click on the tiles to change the lights.",
80
- turnOffLights: "You must turn on all of the lights to continue.",
81
- fillAllCells: "Make sure you fill in all cells in the matrix.",
82
- molecularDrawing: "A molecular structure drawing. SMILES notation: %(content)s",
83
- switchDirection: "Switch direction",
84
- circleOpen: "Make circle open",
85
- circleFilled: "Make circle filled",
86
- numDivisions: "Number of divisions:",
87
- divisions: "Please make sure the number of divisions is in the range %(divRangeString)s.",
88
- lineRange: "lines %(lineRange)s",
89
- lineNumber: "line %(lineNumber)s",
90
- symbolPassage: "The symbol %(questionSymbol)s indicates that question %(questionNumber)s references this portion of the passage.",
91
- symbolQuestion: " The symbol %(sentenceSymbol)s indicates that the following sentence is referenced in a question.",
92
- lineLabel: {
93
- context: "a label next to a reading passage to denote the line number",
94
- message: "Line"
95
- },
96
- beginningPassage: "Beginning of reading passage.",
97
- beginningFootnotes: "Beginning of reading passage footnotes.",
98
- endPassage: "End of reading passage.",
99
- questionMarker: "[Marker for question %(number)s]",
100
- circleMarker: "[Circle marker %(number)s]",
101
- sentenceMarker: "[Sentence %(number)s]",
102
- dragHandles: "Drag handles to make graph",
103
- tapAddPoints: "Tap to add points",
104
- false: "False",
105
- true: "True",
106
- no: "No",
107
- yes: "Yes",
108
- chooseCorrectNum: "Please choose the correct number of answers.",
109
- notNoneOfTheAbove: "'None of the above' may not be selected when other answers are selected.",
110
- noneOfTheAbove: "None of the above",
111
- chooseNumAnswers: "Choose %(numCorrect)s answers:",
112
- chooseAllAnswers: "Choose all answers that apply:",
113
- chooseOneAnswer: "Choose 1 answer:",
114
- choiceCheckedCorrect: "(Choice %(letter)s, Checked, Correct)",
115
- choiceCrossedOutCorrect: "(Choice %(letter)s, Crossed out, Correct)",
116
- choiceCorrect: "(Choice %(letter)s, Correct)",
117
- choiceCheckedIncorrect: "(Choice %(letter)s, Checked, Incorrect)",
118
- choiceCrossedOutIncorrect: "(Choice %(letter)s, Crossed out, Incorrect)",
119
- choiceIncorrect: "(Choice %(letter)s, Incorrect)",
120
- choiceChecked: "(Choice %(letter)s, Checked)",
121
- choiceCrossedOut: "(Choice %(letter)s, Crossed out)",
122
- choice: "(Choice %(letter)s)",
123
- crossOut: "Cross out",
124
- crossOutOption: "Cross out option",
125
- crossOutChoice: "Cross out Choice %(letter)s",
126
- bringBack: "Bring back",
127
- openMenuForChoice: "Open menu for Choice %(letter)s",
128
- letters: {
129
- 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.",
130
- 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"
131
- },
132
- rightArrow: "Reaction arrow pointing to the right.",
133
- dontUnderstandUnits: "I couldn't understand those units.",
134
- checkSigFigs: "Check your significant figures.",
135
- answerNumericallyIncorrect: "That answer is numerically incorrect.",
136
- checkUnits: "Check your units.",
137
- dontUnderstand: "I don't understand that",
138
- loading: "Loading...",
139
- videoTranscript: "See video transcript",
140
- somethingWrong: "Something went wrong.",
141
- videoWrapper: "Khan Academy video wrapper",
142
- mathInputTitle: "mathematics keyboard",
143
- mathInputDescription: "Use keyboard/mouse to interact with math-based input fields",
144
- sin: "sin",
145
- cos: "cos",
146
- tan: "tan",
147
- simulationLoadFail: "Sorry, this simulation cannot load.",
148
- simulationLocaleWarning: "Sorry, this simulation isn't available in your language.",
149
- selectAnAnswer: "Select an answer",
150
- // The following strings are used for interactive graph SR descriptions.
151
- addPoint: "Add Point",
152
- removePoint: "Remove Point",
153
- graphKeyboardPrompt: "Press Shift + Enter to interact with the graph",
154
- closePolygon: "Close shape",
155
- openPolygon: "Re-open shape",
156
- srInteractiveElements: "Interactive elements: %(elements)s",
157
- srNoInteractiveElements: "No interactive elements",
158
- // TODO(LEMS-2660): The following strings are ones that will need
159
- // translation tickets after all interactive graph SR strings have
160
- // been finalized. Remove this comment after the tickets have been
161
- // created.
162
- 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.",
163
- 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.",
164
- srPointAtCoordinates: "Point %(num)s at %(x)s comma %(y)s.",
165
- srCircleGraph: "A circle on a coordinate plane.",
166
- srCircleShape: "Circle. The center point is at %(centerX)s comma %(centerY)s.",
167
- srCircleRadiusPointRight: "Right radius endpoint at %(radiusPointX)s comma %(radiusPointY)s.",
168
- srCircleRadiusPointLeft: "Left radius endpoint at %(radiusPointX)s comma %(radiusPointY)s.",
169
- srCircleRadius: "Circle radius is %(radius)s.",
170
- srCircleOuterPoints: "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.",
171
- srLinearGraph: "A line on a coordinate plane.",
172
- srLinearGraphPoints: "The line has two points, point 1 at %(point1X)s comma %(point1Y)s and point 2 at %(point2X)s comma %(point2Y)s.",
173
- srLinearGraphSlopeIncreasing: "Its slope increases from left to right.",
174
- srLinearGraphSlopeDecreasing: "Its slope decreases from left to right.",
175
- srLinearGraphSlopeHorizontal: "Its slope is zero.",
176
- srLinearGraphSlopeVertical: "Its slope is undefined.",
177
- srLinearGraphXOnlyIntercept: "The line crosses the X-axis at %(xIntercept)s comma 0.",
178
- srLinearGraphYOnlyIntercept: "The line crosses the Y-axis at 0 comma %(yIntercept)s.",
179
- srLinearGraphBothIntercepts: "The line crosses the X-axis at %(xIntercept)s comma 0 and the Y-axis at 0 comma %(yIntercept)s.",
180
- srLinearGraphOriginIntercept: "The line crosses the X and Y axes at the graph's origin.",
181
- srLinearGrabHandle: "Line going through point %(point1X)s comma %(point1Y)s and point %(point2X)s comma %(point2Y)s.",
182
- srAngleStartingSide: "Point 3, starting side at %(x)s comma %(y)s.",
183
- srAngleEndingSide: "Point 2, ending side at %(x)s comma %(y)s.",
184
- srAngleVertexWithAngleMeasure: "Point 1, vertex at %(x)s comma %(y)s. Angle %(angleMeasure)s degrees.",
185
- srAngleGraphAriaLabel: "An angle on a coordinate plane.",
186
- srAngleGraphAriaDescription: "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",
187
- srAngleInteractiveElements: "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.",
188
- srSingleSegmentGraphAriaLabel: "A line segment on a coordinate plane.",
189
- srMultipleSegmentGraphAriaLabel: "%(countOfSegments)s line segments on a coordinate plane.",
190
- srMultipleSegmentIndividualLabel: "Segment %(indexOfSegment)s: Endpoint 1 at %(point1X)s comma %(point1Y)s. Endpoint 2 at %(point2X)s comma %(point2Y)s.",
191
- srSingleSegmentLabel: "Endpoint 1 at %(point1X)s comma %(point1Y)s. Endpoint 2 at %(point2X)s comma %(point2Y)s.",
192
- srSegmentLength: "Segment length %(length)s units.",
193
- srSingleSegmentGraphEndpointAriaLabel: "Endpoint %(endpointNumber)s at %(x)s comma %(y)s.",
194
- srMultipleSegmentGraphEndpointAriaLabel: "Endpoint %(endpointNumber)s on segment %(indexOfSegment)s at %(x)s comma %(y)s.",
195
- srSegmentGrabHandle: "Segment from %(point1X)s comma %(point1Y)s to %(point2X)s comma %(point2Y)s.",
196
- srLinearSystemGraph: "Two lines on a coordinate plane.",
197
- srLinearSystemPoints: "Line %(lineNumber)s has two points, point 1 at %(point1X)s comma %(point1Y)s and point 2 at %(point2X)s comma %(point2Y)s.",
198
- srLinearSystemPoint: "Point %(pointSequence)s on line %(lineNumber)s at %(x)s comma %(y)s.",
199
- srLinearSystemGrabHandle: "Line %(lineNumber)s going through point %(point1X)s comma %(point1Y)s and point %(point2X)s comma %(point2Y)s.",
200
- srLinearSystemIntersection: "Line 1 and line 2 intersect at point %(x)s comma %(y)s.",
201
- srLinearSystemParallel: "Line 1 and line 2 are parallel.",
202
- srRayGraph: "A ray on a coordinate plane.",
203
- srRayPoints: "The endpoint is at %(point1X)s comma %(point1Y)s and the ray goes through point %(point2X)s comma %(point2Y)s.",
204
- srRayGrabHandle: "Ray with endpoint %(point1X)s comma %(point1Y)s going through point %(point2X)s comma %(point2Y)s.",
205
- srRayEndpoint: "Endpoint at %(x)s comma %(y)s.",
206
- srRayTerminalPoint: "Through point at %(x)s comma %(y)s.",
207
- srQuadraticGraph: "A parabola on a 4-quadrant coordinate plane.",
208
- srQuadraticFaceUp: "The parabola opens upward.",
209
- srQuadraticFaceDown: "The parabola opens downward.",
210
- srQuadraticGraphVertexOrigin: "Vertex is at the origin.",
211
- srQuadraticGraphVertexXAxis: "Vertex is on the X-axis.",
212
- srQuadraticGraphVertexYAxis: "Vertex is on the Y-axis.",
213
- srQuadraticGraphVertexQuadrant: "Vertex is in quadrant %(quadrant)s.",
214
- srQuadraticTwoXIntercepts: "The X-intercepts are at %(intercept1)s comma 0 and %(intercept2)s comma 0.",
215
- srQuadraticOneXIntercept: "The X-intercept is at %(intercept)s comma 0.",
216
- srQuadraticYIntercept: "The Y-intercept is at 0 comma %(intercept)s.",
217
- srQuadraticPointOrigin: "Point %(pointNumber)s on parabola at the origin.",
218
- srQuadraticPointAxis: "Point %(pointNumber)s on parabola at %(x)s comma %(y)s.",
219
- srQuadraticPointQuadrant: "Point %(pointNumber)s on parabola in quadrant %(quadrant)s at %(x)s comma %(y)s.",
220
- srQuadraticInteractiveElements: "Parabola with points at %(point1X)s comma %(point1Y)s, %(point2X)s comma %(point2Y)s, and %(point3X)s comma %(point3Y)s.",
221
- srPolygonGraph: "A polygon.",
222
- srPolygonGraphCoordinatePlane: "A polygon on a coordinate plane.",
223
- srPolygonGraphPointsNum: "The polygon has %(num)s points.",
224
- srPolygonGraphPointsOne: "The polygon has 1 point.",
225
- srPolygonElementsNum: "A polygon with %(num)s points.",
226
- srPolygonElementsOne: "A polygon with 1 point.",
227
- srPolygonPointAngleApprox: "Angle approximately equal to %(angle)s degrees.",
228
- srPolygonPointAngle: "Angle equal to %(angle)s degrees.",
229
- srPolygonSideLength: "A line segment, length equal to %(length)s units, connects to point %(pointNum)s.",
230
- srPolygonSideLengthApprox: "A line segment, length approximately equal to %(length)s units, connects to point %(pointNum)s.",
231
- srUnlimitedPolygonEmpty: "An empty coordinate plane.",
232
- srSinusoidGraph: "A sinusoid function on a coordinate plane.",
233
- srSinusoidRootPoint: "Midline intersection at %(x)s comma %(y)s.",
234
- srSinusoidMaxPoint: "Maximum point at %(x)s comma %(y)s.",
235
- srSinusoidMinPoint: "Minimum point at %(x)s comma %(y)s.",
236
- srSinusoidFlatPoint: "Line through point at %(x)s comma %(y)s.",
237
- srSinusoidDescription: "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.",
238
- srSinusoidInteractiveElements: "Sinusoid graph with midline intersection point at %(point1X)s comma %(point1Y)s and extremum point at %(point2X)s comma %(point2Y)s."
239
- // The above strings are used for interactive graph SR descriptions.
240
- };
241
-
242
- /**
243
- * Mock strings for the Perseus package, to be used for tests and Storybook.
244
- */
245
- const mockStrings = {
246
- closeKeypad: "close math keypad",
247
- openKeypad: "open math keypad",
248
- mathInputBox: "Math input box",
249
- removeHighlight: "Remove highlight",
250
- addHighlight: "Add highlight",
251
- hintPos: _ref => {
252
- let {
253
- pos
254
- } = _ref;
255
- return `Hint #${pos}`;
256
- },
257
- errorRendering: _ref2 => {
258
- let {
259
- error
260
- } = _ref2;
261
- return `Error rendering: ${error}`;
262
- },
263
- 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>",
264
- EXTRA_SYMBOLS_ERROR: "We could not understand your " + "answer. Please check your answer for extra " + "text or symbols.",
265
- NEEDS_TO_BE_SIMPLFIED_ERROR: "Your answer is almost correct, " + "but it needs to be simplified.",
266
- MISSING_PERCENT_ERROR: "Your answer is almost correct, " + "but it is missing a " + "<code>\\%</code> at the end.",
267
- MULTIPLICATION_SIGN_ERROR: "I'm a computer. I only understand " + "multiplication if you use an asterisk " + "(*) as the multiplication sign.",
268
- WRONG_CASE_ERROR: "Your answer includes use of a variable with the wrong case.",
269
- WRONG_LETTER_ERROR: "Your answer includes a wrong variable letter.",
270
- invalidSelection: "Make sure you select something for every row.",
271
- ERROR_TITLE: "Oops!",
272
- ERROR_MESSAGE: "Sorry, I don't understand that!",
273
- hints: "Hints",
274
- getAnotherHint: "Get another hint",
275
- deprecatedStandin: "Sorry, this part of the question is no longer available. 😅 Don't worry, you won't be graded on this part. Keep going!",
276
- keepTrying: "Keep trying",
277
- tryAgain: "Try again",
278
- check: "Check",
279
- correctExcited: "Correct!",
280
- nextQuestion: "Next question",
281
- skipToTitle: _ref3 => {
282
- let {
283
- title
284
- } = _ref3;
285
- return `Skip to ${title}`;
286
- },
287
- current: "Current",
288
- correct: "Correct",
289
- correctSelected: "Correct (selected)",
290
- correctCrossedOut: "Correct (but you crossed it out)",
291
- incorrect: "Incorrect",
292
- incorrectSelected: "Incorrect (selected)",
293
- hideExplanation: "Hide explanation",
294
- explain: "Explain",
295
- INVALID_MESSAGE_PREFIX: "We couldn't grade your answer.",
296
- DEFAULT_INVALID_MESSAGE_1: "It looks like you left something blank or ",
297
- DEFAULT_INVALID_MESSAGE_2: "entered in an invalid answer.",
298
- integerExample: "an integer, like $6$",
299
- properExample: "a *proper* fraction, like $1/2$ or $6/10$",
300
- simplifiedProperExample: "a *simplified proper* fraction, like $3/5$",
301
- improperExample: "an *improper* fraction, like $10/7$ or $14/8$",
302
- simplifiedImproperExample: "a *simplified improper* fraction, like $7/4$",
303
- mixedExample: "a mixed number, like $1\\ 3/4$",
304
- decimalExample: "an *exact* decimal, like $0.75$",
305
- percentExample: "a percent, like $12.34\\%$",
306
- piExample: "a multiple of pi, like $12\\ \\text{pi}$ or $2/3\\ \\text{pi}$",
307
- yourAnswer: "**Your answer should be** ",
308
- yourAnswerLabel: "Your answer:",
309
- addPoints: "Click to add points",
310
- addVertices: "Click to add vertices",
311
- tapMultiple: "Tap each dot on the image to select all answers that apply.",
312
- tapSingle: "Tap each dot on the image to select an answer.",
313
- clickMultiple: "Click each dot on the image to select all answers that apply.",
314
- clickSingle: "Click each dot on the image to select an answer.",
315
- choices: "Choices:",
316
- answers: _ref4 => {
317
- let {
318
- num
319
- } = _ref4;
320
- return num === 1 ? `${num} answer` : `${num} answers`;
321
- },
322
- hideAnswersToggleLabel: "Hide answer choices",
323
- moves: _ref5 => {
324
- let {
325
- num
326
- } = _ref5;
327
- return num === 1 ? `Moves: ${num}` : `Moves: ${num}`;
328
- },
329
- clickTiles: "Click on the tiles to change the lights.",
330
- turnOffLights: "You must turn on all of the lights to continue.",
331
- fillAllCells: "Make sure you fill in all cells in the matrix.",
332
- molecularDrawing: _ref6 => {
333
- let {
334
- content
335
- } = _ref6;
336
- return `A molecular structure drawing. SMILES notation: ${content}`;
337
- },
338
- switchDirection: "Switch direction",
339
- circleOpen: "Make circle open",
340
- circleFilled: "Make circle filled",
341
- numDivisions: "Number of divisions:",
342
- divisions: _ref7 => {
343
- let {
344
- divRangeString
345
- } = _ref7;
346
- return `Please make sure the number of divisions is in the range ${divRangeString}.`;
347
- },
348
- lineRange: _ref8 => {
349
- let {
350
- lineRange
351
- } = _ref8;
352
- return `lines ${lineRange}`;
353
- },
354
- lineNumber: _ref9 => {
355
- let {
356
- lineNumber
357
- } = _ref9;
358
- return `line ${lineNumber}`;
359
- },
360
- symbolPassage: _ref10 => {
361
- let {
362
- questionSymbol,
363
- questionNumber
364
- } = _ref10;
365
- return `The symbol ${questionSymbol} indicates that question ${questionNumber} references this portion of the passage.`;
366
- },
367
- symbolQuestion: _ref11 => {
368
- let {
369
- sentenceSymbol
370
- } = _ref11;
371
- return ` The symbol ${sentenceSymbol} indicates that the following sentence is referenced in a question.`;
372
- },
373
- lineLabel: "Line",
374
- beginningPassage: "Beginning of reading passage.",
375
- beginningFootnotes: "Beginning of reading passage footnotes.",
376
- endPassage: "End of reading passage.",
377
- questionMarker: _ref12 => {
378
- let {
379
- number
380
- } = _ref12;
381
- return `[Marker for question ${number}]`;
382
- },
383
- circleMarker: _ref13 => {
384
- let {
385
- number
386
- } = _ref13;
387
- return `[Circle marker ${number}]`;
388
- },
389
- sentenceMarker: _ref14 => {
390
- let {
391
- number
392
- } = _ref14;
393
- return `[Sentence ${number}]`;
394
- },
395
- dragHandles: "Drag handles to make graph",
396
- tapAddPoints: "Tap to add points",
397
- false: "False",
398
- true: "True",
399
- no: "No",
400
- yes: "Yes",
401
- chooseCorrectNum: "Please choose the correct number of answers.",
402
- notNoneOfTheAbove: "'None of the above' may not be selected when other answers are selected.",
403
- noneOfTheAbove: "None of the above",
404
- chooseNumAnswers: _ref15 => {
405
- let {
406
- numCorrect
407
- } = _ref15;
408
- return `Choose ${numCorrect} answers:`;
409
- },
410
- chooseAllAnswers: "Choose all answers that apply:",
411
- chooseOneAnswer: "Choose 1 answer:",
412
- choiceCheckedCorrect: _ref16 => {
413
- let {
414
- letter
415
- } = _ref16;
416
- return `(Choice ${letter}, Checked, Correct)`;
417
- },
418
- choiceCrossedOutCorrect: _ref17 => {
419
- let {
420
- letter
421
- } = _ref17;
422
- return `(Choice ${letter}, Crossed out, Correct)`;
423
- },
424
- choiceCorrect: _ref18 => {
425
- let {
426
- letter
427
- } = _ref18;
428
- return `(Choice ${letter}, Correct)`;
429
- },
430
- choiceCheckedIncorrect: _ref19 => {
431
- let {
432
- letter
433
- } = _ref19;
434
- return `(Choice ${letter}, Checked, Incorrect)`;
435
- },
436
- choiceCrossedOutIncorrect: _ref20 => {
437
- let {
438
- letter
439
- } = _ref20;
440
- return `(Choice ${letter}, Crossed out, Incorrect)`;
441
- },
442
- choiceIncorrect: _ref21 => {
443
- let {
444
- letter
445
- } = _ref21;
446
- return `(Choice ${letter}, Incorrect)`;
447
- },
448
- choiceChecked: _ref22 => {
449
- let {
450
- letter
451
- } = _ref22;
452
- return `(Choice ${letter}, Checked)`;
453
- },
454
- choiceCrossedOut: _ref23 => {
455
- let {
456
- letter
457
- } = _ref23;
458
- return `(Choice ${letter}, Crossed out)`;
459
- },
460
- choice: _ref24 => {
461
- let {
462
- letter
463
- } = _ref24;
464
- return `(Choice ${letter})`;
465
- },
466
- crossOut: "Cross out",
467
- crossOutOption: "Cross out option",
468
- crossOutChoice: _ref25 => {
469
- let {
470
- letter
471
- } = _ref25;
472
- return `Cross out Choice ${letter}`;
473
- },
474
- bringBack: "Bring back",
475
- openMenuForChoice: _ref26 => {
476
- let {
477
- letter
478
- } = _ref26;
479
- return `Open menu for Choice ${letter}`;
480
- },
481
- 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",
482
- rightArrow: "Reaction arrow pointing to the right.",
483
- dontUnderstandUnits: "I couldn't understand those units.",
484
- checkSigFigs: "Check your significant figures.",
485
- answerNumericallyIncorrect: "That answer is numerically incorrect.",
486
- checkUnits: "Check your units.",
487
- dontUnderstand: "I don't understand that",
488
- loading: "Loading...",
489
- videoTranscript: "See video transcript",
490
- somethingWrong: "Something went wrong.",
491
- videoWrapper: "Khan Academy video wrapper",
492
- mathInputTitle: "mathematics keyboard",
493
- mathInputDescription: "Use keyboard/mouse to interact with math-based input fields",
494
- sin: "sin",
495
- cos: "cos",
496
- tan: "tan",
497
- simulationLoadFail: "Sorry, this simulation cannot load.",
498
- simulationLocaleWarning: "Sorry, this simulation isn't available in your language.",
499
- selectAnAnswer: "Select an answer",
500
- // The following strings are used for interactive graph SR descriptions.
501
- 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.",
502
- 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.",
503
- graphKeyboardPrompt: "Press Shift + Enter to interact with the graph",
504
- addPoint: "Add Point",
505
- removePoint: "Remove Point",
506
- closePolygon: "Close shape",
507
- openPolygon: "Re-open shape",
508
- srPointAtCoordinates: _ref27 => {
509
- let {
510
- num,
511
- x,
512
- y
513
- } = _ref27;
514
- return `Point ${num} at ${x} comma ${y}.`;
515
- },
516
- srInteractiveElements: _ref28 => {
517
- let {
518
- elements
519
- } = _ref28;
520
- return `Interactive elements: ${elements}`;
521
- },
522
- srNoInteractiveElements: "No interactive elements",
523
- srCircleGraph: "A circle on a coordinate plane.",
524
- srCircleShape: _ref29 => {
525
- let {
526
- centerX,
527
- centerY
528
- } = _ref29;
529
- return `Circle. The center point is at ${centerX} comma ${centerY}.`;
530
- },
531
- srCircleRadiusPointRight: _ref30 => {
532
- let {
533
- radiusPointX,
534
- radiusPointY
535
- } = _ref30;
536
- return `Right radius endpoint at ${radiusPointX} comma ${radiusPointY}.`;
537
- },
538
- srCircleRadiusPointLeft: _ref31 => {
539
- let {
540
- radiusPointX,
541
- radiusPointY
542
- } = _ref31;
543
- return `Left radius endpoint at ${radiusPointX} comma ${radiusPointY}.`;
544
- },
545
- srCircleRadius: _ref32 => {
546
- let {
547
- radius
548
- } = _ref32;
549
- return `Circle radius is ${radius}.`;
550
- },
551
- srCircleOuterPoints: _ref33 => {
552
- let {
553
- point1X,
554
- point1Y,
555
- point2X,
556
- point2Y,
557
- point3X,
558
- point3Y,
559
- point4X,
560
- point4Y
561
- } = _ref33;
562
- return `Points on the circle at ${point1X} comma ${point1Y}, ${point2X} comma ${point2Y}, ${point3X} comma ${point3Y}, ${point4X} comma ${point4Y}.`;
563
- },
564
- srLinearGraph: "A line on a coordinate plane.",
565
- srLinearGraphPoints: _ref34 => {
566
- let {
567
- point1X,
568
- point1Y,
569
- point2X,
570
- point2Y
571
- } = _ref34;
572
- return `The line has two points, point 1 at ${point1X} comma ${point1Y} and point 2 at ${point2X} comma ${point2Y}.`;
573
- },
574
- srLinearGraphSlopeIncreasing: "Its slope increases from left to right.",
575
- srLinearGraphSlopeDecreasing: "Its slope decreases from left to right.",
576
- srLinearGraphSlopeHorizontal: "Its slope is zero.",
577
- srLinearGraphSlopeVertical: "Its slope is undefined.",
578
- srLinearGraphXOnlyIntercept: _ref35 => {
579
- let {
580
- xIntercept
581
- } = _ref35;
582
- return `The line crosses the X-axis at ${xIntercept} comma 0.`;
583
- },
584
- srLinearGraphYOnlyIntercept: _ref36 => {
585
- let {
586
- yIntercept
587
- } = _ref36;
588
- return `The line crosses the Y-axis at 0 comma ${yIntercept}.`;
589
- },
590
- srLinearGraphBothIntercepts: _ref37 => {
591
- let {
592
- xIntercept,
593
- yIntercept
594
- } = _ref37;
595
- return `The line crosses the X-axis at ${xIntercept} comma 0 and the Y-axis at 0 comma ${yIntercept}.`;
596
- },
597
- srLinearGraphOriginIntercept: "The line crosses the X and Y axes at the graph's origin.",
598
- srLinearGrabHandle: _ref38 => {
599
- let {
600
- point1X,
601
- point1Y,
602
- point2X,
603
- point2Y
604
- } = _ref38;
605
- return `Line going through point ${point1X} comma ${point1Y} and point ${point2X} comma ${point2Y}.`;
606
- },
607
- srAngleStartingSide: _ref39 => {
608
- let {
609
- x,
610
- y
611
- } = _ref39;
612
- return `Point 3, starting side at ${x} comma ${y}.`;
613
- },
614
- srAngleEndingSide: _ref40 => {
615
- let {
616
- x,
617
- y
618
- } = _ref40;
619
- return `Point 2, ending side at ${x} comma ${y}.`;
620
- },
621
- srAngleVertexWithAngleMeasure: _ref41 => {
622
- let {
623
- x,
624
- y,
625
- angleMeasure
626
- } = _ref41;
627
- return `Point 1, vertex at ${x} comma ${y}. Angle ${angleMeasure} degrees.`;
628
- },
629
- srAngleGraphAriaLabel: "An angle on a coordinate plane.",
630
- srAngleGraphAriaDescription: _ref42 => {
631
- let {
632
- angleMeasure,
633
- vertexX,
634
- vertexY,
635
- startingSideX,
636
- startingSideY,
637
- endingSideX,
638
- endingSideY
639
- } = _ref42;
640
- return `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}.`;
641
- },
642
- srAngleInteractiveElements: _ref43 => {
643
- let {
644
- vertexX,
645
- vertexY,
646
- startingSideX,
647
- startingSideY,
648
- endingSideX,
649
- endingSideY
650
- } = _ref43;
651
- return `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}.`;
652
- },
653
- srSingleSegmentGraphAriaLabel: "A line segment on a coordinate plane.",
654
- srMultipleSegmentGraphAriaLabel: _ref44 => {
655
- let {
656
- countOfSegments
657
- } = _ref44;
658
- return `${countOfSegments} segments on a coordinate plane.`;
659
- },
660
- srMultipleSegmentIndividualLabel: _ref45 => {
661
- let {
662
- point1X,
663
- point1Y,
664
- point2X,
665
- point2Y,
666
- indexOfSegment
667
- } = _ref45;
668
- return `Segment ${indexOfSegment}: Endpoint 1 at ${point1X} comma ${point1Y}. Endpoint 2 at ${point2X} comma ${point2Y}.`;
669
- },
670
- srSingleSegmentLabel: _ref46 => {
671
- let {
672
- point1X,
673
- point1Y,
674
- point2X,
675
- point2Y
676
- } = _ref46;
677
- return `Endpoint 1 at ${point1X} comma ${point1Y}. Endpoint 2 at ${point2X} comma ${point2Y}.`;
678
- },
679
- srSegmentLength: _ref47 => {
680
- let {
681
- length
682
- } = _ref47;
683
- return `Segment length ${length} units.`;
684
- },
685
- srSingleSegmentGraphEndpointAriaLabel: _ref48 => {
686
- let {
687
- endpointNumber,
688
- x,
689
- y
690
- } = _ref48;
691
- return `Endpoint ${endpointNumber} at ${x} comma ${y}.`;
692
- },
693
- srMultipleSegmentGraphEndpointAriaLabel: _ref49 => {
694
- let {
695
- endpointNumber,
696
- x,
697
- y,
698
- indexOfSegment
699
- } = _ref49;
700
- return `Endpoint ${endpointNumber} on segment ${indexOfSegment} at ${x} comma ${y}.`;
701
- },
702
- srSegmentGrabHandle: _ref50 => {
703
- let {
704
- point1X,
705
- point1Y,
706
- point2X,
707
- point2Y
708
- } = _ref50;
709
- return `Segment from ${point1X} comma ${point1Y} to ${point2X} comma ${point2Y}.`;
710
- },
711
- srLinearSystemGraph: "Two lines on a coordinate plane.",
712
- srLinearSystemPoints: _ref51 => {
713
- let {
714
- lineNumber,
715
- point1X,
716
- point1Y,
717
- point2X,
718
- point2Y
719
- } = _ref51;
720
- return `Line ${lineNumber} has two points, point 1 at ${point1X} comma ${point1Y} and point 2 at ${point2X} comma ${point2Y}.`;
721
- },
722
- srLinearSystemPoint: _ref52 => {
723
- let {
724
- lineNumber,
725
- pointSequence,
726
- x,
727
- y
728
- } = _ref52;
729
- return `Point ${pointSequence} on line ${lineNumber} at ${x} comma ${y}.`;
730
- },
731
- srLinearSystemGrabHandle: _ref53 => {
732
- let {
733
- lineNumber,
734
- point1X,
735
- point1Y,
736
- point2X,
737
- point2Y
738
- } = _ref53;
739
- return `Line ${lineNumber} going through point ${point1X} comma ${point1Y} and point ${point2X} comma ${point2Y}.`;
740
- },
741
- srLinearSystemIntersection: _ref54 => {
742
- let {
743
- x,
744
- y
745
- } = _ref54;
746
- return `Line 1 and line 2 intersect at point ${x} comma ${y}.`;
747
- },
748
- srLinearSystemParallel: "Line 1 and line 2 are parallel.",
749
- srRayGraph: "A ray on a coordinate plane.",
750
- srRayPoints: _ref55 => {
751
- let {
752
- point1X,
753
- point1Y,
754
- point2X,
755
- point2Y
756
- } = _ref55;
757
- return `The endpoint is at ${point1X} comma ${point1Y} and the ray goes through point ${point2X} comma ${point2Y}.`;
758
- },
759
- srRayGrabHandle: _ref56 => {
760
- let {
761
- point1X,
762
- point1Y,
763
- point2X,
764
- point2Y
765
- } = _ref56;
766
- return `Ray with endpoint ${point1X} comma ${point1Y} going through point ${point2X} comma ${point2Y}.`;
767
- },
768
- srRayEndpoint: _ref57 => {
769
- let {
770
- x,
771
- y
772
- } = _ref57;
773
- return `Endpoint at ${x} comma ${y}.`;
774
- },
775
- srRayTerminalPoint: _ref58 => {
776
- let {
777
- x,
778
- y
779
- } = _ref58;
780
- return `Through point at ${x} comma ${y}.`;
781
- },
782
- srQuadraticGraph: "A parabola on a 4-quadrant coordinate plane.",
783
- srQuadraticFaceUp: "The parabola opens upward.",
784
- srQuadraticFaceDown: "The parabola opens downward.",
785
- srQuadraticGraphVertexOrigin: "Vertex is at the origin.",
786
- srQuadraticGraphVertexXAxis: "Vertex is on the X-axis.",
787
- srQuadraticGraphVertexYAxis: "Vertex is on the Y-axis.",
788
- srQuadraticGraphVertexQuadrant: _ref59 => {
789
- let {
790
- quadrant
791
- } = _ref59;
792
- return `Vertex is in quadrant ${quadrant}.`;
793
- },
794
- srQuadraticTwoXIntercepts: _ref60 => {
795
- let {
796
- intercept1,
797
- intercept2
798
- } = _ref60;
799
- return `The X-intercepts are at ${intercept1} comma 0 and ${intercept2} comma 0.`;
800
- },
801
- srQuadraticOneXIntercept: _ref61 => {
802
- let {
803
- intercept
804
- } = _ref61;
805
- return `The X-intercept is at ${intercept} comma 0.`;
806
- },
807
- srQuadraticYIntercept: _ref62 => {
808
- let {
809
- intercept
810
- } = _ref62;
811
- return `The Y-intercept is at 0 comma ${intercept}.`;
812
- },
813
- srQuadraticPointOrigin: _ref63 => {
814
- let {
815
- pointNumber
816
- } = _ref63;
817
- return `Point ${pointNumber} on parabola at the origin.`;
818
- },
819
- srQuadraticPointAxis: _ref64 => {
820
- let {
821
- pointNumber,
822
- x,
823
- y
824
- } = _ref64;
825
- return `Point ${pointNumber} on parabola at ${x} comma ${y}.`;
826
- },
827
- srQuadraticPointQuadrant: _ref65 => {
828
- let {
829
- pointNumber,
830
- x,
831
- y,
832
- quadrant
833
- } = _ref65;
834
- return `Point ${pointNumber} on parabola in quadrant ${quadrant} at ${x} comma ${y}.`;
835
- },
836
- srQuadraticInteractiveElements: _ref66 => {
837
- let {
838
- point1X,
839
- point1Y,
840
- point2X,
841
- point2Y,
842
- point3X,
843
- point3Y
844
- } = _ref66;
845
- return `Parabola with points at ${point1X} comma ${point1Y}, ${point2X} comma ${point2Y}, and ${point3X} comma ${point3Y}.`;
846
- },
847
- srPolygonGraph: "A polygon.",
848
- srPolygonGraphCoordinatePlane: "A polygon on a coordinate plane.",
849
- srPolygonGraphPointsNum: _ref67 => {
850
- let {
851
- num
852
- } = _ref67;
853
- return `The polygon has ${num} points.`;
854
- },
855
- srPolygonGraphPointsOne: "The polygon has 1 point.",
856
- srPolygonElementsNum: _ref68 => {
857
- let {
858
- num
859
- } = _ref68;
860
- return `A polygon with ${num} points.`;
861
- },
862
- srPolygonElementsOne: "A polygon with 1 point.",
863
- srPolygonPointAngleApprox: _ref69 => {
864
- let {
865
- angle
866
- } = _ref69;
867
- return `Angle approximately equal to ${angle} degrees.`;
868
- },
869
- srPolygonPointAngle: _ref70 => {
870
- let {
871
- angle
872
- } = _ref70;
873
- return `Angle equal to ${angle} degrees.`;
874
- },
875
- srPolygonSideLength: _ref71 => {
876
- let {
877
- pointNum,
878
- length
879
- } = _ref71;
880
- return `A line segment, length equal to ${length} units, connects to point ${pointNum}.`;
881
- },
882
- srPolygonSideLengthApprox: _ref72 => {
883
- let {
884
- pointNum,
885
- length
886
- } = _ref72;
887
- return `A line segment, length approximately equal to ${length} units, connects to point ${pointNum}.`;
888
- },
889
- srUnlimitedPolygonEmpty: "An empty coordinate plane.",
890
- srSinusoidGraph: "A sinusoid function on a coordinate plane.",
891
- srSinusoidRootPoint: _ref73 => {
892
- let {
893
- x,
894
- y
895
- } = _ref73;
896
- return `Midline intersection at ${x} comma ${y}.`;
897
- },
898
- srSinusoidMaxPoint: _ref74 => {
899
- let {
900
- x,
901
- y
902
- } = _ref74;
903
- return `Maximum point at ${x} comma ${y}.`;
904
- },
905
- srSinusoidMinPoint: _ref75 => {
906
- let {
907
- x,
908
- y
909
- } = _ref75;
910
- return `Minimum point at ${x} comma ${y}.`;
911
- },
912
- srSinusoidFlatPoint: _ref76 => {
913
- let {
914
- x,
915
- y
916
- } = _ref76;
917
- return `Line through point at ${x} comma ${y}.`;
918
- },
919
- srSinusoidDescription: _ref77 => {
920
- let {
921
- minValue,
922
- maxValue,
923
- cycleStart,
924
- cycleEnd
925
- } = _ref77;
926
- return `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}.`;
927
- },
928
- srSinusoidInteractiveElements: _ref78 => {
929
- let {
930
- point1X,
931
- point1Y,
932
- point2X,
933
- point2Y
934
- } = _ref78;
935
- return `Sinusoid graph with midline intersection point at ${point1X} comma ${point1Y} and extremum point at ${point2X} comma ${point2Y}.`;
936
- }
937
- // The above strings are used for interactive graph SR descriptions.
938
- };
939
-
940
- // This type helps us make sure all error codes are mapped to strings
941
-
942
- /**
943
- * Map an error string to a PerseusStrings key
944
- * that we can use to get the translated error message
945
- */
946
- const errorToString = {
947
- MISSING_PERCENT_ERROR: "MISSING_PERCENT_ERROR",
948
- NEEDS_TO_BE_SIMPLIFIED_ERROR: "NEEDS_TO_BE_SIMPLFIED_ERROR",
949
- APPROXIMATED_PI_ERROR: "APPROXIMATED_PI_ERROR",
950
- EXTRA_SYMBOLS_ERROR: "EXTRA_SYMBOLS_ERROR",
951
- WRONG_CASE_ERROR: "WRONG_CASE_ERROR",
952
- WRONG_LETTER_ERROR: "WRONG_LETTER_ERROR",
953
- MULTIPLICATION_SIGN_ERROR: "MULTIPLICATION_SIGN_ERROR",
954
- INVALID_SELECTION_ERROR: "invalidSelection",
955
- CHOOSE_CORRECT_NUM_ERROR: "chooseCorrectNum",
956
- NOT_NONE_ABOVE_ERROR: "notNoneOfTheAbove",
957
- FILL_ALL_CELLS_ERROR: "fillAllCells"
958
- };
959
- function mapErrorToString(
960
- // the string representing an error code
961
- err,
962
- // the translated Perseus strings
963
- translatedStrings) {
964
- if (!err) {
965
- return err;
966
- }
967
- return translatedStrings[errorToString[err]] || err;
968
- }
5
+ const strings={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",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.",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.",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)",correctCrossedOut:"Correct (but you crossed it out)",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.",lineRange:"lines %(lineRange)s",lineNumber:"line %(lineNumber)s",symbolPassage:"The symbol %(questionSymbol)s indicates that question %(questionNumber)s references this portion of the passage.",symbolQuestion:" The symbol %(sentenceSymbol)s indicates that the following sentence is referenced in a question.",lineLabel:{context:"a label next to a reading passage to denote the line number",message:"Line"},beginningPassage:"Beginning of reading passage.",beginningFootnotes:"Beginning of reading passage footnotes.",endPassage:"End of reading passage.",questionMarker:"[Marker for question %(number)s]",circleMarker:"[Circle marker %(number)s]",sentenceMarker:"[Sentence %(number)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)",choiceCrossedOutCorrect:"(Choice %(letter)s, Crossed out, Correct)",choiceCorrect:"(Choice %(letter)s, Correct)",choiceCheckedIncorrect:"(Choice %(letter)s, Checked, Incorrect)",choiceCrossedOutIncorrect:"(Choice %(letter)s, Crossed out, Incorrect)",choiceIncorrect:"(Choice %(letter)s, Incorrect)",choiceChecked:"(Choice %(letter)s, Checked)",choiceCrossedOut:"(Choice %(letter)s, Crossed out)",choice:"(Choice %(letter)s)",crossOut:"Cross out",crossOutOption:"Cross out option",crossOutChoice:"Cross out Choice %(letter)s",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"},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",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",closePolygon:"Close shape",openPolygon:"Re-open shape",srInteractiveElements:"Interactive elements: %(elements)s",srNoInteractiveElements:"No interactive elements",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.",srPointAtCoordinates:"Point %(num)s at %(x)s comma %(y)s.",srCircleGraph:"A circle on a coordinate plane.",srCircleShape:"Circle. The center point is at %(centerX)s comma %(centerY)s.",srCircleRadiusPointRight:"Right radius endpoint at %(radiusPointX)s comma %(radiusPointY)s.",srCircleRadiusPointLeft:"Left radius endpoint at %(radiusPointX)s comma %(radiusPointY)s.",srCircleRadius:"Circle radius is %(radius)s.",srCircleOuterPoints:"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:"A line on a coordinate plane.",srLinearGraphPoints:"The line has two points, point 1 at %(point1X)s comma %(point1Y)s and point 2 at %(point2X)s comma %(point2Y)s.",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:"The line crosses the X-axis at %(xIntercept)s comma 0.",srLinearGraphYOnlyIntercept:"The line crosses the Y-axis at 0 comma %(yIntercept)s.",srLinearGraphBothIntercepts:"The line crosses the X-axis at %(xIntercept)s comma 0 and the Y-axis at 0 comma %(yIntercept)s.",srLinearGraphOriginIntercept:"The line crosses the X and Y axes at the graph's origin.",srLinearGrabHandle:"Line going through point %(point1X)s comma %(point1Y)s and point %(point2X)s comma %(point2Y)s.",srAngleStartingSide:"Point 3, starting side at %(x)s comma %(y)s.",srAngleEndingSide:"Point 2, ending side at %(x)s comma %(y)s.",srAngleVertexWithAngleMeasure:"Point 1, vertex at %(x)s comma %(y)s. Angle %(angleMeasure)s degrees.",srAngleGraphAriaLabel:"An angle on a coordinate plane.",srAngleGraphAriaDescription:"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:"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:"A line segment on a coordinate plane.",srMultipleSegmentGraphAriaLabel:"%(countOfSegments)s line segments on a coordinate plane.",srMultipleSegmentIndividualLabel:"Segment %(indexOfSegment)s: Endpoint 1 at %(point1X)s comma %(point1Y)s. Endpoint 2 at %(point2X)s comma %(point2Y)s.",srSingleSegmentLabel:"Endpoint 1 at %(point1X)s comma %(point1Y)s. Endpoint 2 at %(point2X)s comma %(point2Y)s.",srSegmentLength:"Segment length %(length)s units.",srSingleSegmentGraphEndpointAriaLabel:"Endpoint %(endpointNumber)s at %(x)s comma %(y)s.",srMultipleSegmentGraphEndpointAriaLabel:"Endpoint %(endpointNumber)s on segment %(indexOfSegment)s at %(x)s comma %(y)s.",srSegmentGrabHandle:"Segment from %(point1X)s comma %(point1Y)s to %(point2X)s comma %(point2Y)s.",srLinearSystemGraph:"Two lines on a coordinate plane.",srLinearSystemPoints:"Line %(lineNumber)s has two points, point 1 at %(point1X)s comma %(point1Y)s and point 2 at %(point2X)s comma %(point2Y)s.",srLinearSystemPoint:"Point %(pointSequence)s on line %(lineNumber)s at %(x)s comma %(y)s.",srLinearSystemGrabHandle:"Line %(lineNumber)s going through point %(point1X)s comma %(point1Y)s and point %(point2X)s comma %(point2Y)s.",srLinearSystemIntersection:"Line 1 and line 2 intersect at point %(x)s comma %(y)s.",srLinearSystemParallel:"Line 1 and line 2 are parallel.",srRayGraph:"A ray on a coordinate plane.",srRayPoints:"The endpoint is at %(point1X)s comma %(point1Y)s and the ray goes through point %(point2X)s comma %(point2Y)s.",srRayGrabHandle:"Ray with endpoint %(point1X)s comma %(point1Y)s going through point %(point2X)s comma %(point2Y)s.",srRayEndpoint:"Endpoint at %(x)s comma %(y)s.",srRayTerminalPoint:"Through point at %(x)s comma %(y)s.",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:"Vertex is in quadrant %(quadrant)s.",srQuadraticTwoXIntercepts:"The X-intercepts are at %(intercept1)s comma 0 and %(intercept2)s comma 0.",srQuadraticOneXIntercept:"The X-intercept is at %(intercept)s comma 0.",srQuadraticYIntercept:"The Y-intercept is at 0 comma %(intercept)s.",srQuadraticPointOrigin:"Point %(pointNumber)s on parabola at the origin.",srQuadraticPointAxis:"Point %(pointNumber)s on parabola at %(x)s comma %(y)s.",srQuadraticPointQuadrant:"Point %(pointNumber)s on parabola in quadrant %(quadrant)s at %(x)s comma %(y)s.",srQuadraticInteractiveElements:"Parabola with points at %(point1X)s comma %(point1Y)s, %(point2X)s comma %(point2Y)s, and %(point3X)s comma %(point3Y)s.",srPolygonGraph:"A polygon.",srPolygonGraphCoordinatePlane:"A polygon on a coordinate plane.",srPolygonGraphPointsNum:"The polygon has %(num)s points.",srPolygonGraphPointsOne:"The polygon has 1 point.",srPolygonElementsNum:"A polygon with %(num)s points.",srPolygonElementsOne:"A polygon with 1 point.",srPolygonPointAngleApprox:"Angle approximately equal to %(angle)s degrees.",srPolygonPointAngle:"Angle equal to %(angle)s degrees.",srPolygonSideLength:"A line segment, length equal to %(length)s units, connects to point %(pointNum)s.",srPolygonSideLengthApprox:"A line segment, length approximately equal to %(length)s units, connects to point %(pointNum)s.",srUnlimitedPolygonEmpty:"An empty coordinate plane.",srSinusoidGraph:"A sinusoid function on a coordinate plane.",srSinusoidRootPoint:"Midline intersection at %(x)s comma %(y)s.",srSinusoidMaxPoint:"Maximum point at %(x)s comma %(y)s.",srSinusoidMinPoint:"Minimum point at %(x)s comma %(y)s.",srSinusoidFlatPoint:"Line through point at %(x)s comma %(y)s.",srSinusoidDescription:"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:"Sinusoid graph with midline intersection point at %(point1X)s comma %(point1Y)s and extremum point at %(point2X)s comma %(point2Y)s."};const mockStrings={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>",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.",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.",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)",correctCrossedOut:"Correct (but you crossed it out)",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}.`,lineRange:({lineRange})=>`lines ${lineRange}`,lineNumber:({lineNumber})=>`line ${lineNumber}`,symbolPassage:({questionSymbol,questionNumber})=>`The symbol ${questionSymbol} indicates that question ${questionNumber} references this portion of the passage.`,symbolQuestion:({sentenceSymbol})=>` The symbol ${sentenceSymbol} indicates that the following sentence is referenced in a question.`,lineLabel:"Line",beginningPassage:"Beginning of reading passage.",beginningFootnotes:"Beginning of reading passage footnotes.",endPassage:"End of reading passage.",questionMarker:({number})=>`[Marker for question ${number}]`,circleMarker:({number})=>`[Circle marker ${number}]`,sentenceMarker:({number})=>`[Sentence ${number}]`,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)`,choiceCrossedOutCorrect:({letter})=>`(Choice ${letter}, Crossed out, Correct)`,choiceCorrect:({letter})=>`(Choice ${letter}, Correct)`,choiceCheckedIncorrect:({letter})=>`(Choice ${letter}, Checked, Incorrect)`,choiceCrossedOutIncorrect:({letter})=>`(Choice ${letter}, Crossed out, Incorrect)`,choiceIncorrect:({letter})=>`(Choice ${letter}, Incorrect)`,choiceChecked:({letter})=>`(Choice ${letter}, Checked)`,choiceCrossedOut:({letter})=>`(Choice ${letter}, Crossed out)`,choice:({letter})=>`(Choice ${letter})`,crossOut:"Cross out",crossOutOption:"Cross out option",crossOutChoice:({letter})=>`Cross out Choice ${letter}`,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",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",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",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}.`,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}.`};const errorToString={MISSING_PERCENT_ERROR:"MISSING_PERCENT_ERROR",NEEDS_TO_BE_SIMPLIFIED_ERROR:"NEEDS_TO_BE_SIMPLFIED_ERROR",APPROXIMATED_PI_ERROR:"APPROXIMATED_PI_ERROR",EXTRA_SYMBOLS_ERROR:"EXTRA_SYMBOLS_ERROR",WRONG_CASE_ERROR:"WRONG_CASE_ERROR",WRONG_LETTER_ERROR:"WRONG_LETTER_ERROR",MULTIPLICATION_SIGN_ERROR:"MULTIPLICATION_SIGN_ERROR",INVALID_SELECTION_ERROR:"invalidSelection",CHOOSE_CORRECT_NUM_ERROR:"chooseCorrectNum",NOT_NONE_ABOVE_ERROR:"notNoneOfTheAbove",FILL_ALL_CELLS_ERROR:"fillAllCells"};function mapErrorToString(err,translatedStrings){if(!err){return err}return translatedStrings[errorToString[err]]||err}
969
6
 
970
7
  exports.mapErrorToString = mapErrorToString;
971
8
  exports.mockStrings = mockStrings;