@khanacademy/perseus-editor 11.4.1 → 11.6.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
@@ -4,7 +4,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var perseusCore = require('@khanacademy/perseus-core');
6
6
  var perseus = require('@khanacademy/perseus');
7
- var React = require('react');
7
+ var React$1 = require('react');
8
8
  var _ = require('underscore');
9
9
  var createReactClass = require('create-react-class');
10
10
  var Clickable = require('@khanacademy/wonder-blocks-clickable');
@@ -13,17 +13,19 @@ var aphrodite = require('aphrodite');
13
13
  var $ = require('jquery');
14
14
  var PropTypes = require('prop-types');
15
15
  var wonderBlocksCore = require('@khanacademy/wonder-blocks-core');
16
+ var Switch = require('@khanacademy/wonder-blocks-switch');
16
17
  var wonderBlocksIcon = require('@khanacademy/wonder-blocks-icon');
17
18
  var caretRight = require('@phosphor-icons/core/bold/caret-right-bold.svg');
18
19
  var classNames = require('classnames');
19
20
  var wonderBlocksForm = require('@khanacademy/wonder-blocks-form');
21
+ var keypadContext = require('@khanacademy/keypad-context');
22
+ var mathInput = require('@khanacademy/math-input');
20
23
  var ReactDOM = require('react-dom');
21
24
  var kmath = require('@khanacademy/kmath');
22
25
  var KAS = require('@khanacademy/kas');
23
26
  var Button = require('@khanacademy/wonder-blocks-button');
24
27
  var wonderBlocksTypography = require('@khanacademy/wonder-blocks-typography');
25
28
  var wonderStuffCore = require('@khanacademy/wonder-stuff-core');
26
- var mathInput = require('@khanacademy/math-input');
27
29
  var wonderBlocksDropdown = require('@khanacademy/wonder-blocks-dropdown');
28
30
  var wonderBlocksAccordion = require('@khanacademy/wonder-blocks-accordion');
29
31
  var IconButton = require('@khanacademy/wonder-blocks-icon-button');
@@ -32,7 +34,10 @@ var caretDoubleUpIcon = require('@phosphor-icons/core/bold/caret-double-up-bold.
32
34
  var caretDownIcon = require('@phosphor-icons/core/bold/caret-down-bold.svg');
33
35
  var caretUpIcon = require('@phosphor-icons/core/bold/caret-up-bold.svg');
34
36
  var trashIcon = require('@phosphor-icons/core/bold/trash-bold.svg');
35
- var Switch = require('@khanacademy/wonder-blocks-switch');
37
+ var arrowFatDown = require('@phosphor-icons/core/regular/arrow-fat-down.svg');
38
+ var arrowFatLeft = require('@phosphor-icons/core/regular/arrow-fat-left.svg');
39
+ var arrowFatRight = require('@phosphor-icons/core/regular/arrow-fat-right.svg');
40
+ var arrowFatUp = require('@phosphor-icons/core/regular/arrow-fat-up.svg');
36
41
  var minusCircle = require('@phosphor-icons/core/regular/minus-circle.svg');
37
42
  var plusCircle = require('@phosphor-icons/core/regular/plus-circle.svg');
38
43
  var Banner = require('@khanacademy/wonder-blocks-banner');
@@ -58,12 +63,13 @@ function _interopNamespace(e) {
58
63
  return Object.freeze(n);
59
64
  }
60
65
 
61
- var React__namespace = /*#__PURE__*/_interopNamespace(React);
66
+ var React__namespace = /*#__PURE__*/_interopNamespace(React$1);
62
67
  var ___default = /*#__PURE__*/_interopDefaultLegacy(_);
63
68
  var createReactClass__default = /*#__PURE__*/_interopDefaultLegacy(createReactClass);
64
69
  var Clickable__default = /*#__PURE__*/_interopDefaultLegacy(Clickable);
65
70
  var $__default = /*#__PURE__*/_interopDefaultLegacy($);
66
71
  var PropTypes__default = /*#__PURE__*/_interopDefaultLegacy(PropTypes);
72
+ var Switch__default = /*#__PURE__*/_interopDefaultLegacy(Switch);
67
73
  var caretRight__default = /*#__PURE__*/_interopDefaultLegacy(caretRight);
68
74
  var classNames__default = /*#__PURE__*/_interopDefaultLegacy(classNames);
69
75
  var ReactDOM__default = /*#__PURE__*/_interopDefaultLegacy(ReactDOM);
@@ -75,7 +81,10 @@ var caretDoubleUpIcon__default = /*#__PURE__*/_interopDefaultLegacy(caretDoubleU
75
81
  var caretDownIcon__default = /*#__PURE__*/_interopDefaultLegacy(caretDownIcon);
76
82
  var caretUpIcon__default = /*#__PURE__*/_interopDefaultLegacy(caretUpIcon);
77
83
  var trashIcon__default = /*#__PURE__*/_interopDefaultLegacy(trashIcon);
78
- var Switch__default = /*#__PURE__*/_interopDefaultLegacy(Switch);
84
+ var arrowFatDown__default = /*#__PURE__*/_interopDefaultLegacy(arrowFatDown);
85
+ var arrowFatLeft__default = /*#__PURE__*/_interopDefaultLegacy(arrowFatLeft);
86
+ var arrowFatRight__default = /*#__PURE__*/_interopDefaultLegacy(arrowFatRight);
87
+ var arrowFatUp__default = /*#__PURE__*/_interopDefaultLegacy(arrowFatUp);
79
88
  var minusCircle__default = /*#__PURE__*/_interopDefaultLegacy(minusCircle);
80
89
  var plusCircle__default = /*#__PURE__*/_interopDefaultLegacy(plusCircle);
81
90
  var Banner__default = /*#__PURE__*/_interopDefaultLegacy(Banner);
@@ -83,7 +92,7 @@ var arrowCounterClockwise__default = /*#__PURE__*/_interopDefaultLegacy(arrowCou
83
92
 
84
93
  // This file is processed by a Rollup plugin (replace) to inject the production
85
94
  const libName = "@khanacademy/perseus-editor";
86
- const libVersion = "11.4.1";
95
+ const libVersion = "11.6.0";
87
96
  perseusCore.addLibraryVersionToPerseusDebug(libName, libVersion);
88
97
 
89
98
  function _extends() {
@@ -278,13 +287,13 @@ class SectionControlButton extends React__namespace.Component {
278
287
  role: "button",
279
288
  hideDefaultFocusRing: true,
280
289
  "aria-label": title,
281
- style: styles$R.button
290
+ style: styles$T.button
282
291
  }, _ref => {
283
292
  return /*#__PURE__*/React__namespace.createElement(InlineIcon$a, icon);
284
293
  });
285
294
  }
286
295
  }
287
- const styles$R = aphrodite.StyleSheet.create({
296
+ const styles$T = aphrodite.StyleSheet.create({
288
297
  button: {
289
298
  backgroundColor: wonderBlocksTokens.color.gold,
290
299
  margin: 2,
@@ -20606,6 +20615,111 @@ const DragTarget = createReactClass__default["default"]({
20606
20615
  }
20607
20616
  });
20608
20617
 
20618
+ const mediaDefaultSpecLargeMarginWidth = wonderBlocksTokens.spacing.large_24;
20619
+ const MEDIA_DEFAULT_SPEC = {
20620
+ small: {
20621
+ query: "(max-width: 767px)",
20622
+ totalColumns: 4,
20623
+ gutterWidth: wonderBlocksTokens.spacing.medium_16,
20624
+ marginWidth: wonderBlocksTokens.spacing.medium_16
20625
+ },
20626
+ medium: {
20627
+ query: "(min-width: 768px) and (max-width: 1023px)",
20628
+ totalColumns: 8,
20629
+ gutterWidth: wonderBlocksTokens.spacing.xLarge_32,
20630
+ marginWidth: wonderBlocksTokens.spacing.large_24
20631
+ },
20632
+ large: {
20633
+ query: "(min-width: 1024px)",
20634
+ totalColumns: 12,
20635
+ gutterWidth: wonderBlocksTokens.spacing.xLarge_32,
20636
+ marginWidth: mediaDefaultSpecLargeMarginWidth,
20637
+ maxWidth: 1120 + mediaDefaultSpecLargeMarginWidth * 2
20638
+ }
20639
+ };
20640
+ ({
20641
+ large: {
20642
+ query: "(min-width: 1px)",
20643
+ totalColumns: 12,
20644
+ gutterWidth: wonderBlocksTokens.spacing.xLarge_32,
20645
+ marginWidth: wonderBlocksTokens.spacing.medium_16
20646
+ }
20647
+ });
20648
+ ({
20649
+ small: {
20650
+ query: "(max-width: 767px)",
20651
+ totalColumns: 4,
20652
+ gutterWidth: wonderBlocksTokens.spacing.medium_16,
20653
+ marginWidth: wonderBlocksTokens.spacing.medium_16
20654
+ },
20655
+ large: {
20656
+ query: "(min-width: 768px)",
20657
+ totalColumns: 12,
20658
+ gutterWidth: wonderBlocksTokens.spacing.xLarge_32,
20659
+ marginWidth: wonderBlocksTokens.spacing.xxLarge_48
20660
+ }
20661
+ });
20662
+
20663
+ const defaultContext = {
20664
+ ssrSize: "large",
20665
+ mediaSpec: MEDIA_DEFAULT_SPEC
20666
+ };
20667
+ const MediaLayoutContext = React__namespace.createContext(defaultContext);
20668
+ MediaLayoutContext.displayName = "MediaLayoutContext";
20669
+
20670
+ class Spring extends React__namespace.Component {
20671
+ render() {
20672
+ const {
20673
+ style
20674
+ } = this.props;
20675
+ return React__namespace.createElement(wonderBlocksCore.View, {
20676
+ "aria-hidden": "true",
20677
+ style: [styles$S.grow, style]
20678
+ });
20679
+ }
20680
+ }
20681
+ const styles$S = aphrodite.StyleSheet.create({
20682
+ grow: {
20683
+ flexGrow: 1
20684
+ }
20685
+ });
20686
+
20687
+ class Strut extends React__namespace.Component {
20688
+ render() {
20689
+ const {
20690
+ size,
20691
+ style
20692
+ } = this.props;
20693
+ return React__namespace.createElement(wonderBlocksCore.View, {
20694
+ "aria-hidden": "true",
20695
+ style: [strutStyle(size), style]
20696
+ });
20697
+ }
20698
+ }
20699
+ const strutStyle = size => {
20700
+ return {
20701
+ width: size,
20702
+ MsFlexBasis: size,
20703
+ MsFlexPreferredSize: size,
20704
+ WebkitFlexBasis: size,
20705
+ flexBasis: size,
20706
+ flexShrink: 0
20707
+ };
20708
+ };
20709
+
20710
+ const Spacing = {
20711
+ xxxxSmall_2: 2,
20712
+ xxxSmall_4: 4,
20713
+ xxSmall_6: 6,
20714
+ xSmall_8: 8,
20715
+ small_12: 12,
20716
+ medium_16: 16,
20717
+ large_24: 24,
20718
+ xLarge_32: 32,
20719
+ xxLarge_48: 48,
20720
+ xxxLarge_64: 64
20721
+ };
20722
+
20609
20723
  const {
20610
20724
  InlineIcon: InlineIcon$9
20611
20725
  } = perseus.components;
@@ -20665,11 +20779,11 @@ class WidgetEditor extends React__namespace.Component {
20665
20779
  };
20666
20780
  this.props.onChange(newWidgetInfo, cb, silent);
20667
20781
  };
20668
- _toggleStatic = e => {
20669
- e.preventDefault();
20670
- const newWidgetInfo = Object.assign({}, this.state.widgetInfo, {
20671
- static: !this.state.widgetInfo.static
20672
- });
20782
+ _setStatic = value => {
20783
+ const newWidgetInfo = {
20784
+ ...this.state.widgetInfo,
20785
+ static: value
20786
+ };
20673
20787
  this.props.onChange(newWidgetInfo);
20674
20788
  };
20675
20789
  _handleAlignmentChange = e => {
@@ -20717,13 +20831,10 @@ class WidgetEditor extends React__namespace.Component {
20717
20831
  className: "perseus-widget-editor-title-id",
20718
20832
  href: "#",
20719
20833
  onClick: this._toggleWidget
20720
- }, this.props.id, this.state.showWidget ? /*#__PURE__*/React__namespace.createElement(InlineIcon$9, iconChevronDown$1) : /*#__PURE__*/React__namespace.createElement(InlineIcon$9, iconChevronRight)), supportsStaticMode && /*#__PURE__*/React__namespace.createElement("input", {
20721
- type: "button"
20722
- // @ts-expect-error - TS2322 - Type '(e: Event) => void' is not assignable to type 'MouseEventHandler<HTMLInputElement>'.
20723
- ,
20724
- onClick: this._toggleStatic,
20725
- className: "simple-button--small",
20726
- value: widgetInfo.static ? "Unset as static" : "Set as static"
20834
+ }, this.props.id, this.state.showWidget ? /*#__PURE__*/React__namespace.createElement(InlineIcon$9, iconChevronDown$1) : /*#__PURE__*/React__namespace.createElement(InlineIcon$9, iconChevronRight)), supportsStaticMode && /*#__PURE__*/React__namespace.createElement(LabeledSwitch$1, {
20835
+ label: "Static",
20836
+ checked: !!widgetInfo.static,
20837
+ onChange: this._setStatic
20727
20838
  }), supportedAlignments.length > 1 && /*#__PURE__*/React__namespace.createElement("select", {
20728
20839
  className: "alignment",
20729
20840
  value: widgetInfo.alignment,
@@ -20746,6 +20857,21 @@ class WidgetEditor extends React__namespace.Component {
20746
20857
  }, widgetInfo.options))));
20747
20858
  }
20748
20859
  }
20860
+ function LabeledSwitch$1(props) {
20861
+ const {
20862
+ label,
20863
+ ...switchProps
20864
+ } = props;
20865
+ const ids = wonderBlocksCore.useUniqueIdWithMock();
20866
+ const id = ids.get("switch");
20867
+ return /*#__PURE__*/React__namespace.createElement(React__namespace.Fragment, null, /*#__PURE__*/React__namespace.createElement("label", {
20868
+ htmlFor: id
20869
+ }, label), /*#__PURE__*/React__namespace.createElement(Strut, {
20870
+ size: Spacing.xxSmall_6
20871
+ }), /*#__PURE__*/React__namespace.createElement(Switch__default["default"], _extends({
20872
+ id: id
20873
+ }, switchProps)));
20874
+ }
20749
20875
 
20750
20876
  class WidgetSelect extends React__namespace.Component {
20751
20877
  shouldComponentUpdate() {
@@ -20789,13 +20915,13 @@ class WidgetSelect extends React__namespace.Component {
20789
20915
  * that collapse a region.
20790
20916
  */
20791
20917
  function ToggleableCaret(props) {
20792
- const iconStyle = props.isExpanded ? styles$Q.expanded : styles$Q.collapsed;
20918
+ const iconStyle = props.isExpanded ? styles$R.expanded : styles$R.collapsed;
20793
20919
  return /*#__PURE__*/React__namespace.createElement(wonderBlocksIcon.PhosphorIcon, {
20794
20920
  icon: caretRight__default["default"],
20795
20921
  style: iconStyle
20796
20922
  });
20797
20923
  }
20798
- const styles$Q = aphrodite.StyleSheet.create({
20924
+ const styles$R = aphrodite.StyleSheet.create({
20799
20925
  collapsed: {
20800
20926
  transition: ".15s"
20801
20927
  },
@@ -20825,16 +20951,16 @@ class TexErrorView extends React__namespace.Component {
20825
20951
  showErrors
20826
20952
  } = this.state;
20827
20953
  return /*#__PURE__*/React__namespace.createElement(wonderBlocksCore.View, {
20828
- style: styles$P.errorContainer
20954
+ style: styles$Q.errorContainer
20829
20955
  }, /*#__PURE__*/React__namespace.createElement(wonderBlocksCore.View, {
20830
- style: styles$P.title,
20956
+ style: styles$Q.title,
20831
20957
  onClick: this.handleToggleTexErrors
20832
20958
  }, /*#__PURE__*/React__namespace.createElement(ToggleableCaret, {
20833
20959
  isExpanded: showErrors
20834
20960
  }), "\xA0 TeX Errors (", errorList.length, ")"), showErrors && /*#__PURE__*/React__namespace.createElement(wonderBlocksCore.View, {
20835
- style: styles$P.errorExplanation
20961
+ style: styles$Q.errorExplanation
20836
20962
  }, "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$P.error,
20963
+ style: styles$Q.error,
20838
20964
  key: index
20839
20965
  }, /*#__PURE__*/React__namespace.createElement(wonderBlocksCore.View, {
20840
20966
  style: {
@@ -20843,7 +20969,7 @@ class TexErrorView extends React__namespace.Component {
20843
20969
  }, e.math), /*#__PURE__*/React__namespace.createElement(wonderBlocksCore.View, null, e.message))));
20844
20970
  }
20845
20971
  }
20846
- const styles$P = aphrodite.StyleSheet.create({
20972
+ const styles$Q = aphrodite.StyleSheet.create({
20847
20973
  title: {
20848
20974
  backgroundColor: "#eee",
20849
20975
  fontSize: "1.25em",
@@ -23920,7 +24046,7 @@ class ItemExtrasEditor extends React__namespace.Component {
23920
24046
  }
23921
24047
  }
23922
24048
  const ItemExtraCheckbox = props => /*#__PURE__*/React__namespace.createElement(wonderBlocksCore.View, {
23923
- style: [styles$O.checkbox, props.indent ? styles$O.indented : undefined]
24049
+ style: [styles$P.checkbox, props.indent ? styles$P.indented : undefined]
23924
24050
  }, /*#__PURE__*/React__namespace.createElement(wonderBlocksForm.Checkbox, {
23925
24051
  label: /*#__PURE__*/React__namespace.createElement(wonderBlocksCore.View, {
23926
24052
  style: {
@@ -23930,7 +24056,7 @@ const ItemExtraCheckbox = props => /*#__PURE__*/React__namespace.createElement(w
23930
24056
  checked: props.checked,
23931
24057
  onChange: newCheckedState => props.onChange(newCheckedState)
23932
24058
  }));
23933
- const styles$O = aphrodite.StyleSheet.create({
24059
+ const styles$P = aphrodite.StyleSheet.create({
23934
24060
  indented: {
23935
24061
  marginInlineStart: wonderBlocksTokens.spacing.large_24
23936
24062
  }
@@ -24357,6 +24483,64 @@ var i18n = {
24357
24483
  findImagesInItemData: findImagesInItemData
24358
24484
  };
24359
24485
 
24486
+ /**
24487
+ * The `ContentPreview` component provides a simple preview system for Perseus
24488
+ * Content. Due to how Persus styles are built, the preview styling matches the
24489
+ * current device based on the viewport width (using `@media` queries for
24490
+ * `min-width` and `max-width`).
24491
+ *
24492
+ * The preview will render the mobile variant (styling and layout) when the
24493
+ * `previewDevice` is phone or tablet. Note that the styling cannot be matched
24494
+ * 100% due to the above `@media` query limitation.
24495
+ */
24496
+ function ContentPreview(_ref) {
24497
+ let {
24498
+ question,
24499
+ apiOptions,
24500
+ seamless,
24501
+ linterContext,
24502
+ legacyPerseusLint,
24503
+ previewDevice,
24504
+ strings
24505
+ } = _ref;
24506
+ const isMobile = previewDevice !== "desktop";
24507
+ const className = isMobile ? "perseus-mobile" : "";
24508
+ return /*#__PURE__*/React.createElement(wonderBlocksCore.View, {
24509
+ className: `framework-perseus ${className}`,
24510
+ style: [styles$O.container, !seamless ? styles$O.gutter : undefined]
24511
+ }, /*#__PURE__*/React.createElement(keypadContext.StatefulKeypadContextProvider, null, /*#__PURE__*/React.createElement(keypadContext.KeypadContext.Consumer, null, _ref2 => {
24512
+ let {
24513
+ setKeypadActive,
24514
+ keypadElement,
24515
+ setKeypadElement
24516
+ } = _ref2;
24517
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(perseus.Renderer, _extends({
24518
+ strings: strings,
24519
+ apiOptions: {
24520
+ ...apiOptions,
24521
+ isMobile
24522
+ },
24523
+ keypadElement: keypadElement,
24524
+ linterContext: linterContext,
24525
+ legacyPerseusLint: legacyPerseusLint
24526
+ }, question)), /*#__PURE__*/React.createElement(mathInput.MobileKeypad, {
24527
+ onAnalyticsEvent: () => Promise.resolve(),
24528
+ onDismiss: () => setKeypadActive(false),
24529
+ onElementMounted: setKeypadElement
24530
+ }));
24531
+ })));
24532
+ }
24533
+ const styles$O = aphrodite.StyleSheet.create({
24534
+ container: {
24535
+ padding: wonderBlocksTokens.spacing.xxxSmall_4,
24536
+ containerType: "inline-size",
24537
+ containerName: "perseus-root"
24538
+ },
24539
+ gutter: {
24540
+ marginRight: perseus.constants.lintGutterWidth
24541
+ }
24542
+ });
24543
+
24360
24544
  var isObject = function (obj) {
24361
24545
  return obj === Object(obj);
24362
24546
  };
@@ -26346,98 +26530,6 @@ class ExplanationEditor extends React__namespace.Component {
26346
26530
  }
26347
26531
  }
26348
26532
 
26349
- const mediaDefaultSpecLargeMarginWidth = wonderBlocksTokens.spacing.large_24;
26350
- const MEDIA_DEFAULT_SPEC = {
26351
- small: {
26352
- query: "(max-width: 767px)",
26353
- totalColumns: 4,
26354
- gutterWidth: wonderBlocksTokens.spacing.medium_16,
26355
- marginWidth: wonderBlocksTokens.spacing.medium_16
26356
- },
26357
- medium: {
26358
- query: "(min-width: 768px) and (max-width: 1023px)",
26359
- totalColumns: 8,
26360
- gutterWidth: wonderBlocksTokens.spacing.xLarge_32,
26361
- marginWidth: wonderBlocksTokens.spacing.large_24
26362
- },
26363
- large: {
26364
- query: "(min-width: 1024px)",
26365
- totalColumns: 12,
26366
- gutterWidth: wonderBlocksTokens.spacing.xLarge_32,
26367
- marginWidth: mediaDefaultSpecLargeMarginWidth,
26368
- maxWidth: 1120 + mediaDefaultSpecLargeMarginWidth * 2
26369
- }
26370
- };
26371
- ({
26372
- large: {
26373
- query: "(min-width: 1px)",
26374
- totalColumns: 12,
26375
- gutterWidth: wonderBlocksTokens.spacing.xLarge_32,
26376
- marginWidth: wonderBlocksTokens.spacing.medium_16
26377
- }
26378
- });
26379
- ({
26380
- small: {
26381
- query: "(max-width: 767px)",
26382
- totalColumns: 4,
26383
- gutterWidth: wonderBlocksTokens.spacing.medium_16,
26384
- marginWidth: wonderBlocksTokens.spacing.medium_16
26385
- },
26386
- large: {
26387
- query: "(min-width: 768px)",
26388
- totalColumns: 12,
26389
- gutterWidth: wonderBlocksTokens.spacing.xLarge_32,
26390
- marginWidth: wonderBlocksTokens.spacing.xxLarge_48
26391
- }
26392
- });
26393
-
26394
- const defaultContext = {
26395
- ssrSize: "large",
26396
- mediaSpec: MEDIA_DEFAULT_SPEC
26397
- };
26398
- const MediaLayoutContext = React__namespace.createContext(defaultContext);
26399
- MediaLayoutContext.displayName = "MediaLayoutContext";
26400
-
26401
- class Spring extends React__namespace.Component {
26402
- render() {
26403
- const {
26404
- style
26405
- } = this.props;
26406
- return React__namespace.createElement(wonderBlocksCore.View, {
26407
- "aria-hidden": "true",
26408
- style: [styles$L.grow, style]
26409
- });
26410
- }
26411
- }
26412
- const styles$L = aphrodite.StyleSheet.create({
26413
- grow: {
26414
- flexGrow: 1
26415
- }
26416
- });
26417
-
26418
- class Strut extends React__namespace.Component {
26419
- render() {
26420
- const {
26421
- size,
26422
- style
26423
- } = this.props;
26424
- return React__namespace.createElement(wonderBlocksCore.View, {
26425
- "aria-hidden": "true",
26426
- style: [strutStyle(size), style]
26427
- });
26428
- }
26429
- }
26430
- const strutStyle = size => {
26431
- return {
26432
- width: size,
26433
- MsFlexBasis: size,
26434
- MsFlexPreferredSize: size,
26435
- WebkitFlexBasis: size,
26436
- flexBasis: size,
26437
- flexShrink: 0
26438
- };
26439
- };
26440
-
26441
26533
  const PT = PropTypes__default["default"];
26442
26534
 
26443
26535
  /**
@@ -26611,7 +26703,7 @@ const SortableItem = createReactClass__default["default"]({
26611
26703
  }
26612
26704
  return /*#__PURE__*/React__namespace.createElement("li", {
26613
26705
  draggable: this.props.draggable,
26614
- className: [dragState, aphrodite.css(styles$K.sortableListItem)].join(" "),
26706
+ className: [dragState, aphrodite.css(styles$L.sortableListItem)].join(" "),
26615
26707
  onDragStart: this.handleDragStart,
26616
26708
  onDrop: this.handleDrop,
26617
26709
  onDragEnter: this.handleDragEnter,
@@ -26619,7 +26711,7 @@ const SortableItem = createReactClass__default["default"]({
26619
26711
  }, this.props.component);
26620
26712
  }
26621
26713
  });
26622
- const styles$K = aphrodite.StyleSheet.create({
26714
+ const styles$L = aphrodite.StyleSheet.create({
26623
26715
  sortableListItem: {
26624
26716
  margin: "5px 0"
26625
26717
  }
@@ -26739,13 +26831,13 @@ class ExpressionEditor extends React__namespace.Component {
26739
26831
  onChange: this.handleToggleDiv
26740
26832
  }));
26741
26833
  return /*#__PURE__*/React__namespace.createElement("div", null, /*#__PURE__*/React__namespace.createElement(wonderBlocksTypography.HeadingSmall, null, "Global Options"), /*#__PURE__*/React__namespace.createElement("div", {
26742
- className: aphrodite.css(styles$J.paddedY)
26834
+ className: aphrodite.css(styles$K.paddedY)
26743
26835
  }, /*#__PURE__*/React__namespace.createElement(wonderBlocksForm.LabeledTextField, {
26744
26836
  label: "Visible label",
26745
26837
  value: this.props.visibleLabel || "",
26746
26838
  onChange: this.change("visibleLabel")
26747
26839
  }), /*#__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", {
26748
- className: aphrodite.css(styles$J.paddedY)
26840
+ className: aphrodite.css(styles$K.paddedY)
26749
26841
  }, /*#__PURE__*/React__namespace.createElement(wonderBlocksForm.LabeledTextField, {
26750
26842
  label: "Aria label",
26751
26843
  value: this.props.ariaLabel || "",
@@ -26754,13 +26846,13 @@ class ExpressionEditor extends React__namespace.Component {
26754
26846
  href: "https://www.w3.org/WAI/tips/designing/#ensure-that-form-elements-include-clearly-associated-labels",
26755
26847
  target: "_blank"
26756
26848
  }, "this article.")))), /*#__PURE__*/React__namespace.createElement("div", {
26757
- className: aphrodite.css(styles$J.paddedY)
26849
+ className: aphrodite.css(styles$K.paddedY)
26758
26850
  }, /*#__PURE__*/React__namespace.createElement(wonderBlocksForm.LabeledTextField, {
26759
26851
  label: "Function variables",
26760
26852
  value: this.state.functionsInternal,
26761
26853
  onChange: this.handleFunctions
26762
26854
  }), /*#__PURE__*/React__namespace.createElement(InfoTip$i, null, /*#__PURE__*/React__namespace.createElement("p", null, "Single-letter variables listed here will be interpreted as functions. This let us know that f(x) means \"f of x\" and not \"f times x\"."))), /*#__PURE__*/React__namespace.createElement("div", {
26763
- className: aphrodite.css(styles$J.paddedY)
26855
+ className: aphrodite.css(styles$K.paddedY)
26764
26856
  }, /*#__PURE__*/React__namespace.createElement(wonderBlocksForm.Checkbox, {
26765
26857
  label: "Use \xD7 instead of \u22C5 for multiplication",
26766
26858
  checked: this.props.times,
@@ -26770,7 +26862,7 @@ class ExpressionEditor extends React__namespace.Component {
26770
26862
  });
26771
26863
  }
26772
26864
  }), /*#__PURE__*/React__namespace.createElement(InfoTip$i, null, /*#__PURE__*/React__namespace.createElement("p", null, "For pre-algebra problems this option displays multiplication as \\times instead of \\cdot in both the rendered output and the acceptable formats examples."))), /*#__PURE__*/React__namespace.createElement("div", {
26773
- className: aphrodite.css(styles$J.paddedY)
26865
+ className: aphrodite.css(styles$K.paddedY)
26774
26866
  }, /*#__PURE__*/React__namespace.createElement(wonderBlocksTypography.HeadingXSmall, null, "Button Sets"), buttonSetChoices), /*#__PURE__*/React__namespace.createElement(wonderBlocksTypography.HeadingSmall, null, "Answers"), /*#__PURE__*/React__namespace.createElement("p", {
26775
26867
  style: {
26776
26868
  margin: "4px 0"
@@ -26958,18 +27050,18 @@ class AnswerOption extends React__namespace.Component {
26958
27050
  color: "destructive",
26959
27051
  light: true
26960
27052
  }, "Delete");
26961
- const answerStatusCss = aphrodite.css(styles$J.answerStatus, this.props.considered === "wrong" && styles$J.answerStatusWrong, this.props.considered === "correct" && styles$J.answerStatusCorrect, this.props.considered === "ungraded" && styles$J.answerStatusUngraded);
27053
+ const answerStatusCss = aphrodite.css(styles$K.answerStatus, this.props.considered === "wrong" && styles$K.answerStatusWrong, this.props.considered === "correct" && styles$K.answerStatusCorrect, this.props.considered === "ungraded" && styles$K.answerStatusUngraded);
26962
27054
  return /*#__PURE__*/React__namespace.createElement("div", {
26963
- className: aphrodite.css(styles$J.answerOption)
27055
+ className: aphrodite.css(styles$K.answerOption)
26964
27056
  }, /*#__PURE__*/React__namespace.createElement("div", {
26965
- className: aphrodite.css(styles$J.answerHandle)
27057
+ className: aphrodite.css(styles$K.answerHandle)
26966
27058
  }), /*#__PURE__*/React__namespace.createElement("div", {
26967
- className: aphrodite.css(styles$J.answerBody)
27059
+ className: aphrodite.css(styles$K.answerBody)
26968
27060
  }, /*#__PURE__*/React__namespace.createElement("div", null, /*#__PURE__*/React__namespace.createElement("button", {
26969
27061
  onClick: this.toggleConsidered,
26970
27062
  className: answerStatusCss
26971
27063
  }, this.props.considered), /*#__PURE__*/React__namespace.createElement("div", null, /*#__PURE__*/React__namespace.createElement(perseus.Expression, this.props.expressionProps))), /*#__PURE__*/React__namespace.createElement("div", {
26972
- className: aphrodite.css(styles$J.paddedY, styles$J.paddedX)
27064
+ className: aphrodite.css(styles$K.paddedY, styles$K.paddedX)
26973
27065
  }, /*#__PURE__*/React__namespace.createElement(wonderBlocksForm.Checkbox, {
26974
27066
  label: "Answer expression must have the same form.",
26975
27067
  checked: this.props.form,
@@ -26979,7 +27071,7 @@ class AnswerOption extends React__namespace.Component {
26979
27071
  });
26980
27072
  }
26981
27073
  }), /*#__PURE__*/React__namespace.createElement(InfoTip$i, null, /*#__PURE__*/React__namespace.createElement("p", null, "The student's answer must be in the same form. Commutativity and excess negative signs are ignored."))), /*#__PURE__*/React__namespace.createElement("div", {
26982
- className: aphrodite.css(styles$J.paddedY, styles$J.paddedX)
27074
+ className: aphrodite.css(styles$K.paddedY, styles$K.paddedX)
26983
27075
  }, /*#__PURE__*/React__namespace.createElement(wonderBlocksForm.Checkbox, {
26984
27076
  label: "Answer expression must be fully expanded and simplified.",
26985
27077
  checked: this.props.simplify,
@@ -26989,7 +27081,7 @@ class AnswerOption extends React__namespace.Component {
26989
27081
  });
26990
27082
  }
26991
27083
  }), /*#__PURE__*/React__namespace.createElement(InfoTip$i, null, /*#__PURE__*/React__namespace.createElement("p", null, "The student's answer must be fully expanded and simplified. Answering this equation (x^2+2x+1) with this factored equation (x+1)^2 will render this response \"Your answer is not fully expanded and simplified.\""))), /*#__PURE__*/React__namespace.createElement("div", {
26992
- className: aphrodite.css(styles$J.buttonRow, styles$J.paddedY)
27084
+ className: aphrodite.css(styles$K.buttonRow, styles$K.paddedY)
26993
27085
  }, removeButton)));
26994
27086
  }
26995
27087
  handleImSure = () => {
@@ -27012,7 +27104,7 @@ class AnswerOption extends React__namespace.Component {
27012
27104
  });
27013
27105
  };
27014
27106
  }
27015
- const styles$J = aphrodite.StyleSheet.create({
27107
+ const styles$K = aphrodite.StyleSheet.create({
27016
27108
  paddedX: {
27017
27109
  paddingLeft: wonderBlocksTokens.spacing.xSmall_8,
27018
27110
  paddingRight: wonderBlocksTokens.spacing.xSmall_8
@@ -27114,10 +27206,10 @@ class GradedGroupEditor extends React__namespace.Component {
27114
27206
  }, /*#__PURE__*/React__namespace.createElement("div", {
27115
27207
  className: "perseus-widget-row"
27116
27208
  }, /*#__PURE__*/React__namespace.createElement("label", {
27117
- className: aphrodite.css(styles$I.title)
27209
+ className: aphrodite.css(styles$J.title)
27118
27210
  }, "Title:", " ", /*#__PURE__*/React__namespace.createElement(TextInput$6, {
27119
27211
  value: this.props.title,
27120
- className: aphrodite.css(styles$I.input)
27212
+ className: aphrodite.css(styles$J.input)
27121
27213
  // @ts-expect-error - TS2554 - Expected 3 arguments, but got 1.
27122
27214
  ,
27123
27215
  onChange: this.change("title")
@@ -27142,7 +27234,7 @@ class GradedGroupEditor extends React__namespace.Component {
27142
27234
  }, /*#__PURE__*/React__namespace.createElement(InlineIcon$3, iconPlus$1), " Add a hint"), this.props.hint && /*#__PURE__*/React__namespace.createElement("div", {
27143
27235
  className: "perseus-hint-editor"
27144
27236
  }, /*#__PURE__*/React__namespace.createElement("div", {
27145
- className: aphrodite.css(styles$I.hintsTitle)
27237
+ className: aphrodite.css(styles$J.hintsTitle)
27146
27238
  }, "Hint"), /*#__PURE__*/React__namespace.createElement(Editor, {
27147
27239
  ref: this.hintEditor,
27148
27240
  content: this.props.hint ? this.props.hint.content : "",
@@ -27174,7 +27266,7 @@ class GradedGroupEditor extends React__namespace.Component {
27174
27266
  };
27175
27267
  };
27176
27268
  }
27177
- const styles$I = aphrodite.StyleSheet.create({
27269
+ const styles$J = aphrodite.StyleSheet.create({
27178
27270
  title: {
27179
27271
  fontSize: 18,
27180
27272
  fontWeight: "bold"
@@ -28521,13 +28613,13 @@ class InputNumberEditor extends React__namespace.Component {
28521
28613
  * it's just the input itself for use writing TeX.
28522
28614
  */
28523
28615
  function MathquillInput(props) {
28524
- const mathFieldWrapperRef = React.useRef(null);
28525
- const mathFieldInstance = React.useRef();
28616
+ const mathFieldWrapperRef = React$1.useRef(null);
28617
+ const mathFieldInstance = React$1.useRef();
28526
28618
  const {
28527
28619
  locale,
28528
28620
  strings
28529
28621
  } = mathInput.useMathInputI18n();
28530
- React.useEffect(() => {
28622
+ React$1.useEffect(() => {
28531
28623
  // If we have the mount for the input, but not the input
28532
28624
  // make a new Mathquill input
28533
28625
  if (mathFieldWrapperRef.current && !mathFieldInstance.current) {
@@ -28561,13 +28653,13 @@ function MathquillInput(props) {
28561
28653
  }
28562
28654
  });
28563
28655
  return /*#__PURE__*/React__namespace.createElement(wonderBlocksCore.View, {
28564
- style: styles$H.outerWrapper
28656
+ style: styles$I.outerWrapper
28565
28657
  }, /*#__PURE__*/React__namespace.createElement("span", {
28566
28658
  ref: mathFieldWrapperRef,
28567
28659
  className: "perseus-math-input mq-editable-field mq-math-mode"
28568
28660
  }));
28569
28661
  }
28570
- const styles$H = aphrodite.StyleSheet.create({
28662
+ const styles$I = aphrodite.StyleSheet.create({
28571
28663
  outerWrapper: {
28572
28664
  display: "inline-block",
28573
28665
  borderStyle: "solid",
@@ -29637,16 +29729,16 @@ const LabeledRow = props => {
29637
29729
  style
29638
29730
  } = props;
29639
29731
  return /*#__PURE__*/React__namespace.createElement("label", {
29640
- className: aphrodite.css(styles$G.label)
29732
+ className: aphrodite.css(styles$H.label)
29641
29733
  }, /*#__PURE__*/React__namespace.createElement(wonderBlocksCore.View, {
29642
- style: [styles$G.row, style]
29734
+ style: [styles$H.row, style]
29643
29735
  }, labelSide === "start" || /*#__PURE__*/React__namespace.createElement(wonderBlocksTypography.LabelSmall, {
29644
- style: styles$G.spaceEnd
29736
+ style: styles$H.spaceEnd
29645
29737
  }, label), children, labelSide === "end" && /*#__PURE__*/React__namespace.createElement(wonderBlocksTypography.LabelSmall, {
29646
- style: styles$G.spaceStart
29738
+ style: styles$H.spaceStart
29647
29739
  }, label)));
29648
29740
  };
29649
- const styles$G = aphrodite.StyleSheet.create({
29741
+ const styles$H = aphrodite.StyleSheet.create({
29650
29742
  label: {
29651
29743
  width: "fit-content"
29652
29744
  },
@@ -29672,11 +29764,11 @@ function Heading(_ref) {
29672
29764
  onToggle
29673
29765
  } = _ref;
29674
29766
  return /*#__PURE__*/React__namespace.createElement(Clickable__default["default"], {
29675
- style: [styles$F.container, !isCollapsible && styles$F.notClickable],
29767
+ style: [styles$G.container, !isCollapsible && styles$G.notClickable],
29676
29768
  disabled: !isCollapsible,
29677
29769
  onClick: () => isCollapsible && onToggle?.(!isOpen)
29678
29770
  }, () => /*#__PURE__*/React__namespace.createElement(wonderBlocksCore.View, {
29679
- style: styles$F.heading
29771
+ style: styles$G.heading
29680
29772
  }, /*#__PURE__*/React__namespace.createElement(wonderBlocksTypography.LabelLarge, {
29681
29773
  style: {
29682
29774
  fontSize: 14,
@@ -29686,7 +29778,7 @@ function Heading(_ref) {
29686
29778
  isExpanded: isOpen
29687
29779
  })));
29688
29780
  }
29689
- const styles$F = aphrodite.StyleSheet.create({
29781
+ const styles$G = aphrodite.StyleSheet.create({
29690
29782
  container: {
29691
29783
  marginTop: wonderBlocksTokens.spacing.small_12,
29692
29784
  // NOTE(jeremy): This is the inverse of the @editorPadding CSS
@@ -29904,6 +29996,17 @@ const getQuadraticEquation = startCoords => {
29904
29996
  const c = (p2[0] * p3[0] * (p2[0] - p3[0]) * p1[1] + p3[0] * p1[0] * (p3[0] - p1[0]) * p2[1] + p1[0] * p2[0] * (p1[0] - p2[0]) * p3[1]) / denom;
29905
29997
  return "y = " + a.toFixed(3) + "x^2 + " + b.toFixed(3) + "x + " + c.toFixed(3);
29906
29998
  };
29999
+ const findAngle = (point1, point2) => {
30000
+ const x = point1[0] - point2[0];
30001
+ const y = point1[1] - point2[1];
30002
+ return (180 + Math.atan2(-y, -x) * 180 / Math.PI + 360) % 360;
30003
+ };
30004
+ const getAngleEquation = startCoords => {
30005
+ const [point1, vertex, point2] = startCoords;
30006
+ const angle = findAngle(point2, vertex) - findAngle(point1, vertex);
30007
+ const roundedAngle = angle.toFixed(0);
30008
+ return `${roundedAngle}\u00B0 angle at (${vertex[0]}, ${vertex[1]})`;
30009
+ };
29907
30010
  const shouldShowStartCoordsUI = (flags, graph) => {
29908
30011
  // TODO(LEMS-2228): Remove flags once this is fully released
29909
30012
  const startCoordsUiPhase1Types = ["linear", "linear-system", "ray", "segment", "circle"];
@@ -29949,17 +30052,17 @@ const LockedFigureSelect = props => {
29949
30052
  const figureTypes = ["point", "line", "vector", "ellipse", "polygon"];
29950
30053
  const figureTypesCurrent = props.showM2bFeatures ? [...figureTypes, "function"] : figureTypes;
29951
30054
  return /*#__PURE__*/React__namespace.createElement(wonderBlocksCore.View, {
29952
- style: styles$E.container
30055
+ style: styles$F.container
29953
30056
  }, /*#__PURE__*/React__namespace.createElement(wonderBlocksDropdown.ActionMenu, {
29954
30057
  menuText: "Add locked figure",
29955
- style: styles$E.addElementSelect
30058
+ style: styles$F.addElementSelect
29956
30059
  }, figureTypesCurrent.map(figureType => /*#__PURE__*/React__namespace.createElement(wonderBlocksDropdown.ActionItem, {
29957
30060
  key: `${id}-${figureType}`,
29958
30061
  label: figureType,
29959
30062
  onClick: () => onChange(figureType)
29960
30063
  }))));
29961
30064
  };
29962
- const styles$E = aphrodite.StyleSheet.create({
30065
+ const styles$F = aphrodite.StyleSheet.create({
29963
30066
  container: {
29964
30067
  marginTop: wonderBlocksTokens.spacing.xSmall_8
29965
30068
  },
@@ -30029,18 +30132,18 @@ const AngleInput = props => {
30029
30132
  }
30030
30133
  return /*#__PURE__*/React__namespace.createElement(wonderBlocksTypography.LabelMedium, {
30031
30134
  tag: "label",
30032
- style: styles$D.row
30135
+ style: styles$E.row
30033
30136
  }, "angle (degrees)", /*#__PURE__*/React__namespace.createElement(Strut, {
30034
30137
  size: wonderBlocksTokens.spacing.xxSmall_6
30035
30138
  }), /*#__PURE__*/React__namespace.createElement(ScrolllessNumberTextField, {
30036
30139
  value: angleInput,
30037
30140
  onChange: handleAngleChange,
30038
- style: styles$D.textField
30141
+ style: styles$E.textField
30039
30142
  }), /*#__PURE__*/React__namespace.createElement(Strut, {
30040
30143
  size: wonderBlocksTokens.spacing.xxSmall_6
30041
30144
  }));
30042
30145
  };
30043
- const styles$D = aphrodite.StyleSheet.create({
30146
+ const styles$E = aphrodite.StyleSheet.create({
30044
30147
  row: {
30045
30148
  display: "flex",
30046
30149
  flexDirection: "row",
@@ -30089,30 +30192,30 @@ const CoordinatePairInput = props => {
30089
30192
  onChange(newCoords);
30090
30193
  }
30091
30194
  return /*#__PURE__*/React__namespace.createElement(wonderBlocksCore.View, {
30092
- style: [styles$C.row, style]
30195
+ style: [styles$D.row, style]
30093
30196
  }, /*#__PURE__*/React__namespace.createElement(wonderBlocksTypography.LabelMedium, {
30094
30197
  tag: "label",
30095
- style: styles$C.row
30198
+ style: styles$D.row
30096
30199
  }, labels ? labels[0] : "x coord", /*#__PURE__*/React__namespace.createElement(Strut, {
30097
30200
  size: wonderBlocksTokens.spacing.xxSmall_6
30098
30201
  }), /*#__PURE__*/React__namespace.createElement(ScrolllessNumberTextField, {
30099
30202
  value: coordState[0],
30100
30203
  onChange: newValue => handleCoordChange(newValue, 0),
30101
- style: [styles$C.textField, error ? styles$C.errorField : undefined]
30204
+ style: [styles$D.textField, error ? styles$D.errorField : undefined]
30102
30205
  })), /*#__PURE__*/React__namespace.createElement(Strut, {
30103
30206
  size: wonderBlocksTokens.spacing.medium_16
30104
30207
  }), /*#__PURE__*/React__namespace.createElement(wonderBlocksTypography.LabelMedium, {
30105
30208
  tag: "label",
30106
- style: styles$C.row
30209
+ style: styles$D.row
30107
30210
  }, labels ? labels[1] : "y coord", /*#__PURE__*/React__namespace.createElement(Strut, {
30108
30211
  size: wonderBlocksTokens.spacing.xxSmall_6
30109
30212
  }), /*#__PURE__*/React__namespace.createElement(ScrolllessNumberTextField, {
30110
30213
  value: coordState[1],
30111
30214
  onChange: newValue => handleCoordChange(newValue, 1),
30112
- style: [styles$C.textField, error ? styles$C.errorField : undefined]
30215
+ style: [styles$D.textField, error ? styles$D.errorField : undefined]
30113
30216
  })));
30114
30217
  };
30115
- const styles$C = aphrodite.StyleSheet.create({
30218
+ const styles$D = aphrodite.StyleSheet.create({
30116
30219
  row: {
30117
30220
  display: "flex",
30118
30221
  flexDirection: "row",
@@ -30145,14 +30248,14 @@ const PerseusEditorAccordion = props => {
30145
30248
  }, /*#__PURE__*/React__namespace.createElement(wonderBlocksAccordion.AccordionSection, {
30146
30249
  expanded: expanded,
30147
30250
  onToggle: onToggle,
30148
- style: [styles$B.container, containerStyle],
30149
- headerStyle: styles$B.accordionHeader,
30251
+ style: [styles$C.container, containerStyle],
30252
+ headerStyle: styles$C.accordionHeader,
30150
30253
  header: header
30151
30254
  }, /*#__PURE__*/React__namespace.createElement(wonderBlocksCore.View, {
30152
- style: [styles$B.accordionPanel, panelStyle]
30255
+ style: [styles$C.accordionPanel, panelStyle]
30153
30256
  }, children)));
30154
30257
  };
30155
- const styles$B = aphrodite.StyleSheet.create({
30258
+ const styles$C = aphrodite.StyleSheet.create({
30156
30259
  container: {
30157
30260
  backgroundColor: wonderBlocksTokens.color.fadedBlue8,
30158
30261
  marginTop: wonderBlocksTokens.spacing.xSmall_8
@@ -30183,13 +30286,13 @@ const ColorSwatch = props => {
30183
30286
  "aria-label":
30184
30287
  // Don't include an aria label for decorative circles.
30185
30288
  !decorative ? `${color}, ${filled ? "filled" : "open"}` : undefined,
30186
- style: [styles$A.colorSwatch, {
30289
+ style: [styles$B.colorSwatch, {
30187
30290
  border: `4px solid ${perseus.lockedFigureColors[color]}`,
30188
30291
  backgroundColor: filled ? perseus.lockedFigureColors[color] : wonderBlocksTokens.color.white
30189
30292
  }]
30190
30293
  });
30191
30294
  };
30192
- const styles$A = aphrodite.StyleSheet.create({
30295
+ const styles$B = aphrodite.StyleSheet.create({
30193
30296
  colorSwatch: {
30194
30297
  // Add a white outline so that the color swatch is visible when
30195
30298
  // the dropdown option is highlighted with its blue background.
@@ -30208,10 +30311,10 @@ const ColorSelect = props => {
30208
30311
  onChange
30209
30312
  } = props;
30210
30313
  return /*#__PURE__*/React__namespace.createElement(wonderBlocksCore.View, {
30211
- style: [styles$z.row, style]
30314
+ style: [styles$A.row, style]
30212
30315
  }, /*#__PURE__*/React__namespace.createElement(wonderBlocksTypography.LabelMedium, {
30213
30316
  tag: "label",
30214
- style: styles$z.row
30317
+ style: styles$A.row
30215
30318
  }, "color", /*#__PURE__*/React__namespace.createElement(Strut, {
30216
30319
  size: wonderBlocksTokens.spacing.xxSmall_6
30217
30320
  }), /*#__PURE__*/React__namespace.createElement(wonderBlocksDropdown.SingleSelect, {
@@ -30230,7 +30333,7 @@ const ColorSelect = props => {
30230
30333
  })
30231
30334
  })))));
30232
30335
  };
30233
- const styles$z = aphrodite.StyleSheet.create({
30336
+ const styles$A = aphrodite.StyleSheet.create({
30234
30337
  row: {
30235
30338
  display: "flex",
30236
30339
  flexDirection: "row",
@@ -30249,17 +30352,17 @@ const EllipseSwatch = props => {
30249
30352
  } = props;
30250
30353
  return /*#__PURE__*/React__namespace.createElement(wonderBlocksCore.View, {
30251
30354
  "aria-label": `${color}, stroke ${strokeStyle}, fill ${fillStyle}`,
30252
- style: [styles$y.container, {
30355
+ style: [styles$z.container, {
30253
30356
  border: `4px ${strokeStyle} ${perseus.lockedFigureColors[color]}`
30254
30357
  }]
30255
30358
  }, /*#__PURE__*/React__namespace.createElement(wonderBlocksCore.View, {
30256
- style: [styles$y.innerCircle, {
30359
+ style: [styles$z.innerCircle, {
30257
30360
  backgroundColor: perseus.lockedFigureColors[color],
30258
30361
  opacity: fillStyle === "white" ? 0 : perseus.lockedFigureFillStyles[fillStyle]
30259
30362
  }]
30260
30363
  }));
30261
30364
  };
30262
- const styles$y = aphrodite.StyleSheet.create({
30365
+ const styles$z = aphrodite.StyleSheet.create({
30263
30366
  container: {
30264
30367
  // Add a white outline so that the color swatch is visible when
30265
30368
  // the dropdown option is highlighted with its blue background.
@@ -30285,7 +30388,7 @@ const LineStrokeSelect = props => {
30285
30388
  } = props;
30286
30389
  return /*#__PURE__*/React__namespace.createElement(wonderBlocksTypography.LabelMedium, {
30287
30390
  tag: "label",
30288
- style: styles$x.lineStrokeSelect
30391
+ style: styles$y.lineStrokeSelect
30289
30392
  }, "stroke", /*#__PURE__*/React__namespace.createElement(Strut, {
30290
30393
  size: wonderBlocksTokens.spacing.xxxSmall_4
30291
30394
  }), /*#__PURE__*/React__namespace.createElement(wonderBlocksDropdown.SingleSelect, {
@@ -30302,7 +30405,7 @@ const LineStrokeSelect = props => {
30302
30405
  label: "dashed"
30303
30406
  })));
30304
30407
  };
30305
- const styles$x = aphrodite.StyleSheet.create({
30408
+ const styles$y = aphrodite.StyleSheet.create({
30306
30409
  lineStrokeSelect: {
30307
30410
  display: "flex",
30308
30411
  flexDirection: "row",
@@ -30324,40 +30427,40 @@ const LockedFigureSettingsActions = props => {
30324
30427
  onRemove
30325
30428
  } = props;
30326
30429
  return /*#__PURE__*/React__namespace.createElement(wonderBlocksCore.View, {
30327
- style: styles$w.container
30430
+ style: styles$x.container
30328
30431
  }, /*#__PURE__*/React__namespace.createElement(Button__default["default"], {
30329
30432
  startIcon: trashIcon__default["default"],
30330
30433
  "aria-label": `Delete locked ${figureType}`,
30331
30434
  onClick: onRemove,
30332
30435
  kind: "tertiary",
30333
- style: styles$w.deleteButton
30436
+ style: styles$x.deleteButton
30334
30437
  }, "Delete"), /*#__PURE__*/React__namespace.createElement(Spring, null), /*#__PURE__*/React__namespace.createElement(IconButton__default["default"], {
30335
30438
  icon: caretDoubleUpIcon__default["default"],
30336
30439
  size: "small",
30337
30440
  "aria-label": `Move locked ${figureType} to the back`,
30338
30441
  onClick: () => onMove("back"),
30339
- style: styles$w.iconButton
30442
+ style: styles$x.iconButton
30340
30443
  }), /*#__PURE__*/React__namespace.createElement(IconButton__default["default"], {
30341
30444
  icon: caretUpIcon__default["default"],
30342
30445
  size: "small",
30343
30446
  "aria-label": `Move locked ${figureType} backward`,
30344
30447
  onClick: () => onMove("backward"),
30345
- style: styles$w.iconButton
30448
+ style: styles$x.iconButton
30346
30449
  }), /*#__PURE__*/React__namespace.createElement(IconButton__default["default"], {
30347
30450
  icon: caretDownIcon__default["default"],
30348
30451
  size: "small",
30349
30452
  "aria-label": `Move locked ${figureType} forward`,
30350
30453
  onClick: () => onMove("forward"),
30351
- style: styles$w.iconButton
30454
+ style: styles$x.iconButton
30352
30455
  }), /*#__PURE__*/React__namespace.createElement(IconButton__default["default"], {
30353
30456
  icon: caretDoubleDownIcon__default["default"],
30354
30457
  size: "small",
30355
30458
  "aria-label": `Move locked ${figureType} to the front`,
30356
30459
  onClick: () => onMove("front"),
30357
- style: styles$w.iconButton
30460
+ style: styles$x.iconButton
30358
30461
  }));
30359
30462
  };
30360
- const styles$w = aphrodite.StyleSheet.create({
30463
+ const styles$x = aphrodite.StyleSheet.create({
30361
30464
  container: {
30362
30465
  width: "100%",
30363
30466
  flexDirection: "row",
@@ -30404,7 +30507,7 @@ const LockedEllipseSettings = props => {
30404
30507
  /*#__PURE__*/
30405
30508
  // Summary: Ellipse, center, radius, color (opacity, dashed)
30406
30509
  React__namespace.createElement(wonderBlocksCore.View, {
30407
- style: styles$v.row
30510
+ style: styles$w.row
30408
30511
  }, /*#__PURE__*/React__namespace.createElement(wonderBlocksTypography.LabelLarge, null, `Ellipse (${center[0]}, ${center[1]}), radius ${radius[0]}, ${radius[1]}`), /*#__PURE__*/React__namespace.createElement(Strut, {
30409
30512
  size: wonderBlocksTokens.spacing.xSmall_8
30410
30513
  }), /*#__PURE__*/React__namespace.createElement(EllipseSwatch, {
@@ -30413,19 +30516,19 @@ const LockedEllipseSettings = props => {
30413
30516
  strokeStyle: strokeStyle
30414
30517
  }))
30415
30518
  }, /*#__PURE__*/React__namespace.createElement(wonderBlocksCore.View, {
30416
- style: styles$v.row
30519
+ style: styles$w.row
30417
30520
  }, /*#__PURE__*/React__namespace.createElement(CoordinatePairInput, {
30418
30521
  coord: center,
30419
- style: styles$v.spaceUnder,
30522
+ style: styles$w.spaceUnder,
30420
30523
  onChange: newCoords => onChangeProps({
30421
30524
  center: newCoords
30422
30525
  })
30423
30526
  }), /*#__PURE__*/React__namespace.createElement(wonderBlocksCore.View, {
30424
- style: styles$v.spaceUnder
30527
+ style: styles$w.spaceUnder
30425
30528
  }, /*#__PURE__*/React__namespace.createElement(InfoTip$d, null, "The coordinates for the center of the ellipse."))), /*#__PURE__*/React__namespace.createElement(CoordinatePairInput, {
30426
30529
  coord: radius,
30427
30530
  labels: ["x radius", "y radius"],
30428
- style: styles$v.spaceUnder,
30531
+ style: styles$w.spaceUnder,
30429
30532
  onChange: newCoords => onChangeProps({
30430
30533
  radius: newCoords
30431
30534
  })
@@ -30437,7 +30540,7 @@ const LockedEllipseSettings = props => {
30437
30540
  }), /*#__PURE__*/React__namespace.createElement(Strut, {
30438
30541
  size: wonderBlocksTokens.spacing.xSmall_8
30439
30542
  }), /*#__PURE__*/React__namespace.createElement(wonderBlocksCore.View, {
30440
- style: [styles$v.row, styles$v.spaceUnder]
30543
+ style: [styles$w.row, styles$w.spaceUnder]
30441
30544
  }, /*#__PURE__*/React__namespace.createElement(ColorSelect, {
30442
30545
  selectedValue: color,
30443
30546
  onChange: handleColorChange
@@ -30445,7 +30548,7 @@ const LockedEllipseSettings = props => {
30445
30548
  size: wonderBlocksTokens.spacing.medium_16
30446
30549
  }), /*#__PURE__*/React__namespace.createElement(wonderBlocksTypography.LabelMedium, {
30447
30550
  tag: "label",
30448
- style: [styles$v.row, styles$v.truncatedWidth]
30551
+ style: [styles$w.row, styles$w.truncatedWidth]
30449
30552
  }, "fill", /*#__PURE__*/React__namespace.createElement(Strut, {
30450
30553
  size: wonderBlocksTokens.spacing.xxSmall_6
30451
30554
  }), /*#__PURE__*/React__namespace.createElement(wonderBlocksDropdown.SingleSelect, {
@@ -30471,7 +30574,7 @@ const LockedEllipseSettings = props => {
30471
30574
  onRemove: onRemove
30472
30575
  }));
30473
30576
  };
30474
- const styles$v = aphrodite.StyleSheet.create({
30577
+ const styles$w = aphrodite.StyleSheet.create({
30475
30578
  row: {
30476
30579
  display: "flex",
30477
30580
  flexDirection: "row",
@@ -30492,15 +30595,15 @@ const LineSwatch = props => {
30492
30595
  lineStyle
30493
30596
  } = props;
30494
30597
  return /*#__PURE__*/React__namespace.createElement(wonderBlocksCore.View, {
30495
- style: styles$u.container
30598
+ style: styles$v.container
30496
30599
  }, /*#__PURE__*/React__namespace.createElement(wonderBlocksCore.View, {
30497
30600
  "aria-label": `${color}, ${lineStyle}`,
30498
- style: [styles$u.lineSwatch, {
30601
+ style: [styles$v.lineSwatch, {
30499
30602
  border: `5px ${lineStyle} ${perseus.lockedFigureColors[color]}`
30500
30603
  }]
30501
30604
  }));
30502
30605
  };
30503
- const styles$u = aphrodite.StyleSheet.create({
30606
+ const styles$v = aphrodite.StyleSheet.create({
30504
30607
  container: {
30505
30608
  backgroundColor: wonderBlocksTokens.color.white,
30506
30609
  justifyContent: "center",
@@ -30535,8 +30638,8 @@ const LockedFunctionSettings = props => {
30535
30638
  // Tracking the string value of domain constraints to handle interim state of
30536
30639
  // entering a negative value, as well as representing Infinity as an empty string.
30537
30640
  // This variable is used when specifying the values of the input fields.
30538
- const [domainEntries, setDomainEntries] = React.useState([domain && domain[0] !== -Infinity ? domain[0].toString() : "", domain && domain[1] !== Infinity ? domain[1].toString() : ""]);
30539
- React.useEffect(() => {
30641
+ const [domainEntries, setDomainEntries] = React$1.useState([domain && domain[0] !== -Infinity ? domain[0].toString() : "", domain && domain[1] !== Infinity ? domain[1].toString() : ""]);
30642
+ React$1.useEffect(() => {
30540
30643
  // "useEffect" used to maintain parity between domain constraints and their string representation.
30541
30644
  setDomainEntries([domain && domain[0] !== -Infinity ? domain[0].toString() : "", domain && domain[1] !== Infinity ? domain[1].toString() : ""]);
30542
30645
  }, [domain]);
@@ -30574,9 +30677,9 @@ const LockedFunctionSettings = props => {
30574
30677
  expanded: props.expanded,
30575
30678
  onToggle: props.onToggle,
30576
30679
  header: /*#__PURE__*/React__namespace.createElement(wonderBlocksCore.View, {
30577
- style: styles$t.row
30680
+ style: styles$u.row
30578
30681
  }, /*#__PURE__*/React__namespace.createElement(wonderBlocksTypography.LabelLarge, {
30579
- style: styles$t.accordionHeader
30682
+ style: styles$u.accordionHeader
30580
30683
  }, lineLabel), /*#__PURE__*/React__namespace.createElement(Strut, {
30581
30684
  size: wonderBlocksTokens.spacing.xSmall_8
30582
30685
  }), /*#__PURE__*/React__namespace.createElement(LineSwatch, {
@@ -30584,7 +30687,7 @@ const LockedFunctionSettings = props => {
30584
30687
  lineStyle: strokeStyle
30585
30688
  }))
30586
30689
  }, /*#__PURE__*/React__namespace.createElement(wonderBlocksCore.View, {
30587
- style: [styles$t.row, styles$t.spaceUnder]
30690
+ style: [styles$u.row, styles$u.spaceUnder]
30588
30691
  }, /*#__PURE__*/React__namespace.createElement(ColorSelect, {
30589
30692
  selectedValue: lineColor,
30590
30693
  onChange: newValue => {
@@ -30598,14 +30701,14 @@ const LockedFunctionSettings = props => {
30598
30701
  handlePropChange("strokeStyle", newValue);
30599
30702
  }
30600
30703
  })), /*#__PURE__*/React__namespace.createElement(wonderBlocksCore.View, {
30601
- style: [styles$t.row, styles$t.rowSpace]
30704
+ style: [styles$u.row, styles$u.rowSpace]
30602
30705
  }, /*#__PURE__*/React__namespace.createElement(wonderBlocksDropdown.SingleSelect, {
30603
30706
  selectedValue: directionalAxis,
30604
30707
  onChange: newValue => {
30605
30708
  handlePropChange("directionalAxis", newValue);
30606
30709
  },
30607
30710
  "aria-label": "equation prefix",
30608
- style: styles$t.equationPrefix
30711
+ style: styles$u.equationPrefix
30609
30712
  // Placeholder is required, but never gets used.
30610
30713
  ,
30611
30714
  placeholder: ""
@@ -30624,17 +30727,17 @@ const LockedFunctionSettings = props => {
30624
30727
  onChange: newValue => {
30625
30728
  handlePropChange("equation", newValue);
30626
30729
  },
30627
- style: [styles$t.textField]
30730
+ style: [styles$u.textField]
30628
30731
  })), /*#__PURE__*/React__namespace.createElement(wonderBlocksCore.View, {
30629
- style: [styles$t.row, styles$t.rowSpace]
30732
+ style: [styles$u.row, styles$u.rowSpace]
30630
30733
  }, /*#__PURE__*/React__namespace.createElement(wonderBlocksTypography.LabelMedium, {
30631
30734
  tag: "label",
30632
- style: styles$t.domainMin
30735
+ style: styles$u.domainMin
30633
30736
  }, "domain min", /*#__PURE__*/React__namespace.createElement(Strut, {
30634
30737
  size: wonderBlocksTokens.spacing.xxSmall_6
30635
30738
  }), /*#__PURE__*/React__namespace.createElement(wonderBlocksForm.TextField, {
30636
30739
  type: "number",
30637
- style: styles$t.domainMinField,
30740
+ style: styles$u.domainMinField,
30638
30741
  value: domainEntries[0],
30639
30742
  onChange: newValue => {
30640
30743
  handleDomainChange(0, newValue);
@@ -30644,12 +30747,12 @@ const LockedFunctionSettings = props => {
30644
30747
  }), /*#__PURE__*/React__namespace.createElement(wonderBlocksTypography.LabelMedium, {
30645
30748
  tag: "label",
30646
30749
  "aria-label": "domain max",
30647
- style: styles$t.domainMax
30750
+ style: styles$u.domainMax
30648
30751
  }, "max", /*#__PURE__*/React__namespace.createElement(Strut, {
30649
30752
  size: wonderBlocksTokens.spacing.xxSmall_6
30650
30753
  }), /*#__PURE__*/React__namespace.createElement(wonderBlocksForm.TextField, {
30651
30754
  type: "number",
30652
- style: styles$t.domainMaxField,
30755
+ style: styles$u.domainMaxField,
30653
30756
  value: domainEntries[1],
30654
30757
  onChange: newValue => {
30655
30758
  handleDomainChange(1, newValue);
@@ -30660,7 +30763,7 @@ const LockedFunctionSettings = props => {
30660
30763
  onRemove: onRemove
30661
30764
  }));
30662
30765
  };
30663
- const styles$t = aphrodite.StyleSheet.create({
30766
+ const styles$u = aphrodite.StyleSheet.create({
30664
30767
  accordionHeader: {
30665
30768
  textOverflow: "ellipsis",
30666
30769
  // A maximum width needs to be specified in order for the ellipsis to work.
@@ -30725,7 +30828,7 @@ const LabeledSwitch = props => {
30725
30828
  const ids = wonderBlocksCore.useUniqueIdWithMock();
30726
30829
  const switchId = ids.get("switch");
30727
30830
  return /*#__PURE__*/React__namespace.createElement(wonderBlocksCore.View, {
30728
- style: [styles$s.row, style]
30831
+ style: [styles$t.row, style]
30729
30832
  }, /*#__PURE__*/React__namespace.createElement(Switch__default["default"], {
30730
30833
  id: switchId,
30731
30834
  checked: checked,
@@ -30737,7 +30840,7 @@ const LabeledSwitch = props => {
30737
30840
  htmlFor: switchId
30738
30841
  }, label));
30739
30842
  };
30740
- const styles$s = aphrodite.StyleSheet.create({
30843
+ const styles$t = aphrodite.StyleSheet.create({
30741
30844
  row: {
30742
30845
  flexDirection: "row",
30743
30846
  alignItems: "center"
@@ -30771,13 +30874,13 @@ const DefiningPointSettings = props => {
30771
30874
  return /*#__PURE__*/React__namespace.createElement(PerseusEditorAccordion, {
30772
30875
  expanded: expanded,
30773
30876
  onToggle: onToggle,
30774
- containerStyle: styles$r.container,
30775
- panelStyle: styles$r.accordionPanel,
30877
+ containerStyle: styles$s.container,
30878
+ panelStyle: styles$s.accordionPanel,
30776
30879
  header:
30777
30880
  /*#__PURE__*/
30778
30881
  // Summary: Point, coords, color (filled/open)
30779
30882
  React__namespace.createElement(wonderBlocksCore.View, {
30780
- style: styles$r.row
30883
+ style: styles$s.row
30781
30884
  }, /*#__PURE__*/React__namespace.createElement(wonderBlocksTypography.LabelLarge, null, `${label || "Point"} (${coord[0]}, ${coord[1]})`), /*#__PURE__*/React__namespace.createElement(Strut, {
30782
30885
  size: wonderBlocksTokens.spacing.xSmall_8
30783
30886
  }), showPoint && /*#__PURE__*/React__namespace.createElement(ColorSwatch, {
@@ -30787,7 +30890,7 @@ const DefiningPointSettings = props => {
30787
30890
  }, /*#__PURE__*/React__namespace.createElement(CoordinatePairInput, {
30788
30891
  coord: coord,
30789
30892
  error: !!error,
30790
- style: styles$r.spaceUnder,
30893
+ style: styles$s.spaceUnder,
30791
30894
  onChange: newCoords => {
30792
30895
  onChangeProps({
30793
30896
  coord: newCoords
@@ -30796,12 +30899,12 @@ const DefiningPointSettings = props => {
30796
30899
  }), onTogglePoint && /*#__PURE__*/React__namespace.createElement(LabeledSwitch, {
30797
30900
  label: "show point on graph",
30798
30901
  checked: !!showPoint,
30799
- style: showPoint && styles$r.spaceUnder,
30902
+ style: showPoint && styles$s.spaceUnder,
30800
30903
  onChange: onTogglePoint
30801
30904
  }), showPoint && /*#__PURE__*/React__namespace.createElement(React__namespace.Fragment, null, /*#__PURE__*/React__namespace.createElement(ColorSelect, {
30802
30905
  selectedValue: pointColor,
30803
30906
  onChange: handleColorChange,
30804
- style: styles$r.spaceUnder
30907
+ style: styles$s.spaceUnder
30805
30908
  }), /*#__PURE__*/React__namespace.createElement(LabeledSwitch, {
30806
30909
  label: "open point",
30807
30910
  checked: !filled,
@@ -30812,7 +30915,7 @@ const DefiningPointSettings = props => {
30812
30915
  }
30813
30916
  })));
30814
30917
  };
30815
- const styles$r = aphrodite.StyleSheet.create({
30918
+ const styles$s = aphrodite.StyleSheet.create({
30816
30919
  container: {
30817
30920
  marginTop: wonderBlocksTokens.spacing.xSmall_8,
30818
30921
  marginBottom: 0,
@@ -30880,7 +30983,7 @@ const LockedLineSettings = props => {
30880
30983
  expanded: props.expanded,
30881
30984
  onToggle: props.onToggle,
30882
30985
  header: /*#__PURE__*/React__namespace.createElement(wonderBlocksCore.View, {
30883
- style: styles$q.row
30986
+ style: styles$r.row
30884
30987
  }, /*#__PURE__*/React__namespace.createElement(wonderBlocksTypography.LabelLarge, null, lineLabel), /*#__PURE__*/React__namespace.createElement(Strut, {
30885
30988
  size: wonderBlocksTokens.spacing.xSmall_8
30886
30989
  }), /*#__PURE__*/React__namespace.createElement(LineSwatch, {
@@ -30889,7 +30992,7 @@ const LockedLineSettings = props => {
30889
30992
  }))
30890
30993
  }, /*#__PURE__*/React__namespace.createElement(wonderBlocksTypography.LabelMedium, {
30891
30994
  tag: "label",
30892
- style: [styles$q.row, styles$q.spaceUnder]
30995
+ style: [styles$r.row, styles$r.spaceUnder]
30893
30996
  }, "kind", /*#__PURE__*/React__namespace.createElement(Strut, {
30894
30997
  size: wonderBlocksTokens.spacing.xxxSmall_4
30895
30998
  }), /*#__PURE__*/React__namespace.createElement(wonderBlocksDropdown.SingleSelect, {
@@ -30910,7 +31013,7 @@ const LockedLineSettings = props => {
30910
31013
  value: "segment",
30911
31014
  label: "segment"
30912
31015
  }))), /*#__PURE__*/React__namespace.createElement(wonderBlocksCore.View, {
30913
- style: styles$q.row
31016
+ style: styles$r.row
30914
31017
  }, /*#__PURE__*/React__namespace.createElement(ColorSelect, {
30915
31018
  selectedValue: lineColor,
30916
31019
  onChange: handleColorChange
@@ -30922,7 +31025,7 @@ const LockedLineSettings = props => {
30922
31025
  lineStyle: value
30923
31026
  })
30924
31027
  })), isInvalid && /*#__PURE__*/React__namespace.createElement(wonderBlocksTypography.LabelMedium, {
30925
- style: styles$q.errorText
31028
+ style: styles$r.errorText
30926
31029
  }, lengthZeroStr), /*#__PURE__*/React__namespace.createElement(DefiningPointSettings, _extends({
30927
31030
  label: "Point 1",
30928
31031
  showPoint: showPoint1,
@@ -30947,7 +31050,7 @@ const LockedLineSettings = props => {
30947
31050
  onRemove: onRemove
30948
31051
  }));
30949
31052
  };
30950
- const styles$q = aphrodite.StyleSheet.create({
31053
+ const styles$r = aphrodite.StyleSheet.create({
30951
31054
  row: {
30952
31055
  display: "flex",
30953
31056
  flexDirection: "row",
@@ -30988,7 +31091,7 @@ const LockedPointSettings = props => {
30988
31091
  /*#__PURE__*/
30989
31092
  // Summary: Point, coords, color (filled/open)
30990
31093
  React__namespace.createElement(wonderBlocksCore.View, {
30991
- style: styles$p.row
31094
+ style: styles$q.row
30992
31095
  }, /*#__PURE__*/React__namespace.createElement(wonderBlocksTypography.LabelLarge, null, `Point (${coord[0]}, ${coord[1]})`), /*#__PURE__*/React__namespace.createElement(Strut, {
30993
31096
  size: wonderBlocksTokens.spacing.xSmall_8
30994
31097
  }), /*#__PURE__*/React__namespace.createElement(ColorSwatch, {
@@ -30997,7 +31100,7 @@ const LockedPointSettings = props => {
30997
31100
  }))
30998
31101
  }, /*#__PURE__*/React__namespace.createElement(CoordinatePairInput, {
30999
31102
  coord: coord,
31000
- style: styles$p.spaceUnder,
31103
+ style: styles$q.spaceUnder,
31001
31104
  onChange: newCoord => {
31002
31105
  onChangeProps({
31003
31106
  coord: newCoord
@@ -31006,7 +31109,7 @@ const LockedPointSettings = props => {
31006
31109
  }), /*#__PURE__*/React__namespace.createElement(ColorSelect, {
31007
31110
  selectedValue: pointColor,
31008
31111
  onChange: handleColorChange,
31009
- style: styles$p.spaceUnder
31112
+ style: styles$q.spaceUnder
31010
31113
  }), /*#__PURE__*/React__namespace.createElement(LabeledSwitch, {
31011
31114
  label: "open point",
31012
31115
  checked: !filled,
@@ -31021,7 +31124,7 @@ const LockedPointSettings = props => {
31021
31124
  onRemove: onRemove
31022
31125
  }));
31023
31126
  };
31024
- const styles$p = aphrodite.StyleSheet.create({
31127
+ const styles$q = aphrodite.StyleSheet.create({
31025
31128
  row: {
31026
31129
  flexDirection: "row",
31027
31130
  alignItems: "center"
@@ -31039,17 +31142,17 @@ const PolygonSwatch = props => {
31039
31142
  } = props;
31040
31143
  return /*#__PURE__*/React__namespace.createElement(wonderBlocksCore.View, {
31041
31144
  "aria-label": `${color}, stroke ${strokeStyle}, fill ${fillStyle}`,
31042
- style: [styles$o.container, {
31145
+ style: [styles$p.container, {
31043
31146
  border: `4px ${strokeStyle} ${perseus.lockedFigureColors[color]}`
31044
31147
  }]
31045
31148
  }, /*#__PURE__*/React__namespace.createElement(wonderBlocksCore.View, {
31046
- style: [styles$o.innerSquare, {
31149
+ style: [styles$p.innerSquare, {
31047
31150
  backgroundColor: perseus.lockedFigureColors[color],
31048
31151
  opacity: fillStyle === "white" ? 0 : perseus.lockedFigureFillStyles[fillStyle]
31049
31152
  }]
31050
31153
  }));
31051
31154
  };
31052
- const styles$o = aphrodite.StyleSheet.create({
31155
+ const styles$p = aphrodite.StyleSheet.create({
31053
31156
  container: {
31054
31157
  // Add a white outline so that the color swatch is visible when
31055
31158
  // the dropdown option is highlighted with its blue background.
@@ -31084,6 +31187,42 @@ const LockedPolygonSettings = props => {
31084
31187
  color: newValue
31085
31188
  });
31086
31189
  }
31190
+ function handlePolygonMove(movement) {
31191
+ switch (movement) {
31192
+ case "up":
31193
+ onChangeProps({
31194
+ points: points.map(_ref => {
31195
+ let [x, y] = _ref;
31196
+ return [x, y + 1];
31197
+ })
31198
+ });
31199
+ break;
31200
+ case "down":
31201
+ onChangeProps({
31202
+ points: points.map(_ref2 => {
31203
+ let [x, y] = _ref2;
31204
+ return [x, y - 1];
31205
+ })
31206
+ });
31207
+ break;
31208
+ case "left":
31209
+ onChangeProps({
31210
+ points: points.map(_ref3 => {
31211
+ let [x, y] = _ref3;
31212
+ return [x - 1, y];
31213
+ })
31214
+ });
31215
+ break;
31216
+ case "right":
31217
+ onChangeProps({
31218
+ points: points.map(_ref4 => {
31219
+ let [x, y] = _ref4;
31220
+ return [x + 1, y];
31221
+ })
31222
+ });
31223
+ break;
31224
+ }
31225
+ }
31087
31226
  return /*#__PURE__*/React__namespace.createElement(PerseusEditorAccordion, {
31088
31227
  expanded: expanded,
31089
31228
  onToggle: onToggle,
@@ -31091,7 +31230,7 @@ const LockedPolygonSettings = props => {
31091
31230
  /*#__PURE__*/
31092
31231
  // Summary: Polygon, number of sides, style swatch
31093
31232
  React__namespace.createElement(wonderBlocksCore.View, {
31094
- style: styles$n.row
31233
+ style: styles$o.row
31095
31234
  }, /*#__PURE__*/React__namespace.createElement(wonderBlocksTypography.LabelLarge, null, `Polygon, ${points.length} sides`), /*#__PURE__*/React__namespace.createElement(Strut, {
31096
31235
  size: wonderBlocksTokens.spacing.xSmall_8
31097
31236
  }), /*#__PURE__*/React__namespace.createElement(PolygonSwatch, {
@@ -31100,7 +31239,7 @@ const LockedPolygonSettings = props => {
31100
31239
  strokeStyle: strokeStyle
31101
31240
  }))
31102
31241
  }, /*#__PURE__*/React__namespace.createElement(wonderBlocksCore.View, {
31103
- style: [styles$n.row, styles$n.spaceUnder]
31242
+ style: [styles$o.row, styles$o.spaceUnder]
31104
31243
  }, /*#__PURE__*/React__namespace.createElement(ColorSelect, {
31105
31244
  selectedValue: color,
31106
31245
  onChange: handleColorChange
@@ -31108,7 +31247,7 @@ const LockedPolygonSettings = props => {
31108
31247
  size: wonderBlocksTokens.spacing.medium_16
31109
31248
  }), /*#__PURE__*/React__namespace.createElement(wonderBlocksTypography.LabelMedium, {
31110
31249
  tag: "label",
31111
- style: [styles$n.row, styles$n.truncatedWidth]
31250
+ style: [styles$o.row, styles$o.truncatedWidth]
31112
31251
  }, "fill", /*#__PURE__*/React__namespace.createElement(Strut, {
31113
31252
  size: wonderBlocksTokens.spacing.xxSmall_6
31114
31253
  }), /*#__PURE__*/React__namespace.createElement(wonderBlocksDropdown.SingleSelect, {
@@ -31134,17 +31273,17 @@ const LockedPolygonSettings = props => {
31134
31273
  onChange: newValue => onChangeProps({
31135
31274
  showVertices: newValue
31136
31275
  }),
31137
- style: styles$n.spaceUnder
31276
+ style: styles$o.spaceUnder
31138
31277
  }), /*#__PURE__*/React__namespace.createElement(PerseusEditorAccordion, {
31139
31278
  header: /*#__PURE__*/React__namespace.createElement(wonderBlocksTypography.LabelLarge, null, "Points"),
31140
31279
  expanded: true,
31141
- containerStyle: styles$n.pointAccordionContainer,
31142
- panelStyle: styles$n.pointAccordionPanel
31280
+ containerStyle: styles$o.pointAccordionContainer,
31281
+ panelStyle: styles$o.pointAccordionPanel
31143
31282
  }, points.map((point, index) => {
31144
31283
  const pointLabel = String.fromCharCode(65 + index);
31145
31284
  return /*#__PURE__*/React__namespace.createElement(wonderBlocksCore.View, {
31146
31285
  key: `locked-polygon-point-index-${index}`,
31147
- style: [styles$n.row, styles$n.spaceUnder]
31286
+ style: [styles$o.row, styles$o.spaceUnder]
31148
31287
  }, /*#__PURE__*/React__namespace.createElement(wonderBlocksTypography.LabelLarge, null, `${pointLabel}:`), /*#__PURE__*/React__namespace.createElement(Strut, {
31149
31288
  size: wonderBlocksTokens.spacing.medium_16
31150
31289
  }), /*#__PURE__*/React__namespace.createElement(CoordinatePairInput, {
@@ -31172,9 +31311,11 @@ const LockedPolygonSettings = props => {
31172
31311
  points: newPoints
31173
31312
  });
31174
31313
  },
31175
- style: styles$n.icon
31314
+ style: styles$o.icon
31176
31315
  }));
31177
- }), /*#__PURE__*/React__namespace.createElement(Button__default["default"], {
31316
+ }), /*#__PURE__*/React__namespace.createElement(wonderBlocksCore.View, {
31317
+ style: [styles$o.row, styles$o.polygonActionsContainer]
31318
+ }, /*#__PURE__*/React__namespace.createElement(Button__default["default"], {
31178
31319
  kind: "tertiary",
31179
31320
  startIcon: plusCircle__default["default"],
31180
31321
  onClick: () => {
@@ -31182,13 +31323,41 @@ const LockedPolygonSettings = props => {
31182
31323
  points: [...points, [0, 0]]
31183
31324
  });
31184
31325
  }
31185
- }, "Add point")), /*#__PURE__*/React__namespace.createElement(LockedFigureSettingsActions, {
31326
+ }, "Add point"), /*#__PURE__*/React__namespace.createElement(Spring, null), /*#__PURE__*/React__namespace.createElement(wonderBlocksCore.View, {
31327
+ style: styles$o.movementButtonsContainer
31328
+ }, /*#__PURE__*/React__namespace.createElement(IconButton__default["default"], {
31329
+ "aria-label": "Move polygon up",
31330
+ style: styles$o.iconButton,
31331
+ size: "small",
31332
+ icon: arrowFatUp__default["default"],
31333
+ onClick: () => handlePolygonMove("up")
31334
+ }), /*#__PURE__*/React__namespace.createElement(wonderBlocksCore.View, {
31335
+ style: styles$o.row
31336
+ }, /*#__PURE__*/React__namespace.createElement(IconButton__default["default"], {
31337
+ "aria-label": "Move polygon left",
31338
+ style: styles$o.iconButton,
31339
+ size: "small",
31340
+ icon: arrowFatLeft__default["default"],
31341
+ onClick: () => handlePolygonMove("left")
31342
+ }), /*#__PURE__*/React__namespace.createElement(IconButton__default["default"], {
31343
+ "aria-label": "Move polygon down",
31344
+ style: styles$o.iconButton,
31345
+ size: "small",
31346
+ icon: arrowFatDown__default["default"],
31347
+ onClick: () => handlePolygonMove("down")
31348
+ }), /*#__PURE__*/React__namespace.createElement(IconButton__default["default"], {
31349
+ "aria-label": "Move polygon right",
31350
+ style: styles$o.iconButton,
31351
+ size: "small",
31352
+ icon: arrowFatRight__default["default"],
31353
+ onClick: () => handlePolygonMove("right")
31354
+ }))))), /*#__PURE__*/React__namespace.createElement(LockedFigureSettingsActions, {
31186
31355
  figureType: props.type,
31187
31356
  onMove: onMove,
31188
31357
  onRemove: onRemove
31189
31358
  }));
31190
31359
  };
31191
- const styles$n = aphrodite.StyleSheet.create({
31360
+ const styles$o = aphrodite.StyleSheet.create({
31192
31361
  row: {
31193
31362
  display: "flex",
31194
31363
  flexDirection: "row",
@@ -31203,6 +31372,18 @@ const styles$n = aphrodite.StyleSheet.create({
31203
31372
  icon: {
31204
31373
  marginInlineStart: wonderBlocksTokens.spacing.xxxSmall_4
31205
31374
  },
31375
+ polygonActionsContainer: {
31376
+ width: "100%"
31377
+ },
31378
+ iconButton: {
31379
+ margin: 0
31380
+ },
31381
+ movementButtonsContainer: {
31382
+ display: "flex",
31383
+ flexDirection: "column",
31384
+ alignItems: "center",
31385
+ minWidth: "fit-content"
31386
+ },
31206
31387
  spaceUnder: {
31207
31388
  marginBottom: wonderBlocksTokens.spacing.xSmall_8
31208
31389
  },
@@ -31250,7 +31431,7 @@ const LockedVectorSettings = props => {
31250
31431
  expanded: props.expanded,
31251
31432
  onToggle: props.onToggle,
31252
31433
  header: /*#__PURE__*/React__namespace.createElement(wonderBlocksCore.View, {
31253
- style: styles$m.row
31434
+ style: styles$n.row
31254
31435
  }, /*#__PURE__*/React__namespace.createElement(wonderBlocksTypography.LabelLarge, null, lineLabel), /*#__PURE__*/React__namespace.createElement(Strut, {
31255
31436
  size: wonderBlocksTokens.spacing.xSmall_8
31256
31437
  }), /*#__PURE__*/React__namespace.createElement(LineSwatch, {
@@ -31258,19 +31439,19 @@ const LockedVectorSettings = props => {
31258
31439
  lineStyle: "solid"
31259
31440
  }))
31260
31441
  }, /*#__PURE__*/React__namespace.createElement(wonderBlocksCore.View, {
31261
- style: [styles$m.row, styles$m.spaceUnder]
31442
+ style: [styles$n.row, styles$n.spaceUnder]
31262
31443
  }, /*#__PURE__*/React__namespace.createElement(ColorSelect, {
31263
31444
  selectedValue: lineColor,
31264
31445
  onChange: handleColorChange
31265
31446
  })), isInvalid && /*#__PURE__*/React__namespace.createElement(wonderBlocksTypography.LabelMedium, {
31266
- style: styles$m.errorText
31447
+ style: styles$n.errorText
31267
31448
  }, lengthErrorMessage), /*#__PURE__*/React__namespace.createElement(PerseusEditorAccordion, {
31268
31449
  expanded: true // Initial state is expanded
31269
31450
  ,
31270
- containerStyle: styles$m.container,
31271
- panelStyle: styles$m.accordionPanel,
31451
+ containerStyle: styles$n.container,
31452
+ panelStyle: styles$n.accordionPanel,
31272
31453
  header: /*#__PURE__*/React__namespace.createElement(wonderBlocksCore.View, {
31273
- style: styles$m.row
31454
+ style: styles$n.row
31274
31455
  }, /*#__PURE__*/React__namespace.createElement(wonderBlocksTypography.LabelLarge, null, `Tail (${tail[0]}, ${tail[1]})`))
31275
31456
  }, /*#__PURE__*/React__namespace.createElement(CoordinatePairInput, {
31276
31457
  coord: tail,
@@ -31281,10 +31462,10 @@ const LockedVectorSettings = props => {
31281
31462
  })), /*#__PURE__*/React__namespace.createElement(PerseusEditorAccordion, {
31282
31463
  expanded: true // Initial state is expanded
31283
31464
  ,
31284
- containerStyle: styles$m.container,
31285
- panelStyle: styles$m.accordionPanel,
31465
+ containerStyle: styles$n.container,
31466
+ panelStyle: styles$n.accordionPanel,
31286
31467
  header: /*#__PURE__*/React__namespace.createElement(wonderBlocksCore.View, {
31287
- style: styles$m.row
31468
+ style: styles$n.row
31288
31469
  }, /*#__PURE__*/React__namespace.createElement(wonderBlocksTypography.LabelLarge, null, `Tip (${tip[0]}, ${tip[1]})`))
31289
31470
  }, /*#__PURE__*/React__namespace.createElement(CoordinatePairInput, {
31290
31471
  coord: tip,
@@ -31298,7 +31479,7 @@ const LockedVectorSettings = props => {
31298
31479
  onRemove: onRemove
31299
31480
  }));
31300
31481
  };
31301
- const styles$m = aphrodite.StyleSheet.create({
31482
+ const styles$n = aphrodite.StyleSheet.create({
31302
31483
  accordionPanel: {
31303
31484
  paddingBottom: wonderBlocksTokens.spacing.medium_16
31304
31485
  },
@@ -31465,7 +31646,7 @@ const LockedFiguresSection = props => {
31465
31646
  onRemove: () => removeLockedFigure(index)
31466
31647
  }));
31467
31648
  }), /*#__PURE__*/React__namespace.createElement(wonderBlocksCore.View, {
31468
- style: styles$l.buttonContainer
31649
+ style: styles$m.buttonContainer
31469
31650
  }, /*#__PURE__*/React__namespace.createElement(LockedFigureSelect, {
31470
31651
  showM2bFeatures: props.showM2bFeatures,
31471
31652
  id: `${uniqueId}-select`,
@@ -31475,10 +31656,10 @@ const LockedFiguresSection = props => {
31475
31656
  }), showExpandButton && /*#__PURE__*/React__namespace.createElement(Button__default["default"], {
31476
31657
  kind: "secondary",
31477
31658
  onClick: () => toggleExpanded(allCollapsed),
31478
- style: styles$l.button
31659
+ style: styles$m.button
31479
31660
  }, buttonLabel))));
31480
31661
  };
31481
- const styles$l = aphrodite.StyleSheet.create({
31662
+ const styles$m = aphrodite.StyleSheet.create({
31482
31663
  buttonContainer: {
31483
31664
  flexDirection: "row",
31484
31665
  alignItems: "center"
@@ -31514,7 +31695,7 @@ const GraphPointsCountSelector = _ref => {
31514
31695
  // Never uses placeholder, always has value
31515
31696
  ,
31516
31697
  placeholder: "",
31517
- style: styles$k.singleSelectShort
31698
+ style: styles$l.singleSelectShort
31518
31699
  }, [...[...Array(7).keys()].map(n => /*#__PURE__*/React__namespace.createElement(wonderBlocksDropdown.OptionItem, {
31519
31700
  key: n,
31520
31701
  value: `${n}`,
@@ -31525,7 +31706,7 @@ const GraphPointsCountSelector = _ref => {
31525
31706
  label: "unlimited"
31526
31707
  })]);
31527
31708
  };
31528
- const styles$k = aphrodite.StyleSheet.create({
31709
+ const styles$l = aphrodite.StyleSheet.create({
31529
31710
  singleSelectShort: {
31530
31711
  // Non-standard spacing, but it's the smallest we can go
31531
31712
  // without running into styling issues with the dropdown.
@@ -31538,7 +31719,7 @@ const GraphTypeSelector = props => {
31538
31719
  selectedValue: props.graphType,
31539
31720
  onChange: props.onChange,
31540
31721
  placeholder: "Select a graph type",
31541
- style: styles$j.singleSelectShort
31722
+ style: styles$k.singleSelectShort
31542
31723
  }, /*#__PURE__*/React__namespace.createElement(wonderBlocksDropdown.OptionItem, {
31543
31724
  value: "linear",
31544
31725
  label: "Linear function"
@@ -31571,7 +31752,7 @@ const GraphTypeSelector = props => {
31571
31752
  label: "Angle"
31572
31753
  }));
31573
31754
  };
31574
- const styles$j = aphrodite.StyleSheet.create({
31755
+ const styles$k = aphrodite.StyleSheet.create({
31575
31756
  singleSelectShort: {
31576
31757
  // Non-standard spacing, but it's the smallest we can go
31577
31758
  // without running into styling issues with the dropdown.
@@ -32003,10 +32184,10 @@ class InteractiveGraphSettings extends React__namespace.Component {
32003
32184
  }
32004
32185
  }))), /*#__PURE__*/React__namespace.createElement(LabeledRow, {
32005
32186
  label: "Background image URL:",
32006
- style: styles$i.resetSpaceTop
32187
+ style: styles$j.resetSpaceTop
32007
32188
  }, /*#__PURE__*/React__namespace.createElement("input", {
32008
32189
  type: "text",
32009
- className: aphrodite.css(styles$i.backgroundUrlInput),
32190
+ className: aphrodite.css(styles$j.backgroundUrlInput),
32010
32191
  ref: this.bgUrlRef,
32011
32192
  value: this.state.backgroundImage.url || "",
32012
32193
  onChange: e => {
@@ -32022,9 +32203,9 @@ class InteractiveGraphSettings extends React__namespace.Component {
32022
32203
  onKeyPress: this.changeBackgroundUrl,
32023
32204
  onBlur: this.changeBackgroundUrl
32024
32205
  }), /*#__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, {
32025
- style: styles$i.protractorSection
32206
+ style: styles$j.protractorSection
32026
32207
  }, /*#__PURE__*/React__namespace.createElement(wonderBlocksCore.View, {
32027
- style: styles$i.checkboxRow
32208
+ style: styles$j.checkboxRow
32028
32209
  }, /*#__PURE__*/React__namespace.createElement(wonderBlocksForm.Checkbox, {
32029
32210
  label: "Show protractor",
32030
32211
  checked: this.props.showProtractor,
@@ -32033,7 +32214,7 @@ class InteractiveGraphSettings extends React__namespace.Component {
32033
32214
  showProtractor: value
32034
32215
  });
32035
32216
  },
32036
- style: styles$i.resetSpaceTop
32217
+ style: styles$j.resetSpaceTop
32037
32218
  })), this.props.showProtractor && /*#__PURE__*/React__namespace.createElement(Banner__default["default"], {
32038
32219
  layout: "floating",
32039
32220
  text: "The protractor is not accessible. Please consider an alternate approach.",
@@ -32041,7 +32222,7 @@ class InteractiveGraphSettings extends React__namespace.Component {
32041
32222
  }))));
32042
32223
  }
32043
32224
  }
32044
- const styles$i = aphrodite.StyleSheet.create({
32225
+ const styles$j = aphrodite.StyleSheet.create({
32045
32226
  resetSpaceTop: {
32046
32227
  marginTop: 0
32047
32228
  },
@@ -32080,14 +32261,14 @@ const SegmentCountSelector = _ref => {
32080
32261
  const num = +newValue;
32081
32262
  onChange(num);
32082
32263
  },
32083
- style: styles$h.singleSelectShort
32264
+ style: styles$i.singleSelectShort
32084
32265
  }, ___default["default"].range(1, 7).map(n => /*#__PURE__*/React__namespace.createElement(wonderBlocksDropdown.OptionItem, {
32085
32266
  key: n,
32086
32267
  value: `${n}`,
32087
32268
  label: `${n} segment${n > 1 ? "s" : ""}`
32088
32269
  })));
32089
32270
  };
32090
- const styles$h = aphrodite.StyleSheet.create({
32271
+ const styles$i = aphrodite.StyleSheet.create({
32091
32272
  singleSelectShort: {
32092
32273
  // Non-standard spacing, but it's the smallest we can go
32093
32274
  // without running into styling issues with the dropdown.
@@ -32097,14 +32278,60 @@ const styles$h = aphrodite.StyleSheet.create({
32097
32278
 
32098
32279
  const StartCoordsAngle = props => {
32099
32280
  const {
32100
- startCoords
32281
+ startCoords,
32282
+ onChange
32101
32283
  } = props;
32102
- return /*#__PURE__*/React__namespace.createElement(wonderBlocksCore.View, null, "WIP", /*#__PURE__*/React__namespace.createElement("br", null), " Start coords:", startCoords.map((coord, index) => {
32103
- return /*#__PURE__*/React__namespace.createElement(wonderBlocksCore.View, {
32104
- key: index
32105
- }, `Point ${index + 1}: (${coord[0]}, ${coord[1]})`);
32106
- }));
32284
+ return /*#__PURE__*/React__namespace.createElement(React__namespace.Fragment, null, /*#__PURE__*/React__namespace.createElement(wonderBlocksCore.View, {
32285
+ style: styles$h.equationSection
32286
+ }, /*#__PURE__*/React__namespace.createElement(wonderBlocksTypography.LabelMedium, null, "Starting equation:"), /*#__PURE__*/React__namespace.createElement(wonderBlocksTypography.BodyMonospace, {
32287
+ style: styles$h.equationBody
32288
+ }, getAngleEquation(startCoords))), /*#__PURE__*/React__namespace.createElement(wonderBlocksCore.View, {
32289
+ style: styles$h.tile
32290
+ }, /*#__PURE__*/React__namespace.createElement(wonderBlocksTypography.LabelLarge, null, "Point 1:"), /*#__PURE__*/React__namespace.createElement(Strut, {
32291
+ size: wonderBlocksTokens.spacing.small_12
32292
+ }), /*#__PURE__*/React__namespace.createElement(CoordinatePairInput, {
32293
+ coord: startCoords[0],
32294
+ labels: ["x", "y"],
32295
+ onChange: value => onChange([value, startCoords[1], startCoords[2]])
32296
+ })), /*#__PURE__*/React__namespace.createElement(wonderBlocksCore.View, {
32297
+ style: styles$h.tile
32298
+ }, /*#__PURE__*/React__namespace.createElement(wonderBlocksTypography.LabelLarge, null, "Vertex:"), /*#__PURE__*/React__namespace.createElement(Strut, {
32299
+ size: wonderBlocksTokens.spacing.small_12
32300
+ }), /*#__PURE__*/React__namespace.createElement(CoordinatePairInput, {
32301
+ coord: startCoords[1],
32302
+ labels: ["x", "y"],
32303
+ onChange: value => onChange([startCoords[0], value, startCoords[2]])
32304
+ })), /*#__PURE__*/React__namespace.createElement(wonderBlocksCore.View, {
32305
+ style: styles$h.tile
32306
+ }, /*#__PURE__*/React__namespace.createElement(wonderBlocksTypography.LabelLarge, null, "Point 2:"), /*#__PURE__*/React__namespace.createElement(Strut, {
32307
+ size: wonderBlocksTokens.spacing.small_12
32308
+ }), /*#__PURE__*/React__namespace.createElement(CoordinatePairInput, {
32309
+ coord: startCoords[2],
32310
+ labels: ["x", "y"],
32311
+ onChange: value => onChange([startCoords[0], startCoords[1], value])
32312
+ })));
32107
32313
  };
32314
+ const styles$h = aphrodite.StyleSheet.create({
32315
+ tile: {
32316
+ backgroundColor: wonderBlocksTokens.color.fadedBlue8,
32317
+ marginTop: wonderBlocksTokens.spacing.xSmall_8,
32318
+ padding: wonderBlocksTokens.spacing.small_12,
32319
+ borderRadius: wonderBlocksTokens.spacing.xSmall_8,
32320
+ flexDirection: "row",
32321
+ alignItems: "center"
32322
+ },
32323
+ equationSection: {
32324
+ marginTop: wonderBlocksTokens.spacing.small_12
32325
+ },
32326
+ equationBody: {
32327
+ backgroundColor: wonderBlocksTokens.color.fadedOffBlack8,
32328
+ border: `1px solid ${wonderBlocksTokens.color.fadedOffBlack32}`,
32329
+ marginTop: wonderBlocksTokens.spacing.xSmall_8,
32330
+ paddingLeft: wonderBlocksTokens.spacing.xSmall_8,
32331
+ paddingRight: wonderBlocksTokens.spacing.xSmall_8,
32332
+ fontSize: wonderBlocksTokens.font.size.xSmall
32333
+ }
32334
+ });
32108
32335
 
32109
32336
  const StartCoordsCircle = props => {
32110
32337
  const {
@@ -36993,6 +37220,7 @@ exports.AllEditors = AllEditors;
36993
37220
  exports.AllWidgets = AllWidgets;
36994
37221
  exports.ArticleDiff = ArticleDiff;
36995
37222
  exports.ArticleEditor = ArticleEditor;
37223
+ exports.ContentPreview = ContentPreview;
36996
37224
  exports.DeviceFramer = DeviceFramer;
36997
37225
  exports.Editor = Editor;
36998
37226
  exports.EditorPage = EditorPage;