@khanacademy/perseus 36.1.1 → 36.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/es/index.js CHANGED
@@ -10070,7 +10070,10 @@ const GraphUtils = {
10070
10070
  return point.distanceToPoint(point1, point2);
10071
10071
  },
10072
10072
  // Find the angle in degrees between two or three points
10073
- findAngle: function (point1, point2, vertex) {
10073
+ // This function is deprecated as it has several issues calculating
10074
+ // correctly when dealing with reflex angles or the position of point2
10075
+ // (LEMS-2202) Remove this function while removing the Legacy Interactive Graph.
10076
+ findAngleDeprecated: function (point1, point2, vertex) {
10074
10077
  if (vertex === undefined) {
10075
10078
  const x = point1[0] - point2[0];
10076
10079
  const y = point1[1] - point2[1];
@@ -10079,7 +10082,7 @@ const GraphUtils = {
10079
10082
  }
10080
10083
  return (180 + Math.atan2(-y, -x) * 180 / Math.PI + 360) % 360;
10081
10084
  }
10082
- return GraphUtils.findAngle(point1, vertex) - GraphUtils.findAngle(point2, vertex);
10085
+ return GraphUtils.findAngleDeprecated(point1, vertex) - GraphUtils.findAngleDeprecated(point2, vertex);
10083
10086
  },
10084
10087
  graphs: {}
10085
10088
  };
@@ -11095,8 +11098,8 @@ _.extend(GraphUtils.Graphie.prototype, {
11095
11098
  p1 = options.point3;
11096
11099
  p3 = options.point1;
11097
11100
  }
11098
- const startAngle = GraphUtils.findAngle(p1, vertex);
11099
- const endAngle = GraphUtils.findAngle(p3, vertex);
11101
+ const startAngle = GraphUtils.findAngleDeprecated(p1, vertex);
11102
+ const endAngle = GraphUtils.findAngleDeprecated(p3, vertex);
11100
11103
  const angle = (endAngle + 360 - startAngle) % 360;
11101
11104
  const halfAngle = (startAngle + angle / 2) % 360;
11102
11105
  const sPadding = 5 * options.pushOut;
@@ -11263,15 +11266,15 @@ _.extend(GraphUtils.Graphie.prototype, {
11263
11266
  let angle = 135;
11264
11267
  let halfAngle;
11265
11268
  if (p1 && p3) {
11266
- const startAngle = GraphUtils.findAngle(p1, vertex);
11267
- const endAngle = GraphUtils.findAngle(p3, vertex);
11269
+ const startAngle = GraphUtils.findAngleDeprecated(p1, vertex);
11270
+ const endAngle = GraphUtils.findAngleDeprecated(p3, vertex);
11268
11271
  angle = (endAngle + 360 - startAngle) % 360;
11269
11272
  halfAngle = (startAngle + angle / 2 + 180) % 360;
11270
11273
  } else if (p1) {
11271
- const parallelAngle = GraphUtils.findAngle(vertex, p1);
11274
+ const parallelAngle = GraphUtils.findAngleDeprecated(vertex, p1);
11272
11275
  halfAngle = parallelAngle + 90;
11273
11276
  } else if (p3) {
11274
- const parallelAngle = GraphUtils.findAngle(p3, vertex);
11277
+ const parallelAngle = GraphUtils.findAngleDeprecated(p3, vertex);
11275
11278
  halfAngle = parallelAngle + 90;
11276
11279
  } else {
11277
11280
  // Standalone point
@@ -11477,7 +11480,7 @@ _.extend(GraphUtils.Graphie.prototype, {
11477
11480
  const vertex = constraints.fixedAngle.vertex.coord || constraints.fixedAngle.vertex;
11478
11481
  const ref = constraints.fixedAngle.ref.coord || constraints.fixedAngle.ref;
11479
11482
  const distPoint = constraints.fixedDistance.point.coord || constraints.fixedDistance.point;
11480
- const constrainedAngle = (constraints.fixedAngle.angle + GraphUtils.findAngle(ref, vertex)) * Math.PI / 180;
11483
+ const constrainedAngle = (constraints.fixedAngle.angle + GraphUtils.findAngleDeprecated(ref, vertex)) * Math.PI / 180;
11481
11484
  const length = constraints.fixedDistance.dist;
11482
11485
  newCoord[0] = length * Math.cos(constrainedAngle) + distPoint[0];
11483
11486
  newCoord[1] = length * Math.sin(constrainedAngle) + distPoint[1];
@@ -11486,8 +11489,8 @@ _.extend(GraphUtils.Graphie.prototype, {
11486
11489
  } else if (typeof constraints.fixedAngle.angle === "number") {
11487
11490
  const vertex = constraints.fixedAngle.vertex.coord || constraints.fixedAngle.vertex;
11488
11491
  const ref = constraints.fixedAngle.ref.coord || constraints.fixedAngle.ref;
11489
- const constrainedAngle = (constraints.fixedAngle.angle + GraphUtils.findAngle(ref, vertex)) * Math.PI / 180;
11490
- const angle = GraphUtils.findAngle(coord, vertex) * Math.PI / 180;
11492
+ const constrainedAngle = (constraints.fixedAngle.angle + GraphUtils.findAngleDeprecated(ref, vertex)) * Math.PI / 180;
11493
+ const angle = GraphUtils.findAngleDeprecated(coord, vertex) * Math.PI / 180;
11491
11494
  const distance = GraphUtils.getDistance(coord, vertex);
11492
11495
  let length = distance * Math.cos(constrainedAngle - angle);
11493
11496
  length = length < 1.0 ? 1.0 : length;
@@ -11497,7 +11500,7 @@ _.extend(GraphUtils.Graphie.prototype, {
11497
11500
  // distance is constrained
11498
11501
  } else if (typeof constraints.fixedDistance.dist === "number") {
11499
11502
  const distPoint = constraints.fixedDistance.point.coord || constraints.fixedDistance.point;
11500
- let angle = GraphUtils.findAngle(coord, distPoint);
11503
+ let angle = GraphUtils.findAngleDeprecated(coord, distPoint);
11501
11504
  const length = constraints.fixedDistance.dist;
11502
11505
  angle = angle * Math.PI / 180;
11503
11506
  newCoord[0] = length * Math.cos(angle) + distPoint[0];
@@ -13697,7 +13700,7 @@ _.extend(MovableAngle.prototype, {
13697
13700
  _.each([0, 2], function (i) {
13698
13701
  const oldPoint = points[i].coord;
13699
13702
  let newPoint = vector$1.add(oldPoint, delta);
13700
- let angle = GraphUtils.findAngle(newVertex, newPoint);
13703
+ let angle = GraphUtils.findAngleDeprecated(newVertex, newPoint);
13701
13704
  angle *= Math.PI / 180;
13702
13705
  newPoint = graphie.constrainToBoundsOnAngle(newPoint, 10, angle);
13703
13706
  newPoints[i] = newPoint;
@@ -13730,7 +13733,7 @@ _.extend(MovableAngle.prototype, {
13730
13733
  return false;
13731
13734
  }
13732
13735
  if (snap) {
13733
- let angle = GraphUtils.findAngle(newPoint, vertex);
13736
+ let angle = GraphUtils.findAngleDeprecated(newPoint, vertex);
13734
13737
  angle = Math.round((angle - snapOffset) / snap) * snap + snapOffset;
13735
13738
  const distance = GraphUtils.getDistance(newPoint, vertex);
13736
13739
  return vector$1.add(vertex, polar$1(distance, angle));
@@ -13818,7 +13821,7 @@ _.extend(MovableAngle.prototype, {
13818
13821
  * coords when interpreted in a clockwise direction.
13819
13822
  */
13820
13823
  _getClockwiseAngle: function (coords) {
13821
- const rawAngle = GraphUtils.findAngle(
13824
+ const rawAngle = GraphUtils.findAngleDeprecated(
13822
13825
  // The order of these is "weird" to match what a clockwise
13823
13826
  // order is in graphie.labelAngle
13824
13827
  coords[2],
@@ -30672,16 +30675,39 @@ function polar(r, th) {
30672
30675
  th = th * Math.PI / 180;
30673
30676
  return [r[0] * Math.cos(th), r[1] * Math.sin(th)];
30674
30677
  }
30675
- const findAngle = (point1, point2, vertex) => {
30676
- if (vertex === undefined) {
30677
- const x = point1[0] - point2[0];
30678
- const y = point1[1] - point2[1];
30679
- if (!x && !y) {
30680
- return 0;
30681
- }
30682
- return (180 + Math.atan2(-y, -x) * 180 / Math.PI + 360) % 360;
30678
+ // This function calculates the angle between two points and an optional vertex.
30679
+ // If the vertex is not provided, the angle is measured between the two points.
30680
+ // This does not account for reflex angles or clockwise position.
30681
+ const getAngleFromVertex = (point, vertex) => {
30682
+ const x = point[0] - vertex[0];
30683
+ const y = point[1] - vertex[1];
30684
+ if (!x && !y) {
30685
+ return 0;
30683
30686
  }
30684
- return findAngle(point1, vertex) - findAngle(point2, vertex);
30687
+ return (180 + Math.atan2(-y, -x) * 180 / Math.PI + 360) % 360;
30688
+ };
30689
+
30690
+ // This function calculates the clockwise angle between three points,
30691
+ // and is used to generate the labels and equation strings of the
30692
+ // current angle for the interactive graph.
30693
+ const getClockwiseAngle = (coords, allowReflexAngles = false) => {
30694
+ const coordsCopy = [...coords];
30695
+ // The coords are saved as [point1, vertex, point2] in the interactive graph
30696
+ const areClockwise = clockwise$1([coordsCopy[0], coordsCopy[2], coordsCopy[1]]);
30697
+
30698
+ // We may need to reverse the coordinates if we allow
30699
+ // reflex angles and the points are not in clockwise order.
30700
+ const shouldReverseCoords = !areClockwise || allowReflexAngles;
30701
+
30702
+ // Reverse the coordinates accordingly to ensure the angle is calculated correctly
30703
+ const clockwiseCoords = shouldReverseCoords ? coordsCopy.reverse() : coordsCopy;
30704
+
30705
+ // Calculate the angles between the two points and get the difference
30706
+ // between the two angles to get the clockwise angle.
30707
+ const startAngle = getAngleFromVertex(clockwiseCoords[0], clockwiseCoords[1]);
30708
+ const endAngle = getAngleFromVertex(clockwiseCoords[2], clockwiseCoords[1]);
30709
+ const angle = (startAngle + 360 - endAngle) % 360;
30710
+ return angle;
30685
30711
  };
30686
30712
 
30687
30713
  const defaultGraphConfig = {
@@ -33103,8 +33129,8 @@ const Angle = ({
33103
33129
  const clockwiseCoords = shouldReverseCoords ? coords : coords.reverse();
33104
33130
 
33105
33131
  // Calculate the angles between the two points
33106
- const startAngle = findAngle(clockwiseCoords[0], vertex);
33107
- const endAngle = findAngle(clockwiseCoords[1], vertex);
33132
+ const startAngle = getAngleFromVertex(clockwiseCoords[0], vertex);
33133
+ const endAngle = getAngleFromVertex(clockwiseCoords[1], vertex);
33108
33134
  const angle = (startAngle + 360 - endAngle) % 360;
33109
33135
 
33110
33136
  // Check if the angle is reflexive
@@ -34183,7 +34209,9 @@ const MafsGraph = props => {
34183
34209
  analytics.onAnalyticsEvent({
34184
34210
  type: "perseus:interactive-graph-widget:rendered",
34185
34211
  payload: {
34186
- type
34212
+ type,
34213
+ widgetType: "INTERACTIVE_GRAPH",
34214
+ widgetId: "interactive-graph"
34187
34215
  }
34188
34216
  });
34189
34217
  });
@@ -35423,7 +35451,7 @@ function boundAndSnapAngleVertex({
35423
35451
  for (const i of [0, 2]) {
35424
35452
  const oldPoint = coordsCopy[i];
35425
35453
  let newPoint = vec.add(oldPoint, delta);
35426
- let angle = findAngle(newVertex, newPoint);
35454
+ let angle = getAngleFromVertex(newVertex, newPoint);
35427
35455
  angle *= Math.PI / 180;
35428
35456
  newPoint = constrainToBoundsOnAngle(newPoint, angle, range, snapStep);
35429
35457
  newPoints[i] = newPoint;
@@ -35494,7 +35522,7 @@ function boundAndSnapAngleEndPoints(destinationPoint, {
35494
35522
  const vertex = coords[1];
35495
35523
 
35496
35524
  // Gets the angle between the coords and the vertex
35497
- let angle = findAngle(coordsCopy[index], vertex);
35525
+ let angle = getAngleFromVertex(coordsCopy[index], vertex);
35498
35526
 
35499
35527
  // Snap the angle to the nearest multiple of snapDegrees (if provided)
35500
35528
  angle = Math.round((angle - offsetDegrees) / snap) * snap + offsetDegrees;
@@ -35540,8 +35568,8 @@ function boundAndSnapToPolygonAngle(destinationPoint, {
35540
35568
  angles[rel(j)] = Math.round(angles[rel(j)]);
35541
35569
  });
35542
35570
  const getAngle = function getAngle(a, vertex, b) {
35543
- const angle = findAngle(coordsCopy[rel(a)], coordsCopy[rel(b)], coordsCopy[rel(vertex)]);
35544
- return (angle + 360) % 360;
35571
+ const angle = getClockwiseAngle([coordsCopy[rel(a)], coordsCopy[rel(vertex)], coordsCopy[rel(b)]]);
35572
+ return angle;
35545
35573
  };
35546
35574
  const innerAngles = [angles[rel(-1)] - getAngle(-2, -1, 1), angles[rel(1)] - getAngle(-1, 1, 2)];
35547
35575
  innerAngles[2] = 180 - (innerAngles[0] + innerAngles[1]);
@@ -35568,7 +35596,7 @@ function boundAndSnapToPolygonAngle(destinationPoint, {
35568
35596
  const side = Math.sin(innerAngles[1] * Math.PI / 180) / Math.sin(innerAngles[2] * Math.PI / 180) * knownSide;
35569
35597
 
35570
35598
  // Angle at the second vertex of the polygon
35571
- const outerAngle = findAngle(coordsCopy[rel(1)], coordsCopy[rel(-1)]);
35599
+ const outerAngle = getAngleFromVertex(coordsCopy[rel(1)], coordsCopy[rel(-1)]);
35572
35600
 
35573
35601
  // Uses the length of the side of the polygon (radial coordinate)
35574
35602
  // and the angle between the first and second sides of the
@@ -35618,7 +35646,7 @@ function boundAndSnapToSides(destinationPoint, {
35618
35646
  const innerAngle = lawOfCosines(sides[0], sides[2], sides[1]);
35619
35647
 
35620
35648
  // Angle at the second vertex of the polygon
35621
- const outerAngle = findAngle(coordsCopy[rel(1)], coordsCopy[rel(-1)]);
35649
+ const outerAngle = getAngleFromVertex(coordsCopy[rel(1)], coordsCopy[rel(-1)]);
35622
35650
 
35623
35651
  // Returns true if the points form a counter-clockwise turn;
35624
35652
  // a.k.a if the point is on the left or right of the polygon.
@@ -35725,7 +35753,8 @@ const StatefulMafsGraph = /*#__PURE__*/React.forwardRef((props, ref) => {
35725
35753
  const numPoints = graph.type === "point" ? graph.numPoints : null;
35726
35754
  const numSides = graph.type === "polygon" ? graph.numSides : null;
35727
35755
  const snapTo = graph.type === "polygon" ? graph.snapTo : null;
35728
- const showAngles = graph.type === "polygon" ? graph.showAngles : null;
35756
+ const showAngles = graph.type === "polygon" || graph.type === "angle" ? graph.showAngles : null;
35757
+ const allowReflexAngles = graph.type === "angle" ? graph.allowReflexAngles : null;
35729
35758
  const showSides = graph.type === "polygon" ? graph.showSides : null;
35730
35759
  const startCoords = "startCoords" in graph ? graph.startCoords : undefined;
35731
35760
  const originalPropsRef = useRef(props);
@@ -35738,7 +35767,7 @@ const StatefulMafsGraph = /*#__PURE__*/React.forwardRef((props, ref) => {
35738
35767
  if (latestPropsRef.current !== originalPropsRef.current) {
35739
35768
  dispatch(reinitialize(latestPropsRef.current));
35740
35769
  }
35741
- }, [graph.type, numPoints, numSegments, numSides, snapTo, showAngles, showSides, latestPropsRef, startCoords]);
35770
+ }, [graph.type, numPoints, numSegments, numSides, snapTo, showAngles, showSides, latestPropsRef, startCoords, allowReflexAngles]);
35742
35771
 
35743
35772
  // If the graph is static, it always displays the correct answer. This is
35744
35773
  // standard behavior for Perseus widgets (e.g. compare the Radio widget).
@@ -35927,17 +35956,15 @@ function interactiveGraphValidator(userInput, rubric) {
35927
35956
  } else if (userInput.type === "angle" && rubric.correct.type === "angle") {
35928
35957
  const guess = userInput.coords;
35929
35958
  const correct = rubric.correct.coords;
35959
+ const allowReflexAngles = rubric.correct.allowReflexAngles;
35930
35960
  let match;
35931
35961
  if (rubric.correct.match === "congruent") {
35932
35962
  const angles = _.map([guess, correct], function (coords) {
35933
- const angle = GraphUtils.findAngle(
35934
- // @ts-expect-error - TS2532 - Object is possibly 'undefined'.
35935
- coords[2],
35936
- // @ts-expect-error - TS2532 - Object is possibly 'undefined'.
35937
- coords[0],
35938
- // @ts-expect-error - TS2532 - Object is possibly 'undefined'.
35939
- coords[1]);
35940
- return (angle + 360) % 360;
35963
+ if (!coords) {
35964
+ return false;
35965
+ }
35966
+ const angle = getClockwiseAngle(coords, allowReflexAngles);
35967
+ return angle;
35941
35968
  });
35942
35969
  // @ts-expect-error - TS2556 - A spread argument must either have a tuple type or be passed to a rest parameter.
35943
35970
  match = eq$1(...angles);
@@ -36805,7 +36832,7 @@ class LegacyInteractiveGraph extends React.Component {
36805
36832
  angles[rel(j)] = Math.round(angles[rel(j)]);
36806
36833
  });
36807
36834
  const getAngle = function getAngle(a, vertex, b) {
36808
- const angle = GraphUtils.findAngle(coords[rel(a)], coords[rel(b)], coords[rel(vertex)]);
36835
+ const angle = GraphUtils.findAngleDeprecated(coords[rel(a)], coords[rel(b)], coords[rel(vertex)]);
36809
36836
  return (angle + 360) % 360;
36810
36837
  };
36811
36838
  const innerAngles = [angles[rel(-1)] - getAngle(-2, -1, 1), angles[rel(1)] - getAngle(-1, 1, 2)];
@@ -36824,7 +36851,7 @@ class LegacyInteractiveGraph extends React.Component {
36824
36851
 
36825
36852
  // Solve for side by using the law of sines
36826
36853
  const side = Math.sin(innerAngles[1] * Math.PI / 180) / Math.sin(innerAngles[2] * Math.PI / 180) * knownSide;
36827
- const outerAngle = GraphUtils.findAngle(coords[rel(1)], coords[rel(-1)]);
36854
+ const outerAngle = GraphUtils.findAngleDeprecated(coords[rel(1)], coords[rel(-1)]);
36828
36855
  const offset = polar$1(side, outerAngle + (onLeft ? 1 : -1) * innerAngles[0]);
36829
36856
  return (_this$graphie5 = this.graphie) == null ? void 0 : _this$graphie5.addPoints(coords[rel(-1)], offset);
36830
36857
  }
@@ -36848,7 +36875,7 @@ class LegacyInteractiveGraph extends React.Component {
36848
36875
 
36849
36876
  // Solve for angle by using the law of cosines
36850
36877
  const innerAngle = lawOfCosines(sides[0], sides[2], sides[1]);
36851
- const outerAngle = GraphUtils.findAngle(coords[rel(1)], coords[rel(-1)]);
36878
+ const outerAngle = GraphUtils.findAngleDeprecated(coords[rel(1)], coords[rel(-1)]);
36852
36879
  const onLeft = sign(ccw(coords[rel(-1)], coords[rel(1)], coords[i])) === 1;
36853
36880
  const offset = polar$1(sides[0], outerAngle + (onLeft ? 1 : -1) * innerAngle);
36854
36881
  return (_this$graphie6 = this.graphie) == null ? void 0 : _this$graphie6.addPoints(coords[rel(-1)], offset);
@@ -37622,7 +37649,8 @@ class InteractiveGraph extends React.Component {
37622
37649
  throw makeInvalidTypeError("getAngleEquationString", "angle");
37623
37650
  }
37624
37651
  const coords = InteractiveGraph.getAngleCoords(props.graph, props);
37625
- const angle = GraphUtils.findAngle(coords[2], coords[0], coords[1]);
37652
+ const allowReflexAngles = props.graph.allowReflexAngles;
37653
+ const angle = getClockwiseAngle(coords, allowReflexAngles);
37626
37654
  return angle.toFixed(0) + "\u00B0 angle" + " at (" + coords[1].join(", ") + ")";
37627
37655
  }
37628
37656
  static validate(userInput, rubric) {
@@ -44945,7 +44973,7 @@ const init = function init(options) {
44945
44973
 
44946
44974
  // This file is processed by a Rollup plugin (replace) to inject the production
44947
44975
  const libName = "@khanacademy/perseus";
44948
- const libVersion = "36.1.1";
44976
+ const libVersion = "36.1.2";
44949
44977
  addLibraryVersionToPerseusDebug(libName, libVersion);
44950
44978
 
44951
44979
  const apiVersion = {
@@ -48505,5 +48533,5 @@ const EditorJsonify = {
48505
48533
  }
48506
48534
  };
48507
48535
 
48508
- export { ApiOptions, ArticleRenderer, BaseRadio, Categorizer$1 as Categorizer, changeable as Changeable, ClassNames, dependencies as Dependencies, EditorJsonify, Expression, util as GrapherUtil, Grapher$1 as GrapherWidget, HintRenderer, HintsRenderer, InputNumber$1 as InputNumber, InteractiveGraph$1 as InteractiveGraphWidget, ItemExtras, JiptParagraphs, KhanColors, KhanMath, context as LoadingContext, Log, Matrix$1 as MatrixWidget, MultiItems, NumericInput$1 as NumericInput, PerseusExpressionAnswerFormConsidered, PerseusI18nContext, PerseusI18nContextProvider, PerseusMarkdown, Plotter$1 as PlotterWidget, QUESTION_WIDGETS, Radio, Renderer, ref as ServerItemRenderer, sizingUtils as SizingUtils, Table$1 as TableWidget, Util, denylist as WIDGET_PROP_DENYLIST, widgets$1 as Widgets, addWidget, apiVersion, buildEmptyItemTreeForShape, buildMapper, components, constants, contentHasWidgetType, convertWidgetNameToEnum, displaySigFigs, generateTestCategorizerWidget, generateTestExpressionWidget, generateTestInteractiveGraphWidget, generateTestNumericInputWidget, generateTestPerseusItem, generateTestRadioWidget, genericPerseusItemData, getAngleCoords, getAnswerFromUserInput, getAnswersFromWidgets, getCircleCoords, getCorrectAnswerForWidgetId, getImagesWithoutAltData, getLineCoords, getLinearSystemCoords, getPointCoords, getPolygonCoords, getQuadraticCoords, getSegmentCoords, getSinusoidCoords, getValidWidgetIds, getWidgetFromWidgetMap, getWidgetIdsFromContent, getWidgetIdsFromContentByType, getWidgetTypeByWidgetId, getWidgetsFromWidgetMap, getWidgetsMapFromItemData, globalConstants, globalStyles, iconPaths as icons, init, injectWidgets, interactiveSizes$1 as interactiveSizes, isItemRenderableByVersion, isWidgetIdInContent, isWrongAnswerSupported, itemDataVersion, itemToTree, ItemVersion as itemVersion, libVersion, lockedFigureColors, lockedFigureFillStyles, makeSafeUrl, mediaQueries, parsePerseusItem, plotterPlotTypes, preprocessTex, registerAllWidgetsForTesting, shapes, shouldHaveIndividualAnswer, traverse, usePerseusI18n, violatingWidgets, allWidgets as widgets };
48536
+ export { ApiOptions, ArticleRenderer, BaseRadio, Categorizer$1 as Categorizer, changeable as Changeable, ClassNames, dependencies as Dependencies, EditorJsonify, Expression, util as GrapherUtil, Grapher$1 as GrapherWidget, HintRenderer, HintsRenderer, InputNumber$1 as InputNumber, InteractiveGraph$1 as InteractiveGraphWidget, ItemExtras, JiptParagraphs, KhanColors, KhanMath, context as LoadingContext, Log, Matrix$1 as MatrixWidget, MultiItems, NumericInput$1 as NumericInput, PerseusExpressionAnswerFormConsidered, PerseusI18nContext, PerseusI18nContextProvider, PerseusMarkdown, Plotter$1 as PlotterWidget, QUESTION_WIDGETS, Radio, Renderer, ref as ServerItemRenderer, sizingUtils as SizingUtils, Table$1 as TableWidget, Util, denylist as WIDGET_PROP_DENYLIST, widgets$1 as Widgets, addWidget, apiVersion, buildEmptyItemTreeForShape, buildMapper, components, constants, contentHasWidgetType, convertWidgetNameToEnum, displaySigFigs, generateTestCategorizerWidget, generateTestExpressionWidget, generateTestInteractiveGraphWidget, generateTestNumericInputWidget, generateTestPerseusItem, generateTestRadioWidget, genericPerseusItemData, getAngleCoords, getAnswerFromUserInput, getAnswersFromWidgets, getCircleCoords, getClockwiseAngle, getCorrectAnswerForWidgetId, getImagesWithoutAltData, getLineCoords, getLinearSystemCoords, getPointCoords, getPolygonCoords, getQuadraticCoords, getSegmentCoords, getSinusoidCoords, getValidWidgetIds, getWidgetFromWidgetMap, getWidgetIdsFromContent, getWidgetIdsFromContentByType, getWidgetTypeByWidgetId, getWidgetsFromWidgetMap, getWidgetsMapFromItemData, globalConstants, globalStyles, iconPaths as icons, init, injectWidgets, interactiveSizes$1 as interactiveSizes, isItemRenderableByVersion, isWidgetIdInContent, isWrongAnswerSupported, itemDataVersion, itemToTree, ItemVersion as itemVersion, libVersion, lockedFigureColors, lockedFigureFillStyles, makeSafeUrl, mediaQueries, parsePerseusItem, plotterPlotTypes, preprocessTex, registerAllWidgetsForTesting, shapes, shouldHaveIndividualAnswer, traverse, usePerseusI18n, violatingWidgets, allWidgets as widgets };
48509
48537
  //# sourceMappingURL=index.js.map