@khanacademy/perseus-editor 11.0.2 → 11.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/index.js CHANGED
@@ -83,7 +83,7 @@ var arrowCounterClockwise__default = /*#__PURE__*/_interopDefaultLegacy(arrowCou
83
83
 
84
84
  // This file is processed by a Rollup plugin (replace) to inject the production
85
85
  const libName = "@khanacademy/perseus-editor";
86
- const libVersion = "11.0.2";
86
+ const libVersion = "11.1.0";
87
87
  perseusCore.addLibraryVersionToPerseusDebug(libName, libVersion);
88
88
 
89
89
  function _extends() {
@@ -278,13 +278,13 @@ class SectionControlButton extends React__namespace.Component {
278
278
  role: "button",
279
279
  hideDefaultFocusRing: true,
280
280
  "aria-label": title,
281
- style: styles$I.button
281
+ style: styles$J.button
282
282
  }, _ref => {
283
283
  return /*#__PURE__*/React__namespace.createElement(InlineIcon$a, icon);
284
284
  });
285
285
  }
286
286
  }
287
- const styles$I = aphrodite.StyleSheet.create({
287
+ const styles$J = aphrodite.StyleSheet.create({
288
288
  button: {
289
289
  backgroundColor: wonderBlocksTokens.color.gold,
290
290
  margin: 2,
@@ -20789,13 +20789,13 @@ class WidgetSelect extends React__namespace.Component {
20789
20789
  * that collapse a region.
20790
20790
  */
20791
20791
  function ToggleableCaret(props) {
20792
- const iconStyle = props.isExpanded ? styles$H.expanded : styles$H.collapsed;
20792
+ const iconStyle = props.isExpanded ? styles$I.expanded : styles$I.collapsed;
20793
20793
  return /*#__PURE__*/React__namespace.createElement(wonderBlocksIcon.PhosphorIcon, {
20794
20794
  icon: caretRight__default["default"],
20795
20795
  style: iconStyle
20796
20796
  });
20797
20797
  }
20798
- const styles$H = aphrodite.StyleSheet.create({
20798
+ const styles$I = aphrodite.StyleSheet.create({
20799
20799
  collapsed: {
20800
20800
  transition: ".15s"
20801
20801
  },
@@ -20825,16 +20825,16 @@ class TexErrorView extends React__namespace.Component {
20825
20825
  showErrors
20826
20826
  } = this.state;
20827
20827
  return /*#__PURE__*/React__namespace.createElement(wonderBlocksCore.View, {
20828
- style: styles$G.errorContainer
20828
+ style: styles$H.errorContainer
20829
20829
  }, /*#__PURE__*/React__namespace.createElement(wonderBlocksCore.View, {
20830
- style: styles$G.title,
20830
+ style: styles$H.title,
20831
20831
  onClick: this.handleToggleTexErrors
20832
20832
  }, /*#__PURE__*/React__namespace.createElement(ToggleableCaret, {
20833
20833
  isExpanded: showErrors
20834
20834
  }), "\xA0 TeX Errors (", errorList.length, ")"), showErrors && /*#__PURE__*/React__namespace.createElement(wonderBlocksCore.View, {
20835
- style: styles$G.errorExplanation
20835
+ style: styles$H.errorExplanation
20836
20836
  }, "If your math doesn't display correctly, these errors might help you troubleshoot. Message #content-kitchen for help."), showErrors && errorList.map((e, index) => /*#__PURE__*/React__namespace.createElement(wonderBlocksCore.View, {
20837
- style: styles$G.error,
20837
+ style: styles$H.error,
20838
20838
  key: index
20839
20839
  }, /*#__PURE__*/React__namespace.createElement(wonderBlocksCore.View, {
20840
20840
  style: {
@@ -20843,7 +20843,7 @@ class TexErrorView extends React__namespace.Component {
20843
20843
  }, e.math), /*#__PURE__*/React__namespace.createElement(wonderBlocksCore.View, null, e.message))));
20844
20844
  }
20845
20845
  }
20846
- const styles$G = aphrodite.StyleSheet.create({
20846
+ const styles$H = aphrodite.StyleSheet.create({
20847
20847
  title: {
20848
20848
  backgroundColor: "#eee",
20849
20849
  fontSize: "1.25em",
@@ -24593,12 +24593,12 @@ class SimpleButton extends React__namespace.Component {
24593
24593
  ...otherProps
24594
24594
  } = this.props;
24595
24595
  return /*#__PURE__*/React__namespace.createElement("div", _extends({
24596
- className: aphrodite.css(styles$F.baseButton, color === "green" && styles$F.green, color === "orange" && styles$F.orange),
24596
+ className: aphrodite.css(styles$G.baseButton, color === "green" && styles$G.green, color === "orange" && styles$G.orange),
24597
24597
  onClick: onClick
24598
24598
  }, otherProps), children);
24599
24599
  }
24600
24600
  }
24601
- const styles$F = aphrodite.StyleSheet.create({
24601
+ const styles$G = aphrodite.StyleSheet.create({
24602
24602
  baseButton: {
24603
24603
  top: "0",
24604
24604
  fontSize: "11px",
@@ -24811,23 +24811,23 @@ const LeafContainer = _ref2 => {
24811
24811
  } = _ref2;
24812
24812
  const hasPreviewHeading = shape.type === "content" || shape.type === "hint";
24813
24813
  const previewHeading = hasPreviewHeading && /*#__PURE__*/React__namespace.createElement("div", {
24814
- className: aphrodite.css(styles$E.containerHeader)
24814
+ className: aphrodite.css(styles$F.containerHeader)
24815
24815
  }, /*#__PURE__*/React__namespace.createElement(Header, {
24816
24816
  depth: path.length,
24817
- className: aphrodite.css(styles$E.containerTitle)
24817
+ className: aphrodite.css(styles$F.containerTitle)
24818
24818
  }, capitalize(name)));
24819
24819
  return /*#__PURE__*/React__namespace.createElement("div", {
24820
- className: aphrodite.css(styles$E.container)
24820
+ className: aphrodite.css(styles$F.container)
24821
24821
  }, /*#__PURE__*/React__namespace.createElement("span", {
24822
- className: aphrodite.css(styles$E.row, styles$E.rowHeading)
24822
+ className: aphrodite.css(styles$F.row, styles$F.rowHeading)
24823
24823
  }, /*#__PURE__*/React__namespace.createElement("div", {
24824
- className: aphrodite.css(styles$E.columnLeft)
24824
+ className: aphrodite.css(styles$F.columnLeft)
24825
24825
  }, /*#__PURE__*/React__namespace.createElement("div", {
24826
- className: "pod-title " + aphrodite.css(styles$E.containerHeader)
24826
+ className: "pod-title " + aphrodite.css(styles$F.containerHeader)
24827
24827
  }, /*#__PURE__*/React__namespace.createElement("div", {
24828
- className: aphrodite.css(styles$E.containerTitle)
24828
+ className: aphrodite.css(styles$F.containerTitle)
24829
24829
  }, capitalize(name)), controls)), /*#__PURE__*/React__namespace.createElement("div", {
24830
- className: aphrodite.css(styles$E.columnRight)
24830
+ className: aphrodite.css(styles$F.columnRight)
24831
24831
  }, previewHeading)), children);
24832
24832
  };
24833
24833
  const ArrayContainer = props => {
@@ -24840,11 +24840,11 @@ const ArrayContainer = props => {
24840
24840
  actions
24841
24841
  } = props;
24842
24842
  return /*#__PURE__*/React__namespace.createElement("div", {
24843
- className: aphrodite.css(styles$E.container)
24843
+ className: aphrodite.css(styles$F.container)
24844
24844
  }, controls && /*#__PURE__*/React__namespace.createElement("div", {
24845
- className: aphrodite.css(styles$E.columnLeft, styles$E.containerHeader)
24845
+ className: aphrodite.css(styles$F.columnLeft, styles$F.containerHeader)
24846
24846
  }, controls), /*#__PURE__*/React__namespace.createElement("div", null, children), /*#__PURE__*/React__namespace.createElement("div", {
24847
- className: aphrodite.css(styles$E.columnLeft)
24847
+ className: aphrodite.css(styles$F.columnLeft)
24848
24848
  }, /*#__PURE__*/React__namespace.createElement("a", {
24849
24849
  href: "javascript:void 0",
24850
24850
  onClick: () => actions.addArrayElement(path, shape.elementShape)
@@ -24858,28 +24858,28 @@ const ObjectContainer = _ref3 => {
24858
24858
  path
24859
24859
  } = _ref3;
24860
24860
  const headingEditor = /*#__PURE__*/React__namespace.createElement("div", {
24861
- className: aphrodite.css(styles$E.containerHeader)
24861
+ className: aphrodite.css(styles$F.containerHeader)
24862
24862
  }, /*#__PURE__*/React__namespace.createElement(Header, {
24863
24863
  depth: path.length,
24864
- className: aphrodite.css(styles$E.containerTitle)
24864
+ className: aphrodite.css(styles$F.containerTitle)
24865
24865
  }, capitalize(name)), controls);
24866
24866
  const headingPreview = (name || controls) && /*#__PURE__*/React__namespace.createElement("div", {
24867
- className: aphrodite.css(styles$E.containerHeader, styles$E.previewCollectionHeader)
24867
+ className: aphrodite.css(styles$F.containerHeader, styles$F.previewCollectionHeader)
24868
24868
  }, /*#__PURE__*/React__namespace.createElement(Header, {
24869
24869
  depth: path.length,
24870
- className: aphrodite.css(styles$E.containerTitle)
24870
+ className: aphrodite.css(styles$F.containerTitle)
24871
24871
  }, capitalize(name)));
24872
24872
  const hasBothHeadings = headingEditor && headingPreview;
24873
24873
  return /*#__PURE__*/React__namespace.createElement("div", {
24874
- className: aphrodite.css(styles$E.container)
24874
+ className: aphrodite.css(styles$F.container)
24875
24875
  }, hasBothHeadings && /*#__PURE__*/React__namespace.createElement("span", {
24876
- className: aphrodite.css(styles$E.row)
24876
+ className: aphrodite.css(styles$F.row)
24877
24877
  }, /*#__PURE__*/React__namespace.createElement("div", {
24878
- className: aphrodite.css(styles$E.columnLeft)
24878
+ className: aphrodite.css(styles$F.columnLeft)
24879
24879
  }, headingEditor), /*#__PURE__*/React__namespace.createElement("div", {
24880
- className: aphrodite.css(styles$E.columnRight)
24880
+ className: aphrodite.css(styles$F.columnRight)
24881
24881
  }, headingPreview)), /*#__PURE__*/React__namespace.createElement("div", {
24882
- className: aphrodite.css(path.length > 0 && styles$E.contentIndent)
24882
+ className: aphrodite.css(path.length > 0 && styles$F.contentIndent)
24883
24883
  }, children));
24884
24884
  };
24885
24885
 
@@ -24999,11 +24999,11 @@ const ItemNodeContent = withStickiness(props => {
24999
24999
  className: "framework-perseus"
25000
25000
  }, lens(renderers).get(path));
25001
25001
  return /*#__PURE__*/React__namespace.createElement("span", null, /*#__PURE__*/React__namespace.createElement("div", {
25002
- className: aphrodite.css(styles$E.row)
25002
+ className: aphrodite.css(styles$F.row)
25003
25003
  }, /*#__PURE__*/React__namespace.createElement("div", {
25004
- className: aphrodite.css(styles$E.columnLeft)
25004
+ className: aphrodite.css(styles$F.columnLeft)
25005
25005
  }, /*#__PURE__*/React__namespace.createElement("div", {
25006
- className: aphrodite.css(sticky && styles$E.sticky)
25006
+ className: aphrodite.css(sticky && styles$F.sticky)
25007
25007
  },
25008
25008
  /*#__PURE__*/
25009
25009
  // @ts-expect-error - TS2769 - No overload matches this call.
@@ -25011,9 +25011,9 @@ const ItemNodeContent = withStickiness(props => {
25011
25011
  onChange: newVal => actions.mergeValueAtPath(path, newVal),
25012
25012
  apiOptions: apiOptions
25013
25013
  })))), /*#__PURE__*/React__namespace.createElement("div", {
25014
- className: aphrodite.css(styles$E.columnRight)
25014
+ className: aphrodite.css(styles$F.columnRight)
25015
25015
  }, /*#__PURE__*/React__namespace.createElement("div", {
25016
- className: aphrodite.css(sticky && styles$E.sticky)
25016
+ className: aphrodite.css(sticky && styles$F.sticky)
25017
25017
  }, preview))));
25018
25018
  });
25019
25019
  const HintNodeContent = withStickiness(props => {
@@ -25029,13 +25029,13 @@ const HintNodeContent = withStickiness(props => {
25029
25029
  className: "framework-perseus"
25030
25030
  }, lens(renderers).get(path));
25031
25031
  return /*#__PURE__*/React__namespace.createElement("div", {
25032
- className: aphrodite.css(styles$E.row)
25032
+ className: aphrodite.css(styles$F.row)
25033
25033
  }, /*#__PURE__*/React__namespace.createElement("div", {
25034
- className: aphrodite.css(styles$E.columnLeft)
25034
+ className: aphrodite.css(styles$F.columnLeft)
25035
25035
  }, /*#__PURE__*/React__namespace.createElement("div", {
25036
- className: aphrodite.css(sticky && styles$E.sticky)
25036
+ className: aphrodite.css(sticky && styles$F.sticky)
25037
25037
  }, /*#__PURE__*/React__namespace.createElement(HintEditor, _extends({}, data, {
25038
- className: aphrodite.css(styles$E.hintEditor),
25038
+ className: aphrodite.css(styles$F.hintEditor),
25039
25039
  onChange: newVal => actions.mergeValueAtPath(path, newVal),
25040
25040
  apiOptions: apiOptions,
25041
25041
  showTitle: false,
@@ -25050,9 +25050,9 @@ const HintNodeContent = withStickiness(props => {
25050
25050
  isFirst: true,
25051
25051
  isLast: true
25052
25052
  })))), /*#__PURE__*/React__namespace.createElement("div", {
25053
- className: aphrodite.css(styles$E.columnRight)
25053
+ className: aphrodite.css(styles$F.columnRight)
25054
25054
  }, /*#__PURE__*/React__namespace.createElement("div", {
25055
- className: aphrodite.css(sticky && styles$E.sticky)
25055
+ className: aphrodite.css(sticky && styles$F.sticky)
25056
25056
  }, preview)));
25057
25057
  });
25058
25058
  const TagsNodeContent = props => {
@@ -25069,9 +25069,9 @@ const TagsNodeContent = props => {
25069
25069
  return null;
25070
25070
  }
25071
25071
  return /*#__PURE__*/React__namespace.createElement("div", {
25072
- className: aphrodite.css(styles$E.columnLeft)
25072
+ className: aphrodite.css(styles$F.columnLeft)
25073
25073
  }, /*#__PURE__*/React__namespace.createElement("div", {
25074
- className: aphrodite.css(styles$E.tagsEditor)
25074
+ className: aphrodite.css(styles$F.tagsEditor)
25075
25075
  }, /*#__PURE__*/React__namespace.createElement(GroupMetadataEditor, {
25076
25076
  value: data,
25077
25077
  onChange: newVal => actions.setValueAtPath(path, newVal),
@@ -25102,23 +25102,23 @@ const ArrayNodeContent = props => {
25102
25102
  const subpath = path.concat(i);
25103
25103
  const controls = [i > 0 && /*#__PURE__*/React__namespace.createElement("div", {
25104
25104
  key: "moveArrayElementUp",
25105
- className: aphrodite.css(styles$E.control)
25105
+ className: aphrodite.css(styles$F.control)
25106
25106
  }, /*#__PURE__*/React__namespace.createElement(SimpleButton, {
25107
25107
  color: "orange",
25108
25108
  title: "Move up",
25109
25109
  onClick: () => actions.moveArrayElementUp(subpath)
25110
25110
  }, /*#__PURE__*/React__namespace.createElement("div", {
25111
- className: aphrodite.css(styles$E.verticalFlip)
25111
+ className: aphrodite.css(styles$F.verticalFlip)
25112
25112
  }, /*#__PURE__*/React__namespace.createElement(InlineIcon$5, iconChevronDown)))), i < data.length - 1 && /*#__PURE__*/React__namespace.createElement("div", {
25113
25113
  key: "moveArrayElementDown",
25114
- className: aphrodite.css(styles$E.control)
25114
+ className: aphrodite.css(styles$F.control)
25115
25115
  }, /*#__PURE__*/React__namespace.createElement(SimpleButton, {
25116
25116
  color: "orange",
25117
25117
  title: "Move down",
25118
25118
  onClick: () => actions.moveArrayElementDown(subpath)
25119
25119
  }, /*#__PURE__*/React__namespace.createElement(InlineIcon$5, iconChevronDown))), /*#__PURE__*/React__namespace.createElement("div", {
25120
25120
  key: "removeArrayElement",
25121
- className: aphrodite.css(styles$E.control)
25121
+ className: aphrodite.css(styles$F.control)
25122
25122
  }, /*#__PURE__*/React__namespace.createElement(SimpleButton, {
25123
25123
  color: "orange",
25124
25124
  title: "Delete",
@@ -25126,7 +25126,7 @@ const ArrayNodeContent = props => {
25126
25126
  }, /*#__PURE__*/React__namespace.createElement(InlineIcon$5, iconTrash$4)))];
25127
25127
  return /*#__PURE__*/React__namespace.createElement("div", {
25128
25128
  key: i,
25129
- className: aphrodite.css(styles$E.arrayElement, !elementIsLeaf && styles$E.arrayElementAndNotLeaf)
25129
+ className: aphrodite.css(styles$F.arrayElement, !elementIsLeaf && styles$F.arrayElementAndNotLeaf)
25130
25130
  }, /*#__PURE__*/React__namespace.createElement(NodeContainer, _extends({}, otherProps, {
25131
25131
  key: i,
25132
25132
  shape: shape.elementShape,
@@ -25152,7 +25152,7 @@ const ObjectNodeContent = props => {
25152
25152
  // made sense to the shape's author is the order in which we'll iterate :)
25153
25153
  const children = Object.keys(shape.shape).map(subkey => /*#__PURE__*/React__namespace.createElement("div", {
25154
25154
  key: subkey,
25155
- className: aphrodite.css(styles$E.objectElement)
25155
+ className: aphrodite.css(styles$F.objectElement)
25156
25156
  }, /*#__PURE__*/React__namespace.createElement(NodeContainer, _extends({}, otherProps, {
25157
25157
  shape: shape.shape[subkey],
25158
25158
  data: data[subkey],
@@ -25322,7 +25322,7 @@ class MultiRendererEditor extends React__namespace.Component {
25322
25322
  }, this._renderContent());
25323
25323
  }
25324
25324
  }
25325
- const styles$E = aphrodite.StyleSheet.create({
25325
+ const styles$F = aphrodite.StyleSheet.create({
25326
25326
  // This is used in a number of places throughout this file.
25327
25327
  container: {},
25328
25328
  // eslint-disable-next-line react-native/no-unused-styles
@@ -25821,7 +25821,7 @@ class CSProgramEditor extends React__namespace.Component {
25821
25821
 
25822
25822
  /* eslint-disable @khanacademy/ts-no-error-suppressions */
25823
25823
  const {
25824
- TextInput: TextInput$8
25824
+ TextInput: TextInput$9
25825
25825
  } = perseus.components;
25826
25826
  class DefinitionEditor extends React__namespace.Component {
25827
25827
  static propTypes = {
@@ -25855,7 +25855,7 @@ class DefinitionEditor extends React__namespace.Component {
25855
25855
  target: "_blank"
25856
25856
  }, "Definition style guide"), /*#__PURE__*/React__namespace.createElement("div", {
25857
25857
  className: "perseus-widget-row"
25858
- }, /*#__PURE__*/React__namespace.createElement("label", null, "Word to be defined:", " ", /*#__PURE__*/React__namespace.createElement(TextInput$8, {
25858
+ }, /*#__PURE__*/React__namespace.createElement("label", null, "Word to be defined:", " ", /*#__PURE__*/React__namespace.createElement(TextInput$9, {
25859
25859
  value: this.props.togglePrompt
25860
25860
  // @ts-expect-error - TS2554 - Expected 3 arguments, but got 1.
25861
25861
  ,
@@ -26265,7 +26265,7 @@ class ExampleWidgetEditor extends React__namespace.Component {
26265
26265
 
26266
26266
  /* eslint-disable @khanacademy/ts-no-error-suppressions */
26267
26267
  const {
26268
- TextInput: TextInput$7
26268
+ TextInput: TextInput$8
26269
26269
  } = perseus.components;
26270
26270
  const defaultExplanationProps = {
26271
26271
  showPrompt: "Explain",
@@ -26302,14 +26302,14 @@ class ExplanationEditor extends React__namespace.Component {
26302
26302
  className: "perseus-widget-explanation-editor"
26303
26303
  }, /*#__PURE__*/React__namespace.createElement("div", {
26304
26304
  className: "perseus-widget-row"
26305
- }, /*#__PURE__*/React__namespace.createElement("label", null, "Prompt to show explanation:", " ", /*#__PURE__*/React__namespace.createElement(TextInput$7, {
26305
+ }, /*#__PURE__*/React__namespace.createElement("label", null, "Prompt to show explanation:", " ", /*#__PURE__*/React__namespace.createElement(TextInput$8, {
26306
26306
  value: this.props.showPrompt
26307
26307
  // @ts-expect-error - TS2554 - Expected 3 arguments, but got 1.
26308
26308
  ,
26309
26309
  onChange: this.change("showPrompt")
26310
26310
  }))), /*#__PURE__*/React__namespace.createElement("div", {
26311
26311
  className: "perseus-widget-row"
26312
- }, /*#__PURE__*/React__namespace.createElement("label", null, "Prompt to hide explanation:", " ", /*#__PURE__*/React__namespace.createElement(TextInput$7, {
26312
+ }, /*#__PURE__*/React__namespace.createElement("label", null, "Prompt to hide explanation:", " ", /*#__PURE__*/React__namespace.createElement(TextInput$8, {
26313
26313
  value: this.props.hidePrompt
26314
26314
  // @ts-expect-error - TS2554 - Expected 3 arguments, but got 1.
26315
26315
  ,
@@ -26515,7 +26515,8 @@ const SortableItem = createReactClass__default["default"]({
26515
26515
 
26516
26516
  const {
26517
26517
  InfoTip: InfoTip$i,
26518
- PropCheckBox: PropCheckBox$a
26518
+ PropCheckBox: PropCheckBox$a,
26519
+ TextInput: TextInput$7
26519
26520
  } = perseus.components;
26520
26521
 
26521
26522
  // types for iterables
@@ -26635,7 +26636,20 @@ class ExpressionEditor extends React__namespace.Component {
26635
26636
  className: "perseus-widget-expression-editor"
26636
26637
  }, /*#__PURE__*/React__namespace.createElement("h3", {
26637
26638
  className: "expression-editor-h3"
26638
- }, "Global Options"), /*#__PURE__*/React__namespace.createElement("div", null, /*#__PURE__*/React__namespace.createElement(PropCheckBox$a, {
26639
+ }, "Global Options"), /*#__PURE__*/React__namespace.createElement("div", {
26640
+ className: "perseus-widget-row"
26641
+ }, /*#__PURE__*/React__namespace.createElement("label", null, "Visible label:", " ", /*#__PURE__*/React__namespace.createElement(TextInput$7, {
26642
+ value: this.props.visibleLabel,
26643
+ onChange: this.change("visibleLabel")
26644
+ })), /*#__PURE__*/React__namespace.createElement(InfoTip$i, null, /*#__PURE__*/React__namespace.createElement("p", null, "Optional visible text; strongly encouraged to help learners using dictation software, but can be omitted if the surrounding content provides enough context."))), /*#__PURE__*/React__namespace.createElement("div", {
26645
+ className: "perseus-widget-row"
26646
+ }, /*#__PURE__*/React__namespace.createElement("label", null, "Aria label:", " ", /*#__PURE__*/React__namespace.createElement(TextInput$7, {
26647
+ value: this.props.ariaLabel,
26648
+ onChange: this.change("ariaLabel")
26649
+ })), /*#__PURE__*/React__namespace.createElement(InfoTip$i, null, /*#__PURE__*/React__namespace.createElement("p", null, "Label text that's read by screen readers. Highly recommend adding a label here to ensure your exercise is accessible. For more information on writting accessible labels, please see", " ", /*#__PURE__*/React__namespace.createElement("a", {
26650
+ href: "https://www.w3.org/WAI/tips/designing/#ensure-that-form-elements-include-clearly-associated-labels",
26651
+ target: "_blank"
26652
+ }, "this article.")))), /*#__PURE__*/React__namespace.createElement("div", null, /*#__PURE__*/React__namespace.createElement(PropCheckBox$a, {
26639
26653
  times: this.props.times,
26640
26654
  onChange: this.props.onChange,
26641
26655
  labelAlignment: "right",
@@ -26664,7 +26678,7 @@ class ExpressionEditor extends React__namespace.Component {
26664
26678
  // it's a little weird to serialize the react key, but saves some
26665
26679
  // effort reconstructing them when this item is loaded later.
26666
26680
  "key"];
26667
- const serializables = ["answerForms", "buttonSets", "functions", "times"];
26681
+ const serializables = ["answerForms", "buttonSets", "functions", "times", "visibleLabel", "ariaLabel"];
26668
26682
  const answerForms = this.props.answerForms.map(form => {
26669
26683
  return ___default["default"](form).pick(formSerializables);
26670
26684
  });
@@ -26943,10 +26957,10 @@ class GradedGroupEditor extends React__namespace.Component {
26943
26957
  }, /*#__PURE__*/React__namespace.createElement("div", {
26944
26958
  className: "perseus-widget-row"
26945
26959
  }, /*#__PURE__*/React__namespace.createElement("label", {
26946
- className: aphrodite.css(styles$D.title)
26960
+ className: aphrodite.css(styles$E.title)
26947
26961
  }, "Title:", " ", /*#__PURE__*/React__namespace.createElement(TextInput$6, {
26948
26962
  value: this.props.title,
26949
- className: aphrodite.css(styles$D.input)
26963
+ className: aphrodite.css(styles$E.input)
26950
26964
  // @ts-expect-error - TS2554 - Expected 3 arguments, but got 1.
26951
26965
  ,
26952
26966
  onChange: this.change("title")
@@ -26971,7 +26985,7 @@ class GradedGroupEditor extends React__namespace.Component {
26971
26985
  }, /*#__PURE__*/React__namespace.createElement(InlineIcon$3, iconPlus$1), " Add a hint"), this.props.hint && /*#__PURE__*/React__namespace.createElement("div", {
26972
26986
  className: "perseus-hint-editor"
26973
26987
  }, /*#__PURE__*/React__namespace.createElement("div", {
26974
- className: aphrodite.css(styles$D.hintsTitle)
26988
+ className: aphrodite.css(styles$E.hintsTitle)
26975
26989
  }, "Hint"), /*#__PURE__*/React__namespace.createElement(Editor, {
26976
26990
  ref: this.hintEditor,
26977
26991
  content: this.props.hint ? this.props.hint.content : "",
@@ -27003,7 +27017,7 @@ class GradedGroupEditor extends React__namespace.Component {
27003
27017
  };
27004
27018
  };
27005
27019
  }
27006
- const styles$D = aphrodite.StyleSheet.create({
27020
+ const styles$E = aphrodite.StyleSheet.create({
27007
27021
  title: {
27008
27022
  fontSize: 18,
27009
27023
  fontWeight: "bold"
@@ -28374,13 +28388,13 @@ function MathquillInput(props) {
28374
28388
  }
28375
28389
  });
28376
28390
  return /*#__PURE__*/React__namespace.createElement(wonderBlocksCore.View, {
28377
- style: styles$C.outerWrapper
28391
+ style: styles$D.outerWrapper
28378
28392
  }, /*#__PURE__*/React__namespace.createElement("span", {
28379
28393
  ref: mathFieldWrapperRef,
28380
28394
  className: "perseus-math-input mq-editable-field mq-math-mode"
28381
28395
  }));
28382
28396
  }
28383
- const styles$C = aphrodite.StyleSheet.create({
28397
+ const styles$D = aphrodite.StyleSheet.create({
28384
28398
  outerWrapper: {
28385
28399
  display: "inline-block",
28386
28400
  borderStyle: "solid",
@@ -29450,16 +29464,16 @@ const LabeledRow = props => {
29450
29464
  style
29451
29465
  } = props;
29452
29466
  return /*#__PURE__*/React__namespace.createElement("label", {
29453
- className: aphrodite.css(styles$B.label)
29467
+ className: aphrodite.css(styles$C.label)
29454
29468
  }, /*#__PURE__*/React__namespace.createElement(wonderBlocksCore.View, {
29455
- style: [styles$B.row, style]
29469
+ style: [styles$C.row, style]
29456
29470
  }, labelSide === "start" || /*#__PURE__*/React__namespace.createElement(wonderBlocksTypography.LabelSmall, {
29457
- style: styles$B.spaceEnd
29471
+ style: styles$C.spaceEnd
29458
29472
  }, label), children, labelSide === "end" && /*#__PURE__*/React__namespace.createElement(wonderBlocksTypography.LabelSmall, {
29459
- style: styles$B.spaceStart
29473
+ style: styles$C.spaceStart
29460
29474
  }, label)));
29461
29475
  };
29462
- const styles$B = aphrodite.StyleSheet.create({
29476
+ const styles$C = aphrodite.StyleSheet.create({
29463
29477
  label: {
29464
29478
  width: "fit-content"
29465
29479
  },
@@ -29536,11 +29550,11 @@ class Spring extends React__namespace.Component {
29536
29550
  } = this.props;
29537
29551
  return React__namespace.createElement(wonderBlocksCore.View, {
29538
29552
  "aria-hidden": "true",
29539
- style: [styles$A.grow, style]
29553
+ style: [styles$B.grow, style]
29540
29554
  });
29541
29555
  }
29542
29556
  }
29543
- const styles$A = aphrodite.StyleSheet.create({
29557
+ const styles$B = aphrodite.StyleSheet.create({
29544
29558
  grow: {
29545
29559
  flexGrow: 1
29546
29560
  }
@@ -29577,11 +29591,11 @@ function Heading(_ref) {
29577
29591
  onToggle
29578
29592
  } = _ref;
29579
29593
  return /*#__PURE__*/React__namespace.createElement(Clickable__default["default"], {
29580
- style: [styles$z.container, !isCollapsible && styles$z.notClickable],
29594
+ style: [styles$A.container, !isCollapsible && styles$A.notClickable],
29581
29595
  disabled: !isCollapsible,
29582
29596
  onClick: () => isCollapsible && onToggle?.(!isOpen)
29583
29597
  }, () => /*#__PURE__*/React__namespace.createElement(wonderBlocksCore.View, {
29584
- style: styles$z.heading
29598
+ style: styles$A.heading
29585
29599
  }, /*#__PURE__*/React__namespace.createElement(wonderBlocksTypography.LabelLarge, {
29586
29600
  style: {
29587
29601
  fontSize: 14,
@@ -29591,7 +29605,7 @@ function Heading(_ref) {
29591
29605
  isExpanded: isOpen
29592
29606
  })));
29593
29607
  }
29594
- const styles$z = aphrodite.StyleSheet.create({
29608
+ const styles$A = aphrodite.StyleSheet.create({
29595
29609
  container: {
29596
29610
  marginTop: wonderBlocksTokens.spacing.small_12,
29597
29611
  // NOTE(jeremy): This is the inverse of the @editorPadding CSS
@@ -29739,6 +29753,16 @@ function getDefaultGraphStartCoords(graph, range, step) {
29739
29753
  ...graph,
29740
29754
  startCoords: undefined
29741
29755
  }, range, step);
29756
+ case "circle":
29757
+ const startCoords = perseus.getCircleCoords({
29758
+ ...graph,
29759
+ startCoords: undefined
29760
+ });
29761
+ const radius = kmath.vector.length(kmath.vector.subtract(startCoords.radiusPoint, startCoords.center));
29762
+ return {
29763
+ center: startCoords.center,
29764
+ radius
29765
+ };
29742
29766
  default:
29743
29767
  return undefined;
29744
29768
  }
@@ -29758,17 +29782,17 @@ const LockedFigureSelect = props => {
29758
29782
  } = props;
29759
29783
  const figureTypes = props.showM2Features ? ["point", "line", "vector", "ellipse", "polygon"] : ["point", "line"];
29760
29784
  return /*#__PURE__*/React__namespace.createElement(wonderBlocksCore.View, {
29761
- style: styles$y.container
29785
+ style: styles$z.container
29762
29786
  }, /*#__PURE__*/React__namespace.createElement(wonderBlocksDropdown.ActionMenu, {
29763
29787
  menuText: "Add locked figure",
29764
- style: styles$y.addElementSelect
29788
+ style: styles$z.addElementSelect
29765
29789
  }, figureTypes.map(figureType => /*#__PURE__*/React__namespace.createElement(wonderBlocksDropdown.ActionItem, {
29766
29790
  key: `${id}-${figureType}`,
29767
29791
  label: figureType,
29768
29792
  onClick: () => onChange(figureType)
29769
29793
  }))));
29770
29794
  };
29771
- const styles$y = aphrodite.StyleSheet.create({
29795
+ const styles$z = aphrodite.StyleSheet.create({
29772
29796
  container: {
29773
29797
  marginTop: wonderBlocksTokens.spacing.xSmall_8
29774
29798
  },
@@ -29799,19 +29823,19 @@ const AngleInput = props => {
29799
29823
  }
29800
29824
  return /*#__PURE__*/React__namespace.createElement(wonderBlocksTypography.LabelMedium, {
29801
29825
  tag: "label",
29802
- style: styles$x.row
29826
+ style: styles$y.row
29803
29827
  }, "angle (degrees)", /*#__PURE__*/React__namespace.createElement(Strut, {
29804
29828
  size: wonderBlocksTokens.spacing.xxSmall_6
29805
29829
  }), /*#__PURE__*/React__namespace.createElement(wonderBlocksForm.TextField, {
29806
29830
  type: "number",
29807
29831
  value: angleInput,
29808
29832
  onChange: handleAngleChange,
29809
- style: styles$x.textField
29833
+ style: styles$y.textField
29810
29834
  }), /*#__PURE__*/React__namespace.createElement(Strut, {
29811
29835
  size: wonderBlocksTokens.spacing.xxSmall_6
29812
29836
  }));
29813
29837
  };
29814
- const styles$x = aphrodite.StyleSheet.create({
29838
+ const styles$y = aphrodite.StyleSheet.create({
29815
29839
  row: {
29816
29840
  display: "flex",
29817
29841
  flexDirection: "row",
@@ -29860,32 +29884,32 @@ const CoordinatePairInput = props => {
29860
29884
  onChange(newCoords);
29861
29885
  }
29862
29886
  return /*#__PURE__*/React__namespace.createElement(wonderBlocksCore.View, {
29863
- style: [styles$w.row, style]
29887
+ style: [styles$x.row, style]
29864
29888
  }, /*#__PURE__*/React__namespace.createElement(wonderBlocksTypography.LabelMedium, {
29865
29889
  tag: "label",
29866
- style: styles$w.row
29890
+ style: styles$x.row
29867
29891
  }, labels ? labels[0] : "x coord", /*#__PURE__*/React__namespace.createElement(Strut, {
29868
29892
  size: wonderBlocksTokens.spacing.xxSmall_6
29869
29893
  }), /*#__PURE__*/React__namespace.createElement(wonderBlocksForm.TextField, {
29870
29894
  type: "number",
29871
29895
  value: coordState[0],
29872
29896
  onChange: newValue => handleCoordChange(newValue, 0),
29873
- style: [styles$w.textField, error ? styles$w.errorField : undefined]
29897
+ style: [styles$x.textField, error ? styles$x.errorField : undefined]
29874
29898
  })), /*#__PURE__*/React__namespace.createElement(Strut, {
29875
29899
  size: wonderBlocksTokens.spacing.medium_16
29876
29900
  }), /*#__PURE__*/React__namespace.createElement(wonderBlocksTypography.LabelMedium, {
29877
29901
  tag: "label",
29878
- style: styles$w.row
29902
+ style: styles$x.row
29879
29903
  }, labels ? labels[1] : "y coord", /*#__PURE__*/React__namespace.createElement(Strut, {
29880
29904
  size: wonderBlocksTokens.spacing.xxSmall_6
29881
29905
  }), /*#__PURE__*/React__namespace.createElement(wonderBlocksForm.TextField, {
29882
29906
  type: "number",
29883
29907
  value: coordState[1],
29884
29908
  onChange: newValue => handleCoordChange(newValue, 1),
29885
- style: [styles$w.textField, error ? styles$w.errorField : undefined]
29909
+ style: [styles$x.textField, error ? styles$x.errorField : undefined]
29886
29910
  })));
29887
29911
  };
29888
- const styles$w = aphrodite.StyleSheet.create({
29912
+ const styles$x = aphrodite.StyleSheet.create({
29889
29913
  row: {
29890
29914
  display: "flex",
29891
29915
  flexDirection: "row",
@@ -29918,14 +29942,14 @@ const PerseusEditorAccordion = props => {
29918
29942
  }, /*#__PURE__*/React__namespace.createElement(wonderBlocksAccordion.AccordionSection, {
29919
29943
  expanded: expanded,
29920
29944
  onToggle: onToggle,
29921
- style: [styles$v.container, containerStyle],
29922
- headerStyle: styles$v.accordionHeader,
29945
+ style: [styles$w.container, containerStyle],
29946
+ headerStyle: styles$w.accordionHeader,
29923
29947
  header: header
29924
29948
  }, /*#__PURE__*/React__namespace.createElement(wonderBlocksCore.View, {
29925
- style: [styles$v.accordionPanel, panelStyle]
29949
+ style: [styles$w.accordionPanel, panelStyle]
29926
29950
  }, children)));
29927
29951
  };
29928
- const styles$v = aphrodite.StyleSheet.create({
29952
+ const styles$w = aphrodite.StyleSheet.create({
29929
29953
  container: {
29930
29954
  backgroundColor: wonderBlocksTokens.color.fadedBlue8,
29931
29955
  marginTop: wonderBlocksTokens.spacing.xSmall_8
@@ -29956,13 +29980,13 @@ const ColorSwatch = props => {
29956
29980
  "aria-label":
29957
29981
  // Don't include an aria label for decorative circles.
29958
29982
  !decorative ? `${color}, ${filled ? "filled" : "open"}` : undefined,
29959
- style: [styles$u.colorSwatch, {
29983
+ style: [styles$v.colorSwatch, {
29960
29984
  border: `4px solid ${perseus.lockedFigureColors[color]}`,
29961
29985
  backgroundColor: filled ? perseus.lockedFigureColors[color] : wonderBlocksTokens.color.white
29962
29986
  }]
29963
29987
  });
29964
29988
  };
29965
- const styles$u = aphrodite.StyleSheet.create({
29989
+ const styles$v = aphrodite.StyleSheet.create({
29966
29990
  colorSwatch: {
29967
29991
  // Add a white outline so that the color swatch is visible when
29968
29992
  // the dropdown option is highlighted with its blue background.
@@ -29981,10 +30005,10 @@ const ColorSelect = props => {
29981
30005
  onChange
29982
30006
  } = props;
29983
30007
  return /*#__PURE__*/React__namespace.createElement(wonderBlocksCore.View, {
29984
- style: [styles$t.row, style]
30008
+ style: [styles$u.row, style]
29985
30009
  }, /*#__PURE__*/React__namespace.createElement(wonderBlocksTypography.LabelMedium, {
29986
30010
  tag: "label",
29987
- style: styles$t.row
30011
+ style: styles$u.row
29988
30012
  }, "color", /*#__PURE__*/React__namespace.createElement(Strut, {
29989
30013
  size: wonderBlocksTokens.spacing.xxSmall_6
29990
30014
  }), /*#__PURE__*/React__namespace.createElement(wonderBlocksDropdown.SingleSelect, {
@@ -30003,7 +30027,7 @@ const ColorSelect = props => {
30003
30027
  })
30004
30028
  })))));
30005
30029
  };
30006
- const styles$t = aphrodite.StyleSheet.create({
30030
+ const styles$u = aphrodite.StyleSheet.create({
30007
30031
  row: {
30008
30032
  display: "flex",
30009
30033
  flexDirection: "row",
@@ -30019,17 +30043,17 @@ const EllipseSwatch = props => {
30019
30043
  } = props;
30020
30044
  return /*#__PURE__*/React__namespace.createElement(wonderBlocksCore.View, {
30021
30045
  "aria-label": `${color}, stroke ${strokeStyle}, fill ${fillStyle}`,
30022
- style: [styles$s.container, {
30046
+ style: [styles$t.container, {
30023
30047
  border: `4px ${strokeStyle} ${perseus.lockedFigureColors[color]}`
30024
30048
  }]
30025
30049
  }, /*#__PURE__*/React__namespace.createElement(wonderBlocksCore.View, {
30026
- style: [styles$s.innerCircle, {
30050
+ style: [styles$t.innerCircle, {
30027
30051
  backgroundColor: perseus.lockedFigureColors[color],
30028
30052
  opacity: perseus.lockedFigureFillStyles[fillStyle]
30029
30053
  }]
30030
30054
  }));
30031
30055
  };
30032
- const styles$s = aphrodite.StyleSheet.create({
30056
+ const styles$t = aphrodite.StyleSheet.create({
30033
30057
  container: {
30034
30058
  // Add a white outline so that the color swatch is visible when
30035
30059
  // the dropdown option is highlighted with its blue background.
@@ -30060,40 +30084,40 @@ const LockedFigureSettingsActions = props => {
30060
30084
  onRemove
30061
30085
  } = props;
30062
30086
  return /*#__PURE__*/React__namespace.createElement(wonderBlocksCore.View, {
30063
- style: styles$r.container
30087
+ style: styles$s.container
30064
30088
  }, /*#__PURE__*/React__namespace.createElement(Button__default["default"], {
30065
30089
  startIcon: trashIcon__default["default"],
30066
30090
  "aria-label": `Delete locked ${figureType}`,
30067
30091
  onClick: onRemove,
30068
30092
  kind: "tertiary",
30069
- style: styles$r.deleteButton
30093
+ style: styles$s.deleteButton
30070
30094
  }, "Delete"), /*#__PURE__*/React__namespace.createElement(Spring, null), props.showM2Features && /*#__PURE__*/React__namespace.createElement(React__namespace.Fragment, null, /*#__PURE__*/React__namespace.createElement(IconButton__default["default"], {
30071
30095
  icon: caretDoubleUpIcon__default["default"],
30072
30096
  size: "small",
30073
30097
  "aria-label": `Move locked ${figureType} to the back`,
30074
30098
  onClick: () => onMove("back"),
30075
- style: styles$r.iconButton
30099
+ style: styles$s.iconButton
30076
30100
  }), /*#__PURE__*/React__namespace.createElement(IconButton__default["default"], {
30077
30101
  icon: caretUpIcon__default["default"],
30078
30102
  size: "small",
30079
30103
  "aria-label": `Move locked ${figureType} backward`,
30080
30104
  onClick: () => onMove("backward"),
30081
- style: styles$r.iconButton
30105
+ style: styles$s.iconButton
30082
30106
  }), /*#__PURE__*/React__namespace.createElement(IconButton__default["default"], {
30083
30107
  icon: caretDownIcon__default["default"],
30084
30108
  size: "small",
30085
30109
  "aria-label": `Move locked ${figureType} forward`,
30086
30110
  onClick: () => onMove("forward"),
30087
- style: styles$r.iconButton
30111
+ style: styles$s.iconButton
30088
30112
  }), /*#__PURE__*/React__namespace.createElement(IconButton__default["default"], {
30089
30113
  icon: caretDoubleDownIcon__default["default"],
30090
30114
  size: "small",
30091
30115
  "aria-label": `Move locked ${figureType} to the front`,
30092
30116
  onClick: () => onMove("front"),
30093
- style: styles$r.iconButton
30117
+ style: styles$s.iconButton
30094
30118
  })));
30095
30119
  };
30096
- const styles$r = aphrodite.StyleSheet.create({
30120
+ const styles$s = aphrodite.StyleSheet.create({
30097
30121
  container: {
30098
30122
  width: "100%",
30099
30123
  flexDirection: "row",
@@ -30140,7 +30164,7 @@ const LockedEllipseSettings = props => {
30140
30164
  /*#__PURE__*/
30141
30165
  // Summary: Ellipse, center, radius, color (opacity, dashed)
30142
30166
  React__namespace.createElement(wonderBlocksCore.View, {
30143
- style: styles$q.row
30167
+ style: styles$r.row
30144
30168
  }, /*#__PURE__*/React__namespace.createElement(wonderBlocksTypography.LabelLarge, null, `Ellipse (${center[0]}, ${center[1]}), radius ${radius[0]}, ${radius[1]}`), /*#__PURE__*/React__namespace.createElement(Strut, {
30145
30169
  size: wonderBlocksTokens.spacing.xSmall_8
30146
30170
  }), /*#__PURE__*/React__namespace.createElement(EllipseSwatch, {
@@ -30149,19 +30173,19 @@ const LockedEllipseSettings = props => {
30149
30173
  strokeStyle: strokeStyle
30150
30174
  }))
30151
30175
  }, /*#__PURE__*/React__namespace.createElement(wonderBlocksCore.View, {
30152
- style: styles$q.row
30176
+ style: styles$r.row
30153
30177
  }, /*#__PURE__*/React__namespace.createElement(CoordinatePairInput, {
30154
30178
  coord: center,
30155
- style: styles$q.spaceUnder,
30179
+ style: styles$r.spaceUnder,
30156
30180
  onChange: newCoords => onChangeProps({
30157
30181
  center: newCoords
30158
30182
  })
30159
30183
  }), /*#__PURE__*/React__namespace.createElement(wonderBlocksCore.View, {
30160
- style: styles$q.spaceUnder
30184
+ style: styles$r.spaceUnder
30161
30185
  }, /*#__PURE__*/React__namespace.createElement(InfoTip$d, null, "The coordinates for the center of the ellipse."))), /*#__PURE__*/React__namespace.createElement(CoordinatePairInput, {
30162
30186
  coord: radius,
30163
30187
  labels: ["x radius", "y radius"],
30164
- style: styles$q.spaceUnder,
30188
+ style: styles$r.spaceUnder,
30165
30189
  onChange: newCoords => onChangeProps({
30166
30190
  radius: newCoords
30167
30191
  })
@@ -30173,7 +30197,7 @@ const LockedEllipseSettings = props => {
30173
30197
  }), /*#__PURE__*/React__namespace.createElement(Strut, {
30174
30198
  size: wonderBlocksTokens.spacing.xSmall_8
30175
30199
  }), /*#__PURE__*/React__namespace.createElement(wonderBlocksCore.View, {
30176
- style: [styles$q.row, styles$q.spaceUnder]
30200
+ style: [styles$r.row, styles$r.spaceUnder]
30177
30201
  }, /*#__PURE__*/React__namespace.createElement(ColorSelect, {
30178
30202
  selectedValue: color,
30179
30203
  onChange: handleColorChange
@@ -30181,7 +30205,7 @@ const LockedEllipseSettings = props => {
30181
30205
  size: wonderBlocksTokens.spacing.medium_16
30182
30206
  }), /*#__PURE__*/React__namespace.createElement(wonderBlocksTypography.LabelMedium, {
30183
30207
  tag: "label",
30184
- style: styles$q.row
30208
+ style: styles$r.row
30185
30209
  }, "fill", /*#__PURE__*/React__namespace.createElement(Strut, {
30186
30210
  size: wonderBlocksTokens.spacing.xxSmall_6
30187
30211
  }), /*#__PURE__*/React__namespace.createElement(wonderBlocksDropdown.SingleSelect, {
@@ -30198,7 +30222,7 @@ const LockedEllipseSettings = props => {
30198
30222
  label: option
30199
30223
  }))))), /*#__PURE__*/React__namespace.createElement(wonderBlocksTypography.LabelMedium, {
30200
30224
  tag: "label",
30201
- style: styles$q.row
30225
+ style: styles$r.row
30202
30226
  }, "stroke", /*#__PURE__*/React__namespace.createElement(Strut, {
30203
30227
  size: wonderBlocksTokens.spacing.xxSmall_6
30204
30228
  }), /*#__PURE__*/React__namespace.createElement(wonderBlocksDropdown.SingleSelect, {
@@ -30222,7 +30246,7 @@ const LockedEllipseSettings = props => {
30222
30246
  onRemove: onRemove
30223
30247
  }));
30224
30248
  };
30225
- const styles$q = aphrodite.StyleSheet.create({
30249
+ const styles$r = aphrodite.StyleSheet.create({
30226
30250
  row: {
30227
30251
  display: "flex",
30228
30252
  flexDirection: "row",
@@ -30243,7 +30267,7 @@ const LabeledSwitch = props => {
30243
30267
  const ids = wonderBlocksCore.useUniqueIdWithMock();
30244
30268
  const switchId = ids.get("switch");
30245
30269
  return /*#__PURE__*/React__namespace.createElement(wonderBlocksCore.View, {
30246
- style: [styles$p.row, style]
30270
+ style: [styles$q.row, style]
30247
30271
  }, /*#__PURE__*/React__namespace.createElement(Switch__default["default"], {
30248
30272
  id: switchId,
30249
30273
  checked: checked,
@@ -30255,7 +30279,7 @@ const LabeledSwitch = props => {
30255
30279
  htmlFor: switchId
30256
30280
  }, label));
30257
30281
  };
30258
- const styles$p = aphrodite.StyleSheet.create({
30282
+ const styles$q = aphrodite.StyleSheet.create({
30259
30283
  row: {
30260
30284
  flexDirection: "row",
30261
30285
  alignItems: "center"
@@ -30289,13 +30313,13 @@ const DefiningPointSettings = props => {
30289
30313
  return /*#__PURE__*/React__namespace.createElement(PerseusEditorAccordion, {
30290
30314
  expanded: expanded,
30291
30315
  onToggle: onToggle,
30292
- containerStyle: styles$o.container,
30293
- panelStyle: styles$o.accordionPanel,
30316
+ containerStyle: styles$p.container,
30317
+ panelStyle: styles$p.accordionPanel,
30294
30318
  header:
30295
30319
  /*#__PURE__*/
30296
30320
  // Summary: Point, coords, color (filled/open)
30297
30321
  React__namespace.createElement(wonderBlocksCore.View, {
30298
- style: styles$o.row
30322
+ style: styles$p.row
30299
30323
  }, /*#__PURE__*/React__namespace.createElement(wonderBlocksTypography.LabelLarge, null, `${label || "Point"} (${coord[0]}, ${coord[1]})`), /*#__PURE__*/React__namespace.createElement(Strut, {
30300
30324
  size: wonderBlocksTokens.spacing.xSmall_8
30301
30325
  }), showPoint && /*#__PURE__*/React__namespace.createElement(ColorSwatch, {
@@ -30305,7 +30329,7 @@ const DefiningPointSettings = props => {
30305
30329
  }, /*#__PURE__*/React__namespace.createElement(CoordinatePairInput, {
30306
30330
  coord: coord,
30307
30331
  error: !!error,
30308
- style: styles$o.spaceUnder,
30332
+ style: styles$p.spaceUnder,
30309
30333
  onChange: newCoords => {
30310
30334
  onChangeProps({
30311
30335
  coord: newCoords
@@ -30314,12 +30338,12 @@ const DefiningPointSettings = props => {
30314
30338
  }), onTogglePoint && /*#__PURE__*/React__namespace.createElement(LabeledSwitch, {
30315
30339
  label: "show point on graph",
30316
30340
  checked: !!showPoint,
30317
- style: showPoint && styles$o.spaceUnder,
30341
+ style: showPoint && styles$p.spaceUnder,
30318
30342
  onChange: onTogglePoint
30319
30343
  }), showPoint && /*#__PURE__*/React__namespace.createElement(React__namespace.Fragment, null, /*#__PURE__*/React__namespace.createElement(ColorSelect, {
30320
30344
  selectedValue: pointColor,
30321
30345
  onChange: handleColorChange,
30322
- style: styles$o.spaceUnder
30346
+ style: styles$p.spaceUnder
30323
30347
  }), /*#__PURE__*/React__namespace.createElement(LabeledSwitch, {
30324
30348
  label: "open point",
30325
30349
  checked: !filled,
@@ -30330,7 +30354,7 @@ const DefiningPointSettings = props => {
30330
30354
  }
30331
30355
  })));
30332
30356
  };
30333
- const styles$o = aphrodite.StyleSheet.create({
30357
+ const styles$p = aphrodite.StyleSheet.create({
30334
30358
  container: {
30335
30359
  marginTop: wonderBlocksTokens.spacing.xSmall_8,
30336
30360
  marginBottom: 0,
@@ -30357,15 +30381,15 @@ const LineSwatch = props => {
30357
30381
  lineStyle
30358
30382
  } = props;
30359
30383
  return /*#__PURE__*/React__namespace.createElement(wonderBlocksCore.View, {
30360
- style: styles$n.container
30384
+ style: styles$o.container
30361
30385
  }, /*#__PURE__*/React__namespace.createElement(wonderBlocksCore.View, {
30362
30386
  "aria-label": `${color}, ${lineStyle}`,
30363
- style: [styles$n.lineSwatch, {
30387
+ style: [styles$o.lineSwatch, {
30364
30388
  border: `5px ${lineStyle} ${perseus.lockedFigureColors[color]}`
30365
30389
  }]
30366
30390
  }));
30367
30391
  };
30368
- const styles$n = aphrodite.StyleSheet.create({
30392
+ const styles$o = aphrodite.StyleSheet.create({
30369
30393
  container: {
30370
30394
  backgroundColor: wonderBlocksTokens.color.white,
30371
30395
  justifyContent: "center",
@@ -30424,7 +30448,7 @@ const LockedLineSettings = props => {
30424
30448
  expanded: props.expanded,
30425
30449
  onToggle: props.onToggle,
30426
30450
  header: /*#__PURE__*/React__namespace.createElement(wonderBlocksCore.View, {
30427
- style: styles$m.row
30451
+ style: styles$n.row
30428
30452
  }, /*#__PURE__*/React__namespace.createElement(wonderBlocksTypography.LabelLarge, null, lineLabel), /*#__PURE__*/React__namespace.createElement(Strut, {
30429
30453
  size: wonderBlocksTokens.spacing.xSmall_8
30430
30454
  }), /*#__PURE__*/React__namespace.createElement(LineSwatch, {
@@ -30433,7 +30457,7 @@ const LockedLineSettings = props => {
30433
30457
  }))
30434
30458
  }, /*#__PURE__*/React__namespace.createElement(wonderBlocksTypography.LabelMedium, {
30435
30459
  tag: "label",
30436
- style: [styles$m.row, styles$m.spaceUnder]
30460
+ style: [styles$n.row, styles$n.spaceUnder]
30437
30461
  }, "kind", /*#__PURE__*/React__namespace.createElement(Strut, {
30438
30462
  size: wonderBlocksTokens.spacing.xxxSmall_4
30439
30463
  }), /*#__PURE__*/React__namespace.createElement(wonderBlocksDropdown.SingleSelect, {
@@ -30454,7 +30478,7 @@ const LockedLineSettings = props => {
30454
30478
  value: "segment",
30455
30479
  label: "segment"
30456
30480
  }))), /*#__PURE__*/React__namespace.createElement(wonderBlocksCore.View, {
30457
- style: styles$m.row
30481
+ style: styles$n.row
30458
30482
  }, /*#__PURE__*/React__namespace.createElement(ColorSelect, {
30459
30483
  selectedValue: lineColor,
30460
30484
  onChange: handleColorChange
@@ -30462,7 +30486,7 @@ const LockedLineSettings = props => {
30462
30486
  size: wonderBlocksTokens.spacing.small_12
30463
30487
  }), /*#__PURE__*/React__namespace.createElement(wonderBlocksTypography.LabelMedium, {
30464
30488
  tag: "label",
30465
- style: styles$m.row
30489
+ style: styles$n.row
30466
30490
  }, "style", /*#__PURE__*/React__namespace.createElement(Strut, {
30467
30491
  size: wonderBlocksTokens.spacing.xxxSmall_4
30468
30492
  }), /*#__PURE__*/React__namespace.createElement(wonderBlocksDropdown.SingleSelect, {
@@ -30473,7 +30497,7 @@ const LockedLineSettings = props => {
30473
30497
  // Placeholder is required, but never gets used.
30474
30498
  ,
30475
30499
  placeholder: "",
30476
- style: styles$m.selectMarginOffset
30500
+ style: styles$n.selectMarginOffset
30477
30501
  }, /*#__PURE__*/React__namespace.createElement(wonderBlocksDropdown.OptionItem, {
30478
30502
  value: "solid",
30479
30503
  label: "solid"
@@ -30481,7 +30505,7 @@ const LockedLineSettings = props => {
30481
30505
  value: "dashed",
30482
30506
  label: "dashed"
30483
30507
  })))), isInvalid && /*#__PURE__*/React__namespace.createElement(wonderBlocksTypography.LabelMedium, {
30484
- style: styles$m.errorText
30508
+ style: styles$n.errorText
30485
30509
  }, lengthZeroStr), /*#__PURE__*/React__namespace.createElement(DefiningPointSettings, _extends({
30486
30510
  label: "Point 1",
30487
30511
  showPoint: showPoint1,
@@ -30507,7 +30531,7 @@ const LockedLineSettings = props => {
30507
30531
  onRemove: onRemove
30508
30532
  }));
30509
30533
  };
30510
- const styles$m = aphrodite.StyleSheet.create({
30534
+ const styles$n = aphrodite.StyleSheet.create({
30511
30535
  row: {
30512
30536
  display: "flex",
30513
30537
  flexDirection: "row",
@@ -30552,7 +30576,7 @@ const LockedPointSettings = props => {
30552
30576
  /*#__PURE__*/
30553
30577
  // Summary: Point, coords, color (filled/open)
30554
30578
  React__namespace.createElement(wonderBlocksCore.View, {
30555
- style: styles$l.row
30579
+ style: styles$m.row
30556
30580
  }, /*#__PURE__*/React__namespace.createElement(wonderBlocksTypography.LabelLarge, null, `Point (${coord[0]}, ${coord[1]})`), /*#__PURE__*/React__namespace.createElement(Strut, {
30557
30581
  size: wonderBlocksTokens.spacing.xSmall_8
30558
30582
  }), /*#__PURE__*/React__namespace.createElement(ColorSwatch, {
@@ -30561,7 +30585,7 @@ const LockedPointSettings = props => {
30561
30585
  }))
30562
30586
  }, /*#__PURE__*/React__namespace.createElement(CoordinatePairInput, {
30563
30587
  coord: coord,
30564
- style: styles$l.spaceUnder,
30588
+ style: styles$m.spaceUnder,
30565
30589
  onChange: newCoord => {
30566
30590
  onChangeProps({
30567
30591
  coord: newCoord
@@ -30570,7 +30594,7 @@ const LockedPointSettings = props => {
30570
30594
  }), /*#__PURE__*/React__namespace.createElement(ColorSelect, {
30571
30595
  selectedValue: pointColor,
30572
30596
  onChange: handleColorChange,
30573
- style: styles$l.spaceUnder
30597
+ style: styles$m.spaceUnder
30574
30598
  }), /*#__PURE__*/React__namespace.createElement(LabeledSwitch, {
30575
30599
  label: "open point",
30576
30600
  checked: !filled,
@@ -30586,7 +30610,7 @@ const LockedPointSettings = props => {
30586
30610
  onRemove: onRemove
30587
30611
  }));
30588
30612
  };
30589
- const styles$l = aphrodite.StyleSheet.create({
30613
+ const styles$m = aphrodite.StyleSheet.create({
30590
30614
  row: {
30591
30615
  flexDirection: "row",
30592
30616
  alignItems: "center"
@@ -30604,17 +30628,17 @@ const PolygonSwatch = props => {
30604
30628
  } = props;
30605
30629
  return /*#__PURE__*/React__namespace.createElement(wonderBlocksCore.View, {
30606
30630
  "aria-label": `${color}, stroke ${strokeStyle}, fill ${fillStyle}`,
30607
- style: [styles$k.container, {
30631
+ style: [styles$l.container, {
30608
30632
  border: `4px ${strokeStyle} ${perseus.lockedFigureColors[color]}`
30609
30633
  }]
30610
30634
  }, /*#__PURE__*/React__namespace.createElement(wonderBlocksCore.View, {
30611
- style: [styles$k.innerSquare, {
30635
+ style: [styles$l.innerSquare, {
30612
30636
  backgroundColor: perseus.lockedFigureColors[color],
30613
30637
  opacity: perseus.lockedFigureFillStyles[fillStyle]
30614
30638
  }]
30615
30639
  }));
30616
30640
  };
30617
- const styles$k = aphrodite.StyleSheet.create({
30641
+ const styles$l = aphrodite.StyleSheet.create({
30618
30642
  container: {
30619
30643
  // Add a white outline so that the color swatch is visible when
30620
30644
  // the dropdown option is highlighted with its blue background.
@@ -30656,7 +30680,7 @@ const LockedPolygonSettings = props => {
30656
30680
  /*#__PURE__*/
30657
30681
  // Summary: Polygon, number of sides, style swatch
30658
30682
  React__namespace.createElement(wonderBlocksCore.View, {
30659
- style: styles$j.row
30683
+ style: styles$k.row
30660
30684
  }, /*#__PURE__*/React__namespace.createElement(wonderBlocksTypography.LabelLarge, null, `Polygon, ${points.length} sides`), /*#__PURE__*/React__namespace.createElement(Strut, {
30661
30685
  size: wonderBlocksTokens.spacing.xSmall_8
30662
30686
  }), /*#__PURE__*/React__namespace.createElement(PolygonSwatch, {
@@ -30665,7 +30689,7 @@ const LockedPolygonSettings = props => {
30665
30689
  strokeStyle: strokeStyle
30666
30690
  }))
30667
30691
  }, /*#__PURE__*/React__namespace.createElement(wonderBlocksCore.View, {
30668
- style: [styles$j.row, styles$j.spaceUnder]
30692
+ style: [styles$k.row, styles$k.spaceUnder]
30669
30693
  }, /*#__PURE__*/React__namespace.createElement(ColorSelect, {
30670
30694
  selectedValue: color,
30671
30695
  onChange: handleColorChange
@@ -30673,7 +30697,7 @@ const LockedPolygonSettings = props => {
30673
30697
  size: wonderBlocksTokens.spacing.medium_16
30674
30698
  }), /*#__PURE__*/React__namespace.createElement(wonderBlocksTypography.LabelMedium, {
30675
30699
  tag: "label",
30676
- style: styles$j.row
30700
+ style: styles$k.row
30677
30701
  }, "fill", /*#__PURE__*/React__namespace.createElement(Strut, {
30678
30702
  size: wonderBlocksTokens.spacing.xxSmall_6
30679
30703
  }), /*#__PURE__*/React__namespace.createElement(wonderBlocksDropdown.SingleSelect, {
@@ -30690,7 +30714,7 @@ const LockedPolygonSettings = props => {
30690
30714
  label: option
30691
30715
  }))))), /*#__PURE__*/React__namespace.createElement(wonderBlocksTypography.LabelMedium, {
30692
30716
  tag: "label",
30693
- style: [styles$j.row, styles$j.spaceUnder]
30717
+ style: [styles$k.row, styles$k.spaceUnder]
30694
30718
  }, "stroke", /*#__PURE__*/React__namespace.createElement(Strut, {
30695
30719
  size: wonderBlocksTokens.spacing.xxSmall_6
30696
30720
  }), /*#__PURE__*/React__namespace.createElement(wonderBlocksDropdown.SingleSelect, {
@@ -30713,17 +30737,17 @@ const LockedPolygonSettings = props => {
30713
30737
  onChange: newValue => onChangeProps({
30714
30738
  showVertices: newValue
30715
30739
  }),
30716
- style: styles$j.spaceUnder
30740
+ style: styles$k.spaceUnder
30717
30741
  }), /*#__PURE__*/React__namespace.createElement(PerseusEditorAccordion, {
30718
30742
  header: /*#__PURE__*/React__namespace.createElement(wonderBlocksTypography.LabelLarge, null, "Points"),
30719
30743
  expanded: true,
30720
- containerStyle: styles$j.pointAccordionContainer,
30721
- panelStyle: styles$j.pointAccordionPanel
30744
+ containerStyle: styles$k.pointAccordionContainer,
30745
+ panelStyle: styles$k.pointAccordionPanel
30722
30746
  }, points.map((point, index) => {
30723
30747
  const pointLabel = String.fromCharCode(65 + index);
30724
30748
  return /*#__PURE__*/React__namespace.createElement(wonderBlocksCore.View, {
30725
30749
  key: `locked-polygon-point-${point[0]}-${point[1]}-index-${index}`,
30726
- style: [styles$j.row, styles$j.spaceUnder]
30750
+ style: [styles$k.row, styles$k.spaceUnder]
30727
30751
  }, /*#__PURE__*/React__namespace.createElement(wonderBlocksTypography.LabelLarge, null, `${pointLabel}:`), /*#__PURE__*/React__namespace.createElement(Strut, {
30728
30752
  size: wonderBlocksTokens.spacing.medium_16
30729
30753
  }), /*#__PURE__*/React__namespace.createElement(CoordinatePairInput, {
@@ -30751,7 +30775,7 @@ const LockedPolygonSettings = props => {
30751
30775
  points: newPoints
30752
30776
  });
30753
30777
  },
30754
- style: styles$j.icon
30778
+ style: styles$k.icon
30755
30779
  }));
30756
30780
  }), /*#__PURE__*/React__namespace.createElement(Button__default["default"], {
30757
30781
  kind: "tertiary",
@@ -30768,7 +30792,7 @@ const LockedPolygonSettings = props => {
30768
30792
  onRemove: onRemove
30769
30793
  }));
30770
30794
  };
30771
- const styles$j = aphrodite.StyleSheet.create({
30795
+ const styles$k = aphrodite.StyleSheet.create({
30772
30796
  row: {
30773
30797
  display: "flex",
30774
30798
  flexDirection: "row",
@@ -30826,7 +30850,7 @@ const LockedVectorSettings = props => {
30826
30850
  expanded: props.expanded,
30827
30851
  onToggle: props.onToggle,
30828
30852
  header: /*#__PURE__*/React__namespace.createElement(wonderBlocksCore.View, {
30829
- style: styles$i.row
30853
+ style: styles$j.row
30830
30854
  }, /*#__PURE__*/React__namespace.createElement(wonderBlocksTypography.LabelLarge, null, lineLabel), /*#__PURE__*/React__namespace.createElement(Strut, {
30831
30855
  size: wonderBlocksTokens.spacing.xSmall_8
30832
30856
  }), /*#__PURE__*/React__namespace.createElement(LineSwatch, {
@@ -30834,19 +30858,19 @@ const LockedVectorSettings = props => {
30834
30858
  lineStyle: "solid"
30835
30859
  }))
30836
30860
  }, /*#__PURE__*/React__namespace.createElement(wonderBlocksCore.View, {
30837
- style: [styles$i.row, styles$i.spaceUnder]
30861
+ style: [styles$j.row, styles$j.spaceUnder]
30838
30862
  }, /*#__PURE__*/React__namespace.createElement(ColorSelect, {
30839
30863
  selectedValue: lineColor,
30840
30864
  onChange: handleColorChange
30841
30865
  })), isInvalid && /*#__PURE__*/React__namespace.createElement(wonderBlocksTypography.LabelMedium, {
30842
- style: styles$i.errorText
30866
+ style: styles$j.errorText
30843
30867
  }, lengthErrorMessage), /*#__PURE__*/React__namespace.createElement(PerseusEditorAccordion, {
30844
30868
  expanded: true // Initial state is expanded
30845
30869
  ,
30846
- containerStyle: styles$i.container,
30847
- panelStyle: styles$i.accordionPanel,
30870
+ containerStyle: styles$j.container,
30871
+ panelStyle: styles$j.accordionPanel,
30848
30872
  header: /*#__PURE__*/React__namespace.createElement(wonderBlocksCore.View, {
30849
- style: styles$i.row
30873
+ style: styles$j.row
30850
30874
  }, /*#__PURE__*/React__namespace.createElement(wonderBlocksTypography.LabelLarge, null, `Tail (${tail[0]}, ${tail[1]})`))
30851
30875
  }, /*#__PURE__*/React__namespace.createElement(CoordinatePairInput, {
30852
30876
  coord: tail,
@@ -30857,10 +30881,10 @@ const LockedVectorSettings = props => {
30857
30881
  })), /*#__PURE__*/React__namespace.createElement(PerseusEditorAccordion, {
30858
30882
  expanded: true // Initial state is expanded
30859
30883
  ,
30860
- containerStyle: styles$i.container,
30861
- panelStyle: styles$i.accordionPanel,
30884
+ containerStyle: styles$j.container,
30885
+ panelStyle: styles$j.accordionPanel,
30862
30886
  header: /*#__PURE__*/React__namespace.createElement(wonderBlocksCore.View, {
30863
- style: styles$i.row
30887
+ style: styles$j.row
30864
30888
  }, /*#__PURE__*/React__namespace.createElement(wonderBlocksTypography.LabelLarge, null, `Tip (${tip[0]}, ${tip[1]})`))
30865
30889
  }, /*#__PURE__*/React__namespace.createElement(CoordinatePairInput, {
30866
30890
  coord: tip,
@@ -30875,7 +30899,7 @@ const LockedVectorSettings = props => {
30875
30899
  onRemove: onRemove
30876
30900
  }));
30877
30901
  };
30878
- const styles$i = aphrodite.StyleSheet.create({
30902
+ const styles$j = aphrodite.StyleSheet.create({
30879
30903
  accordionPanel: {
30880
30904
  paddingBottom: wonderBlocksTokens.spacing.medium_16
30881
30905
  },
@@ -31052,7 +31076,7 @@ const LockedFiguresSection = props => {
31052
31076
  onRemove: () => removeLockedFigure(index)
31053
31077
  }));
31054
31078
  }), /*#__PURE__*/React__namespace.createElement(wonderBlocksCore.View, {
31055
- style: styles$h.buttonContainer
31079
+ style: styles$i.buttonContainer
31056
31080
  }, /*#__PURE__*/React__namespace.createElement(LockedFigureSelect, {
31057
31081
  showM2Features: props.showM2Features,
31058
31082
  showM2bFeatures: props.showM2bFeatures,
@@ -31063,10 +31087,10 @@ const LockedFiguresSection = props => {
31063
31087
  }), showExpandButton && /*#__PURE__*/React__namespace.createElement(Button__default["default"], {
31064
31088
  kind: "secondary",
31065
31089
  onClick: () => toggleExpanded(allCollapsed),
31066
- style: styles$h.button
31090
+ style: styles$i.button
31067
31091
  }, buttonLabel))));
31068
31092
  };
31069
- const styles$h = aphrodite.StyleSheet.create({
31093
+ const styles$i = aphrodite.StyleSheet.create({
31070
31094
  buttonContainer: {
31071
31095
  flexDirection: "row",
31072
31096
  alignItems: "center"
@@ -31102,7 +31126,7 @@ const GraphPointsCountSelector = _ref => {
31102
31126
  // Never uses placeholder, always has value
31103
31127
  ,
31104
31128
  placeholder: "",
31105
- style: styles$g.singleSelectShort
31129
+ style: styles$h.singleSelectShort
31106
31130
  }, [...[...Array(7).keys()].map(n => /*#__PURE__*/React__namespace.createElement(wonderBlocksDropdown.OptionItem, {
31107
31131
  key: n,
31108
31132
  value: `${n}`,
@@ -31113,7 +31137,7 @@ const GraphPointsCountSelector = _ref => {
31113
31137
  label: "unlimited"
31114
31138
  })]);
31115
31139
  };
31116
- const styles$g = aphrodite.StyleSheet.create({
31140
+ const styles$h = aphrodite.StyleSheet.create({
31117
31141
  singleSelectShort: {
31118
31142
  // Non-standard spacing, but it's the smallest we can go
31119
31143
  // without running into styling issues with the dropdown.
@@ -31126,7 +31150,7 @@ const GraphTypeSelector = props => {
31126
31150
  selectedValue: props.graphType,
31127
31151
  onChange: props.onChange,
31128
31152
  placeholder: "Select a graph type",
31129
- style: styles$f.singleSelectShort
31153
+ style: styles$g.singleSelectShort
31130
31154
  }, /*#__PURE__*/React__namespace.createElement(wonderBlocksDropdown.OptionItem, {
31131
31155
  value: "linear",
31132
31156
  label: "Linear function"
@@ -31159,7 +31183,7 @@ const GraphTypeSelector = props => {
31159
31183
  label: "Angle"
31160
31184
  }));
31161
31185
  };
31162
- const styles$f = aphrodite.StyleSheet.create({
31186
+ const styles$g = aphrodite.StyleSheet.create({
31163
31187
  singleSelectShort: {
31164
31188
  // Non-standard spacing, but it's the smallest we can go
31165
31189
  // without running into styling issues with the dropdown.
@@ -31588,10 +31612,10 @@ class InteractiveGraphSettings extends React__namespace.Component {
31588
31612
  onChange: this.change
31589
31613
  }))), /*#__PURE__*/React__namespace.createElement(LabeledRow, {
31590
31614
  label: "Background image URL:",
31591
- style: styles$e.resetSpaceTop
31615
+ style: styles$f.resetSpaceTop
31592
31616
  }, /*#__PURE__*/React__namespace.createElement("input", {
31593
31617
  type: "text",
31594
- className: aphrodite.css(styles$e.backgroundUrlInput),
31618
+ className: aphrodite.css(styles$f.backgroundUrlInput),
31595
31619
  ref: this.bgUrlRef,
31596
31620
  value: this.state.backgroundImage.url || "",
31597
31621
  onChange: e => {
@@ -31607,14 +31631,14 @@ class InteractiveGraphSettings extends React__namespace.Component {
31607
31631
  onKeyPress: this.changeBackgroundUrl,
31608
31632
  onBlur: this.changeBackgroundUrl
31609
31633
  }), /*#__PURE__*/React__namespace.createElement(InfoTip$c, null, /*#__PURE__*/React__namespace.createElement("p", null, "Create an image in graphie, or use the \"Add image\" function to create a background."))), /*#__PURE__*/React__namespace.createElement(wonderBlocksCore.View, {
31610
- style: styles$e.protractorSection
31634
+ style: styles$f.protractorSection
31611
31635
  }, /*#__PURE__*/React__namespace.createElement(wonderBlocksCore.View, {
31612
- style: styles$e.checkboxRow
31636
+ style: styles$f.checkboxRow
31613
31637
  }, /*#__PURE__*/React__namespace.createElement(PropCheckBox$7, {
31614
31638
  label: "Show protractor",
31615
31639
  showProtractor: this.props.showProtractor,
31616
31640
  onChange: this.change,
31617
- style: styles$e.resetSpaceTop
31641
+ style: styles$f.resetSpaceTop
31618
31642
  })), this.props.showProtractor && /*#__PURE__*/React__namespace.createElement(Banner__default["default"], {
31619
31643
  layout: "floating",
31620
31644
  text: "The protractor is not accessible. Please consider an alternate approach.",
@@ -31622,7 +31646,7 @@ class InteractiveGraphSettings extends React__namespace.Component {
31622
31646
  }))));
31623
31647
  }
31624
31648
  }
31625
- const styles$e = aphrodite.StyleSheet.create({
31649
+ const styles$f = aphrodite.StyleSheet.create({
31626
31650
  resetSpaceTop: {
31627
31651
  marginTop: 0
31628
31652
  },
@@ -31661,14 +31685,14 @@ const SegmentCountSelector = _ref => {
31661
31685
  const num = +newValue;
31662
31686
  onChange(num);
31663
31687
  },
31664
- style: styles$d.singleSelectShort
31688
+ style: styles$e.singleSelectShort
31665
31689
  }, ___default["default"].range(1, 7).map(n => /*#__PURE__*/React__namespace.createElement(wonderBlocksDropdown.OptionItem, {
31666
31690
  key: n,
31667
31691
  value: `${n}`,
31668
31692
  label: `${n} segment${n > 1 ? "s" : ""}`
31669
31693
  })));
31670
31694
  };
31671
- const styles$d = aphrodite.StyleSheet.create({
31695
+ const styles$e = aphrodite.StyleSheet.create({
31672
31696
  singleSelectShort: {
31673
31697
  // Non-standard spacing, but it's the smallest we can go
31674
31698
  // without running into styling issues with the dropdown.
@@ -31676,6 +31700,58 @@ const styles$d = aphrodite.StyleSheet.create({
31676
31700
  }
31677
31701
  });
31678
31702
 
31703
+ const StartCoordsCircle = props => {
31704
+ const {
31705
+ startCoords,
31706
+ onChange
31707
+ } = props;
31708
+ return /*#__PURE__*/React__namespace.createElement(wonderBlocksCore.View, {
31709
+ style: styles$d.tile
31710
+ }, /*#__PURE__*/React__namespace.createElement(wonderBlocksCore.View, {
31711
+ style: styles$d.row
31712
+ }, /*#__PURE__*/React__namespace.createElement(wonderBlocksTypography.LabelLarge, null, "Center:"), /*#__PURE__*/React__namespace.createElement(Strut, {
31713
+ size: wonderBlocksTokens.spacing.small_12
31714
+ }), /*#__PURE__*/React__namespace.createElement(CoordinatePairInput, {
31715
+ coord: startCoords.center,
31716
+ labels: ["x", "y"],
31717
+ onChange: coord => onChange({
31718
+ center: coord,
31719
+ radius: startCoords.radius
31720
+ })
31721
+ })), /*#__PURE__*/React__namespace.createElement(Strut, {
31722
+ size: wonderBlocksTokens.spacing.small_12
31723
+ }), /*#__PURE__*/React__namespace.createElement(wonderBlocksCore.View, {
31724
+ style: styles$d.row
31725
+ }, /*#__PURE__*/React__namespace.createElement(wonderBlocksTypography.LabelLarge, null, "Radius:"), /*#__PURE__*/React__namespace.createElement(Strut, {
31726
+ size: wonderBlocksTokens.spacing.small_12
31727
+ }), /*#__PURE__*/React__namespace.createElement(wonderBlocksForm.TextField, {
31728
+ value: startCoords.radius.toString(),
31729
+ type: "number",
31730
+ onChange: value => {
31731
+ onChange({
31732
+ center: startCoords.center,
31733
+ radius: parseFloat(value)
31734
+ });
31735
+ },
31736
+ style: styles$d.textField
31737
+ })));
31738
+ };
31739
+ const styles$d = aphrodite.StyleSheet.create({
31740
+ tile: {
31741
+ backgroundColor: wonderBlocksTokens.color.fadedBlue8,
31742
+ marginTop: wonderBlocksTokens.spacing.xSmall_8,
31743
+ padding: wonderBlocksTokens.spacing.small_12,
31744
+ borderRadius: wonderBlocksTokens.spacing.xSmall_8
31745
+ },
31746
+ row: {
31747
+ flexDirection: "row",
31748
+ alignItems: "center"
31749
+ },
31750
+ textField: {
31751
+ width: wonderBlocksTokens.spacing.xxxLarge_64
31752
+ }
31753
+ });
31754
+
31679
31755
  const StartCoordsLine = props => {
31680
31756
  const {
31681
31757
  startCoords,
@@ -31785,6 +31861,16 @@ const StartCoordsSettingsInner = props => {
31785
31861
  startCoords: multiLineCoords,
31786
31862
  onChange: onChange
31787
31863
  });
31864
+ case "circle":
31865
+ const circleCoords = perseus.getCircleCoords(props);
31866
+ const radius = kmath.vector.length(kmath.vector.subtract(circleCoords.radiusPoint, circleCoords.center));
31867
+ return /*#__PURE__*/React__namespace.createElement(StartCoordsCircle, {
31868
+ startCoords: {
31869
+ center: circleCoords.center,
31870
+ radius
31871
+ },
31872
+ onChange: onChange
31873
+ });
31788
31874
  default:
31789
31875
  return null;
31790
31876
  }
@@ -32076,7 +32162,7 @@ class InteractiveGraphEditor extends React__namespace.Component {
32076
32162
  }
32077
32163
  });
32078
32164
  }
32079
- })), this.props.graph?.type && this.props.apiOptions.flags?.mafs?.["start-coords-ui"] && /*#__PURE__*/React__namespace.createElement(StartCoordsSettings, _extends({}, this.props.graph, {
32165
+ })), this.props.graph?.type && this.props.apiOptions?.flags?.mafs?.["start-coords-ui"] && /*#__PURE__*/React__namespace.createElement(StartCoordsSettings, _extends({}, this.props.graph, {
32080
32166
  range: this.props.range,
32081
32167
  step: this.props.step,
32082
32168
  onChange: this.changeStartCoords