@khanacademy/perseus-editor 43.0.2 → 44.0.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.
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sources":["../../src/version.ts","../../../../node_modules/.pnpm/react@18.2.0/node_modules/react/cjs/react-jsx-runtime.production.min.js","../../../../node_modules/.pnpm/react@18.2.0/node_modules/react/cjs/react-jsx-runtime.development.js","../../../../node_modules/.pnpm/react@18.2.0/node_modules/react/jsx-runtime.js","../../src/styles/constants.ts","../../src/components/device-framer.tsx","../../src/components/a11y-context.tsx","../../src/util/issue-ctas-utils.ts","../../src/util/item-editor-context.ts","../../src/components/issue-cta.tsx","../../src/components/perseus-editor-accordion.tsx","../../src/components/show-me-issue.tsx","../../src/components/issue-details.tsx","../../src/components/labeled-switch.tsx","../../src/components/toggleable-caret.tsx","../../src/components/issues-panel.tsx","../../src/components/json-editor.tsx","../../src/components/section-control-button.tsx","../../src/components/drag-target.tsx","../../src/components/info-tip/info-tip-base.tsx","../../src/components/info-tip/index.tsx","../../src/components/typed-single-select.tsx","../../src/components/util.ts","../../src/components/alignment-select.tsx","../../src/components/widget-editor-settings.tsx","../../src/components/widget-editor.tsx","../../src/components/widget-select.tsx","../../src/util/clipboard.ts","../../src/editor.tsx","../../src/messages.ts","../../src/preview/message-types.ts","../../src/preview/message-validators.ts","../../src/preview/sanitize-api-options.ts","../../src/preview/preview-data-sanitizer.ts","../../src/preview/use-preview-controller.ts","../../src/preview-with-iframe.tsx","../../src/katex-mhchem/parser.js","../../src/katex-mhchem/index.js","../../src/util/tex-error-detector.ts","../../src/article-editor.tsx","../../src/styles/icon-paths.ts","../../src/components/viewport-resizer.tsx","../../../../vendor/jsdiff/jsdiff.js","../../src/diffs/shared/split-diff.ts","../../src/diffs/shared/string-array-diff.ts","../../src/diffs/text-diff.tsx","../../src/diffs/image-widget-diff.tsx","../../src/diffs/shared/diff-entry.tsx","../../src/diffs/shared/widget-diff-performer.ts","../../src/diffs/widget-diff.tsx","../../src/diffs/renderer-diff.tsx","../../src/diffs/article-diff.tsx","../../src/diffs/answer-area-diff.tsx","../../src/diffs/item-diff.tsx","../../src/combined-hints-editor.tsx","../../src/extras-editor.tsx","../../src/util/derive-question-preview-content.ts","../../src/item-editor.tsx","../../src/util/derive-device-api-options.ts","../../src/util/gather-linter-issues.ts","../../src/editor-page.tsx","../../src/content-preview.tsx","../../src/preview/a11y/a11y-issues-list.ts","../../src/preview/a11y/map-axe-results.ts","../../src/preview/use-preview-presenter.ts","../../src/preview/a11y/overlays.tsx","../../src/components/text-list-editor.tsx","../../src/mixins/editor-jsonify.ts","../../src/widgets/categorizer-editor/categorizer-editor.tsx","../../src/components/blur-input.tsx","../../src/components/pairs-editor.tsx","../../src/mixins/changeable.ts","../../src/widgets/cs-program-editor/cs-program-editor.tsx","../../src/widgets/definition-editor/definition-editor.tsx","../../src/widgets/deprecated-standin-editor/deprecated-standin-editor.tsx","../../src/widgets/dropdown-editor/dropdown-editor.tsx","../../src/widgets/explanation-editor/explanation-editor.tsx","../../src/widgets/expression-editor/expression-editor.tsx","../../src/widgets/fill-in-the-blank-editor/fill-in-the-blank-editor.tsx","../../src/widgets/free-response-editor/free-response-editor.tsx","../../src/widgets/graded-group-editor/graded-group-editor.tsx","../../src/widgets/graded-group-set-editor/graded-group-set-editor.tsx","../../src/components/graph-settings.tsx","../../src/widgets/grapher-editor/grapher-editor.tsx","../../src/widgets/group-editor/group-editor.tsx","../../src/widgets/iframe-editor/iframe-editor.tsx","../../src/components/image-preview.tsx","../../src/widgets/image-editor/utils.ts","../../src/widgets/image-editor/components/dark-mode-toggle.tsx","../../src/widgets/image-editor/components/decorative-toggle.tsx","../../src/components/scrollless-number-text-field.tsx","../../src/widgets/image-editor/components/image-scale-input.tsx","../../src/widgets/image-editor/components/image-settings.tsx","../../src/widgets/image-editor/components/image-url-input.tsx","../../src/widgets/image-editor/image-editor.tsx","../../src/components/heading.tsx","../../src/components/segmented-control.tsx","../../src/widgets/numeric-input-editor/numeric-input-editor.tsx","../../src/widgets/input-number-editor/input-number-editor.tsx","../../src/widgets/interaction-editor/element-container.tsx","../../src/widgets/interaction-editor/color-picker.tsx","../../src/widgets/interaction-editor/dash-picker.tsx","../../src/widgets/interaction-editor/mathquill-input.tsx","../../src/widgets/interaction-editor/function-editor.tsx","../../src/widgets/interaction-editor/label-editor.tsx","../../src/widgets/interaction-editor/arrow-picker.tsx","../../src/widgets/interaction-editor/line-editor.tsx","../../src/widgets/interaction-editor/constraint-editor.tsx","../../src/widgets/interaction-editor/movable-line-editor.tsx","../../src/widgets/interaction-editor/movable-point-editor.tsx","../../src/widgets/interaction-editor/parametric-editor.tsx","../../src/widgets/interaction-editor/point-editor.tsx","../../src/widgets/interaction-editor/rectangle-editor.tsx","../../src/widgets/interaction-editor/interaction-editor.tsx","../../src/widgets/interactive-graph-editor/locked-figures/labeled-row.tsx","../../src/widgets/interactive-graph-editor/components/angle-answer-options.tsx","../../src/util/points.ts","../../src/widgets/interactive-graph-editor/components/graph-points-count-selector.tsx","../../src/widgets/interactive-graph-editor/components/graph-type-selector.tsx","../../src/widgets/interactive-graph-editor/components/interactive-graph-correct-answer.tsx","../../src/widgets/interactive-graph-editor/components/interactive-graph-description.tsx","../../src/widgets/interactive-graph-editor/components/axis-arrow-switches.tsx","../../src/widgets/interactive-graph-editor/components/axis-tick-switches.tsx","../../src/widgets/interactive-graph-editor/components/interactive-graph-settings.tsx","../../src/widgets/interactive-graph-editor/components/interactive-graph-sr-tree.tsx","../../src/widgets/interactive-graph-editor/components/polygon-answer-options.tsx","../../src/widgets/interactive-graph-editor/components/segment-count-selector.tsx","../../src/widgets/interactive-graph-editor/components/show-point-labels-toggle.tsx","../../src/widgets/interactive-graph-editor/components/vector-answer-options.tsx","../../src/widgets/interactive-graph-editor/locked-figures/locked-figure-select.tsx","../../src/components/angle-input.tsx","../../src/components/coordinate-pair-input.tsx","../../src/widgets/interactive-graph-editor/locked-figures/color-swatch.tsx","../../src/widgets/interactive-graph-editor/locked-figures/color-select.tsx","../../src/widgets/interactive-graph-editor/locked-figures/ellipse-swatch.tsx","../../src/widgets/interactive-graph-editor/locked-figures/line-stroke-select.tsx","../../src/widgets/interactive-graph-editor/locked-figures/line-weight-select.tsx","../../src/widgets/interactive-graph-editor/locked-figures/locked-figure-aria.tsx","../../src/widgets/interactive-graph-editor/locked-figures/locked-figure-settings-actions.tsx","../../src/widgets/interactive-graph-editor/locked-figures/locked-label-settings.tsx","../../src/widgets/interactive-graph-editor/locked-figures/util.ts","../../src/widgets/interactive-graph-editor/locked-figures/locked-ellipse-settings.tsx","../../src/widgets/interactive-graph-editor/locked-figures/line-swatch.tsx","../../src/widgets/interactive-graph-editor/locked-figures/locked-function-examples.ts","../../src/widgets/interactive-graph-editor/locked-figures/locked-function-settings.tsx","../../src/util/midpoint.ts","../../src/widgets/interactive-graph-editor/locked-figures/locked-point-settings.tsx","../../src/widgets/interactive-graph-editor/locked-figures/locked-line-settings.tsx","../../src/widgets/interactive-graph-editor/locked-figures/polygon-swatch.tsx","../../src/widgets/interactive-graph-editor/locked-figures/locked-polygon-settings.tsx","../../src/widgets/interactive-graph-editor/locked-figures/locked-vector-settings.tsx","../../src/widgets/interactive-graph-editor/locked-figures/locked-figure-settings.tsx","../../src/widgets/interactive-graph-editor/locked-figures/locked-figures-section.tsx","../../src/widgets/interactive-graph-editor/start-coords/coord-input.tsx","../../src/widgets/interactive-graph-editor/start-coords/start-coords-absolute-value.tsx","../../src/widgets/interactive-graph-editor/start-coords/util.ts","../../src/widgets/interactive-graph-editor/start-coords/start-coords-angle.tsx","../../src/widgets/interactive-graph-editor/start-coords/start-coords-circle.tsx","../../src/widgets/interactive-graph-editor/start-coords/asymptote-input.tsx","../../src/widgets/interactive-graph-editor/start-coords/start-coords-exponential.tsx","../../src/widgets/interactive-graph-editor/start-coords/start-coords-line.tsx","../../src/widgets/interactive-graph-editor/start-coords/start-coords-logarithm.tsx","../../src/widgets/interactive-graph-editor/start-coords/start-coords-multiline.tsx","../../src/widgets/interactive-graph-editor/start-coords/start-coords-point.tsx","../../src/widgets/interactive-graph-editor/start-coords/start-coords-quadratic.tsx","../../src/widgets/interactive-graph-editor/start-coords/start-coords-sinusoid.tsx","../../src/widgets/interactive-graph-editor/start-coords/start-coords-tangent.tsx","../../src/widgets/interactive-graph-editor/start-coords/start-coords-vector.tsx","../../src/widgets/interactive-graph-editor/start-coords/start-coords-settings.tsx","../../src/widgets/interactive-graph-editor/utils/reshape-point-labels.ts","../../src/widgets/interactive-graph-editor/interactive-graph-editor.tsx","../../src/styles/global-colors.ts","../../src/components/form-wrapped-text-field.tsx","../../src/widgets/label-image-editor/answer-choices.tsx","../../src/components/hover-behavior.ts","../../src/components/checkbox.tsx","../../src/widgets/label-image-editor/behavior.tsx","../../src/widgets/label-image-editor/marker.tsx","../../src/widgets/label-image-editor/question-markers.tsx","../../src/widgets/label-image-editor/select-image.tsx","../../src/widgets/label-image-editor/label-image-editor.tsx","../../src/widgets/matcher-editor/matcher-editor.tsx","../../src/widgets/matrix-editor/matrix-editor.tsx","../../src/widgets/measurer-editor/measurer-editor.tsx","../../src/widgets/number-line-editor/number-line-editor.tsx","../../src/widgets/orderer-editor/orderer-editor.tsx","../../src/widgets/phet-simulation-editor/phet-simulation-editor.tsx","../../src/widgets/plotter-editor/plotter-editor.tsx","../../src/widgets/python-program-editor/python-program-editor.tsx","../../src/widgets/radio-editor/radio-image-editor.tsx","../../src/widgets/radio-editor/utils.ts","../../src/widgets/radio-editor/radio-option-content-and-image-editor.tsx","../../src/widgets/radio-editor/radio-option-settings-actions.tsx","../../src/widgets/radio-editor/radio-status-pill.tsx","../../src/widgets/radio-editor/radio-option-settings.tsx","../../src/widgets/radio-editor/radio-editor.tsx","../../src/widgets/sorter-editor/card-editor.tsx","../../src/widgets/sorter-editor/sorter-editor.tsx","../../src/widgets/table-editor/table-editor.tsx","../../src/widgets/video-editor/video-settings.tsx","../../src/widgets/video-editor/video-editor.tsx","../../src/all-editors.ts","../../src/index.ts"],"sourcesContent":["// This file is processed by a Rollup plugin (replace) to inject the production\n// version number during the release build.\n// In dev, you'll never see the version number.\n\nimport {addLibraryVersionToPerseusDebug} from \"@khanacademy/perseus-utils\";\n\nconst libName = \"@khanacademy/perseus-editor\";\nexport const libVersion = \"__lib_version__\";\n\naddLibraryVersionToPerseusDebug(libName, libVersion);\n","/**\n * @license React\n * react-jsx-runtime.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var f=require(\"react\"),k=Symbol.for(\"react.element\"),l=Symbol.for(\"react.fragment\"),m=Object.prototype.hasOwnProperty,n=f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,p={key:!0,ref:!0,__self:!0,__source:!0};\nfunction q(c,a,g){var b,d={},e=null,h=null;void 0!==g&&(e=\"\"+g);void 0!==a.key&&(e=\"\"+a.key);void 0!==a.ref&&(h=a.ref);for(b in a)m.call(a,b)&&!p.hasOwnProperty(b)&&(d[b]=a[b]);if(c&&c.defaultProps)for(b in a=c.defaultProps,a)void 0===d[b]&&(d[b]=a[b]);return{$$typeof:k,type:c,key:e,ref:h,props:d,_owner:n.current}}exports.Fragment=l;exports.jsx=q;exports.jsxs=q;\n","/**\n * @license React\n * react-jsx-runtime.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nif (process.env.NODE_ENV !== \"production\") {\n (function() {\n'use strict';\n\nvar React = require('react');\n\n// ATTENTION\n// When adding new symbols to this file,\n// Please consider also adding to 'react-devtools-shared/src/backend/ReactSymbols'\n// The Symbol used to tag the ReactElement-like types.\nvar REACT_ELEMENT_TYPE = Symbol.for('react.element');\nvar REACT_PORTAL_TYPE = Symbol.for('react.portal');\nvar REACT_FRAGMENT_TYPE = Symbol.for('react.fragment');\nvar REACT_STRICT_MODE_TYPE = Symbol.for('react.strict_mode');\nvar REACT_PROFILER_TYPE = Symbol.for('react.profiler');\nvar REACT_PROVIDER_TYPE = Symbol.for('react.provider');\nvar REACT_CONTEXT_TYPE = Symbol.for('react.context');\nvar REACT_FORWARD_REF_TYPE = Symbol.for('react.forward_ref');\nvar REACT_SUSPENSE_TYPE = Symbol.for('react.suspense');\nvar REACT_SUSPENSE_LIST_TYPE = Symbol.for('react.suspense_list');\nvar REACT_MEMO_TYPE = Symbol.for('react.memo');\nvar REACT_LAZY_TYPE = Symbol.for('react.lazy');\nvar REACT_OFFSCREEN_TYPE = Symbol.for('react.offscreen');\nvar MAYBE_ITERATOR_SYMBOL = Symbol.iterator;\nvar FAUX_ITERATOR_SYMBOL = '@@iterator';\nfunction getIteratorFn(maybeIterable) {\n if (maybeIterable === null || typeof maybeIterable !== 'object') {\n return null;\n }\n\n var maybeIterator = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL];\n\n if (typeof maybeIterator === 'function') {\n return maybeIterator;\n }\n\n return null;\n}\n\nvar ReactSharedInternals = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\n\nfunction error(format) {\n {\n {\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n\n printWarning('error', format, args);\n }\n }\n}\n\nfunction printWarning(level, format, args) {\n // When changing this logic, you might want to also\n // update consoleWithStackDev.www.js as well.\n {\n var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n var stack = ReactDebugCurrentFrame.getStackAddendum();\n\n if (stack !== '') {\n format += '%s';\n args = args.concat([stack]);\n } // eslint-disable-next-line react-internal/safe-string-coercion\n\n\n var argsWithFormat = args.map(function (item) {\n return String(item);\n }); // Careful: RN currently depends on this prefix\n\n argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it\n // breaks IE9: https://github.com/facebook/react/issues/13610\n // eslint-disable-next-line react-internal/no-production-logging\n\n Function.prototype.apply.call(console[level], console, argsWithFormat);\n }\n}\n\n// -----------------------------------------------------------------------------\n\nvar enableScopeAPI = false; // Experimental Create Event Handle API.\nvar enableCacheElement = false;\nvar enableTransitionTracing = false; // No known bugs, but needs performance testing\n\nvar enableLegacyHidden = false; // Enables unstable_avoidThisFallback feature in Fiber\n// stuff. Intended to enable React core members to more easily debug scheduling\n// issues in DEV builds.\n\nvar enableDebugTracing = false; // Track which Fiber(s) schedule render work.\n\nvar REACT_MODULE_REFERENCE;\n\n{\n REACT_MODULE_REFERENCE = Symbol.for('react.module.reference');\n}\n\nfunction isValidElementType(type) {\n if (typeof type === 'string' || typeof type === 'function') {\n return true;\n } // Note: typeof might be other than 'symbol' or 'number' (e.g. if it's a polyfill).\n\n\n if (type === REACT_FRAGMENT_TYPE || type === REACT_PROFILER_TYPE || enableDebugTracing || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || enableLegacyHidden || type === REACT_OFFSCREEN_TYPE || enableScopeAPI || enableCacheElement || enableTransitionTracing ) {\n return true;\n }\n\n if (typeof type === 'object' && type !== null) {\n if (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || // This needs to include all possible module reference object\n // types supported by any Flight configuration anywhere since\n // we don't know which Flight build this will end up being used\n // with.\n type.$$typeof === REACT_MODULE_REFERENCE || type.getModuleId !== undefined) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction getWrappedName(outerType, innerType, wrapperName) {\n var displayName = outerType.displayName;\n\n if (displayName) {\n return displayName;\n }\n\n var functionName = innerType.displayName || innerType.name || '';\n return functionName !== '' ? wrapperName + \"(\" + functionName + \")\" : wrapperName;\n} // Keep in sync with react-reconciler/getComponentNameFromFiber\n\n\nfunction getContextName(type) {\n return type.displayName || 'Context';\n} // Note that the reconciler package should generally prefer to use getComponentNameFromFiber() instead.\n\n\nfunction getComponentNameFromType(type) {\n if (type == null) {\n // Host root, text node or just invalid type.\n return null;\n }\n\n {\n if (typeof type.tag === 'number') {\n error('Received an unexpected object in getComponentNameFromType(). ' + 'This is likely a bug in React. Please file an issue.');\n }\n }\n\n if (typeof type === 'function') {\n return type.displayName || type.name || null;\n }\n\n if (typeof type === 'string') {\n return type;\n }\n\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n return 'Fragment';\n\n case REACT_PORTAL_TYPE:\n return 'Portal';\n\n case REACT_PROFILER_TYPE:\n return 'Profiler';\n\n case REACT_STRICT_MODE_TYPE:\n return 'StrictMode';\n\n case REACT_SUSPENSE_TYPE:\n return 'Suspense';\n\n case REACT_SUSPENSE_LIST_TYPE:\n return 'SuspenseList';\n\n }\n\n if (typeof type === 'object') {\n switch (type.$$typeof) {\n case REACT_CONTEXT_TYPE:\n var context = type;\n return getContextName(context) + '.Consumer';\n\n case REACT_PROVIDER_TYPE:\n var provider = type;\n return getContextName(provider._context) + '.Provider';\n\n case REACT_FORWARD_REF_TYPE:\n return getWrappedName(type, type.render, 'ForwardRef');\n\n case REACT_MEMO_TYPE:\n var outerName = type.displayName || null;\n\n if (outerName !== null) {\n return outerName;\n }\n\n return getComponentNameFromType(type.type) || 'Memo';\n\n case REACT_LAZY_TYPE:\n {\n var lazyComponent = type;\n var payload = lazyComponent._payload;\n var init = lazyComponent._init;\n\n try {\n return getComponentNameFromType(init(payload));\n } catch (x) {\n return null;\n }\n }\n\n // eslint-disable-next-line no-fallthrough\n }\n }\n\n return null;\n}\n\nvar assign = Object.assign;\n\n// Helpers to patch console.logs to avoid logging during side-effect free\n// replaying on render function. This currently only patches the object\n// lazily which won't cover if the log function was extracted eagerly.\n// We could also eagerly patch the method.\nvar disabledDepth = 0;\nvar prevLog;\nvar prevInfo;\nvar prevWarn;\nvar prevError;\nvar prevGroup;\nvar prevGroupCollapsed;\nvar prevGroupEnd;\n\nfunction disabledLog() {}\n\ndisabledLog.__reactDisabledLog = true;\nfunction disableLogs() {\n {\n if (disabledDepth === 0) {\n /* eslint-disable react-internal/no-production-logging */\n prevLog = console.log;\n prevInfo = console.info;\n prevWarn = console.warn;\n prevError = console.error;\n prevGroup = console.group;\n prevGroupCollapsed = console.groupCollapsed;\n prevGroupEnd = console.groupEnd; // https://github.com/facebook/react/issues/19099\n\n var props = {\n configurable: true,\n enumerable: true,\n value: disabledLog,\n writable: true\n }; // $FlowFixMe Flow thinks console is immutable.\n\n Object.defineProperties(console, {\n info: props,\n log: props,\n warn: props,\n error: props,\n group: props,\n groupCollapsed: props,\n groupEnd: props\n });\n /* eslint-enable react-internal/no-production-logging */\n }\n\n disabledDepth++;\n }\n}\nfunction reenableLogs() {\n {\n disabledDepth--;\n\n if (disabledDepth === 0) {\n /* eslint-disable react-internal/no-production-logging */\n var props = {\n configurable: true,\n enumerable: true,\n writable: true\n }; // $FlowFixMe Flow thinks console is immutable.\n\n Object.defineProperties(console, {\n log: assign({}, props, {\n value: prevLog\n }),\n info: assign({}, props, {\n value: prevInfo\n }),\n warn: assign({}, props, {\n value: prevWarn\n }),\n error: assign({}, props, {\n value: prevError\n }),\n group: assign({}, props, {\n value: prevGroup\n }),\n groupCollapsed: assign({}, props, {\n value: prevGroupCollapsed\n }),\n groupEnd: assign({}, props, {\n value: prevGroupEnd\n })\n });\n /* eslint-enable react-internal/no-production-logging */\n }\n\n if (disabledDepth < 0) {\n error('disabledDepth fell below zero. ' + 'This is a bug in React. Please file an issue.');\n }\n }\n}\n\nvar ReactCurrentDispatcher = ReactSharedInternals.ReactCurrentDispatcher;\nvar prefix;\nfunction describeBuiltInComponentFrame(name, source, ownerFn) {\n {\n if (prefix === undefined) {\n // Extract the VM specific prefix used by each line.\n try {\n throw Error();\n } catch (x) {\n var match = x.stack.trim().match(/\\n( *(at )?)/);\n prefix = match && match[1] || '';\n }\n } // We use the prefix to ensure our stacks line up with native stack frames.\n\n\n return '\\n' + prefix + name;\n }\n}\nvar reentry = false;\nvar componentFrameCache;\n\n{\n var PossiblyWeakMap = typeof WeakMap === 'function' ? WeakMap : Map;\n componentFrameCache = new PossiblyWeakMap();\n}\n\nfunction describeNativeComponentFrame(fn, construct) {\n // If something asked for a stack inside a fake render, it should get ignored.\n if ( !fn || reentry) {\n return '';\n }\n\n {\n var frame = componentFrameCache.get(fn);\n\n if (frame !== undefined) {\n return frame;\n }\n }\n\n var control;\n reentry = true;\n var previousPrepareStackTrace = Error.prepareStackTrace; // $FlowFixMe It does accept undefined.\n\n Error.prepareStackTrace = undefined;\n var previousDispatcher;\n\n {\n previousDispatcher = ReactCurrentDispatcher.current; // Set the dispatcher in DEV because this might be call in the render function\n // for warnings.\n\n ReactCurrentDispatcher.current = null;\n disableLogs();\n }\n\n try {\n // This should throw.\n if (construct) {\n // Something should be setting the props in the constructor.\n var Fake = function () {\n throw Error();\n }; // $FlowFixMe\n\n\n Object.defineProperty(Fake.prototype, 'props', {\n set: function () {\n // We use a throwing setter instead of frozen or non-writable props\n // because that won't throw in a non-strict mode function.\n throw Error();\n }\n });\n\n if (typeof Reflect === 'object' && Reflect.construct) {\n // We construct a different control for this case to include any extra\n // frames added by the construct call.\n try {\n Reflect.construct(Fake, []);\n } catch (x) {\n control = x;\n }\n\n Reflect.construct(fn, [], Fake);\n } else {\n try {\n Fake.call();\n } catch (x) {\n control = x;\n }\n\n fn.call(Fake.prototype);\n }\n } else {\n try {\n throw Error();\n } catch (x) {\n control = x;\n }\n\n fn();\n }\n } catch (sample) {\n // This is inlined manually because closure doesn't do it for us.\n if (sample && control && typeof sample.stack === 'string') {\n // This extracts the first frame from the sample that isn't also in the control.\n // Skipping one frame that we assume is the frame that calls the two.\n var sampleLines = sample.stack.split('\\n');\n var controlLines = control.stack.split('\\n');\n var s = sampleLines.length - 1;\n var c = controlLines.length - 1;\n\n while (s >= 1 && c >= 0 && sampleLines[s] !== controlLines[c]) {\n // We expect at least one stack frame to be shared.\n // Typically this will be the root most one. However, stack frames may be\n // cut off due to maximum stack limits. In this case, one maybe cut off\n // earlier than the other. We assume that the sample is longer or the same\n // and there for cut off earlier. So we should find the root most frame in\n // the sample somewhere in the control.\n c--;\n }\n\n for (; s >= 1 && c >= 0; s--, c--) {\n // Next we find the first one that isn't the same which should be the\n // frame that called our sample function and the control.\n if (sampleLines[s] !== controlLines[c]) {\n // In V8, the first line is describing the message but other VMs don't.\n // If we're about to return the first line, and the control is also on the same\n // line, that's a pretty good indicator that our sample threw at same line as\n // the control. I.e. before we entered the sample frame. So we ignore this result.\n // This can happen if you passed a class to function component, or non-function.\n if (s !== 1 || c !== 1) {\n do {\n s--;\n c--; // We may still have similar intermediate frames from the construct call.\n // The next one that isn't the same should be our match though.\n\n if (c < 0 || sampleLines[s] !== controlLines[c]) {\n // V8 adds a \"new\" prefix for native classes. Let's remove it to make it prettier.\n var _frame = '\\n' + sampleLines[s].replace(' at new ', ' at '); // If our component frame is labeled \"<anonymous>\"\n // but we have a user-provided \"displayName\"\n // splice it in to make the stack more readable.\n\n\n if (fn.displayName && _frame.includes('<anonymous>')) {\n _frame = _frame.replace('<anonymous>', fn.displayName);\n }\n\n {\n if (typeof fn === 'function') {\n componentFrameCache.set(fn, _frame);\n }\n } // Return the line we found.\n\n\n return _frame;\n }\n } while (s >= 1 && c >= 0);\n }\n\n break;\n }\n }\n }\n } finally {\n reentry = false;\n\n {\n ReactCurrentDispatcher.current = previousDispatcher;\n reenableLogs();\n }\n\n Error.prepareStackTrace = previousPrepareStackTrace;\n } // Fallback to just using the name if we couldn't make it throw.\n\n\n var name = fn ? fn.displayName || fn.name : '';\n var syntheticFrame = name ? describeBuiltInComponentFrame(name) : '';\n\n {\n if (typeof fn === 'function') {\n componentFrameCache.set(fn, syntheticFrame);\n }\n }\n\n return syntheticFrame;\n}\nfunction describeFunctionComponentFrame(fn, source, ownerFn) {\n {\n return describeNativeComponentFrame(fn, false);\n }\n}\n\nfunction shouldConstruct(Component) {\n var prototype = Component.prototype;\n return !!(prototype && prototype.isReactComponent);\n}\n\nfunction describeUnknownElementTypeFrameInDEV(type, source, ownerFn) {\n\n if (type == null) {\n return '';\n }\n\n if (typeof type === 'function') {\n {\n return describeNativeComponentFrame(type, shouldConstruct(type));\n }\n }\n\n if (typeof type === 'string') {\n return describeBuiltInComponentFrame(type);\n }\n\n switch (type) {\n case REACT_SUSPENSE_TYPE:\n return describeBuiltInComponentFrame('Suspense');\n\n case REACT_SUSPENSE_LIST_TYPE:\n return describeBuiltInComponentFrame('SuspenseList');\n }\n\n if (typeof type === 'object') {\n switch (type.$$typeof) {\n case REACT_FORWARD_REF_TYPE:\n return describeFunctionComponentFrame(type.render);\n\n case REACT_MEMO_TYPE:\n // Memo may contain any component type so we recursively resolve it.\n return describeUnknownElementTypeFrameInDEV(type.type, source, ownerFn);\n\n case REACT_LAZY_TYPE:\n {\n var lazyComponent = type;\n var payload = lazyComponent._payload;\n var init = lazyComponent._init;\n\n try {\n // Lazy may contain any component type so we recursively resolve it.\n return describeUnknownElementTypeFrameInDEV(init(payload), source, ownerFn);\n } catch (x) {}\n }\n }\n }\n\n return '';\n}\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nvar loggedTypeFailures = {};\nvar ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n\nfunction setCurrentlyValidatingElement(element) {\n {\n if (element) {\n var owner = element._owner;\n var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null);\n ReactDebugCurrentFrame.setExtraStackFrame(stack);\n } else {\n ReactDebugCurrentFrame.setExtraStackFrame(null);\n }\n }\n}\n\nfunction checkPropTypes(typeSpecs, values, location, componentName, element) {\n {\n // $FlowFixMe This is okay but Flow doesn't know it.\n var has = Function.call.bind(hasOwnProperty);\n\n for (var typeSpecName in typeSpecs) {\n if (has(typeSpecs, typeSpecName)) {\n var error$1 = void 0; // Prop type validation may throw. In case they do, we don't want to\n // fail the render phase where it didn't fail before. So we log it.\n // After these have been cleaned up, we'll let them throw.\n\n try {\n // This is intentionally an invariant that gets caught. It's the same\n // behavior as without this statement except with a better message.\n if (typeof typeSpecs[typeSpecName] !== 'function') {\n // eslint-disable-next-line react-internal/prod-error-codes\n var err = Error((componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' + 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' + 'This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.');\n err.name = 'Invariant Violation';\n throw err;\n }\n\n error$1 = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED');\n } catch (ex) {\n error$1 = ex;\n }\n\n if (error$1 && !(error$1 instanceof Error)) {\n setCurrentlyValidatingElement(element);\n\n error('%s: type specification of %s' + ' `%s` is invalid; the type checker ' + 'function must return `null` or an `Error` but returned a %s. ' + 'You may have forgotten to pass an argument to the type checker ' + 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' + 'shape all require an argument).', componentName || 'React class', location, typeSpecName, typeof error$1);\n\n setCurrentlyValidatingElement(null);\n }\n\n if (error$1 instanceof Error && !(error$1.message in loggedTypeFailures)) {\n // Only monitor this failure once because there tends to be a lot of the\n // same error.\n loggedTypeFailures[error$1.message] = true;\n setCurrentlyValidatingElement(element);\n\n error('Failed %s type: %s', location, error$1.message);\n\n setCurrentlyValidatingElement(null);\n }\n }\n }\n }\n}\n\nvar isArrayImpl = Array.isArray; // eslint-disable-next-line no-redeclare\n\nfunction isArray(a) {\n return isArrayImpl(a);\n}\n\n/*\n * The `'' + value` pattern (used in in perf-sensitive code) throws for Symbol\n * and Temporal.* types. See https://github.com/facebook/react/pull/22064.\n *\n * The functions in this module will throw an easier-to-understand,\n * easier-to-debug exception with a clear errors message message explaining the\n * problem. (Instead of a confusing exception thrown inside the implementation\n * of the `value` object).\n */\n// $FlowFixMe only called in DEV, so void return is not possible.\nfunction typeName(value) {\n {\n // toStringTag is needed for namespaced types like Temporal.Instant\n var hasToStringTag = typeof Symbol === 'function' && Symbol.toStringTag;\n var type = hasToStringTag && value[Symbol.toStringTag] || value.constructor.name || 'Object';\n return type;\n }\n} // $FlowFixMe only called in DEV, so void return is not possible.\n\n\nfunction willCoercionThrow(value) {\n {\n try {\n testStringCoercion(value);\n return false;\n } catch (e) {\n return true;\n }\n }\n}\n\nfunction testStringCoercion(value) {\n // If you ended up here by following an exception call stack, here's what's\n // happened: you supplied an object or symbol value to React (as a prop, key,\n // DOM attribute, CSS property, string ref, etc.) and when React tried to\n // coerce it to a string using `'' + value`, an exception was thrown.\n //\n // The most common types that will cause this exception are `Symbol` instances\n // and Temporal objects like `Temporal.Instant`. But any object that has a\n // `valueOf` or `[Symbol.toPrimitive]` method that throws will also cause this\n // exception. (Library authors do this to prevent users from using built-in\n // numeric operators like `+` or comparison operators like `>=` because custom\n // methods are needed to perform accurate arithmetic or comparison.)\n //\n // To fix the problem, coerce this object or symbol value to a string before\n // passing it to React. The most reliable way is usually `String(value)`.\n //\n // To find which value is throwing, check the browser or debugger console.\n // Before this exception was thrown, there should be `console.error` output\n // that shows the type (Symbol, Temporal.PlainDate, etc.) that caused the\n // problem and how that type was used: key, atrribute, input value prop, etc.\n // In most cases, this console output also shows the component and its\n // ancestor components where the exception happened.\n //\n // eslint-disable-next-line react-internal/safe-string-coercion\n return '' + value;\n}\nfunction checkKeyStringCoercion(value) {\n {\n if (willCoercionThrow(value)) {\n error('The provided key is an unsupported type %s.' + ' This value must be coerced to a string before before using it here.', typeName(value));\n\n return testStringCoercion(value); // throw (to help callers find troubleshooting comments)\n }\n }\n}\n\nvar ReactCurrentOwner = ReactSharedInternals.ReactCurrentOwner;\nvar RESERVED_PROPS = {\n key: true,\n ref: true,\n __self: true,\n __source: true\n};\nvar specialPropKeyWarningShown;\nvar specialPropRefWarningShown;\nvar didWarnAboutStringRefs;\n\n{\n didWarnAboutStringRefs = {};\n}\n\nfunction hasValidRef(config) {\n {\n if (hasOwnProperty.call(config, 'ref')) {\n var getter = Object.getOwnPropertyDescriptor(config, 'ref').get;\n\n if (getter && getter.isReactWarning) {\n return false;\n }\n }\n }\n\n return config.ref !== undefined;\n}\n\nfunction hasValidKey(config) {\n {\n if (hasOwnProperty.call(config, 'key')) {\n var getter = Object.getOwnPropertyDescriptor(config, 'key').get;\n\n if (getter && getter.isReactWarning) {\n return false;\n }\n }\n }\n\n return config.key !== undefined;\n}\n\nfunction warnIfStringRefCannotBeAutoConverted(config, self) {\n {\n if (typeof config.ref === 'string' && ReactCurrentOwner.current && self && ReactCurrentOwner.current.stateNode !== self) {\n var componentName = getComponentNameFromType(ReactCurrentOwner.current.type);\n\n if (!didWarnAboutStringRefs[componentName]) {\n error('Component \"%s\" contains the string ref \"%s\". ' + 'Support for string refs will be removed in a future major release. ' + 'This case cannot be automatically converted to an arrow function. ' + 'We ask you to manually fix this case by using useRef() or createRef() instead. ' + 'Learn more about using refs safely here: ' + 'https://reactjs.org/link/strict-mode-string-ref', getComponentNameFromType(ReactCurrentOwner.current.type), config.ref);\n\n didWarnAboutStringRefs[componentName] = true;\n }\n }\n }\n}\n\nfunction defineKeyPropWarningGetter(props, displayName) {\n {\n var warnAboutAccessingKey = function () {\n if (!specialPropKeyWarningShown) {\n specialPropKeyWarningShown = true;\n\n error('%s: `key` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName);\n }\n };\n\n warnAboutAccessingKey.isReactWarning = true;\n Object.defineProperty(props, 'key', {\n get: warnAboutAccessingKey,\n configurable: true\n });\n }\n}\n\nfunction defineRefPropWarningGetter(props, displayName) {\n {\n var warnAboutAccessingRef = function () {\n if (!specialPropRefWarningShown) {\n specialPropRefWarningShown = true;\n\n error('%s: `ref` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName);\n }\n };\n\n warnAboutAccessingRef.isReactWarning = true;\n Object.defineProperty(props, 'ref', {\n get: warnAboutAccessingRef,\n configurable: true\n });\n }\n}\n/**\n * Factory method to create a new React element. This no longer adheres to\n * the class pattern, so do not use new to call it. Also, instanceof check\n * will not work. Instead test $$typeof field against Symbol.for('react.element') to check\n * if something is a React Element.\n *\n * @param {*} type\n * @param {*} props\n * @param {*} key\n * @param {string|object} ref\n * @param {*} owner\n * @param {*} self A *temporary* helper to detect places where `this` is\n * different from the `owner` when React.createElement is called, so that we\n * can warn. We want to get rid of owner and replace string `ref`s with arrow\n * functions, and as long as `this` and owner are the same, there will be no\n * change in behavior.\n * @param {*} source An annotation object (added by a transpiler or otherwise)\n * indicating filename, line number, and/or other information.\n * @internal\n */\n\n\nvar ReactElement = function (type, key, ref, self, source, owner, props) {\n var element = {\n // This tag allows us to uniquely identify this as a React Element\n $$typeof: REACT_ELEMENT_TYPE,\n // Built-in properties that belong on the element\n type: type,\n key: key,\n ref: ref,\n props: props,\n // Record the component responsible for creating this element.\n _owner: owner\n };\n\n {\n // The validation flag is currently mutative. We put it on\n // an external backing store so that we can freeze the whole object.\n // This can be replaced with a WeakMap once they are implemented in\n // commonly used development environments.\n element._store = {}; // To make comparing ReactElements easier for testing purposes, we make\n // the validation flag non-enumerable (where possible, which should\n // include every environment we run tests in), so the test framework\n // ignores it.\n\n Object.defineProperty(element._store, 'validated', {\n configurable: false,\n enumerable: false,\n writable: true,\n value: false\n }); // self and source are DEV only properties.\n\n Object.defineProperty(element, '_self', {\n configurable: false,\n enumerable: false,\n writable: false,\n value: self\n }); // Two elements created in two different places should be considered\n // equal for testing purposes and therefore we hide it from enumeration.\n\n Object.defineProperty(element, '_source', {\n configurable: false,\n enumerable: false,\n writable: false,\n value: source\n });\n\n if (Object.freeze) {\n Object.freeze(element.props);\n Object.freeze(element);\n }\n }\n\n return element;\n};\n/**\n * https://github.com/reactjs/rfcs/pull/107\n * @param {*} type\n * @param {object} props\n * @param {string} key\n */\n\nfunction jsxDEV(type, config, maybeKey, source, self) {\n {\n var propName; // Reserved names are extracted\n\n var props = {};\n var key = null;\n var ref = null; // Currently, key can be spread in as a prop. This causes a potential\n // issue if key is also explicitly declared (ie. <div {...props} key=\"Hi\" />\n // or <div key=\"Hi\" {...props} /> ). We want to deprecate key spread,\n // but as an intermediary step, we will use jsxDEV for everything except\n // <div {...props} key=\"Hi\" />, because we aren't currently able to tell if\n // key is explicitly declared to be undefined or not.\n\n if (maybeKey !== undefined) {\n {\n checkKeyStringCoercion(maybeKey);\n }\n\n key = '' + maybeKey;\n }\n\n if (hasValidKey(config)) {\n {\n checkKeyStringCoercion(config.key);\n }\n\n key = '' + config.key;\n }\n\n if (hasValidRef(config)) {\n ref = config.ref;\n warnIfStringRefCannotBeAutoConverted(config, self);\n } // Remaining properties are added to a new props object\n\n\n for (propName in config) {\n if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {\n props[propName] = config[propName];\n }\n } // Resolve default props\n\n\n if (type && type.defaultProps) {\n var defaultProps = type.defaultProps;\n\n for (propName in defaultProps) {\n if (props[propName] === undefined) {\n props[propName] = defaultProps[propName];\n }\n }\n }\n\n if (key || ref) {\n var displayName = typeof type === 'function' ? type.displayName || type.name || 'Unknown' : type;\n\n if (key) {\n defineKeyPropWarningGetter(props, displayName);\n }\n\n if (ref) {\n defineRefPropWarningGetter(props, displayName);\n }\n }\n\n return ReactElement(type, key, ref, self, source, ReactCurrentOwner.current, props);\n }\n}\n\nvar ReactCurrentOwner$1 = ReactSharedInternals.ReactCurrentOwner;\nvar ReactDebugCurrentFrame$1 = ReactSharedInternals.ReactDebugCurrentFrame;\n\nfunction setCurrentlyValidatingElement$1(element) {\n {\n if (element) {\n var owner = element._owner;\n var stack = describeUnknownElementTypeFrameInDEV(element.type, element._source, owner ? owner.type : null);\n ReactDebugCurrentFrame$1.setExtraStackFrame(stack);\n } else {\n ReactDebugCurrentFrame$1.setExtraStackFrame(null);\n }\n }\n}\n\nvar propTypesMisspellWarningShown;\n\n{\n propTypesMisspellWarningShown = false;\n}\n/**\n * Verifies the object is a ReactElement.\n * See https://reactjs.org/docs/react-api.html#isvalidelement\n * @param {?object} object\n * @return {boolean} True if `object` is a ReactElement.\n * @final\n */\n\n\nfunction isValidElement(object) {\n {\n return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\n }\n}\n\nfunction getDeclarationErrorAddendum() {\n {\n if (ReactCurrentOwner$1.current) {\n var name = getComponentNameFromType(ReactCurrentOwner$1.current.type);\n\n if (name) {\n return '\\n\\nCheck the render method of `' + name + '`.';\n }\n }\n\n return '';\n }\n}\n\nfunction getSourceInfoErrorAddendum(source) {\n {\n if (source !== undefined) {\n var fileName = source.fileName.replace(/^.*[\\\\\\/]/, '');\n var lineNumber = source.lineNumber;\n return '\\n\\nCheck your code at ' + fileName + ':' + lineNumber + '.';\n }\n\n return '';\n }\n}\n/**\n * Warn if there's no key explicitly set on dynamic arrays of children or\n * object keys are not valid. This allows us to keep track of children between\n * updates.\n */\n\n\nvar ownerHasKeyUseWarning = {};\n\nfunction getCurrentComponentErrorInfo(parentType) {\n {\n var info = getDeclarationErrorAddendum();\n\n if (!info) {\n var parentName = typeof parentType === 'string' ? parentType : parentType.displayName || parentType.name;\n\n if (parentName) {\n info = \"\\n\\nCheck the top-level render call using <\" + parentName + \">.\";\n }\n }\n\n return info;\n }\n}\n/**\n * Warn if the element doesn't have an explicit key assigned to it.\n * This element is in an array. The array could grow and shrink or be\n * reordered. All children that haven't already been validated are required to\n * have a \"key\" property assigned to it. Error statuses are cached so a warning\n * will only be shown once.\n *\n * @internal\n * @param {ReactElement} element Element that requires a key.\n * @param {*} parentType element's parent's type.\n */\n\n\nfunction validateExplicitKey(element, parentType) {\n {\n if (!element._store || element._store.validated || element.key != null) {\n return;\n }\n\n element._store.validated = true;\n var currentComponentErrorInfo = getCurrentComponentErrorInfo(parentType);\n\n if (ownerHasKeyUseWarning[currentComponentErrorInfo]) {\n return;\n }\n\n ownerHasKeyUseWarning[currentComponentErrorInfo] = true; // Usually the current owner is the offender, but if it accepts children as a\n // property, it may be the creator of the child that's responsible for\n // assigning it a key.\n\n var childOwner = '';\n\n if (element && element._owner && element._owner !== ReactCurrentOwner$1.current) {\n // Give the component that originally created this child.\n childOwner = \" It was passed a child from \" + getComponentNameFromType(element._owner.type) + \".\";\n }\n\n setCurrentlyValidatingElement$1(element);\n\n error('Each child in a list should have a unique \"key\" prop.' + '%s%s See https://reactjs.org/link/warning-keys for more information.', currentComponentErrorInfo, childOwner);\n\n setCurrentlyValidatingElement$1(null);\n }\n}\n/**\n * Ensure that every element either is passed in a static location, in an\n * array with an explicit keys property defined, or in an object literal\n * with valid key property.\n *\n * @internal\n * @param {ReactNode} node Statically passed child of any type.\n * @param {*} parentType node's parent's type.\n */\n\n\nfunction validateChildKeys(node, parentType) {\n {\n if (typeof node !== 'object') {\n return;\n }\n\n if (isArray(node)) {\n for (var i = 0; i < node.length; i++) {\n var child = node[i];\n\n if (isValidElement(child)) {\n validateExplicitKey(child, parentType);\n }\n }\n } else if (isValidElement(node)) {\n // This element was passed in a valid location.\n if (node._store) {\n node._store.validated = true;\n }\n } else if (node) {\n var iteratorFn = getIteratorFn(node);\n\n if (typeof iteratorFn === 'function') {\n // Entry iterators used to provide implicit keys,\n // but now we print a separate warning for them later.\n if (iteratorFn !== node.entries) {\n var iterator = iteratorFn.call(node);\n var step;\n\n while (!(step = iterator.next()).done) {\n if (isValidElement(step.value)) {\n validateExplicitKey(step.value, parentType);\n }\n }\n }\n }\n }\n }\n}\n/**\n * Given an element, validate that its props follow the propTypes definition,\n * provided by the type.\n *\n * @param {ReactElement} element\n */\n\n\nfunction validatePropTypes(element) {\n {\n var type = element.type;\n\n if (type === null || type === undefined || typeof type === 'string') {\n return;\n }\n\n var propTypes;\n\n if (typeof type === 'function') {\n propTypes = type.propTypes;\n } else if (typeof type === 'object' && (type.$$typeof === REACT_FORWARD_REF_TYPE || // Note: Memo only checks outer props here.\n // Inner props are checked in the reconciler.\n type.$$typeof === REACT_MEMO_TYPE)) {\n propTypes = type.propTypes;\n } else {\n return;\n }\n\n if (propTypes) {\n // Intentionally inside to avoid triggering lazy initializers:\n var name = getComponentNameFromType(type);\n checkPropTypes(propTypes, element.props, 'prop', name, element);\n } else if (type.PropTypes !== undefined && !propTypesMisspellWarningShown) {\n propTypesMisspellWarningShown = true; // Intentionally inside to avoid triggering lazy initializers:\n\n var _name = getComponentNameFromType(type);\n\n error('Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?', _name || 'Unknown');\n }\n\n if (typeof type.getDefaultProps === 'function' && !type.getDefaultProps.isReactClassApproved) {\n error('getDefaultProps is only used on classic React.createClass ' + 'definitions. Use a static property named `defaultProps` instead.');\n }\n }\n}\n/**\n * Given a fragment, validate that it can only be provided with fragment props\n * @param {ReactElement} fragment\n */\n\n\nfunction validateFragmentProps(fragment) {\n {\n var keys = Object.keys(fragment.props);\n\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n\n if (key !== 'children' && key !== 'key') {\n setCurrentlyValidatingElement$1(fragment);\n\n error('Invalid prop `%s` supplied to `React.Fragment`. ' + 'React.Fragment can only have `key` and `children` props.', key);\n\n setCurrentlyValidatingElement$1(null);\n break;\n }\n }\n\n if (fragment.ref !== null) {\n setCurrentlyValidatingElement$1(fragment);\n\n error('Invalid attribute `ref` supplied to `React.Fragment`.');\n\n setCurrentlyValidatingElement$1(null);\n }\n }\n}\n\nfunction jsxWithValidation(type, props, key, isStaticChildren, source, self) {\n {\n var validType = isValidElementType(type); // We warn in this case but don't throw. We expect the element creation to\n // succeed and there will likely be errors in render.\n\n if (!validType) {\n var info = '';\n\n if (type === undefined || typeof type === 'object' && type !== null && Object.keys(type).length === 0) {\n info += ' You likely forgot to export your component from the file ' + \"it's defined in, or you might have mixed up default and named imports.\";\n }\n\n var sourceInfo = getSourceInfoErrorAddendum(source);\n\n if (sourceInfo) {\n info += sourceInfo;\n } else {\n info += getDeclarationErrorAddendum();\n }\n\n var typeString;\n\n if (type === null) {\n typeString = 'null';\n } else if (isArray(type)) {\n typeString = 'array';\n } else if (type !== undefined && type.$$typeof === REACT_ELEMENT_TYPE) {\n typeString = \"<\" + (getComponentNameFromType(type.type) || 'Unknown') + \" />\";\n info = ' Did you accidentally export a JSX literal instead of a component?';\n } else {\n typeString = typeof type;\n }\n\n error('React.jsx: type is invalid -- expected a string (for ' + 'built-in components) or a class/function (for composite ' + 'components) but got: %s.%s', typeString, info);\n }\n\n var element = jsxDEV(type, props, key, source, self); // The result can be nullish if a mock or a custom function is used.\n // TODO: Drop this when these are no longer allowed as the type argument.\n\n if (element == null) {\n return element;\n } // Skip key warning if the type isn't valid since our key validation logic\n // doesn't expect a non-string/function type and can throw confusing errors.\n // We don't want exception behavior to differ between dev and prod.\n // (Rendering will throw with a helpful message and as soon as the type is\n // fixed, the key warnings will appear.)\n\n\n if (validType) {\n var children = props.children;\n\n if (children !== undefined) {\n if (isStaticChildren) {\n if (isArray(children)) {\n for (var i = 0; i < children.length; i++) {\n validateChildKeys(children[i], type);\n }\n\n if (Object.freeze) {\n Object.freeze(children);\n }\n } else {\n error('React.jsx: Static children should always be an array. ' + 'You are likely explicitly calling React.jsxs or React.jsxDEV. ' + 'Use the Babel transform instead.');\n }\n } else {\n validateChildKeys(children, type);\n }\n }\n }\n\n if (type === REACT_FRAGMENT_TYPE) {\n validateFragmentProps(element);\n } else {\n validatePropTypes(element);\n }\n\n return element;\n }\n} // These two functions exist to still get child warnings in dev\n// even with the prod transform. This means that jsxDEV is purely\n// opt-in behavior for better messages but that we won't stop\n// giving you warnings if you use production apis.\n\nfunction jsxWithValidationStatic(type, props, key) {\n {\n return jsxWithValidation(type, props, key, true);\n }\n}\nfunction jsxWithValidationDynamic(type, props, key) {\n {\n return jsxWithValidation(type, props, key, false);\n }\n}\n\nvar jsx = jsxWithValidationDynamic ; // we may want to special case jsxs internally to take advantage of static children.\n// for now we can ship identical prod functions\n\nvar jsxs = jsxWithValidationStatic ;\n\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.jsx = jsx;\nexports.jsxs = jsxs;\n })();\n}\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.min.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","export const devices = {\n PHONE: \"phone\" as const,\n TABLET: \"tablet\" as const,\n DESKTOP: \"desktop\" as const,\n} as const;\n\n// How many pixels do we reserve on the right-hand side of a preview\n// for displaying lint indicators? This space needs to be reserved\n// in DeviceFramer, but it is actually allocated in PerseusFrame\nexport const lintGutterWidth = 36;\n\n// How wide a border does PerseusFrame draw? We need to allocate enough\n// space for it in DeviceFramer.\nexport const perseusFrameBorderWidth = 1;\n","/**\n * A component that displays its contents inside a device frame.\n */\n\nimport * as React from \"react\";\n\nimport {lintGutterWidth, perseusFrameBorderWidth} from \"../styles/constants\";\n\nimport type {DeviceType} from \"@khanacademy/perseus\";\n\nconst SCREEN_SIZES = {\n phone: {\n width: 320,\n height: 480,\n framedWidth: 320,\n },\n tablet: {\n width: 750,\n height: 920,\n framedWidth: 525,\n },\n desktop: {\n width: 688,\n height: 600,\n framedWidth: 688,\n },\n} as const;\n\ntype Props = React.PropsWithChildren<{\n deviceType?: DeviceType;\n nochrome: boolean;\n}>;\n\nconst DeviceFramer = ({\n children,\n deviceType = \"phone\",\n nochrome,\n}: Props): React.ReactElement => {\n const scale = React.useMemo(\n () =>\n SCREEN_SIZES[deviceType].framedWidth /\n SCREEN_SIZES[deviceType].width,\n [deviceType],\n );\n\n // In this mode we draw our own border and don't reserve\n // space for a lint gutter.\n const withChromeStyle = React.useMemo(\n () => ({\n backgroundColor: \"white\",\n color: \"black\",\n textAlign: \"left\",\n width: SCREEN_SIZES[deviceType].width,\n height: SCREEN_SIZES[deviceType].height,\n border: \"solid 1px #CCC\",\n margin: 8,\n zoom: scale,\n }),\n [deviceType, scale],\n );\n\n if (nochrome) {\n // Render content inside a variable height iframe. Used on the\n // \"edit\" table of the content editor. In this mode, PerseusFrame\n // will draw the border and reserve space on the right for\n // lint indicators.\n return (\n <div\n key=\"screen\"\n style={{\n width:\n SCREEN_SIZES[deviceType].framedWidth +\n 2 * perseusFrameBorderWidth +\n lintGutterWidth,\n }}\n >\n <div>{children}</div>\n </div>\n );\n }\n\n return (\n <div\n key=\"screen\"\n className=\"screen\"\n style={{...withChromeStyle, textAlign: \"start\"}}\n >\n {children}\n </div>\n );\n};\n\nexport default DeviceFramer;\n","import * as React from \"react\";\n\nimport type {A11yIssue} from \"./issues-panel\";\nimport type {A11yReport} from \"../preview/use-preview-controller\";\n\nexport type A11yContextValue = {\n /** Turns one issue's highlight on or off. */\n setIssueHighlight: (instanceId: string, highlighted: boolean) => void;\n /** Whether the preview iframe's axe-core scan is enabled. */\n a11yScanningEnabled: boolean;\n /** Enables/disables the preview iframe's axe-core scan. */\n setA11yScanningEnabled: (enabled: boolean) => void;\n /** instanceIds to highlight in the preview iframe, unioned across every\n * active \"Show Me\" toggle. */\n highlightInstanceIds: string[];\n /** Forwards the preview iframe's latest scan report to the owner. */\n onA11yReport: (report: A11yReport | null) => void;\n /** The latest scan's issues, for display in `IssuesPanel`. */\n axeCoreIssues: A11yIssue[];\n};\n\n/**\n * Builds an A11yContextValue, defaulting any field a caller doesn't\n * override to a production-safe no-op/empty value.\n */\nexport function createA11yContextValue(\n overrides: Partial<A11yContextValue> = {},\n): A11yContextValue {\n return {\n setIssueHighlight: () => {},\n a11yScanningEnabled: false,\n setA11yScanningEnabled: () => {},\n highlightInstanceIds: [],\n onA11yReport: () => {},\n axeCoreIssues: [],\n ...overrides,\n };\n}\n\nexport const A11yContext = React.createContext<A11yContextValue | null>(null);\n","import {PerseusMarkdown, Util} from \"@khanacademy/perseus\";\nimport {\n generateImageOptions,\n generateImageWidget,\n type PerseusRenderer,\n type PerseusWidgetsMap,\n} from \"@khanacademy/perseus-core\";\n\n// Match image markdown syntax: ![alt text](url)\nconst IMAGE_MARKDOWN_REGEX = /!\\[[^\\]]*\\]\\([^)]+\\)/g;\n\ntype IssueCta = {\n label: string;\n onClick: () => void;\n};\n\n// Exported for testing\n/**\n * Based on the given widgets within a question, return the first available\n * index for a specified widget type.\n *\n * Example: If the question has two image widgets named \"image 1\" and \"image 3\",\n * the next available index for an image widget would be 2, for \"image 2\".\n *\n * @param widgetType - The type of the widget to get the index for. (e.g. \"image\", \"radio\", etc.)\n * @param widgets - The question's `widgets` to search through.\n * @returns The first available index for the given widget type, starting from 1.\n */\nexport function getFirstAvailableWidgetIndex(\n widgetType: string,\n widgets: PerseusWidgetsMap,\n): number {\n const widgetNames = Object.keys(widgets);\n\n for (let i = 1; i <= widgetNames.length + 1; i++) {\n if (!widgetNames.includes(`${widgetType} ${i}`)) {\n return i;\n }\n }\n\n return 1;\n}\n\n/**\n * Convert all image markdown in a question to image widgets.\n *\n * This function uses regex to find image markdown, then replaces it with an\n * image widget. It does not use PerseusMarkdown to parse the content for image\n * markdown, because PerseusMarkdown doesn't have a node-to-text converter. We'd\n * have to manually process the tree to convert every single other markdown syntax\n * type back to its text content form.\n *\n * @param question - The question being parsed for image markdown.\n * @param onEditorChange - The function to update the editor's content.\n */\nexport async function convertImageMarkdownToImageWidget(\n question: PerseusRenderer,\n onEditorChange: (newProps: any) => void,\n) {\n const {content, widgets} = question;\n const newWidgets = {...widgets};\n\n // Find all image markdown matches\n const matches = Array.from(content.matchAll(IMAGE_MARKDOWN_REGEX));\n\n if (matches.length === 0) {\n return; // No image markdown to convert\n }\n\n // Process each match sequentially to ensure unique widget indices\n const replacements: Array<{original: string; replacement: string}> = [];\n for (const match of matches) {\n const imageIndex = getFirstAvailableWidgetIndex(\"image\", newWidgets);\n const imageNode = PerseusMarkdown.parse(match[0], {});\n const imageUrl = imageNode[0].content[0].target;\n const imageAlt = imageNode[0].content[0].alt;\n\n const imageSize = await Util.getImageSizeModern(imageUrl);\n const [width, height] = imageSize;\n\n newWidgets[`image ${imageIndex}`] = generateImageWidget({\n options: generateImageOptions({\n backgroundImage: {\n url: imageUrl,\n width,\n height,\n },\n alt: imageAlt,\n }),\n });\n\n replacements.push({\n original: match[0],\n replacement: `[[☃ image ${imageIndex}]]`,\n });\n }\n\n // Replace all matches in the content\n let newContent = content;\n for (const {original, replacement} of replacements) {\n newContent = newContent.replace(original, replacement);\n }\n\n onEditorChange({\n content: newContent,\n widgets: newWidgets,\n // The `images` field only caches dimensions for images referenced by\n // image markdown. Since we just converted every image markdown to a\n // widget (which carries its own dimensions), anything left in `images`\n // is stale, so we can clear it out entirely.\n images: {},\n });\n}\n\n/**\n * Based on the given issue id, return the appropriate CTA for the issue.\n * Example: If the issue id is \"image-markdown\", return the CTA to convert all\n * image markdown to image widgets.\n *\n * @param issueId - The id of the issue to get the CTA for.\n * @param question - The question being parsed for the issue.\n * @param onEditorChange - The function to update the editor's content.\n * @returns the `label` for the button text and the `onClick` function to call\n * when the button is clicked. Returns `null` if no CTA is found for\n * the given issue id.\n */\nexport function getCtaForIssueId(\n issueId: string,\n question: PerseusRenderer,\n onEditorChange: (newProps: any) => void,\n): IssueCta | null {\n switch (issueId) {\n case \"image-markdown\":\n return {\n label: \"Convert all image markdown to widget\",\n onClick: () =>\n convertImageMarkdownToImageWidget(question, onEditorChange),\n };\n // Add more cases here as we develop more CTAs for issues.\n default:\n return null;\n }\n}\n","import * as React from \"react\";\n\nimport type {PerseusRenderer} from \"@khanacademy/perseus-core\";\n\nexport type ItemEditorContextType = {\n question: PerseusRenderer;\n onEditorChange: (newProps: any) => void;\n editingDisabled?: boolean;\n};\n\nconst defaultItemEditorContext: ItemEditorContextType = {\n question: {content: \"\", widgets: {}, images: {}},\n onEditorChange: () => {},\n};\n\nexport const ItemEditorContext = React.createContext<ItemEditorContextType>(\n defaultItemEditorContext,\n);\n\nexport default function useItemEditorContext(): ItemEditorContextType {\n return React.useContext(ItemEditorContext);\n}\n","import Button from \"@khanacademy/wonder-blocks-button\";\nimport {sizing} from \"@khanacademy/wonder-blocks-tokens\";\nimport * as React from \"react\";\n\nimport {getCtaForIssueId} from \"../util/issue-ctas-utils\";\nimport useItemEditorContext from \"../util/item-editor-context\";\n\nimport type {Issue} from \"./issues-panel\";\n\ninterface Props {\n issue: Issue;\n}\n\nconst IssueCta = ({issue}: Props) => {\n const {question, editingDisabled, onEditorChange} = useItemEditorContext();\n const cta = getCtaForIssueId(issue.id, question, onEditorChange);\n\n if (!cta) {\n return null;\n }\n\n return (\n <Button\n key={issue.id}\n size=\"small\"\n onClick={cta.onClick}\n style={styles.button}\n disabled={editingDisabled}\n >\n {cta.label}\n </Button>\n );\n};\n\nexport default IssueCta;\n\n// TODO(LEMS-3686): Use CSS modules after Wonder Blocks styles\n// are moved to a different layer.\nconst styles = {\n button: {\n marginTop: sizing.size_080,\n marginBottom: sizing.size_080,\n },\n};\n","import {AccordionSection} from \"@khanacademy/wonder-blocks-accordion\";\nimport {View} from \"@khanacademy/wonder-blocks-core\";\nimport {semanticColor, spacing} from \"@khanacademy/wonder-blocks-tokens\";\nimport {StyleSheet} from \"aphrodite\";\nimport * as React from \"react\";\n\nimport type {StyleType} from \"@khanacademy/wonder-blocks-core\";\n\ntype Props = {\n animated?: boolean;\n children: React.ReactNode | React.ReactNode[];\n header: string | React.ReactElement;\n expanded?: boolean;\n containerStyle?: StyleType;\n panelStyle?: StyleType;\n headerStyle?: StyleType;\n onToggle?: (expanded: boolean) => void;\n};\n\nconst PerseusEditorAccordion = (props: Props) => {\n const {\n animated,\n children,\n header,\n expanded,\n containerStyle,\n panelStyle,\n headerStyle,\n onToggle,\n } = props;\n\n return (\n <View\n // More specificity so that we can override the default\n // .heading > h2 > .header styles from the articles.less\n // file (which is imported in perseus-renderer.less).\n className=\"perseus-editor-accordion\"\n >\n <AccordionSection\n animated={animated}\n expanded={expanded}\n onToggle={onToggle}\n style={[styles.container, containerStyle]}\n headerStyle={[styles.accordionHeader, headerStyle]}\n header={header}\n >\n <View style={[styles.accordionPanel, panelStyle]}>\n {children}\n </View>\n </AccordionSection>\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n backgroundColor: semanticColor.core.background.instructive.subtle,\n marginBlockStart: spacing.xSmall_8,\n },\n accordionHeader: {\n padding: spacing.small_12,\n // Don't move the dropdown caret.\n paddingInlineEnd: 0,\n // Fixed height so the addition of the color swatch doesn't\n // change the height of the header when toggling.\n height: spacing.xxLarge_48,\n },\n accordionPanel: {\n paddingBlockStart: spacing.xxSmall_6,\n paddingBlockEnd: spacing.xxxSmall_4,\n paddingInlineStart: spacing.small_12,\n paddingInlineEnd: spacing.small_12,\n },\n});\n\nexport default PerseusEditorAccordion;\n","import Switch from \"@khanacademy/wonder-blocks-switch\";\nimport {BodyText} from \"@khanacademy/wonder-blocks-typography\";\nimport * as React from \"react\";\n\nimport {A11yContext} from \"./a11y-context\";\n\ntype Props = {\n /**\n * The issue's highlight handle. Absent when the issue has nothing in the\n * preview to point at, which is what makes the toggle unavailable.\n */\n instanceId?: string;\n};\n\nconst showMeStyle = {\n marginBlockStart: \"1em\",\n display: \"flex\",\n alignItems: \"center\",\n};\n\nconst ShowMe = ({instanceId}: Props) => {\n const [showMe, setShowMe] = React.useState(false);\n const context = React.useContext(A11yContext);\n\n // Clear this issue's highlight when it unmounts (e.g. the issue is\n // resolved and disappears from the list) so it doesn't linger.\n React.useEffect(() => {\n return () => {\n if (instanceId != null) {\n context?.setIssueHighlight(instanceId, false);\n }\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n if (instanceId == null || context == null) {\n return (\n <div>\n Unable to find the offending element. Please ask a developer for\n help fixing this.\n </div>\n );\n }\n\n const handleChange = (checked: boolean) => {\n setShowMe(checked);\n context.setIssueHighlight(instanceId, checked);\n };\n\n return (\n <BodyText size=\"small\" tag=\"span\" weight=\"bold\" style={showMeStyle}>\n <span style={{marginInlineEnd: \"1em\"}}>Show Me</span>\n <Switch\n checked={showMe}\n onChange={handleChange}\n aria-label=\"Show Me\"\n />\n </BodyText>\n );\n};\n\nexport default ShowMe;\n","// WidgetIssueDetails.tsx\nimport {semanticColor} from \"@khanacademy/wonder-blocks-tokens\";\nimport {BodyText} from \"@khanacademy/wonder-blocks-typography\";\nimport * as React from \"react\";\n\nimport IssueCta from \"./issue-cta\";\nimport PerseusEditorAccordion from \"./perseus-editor-accordion\";\nimport ShowMe from \"./show-me-issue\";\n\nimport type {Issue} from \"./issues-panel\";\n\nconst impactStringMap = {\n high: \"Error\",\n medium: \"Warning\",\n low: \"Guideline\",\n};\n\ntype IssueProps = {\n issue: Issue;\n};\n\nconst IssueDetails = ({issue}: IssueProps) => {\n const [expanded, setExpanded] = React.useState(false);\n const toggleVisibility = () => setExpanded(!expanded);\n\n const accordionColor =\n issue.impact === \"high\"\n ? semanticColor.feedback.critical.subtle.background\n : semanticColor.feedback.warning.subtle.background;\n const messageStyling = {\n // Allow newlines in the message\n whiteSpace: \"pre-line\",\n color: semanticColor.core.foreground.critical.default,\n };\n\n return (\n <PerseusEditorAccordion\n animated={true}\n expanded={expanded}\n onToggle={toggleVisibility}\n containerStyle={{backgroundColor: accordionColor}}\n panelStyle={{backgroundColor: \"white\"}}\n header={\n <BodyText\n size=\"medium\"\n weight=\"bold\"\n tag=\"span\"\n style={{\n textOverflow: \"ellipsis\",\n maxInlineSize: \"100%\",\n overflow: \"hidden\",\n whiteSpace: \"nowrap\",\n }}\n >\n {`${impactStringMap[issue.impact]}: ${issue.id}`}\n </BodyText>\n }\n >\n <BodyText size=\"small\" tag=\"span\" weight=\"bold\">\n Description:\n </BodyText>\n <span>{issue.description}</span>\n <a href={issue.helpUrl} target=\"_blank\" rel=\"noreferrer\">\n {issue.help}\n </a>\n <BodyText\n size=\"small\"\n tag=\"span\"\n weight=\"bold\"\n style={{marginBlockStart: \"1em\"}}\n >\n Impact:\n </BodyText>\n <span style={{fontWeight: \"initial\"}}> {issue.impact}</span>\n <BodyText\n size=\"small\"\n tag=\"span\"\n weight=\"bold\"\n style={{marginBlockStart: \"1em\"}}\n >\n Issue:\n </BodyText>\n <span style={messageStyling}>{issue.message}</span>\n <ShowMe\n instanceId={\n issue.source === \"a11y\" ? issue.instanceId : undefined\n }\n />\n <IssueCta issue={issue} />\n </PerseusEditorAccordion>\n );\n};\n\nexport default IssueDetails;\n","import {View} from \"@khanacademy/wonder-blocks-core\";\nimport {Strut} from \"@khanacademy/wonder-blocks-layout\";\nimport Switch from \"@khanacademy/wonder-blocks-switch\";\nimport {spacing} from \"@khanacademy/wonder-blocks-tokens\";\nimport {BodyText} from \"@khanacademy/wonder-blocks-typography\";\nimport {StyleSheet} from \"aphrodite\";\nimport * as React from \"react\";\nimport {useId} from \"react\";\n\nimport type {StyleType} from \"@khanacademy/wonder-blocks-core\";\n\ntype Props = {\n label: string;\n checked: boolean;\n labelSide?: \"start\" | \"end\";\n size?: \"small\" | \"medium\";\n style?: StyleType;\n disabled?: boolean;\n onChange: (newValue: boolean) => void;\n};\n\nconst LabeledSwitch = (props: Props) => {\n const {\n checked,\n label,\n labelSide = \"end\",\n size = \"medium\",\n style,\n disabled = false,\n onChange,\n } = props;\n const switchId = useId();\n\n const labelElement = (\n <BodyText\n size={size === \"small\" ? \"small\" : undefined}\n tag=\"label\"\n htmlFor={switchId}\n >\n {label}\n </BodyText>\n );\n\n const strut = <Strut size={spacing.xSmall_8} />;\n\n return (\n <View style={[styles.row, style]}>\n {labelSide === \"start\" && (\n <>\n {labelElement}\n {strut}\n </>\n )}\n <Switch\n id={switchId}\n checked={checked}\n disabled={disabled}\n onChange={onChange}\n />\n {labelSide === \"end\" && (\n <>\n {strut}\n {labelElement}\n </>\n )}\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n row: {\n flexDirection: \"row\",\n alignItems: \"center\",\n },\n});\n\nexport default LabeledSwitch;\n","import {PhosphorIcon} from \"@khanacademy/wonder-blocks-icon\";\nimport caretRight from \"@phosphor-icons/core/bold/caret-right-bold.svg\";\nimport {StyleSheet} from \"aphrodite\";\nimport * as React from \"react\";\n\ntype Props = {\n isExpanded: boolean;\n};\n\n/**\n * Displays a caret in either expanded or collapsed state. For use in headings\n * that collapse a region.\n */\nfunction ToggleableCaret(props: Props) {\n const iconStyle = props.isExpanded ? styles.expanded : styles.collapsed;\n\n return <PhosphorIcon icon={caretRight} style={iconStyle} />;\n}\n\nconst styles = StyleSheet.create({\n collapsed: {\n transition: \".15s\",\n },\n expanded: {\n transform: \"rotate(90deg)\",\n transition: \".15s\",\n },\n});\n\nexport default ToggleableCaret;\n","import {View} from \"@khanacademy/wonder-blocks-core\";\nimport {PhosphorIcon} from \"@khanacademy/wonder-blocks-icon\";\nimport {semanticColor} from \"@khanacademy/wonder-blocks-tokens\";\nimport iconPass from \"@phosphor-icons/core/fill/check-circle-fill.svg\";\nimport iconWarning from \"@phosphor-icons/core/fill/warning-fill.svg\";\nimport iconAlert from \"@phosphor-icons/core/fill/warning-octagon-fill.svg\";\nimport * as React from \"react\";\nimport {useContext, useState} from \"react\";\n\nimport {A11yContext} from \"./a11y-context\";\nimport IssueDetails from \"./issue-details\";\nimport LabeledSwitch from \"./labeled-switch\";\nimport ToggleableCaret from \"./toggleable-caret\";\n\nexport type IssueImpact = \"low\" | \"medium\" | \"high\";\n\n/**\n * A problem to show the author, from the editor-side linter or the preview's\n * axe-core scanner.\n */\nexport interface Issue {\n /**\n * The problem identifier (name). This `id` is _not_ guaranteed to be\n * unique and is often the name of the rule that generated this issue (for\n * example, this may be the axe-core rule id or a linter rule name). Shown\n * to the author and used when a fix is offered, so several issues can\n * share one — nine images missing alt text are nine `image-alt`s.\n */\n id: string;\n\n /**\n * The unique issue identifier. Distinguishes this issue from every other\n * issue in the same list. Optional because some issue sources may not have\n * one naturally; prefer `getIssueKey` over reading it directly.\n */\n instanceId?: string;\n\n /**\n * Where this issue came from. Usually unset — used only when the origin\n * (source) tells you the issue can do something the others can't. See\n * {@link A11yIssue}.\n */\n source?: \"a11y\";\n\n description: string;\n helpUrl: string;\n help: string;\n impact: IssueImpact;\n message: string;\n}\n\n/**\n * An issue the preview's axe-core scanner found, and can therefore highlight —\n * it always has the `instanceId` the element map is keyed by.\n */\nexport type A11yIssue = Issue & {source: \"a11y\"; instanceId: string};\n\n/**\n * A unique identifier for an issue, suitable for use as a React key or a\n * Record key. Falls back to `id`, which names the rule rather than the\n * occurrence, for issues that arrive without an `instanceId`.\n */\nexport function getIssueKey(issue: Issue): string {\n return issue.instanceId ?? issue.id;\n}\n\ntype IssuesPanelProps = {\n issues?: Issue[];\n};\n\nconst IssuesPanel = (props: IssuesPanelProps) => {\n const {issues = []} = props;\n const context = useContext(A11yContext);\n const [showPanel, setShowPanel] = useState(false);\n\n const axeCoreIssues = context?.a11yScanningEnabled\n ? context.axeCoreIssues\n : [];\n const allIssues: Issue[] = [...issues, ...axeCoreIssues];\n\n const hasWarnings = allIssues.length > 0;\n const hasErrors = allIssues.some((issue) => issue.impact === \"high\");\n const issuesCount = `${allIssues.length} issue${\n allIssues.length === 1 ? \"\" : \"s\"\n }`;\n\n const icon = hasErrors ? iconAlert : hasWarnings ? iconWarning : iconPass;\n const iconColor = hasErrors\n ? semanticColor.feedback.critical.strong.icon\n : hasWarnings\n ? semanticColor.feedback.warning.strong.icon\n : semanticColor.feedback.success.strong.icon;\n\n const impactOrder = {high: 3, medium: 2, low: 1};\n const sortedIssues = [...allIssues].sort((a, b) => {\n if (impactOrder[b.impact] !== impactOrder[a.impact]) {\n return impactOrder[b.impact] - impactOrder[a.impact];\n }\n return a.id.localeCompare(b.id);\n });\n\n return (\n <div className=\"perseus-widget-editor perseus-issues-panel\">\n <div className=\"perseus-widget-editor-title\">\n <div className=\"perseus-widget-editor-title-id\">\n <View\n style={{\n display: \"flex\",\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: \"0.25em\",\n }}\n onClick={() => setShowPanel(!showPanel)}\n >\n <ToggleableCaret isExpanded={showPanel} />\n <span>Issues</span>\n </View>\n </div>\n <PhosphorIcon\n icon={icon}\n size=\"medium\"\n color={iconColor}\n testId={`issues-icon-${icon}`}\n style={{marginInlineEnd: \"0.25em\"}}\n />\n {issuesCount}\n </div>\n {showPanel && (\n <div className=\"perseus-widget-editor-panel\">\n <div className=\"perseus-widget-editor-content\">\n {sortedIssues.map((issue) => (\n <IssueDetails\n key={getIssueKey(issue)}\n issue={issue}\n />\n ))}\n {allIssues.length === 0 && <div>No issues found</div>}\n <LabeledSwitch\n label=\"Include axe-core scan\"\n checked={context?.a11yScanningEnabled ?? false}\n onChange={(enabled) => {\n context?.setA11yScanningEnabled(enabled);\n }}\n style={{marginBlockStart: \"1rem\"}}\n />\n </div>\n </div>\n )}\n </div>\n );\n};\n\nexport default IssuesPanel;\n","import {isSuccess} from \"@khanacademy/perseus-core\";\nimport * as React from \"react\";\nimport _ from \"underscore\";\n\nimport type {Result} from \"@khanacademy/perseus-core\";\n\ntype Props<TData> = {\n multiLine: boolean;\n value: TData;\n onChange: (newJson: TData) => void;\n parser: (json: string) => Result<TData, unknown>;\n editingDisabled: boolean;\n};\n\ntype State = {\n currentValue: string | undefined;\n valid: boolean | undefined;\n};\n\nclass JsonEditor<TData> extends React.Component<Props<TData>, State> {\n static displayName: \"JsonEditor\";\n\n constructor(props: Props<TData>) {\n super(props);\n this.state = this.getInitialState();\n\n this.handleBlur = this.handleBlur.bind(this);\n this.handleChange = this.handleChange.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n }\n\n getInitialState() {\n return {\n currentValue: JSON.stringify(this.props.value, null, 4),\n valid: true,\n };\n }\n\n componentDidUpdate(prevProps: Props<TData>) {\n if (!_.isEqual(prevProps.value, this.props.value)) {\n const shouldReplaceContent =\n !this.state.valid ||\n !_.isEqual(this.props.value, this.getCurrentValueAsJson());\n\n if (shouldReplaceContent) {\n this.setState({\n currentValue: JSON.stringify(this.props.value, null, 4),\n valid: true,\n });\n }\n }\n }\n\n getCurrentValueAsJson() {\n try {\n return this.state.currentValue\n ? this.typesafeParseOrThrow(this.state.currentValue)\n : {};\n } catch {\n return null;\n }\n }\n\n handleKeyDown(e: React.KeyboardEvent<HTMLTextAreaElement>) {\n // This handler allows the tab character to be entered by pressing\n // tab, instead of jumping to the next (non-existant) field\n if (e.key === \"Tab\") {\n const textarea = e.currentTarget;\n const cursorPos = textarea.selectionStart;\n const v = textarea.value;\n const textBefore = v.substring(0, cursorPos);\n const textAfter = v.substring(cursorPos, v.length);\n textarea.value = textBefore + \" \" + textAfter;\n textarea.selectionStart = textBefore.length + 4;\n textarea.selectionEnd = textBefore.length + 4;\n\n e.preventDefault();\n this.processChange(textarea.value);\n }\n }\n\n handleChange(e: React.ChangeEvent<HTMLTextAreaElement>) {\n this.processChange(e.target.value);\n }\n\n processChange(nextString: string) {\n try {\n const json = this.typesafeParseOrThrow(nextString);\n // This callback unfortunately causes multiple renders,\n // but seems to be necessary to avoid componentWillReceiveProps\n // being called before setState has gone through\n this.setState(\n {\n currentValue: nextString,\n valid: true,\n },\n () => {\n this.props.onChange(json);\n },\n );\n } catch {\n this.setState({\n currentValue: nextString,\n valid: false,\n });\n }\n }\n\n // You can type whatever you want as you're typing, but if it's not valid\n // when you blur, it will revert to the last valid value.\n handleBlur(e: React.FocusEvent<HTMLTextAreaElement>) {\n const nextString = e.target.value;\n try {\n const json = this.typesafeParseOrThrow(nextString);\n // This callback unfortunately causes multiple renders,\n // but seems to be necessary to avoid componentWillReceiveProps\n // being called before setState has gone through\n this.setState(\n {\n currentValue: JSON.stringify(json, null, 4),\n valid: true,\n },\n () => {\n this.props.onChange(json);\n },\n );\n } catch {\n this.setState({\n currentValue: JSON.stringify(this.props.value, null, 4),\n valid: true,\n });\n }\n }\n\n private typesafeParseOrThrow(json: string): TData {\n const parsed = this.props.parser(json);\n if (isSuccess(parsed)) {\n return parsed.value;\n }\n\n // Parse JSON embedded in quoted strings. This makes it easier to\n // paste in data from e.g. the browser devtools' Network tab.\n const parsedFromQuotedString = this.props.parser(JSON.parse(json));\n if (isSuccess(parsedFromQuotedString)) {\n return parsedFromQuotedString.value;\n }\n\n throw new TypeError(\"JsonEditor: parse failure\");\n }\n\n render() {\n const classes =\n \"perseus-json-editor \" + (this.state.valid ? \"valid\" : \"invalid\");\n\n return (\n <textarea\n className={classes}\n value={this.state.currentValue}\n onChange={this.handleChange}\n onKeyDown={this.handleKeyDown}\n onBlur={this.handleBlur}\n disabled={this.props.editingDisabled}\n />\n );\n }\n}\n\nexport default JsonEditor;\n","import IconButton from \"@khanacademy/wonder-blocks-icon-button\";\nimport {StyleSheet} from \"aphrodite\";\nimport * as React from \"react\";\n\nimport type {PhosphorIconAsset} from \"@khanacademy/wonder-blocks-icon\";\n\ntype SectionControlButtonProps = {\n icon: PhosphorIconAsset;\n onClick: () => unknown;\n title: string;\n disabled: boolean;\n};\n\nconst SectionControlButton = ({\n icon,\n onClick,\n title,\n disabled,\n}: SectionControlButtonProps) => {\n return (\n <IconButton\n icon={icon}\n disabled={disabled}\n aria-label={title}\n style={styles.button}\n size=\"xsmall\"\n onClick={onClick}\n />\n );\n};\n\nconst styles = StyleSheet.create({\n button: {\n marginInlineStart: 5,\n },\n});\n\nexport default SectionControlButton;\n","/* This component makes its children a drag target. Example:\n *\n * <DragTarget onDrop={this.handleDrop}>Drag to me</DragTarget>\n *\n * ...\n *\n * handleDrop: function(e) {\n * this.addImages(e.nativeEvent.dataTransfer.files);\n * }\n *\n * Now \"Drag to me\" will be a drag target - when something is dragged over it,\n * the element will become partially transparent as a visual indicator that\n * it's a target.\n */\n\nimport {View} from \"@khanacademy/wonder-blocks-core\";\nimport * as React from \"react\";\n\ntype Props = {\n onDrop: (e: React.MouseEvent) => unknown;\n shouldDragHighlight: (e: React.MouseEvent) => boolean;\n style?: React.CSSProperties;\n children?: React.ReactNode;\n className?: string;\n};\n\ntype DefaultProps = {\n shouldDragHighlight: Props[\"shouldDragHighlight\"];\n};\n\ntype State = {\n dragHover: boolean;\n};\nclass DragTarget extends React.Component<Props, State> {\n static defaultProps: DefaultProps = {\n shouldDragHighlight: () => true,\n };\n\n constructor(props: Props) {\n super(props);\n this.state = {\n dragHover: false,\n };\n\n this.handleDrop = this.handleDrop.bind(this);\n this.handleDragEnd = this.handleDragEnd.bind(this);\n this.handleDragOver = this.handleDragOver.bind(this);\n this.handleDragLeave = this.handleDragLeave.bind(this);\n this.handleDragEnter = this.handleDragEnter.bind(this);\n }\n\n handleDrop(e: React.MouseEvent) {\n e.stopPropagation();\n e.preventDefault();\n this.setState({dragHover: false});\n this.props.onDrop(e);\n }\n\n handleDragEnd() {\n this.setState({dragHover: false});\n }\n\n handleDragOver(e: React.MouseEvent) {\n e.preventDefault();\n }\n\n handleDragLeave() {\n this.setState({dragHover: false});\n }\n\n handleDragEnter(e: React.MouseEvent) {\n this.setState({dragHover: this.props.shouldDragHighlight(e)});\n }\n\n render() {\n const opacity = this.state.dragHover ? {opacity: 0.3} : {};\n const {shouldDragHighlight, ...forwardProps} = this.props;\n\n return (\n <View\n {...forwardProps}\n style={Object.assign({}, this.props.style, opacity)}\n onDrop={this.handleDrop}\n onDragEnd={this.handleDragEnd}\n onDragOver={this.handleDragOver}\n onDragEnter={this.handleDragEnter}\n onDragLeave={this.handleDragLeave}\n />\n );\n }\n}\n\nexport default DragTarget;\n","import {PhosphorIcon} from \"@khanacademy/wonder-blocks-icon\";\nimport {spacing} from \"@khanacademy/wonder-blocks-tokens\";\nimport Tooltip from \"@khanacademy/wonder-blocks-tooltip\";\nimport {BodyText} from \"@khanacademy/wonder-blocks-typography\";\nimport questionIcon from \"@phosphor-icons/core/regular/question.svg\";\nimport {StyleSheet} from \"aphrodite\";\nimport * as React from \"react\";\n\ntype Props = {\n children: React.ReactNode;\n};\n\nconst InfoTipBase = (props: Props) => {\n return (\n <Tooltip\n content={<BodyText style={styles.body}>{props.children}</BodyText>}\n placement=\"right\"\n >\n <PhosphorIcon\n size=\"small\"\n icon={questionIcon}\n style={styles.spacingLeft}\n />\n </Tooltip>\n );\n};\n\nconst styles = StyleSheet.create({\n spacingLeft: {\n marginInlineStart: spacing.xxxSmall_4,\n },\n body: {\n padding: spacing.medium_16,\n },\n});\n\nexport default InfoTipBase;\n","/**\n * A wrapper around info-tip/info-tip.jsx that can be rendered on the\n * server without causing a checksum mismatch on the client.\n * (RCSS generates classnames with a randomSuffix, which ensures that any\n * two sets of generated classnames will not match.)\n */\n\nimport * as React from \"react\";\n\nimport InfoTipBase from \"./info-tip-base\";\n\nimport type {PropsFor} from \"@khanacademy/wonder-blocks-core\";\n\ntype Props = PropsFor<typeof InfoTipBase>;\n\ntype State = {\n didMount: boolean;\n};\n\nclass InfoTip extends React.Component<Props, State> {\n state: State = {\n didMount: false,\n };\n\n componentDidMount() {\n this.setState({didMount: true});\n }\n\n render(): React.ReactNode {\n if (this.state.didMount) {\n return <InfoTipBase {...this.props} />;\n }\n return <div />;\n }\n}\n\nexport default InfoTip;\n","import {OptionItem, SingleSelect} from \"@khanacademy/wonder-blocks-dropdown\";\nimport * as React from \"react\";\n\nimport type {PropsFor} from \"@khanacademy/wonder-blocks-core\";\n\n/**\n * A single option in a `TypedSingleSelect`.\n *\n * - A non-empty string is the option's visible label.\n * - The object form additionally allows a `leftAccessory` (e.g. an icon or\n * swatch) to be rendered before the label. Objects are always shown, so this\n * form is the way to render an accessory-only option (empty `label`).\n * - Any falsey value (`\"\"`, `false`, `null`, `undefined`) hides the option.\n * This supports the `condition && \"Label\"` idiom for conditionally showing an\n * option without dropping it from the `options` object.\n */\ntype SelectOption =\n | string\n | null\n | undefined\n | false\n // FUTURE: add `rightAccessory`, `labelAsText`, or other options as needed\n // to configure the underlying Option component.\n | {label: string; leftAccessory?: React.ReactNode};\n\n/**\n * An object representing the options of a `<select>` element in HTML.\n * Each property key in the object is a `value` of an option, and each\n * property value describes how that option appears in the dropdown. If a\n * property value is falsey, the corresponding option is hidden.\n */\ntype SelectOptions<ValueT extends string> = Record<ValueT, SelectOption>;\n\ninterface OwnProps<ValueT extends string> {\n options: SelectOptions<ValueT>;\n selectedValue?: NoInfer<ValueT> | null | undefined;\n onChange: (selectedValue: NoInfer<ValueT>) => void;\n // Override the required `placeholder` prop from `SingleSelect`, making it\n // optional.\n placeholder?: string;\n}\n\nexport type Props<ValueT extends string> = OwnProps<ValueT> &\n Omit<PropsFor<typeof SingleSelect>, keyof OwnProps<string>>;\n\n/**\n * A typesafe version of Wonder Blocks' `SingleSelect` component. Use this\n * when you need a `SingleSelect` to choose among the branches of a union\n * type like `\"foo\" | \"bar\" | \"baz\"`.\n *\n * `ValueT` is inferred from the keys of `options`, so `selectedValue` and the\n * value passed to `onChange` are guaranteed to be members of that union — no\n * cast or runtime check is needed at the call site.\n */\nexport function TypedSingleSelect<ValueT extends string>(props: Props<ValueT>) {\n // `options` is this wrapper's own prop; don't forward it to `SingleSelect`\n // (and thence to the DOM). `onChange` is re-typed below.\n const {options, onChange, placeholder, ...rest} = props;\n return (\n <SingleSelect\n {...rest}\n placeholder={placeholder ?? \"\"}\n // Wonder Blocks types `onChange` as `(value: string) => void`.\n // Every value `SingleSelect` can emit is one of the option keys we\n // gave it, so narrowing that `string` back to `ValueT` is sound.\n // This is the single unavoidable cast; it lets call sites stay\n // cast-free.\n // eslint-disable-next-line no-restricted-syntax\n onChange={onChange as (selectedValue: string) => void}\n >\n {Object.entries<SelectOption>(options).map(([value, option]) => {\n // Object form: a label plus an optional accessory.\n if (typeof option === \"object\" && option !== null) {\n return (\n <OptionItem\n key={value}\n value={value}\n label={option.label}\n leftAccessory={option.leftAccessory}\n />\n );\n }\n // String form: a non-empty string is a label. Anything\n // falsey (empty string, false, null, undefined) hides the\n // option.\n if (typeof option === \"string\" && option !== \"\") {\n return (\n <OptionItem key={value} value={value} label={option} />\n );\n }\n return null;\n })}\n </SingleSelect>\n );\n}\n","import type {Alignment} from \"@khanacademy/perseus-core\";\n\n/**\n * Map of alignment values to their corresponding human-readable descriptions.\n * Only includes alignments that show up in the widget select (i.e. occur\n * within a widget's `supportedAlignments` when there are multiple alignments\n * supported), in the Article editor only.\n *\n * Note that `default` is always replaced by another alignment.\n * `inline-block` and `inline` are not used in articles or displayed\n * in the alignment select, they're only used as default alignments\n * within the Exercise editor.\n */\nexport const alignmentInfoMap: Record<\n Exclude<Alignment, \"default\" | \"inline-block\" | \"inline\">,\n string\n> = {\n block: \"Block - widget is constrained to the width of the article content container.\",\n \"wrap-left\":\n \"Wrap left - widget is 50% width of the article content container, and is left aligned with text wrapping on the right of the widget.\",\n \"wrap-right\":\n \"Wrap right - widget is 50% width of the article content container, and is right aligned with text wrapping on the left of the widget.\",\n \"full-width\":\n \"Full width - widget extends beyond the width of the article content container.\",\n};\n","import {View} from \"@khanacademy/wonder-blocks-core\";\nimport {sizing} from \"@khanacademy/wonder-blocks-tokens\";\nimport {BodyText} from \"@khanacademy/wonder-blocks-typography\";\nimport {StyleSheet} from \"aphrodite\";\nimport * as React from \"react\";\nimport {useId} from \"react\";\n\nimport InfoTip from \"./info-tip\";\nimport {TypedSingleSelect} from \"./typed-single-select\";\nimport {alignmentInfoMap} from \"./util\";\n\nimport type {Alignment, PerseusWidget} from \"@khanacademy/perseus-core\";\nimport type {StyleType} from \"@khanacademy/wonder-blocks-core\";\n\ninterface Props {\n supportedAlignments: ReadonlyArray<Alignment>;\n widgetInfo: PerseusWidget;\n isEditingDisabled: boolean;\n onChange: (newAlignment: Alignment) => void;\n style?: StyleType;\n}\n\nexport function AlignmentSelect({\n supportedAlignments,\n widgetInfo,\n isEditingDisabled,\n onChange,\n style,\n}: Props) {\n const labelId = useId();\n return (\n <View\n style={[\n {\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: sizing.size_080,\n },\n style,\n ]}\n >\n <BodyText id={labelId} tag=\"span\">\n Alignment\n </BodyText>\n <TypedSingleSelect<Alignment>\n aria-labelledby={labelId}\n // TODO(benchristel): properly type widgetInfo.alignment and\n // remove this cast.\n // eslint-disable-next-line no-restricted-syntax\n selectedValue={(widgetInfo.alignment as Alignment) ?? \"default\"}\n disabled={isEditingDisabled}\n options={{\n default:\n supportedAlignments.includes(\"default\") && \"default\",\n block: supportedAlignments.includes(\"block\") && \"block\",\n \"inline-block\":\n supportedAlignments.includes(\"inline-block\") &&\n \"inline-block\",\n inline: supportedAlignments.includes(\"inline\") && \"inline\",\n \"wrap-left\":\n supportedAlignments.includes(\"wrap-left\") &&\n \"wrap-left\",\n \"wrap-right\":\n supportedAlignments.includes(\"wrap-right\") &&\n \"wrap-right\",\n \"full-width\":\n supportedAlignments.includes(\"full-width\") &&\n \"full-width\",\n }}\n onChange={onChange}\n placeholder=\"Select alignment\"\n style={styles.singleSelectShort}\n />\n <InfoTip>\n <ul>\n {supportedAlignments.map((alignment, index) => (\n <li\n key={alignment}\n style={{\n marginBlockEnd:\n index < supportedAlignments.length - 1\n ? sizing.size_240\n : 0,\n }}\n >\n {alignmentInfoMap[alignment]}\n </li>\n ))}\n </ul>\n </InfoTip>\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n singleSelectShort: {\n height: sizing.size_260,\n },\n});\n","import {View} from \"@khanacademy/wonder-blocks-core\";\nimport Link from \"@khanacademy/wonder-blocks-link\";\nimport {sizing} from \"@khanacademy/wonder-blocks-tokens\";\nimport * as React from \"react\";\n\nimport {AlignmentSelect} from \"./alignment-select\";\nimport LabeledSwitch from \"./labeled-switch\";\n\nimport \"./widget-editor-settings.css\";\n\nimport type {Alignment, PerseusWidget} from \"@khanacademy/perseus-core\";\n\ninterface BestPracticesLink {\n url: string;\n label: string;\n}\n\ninterface WidgetEditorSettingsProps {\n bestPractices?: BestPracticesLink;\n supportsStaticMode: boolean;\n isStatic: boolean;\n onStaticChange: (value: boolean) => unknown;\n supportsGradedToggle: boolean;\n isGraded: boolean;\n onGradedChange: (value: boolean) => unknown;\n supportedAlignments: ReadonlyArray<Alignment>;\n widgetInfo: PerseusWidget;\n onAlignmentChange: (newAlignment: Alignment) => unknown;\n isEditingDisabled: boolean;\n}\n\nfunction WidgetEditorSettings(props: WidgetEditorSettingsProps) {\n const {\n bestPractices,\n supportsStaticMode,\n isStatic,\n onStaticChange,\n supportsGradedToggle,\n isGraded,\n onGradedChange,\n supportedAlignments,\n widgetInfo,\n onAlignmentChange,\n isEditingDisabled,\n } = props;\n\n const hasControls =\n supportsStaticMode ||\n supportsGradedToggle ||\n supportedAlignments.length > 1;\n\n if (!bestPractices && !hasControls) {\n return null;\n }\n\n return (\n <View className=\"widget-editor-settings-container\">\n {bestPractices && (\n <View className=\"best-practices-container\">\n <Link href={bestPractices.url} target=\"_blank\">\n {bestPractices.label}\n </Link>\n </View>\n )}\n {hasControls && (\n <div className=\"perseus-widget-row\">\n {supportsStaticMode && (\n <LabeledSwitch\n label=\"Static\"\n checked={isStatic}\n disabled={isEditingDisabled}\n onChange={onStaticChange}\n style={{marginBlockEnd: sizing.size_060}}\n />\n )}\n {supportsGradedToggle && (\n <LabeledSwitch\n label=\"Interactive but ungraded\"\n checked={!isGraded}\n disabled={isEditingDisabled}\n onChange={(e) => {\n onGradedChange(!e);\n }}\n style={{marginBlockEnd: sizing.size_060}}\n />\n )}\n {supportedAlignments.length > 1 && (\n <AlignmentSelect\n supportedAlignments={supportedAlignments}\n widgetInfo={widgetInfo}\n isEditingDisabled={isEditingDisabled}\n onChange={onAlignmentChange}\n style={{marginBlockEnd: sizing.size_060}}\n />\n )}\n </div>\n )}\n </View>\n );\n}\n\nexport default WidgetEditorSettings;\n","import {Widgets} from \"@khanacademy/perseus\";\nimport {\n CoreWidgetRegistry,\n applyDefaultsToWidget,\n excludeDenylistKeys,\n} from \"@khanacademy/perseus-core\";\nimport {View} from \"@khanacademy/wonder-blocks-core\";\nimport trashIcon from \"@phosphor-icons/core/bold/trash-bold.svg\";\nimport * as React from \"react\";\n\nimport SectionControlButton from \"./section-control-button\";\nimport ToggleableCaret from \"./toggleable-caret\";\nimport WidgetEditorSettings from \"./widget-editor-settings\";\n\nimport type {APIOptions} from \"@khanacademy/perseus\";\nimport type {Alignment, PerseusWidget} from \"@khanacademy/perseus-core\";\n\ntype Props = {\n id: string;\n onChange: (widgetInfo: PerseusWidget) => void;\n onRemove: () => unknown;\n apiOptions: APIOptions;\n widgetIsOpen?: boolean;\n widgetInfo: PerseusWidget;\n};\n\ntype State = {\n showWidget: boolean;\n widgetInfo: PerseusWidget;\n};\n\n// exported for tests\nexport function _upgradeWidgetInfo(widgetInfo: PerseusWidget): PerseusWidget {\n // We can't call serialize here because this.refs.widget\n // doesn't exist before this component is mounted.\n // eslint-disable-next-line no-restricted-syntax\n const filteredWidget: PerseusWidget = excludeDenylistKeys(\n widgetInfo,\n ) as any;\n\n // This is circumventing an issue with excludeDenylistKeys;\n // it removes `graded` from WidgetOptions.options (good)\n // but it's also recursive so it removes `graded`\n // from the higher-up WidgetOptions (bad)\n // See: LEMS-4108 and https://khanacademy.slack.com/archives/C01AZ9H8TTQ/p1778089642003609\n filteredWidget.graded = widgetInfo.graded;\n\n return applyDefaultsToWidget(filteredWidget);\n}\n\n// This component handles upgading widget editor props via prop\n// upgrade transforms. Widget editors will always be rendered\n// with all available transforms applied, but the results of those\n// transforms will not be propogated upwards until serialization.\nclass WidgetEditor extends React.Component<Props, State> {\n widgetSpecificEditor: React.RefObject<{\n serialize(): unknown;\n getSaveWarnings?: () => unknown;\n }>;\n\n constructor(props: Props) {\n super(props);\n this.state = {\n showWidget: props.widgetIsOpen ?? true,\n widgetInfo: _upgradeWidgetInfo(props.widgetInfo),\n };\n this.widgetSpecificEditor = React.createRef();\n }\n\n UNSAFE_componentWillReceiveProps(nextProps: Props) {\n this.setState({widgetInfo: _upgradeWidgetInfo(nextProps.widgetInfo)});\n // user can update internal state while the widget is handled globally\n if (\n nextProps.widgetIsOpen != null &&\n nextProps.widgetIsOpen !== this.props.widgetIsOpen\n ) {\n this.setState({showWidget: nextProps.widgetIsOpen});\n }\n }\n\n _toggleWidget = (e: React.SyntheticEvent) => {\n e.preventDefault();\n this.setState({showWidget: !this.state.showWidget});\n };\n\n _handleWidgetChange = (newOptions: PerseusWidget[\"options\"]) => {\n // eslint-disable-next-line no-restricted-syntax\n const newWidgetInfo = {\n ...this.state.widgetInfo,\n options: {\n ...this.state.widgetInfo.options,\n ...(this.widgetSpecificEditor.current?.serialize() ?? {}),\n ...newOptions,\n },\n } as PerseusWidget;\n this.props.onChange(newWidgetInfo);\n };\n\n _setStatic = (value: boolean) => {\n const newWidgetInfo = {\n ...this.state.widgetInfo,\n static: value,\n // if it's \"interactive but ungraded\" (ungraded)\n // we don't also want it to be \"non-interactive\" (static)\n // because \"interactive\" and \"non-interactive\" are mutually exclusive concepts\n graded: true,\n } satisfies PerseusWidget;\n this.props.onChange(newWidgetInfo);\n };\n\n _setGraded = (value: boolean) => {\n const newWidgetInfo = {\n ...this.state.widgetInfo,\n graded: value,\n // if it's \"interactive but ungraded\" (ungraded)\n // we don't also want it to be \"non-interactive\" (static)\n // because \"interactive\" and \"non-interactive\" are mutually exclusive concepts\n static: false,\n } satisfies PerseusWidget;\n this.props.onChange(newWidgetInfo);\n };\n\n _handleAlignmentChange = (newAlignment: Alignment) => {\n this.props.onChange({\n ...this.state.widgetInfo,\n alignment: newAlignment,\n });\n };\n\n getSaveWarnings = () => {\n const issuesFunc = this.widgetSpecificEditor.current?.getSaveWarnings;\n return issuesFunc ? issuesFunc() : [];\n };\n\n serialize = () => {\n const widgetInfo = this.state.widgetInfo;\n return {\n type: widgetInfo.type,\n alignment: widgetInfo.alignment,\n static: widgetInfo.static,\n graded: widgetInfo.graded,\n // The inner widget editor (`this.widget.current`) can be absent\n // even while this WidgetEditor is mounted — e.g. when the widget's\n // type has no registered editor, so `Ed` never renders (see the\n // `{Ed && ...}` guard in render()). In that case fall back to the\n // last-known options rather than dereferencing a null ref, which\n // previously crashed the editor when toggling JSON mode.\n options:\n this.widgetSpecificEditor.current?.serialize() ??\n widgetInfo.options,\n version: widgetInfo.version,\n };\n };\n\n render(): React.ReactNode {\n const widgetInfo = this.state.widgetInfo;\n const isEditingDisabled =\n this.props.apiOptions.editingDisabled ?? false;\n\n const Ed = Widgets.getEditor(widgetInfo.type);\n let supportedAlignments: ReadonlyArray<Alignment>;\n\n if (this.props.apiOptions.showAlignmentOptions) {\n supportedAlignments = CoreWidgetRegistry.getSupportedAlignments(\n widgetInfo.type,\n );\n } else {\n // NOTE(kevinb): \"default\" is not one in `validAlignments` in widgets.js.\n supportedAlignments = [\"default\"];\n }\n\n const supportsStaticMode = Widgets.supportsStaticMode(widgetInfo.type);\n const supportsGradedToggle = Widgets.supportsUngraded(widgetInfo.type);\n\n return (\n <div className=\"perseus-widget-editor\">\n <div\n className={\n \"perseus-widget-editor-title \" +\n (this.state.showWidget ? \"open\" : \"closed\")\n }\n >\n <div className=\"perseus-widget-editor-title-id\">\n <View\n style={{\n display: \"flex\",\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: \"0.25em\",\n }}\n onClick={this._toggleWidget}\n >\n <ToggleableCaret\n isExpanded={this.state.showWidget}\n />\n <span>{this.props.id}</span>\n </View>\n </div>\n\n <SectionControlButton\n icon={trashIcon}\n disabled={isEditingDisabled}\n onClick={() => {\n this.props.onRemove();\n }}\n title=\"Remove image widget\"\n />\n </div>\n {this.state.showWidget && (\n <WidgetEditorSettings\n bestPractices={Ed?.bestPractices}\n supportsStaticMode={!!supportsStaticMode}\n isStatic={!!widgetInfo.static}\n onStaticChange={this._setStatic}\n supportsGradedToggle={supportsGradedToggle}\n isGraded={widgetInfo.graded !== false}\n onGradedChange={this._setGraded}\n supportedAlignments={supportedAlignments}\n widgetInfo={widgetInfo}\n onAlignmentChange={this._handleAlignmentChange}\n isEditingDisabled={isEditingDisabled}\n />\n )}\n <div\n className={\n \"perseus-widget-editor-content \" +\n (this.state.showWidget ? \"enter\" : \"leave\")\n }\n >\n {Ed && (\n <Ed\n ref={this.widgetSpecificEditor}\n onChange={this._handleWidgetChange}\n static={widgetInfo.static}\n graded={widgetInfo.graded}\n apiOptions={this.props.apiOptions}\n {...widgetInfo.options}\n />\n )}\n </div>\n </div>\n );\n }\n}\n\nexport default WidgetEditor;\n","import {Widgets} from \"@khanacademy/perseus\";\nimport * as React from \"react\";\nimport _ from \"underscore\";\n\nimport type {APIOptions} from \"@khanacademy/perseus\";\nimport type {PerseusFeatureFlags} from \"@khanacademy/perseus-core\";\n\n// TODO(LEMS-4396): clean up feature flag\nconst WIDGETS_BEHIND_FLAGS: Record<\n string,\n (typeof PerseusFeatureFlags)[number]\n> = {\n \"fill-in-the-blank\": \"dnd-widget-fitb\",\n};\n\ntype WidgetSelectProps = {\n onChange?: (widgetType: string) => unknown;\n flags?: APIOptions[\"flags\"];\n};\n\nclass WidgetSelect extends React.Component<WidgetSelectProps> {\n shouldComponentUpdate() {\n return false;\n }\n\n handleChange = (e: React.SyntheticEvent<HTMLSelectElement>) => {\n const widgetType = e.currentTarget.value;\n if (widgetType === \"\") {\n // NOTE(alpert): Not sure if change will trigger here\n // but might as well be safe\n return;\n }\n if (this.props.onChange) {\n this.props.onChange(widgetType);\n }\n };\n\n render(): React.ReactNode {\n const widgets = {...Widgets.getPublicWidgets()};\n\n // TODO(LEMS-4396): clean up feature flag\n for (const [widgetType, flag] of Object.entries(WIDGETS_BEHIND_FLAGS)) {\n const widgetExport = Widgets.getWidgetExport(widgetType);\n if (this.props.flags?.[flag] && widgetExport) {\n widgets[widgetType] = widgetExport;\n } else {\n delete widgets[widgetType];\n }\n }\n\n const orderedWidgetNames = _.sortBy(Object.keys(widgets), (name) => {\n return widgets[name].displayName;\n });\n const addWidgetString = \"Add a widget\\u2026\";\n return (\n <select\n value=\"\"\n onChange={this.handleChange}\n data-testid=\"editor__widget-select\"\n >\n <option value=\"\">{addWidgetString}</option>\n <option disabled>--</option>\n {orderedWidgetNames.map((name) => {\n return (\n <option key={name} value={name}>\n {widgets[name].displayName}\n </option>\n );\n })}\n </select>\n );\n }\n}\n\nexport default WidgetSelect;\n","import type {PerseusWidgetsMap} from \"@khanacademy/perseus-core\";\n\nexport interface PerseusClipboardData {\n text: string;\n widgets: PerseusWidgetsMap;\n}\n\nexport function setPerseusClipboardData({\n text,\n widgets,\n}: PerseusClipboardData): Promise<void> {\n const dummyElement = document.createElement(\"span\");\n dummyElement.setAttribute(\"data-perseus-widgets\", JSON.stringify(widgets));\n\n return navigator.clipboard.write([\n new ClipboardItem({\n \"text/plain\": text,\n \"text/html\": dummyElement.outerHTML,\n }),\n ]);\n}\n\nexport async function getPerseusClipboardData(): Promise<PerseusClipboardData> {\n const clipboardItems = await navigator.clipboard.read();\n\n let widgets: PerseusWidgetsMap = {};\n let text: string = \"\";\n for (const item of clipboardItems) {\n if (item.types.includes(\"text/html\")) {\n const dummyDiv = document.createElement(\"span\");\n const htmlBlob = await item.getType(\"text/html\");\n dummyDiv.innerHTML = await htmlBlob.text();\n const widgetsJson = dummyDiv\n .querySelector(\"[data-perseus-widgets]\")\n ?.getAttribute(\"data-perseus-widgets\");\n if (widgetsJson) {\n widgets = JSON.parse(widgetsJson);\n }\n }\n if (item.types.includes(\"text/plain\")) {\n const plainTextBlob = await item.getType(\"text/plain\");\n text = await plainTextBlob.text();\n }\n }\n\n return {widgets, text};\n}\n","/* eslint-disable max-lines */\nimport {\n PerseusMarkdown,\n Util,\n Widgets,\n ApiOptions,\n Log,\n} from \"@khanacademy/perseus\";\nimport {\n CoreWidgetRegistry,\n Errors,\n getWidgetIdsFromContent,\n PerseusError,\n} from \"@khanacademy/perseus-core\";\nimport * as React from \"react\";\nimport _ from \"underscore\";\n\nimport DragTarget from \"./components/drag-target\";\nimport WidgetEditor from \"./components/widget-editor\";\nimport WidgetSelect from \"./components/widget-select\";\nimport {\n getPerseusClipboardData,\n setPerseusClipboardData,\n} from \"./util/clipboard\";\n\nimport type {APIOptions, ImageUploader} from \"@khanacademy/perseus\";\nimport type {\n PerseusRenderer,\n PerseusWidget,\n PerseusWidgetsMap,\n} from \"@khanacademy/perseus-core\";\n\n// like [[snowman numeric-input 1]]\nconst widgetPlaceholder = \"[[\\u2603 {id}]]\";\nconst widgetRegExp = \"(\\\\[\\\\[\\u2603 {id}\\\\]\\\\])\";\nconst rWidgetSplit = new RegExp(\n widgetRegExp.replace(\"{id}\", \"[a-z-]+ [0-9]+\"),\n \"g\",\n);\n\nconst shortcutRegexp = /^\\[\\[([a-z-]+)$/; // like [[nu, [[int, etc\n\nconst ENDS_WITH_A_PARAGRAPH = /(?:\\n{2,}|^\\n*)$/;\nconst TRAILING_NEWLINES = /(\\n*)$/;\nconst LEADING_NEWLINES = /^(\\n*)/;\n\nconst commafyInteger = (n: number) => {\n let str = n.toString();\n if (str.length >= 5) {\n str = str.replace(/(\\d)(?=(\\d{3})+$)/g, \"$1{,}\");\n }\n return str;\n};\nconst makeEndWithAParagraphIfNecessary = (content: string) => {\n if (!ENDS_WITH_A_PARAGRAPH.test(content)) {\n const match = TRAILING_NEWLINES.exec(content);\n if (match) {\n const newlines = match[1];\n return content + \"\\n\\n\".slice(0, 2 - newlines.length);\n }\n }\n return content;\n};\nconst makeStartWithAParagraphAlways = (content) => {\n const match = LEADING_NEWLINES.exec(content);\n if (!match) {\n return content;\n }\n const newlines = match[1];\n return \"\\n\\n\".slice(0, 2 - newlines.length) + content;\n};\n\n// This is more general than the actual markdown image parsing regex,\n// which is fine for correctness since it should only mean we could\n// store extra image dimensions, unless the question is insanely\n// formatted.\n// A simplified regex here should hopefully be easier to keep in\n// sync if the markdown parsing changes, though if it becomes\n// easy to hook into the actual markdown regex without copy-pasting\n// it, we should do that.\nconst IMAGE_REGEX = /!\\[[^\\]]*\\]\\(([^\\s)]+)[^)]*\\)/g;\n\n/**\n * Find all the matches to a /g regex.\n *\n * Returns an array of the regex matches. Infinite loops if `regex` does not\n * have a /g modifier.\n *\n * Note: Returns an array of the capture objects, whereas String::match\n * ignores captures. If you don't need captures, use String::match\n */\nconst allMatches = function (regex: RegExp, str: string) {\n const result: Array<RegExpExecArray> = [];\n // eslint-disable-next-line no-constant-condition\n while (true) {\n const match = regex.exec(str);\n if (!match) {\n break;\n }\n result.push(match);\n }\n return result;\n};\n\n/**\n * Return an array of URLs of all the images in the given renderer\n * markdown.\n */\nconst imageUrlsFromContent = function (content: string) {\n return allMatches(IMAGE_REGEX, content).map((capture) => capture[1]);\n};\n\ntype Props = Readonly<{\n additionalTemplates: Record<string, string>;\n apiOptions: any;\n className?: string;\n content: string;\n placeholder: string;\n widgets: PerseusWidgetsMap;\n images: any;\n disabled: boolean;\n widgetEnabled: boolean;\n showWordCount: boolean;\n warnNoPrompt: boolean;\n warnNoWidgets: boolean;\n widgetIsOpen?: boolean;\n imageUploader?: ImageUploader;\n onChange: (renderer: PerseusRenderer) => void;\n}>;\n\ntype DefaultProps = {\n content: string;\n disabled: boolean;\n images: Record<any, any>;\n placeholder: string;\n showWordCount: boolean;\n warnNoPrompt: boolean;\n warnNoWidgets: boolean;\n widgetEnabled: boolean;\n widgets: {\n [name: string]: PerseusWidget;\n };\n additionalTemplates: Props[\"additionalTemplates\"];\n apiOptions: APIOptions;\n};\n\ntype State = {\n textAreaValue: string;\n // Stores the last-seen version of each widget passed to the `widgets`\n // prop. This allows widgets to be recreated when the user deletes a\n // widget from the content string and then hits ctrl+Z / \"undo\".\n // NOTE: This is technically a memory leak, since\n // `rememberedWidgetsForUndo` is not cleared during the lifetime of the\n // component instance.\n rememberedWidgetsForUndo: PerseusWidgetsMap;\n};\n\n// Contextual information that widgets can use,\n// through initializeWidgetOptions,\n// to initialize widget options\nexport type InitializeWidgetOptionsParams = {\n selectedText: string;\n};\n\nclass Editor extends React.Component<Props, State> {\n lastUserValue: string | null | undefined;\n // When set, componentDidUpdate will move the textarea cursor to this\n // position after the next render commits. Used by paste and widget-insert\n // handlers to restore the cursor to a sensible position once React has\n // re-rendered the textarea with the new content value. See componentDidUpdate.\n _pendingCursorPos: number | null = null;\n widgetIds: any | null | undefined;\n\n underlay = React.createRef<HTMLDivElement>();\n textarea = React.createRef<HTMLTextAreaElement>();\n\n static defaultProps: DefaultProps = {\n content: \"\",\n placeholder: \"\",\n widgets: {},\n images: {},\n disabled: false,\n widgetEnabled: true,\n showWordCount: false,\n warnNoPrompt: false,\n warnNoWidgets: false,\n additionalTemplates: {},\n apiOptions: ApiOptions.defaults,\n };\n\n state: State = {\n textAreaValue: this.props.content,\n rememberedWidgetsForUndo: {},\n };\n\n static getDerivedStateFromProps(props, state): Partial<State> {\n return {\n textAreaValue: props.content,\n rememberedWidgetsForUndo: {\n ...state.rememberedWidgetsForUndo,\n ...props.widgets,\n },\n };\n }\n\n componentDidMount() {\n // See componentDidUpdate() for how this flag is used\n this.lastUserValue = null;\n\n // This can't be in componentWillMount because that's happening during\n // the middle of our parent's render, so we can't call\n // this.props.onChange during that, since it calls our parent's\n // setState\n this._sizeImages(this.props);\n }\n\n componentDidUpdate(prevProps: Props) {\n const textarea = this.textarea.current;\n\n // Replace the textarea's value via document.execCommand(\"insertText\")\n // rather than `textarea.value = ...` so the change goes into the\n // browser's undo stack — Ctrl+Z then unwinds a paste or widget insert\n // as one step, the same as a user-typed edit would.\n // See https://stackoverflow.com/questions/41273569/how-to-enable-ctrl-z-when-you-change-an-input-text-dynamically-with-react\n // `execCommand` is deprecated per MDN but remains the only widely\n // supported way to keep programmatic edits in the undo stack; all of\n // Khan Academy's supported browsers implement it (per caniuse, global\n // support is ~96% as of June 2026).\n if (this.lastUserValue != null && textarea) {\n textarea.focus();\n textarea.value = this.lastUserValue;\n textarea.selectionStart = 0;\n textarea.setSelectionRange(0, prevProps.content.length);\n document.execCommand(\"insertText\", false, this.props.content);\n this.lastUserValue = null;\n }\n\n // If a handler (paste, widget insert) requested a specific cursor\n // position to be applied after the controlled-component re-render,\n // do that now.\n if (this._pendingCursorPos != null && textarea) {\n Util.textarea.moveCursor(textarea, this._pendingCursorPos);\n this._pendingCursorPos = null;\n }\n\n // This can't be in componentWillReceiveProps because that's happening\n // during the middle of our parent's render.\n if (this.props.content !== prevProps.content) {\n this._sizeImages(this.props);\n }\n }\n\n handleChange(changed: Partial<PerseusRenderer>) {\n this.props.onChange({\n content: this.props.content,\n images: this.props.images,\n widgets: this.props.widgets,\n ...changed,\n });\n }\n\n getWidgetEditor(\n id: string,\n type: PerseusWidget[\"type\"],\n ): undefined | React.ReactNode {\n if (!Widgets.getEditor(type)) {\n return;\n }\n return (\n <WidgetEditor\n widgetInfo={this.props.widgets[id]}\n ref={id}\n id={id}\n key={id}\n onChange={this._handleWidgetEditorChange.bind(this, id)}\n onRemove={this._handleWidgetEditorRemove.bind(this, id)}\n apiOptions={this.props.apiOptions}\n widgetIsOpen={this.props.widgetIsOpen}\n />\n );\n }\n\n _handleWidgetEditorChange: (\n id: string,\n newWidgetInfo: PerseusWidget,\n ) => void = (id: string, newWidgetInfo: PerseusWidget) => {\n const widgets = Object.assign({}, this.props.widgets);\n widgets[id] = Object.assign({}, widgets[id], newWidgetInfo);\n this.handleChange({widgets});\n };\n\n _handleWidgetEditorRemove: (id: string) => void = (id: string) => {\n // eslint-disable-next-line no-alert\n if (!confirm(\"Are you sure you want to delete this item?\")) {\n return;\n }\n\n const textarea = this.textarea.current;\n const re = new RegExp(widgetRegExp.replace(\"{id}\", id), \"gm\");\n const newContent = textarea?.value.replace(re, \"\") ?? \"\";\n this.handleChange({content: newContent});\n };\n\n /**\n * Calculate the size of all the images in props.content, and send\n * those sizes to this.props.images using props.onChange.\n */\n _sizeImages: (props: Props) => void = (props: Props) => {\n const imageUrls = imageUrlsFromContent(props.content);\n\n // Discard any images in our dimension table that no\n // longer exist in content.\n const images = _.pick(props.images, imageUrls);\n\n // Only calculate sizes for images that were not present previously.\n // Most content edits shouldn't have new images.\n // This could get weird in the case of multiple images with the same\n // URL, if you've changed the backing image size, but given graphie\n // hashes it's probably an edge case.\n const newImageUrls = _.filter(imageUrls, (url) => !images[url]);\n\n // TODO(jack): Q promises would make this nicer and only\n // fire once.\n _.each(newImageUrls, (url) => {\n Util.getImageSize(url, (width, height) => {\n // We keep modifying the same image object rather than a new\n // copy from this.props because all changes here are additive.\n // Maintaining old changes isn't strictly necessary if\n // props.onChange calls are not batched, but would be if they\n // were, so this is nice from that anti-race-condition\n // perspective as well.\n images[url] = {\n width: width,\n height: height,\n };\n this.handleChange({images: _.clone(images)});\n });\n });\n };\n\n handleDrop = (e: React.MouseEvent) => {\n const {imageUploader} = this.props;\n let content = this.state.textAreaValue || \"\";\n const dataTransfer =\n \"dataTransfer\" in e\n ? // eslint-disable-next-line no-restricted-syntax\n (e.dataTransfer as DataTransfer | null)\n : null;\n\n if (!dataTransfer || !imageUploader) {\n return;\n }\n\n // files will hold something if the drag was from the desktop or a file\n // located on the user's computer.\n const files = dataTransfer.files;\n\n // ... but we only get a url if the drag originated in another window\n if (files.length === 0) {\n const imageUrl = dataTransfer.getData(\"URL\");\n\n if (imageUrl) {\n const newContent = content + \"\\n\\n![](\" + imageUrl + \")\";\n // See componentDidUpdate() for how this flag is used\n this.lastUserValue = this.props.content;\n this.handleChange({content: newContent});\n }\n\n return;\n }\n\n const origContent = this.state.textAreaValue;\n\n /* For each file we make sure it's an image, then create a sentinel -\n * snowman + identifier to insert into the current text. The sentinel\n * only lives there temporarily until we get a response back from the\n * server that the image is now hosted on AWS, at which time we replace\n * the temporary sentinel with the permanent url for the image.\n *\n * There is an abuse of tap in the middle of the pipeline to make sure\n * everything is sequenced in the correct order. We want to modify the\n * content (given any number of images) at the same time, i.e. only\n * once, so we do that step with the tap. After the content has been\n * changed we send off the request for each image.\n *\n * Note that the snowman doesn't do anything special in this case -\n * it's effectively just part of a broken link. Perseus could be\n * extended to recognize this sentinel and highlight it like for\n * widgets.\n */\n _(files)\n .chain()\n .map(function (file) {\n if (!file.type.match(\"image.*\")) {\n return null;\n }\n\n const sentinel = \"\\u2603 \" + _.uniqueId(\"image_\");\n content += \"\\n\\n![](\" + sentinel + \")\";\n\n return {file: file, sentinel: sentinel};\n })\n .reject((fileAndSentinel) => fileAndSentinel === null)\n .tap(() => {\n // See componentDidUpdate() for how this flag is used\n this.lastUserValue = origContent;\n this.handleChange({content: content});\n })\n .each((fileAndSentinel) => {\n // @ts-expect-error - TS2531 - Object is possibly 'null'. | TS2345 - Argument of type 'File' is not assignable to parameter of type 'string'.\n imageUploader(fileAndSentinel.file, (url) => {\n // See componentDidUpdate() for how this flag is used\n this.lastUserValue = origContent;\n this.handleChange({\n content: this.state.textAreaValue.replace(\n // @ts-expect-error - TS2531 - Object is possibly 'null'.\n fileAndSentinel.sentinel,\n url,\n ),\n });\n });\n });\n };\n\n handleContentChange: (\n e: React.SyntheticEvent<HTMLTextAreaElement>,\n ) => void = (e: React.SyntheticEvent<HTMLTextAreaElement>) => {\n const newValue = e.currentTarget.value;\n this.setState({textAreaValue: newValue});\n const widgets = this.getWidgetsReferencedIn(newValue);\n if (newValue !== this.props.content) {\n this.handleChange({content: newValue, widgets});\n }\n };\n\n _handleKeyDown: (e: React.KeyboardEvent<HTMLTextAreaElement>) => void = (\n e: React.KeyboardEvent<HTMLTextAreaElement>,\n ) => {\n e.stopPropagation();\n // Tab-completion of widgets. For example, to insert an image:\n // type `[[im`, then tab.\n if (e.key === \"Tab\") {\n // We're in an event handler attached to the textarea, so the ref\n // can't be empty/undefined! (which is why its safe to use the\n // non-null-assertion here. aka the `!` suffix)\n const textarea = this.textarea.current!;\n\n const word = Util.textarea.getWordBeforeCursor(textarea);\n const matches = word.string.toLowerCase().match(shortcutRegexp);\n\n if (matches != null) {\n const text = matches[1];\n const widgets = Widgets.getAllWidgetTypes();\n const matchingWidgets = widgets.filter((name) => {\n return name.substring(0, text.length) === text;\n });\n\n if (matchingWidgets.length === 1) {\n const widgetType = matchingWidgets[0];\n\n this._addWidgetToContent(\n this.props.content,\n [word.pos.start, word.pos.end + 1],\n widgetType,\n );\n }\n\n e.preventDefault();\n }\n }\n };\n\n _maybeCopyWidgets: (e: React.SyntheticEvent<HTMLTextAreaElement>) => void =\n (e: React.SyntheticEvent<HTMLTextAreaElement>) => {\n const textarea = e.currentTarget;\n const selectedText = textarea.value.substring(\n textarea.selectionStart,\n textarea.selectionEnd,\n );\n\n const widgetIds: Array<keyof PerseusWidgetsMap> = _.map(\n // @ts-expect-error - TS2345 - Argument of type 'RegExpMatchArray | null' is not assignable to parameter of type 'Collection<any>'.\n selectedText.match(rWidgetSplit),\n (syntax) => {\n // @ts-expect-error - TS2531 - Object is possibly 'null'.\n return Util.rWidgetParts.exec(syntax)[1];\n },\n );\n\n const widgetData = _.pick(this.serialize().widgets, widgetIds);\n setPerseusClipboardData({\n text: selectedText,\n widgets: widgetData,\n }).catch((err) =>\n Log.error(\"failed to copy data to clipboard\", \"Internal\", {\n cause: err,\n }),\n );\n };\n\n _maybePasteWidgets: (e: React.SyntheticEvent<HTMLTextAreaElement>) => void =\n async (e: React.SyntheticEvent<HTMLTextAreaElement>) => {\n e.preventDefault();\n\n // Read the event target synchronously: `currentTarget` is only\n // valid while the event is being dispatched, and we await below.\n const textarea = e.currentTarget;\n\n const {widgets, text: textToBePasted} =\n await getPerseusClipboardData();\n\n const safeWidgetMapping = this._safeWidgetNameMapping(widgets);\n\n // Use safe widget name map to construct the new widget data\n const safeWidgetData: Record<string, any> = {};\n for (const [key, data] of Object.entries(widgets)) {\n safeWidgetData[safeWidgetMapping[key]] = data;\n }\n\n // Use safe widget name map to construct new text\n const safeText = textToBePasted.replace(rWidgetSplit, (syntax) => {\n const match = Util.rWidgetParts.exec(syntax);\n // @ts-expect-error - TS2531 - Object is possibly 'null'.\n const completeWidget = match[0];\n // @ts-expect-error - TS2531 - Object is possibly 'null'.\n const widget = match[1];\n return completeWidget.replace(\n widget,\n safeWidgetMapping[widget],\n );\n });\n\n // Add pasted text to previous content, replacing selected text to\n // replicate normal paste behavior.\n const selectionStart = textarea.selectionStart;\n const newContent =\n this.state.textAreaValue.substr(0, selectionStart) +\n safeText +\n this.state.textAreaValue.substr(textarea.selectionEnd);\n\n // See componentDidUpdate() for how this flag is used\n this.lastUserValue = this.state.textAreaValue;\n // After React commits the new content, place the cursor at the end\n // of what we just pasted in.\n this._pendingCursorPos = selectionStart + safeText.length;\n this.handleChange({\n content: newContent,\n widgets: {\n ...safeWidgetData,\n ...this.getWidgetsReferencedIn(newContent),\n },\n });\n };\n\n _safeWidgetNameMapping: (widgetData: {\n [name: string]: any;\n }) => Record<any, any> = (widgetData: {[name: string]: any}) => {\n // Helper function for _maybePasteWidgets.\n // For each widget about to be pasted, construct a mapping from\n // old widget name to a new widget name that doesn't have conflicts\n // with widgets already in the editor.\n // eg. If there is an \"image 2\" already present in the editor and we're\n // about to paste in two new images, return\n // { \"image 1\": \"image 3\", \"image 2\": \"image 4\" }\n //\n // TODO switch to UUIDs rather than these fragile IDs\n // see: LEMS-1845\n\n // List of widgets about to be pasted as [[name, number], ...]\n const widgets = Object.keys(widgetData).map((name) => name.split(\" \"));\n const widgetTypes = _.uniq(widgets.map((widget) => widget[0]));\n\n // List of existing widgets as [[name, number], ...]\n const existingWidgets = Object.keys(this.props.widgets).map((name) =>\n name.split(\" \"),\n );\n\n // Mapping of widget type to a safe (non-conflicting) number\n // eg. { \"image\": 2, \"dropdown\": 1 }\n const safeWidgetNums: Record<string, any> = {};\n _.each(widgetTypes, (type) => {\n safeWidgetNums[type] = _.chain(existingWidgets)\n .filter((existingWidget) => existingWidget[0] === type)\n .map((existingWidget) => +existingWidget[1] + 1)\n .max()\n .value();\n // If there are no existing widgets _.max returns -Infinity\n safeWidgetNums[type] = Math.max(safeWidgetNums[type], 1);\n });\n\n // Construct mapping, incrementing the vals in safeWidgetNums as we go\n const safeWidgetMapping: Record<string, any> = {};\n _.each(widgets, (widget) => {\n const widgetName = widget.join(\" \");\n const widgetType = widget[0];\n\n safeWidgetMapping[widgetName] =\n `${widgetType} ${safeWidgetNums[widgetType]}`;\n safeWidgetNums[widgetType]++;\n });\n\n return safeWidgetMapping;\n };\n\n // @ts-expect-error: Types of parameter 'widgetType' and 'widgetType' are incompatible. Type 'string' is not assignable to type '\"cs-program\" | \"iframe\" | \"table\" | \"video\" | \"image\" | \"deprecated-standin\" | \"categorizer\" | \"definition\" | \"dropdown\" | \"explanation\" | \"expression\" | \"graded-group\" | \"graded-group-set\" | ... 20 more ... | \"radio\"'.\n _addWidgetToContent: (\n oldContent: string,\n cursorRange: ReadonlyArray<number>,\n widgetType: string,\n ) => void = (\n oldContent: string,\n cursorRange: ReadonlyArray<number>,\n widgetType: PerseusWidget[\"type\"],\n ) => {\n // Note: we have to use _.map here instead of Array::map\n // because the results of a .match might be null if no\n // widgets were found.\n // @ts-expect-error - TS2345 - Argument of type 'RegExpMatchArray | null' is not assignable to parameter of type 'Collection<any>'.\n const allWidgetIds = _.map(oldContent.match(rWidgetSplit), (syntax) => {\n const match = Util.rWidgetParts.exec(syntax);\n // @ts-expect-error - TS2531 - Object is possibly 'null'.\n const type = match[2];\n // @ts-expect-error - TS2531 - Object is possibly 'null'.\n const num = +match[3];\n return [type, num];\n });\n\n const widgetNum = _.reduce(\n allWidgetIds,\n (currentNum, otherId) => {\n const [otherType, otherNum] = otherId;\n if (otherType === widgetType) {\n return Math.max(otherNum + 1, currentNum);\n }\n return currentNum;\n },\n 1,\n );\n\n const id = widgetType + \" \" + widgetNum;\n const widgetContent = widgetPlaceholder.replace(\"{id}\", id);\n\n // Add newlines before block-display widgets like graphs\n const isBlock =\n CoreWidgetRegistry.getDefaultAlignment(widgetType) === \"block\";\n\n const selectedText = oldContent.slice(cursorRange[0], cursorRange[1]);\n const prelude = oldContent.slice(0, cursorRange[0]);\n const postlude = oldContent.slice(cursorRange[1]);\n\n const newPrelude = isBlock\n ? makeEndWithAParagraphIfNecessary(prelude)\n : prelude;\n const newPostlude = isBlock\n ? makeStartWithAParagraphAlways(postlude)\n : postlude;\n\n const newContent = newPrelude + widgetContent + newPostlude;\n\n const newWidgets = {...this.props.widgets};\n const widgetEditor = Widgets.getEditor(widgetType);\n const initializeWidgetOptionsParams: InitializeWidgetOptionsParams = {\n selectedText,\n };\n // TODO(benchristel): get rid of all these different ways of\n // initializing widget options. We should probably standardize on\n // getting the initial options from\n // CoreWidgetRegistry.getDefaultWidgetOptions().\n const startWidgetOptions = widgetEditor?.initializeWidgetOptions?.(\n initializeWidgetOptionsParams,\n );\n const defaultProps = widgetEditor?.defaultProps;\n newWidgets[id] = {\n options: startWidgetOptions || defaultProps,\n type: widgetType,\n // Track widget version on creation, so that a widget editor\n // without a valid version prop can only possibly refer to a\n // pre-versioning creation time.\n version: CoreWidgetRegistry.getCurrentVersion(widgetType),\n };\n\n // See componentDidUpdate() for how this flag is used\n this.lastUserValue = this.props.content;\n // After React commits the new content, place the cursor after the\n // newly-inserted widget syntax (and any added newlines).\n this._pendingCursorPos = newContent.length - postlude.length;\n this.handleChange({content: newContent, widgets: newWidgets});\n };\n\n _addWidget: (widgetType: string) => void = (widgetType: string) => {\n const textarea = this.textarea.current;\n if (!textarea) {\n return;\n }\n\n this._addWidgetToContent(\n this.props.content,\n [textarea.selectionStart, textarea.selectionEnd],\n widgetType,\n );\n textarea.focus();\n };\n\n addTemplate: (e: React.SyntheticEvent<HTMLSelectElement>) => void = (\n e: React.SyntheticEvent<HTMLSelectElement>,\n ) => {\n const templateType = e.currentTarget.value;\n if (templateType === \"\") {\n return;\n }\n e.currentTarget.value = \"\";\n\n let oldContent = this.props.content;\n\n // Force templates to have a blank line before them,\n // as they are usually used as block elements\n // (especially important for tables)\n oldContent = oldContent.replace(/\\n*$/, \"\\n\\n\");\n\n let template;\n if (templateType === \"table\") {\n template =\n \"header 1 | header 2 | header 3\\n\" +\n \"- | - | -\\n\" +\n \"data 1 | data 2 | data 3\\n\" +\n \"data 4 | data 5 | data 6\\n\" +\n \"data 7 | data 8 | data 9\";\n } else if (templateType === \"titledTable\") {\n template =\n \"|| **Table title** ||\\n\" +\n \"header 1 | header 2 | header 3\\n\" +\n \"- | - | -\\n\" +\n \"data 1 | data 2 | data 3\\n\" +\n \"data 4 | data 5 | data 6\\n\" +\n \"data 7 | data 8 | data 9\";\n } else if (templateType === \"alignment\") {\n template = \"$\\\\begin{align} \\n\" + \"\\\\\\\\\\\\\\\\\\n\" + \"\\\\end{align}$\";\n } else if (templateType === \"piecewise\") {\n template =\n \"$f(x) = \\\\begin{cases}\\n\" +\n \"7 & \\\\text{if }x=1 \\\\\\\\\\n\" +\n \"f(x-1)+5 & \\\\text{if }x > 1\\n\" +\n \"\\\\end{cases}$\";\n } else if (templateType in this.props.additionalTemplates) {\n template = this.props.additionalTemplates[templateType];\n } else {\n throw new PerseusError(\n \"Invalid template type: \" + templateType,\n Errors.InvalidInput,\n {\n metadata: {templateType},\n },\n );\n }\n\n const newContent = oldContent + template;\n\n // See componentDidUpdate() for how this flag is used\n this.lastUserValue = this.props.content;\n this.handleChange({content: newContent});\n };\n\n getSaveWarnings: () => any = () => {\n const widgetIds = _.intersection(\n this.widgetIds,\n Object.keys(this.refs),\n );\n const warnings = _(widgetIds)\n .chain()\n .map((id) => {\n // @ts-expect-error - TS2339 - Property 'getSaveWarnings' does not exist on type 'ReactInstance'.\n const issuesFunc = this.refs[id].getSaveWarnings;\n const issues = issuesFunc ? issuesFunc() : [];\n return _.map(issues, (issue) => id + \": \" + issue);\n })\n .flatten(true)\n .value();\n\n return warnings;\n };\n\n private getWidgetsReferencedIn(content: string): PerseusWidgetsMap {\n const referencedWidgetIds = getWidgetIdsFromContent(content);\n const allWidgets = {\n // We include `rememberedWidgetsForUndo` here to handle the case\n // where the user deletes a widget and then restores it. Deleting\n // the widget will remove it from `this.props.widgets`, but\n // `rememberedWidgetsForUndo` will still have it.\n ...this.state.rememberedWidgetsForUndo,\n ...this.props.widgets,\n };\n const referencedWidgets: PerseusWidgetsMap = {};\n for (const id of referencedWidgetIds) {\n if (allWidgets[id] != null) {\n referencedWidgets[id] = allWidgets[id];\n }\n }\n return referencedWidgets;\n }\n\n focus: () => void = () => {\n const textarea = this.textarea.current;\n if (textarea) {\n textarea.focus();\n }\n };\n\n /**\n * Returns the current version of the edited {@link PerseusRenderer}.\n *\n * @deprecated Use the `Props.onChange` prop instead.\n */\n serialize(): PerseusRenderer {\n // need to serialize the widgets since the state might not be\n // completely represented in props. ahem //transformer// (and\n // interactive-graph and plotter).\n const widgets: Record<string, any> = {};\n const widgetIds = _.intersection(\n this.widgetIds,\n Object.keys(this.refs),\n );\n _.each(widgetIds, (id) => {\n // @ts-expect-error - TS2339 - Property 'serialize' does not exist on type 'ReactInstance'.\n widgets[id] = this.refs[id].serialize();\n });\n\n return {\n content: this.props.content,\n images: this.props.images,\n widgets,\n };\n }\n\n render(): React.ReactNode {\n let pieces;\n let widgets;\n let underlayPieces;\n let templatesDropDown;\n let widgetsAndTemplates;\n let wordCountDisplay;\n\n if (this.props.showWordCount) {\n const numChars = PerseusMarkdown.characterCount(this.props.content);\n const numWords = Math.floor(numChars / 6);\n wordCountDisplay = (\n <span\n className=\"perseus-editor-word-count\"\n title={\n \"~\" +\n commafyInteger(numWords) +\n \" words (\" +\n commafyInteger(numChars) +\n \" characters)\"\n }\n >\n {commafyInteger(numWords)}\n </span>\n );\n }\n\n if (this.props.widgetEnabled) {\n pieces = this.props.content.split(rWidgetSplit);\n widgets = {};\n underlayPieces = [];\n\n for (let i = 0; i < pieces.length; i++) {\n // We split on widgets so every even-numbered indexed piece is\n // text and odd-numbered indexes are the widget references.\n if (i % 2 === 0) {\n // Normal text\n underlayPieces.push(pieces[i]);\n } else {\n // Widget reference\n const match = Util.rWidgetParts.exec(pieces[i]);\n if (match != null) {\n const id = match[1];\n // eslint-disable-next-line no-restricted-syntax\n const type = match[2] as PerseusWidget[\"type\"];\n\n const selected = false;\n\n const duplicate = id in widgets;\n\n widgets[id] = this.getWidgetEditor(id, type);\n const classes =\n (duplicate || !widgets[id] ? \"error \" : \"\") +\n (selected ? \"selected \" : \"\");\n const key = duplicate ? i : id;\n underlayPieces.push(\n <b className={classes} key={key}>\n {pieces[i]}\n </b>,\n );\n }\n }\n }\n\n this.widgetIds = Object.keys(widgets);\n\n const insertTemplateString = \"Insert template\\u2026\";\n templatesDropDown = (\n <select\n onChange={this.addTemplate}\n data-testid=\"editor__template-select\"\n >\n <option value=\"\">{insertTemplateString}</option>\n <option disabled>--</option>\n <option value=\"table\">Table</option>\n <option value=\"titledTable\">Titled table</option>\n <option value=\"alignment\">Aligned equations</option>\n <option value=\"piecewise\">Piecewise function</option>\n {Object.keys(this.props.additionalTemplates).length > 0 && (\n <option disabled>--</option>\n )}\n {Object.entries(this.props.additionalTemplates).map(\n ([key]) => (\n <option value={key} key={key}>\n {key}\n </option>\n ),\n )}\n </select>\n );\n\n // eslint-disable-next-line no-restricted-syntax\n const widgetNodes = Object.values(widgets) as React.ReactNode;\n widgetsAndTemplates = (\n <div className=\"perseus-editor-widgets\">\n <div className=\"perseus-editor-widgets-selectors\">\n {/* TODO(LEMS-4396): clean up feature flag — `flags`\n goes away with the last flag-gated widget. */}\n <WidgetSelect\n flags={this.props.apiOptions.flags}\n onChange={this._addWidget}\n />\n {templatesDropDown}\n {wordCountDisplay}\n </div>\n {widgetNodes}\n </div>\n );\n } else {\n underlayPieces = [this.props.content];\n }\n\n // Without this, the underlay isn't the proper size when the text ends\n // with a newline.\n underlayPieces.push(<br key=\"end\" />);\n\n const completeTextarea = [\n <div\n className=\"perseus-textarea-underlay\"\n ref={this.underlay}\n key=\"underlay\"\n >\n {underlayPieces}\n </div>,\n <textarea\n ref={this.textarea}\n key=\"textarea\"\n aria-label=\"Markdown content\"\n onChange={this.handleContentChange}\n onKeyDown={this._handleKeyDown}\n onCopy={this._maybeCopyWidgets}\n onCut={this._maybeCopyWidgets}\n onPaste={this._maybePasteWidgets}\n placeholder={this.props.placeholder}\n disabled={this.props.disabled}\n value={this.state.textAreaValue}\n />,\n ];\n\n let textareaWrapper;\n if (this.props.imageUploader) {\n textareaWrapper = (\n <DragTarget\n onDrop={this.handleDrop}\n className=\"perseus-textarea-pair\"\n >\n {completeTextarea}\n </DragTarget>\n );\n } else {\n textareaWrapper = (\n <div className=\"perseus-textarea-pair\">{completeTextarea}</div>\n );\n }\n\n const contentWithoutWidgets = this.props.content.replace(\n /\\[\\[\\u2603 (([a-z-]+) ([0-9]+))\\]\\]/g,\n \"\",\n );\n const noPrompt = contentWithoutWidgets.trim().length === 0;\n const noWidgets = !/\\[\\[\\u2603 (([a-z-]+) ([0-9]+))\\]\\]/g.test(\n this.props.content,\n );\n\n const warningStyle = {\n borderTop: \"none\",\n padding: 4,\n backgroundColor: \"pink\",\n } as const;\n\n const editingDisabled = this.props.apiOptions.editingDisabled;\n\n return (\n <div\n data-testid=\"perseus-single-editor\"\n className={\n \"perseus-single-editor \" +\n (this.props.className || \"\") +\n (editingDisabled ? \" perseus-editor-disabled\" : \"\")\n }\n >\n {textareaWrapper}\n {this.props.warnNoPrompt && noPrompt && (\n <div style={warningStyle}>\n Graded Groups should contain a prompt\n </div>\n )}\n {this.props.warnNoWidgets && noWidgets && (\n <div style={warningStyle}>\n Graded Groups should contain at least one widget\n </div>\n )}\n {widgetsAndTemplates}\n </div>\n );\n }\n}\n\nexport default Editor;\n","import type {Issue} from \"./components/issues-panel\";\n\n// Severities are defined in the perseus-linter package in `rule.ts`\nconst SEVERITY_ERROR = 1;\nconst SEVERITY_WARNING = 2;\nconst SEVERITY_GUIDELINE = 3;\n\nconst SEVERITY_MAP = {\n [SEVERITY_ERROR]: \"high\",\n [SEVERITY_WARNING]: \"medium\",\n [SEVERITY_GUIDELINE]: \"low\",\n};\n\n// This file is meant to contain any and all perseus-editor messages\n// we want to show within the Issues Panel.\nexport const WARNINGS = {\n inaccessibleWidget: (widgetType: string, widgetId: string): Issue => ({\n id: `${widgetId} inaccessible`,\n instanceId: `inaccessible-widget-${widgetId}`,\n description: `This ${widgetType} widget (${widgetId}) is inaccessible. Consider using an alternative to support all learners. Please check out the following documentation on compliant widget options.`,\n helpUrl:\n \"https://khanacademy.atlassian.net/wiki/spaces/LC/pages/1909489691/Widget+Fundamentals\",\n help: \"Widget Fundamentals\",\n impact: \"medium\",\n message:\n \"Selecting inaccessible widgets for a practice item will result in this exercise being hidden from users with 'Hide visually dependant content' setting set to true. Please select another widget or create an alternative practice item.\",\n }),\n\n genericLinterWarning: (\n rule: string,\n message: string,\n severity: number | undefined,\n ): Issue => ({\n id: rule,\n description: message,\n help: \"Learn more about best practices for authoring items\",\n helpUrl:\n \"https://docs.google.com/document/d/1N13f4sY-7EXWDwQ04ivA9vJBVvPPd60qjBT73B4NHuM/edit?tab=t.0\",\n impact: SEVERITY_MAP[severity ?? SEVERITY_GUIDELINE],\n message: message,\n }),\n\n texError: (math: string, errorMessage: string, index: number): Issue => ({\n id: `tex-debug-info-${index + 1}`,\n description:\n \"If your math doesn't display correctly, these errors might help you troubleshoot. Message #content-kitchen for help.\",\n help: \"Learn more about TeX syntax\",\n helpUrl: \"https://khan.github.io/KaTeX/\",\n impact: \"medium\",\n message: `Error in: ${math}\\n\\n${errorMessage}`,\n }),\n};\n","/**\n * This file contains the various message types passed between the editor and\n * the preview iframe.\n */\n\nimport type {SerializableApiOptions} from \"./sanitize-api-options\";\nimport type {A11yIssue} from \"../components/issues-panel\";\nimport type {\n Hint,\n PerseusItem,\n PerseusRenderer,\n} from \"@khanacademy/perseus-core\";\n\n/**\n * The subset of `LinterContextProps` that's meaningful to send across the\n * preview bridge. The receiver wraps this in `pushContextStack(...)` before\n * passing it to the renderer, which fills in the `stack`.\n */\n// TODO(jeremy): Remove this type and inline it into the messages that use it.\ntype PreviewLinterContext = {\n contentType: string;\n highlightLint: boolean;\n};\n\n/**\n * Constant identifier for all Perseus preview messages\n */\nexport const PREVIEW_MESSAGE_SOURCE = \"perseus-preview\" as const;\n\n/**\n * Base type for all preview messages\n */\ninterface PreviewMessageBase {\n source: typeof PREVIEW_MESSAGE_SOURCE;\n}\n\n/**\n * Base type for messages tied to a specific version of the preview content.\n *\n * `contentVersion` is a monotonic counter owned by the parent controller,\n * stamped onto every content update and echoed back on the scan report and\n * highlight commands it produces. It lets both sides discard results computed\n * against content that has since been superseded by a newer edit — see the\n * gating in `use-preview-controller.ts` / `use-preview-presenter.ts`.\n */\ninterface PreviewMessageVersioned extends PreviewMessageBase {\n contentVersion: number;\n}\n\n/**\n * Data for the read-only question preview shown while editing an exercise.\n *\n * This carries just the question's `PerseusRenderer` — the content under edit —\n * rather than a full `PerseusItem`. The answer widgets live inside the question\n * renderer itself; the legacy answer-area tools and hints are previewed\n * elsewhere.\n */\nexport type QuestionPreviewData = {\n question: PerseusRenderer;\n apiOptions: SerializableApiOptions;\n linterContext: PreviewLinterContext;\n reviewMode?: boolean;\n legacyPerseusLint?: ReadonlyArray<string>;\n problemNum?: number;\n};\n\n/**\n * Data for single hint preview (used in hint editor)\n */\nexport type HintPreviewData = {\n hint: Hint;\n pos: number;\n apiOptions: SerializableApiOptions;\n linterContext: PreviewLinterContext;\n};\n\n/**\n * Data for a single article section preview (used in edit mode for one section)\n */\nexport type ArticleSectionPreviewData = {\n article: PerseusRenderer;\n apiOptions: SerializableApiOptions;\n linterContext: PreviewLinterContext;\n legacyPerseusLint?: ReadonlyArray<string>;\n};\n\n/**\n * Data for article-all preview (used in preview mode to render all sections at once)\n */\nexport type ArticleAllPreviewData = {\n article: ReadonlyArray<PerseusRenderer>;\n apiOptions: SerializableApiOptions;\n};\n\n/**\n * Data for the interactive exercise preview (drives the exercise editor's\n * \"Preview\" tab in khan/frontend).\n *\n * Unlike the read-only `question` preview, this signals the iframe to mount the\n * full interactive `ExercisePreview` component (hint controls, answer checking,\n * scoring) rather than a `ServerItemRenderer`. All of that interactivity lives\n * inside the iframe — the parent only sends these fields and never observes or\n * controls the exercise state.\n */\nexport type ExercisePreviewData = {\n item: PerseusItem;\n apiOptions: SerializableApiOptions;\n showRationales: boolean;\n};\n\n/**\n * Union of all preview content types\n */\nexport type PreviewContent =\n | {type: \"question\"; data: QuestionPreviewData}\n | {type: \"hint\"; data: HintPreviewData}\n | {type: \"article-section\"; data: ArticleSectionPreviewData}\n | {type: \"article-all\"; data: ArticleAllPreviewData}\n | {type: \"exercise\"; data: ExercisePreviewData};\n\n// ---- Parent → Iframe messages ----\n\n/**\n * Message from parent sending content data to iframe\n */\ninterface PreviewDataMessage extends PreviewMessageVersioned {\n type: \"content-data\";\n content: PreviewContent;\n}\n\n/**\n * Reply from parent to the iframe's `iframe-ready` handshake, carrying the\n * full current preview state in one message. Sent once per `iframe-ready`\n * (including a genuine reload, which re-announces readiness) — this way a\n * freshly (re)loaded iframe never has to rely on messages sent before it was\n * listening.\n */\ninterface PreviewIframeInitMessage extends PreviewMessageVersioned {\n type: \"iframe-init\";\n content: PreviewContent | null;\n a11yScanningEnabled: boolean;\n}\n\nexport function createPreviewIframeInitMessage(\n content: PreviewContent | null,\n a11yScanningEnabled: boolean,\n contentVersion: number,\n): PreviewIframeInitMessage {\n return {\n source: PREVIEW_MESSAGE_SOURCE,\n type: \"iframe-init\",\n content,\n a11yScanningEnabled,\n contentVersion,\n };\n}\n\n/**\n * Command from parent telling the iframe to enable or disable axe-core\n * accessibility scanning. When enabled, the iframe runs scans and reports back;\n * when disabled, it neither imports nor runs axe-core.\n */\ninterface PreviewSetA11yScanningEnabledMessage extends PreviewMessageBase {\n type: \"set-a11y-scanning-enabled\";\n enabled: boolean;\n}\n\nexport function createPreviewSetA11yScanningEnabledMessage(\n enabled: boolean,\n): PreviewSetA11yScanningEnabledMessage {\n return {\n source: PREVIEW_MESSAGE_SOURCE,\n type: \"set-a11y-scanning-enabled\",\n enabled,\n };\n}\n\n/**\n * Command from parent telling the iframe to highlight the elements for the\n * given instanceIds (the \"Show Me\" overlays drawn inside the iframe).\n */\ninterface PreviewHighlightIssuesMessage extends PreviewMessageVersioned {\n type: \"highlight-issues\";\n instanceIds: string[];\n}\n\nexport function createPreviewHighlightIssuesMessage(\n instanceIds: string[],\n contentVersion: number,\n): PreviewHighlightIssuesMessage {\n return {\n source: PREVIEW_MESSAGE_SOURCE,\n type: \"highlight-issues\",\n instanceIds,\n contentVersion,\n };\n}\n\n/**\n * Command from parent telling the iframe to remove any \"Show Me\" highlight\n * overlays it is currently drawing.\n */\ninterface PreviewClearHighlightsMessage extends PreviewMessageBase {\n type: \"clear-highlights\";\n}\n\nexport function createPreviewClearHighlightsMessage(): PreviewClearHighlightsMessage {\n return {\n source: PREVIEW_MESSAGE_SOURCE,\n type: \"clear-highlights\",\n };\n}\n\n/**\n * Union of all messages sent from parent to iframe\n */\nexport type ParentToIframeMessage =\n | PreviewDataMessage\n | PreviewIframeInitMessage\n | PreviewSetA11yScanningEnabledMessage\n | PreviewHighlightIssuesMessage\n | PreviewClearHighlightsMessage;\n\n// ---- Iframe → Parent messages ----\n\n/**\n * Message from iframe to parent telling it the iframe is ready\n */\ninterface PreviewIframeReadyMessage extends PreviewMessageBase {\n type: \"iframe-ready\";\n}\n\n/**\n * Message from iframe reporting its content height\n */\ninterface PreviewHeightUpdateMessage extends PreviewMessageBase {\n type: \"height-update\";\n height: number;\n}\n\n/**\n * Message from iframe reporting axe-core accessibility scan results back to the\n * parent.\n */\ninterface PreviewA11yReportMessage extends PreviewMessageVersioned {\n type: \"a11y-report\";\n /** Violations are issues that are confirmed by the a11y scanner. **/\n violations: A11yIssue[];\n /**\n * NeedsReview are issues that the scanner cannot definitively say is a\n * violation or not. Requires manual review.\n */\n needsReview: A11yIssue[];\n}\n\n/**\n * Union of all messages sent from iframe to parent\n */\nexport type IframeToParentMessage =\n | PreviewIframeReadyMessage\n | PreviewHeightUpdateMessage\n | PreviewA11yReportMessage;\n\nexport function createPreviewIframeReadyMessage(): PreviewIframeReadyMessage {\n return {\n source: PREVIEW_MESSAGE_SOURCE,\n type: \"iframe-ready\",\n };\n}\n\n/**\n * @public just to appease knip until the next PR.\n */\nexport function createPreviewA11yReportMessage(\n violations: A11yIssue[],\n needsReview: A11yIssue[],\n contentVersion: number,\n): PreviewA11yReportMessage {\n return {\n source: PREVIEW_MESSAGE_SOURCE,\n type: \"a11y-report\",\n violations,\n needsReview,\n contentVersion,\n };\n}\n","import {PREVIEW_MESSAGE_SOURCE} from \"./message-types\";\n\nimport type {\n IframeToParentMessage,\n ParentToIframeMessage,\n} from \"./message-types\";\n\n/**\n * Type guard to check if an object is an {@link IframeToParentMessage} type.\n *\n * This validates that the message has the correct structure and source\n * identifier to be from a Perseus preview iframe.\n *\n * @param message - Unknown message to validate\n * @returns True if message is a valid {@link IframeToParentMessage}\n */\nexport function isIframeToParentMessage(\n message: unknown,\n): message is IframeToParentMessage {\n return (\n typeof message === \"object\" &&\n message !== null &&\n \"source\" in message &&\n message.source === PREVIEW_MESSAGE_SOURCE &&\n \"type\" in message &&\n typeof message.type === \"string\"\n );\n}\n\n/**\n * Type guard to check if a message is from the Perseus preview system parent.\n *\n * This validates that the message has the correct structure and source\n * identifier to be from a Perseus preview host.\n *\n * @param message - Unknown message to validate\n * @returns True if message is a valid {@link ParentToIframeMessage}\n */\nexport function isParentToIframeMessage(\n message: unknown,\n): message is ParentToIframeMessage {\n return (\n typeof message === \"object\" &&\n message !== null &&\n \"source\" in message &&\n message.source === PREVIEW_MESSAGE_SOURCE &&\n \"type\" in message &&\n typeof message.type === \"string\"\n );\n}\n","import type {APIOptions} from \"@khanacademy/perseus\";\n\n/**\n * The `APIOptions` fields that can't survive `postMessage`'s structured-clone\n * algorithm — function callbacks and React nodes. `sanitizeApiOptions` strips\n * exactly these, so keep this list and the destructuring below in sync.\n */\ntype NonSerializableApiOptionKey =\n | \"onFocusChange\"\n | \"answerableCallback\"\n | \"getAnotherHint\"\n | \"interactionCallback\"\n | \"trackInteraction\"\n | \"baseElements\"\n | \"imagePlaceholder\"\n | \"widgetPlaceholder\";\n\n/**\n * `APIOptions` with the non-serializable fields removed. This is the shape that\n * actually crosses the preview postMessage bridge, so the preview message types\n * describe their `apiOptions` with this rather than the full `APIOptions`.\n */\nexport type SerializableApiOptions = Omit<\n APIOptions,\n NonSerializableApiOptionKey\n>;\n\n/**\n * Removes non-serializable functions and React components from APIOptions\n * before sending via postMessage.\n *\n * All function callbacks and React components are removed as they cannot be\n * cloned by the structured clone algorithm used by postMessage.\n *\n * Serializable options (booleans, strings, numbers) are preserved.\n */\nexport function sanitizeApiOptions(\n apiOptions: APIOptions,\n): SerializableApiOptions {\n const {\n onFocusChange,\n answerableCallback,\n getAnotherHint,\n interactionCallback,\n trackInteraction,\n baseElements,\n // Remove React nodes (placeholders)\n imagePlaceholder,\n widgetPlaceholder,\n ...serializableOptions\n } = apiOptions;\n\n return serializableOptions;\n}\n","import {UnreachableCaseError} from \"@khanacademy/wonder-stuff-core\";\n\nimport {sanitizeApiOptions} from \"./sanitize-api-options\";\n\nimport type {PreviewContent} from \"./message-types\";\n\n/**\n * Sanitizes preview content by removing non-serializable functions and React\n * components from apiOptions before sending via postMessage.\n */\nexport function sanitizePreviewData(\n /** Preview content to sanitize */\n content: PreviewContent,\n): PreviewContent {\n if (content.data.apiOptions == null) {\n return content;\n }\n\n const sanitizedApiOptions = sanitizeApiOptions(content.data.apiOptions);\n\n // We switch on `content.type` and rebuild each variant explicitly so the\n // result stays a properly-correlated member of the `PreviewContent`\n // discriminated union — a single `{...content, data: {...}}` spread would\n // widen `type` and `data` independently and no longer be assignable.\n switch (content.type) {\n case \"question\":\n return {\n type: content.type,\n data: {\n ...content.data,\n apiOptions: sanitizedApiOptions,\n },\n };\n case \"hint\":\n return {\n type: content.type,\n data: {\n ...content.data,\n apiOptions: sanitizedApiOptions,\n },\n };\n case \"article-section\":\n return {\n type: content.type,\n data: {\n ...content.data,\n apiOptions: sanitizedApiOptions,\n },\n };\n case \"article-all\":\n return {\n type: content.type,\n data: {\n ...content.data,\n apiOptions: sanitizedApiOptions,\n },\n };\n case \"exercise\":\n return {\n type: content.type,\n data: {\n ...content.data,\n apiOptions: sanitizedApiOptions,\n },\n };\n default:\n throw new UnreachableCaseError(content);\n }\n}\n","import {UnreachableCaseError} from \"@khanacademy/wonder-stuff-core\";\nimport * as React from \"react\";\n\nimport {\n createPreviewClearHighlightsMessage,\n createPreviewHighlightIssuesMessage,\n createPreviewIframeInitMessage,\n createPreviewSetA11yScanningEnabledMessage,\n PREVIEW_MESSAGE_SOURCE,\n} from \"./message-types\";\nimport {isIframeToParentMessage} from \"./message-validators\";\nimport {sanitizePreviewData} from \"./preview-data-sanitizer\";\n\nimport type {ParentToIframeMessage, PreviewContent} from \"./message-types\";\nimport type {A11yIssue} from \"../components/issues-panel\";\n\nexport type A11yReport = {\n violations: A11yIssue[];\n needsReview: A11yIssue[];\n};\n\ntype UsePreviewControllerResult = {\n /**\n * Send preview content data to the iframe\n */\n sendData: (data: PreviewContent) => void;\n /**\n * Current height of the iframe content (null if not yet reported)\n */\n height: number | null;\n /**\n * Enable or disable axe-core accessibility scanning in the iframe\n */\n setA11yScanningEnabled: (enabled: boolean) => void;\n /**\n * Highlight the elements for the given instanceIds in the iframe\n */\n highlightIssues: (instanceIds: string[]) => void;\n /**\n * Clear any highlighted elements currently shown in the iframe\n */\n clearHighlights: () => void;\n /**\n * The latest accessibility report received from the iframe (null if none)\n */\n a11yReport: A11yReport | null;\n};\n\n/**\n * Hook for parent/editor to send data to preview iframe and receive updates.\n *\n * This hook:\n * - Sends preview content data to iframe via postMessage\n * - Listens for height updates from iframe\n * - Listens for lint reports from iframe\n * - Automatically sanitizes apiOptions before sending (removes non-serializable functions)\n *\n * @param iframeRef - Reference to the iframe element\n * @returns Object with sendData function and current height\n *\n * @example\n * ```tsx\n * function Editor() {\n * const iframeRef = React.useRef<HTMLIFrameElement>(null);\n * const { sendData, height } = usePreviewController(iframeRef);\n *\n * React.useEffect(() => {\n * sendData({\n * type: \"question\",\n * data: { item, apiOptions, ... }\n * });\n * }, [item, apiOptions]);\n *\n * return <iframe ref={iframeRef} style={{ height }} />;\n * }\n * ```\n */\nexport function usePreviewController(\n iframeRef: React.RefObject<HTMLIFrameElement>,\n): UsePreviewControllerResult {\n const [height, setHeight] = React.useState<number | null>(null);\n const [isIframeReady, setIsIframeReady] = React.useState(false);\n const [a11yReport, setA11yReport] = React.useState<A11yReport | null>(null);\n\n // The current desired preview state, resent in full as an `iframe-init`\n // reply whenever the iframe announces `iframe-ready` — including on a\n // later reload/remount, not just the first time. This way a freshly\n // (re)loaded iframe never has to rely on messages sent before it was\n // listening.\n const currentContentRef = React.useRef<PreviewContent | null>(null);\n const currentA11yScanningEnabledRef = React.useRef(false);\n\n // Sends a message to the iframe, dropping it if the iframe isn't\n // currently mounted (eg. during a reload/remount).\n const postToIframe = React.useCallback(\n (message: ParentToIframeMessage) => {\n iframeRef.current?.contentWindow?.postMessage(message, \"/\");\n },\n [iframeRef],\n );\n\n // Monotonic version of the preview content, bumped on every `sendData`.\n // Lets us discard scan results and highlights that a newer edit has\n // already superseded: we stamp each content update with it and the iframe\n // echoes it back.\n const contentVersionRef = React.useRef(0);\n\n // Listen for messages from iframe\n React.useEffect(() => {\n const handleMessage = (event: MessageEvent) => {\n // Filter by source window - only messages from OUR iframe\n if (\n iframeRef.current?.contentWindow == null ||\n event.source !== iframeRef.current?.contentWindow\n ) {\n return;\n }\n\n const message = event.data;\n\n // Check if it's a Perseus preview message\n if (!isIframeToParentMessage(message)) {\n return;\n }\n\n // Handle the message\n switch (message.type) {\n case \"iframe-ready\": {\n postToIframe(\n createPreviewIframeInitMessage(\n currentContentRef.current\n ? sanitizePreviewData(currentContentRef.current)\n : null,\n currentA11yScanningEnabledRef.current,\n contentVersionRef.current,\n ),\n );\n setIsIframeReady(true);\n break;\n }\n\n case \"height-update\":\n setHeight(message.height);\n break;\n\n case \"a11y-report\":\n // Discard a report computed against content a newer edit\n // has since superseded.\n if (message.contentVersion !== contentVersionRef.current) {\n break;\n }\n setA11yReport({\n violations: message.violations,\n needsReview: message.needsReview,\n });\n break;\n\n default:\n throw new UnreachableCaseError(message);\n }\n };\n\n window.addEventListener(\"message\", handleMessage);\n\n return () => {\n window.removeEventListener(\"message\", handleMessage);\n };\n }, [iframeRef, postToIframe]);\n\n // Memoized function to send data to iframe\n const sendData = React.useCallback(\n (data: PreviewContent) => {\n currentContentRef.current = data;\n contentVersionRef.current += 1;\n\n // We can safely bail here. We'll send a full init message later\n // once the iframe sends it's 'iframe-ready' message.\n if (!isIframeReady) {\n return;\n }\n\n const message: ParentToIframeMessage = {\n source: PREVIEW_MESSAGE_SOURCE,\n type: \"content-data\",\n content: sanitizePreviewData(data),\n contentVersion: contentVersionRef.current,\n };\n\n postToIframe(message);\n },\n [isIframeReady, postToIframe],\n );\n\n // Enables/disables accessibility scanning in the iframe\n const setA11yScanningEnabled = React.useCallback(\n (enabled: boolean) => {\n currentA11yScanningEnabledRef.current = enabled;\n\n // We can safely bail here. We'll send a full init message later\n // once the iframe sends it's 'iframe-ready' message.\n if (!isIframeReady) {\n return;\n }\n\n postToIframe(createPreviewSetA11yScanningEnabledMessage(enabled));\n },\n [isIframeReady, postToIframe],\n );\n\n // Highlights elements in the iframe by instanceId\n const highlightIssues = React.useCallback(\n (instanceIds: string[]) => {\n postToIframe(\n createPreviewHighlightIssuesMessage(\n instanceIds,\n contentVersionRef.current,\n ),\n );\n },\n [postToIframe],\n );\n\n // Clears any highlighted elements in the iframe\n const clearHighlights = React.useCallback(() => {\n postToIframe(createPreviewClearHighlightsMessage());\n }, [postToIframe]);\n\n return {\n sendData,\n height,\n setA11yScanningEnabled,\n highlightIssues,\n clearHighlights,\n a11yReport,\n };\n}\n","import * as React from \"react\";\n\nimport {usePreviewController} from \"./preview/use-preview-controller\";\n\nimport type {PreviewContent} from \"./preview/message-types\";\nimport type {A11yReport} from \"./preview/use-preview-controller\";\n\ntype Props = {\n /**\n * The URL that the iframe should load\n */\n url: string;\n /**\n * Whether the iframe should be displaying in mobile mode\n */\n isMobile: boolean;\n /**\n * Whether to make the iframe's height match its content's height, used to\n * prevent scrolling inside the iframe.\n */\n seamless: boolean;\n\n /**\n * The content to render in the preview area. `null` means no data has\n * been provided yet and the iframe should render an empty placeholder.\n */\n content: PreviewContent | null;\n\n /**\n * Whether the iframe should run axe-core accessibility scans.\n */\n a11yScanningEnabled?: boolean;\n /**\n * instanceIds of the issues to draw \"Show Me\" highlight overlays over in\n * the iframe. Empty clears any highlights.\n */\n highlightInstanceIds?: string[];\n /**\n * Called whenever the iframe reports a new accessibility scan result (or\n * `null` if scanning is disabled).\n */\n onA11yReport?: (report: A11yReport | null) => void;\n};\n\n/**\n * Displays content in an iframe, isolating it from the parent page and\n * switches to rendering for mobile, if needed.\n *\n * To simulate the environment of content rendered by itself, content previews\n * are rendered inside iframes, where components such as the math keypad and\n * mobile breakpoints based on media queries work (because the body of the\n * document is not the body of the editor). To make this work, this component\n * renders an iframe and communicates with it via the\n * {@link usePreviewController} hook and its use of postMessage.\n *\n * This is the new preview iframe component, replacing `IframeContentRenderer`\n * once all editors have migrated. It exists alongside the legacy component so\n * that consumers can keep using `IframeContentRenderer` until they are all\n * ported over.\n */\nfunction PreviewWithIframe(props: Props) {\n const iframeRef = React.useRef<HTMLIFrameElement>(null);\n\n const {\n sendData,\n height,\n setA11yScanningEnabled,\n highlightIssues,\n clearHighlights,\n a11yReport,\n } = usePreviewController(iframeRef);\n\n // NOTE: The `props.content` is an object and will trigger a re-render of\n // this component any time its identity changes (regardless of whether it\n // _actually_ changed). This matches previous behavior from the old\n // IframeContentRenderer. If performance becomes an issue, we can look at\n // using React.memo() on this component or some other performance fix.\n React.useEffect(() => {\n if (props.content != null) {\n sendData(props.content);\n }\n }, [sendData, props.content]);\n\n React.useEffect(() => {\n setA11yScanningEnabled(props.a11yScanningEnabled ?? false);\n }, [setA11yScanningEnabled, props.a11yScanningEnabled]);\n\n React.useEffect(() => {\n if (\n props.highlightInstanceIds != null &&\n props.highlightInstanceIds.length > 0\n ) {\n highlightIssues(props.highlightInstanceIds);\n } else {\n clearHighlights();\n }\n }, [highlightIssues, clearHighlights, props.highlightInstanceIds]);\n\n // Destructured so the effect depends on the specific prop rather than the\n // whole `props` object (which changes on every render).\n const {onA11yReport} = props;\n React.useEffect(() => {\n onA11yReport?.(a11yReport);\n }, [a11yReport, onA11yReport]);\n\n // Update container height based on iframe content height if we're in\n // seamless mode.\n const containerHeight =\n props.seamless && height != null ? `${height}px` : \"100%\";\n\n return (\n <iframe\n ref={iframeRef}\n title={`perseus-preview`}\n data-mobile={String(props.isMobile)}\n // The seamless prop is the same as the \"nochrome\" prop that\n // gets passed to DeviceFramer. If it is set, then we're going\n // to be displaying editor previews and want to leave some room\n // for lint indicators in the right margin.\n data-lint-gutter={String(props.seamless)}\n style={{width: \"100%\", height: containerHeight}}\n src={props.url}\n />\n );\n}\n\nPreviewWithIframe.displayName = \"PreviewWithIframe\";\n\nexport default PreviewWithIframe;\n","/* eslint-disable */\n\n//\n// NOTE(kevinb): This file was originally part of mhchem.js, but\n// was extracted so that it could be mocked for testing purposes.\n//\n\n//\n// This is the main function for handing the \\ce and \\pu commands.\n// It takes the argument to \\ce or \\pu and returns the corresponding TeX string.\n//\n\nexport const chemParse = function (tokens, stateMachine) {\n // Recreate the argument string from KaTeX's array of tokens.\n let str = \"\";\n let expectedLoc = tokens[tokens.length - 1].loc.start;\n for (let i = tokens.length - 1; i >= 0; i--) {\n if (tokens[i].loc.start > expectedLoc) {\n // context.consumeArgs has eaten a space.\n str += \" \";\n expectedLoc = tokens[i].loc.start;\n }\n str += tokens[i].text;\n expectedLoc += tokens[i].text.length;\n }\n const tex = texify.go(mhchemParser.go(str, stateMachine));\n return tex;\n};\n\n//\n// Core parser for mhchem syntax (recursive)\n//\n/** @type {MhchemParser} */\nvar mhchemParser = {\n //\n // Parses mchem \\ce syntax\n //\n // Call like\n // go(\"H2O\");\n //\n go: function (input, stateMachine) {\n if (!input) {\n return [];\n }\n if (stateMachine === undefined) {\n stateMachine = \"ce\";\n }\n let state = \"0\";\n\n //\n // String buffers for parsing:\n //\n // buffer.a == amount\n // buffer.o == element\n // buffer.b == left-side superscript\n // buffer.p == left-side subscript\n // buffer.q == right-side subscript\n // buffer.d == right-side superscript\n //\n // buffer.r == arrow\n // buffer.rdt == arrow, script above, type\n // buffer.rd == arrow, script above, content\n // buffer.rqt == arrow, script below, type\n // buffer.rq == arrow, script below, content\n //\n // buffer.text_\n // buffer.rm\n // etc.\n //\n // buffer.parenthesisLevel == int, starting at 0\n // buffer.sb == bool, space before\n // buffer.beginsWithBond == bool\n //\n // These letters are also used as state names.\n //\n // Other states:\n // 0 == begin of main part (arrow/operator unlikely)\n // 1 == next entity\n // 2 == next entity (arrow/operator unlikely)\n // 3 == next atom\n // c == macro\n //\n /** @type {Buffer} */\n const buffer = {};\n buffer[\"parenthesisLevel\"] = 0;\n\n input = input.replace(/\\n/g, \" \");\n input = input.replace(/[\\u2212\\u2013\\u2014\\u2010]/g, \"-\");\n input = input.replace(/[\\u2026]/g, \"...\");\n\n //\n // Looks through mhchemParser.transitions, to execute a matching action\n // (recursive)\n //\n let lastInput;\n let watchdog = 10;\n /** @type {ParserOutput[]} */\n const output = [];\n while (true) {\n if (lastInput !== input) {\n watchdog = 10;\n lastInput = input;\n } else {\n watchdog--;\n }\n //\n // Find actions in transition table\n //\n const machine = mhchemParser.stateMachines[stateMachine];\n const t = machine.transitions[state] || machine.transitions[\"*\"];\n iterateTransitions: for (let i = 0; i < t.length; i++) {\n const matches = mhchemParser.patterns.match_(\n t[i].pattern,\n input,\n );\n if (matches) {\n //\n // Execute actions\n //\n const task = t[i].task;\n for (let iA = 0; iA < task.action_.length; iA++) {\n var o;\n //\n // Find and execute action\n //\n if (machine.actions[task.action_[iA].type_]) {\n o = machine.actions[task.action_[iA].type_](\n buffer,\n matches.match_,\n task.action_[iA].option,\n );\n } else if (\n mhchemParser.actions[task.action_[iA].type_]\n ) {\n o = mhchemParser.actions[task.action_[iA].type_](\n buffer,\n matches.match_,\n task.action_[iA].option,\n );\n } else {\n throw [\n \"MhchemBugA\",\n \"mhchem bug A. Please report. (\" +\n task.action_[iA].type_ +\n \")\",\n ]; // Trying to use non-existing action\n }\n //\n // Add output\n //\n mhchemParser.concatArray(output, o);\n }\n //\n // Set next state,\n // Shorten input,\n // Continue with next character\n // (= apply only one transition per position)\n //\n state = task.nextState || state;\n if (input.length > 0) {\n if (!task.revisit) {\n input = matches.remainder;\n }\n if (!task.toContinue) {\n break iterateTransitions;\n }\n } else {\n return output;\n }\n }\n }\n //\n // Prevent infinite loop\n //\n if (watchdog <= 0) {\n throw [\"MhchemBugU\", \"mhchem bug U. Please report.\"]; // Unexpected character\n }\n }\n },\n concatArray: function (a, b) {\n if (b) {\n if (Array.isArray(b)) {\n for (let iB = 0; iB < b.length; iB++) {\n a.push(b[iB]);\n }\n } else {\n a.push(b);\n }\n }\n },\n\n patterns: {\n //\n // Matching patterns\n // either regexps or function that return null or {match_:\"a\", remainder:\"bc\"}\n //\n patterns: {\n // property names must not look like integers (\"2\") for correct property traversal order, later on\n empty: /^$/,\n else: /^./,\n else2: /^./,\n space: /^\\s/,\n \"space A\": /^\\s(?=[A-Z\\\\$])/,\n space$: /^\\s$/,\n \"a-z\": /^[a-z]/,\n x: /^x/,\n x$: /^x$/,\n i$: /^i$/,\n letters:\n /^(?:[a-zA-Z\\u03B1-\\u03C9\\u0391-\\u03A9?@]|(?:\\\\(?:alpha|beta|gamma|delta|epsilon|zeta|eta|theta|iota|kappa|lambda|mu|nu|xi|omicron|pi|rho|sigma|tau|upsilon|phi|chi|psi|omega|Gamma|Delta|Theta|Lambda|Xi|Pi|Sigma|Upsilon|Phi|Psi|Omega)(?:\\s+|\\{\\}|(?![a-zA-Z]))))+/,\n \"\\\\greek\":\n /^\\\\(?:alpha|beta|gamma|delta|epsilon|zeta|eta|theta|iota|kappa|lambda|mu|nu|xi|omicron|pi|rho|sigma|tau|upsilon|phi|chi|psi|omega|Gamma|Delta|Theta|Lambda|Xi|Pi|Sigma|Upsilon|Phi|Psi|Omega)(?:\\s+|\\{\\}|(?![a-zA-Z]))/,\n \"one lowercase latin letter $\": /^(?:([a-z])(?:$|[^a-zA-Z]))$/,\n \"$one lowercase latin letter$ $\":\n /^\\$(?:([a-z])(?:$|[^a-zA-Z]))\\$$/,\n \"one lowercase greek letter $\":\n /^(?:\\$?[\\u03B1-\\u03C9]\\$?|\\$?\\\\(?:alpha|beta|gamma|delta|epsilon|zeta|eta|theta|iota|kappa|lambda|mu|nu|xi|omicron|pi|rho|sigma|tau|upsilon|phi|chi|psi|omega)\\s*\\$?)(?:\\s+|\\{\\}|(?![a-zA-Z]))$/,\n digits: /^[0-9]+/,\n \"-9.,9\": /^[+\\-]?(?:[0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\\.[0-9]+))/,\n \"-9.,9 no missing 0\": /^[+\\-]?[0-9]+(?:[.,][0-9]+)?/,\n \"(-)(9.,9)(e)(99)\": function (input) {\n const m = input.match(\n /^(\\+\\-|\\+\\/\\-|\\+|\\-|\\\\pm\\s?)?([0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\\.[0-9]+))?(\\((?:[0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\\.[0-9]+))\\))?(?:([eE]|\\s*(\\*|x|\\\\times|\\u00D7)\\s*10\\^)([+\\-]?[0-9]+|\\{[+\\-]?[0-9]+\\}))?/,\n );\n if (m && m[0]) {\n return {\n match_: m.splice(1),\n remainder: input.substr(m[0].length),\n };\n }\n return null;\n },\n \"(-)(9)^(-9)\": function (input) {\n const m = input.match(\n /^(\\+\\-|\\+\\/\\-|\\+|\\-|\\\\pm\\s?)?([0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\\.[0-9]+)?)\\^([+\\-]?[0-9]+|\\{[+\\-]?[0-9]+\\})/,\n );\n if (m && m[0]) {\n return {\n match_: m.splice(1),\n remainder: input.substr(m[0].length),\n };\n }\n return null;\n },\n \"state of aggregation $\": function (input) {\n // ... or crystal system\n const a = mhchemParser.patterns.findObserveGroups(\n input,\n \"\",\n /^\\([a-z]{1,3}(?=[\\),])/,\n \")\",\n \"\",\n ); // (aq), (aq,$\\infty$), (aq, sat)\n if (a && a.remainder.match(/^($|[\\s,;\\)\\]\\}])/)) {\n return a;\n } // AND end of 'phrase'\n const m = input.match(/^(?:\\((?:\\\\ca\\s?)?\\$[amothc]\\$\\))/); // OR crystal system ($o$) (\\ca$c$)\n if (m) {\n return {match_: m[0], remainder: input.substr(m[0].length)};\n }\n return null;\n },\n \"_{(state of aggregation)}$\": /^_\\{(\\([a-z]{1,3}\\))\\}/,\n \"{[(\": /^(?:\\\\\\{|\\[|\\()/,\n \")]}\": /^(?:\\)|\\]|\\\\\\})/,\n \", \": /^[,;]\\s*/,\n \",\": /^[,;]/,\n \".\": /^[.]/,\n \". \": /^([.\\u22C5\\u00B7\\u2022])\\s*/,\n \"...\": /^\\.\\.\\.(?=$|[^.])/,\n \"* \": /^([*])\\s*/,\n \"^{(...)}\": function (input) {\n return mhchemParser.patterns.findObserveGroups(\n input,\n \"^{\",\n \"\",\n \"\",\n \"}\",\n );\n },\n \"^($...$)\": function (input) {\n return mhchemParser.patterns.findObserveGroups(\n input,\n \"^\",\n \"$\",\n \"$\",\n \"\",\n );\n },\n \"^a\": /^\\^([0-9]+|[^\\\\_])/,\n \"^\\\\x{}{}\": function (input) {\n return mhchemParser.patterns.findObserveGroups(\n input,\n \"^\",\n /^\\\\[a-zA-Z]+\\{/,\n \"}\",\n \"\",\n \"\",\n \"{\",\n \"}\",\n \"\",\n true,\n );\n },\n \"^\\\\x{}\": function (input) {\n return mhchemParser.patterns.findObserveGroups(\n input,\n \"^\",\n /^\\\\[a-zA-Z]+\\{/,\n \"}\",\n \"\",\n );\n },\n \"^\\\\x\": /^\\^(\\\\[a-zA-Z]+)\\s*/,\n \"^(-1)\": /^\\^(-?\\d+)/,\n \"'\": /^'/,\n \"_{(...)}\": function (input) {\n return mhchemParser.patterns.findObserveGroups(\n input,\n \"_{\",\n \"\",\n \"\",\n \"}\",\n );\n },\n \"_($...$)\": function (input) {\n return mhchemParser.patterns.findObserveGroups(\n input,\n \"_\",\n \"$\",\n \"$\",\n \"\",\n );\n },\n _9: /^_([+\\-]?[0-9]+|[^\\\\])/,\n \"_\\\\x{}{}\": function (input) {\n return mhchemParser.patterns.findObserveGroups(\n input,\n \"_\",\n /^\\\\[a-zA-Z]+\\{/,\n \"}\",\n \"\",\n \"\",\n \"{\",\n \"}\",\n \"\",\n true,\n );\n },\n \"_\\\\x{}\": function (input) {\n return mhchemParser.patterns.findObserveGroups(\n input,\n \"_\",\n /^\\\\[a-zA-Z]+\\{/,\n \"}\",\n \"\",\n );\n },\n \"_\\\\x\": /^_(\\\\[a-zA-Z]+)\\s*/,\n \"^_\": /^(?:\\^(?=_)|\\_(?=\\^)|[\\^_]$)/,\n \"{}\": /^\\{\\}/,\n \"{...}\": function (input) {\n return mhchemParser.patterns.findObserveGroups(\n input,\n \"\",\n \"{\",\n \"}\",\n \"\",\n );\n },\n \"{(...)}\": function (input) {\n return mhchemParser.patterns.findObserveGroups(\n input,\n \"{\",\n \"\",\n \"\",\n \"}\",\n );\n },\n \"$...$\": function (input) {\n return mhchemParser.patterns.findObserveGroups(\n input,\n \"\",\n \"$\",\n \"$\",\n \"\",\n );\n },\n \"${(...)}$\": function (input) {\n return mhchemParser.patterns.findObserveGroups(\n input,\n \"${\",\n \"\",\n \"\",\n \"}$\",\n );\n },\n \"$(...)$\": function (input) {\n return mhchemParser.patterns.findObserveGroups(\n input,\n \"$\",\n \"\",\n \"\",\n \"$\",\n );\n },\n \"=<>\": /^[=<>]/,\n \"#\": /^[#\\u2261]/,\n \"+\": /^\\+/,\n \"-$\": /^-(?=[\\s_},;\\]/]|$|\\([a-z]+\\))/, // -space -, -; -] -/ -$ -state-of-aggregation\n \"-9\": /^-(?=[0-9])/,\n \"- orbital overlap\": /^-(?=(?:[spd]|sp)(?:$|[\\s,;\\)\\]\\}]))/,\n \"-\": /^-/,\n \"pm-operator\": /^(?:\\\\pm|\\$\\\\pm\\$|\\+-|\\+\\/-)/,\n operator:\n /^(?:\\+|(?:[\\-=<>]|<<|>>|\\\\approx|\\$\\\\approx\\$)(?=\\s|$|-?[0-9]))/,\n arrowUpDown: /^(?:v|\\(v\\)|\\^|\\(\\^\\))(?=$|[\\s,;\\)\\]\\}])/,\n \"\\\\bond{(...)}\": function (input) {\n return mhchemParser.patterns.findObserveGroups(\n input,\n \"\\\\bond{\",\n \"\",\n \"\",\n \"}\",\n );\n },\n \"->\": /^(?:<->|<-->|->|<-|<=>>|<<=>|<=>|[\\u2192\\u27F6\\u21CC])/,\n CMT: /^[CMT](?=\\[)/,\n \"[(...)]\": function (input) {\n return mhchemParser.patterns.findObserveGroups(\n input,\n \"[\",\n \"\",\n \"\",\n \"]\",\n );\n },\n \"1st-level escape\": /^(&|\\\\\\\\|\\\\hline)\\s*/,\n \"\\\\,\": /^(?:\\\\[,\\ ;:])/, // \\\\x - but output no space before\n \"\\\\x{}{}\": function (input) {\n return mhchemParser.patterns.findObserveGroups(\n input,\n \"\",\n /^\\\\[a-zA-Z]+\\{/,\n \"}\",\n \"\",\n \"\",\n \"{\",\n \"}\",\n \"\",\n true,\n );\n },\n \"\\\\x{}\": function (input) {\n return mhchemParser.patterns.findObserveGroups(\n input,\n \"\",\n /^\\\\[a-zA-Z]+\\{/,\n \"}\",\n \"\",\n );\n },\n \"\\\\ca\": /^\\\\ca(?:\\s+|(?![a-zA-Z]))/,\n \"\\\\x\": /^(?:\\\\[a-zA-Z]+\\s*|\\\\[_&{}%])/,\n orbital: /^(?:[0-9]{1,2}[spdfgh]|[0-9]{0,2}sp)(?=$|[^a-zA-Z])/, // only those with numbers in front, because the others will be formatted correctly anyway\n others: /^[\\/~|]/,\n \"\\\\frac{(...)}\": function (input) {\n return mhchemParser.patterns.findObserveGroups(\n input,\n \"\\\\frac{\",\n \"\",\n \"\",\n \"}\",\n \"{\",\n \"\",\n \"\",\n \"}\",\n );\n },\n \"\\\\overset{(...)}\": function (input) {\n return mhchemParser.patterns.findObserveGroups(\n input,\n \"\\\\overset{\",\n \"\",\n \"\",\n \"}\",\n \"{\",\n \"\",\n \"\",\n \"}\",\n );\n },\n \"\\\\underset{(...)}\": function (input) {\n return mhchemParser.patterns.findObserveGroups(\n input,\n \"\\\\underset{\",\n \"\",\n \"\",\n \"}\",\n \"{\",\n \"\",\n \"\",\n \"}\",\n );\n },\n \"\\\\underbrace{(...)}\": function (input) {\n return mhchemParser.patterns.findObserveGroups(\n input,\n \"\\\\underbrace{\",\n \"\",\n \"\",\n \"}_\",\n \"{\",\n \"\",\n \"\",\n \"}\",\n );\n },\n \"\\\\color{(...)}0\": function (input) {\n return mhchemParser.patterns.findObserveGroups(\n input,\n \"\\\\color{\",\n \"\",\n \"\",\n \"}\",\n );\n },\n \"\\\\color{(...)}{(...)}1\": function (input) {\n return mhchemParser.patterns.findObserveGroups(\n input,\n \"\\\\color{\",\n \"\",\n \"\",\n \"}\",\n \"{\",\n \"\",\n \"\",\n \"}\",\n );\n },\n \"\\\\color(...){(...)}2\": function (input) {\n return mhchemParser.patterns.findObserveGroups(\n input,\n \"\\\\color\",\n \"\\\\\",\n \"\",\n /^(?=\\{)/,\n \"{\",\n \"\",\n \"\",\n \"}\",\n );\n },\n \"\\\\ce{(...)}\": function (input) {\n return mhchemParser.patterns.findObserveGroups(\n input,\n \"\\\\ce{\",\n \"\",\n \"\",\n \"}\",\n );\n },\n oxidation$: /^(?:[+-][IVX]+|\\\\pm\\s*0|\\$\\\\pm\\$\\s*0)$/,\n \"d-oxidation$\": /^(?:[+-]?\\s?[IVX]+|\\\\pm\\s*0|\\$\\\\pm\\$\\s*0)$/, // 0 could be oxidation or charge\n \"roman numeral\": /^[IVX]+/,\n \"1/2$\": /^[+\\-]?(?:[0-9]+|\\$[a-z]\\$|[a-z])\\/[0-9]+(?:\\$[a-z]\\$|[a-z])?$/,\n amount: function (input) {\n let match;\n // e.g. 2, 0.5, 1/2, -2, n/2, +; $a$ could be added later in parsing\n match = input.match(\n /^(?:(?:(?:\\([+\\-]?[0-9]+\\/[0-9]+\\)|[+\\-]?(?:[0-9]+|\\$[a-z]\\$|[a-z])\\/[0-9]+|[+\\-]?[0-9]+[.,][0-9]+|[+\\-]?\\.[0-9]+|[+\\-]?[0-9]+)(?:[a-z](?=\\s*[A-Z]))?)|[+\\-]?[a-z](?=\\s*[A-Z])|\\+(?!\\s))/,\n );\n if (match) {\n return {\n match_: match[0],\n remainder: input.substr(match[0].length),\n };\n }\n const a = mhchemParser.patterns.findObserveGroups(\n input,\n \"\",\n \"$\",\n \"$\",\n \"\",\n );\n if (a) {\n // e.g. $2n-1$, $-$\n match = a.match_.match(\n /^\\$(?:\\(?[+\\-]?(?:[0-9]*[a-z]?[+\\-])?[0-9]*[a-z](?:[+\\-][0-9]*[a-z]?)?\\)?|\\+|-)\\$$/,\n );\n if (match) {\n return {\n match_: match[0],\n remainder: input.substr(match[0].length),\n };\n }\n }\n return null;\n },\n amount2: function (input) {\n return this[\"amount\"](input);\n },\n \"(KV letters),\": /^(?:[A-Z][a-z]{0,2}|i)(?=,)/,\n formula$: function (input) {\n if (input.match(/^\\([a-z]+\\)$/)) {\n return null;\n } // state of aggregation = no formula\n const match = input.match(\n /^(?:[a-z]|(?:[0-9\\ \\+\\-\\,\\.\\(\\)]+[a-z])+[0-9\\ \\+\\-\\,\\.\\(\\)]*|(?:[a-z][0-9\\ \\+\\-\\,\\.\\(\\)]+)+[a-z]?)$/,\n );\n if (match) {\n return {\n match_: match[0],\n remainder: input.substr(match[0].length),\n };\n }\n return null;\n },\n uprightEntities: /^(?:pH|pOH|pC|pK|iPr|iBu)(?=$|[^a-zA-Z])/,\n \"/\": /^\\s*(\\/)\\s*/,\n \"//\": /^\\s*(\\/\\/)\\s*/,\n \"*\": /^\\s*[*.]\\s*/,\n },\n findObserveGroups: function (\n input,\n begExcl,\n begIncl,\n endIncl,\n endExcl,\n beg2Excl,\n beg2Incl,\n end2Incl,\n end2Excl,\n combine,\n ) {\n /** @type {{(input: string, pattern: string | RegExp): string | string[] | null;}} */\n const _match = function (input, pattern) {\n if (typeof pattern === \"string\") {\n if (input.indexOf(pattern) !== 0) {\n return null;\n }\n return pattern;\n }\n const match = input.match(pattern);\n if (!match) {\n return null;\n }\n return match[0];\n };\n /** @type {{(input: string, i: number, endChars: string | RegExp): {endMatchBegin: number, endMatchEnd: number} | null;}} */\n const _findObserveGroups = function (input, i, endChars) {\n let braces = 0;\n while (i < input.length) {\n const a = input.charAt(i);\n const match = _match(input.substr(i), endChars);\n if (match !== null && braces === 0) {\n return {\n endMatchBegin: i,\n endMatchEnd: i + match.length,\n };\n }\n if (a === \"{\") {\n braces++;\n } else if (a === \"}\") {\n if (braces === 0) {\n throw [\n \"ExtraCloseMissingOpen\",\n \"Extra close brace or missing open brace\",\n ];\n } else {\n braces--;\n }\n }\n i++;\n }\n if (braces > 0) {\n return null;\n }\n return null;\n };\n let match = _match(input, begExcl);\n if (match === null) {\n return null;\n }\n input = input.substr(match.length);\n match = _match(input, begIncl);\n if (match === null) {\n return null;\n }\n const e = _findObserveGroups(\n input,\n match.length,\n endIncl || endExcl,\n );\n if (e === null) {\n return null;\n }\n const match1 = input.substring(\n 0,\n endIncl ? e.endMatchEnd : e.endMatchBegin,\n );\n if (!(beg2Excl || beg2Incl)) {\n return {\n match_: match1,\n remainder: input.substr(e.endMatchEnd),\n };\n }\n const group2 = this.findObserveGroups(\n input.substr(e.endMatchEnd),\n beg2Excl,\n beg2Incl,\n end2Incl,\n end2Excl,\n );\n if (group2 === null) {\n return null;\n }\n /** @type {string[]} */\n const matchRet = [match1, group2.match_];\n return {\n match_: combine ? matchRet.join(\"\") : matchRet,\n remainder: group2.remainder,\n };\n },\n\n //\n // Matching function\n // e.g. match(\"a\", input) will look for the regexp called \"a\" and see if it matches\n // returns null or {match_:\"a\", remainder:\"bc\"}\n //\n match_: function (m, input) {\n const pattern = mhchemParser.patterns.patterns[m];\n if (pattern === undefined) {\n throw [\n \"MhchemBugP\",\n \"mhchem bug P. Please report. (\" + m + \")\",\n ]; // Trying to use non-existing pattern\n } else if (typeof pattern === \"function\") {\n return mhchemParser.patterns.patterns[m](input); // cannot use cached var pattern here, because some pattern functions need this===mhchemParser\n } else {\n // RegExp\n const match = input.match(pattern);\n if (match) {\n let mm;\n if (match[2]) {\n mm = [match[1], match[2]];\n } else if (match[1]) {\n mm = match[1];\n } else {\n mm = match[0];\n }\n return {\n match_: mm,\n remainder: input.substr(match[0].length),\n };\n }\n return null;\n }\n },\n },\n\n //\n // Generic state machine actions\n //\n actions: {\n \"a=\": function (buffer, m) {\n buffer.a = (buffer.a || \"\") + m;\n },\n \"b=\": function (buffer, m) {\n buffer.b = (buffer.b || \"\") + m;\n },\n \"p=\": function (buffer, m) {\n buffer.p = (buffer.p || \"\") + m;\n },\n \"o=\": function (buffer, m) {\n buffer.o = (buffer.o || \"\") + m;\n },\n \"q=\": function (buffer, m) {\n buffer.q = (buffer.q || \"\") + m;\n },\n \"d=\": function (buffer, m) {\n buffer.d = (buffer.d || \"\") + m;\n },\n \"rm=\": function (buffer, m) {\n buffer.rm = (buffer.rm || \"\") + m;\n },\n \"text=\": function (buffer, m) {\n buffer.text_ = (buffer.text_ || \"\") + m;\n },\n insert: function (buffer, m, a) {\n return {type_: a};\n },\n \"insert+p1\": function (buffer, m, a) {\n return {type_: a, p1: m};\n },\n \"insert+p1+p2\": function (buffer, m, a) {\n return {type_: a, p1: m[0], p2: m[1]};\n },\n copy: function (buffer, m) {\n return m;\n },\n rm: function (buffer, m) {\n return {type_: \"rm\", p1: m || \"\"};\n },\n text: function (buffer, m) {\n return mhchemParser.go(m, \"text\");\n },\n \"{text}\": function (buffer, m) {\n const ret = [\"{\"];\n mhchemParser.concatArray(ret, mhchemParser.go(m, \"text\"));\n ret.push(\"}\");\n return ret;\n },\n \"tex-math\": function (buffer, m) {\n return mhchemParser.go(m, \"tex-math\");\n },\n \"tex-math tight\": function (buffer, m) {\n return mhchemParser.go(m, \"tex-math tight\");\n },\n bond: function (buffer, m, k) {\n return {type_: \"bond\", kind_: k || m};\n },\n \"color0-output\": function (buffer, m) {\n return {type_: \"color0\", color: m[0]};\n },\n ce: function (buffer, m) {\n return mhchemParser.go(m);\n },\n \"1/2\": function (buffer, m) {\n /** @type {ParserOutput[]} */\n const ret = [];\n if (m.match(/^[+\\-]/)) {\n ret.push(m.substr(0, 1));\n m = m.substr(1);\n }\n const n = m.match(\n /^([0-9]+|\\$[a-z]\\$|[a-z])\\/([0-9]+)(\\$[a-z]\\$|[a-z])?$/,\n );\n n[1] = n[1].replace(/\\$/g, \"\");\n ret.push({type_: \"frac\", p1: n[1], p2: n[2]});\n if (n[3]) {\n n[3] = n[3].replace(/\\$/g, \"\");\n ret.push({type_: \"tex-math\", p1: n[3]});\n }\n return ret;\n },\n \"9,9\": function (buffer, m) {\n return mhchemParser.go(m, \"9,9\");\n },\n },\n //\n // createTransitions\n // convert { 'letter': { 'state': { action_: 'output' } } } to { 'state' => [ { pattern: 'letter', task: { action_: [{type_: 'output'}] } } ] }\n // with expansion of 'a|b' to 'a' and 'b' (at 2 places)\n //\n createTransitions: function (o) {\n let pattern;\n let state;\n /** @type {string[]} */\n let stateArray;\n let i;\n //\n // 1. Collect all states\n //\n /** @type {Transitions} */\n const transitions = {};\n for (pattern in o) {\n for (state in o[pattern]) {\n stateArray = state.split(\"|\");\n o[pattern][state].stateArray = stateArray;\n for (i = 0; i < stateArray.length; i++) {\n transitions[stateArray[i]] = [];\n }\n }\n }\n //\n // 2. Fill states\n //\n for (pattern in o) {\n for (state in o[pattern]) {\n stateArray = o[pattern][state].stateArray || [];\n for (i = 0; i < stateArray.length; i++) {\n //\n // 2a. Normalize actions into array: 'text=' ==> [{type_:'text='}]\n // (Note to myself: Resolving the function here would be problematic. It would need .bind (for *this*) and currying (for *option*).)\n //\n /** @type {any} */\n const p = o[pattern][state];\n if (p.action_) {\n p.action_ = [].concat(p.action_);\n for (let k = 0; k < p.action_.length; k++) {\n if (typeof p.action_[k] === \"string\") {\n p.action_[k] = {type_: p.action_[k]};\n }\n }\n } else {\n p.action_ = [];\n }\n //\n // 2.b Multi-insert\n //\n const patternArray = pattern.split(\"|\");\n for (let j = 0; j < patternArray.length; j++) {\n if (stateArray[i] === \"*\") {\n // insert into all\n for (const t in transitions) {\n transitions[t].push({\n pattern: patternArray[j],\n task: p,\n });\n }\n } else {\n transitions[stateArray[i]].push({\n pattern: patternArray[j],\n task: p,\n });\n }\n }\n }\n }\n }\n return transitions;\n },\n stateMachines: {},\n};\n\n//\n// Definition of state machines\n//\nmhchemParser.stateMachines = {\n //\n // \\ce state machines\n //\n //#region ce\n ce: {\n // main parser\n transitions: mhchemParser.createTransitions({\n empty: {\n \"*\": {action_: \"output\"},\n },\n else: {\n \"0|1|2\": {\n action_: \"beginsWithBond=false\",\n revisit: true,\n toContinue: true,\n },\n },\n oxidation$: {\n 0: {action_: \"oxidation-output\"},\n },\n CMT: {\n r: {action_: \"rdt=\", nextState: \"rt\"},\n rd: {action_: \"rqt=\", nextState: \"rdt\"},\n },\n arrowUpDown: {\n \"0|1|2|as\": {\n action_: [\"sb=false\", \"output\", \"operator\"],\n nextState: \"1\",\n },\n },\n uprightEntities: {\n \"0|1|2\": {action_: [\"o=\", \"output\"], nextState: \"1\"},\n },\n orbital: {\n \"0|1|2|3\": {action_: \"o=\", nextState: \"o\"},\n },\n \"->\": {\n \"0|1|2|3\": {action_: \"r=\", nextState: \"r\"},\n \"a|as\": {action_: [\"output\", \"r=\"], nextState: \"r\"},\n \"*\": {action_: [\"output\", \"r=\"], nextState: \"r\"},\n },\n \"+\": {\n o: {action_: \"d= kv\", nextState: \"d\"},\n \"d|D\": {action_: \"d=\", nextState: \"d\"},\n q: {action_: \"d=\", nextState: \"qd\"},\n \"qd|qD\": {action_: \"d=\", nextState: \"qd\"},\n dq: {action_: [\"output\", \"d=\"], nextState: \"d\"},\n 3: {\n action_: [\"sb=false\", \"output\", \"operator\"],\n nextState: \"0\",\n },\n },\n amount: {\n \"0|2\": {action_: \"a=\", nextState: \"a\"},\n },\n \"pm-operator\": {\n \"0|1|2|a|as\": {\n action_: [\n \"sb=false\",\n \"output\",\n {type_: \"operator\", option: \"\\\\pm\"},\n ],\n nextState: \"0\",\n },\n },\n operator: {\n \"0|1|2|a|as\": {\n action_: [\"sb=false\", \"output\", \"operator\"],\n nextState: \"0\",\n },\n },\n \"-$\": {\n \"o|q\": {action_: [\"charge or bond\", \"output\"], nextState: \"qd\"},\n d: {action_: \"d=\", nextState: \"d\"},\n D: {\n action_: [\"output\", {type_: \"bond\", option: \"-\"}],\n nextState: \"3\",\n },\n q: {action_: \"d=\", nextState: \"qd\"},\n qd: {action_: \"d=\", nextState: \"qd\"},\n \"qD|dq\": {\n action_: [\"output\", {type_: \"bond\", option: \"-\"}],\n nextState: \"3\",\n },\n },\n \"-9\": {\n \"3|o\": {\n action_: [\"output\", {type_: \"insert\", option: \"hyphen\"}],\n nextState: \"3\",\n },\n },\n \"- orbital overlap\": {\n o: {\n action_: [\"output\", {type_: \"insert\", option: \"hyphen\"}],\n nextState: \"2\",\n },\n d: {\n action_: [\"output\", {type_: \"insert\", option: \"hyphen\"}],\n nextState: \"2\",\n },\n },\n \"-\": {\n \"0|1|2\": {\n action_: [\n {type_: \"output\", option: 1},\n \"beginsWithBond=true\",\n {type_: \"bond\", option: \"-\"},\n ],\n nextState: \"3\",\n },\n 3: {action_: {type_: \"bond\", option: \"-\"}},\n a: {\n action_: [\"output\", {type_: \"insert\", option: \"hyphen\"}],\n nextState: \"2\",\n },\n as: {\n action_: [\n {type_: \"output\", option: 2},\n {type_: \"bond\", option: \"-\"},\n ],\n nextState: \"3\",\n },\n b: {action_: \"b=\"},\n o: {\n action_: {type_: \"- after o/d\", option: false},\n nextState: \"2\",\n },\n q: {\n action_: {type_: \"- after o/d\", option: false},\n nextState: \"2\",\n },\n \"d|qd|dq\": {\n action_: {type_: \"- after o/d\", option: true},\n nextState: \"2\",\n },\n \"D|qD|p\": {\n action_: [\"output\", {type_: \"bond\", option: \"-\"}],\n nextState: \"3\",\n },\n },\n amount2: {\n \"1|3\": {action_: \"a=\", nextState: \"a\"},\n },\n letters: {\n \"0|1|2|3|a|as|b|p|bp|o\": {action_: \"o=\", nextState: \"o\"},\n \"q|dq\": {action_: [\"output\", \"o=\"], nextState: \"o\"},\n \"d|D|qd|qD\": {action_: \"o after d\", nextState: \"o\"},\n },\n digits: {\n o: {action_: \"q=\", nextState: \"q\"},\n \"d|D\": {action_: \"q=\", nextState: \"dq\"},\n q: {action_: [\"output\", \"o=\"], nextState: \"o\"},\n a: {action_: \"o=\", nextState: \"o\"},\n },\n \"space A\": {\n \"b|p|bp\": {},\n },\n space: {\n a: {nextState: \"as\"},\n 0: {action_: \"sb=false\"},\n \"1|2\": {action_: \"sb=true\"},\n \"r|rt|rd|rdt|rdq\": {action_: \"output\", nextState: \"0\"},\n \"*\": {action_: [\"output\", \"sb=true\"], nextState: \"1\"},\n },\n \"1st-level escape\": {\n \"1|2\": {\n action_: [\n \"output\",\n {type_: \"insert+p1\", option: \"1st-level escape\"},\n ],\n },\n \"*\": {\n action_: [\n \"output\",\n {type_: \"insert+p1\", option: \"1st-level escape\"},\n ],\n nextState: \"0\",\n },\n },\n \"[(...)]\": {\n \"r|rt\": {action_: \"rd=\", nextState: \"rd\"},\n \"rd|rdt\": {action_: \"rq=\", nextState: \"rdq\"},\n },\n \"...\": {\n \"o|d|D|dq|qd|qD\": {\n action_: [\"output\", {type_: \"bond\", option: \"...\"}],\n nextState: \"3\",\n },\n \"*\": {\n action_: [\n {type_: \"output\", option: 1},\n {type_: \"insert\", option: \"ellipsis\"},\n ],\n nextState: \"1\",\n },\n },\n \". |* \": {\n \"*\": {\n action_: [\n \"output\",\n {type_: \"insert\", option: \"addition compound\"},\n ],\n nextState: \"1\",\n },\n },\n \"state of aggregation $\": {\n \"*\": {\n action_: [\"output\", \"state of aggregation\"],\n nextState: \"1\",\n },\n },\n \"{[(\": {\n \"a|as|o\": {\n action_: [\"o=\", \"output\", \"parenthesisLevel++\"],\n nextState: \"2\",\n },\n \"0|1|2|3\": {\n action_: [\"o=\", \"output\", \"parenthesisLevel++\"],\n nextState: \"2\",\n },\n \"*\": {\n action_: [\"output\", \"o=\", \"output\", \"parenthesisLevel++\"],\n nextState: \"2\",\n },\n },\n \")]}\": {\n \"0|1|2|3|b|p|bp|o\": {\n action_: [\"o=\", \"parenthesisLevel--\"],\n nextState: \"o\",\n },\n \"a|as|d|D|q|qd|qD|dq\": {\n action_: [\"output\", \"o=\", \"parenthesisLevel--\"],\n nextState: \"o\",\n },\n },\n \", \": {\n \"*\": {action_: [\"output\", \"comma\"], nextState: \"0\"},\n },\n \"^_\": {\n // ^ and _ without a sensible argument\n \"*\": {},\n },\n \"^{(...)}|^($...$)\": {\n \"0|1|2|as\": {action_: \"b=\", nextState: \"b\"},\n p: {action_: \"b=\", nextState: \"bp\"},\n \"3|o\": {action_: \"d= kv\", nextState: \"D\"},\n q: {action_: \"d=\", nextState: \"qD\"},\n \"d|D|qd|qD|dq\": {action_: [\"output\", \"d=\"], nextState: \"D\"},\n },\n \"^a|^\\\\x{}{}|^\\\\x{}|^\\\\x|'\": {\n \"0|1|2|as\": {action_: \"b=\", nextState: \"b\"},\n p: {action_: \"b=\", nextState: \"bp\"},\n \"3|o\": {action_: \"d= kv\", nextState: \"d\"},\n q: {action_: \"d=\", nextState: \"qd\"},\n \"d|qd|D|qD\": {action_: \"d=\"},\n dq: {action_: [\"output\", \"d=\"], nextState: \"d\"},\n },\n \"_{(state of aggregation)}$\": {\n \"d|D|q|qd|qD|dq\": {action_: [\"output\", \"q=\"], nextState: \"q\"},\n },\n \"_{(...)}|_($...$)|_9|_\\\\x{}{}|_\\\\x{}|_\\\\x\": {\n \"0|1|2|as\": {action_: \"p=\", nextState: \"p\"},\n b: {action_: \"p=\", nextState: \"bp\"},\n \"3|o\": {action_: \"q=\", nextState: \"q\"},\n \"d|D\": {action_: \"q=\", nextState: \"dq\"},\n \"q|qd|qD|dq\": {action_: [\"output\", \"q=\"], nextState: \"q\"},\n },\n \"=<>\": {\n \"0|1|2|3|a|as|o|q|d|D|qd|qD|dq\": {\n action_: [{type_: \"output\", option: 2}, \"bond\"],\n nextState: \"3\",\n },\n },\n \"#\": {\n \"0|1|2|3|a|as|o\": {\n action_: [\n {type_: \"output\", option: 2},\n {type_: \"bond\", option: \"#\"},\n ],\n nextState: \"3\",\n },\n },\n \"{}\": {\n \"*\": {action_: {type_: \"output\", option: 1}, nextState: \"1\"},\n },\n \"{...}\": {\n \"0|1|2|3|a|as|b|p|bp\": {action_: \"o=\", nextState: \"o\"},\n \"o|d|D|q|qd|qD|dq\": {action_: [\"output\", \"o=\"], nextState: \"o\"},\n },\n \"$...$\": {\n a: {action_: \"a=\"}, // 2$n$\n \"0|1|2|3|as|b|p|bp|o\": {action_: \"o=\", nextState: \"o\"}, // not 'amount'\n \"as|o\": {action_: \"o=\"},\n \"q|d|D|qd|qD|dq\": {action_: [\"output\", \"o=\"], nextState: \"o\"},\n },\n \"\\\\bond{(...)}\": {\n \"*\": {\n action_: [{type_: \"output\", option: 2}, \"bond\"],\n nextState: \"3\",\n },\n },\n \"\\\\frac{(...)}\": {\n \"*\": {\n action_: [{type_: \"output\", option: 1}, \"frac-output\"],\n nextState: \"3\",\n },\n },\n \"\\\\overset{(...)}\": {\n \"*\": {\n action_: [{type_: \"output\", option: 2}, \"overset-output\"],\n nextState: \"3\",\n },\n },\n \"\\\\underset{(...)}\": {\n \"*\": {\n action_: [{type_: \"output\", option: 2}, \"underset-output\"],\n nextState: \"3\",\n },\n },\n \"\\\\underbrace{(...)}\": {\n \"*\": {\n action_: [\n {type_: \"output\", option: 2},\n \"underbrace-output\",\n ],\n nextState: \"3\",\n },\n },\n \"\\\\color{(...)}{(...)}1|\\\\color(...){(...)}2\": {\n \"*\": {\n action_: [{type_: \"output\", option: 2}, \"color-output\"],\n nextState: \"3\",\n },\n },\n \"\\\\color{(...)}0\": {\n \"*\": {action_: [{type_: \"output\", option: 2}, \"color0-output\"]},\n },\n \"\\\\ce{(...)}\": {\n \"*\": {\n action_: [{type_: \"output\", option: 2}, \"ce\"],\n nextState: \"3\",\n },\n },\n \"\\\\,\": {\n \"*\": {\n action_: [{type_: \"output\", option: 1}, \"copy\"],\n nextState: \"1\",\n },\n },\n \"\\\\x{}{}|\\\\x{}|\\\\x\": {\n \"0|1|2|3|a|as|b|p|bp|o|c0\": {\n action_: [\"o=\", \"output\"],\n nextState: \"3\",\n },\n \"*\": {action_: [\"output\", \"o=\", \"output\"], nextState: \"3\"},\n },\n others: {\n \"*\": {\n action_: [{type_: \"output\", option: 1}, \"copy\"],\n nextState: \"3\",\n },\n },\n else2: {\n a: {action_: \"a to o\", nextState: \"o\", revisit: true},\n as: {\n action_: [\"output\", \"sb=true\"],\n nextState: \"1\",\n revisit: true,\n },\n \"r|rt|rd|rdt|rdq\": {\n action_: [\"output\"],\n nextState: \"0\",\n revisit: true,\n },\n \"*\": {action_: [\"output\", \"copy\"], nextState: \"3\"},\n },\n }),\n actions: {\n \"o after d\": function (buffer, m) {\n let ret;\n if ((buffer.d || \"\").match(/^[0-9]+$/)) {\n const tmp = buffer.d;\n buffer.d = undefined;\n ret = this[\"output\"](buffer);\n buffer.b = tmp;\n } else {\n ret = this[\"output\"](buffer);\n }\n mhchemParser.actions[\"o=\"](buffer, m);\n return ret;\n },\n \"d= kv\": function (buffer, m) {\n buffer.d = m;\n buffer.dType = \"kv\";\n },\n \"charge or bond\": function (buffer, m) {\n if (buffer[\"beginsWithBond\"]) {\n /** @type {ParserOutput[]} */\n const ret = [];\n mhchemParser.concatArray(ret, this[\"output\"](buffer));\n mhchemParser.concatArray(\n ret,\n mhchemParser.actions[\"bond\"](buffer, m, \"-\"),\n );\n return ret;\n }\n buffer.d = m;\n },\n \"- after o/d\": function (buffer, m, isAfterD) {\n let c1 = mhchemParser.patterns.match_(\n \"orbital\",\n buffer.o || \"\",\n );\n const c2 = mhchemParser.patterns.match_(\n \"one lowercase greek letter $\",\n buffer.o || \"\",\n );\n const c3 = mhchemParser.patterns.match_(\n \"one lowercase latin letter $\",\n buffer.o || \"\",\n );\n const c4 = mhchemParser.patterns.match_(\n \"$one lowercase latin letter$ $\",\n buffer.o || \"\",\n );\n const hyphenFollows =\n m === \"-\" &&\n ((c1 && c1.remainder === \"\") || c2 || c3 || c4);\n if (\n hyphenFollows &&\n !buffer.a &&\n !buffer.b &&\n !buffer.p &&\n !buffer.d &&\n !buffer.q &&\n !c1 &&\n c3\n ) {\n buffer.o = \"$\" + buffer.o + \"$\";\n }\n /** @type {ParserOutput[]} */\n const ret = [];\n if (hyphenFollows) {\n mhchemParser.concatArray(ret, this[\"output\"](buffer));\n ret.push({type_: \"hyphen\"});\n } else {\n c1 = mhchemParser.patterns.match_(\"digits\", buffer.d || \"\");\n if (isAfterD && c1 && c1.remainder === \"\") {\n mhchemParser.concatArray(\n ret,\n mhchemParser.actions[\"d=\"](buffer, m),\n );\n mhchemParser.concatArray(ret, this[\"output\"](buffer));\n } else {\n mhchemParser.concatArray(ret, this[\"output\"](buffer));\n mhchemParser.concatArray(\n ret,\n mhchemParser.actions[\"bond\"](buffer, m, \"-\"),\n );\n }\n }\n return ret;\n },\n \"a to o\": function (buffer) {\n buffer.o = buffer.a;\n buffer.a = undefined;\n },\n \"sb=true\": function (buffer) {\n buffer.sb = true;\n },\n \"sb=false\": function (buffer) {\n buffer.sb = false;\n },\n \"beginsWithBond=true\": function (buffer) {\n buffer[\"beginsWithBond\"] = true;\n },\n \"beginsWithBond=false\": function (buffer) {\n buffer[\"beginsWithBond\"] = false;\n },\n \"parenthesisLevel++\": function (buffer) {\n buffer[\"parenthesisLevel\"]++;\n },\n \"parenthesisLevel--\": function (buffer) {\n buffer[\"parenthesisLevel\"]--;\n },\n \"state of aggregation\": function (buffer, m) {\n return {\n type_: \"state of aggregation\",\n p1: mhchemParser.go(m, \"o\"),\n };\n },\n comma: function (buffer, m) {\n const a = m.replace(/\\s*$/, \"\");\n const withSpace = a !== m;\n if (withSpace && buffer[\"parenthesisLevel\"] === 0) {\n return {type_: \"comma enumeration L\", p1: a};\n }\n return {type_: \"comma enumeration M\", p1: a};\n },\n output: function (buffer, m, entityFollows) {\n // entityFollows:\n // undefined = if we have nothing else to output, also ignore the just read space (buffer.sb)\n // 1 = an entity follows, never omit the space if there was one just read before (can only apply to state 1)\n // 2 = 1 + the entity can have an amount, so output a\\, instead of converting it to o (can only apply to states a|as)\n /** @type {ParserOutput | ParserOutput[]} */\n let ret;\n if (!buffer.r) {\n ret = [];\n if (\n !buffer.a &&\n !buffer.b &&\n !buffer.p &&\n !buffer.o &&\n !buffer.q &&\n !buffer.d &&\n !entityFollows\n ) {\n //ret = [];\n } else {\n if (buffer.sb) {\n ret.push({type_: \"entitySkip\"});\n }\n if (\n !buffer.o &&\n !buffer.q &&\n !buffer.d &&\n !buffer.b &&\n !buffer.p &&\n entityFollows !== 2\n ) {\n buffer.o = buffer.a;\n buffer.a = undefined;\n } else if (\n !buffer.o &&\n !buffer.q &&\n !buffer.d &&\n (buffer.b || buffer.p)\n ) {\n buffer.o = buffer.a;\n buffer.d = buffer.b;\n buffer.q = buffer.p;\n buffer.a = buffer.b = buffer.p = undefined;\n } else {\n if (\n buffer.o &&\n buffer.dType === \"kv\" &&\n mhchemParser.patterns.match_(\n \"d-oxidation$\",\n buffer.d || \"\",\n )\n ) {\n buffer.dType = \"oxidation\";\n } else if (\n buffer.o &&\n buffer.dType === \"kv\" &&\n !buffer.q\n ) {\n buffer.dType = undefined;\n }\n }\n ret.push({\n type_: \"chemfive\",\n a: mhchemParser.go(buffer.a, \"a\"),\n b: mhchemParser.go(buffer.b, \"bd\"),\n p: mhchemParser.go(buffer.p, \"pq\"),\n o: mhchemParser.go(buffer.o, \"o\"),\n q: mhchemParser.go(buffer.q, \"pq\"),\n d: mhchemParser.go(\n buffer.d,\n buffer.dType === \"oxidation\"\n ? \"oxidation\"\n : \"bd\",\n ),\n dType: buffer.dType,\n });\n }\n } else {\n // r\n /** @type {ParserOutput[]} */\n let rd;\n if (buffer.rdt === \"M\") {\n rd = mhchemParser.go(buffer.rd, \"tex-math\");\n } else if (buffer.rdt === \"T\") {\n rd = [{type_: \"text\", p1: buffer.rd || \"\"}];\n } else {\n rd = mhchemParser.go(buffer.rd);\n }\n /** @type {ParserOutput[]} */\n let rq;\n if (buffer.rqt === \"M\") {\n rq = mhchemParser.go(buffer.rq, \"tex-math\");\n } else if (buffer.rqt === \"T\") {\n rq = [{type_: \"text\", p1: buffer.rq || \"\"}];\n } else {\n rq = mhchemParser.go(buffer.rq);\n }\n ret = {\n type_: \"arrow\",\n r: buffer.r,\n rd: rd,\n rq: rq,\n };\n }\n for (const p in buffer) {\n if (p !== \"parenthesisLevel\" && p !== \"beginsWithBond\") {\n delete buffer[p];\n }\n }\n return ret;\n },\n \"oxidation-output\": function (buffer, m) {\n const ret = [\"{\"];\n mhchemParser.concatArray(ret, mhchemParser.go(m, \"oxidation\"));\n ret.push(\"}\");\n return ret;\n },\n \"frac-output\": function (buffer, m) {\n return {\n type_: \"frac-ce\",\n p1: mhchemParser.go(m[0]),\n p2: mhchemParser.go(m[1]),\n };\n },\n \"overset-output\": function (buffer, m) {\n return {\n type_: \"overset\",\n p1: mhchemParser.go(m[0]),\n p2: mhchemParser.go(m[1]),\n };\n },\n \"underset-output\": function (buffer, m) {\n return {\n type_: \"underset\",\n p1: mhchemParser.go(m[0]),\n p2: mhchemParser.go(m[1]),\n };\n },\n \"underbrace-output\": function (buffer, m) {\n return {\n type_: \"underbrace\",\n p1: mhchemParser.go(m[0]),\n p2: mhchemParser.go(m[1]),\n };\n },\n \"color-output\": function (buffer, m) {\n return {\n type_: \"color\",\n color1: m[0],\n color2: mhchemParser.go(m[1]),\n };\n },\n \"r=\": function (buffer, m) {\n buffer.r = m;\n },\n \"rdt=\": function (buffer, m) {\n buffer.rdt = m;\n },\n \"rd=\": function (buffer, m) {\n buffer.rd = m;\n },\n \"rqt=\": function (buffer, m) {\n buffer.rqt = m;\n },\n \"rq=\": function (buffer, m) {\n buffer.rq = m;\n },\n operator: function (buffer, m, p1) {\n return {type_: \"operator\", kind_: p1 || m};\n },\n },\n },\n a: {\n transitions: mhchemParser.createTransitions({\n empty: {\n \"*\": {},\n },\n \"1/2$\": {\n 0: {action_: \"1/2\"},\n },\n else: {\n 0: {nextState: \"1\", revisit: true},\n },\n \"$(...)$\": {\n \"*\": {action_: \"tex-math tight\", nextState: \"1\"},\n },\n \",\": {\n \"*\": {action_: {type_: \"insert\", option: \"commaDecimal\"}},\n },\n else2: {\n \"*\": {action_: \"copy\"},\n },\n }),\n actions: {},\n },\n o: {\n transitions: mhchemParser.createTransitions({\n empty: {\n \"*\": {},\n },\n \"1/2$\": {\n 0: {action_: \"1/2\"},\n },\n else: {\n 0: {nextState: \"1\", revisit: true},\n },\n letters: {\n \"*\": {action_: \"rm\"},\n },\n \"\\\\ca\": {\n \"*\": {action_: {type_: \"insert\", option: \"circa\"}},\n },\n \"\\\\x{}{}|\\\\x{}|\\\\x\": {\n \"*\": {action_: \"copy\"},\n },\n \"${(...)}$|$(...)$\": {\n \"*\": {action_: \"tex-math\"},\n },\n \"{(...)}\": {\n \"*\": {action_: \"{text}\"},\n },\n else2: {\n \"*\": {action_: \"copy\"},\n },\n }),\n actions: {},\n },\n text: {\n transitions: mhchemParser.createTransitions({\n empty: {\n \"*\": {action_: \"output\"},\n },\n \"{...}\": {\n \"*\": {action_: \"text=\"},\n },\n \"${(...)}$|$(...)$\": {\n \"*\": {action_: \"tex-math\"},\n },\n \"\\\\greek\": {\n \"*\": {action_: [\"output\", \"rm\"]},\n },\n \"\\\\,|\\\\x{}{}|\\\\x{}|\\\\x\": {\n \"*\": {action_: [\"output\", \"copy\"]},\n },\n else: {\n \"*\": {action_: \"text=\"},\n },\n }),\n actions: {\n output: function (buffer) {\n if (buffer.text_) {\n /** @type {ParserOutput} */\n const ret = {type_: \"text\", p1: buffer.text_};\n for (const p in buffer) {\n delete buffer[p];\n }\n return ret;\n }\n },\n },\n },\n pq: {\n transitions: mhchemParser.createTransitions({\n empty: {\n \"*\": {},\n },\n \"state of aggregation $\": {\n \"*\": {action_: \"state of aggregation\"},\n },\n i$: {\n 0: {nextState: \"!f\", revisit: true},\n },\n \"(KV letters),\": {\n 0: {action_: \"rm\", nextState: \"0\"},\n },\n formula$: {\n 0: {nextState: \"f\", revisit: true},\n },\n \"1/2$\": {\n 0: {action_: \"1/2\"},\n },\n else: {\n 0: {nextState: \"!f\", revisit: true},\n },\n \"${(...)}$|$(...)$\": {\n \"*\": {action_: \"tex-math\"},\n },\n \"{(...)}\": {\n \"*\": {action_: \"text\"},\n },\n \"a-z\": {\n f: {action_: \"tex-math\"},\n },\n letters: {\n \"*\": {action_: \"rm\"},\n },\n \"-9.,9\": {\n \"*\": {action_: \"9,9\"},\n },\n \",\": {\n \"*\": {\n action_: {\n type_: \"insert+p1\",\n option: \"comma enumeration S\",\n },\n },\n },\n \"\\\\color{(...)}{(...)}1|\\\\color(...){(...)}2\": {\n \"*\": {action_: \"color-output\"},\n },\n \"\\\\color{(...)}0\": {\n \"*\": {action_: \"color0-output\"},\n },\n \"\\\\ce{(...)}\": {\n \"*\": {action_: \"ce\"},\n },\n \"\\\\,|\\\\x{}{}|\\\\x{}|\\\\x\": {\n \"*\": {action_: \"copy\"},\n },\n else2: {\n \"*\": {action_: \"copy\"},\n },\n }),\n actions: {\n \"state of aggregation\": function (buffer, m) {\n return {\n type_: \"state of aggregation subscript\",\n p1: mhchemParser.go(m, \"o\"),\n };\n },\n \"color-output\": function (buffer, m) {\n return {\n type_: \"color\",\n color1: m[0],\n color2: mhchemParser.go(m[1], \"pq\"),\n };\n },\n },\n },\n bd: {\n transitions: mhchemParser.createTransitions({\n empty: {\n \"*\": {},\n },\n x$: {\n 0: {nextState: \"!f\", revisit: true},\n },\n formula$: {\n 0: {nextState: \"f\", revisit: true},\n },\n else: {\n 0: {nextState: \"!f\", revisit: true},\n },\n \"-9.,9 no missing 0\": {\n \"*\": {action_: \"9,9\"},\n },\n \".\": {\n \"*\": {action_: {type_: \"insert\", option: \"electron dot\"}},\n },\n \"a-z\": {\n f: {action_: \"tex-math\"},\n },\n x: {\n \"*\": {action_: {type_: \"insert\", option: \"KV x\"}},\n },\n letters: {\n \"*\": {action_: \"rm\"},\n },\n \"'\": {\n \"*\": {action_: {type_: \"insert\", option: \"prime\"}},\n },\n \"${(...)}$|$(...)$\": {\n \"*\": {action_: \"tex-math\"},\n },\n \"{(...)}\": {\n \"*\": {action_: \"text\"},\n },\n \"\\\\color{(...)}{(...)}1|\\\\color(...){(...)}2\": {\n \"*\": {action_: \"color-output\"},\n },\n \"\\\\color{(...)}0\": {\n \"*\": {action_: \"color0-output\"},\n },\n \"\\\\ce{(...)}\": {\n \"*\": {action_: \"ce\"},\n },\n \"\\\\,|\\\\x{}{}|\\\\x{}|\\\\x\": {\n \"*\": {action_: \"copy\"},\n },\n else2: {\n \"*\": {action_: \"copy\"},\n },\n }),\n actions: {\n \"color-output\": function (buffer, m) {\n return {\n type_: \"color\",\n color1: m[0],\n color2: mhchemParser.go(m[1], \"bd\"),\n };\n },\n },\n },\n oxidation: {\n transitions: mhchemParser.createTransitions({\n empty: {\n \"*\": {},\n },\n \"roman numeral\": {\n \"*\": {action_: \"roman-numeral\"},\n },\n \"${(...)}$|$(...)$\": {\n \"*\": {action_: \"tex-math\"},\n },\n else: {\n \"*\": {action_: \"copy\"},\n },\n }),\n actions: {\n \"roman-numeral\": function (buffer, m) {\n return {type_: \"roman numeral\", p1: m || \"\"};\n },\n },\n },\n \"tex-math\": {\n transitions: mhchemParser.createTransitions({\n empty: {\n \"*\": {action_: \"output\"},\n },\n \"\\\\ce{(...)}\": {\n \"*\": {action_: [\"output\", \"ce\"]},\n },\n \"{...}|\\\\,|\\\\x{}{}|\\\\x{}|\\\\x\": {\n \"*\": {action_: \"o=\"},\n },\n else: {\n \"*\": {action_: \"o=\"},\n },\n }),\n actions: {\n output: function (buffer) {\n if (buffer.o) {\n /** @type {ParserOutput} */\n const ret = {type_: \"tex-math\", p1: buffer.o};\n for (const p in buffer) {\n delete buffer[p];\n }\n return ret;\n }\n },\n },\n },\n \"tex-math tight\": {\n transitions: mhchemParser.createTransitions({\n empty: {\n \"*\": {action_: \"output\"},\n },\n \"\\\\ce{(...)}\": {\n \"*\": {action_: [\"output\", \"ce\"]},\n },\n \"{...}|\\\\,|\\\\x{}{}|\\\\x{}|\\\\x\": {\n \"*\": {action_: \"o=\"},\n },\n \"-|+\": {\n \"*\": {action_: \"tight operator\"},\n },\n else: {\n \"*\": {action_: \"o=\"},\n },\n }),\n actions: {\n \"tight operator\": function (buffer, m) {\n buffer.o = (buffer.o || \"\") + \"{\" + m + \"}\";\n },\n output: function (buffer) {\n if (buffer.o) {\n /** @type {ParserOutput} */\n const ret = {type_: \"tex-math\", p1: buffer.o};\n for (const p in buffer) {\n delete buffer[p];\n }\n return ret;\n }\n },\n },\n },\n \"9,9\": {\n transitions: mhchemParser.createTransitions({\n empty: {\n \"*\": {},\n },\n \",\": {\n \"*\": {action_: \"comma\"},\n },\n else: {\n \"*\": {action_: \"copy\"},\n },\n }),\n actions: {\n comma: function () {\n return {type_: \"commaDecimal\"};\n },\n },\n },\n //#endregion\n //\n // \\pu state machines\n //\n //#region pu\n pu: {\n transitions: mhchemParser.createTransitions({\n empty: {\n \"*\": {action_: \"output\"},\n },\n space$: {\n \"*\": {action_: [\"output\", \"space\"]},\n },\n \"{[(|)]}\": {\n \"0|a\": {action_: \"copy\"},\n },\n \"(-)(9)^(-9)\": {\n 0: {action_: \"number^\", nextState: \"a\"},\n },\n \"(-)(9.,9)(e)(99)\": {\n 0: {action_: \"enumber\", nextState: \"a\"},\n },\n space: {\n \"0|a\": {},\n },\n \"pm-operator\": {\n \"0|a\": {\n action_: {type_: \"operator\", option: \"\\\\pm\"},\n nextState: \"0\",\n },\n },\n operator: {\n \"0|a\": {action_: \"copy\", nextState: \"0\"},\n },\n \"//\": {\n d: {action_: \"o=\", nextState: \"/\"},\n },\n \"/\": {\n d: {action_: \"o=\", nextState: \"/\"},\n },\n \"{...}|else\": {\n \"0|d\": {action_: \"d=\", nextState: \"d\"},\n a: {action_: [\"space\", \"d=\"], nextState: \"d\"},\n \"/|q\": {action_: \"q=\", nextState: \"q\"},\n },\n }),\n actions: {\n enumber: function (buffer, m) {\n /** @type {ParserOutput[]} */\n const ret = [];\n if (m[0] === \"+-\" || m[0] === \"+/-\") {\n ret.push(\"\\\\pm \");\n } else if (m[0]) {\n ret.push(m[0]);\n }\n if (m[1]) {\n mhchemParser.concatArray(\n ret,\n mhchemParser.go(m[1], \"pu-9,9\"),\n );\n if (m[2]) {\n if (m[2].match(/[,.]/)) {\n mhchemParser.concatArray(\n ret,\n mhchemParser.go(m[2], \"pu-9,9\"),\n );\n } else {\n ret.push(m[2]);\n }\n }\n m[3] = m[4] || m[3];\n if (m[3]) {\n m[3] = m[3].trim();\n if (m[3] === \"e\" || m[3].substr(0, 1) === \"*\") {\n ret.push({type_: \"cdot\"});\n } else {\n ret.push({type_: \"times\"});\n }\n }\n }\n if (m[3]) {\n ret.push(\"10^{\" + m[5] + \"}\");\n }\n return ret;\n },\n \"number^\": function (buffer, m) {\n /** @type {ParserOutput[]} */\n const ret = [];\n if (m[0] === \"+-\" || m[0] === \"+/-\") {\n ret.push(\"\\\\pm \");\n } else if (m[0]) {\n ret.push(m[0]);\n }\n mhchemParser.concatArray(ret, mhchemParser.go(m[1], \"pu-9,9\"));\n ret.push(\"^{\" + m[2] + \"}\");\n return ret;\n },\n operator: function (buffer, m, p1) {\n return {type_: \"operator\", kind_: p1 || m};\n },\n space: function () {\n return {type_: \"pu-space-1\"};\n },\n output: function (buffer) {\n /** @type {ParserOutput | ParserOutput[]} */\n let ret;\n const md = mhchemParser.patterns.match_(\n \"{(...)}\",\n buffer.d || \"\",\n );\n if (md && md.remainder === \"\") {\n buffer.d = md.match_;\n }\n const mq = mhchemParser.patterns.match_(\n \"{(...)}\",\n buffer.q || \"\",\n );\n if (mq && mq.remainder === \"\") {\n buffer.q = mq.match_;\n }\n if (buffer.d) {\n buffer.d = buffer.d.replace(\n /\\u00B0C|\\^oC|\\^{o}C/g,\n \"{}^{\\\\circ}C\",\n );\n buffer.d = buffer.d.replace(\n /\\u00B0F|\\^oF|\\^{o}F/g,\n \"{}^{\\\\circ}F\",\n );\n }\n if (buffer.q) {\n // fraction\n buffer.q = buffer.q.replace(\n /\\u00B0C|\\^oC|\\^{o}C/g,\n \"{}^{\\\\circ}C\",\n );\n buffer.q = buffer.q.replace(\n /\\u00B0F|\\^oF|\\^{o}F/g,\n \"{}^{\\\\circ}F\",\n );\n const b5 = {\n d: mhchemParser.go(buffer.d, \"pu\"),\n q: mhchemParser.go(buffer.q, \"pu\"),\n };\n if (buffer.o === \"//\") {\n ret = {type_: \"pu-frac\", p1: b5.d, p2: b5.q};\n } else {\n ret = b5.d;\n if (b5.d.length > 1 || b5.q.length > 1) {\n ret.push({type_: \" / \"});\n } else {\n ret.push({type_: \"/\"});\n }\n mhchemParser.concatArray(ret, b5.q);\n }\n } else {\n // no fraction\n ret = mhchemParser.go(buffer.d, \"pu-2\");\n }\n for (const p in buffer) {\n delete buffer[p];\n }\n return ret;\n },\n },\n },\n \"pu-2\": {\n transitions: mhchemParser.createTransitions({\n empty: {\n \"*\": {action_: \"output\"},\n },\n \"*\": {\n \"*\": {action_: [\"output\", \"cdot\"], nextState: \"0\"},\n },\n \"\\\\x\": {\n \"*\": {action_: \"rm=\"},\n },\n space: {\n \"*\": {action_: [\"output\", \"space\"], nextState: \"0\"},\n },\n \"^{(...)}|^(-1)\": {\n 1: {action_: \"^(-1)\"},\n },\n \"-9.,9\": {\n 0: {action_: \"rm=\", nextState: \"0\"},\n 1: {action_: \"^(-1)\", nextState: \"0\"},\n },\n \"{...}|else\": {\n \"*\": {action_: \"rm=\", nextState: \"1\"},\n },\n }),\n actions: {\n cdot: function () {\n return {type_: \"tight cdot\"};\n },\n \"^(-1)\": function (buffer, m) {\n buffer.rm += \"^{\" + m + \"}\";\n },\n space: function () {\n return {type_: \"pu-space-2\"};\n },\n output: function (buffer) {\n /** @type {ParserOutput | ParserOutput[]} */\n let ret = [];\n if (buffer.rm) {\n const mrm = mhchemParser.patterns.match_(\n \"{(...)}\",\n buffer.rm || \"\",\n );\n if (mrm && mrm.remainder === \"\") {\n ret = mhchemParser.go(mrm.match_, \"pu\");\n } else {\n ret = {type_: \"rm\", p1: buffer.rm};\n }\n }\n for (const p in buffer) {\n delete buffer[p];\n }\n return ret;\n },\n },\n },\n \"pu-9,9\": {\n transitions: mhchemParser.createTransitions({\n empty: {\n 0: {action_: \"output-0\"},\n o: {action_: \"output-o\"},\n },\n \",\": {\n 0: {action_: [\"output-0\", \"comma\"], nextState: \"o\"},\n },\n \".\": {\n 0: {action_: [\"output-0\", \"copy\"], nextState: \"o\"},\n },\n else: {\n \"*\": {action_: \"text=\"},\n },\n }),\n actions: {\n comma: function () {\n return {type_: \"commaDecimal\"};\n },\n \"output-0\": function (buffer) {\n /** @type {ParserOutput[]} */\n const ret = [];\n buffer.text_ = buffer.text_ || \"\";\n if (buffer.text_.length > 4) {\n let a = buffer.text_.length % 3;\n if (a === 0) {\n a = 3;\n }\n for (let i = buffer.text_.length - 3; i > 0; i -= 3) {\n ret.push(buffer.text_.substr(i, 3));\n ret.push({type_: \"1000 separator\"});\n }\n ret.push(buffer.text_.substr(0, a));\n ret.reverse();\n } else {\n ret.push(buffer.text_);\n }\n for (const p in buffer) {\n delete buffer[p];\n }\n return ret;\n },\n \"output-o\": function (buffer) {\n /** @type {ParserOutput[]} */\n const ret = [];\n buffer.text_ = buffer.text_ || \"\";\n if (buffer.text_.length > 4) {\n const a = buffer.text_.length - 3;\n for (var i = 0; i < a; i += 3) {\n ret.push(buffer.text_.substr(i, 3));\n ret.push({type_: \"1000 separator\"});\n }\n ret.push(buffer.text_.substr(i));\n } else {\n ret.push(buffer.text_);\n }\n for (const p in buffer) {\n delete buffer[p];\n }\n return ret;\n },\n },\n },\n //#endregion\n};\n\n//\n// texify: Take MhchemParser output and convert it to TeX\n//\n/** @type {Texify} */\nvar texify = {\n go: function (input, isInner) {\n // (recursive, max 4 levels)\n if (!input) {\n return \"\";\n }\n let res = \"\";\n let cee = false;\n for (let i = 0; i < input.length; i++) {\n const inputi = input[i];\n if (typeof inputi === \"string\") {\n res += inputi;\n } else {\n res += texify._go2(inputi);\n if (inputi.type_ === \"1st-level escape\") {\n cee = true;\n }\n }\n }\n if (!isInner && !cee && res) {\n res = \"{\" + res + \"}\";\n }\n return res;\n },\n _goInner: function (input) {\n if (!input) {\n return input;\n }\n return texify.go(input, true);\n },\n _go2: function (buf) {\n /** @type {undefined | string} */\n let res;\n switch (buf.type_) {\n case \"chemfive\":\n res = \"\";\n var b5 = {\n a: texify._goInner(buf.a),\n b: texify._goInner(buf.b),\n p: texify._goInner(buf.p),\n o: texify._goInner(buf.o),\n q: texify._goInner(buf.q),\n d: texify._goInner(buf.d),\n };\n //\n // a\n //\n if (b5.a) {\n if (b5.a.match(/^[+\\-]/)) {\n b5.a = \"{\" + b5.a + \"}\";\n }\n res += b5.a + \"\\\\,\";\n }\n //\n // b and p\n //\n if (b5.b || b5.p) {\n res += \"{\\\\vphantom{X}}\";\n res +=\n \"^{\\\\hphantom{\" +\n (b5.b || \"\") +\n \"}}_{\\\\hphantom{\" +\n (b5.p || \"\") +\n \"}}\";\n res += \"{\\\\vphantom{X}}\";\n res +=\n \"^{\\\\smash[t]{\\\\vphantom{2}}\\\\mathllap{\" +\n (b5.b || \"\") +\n \"}}\";\n res +=\n \"_{\\\\vphantom{2}\\\\mathllap{\\\\smash[t]{\" +\n (b5.p || \"\") +\n \"}}}\";\n }\n //\n // o\n //\n if (b5.o) {\n if (b5.o.match(/^[+\\-]/)) {\n b5.o = \"{\" + b5.o + \"}\";\n }\n res += b5.o;\n }\n //\n // q and d\n //\n if (buf.dType === \"kv\") {\n if (b5.d || b5.q) {\n res += \"{\\\\vphantom{X}}\";\n }\n if (b5.d) {\n res += \"^{\" + b5.d + \"}\";\n }\n if (b5.q) {\n res += \"_{\\\\smash[t]{\" + b5.q + \"}}\";\n }\n } else if (buf.dType === \"oxidation\") {\n if (b5.d) {\n res += \"{\\\\vphantom{X}}\";\n res += \"^{\" + b5.d + \"}\";\n }\n if (b5.q) {\n res += \"{\\\\vphantom{X}}\";\n res += \"_{\\\\smash[t]{\" + b5.q + \"}}\";\n }\n } else {\n if (b5.q) {\n res += \"{\\\\vphantom{X}}\";\n res += \"_{\\\\smash[t]{\" + b5.q + \"}}\";\n }\n if (b5.d) {\n res += \"{\\\\vphantom{X}}\";\n res += \"^{\" + b5.d + \"}\";\n }\n }\n break;\n case \"rm\":\n res = \"\\\\mathrm{\" + buf.p1 + \"}\";\n break;\n case \"text\":\n if (buf.p1.match(/[\\^_]/)) {\n buf.p1 = buf.p1.replace(\" \", \"~\").replace(\"-\", \"\\\\text{-}\");\n res = \"\\\\mathrm{\" + buf.p1 + \"}\";\n } else {\n res = \"\\\\text{\" + buf.p1 + \"}\";\n }\n break;\n case \"roman numeral\":\n res = \"\\\\mathrm{\" + buf.p1 + \"}\";\n break;\n case \"state of aggregation\":\n res = \"\\\\mskip2mu \" + texify._goInner(buf.p1);\n break;\n case \"state of aggregation subscript\":\n res = \"\\\\mskip1mu \" + texify._goInner(buf.p1);\n break;\n case \"bond\":\n res = texify._getBond(buf.kind_);\n if (!res) {\n throw [\n \"MhchemErrorBond\",\n \"mhchem Error. Unknown bond type (\" + buf.kind_ + \")\",\n ];\n }\n break;\n case \"frac\":\n var c = \"\\\\frac{\" + buf.p1 + \"}{\" + buf.p2 + \"}\";\n res =\n \"\\\\mathchoice{\\\\textstyle\" +\n c +\n \"}{\" +\n c +\n \"}{\" +\n c +\n \"}{\" +\n c +\n \"}\";\n break;\n case \"pu-frac\":\n var d =\n \"\\\\frac{\" +\n texify._goInner(buf.p1) +\n \"}{\" +\n texify._goInner(buf.p2) +\n \"}\";\n res =\n \"\\\\mathchoice{\\\\textstyle\" +\n d +\n \"}{\" +\n d +\n \"}{\" +\n d +\n \"}{\" +\n d +\n \"}\";\n break;\n case \"tex-math\":\n res = buf.p1 + \" \";\n break;\n case \"frac-ce\":\n res =\n \"\\\\frac{\" +\n texify._goInner(buf.p1) +\n \"}{\" +\n texify._goInner(buf.p2) +\n \"}\";\n break;\n case \"overset\":\n res =\n \"\\\\overset{\" +\n texify._goInner(buf.p1) +\n \"}{\" +\n texify._goInner(buf.p2) +\n \"}\";\n break;\n case \"underset\":\n res =\n \"\\\\underset{\" +\n texify._goInner(buf.p1) +\n \"}{\" +\n texify._goInner(buf.p2) +\n \"}\";\n break;\n case \"underbrace\":\n res =\n \"\\\\underbrace{\" +\n texify._goInner(buf.p1) +\n \"}_{\" +\n texify._goInner(buf.p2) +\n \"}\";\n break;\n case \"color\":\n res =\n \"{\\\\color{\" +\n buf.color1 +\n \"}{\" +\n texify._goInner(buf.color2) +\n \"}}\";\n break;\n case \"color0\":\n res = \"\\\\color{\" + buf.color + \"}\";\n break;\n case \"arrow\":\n var b6 = {\n rd: texify._goInner(buf.rd),\n rq: texify._goInner(buf.rq),\n };\n var arrow = \"\\\\x\" + texify._getArrow(buf.r);\n if (b6.rq) {\n arrow += \"[{\" + b6.rq + \"}]\";\n }\n if (b6.rd) {\n arrow += \"{\" + b6.rd + \"}\";\n } else {\n arrow += \"{}\";\n }\n res = arrow;\n break;\n case \"operator\":\n res = texify._getOperator(buf.kind_);\n break;\n case \"1st-level escape\":\n res = buf.p1 + \" \"; // &, \\\\\\\\, \\\\hlin\n break;\n case \"space\":\n res = \" \";\n break;\n case \"entitySkip\":\n res = \"~\";\n break;\n case \"pu-space-1\":\n res = \"~\";\n break;\n case \"pu-space-2\":\n res = \"\\\\mkern3mu \";\n break;\n case \"1000 separator\":\n res = \"\\\\mkern2mu \";\n break;\n case \"commaDecimal\":\n res = \"{,}\";\n break;\n case \"comma enumeration L\":\n res = \"{\" + buf.p1 + \"}\\\\mkern6mu \";\n break;\n case \"comma enumeration M\":\n res = \"{\" + buf.p1 + \"}\\\\mkern3mu \";\n break;\n case \"comma enumeration S\":\n res = \"{\" + buf.p1 + \"}\\\\mkern1mu \";\n break;\n case \"hyphen\":\n res = \"\\\\text{-}\";\n break;\n case \"addition compound\":\n res = \"\\\\,{\\\\cdot}\\\\,\";\n break;\n case \"electron dot\":\n res = \"\\\\mkern1mu \\\\bullet\\\\mkern1mu \";\n break;\n case \"KV x\":\n res = \"{\\\\times}\";\n break;\n case \"prime\":\n res = \"\\\\prime \";\n break;\n case \"cdot\":\n res = \"\\\\cdot \";\n break;\n case \"tight cdot\":\n res = \"\\\\mkern1mu{\\\\cdot}\\\\mkern1mu \";\n break;\n case \"times\":\n res = \"\\\\times \";\n break;\n case \"circa\":\n res = \"{\\\\sim}\";\n break;\n case \"^\":\n res = \"uparrow\";\n break;\n case \"v\":\n res = \"downarrow\";\n break;\n case \"ellipsis\":\n res = \"\\\\ldots \";\n break;\n case \"/\":\n res = \"/\";\n break;\n case \" / \":\n res = \"\\\\,/\\\\,\";\n break;\n default:\n assertNever(buf);\n throw [\"MhchemBugT\", \"mhchem bug T. Please report.\"]; // Missing texify rule or unknown MhchemParser output\n }\n assertString(res);\n return res;\n },\n _getArrow: function (a) {\n switch (a) {\n case \"->\":\n return \"rightarrow\";\n case \"\\u2192\":\n return \"rightarrow\";\n case \"\\u27F6\":\n return \"rightarrow\";\n case \"<-\":\n return \"leftarrow\";\n case \"<->\":\n return \"leftrightarrow\";\n case \"<-->\":\n return \"rightleftarrows\";\n case \"<=>\":\n return \"rightleftharpoons\";\n case \"\\u21CC\":\n return \"rightleftharpoons\";\n case \"<=>>\":\n return \"rightequilibrium\";\n case \"<<=>\":\n return \"leftequilibrium\";\n default:\n assertNever(a);\n throw [\"MhchemBugT\", \"mhchem bug T. Please report.\"];\n }\n },\n _getBond: function (a) {\n switch (a) {\n case \"-\":\n return \"{-}\";\n case \"1\":\n return \"{-}\";\n case \"=\":\n return \"{=}\";\n case \"2\":\n return \"{=}\";\n case \"#\":\n return \"{\\\\equiv}\";\n case \"3\":\n return \"{\\\\equiv}\";\n case \"~\":\n return \"{\\\\tripledash}\";\n case \"~-\":\n return \"{\\\\mathrlap{\\\\raisebox{-.1em}{$-$}}\\\\raisebox{.1em}{$\\\\tripledash$}}\";\n case \"~=\":\n return \"{\\\\mathrlap{\\\\raisebox{-.2em}{$-$}}\\\\mathrlap{\\\\raisebox{.2em}{$\\\\tripledash$}}-}\";\n case \"~--\":\n return \"{\\\\mathrlap{\\\\raisebox{-.2em}{$-$}}\\\\mathrlap{\\\\raisebox{.2em}{$\\\\tripledash$}}-}\";\n case \"-~-\":\n return \"{\\\\mathrlap{\\\\raisebox{-.2em}{$-$}}\\\\mathrlap{\\\\raisebox{.2em}{$-$}}\\\\tripledash}\";\n case \"...\":\n return \"{{\\\\cdot}{\\\\cdot}{\\\\cdot}}\";\n case \"....\":\n return \"{{\\\\cdot}{\\\\cdot}{\\\\cdot}{\\\\cdot}}\";\n case \"->\":\n return \"{\\\\rightarrow}\";\n case \"<-\":\n return \"{\\\\leftarrow}\";\n case \"<\":\n return \"{<}\";\n case \">\":\n return \"{>}\";\n default:\n assertNever(a);\n throw [\"MhchemBugT\", \"mhchem bug T. Please report.\"];\n }\n },\n _getOperator: function (a) {\n switch (a) {\n case \"+\":\n return \" {}+{} \";\n case \"-\":\n return \" {}-{} \";\n case \"=\":\n return \" {}={} \";\n case \"<\":\n return \" {}<{} \";\n case \">\":\n return \" {}>{} \";\n case \"<<\":\n return \" {}\\\\ll{} \";\n case \">>\":\n return \" {}\\\\gg{} \";\n case \"\\\\pm\":\n return \" {}\\\\pm{} \";\n case \"\\\\approx\":\n return \" {}\\\\approx{} \";\n case \"$\\\\approx$\":\n return \" {}\\\\approx{} \";\n case \"v\":\n return \" \\\\downarrow{} \";\n case \"(v)\":\n return \" \\\\downarrow{} \";\n case \"^\":\n return \" \\\\uparrow{} \";\n case \"(^)\":\n return \" \\\\uparrow{} \";\n default:\n assertNever(a);\n throw [\"MhchemBugT\", \"mhchem bug T. Please report.\"];\n }\n },\n};\n\n//\n// Helpers for code anaylsis\n// Will show type error at calling position\n//\n/** @param {number} a */\nfunction assertNever(a) {}\n/** @param {string} a */\nfunction assertString(a) {}\n","/* -*- Mode: Javascript; indent-tabs-mode:nil; js-indent-level: 2 -*- */\n/* vim: set ts=2 et sw=2 tw=80: */\n\n/*************************************************************\n *\n * KaTeX mhchem.js\n *\n * This file implements a KaTeX version of mhchem version 3.3.0.\n * It is adapted from MathJax/extensions/TeX/mhchem.js\n * It differs from the MathJax version as follows:\n * 1. The interface is changed so that it can be called from KaTeX, not MathJax.\n * 2. \\rlap and \\llap are replaced with \\mathrlap and \\mathllap.\n * 3. Four lines of code are edited in order to use \\raisebox instead of \\raise.\n * 4. The reaction arrow code is simplified. All reaction arrows are rendered\n * using KaTeX extensible arrows instead of building non-extensible arrows.\n * 5. \\tripledash vertical alignment is slightly adjusted.\n *\n * This code, as other KaTeX code, is released under the MIT license.\n *\n * /*************************************************************\n *\n * MathJax/extensions/TeX/mhchem.js\n *\n * Implements the \\ce command for handling chemical formulas\n * from the mhchem LaTeX package.\n *\n * ---------------------------------------------------------------------\n *\n * Copyright (c) 2011-2015 The MathJax Consortium\n * Copyright (c) 2015-2018 Martin Hensel\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n//\n// Coding Style\n// - use '' for identifiers that can by minified/uglified\n// - use \"\" for strings that need to stay untouched\n\n// version: \"3.3.0\" for MathJax and KaTeX\n\nimport katex from \"katex\";\n\nimport {chemParse} from \"./parser\";\n\n// Add \\ce, \\pu, and \\tripledash to the KaTeX macros.\n\nkatex.__defineMacro(\"\\\\ce\", function (context) {\n return chemParse(context.consumeArgs(1)[0], \"ce\");\n});\n\nkatex.__defineMacro(\"\\\\pu\", function (context) {\n return chemParse(context.consumeArgs(1)[0], \"pu\");\n});\n\n// Needed for \\bond for the ~ forms\n// Raise by 2.56mu, not 2mu. We're raising a hyphen-minus, U+002D, not\n// a mathematical minus, U+2212. So we need that extra 0.56.\nkatex.__defineMacro(\n \"\\\\tripledash\",\n \"{\\\\vphantom{-}\\\\raisebox{2.56mu}{$\\\\mkern2mu\" +\n \"\\\\tiny\\\\text{-}\\\\mkern1mu\\\\text{-}\\\\mkern1mu\\\\text{-}\\\\mkern2mu$}}\",\n);\n","import {preprocessTex, PerseusMarkdown} from \"@khanacademy/perseus\";\nimport katex from \"katex\";\n// ./katex-mhchem is imported for side effects. It adds the mhchem extension\n// to KaTeX, which is needed to render chemistry expressions. This prevents\n// spurious KaTeX errors from displaying in the editor for every chemistry\n// expression.\n// eslint-disable-next-line import/no-unassigned-import\nimport \"../katex-mhchem\";\n\ntype TexError = {\n math: string;\n message: string;\n};\n\n/**\n * Macros that our real math renderer (@khanacademy/mathjax-renderer) accepts\n * but KaTeX rejects.\n *\n * Content renders with MathJax, but errors are detected below by re-parsing\n * it with KaTeX. If MathJax recognizes a macro but KaTeX does not,\n * the Issues panel shows an error even though the math renders perfectly\n * in the preview and in production. Defining the macros here prevents those\n * false positives.\n *\n * KaTeX's output is discarded — only its errors matter — so an expansion need\n * not resemble MathJax's. It only has to parse in both math and text mode, take\n * the same number of arguments, and avoid referring to itself, since these\n * shadow KaTeX's own definitions (`\"\\\\AA\": \"\\\\text{\\\\AA}\"` would recurse until\n * the stack overflows). Hence the bare `{#1}` expansions.\n *\n * Derived from `texInputConfig.macros` in mathjax-renderer's\n * src/ts/tex-input-config.ts; only macros KaTeX rejects belong here, and the two\n * engines already agree on the other ~130. That config can't be imported\n * wholesale: many of its expansions use MathJax-only primitives (\\unicode,\n * \\enclose, \\centercolon, \\overparen) that KaTeX lacks.\n *\n * Scoped to English content, which is all our authors write. (Macros that\n * only appear in translated strings are deliberately absent: \\sen and \\cossec,\n * and \\0-\\9, which is what `\\$1` becomes when a translator localizes the\n * currency and drops the dollar sign but not the backslash.)\n */\nconst MATHJAX_ONLY_MACROS: Readonly<Record<string, string>> = {\n // KaTeX defines the other bare color macros (\\blue, \\orange, ...) and every\n // lettered shade (\\goldD etc.), but never bare \\gold.\n \"\\\\gold\": \"{#1}\",\n \"\\\\inte\": \"\\\\int\",\n \"\\\\RR\": \"\\\\mathbb{R}\",\n // Ångström sign; KaTeX defines \\AA in text mode only.\n \"\\\\AA\": \"A\",\n // Rational exponents: content uses \\^ rather than ^ to push the exponent\n // higher. KaTeX defines \\^ only as a text-mode circumflex accent.\n \"\\\\^\": \"{#1}\",\n \"\\\\lcm\": \"\\\\operatorname{lcm}\",\n \"\\\\gcf\": \"\\\\operatorname{gcf}\",\n // A one-argument no-op in MathJax, undefined in KaTeX. The empty expansion\n // is deliberate: KaTeX sizes array rows by reading this macro's definition\n // instead of expanding it in place, so a matching `{#1}` arity makes every\n // array, matrix and aligned environment eat its own first cell.\n \"\\\\arraystretch\": \"\",\n};\n\n/**\n * Detects TeX rendering errors in markdown content by parsing the content\n * and attempting to render each math expression with KaTeX.\n *\n * @param content - The markdown content to check for TeX errors\n * @returns An array of TeX errors found in the content\n */\nexport function detectTexErrors(content: string): TexError[] {\n const errors: TexError[] = [];\n\n // Parse the entire content - PerseusMarkdown handles widget syntax correctly\n const ast = PerseusMarkdown.parse(content, {});\n\n PerseusMarkdown.traverseContent(ast, (node) => {\n if (node.type === \"math\" || node.type === \"blockMath\") {\n const texContent = preprocessTex(node.content);\n try {\n katex.renderToString(texContent, {\n colorIsTextColor: true,\n // Spread a fresh copy per expression: KaTeX writes into\n // this object when the TeX uses \\gdef, and one\n // expression's definitions shouldn't leak into the next.\n macros: {...MATHJAX_ONLY_MACROS},\n });\n } catch (e: any) {\n errors.push({\n math: texContent,\n message: e.message,\n });\n }\n }\n });\n\n return errors;\n}\n","/**\n * An article editor. Articles are long-form pieces of content, composed of\n * multiple (Renderer) sections concatenated together.\n */\n\nimport {\n components,\n ApiOptions,\n Dependencies,\n PerseusMarkdown,\n} from \"@khanacademy/perseus\";\nimport {\n Errors,\n parseAndMigratePerseusArticle,\n PerseusError,\n} from \"@khanacademy/perseus-core\";\nimport * as PerseusLinter from \"@khanacademy/perseus-linter\";\nimport Button from \"@khanacademy/wonder-blocks-button\";\nimport arrowCircleDownIcon from \"@phosphor-icons/core/bold/arrow-circle-down-bold.svg\";\nimport arrowCircleUpIcon from \"@phosphor-icons/core/bold/arrow-circle-up-bold.svg\";\nimport plusIcon from \"@phosphor-icons/core/bold/plus-bold.svg\";\nimport trashIcon from \"@phosphor-icons/core/bold/trash-bold.svg\";\nimport * as React from \"react\";\n\nimport DeviceFramer from \"./components/device-framer\";\nimport IssuesPanel from \"./components/issues-panel\";\nimport JsonEditor from \"./components/json-editor\";\nimport SectionControlButton from \"./components/section-control-button\";\nimport Editor from \"./editor\";\nimport {WARNINGS} from \"./messages\";\nimport PreviewWithIframe from \"./preview-with-iframe\";\nimport {detectTexErrors} from \"./util/tex-error-detector\";\n\nimport type {Issue} from \"./components/issues-panel\";\nimport type {\n APIOptions,\n ImageUploader,\n PerseusDependenciesV2,\n} from \"@khanacademy/perseus\";\nimport type {PerseusArticle, PerseusRenderer} from \"@khanacademy/perseus-core\";\n\nconst {HUD} = components;\n\ntype DefaultProps = {\n json: PerseusArticle;\n mode: \"diff\" | \"edit\" | \"json\" | \"preview\";\n screen: \"phone\" | \"tablet\" | \"desktop\";\n sectionImageUploadGenerator: (\n i: number,\n ) => React.ReactElement<React.ComponentProps<\"span\">>;\n};\n\ntype Props = DefaultProps & {\n apiOptions?: APIOptions;\n dependencies: PerseusDependenciesV2;\n imageUploader?: ImageUploader;\n // URL of the route to show on initial load of the preview frames.\n previewURL: string;\n /** @deprecated `issues` has no effect. */\n issues?: Issue[];\n onChange: (changes: {json: PerseusArticle}) => void;\n};\n\ntype State = {\n highlightLint: boolean;\n // An array of `Issue`s per section of the article.\n issues: Issue[][];\n};\n\nexport default class ArticleEditor extends React.Component<Props, State> {\n static defaultProps: DefaultProps = {\n json: [{content: \"\", widgets: {}, images: {}}],\n mode: \"edit\",\n screen: \"desktop\",\n sectionImageUploadGenerator: () => <span />,\n };\n\n state: State = {\n highlightLint: true,\n issues: [],\n };\n\n componentDidMount() {\n this._updateIssues();\n }\n\n componentDidUpdate(prevProps: Props) {\n // Only update issues if json changed\n if (prevProps.json !== this.props.json) {\n this._updateIssues();\n }\n }\n\n /**\n * Updates the issues state with the linter issues for the current sections.\n * Helper function to be used with componentDidMount and componentDidUpdate.\n */\n _updateIssues() {\n const issues = this._sections().map((section) => {\n const parsed = PerseusMarkdown.parse(section.content ?? \"\", {});\n const linterContext = {\n content: section.content,\n widgets: section.widgets,\n stack: [],\n };\n\n const sectionIssues =\n PerseusLinter.runLinter(parsed, linterContext, false)?.map(\n (linterWarning) => {\n if (linterWarning.rule === \"inaccessible-widget\") {\n return WARNINGS.inaccessibleWidget(\n linterWarning.metadata?.widgetType ?? \"unknown\",\n linterWarning.metadata?.widgetId ?? \"unknown\",\n );\n }\n return WARNINGS.genericLinterWarning(\n linterWarning.rule,\n linterWarning.message,\n linterWarning.severity,\n );\n },\n ) ?? [];\n\n // Detect TeX errors in this section\n const texErrors = detectTexErrors(section.content ?? \"\");\n const texIssues = texErrors.map((error, index) =>\n WARNINGS.texError(error.math, error.message, index),\n );\n\n return [...texIssues, ...sectionIssues];\n });\n\n this.setState({issues});\n }\n\n _previewDataForSection(section: PerseusRenderer, sectionIndex: number) {\n const editor = this.refs[`editor${sectionIndex}`];\n\n return {\n article: section,\n apiOptions: this._apiOptionsForPreview(),\n linterContext: {\n contentType: \"article\",\n highlightLint: this.state.highlightLint,\n },\n // @ts-expect-error - TS2339 - Property 'getSaveWarnings' does not exist on type 'ReactInstance'.\n legacyPerseusLint: editor?.getSaveWarnings() ?? [],\n };\n }\n\n _apiOptionsForPreview(): APIOptions {\n return {\n ...ApiOptions.defaults,\n ...this.props.apiOptions,\n\n // Alignment options are always available in article\n // editors\n showAlignmentOptions: true,\n isArticle: true,\n };\n }\n\n _sections(): ReadonlyArray<PerseusRenderer> {\n const json = this.props.json;\n return json instanceof Array ? json : [json];\n }\n\n _renderEditor(): React.ReactElement<React.ComponentProps<\"div\">> {\n const {imageUploader, sectionImageUploadGenerator} = this.props;\n\n const apiOptions = {\n ...ApiOptions.defaults,\n ...this.props.apiOptions,\n\n // Alignment options are always available in article editors\n showAlignmentOptions: true,\n isArticle: true,\n } as const;\n\n const sections = this._sections();\n const editingDisabled = this.props.apiOptions?.editingDisabled ?? false;\n const isMobile = this._isMobilePreview();\n\n return (\n <div className=\"perseus-editor-table\">\n {sections.map((section, i) => {\n return [\n <div className=\"perseus-editor-row\" key={i}>\n <div className=\"perseus-editor-left-cell\">\n {/* The issues panel and section title are\n * pinned to the top of the left cell as a\n * single sticky unit. */}\n <div className=\"perseus-editor-sticky-header\">\n <IssuesPanel\n issues={this.state.issues[i]}\n />\n <div className=\"pod-title\">\n Section {i + 1}\n <fieldset disabled={editingDisabled}>\n {sectionImageUploadGenerator(i)}\n <SectionControlButton\n icon={plusIcon}\n disabled={editingDisabled}\n onClick={() => {\n this._handleAddSectionAfter(\n i,\n );\n }}\n title=\"Add a new section after this one\"\n />\n {i + 1 < sections.length && (\n <SectionControlButton\n icon={arrowCircleDownIcon}\n disabled={editingDisabled}\n onClick={() => {\n this._handleMoveSectionLater(\n i,\n );\n }}\n title=\"Move this section down\"\n />\n )}\n {i > 0 && (\n <SectionControlButton\n icon={arrowCircleUpIcon}\n disabled={editingDisabled}\n onClick={() => {\n this._handleMoveSectionEarlier(\n i,\n );\n }}\n title=\"Move this section up\"\n />\n )}\n <SectionControlButton\n icon={trashIcon}\n disabled={editingDisabled}\n onClick={() => {\n const msg =\n \"Are you sure you \" +\n \"want to delete section \" +\n (i + 1) +\n \"?\";\n /* eslint-disable no-alert */\n if (confirm(msg)) {\n this._handleRemoveSection(\n i,\n );\n }\n /* eslint-enable no-alert */\n }}\n title=\"Delete this section\"\n />\n </fieldset>\n </div>\n </div>\n <fieldset disabled={editingDisabled}>\n <Editor\n {...section}\n apiOptions={apiOptions}\n imageUploader={imageUploader}\n onChange={(newProps) =>\n this._handleEditorChange(\n i,\n newProps,\n )\n }\n placeholder=\"Type your section text here...\"\n ref={\"editor\" + i}\n />\n </fieldset>\n </div>\n\n <div className=\"editor-preview\">\n <DeviceFramer\n deviceType={this.props.screen}\n nochrome={true}\n >\n <PreviewWithIframe\n key={`${String(i)}-${this.props.screen}`}\n isMobile={isMobile}\n seamless={true}\n url={this.props.previewURL}\n content={{\n type: \"article-section\" as const,\n data: this._previewDataForSection(\n section,\n i,\n ),\n }}\n />\n </DeviceFramer>\n </div>\n </div>,\n ];\n })}\n\n {this._renderAddSection(editingDisabled)}\n {this._renderLinterHUD()}\n </div>\n );\n }\n\n _renderAddSection(\n editingDisabled: boolean,\n ): React.ReactElement<React.ComponentProps<\"div\">> {\n return (\n <div className=\"perseus-editor-row\">\n <div className=\"perseus-editor-left-cell\">\n <Button\n startIcon={plusIcon}\n disabled={editingDisabled}\n kind=\"tertiary\"\n aria-label=\"Add a section\"\n onClick={() => {\n this._handleAddSectionAfter(\n this._sections().length - 1,\n );\n }}\n >\n Add a section\n </Button>\n </div>\n </div>\n );\n }\n\n _renderLinterHUD(): React.ReactElement<any> {\n return (\n <HUD\n message=\"Style warnings\"\n enabled={this.state.highlightLint}\n onClick={() => {\n this.setState({\n highlightLint: !this.state.highlightLint,\n });\n }}\n />\n );\n }\n\n _renderPreviewMode(): React.ReactElement<React.ComponentProps<\"div\">> {\n return (\n <div className=\"standalone-preview\">\n <DeviceFramer deviceType={this.props.screen} nochrome={false}>\n <PreviewWithIframe\n key={`all-${this.props.screen}`}\n isMobile={this._isMobilePreview()}\n seamless={false}\n url={this.props.previewURL}\n content={{\n type: \"article-all\" as const,\n data: {\n article: this._sections(),\n apiOptions: this._apiOptionsForPreview(),\n },\n }}\n />\n </DeviceFramer>\n </div>\n );\n }\n\n _handleJsonChange: (newJson: PerseusArticle) => void = (newJson) => {\n this.props.onChange({json: newJson});\n };\n\n _handleEditorChange: (\n i: number,\n newProps: Partial<PerseusRenderer>,\n ) => void = (i, newProps) => {\n const sections = [...this._sections()];\n sections[i] = {...sections[i], ...newProps};\n this.props.onChange({json: sections});\n };\n\n private _isMobilePreview() {\n return this.props.screen === \"phone\" || this.props.screen === \"tablet\";\n }\n\n _handleMoveSectionEarlier(i: number) {\n if (i === 0) {\n return;\n }\n const sections = [...this._sections()];\n const section = sections[i];\n sections.splice(i, 1);\n sections.splice(i - 1, 0, section);\n this.props.onChange({\n json: sections,\n });\n }\n\n _handleMoveSectionLater(i: number) {\n const sections = [...this._sections()];\n if (i + 1 === sections.length) {\n return;\n }\n const section = sections[i];\n sections.splice(i, 1);\n sections.splice(i + 1, 0, section);\n this.props.onChange({\n json: sections,\n });\n }\n\n _handleAddSectionAfter(i: number) {\n const article = this.props.json;\n // Articles are (annoyingly) either a single PerseusRenderer _or_ an\n // array of them! Would be nice for the article to always be an array!\n // If we already have an array, we copy it here so we can safely mutate\n // it below.\n const sections = Array.isArray(article) ? [...article] : [article];\n\n const newSection = {\n content: \"\",\n images: {},\n widgets: {},\n };\n\n sections.splice(i + 1, 0, newSection);\n this.props.onChange({\n json: sections,\n });\n }\n\n _handleRemoveSection(i: number) {\n const sections = [...this._sections()];\n sections.splice(i, 1);\n this.props.onChange({\n json: sections,\n });\n }\n\n /**\n * Returns an array, with one element be section.\n * Each element is an array of lint warnings present in that section.\n *\n * This function can currently only be called in edit mode.\n */\n getSaveWarnings(): ReadonlyArray<PerseusRenderer> {\n if (this.props.mode !== \"edit\") {\n throw new PerseusError(\n \"Can only get save warnings in edit mode.\",\n Errors.NotAllowed,\n );\n }\n\n return this._sections().map((section, i) => {\n // @ts-expect-error - TS2339 - Property 'getSaveWarnings' does not exist on type 'ReactInstance'.\n return this.refs[\"editor\" + i].getSaveWarnings();\n });\n }\n\n render(): React.ReactNode {\n const editingDisabled = this.props.apiOptions?.editingDisabled ?? false;\n return (\n <Dependencies.DependenciesContext.Provider\n value={this.props.dependencies}\n >\n <div className=\"framework-perseus perseus-article-editor\">\n {this.props.mode === \"edit\" && this._renderEditor()}\n\n {this.props.mode === \"preview\" && this._renderPreviewMode()}\n\n {this.props.mode === \"json\" && (\n <div className=\"json-editor\">\n <div className=\"json-editor-warning\">\n <span>\n Warning: Editing in this mode can lead to\n broken articles!\n </span>\n </div>\n <JsonEditor\n multiLine={true}\n onChange={this._handleJsonChange}\n value={this.props.json}\n parser={parseAndMigratePerseusArticle}\n editingDisabled={editingDisabled}\n />\n </div>\n )}\n </div>\n </Dependencies.DependenciesContext.Provider>\n );\n }\n}\n","export const iconChevronRight = {\n path: \"M62.808 49.728q0 3.36-2.352 5.88l-41.72 41.664q-2.352 2.408-5.768 2.408t-5.768-2.408l-4.872-4.76q-2.352-2.52-2.352-5.88t2.352-5.712l31.08-31.136-31.08-31.024q-2.352-2.52-2.352-5.88t2.352-5.712l4.872-4.76q2.296-2.408 5.768-2.408t5.768 2.408l41.72 41.664q2.352 2.296 2.352 5.656z\",\n width: 63.034,\n height: 100,\n} as const;\nexport const iconCircleArrowDown = {\n path: \"M50.046 83.676q1.767 0 2.907-1.14l29.526-29.526q1.197-1.197 1.197-2.907t-1.197-2.964l-5.928-5.928q-1.197-1.14-2.964-1.14t-2.907 1.14l-12.312 12.312l0-32.661q0-1.71-1.254-2.964t-2.907-1.254l-8.322 0q-1.71 0-2.964 1.254t-1.254 2.964l0 32.661l-12.312-12.312q-1.197-1.254-2.907-1.254t-2.907 1.254l-5.928 5.928q-1.197 1.197-1.197 2.964t1.197 2.907l29.469 29.526q1.197 1.14 2.964 1.14zm49.989-33.63q.057 13.623-6.669 25.137t-18.24 18.183-25.08 6.669-25.137-6.726q-11.514-6.726-18.183-18.183-6.726-11.571-6.726-25.137t6.726-25.08 18.24-18.24 25.08-6.669q13.566 0 25.08 6.726 11.514 6.669 18.24 18.183t6.669 25.137z\",\n width: 100,\n height: 100,\n} as const;\nexport const iconCircleArrowUp = {\n path: \"M54.207 83.391q1.653 0 2.907-1.254t1.254-2.907l0-32.718l12.312 12.312q1.254 1.254 2.964 1.254t2.907-1.254l5.928-5.928q1.197-1.197 1.14-2.964 0-1.767-1.14-2.907l-29.526-29.526q-1.197-1.14-2.907-1.14t-2.964 1.14l-29.469 29.526q-1.197 1.254-1.197 2.964t1.197 2.907l5.928 5.928q1.197 1.197 2.907 1.197t2.907-1.197l12.312-12.312l0 32.718q0 1.653 1.254 2.907t2.964 1.254l8.322 0zm45.828-33.345q.057 13.623-6.669 25.137t-18.24 18.183-25.08 6.669-25.137-6.726q-11.514-6.726-18.183-18.183-6.726-11.571-6.726-25.137t6.726-25.08 18.24-18.24 25.08-6.669q13.566 0 25.08 6.726 11.514 6.669 18.24 18.183t6.669 25.137z\",\n width: 100,\n height: 100,\n} as const;\nexport const iconDesktop = {\n path: \"M94.208 52.119l0-43.746q0-.69-.506-1.15t-1.196-.506l-84.088 0q-.69 0-1.196.506t-.506 1.15l0 43.746q0 .69.506 1.196t1.196.506l84.088 0q.69 0 1.196-.506t.506-1.196zm6.716-43.746l0 57.224q0 3.45-2.484 5.934t-5.934 2.484l-28.566 0q0 3.128 2.53 7.774.828 1.61.828 2.622t-1.012 2.07q-1.012 1.012-2.346.966l-26.91 0q-1.38 0-2.392-1.012t-1.012-2.024q0-1.058 1.656-4.14t1.748-6.256l-28.612 0q-3.45 0-5.934-2.484t-2.484-5.934l0-57.224q0-3.45 2.484-5.934t5.934-2.438l84.088 0q3.45 0 5.98 2.438 2.438 2.484 2.438 5.934z\",\n width: 100,\n height: 86.648,\n} as const;\nexport const iconMobilePhone = {\n path: \"M36.04 89.557q0-2.584-1.836-4.42t-4.42-1.836-4.352 1.836q-1.836 1.836-1.836 4.42t1.836 4.352 4.42 1.836q2.652-.068 4.42-1.836t1.768-4.352zm16.184-12.444l0-54.74q0-1.088-.748-1.768t-1.768-.68l-39.78 0q-1.088 0-1.768.748t-.68 1.7l0 54.74q0 1.02.748 1.768t1.7.68l39.78 0q1.02-.068 1.768-.748t.748-1.7zm-14.892-65.892q0-1.224-1.292-1.292l-12.444 0q-1.224.068-1.224 1.292t1.224 1.224l12.444 0q1.292 0 1.292-1.224zm22.372-1.292l0 79.628q0 3.944-2.992 6.936t-7.004 2.992l-39.78 0q-4.012 0-7.004-2.924-2.924-2.924-2.924-7.004l0-79.628q0-4.012 2.924-6.936t7.004-2.992l39.78 0q4.012-.068 7.004 2.924t2.992 7.004z\",\n width: 60.013,\n height: 100,\n} as const;\nexport const iconTablet = {\n path: \"M45.322 90.706q0-1.86-1.302-3.224-1.364-1.364-3.224-1.364t-3.224 1.364-1.302 3.224q0 1.86 1.364 3.224 1.302 1.364 3.162 1.302 1.86.062 3.224-1.302t1.302-3.224zm27.218-11.346l0-68.014q0-.93-.682-1.612t-1.55-.682l-58.962 0q-.93 0-1.612.682t-.682 1.612l0 68.014q0 .93.682 1.612t1.612.62l58.962 0q.992-.062 1.612-.682t.62-1.55zm9.114-68.014l0 77.066q0 4.65-3.348 7.998t-7.998 3.348l-58.962 0q-4.65 0-7.998-3.348t-3.348-7.998l0-77.066q0-4.65 3.348-7.998t7.998-3.348l58.962 0q4.65 0 7.998 3.348t3.348 7.998z\",\n width: 81.852,\n height: 100,\n} as const;\n","/**\n * A component that displays controls for choosing a viewport size.\n * Renders three buttons: \"Phone\", \"Tablet\", and \"Desktop\".\n */\nimport {components} from \"@khanacademy/perseus\";\nimport * as React from \"react\";\n\nimport {devices} from \"../styles/constants\";\nimport {iconDesktop, iconMobilePhone, iconTablet} from \"../styles/icon-paths\";\n\nimport type {DeviceType} from \"@khanacademy/perseus\";\n\nconst {ButtonGroup, InlineIcon} = components;\n\ntype Props = {\n /** The current device type that is selected. */\n deviceType: DeviceType;\n /**\n * A callback that is passed (width, height) as the dimensions of the\n * viewport to resize to.\n */\n onViewportSizeChanged: (deviceType: DeviceType) => unknown;\n};\n\nconst ViewportResizer = (props: Props) => {\n const phoneButtonContents = (\n <span>\n <InlineIcon {...iconMobilePhone} /> Phone\n </span>\n );\n const tabletButtonContents = (\n <span>\n <InlineIcon {...iconTablet} /> Tablet\n </span>\n );\n const desktopButtonContents = (\n <span>\n <InlineIcon {...iconDesktop} /> Desktop\n </span>\n );\n\n return (\n <span className=\"viewport-resizer\">\n Viewport:{\" \"}\n <ButtonGroup\n value={props.deviceType}\n buttons={[\n {value: devices.PHONE, content: phoneButtonContents},\n {value: devices.TABLET, content: tabletButtonContents},\n {\n value: devices.DESKTOP,\n content: desktopButtonContents,\n },\n ]}\n onChange={props.onViewportSizeChanged}\n />\n </span>\n );\n};\n\nexport default ViewportResizer;\n","/*\nSoftware License Agreement (BSD License)\n\nCopyright (c) 2009-2011, Kevin Decker <kpdecker@gmail.com>\n\nAll rights reserved.\n\nRedistribution and use of this software in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n* Redistributions of source code must retain the above\n copyright notice, this list of conditions and the\n following disclaimer.\n\n* Redistributions in binary form must reproduce the above\n copyright notice, this list of conditions and the\n following disclaimer in the documentation and/or other\n materials provided with the distribution.\n\n* Neither the name of Kevin Decker nor the names of its\n contributors may be used to endorse or promote products\n derived from this software without specific prior\n written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR\nIMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND\nFITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR\nCONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\nDAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\nDATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER\nIN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT\nOF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\n/*\n * Text diff implementation.\n *\n * This library supports the following APIS:\n * JsDiff.diffChars: Character by character diff\n * JsDiff.diffWords: Word (as defined by \\b regex) diff which ignores whitespace\n * JsDiff.diffLines: Line based diff\n *\n * JsDiff.diffCss: Diff targeted at CSS content\n *\n * These methods are based on the implementation proposed in\n * \"An O(ND) Difference Algorithm and its Variations\" (Myers, 1986).\n * http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.4.6927\n */\n\n/*jshint maxparams: 5*/\nfunction clonePath(path) {\n return { newPos: path.newPos, components: path.components.slice(0) };\n}\nfunction removeEmpty(array) {\n var ret = [];\n for (var i = 0; i < array.length; i++) {\n if (array[i]) {\n ret.push(array[i]);\n }\n }\n return ret;\n}\nfunction escapeHTML(s) {\n var n = s;\n n = n.replace(/&/g, '&amp;');\n n = n.replace(/</g, '&lt;');\n n = n.replace(/>/g, '&gt;');\n n = n.replace(/\"/g, '&quot;');\n\n return n;\n}\n\nvar Diff = function(ignoreWhitespace) {\n this.ignoreWhitespace = ignoreWhitespace;\n};\nDiff.prototype = {\n diff: function(oldString, newString) {\n // Handle the identity case (this is due to unrolling editLength == 0\n if (newString === oldString) {\n return [{ value: newString }];\n }\n if (!newString) {\n return [{ value: oldString, removed: true }];\n }\n if (!oldString) {\n return [{ value: newString, added: true }];\n }\n\n newString = this.tokenize(newString);\n oldString = this.tokenize(oldString);\n\n var newLen = newString.length, oldLen = oldString.length;\n var maxEditLength = newLen + oldLen;\n var bestPath = [{ newPos: -1, components: [] }];\n\n // Seed editLength = 0\n var oldPos = this.extractCommon(bestPath[0], newString, oldString, 0);\n if (bestPath[0].newPos+1 >= newLen && oldPos+1 >= oldLen) {\n return bestPath[0].components;\n }\n\n for (var editLength = 1; editLength <= maxEditLength; editLength++) {\n for (var diagonalPath = -1*editLength; diagonalPath <= editLength; diagonalPath+=2) {\n var basePath;\n var addPath = bestPath[diagonalPath-1],\n removePath = bestPath[diagonalPath+1];\n oldPos = (removePath ? removePath.newPos : 0) - diagonalPath;\n if (addPath) {\n // No one else is going to attempt to use this value, clear it\n bestPath[diagonalPath-1] = undefined;\n }\n\n var canAdd = addPath && addPath.newPos+1 < newLen;\n var canRemove = removePath && 0 <= oldPos && oldPos < oldLen;\n if (!canAdd && !canRemove) {\n bestPath[diagonalPath] = undefined;\n continue;\n }\n\n // Select the diagonal that we want to branch from. We select the prior\n // path whose position in the new string is the farthest from the origin\n // and does not pass the bounds of the diff graph\n if (!canAdd || (canRemove && addPath.newPos < removePath.newPos)) {\n basePath = clonePath(removePath);\n this.pushComponent(basePath.components, oldString[oldPos], undefined, true);\n } else {\n basePath = clonePath(addPath);\n basePath.newPos++;\n this.pushComponent(basePath.components, newString[basePath.newPos], true, undefined);\n }\n\n var oldPos = this.extractCommon(basePath, newString, oldString, diagonalPath);\n\n if (basePath.newPos+1 >= newLen && oldPos+1 >= oldLen) {\n return basePath.components;\n } else {\n bestPath[diagonalPath] = basePath;\n }\n }\n }\n },\n\n pushComponent: function(components, value, added, removed) {\n var last = components[components.length-1];\n if (last && last.added === added && last.removed === removed) {\n // We need to clone here as the component clone operation is just\n // as shallow array clone\n components[components.length-1] =\n {value: this.join(last.value, value), added: added, removed: removed };\n } else {\n components.push({value: value, added: added, removed: removed });\n }\n },\n extractCommon: function(basePath, newString, oldString, diagonalPath) {\n var newLen = newString.length,\n oldLen = oldString.length,\n newPos = basePath.newPos,\n oldPos = newPos - diagonalPath;\n while (newPos+1 < newLen && oldPos+1 < oldLen && this.equals(newString[newPos+1], oldString[oldPos+1])) {\n newPos++;\n oldPos++;\n\n this.pushComponent(basePath.components, newString[newPos], undefined, undefined);\n }\n basePath.newPos = newPos;\n return oldPos;\n },\n\n equals: function(left, right) {\n var reWhitespace = /\\S/;\n if (this.ignoreWhitespace && !reWhitespace.test(left) && !reWhitespace.test(right)) {\n return true;\n } else {\n return left === right;\n }\n },\n join: function(left, right) {\n return left + right;\n },\n tokenize: function(value) {\n return value;\n }\n};\n\nvar CharDiff = new Diff();\n\nvar WordDiff = new Diff(true);\nvar WordWithSpaceDiff = new Diff();\nWordDiff.tokenize = WordWithSpaceDiff.tokenize = function(value) {\n return removeEmpty(value.split(/(\\s+|\\b)/));\n};\n\nvar CssDiff = new Diff(true);\nCssDiff.tokenize = function(value) {\n return removeEmpty(value.split(/([{}:;,]|\\s+)/));\n};\n\nvar LineDiff = new Diff();\nLineDiff.tokenize = function(value) {\n var retLines = [],\n lines = value.split(/^/m);\n\n for(var i = 0; i < lines.length; i++) {\n var line = lines[i],\n lastLine = lines[i - 1];\n\n // Merge lines that may contain windows new lines\n if (line == '\\n' && lastLine && lastLine[lastLine.length - 1] === '\\r') {\n retLines[retLines.length - 1] += '\\n';\n } else if (line) {\n retLines.push(line);\n }\n }\n\n return retLines;\n};\n\nconst JSDiff = {\n Diff: Diff,\n\n diffChars: function(oldStr, newStr) { return CharDiff.diff(oldStr, newStr); },\n diffWords: function(oldStr, newStr) { return WordDiff.diff(oldStr, newStr); },\n diffWordsWithSpace: function(oldStr, newStr) { return WordWithSpaceDiff.diff(oldStr, newStr); },\n diffLines: function(oldStr, newStr) { return LineDiff.diff(oldStr, newStr); },\n\n diffCss: function(oldStr, newStr) { return CssDiff.diff(oldStr, newStr); },\n\n createPatch: function(fileName, oldStr, newStr, oldHeader, newHeader) {\n var ret = [];\n\n ret.push('Index: ' + fileName);\n ret.push('===================================================================');\n ret.push('--- ' + fileName + (typeof oldHeader === 'undefined' ? '' : '\\t' + oldHeader));\n ret.push('+++ ' + fileName + (typeof newHeader === 'undefined' ? '' : '\\t' + newHeader));\n\n var diff = LineDiff.diff(oldStr, newStr);\n if (!diff[diff.length-1].value) {\n diff.pop(); // Remove trailing newline add\n }\n diff.push({value: '', lines: []}); // Append an empty value to make cleanup easier\n\n function contextLines(lines) {\n return lines.map(function(entry) { return ' ' + entry; });\n }\n function eofNL(curRange, i, current) {\n var last = diff[diff.length-2],\n isLast = i === diff.length-2,\n isLastOfType = i === diff.length-3 && (current.added !== last.added || current.removed !== last.removed);\n\n // Figure out if this is the last line for the given file and missing NL\n if (!/\\n$/.test(current.value) && (isLast || isLastOfType)) {\n curRange.push('\\\');\n }\n }\n\n var oldRangeStart = 0, newRangeStart = 0, curRange = [],\n oldLine = 1, newLine = 1;\n for (var i = 0; i < diff.length; i++) {\n var current = diff[i],\n lines = current.lines || current.value.replace(/\\n$/, '').split('\\n');\n current.lines = lines;\n\n if (current.added || current.removed) {\n if (!oldRangeStart) {\n var prev = diff[i-1];\n oldRangeStart = oldLine;\n newRangeStart = newLine;\n\n if (prev) {\n curRange = contextLines(prev.lines.slice(-4));\n oldRangeStart -= curRange.length;\n newRangeStart -= curRange.length;\n }\n }\n curRange.push.apply(curRange, lines.map(function(entry) { return (current.added?'+':'-') + entry; }));\n eofNL(curRange, i, current);\n\n if (current.added) {\n newLine += lines.length;\n } else {\n oldLine += lines.length;\n }\n } else {\n if (oldRangeStart) {\n // Close out any changes that have been output (or join overlapping)\n if (lines.length <= 8 && i < diff.length-2) {\n // Overlapping\n curRange.push.apply(curRange, contextLines(lines));\n } else {\n // end the range and output\n var contextSize = Math.min(lines.length, 4);\n ret.push(\n '@@ -' + oldRangeStart + ',' + (oldLine-oldRangeStart+contextSize)\n + ' +' + newRangeStart + ',' + (newLine-newRangeStart+contextSize)\n + ' @@');\n ret.push.apply(ret, curRange);\n ret.push.apply(ret, contextLines(lines.slice(0, contextSize)));\n if (lines.length <= 4) {\n eofNL(ret, i, current);\n }\n\n oldRangeStart = 0; newRangeStart = 0; curRange = [];\n }\n }\n oldLine += lines.length;\n newLine += lines.length;\n }\n }\n\n return ret.join('\\n') + '\\n';\n },\n\n applyPatch: function(oldStr, uniDiff) {\n var diffstr = uniDiff.split('\\n');\n var diff = [];\n var remEOFNL = false,\n addEOFNL = false;\n\n for (var i = (diffstr[0][0]==='I'?4:0); i < diffstr.length; i++) {\n if(diffstr[i][0] === '@') {\n var meh = diffstr[i].split(/@@ -(\\d+),(\\d+) \\+(\\d+),(\\d+) @@/);\n diff.unshift({\n start:meh[3],\n oldlength:meh[2],\n oldlines:[],\n newlength:meh[4],\n newlines:[]\n });\n } else if(diffstr[i][0] === '+') {\n diff[0].newlines.push(diffstr[i].substr(1));\n } else if(diffstr[i][0] === '-') {\n diff[0].oldlines.push(diffstr[i].substr(1));\n } else if(diffstr[i][0] === ' ') {\n diff[0].newlines.push(diffstr[i].substr(1));\n diff[0].oldlines.push(diffstr[i].substr(1));\n } else if(diffstr[i][0] === '\\\\') {\n if (diffstr[i-1][0] === '+') {\n remEOFNL = true;\n } else if(diffstr[i-1][0] === '-') {\n addEOFNL = true;\n }\n }\n }\n\n var str = oldStr.split('\\n');\n for (var i = diff.length - 1; i >= 0; i--) {\n var d = diff[i];\n for (var j = 0; j < d.oldlength; j++) {\n if(str[d.start-1+j] !== d.oldlines[j]) {\n return false;\n }\n }\n Array.prototype.splice.apply(str,[d.start-1,+d.oldlength].concat(d.newlines));\n }\n\n if (remEOFNL) {\n while (!str[str.length-1]) {\n str.pop();\n }\n } else if (addEOFNL) {\n str.push('');\n }\n return str.join('\\n');\n },\n\n convertChangesToXML: function(changes){\n var ret = [];\n for ( var i = 0; i < changes.length; i++) {\n var change = changes[i];\n if (change.added) {\n ret.push('<ins>');\n } else if (change.removed) {\n ret.push('<del>');\n }\n\n ret.push(escapeHTML(change.value));\n\n if (change.added) {\n ret.push('</ins>');\n } else if (change.removed) {\n ret.push('</del>');\n }\n }\n return ret.join('');\n },\n\n // See: http://code.google.com/p/google-diff-match-patch/wiki/API\n convertChangesToDMP: function(changes){\n var ret = [], change;\n for ( var i = 0; i < changes.length; i++) {\n change = changes[i];\n ret.push([(change.added ? 1 : change.removed ? -1 : 0), change.value]);\n }\n return ret;\n }\n};\n\nexport default JSDiff;\n","import _ from \"underscore\";\n\nexport type Entry = {\n value: string;\n added?: boolean;\n removed?: boolean;\n};\n\n// Split a word-wise diff generated by jsdiff into multiple lines, for the\n// purpose of breaking up the diffs into lines, so that modified lines can be\n// faintly highlighted\nconst splitDiff = function (diffEntries: Entry[]): Entry[][] {\n const lines: Entry[][] = [];\n let currentLine: Entry[] = [];\n _.each(diffEntries, (entry) => {\n const values = entry.value.split(\"\\n\");\n _.each(values, (value, i) => {\n const isNewline = i > 0;\n if (isNewline) {\n lines.push(currentLine);\n currentLine = [];\n }\n const newEntry: Entry = _.extend({}, entry, {\n value: value,\n });\n currentLine.push(newEntry);\n });\n });\n\n if (currentLine.length > 0) {\n lines.push(currentLine);\n }\n\n return lines;\n};\n\nexport default splitDiff;\n","import jsdiff from \"jsdiff\";\nimport _ from \"underscore\";\n\ntype ImageEntry = {\n value: string[];\n added?: boolean;\n removed?: boolean;\n};\n\ntype ImageStatus = \"unchanged\" | \"added\" | \"removed\";\n\ntype ImageDiff = {\n value: string;\n status: ImageStatus;\n};\n\nexport type ImageDiffResult = {\n before: ImageDiff[];\n after: ImageDiff[];\n};\n\nfunction statusFor(chunk: ImageEntry): ImageStatus {\n if (chunk.added) {\n return \"added\";\n }\n if (chunk.removed) {\n return \"removed\";\n }\n return \"unchanged\";\n}\n\n// Turn a chunk (which contains an array of values and a status)\n// into an array of values, each with the same status\nfunction splitUpChunk(chunk: ImageEntry): ImageDiff[] {\n return chunk.value.map((value) => {\n return {\n value: value,\n status: statusFor(chunk),\n };\n });\n}\n\n// Apply `fn` to every element in `lst` and then concatenate all the results\n// http://clojuredocs.org/clojure_core/clojure.core/mapcat\nfunction mapcat(\n lst: ImageEntry[],\n fn: (chunk: ImageEntry) => ImageDiff[],\n): ImageDiff[] {\n return _.flatten(lst.map(fn), true /* only flatten one level */);\n}\n\n// > ArrayDiff.diff([1,2,3], [2,3,4]);\n// = [{ \"value\": [1],\n// \"removed\": true },\n// { \"value\": [2, 3] },\n// { \"value\": [4],\n// \"added\": true }]\nconst ArrayDiff = new jsdiff.Diff();\nArrayDiff.tokenize = (array: ImageEntry[]) =>\n array.map((elem: ImageEntry): ImageEntry[] => [elem]);\n// The default is `+` for string concatenation, which doesn't work for array\n// concatenation.\nArrayDiff.join = (a: ImageEntry[], b: ImageEntry[]) => a.concat(b);\n// By default jsDiff uses ===\nArrayDiff.equals = _.isEqual;\n\n// Take the output of jsdiff's function (which concatenates adjacent entries)\n// and make it just one entry per chunk\n// > flattenChunks([{ \"value\": [1],\n// \"removed\": true },\n// { \"value\": [2, 3] },\n// { \"value\": [4],\n// \"added\": true }])\n// = [{ \"value\":1, \"status\":\"removed\"},\n// { \"value\":2, \"status\":\"unchanged\"},\n// { \"value\":3, \"status\":\"unchanged\"},\n// { \"value\":4, \"status\":\"added\"}]\nfunction flattenChunks(chunks: ImageEntry[]): ImageDiff[] {\n return mapcat(chunks, splitUpChunk);\n}\n\n// Take two arrays and create a diff for them. The result is two arrays of\n// objects, one for the things that should be included in a 'before', and one\n// for 'after'\nconst stringArrayDiff = function (\n a: ReadonlyArray<string>,\n b: ReadonlyArray<string>,\n): ImageDiffResult {\n // ArrayDiff.diff is jsdiff.Diff().diff(a, b), this is untyped so I'm\n // defining the result by the expected type our code infers.\n const diffResult: ImageEntry[] = ArrayDiff.diff(a, b);\n const flattened: ImageDiff[] = flattenChunks(diffResult);\n\n const result: ImageDiffResult = {\n before: _.filter(\n flattened,\n (entry: ImageDiff) => entry.status !== \"added\",\n ),\n after: _.filter(\n flattened,\n (entry: ImageDiff) => entry.status !== \"removed\",\n ),\n };\n return result;\n};\n\nexport default stringArrayDiff;\n","import {components} from \"@khanacademy/perseus\";\nimport classNames from \"classnames\";\nimport jsdiff from \"jsdiff\";\nimport * as React from \"react\";\nimport _ from \"underscore\";\n\nimport splitDiff from \"./shared/split-diff\";\nimport stringArrayDiff from \"./shared/string-array-diff\";\n\nimport type {Entry} from \"./shared/split-diff\";\nimport type {ImageDiffResult} from \"./shared/string-array-diff\";\n\nconst {SvgImage} = components;\n\nconst BEFORE = \"before\";\nconst AFTER = \"after\";\n\nconst IMAGE_REGEX = /http.*?\\.png|web\\+graphie[^)]*/g;\n\ntype ContentDiff = {\n before: React.JSX.Element[];\n after: React.JSX.Element[];\n};\n\nconst imagesInString = function (str: string | undefined) {\n return str?.match(IMAGE_REGEX) || [];\n};\n\nconst classFor = function (entry: Entry, ifAdded: string, ifRemoved: string) {\n if (entry.added) {\n return ifAdded;\n }\n if (entry.removed) {\n return ifRemoved;\n }\n return \"\";\n};\n\ntype Image = {\n value: string;\n status: \"unchanged\" | \"added\" | \"removed\";\n};\n\ntype ImageDiffSideProps = {\n images: Image[];\n};\n\nclass ImageDiffSide extends React.Component<ImageDiffSideProps> {\n render(): React.ReactNode {\n return (\n <div>\n {this.props.images.map((entry, index) => {\n const className = classNames({\n image: true,\n \"image-unchanged\": entry.status === \"unchanged\",\n \"image-added\": entry.status === \"added\",\n \"image-removed\": entry.status === \"removed\",\n });\n return (\n <div key={index}>\n <div className={className}>\n <SvgImage\n src={entry.value}\n title={entry.value}\n allowZoom={false}\n alt={\"entry.value\"}\n />\n </div>\n </div>\n );\n })}\n </div>\n );\n }\n}\n\ntype TextDiffProps = {\n title: string;\n after: string | undefined;\n before: string | undefined;\n};\n\ntype TextDiffState = {\n collapsed: boolean;\n};\n\nclass TextDiff extends React.Component<TextDiffProps, TextDiffState> {\n static defaultProps: Partial<TextDiffProps> = {\n after: \"\",\n before: \"\",\n };\n\n state: TextDiffState = {\n collapsed: this.props.before === this.props.after,\n };\n\n UNSAFE_componentWillReceiveProps(nextProps: TextDiffProps) {\n this.setState({\n collapsed: nextProps.before === nextProps.after,\n });\n }\n\n handleExpand: () => void = () => {\n this.setState({collapsed: false});\n };\n\n render(): React.ReactNode {\n // Fun note: I'm adding our own custom object here because jsdiff\n // is an old js library (11 years with no changes as of this comment)\n // with no typing.\n const diffed: Entry[] = jsdiff.diffWords(\n this.props.before,\n this.props.after,\n );\n\n const lines: Entry[][] = splitDiff(diffed);\n\n const beforeImages = imagesInString(this.props.before);\n const afterImages = imagesInString(this.props.after);\n const images: ImageDiffResult = stringArrayDiff(\n beforeImages,\n afterImages,\n );\n\n const renderedLines = lines.map((line) => {\n const contents: ContentDiff = {before: [], after: []};\n\n contents.before = _(line).map(function (entry: Entry, i: number) {\n return (\n <span\n key={i}\n className={classFor(\n entry,\n \"not-present\",\n \"removed dark\",\n )}\n >\n {entry.value}\n </span>\n );\n });\n\n contents.after = _(line).map(function (entry: Entry, i: number) {\n return (\n <span\n key={i}\n className={classFor(entry, \"added dark\", \"not-present\")}\n >\n {entry.value}\n </span>\n );\n });\n\n return contents;\n });\n\n const className = classNames({\n \"diff-row\": true,\n collapsed: this.state.collapsed,\n });\n\n return (\n <div>\n <div className=\"diff-header\">{this.props.title}</div>\n <div className=\"diff-header\">{this.props.title}</div>\n <div className=\"diff-body ui-helper-clearfix\">\n {[BEFORE, AFTER].map((side, index) => {\n return (\n <div className={\"diff-row \" + side} key={index}>\n {!this.state.collapsed &&\n renderedLines.map((line, lineNum) => {\n const changed = line[side].length > 1;\n const lineClass = classNames({\n \"diff-line\": true,\n added: side === AFTER && changed,\n removed: side === BEFORE && changed,\n });\n return (\n <div\n className={lineClass}\n key={lineNum}\n >\n {line[side]}\n </div>\n );\n })}\n {!this.state.collapsed && (\n <ImageDiffSide images={images[side]} />\n )}\n </div>\n );\n })}\n </div>\n {[BEFORE, AFTER].map((side, index) => {\n return (\n <div\n role=\"button\"\n tabIndex={0}\n className={className + \" \" + side}\n key={index}\n onClick={this.handleExpand}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n this.handleExpand();\n }\n }}\n >\n {this.state.collapsed && (\n <span>\n <span className=\"expand-button\">\n {\" \"}\n [ show unmodified ]{\" \"}\n </span>\n </span>\n )}\n </div>\n );\n })}\n </div>\n );\n }\n}\n\nexport default TextDiff;\n","import {components} from \"@khanacademy/perseus\";\nimport classNames from \"classnames\";\nimport * as React from \"react\";\n\nimport type {ImageWidget} from \"@khanacademy/perseus-core\";\n\nconst {SvgImage} = components;\n\ntype ImageWidgetDiffProps = {\n after: ImageWidget | undefined;\n before: ImageWidget | undefined;\n};\n\n// For image widgets, show the actual image\nclass ImageWidgetDiff extends React.Component<ImageWidgetDiffProps> {\n render(): React.ReactNode {\n const {before, after} = this.props;\n const beforeSrc: string = before?.options?.backgroundImage?.url\n ? before?.options.backgroundImage.url\n : \"\";\n const afterSrc: string = after?.options?.backgroundImage?.url\n ? after?.options.backgroundImage.url\n : \"\";\n\n const beforeAlt: string = before?.options?.alt\n ? before?.options.alt\n : \"\";\n const afterAlt: string = after?.options?.alt ? after?.options.alt : \"\";\n return (\n <div>\n <div className=\"diff-row before\">\n {beforeSrc && (\n <div\n className={classNames({\n image: true,\n \"image-unchanged\": beforeSrc === afterSrc,\n \"image-removed\": beforeSrc !== afterSrc,\n })}\n >\n <SvgImage\n src={beforeSrc}\n title={beforeSrc}\n allowZoom={false}\n alt={beforeAlt}\n />\n </div>\n )}\n </div>\n <div className=\"diff-row after\">\n {afterSrc && (\n <div\n className={classNames({\n image: true,\n \"image-unchanged\": beforeSrc === afterSrc,\n \"image-added\": beforeSrc !== afterSrc,\n })}\n >\n <SvgImage\n src={afterSrc}\n title={afterSrc}\n allowZoom={false}\n alt={afterAlt}\n />\n </div>\n )}\n </div>\n </div>\n );\n }\n}\n\nexport default ImageWidgetDiff;\n","import Button from \"@khanacademy/wonder-blocks-button\";\nimport {sizing} from \"@khanacademy/wonder-blocks-tokens\";\nimport classNames from \"classnames\";\nimport * as React from \"react\";\nimport _ from \"underscore\";\n\nconst indentationFromDepth = function (depth: number) {\n return (depth - 1) * 20;\n};\n\nconst BEFORE = \"before\";\nconst AFTER = \"after\";\n\nconst UNCHANGED = \"unchanged\";\n\ntype Entry = {\n after: string;\n before: string;\n children: Entry[];\n key: string;\n status: \"unchanged\" | \"added\" | \"removed\" | \"changed\";\n};\n\ntype DiffSideProps = {\n className: string;\n depth: number;\n propKey: string;\n showKey: boolean;\n side: \"before\" | \"after\";\n value: string;\n};\n\nclass DiffSide extends React.Component<DiffSideProps> {\n render(): React.ReactNode {\n const className = classNames(this.props.className, {\n \"diff-row\": true,\n before: this.props.side === BEFORE,\n after: this.props.side === AFTER,\n });\n return (\n <div className={className}>\n <div\n style={{\n paddingInlineStart: indentationFromDepth(\n this.props.depth,\n ),\n }}\n >\n {this.props.showKey && this.props.propKey + \": \"}\n <span\n className={\"inner-value dark \" + this.props.className}\n >\n {this.props.value}\n </span>\n </div>\n </div>\n );\n }\n}\n\ntype CollapsedRowProps = {\n depth: number;\n onClick: () => void;\n};\n\nclass CollapsedRow extends React.Component<CollapsedRowProps> {\n static defaultProps = {\n depth: 0,\n };\n\n render(): React.ReactNode {\n const self = this;\n return (\n <div style={{clear: \"both\"}}>\n {[BEFORE, AFTER].map(function (side) {\n return (\n <div\n className={\"diff-row collapsed \" + side}\n key={side}\n >\n <div\n style={{\n paddingBlockStart: sizing.size_040,\n paddingBlockEnd: sizing.size_040,\n paddingInlineStart: indentationFromDepth(\n self.props.depth,\n ),\n }}\n >\n <Button\n size=\"small\"\n kind=\"secondary\"\n actionType=\"neutral\"\n onClick={self.props.onClick}\n >\n show unmodified\n </Button>\n </div>\n </div>\n );\n })}\n </div>\n );\n }\n}\n\ntype DiffEntryProps = {\n depth: number;\n entry: Entry;\n expanded?: boolean;\n};\n\ntype DiffEntryState = {\n expanded: boolean;\n};\n// Component representing a single property that may be nested.\nclass DiffEntry extends React.Component<DiffEntryProps, DiffEntryState> {\n static defaultProps = {\n depth: 0,\n };\n\n state = {\n expanded: this.props.expanded ?? false,\n };\n\n expand = () => {\n this.setState({expanded: true});\n };\n\n render(): React.ReactNode {\n const entry = this.props.entry;\n const propertyDeleted = entry.status === \"removed\";\n const propertyAdded = entry.status === \"added\";\n const propertyChanged = entry.status === \"changed\";\n\n const hasChildren = entry.children.length > 0;\n\n const leftClass = classNames({\n removed: propertyDeleted || (propertyChanged && !hasChildren),\n dark: propertyDeleted,\n \"blank-space\": propertyAdded,\n });\n\n const rightClass = classNames({\n added: propertyAdded || (propertyChanged && !hasChildren),\n dark: propertyAdded,\n \"blank-space\": propertyDeleted,\n });\n\n let shownChildren;\n if (this.state.expanded) {\n shownChildren = entry.children;\n } else {\n shownChildren = _(entry.children).select(function (child) {\n return child.status !== UNCHANGED;\n });\n }\n\n let collapsed = shownChildren.length < entry.children.length;\n\n // don't hide just one entry\n if (entry.children.length === shownChildren.length + 1) {\n shownChildren = entry.children;\n collapsed = false;\n }\n\n const self = this;\n return (\n <div>\n {entry.key && (\n <div style={{clear: \"both\"}}>\n <DiffSide\n side={BEFORE}\n className={leftClass}\n depth={this.props.depth}\n propKey={entry.key}\n showKey={!propertyAdded}\n value={entry.before}\n />\n <DiffSide\n side={AFTER}\n className={rightClass}\n depth={this.props.depth}\n propKey={entry.key}\n showKey={!propertyDeleted}\n value={entry.after}\n />\n </div>\n )}\n {shownChildren.map(function (child) {\n return (\n <DiffEntry\n key={child.key}\n depth={self.props.depth + 1}\n entry={child}\n expanded={self.state.expanded}\n />\n );\n })}\n {collapsed && (\n <CollapsedRow\n depth={this.props.depth + 1}\n onClick={this.expand}\n />\n )}\n </div>\n );\n }\n}\n\nexport default DiffEntry;\n","// For this file it might not make sense to add typing because it's a\n// recursive series of functions to show the difference between two\n// PerseusWidget objects.\nimport _ from \"underscore\";\n\nconst UNCHANGED = \"unchanged\";\nconst CHANGED = \"changed\";\nconst ADDED = \"added\";\nconst REMOVED = \"removed\";\n\n// For values which do not have further values nested within them (strings,\n// numbers, and booleans)\nconst valueEntry = function (before: any, after: any, key) {\n let status;\n if (before === after) {\n status = UNCHANGED;\n } else if (before === undefined) {\n status = ADDED;\n } else if (after === undefined) {\n status = REMOVED;\n } else {\n status = CHANGED;\n }\n\n return {\n after: JSON.stringify(after),\n before: JSON.stringify(before),\n children: [],\n key: key,\n status: status,\n };\n};\n\n// For values which require a more granular diff (objects and arrays)\nconst objectEntry = function (before: any, after: any, key) {\n const beforeKeys = _.isObject(before) ? _(before).keys() : [];\n const afterKeys = _.isObject(after) ? _(after).keys() : [];\n const keys = _.union(beforeKeys, afterKeys);\n\n const children = keys.map(function (key) {\n return performDiff((before || {})[key], (after || {})[key], key);\n });\n\n let status;\n if (before === undefined) {\n status = ADDED;\n } else if (after === undefined) {\n status = REMOVED;\n } else {\n const changed = _.any(children, function (child) {\n return child.status !== UNCHANGED;\n });\n status = changed ? CHANGED : UNCHANGED;\n }\n\n return {\n after: \"\",\n before: \"\",\n children: children,\n key: key,\n status: status,\n };\n};\n\nconst performDiff = function (before: any, after: any, key?: any): any {\n if (typeof before === \"object\" || typeof after === \"object\") {\n return objectEntry(before, after, key);\n }\n return valueEntry(before, after, key);\n};\n\nexport default performDiff;\n","import * as React from \"react\";\n\nimport ImageWidgetDiff from \"./image-widget-diff\";\nimport DiffEntry from \"./shared/diff-entry\";\nimport performDiff from \"./shared/widget-diff-performer\";\n\nimport type {ImageWidget, PerseusWidget} from \"@khanacademy/perseus-core\";\n\ntype WidgetDiffProps = {\n after: PerseusWidget | undefined;\n before: PerseusWidget | undefined;\n title: string;\n type: PerseusWidget[\"type\"] | undefined;\n};\n\nclass WidgetDiff extends React.Component<WidgetDiffProps> {\n render(): React.ReactNode {\n const {after, before, title, type} = this.props;\n\n // If before or after is undefined, pass an empty object to performDiff.\n const diff = performDiff(before ? before : {}, after ? after : {});\n return (\n <>\n <div className=\"diff-header\">{title}</div>\n <div className=\"diff-header\">{title}</div>\n <div className=\"diff-body ui-helper-clearfix\">\n {type === \"image\" && (\n <ImageWidgetDiff\n // eslint-disable-next-line no-restricted-syntax\n before={before as ImageWidget | undefined}\n // eslint-disable-next-line no-restricted-syntax\n after={after as ImageWidget | undefined}\n />\n )}\n <DiffEntry entry={diff} />\n </div>\n </>\n );\n }\n}\n\nexport default WidgetDiff;\n","/**\n * A side by side diff view for Perseus renderers.\n */\n\nimport {Widgets} from \"@khanacademy/perseus\";\nimport {CoreWidgetRegistry} from \"@khanacademy/perseus-core\";\nimport * as React from \"react\";\nimport _ from \"underscore\";\n\nimport TextDiff from \"./text-diff\";\nimport WidgetDiff from \"./widget-diff\";\n\nimport type {PerseusRenderer, PerseusWidget} from \"@khanacademy/perseus-core\";\n\n// In diffs, only show the widgetInfo props that can change\nconst filterWidgetInfo = function (\n widgetInfo: PerseusWidget | undefined,\n showAlignmentOptions: boolean,\n) {\n if (widgetInfo == null) {\n return undefined;\n }\n\n const {alignment, options, type} = widgetInfo;\n\n const filteredWidgetInfo = {options} as const;\n\n // Show alignment options iff multiple valid ones exist for this widget\n if (\n showAlignmentOptions &&\n CoreWidgetRegistry.getSupportedAlignments(type).length > 1\n ) {\n // @ts-expect-error - TS2339 - Property 'alignment' does not exist on type '{ readonly options: any; }'.\n filteredWidgetInfo.alignment = alignment;\n }\n\n if (Widgets.supportsStaticMode(type)) {\n // @ts-expect-error - TS2339 - Property 'static' does not exist on type '{ readonly options: any; }'.\n filteredWidgetInfo.static = widgetInfo?.static ?? undefined;\n }\n\n return filteredWidgetInfo;\n};\n\ntype Props = {\n // The \"after\" props of the renderer. Will be displayed on the right.\n after: PerseusRenderer | undefined;\n // The \"before\" props of the renderer. Will be displayed on the left.\n before: PerseusRenderer | undefined;\n // If true, show widget alignment options in the diff.\n showAlignmentOptions: boolean;\n // If true, render a horizontal rule after this diff.\n showSeparator: boolean;\n // The heading to render above the side by side diff.\n // (In a code review tool this would be the filename.)\n title: string;\n};\n\nclass RendererDiff extends React.Component<Props> {\n static defaultProps: Partial<Omit<Props, \"title\">> = {\n after: {\n content: \"\",\n images: {},\n widgets: {},\n },\n before: {\n content: \"\",\n images: {},\n widgets: {},\n },\n showAlignmentOptions: false,\n showSeparator: false,\n };\n\n render(): React.ReactNode {\n const {after, before, showAlignmentOptions, showSeparator, title} =\n this.props;\n\n let textDiff: React.JSX.Element | undefined;\n let widgetsDiff: React.JSX.Element[] = [];\n\n if (before?.content || after?.content) {\n textDiff = (\n <TextDiff\n before={before?.content}\n after={after?.content}\n title={title}\n />\n );\n }\n\n const beforeWidgets: string[] = Object.keys(\n before?.widgets ?? {},\n ).filter((widget) => before?.content.includes(widget));\n const afterWidgets: string[] = Object.keys(after?.widgets ?? {}).filter(\n (widget) => after?.content.includes(widget),\n );\n\n if (beforeWidgets.length > 0 || afterWidgets.length > 0) {\n const widgets = _.union(beforeWidgets, afterWidgets);\n widgetsDiff = widgets.map((widget) => (\n <WidgetDiff\n before={\n // eslint-disable-next-line no-restricted-syntax\n filterWidgetInfo(\n before?.widgets?.[widget],\n showAlignmentOptions,\n ) as PerseusWidget\n }\n after={\n // eslint-disable-next-line no-restricted-syntax\n filterWidgetInfo(\n after?.widgets?.[widget],\n showAlignmentOptions,\n ) as PerseusWidget\n }\n title={widget}\n type={\n (before?.widgets?.[widget] ?? {}).type ||\n (after?.widgets?.[widget] ?? {}).type\n }\n key={widget}\n />\n ));\n }\n\n return (\n <div>\n {textDiff}\n {widgetsDiff}\n {showSeparator && <div className=\"diff-separator\" />}\n </div>\n );\n }\n}\n\nexport default RendererDiff;\n","/**\n * A side by side diff view for Perseus articles.\n */\n\nimport {Dependencies, type PerseusDependenciesV2} from \"@khanacademy/perseus\";\nimport * as React from \"react\";\nimport _ from \"underscore\";\n\nimport RendererDiff from \"./renderer-diff\";\n\nimport type {PerseusArticle, PerseusRenderer} from \"@khanacademy/perseus-core\";\n\ninterface Props {\n after: PerseusArticle;\n before: PerseusArticle;\n dependencies: PerseusDependenciesV2;\n}\n\ntype ArticleDiffState = {\n // Externally we allow both arrays and single PerseusRenderer objects.\n // Internally we convert to arrays.\n before: PerseusRenderer[];\n after: PerseusRenderer[];\n};\n\nclass ArticleDiff extends React.Component<Props, ArticleDiffState> {\n static _stateFromProps: (arg1: Props) => ArticleDiffState = (props) => {\n const {before, after} = props;\n return {\n before: Array.isArray(before) ? before : [before],\n after: Array.isArray(after) ? after : [after],\n };\n };\n\n state: ArticleDiffState = ArticleDiff._stateFromProps(this.props);\n\n UNSAFE_componentWillReceiveProps(nextProps: Props) {\n this.setState(ArticleDiff._stateFromProps(nextProps));\n }\n\n render(): React.ReactNode {\n const {before, after} = this.state;\n\n const sectionCount = Math.max(before.length, after.length);\n\n const sections = _.times(sectionCount, (n) => (\n <RendererDiff\n before={n < before.length ? before[n] : undefined}\n after={n < after.length ? after[n] : undefined}\n title={`Section ${n + 1}`}\n showAlignmentOptions={true}\n showSeparator={n < sectionCount - 1}\n key={n}\n />\n ));\n\n return (\n <Dependencies.DependenciesContext.Provider\n value={this.props.dependencies}\n >\n <div className=\"framework-perseus\">{sections}</div>\n </Dependencies.DependenciesContext.Provider>\n );\n }\n}\n\nexport default ArticleDiff;\n","import * as React from \"react\";\n\nimport DiffEntry from \"./shared/diff-entry\";\nimport performDiff from \"./shared/widget-diff-performer\";\n\nimport type {PerseusAnswerArea} from \"@khanacademy/perseus-core\";\n\ntype AnswerAreaDiffProps = {\n after: PerseusAnswerArea | undefined;\n before: PerseusAnswerArea | undefined;\n title: string;\n};\n\nexport class AnswerAreaDiff extends React.Component<AnswerAreaDiffProps> {\n render(): React.ReactNode {\n const {after, before, title} = this.props;\n\n // If before or after is undefined, pass an empty object to performDiff.\n const diff = performDiff(before ? before : {}, after ? after : {});\n return (\n <>\n <div className=\"diff-header\">{title}</div>\n <div className=\"diff-header\">{title}</div>\n <div className=\"diff-body ui-helper-clearfix\">\n <DiffEntry entry={diff} />\n </div>\n </>\n );\n }\n}\n","/**\n * A side by side diff view for Perseus exercise items\n * in the standard layout.\n */\n\nimport {Dependencies, type PerseusDependenciesV2} from \"@khanacademy/perseus\";\nimport * as React from \"react\";\nimport _ from \"underscore\";\n\nimport {AnswerAreaDiff} from \"./answer-area-diff\";\nimport RendererDiff from \"./renderer-diff\";\n\nimport type {PerseusItem} from \"@khanacademy/perseus-core\";\n\ninterface Props {\n after: PerseusItem;\n before: PerseusItem;\n dependencies: PerseusDependenciesV2;\n}\n\nclass ItemDiff extends React.Component<Props> {\n render(): React.ReactNode {\n const {before, after} = this.props;\n\n const hintCount = Math.max(before.hints.length, after.hints.length);\n\n const question = (\n <RendererDiff\n before={before.question}\n after={after.question}\n title=\"Question\"\n showAlignmentOptions={false}\n showSeparator={true}\n />\n );\n\n const extras = (\n <AnswerAreaDiff\n before={before.answerArea ? before.answerArea : undefined}\n after={after.answerArea ? after.answerArea : undefined}\n title=\"Question extras\"\n />\n );\n\n const hints = _.times(hintCount, function (n) {\n return (\n <RendererDiff\n before={\n n < before.hints.length ? before.hints[n] : undefined\n }\n after={n < after.hints.length ? after.hints[n] : undefined}\n title={`Hint ${n + 1}`}\n showAlignmentOptions={false}\n showSeparator={n < hintCount - 1}\n key={n}\n />\n );\n });\n\n return (\n <Dependencies.DependenciesContext.Provider\n value={this.props.dependencies}\n >\n <div className=\"framework-perseus\">\n {question}\n {extras}\n {hints.length > 0 && <div className=\"diff-separator\" />}\n {hints}\n </div>\n </Dependencies.DependenciesContext.Provider>\n );\n }\n}\n\nexport default ItemDiff;\n","/**\n * Collection of classes for rendering the hint editor area,\n * hint editor boxes, and hint previews\n */\nimport {ApiOptions} from \"@khanacademy/perseus\";\nimport Button from \"@khanacademy/wonder-blocks-button\";\nimport {Checkbox} from \"@khanacademy/wonder-blocks-form\";\nimport IconButton from \"@khanacademy/wonder-blocks-icon-button\";\nimport {BodyText} from \"@khanacademy/wonder-blocks-typography\";\nimport arrowCircleDownIcon from \"@phosphor-icons/core/bold/arrow-circle-down-bold.svg\";\nimport arrowCircleUpIcon from \"@phosphor-icons/core/bold/arrow-circle-up-bold.svg\";\nimport plusIcon from \"@phosphor-icons/core/bold/plus-bold.svg\";\nimport trashIcon from \"@phosphor-icons/core/bold/trash-bold.svg\";\nimport * as React from \"react\";\nimport _ from \"underscore\";\n\nimport DeviceFramer from \"./components/device-framer\";\nimport Editor from \"./editor\";\nimport PreviewWithIframe from \"./preview-with-iframe\";\n\nimport type {\n APIOptions,\n ImageDict,\n DeviceType,\n ImageUploader,\n} from \"@khanacademy/perseus\";\nimport type {\n Hint,\n PerseusRenderer,\n PerseusWidgetsMap,\n} from \"@khanacademy/perseus-core\";\n\ntype HintEditorProps = {\n itemId?: string;\n apiOptions?: APIOptions;\n className: string;\n imageUploader?: ImageUploader;\n showMoveButtons: boolean;\n showRemoveButton: boolean;\n showTitle: boolean;\n content: string;\n replace: boolean;\n widgets: PerseusWidgetsMap;\n images: ImageDict;\n isLast: boolean;\n isFirst: boolean;\n onMove: (direction: number) => unknown;\n onRemove: () => unknown;\n onChange: (hint: Hint) => void;\n __type?: \"hint\";\n widgetIsOpen?: boolean;\n};\n\n/* Renders a hint editor box\n *\n * This includes:\n * ~ A \"Hint\" title\n * ~ the textarea for the hint\n * ~ the \"remove this hint\" box\n * ~ the move hint up/down arrows\n */\nclass HintEditor extends React.Component<HintEditorProps> {\n static defaultProps: {\n className: string;\n content: string;\n images: ImageDict;\n widgets: PerseusWidgetsMap;\n replace: boolean;\n showMoveButtons: boolean;\n showRemoveButton: boolean;\n showTitle: boolean;\n } = {\n className: \"\",\n content: \"\",\n images: {},\n widgets: {},\n replace: false,\n showMoveButtons: true,\n showTitle: true,\n showRemoveButton: true,\n };\n\n editor = React.createRef<Editor>();\n\n handleChange(updates: Partial<Hint>) {\n this.props.onChange({\n content: this.props.content,\n images: this.props.images,\n widgets: this.props.widgets,\n replace: this.props.replace,\n ...updates,\n });\n }\n\n focus: () => void = () => {\n this.editor.current?.focus();\n };\n\n getSaveWarnings: () => any = () => {\n return this.editor.current?.getSaveWarnings();\n };\n\n render(): React.ReactNode {\n return (\n <div className={\"perseus-hint-editor \" + this.props.className}>\n {this.props.showTitle && <div className=\"pod-title\">Hint</div>}\n <Editor\n ref={this.editor}\n // Using the AssessmentItem content ID as the key\n // ensures that when the user navigates to another\n // item in the Sidebar, the question editor is\n // re-rendered by React.\n key={this.props.itemId}\n apiOptions={this.props.apiOptions}\n widgets={this.props.widgets}\n content={this.props.content}\n images={this.props.images}\n placeholder=\"Type your hint here...\"\n imageUploader={this.props.imageUploader}\n onChange={(renderer) => this.handleChange(renderer)}\n widgetIsOpen={this.props.widgetIsOpen}\n />\n\n {/* All buttons under the editor */}\n <div className=\"perseus-hint-editor-actions\">\n {this.props.isLast && (\n <BodyText size=\"xsmall\">\n The last hint is automatically bolded.\n </BodyText>\n )}\n\n {/* Row that includes movement buttons and the \"Replace previous hint\" checkbox */}\n <div\n style={{\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n }}\n >\n {this.props.showMoveButtons && (\n <>\n <IconButton\n icon={arrowCircleDownIcon}\n aria-label=\"Move hint down\"\n size=\"small\"\n kind=\"tertiary\"\n onClick={_.partial(this.props.onMove, 1)}\n disabled={this.props.isLast}\n />\n <IconButton\n icon={arrowCircleUpIcon}\n aria-label=\"Move hint up\"\n size=\"small\"\n kind=\"tertiary\"\n onClick={_.partial(this.props.onMove, -1)}\n disabled={this.props.isFirst}\n />\n </>\n )}\n <Checkbox\n checked={this.props.replace}\n onChange={(replace) => {\n this.handleChange({replace});\n }}\n label=\"Replace previous hint\"\n style={{display: \"inline-block\"}}\n />\n </div>\n\n {this.props.showRemoveButton && (\n <Button\n startIcon={trashIcon}\n size=\"small\"\n kind=\"tertiary\"\n disabled={this.props.apiOptions?.editingDisabled}\n onClick={this.props.onRemove}\n // Have the \"Remove\" button align to the right.\n style={{marginInlineStart: \"auto\", display: \"flex\"}}\n >\n Remove this hint\n </Button>\n )}\n </div>\n </div>\n );\n }\n}\n\ntype CombinedHintEditorProps = {\n itemId?: string;\n apiOptions?: APIOptions;\n deviceType: DeviceType;\n imageUploader?: ImageUploader;\n highlightLint: boolean;\n isLast: boolean;\n isFirst: boolean;\n hint: Hint;\n pos: number; // position,\n // URL of the route to show on initial load of the preview frames.\n previewURL: string;\n onMove: (direction: number) => unknown;\n onRemove: () => unknown;\n onChange: (hint: Hint) => void;\n widgetIsOpen?: boolean;\n};\n\n/* A single hint-row containing a hint editor and preview */\nclass CombinedHintEditor extends React.Component<CombinedHintEditorProps> {\n editor = React.createRef<HintEditor>();\n\n getSaveWarnings = () => {\n return this.editor.current?.getSaveWarnings();\n };\n\n focus = () => {\n this.editor.current?.focus();\n };\n\n render(): React.ReactNode {\n const isMobile =\n this.props.deviceType === \"phone\" ||\n this.props.deviceType === \"tablet\";\n return (\n <div\n className={\n \"perseus-combined-hint-editor \" + \"perseus-editor-row\"\n }\n >\n <div className=\"perseus-editor-left-cell\">\n <HintEditor\n ref={this.editor}\n itemId={this.props.itemId}\n isFirst={this.props.isFirst}\n isLast={this.props.isLast}\n widgets={this.props.hint.widgets}\n content={this.props.hint.content}\n images={this.props.hint.images}\n replace={this.props.hint.replace}\n imageUploader={this.props.imageUploader}\n onChange={this.props.onChange}\n onRemove={this.props.onRemove}\n onMove={this.props.onMove}\n apiOptions={this.props.apiOptions}\n widgetIsOpen={this.props.widgetIsOpen}\n />\n </div>\n <div className=\"perseus-editor-right-cell\">\n <DeviceFramer\n deviceType={this.props.deviceType}\n nochrome={true}\n >\n <PreviewWithIframe\n isMobile={isMobile}\n seamless={true}\n url={this.props.previewURL}\n content={{\n type: \"hint\",\n data: {\n hint: this.props.hint,\n pos: this.props.pos,\n apiOptions:\n this.props.apiOptions ||\n ApiOptions.defaults,\n linterContext: {\n contentType: \"hint\",\n highlightLint: this.props.highlightLint,\n },\n },\n }}\n />\n </DeviceFramer>\n </div>\n </div>\n );\n }\n}\n\ntype CombinedHintsEditorProps = {\n apiOptions?: APIOptions;\n deviceType: DeviceType;\n imageUploader?: ImageUploader;\n highlightLint: boolean;\n hints: Hint[];\n // URL of the route to show on initial load of the preview frames.\n previewURL: string;\n onChange: (changed: {hints: Hint[]}) => void;\n // The content ID of the AssessmentItem being edited. It may not be set\n // for non-content library exercise questions.\n itemId?: string;\n widgetIsOpen?: boolean;\n};\n\n/* The entire hints editing/preview area\n *\n * Includes:\n * ~ All the hint edit boxes, move and remove buttons\n * ~ All the hint previews\n * ~ The \"add a hint\" button\n */\nclass CombinedHintsEditor extends React.Component<CombinedHintsEditorProps> {\n static HintEditor: typeof HintEditor = HintEditor;\n\n static defaultProps: {\n hints: ReadonlyArray<any>;\n onChange: () => void;\n } = {\n hints: [],\n onChange: () => {},\n };\n\n handleHintChange(i: number, hint: Hint): void {\n const hints = [...this.props.hints];\n hints[i] = hint;\n this.props.onChange({hints});\n }\n\n handleHintRemove(i: number): void {\n // eslint-disable-next-line no-alert\n if (!confirm(\"Are you sure you want to delete this hint?\")) {\n return;\n }\n\n const hints = [...this.props.hints];\n hints.splice(i, 1);\n this.props.onChange({hints: hints});\n }\n\n handleHintMove(i: number, dir: number): void {\n const hints = [...this.props.hints];\n const hint = hints.splice(i, 1)[0];\n hints.splice(i + dir, 0, hint);\n this.props.onChange({hints: hints});\n }\n\n addHint: () => void = () => {\n const hint: PerseusRenderer = {content: \"\", images: {}, widgets: {}};\n const hints = [...this.props.hints, hint];\n this.props.onChange({hints: hints});\n };\n\n getSaveWarnings: () => any = () => {\n return _.chain(this.props.hints)\n .map((hint, i) => {\n return _.map(\n // @ts-expect-error - TS2339 - Property 'getSaveWarnings' does not exist on type 'ReactInstance'.\n this.refs[\"hintEditor\" + i].getSaveWarnings(),\n (issue) => \"Hint \" + (i + 1) + \": \" + issue,\n );\n })\n .flatten(true)\n .value();\n };\n\n render(): React.ReactNode {\n const {itemId, hints} = this.props;\n const editingDisabled = this.props.apiOptions?.editingDisabled ?? false;\n const hintElems = hints.map((hint, i) => {\n return (\n <fieldset disabled={editingDisabled} key={\"hintEditor\" + i}>\n <CombinedHintEditor\n ref={\"hintEditor\" + i}\n isFirst={i === 0}\n isLast={i + 1 === hints.length}\n itemId={itemId}\n hint={hint}\n pos={i}\n imageUploader={this.props.imageUploader}\n onChange={(hint) => this.handleHintChange(i, hint)}\n onRemove={() => this.handleHintRemove(i)}\n onMove={(dir) => this.handleHintMove(i, dir)}\n deviceType={this.props.deviceType}\n apiOptions={this.props.apiOptions}\n highlightLint={this.props.highlightLint}\n previewURL={this.props.previewURL}\n widgetIsOpen={this.props.widgetIsOpen}\n />\n </fieldset>\n );\n });\n\n return (\n <>\n {hintElems}\n <div className=\"perseus-editor-row\">\n <Button\n startIcon={plusIcon}\n disabled={editingDisabled}\n size=\"small\"\n onClick={this.addHint}\n >\n Add a hint\n </Button>\n </div>\n </>\n );\n }\n}\n\nexport default CombinedHintsEditor;\n","import {getDefaultAnswerArea, isFeatureOn} from \"@khanacademy/perseus-core\";\nimport {View} from \"@khanacademy/wonder-blocks-core\";\nimport {Checkbox, Choice, RadioGroup} from \"@khanacademy/wonder-blocks-form\";\nimport {sizing, spacing} from \"@khanacademy/wonder-blocks-tokens\";\nimport {StyleSheet} from \"aphrodite\";\nimport * as React from \"react\";\n\nimport InfoTip from \"./components/info-tip\";\n\nimport type {APIOptions} from \"@khanacademy/perseus\";\nimport type {\n CalculatorVariant,\n PerseusAnswerArea,\n} from \"@khanacademy/perseus-core\";\n\nconst calculatorVariants: Array<{\n label: string;\n variant: CalculatorVariant;\n}> = [\n {\n label: \"Scientific calculator\",\n variant: \"scientific\",\n },\n {\n label: \"Graphing calculator\",\n variant: \"graphing\",\n },\n {\n label: \"Four-function calculator\",\n variant: \"four_function\",\n },\n];\n\ntype Props = PerseusAnswerArea & {\n apiOptions?: APIOptions;\n onChange: (props: Partial<PerseusAnswerArea>) => void;\n // Whether the editor is disabled. Can be set via API options\n // to make the editor read-only when needed.\n editingDisabled: boolean;\n};\n\nclass ExtrasEditor extends React.Component<Props> {\n static defaultProps: PerseusAnswerArea = getDefaultAnswerArea();\n\n shouldShowCalculatorVariants() {\n return this.props.calculatorVariant !== undefined;\n }\n\n shouldShowFinancialCalculatorOptions() {\n return (\n this.props.financialCalculatorMonthlyPayment ||\n this.props.financialCalculatorTotalAmount ||\n this.props.financialCalculatorTimeToPayOff\n );\n }\n\n handleVariantChange = (newVariant: string) => {\n // Since RadioGroup gives us a string, we need to convert the string to\n // avoid a type error\n const selected = calculatorVariants.find(\n ({variant}) => variant === newVariant,\n );\n if (selected) {\n this.props.onChange({calculatorVariant: selected.variant});\n }\n };\n\n render(): React.ReactNode {\n const {editingDisabled, calculatorVariant} = this.props;\n return (\n <div className=\"perseus-answer-editor\">\n <div className=\"perseus-answer-options\">\n <ExtraCheckbox\n label=\"Show calculator\"\n disabled={editingDisabled}\n infoTip=\"Use the calculator when completing difficult calculations is NOT the intent of the question. DON’T use the calculator when testing the student’s ability to complete different types of computations.\"\n checked={this.shouldShowCalculatorVariants()}\n onChange={(newCheckedState) => {\n this.props.onChange({\n calculator: newCheckedState,\n calculatorVariant: newCheckedState\n ? \"scientific\"\n : undefined,\n });\n }}\n />\n\n {isFeatureOn(this.props, \"desmos-calculator\") &&\n calculatorVariant !== undefined && (\n <RadioGroup\n groupName=\"calculator-variant\"\n selectedValue={calculatorVariant}\n onChange={this.handleVariantChange}\n style={styles.indented}\n >\n {calculatorVariants.map((calcVariant, _) => (\n <Choice\n key={calcVariant.variant}\n value={calcVariant.variant}\n label={calcVariant.label}\n disabled={editingDisabled}\n style={styles.calculatorChoice}\n />\n ))}\n </RadioGroup>\n )}\n\n <ExtraCheckbox\n label=\"Show financial calculator\"\n disabled={editingDisabled}\n infoTip=\"This provides the student with the ability to view a financial calculator, e.g., for answering financial questions. Once checked, requires at least one of the three options below to be checked.\"\n checked={this.shouldShowFinancialCalculatorOptions()}\n onChange={(newCheckedState) => {\n // If the financial calculator is unchecked,\n // these need to be reset. All checked by\n // default.\n this.props.onChange({\n financialCalculatorMonthlyPayment:\n newCheckedState,\n financialCalculatorTotalAmount: newCheckedState,\n financialCalculatorTimeToPayOff:\n newCheckedState,\n });\n }}\n />\n\n {this.shouldShowFinancialCalculatorOptions() && (\n <>\n <ExtraCheckbox\n label=\"Include monthly payment\"\n disabled={editingDisabled}\n infoTip=\"This provides the student with the ability to view a monthly payment calculator; e.g., given a loan amount, interest rate, and term, what is the monthly payment?\"\n checked={\n this.props.financialCalculatorMonthlyPayment\n }\n onChange={(newCheckedState) => {\n this.props.onChange({\n financialCalculatorMonthlyPayment:\n newCheckedState,\n });\n }}\n indent\n />\n <ExtraCheckbox\n label=\"Include total amount\"\n disabled={editingDisabled}\n infoTip=\"This provides the student with the ability to view a total amount calculator; e.g., given a monthly payment, interest rate, and term, what is the total amount to be paid?\"\n checked={\n this.props.financialCalculatorTotalAmount\n }\n onChange={(newCheckedState) => {\n this.props.onChange({\n financialCalculatorTotalAmount:\n newCheckedState,\n });\n }}\n indent\n />\n <ExtraCheckbox\n label=\"Include time-to-pay-off\"\n disabled={editingDisabled}\n infoTip=\"This provides the student with the ability to view a time to pay off calculator; e.g., given a loan amount, interest rate, and monthly payment, how long will it take to pay off the loan?\"\n checked={\n this.props.financialCalculatorTimeToPayOff\n }\n onChange={(newCheckedState) => {\n this.props.onChange({\n financialCalculatorTimeToPayOff:\n newCheckedState,\n });\n }}\n indent\n />\n </>\n )}\n\n <ExtraCheckbox\n label=\"Show periodic table\"\n disabled={editingDisabled}\n infoTip=\"This provides the student with the ability to view a periodic table of the elements, e.g., for answering chemistry questions.\"\n checked={this.props.periodicTable}\n onChange={(newCheckedState) => {\n this.props.onChange({\n periodicTable: newCheckedState,\n // If the periodic table is unchecked,\n // this needs to be reset. If table is\n // checked, it should already be false.\n periodicTableWithKey: false,\n });\n }}\n />\n\n {this.props.periodicTable && (\n <ExtraCheckbox\n label=\"Include key/legend with periodic table\"\n disabled={editingDisabled}\n infoTip=\"Include a key for HS courses; omit for AP chemistry.\"\n checked={this.props.periodicTableWithKey}\n onChange={(newCheckedState) => {\n this.props.onChange({\n periodicTableWithKey: newCheckedState,\n });\n }}\n indent\n />\n )}\n </div>\n </div>\n );\n }\n}\n\nconst ExtraCheckbox = (props: {\n label: string;\n infoTip: string;\n checked: boolean;\n onChange: (newCheckedState: boolean) => void;\n indent?: boolean;\n disabled?: boolean;\n}) => (\n <View style={[styles.checkbox, props.indent ? styles.indented : undefined]}>\n <Checkbox\n disabled={props.disabled}\n label={\n <View style={{flexDirection: \"row\"}}>\n {props.label} <InfoTip>{props.infoTip}</InfoTip>\n </View>\n }\n checked={props.checked}\n onChange={(newCheckedState) => props.onChange(newCheckedState)}\n />\n </View>\n);\n\nconst styles = StyleSheet.create({\n indented: {\n marginInlineStart: spacing.large_24,\n },\n calculatorChoice: {\n marginBlock: sizing.size_010,\n },\n});\n\nexport default ExtrasEditor;\n","import {ApiOptions} from \"@khanacademy/perseus\";\n\nimport type {PreviewContent} from \"../preview/message-types\";\nimport type {APIOptions, DeviceType} from \"@khanacademy/perseus\";\nimport type {PerseusRenderer} from \"@khanacademy/perseus-core\";\n\ntype QuestionPreview = Extract<PreviewContent, {type: \"question\"}>;\n\nexport type DerivePreviewContentInputs = {\n question: PerseusRenderer | undefined;\n apiOptions: APIOptions | undefined;\n deviceType: DeviceType;\n highlightLint: boolean;\n problemNum: number | undefined;\n legacyPerseusLint: ReadonlyArray<string>;\n};\n\nfunction legacyPerseusLintEqual(\n a: ReadonlyArray<string>,\n b: ReadonlyArray<string>,\n): boolean {\n return a.length === b.length && a.every((warning, i) => warning === b[i]);\n}\n\nfunction inputsEqual(\n a: DerivePreviewContentInputs,\n b: DerivePreviewContentInputs,\n): boolean {\n return (\n a.question === b.question &&\n a.apiOptions === b.apiOptions &&\n a.deviceType === b.deviceType &&\n a.highlightLint === b.highlightLint &&\n a.problemNum === b.problemNum &&\n legacyPerseusLintEqual(a.legacyPerseusLint, b.legacyPerseusLint)\n );\n}\n\nfunction buildContent(inputs: DerivePreviewContentInputs): QuestionPreview {\n return {\n type: \"question\",\n data: {\n question: inputs.question!,\n apiOptions: {\n ...ApiOptions.defaults,\n ...inputs.apiOptions,\n customKeypad:\n inputs.deviceType === \"phone\" ||\n inputs.deviceType === \"tablet\",\n },\n linterContext: {\n contentType: \"exercise\",\n highlightLint: inputs.highlightLint,\n },\n reviewMode: true,\n legacyPerseusLint: inputs.legacyPerseusLint,\n problemNum: inputs.problemNum,\n },\n };\n}\n\n/**\n * Returns a `derivePreviewContent` function that returns the same object\n * reference across calls when none of its inputs have actually changed.\n * `legacyPerseusLint` is rebuilt as a fresh array by the underlying editor on\n * every call, so it's compared by value rather than by reference — otherwise\n * every call would look \"changed\" and defeat the memoization.\n */\nexport function createPreviewContentDeriver(): (\n inputs: DerivePreviewContentInputs,\n) => QuestionPreview | null {\n let lastInputs: DerivePreviewContentInputs | null = null;\n let lastContent: QuestionPreview | null = null;\n\n return (inputs: DerivePreviewContentInputs): QuestionPreview | null => {\n if (!inputs.question) {\n return null;\n }\n if (lastInputs && inputsEqual(inputs, lastInputs)) {\n return lastContent;\n }\n const content = buildContent(inputs);\n lastInputs = inputs;\n lastContent = content;\n return content;\n };\n}\n","import * as React from \"react\";\nimport _ from \"underscore\";\n\nimport CombinedHintsEditor from \"./combined-hints-editor\";\nimport {A11yContext} from \"./components/a11y-context\";\nimport DeviceFramer from \"./components/device-framer\";\nimport Editor from \"./editor\";\nimport ExtrasEditor from \"./extras-editor\";\nimport PreviewWithIframe from \"./preview-with-iframe\";\nimport {createPreviewContentDeriver} from \"./util/derive-question-preview-content\";\n\nimport type {A11yReport} from \"./preview/use-preview-controller\";\nimport type {\n APIOptions,\n ImageUploader,\n ChangeHandler,\n DeviceType,\n} from \"@khanacademy/perseus\";\nimport type {\n PerseusAnswerArea,\n PerseusRenderer,\n PerseusItem,\n Hint,\n} from \"@khanacademy/perseus-core\";\n\ntype Props = {\n /** Additional templates that the host application would like to display\n * within the Perseus Editor.\n */\n additionalTemplates?: Record<string, string>;\n apiOptions?: APIOptions;\n deviceType: DeviceType;\n widgetIsOpen?: boolean;\n imageUploader?: ImageUploader;\n question?: PerseusRenderer;\n hints: Hint[];\n answerArea?: PerseusAnswerArea | null;\n /** URL of the route to show on initial load of the preview frames. */\n previewURL: string;\n onChange: (changed: Partial<PerseusItem>) => void;\n /** The content ID of the AssessmentItem being edited. It may not be set\n * for non-content library exercise questions.\n */\n itemId?: string;\n /** Whether to highlight lint warnings in the preview. */\n highlightLint: boolean;\n /** The problem number, used for deterministic random seeding in the\n * preview. */\n problemNum?: number;\n};\n\nclass ItemEditor extends React.Component<Props> {\n static contextType = A11yContext;\n declare context: React.ContextType<typeof A11yContext>;\n\n static defaultProps: {\n answerArea: Record<any, any>;\n onChange: () => void;\n question: Record<any, any>;\n } = {\n onChange: () => {},\n question: {},\n answerArea: {},\n };\n questionEditor = React.createRef<Editor>();\n extrasEditor = React.createRef<ExtrasEditor>();\n hintsEditor = React.createRef<CombinedHintsEditor>();\n derivePreviewContent = createPreviewContentDeriver();\n\n // Notify the parent that the question or answer area has been updated.\n updateProps = (newProps: Partial<PerseusItem>) => {\n const props = _(this.props).pick(\"question\", \"answerArea\");\n\n this.props.onChange(_(props).extend(newProps));\n };\n\n handleEditorChange: ChangeHandler = (newProps) => {\n const question = _.extend({}, this.props.question, newProps);\n this.updateProps({question});\n };\n\n handleExtrasChange = (newProps: Partial<PerseusAnswerArea>) => {\n const answerArea = _.extend({}, this.props.answerArea, newProps);\n this.updateProps({answerArea});\n };\n\n // TODO(benchristel): Correctly type all getSaveWarnings methods.\n getSaveWarnings: () => any = () => {\n return [\n ...(this.questionEditor.current?.getSaveWarnings() ?? []),\n ...(this.hintsEditor.current?.getSaveWarnings() ?? []),\n ];\n };\n\n handleA11yReport = (report: A11yReport | null) => {\n this.context?.onA11yReport(report);\n };\n\n render(): React.ReactNode {\n const isMobile =\n this.props.deviceType === \"phone\" ||\n this.props.deviceType === \"tablet\";\n const editingDisabled = this.props.apiOptions?.editingDisabled ?? false;\n const a11yScanningEnabled = this.context?.a11yScanningEnabled ?? false;\n const highlightInstanceIds = this.context?.highlightInstanceIds ?? [];\n\n return (\n <div className=\"perseus-editor-table\">\n <div className=\"perseus-editor-row perseus-question-container\">\n <div className=\"perseus-editor-left-cell\">\n <div className=\"pod-title\">Question</div>\n <fieldset disabled={editingDisabled}>\n <Editor\n ref={this.questionEditor}\n // Using the AssessmentItem content ID as the key\n // ensures that when the user navigates to another\n // item in the Sidebar, the question editor is\n // re-rendered by React.\n key={this.props.itemId}\n placeholder=\"Type your question here...\"\n className=\"perseus-question-editor\"\n imageUploader={this.props.imageUploader}\n onChange={this.handleEditorChange}\n apiOptions={this.props.apiOptions}\n showWordCount={true}\n widgetIsOpen={this.props.widgetIsOpen}\n additionalTemplates={\n this.props.additionalTemplates\n }\n {...this.props.question}\n />\n </fieldset>\n </div>\n\n <div className=\"perseus-editor-right-cell\">\n <div id=\"problemarea\">\n <DeviceFramer\n deviceType={this.props.deviceType}\n nochrome={true}\n >\n <PreviewWithIframe\n key={this.props.deviceType}\n isMobile={isMobile}\n seamless={true}\n url={this.props.previewURL}\n content={this.derivePreviewContent({\n question: this.props.question,\n apiOptions: this.props.apiOptions,\n deviceType: this.props.deviceType,\n highlightLint: this.props.highlightLint,\n problemNum: this.props.problemNum,\n legacyPerseusLint:\n this.getSaveWarnings() ?? [],\n })}\n a11yScanningEnabled={a11yScanningEnabled}\n highlightInstanceIds={highlightInstanceIds}\n onA11yReport={this.handleA11yReport}\n />\n </DeviceFramer>\n </div>\n </div>\n </div>\n\n <div className=\"perseus-editor-row perseus-answer-container\">\n <div className=\"perseus-editor-left-cell\">\n <div className=\"pod-title\">Question extras</div>\n <ExtrasEditor\n ref={this.extrasEditor}\n apiOptions={this.props.apiOptions}\n onChange={this.handleExtrasChange}\n editingDisabled={editingDisabled}\n {...this.props.answerArea}\n />\n </div>\n </div>\n\n <CombinedHintsEditor\n ref={this.hintsEditor}\n itemId={this.props.itemId}\n hints={this.props.hints}\n imageUploader={this.props.imageUploader}\n onChange={this.props.onChange}\n deviceType={this.props.deviceType}\n apiOptions={this.props.apiOptions}\n previewURL={this.props.previewURL}\n highlightLint={this.props.highlightLint}\n widgetIsOpen={this.props.widgetIsOpen}\n />\n </div>\n );\n }\n}\n\nexport default ItemEditor;\n","import {ApiOptions} from \"@khanacademy/perseus\";\n\nimport type {APIOptions, APIOptionsWithDefaults} from \"@khanacademy/perseus\";\n\nexport type DeviceApiOptionsInputs = {\n apiOptions: APIOptions | undefined;\n touch: boolean;\n};\n\nfunction buildDeviceApiOptions(\n inputs: DeviceApiOptionsInputs,\n): APIOptionsWithDefaults {\n return {\n ...ApiOptions.defaults,\n ...inputs.apiOptions,\n customKeypad: inputs.touch,\n isMobile: inputs.touch,\n };\n}\n\n/**\n * Returns a memoized deriver for the preview's device-adjusted apiOptions.\n * It returns the same object reference across calls while neither `apiOptions`\n * (by reference) nor `touch` (by value) changes, so EditorPage's per-render\n * rebuild doesn't hand a fresh object to <ItemEditor>'s content memo — which\n * would defeat it and, with axe-core scanning on, loop scan -> report ->\n * re-render -> resend. (This is the class-component stand-in for `useMemo`.)\n */\nexport function createDeviceApiOptionsDeriver(): (\n inputs: DeviceApiOptionsInputs,\n) => APIOptionsWithDefaults {\n let lastInputs: DeviceApiOptionsInputs | null = null;\n let lastResult: APIOptionsWithDefaults | null = null;\n\n return (inputs: DeviceApiOptionsInputs): APIOptionsWithDefaults => {\n if (\n lastResult != null &&\n lastInputs != null &&\n lastInputs.apiOptions === inputs.apiOptions &&\n lastInputs.touch === inputs.touch\n ) {\n return lastResult;\n }\n const result = buildDeviceApiOptions(inputs);\n lastInputs = inputs;\n lastResult = result;\n return result;\n };\n}\n","import {PerseusMarkdown} from \"@khanacademy/perseus\";\nimport * as PerseusLinter from \"@khanacademy/perseus-linter\";\n\nimport {getIssueKey} from \"../components/issues-panel\";\nimport {WARNINGS} from \"../messages\";\n\nimport {detectTexErrors} from \"./tex-error-detector\";\n\nimport type {Issue} from \"../components/issues-panel\";\nimport type {\n Hint,\n PerseusRenderer,\n PerseusWidgetsMap,\n} from \"@khanacademy/perseus-core\";\n\nfunction lintRenderer(content: string, widgets?: PerseusWidgetsMap): Issue[] {\n const parsed = PerseusMarkdown.parse(content, {});\n const linterContext = {content, widgets, stack: []};\n\n const linterIssues = (\n PerseusLinter.runLinter(parsed, linterContext, false) ?? []\n ).map((warning) => {\n if (warning.rule === \"inaccessible-widget\") {\n return WARNINGS.inaccessibleWidget(\n warning.metadata?.widgetType ?? \"unknown\",\n warning.metadata?.widgetId ?? \"unknown\",\n );\n }\n return WARNINGS.genericLinterWarning(\n warning.rule,\n warning.message,\n warning.severity,\n );\n });\n\n const texIssues = detectTexErrors(content).map((error, i) =>\n WARNINGS.texError(error.math, error.message, i),\n );\n\n // A linter warning is identified by its rule name, so several occurrences\n // of one rule in the same renderer arrive sharing an `id`. Stamp an\n // occurrence ordinal to make each issue's key unique within this renderer,\n // leaving alone the ids that are already unique (`inaccessible-widget-*`).\n //\n // The ordinal counts per rule rather than across the whole list, so a new\n // warning of one rule doesn't renumber every issue after it.\n const ruleCounts = new Map<string, number>();\n return [...linterIssues, ...texIssues].map((issue) => {\n const ordinal = ruleCounts.get(issue.id) ?? 0;\n ruleCounts.set(issue.id, ordinal + 1);\n return {\n ...issue,\n instanceId: issue.instanceId ?? `${issue.id}-${ordinal}`,\n };\n });\n}\n\nexport function gatherLinterIssues(\n question: PerseusRenderer | undefined,\n hints: Hint[],\n hostIssues?: Issue[],\n): Issue[] {\n const questionIssues = lintRenderer(\n question?.content ?? \"\",\n question?.widgets,\n );\n\n const hintIssues = hints.flatMap((hint, i) =>\n lintRenderer(hint.content ?? \"\", hint.widgets ?? undefined).map(\n (issue) => ({\n ...issue,\n id: `hint-${i + 1}-${issue.id}`,\n instanceId: `hint-${i + 1}-${getIssueKey(issue)}`,\n message: `Hint ${i + 1}: ${issue.message}`,\n }),\n ),\n );\n\n return [...(hostIssues ?? []), ...questionIssues, ...hintIssues];\n}\n","import {ClassNames, components, Dependencies} from \"@khanacademy/perseus\";\nimport {\n getDefaultAnswerArea,\n parseAndMigratePerseusItem,\n} from \"@khanacademy/perseus-core\";\nimport * as React from \"react\";\nimport _ from \"underscore\";\n\nimport {A11yContext, createA11yContextValue} from \"./components/a11y-context\";\nimport IssuesPanel from \"./components/issues-panel\";\nimport JsonEditor from \"./components/json-editor\";\nimport ItemEditor from \"./item-editor\";\nimport {createDeviceApiOptionsDeriver} from \"./util/derive-device-api-options\";\nimport {gatherLinterIssues} from \"./util/gather-linter-issues\";\nimport {ItemEditorContext} from \"./util/item-editor-context\";\n\nimport type {A11yIssue, Issue} from \"./components/issues-panel\";\nimport type {A11yReport} from \"./preview/use-preview-controller\";\nimport type {\n APIOptions,\n DeviceType,\n ImageUploader,\n PerseusDependenciesV2,\n} from \"@khanacademy/perseus\";\nimport type {\n Hint,\n PerseusAnswerArea,\n PerseusItem,\n PerseusRenderer,\n} from \"@khanacademy/perseus-core\";\n\nconst {HUD} = components;\n\ntype Props = {\n /** Additional templates that the host application would like to display\n * within the Perseus Editor.\n */\n additionalTemplates?: Record<string, string>;\n apiOptions?: APIOptions;\n answerArea: PerseusAnswerArea; // related to the question,\n dependencies: PerseusDependenciesV2;\n hints: Hint[]; // related to the question,\n /** A function which takes a file object (guaranteed to be an image) and\n * a callback, then calls the callback with the url where the image\n * will be hosted. Image drag and drop is disabled when imageUploader\n * is null.\n */\n imageUploader?: ImageUploader;\n /** The content ID of the AssessmentItem being edited. */\n itemId: string;\n /** Shows a textarea with the raw JSON instead of the editor GUI. */\n jsonMode: boolean;\n /** A function which is called with the new JSON blob of content. */\n onChange: (changed: PerseusItem) => void;\n previewDevice: DeviceType;\n /** A global control to expand/collapse all widget editors on a page. */\n widgetsAreOpen?: boolean;\n /** Initial value of the question being edited. */\n question: PerseusRenderer;\n /** URL of the route to show on initial load of the preview frames. */\n previewURL: string;\n /** Additional issues that the host application would like to display\n * within the Perseus Editor. This allows the hosts to present issues\n * with the content that aren't linted/detected by Perseus itself.\n */\n issues?: Issue[];\n /** The problem number, used for deterministic random seeding in the\n * preview. */\n problemNum?: number;\n};\n\ntype DefaultProps = {\n answerArea: Props[\"answerArea\"];\n hints: Props[\"hints\"];\n jsonMode: Props[\"jsonMode\"];\n onChange: Props[\"onChange\"];\n};\n\ntype State = {\n json: PerseusItem;\n highlightLint: boolean;\n widgetsAreOpen: boolean;\n issues: Issue[];\n axeCoreIssues: A11yIssue[];\n a11yScanningEnabled: boolean;\n /** instanceIds of the issues with an active \"Show Me\" highlight. */\n highlightInstanceIds: string[];\n};\n\nclass EditorPage extends React.Component<Props, State> {\n itemEditor = React.createRef<ItemEditor>();\n\n // Derives the preview's device-adjusted apiOptions with a stable reference\n // across renders (see createDeviceApiOptionsDeriver for why that matters).\n deriveDeviceApiOptions = createDeviceApiOptionsDeriver();\n\n static defaultProps: DefaultProps = {\n answerArea: getDefaultAnswerArea(),\n hints: [],\n jsonMode: false,\n onChange: () => {},\n };\n\n constructor(props: Props) {\n super(props);\n\n this.state = {\n json: _.pick(this.props, \"question\", \"answerArea\", \"hints\"),\n highlightLint: true,\n widgetsAreOpen: this.props.widgetsAreOpen ?? true,\n issues: [],\n axeCoreIssues: [],\n a11yScanningEnabled: false,\n highlightInstanceIds: [],\n };\n }\n\n componentDidMount() {\n this.setState({\n issues: gatherLinterIssues(\n this.props.question,\n this.props.hints,\n this.props.issues,\n ),\n });\n }\n\n componentDidUpdate(previousProps: Props, prevState: State, snapshot: any) {\n // Use serialized snapshot from before unmount\n if (snapshot) {\n this.setState({json: snapshot});\n return;\n }\n\n if (\n !_.isEqual(previousProps.question, this.props.question) ||\n !_.isEqual(previousProps.answerArea, this.props.answerArea) ||\n !_.isEqual(previousProps.hints, this.props.hints)\n ) {\n this.syncJsonStateFromProps();\n }\n\n const questionOrHintsChanged =\n previousProps.question?.content !== this.props.question?.content ||\n previousProps.question?.widgets !== this.props.question?.widgets ||\n !_.isEqual(previousProps.hints, this.props.hints);\n\n if (questionOrHintsChanged) {\n this.setState({\n issues: gatherLinterIssues(\n this.props.question,\n this.props.hints,\n this.props.issues,\n ),\n });\n }\n }\n\n // Turns one issue's \"Show Me\" highlight on or off. Several issues can be\n // highlighted at once, so this holds a list rather than a single id.\n // Bails out when nothing changes, keeping the array's identity stable for\n // the preview's resend effect.\n setIssueHighlight = (instanceId: string, highlighted: boolean) => {\n this.setState((prevState) => {\n const current = prevState.highlightInstanceIds;\n if (highlighted === current.includes(instanceId)) {\n return null;\n }\n return {\n highlightInstanceIds: highlighted\n ? [...current, instanceId]\n : current.filter((id) => id !== instanceId),\n };\n });\n };\n\n handleA11yReport = (report: A11yReport | null) => {\n this.setState({\n axeCoreIssues: report\n ? [...report.violations, ...report.needsReview]\n : [],\n });\n };\n\n setA11yScanningEnabled = (enabled: boolean) => {\n this.setState({a11yScanningEnabled: enabled});\n };\n\n /**\n * Updates JSON state when props change from the parent.\n *\n * `state.json` is initialized once in the constructor. If the\n * Frontend sends fresh data while the editor is already mounted,\n * we need to update state.json to reflect those changes.\n */\n syncJsonStateFromProps() {\n this.setState({\n json: {\n question: this.props.question,\n answerArea: this.props.answerArea,\n // eslint-disable-next-line no-restricted-syntax\n hints: this.props.hints as Hint[],\n },\n });\n }\n\n getSaveWarnings(): any {\n return this.itemEditor.current?.getSaveWarnings();\n }\n\n handleChange = (toChange: Partial<PerseusItem>) => {\n const newProps = _(this.props).pick(\"question\", \"hints\", \"answerArea\");\n _(newProps).extend(toChange);\n this.props.onChange(newProps);\n };\n\n handleEditorChange = (newProps: Partial<PerseusRenderer>) => {\n this.handleChange({\n question: {...this.props.question, ...newProps},\n });\n };\n\n changeJSON: (newJson: PerseusItem) => void = (newJson: PerseusItem) => {\n this.setState({\n json: newJson,\n });\n this.props.onChange(newJson);\n };\n\n render(): React.ReactNode {\n let className = \"framework-perseus\";\n const editingDisabled = this.props.apiOptions?.editingDisabled ?? false;\n\n const touch =\n this.props.previewDevice === \"phone\" ||\n this.props.previewDevice === \"tablet\";\n const deviceBasedApiOptions = this.deriveDeviceApiOptions({\n apiOptions: this.props.apiOptions,\n touch,\n });\n\n if (deviceBasedApiOptions.isMobile) {\n className += \" \" + ClassNames.MOBILE;\n }\n\n return (\n <Dependencies.DependenciesContext.Provider\n value={this.props.dependencies}\n >\n <ItemEditorContext.Provider\n value={{\n question: this.props.question,\n onEditorChange: this.handleEditorChange,\n editingDisabled: this.props.apiOptions?.editingDisabled,\n }}\n >\n <div id=\"perseus\" className={className}>\n <div style={{marginBlockEnd: 10}}>\n {!this.props.jsonMode && (\n <HUD\n message=\"Style warnings\"\n enabled={this.state.highlightLint}\n onClick={() => {\n this.setState({\n highlightLint:\n !this.state.highlightLint,\n });\n }}\n />\n )}\n </div>\n {this.props.jsonMode ? (\n <div>\n <JsonEditor\n multiLine={true}\n value={this.state.json}\n parser={parseAndMigratePerseusItem}\n onChange={this.changeJSON}\n editingDisabled={editingDisabled}\n />\n </div>\n ) : (\n <A11yContext.Provider\n value={createA11yContextValue({\n setIssueHighlight: this.setIssueHighlight,\n a11yScanningEnabled:\n this.state.a11yScanningEnabled,\n setA11yScanningEnabled:\n this.setA11yScanningEnabled,\n highlightInstanceIds:\n this.state.highlightInstanceIds,\n onA11yReport: this.handleA11yReport,\n axeCoreIssues: this.state.axeCoreIssues,\n })}\n >\n <div className=\"perseus-editor-table\">\n <div className=\"perseus-editor-row\">\n <div className=\"perseus-editor-left-cell\">\n <IssuesPanel\n issues={this.state.issues}\n />\n </div>\n </div>\n </div>\n <ItemEditor\n ref={this.itemEditor}\n itemId={this.props.itemId}\n question={this.props.question}\n hints={this.props.hints}\n answerArea={this.props.answerArea}\n imageUploader={this.props.imageUploader}\n onChange={this.handleChange}\n deviceType={this.props.previewDevice}\n widgetIsOpen={this.state.widgetsAreOpen}\n apiOptions={deviceBasedApiOptions}\n previewURL={this.props.previewURL}\n additionalTemplates={\n this.props.additionalTemplates\n }\n highlightLint={this.state.highlightLint}\n problemNum={this.props.problemNum}\n />\n </A11yContext.Provider>\n )}\n </div>\n </ItemEditorContext.Provider>\n </Dependencies.DependenciesContext.Provider>\n );\n }\n}\n\nexport default EditorPage;\n","import {\n KeypadContext,\n StatefulKeypadContextProvider,\n} from \"@khanacademy/keypad-context\";\nimport {MobileKeypad} from \"@khanacademy/math-input\";\nimport {\n Renderer,\n usePerseusI18n,\n UserInputManager,\n type APIOptions,\n type DeviceType,\n} from \"@khanacademy/perseus\";\nimport {View} from \"@khanacademy/wonder-blocks-core\";\nimport {spacing} from \"@khanacademy/wonder-blocks-tokens\";\nimport {StyleSheet} from \"aphrodite\";\nimport * as React from \"react\";\n\nimport {lintGutterWidth} from \"./styles/constants\";\n\nimport type {PerseusRenderer} from \"@khanacademy/perseus-core\";\nimport type {LinterContextProps} from \"@khanacademy/perseus-linter\";\n\n/**\n * The `ContentPreview` component provides a simple preview system for Perseus\n * Content. Due to how Persus styles are built, the preview styling matches the\n * current device based on the viewport width (using `@media` queries for\n * `min-width` and `max-width`).\n *\n * The preview will render the mobile variant (styling and layout) when the\n * `previewDevice` is phone or tablet. Note that the styling cannot be matched\n * 100% due to the above `@media` query limitation.\n */\nfunction ContentPreview({\n question,\n apiOptions,\n seamless,\n linterContext,\n legacyPerseusLint,\n previewDevice,\n reviewMode,\n}: {\n /** The Perseus question to preview. */\n question?: PerseusRenderer;\n /** API Options to use when previewing. */\n apiOptions?: APIOptions;\n /**\n * When `true`, renders a seamless preview without any extra spacing. When\n * `false`, renders a gutter where linting issues are displayed.\n */\n seamless?: boolean;\n linterContext?: LinterContextProps;\n legacyPerseusLint?: ReadonlyArray<string>;\n /**\n * The type of device to simulate the preview for. Note that this preview\n * may not be 100% accurate with regards to styling (due to styles that use\n * media queries based on the screen width).\n */\n previewDevice: DeviceType;\n /**\n * Whether the preview is in review mode. When true, widgets will show\n * correct answers with explanations and prevent interaction.\n */\n reviewMode?: boolean;\n}) {\n const i18n = usePerseusI18n();\n const isMobile = previewDevice !== \"desktop\";\n\n const className = isMobile ? \"perseus-mobile\" : \"\";\n\n return (\n <View\n className={`framework-perseus ${className}`}\n style={[styles.container, !seamless ? styles.gutter : undefined]}\n >\n <StatefulKeypadContextProvider>\n <KeypadContext.Consumer>\n {({setKeypadActive, keypadElement, setKeypadElement}) => (\n <>\n <UserInputManager\n widgets={question?.widgets || {}}\n problemNum={0}\n >\n {({\n userInput,\n handleUserInput,\n initializeUserInput,\n }) => (\n <Renderer\n strings={i18n.strings}\n apiOptions={{...apiOptions, isMobile}}\n keypadElement={keypadElement}\n linterContext={linterContext}\n legacyPerseusLint={legacyPerseusLint}\n userInput={userInput}\n handleUserInput={handleUserInput}\n initializeUserInput={\n initializeUserInput\n }\n reviewMode={reviewMode}\n {...question}\n />\n )}\n </UserInputManager>\n\n <MobileKeypad\n onAnalyticsEvent={() => Promise.resolve()}\n onDismiss={() => setKeypadActive(false)}\n onElementMounted={setKeypadElement}\n />\n </>\n )}\n </KeypadContext.Consumer>\n </StatefulKeypadContextProvider>\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n container: {\n padding: spacing.xxxSmall_4,\n containerType: \"inline-size\",\n containerName: \"perseus-root\",\n },\n gutter: {marginInlineEnd: lintGutterWidth},\n});\n\nexport default ContentPreview;\n","export default {\n \"axe-core\": {\n \"user-fixable\": [\n \"aria-input-field-name\",\n \"aria-meter-name\",\n \"aria-toggle-field-name\",\n \"image-alt\",\n \"input-image-alt\",\n \"label\",\n \"link-name\",\n \"list\",\n \"role-img-alt\",\n \"select-name\",\n \"summary-name\",\n \"svg-img-alt\",\n \"video-caption\",\n ],\n },\n};\n","import issuesList from \"./a11y-issues-list\";\n\nimport type {A11yIssue, IssueImpact} from \"../../components/issues-panel\";\nimport type axe from \"axe-core\";\n\nexport const assistanceNeededMessage =\n \"Developer assistance needed - Please send this exercise and warning info to the LEMS team for review.\";\n\n/**\n * Maps a scan's axe results (one category at a time) to both an issues list\n * and an `instanceId → elements` map, in a single pass.\n */\nexport const mapAxeResults = (\n results: axe.Result[],\n type: \"Warning\" | \"Alert\",\n): {issues: A11yIssue[]; elementMap: Map<string, Element[]>} => {\n const prefix = type === \"Alert\" ? \"violation\" : \"incomplete\";\n const issues: A11yIssue[] = [];\n const elementMap = new Map<string, Element[]>();\n\n results.forEach((result) => {\n const isUserFixable =\n type === \"Alert\" &&\n issuesList[\"axe-core\"][\"user-fixable\"].some(\n (testId) => testId === result.id,\n );\n\n // Derived rather than counter-generated so that re-scanning the same\n // problem yields the same instanceId. axe-core reports at most one\n // result per rule per category, so this is unique within the map.\n const instanceId = `${prefix}-${result.id}`;\n\n issues.push({\n source: \"a11y\",\n id: result.id,\n description: isUserFixable ? \"\" : assistanceNeededMessage,\n instanceId,\n helpUrl: result.helpUrl,\n help: result.help,\n impact: convertAxeImpactToIssueImpact(result.impact),\n message: getIssueMessage(result.nodes),\n });\n elementMap.set(\n instanceId,\n result.nodes\n .map((node) => node.element)\n .filter((element): element is HTMLElement => element != null),\n );\n });\n\n return {issues, elementMap};\n};\n\nexport const getIssueMessage = (nodes: axe.NodeResult[]): string => {\n return [\n // Reduce everything down to the unique set of messages.\n ...new Set(\n nodes.flatMap((node) =>\n [...node.all, ...node.any, ...node.none].map(\n (result) => result.message,\n ),\n ),\n ),\n ].join(\". \");\n};\n\nexport const convertAxeImpactToIssueImpact = (\n impact?: axe.ImpactValue,\n): IssueImpact => {\n switch (impact) {\n case \"critical\":\n return \"high\";\n case \"serious\":\n return \"high\";\n case \"moderate\":\n return \"medium\";\n case \"minor\":\n return \"low\";\n default:\n return \"low\";\n }\n};\n","import {useActionScheduler} from \"@khanacademy/wonder-blocks-timing\";\nimport {UnreachableCaseError} from \"@khanacademy/wonder-stuff-core\";\nimport * as React from \"react\";\n\nimport {mapAxeResults} from \"./a11y/map-axe-results\";\nimport {\n createPreviewA11yReportMessage,\n createPreviewIframeReadyMessage,\n PREVIEW_MESSAGE_SOURCE,\n} from \"./message-types\";\nimport {isParentToIframeMessage} from \"./message-validators\";\n\nimport type {\n IframeToParentMessage,\n ParentToIframeMessage,\n PreviewContent,\n} from \"./message-types\";\n\n/**\n * Sends a message up to the parent editor. The \"/\" target origin keeps preview\n * messages same-origin.\n */\nfunction postToParent(message: IframeToParentMessage): void {\n window.parent.postMessage(message, \"/\");\n}\n\ntype UsePreviewPresenterOptions = {\n /**\n * Ref to the element containing the rendered preview content. Used as\n * the root for axe-core accessibility scans.\n */\n contentContainerRef?: React.RefObject<HTMLElement | null>;\n};\n\ntype UsePreviewPresenterResult = {\n /**\n * The preview content received from the parent, or null if not yet loaded\n */\n content: PreviewContent | null;\n /**\n * Whether the preview should render in mobile mode (from data-mobile attribute)\n */\n isMobile: boolean;\n /**\n * Whether to show the lint gutter (from data-lint-gutter attribute)\n */\n hasLintGutter: boolean;\n /**\n * Function to report the current height of the iframe content to the parent\n */\n reportHeight: (height: number) => void;\n /**\n * Whether axe-core accessibility scanning is enabled\n */\n a11yScanningEnabled: boolean;\n /**\n * Elements to draw \"Show Me\" highlight overlays over, resolved from the\n * latest scan's element map via the instanceIds in a highlight-issues\n * message.\n */\n highlightTargets: Element[];\n};\n\n/**\n * Hook for preview iframe to receive data from parent and send updates back.\n *\n * This hook:\n * - Reads iframe configuration from dataset attributes (id, mobile, lintGutter)\n * - Listens for content data from the parent window via postMessage\n * - Requests initial data on mount\n * - Provides functions to report height and lint warnings back to parent\n *\n * @example\n * ```tsx\n * function PreviewPage() {\n * const { content, isMobile, reportHeight } = usePreviewPresenter();\n *\n * React.useEffect(() => {\n * if (containerRef.current) {\n * reportHeight(containerRef.current.scrollHeight);\n * }\n * }, [content, reportHeight]);\n *\n * if (!content) return <div>Loading...</div>;\n * return <PreviewRenderer\n * ref={containerRef}\n * content={content}\n * isMobile={isMobile}\n * />;\n * }\n * ```\n */\nexport function usePreviewPresenter(\n options: UsePreviewPresenterOptions = {},\n): UsePreviewPresenterResult {\n const {contentContainerRef} = options;\n const [content, setContent] = React.useState<PreviewContent | null>(null);\n const [contentVersion, setContentVersion] = React.useState(0);\n const [a11yScanningEnabled, setA11yScanningEnabled] = React.useState(false);\n const [highlightTargets, setHighlightTargets] = React.useState<Element[]>(\n [],\n );\n const schedule = useActionScheduler();\n\n // eslint-disable-next-line no-restricted-syntax\n const iframe = window.frameElement as HTMLIFrameElement | null;\n if (iframe == null) {\n throw new Error(\"usePreviewPresenter must be used within an iframe\");\n }\n\n // Listen for data from parent\n React.useEffect(() => {\n const handleMessage = (event: MessageEvent<ParentToIframeMessage>) => {\n // Filter by source window - only messages from parent\n if (event.source !== window.parent) {\n return;\n }\n\n const message = event.data;\n\n // Ignore messages that aren't from Perseus preview system\n if (!isParentToIframeMessage(message)) {\n return;\n }\n\n switch (message.type) {\n case \"content-data\":\n setContent(message.content);\n setContentVersion(message.contentVersion);\n break;\n\n case \"iframe-init\":\n setContent(message.content);\n setA11yScanningEnabled(message.a11yScanningEnabled);\n setContentVersion(message.contentVersion);\n break;\n\n case \"set-a11y-scanning-enabled\":\n setA11yScanningEnabled(message.enabled);\n break;\n\n case \"highlight-issues\":\n // Drop this command if it was computed against stale\n // content (its instanceIds belong to a scan whose element\n // map is no longer current).\n if (message.contentVersion !== contentVersionRef.current) {\n break;\n }\n setHighlightTargets(\n message.instanceIds.flatMap(\n (instanceId) =>\n elementMapRef.current.get(instanceId) ?? [],\n ),\n );\n break;\n\n case \"clear-highlights\":\n setHighlightTargets([]);\n break;\n\n default:\n throw new UnreachableCaseError(message);\n }\n };\n\n window.addEventListener(\"message\", handleMessage);\n\n // Tell parent we're ready for data.\n postToParent(createPreviewIframeReadyMessage());\n\n return () => {\n window.removeEventListener(\"message\", handleMessage);\n };\n }, []);\n\n // Tracks the latest a11yScanningEnabled value for the async scan below,\n // which needs to check it after awaiting rather than the value it closed\n // over.\n const a11yScanningEnabledRef = React.useRef(a11yScanningEnabled);\n React.useEffect(() => {\n a11yScanningEnabledRef.current = a11yScanningEnabled;\n }, [a11yScanningEnabled]);\n\n // Latest contentVersion, mirrored into a ref so readers holding an older\n // closure don't act on a stale value.\n const contentVersionRef = React.useRef(contentVersion);\n React.useEffect(() => {\n contentVersionRef.current = contentVersion;\n }, [contentVersion]);\n\n // A new content version means any highlight overlays drawn against the\n // previous version's scan are stale — drop them until a fresh highlight\n // command arrives.\n React.useEffect(() => {\n setHighlightTargets([]);\n }, [contentVersion]);\n\n // In-flight scan promise. Non-null means a scan is already running.\n const scanPromiseRef = React.useRef<Promise<void> | null>(null);\n\n // Set when a scan is asked for while one is already running. axe-core has\n // no way to cancel a run, so the newer request waits for the current run\n // to settle instead of being dropped — otherwise an author who stops\n // editing right then would be left looking at the previous content's\n // issues forever.\n const rescanRequestedRef = React.useRef(false);\n\n // The latest scan's instanceId -> elements map, used to resolve\n // highlight-issues messages to the elements they refer to.\n const elementMapRef = React.useRef<Map<string, Element[]>>(new Map());\n\n // Scans the container's current DOM, so a rescan picks up whatever\n // content has rendered by the time it runs.\n const startScan = React.useCallback(() => {\n const container = contentContainerRef?.current;\n if (!a11yScanningEnabledRef.current || container == null) {\n return;\n }\n\n if (scanPromiseRef.current != null) {\n rescanRequestedRef.current = true;\n return;\n }\n\n // Read before awaiting: the report has to name the version this scan\n // actually looked at. If the content changes mid-scan, these results\n // describe the older DOM, so they must be tagged with the older\n // version for the parent to discard — the rescan below then reports\n // the new one.\n const scannedVersion = contentVersionRef.current;\n\n scanPromiseRef.current = (async () => {\n // Delay-loading axe-core so that we can easily bundle-split it\n // out and avoid loading it if we aren't using it.\n const axe = (await import(\"axe-core\")).default;\n axe.configure({reporter: \"v2\"});\n const results = await axe.run(\n {\n include: container,\n exclude: [['[target=\"lint-help-window\"]']],\n },\n // elementRef populates node.element on each result, which\n // mapAxeResults needs to resolve \"Show Me\" highlighting.\n {elementRef: true},\n );\n\n // Don't send results if scanning was turned off mid-scan.\n if (!a11yScanningEnabledRef.current) {\n return;\n }\n\n const {issues: violations, elementMap: violationMap} =\n mapAxeResults(results.violations, \"Alert\");\n const {issues: incompletes, elementMap: incompleteMap} =\n mapAxeResults(results.incomplete, \"Warning\");\n\n elementMapRef.current = new Map([\n ...violationMap,\n ...incompleteMap,\n ]);\n\n postToParent(\n createPreviewA11yReportMessage(\n violations,\n incompletes,\n scannedVersion,\n ),\n );\n })().finally(() => {\n scanPromiseRef.current = null;\n\n if (rescanRequestedRef.current) {\n rescanRequestedRef.current = false;\n startScan();\n }\n });\n }, [contentContainerRef]);\n\n // Run an axe-core scan (debounced) whenever content changes and\n // scanning is enabled.\n React.useEffect(() => {\n const container = contentContainerRef?.current;\n if (!a11yScanningEnabled || content == null || container == null) {\n return;\n }\n\n const scheduledScan = schedule.timeout(startScan, 1500);\n\n return () => scheduledScan.clear();\n }, [\n content,\n contentVersion,\n a11yScanningEnabled,\n contentContainerRef,\n schedule,\n startScan,\n ]);\n\n // Memoized callback to report height\n const reportHeight = React.useCallback((height: number) => {\n if (window.parent == null) {\n return;\n }\n\n postToParent({\n source: PREVIEW_MESSAGE_SOURCE,\n type: \"height-update\",\n height,\n });\n }, []);\n\n return {\n content,\n isMobile: iframe.dataset.mobile === \"true\",\n hasLintGutter: iframe.dataset.lintGutter === \"true\",\n reportHeight,\n a11yScanningEnabled,\n highlightTargets,\n };\n}\n","import * as React from \"react\";\n\ntype Props = {\n targets: ReadonlyArray<Element>;\n container: HTMLElement | null;\n};\n\ntype Rect = Pick<DOMRect, \"top\" | \"left\" | \"width\" | \"height\">;\n\n/**\n * Computes an overlay rect placed over a target, relative to its container.\n */\nexport function getOverlayRect(\n targetRect: Rect,\n containerRect: Pick<DOMRect, \"top\" | \"left\">,\n): Rect {\n return {\n top: targetRect.top - containerRect.top - 4,\n left: targetRect.left - containerRect.left - 4,\n width: targetRect.width + 8,\n height: targetRect.height + 8,\n };\n}\n\n/**\n * Renders outline overlays over the given target elements.\n *\n * Requirements on `container`:\n * - Must be `position: relative` (or otherwise positioned) — overlays are\n * `position: absolute` and measured against its box.\n * - Must be the actual DOM ancestor that scrolls `targets` (not just any\n * positioned ancestor) — that's what lets the overlays scroll natively\n * with the content, with no scroll listener needed.\n */\nexport function A11yOverlays({targets, container}: Props) {\n if (container == null) {\n return null;\n }\n const containerRect = container.getBoundingClientRect();\n return (\n <>\n {targets.map((target, index) => (\n <div\n key={index}\n data-testid=\"a11y-overlay\"\n style={{\n position: \"absolute\",\n border: \"2px solid red\",\n borderRadius: \"4px\",\n ...getOverlayRect(\n target.getBoundingClientRect(),\n containerRect,\n ),\n }}\n />\n ))}\n </>\n );\n}\n","import * as React from \"react\";\n\nconst textWidthCache: Record<string, number> = {};\nfunction getTextWidth(text: string): number {\n if (!(text in textWidthCache)) {\n // Hacky way to guess the width of an input box\n const span = document.createElement(\"span\");\n span.textContent = text;\n document.body.appendChild(span);\n textWidthCache[text] = span.getBoundingClientRect().width + 5;\n span.remove();\n }\n return textWidthCache[text];\n}\n\ntype Props = {\n options: string[];\n layout: \"horizontal\" | \"vertical\";\n onChange: (options: string[]) => void;\n};\n\ntype State = {\n items: string[];\n};\n\nclass TextListEditor extends React.Component<Props, State> {\n static defaultProps: Pick<Props, \"options\" | \"layout\"> = {\n options: [],\n layout: \"horizontal\",\n };\n\n state: State = {\n items: this.props.options.concat(\"\"),\n };\n\n // The rendered inputs, keyed by their index in `state.items`, so that\n // keyboard handling can move focus between them.\n inputRefs: Map<number, HTMLInputElement> = new Map();\n\n UNSAFE_componentWillReceiveProps(nextProps: Props) {\n this.setState({\n items: nextProps.options.concat(\"\"),\n });\n }\n\n onChange = (index: number, event: React.ChangeEvent<HTMLInputElement>) => {\n let items = [...this.state.items];\n items[index] = event.target.value;\n\n if (index === items.length - 1) {\n items = items.concat(\"\");\n }\n\n this.setState({items: items});\n this.props.onChange(items.filter(Boolean));\n };\n\n onKeyDown = (index: number, event: React.KeyboardEvent) => {\n // Backspace deletes an empty input...\n if (event.key === \"Backspace\" && this.state.items[index] === \"\") {\n event.preventDefault();\n\n const items = [...this.state.items];\n const focusIndex = index === 0 ? 0 : index - 1;\n\n if (\n index === items.length - 1 &&\n (index === 0 || items[focusIndex] !== \"\")\n ) {\n // ...except for the last one, iff it is the only empty\n // input at the end.\n this.inputRefs.get(focusIndex)?.focus();\n } else {\n items.splice(index, 1);\n this.setState({items: items}, () => {\n this.inputRefs.get(focusIndex)?.focus();\n });\n }\n\n // Deleting the last character in the second-to-last input\n // removes it\n } else if (\n event.key === \"Backspace\" &&\n this.state.items[index].length === 1 &&\n index === this.state.items.length - 2\n ) {\n event.preventDefault();\n\n const items = [...this.state.items];\n items.splice(index, 1);\n this.setState({items: items});\n this.props.onChange(items.filter(Boolean));\n\n // Enter adds an option below the current one...\n } else if (event.key === \"Enter\") {\n event.preventDefault();\n\n const items = [...this.state.items];\n const focusIndex = index + 1;\n\n if (index === items.length - 2) {\n // ...unless the empty input is just below.\n this.inputRefs.get(focusIndex)?.focus();\n } else {\n items.splice(focusIndex, 0, \"\");\n this.setState({items: items}, () => {\n this.inputRefs.get(focusIndex)?.focus();\n });\n }\n }\n };\n\n render(): React.ReactNode {\n const className = [\n \"perseus-text-list-editor\",\n \"perseus-clearfix\",\n \"layout-\" + this.props.layout,\n ].join(\" \");\n\n const inputs = this.state.items.map((item, i) => {\n return (\n <li key={i}>\n <input\n ref={(node) => {\n if (node) {\n this.inputRefs.set(i, node);\n } else {\n this.inputRefs.delete(i);\n }\n }}\n type=\"text\"\n value={item}\n onChange={(event) => this.onChange(i, event)}\n onKeyDown={(event) => this.onKeyDown(i, event)}\n style={{width: getTextWidth(item)}}\n />\n </li>\n );\n });\n\n return <ul className={className}>{inputs}</ul>;\n }\n}\n\nexport default TextListEditor;\n","import {excludeDenylistKeys} from \"@khanacademy/perseus-core\";\n\n/**\n * @deprecated do not use EditorJsonify\n * See LEMS-4108 for more details\n */\nconst EditorJsonify = {\n serialize: function (): any {\n // Omit props that get passed to all widgets\n // @ts-expect-error - TS2339 - Property 'props' does not exist on type '{ readonly serialize: () => any; }'.\n return excludeDenylistKeys(this.props);\n },\n} as const;\n\nexport default EditorJsonify;\n","import {Categorizer as CategorizerWidget} from \"@khanacademy/perseus\";\nimport {categorizerLogic} from \"@khanacademy/perseus-core\";\nimport {Checkbox} from \"@khanacademy/wonder-blocks-form\";\nimport * as React from \"react\";\nimport _ from \"underscore\";\n\nimport TextListEditor from \"../../components/text-list-editor\";\nimport EditorJsonify from \"../../mixins/editor-jsonify\";\n\nimport type {APIOptionsWithDefaults} from \"@khanacademy/perseus\";\nimport type {PerseusCategorizerWidgetOptions} from \"@khanacademy/perseus-core\";\nimport type {PropsFor} from \"@khanacademy/wonder-blocks-core\";\n\nconst Categorizer = CategorizerWidget.widget;\n\ninterface Props extends PerseusCategorizerWidgetOptions {\n apiOptions?: APIOptionsWithDefaults;\n onChange: (options: PerseusCategorizerWidgetOptions) => void;\n}\n\n// JSDoc will be shown in Storybook widget editor description\n/**\n * An editor for adding a categorizer widget that allows users to sort items into categories.\n */\nclass CategorizerEditor extends React.Component<Props> {\n static defaultProps: PerseusCategorizerWidgetOptions =\n categorizerLogic.defaultWidgetOptions;\n\n handleChange(changed: Partial<PerseusCategorizerWidgetOptions>) {\n this.props.onChange({\n items: this.props.items,\n categories: this.props.categories,\n randomizeItems: this.props.randomizeItems,\n values: this.props.values,\n ...changed,\n });\n }\n\n serialize: () => any = () => {\n return EditorJsonify.serialize.call(this);\n };\n\n render(): React.ReactNode {\n const categorizerProps: Partial<PropsFor<typeof Categorizer>> = {\n options: {\n items: this.props.items,\n categories: this.props.categories,\n // The preview keeps the authored item order so the editor's\n // item list lines up with the rows of the preview table.\n randomizeItems: false,\n values: [],\n },\n userInput: {values: this.props.values},\n handleUserInput: (userInput) => {\n this.handleChange({\n values: userInput.values.map((value) => value ?? 0),\n });\n },\n apiOptions: this.props.apiOptions,\n trackInteraction: function () {},\n };\n\n return (\n <div>\n <div className=\"perseus-widget-row\">\n <Checkbox\n label=\"Randomize item order\"\n checked={this.props.randomizeItems}\n onChange={(value) => {\n this.handleChange({randomizeItems: value});\n }}\n />\n </div>\n Categories:\n <TextListEditor\n options={this.props.categories}\n onChange={(cat) => this.handleChange({categories: cat})}\n layout=\"horizontal\"\n />\n Items:\n <TextListEditor\n options={this.props.items}\n onChange={(items) => {\n this.handleChange({\n items: items,\n // NOTE(eater): This truncates props.values so there\n // are never more correct answers than items,\n // ensuring the widget is possible to answer\n // correctly. It doesn't necessarly keep each\n // answer with its corresponding item if an item\n // is deleted from the middle. Inconvenient, but\n // it's at least possible for content creators to\n // catch and fix.\n values: _.first(this.props.values, items.length),\n });\n }}\n layout=\"vertical\"\n />\n {/* There are a bunch of props that renderer.jsx passes to each widget\n via widget-container.jsx that we aren't passing to Categorizer here.\n See perseus-all-package/types.js#WidgetProps for details. */}\n <Categorizer\n // eslint-disable-next-line no-restricted-syntax\n {...(categorizerProps as PropsFor<typeof Categorizer>)}\n />\n </div>\n );\n }\n}\n\nexport default CategorizerEditor;\n","import * as React from \"react\";\n\nimport type {CSSProperties} from \"aphrodite\";\n\ntype Props = {\n value: string;\n onChange: (arg1: string) => void;\n className?: string;\n style?: CSSProperties;\n};\n\ntype State = {\n value: string;\n};\n\n/* You know when you want to propagate input to a parent...\n * but then that parent does something with the input...\n * then changing the props of the input...\n * on every keystroke...\n * so if some input is invalid or incomplete...\n * the input gets reset or otherwise effed...\n *\n * This is the solution.\n *\n * Enough melodrama. Its an input that only sends changes\n * to its parent on blur.\n */\n// TODO(benchristel): this is not an ideal user experience, because changes you\n// make to the input aren't reflected anywhere else until you blur the input.\n// This means you can't preview intermediate changes without moving focus away\n// from the thing you want to change! Instead, we should take the approach used\n// in ScrolllessNumberTextField: take the input's value from state while it's\n// focused, and from props while it's not focused, and call onChange on every\n// input event.\nclass BlurInput extends React.Component<Props, State> {\n input = React.createRef<HTMLInputElement>();\n\n constructor(props: Props) {\n super(props);\n this.state = {value: this.props.value};\n }\n\n UNSAFE_componentWillReceiveProps(nextProps: Props) {\n this.setState({value: nextProps.value});\n }\n\n handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n this.setState({value: e.target.value});\n };\n\n handleBlur = (e: React.FocusEvent<HTMLInputElement>) => {\n this.props.onChange(e.target.value);\n };\n\n focus() {\n this.input.current?.focus();\n }\n\n render(): React.ReactNode {\n return (\n <input\n ref={this.input}\n className={this.props.className}\n style={this.props.style}\n type=\"text\"\n value={this.state.value}\n onChange={this.handleChange}\n onBlur={this.handleBlur}\n />\n );\n }\n}\n\nexport default BlurInput;\n","import * as React from \"react\";\n\nimport BlurInput from \"./blur-input\";\n\ninterface Pair {\n name: string;\n value: string;\n}\n\ninterface Props {\n pairs: Pair[];\n onChange: (pairs: Pair[]) => void;\n}\n\nexport class PairsEditor extends React.Component<Props> {\n handlePairChange = (pairIndex: number, pair: Pair) => {\n const pairsCopy = [...this.props.pairs];\n pairsCopy[pairIndex] = pair;\n\n // If the last pair has both name and value set, add a new one.\n const lastPair = pairsCopy[pairsCopy.length - 1];\n if (lastPair.name && lastPair.value) {\n pairsCopy.push({name: \"\", value: \"\"});\n }\n this.props.onChange(pairsCopy);\n };\n\n render(): React.ReactNode {\n return (\n <div>\n {this.props.pairs.map((pair, i) => (\n <PairEditor\n key={i}\n pair={pair}\n onChange={(pair) => this.handlePairChange(i, pair)}\n />\n ))}\n </div>\n );\n }\n}\n\ninterface PairEditorProps {\n pair: Pair;\n onChange: (pair: Pair) => void;\n}\n\nclass PairEditor extends React.Component<PairEditorProps> {\n render(): React.ReactNode {\n const {onChange} = this.props;\n const {name, value} = this.props.pair;\n\n return (\n <fieldset className=\"pair-editor\">\n <label>\n Name:{\" \"}\n <BlurInput\n value={name}\n onChange={(newName) => onChange({name: newName, value})}\n />\n </label>\n <label>\n {\" \"}\n Value:{\" \"}\n <BlurInput\n value={value}\n onChange={(newVal) => onChange({name, value: newVal})}\n />\n </label>\n </fieldset>\n );\n }\n}\n","/* eslint-disable @typescript-eslint/no-invalid-this */\n/**\n * Changeable\n *\n * Adds a this.change() function to a component\n *\n * This.change takes prop changes as parameters, and calls\n * this.props.onChange with the modified props.\n */\n\nimport {\n Errors,\n excludeDenylistKeys,\n PerseusError,\n} from \"@khanacademy/perseus-core\";\nimport _ from \"underscore\";\n\n// Used to type the `change` method on all widgets.\nexport type ChangeFn = (\n newPropsOrSinglePropName:\n | string\n | {\n [key: string]: any;\n },\n propValue?: any,\n callback?: () => unknown,\n) => any;\n\nconst USAGE =\n \"Usage:\\n\" +\n \" this.change({propName: 5}, callback);\\n\" +\n ' this.change(\"propName\", 5, callback);\\n' +\n ' this.change(\"propName\")';\n\n/**\n * Primary helper function for this.change()\n *\n * Takes the parameters in a consistent style, once this.change() has\n * figured out which way it was called.\n */\nconst _changeMultiple = function (\n component: any,\n newProps:\n | string\n | Record<any, any>\n | {\n [key: string]: any;\n },\n callback,\n) {\n // Omit \"default\" props:\n // ref and key come from react, and don't actually represent\n // the conceptual state of our component\n // onChange comes from our parent to allow this modification,\n // and doesn't conceptually represent the state of our component\n const currProps = excludeDenylistKeys(component.props);\n const nextProps = _.extend(currProps, newProps);\n component.props.onChange(nextProps, callback);\n};\n\n/**\n * Helper function for changing a single prop\n */\nconst _changeSingle = function (\n component: any,\n propName: string,\n value: any,\n callback,\n) {\n if (value === undefined) {\n // If called with a single prop name, return a lambda to change\n // a single prop on the current object\n return _.partial(_changeSingle, component, propName);\n }\n // If called with two values, change a single prop of the\n // current object\n const newProps: Record<string, any> = {};\n newProps[propName] = value;\n _changeMultiple(component, newProps, callback);\n};\n\n/**\n * this.change()\n *\n * Can be called as follows:\n * this.change(newProps, callback);\n *\n * this.change(propName, propValue, callback);\n *\n * this.change(propName) -> returns a lambda that takes a prop value to\n * set and a callback to call after having set that value.\n *\n * TODO(LEMS-3245) remove Changeable\n *\n * @deprecated\n */\nexport const deprecatedChangeableChange: ChangeFn = function (\n newPropsOrSinglePropName,\n propValue,\n callback,\n) {\n if (_.isObject(newPropsOrSinglePropName) && callback === undefined) {\n // Called with an object of multiple props to change\n callback = propValue;\n return _changeMultiple(\n // @ts-expect-error - TS2683 - 'this' implicitly has type 'any' because it does not have a type annotation.\n this,\n newPropsOrSinglePropName, // object newProps\n callback,\n );\n }\n if (typeof newPropsOrSinglePropName === \"string\") {\n // Called with a string propName of a single prop to change\n return _changeSingle(\n // @ts-expect-error - TS2683 - 'this' implicitly has type 'any' because it does not have a type annotation.\n this,\n newPropsOrSinglePropName, // string propName\n propValue,\n callback,\n );\n }\n throw new PerseusError(\n \"Invalid types sent to this.change(): \" +\n // eslint-disable-next-line prefer-rest-params\n _.toArray(arguments).join() +\n \"\\n\" +\n USAGE,\n Errors.Internal,\n );\n};\n\n/**\n * TODO(LEMS-3245) remove Changeable\n *\n * @deprecated\n */\nexport type ChangeableProps = {\n onChange: (\n values: {\n [key: string]: any;\n },\n callback?: (() => unknown) | null | undefined,\n silent?: boolean,\n ) => unknown;\n};\n","/**\n * This editor is for embedding Khan Academy CS programs.\n */\n\nimport {Dependencies, Log} from \"@khanacademy/perseus\";\nimport {Errors} from \"@khanacademy/perseus-core\";\nimport {Checkbox} from \"@khanacademy/wonder-blocks-form\";\nimport * as React from \"react\";\n\nimport BlurInput from \"../../components/blur-input\";\nimport InfoTip from \"../../components/info-tip\";\nimport {PairsEditor} from \"../../components/pairs-editor\";\nimport {deprecatedChangeableChange} from \"../../mixins/changeable\";\nimport EditorJsonify from \"../../mixins/editor-jsonify\";\n\nimport type {PerseusCSProgramWidgetOptions} from \"@khanacademy/perseus-core\";\n\nconst DEFAULT_HEIGHT = 400;\n\nconst KA_PROGRAM_URL = /khanacademy\\.org\\/computer-programming\\/[^/]+\\/(\\d+)/;\n\n/**\n * Given a program URL from the site, extract its program ID.\n * If the input does not match the known URL patterns, it is assumed to be\n * a program ID.\n */\nfunction isolateProgramID(programUrl: string) {\n const match = KA_PROGRAM_URL.exec(programUrl);\n if (match) {\n programUrl = match[1];\n }\n\n return programUrl;\n}\n\ninterface CSProgramEditorProps extends PerseusCSProgramWidgetOptions {\n onChange: (options: PerseusCSProgramWidgetOptions) => void;\n}\n\n/**\n * This is the main editor for this widget, to specify all the options.\n */\nclass CSProgramEditor extends React.Component<CSProgramEditorProps> {\n change: (...args: ReadonlyArray<unknown>) => any = (...args) => {\n // @ts-expect-error - TS2345 - Argument of type 'readonly unknown[]' is not assignable to parameter of type 'any[]'.\n return deprecatedChangeableChange.apply(this, args);\n };\n\n handleChange(changed: Partial<PerseusCSProgramWidgetOptions>) {\n this.props.onChange({\n programID: this.props.programID,\n programType: this.props.programType,\n settings: this.props.settings,\n showEditor: this.props.showEditor,\n showButtons: this.props.showButtons,\n height: this.props.height,\n ...changed,\n });\n }\n\n _handleProgramIDChange: (arg1: string) => void = (programID) => {\n programID = isolateProgramID(programID);\n const {isDevServer, InitialRequestUrl} = Dependencies.getDependencies();\n\n const host = isDevServer\n ? InitialRequestUrl.origin\n : \"https://www.khanacademy.org\";\n const baseUrl = `${host}/api/internal/scratchpads/${programID}`;\n\n const fetchProgramInfo = async () => {\n const response = await fetch(baseUrl);\n if (!response.ok) {\n throw new Error(\n `Request for scratchpad info failed with status ${response.status} ${response.statusText}`,\n );\n }\n return response.json();\n };\n\n // We pass both callbacks to a single `then` (rather than chaining a\n // `catch`) so that an error thrown while applying the new options\n // doesn't also trigger the fallback-to-defaults path below.\n fetchProgramInfo().then(\n (programInfo) => {\n const programType = programInfo.userAuthoredContentType;\n this.handleChange({\n height: programInfo.height,\n programID: programID,\n programType: programType,\n });\n },\n (error) => {\n Log.error(\n \"Error retrieving scratchpad info for program ID \",\n Errors.TransientService,\n {\n cause: error,\n loggedMetadata: {\n programID,\n },\n },\n );\n this.handleChange({\n height: DEFAULT_HEIGHT,\n programID: programID,\n programType: null,\n });\n },\n );\n };\n\n serialize: () => any = () => {\n return EditorJsonify.serialize.call(this);\n };\n\n render(): React.ReactNode {\n return (\n <div>\n <label>\n Url or Program ID:{\" \"}\n <BlurInput\n value={this.props.programID}\n onChange={this._handleProgramIDChange}\n />\n </label>\n <br />\n <Checkbox\n label=\"Show Editor\"\n checked={this.props.showEditor}\n onChange={(value) => {\n this.handleChange({showEditor: value});\n }}\n />\n <InfoTip>\n If you show the editor, you should use the\n &quot;full-width&quot; alignment to make room for the width\n of the editor.\n </InfoTip>\n <br />\n <Checkbox\n label=\"Show Buttons\"\n checked={this.props.showButtons}\n onChange={(value) => {\n this.handleChange({showButtons: value});\n }}\n />\n <br />\n {/* eslint-disable-next-line jsx-a11y/label-has-associated-control -- TODO(LEMS-2871): Address a11y error */}\n <label>\n Settings:\n <PairsEditor\n pairs={this.props.settings}\n onChange={(settings) => this.handleChange({settings})}\n />\n <InfoTip>\n Settings that you add here are available to the program\n as an object returned by <code>Program.settings()</code>\n </InfoTip>\n </label>\n </div>\n );\n }\n}\n\nexport default CSProgramEditor;\n","import {components} from \"@khanacademy/perseus\";\nimport {definitionLogic} from \"@khanacademy/perseus-core\";\nimport * as React from \"react\";\nimport _ from \"underscore\";\n\nimport Editor from \"../../editor\";\nimport EditorJsonify from \"../../mixins/editor-jsonify\";\n\nimport type {InitializeWidgetOptionsParams} from \"../../editor\";\nimport type {APIOptionsWithDefaults} from \"@khanacademy/perseus\";\nimport type {PerseusDefinitionWidgetOptions} from \"@khanacademy/perseus-core\";\n\nconst {TextInput} = components;\n\ninterface Props extends PerseusDefinitionWidgetOptions {\n apiOptions?: APIOptionsWithDefaults;\n onChange: (options: PerseusDefinitionWidgetOptions) => void;\n}\n\n// JSDoc will be shown in Storybook widget editor description\n/**\n * An editor for adding an interactive definition widget that allows content\n * editors to embed clickable terms with expandable explanations within content.\n */\nclass DefinitionEditor extends React.Component<Props> {\n static defaultProps: PerseusDefinitionWidgetOptions =\n definitionLogic.defaultWidgetOptions;\n\n static initializeWidgetOptions(\n params: InitializeWidgetOptionsParams,\n ): PerseusDefinitionWidgetOptions {\n const defaultWidgetOptions = {\n ...definitionLogic.defaultWidgetOptions,\n };\n\n if (params.selectedText) {\n defaultWidgetOptions.togglePrompt = params.selectedText;\n }\n\n return defaultWidgetOptions;\n }\n\n handleChange(changed: Partial<PerseusDefinitionWidgetOptions>) {\n this.props.onChange({\n togglePrompt: this.props.togglePrompt,\n definition: this.props.definition,\n ...changed,\n });\n }\n\n serialize: () => any = () => {\n return EditorJsonify.serialize.call(this);\n };\n\n render(): React.ReactNode {\n return (\n <div className=\"perseus-widget-definition-editor\">\n <a\n href=\"https://docs.google.com/document/d/1udaPef4imOfTMhmLDlWq4SM0mxL0r3YHFZE-5J1uGfo\"\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n Definition style guide\n </a>\n <div className=\"perseus-widget-row\">\n <label>\n Word to be defined:{\" \"}\n <TextInput\n value={this.props.togglePrompt}\n onChange={(togglePrompt) =>\n this.handleChange({togglePrompt})\n }\n placeholder=\"define me\"\n />\n </label>\n </div>\n <div className=\"perseus-widget-row\">\n <Editor\n apiOptions={this.props.apiOptions}\n content={this.props.definition}\n widgetEnabled={false}\n placeholder=\"definition goes here\"\n onChange={(props) => {\n const newProps: Record<string, any> = {};\n // TODO(LEMS-4610): remove this _.has check once\n // the editor passes the entire Renderer to\n // onChange.\n if (_.has(props, \"content\")) {\n newProps.definition = props.content;\n }\n this.handleChange(newProps);\n }}\n />\n </div>\n </div>\n );\n }\n}\n\nexport default DefinitionEditor;\n","import * as React from \"react\";\n\nimport EditorJsonify from \"../../mixins/editor-jsonify\";\n\nclass DeprecatedStandinEditor extends React.Component {\n serialize(): any {\n return EditorJsonify.serialize.call(this);\n }\n\n render(): React.ReactNode {\n return (\n <div>\n <p>This widget has been deprecated and removed</p>\n <p>\n Learners will see a message and they will not be graded on\n this part. Please replace this widget with a supported one.\n </p>\n </div>\n );\n }\n}\n\nexport default DeprecatedStandinEditor;\n","import {\n dropdownLogic,\n type PerseusDropdownWidgetOptions,\n} from \"@khanacademy/perseus-core\";\nimport Button from \"@khanacademy/wonder-blocks-button\";\nimport {TextField} from \"@khanacademy/wonder-blocks-form\";\nimport IconButton from \"@khanacademy/wonder-blocks-icon-button\";\nimport {semanticColor} from \"@khanacademy/wonder-blocks-tokens\";\nimport {BodyText} from \"@khanacademy/wonder-blocks-typography\";\nimport plusIcon from \"@phosphor-icons/core/bold/plus-bold.svg\";\nimport trashIcon from \"@phosphor-icons/core/bold/trash-bold.svg\";\nimport PropTypes from \"prop-types\";\nimport * as React from \"react\";\nimport _ from \"underscore\";\n\nimport InfoTip from \"../../components/info-tip\";\nimport EditorJsonify from \"../../mixins/editor-jsonify\";\n\nimport type {APIOptions} from \"@khanacademy/perseus\";\n\ninterface Props extends PerseusDropdownWidgetOptions {\n onChange: (options: PerseusDropdownWidgetOptions) => void;\n apiOptions?: APIOptions;\n}\n\n// JSDoc will be shown in Storybook widget editor description\n/**\n * An editor for adding a dropdown widget that allows users to select an option from a predefined list.\n */\nclass DropdownEditor extends React.Component<Props> {\n static propTypes = {\n choices: PropTypes.arrayOf(\n PropTypes.shape({\n content: PropTypes.string,\n correct: PropTypes.bool,\n }),\n ),\n placeholder: PropTypes.string,\n };\n\n static defaultProps: PerseusDropdownWidgetOptions =\n dropdownLogic.defaultWidgetOptions;\n\n handleChange(changed: Partial<PerseusDropdownWidgetOptions>) {\n this.props.onChange({\n choices: this.props.choices,\n placeholder: this.props.placeholder,\n visibleLabel: this.props.visibleLabel,\n ariaLabel: this.props.ariaLabel,\n ...changed,\n });\n }\n\n onCorrectChange(choiceIndex: number) {\n const choices = this.props.choices.map(function (choice, i) {\n return _.extend({}, choice, {\n correct: i === choiceIndex,\n });\n });\n this.handleChange({choices: choices});\n }\n\n onContentChange(choiceIndex: number, newContent: string) {\n const choices = this.props.choices.slice();\n const choice = _.clone(choices[choiceIndex]);\n choice.content = newContent;\n choices[choiceIndex] = choice;\n this.handleChange({choices: choices});\n }\n\n addChoice: () => void = () => {\n const choices = this.props.choices;\n const blankChoice = {content: \"\", correct: false} as const;\n this.handleChange({choices: choices.concat([blankChoice])});\n };\n\n removeChoice: (arg1: number) => void = (choiceIndex) => {\n const choices = [...this.props.choices];\n choices.splice(choiceIndex, 1);\n this.handleChange({choices});\n };\n\n serialize: () => any = () => {\n return EditorJsonify.serialize.call(this);\n };\n\n render(): React.ReactNode {\n const dropdownGroupName = _.uniqueId(\"perseus_dropdown_\");\n const editingDisabled = this.props.apiOptions?.editingDisabled ?? false;\n return (\n <div className=\"perseus-widget-dropdown\">\n <div className=\"dropdown-info\">\n <BodyText size=\"medium\" weight=\"bold\" tag=\"span\">\n Dropdown\n </BodyText>\n <InfoTip>\n <p>\n The drop down is useful for making inequalities in a\n custom format. We normally use the symbols {\"<\"},{\" \"}\n {\">\"}, ≤, ≥ (in that order) which you can copy into\n the choices. When possible, use the &quot;multiple\n choice&quot; answer type instead.\n </p>\n </InfoTip>\n </div>\n <div className=\"dropdown-field\">\n <BodyText tag=\"label\">\n Visible label\n <TextField\n value={this.props.visibleLabel ?? \"\"}\n onChange={(visibleLabel) =>\n this.handleChange({visibleLabel})\n }\n />\n </BodyText>\n <InfoTip>\n <p>Optional visible label</p>\n </InfoTip>\n </div>\n <div className=\"dropdown-field\">\n <BodyText tag=\"label\">\n Aria label\n <TextField\n value={this.props.ariaLabel ?? \"\"}\n onChange={(ariaLabel) =>\n this.handleChange({ariaLabel})\n }\n type={\"text\"}\n />\n </BodyText>\n <InfoTip>\n <p>\n Label text that&apos;s read by screen readers.\n Highly recommend adding a label here to ensure your\n exercise is accessible. For more information on\n writing accessible labels, please see{\" \"}\n <a\n href=\"https://www.w3.org/WAI/tips/designing/#ensure-that-form-elements-include-clearly-associated-labels\"\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n this article.\n </a>{\" \"}\n If left blank, the value will default to\n &quot;Select an answer&quot;.\n </p>\n </InfoTip>\n </div>\n <div className=\"dropdown-field\">\n <BodyText tag=\"label\">\n Placeholder\n <TextField\n value={this.props.placeholder}\n onChange={(placeholder) =>\n this.handleChange({placeholder})\n }\n placeholder={\"Placeholder value\"}\n />\n </BodyText>\n <InfoTip>\n <p>\n This value will appear as the drop down default. It\n should give the user some indication of the values\n available in the drop down itself, e.g.,\n Yes/No/Maybe.\n </p>\n </InfoTip>\n </div>\n <div className=\"clearfix\" />\n <BodyText>Choices</BodyText>\n <ul className=\"dropdown-choices\">\n {this.props.choices.map((choice, i) => {\n const choiceBackgroundColor = choice.correct\n ? semanticColor.core.background.success.subtle\n : semanticColor.core.background.critical.subtle;\n\n return (\n <li key={\"\" + i}>\n <div className=\"dropdown-choice\">\n <input\n type=\"radio\"\n name={dropdownGroupName}\n checked={choice.correct}\n onChange={() => this.onCorrectChange(i)}\n />\n\n <TextField\n value={choice.content}\n aria-label={`Choice ${i + 1} content`}\n disabled={editingDisabled}\n style={{\n backgroundColor:\n choiceBackgroundColor,\n }}\n onChange={(newContent) =>\n this.onContentChange(i, newContent)\n }\n />\n <IconButton\n icon={trashIcon}\n aria-label=\"Delete choice\"\n disabled={editingDisabled}\n kind=\"tertiary\"\n size=\"small\"\n onClick={() => this.removeChoice(i)}\n />\n </div>\n </li>\n );\n }, this)}\n </ul>\n\n <div className=\"add-choice-container\">\n <Button\n kind=\"secondary\"\n disabled={editingDisabled}\n onClick={this.addChoice}\n startIcon={plusIcon}\n >\n Add a choice\n </Button>\n </div>\n </div>\n );\n }\n}\n\nexport default DropdownEditor;\n","import {components} from \"@khanacademy/perseus\";\nimport {explanationLogic} from \"@khanacademy/perseus-core\";\nimport * as React from \"react\";\nimport _ from \"underscore\";\n\nimport Editor from \"../../editor\";\nimport EditorJsonify from \"../../mixins/editor-jsonify\";\n\nimport type {APIOptionsWithDefaults} from \"@khanacademy/perseus\";\nimport type {PerseusExplanationWidgetOptions} from \"@khanacademy/perseus-core\";\n\nconst {TextInput} = components;\n\ninterface Props extends PerseusExplanationWidgetOptions {\n apiOptions?: APIOptionsWithDefaults;\n onChange: (options: PerseusExplanationWidgetOptions) => void;\n}\n\n// JSDoc will be shown in Storybook widget editor description\n/**\n * An editor for adding an explanation widget that provides supplementary information to users.\n */\nclass ExplanationEditor extends React.Component<Props> {\n static defaultProps: PerseusExplanationWidgetOptions =\n explanationLogic.defaultWidgetOptions;\n\n handleChange(changes: Partial<PerseusExplanationWidgetOptions>) {\n this.props.onChange({\n showPrompt: this.props.showPrompt,\n hidePrompt: this.props.hidePrompt,\n explanation: this.props.explanation,\n widgets: this.props.widgets,\n ...changes,\n });\n }\n\n serialize: () => any = () => {\n return EditorJsonify.serialize.call(this);\n };\n\n render(): React.ReactNode {\n return (\n <div className=\"perseus-widget-explanation-editor\">\n <div className=\"perseus-widget-row\">\n <label>\n Prompt to show explanation:{\" \"}\n <TextInput\n value={this.props.showPrompt}\n onChange={(showPrompt) =>\n this.handleChange({showPrompt})\n }\n />\n </label>\n </div>\n <div className=\"perseus-widget-row\">\n <label>\n Prompt to hide explanation:{\" \"}\n <TextInput\n value={this.props.hidePrompt}\n onChange={(hidePrompt) =>\n this.handleChange({hidePrompt})\n }\n />\n </label>\n </div>\n <div className=\"perseus-widget-row\">\n <Editor\n apiOptions={this.props.apiOptions}\n content={this.props.explanation}\n widgets={this.props.widgets}\n widgetEnabled={true}\n onChange={(props) => {\n const newProps: Record<string, any> = {};\n if (_.has(props, \"content\")) {\n newProps.explanation = props.content;\n }\n if (_.has(props, \"widgets\")) {\n newProps.widgets = props.widgets;\n }\n this.handleChange(newProps);\n }}\n />\n </div>\n </div>\n );\n }\n}\n\nexport default ExplanationEditor;\n","import * as KAS from \"@khanacademy/kas\";\nimport {components, Expression} from \"@khanacademy/perseus\";\nimport {\n PerseusExpressionAnswerFormConsidered,\n deriveExtraKeys,\n expressionLogic,\n} from \"@khanacademy/perseus-core\";\nimport Button from \"@khanacademy/wonder-blocks-button\";\nimport {View} from \"@khanacademy/wonder-blocks-core\";\nimport {Checkbox, LabeledTextField} from \"@khanacademy/wonder-blocks-form\";\nimport {semanticColor} from \"@khanacademy/wonder-blocks-tokens\";\nimport {Heading, BodyText} from \"@khanacademy/wonder-blocks-typography\";\nimport {isTruthy} from \"@khanacademy/wonder-stuff-core\";\nimport {StyleSheet} from \"aphrodite\";\nimport * as React from \"react\";\nimport _ from \"underscore\";\n\nimport InfoTip from \"../../components/info-tip\";\n\nimport styles from \"./expression-editor.module.css\";\n\nimport type {APIOptions} from \"@khanacademy/perseus\";\nimport type {\n PerseusExpressionWidgetOptions,\n LegacyButtonSets,\n PerseusExpressionAnswerForm,\n PerseusExpressionUserInput,\n} from \"@khanacademy/perseus-core\";\nimport type {CSSProperties} from \"aphrodite\";\n\nconst {ButtonGroup} = components;\n\n// TODO(LEMS-4612): remove `Omit<..., \"buttonsVisible\">` and use\n// PerseusExpressionWidgetOptions directly here.\ntype EditableExpressionWidgetOptions = Omit<\n PerseusExpressionWidgetOptions,\n \"buttonsVisible\"\n>;\n\ntype Props = {\n apiOptions: APIOptions;\n onChange: (newValues: EditableExpressionWidgetOptions) => void;\n} & EditableExpressionWidgetOptions;\n\n// types for iterables\ntype AnswerForm = PerseusExpressionWidgetOptions[\"answerForms\"][number];\ntype LegacyButtonSet = PerseusExpressionWidgetOptions[\"buttonSets\"][number];\n\nconst buttonSetsList: LegacyButtonSets = [\n \"basic\",\n \"trig\",\n \"prealgebra\",\n \"logarithms\",\n \"scientific\",\n \"basic relations\",\n \"advanced relations\",\n];\n\ninterface State {\n // this is to help the \"functions\" input feel natural\n // while still allowing us to store the functions as an array\n functionsInternal: string;\n}\n\n// JSDoc will be shown in Storybook widget editor description\n/**\n * An editor for adding an expression widget that allows users to enter mathematical expressions.\n */\nclass ExpressionEditor extends React.Component<Props, State> {\n static defaultProps = {\n ...expressionLogic.defaultWidgetOptions,\n };\n\n constructor(props: Props) {\n super(props);\n this.state = {\n functionsInternal: this.props.functions.join(\" \"),\n };\n }\n\n handleChange(changes: Partial<EditableExpressionWidgetOptions>) {\n this.props.onChange({\n answerForms: this.props.answerForms,\n buttonSets: this.props.buttonSets,\n functions: this.props.functions,\n times: this.props.times,\n extraKeys: this.props.extraKeys,\n visibleLabel: this.props.visibleLabel,\n ariaLabel: this.props.ariaLabel,\n ...changes,\n });\n }\n\n serialize(): PerseusExpressionWidgetOptions {\n const {\n answerForms,\n buttonSets,\n functions,\n times,\n visibleLabel,\n ariaLabel,\n } = this.props;\n\n return {\n answerForms,\n buttonSets,\n functions,\n times,\n visibleLabel,\n ariaLabel,\n extraKeys: deriveExtraKeys(this.props),\n };\n }\n\n // TODO(LEMS-3643): Remove `getSaveWarnings` once the frontend uses\n // the new linter rules for save warnings.\n getSaveWarnings: () => any = () => {\n const issues: Array<any | string> = [];\n\n if (this.props.answerForms.length === 0) {\n issues.push(\"No answers specified\");\n } else {\n const hasCorrect = this.props.answerForms.some((form) => {\n return form.considered === \"correct\";\n });\n if (!hasCorrect) {\n issues.push(\"No correct answer specified\");\n }\n\n _(this.props.answerForms).each((form, ix) => {\n // TODO(benchristel): validate that `form.value` isn't blank?\n\n // note we're not using icu for content creators\n const expression = KAS.parse(form.value, {\n functions: this.props.functions,\n });\n if (!expression.parsed) {\n issues.push(`Couldn't parse ${form.value}`);\n } else if (form.simplify && !expression.expr.isSimplified()) {\n issues.push(\n `${form.value} isn't simplified, but is required\" +\n \" to be`,\n );\n }\n });\n }\n\n return issues;\n };\n\n newAnswer: () => void = () => {\n const answerForms = this.props.answerForms.slice();\n const newKey = crypto.randomUUID();\n\n const newAnswerForm: PerseusExpressionAnswerForm = {\n considered: \"correct\",\n form: false,\n key: `${newKey}`,\n simplify: false,\n value: \"\",\n };\n\n answerForms.push(newAnswerForm);\n this.handleChange({answerForms});\n };\n\n handleRemoveForm: (answerKey: number) => void = (i) => {\n const updatedAnswerForms = this.props.answerForms.slice();\n updatedAnswerForms.splice(i, 1);\n this.handleChange({answerForms: updatedAnswerForms});\n };\n\n // This function is designed to update the answerForm property\n // with new data. This function should not be used to update any\n // other properties within ExpressionEditor except extraKeys\n // which is derived from answerForms\n updateAnswerForm(index: number, answerFormProps: AnswerForm) {\n // Create a copy of props.answerForms to mutate and change.\n const answerForms = this.props.answerForms.slice();\n answerForms[index] = answerFormProps;\n\n // deriveExtraKeys defaults to using the `extraKeys` it was given\n // which in most case is what we want, but is not what we want\n // in the editing experience because we should recalculate them\n // when answers change\n const {extraKeys, ...restProps} = this.props;\n\n const derivedExtraKeys = deriveExtraKeys({\n ...restProps,\n answerForms,\n });\n this.handleChange({answerForms, extraKeys: derivedExtraKeys});\n }\n\n // called when the selected buttonset changes\n handleButtonSet: (changingName: string) => void = (changingName) => {\n const buttonSetNames = buttonSetsList;\n\n // Filter to preserve order - using .union and .difference would always\n // move the last added button set to the end.\n const buttonSets = buttonSetNames.filter((set) => {\n return (\n this.props.buttonSets.includes(set) !== (set === changingName)\n );\n });\n\n this.handleChange({buttonSets});\n };\n\n handleToggleDiv: () => void = () => {\n // We always want buttonSets to contain exactly one of \"basic\" and\n // \"basic+div\". Toggle between the two of them.\n // If someone can think of a more elegant formulation of this (there\n // must be one!) feel free to change it.\n let keep: LegacyButtonSet | undefined;\n let remove: LegacyButtonSet | undefined;\n if (this.props.buttonSets.includes(\"basic+div\")) {\n keep = \"basic\";\n remove = \"basic+div\";\n } else {\n keep = \"basic+div\";\n remove = \"basic\";\n }\n\n const buttonSets = this.props.buttonSets\n .filter((set) => set !== remove)\n .concat(keep);\n\n this.handleChange({buttonSets});\n };\n\n // called when the correct answer changes\n handleTexInsert: (arg1: string) => void = (str) => {\n // @ts-expect-error - TS2339 - Property 'insert' does not exist on type 'ReactInstance'.\n this.refs.expression.insert(str);\n };\n\n // called when the function variables change\n handleFunctions: (value: string) => void = (value) => {\n this.setState({functionsInternal: value});\n const newProps: Record<string, any> = {};\n newProps.functions = value.split(/[ ,]+/).filter(isTruthy);\n this.handleChange(newProps);\n };\n\n // called when the visible labels change\n handleVisibleLabel: (visibleLabel: string) => void = (visibleLabel) => {\n this.handleChange({visibleLabel});\n };\n\n // called when the aria label change\n handleAriaLabel: (ariaLabel: string) => void = (ariaLabel) => {\n this.handleChange({ariaLabel});\n };\n\n changeSimplify(index: number, simplify: boolean) {\n const answerForm: AnswerForm = {\n ...this.props.answerForms[index],\n simplify,\n };\n\n this.updateAnswerForm(index, answerForm);\n }\n\n changeForm(index: number, form: boolean) {\n const answerForm: AnswerForm = {\n ...this.props.answerForms[index],\n form,\n };\n\n this.updateAnswerForm(index, answerForm);\n }\n\n changeConsidered(\n index: number,\n considered: (typeof PerseusExpressionAnswerFormConsidered)[number],\n ) {\n const answerForm: AnswerForm = {\n ...this.props.answerForms[index],\n considered,\n };\n\n this.updateAnswerForm(index, answerForm);\n }\n\n changeTimes(times: boolean) {\n this.handleChange({times: times});\n }\n\n changeExpressionWidget: (\n index: number,\n input: PerseusExpressionUserInput,\n ) => void = (index, input) => {\n const answerForm: AnswerForm = {\n ...this.props.answerForms[index],\n value: input,\n };\n this.updateAnswerForm(index, answerForm);\n };\n\n render(): React.ReactNode {\n const editingDisabled = this.props.apiOptions.editingDisabled ?? false;\n const answerOptions: React.JSX.Element[] = this.props.answerForms.map(\n (ans: AnswerForm, index: number) => {\n const expressionProps: Partial<\n React.ComponentProps<typeof Expression>\n > = {\n options: {\n // note we're using\n // *this.props*.{times,functions,buttonSets} since each\n // answer area has the same settings for those\n times: this.props.times,\n functions: this.props.functions,\n buttonSets: this.props.buttonSets,\n buttonsVisible: \"focused\",\n visibleLabel: this.props.visibleLabel,\n ariaLabel: this.props.ariaLabel,\n answerForms: this.props.answerForms,\n },\n userInput: ans.value,\n handleUserInput: (input: PerseusExpressionUserInput) =>\n this.changeExpressionWidget(index, input),\n trackInteraction: () => {},\n } as const;\n\n return (\n <AnswerOption\n key={ans.key}\n considered={ans.considered}\n editingDisabled={editingDisabled}\n // eslint-disable-next-line no-restricted-syntax\n expressionProps={expressionProps as any}\n form={ans.form}\n simplify={ans.simplify}\n onDelete={() => this.handleRemoveForm(index)}\n onChangeSimplify={(simplify) =>\n this.changeSimplify(index, simplify)\n }\n onChangeForm={(form) => this.changeForm(index, form)}\n onChangeConsidered={(considered) =>\n this.changeConsidered(index, considered)\n }\n />\n );\n },\n );\n\n // checkboxes to choose which sets of input buttons are shown\n const buttonSetChoices = buttonSetsList.map((name) => {\n // The first one gets special cased to always be checked, disabled,\n // and float left.\n const isBasic = name === \"basic\";\n const checked = this.props.buttonSets.includes(name) || isBasic;\n return (\n <Checkbox\n key={name}\n label={name}\n checked={checked}\n disabled={isBasic}\n onChange={() => this.handleButtonSet(name)}\n />\n );\n });\n\n buttonSetChoices.unshift(\n <Checkbox\n key=\"show ÷ button\"\n label=\"show ÷ button\"\n checked={this.props.buttonSets.includes(\"basic+div\")}\n onChange={this.handleToggleDiv}\n />,\n );\n\n return (\n <View>\n <Heading size=\"medium\">Global Options</Heading>\n\n <div className={styles.paddedY}>\n <LabeledTextField\n label={\n <>\n Visible label\n <InfoTip>\n Optional visible text; strongly encouraged\n to help learners using dictation software,\n but can be omitted if the surrounding\n content provides enough context.\n </InfoTip>\n </>\n }\n value={this.props.visibleLabel || \"\"}\n onChange={this.handleVisibleLabel}\n />\n </div>\n\n <div className={styles.paddedY}>\n <LabeledTextField\n label={\n <>\n Aria label\n <InfoTip>\n Label text that&apos;s read by screen\n readers. Highly recommend adding a label\n here to ensure your exercise is accessible.\n For more information on writting accessible\n labels, please see{\" \"}\n <a\n href=\"https://www.w3.org/WAI/tips/designing/#ensure-that-form-elements-include-clearly-associated-labels\"\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n this article.\n </a>\n </InfoTip>\n </>\n }\n value={this.props.ariaLabel || \"\"}\n onChange={this.handleAriaLabel}\n />\n </div>\n\n <div className={styles.paddedY}>\n <LabeledTextField\n label={\n <>\n Function variables\n <InfoTip>\n Single-letter variables listed here will be\n interpreted as functions. This let us know\n that f(x) means &quot;f of x&quot; and not\n &quot;f times x&quot;.\n </InfoTip>\n </>\n }\n value={this.state.functionsInternal}\n onChange={this.handleFunctions}\n />\n </div>\n\n <div className={styles.paddedY}>\n <Checkbox\n label={\n <>\n Use × instead of ⋅ for multiplication\n <InfoTip>\n For pre-algebra problems this option\n displays multiplication as \\times instead of\n \\cdot in both the rendered output and the\n acceptable formats examples.\n </InfoTip>\n </>\n }\n checked={this.props.times}\n onChange={(newCheckedState) => {\n this.changeTimes(newCheckedState);\n }}\n />\n </div>\n\n <div className={styles.paddedY}>\n <Heading size=\"small\" className={styles.buttonSets}>\n Button Sets\n </Heading>\n {buttonSetChoices}\n </div>\n\n <Heading size=\"medium\">Answers</Heading>\n\n <BodyText size=\"small\" className={styles.answersSubtitle}>\n student responses area matched against these from top to\n bottom\n </BodyText>\n\n <View className={styles.answersGroup}>\n <View className={styles.answersList}>{answerOptions}</View>\n <Button\n size=\"small\"\n disabled={editingDisabled}\n onClick={this.newAnswer}\n >\n Add new answer\n </Button>\n </View>\n </View>\n );\n }\n}\n\n// Find the next element in arr after val, wrapping around to the first.\nconst findNextIn = function <T>(arr: ReadonlyArray<T>, val: T) {\n let ix = arr.indexOf(val);\n ix = (ix + 1) % arr.length;\n return arr[ix];\n};\n\ninterface AnswerOptionProps {\n considered: (typeof PerseusExpressionAnswerFormConsidered)[number];\n editingDisabled: boolean;\n expressionProps: React.ComponentProps<typeof Expression>;\n\n // Must the answer have the same form as this answer.\n form: boolean;\n\n // Must the answer be simplified.\n simplify: boolean;\n\n onDelete: () => void;\n onChangeSimplify: (simplify: boolean) => void;\n onChangeForm: (form: boolean) => void;\n onChangeConsidered: (\n considered: (typeof PerseusExpressionAnswerFormConsidered)[number],\n ) => void;\n}\n\ninterface AnswerOptionState {\n deleteFocused: boolean;\n}\n\nclass AnswerOption extends React.Component<\n AnswerOptionProps,\n AnswerOptionState\n> {\n state = {deleteFocused: false};\n\n handleImSure = () => {\n this.props.onDelete();\n this.handleCancelDelete();\n };\n\n handleCancelDelete = () => {\n this.setState({deleteFocused: false});\n };\n\n handleDelete = () => {\n this.setState({deleteFocused: true});\n };\n\n toggleConsidered = () => {\n const newVal = findNextIn<\n (typeof PerseusExpressionAnswerFormConsidered)[number]\n >(PerseusExpressionAnswerFormConsidered, this.props.considered);\n this.props.onChangeConsidered(newVal);\n };\n\n render(): React.ReactNode {\n const {editingDisabled} = this.props;\n const removeButton = this.state.deleteFocused ? (\n <>\n <Button\n size=\"small\"\n disabled={editingDisabled}\n onClick={this.handleImSure}\n actionType=\"destructive\"\n >\n I&apos;m sure!\n </Button>\n <Button\n size=\"small\"\n disabled={editingDisabled}\n onClick={this.handleCancelDelete}\n kind=\"secondary\"\n >\n Cancel\n </Button>\n </>\n ) : (\n <Button\n size=\"small\"\n disabled={editingDisabled}\n onClick={this.handleDelete}\n actionType=\"destructive\"\n kind=\"tertiary\"\n className={styles.deleteButton}\n >\n Delete\n </Button>\n );\n\n return (\n <div className={styles.answerOption}>\n <ButtonGroup\n onChange={this.toggleConsidered}\n disabled={editingDisabled}\n value={this.props.considered}\n selectedButtonStyle={\n consideredButtonStyles[this.props.considered]\n }\n buttons={PerseusExpressionAnswerFormConsidered.map((c) => ({\n value: c,\n content: c,\n title: `This answer will be considered ${c}`,\n }))}\n />\n\n <Expression {...this.props.expressionProps} />\n\n <div className={`${styles.paddedY} ${styles.paddedX}`}>\n <Checkbox\n label={\n <>\n Answer expression must have the same form.\n <InfoTip>\n The student&apos;s answer must be in the\n same form. Commutativity and excess negative\n signs are ignored.\n </InfoTip>\n </>\n }\n checked={this.props.form}\n onChange={this.props.onChangeForm}\n />\n </div>\n\n <div className={`${styles.paddedY} ${styles.paddedX}`}>\n <Checkbox\n label={\n <>\n Answer expression must be fully expanded and\n simplified.\n <InfoTip>\n The student&apos;s answer must be fully\n expanded and simplified. Answering this\n equation (x^2+2x+1) with this factored\n equation (x+1)^2 will render this response\n &quot;Your answer is not fully expanded and\n simplified.&quot;\n </InfoTip>\n </>\n }\n checked={this.props.simplify}\n onChange={this.props.onChangeSimplify}\n />\n </div>\n\n <div className={`${styles.buttonRow} ${styles.paddedY}`}>\n {removeButton}\n </div>\n </div>\n );\n }\n}\n\nexport default ExpressionEditor;\n\nconst wbStyles = StyleSheet.create({\n answerStatusWrong: {\n backgroundColor: semanticColor.core.background.critical.subtle,\n },\n answerStatusCorrect: {\n backgroundColor: semanticColor.core.background.success.subtle,\n },\n answerStatusUngraded: {\n backgroundColor: semanticColor.core.background.instructive.subtle,\n },\n});\n\nconst consideredButtonStyles: Record<\n (typeof PerseusExpressionAnswerFormConsidered)[number],\n CSSProperties\n> = {\n wrong: wbStyles.answerStatusWrong,\n correct: wbStyles.answerStatusCorrect,\n ungraded: wbStyles.answerStatusUngraded,\n};\n","import {fillInTheBlankLogic, isFeatureOn} from \"@khanacademy/perseus-core\";\nimport * as React from \"react\";\n\nimport type {APIOptionsWithDefaults} from \"@khanacademy/perseus\";\nimport type {PerseusFillInTheBlankWidgetOptions} from \"@khanacademy/perseus-core\";\n\nconst defaultOptions: PerseusFillInTheBlankWidgetOptions =\n fillInTheBlankLogic.defaultWidgetOptions;\n\ntype Props = PerseusFillInTheBlankWidgetOptions & {\n onChange: (newOptions: PerseusFillInTheBlankWidgetOptions) => void;\n apiOptions?: APIOptionsWithDefaults;\n};\n\n/**\n * Imperative API that WidgetEditor calls\n */\ntype FillInTheBlankEditorHandle = {\n serialize: () => PerseusFillInTheBlankWidgetOptions;\n getSaveWarnings: () => string[];\n};\n\n/**\n * An editor for a Fill in the Blank widget, where the learner drags answer\n * tiles from a choice bank into blanks in a passage.\n *\n * The controls are not built yet (LEMS-4371). Until they are, the editor\n * serializes the options it was given, so a widget authored in JSON mode\n * survives a round trip through the content editor.\n */\nconst FillInTheBlankEditor = React.forwardRef<\n FillInTheBlankEditorHandle,\n Props\n>(function FillInTheBlankEditor(\n {\n content = defaultOptions.content,\n widgets = defaultOptions.widgets,\n tiles = defaultOptions.tiles,\n maxUsesPerTile = defaultOptions.maxUsesPerTile,\n randomize = defaultOptions.randomize,\n apiOptions,\n },\n ref,\n) {\n React.useImperativeHandle(\n ref,\n () => ({\n serialize: () => {\n return {content, widgets, tiles, maxUsesPerTile, randomize};\n },\n\n // TODO(LEMS-3643): Remove `getSaveWarnings` once the frontend\n // uses the new linter rules for save warnings.\n getSaveWarnings: () => [],\n }),\n [content, widgets, tiles, maxUsesPerTile, randomize],\n );\n\n // TODO(LEMS-4396): clean up feature flag\n if (!isFeatureOn({apiOptions}, \"dnd-widget-fitb\")) {\n return null;\n }\n\n // TODO(LEMS-4371): FITB Content Editor\n return (\n <div data-testid=\"fill-in-the-blank-editor\">\n The Fill in the Blank editor is not built yet. Edit this\n widget&rsquo;s options in JSON mode.\n </div>\n );\n});\n\nexport default Object.assign(FillInTheBlankEditor, {\n defaultProps: defaultOptions,\n});\n","import {Util} from \"@khanacademy/perseus\";\nimport {freeResponseLogic} from \"@khanacademy/perseus-core\";\nimport Button from \"@khanacademy/wonder-blocks-button\";\nimport {View} from \"@khanacademy/wonder-blocks-core\";\nimport {Checkbox, TextArea, TextField} from \"@khanacademy/wonder-blocks-form\";\nimport {LabeledField} from \"@khanacademy/wonder-blocks-labeled-field\";\nimport {spacing, semanticColor} from \"@khanacademy/wonder-blocks-tokens\";\nimport {BodyText} from \"@khanacademy/wonder-blocks-typography\";\nimport plusCircleIcon from \"@phosphor-icons/core/regular/plus-circle.svg\";\nimport trashIcon from \"@phosphor-icons/core/regular/trash.svg\";\nimport {StyleSheet} from \"aphrodite\";\nimport * as React from \"react\";\n\nimport type {APIOptions} from \"@khanacademy/perseus\";\nimport type {\n PerseusFreeResponseWidgetOptions,\n PerseusFreeResponseWidgetScoringCriterion,\n} from \"@khanacademy/perseus-core\";\n\ntype Props = PerseusFreeResponseWidgetOptions & {\n apiOptions: APIOptions;\n onChange: (options: PerseusFreeResponseWidgetOptions) => void;\n};\n\n// JSDoc will be shown in Storybook widget editor description\n/**\n * An editor for adding a free response widget that allows users to enter open-ended text answers.\n */\nclass FreeResponseEditor extends React.Component<Props> {\n static defaultProps = {\n ...freeResponseLogic.defaultWidgetOptions,\n };\n\n handleChange(changes: Partial<PerseusFreeResponseWidgetOptions>) {\n this.props.onChange({\n allowUnlimitedCharacters: this.props.allowUnlimitedCharacters,\n characterLimit: this.props.characterLimit,\n placeholder: this.props.placeholder,\n question: this.props.question,\n scoringCriteria: this.props.scoringCriteria,\n ...changes,\n });\n }\n\n serialize: () => PerseusFreeResponseWidgetOptions = () => {\n return {\n allowUnlimitedCharacters: this.props.allowUnlimitedCharacters,\n characterLimit: this.props.characterLimit,\n placeholder: this.props.placeholder,\n question: this.props.question,\n scoringCriteria: this.props.scoringCriteria,\n };\n };\n\n // TODO(LEMS-3643): Remove `getSaveWarnings` once the frontend uses\n // the new linter rules for save warnings.\n getSaveWarnings: () => Array<string> = () => {\n const warnings: Array<string> = [];\n if (!this.props.question) {\n warnings.push(\"The question is empty\");\n }\n if (this.props.question.match(Util.rWidgetRule) != null) {\n warnings.push(\"The question contains a widget\");\n }\n return warnings;\n };\n\n handleUpdateCharacterLimit = (newValue: string) => {\n const val = parseInt(newValue);\n if (isNaN(val)) {\n return;\n }\n\n this.handleChange({characterLimit: Math.max(1, val)});\n };\n\n handleUpdateCriterion = (\n index: number,\n criterion: PerseusFreeResponseWidgetScoringCriterion,\n ) => {\n const newCriteria = this.props.scoringCriteria.map((c, i) => {\n if (i === index) {\n return criterion;\n }\n return c;\n });\n\n this.handleChange({scoringCriteria: newCriteria});\n };\n\n handleDeleteCriterion: (index: number) => void = (index: number) => {\n this.handleChange({\n scoringCriteria: this.props.scoringCriteria.filter(\n (_, i) => i !== index,\n ),\n });\n };\n\n handleAddCriterion: () => void = () => {\n this.handleChange({\n scoringCriteria: [...this.props.scoringCriteria, {text: \"\"}],\n });\n };\n\n renderCriteriaList: (editingDisabled: boolean) => React.ReactNode = (\n editingDisabled,\n ) => {\n const isDeletable = this.props.scoringCriteria.length > 1;\n\n return this.props.scoringCriteria.map((criterion, index) => {\n return (\n <CriterionEditor\n criterion={criterion}\n index={index}\n isDeletable={isDeletable}\n editingDisabled={editingDisabled}\n key={index}\n onChange={this.handleUpdateCriterion}\n onDelete={this.handleDeleteCriterion}\n />\n );\n });\n };\n\n render(): React.ReactNode {\n const editingDisabled = this.props.apiOptions.editingDisabled ?? false;\n return (\n <View>\n <LabeledField\n label=\"Question\"\n field={\n <TextArea\n value={this.props.question}\n onChange={(newValue) =>\n this.handleChange({question: newValue})\n }\n />\n }\n styles={{root: styles.labeledInputField}}\n />\n <LabeledField\n label=\"Placeholder\"\n field={\n <TextArea\n value={this.props.placeholder}\n onChange={(newValue) =>\n this.handleChange({placeholder: newValue})\n }\n />\n }\n styles={{root: styles.labeledInputField}}\n />\n <LabeledField\n label=\"Allow unlimited characters\"\n field={\n <Checkbox\n checked={this.props.allowUnlimitedCharacters}\n onChange={(val) =>\n this.handleChange({\n allowUnlimitedCharacters: val,\n })\n }\n />\n }\n styles={{root: styles.labeledInputField}}\n />\n {!this.props.allowUnlimitedCharacters && (\n <LabeledField\n label=\"Character limit\"\n field={\n <TextField\n type=\"number\"\n min={1}\n value={String(this.props.characterLimit)}\n onChange={this.handleUpdateCharacterLimit}\n />\n }\n styles={{root: styles.labeledInputField}}\n />\n )}\n <View>\n <View style={styles.criteriaList} tag=\"fieldset\">\n <BodyText tag=\"legend\">Scoring criteria</BodyText>\n {this.renderCriteriaList(editingDisabled)}\n </View>\n <View>\n <Button\n onClick={this.handleAddCriterion}\n startIcon={plusCircleIcon}\n disabled={editingDisabled}\n >\n Add an item\n </Button>\n </View>\n </View>\n </View>\n );\n }\n}\n\nconst CriterionEditor = function (props: {\n index: number;\n isDeletable: boolean;\n editingDisabled: boolean;\n criterion: PerseusFreeResponseWidgetScoringCriterion;\n onChange: (\n index: number,\n criterion: PerseusFreeResponseWidgetScoringCriterion,\n ) => void;\n onDelete: (index: number) => void;\n}): React.ReactNode {\n return (\n <View style={styles.criterionContainer}>\n <textarea\n aria-label={`Criterion ${props.index + 1}`}\n onChange={(e) =>\n props.onChange(props.index, {\n text: e.target.value,\n })\n }\n value={props.criterion.text}\n />\n\n {props.isDeletable && (\n <View style={styles.deleteButtonContainer}>\n <Button\n aria-label={`Delete criterion ${props.index + 1}`}\n actionType=\"destructive\"\n disabled={!props.isDeletable || props.editingDisabled}\n kind=\"tertiary\"\n onClick={() => props.onDelete(props.index)}\n size=\"small\"\n startIcon={trashIcon}\n >\n Delete\n </Button>\n </View>\n )}\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n criteriaList: {\n gap: spacing.small_12,\n },\n criterionContainer: {\n paddingBlockStart: spacing.xSmall_8,\n paddingBlockEnd: spacing.xSmall_8,\n borderBlockEnd: `1px solid ${semanticColor.core.border.neutral.subtle}`,\n \":last-child\": {\n borderBlockEnd: \"none\",\n },\n },\n deleteButtonContainer: {\n display: \"flex\",\n flexDirection: \"row\",\n justifyContent: \"flex-end\",\n },\n labeledInputField: {\n paddingBlockEnd: spacing.large_24,\n },\n});\n\nexport default FreeResponseEditor;\n","import {components} from \"@khanacademy/perseus\";\nimport {\n gradedGroupLogic,\n getDefaultAnswerArea,\n} from \"@khanacademy/perseus-core\";\nimport Button from \"@khanacademy/wonder-blocks-button\";\nimport plusIcon from \"@phosphor-icons/core/bold/plus-bold.svg\";\nimport trashIcon from \"@phosphor-icons/core/bold/trash-bold.svg\";\nimport * as React from \"react\";\n\nimport Editor from \"../../editor\";\nimport ExtrasEditor from \"../../extras-editor\";\n\nimport styles from \"./graded-group-editor.module.css\";\n\nimport type {APIOptionsWithDefaults} from \"@khanacademy/perseus\";\nimport type {\n PerseusGradedGroupWidgetOptions,\n PerseusRenderer,\n} from \"@khanacademy/perseus-core\";\n\nconst {TextInput} = components;\n\ninterface Props extends PerseusGradedGroupWidgetOptions {\n apiOptions?: APIOptionsWithDefaults;\n onChange: (options: PerseusGradedGroupWidgetOptions) => void;\n}\n\nclass GradedGroupEditor extends React.Component<Props> {\n static defaultProps: PerseusGradedGroupWidgetOptions =\n gradedGroupLogic.defaultWidgetOptions;\n\n editor = React.createRef<Editor>();\n hintEditor = React.createRef<Editor>();\n\n handleChange(changes: Partial<PerseusGradedGroupWidgetOptions>) {\n this.props.onChange({\n title: this.props.title,\n hint: this.props.hint,\n content: this.props.content,\n widgets: this.props.widgets,\n images: this.props.images,\n answerArea: this.props.answerArea,\n ...changes,\n });\n }\n\n handleAddHint: () => void = () => {\n const hint: PerseusRenderer = {content: \"\", images: {}, widgets: {}};\n this.handleChange({hint});\n };\n\n handleRemoveHint: () => void = () => {\n this.handleChange({hint: null});\n };\n\n getSaveWarnings: () => any = () => {\n return this.editor.current?.getSaveWarnings();\n };\n\n serialize: () => {\n title: string;\n hint: any | null | undefined;\n } = () => {\n return {\n title: this.props.title,\n ...this.editor.current?.serialize(),\n hint: this.hintEditor.current?.serialize(),\n ...(this.props.answerArea\n ? {answerArea: this.props.answerArea}\n : {}),\n };\n };\n\n render(): React.ReactNode {\n const editingDisabled = this.props.apiOptions?.editingDisabled ?? false;\n return (\n <div className=\"perseus-group-editor\">\n <div className=\"perseus-widget-row\">\n <label className={styles.title}>\n Title:{\" \"}\n <TextInput\n value={this.props.title}\n className={styles.input}\n onChange={(title) => this.handleChange({title})}\n />\n </label>\n </div>\n <Editor\n ref={this.editor}\n content={this.props.content}\n widgets={this.props.widgets}\n apiOptions={this.props.apiOptions}\n images={this.props.images}\n widgetEnabled={true}\n onChange={(renderer) => this.handleChange(renderer)}\n warnNoPrompt={true}\n warnNoWidgets={true}\n />\n {!this.props.hint && (\n <Button\n startIcon={plusIcon}\n size=\"small\"\n kind=\"tertiary\"\n onClick={this.handleAddHint}\n disabled={editingDisabled}\n >\n Add a hint\n </Button>\n )}\n {this.props.hint && (\n <div className=\"perseus-hint-editor\">\n <div className={styles.hintsTitle}>Hint</div>\n <Editor\n ref={this.hintEditor}\n content={this.props.hint.content}\n widgets={this.props.hint.widgets}\n apiOptions={this.props.apiOptions}\n images={this.props.hint.images}\n widgetEnabled={true}\n onChange={(hint) => {\n this.handleChange({hint});\n }}\n />\n <Button\n startIcon={trashIcon}\n size=\"small\"\n kind=\"tertiary\"\n onClick={this.handleRemoveHint}\n disabled={editingDisabled}\n // Have the \"Remove\" button align to the right.\n style={{marginInlineStart: \"auto\", display: \"flex\"}}\n >\n Remove this hint\n </Button>\n </div>\n )}\n <ExtrasEditor\n {...(this.props.answerArea ?? getDefaultAnswerArea())}\n apiOptions={this.props.apiOptions}\n editingDisabled={editingDisabled}\n onChange={(changes) => {\n this.handleChange({\n answerArea: {\n ...getDefaultAnswerArea(),\n ...this.props.answerArea,\n ...changes,\n },\n });\n }}\n />\n </div>\n );\n }\n}\n\nexport default GradedGroupEditor;\n","import {gradedGroupSetLogic} from \"@khanacademy/perseus-core\";\nimport * as React from \"react\";\n\nimport GradedGroupEditor from \"../graded-group-editor\";\n\nimport type {APIOptionsWithDefaults} from \"@khanacademy/perseus\";\nimport type {PerseusGradedGroupSetWidgetOptions} from \"@khanacademy/perseus-core\";\n\ninterface Props extends PerseusGradedGroupSetWidgetOptions {\n apiOptions?: APIOptionsWithDefaults;\n onChange: (options: PerseusGradedGroupSetWidgetOptions) => void;\n}\n\nclass GradedGroupSetEditor extends React.Component<Props> {\n _editors: Array<GradedGroupEditor | null> = [];\n\n static defaultProps: PerseusGradedGroupSetWidgetOptions =\n gradedGroupSetLogic.defaultWidgetOptions;\n\n getSaveWarnings: () => ReadonlyArray<any> = () => {\n return [].concat(\n ...this._editors.map((editor) =>\n editor ? editor.getSaveWarnings() : [],\n ),\n );\n };\n\n serialize = () => {\n return {\n gradedGroups: this.props.gradedGroups,\n };\n };\n\n renderGroups: () => React.ReactNode = () => {\n // `defaultProps` only fills in for `undefined`, so content with an\n // explicit `gradedGroups: null` still reaches us as null.\n const gradedGroups = this.props.gradedGroups ?? [];\n return gradedGroups.map((group, i) => (\n <GradedGroupEditor\n key={i}\n ref={(el) => (this._editors[i] = el)}\n {...group}\n apiOptions={this.props.apiOptions}\n onChange={(data) =>\n this.props.onChange({\n gradedGroups: setArrayItem(gradedGroups, i, data),\n })\n }\n />\n ));\n };\n\n addGroup = () => {\n const newGroup = GradedGroupEditor.defaultProps;\n this.props.onChange({\n gradedGroups: this.props.gradedGroups.concat([newGroup]),\n });\n };\n\n render(): React.ReactNode {\n const editingDisabled = this.props.apiOptions?.editingDisabled ?? false;\n return (\n <div className=\"perseus-group-editor\">\n {this.renderGroups()}\n <button onClick={this.addGroup} disabled={editingDisabled}>\n Add group\n </button>\n </div>\n );\n }\n}\n\n// TODO(benchristel): Replace usages of this function with Array#with(), once\n// that's available in our supported browsers.\nconst setArrayItem = (list, i: any, value) => [\n ...list.slice(0, i),\n value,\n ...list.slice(i + 1),\n];\n\nexport default GradedGroupSetEditor;\n","/**\n * Used in the editors for the Grapher and Interaction widgets.\n */\nimport {KhanMath} from \"@khanacademy/kmath\";\nimport {\n components,\n interactiveSizes,\n Dependencies,\n Util,\n} from \"@khanacademy/perseus\";\nimport {Checkbox} from \"@khanacademy/wonder-blocks-form\";\nimport * as React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport _ from \"underscore\";\n\nimport InfoTip from \"./info-tip\";\n\nimport type {\n Coords,\n MarkingsType,\n PerseusImageBackground,\n} from \"@khanacademy/perseus-core\";\n\nconst {ButtonGroup, RangeInput} = components;\n\nconst defaultBackgroundImage = {\n url: null,\n width: 0,\n height: 0,\n} as const;\n\nfunction numSteps(range: [number, number], step: number) {\n return Math.floor((range[1] - range[0]) / step);\n}\ntype Props = {\n editableSettings: ReadonlyArray<\n \"canvas\" | \"graph\" | \"snap\" | \"image\" | \"measure\"\n >;\n box: readonly number[];\n labels: readonly string[];\n range: Coords;\n step: [number, number];\n gridStep: [number, number];\n snapStep: [number, number];\n valid: boolean;\n backgroundImage: PerseusImageBackground;\n markings: MarkingsType;\n showProtractor?: boolean;\n showRuler?: boolean;\n showTooltips?: boolean;\n rulerLabel: string;\n rulerTicks: number;\n onChange: (values: Record<string, unknown>) => void;\n};\n\ntype DefaultProps = {\n editableSettings: Props[\"editableSettings\"];\n box: Props[\"box\"];\n labels: Props[\"labels\"];\n range: Props[\"range\"];\n step: Props[\"step\"];\n gridStep: Props[\"gridStep\"];\n snapStep: Props[\"snapStep\"];\n valid: Props[\"valid\"];\n backgroundImage: Props[\"backgroundImage\"];\n markings: Props[\"markings\"];\n rulerLabel: Props[\"rulerLabel\"];\n rulerTicks: Props[\"rulerTicks\"];\n showProtractor?: Props[\"showProtractor\"];\n showRuler?: Props[\"showRuler\"];\n showTooltips?: Props[\"showTooltips\"];\n};\n\ntype State = {\n labelsTextbox: readonly string[];\n gridStepTextbox: number[];\n snapStepTextbox: number[];\n stepTextbox: number[];\n rangeTextbox: [number, number][];\n backgroundImage: PerseusImageBackground;\n};\n\nclass GraphSettings extends React.Component<Props, State> {\n static displayName: \"GraphSettings\";\n\n static defaultProps: DefaultProps = {\n editableSettings: [\"graph\", \"snap\", \"image\", \"measure\"],\n box: [\n interactiveSizes.defaultBoxSizeSmall,\n interactiveSizes.defaultBoxSizeSmall,\n ],\n labels: [\"x\", \"y\"],\n range: [\n [-10, 10],\n [-10, 10],\n ],\n step: [1, 1],\n gridStep: [1, 1],\n snapStep: [1, 1],\n valid: true,\n backgroundImage: defaultBackgroundImage,\n markings: \"graph\",\n rulerLabel: \"\",\n rulerTicks: 10,\n showProtractor: false,\n showRuler: false,\n showTooltips: false,\n };\n\n _isMounted = false;\n\n constructor(props: Props) {\n super(props);\n this.state = this.getInitialState();\n\n this.changeBackgroundUrl = this.changeBackgroundUrl.bind(this);\n this.changeGraph = this.changeGraph.bind(this);\n this.changeGridStep = this.changeGridStep.bind(this);\n this.changeLabel = this.changeLabel.bind(this);\n this.changeRange = this.changeRange.bind(this);\n this.changeRulerLabel = this.changeRulerLabel.bind(this);\n this.changeRulerTicks = this.changeRulerTicks.bind(this);\n this.changeSnapStep = this.changeSnapStep.bind(this);\n this.changeStep = this.changeStep.bind(this);\n }\n\n getInitialState() {\n return this.stateFromProps(this.props);\n }\n\n componentDidMount() {\n // NOTE(scottgrant): This is a hack to remove the deprecated call to\n // this.isMounted() but is still considered an anti-pattern.\n this._isMounted = true;\n\n this.changeGraph = _.debounce(this.changeGraph, 300);\n }\n\n UNSAFE_componentWillReceiveProps(nextProps: Props) {\n if (\n !_.isEqual(this.props.labels, nextProps.labels) ||\n !_.isEqual(this.props.gridStep, nextProps.gridStep) ||\n !_.isEqual(this.props.snapStep, nextProps.snapStep) ||\n !_.isEqual(this.props.step, nextProps.step) ||\n !_.isEqual(this.props.range, nextProps.range) ||\n !_.isEqual(this.props.backgroundImage, nextProps.backgroundImage)\n ) {\n this.setState(this.stateFromProps(nextProps));\n }\n }\n\n componentWillUnmount() {\n this._isMounted = false;\n }\n\n stateFromProps(props: Props): State {\n return {\n labelsTextbox: props.labels,\n gridStepTextbox: props.gridStep,\n snapStepTextbox: props.snapStep,\n stepTextbox: props.step,\n rangeTextbox: props.range,\n backgroundImage: _.clone(props.backgroundImage),\n };\n }\n\n changeRulerLabel(e: React.ChangeEvent<HTMLSelectElement>) {\n this.props.onChange({rulerLabel: e.target.value});\n }\n\n changeRulerTicks(e: React.ChangeEvent<HTMLSelectElement>) {\n this.props.onChange({rulerTicks: +e.target.value});\n }\n\n changeBackgroundUrl(\n e:\n | React.FocusEvent<HTMLInputElement>\n | React.KeyboardEvent<HTMLInputElement>,\n ) {\n // Only continue on blur or \"enter\"\n if (e.type === \"keypress\" && \"key\" in e && e.key !== \"Enter\") {\n return;\n }\n\n const setUrl = (url: string | null, width: number, height: number) => {\n const image = _.clone(this.props.backgroundImage);\n image.url = url;\n image.width = width;\n image.height = height;\n this.setState(\n {\n backgroundImage: image,\n },\n this.changeGraph,\n );\n };\n\n // @ts-expect-error - TS2531 - Object is possibly 'null'. | TS2339 - Property 'value' does not exist on type 'Element | Text'.\n const url = ReactDOM.findDOMNode(this.refs[\"bg-url\"]).value;\n if (url) {\n Util.getImageSize(url, (width, height) => {\n if (this._isMounted) {\n setUrl(url, width, height);\n }\n });\n } else {\n setUrl(null, 0, 0);\n }\n }\n\n renderLabelChoices(choices: ReadonlyArray<[string, string]>) {\n return choices.map(function ([name, value]) {\n return (\n <option key={value} value={value}>\n {name}\n </option>\n );\n });\n }\n\n validRange(range: [number, number]): string | true {\n const numbers = _.every(range, function (num) {\n return _.isFinite(num);\n });\n if (!numbers) {\n return \"Range must be a valid number\";\n }\n if (range[0] >= range[1]) {\n return \"Range must have a higher number on the right\";\n }\n return true;\n }\n\n validateStepValue(settings: {\n step: number;\n range: [number, number];\n name: string;\n minTicks: number;\n maxTicks: number;\n }): string | true {\n const {step, range, name, minTicks, maxTicks} = settings;\n\n if (!_.isFinite(step)) {\n return name + \" must be a valid number\";\n }\n const nSteps = numSteps(range, step);\n if (nSteps < minTicks) {\n return (\n name +\n \" is too large, there must be at least \" +\n minTicks +\n \" ticks.\"\n );\n }\n if (nSteps > maxTicks) {\n return (\n name +\n \" is too small, there can be at most \" +\n maxTicks +\n \" ticks.\"\n );\n }\n return true;\n }\n\n validSnapStep(step: number, range: [number, number]) {\n return this.validateStepValue({\n step: step,\n range: range,\n name: \"Snap step\",\n minTicks: 5,\n maxTicks: 60,\n });\n }\n\n validGridStep(step: number, range: [number, number]) {\n return this.validateStepValue({\n step: step,\n range: range,\n name: \"Grid step\",\n minTicks: 3,\n maxTicks: 60,\n });\n }\n\n validStep(step: number, range: [number, number]) {\n return this.validateStepValue({\n step: step,\n range: range,\n name: \"Step\",\n minTicks: 3,\n maxTicks: 20,\n });\n }\n\n validBackgroundImageSize(image: PerseusImageBackground) {\n // Ignore empty images\n if (!image.url) {\n return true;\n }\n\n const validSize =\n (image.width ?? 0) <= 450 && (image.height ?? 0) <= 450;\n\n if (!validSize) {\n return \"Image must be smaller than 450px x 450px.\";\n }\n return true;\n }\n\n validateGraphSettings(\n range: Coords,\n step: number[],\n gridStep: number[],\n snapStep: number[],\n image: PerseusImageBackground,\n ) {\n const self = this;\n let msg;\n const goodRange = _.every(range, function (range) {\n msg = self.validRange(range);\n return msg === true;\n });\n if (!goodRange) {\n return msg;\n }\n const goodStep = _.every(step, function (step, i) {\n msg = self.validStep(step, range[i]);\n return msg === true;\n });\n if (!goodStep) {\n return msg;\n }\n const goodGridStep = _.every(gridStep, function (gridStep, i) {\n msg = self.validGridStep(gridStep, range[i]);\n return msg === true;\n });\n if (!goodGridStep) {\n return msg;\n }\n const goodSnapStep = _.every(snapStep, function (snapStep, i) {\n msg = self.validSnapStep(snapStep, range[i]);\n return msg === true;\n });\n if (!goodSnapStep) {\n return msg;\n }\n const goodImageSize = this.validBackgroundImageSize(image);\n if (goodImageSize !== true) {\n msg = goodImageSize;\n return msg;\n }\n return true;\n }\n\n changeLabel(i: number, e: React.ChangeEvent<HTMLInputElement>) {\n const val = e.target.value;\n const labels = this.state.labelsTextbox.slice();\n labels[i] = val;\n this.setState({labelsTextbox: labels}, this.changeGraph);\n }\n\n changeRange(i: number, values: [number, number]) {\n const ranges = this.state.rangeTextbox.slice();\n ranges[i] = values;\n const step = this.state.stepTextbox.slice();\n const gridStep = this.state.gridStepTextbox.slice();\n const snapStep = this.state.snapStepTextbox.slice();\n const scale = Util.scaleFromExtent(ranges[i], this.props.box[i]);\n if (this.validRange(ranges[i]) === true) {\n step[i] = Util.tickStepFromExtent(ranges[i], this.props.box[i]);\n // Need to use the cast to number since gridStepFromTickStep\n // can return null or undefined. Ideally in the future let's adjust\n // the code to take this into account.\n // eslint-disable-next-line no-restricted-syntax\n gridStep[i] = Util.gridStepFromTickStep(step[i], scale) as number;\n snapStep[i] = gridStep[i] / 2;\n }\n this.setState(\n {\n stepTextbox: step,\n gridStepTextbox: gridStep,\n snapStepTextbox: snapStep,\n rangeTextbox: ranges,\n },\n this.changeGraph,\n );\n }\n\n changeStep(step: number[]) {\n this.setState({stepTextbox: step}, this.changeGraph);\n }\n\n changeSnapStep(snapStep: number[]) {\n this.setState({snapStepTextbox: snapStep}, this.changeGraph);\n }\n\n changeGridStep(gridStep: number[]) {\n this.setState(\n {\n gridStepTextbox: gridStep,\n snapStepTextbox: gridStep.map(function (step) {\n return step / 2;\n }),\n },\n this.changeGraph,\n );\n }\n\n changeGraph() {\n const labels = this.state.labelsTextbox;\n // eslint-disable-next-line no-restricted-syntax\n const range = this.state.rangeTextbox.map(\n // eslint-disable-next-line no-restricted-syntax\n (range) => range.map(Number) as [number, number],\n ) as Coords;\n const step = this.state.stepTextbox.map(Number);\n const gridStep = this.state.gridStepTextbox;\n const snapStep = this.state.snapStepTextbox;\n const image = this.state.backgroundImage;\n\n // validationResult is either:\n // true -> the settings are valid\n // a string -> the settings are invalid, and the explanation\n // is contained in the string\n const validationResult = this.validateGraphSettings(\n range,\n step,\n gridStep,\n snapStep,\n image,\n );\n\n if (validationResult === true) {\n // either true or a string\n this.props.onChange({\n valid: true,\n labels: labels,\n range: range,\n step: step,\n gridStep: gridStep,\n snapStep: snapStep,\n backgroundImage: image,\n });\n } else {\n this.props.onChange({\n valid: validationResult, // a string message, not false\n });\n }\n }\n\n render() {\n const scale = [\n KhanMath.roundTo(\n 2,\n Util.scaleFromExtent(this.props.range[0], this.props.box[0]),\n ),\n KhanMath.roundTo(\n 2,\n Util.scaleFromExtent(this.props.range[1], this.props.box[1]),\n ),\n ];\n\n const {TeX} = Dependencies.getDependencies();\n return (\n <div>\n {this.props.editableSettings.includes(\"canvas\") && (\n <div className=\"graph-settings\">\n <div className=\"perseus-widget-row\">\n <label htmlFor=\"canvas-size\">\n Canvas size (x,y pixels)\n </label>\n <RangeInput\n id=\"canvas-size\"\n value={this.props.box}\n onChange={(box) => {\n this.props.onChange({box: box});\n }}\n />\n </div>\n <div className=\"perseus-widget-row\">\n Scale (px per div):{\" \"}\n <TeX>{\"(\" + scale[0] + \", \" + scale[1] + \")\"}</TeX>\n </div>\n </div>\n )}\n\n {this.props.editableSettings.includes(\"graph\") && (\n <div className=\"graph-settings\">\n <div className=\"perseus-widget-row\">\n <div className=\"perseus-widget-left-col\">\n <label htmlFor=\"labels-x\">x Label</label>\n <input\n id=\"labels-x\"\n type=\"text\"\n className=\"graph-settings-axis-label\"\n ref=\"labels-0\"\n onChange={(e) => this.changeLabel(0, e)}\n value={this.state.labelsTextbox[0] || \"\"}\n />\n </div>\n <div className=\"perseus-widget-right-col\">\n <label htmlFor=\"labels-y\">y Label</label>\n <input\n id=\"labels-y\"\n type=\"text\"\n className=\"graph-settings-axis-label\"\n ref=\"labels-1\"\n onChange={(e) => this.changeLabel(1, e)}\n value={this.state.labelsTextbox[1] || \"\"}\n />\n </div>\n </div>\n\n <div className=\"perseus-widget-row\">\n <div className=\"perseus-widget-left-col\">\n <label htmlFor=\"range-x\">x Range</label>\n <RangeInput\n id=\"range-x\"\n value={this.state.rangeTextbox[0]}\n onChange={(vals) =>\n this.changeRange(0, vals)\n }\n />\n </div>\n <div className=\"perseus-widget-right-col\">\n <label htmlFor=\"range-y\">y Range</label>\n <RangeInput\n id=\"range-y\"\n value={this.state.rangeTextbox[1]}\n onChange={(vals) =>\n this.changeRange(1, vals)\n }\n />\n </div>\n </div>\n <div className=\"perseus-widget-row\">\n <div className=\"perseus-widget-left-col\">\n <label htmlFor=\"tick-step\">Tick Step</label>\n <RangeInput\n id=\"tick-step\"\n value={this.state.stepTextbox}\n onChange={this.changeStep}\n />\n </div>\n <div className=\"perseus-widget-right-col\">\n <label htmlFor=\"grid-step\">Grid Step</label>\n <RangeInput\n id=\"grid-step\"\n value={this.state.gridStepTextbox}\n onChange={this.changeGridStep}\n />\n </div>\n </div>\n {this.props.editableSettings.includes(\"snap\") && (\n <div className=\"perseus-widget-row\">\n <div className=\"perseus-widget-left-col\">\n <label htmlFor=\"snap-step\">Snap Step</label>\n <RangeInput\n id=\"snap-step\"\n value={this.state.snapStepTextbox}\n onChange={this.changeSnapStep}\n />\n </div>\n </div>\n )}\n <div className=\"perseus-widget-row\">\n {/* eslint-disable-next-line jsx-a11y/label-has-associated-control -- TODO(LEMS-2871): Address a11y error */}\n <label>Markings: </label>\n <ButtonGroup\n value={this.props.markings}\n buttons={[\n {value: \"graph\", content: \"Graph\"},\n {value: \"grid\", content: \"Grid\"},\n {value: \"none\", content: \"None\"},\n ]}\n onChange={(value) =>\n this.props.onChange({markings: value})\n }\n />\n </div>\n <div className=\"perseus-widget-left-col\">\n <Checkbox\n label=\"Show tooltips\"\n checked={this.props.showTooltips}\n onChange={(value) => {\n this.props.onChange({showTooltips: value});\n }}\n />\n </div>\n </div>\n )}\n\n {this.props.editableSettings.includes(\"image\") && (\n <div className=\"image-settings\">\n <div>Background image:</div>\n <div>\n <label htmlFor=\"bg-url\">Url:</label>\n <input\n id=\"bg-url\"\n type=\"text\"\n className=\"graph-settings-background-url\"\n ref=\"bg-url\"\n value={this.state.backgroundImage.url || \"\"}\n onChange={(e) => {\n const image = _.clone(\n this.props.backgroundImage,\n );\n image.url = e.target.value;\n this.setState({backgroundImage: image});\n }}\n onKeyPress={this.changeBackgroundUrl}\n onBlur={this.changeBackgroundUrl}\n />\n <InfoTip>\n <p>\n Create an image in graphie, or use the\n &quot;Add image&quot; function to create a\n background.\n </p>\n </InfoTip>\n </div>\n </div>\n )}\n\n {this.props.editableSettings.includes(\"measure\") && (\n <div className=\"misc-settings\">\n <div className=\"perseus-widget-row\">\n <div className=\"perseus-widget-left-col\">\n <Checkbox\n label=\"Show ruler\"\n checked={this.props.showRuler}\n onChange={(value) => {\n this.props.onChange({showRuler: value});\n }}\n />\n </div>\n <div className=\"perseus-widget-right-col\">\n <Checkbox\n label=\"Show protractor\"\n checked={this.props.showProtractor}\n onChange={(value) => {\n this.props.onChange({\n showProtractor: value,\n });\n }}\n />\n </div>\n </div>\n {this.props.showRuler && (\n <div>\n <div>\n <label>\n {\" \"}\n Ruler label:{\" \"}\n <select\n onChange={this.changeRulerLabel}\n value={this.props.rulerLabel}\n >\n <option value=\"\">None</option>\n <optgroup label=\"Metric\">\n {this.renderLabelChoices([\n [\"milimeters\", \"mm\"],\n [\"centimeters\", \"cm\"],\n [\"meters\", \"m\"],\n [\"kilometers\", \"km\"],\n ])}\n </optgroup>\n <optgroup label=\"Imperial\">\n {this.renderLabelChoices([\n [\"inches\", \"in\"],\n [\"feet\", \"ft\"],\n [\"yards\", \"yd\"],\n [\"miles\", \"mi\"],\n ])}\n </optgroup>\n </select>\n </label>\n </div>\n <div>\n <label>\n {\" \"}\n Ruler ticks:{\" \"}\n <select\n onChange={this.changeRulerTicks}\n value={this.props.rulerTicks}\n >\n {[1, 2, 4, 8, 10, 16].map(\n function (n) {\n return (\n <option\n key={n}\n value={n}\n >\n {n}\n </option>\n );\n },\n )}\n </select>\n </label>\n </div>\n </div>\n )}\n </div>\n )}\n </div>\n );\n }\n}\n\nexport default GraphSettings;\n","import {\n components,\n GrapherUtil,\n GrapherWidget,\n containerSizeClass,\n getInteractiveBoxFromSizeClass,\n} from \"@khanacademy/perseus\";\nimport {\n GrapherUtil as CoreGrapherUtil,\n grapherLogic,\n} from \"@khanacademy/perseus-core\";\nimport * as React from \"react\";\nimport invariant from \"tiny-invariant\";\nimport _ from \"underscore\";\n\nimport GraphSettings from \"../../components/graph-settings\";\nimport InfoTip from \"../../components/info-tip\";\n\nimport type {APIOptionsWithDefaults} from \"@khanacademy/perseus\";\nimport type {\n GrapherAnswerTypes,\n PerseusGrapherWidgetOptions,\n GrapherFunctionType,\n} from \"@khanacademy/perseus-core\";\nimport type {PropsFor} from \"@khanacademy/wonder-blocks-core\";\n\nconst {MultiButtonGroup} = components;\nconst Grapher = GrapherWidget.widget;\nconst {defaultPlotProps, getEquationString, typeToButton} = GrapherUtil;\n\ninterface Props extends PerseusGrapherWidgetOptions {\n onChange: (options: PerseusGrapherWidgetOptions) => void;\n apiOptions: APIOptionsWithDefaults;\n}\n\nclass GrapherEditor extends React.Component<Props> {\n static defaultProps: PerseusGrapherWidgetOptions =\n grapherLogic.defaultWidgetOptions;\n\n handleChange(changes: Partial<PerseusGrapherWidgetOptions>) {\n this.props.onChange({\n availableTypes: this.props.availableTypes,\n correct: this.props.correct,\n graph: this.props.graph,\n ...changes,\n });\n }\n\n handleAvailableTypesChange = (newAvailableTypes: GrapherFunctionType[]) => {\n // We set `allowEmpty={false}` on the MultiButtonGroup, so\n // `newAvailableTypes` will always have at least one element.\n invariant(\n newAvailableTypes.length > 0,\n \"newAvailableTypes cannot be empty\",\n );\n\n let correct = this.props.correct;\n\n // If the currently 'correct' type is removed from the list of types,\n // we need to change it to avoid impossible questions.\n if (correct == null || !newAvailableTypes.includes(correct.type)) {\n const graph = this.props.graph;\n const newType = newAvailableTypes[0];\n correct = defaultPlotProps(newType, graph);\n }\n this.handleChange({\n availableTypes: newAvailableTypes,\n correct: correct,\n });\n };\n\n serialize: () => any = () => {\n return _.chain(this.props)\n .pick(\"correct\", \"availableTypes\")\n .extend({graph: _.omit(this.props.graph, \"box\")})\n .value();\n };\n\n render(): React.ReactNode {\n const sizeClass = containerSizeClass.SMALL;\n let equationString;\n let graph;\n if (this.props.graph.valid === true) {\n const graphProps: Partial<PropsFor<typeof Grapher>> = {\n apiOptions: this.props.apiOptions,\n containerSizeClass: sizeClass,\n options: {\n graph: this.props.graph,\n correct: this.props.correct,\n availableTypes: [...this.props.availableTypes],\n },\n userInput: this.props.correct,\n handleUserInput: (userInput) => {\n let correct = this.props.correct;\n if (correct?.type === userInput.type) {\n correct = {...correct, ...userInput};\n } else {\n // Clear options from previous graph\n correct = userInput;\n }\n this.handleChange({correct});\n },\n trackInteraction: function () {},\n // Set the \"correct answer\" graph to static when editing is disabled\n static: this.props.apiOptions.editingDisabled,\n };\n\n graph = (\n // NOTE(jeremy): This editor doesn't pass in a bunch of\n // standard props that the Renderer provides normally (eg.\n // alignment, findWidgets, etc).\n // eslint-disable-next-line no-restricted-syntax\n <Grapher {...(graphProps as PropsFor<typeof Grapher>)} />\n );\n equationString = getEquationString(\n // eslint-disable-next-line no-restricted-syntax\n graphProps.userInput as GrapherAnswerTypes,\n );\n } else {\n graph = (\n <div className=\"perseus-error\">{this.props.graph.valid}</div>\n );\n }\n\n return (\n <div>\n <div>\n Correct answer{\" \"}\n <InfoTip>\n <p>\n Graph the correct answer in the graph below and\n ensure the equation or point coordinates displayed\n represent the correct answer.\n </p>\n </InfoTip>{\" \"}\n : {equationString}\n </div>\n\n <GraphSettings\n editableSettings={[\"graph\", \"snap\", \"image\"]}\n box={getInteractiveBoxFromSizeClass(sizeClass)}\n range={this.props.graph.range}\n labels={this.props.graph.labels}\n step={this.props.graph.step}\n gridStep={this.props.graph.gridStep}\n snapStep={this.props.graph.snapStep}\n valid={this.props.graph.valid === true}\n backgroundImage={this.props.graph.backgroundImage}\n markings={this.props.graph.markings}\n rulerLabel={this.props.graph.rulerLabel}\n rulerTicks={this.props.graph.rulerTicks}\n showTooltips={this.props.graph.showTooltips}\n onChange={(newProps) =>\n // Spread existing graph props to preserve properties not included\n // in the GraphSettings onChange payload (e.g. box, markings).\n this.handleChange({\n graph: {...this.props.graph, ...newProps},\n })\n }\n />\n <div className=\"perseus-widget-row\">\n {/* eslint-disable-next-line jsx-a11y/label-has-associated-control -- TODO(LEMS-2871): Address a11y error */}\n <label>Available functions: </label>\n <MultiButtonGroup\n allowEmpty={false}\n values={this.props.availableTypes}\n buttons={CoreGrapherUtil.allTypes.map(typeToButton)}\n onChange={this.handleAvailableTypesChange}\n />\n </div>\n {graph}\n </div>\n );\n }\n}\n\nexport default GrapherEditor;\n","import {groupLogic} from \"@khanacademy/perseus-core\";\nimport * as React from \"react\";\nimport invariant from \"tiny-invariant\";\n\nimport Editor from \"../../editor\";\n\nimport type {APIOptionsWithDefaults} from \"@khanacademy/perseus\";\nimport type {\n PerseusGroupWidgetOptions,\n PerseusRenderer,\n} from \"@khanacademy/perseus-core\";\n\ninterface Props extends PerseusGroupWidgetOptions {\n onChange: (options: PerseusGroupWidgetOptions) => void;\n apiOptions: APIOptionsWithDefaults;\n}\n\nclass GroupEditor extends React.Component<Props> {\n static defaultProps: PerseusGroupWidgetOptions =\n groupLogic.defaultWidgetOptions;\n\n editor = React.createRef<Editor>();\n\n getSaveWarnings: () => ReadonlyArray<any> = () => {\n return this.editor.current?.getSaveWarnings();\n };\n\n serialize(): PerseusRenderer {\n invariant(\n this.editor.current,\n \"cannot serialize GroupEditor without Editor\",\n );\n return {...this.editor.current.serialize()};\n }\n\n render(): React.ReactNode {\n return (\n <div className=\"perseus-group-editor\">\n <Editor\n ref={this.editor}\n content={this.props.content}\n widgets={this.props.widgets}\n apiOptions={this.props.apiOptions}\n images={this.props.images}\n widgetEnabled={true}\n onChange={this.props.onChange}\n />\n </div>\n );\n }\n}\n\nexport default GroupEditor;\n","import {\n iframeLogic,\n type PerseusIFrameWidgetOptions,\n} from \"@khanacademy/perseus-core\";\nimport {Checkbox} from \"@khanacademy/wonder-blocks-form\";\nimport * as React from \"react\";\n\nimport BlurInput from \"../../components/blur-input\";\nimport {PairsEditor} from \"../../components/pairs-editor\";\nimport EditorJsonify from \"../../mixins/editor-jsonify\";\n\ninterface IframeEditorProps extends PerseusIFrameWidgetOptions {\n onChange: (options: PerseusIFrameWidgetOptions) => void;\n}\n\n/**\n * This is the main editor for this widget, to specify all the options.\n */\nclass IframeEditor extends React.Component<IframeEditorProps> {\n static defaultProps: PerseusIFrameWidgetOptions =\n iframeLogic.defaultWidgetOptions;\n\n handleChange(changes: Partial<PerseusIFrameWidgetOptions>) {\n this.props.onChange({\n url: this.props.url,\n settings: this.props.settings,\n width: this.props.width,\n height: this.props.height,\n allowFullScreen: this.props.allowFullScreen,\n allowTopNavigation: this.props.allowTopNavigation,\n ...changes,\n });\n }\n\n serialize: () => any = () => {\n return EditorJsonify.serialize.call(this);\n };\n\n render(): React.ReactNode {\n return (\n <div>\n <div style={{fontWeight: \"bold\", textAlign: \"center\"}}>\n This widget is deprecated! <br />\n Try using the Video or CS Program widgets instead.\n </div>\n <label>\n Url or Program ID:\n <BlurInput\n value={this.props.url}\n onChange={(url) => this.handleChange({url})}\n />\n </label>\n <br />\n {/* eslint-disable-next-line jsx-a11y/label-has-associated-control -- TODO(LEMS-2871): Address a11y error */}\n <label>\n Settings:\n <PairsEditor\n pairs={this.props.settings ?? []}\n onChange={(settings) => this.handleChange({settings})}\n />\n </label>\n <br />\n <label>\n Width:\n <BlurInput\n value={String(this.props.width)}\n onChange={(width) => this.handleChange({width})}\n />\n </label>\n <label>\n Height:\n <BlurInput\n value={String(this.props.height)}\n onChange={(height) => this.handleChange({height})}\n />\n </label>\n <Checkbox\n label=\"Allow full screen\"\n checked={this.props.allowFullScreen}\n onChange={(allowFullScreen) => {\n this.handleChange({allowFullScreen});\n }}\n />\n <br />\n <Checkbox\n label=\"Allow iframe content to redirect the page\"\n checked={this.props.allowTopNavigation}\n onChange={(allowTopNavigation) => {\n this.handleChange({allowTopNavigation});\n }}\n />\n </div>\n );\n }\n}\n\nexport default IframeEditor;\n","import {components} from \"@khanacademy/perseus\";\nimport * as React from \"react\";\n\nconst {SvgImage} = components;\n\ninterface ImagePreviewProps {\n /**\n * The URL of the image to display.\n * Can be a regular image URL or a web+graphie URL.\n */\n src: string;\n\n /**\n * Alternative text for the image.\n * Used for accessibility and shown when the image fails to load.\n */\n alt: string;\n\n /**\n * The width of the image in pixels.\n * When provided with height, enables responsive rendering with proper aspect ratio.\n * If not provided, the image will render at its natural size.\n */\n width?: number;\n\n /**\n * The height of the image in pixels.\n * When provided with width, enables responsive rendering with proper aspect ratio.\n * If not provided, the image will render at its natural size.\n */\n height?: number;\n\n /**\n * The Wonder Blocks theme to use in the preview area.\n * This is primarily used to preview Dark Mode rendering.\n */\n wbTheme?: string;\n}\n\n/**\n * Shared component for previewing images in editors.\n * Displays an SvgImage with proper containment to prevent overflow.\n */\nexport default function ImagePreview({\n src,\n alt,\n width,\n height,\n wbTheme,\n}: ImagePreviewProps): React.ReactElement {\n return (\n <div\n className=\"perseus-image-preview-container\"\n data-testid=\"image-preview-container\"\n data-wb-theme={wbTheme}\n >\n <SvgImage\n src={src}\n alt={alt}\n width={width}\n height={height}\n // No need to allow zooming within the editor.\n allowZoom={false}\n />\n </div>\n );\n}\n","import {sizing} from \"@khanacademy/wonder-blocks-tokens\";\n\n// TODO(LEMS-3686): Use CSS modules after Wonder Blocks styles\n// are moved to a different layer.\nexport const wbFieldStyles = {\n root: {\n marginBlockEnd: sizing.size_080,\n },\n label: {\n paddingBlockEnd: sizing.size_040,\n },\n};\n\nexport const wbFieldStylesWithDescription = {\n ...wbFieldStyles,\n label: {\n ...wbFieldStyles.label,\n paddingBlockEnd: 0,\n },\n description: {\n paddingBlockStart: 0,\n paddingBlockEnd: sizing.size_040,\n },\n};\n\n/**\n * Checks if a dimension is invalid. A dimension is valid if it's\n * a positive, non-infinite number.\n * @param dimension - The dimension (height or width) to check.\n * @returns True if the dimension is invalid, false otherwise.\n */\nexport function isInvalidDimension(dimension: number): boolean {\n return isNaN(dimension) || dimension <= 0 || dimension === Infinity;\n}\n","import * as React from \"react\";\n\nimport InfoTip from \"../../../components/info-tip\";\nimport LabeledSwitch from \"../../../components/labeled-switch\";\n\nimport styles from \"./dark-mode-toggle.module.css\";\n\nimport type {\n PerseusImageBackground,\n PerseusImageWidgetOptions,\n} from \"@khanacademy/perseus-core\";\n\ninterface Props {\n backgroundImage: PerseusImageBackground;\n editingDisabled?: boolean;\n onShowToggle: (theme?: string) => void;\n onSuppressToggle: (changes: Partial<PerseusImageWidgetOptions>) => void;\n}\n\nexport default function DarkModeToggle({\n backgroundImage,\n onShowToggle,\n onSuppressToggle,\n editingDisabled = false,\n}: Props) {\n const [showDarkMode, setShowDarkMode] = React.useState(false);\n // Using `new URL()` instead of `URL.canParse`, because it unavailable\n // before Safari 17 (current minimum is Safari 16.6).\n const imageUrl: URL | null = (() => {\n try {\n return new URL(backgroundImage.url ?? \"\");\n } catch {\n return null;\n }\n })();\n const suppressFilter = imageUrl?.searchParams.has(\"dark-mode\") ?? false;\n\n const toggleDarkMode = () => {\n onShowToggle(showDarkMode ? undefined : \"syl-dark\");\n setShowDarkMode(!showDarkMode);\n };\n const toggleSuppressFilter = () => {\n onSuppressToggle({\n backgroundImage: {\n ...backgroundImage,\n url: setDarkModeOptionInUrl(suppressFilter ? undefined : \"off\"),\n },\n });\n };\n\n /**\n * Adds/Removes a query string to the image URL that causes the CSS style\n * rule to not match, which subsequently affects whether the invert filter\n * gets applied or not.\n * @param darkModeSetting string | undefined\n * The query string is applied to the URL only if the setting value matches\n * \"off\", otherwise the query string is removed.\n */\n const setDarkModeOptionInUrl = (darkModeSetting?: string): string => {\n try {\n const url = new URL(backgroundImage.url ?? \"\");\n if (darkModeSetting === \"off\") {\n url.searchParams.append(\"dark-mode\", \"off\");\n } else {\n url.searchParams.delete(\"dark-mode\");\n }\n return url.toString();\n } catch {\n return backgroundImage.url ?? \"\";\n }\n };\n\n return (\n <div className={styles.darkModeToggleContainer}>\n <LabeledSwitch\n label=\"Show in Dark Mode\"\n checked={showDarkMode}\n disabled={editingDisabled}\n onChange={toggleDarkMode}\n />\n <div className={styles.darkModeSuppressionContainer}>\n <LabeledSwitch\n label=\"Suppress Dark Mode Filter\"\n checked={suppressFilter}\n disabled={\n editingDisabled ||\n !isGraphicalImage(backgroundImage.url)\n }\n onChange={toggleSuppressFilter}\n />\n <InfoTip>\n When the color in the image is important (like in an image\n of a flag), you can suppress the filter that is used to make\n images compatible with dark mode.\n {!isGraphicalImage(backgroundImage.url) && (\n <strong>\n {\" \"}\n This option is only available for PNG and SVG\n images. Other types of images (e.g. JPG, GIF) never\n change in dark mode.\n </strong>\n )}\n </InfoTip>\n </div>\n </div>\n );\n}\n\n/**\n * Determines whether an image is a \"graphical\" type (PNG or SVG) with large\n * flat areas of meaningful color and potentially a transparent background.\n */\n// exported for testing\nexport function isGraphicalImage(url: string | null | undefined): boolean {\n try {\n const {pathname} = new URL(url ?? \"\");\n return /\\.(png|svg)$/.test(pathname);\n } catch {\n return false;\n }\n}\n","import * as React from \"react\";\n\nimport InfoTip from \"../../../components/info-tip\";\nimport LabeledSwitch from \"../../../components/labeled-switch\";\n\nimport styles from \"./decorative-toggle.module.css\";\n\nimport type {PerseusImageWidgetOptions} from \"@khanacademy/perseus-core\";\n\ninterface Props {\n decorative?: boolean;\n hasPopulatedFields?: boolean;\n editingDisabled?: boolean;\n onChange: (changes: Partial<PerseusImageWidgetOptions>) => void;\n}\n\nexport default function DecorativeToggle({\n decorative,\n hasPopulatedFields,\n editingDisabled = false,\n onChange,\n}: Props) {\n function handleDecorativeToggle(newValue: boolean) {\n if (!newValue) {\n // If toggling off decorative, set decorative to false\n onChange({decorative: false});\n return;\n }\n\n if (!hasPopulatedFields) {\n onChange({decorative: true});\n return;\n }\n\n // eslint-disable-next-line no-alert\n const shouldReset = window.confirm(\n \"Setting this image as decorative will automatically reset all other fields (title, caption, alt text, and long description). Do you want to continue?\",\n );\n\n if (shouldReset) {\n onChange({\n decorative: true,\n alt: \"\",\n caption: undefined,\n title: undefined,\n longDescription: undefined,\n });\n }\n }\n\n return (\n <div className={styles.decorativeToggleContainer}>\n <div className={styles.flexRow}>\n <LabeledSwitch\n label=\"Decorative\"\n checked={decorative ?? false}\n disabled={editingDisabled}\n onChange={handleDecorativeToggle}\n />\n <InfoTip>\n <p>\n Mark this image as decorative and it will not have any\n alt text, description, title, or caption.\n </p>\n </InfoTip>\n </div>\n </div>\n );\n}\n","import {TextField} from \"@khanacademy/wonder-blocks-form\";\nimport * as React from \"react\";\n\nimport type {StyleType} from \"@khanacademy/wonder-blocks-core\";\n\ninterface Props {\n value: number;\n onChange: (value: number) => void;\n min?: number;\n max?: number;\n disabled?: boolean;\n onFocus?: (e: React.FocusEvent<HTMLInputElement>) => void;\n onBlur?: (e: React.FocusEvent<HTMLInputElement>) => void;\n style?: StyleType;\n}\n\n/**\n * This is a custom text field of type=\"number\" for use in Perseus Editors.\n *\n * This component makes it so that\n * 1. the text field's input number updates on scroll without\n * scrolling the page.\n * 2. the input is controlled as long as it does not have focus.\n * While it is focused, it becomes editable and emits onChange\n * events. This is useful to make sure that input behavior\n * remains predictable, rather than possibly having the cursor\n * jump around uenxpectedly.\n * 3. only valid, finite numbers are passed to `onChange`. NaN and +/-Infinity\n * are never emitted.\n *\n * NOTE 1: Native HTML number inputs do not update the number value on scroll,\n * they only scroll the page. Inputs in React do NOT work this way (explanation\n * here: https://stackoverflow.com/a/68266494). By default, scrolling on a\n * focused number input in React causes BOTH the input value to change AND\n * the page to scroll. The behavior in this component is an improvement on\n * the React behavior, but it's the opposite of the native HTML behavior.\n *\n * NOTE 2: Firefox seems to have a custom override for input scroll. Even\n * with this stopPropogation, Firefox matches the native HTML behavior.\n */\nconst ScrolllessNumberTextField = (props: Props) => {\n const {value, onChange, ...restOfProps} = props;\n const [focused, setFocused] = React.useState(false);\n const [wipValue, setWipValue] = React.useState(\"\");\n\n const inputRef = React.useRef<HTMLInputElement>(null);\n\n React.useEffect(() => {\n const ref = inputRef.current;\n\n // stopPropogation makes it so that the page scroll event is not\n // triggered when the input is focused and the user scrolls.\n // The input value will still change on scroll.\n const ignoreScroll = (e) => {\n e.stopPropagation();\n };\n\n ref?.addEventListener(\"wheel\", ignoreScroll);\n\n return () => {\n ref?.removeEventListener(\"wheel\", ignoreScroll);\n };\n }, [inputRef]);\n\n return (\n <TextField\n {...restOfProps}\n type=\"number\"\n value={focused ? wipValue : String(value)}\n onChange={(newValue) => {\n setWipValue(newValue);\n if (isFiniteNumeric(newValue)) {\n onChange(+newValue);\n }\n }}\n onFocus={(e) => {\n setWipValue(String(value));\n setFocused(true);\n\n props.onFocus?.(e);\n }}\n onBlur={(e) => {\n setFocused(false);\n\n props.onBlur?.(e);\n }}\n ref={inputRef}\n />\n );\n};\n\nfunction isFiniteNumeric(value: string): boolean {\n return value.trim() !== \"\" && Number.isFinite(+value);\n}\n\nexport default ScrolllessNumberTextField;\n","import {Util} from \"@khanacademy/perseus\";\nimport Banner from \"@khanacademy/wonder-blocks-banner\";\nimport Button from \"@khanacademy/wonder-blocks-button\";\nimport {LabeledField} from \"@khanacademy/wonder-blocks-labeled-field\";\nimport {sizing} from \"@khanacademy/wonder-blocks-tokens\";\nimport {BodyMonospace} from \"@khanacademy/wonder-blocks-typography\";\nimport arrowCounterClockwise from \"@phosphor-icons/core/bold/arrow-counter-clockwise-bold.svg\";\nimport * as React from \"react\";\n\nimport ScrolllessNumberTextField from \"../../../components/scrollless-number-text-field\";\nimport styles from \"../image-editor.module.css\";\nimport {isInvalidDimension, wbFieldStyles} from \"../utils\";\n\nimport type {\n PerseusImageBackground,\n PerseusImageWidgetOptions,\n} from \"@khanacademy/perseus-core\";\n\n// 1024 * 1024 = 1,048,576\nconst LARGE_DIMENSION_THRESHOLD = 1048576;\n\ninterface Props {\n backgroundImage: PerseusImageBackground;\n scale: number;\n editingDisabled?: boolean;\n onChange: (changes: Partial<PerseusImageWidgetOptions>) => void;\n}\n\nexport default function ImageScaleInput({\n backgroundImage,\n scale,\n editingDisabled = false,\n onChange,\n}: Props) {\n const width = backgroundImage.width ?? 0;\n const height = backgroundImage.height ?? 0;\n // Dimension needs to be a positive real number.\n const hasInvalidDimensions =\n isInvalidDimension(width) || isInvalidDimension(height);\n\n function handleScaleChange(newScale: number) {\n // Scale needs to be a positive number.\n if (newScale <= 0) {\n return;\n }\n\n onChange({\n scale: newScale,\n });\n }\n\n function handleScaledWidthChange(newScaledWidth: number) {\n // Width needs to be a positive number.\n if (newScaledWidth <= 0) {\n return;\n }\n\n // Avoid dividing by zero.\n if (width === 0) {\n return;\n }\n\n onChange({\n scale: newScaledWidth / width,\n });\n }\n\n function handleScaledHeightChange(newScaledHeight: number) {\n // Height needs to be a positive number.\n if (newScaledHeight <= 0) {\n return;\n }\n\n // Avoid dividing by zero.\n if (height === 0) {\n return;\n }\n\n onChange({\n scale: newScaledHeight / height,\n });\n }\n\n async function handleResetToOriginalSize() {\n if (!backgroundImage.url) {\n return;\n }\n\n const naturalSize = await Util.getImageSizeModern(backgroundImage.url);\n const [naturalWidth, naturalHeight] = naturalSize;\n\n if (\n naturalWidth === backgroundImage.width &&\n naturalHeight === backgroundImage.height\n ) {\n return;\n }\n\n onChange({\n backgroundImage: {\n ...backgroundImage,\n width: naturalWidth,\n height: naturalHeight,\n },\n });\n }\n\n const hasLargeDimensions = width * height > LARGE_DIMENSION_THRESHOLD;\n\n return (\n <div className={styles.dimensionsContainer}>\n <BodyMonospace>\n Natural size: {width} x {height}\n </BodyMonospace>\n <Button\n kind=\"tertiary\"\n size=\"small\"\n startIcon={arrowCounterClockwise}\n disabled={editingDisabled}\n onClick={handleResetToOriginalSize}\n >\n Recalculate natural size\n </Button>\n\n {hasLargeDimensions && (\n <Banner\n kind=\"warning\"\n text=\"Large images may cause slow performance for learners. Please use a max size of 1024 x 1024.\"\n />\n )}\n\n <div className={styles.horizontalLine} />\n\n {hasInvalidDimensions && (\n <Banner\n kind=\"warning\"\n text='Image size is invalid. Please use the \"Recalculate natural size\" button to enable scaling.'\n // TODO(LEMS-3686): Use CSS modules after Wonder Blocks\n // supports it instead of inline styles.\n styles={{root: {marginBottom: sizing.size_080}}}\n />\n )}\n\n <LabeledField\n label=\"Scale\"\n description=\"Use 1 to display image at original size.\"\n field={\n <ScrolllessNumberTextField\n value={scale}\n min={0}\n onChange={handleScaleChange}\n disabled={hasInvalidDimensions || editingDisabled}\n />\n }\n styles={wbFieldStyles}\n />\n <div className={styles.dimensionsFieldContainer}>\n <LabeledField\n label=\"Scaled Width\"\n field={\n <ScrolllessNumberTextField\n value={width * scale}\n min={0}\n onChange={handleScaledWidthChange}\n disabled={hasInvalidDimensions || editingDisabled}\n />\n }\n styles={wbFieldStyles}\n />\n <span className={styles.xSpan}>x</span>\n <LabeledField\n label=\"Scaled Height\"\n field={\n <ScrolllessNumberTextField\n value={height * scale}\n min={0}\n onChange={handleScaledHeightChange}\n disabled={hasInvalidDimensions || editingDisabled}\n />\n }\n styles={wbFieldStyles}\n />\n </div>\n </div>\n );\n}\n","import Banner from \"@khanacademy/wonder-blocks-banner\";\nimport {TextArea} from \"@khanacademy/wonder-blocks-form\";\nimport {LabeledField} from \"@khanacademy/wonder-blocks-labeled-field\";\nimport {sizing} from \"@khanacademy/wonder-blocks-tokens\";\nimport {BodyText} from \"@khanacademy/wonder-blocks-typography\";\nimport {StyleSheet} from \"aphrodite\";\nimport * as React from \"react\";\n\nimport ImagePreview from \"../../../components/image-preview\";\nimport styles from \"../image-editor.module.css\";\nimport {wbFieldStyles, wbFieldStylesWithDescription} from \"../utils\";\n\nimport DarkModeToggle from \"./dark-mode-toggle\";\nimport DecorativeToggle from \"./decorative-toggle\";\nimport ImageScaleInput from \"./image-scale-input\";\n\nimport type {APIOptions} from \"@khanacademy/perseus\";\nimport type {PerseusImageWidgetOptions} from \"@khanacademy/perseus-core\";\n\nconst MIN_ALT_TEXT_LENGTH = 8;\nconst MAX_ALT_TEXT_LENGTH = 125;\nconst altTextTooLongError =\n \"Keep alt succinct at roughly 125 characters in length. Please pair the alt with a long description if you need significantly more text to sufficiently describe the image.\";\nconst altTextTooShortError =\n \"Add more detail to describe your image. While alt text should be brief, it must also describe the image well.\";\n\ninterface Props extends PerseusImageWidgetOptions {\n apiOptions: APIOptions;\n onChange: (changes: Partial<PerseusImageWidgetOptions>) => void;\n}\n\nexport default function ImageSettings({\n alt,\n apiOptions,\n backgroundImage,\n scale = 1,\n caption,\n decorative,\n longDescription,\n title,\n onChange,\n}: Props) {\n const [altFieldWarning, setAltFieldWarning] = React.useState<string | null>(\n null,\n );\n const [wbTheme, setWBTheme] = React.useState<string | undefined>(undefined);\n\n if (!backgroundImage.url) {\n return null;\n }\n\n const editingDisabled = apiOptions?.editingDisabled ?? false;\n\n const hasPopulatedFields = Boolean(\n alt || caption || title || longDescription,\n );\n\n // Show \"alt text too long\" error on change so the user is notified\n // as they type that they're writing too much.\n function handleAltFieldChange(value: string) {\n if (value.length === 0) {\n // If the user clears the alt text, clear the error\n setAltFieldWarning(null);\n } else if (value.length > MAX_ALT_TEXT_LENGTH) {\n setAltFieldWarning(altTextTooLongError);\n } else if (value.length >= MIN_ALT_TEXT_LENGTH) {\n setAltFieldWarning(null);\n }\n onChange({alt: value});\n }\n\n // Only show \"alt text too short\" error on blur - we don't want to show\n // it on change, as that would show the error immediately as the user\n // starts typing, which would be disruptive.\n function handleAltFieldBlur(value: string) {\n if (value.length > 0 && value.length < MIN_ALT_TEXT_LENGTH) {\n setAltFieldWarning(altTextTooShortError);\n }\n }\n\n return (\n <>\n {/* Preview */}\n <LabeledField\n label=\"Preview\"\n field={\n <>\n <DarkModeToggle\n editingDisabled={editingDisabled}\n backgroundImage={backgroundImage}\n onShowToggle={setWBTheme}\n onSuppressToggle={onChange}\n />\n <ImagePreview\n src={backgroundImage.url}\n alt={`Preview: ${alt || \"No alt text\"}`}\n width={backgroundImage.width}\n height={backgroundImage.height}\n wbTheme={wbTheme}\n />\n </>\n }\n styles={wbFieldStyles}\n />\n\n {/* Scale (image dimensions) */}\n <ImageScaleInput\n backgroundImage={backgroundImage}\n scale={scale}\n editingDisabled={editingDisabled}\n onChange={onChange}\n />\n\n {/* Decorative */}\n <DecorativeToggle\n decorative={decorative}\n hasPopulatedFields={hasPopulatedFields}\n editingDisabled={editingDisabled}\n onChange={onChange}\n />\n\n {/* Properties in DOM order */}\n\n {/* Title */}\n <LabeledField\n label=\"Title\"\n field={\n <TextArea\n value={title ?? \"\"}\n onChange={(value) => onChange({title: value})}\n disabled={decorative || editingDisabled}\n autoResize={true}\n />\n }\n styles={wbFieldStyles}\n />\n\n {/* Alt text */}\n <div className={styles.altTextFieldContainer}>\n <LabeledField\n label=\"Alt text\"\n description=\"Summarize the image using up to 125 characters.\"\n field={\n <TextArea\n value={alt ?? \"\"}\n onBlur={(e) => handleAltFieldBlur(e.target.value)}\n onChange={handleAltFieldChange}\n disabled={decorative || editingDisabled}\n autoResize={true}\n />\n }\n styles={wbFieldStylesWithDescription}\n />\n <BodyText\n size=\"xsmall\"\n tag=\"span\"\n style={wbStyles.characterCounter}\n >\n {alt?.length ?? 0} characters\n </BodyText>\n </div>\n\n {altFieldWarning && (\n <Banner\n kind=\"warning\"\n text={altFieldWarning}\n styles={{root: {marginBottom: sizing.size_080}}}\n />\n )}\n\n {/* Long Description */}\n <LabeledField\n label=\"Long description\"\n field={\n <TextArea\n value={longDescription ?? \"\"}\n onChange={(value) => onChange({longDescription: value})}\n disabled={decorative || editingDisabled}\n autoResize={true}\n />\n }\n styles={wbFieldStyles}\n />\n\n {/* Caption */}\n <LabeledField\n label=\"Caption\"\n field={\n <TextArea\n value={caption ?? \"\"}\n onChange={(value) => onChange({caption: value})}\n disabled={decorative || editingDisabled}\n autoResize={true}\n />\n }\n styles={wbFieldStyles}\n />\n </>\n );\n}\n\n// TODO(LEMS-3686): Use CSS modules after Wonder Blocks styles\n// are moved to a different layer.\nconst wbStyles = StyleSheet.create({\n characterCounter: {\n position: \"absolute\",\n insetBlockEnd: 0,\n insetInlineEnd: 8,\n },\n});\n","import {Util} from \"@khanacademy/perseus\";\nimport {TextField} from \"@khanacademy/wonder-blocks-form\";\nimport {LabeledField} from \"@khanacademy/wonder-blocks-labeled-field\";\nimport React from \"react\";\n\nimport {wbFieldStylesWithDescription} from \"../utils\";\n\nimport type {\n PerseusImageBackground,\n PerseusImageWidgetOptions,\n} from \"@khanacademy/perseus-core\";\n\n// Match any image URL (including \"web+graphie\" links) that is hosted by KA.\n// We're somewhat generous in our AWS URL matching\n// (\"ka-<something>.s3.amazonaws.com\") so that we don't have to update Perseus\n// every time we add a new proxied AWS bucket.\nconst INTERNALLY_HOSTED_DOMAINS =\n \"(\" +\n \"ka-.*.s3.amazonaws.com|\" +\n \"(fastly|cdn).kastatic.org|\" +\n \"khanacademy.org|\" +\n \"kasandbox.org\" +\n \")\";\nconst INTERNALLY_HOSTED_URL_RE = new RegExp(\n \"^(https?|web\\\\+graphie)://[^/]*\" + INTERNALLY_HOSTED_DOMAINS,\n);\n\ninterface Props {\n backgroundImage: PerseusImageBackground;\n onChange: (changes: Partial<PerseusImageWidgetOptions>) => void;\n}\n\nexport default function ImageUrlInput({backgroundImage, onChange}: Props) {\n const uniqueId = React.useId();\n const urlId = `${uniqueId}-url`;\n\n const [urlFieldValue, setUrlFieldValue] = React.useState<string>(\n backgroundImage.url || \"\",\n );\n const [backgroundImageError, setBackgroundImageError] = React.useState<\n string | null\n >(null);\n\n // Sync local state with incoming props to prevent stale state\n React.useEffect(() => {\n setUrlFieldValue(backgroundImage.url || \"\");\n }, [backgroundImage.url]);\n\n function setUrl(url: string, width: number, height: number) {\n const image = {...backgroundImage};\n\n image.url = url;\n image.width = width;\n image.height = height;\n const box = [image.width, image.height] satisfies [number, number];\n onChange({\n backgroundImage: image,\n box: box,\n });\n }\n\n async function onUrlChange(url: string) {\n // Clear previous errors\n setBackgroundImageError(null);\n\n // Don't try to load the image if there is no URL.\n if (!url) {\n setUrl(url, 0, 0);\n return;\n }\n\n // Don't update anything if the URL hasn't actually changed.\n if (url === backgroundImage.url) {\n return;\n }\n\n // Require the image to be hosted by Khan Academy.\n if (url && !INTERNALLY_HOSTED_URL_RE.test(url)) {\n setBackgroundImageError(\n \"Images must be from sites hosted by Khan Academy. \" +\n \"Please input a Khan Academy-owned address, or use the \" +\n \"Add Image tool to rehost an existing image\",\n );\n return;\n }\n\n // Try to load the image.\n try {\n const size = await Util.getImageSizeModern(url);\n setUrl(url, size[0], size[1]);\n } catch (error) {\n setBackgroundImageError(\n `There was an error loading the image URL: ${JSON.stringify(\n error,\n null,\n 2,\n )}`,\n );\n }\n }\n\n return (\n <LabeledField\n label=\"Image URL\"\n description=\"Paste an image or graphie image URL.\"\n field={\n <TextField\n id={urlId}\n value={urlFieldValue}\n onBlur={(e) => onUrlChange(e.target.value)}\n onChange={(value) => setUrlFieldValue(value)}\n />\n }\n errorMessage={backgroundImageError}\n styles={wbFieldStylesWithDescription}\n />\n );\n}\n","import {\n imageLogic,\n type PerseusImageWidgetOptions,\n} from \"@khanacademy/perseus-core\";\nimport * as React from \"react\";\n\nimport EditorJsonify from \"../../mixins/editor-jsonify\";\n\nimport ImageSettings from \"./components/image-settings\";\nimport ImageUrlInput from \"./components/image-url-input\";\n\nimport type {APIOptions} from \"@khanacademy/perseus\";\n\ninterface Props extends PerseusImageWidgetOptions {\n apiOptions: APIOptions;\n onChange: (options: PerseusImageWidgetOptions) => void;\n}\n\n// JSDoc will be shown in Storybook widget editor description\n/**\n * An editor for adding an image widget that allows users to display and configure images within content.\n */\nclass ImageEditor extends React.Component<Props> {\n static displayName = \"ImageEditor\";\n\n static defaultProps: PerseusImageWidgetOptions =\n imageLogic.defaultWidgetOptions;\n\n handleChange = (changes: Partial<PerseusImageWidgetOptions>) => {\n this.props.onChange({\n title: this.props.title,\n caption: this.props.caption,\n alt: this.props.alt,\n longDescription: this.props.longDescription,\n decorative: this.props.decorative,\n backgroundImage: this.props.backgroundImage,\n scale: this.props.scale,\n labels: this.props.labels,\n range: this.props.range,\n box: this.props.box,\n ...changes,\n });\n };\n\n serialize() {\n return EditorJsonify.serialize.call(this);\n }\n\n render() {\n return (\n <>\n <ImageUrlInput {...this.props} onChange={this.handleChange} />\n <ImageSettings {...this.props} onChange={this.handleChange} />\n </>\n );\n }\n}\n\nexport default ImageEditor;\n","import Clickable from \"@khanacademy/wonder-blocks-clickable\";\nimport {View} from \"@khanacademy/wonder-blocks-core\";\nimport {semanticColor, spacing} from \"@khanacademy/wonder-blocks-tokens\";\nimport {BodyText} from \"@khanacademy/wonder-blocks-typography\";\nimport {StyleSheet} from \"aphrodite\";\nimport * as React from \"react\";\n\nimport ToggleableCaret from \"./toggleable-caret\";\n\nfunction Heading({\n title,\n isOpen,\n isCollapsible,\n onToggle,\n}: {\n title: string;\n isOpen: boolean;\n isCollapsible: boolean;\n onToggle?: (isOpen: boolean) => void;\n}) {\n return (\n <Clickable\n style={[styles.container, !isCollapsible && styles.notClickable]}\n disabled={!isCollapsible}\n onClick={() => isCollapsible && onToggle?.(!isOpen)}\n >\n {() => (\n <View style={styles.heading}>\n <BodyText size=\"small\" weight=\"bold\" tag=\"span\">\n {title}\n </BodyText>\n {isCollapsible && <ToggleableCaret isExpanded={isOpen} />}\n </View>\n )}\n </Clickable>\n );\n}\n\nconst styles = StyleSheet.create({\n container: {\n marginBlockStart: spacing.small_12,\n // NOTE(jeremy): This is the inverse of the @editorPadding CSS\n // variable found in perseus-editor.css. For now, it must\n // match otherwise there's a gap from this header to the edge\n // of the editor borders.\n marginInline: -10,\n backgroundColor: semanticColor.core.background.neutral.subtle,\n padding: spacing.xSmall_8,\n width: \"calc(100% + 20px)\",\n },\n heading: {\n flexDirection: \"row\",\n justifyContent: \"space-between\",\n userSelect: \"none\",\n },\n notClickable: {\n // We don't need the text to be grayed out.\n color: \"inherit\",\n // We don't need the pointer to show the \"not allowed\" symbol.\n cursor: \"default\",\n },\n});\n\nexport default Heading;\n","import Clickable from \"@khanacademy/wonder-blocks-clickable\";\nimport {View} from \"@khanacademy/wonder-blocks-core\";\nimport * as React from \"react\";\n\nimport styles from \"./segmented-control.module.css\";\n\nimport type {StyleType} from \"@khanacademy/wonder-blocks-core\";\n\ninterface ToggleButtonProps {\n selected: boolean;\n onClick: () => void;\n disabled?: boolean;\n role?: \"radio\" | \"checkbox\";\n \"aria-label\"?: string;\n children: React.ReactNode;\n style?: StyleType;\n}\n\n/**\n * A single selectable segment. Built on Wonder Blocks `Clickable` (the same\n * primitive `Pill` uses) so it gets focus handling and a real `disabled` /\n * `aria-disabled` state for free, while letting us render arbitrary children\n * (math, icons) and set a `radio`/`checkbox` role.\n *\n * Disabled styling intentionally uses the WB disabled tokens so it reads as\n * disabled consistently with the rest of the design system (no opacity hack).\n */\nfunction ToggleButton({\n selected,\n onClick,\n disabled = false,\n role = \"radio\",\n children,\n style,\n \"aria-label\": ariaLabel,\n}: ToggleButtonProps): React.ReactElement {\n return (\n <Clickable\n role={role}\n aria-checked={selected}\n aria-label={ariaLabel}\n disabled={disabled}\n onClick={onClick}\n className={styles.segment}\n style={style}\n >\n {() => children}\n </Clickable>\n );\n}\n\ninterface Option {\n value: string;\n label: React.ReactNode;\n ariaLabel?: string;\n}\n\ninterface SegmentedControlProps {\n options: ReadonlyArray<Option>;\n selectedValue: string | null | undefined;\n onChange: (value: string) => void;\n disabled?: boolean;\n \"aria-label\"?: string;\n}\n\n/**\n * A row of mutually-exclusive (single-select) segments — a segmented control.\n * Replaces the deprecated `Pill`-as-button pattern. Pass `disabled` to disable\n * the whole group (e.g. `editingDisabled`).\n */\nexport function SegmentedControl({\n options,\n selectedValue,\n onChange,\n disabled = false,\n \"aria-label\": ariaLabel,\n}: SegmentedControlProps): React.ReactElement {\n return (\n <View role=\"radiogroup\" aria-label={ariaLabel} className={styles.group}>\n {options.map((option) => (\n <ToggleButton\n key={option.value}\n role=\"radio\"\n selected={option.value === selectedValue}\n aria-label={option.ariaLabel}\n disabled={disabled}\n onClick={() => onChange(option.value)}\n >\n {option.label}\n </ToggleButton>\n ))}\n </View>\n );\n}\n\ninterface ToggleButtonGroupProps {\n options: ReadonlyArray<Option>;\n selectedValues: ReadonlyArray<string>;\n onToggle: (value: string) => void;\n disabled?: boolean;\n \"aria-label\"?: string;\n}\n\n/**\n * A group of independent (multi-select) toggles — i.e. a set of checkboxes\n * styled as buttons. Unlike `SegmentedControl`, more than one can be selected,\n * and the group wraps onto multiple rows as an aligned grid (consistent row and\n * column gaps) when it doesn't fit on one line. `onToggle` is called with the\n * value that was clicked; the caller flips it in/out of `selectedValues`.\n */\nexport function ToggleButtonGroup({\n options,\n selectedValues,\n onToggle,\n disabled = false,\n \"aria-label\": ariaLabel,\n}: ToggleButtonGroupProps): React.ReactElement {\n return (\n <View role=\"group\" aria-label={ariaLabel} className={styles.wrapGroup}>\n {options.map((option) => (\n <ToggleButton\n key={option.value}\n role=\"checkbox\"\n selected={selectedValues.includes(option.value)}\n aria-label={option.ariaLabel}\n disabled={disabled}\n onClick={() => onToggle(option.value)}\n >\n {option.label}\n </ToggleButton>\n ))}\n </View>\n );\n}\n","import {KhanMath} from \"@khanacademy/kmath\";\nimport {components, Util} from \"@khanacademy/perseus\";\nimport {\n numericInputLogic,\n type PerseusNumericInputWidgetOptions,\n} from \"@khanacademy/perseus-core\";\nimport Button from \"@khanacademy/wonder-blocks-button\";\nimport {View} from \"@khanacademy/wonder-blocks-core\";\nimport {BodyText} from \"@khanacademy/wonder-blocks-typography\";\nimport trashIcon from \"@phosphor-icons/core/bold/trash-bold.svg\";\nimport * as React from \"react\";\nimport _ from \"underscore\";\n\nimport Heading from \"../../components/heading\";\nimport InfoTip from \"../../components/info-tip\";\nimport PerseusEditorAccordion from \"../../components/perseus-editor-accordion\";\nimport {\n SegmentedControl,\n ToggleButtonGroup,\n} from \"../../components/segmented-control\";\nimport {TypedSingleSelect} from \"../../components/typed-single-select\";\nimport Editor from \"../../editor\";\nimport {deprecatedChangeableChange} from \"../../mixins/changeable\";\nimport EditorJsonify from \"../../mixins/editor-jsonify\";\n\nimport styles from \"./numeric-input-editor.module.css\";\n\nimport type {ChangeFn} from \"../../mixins/changeable\";\nimport type {APIOptionsWithDefaults} from \"@khanacademy/perseus\";\n\nconst {NumberInput, TextInput} = components;\nconst {firstNumericalParse} = Util;\n\nconst answerFormButtons = [\n {title: \"Integers\", value: \"integer\", content: \"6\"},\n {title: \"Decimals\", value: \"decimal\", content: \"0.75\"},\n {title: \"Proper fractions\", value: \"proper\", content: \"\\u2157\"},\n {\n title: \"Improper fractions\",\n value: \"improper\",\n content: \"\\u2077\\u2044\\u2084\",\n },\n {title: \"Mixed numbers\", value: \"mixed\", content: \"1\\u00BE\"},\n {title: \"Numbers with \\u03C0\", value: \"pi\", content: \"\\u03C0\"},\n];\n\nconst initAnswer = (status: string) => {\n return {\n value: null,\n status: status,\n message: \"\",\n simplify: \"required\",\n answerForms: [],\n strict: false,\n maxError: null,\n };\n};\n\n// The \"static\" property is not used in this widget (per the type definition comments)\ntype Props = Omit<PerseusNumericInputWidgetOptions, \"static\"> & {\n onChange: (results: any) => any;\n apiOptions: APIOptionsWithDefaults;\n};\n\ninterface State {\n lastStatus: string;\n showAnswerDetails: boolean[];\n showSettings: boolean;\n showAnswers: boolean;\n}\n\n// JSDoc will be shown in Storybook widget editor description\n/**\n * An editor for adding a numeric input widget that allows users to enter\n * numerical values with specific validation rules.\n */\nclass NumericInputEditor extends React.Component<Props, State> {\n static displayName = \"NumericInputEditor\";\n\n static defaultProps = {\n ...numericInputLogic.defaultWidgetOptions,\n };\n\n constructor(props: Props) {\n super(props);\n this.state = {\n lastStatus: \"wrong\",\n showAnswerDetails: Array(this.props.answers.length).fill(true),\n showSettings: true,\n showAnswers: true,\n };\n }\n\n change: ChangeFn = (...args) => {\n return deprecatedChangeableChange.apply(this, args);\n };\n\n onToggleAnswers = (answerIndex: number) => {\n const showAnswerDetails = this.state.showAnswerDetails.slice();\n showAnswerDetails[answerIndex] = !showAnswerDetails[answerIndex];\n this.setState({showAnswerDetails: showAnswerDetails});\n };\n\n onToggleAnswerForm = (answerIndex: number, answerForm) => {\n let answerForms: string[] = [\n ...(this.props.answers[answerIndex][\"answerForms\"] ?? []),\n ];\n const formSelected = answerForms.includes(answerForm);\n if (!formSelected) {\n answerForms.push(answerForm);\n } else {\n answerForms = answerForms.filter((form) => form !== answerForm);\n }\n const updateFn = this.updateAnswer(answerIndex, \"answerForms\");\n if (updateFn) {\n updateFn(answerForms);\n }\n };\n\n onToggleHeading = (accordionName: string) => {\n return () => {\n const toggleName = `show${accordionName}`;\n const newState = {...this.state};\n newState[toggleName] = !newState[toggleName];\n this.setState(newState);\n };\n };\n\n onTrashAnswer = (choiceIndex) => {\n if (choiceIndex >= 0 && choiceIndex < this.props.answers.length) {\n const answers = this.props.answers.slice(0);\n answers.splice(choiceIndex, 1);\n this.props.onChange({answers: answers});\n }\n };\n\n onSpace = (e, callback, ...args) => {\n if (e.key === \" \") {\n e.preventDefault(); // prevent page shifting\n callback.apply(this, args);\n }\n };\n\n onStatusChange = (choiceIndex) => {\n const statuses = [\"wrong\", \"ungraded\", \"correct\"];\n const answers = this.props.answers;\n const i = statuses.indexOf(answers[choiceIndex].status);\n const newStatus = statuses[(i + 1) % statuses.length];\n\n this.updateAnswer(choiceIndex, {\n status: newStatus,\n simplify: newStatus === \"correct\" ? \"required\" : \"accepted\",\n });\n };\n\n onEvaluationChange = (choiceIndex, newStatus) => {\n this.updateAnswer(choiceIndex, {\n status: newStatus,\n simplify: newStatus === \"correct\" ? \"required\" : \"accepted\",\n });\n };\n\n updateAnswer = (choiceIndex, update) => {\n if (!_.isObject(update)) {\n return _.partial(\n (choiceIndex, key, value) => {\n const update: Record<string, any> = {};\n update[key] = value;\n this.updateAnswer(choiceIndex, update);\n },\n choiceIndex,\n update,\n );\n }\n\n let answers = [\n // Have to do this to remove the `readonly` state from the prop\n ...this.props.answers,\n ];\n\n // Don't bother to make a new answer box unless we are editing the last\n // one.\n if (choiceIndex === answers.length) {\n const lastAnswer: any = initAnswer(this.state.lastStatus);\n answers = answers.concat(lastAnswer);\n }\n\n answers[choiceIndex] = _.extend({}, answers[choiceIndex], update);\n this.props.onChange({answers: answers});\n };\n\n addAnswer = () => {\n const lastAnswer: any = initAnswer(this.state.lastStatus);\n const answers = this.props.answers.concat(lastAnswer);\n const showAnswerDetails = this.state.showAnswerDetails.concat(true);\n this.setState({showAnswerDetails: showAnswerDetails});\n this.props.onChange({answers: answers});\n };\n\n // TODO(LEMS-3643): Remove `getSaveWarnings` once the frontend uses\n // the new linter rules for save warnings.\n getSaveWarnings = () => {\n // Filter out all the empty answers\n const warnings = [];\n if (_.contains(_.pluck(this.props.answers, \"value\"), \"\")) {\n // @ts-expect-error - TS2345 - Argument of type 'string' is not assignable to parameter of type 'never'.\n warnings.push(\"One or more answers is empty\");\n }\n this.props.answers.forEach((answer, i) => {\n const formatError =\n answer.strict &&\n (!answer.answerForms || answer.answerForms.length === 0);\n if (formatError) {\n warnings.push(\n // @ts-expect-error - TS2345 - Argument of type 'string' is not assignable to parameter of type 'never'.\n `Answer ${i + 1} is set to string format ` +\n \"matching, but no format was selected\",\n );\n }\n });\n return warnings;\n };\n\n serialize = () => {\n return EditorJsonify.serialize.call(this);\n };\n\n render() {\n const answers = this.props.answers;\n const editingDisabled = this.props.apiOptions.editingDisabled;\n\n const unsimplifiedAnswers = (i: any) => (\n <View className={styles.field}>\n {answers[i][\"status\"] !== \"correct\" && (\n <BodyText weight=\"semi\">\n Unsimplified answers are irrelevant for this status\n </BodyText>\n )}\n {answers[i][\"status\"] === \"correct\" && (\n <>\n <View className={styles.labelRow}>\n <BodyText weight=\"semi\">\n Unsimplified answers are\n </BodyText>\n <InfoTip>\n <p>\n Normally select \"ungraded\". This will give\n the user a message saying the answer is\n correct but not simplified. The user will\n then have to simplify it and re-enter, but\n will not be penalized. (5th grade and after)\n </p>\n <p>\n Select \"accepted\" only if the user is not\n expected to know how to simplify fractions\n yet. (Anything prior to 5th grade)\n </p>\n <p>\n Select \"wrong\" <em>only</em> if we are\n specifically assessing the ability to\n simplify.\n </p>\n </InfoTip>\n </View>\n <SegmentedControl\n aria-label=\"Unsimplified answers are\"\n disabled={editingDisabled}\n selectedValue={answers[i][\"simplify\"]}\n onChange={(value) =>\n this.updateAnswer(i, {simplify: value})\n }\n options={[\n {value: \"required\", label: \"Ungraded\"},\n {value: \"optional\", label: \"Accepted\"},\n {value: \"enforced\", label: \"Wrong\"},\n ]}\n />\n </>\n )}\n </View>\n );\n\n const suggestedAnswerTypes = (i: any) => (\n <>\n <View className={styles.field}>\n <View className={styles.labelRow}>\n <BodyText weight=\"semi\">\n Possible answer formats\n </BodyText>\n <InfoTip>\n <p>\n Formats will be autoselected for you based on\n the given answer; to show no suggested formats\n and accept all types, simply have a\n decimal/integer be the answer. Values with &pi;\n will have format \"pi\", and values that are\n fractions will have some subset (mixed will be\n \"mixed\" and \"proper\"; improper/proper will both\n be \"improper\" and \"proper\"). If you would like\n to specify that it is only a proper fraction (or\n only a mixed/improper fraction), deselect the\n other format. Except for specific cases, you\n should not need to change the autoselected\n formats.\n </p>\n <p>\n To restrict the answer to <em>only</em> an\n improper fraction (i.e. 7/4), select the\n improper fraction and toggle \"strict\" to true.\n This <b>will not</b> accept 1.75 as an answer.{\" \"}\n </p>\n <p>\n Unless you are testing that specific skill,\n please do not restrict the answer format.\n </p>\n </InfoTip>\n </View>\n <ToggleButtonGroup\n aria-label=\"Possible answer formats\"\n disabled={editingDisabled}\n selectedValues={answers[i][\"answerForms\"] ?? []}\n onToggle={(value) => this.onToggleAnswerForm(i, value)}\n options={answerFormButtons.map((format) => ({\n value: format.value,\n label: format.content,\n ariaLabel: format.title,\n }))}\n />\n </View>\n <View className={styles.field}>\n <BodyText weight=\"semi\">Answer formats are</BodyText>\n <SegmentedControl\n aria-label=\"Answer formats are\"\n disabled={editingDisabled}\n selectedValue={\n answers[i][\"strict\"] ? \"required\" : \"suggested\"\n }\n onChange={(value) =>\n this.updateAnswer(i, {strict: value === \"required\"})\n }\n options={[\n {value: \"suggested\", label: \"Suggested\"},\n {value: \"required\", label: \"Required\"},\n ]}\n />\n </View>\n </>\n );\n\n const inputSize = (\n <View className={styles.field}>\n <View className={styles.labelRow}>\n <BodyText weight=\"semi\">Width</BodyText>\n <InfoTip>\n <p>\n Use size \"Normal\" for all text boxes, unless there\n are multiple text boxes in one line and the answer\n area is too narrow to fit them.\n </p>\n </InfoTip>\n </View>\n <SegmentedControl\n aria-label=\"Width\"\n disabled={editingDisabled}\n selectedValue={this.props.size}\n onChange={(value) => this.change(\"size\")(value)}\n options={[\n {value: \"normal\", label: \"Normal (80px)\"},\n {value: \"small\", label: \"Small (40px)\"},\n ]}\n />\n </View>\n );\n\n const labelText = (\n <View className={styles.field}>\n <View className={styles.labelRow}>\n <BodyText weight=\"semi\">Answer Field Aria label</BodyText>\n <InfoTip>\n <p>\n Text to describe the Answer Field for screenreader\n users.\n </p>\n </InfoTip>\n </View>\n <TextInput\n labelText=\"aria label\"\n value={this.props.labelText}\n onChange={this.change(\"labelText\")}\n />\n </View>\n );\n\n const coefficientCheck = (\n <View className={styles.field}>\n <View className={styles.labelRow}>\n <BodyText weight=\"semi\">Number style</BodyText>\n <InfoTip>\n <p>\n A coefficient style number allows the student to use\n - for -1 and an empty string to mean 1.\n </p>\n </InfoTip>\n </View>\n <SegmentedControl\n aria-label=\"Number style\"\n disabled={editingDisabled}\n selectedValue={\n this.props.coefficient ? \"coefficient\" : \"standard\"\n }\n onChange={(value) =>\n this.props.onChange({\n coefficient: value === \"coefficient\",\n })\n }\n options={[\n {value: \"standard\", label: \"Standard\"},\n {value: \"coefficient\", label: \"Coefficient\"},\n ]}\n />\n </View>\n );\n\n const instructions = {\n wrong: \"(address the mistake/misconception)\",\n ungraded: \"(explain in detail to avoid confusion)\",\n correct: \"(reinforce the user's understanding)\",\n } as const;\n\n const generateInputAnswerEditors = () =>\n answers.map((answer, i) => {\n const editor = (\n <Editor\n apiOptions={this.props.apiOptions}\n content={answer.message || \"\"}\n placeholder={\n \"Why is this answer \" +\n answer.status +\n \"?\\t\" +\n instructions[answer.status]\n }\n widgetEnabled={false}\n onChange={(newProps) => {\n if (\"content\" in newProps) {\n this.updateAnswer(i, {\n message: newProps.content,\n });\n }\n }}\n />\n );\n const statusProper =\n answer.status.charAt(0).toUpperCase() +\n answer.status.slice(1);\n const answerFormat = (answer.answerForms || []).at(-1);\n const answerString = KhanMath.toNumericString(\n answer.value ?? 0,\n answerFormat,\n );\n const answerRangeText = answer.maxError\n ? `± ${KhanMath.toNumericString(answer.maxError, answerFormat)}`\n : \"\";\n const answerHeading =\n answer.value === null\n ? \"New Answer\"\n : `${statusProper} answer: ${answerString} ${answerRangeText}`;\n\n return (\n <div className=\"perseus-widget-row answer-option\" key={i}>\n <PerseusEditorAccordion\n animated={true}\n expanded={this.state.showAnswerDetails[i]}\n onToggle={() => {\n this.onToggleAnswers(i);\n }}\n header={\n <BodyText weight=\"bold\" tag=\"span\">\n {answerHeading}\n </BodyText>\n }\n >\n <div\n className={\n \"input-answer-editor-value-container\" +\n (answer.maxError ? \" with-max-error\" : \"\")\n }\n >\n <View\n tag=\"label\"\n className={styles.inlineField}\n >\n <BodyText weight=\"semi\">\n User input\n </BodyText>\n <NumberInput\n value={answer.value}\n className=\"numeric-input-value\"\n placeholder=\"answer\"\n format={_.last(\n answer.answerForms || [],\n )}\n onFormatChange={(newValue, format) => {\n // NOTE(charlie): The mobile web expression\n // editor relies on this automatic answer\n // form resolution for determining when to\n // show the Pi symbol. If we get rid of it,\n // we should also disable Pi for\n // NumericInput and require problems that\n // use Pi to build on Expression.\n // Alternatively, we could store answers\n // as plaintext and parse them to determine\n // whether or not to reveal Pi on the\n // keypad (right now, answers are stored as\n // resolved values, like '0.125' rather\n // than '1/8').\n let forms;\n if (format === \"pi\") {\n forms = [\"pi\"];\n } else if (format === \"mixed\") {\n forms = [\"proper\", \"mixed\"];\n } else if (\n format === \"proper\" ||\n format === \"improper\"\n ) {\n forms = [\"proper\", \"improper\"];\n }\n this.updateAnswer(i, {\n value: firstNumericalParse(\n newValue,\n ),\n answerForms: forms,\n });\n }}\n onChange={(newValue) => {\n this.updateAnswer(i, {\n value: firstNumericalParse(\n newValue,\n ),\n });\n }}\n />\n </View>\n <span className=\"max-error-plusmn\">\n &plusmn;\n </span>\n <NumberInput\n className=\"max-error-input-value\"\n placeholder={0}\n value={answers[i][\"maxError\"]}\n format={_.last(answer.answerForms || [])}\n onChange={this.updateAnswer(i, \"maxError\")}\n />\n </div>\n <View className={styles.field}>\n <BodyText weight=\"semi\">Status</BodyText>\n <SegmentedControl\n aria-label=\"Status\"\n disabled={editingDisabled}\n selectedValue={answers[i][\"status\"]}\n onChange={(value) =>\n this.onEvaluationChange(i, value)\n }\n options={[\n {value: \"correct\", label: \"Correct\"},\n {value: \"wrong\", label: \"Wrong\"},\n {value: \"ungraded\", label: \"Ungraded\"},\n ]}\n />\n </View>\n {unsimplifiedAnswers(i)}\n <View className={styles.field}>\n <BodyText weight=\"semi\">\n (Articles only) Message shown to user\n </BodyText>\n {editor}\n </View>\n {suggestedAnswerTypes(i)}\n <Button\n startIcon={trashIcon}\n aria-label={`Delete ${answerHeading}`}\n className=\"delete-item-button\"\n disabled={editingDisabled}\n onClick={() => {\n this.onTrashAnswer(i);\n }}\n kind=\"tertiary\"\n >\n Delete\n </Button>\n </PerseusEditorAccordion>\n </div>\n );\n });\n\n return (\n <div className=\"perseus-input-number-editor\">\n <Heading\n title=\"General Settings\"\n isCollapsible={true}\n isOpen={this.state.showSettings}\n onToggle={this.onToggleHeading(\"Settings\")}\n />\n <div\n className={`perseus-editor-accordion-container ${this.state.showSettings ? \"expanded\" : \"collapsed\"}`}\n >\n <div className=\"perseus-editor-accordion-content\">\n {inputSize}\n\n <label>\n Text alignment\n <TypedSingleSelect\n selectedValue={this.props.textAlign}\n onChange={(value) => {\n this.props.onChange({textAlign: value});\n }}\n options={{\n left: \"Left\",\n center: \"Center\",\n right: \"Right\",\n }}\n placeholder=\"Select text alignment\"\n />\n </label>\n\n {coefficientCheck}\n {labelText}\n </div>\n </div>\n <Heading\n title=\"Answers\"\n isCollapsible={true}\n isOpen={this.state.showAnswers}\n onToggle={this.onToggleHeading(\"Answers\")}\n />\n <div\n className={`perseus-editor-accordion-container ${this.state.showAnswers ? \"expanded\" : \"collapsed\"}`}\n >\n <div className=\"perseus-editor-accordion-content\">\n {generateInputAnswerEditors()}\n <Button\n kind=\"tertiary\"\n disabled={editingDisabled}\n onClick={this.addAnswer}\n >\n Add new answer\n </Button>\n </div>\n </div>\n </div>\n );\n }\n}\n\nexport default NumericInputEditor;\n","import NumericInputEditor from \"../numeric-input-editor\";\n\n// JSDoc will be shown in Storybook widget editor description\n/**\n * An editor for adding an input number widget that allows users to enter numerical values.\n */\nclass InputNumberEditor extends NumericInputEditor {}\n\nexport default InputNumberEditor;\n","/* eslint-disable jsx-a11y/anchor-is-valid */\n\nimport {components, iconChevronDown, iconTrash} from \"@khanacademy/perseus\";\nimport * as React from \"react\";\n\nimport {\n iconChevronRight,\n iconCircleArrowDown,\n iconCircleArrowUp,\n} from \"../../styles/icon-paths\";\n\nconst {InlineIcon} = components;\n\ntype Props = {\n children: React.ReactElement<any> | ReadonlyArray<React.ReactElement<any>>;\n initiallyVisible: boolean;\n onDelete?: (() => void) | null;\n onDown?: (() => void) | null;\n onUp?: (() => void) | null;\n title: string | React.ReactElement<any>;\n};\n\ntype State = {\n show: boolean;\n};\n\nclass ElementContainer extends React.Component<Props, State> {\n static defaultProps: {\n initiallyVisible: boolean;\n title: string;\n } = {\n initiallyVisible: false,\n title: \"More\",\n };\n\n constructor(props: Props) {\n super(props);\n\n this.state = {\n show: props.initiallyVisible,\n };\n }\n\n toggle: (e: React.SyntheticEvent) => void = (e: React.SyntheticEvent) => {\n e.preventDefault();\n this.setState({show: !this.state.show});\n };\n\n render(): React.ReactNode {\n return (\n <div className=\"perseus-interaction-element\">\n <a\n href=\"#\"\n className={\n \"perseus-interaction-element-title \" +\n (this.state.show ? \"open\" : \"closed\")\n }\n onClick={this.toggle}\n >\n {this.state.show ? (\n <InlineIcon {...iconChevronDown} />\n ) : (\n <InlineIcon {...iconChevronRight} />\n )}\n {this.props.title}\n </a>\n <div\n className={\n \"perseus-interaction-element-content \" +\n (this.state.show ? \"enter\" : \"leave\")\n }\n >\n {this.props.children}\n {(this.props.onUp != null ||\n this.props.onDown != null ||\n this.props.onDelete != null) && (\n <div className=\"edit-controls\">\n {this.props.onUp != null && (\n <button onClick={this.props.onUp}>\n <InlineIcon {...iconCircleArrowUp} />\n </button>\n )}\n {this.props.onDown != null && (\n <button onClick={this.props.onDown}>\n <InlineIcon {...iconCircleArrowDown} />\n </button>\n )}\n {this.props.onDelete != null && (\n <button onClick={this.props.onDelete}>\n <InlineIcon {...iconTrash} />\n </button>\n )}\n </div>\n )}\n </div>\n </div>\n );\n }\n}\n\nexport default ElementContainer;\n","import {components, KhanColors} from \"@khanacademy/perseus\";\nimport * as React from \"react\";\n\nconst {ButtonGroup} = components;\n\nconst COLORS = [\n KhanColors.BLACK,\n KhanColors.BLUE,\n KhanColors.GREEN,\n KhanColors.PINK,\n KhanColors.PURPLE,\n KhanColors.RED,\n KhanColors.GRAY,\n];\n\nconst LIGHT_COLORS = [\n KhanColors.LIGHT_BLUE,\n KhanColors.LIGHT_ORANGE,\n KhanColors.LIGHT_PINK,\n KhanColors.LIGHT_GREEN,\n KhanColors.LIGHT_PURPLE,\n KhanColors.LIGHT_RED,\n \"#fff\",\n];\n\ntype Props = {\n lightColors?: boolean;\n value?: string;\n onChange: (value: string) => void;\n};\n\nclass ColorPicker extends React.Component<Props> {\n static defaultProps: {\n lightColors: boolean;\n value: any;\n } = {\n value: KhanColors.BLACK,\n lightColors: false,\n };\n\n render(): React.ReactNode {\n const colors = this.props.lightColors ? LIGHT_COLORS : COLORS;\n return (\n <ButtonGroup\n value={this.props.value}\n buttons={colors.map((color) => {\n return {\n value: color,\n content: (\n <span>\n <span\n className=\"colorpicker-circle\"\n style={{background: color}}\n />\n &nbsp;\n </span>\n ),\n };\n })}\n onChange={this.props.onChange}\n />\n );\n }\n}\n\nexport default ColorPicker;\n","import {components} from \"@khanacademy/perseus\";\nimport * as React from \"react\";\n\ntype Props = {\n value?: string;\n onChange: (value: string) => void;\n};\n\nconst {ButtonGroup} = components;\n\nclass DashPicker extends React.Component<Props> {\n static defaultProps: {\n value: string;\n } = {\n value: \"\",\n };\n\n render(): React.ReactNode {\n return (\n <ButtonGroup\n value={this.props.value}\n buttons={[\n {value: \"\", content: <span>&mdash;</span>},\n {value: \"-\", content: <span>&ndash;&ndash;&ndash;</span>},\n {\n value: \"- \",\n content: <span>&ndash;&nbsp;&nbsp;&ndash;</span>,\n },\n {\n value: \".\",\n content: <span>&middot;&middot;&middot;&middot;</span>,\n },\n {\n value: \". \",\n content: <span>&middot; &middot; &middot;</span>,\n },\n ]}\n onChange={this.props.onChange}\n />\n );\n }\n}\n\nexport default DashPicker;\n","import {createMathField, useMathInputI18n} from \"@khanacademy/math-input\";\nimport {View} from \"@khanacademy/wonder-blocks-core\";\nimport {semanticColor} from \"@khanacademy/wonder-blocks-tokens\";\nimport {StyleSheet} from \"aphrodite\";\nimport * as React from \"react\";\nimport {useRef, useEffect} from \"react\";\n\nimport type {MathFieldInterface} from \"@khanacademy/math-input\";\n\ntype Props = {\n value: string;\n onChange: (value: string) => void;\n};\n\n/**\n * A simple Mathquill MathField input for the InteractionEditor.\n * Unlike our other uses of Mathquill, we're not using a keypad here;\n * it's just the input itself for use writing TeX.\n */\nexport default function MathquillInput(props: Props) {\n const mathFieldWrapperRef = useRef<HTMLSpanElement>(null);\n const mathFieldInstance = useRef<MathFieldInterface>();\n const {locale, strings} = useMathInputI18n();\n\n useEffect(() => {\n // If we have the mount for the input, but not the input\n // make a new Mathquill input\n if (mathFieldWrapperRef.current && !mathFieldInstance.current) {\n // Initialize MathQuill.MathField instance\n mathFieldInstance.current = createMathField(\n mathFieldWrapperRef.current,\n locale,\n strings,\n // TODO(LEMS-2656): remove TS suppression\n // @ts-expect-error: Types of parameters 'mathField' and 'mq' are incompatible. Type 'EditableMathQuill | BaseMathQuill' is not assignable to type 'MathFieldInterface'.\n (baseConfig) => ({\n ...baseConfig,\n handlers: {\n edit: (mathField) => {\n // This handler is guaranteed to be called on change, but\n // unlike React it sometimes generates false positives.\n // One of these is on initialization (with an empty string\n // value), so we have to guard against that below.\n let value = mathField.latex();\n\n // Provide a MathQuill-compatible way to generate the\n // not-equals sign without pasting unicode or typing TeX\n value = value.replace(/<>/g, \"\\\\ne\");\n\n if (props.value !== value) {\n props.onChange(value);\n }\n },\n upOutOf: (mathField: MathFieldInterface) => {\n // This handler is called when the user presses the up\n // arrow key, but there is nowhere in the expression to go\n // up to (no numerator or exponent). For ease of use,\n // interpret this as an attempt to create an exponent.\n mathField.typedText(\"^\");\n },\n },\n }),\n );\n }\n });\n\n return (\n <View style={styles.outerWrapper}>\n <span\n ref={mathFieldWrapperRef}\n className=\"perseus-math-input mq-editable-field mq-math-mode\"\n />\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n outerWrapper: {\n display: \"inline-block\",\n borderStyle: \"solid\",\n borderWidth: 1,\n borderColor: semanticColor.core.border.neutral.default,\n borderRadius: 3,\n background: semanticColor.core.background.base.default,\n },\n});\n","import {components, Dependencies, KhanColors} from \"@khanacademy/perseus\";\nimport * as React from \"react\";\n\nimport {deprecatedChangeableChange} from \"../../mixins/changeable\";\n\nimport ColorPicker from \"./color-picker\";\nimport DashPicker from \"./dash-picker\";\nimport MathquillInput from \"./mathquill-input\";\n\nimport type {ChangeableProps} from \"../../mixins/changeable\";\n\nconst {NumberInput} = components;\n\ntype Props = ChangeableProps & {\n value: string;\n rangeMin: string;\n rangeMax: string;\n color: string;\n strokeDasharray: string;\n strokeWidth: number;\n};\n\ntype DefaultProps = {\n value: Props[\"value\"];\n rangeMin: Props[\"rangeMin\"];\n rangeMax: Props[\"rangeMax\"];\n color: Props[\"color\"];\n strokeDasharray: Props[\"strokeDasharray\"];\n strokeWidth: Props[\"strokeWidth\"];\n};\n\n// Editor for function plots\nclass FunctionEditor extends React.Component<Props> {\n static defaultProps: DefaultProps = {\n value: \"x\",\n rangeMin: \"-10\",\n rangeMax: \"10\",\n color: KhanColors.BLUE,\n strokeDasharray: \"\",\n strokeWidth: 2,\n };\n\n change: (arg1: any, arg2?: any, arg3?: any) => any = (...args) => {\n return deprecatedChangeableChange.apply(this, args);\n };\n\n render(): React.ReactNode {\n const {TeX} = Dependencies.getDependencies();\n\n return (\n <div className=\"graph-settings\">\n <div className=\"perseus-widget-row\">\n {/* @ts-expect-error - TS2339 - Property 'funcName' does not exist on type props. */}\n <TeX>{this.props.funcName + \"(x)=\"}</TeX>{\" \"}\n <MathquillInput\n value={this.props.value}\n onChange={this.change(\"value\")}\n />\n </div>\n <div className=\"perseus-widget-row\">\n Range: <TeX>\\Large(</TeX>\n <MathquillInput\n value={this.props.rangeMin}\n onChange={this.change(\"rangeMin\")}\n />\n <TeX>,</TeX>{\" \"}\n <MathquillInput\n value={this.props.rangeMax}\n onChange={this.change(\"rangeMax\")}\n />\n <TeX>\\Large)</TeX>\n </div>\n <div className=\"perseus-widget-row\">\n <ColorPicker\n value={this.props.color}\n onChange={this.change(\"color\")}\n />\n </div>\n <div className=\"perseus-widget-row\">\n <DashPicker\n value={this.props.strokeDasharray}\n onChange={this.change(\"strokeDasharray\")}\n />\n </div>\n <div className=\"perseus-widget-row\">\n <div className=\"perseus-widget-left-col\">\n Width:{\" \"}\n <NumberInput\n value={this.props.strokeWidth}\n placeholder={2}\n onChange={this.change(\"strokeWidth\")}\n />\n </div>\n </div>\n </div>\n );\n }\n}\n\nexport default FunctionEditor;\n","import {components, Dependencies, KhanColors} from \"@khanacademy/perseus\";\nimport * as React from \"react\";\n\nimport {deprecatedChangeableChange} from \"../../mixins/changeable\";\n\nimport ColorPicker from \"./color-picker\";\nimport MathquillInput from \"./mathquill-input\";\n\nimport type {ChangeableProps} from \"../../mixins/changeable\";\n\nconst {TextInput} = components;\n\ntype Props = ChangeableProps & {\n color: string;\n coordX: string;\n coordY: string;\n label: string;\n};\n\ntype DefaultProps = {\n color: Props[\"color\"];\n coordX: Props[\"coordX\"];\n coordY: Props[\"coordY\"];\n label: Props[\"label\"];\n};\n\n// Editor for labels\nclass LabelEditor extends React.Component<Props> {\n static defaultProps: DefaultProps = {\n coordX: \"0\",\n coordY: \"0\",\n color: KhanColors.BLACK,\n label: \"\\\\phi\",\n };\n\n change: (arg1: any, arg2?: any, arg3?: any) => any = (...args) => {\n return deprecatedChangeableChange.apply(this, args);\n };\n\n render(): React.ReactNode {\n const {TeX} = Dependencies.getDependencies();\n\n return (\n <div className=\"graph-settings\">\n <div className=\"perseus-widget-row\">\n <TextInput\n value={this.props.label}\n onChange={this.change(\"label\")}\n style={{\n width: \"100%\",\n }}\n />\n </div>\n <div className=\"perseus-widget-row\">\n Location: <TeX>\\Large(</TeX>\n <MathquillInput\n value={this.props.coordX}\n onChange={this.change(\"coordX\")}\n />\n <TeX>,</TeX>{\" \"}\n <MathquillInput\n value={this.props.coordY}\n onChange={this.change(\"coordY\")}\n />\n <TeX>\\Large)</TeX>\n </div>\n <div className=\"perseus-widget-row\">\n <ColorPicker\n value={this.props.color}\n onChange={this.change(\"color\")}\n />\n </div>\n </div>\n );\n }\n}\n\nexport default LabelEditor;\n","import {components} from \"@khanacademy/perseus\";\nimport * as React from \"react\";\n\nconst {ButtonGroup} = components;\n\ntype Props = {\n value?: string;\n onChange: (value: string) => void;\n};\n\nclass ArrowPicker extends React.Component<Props> {\n static defaultProps: {\n value: string;\n } = {\n value: \"\",\n };\n\n render(): React.ReactNode {\n return (\n <ButtonGroup\n value={this.props.value}\n buttons={[\n {value: \"\", content: <span>&mdash;</span>},\n {value: \"->\", content: <span>&#x2192;</span>},\n ]}\n onChange={this.props.onChange}\n />\n );\n }\n}\n\nexport default ArrowPicker;\n","import {components, Dependencies, KhanColors} from \"@khanacademy/perseus\";\nimport * as React from \"react\";\n\nimport {deprecatedChangeableChange} from \"../../mixins/changeable\";\n\nimport ArrowPicker from \"./arrow-picker\";\nimport ColorPicker from \"./color-picker\";\nimport DashPicker from \"./dash-picker\";\nimport MathquillInput from \"./mathquill-input\";\n\nimport type {ChangeableProps} from \"../../mixins/changeable\";\n\nconst {NumberInput} = components;\n\ntype Props = ChangeableProps & {\n startX: string;\n startY: string;\n endX: string;\n endY: string;\n color: string;\n strokeDasharray: string;\n arrows: string;\n strokeWidth: number;\n};\n\ntype DefaultProps = {\n startX: Props[\"startX\"];\n startY: Props[\"startY\"];\n endX: Props[\"endX\"];\n endY: Props[\"endY\"];\n color: Props[\"color\"];\n strokeDasharray: Props[\"strokeDasharray\"];\n arrows: Props[\"arrows\"];\n strokeWidth: Props[\"strokeWidth\"];\n};\n\n// Editor for non-interactive line segments\nclass LineEditor extends React.Component<Props> {\n static defaultProps: DefaultProps = {\n startX: \"-5\",\n startY: \"5\",\n endX: \"5\",\n endY: \"5\",\n color: KhanColors.BLACK,\n strokeDasharray: \"\",\n arrows: \"\",\n strokeWidth: 2,\n };\n\n change: (arg1: any, arg2?: any, arg3?: any) => any = (...args) => {\n return deprecatedChangeableChange.apply(this, args);\n };\n\n render(): React.ReactNode {\n const {TeX} = Dependencies.getDependencies();\n\n return (\n <div className=\"graph-settings\">\n <div className=\"perseus-widget-row\">\n Start: <TeX>\\Large(</TeX>\n <MathquillInput\n value={this.props.startX}\n onChange={this.change(\"startX\")}\n />\n <TeX>,</TeX>{\" \"}\n <MathquillInput\n value={this.props.startY}\n onChange={this.change(\"startY\")}\n />\n <TeX>\\Large)</TeX>\n </div>\n <div className=\"perseus-widget-row\">\n End: <TeX>\\Large(</TeX>\n <MathquillInput\n value={this.props.endX}\n onChange={this.change(\"endX\")}\n />\n <TeX>,</TeX>{\" \"}\n <MathquillInput\n value={this.props.endY}\n onChange={this.change(\"endY\")}\n />\n <TeX>\\Large)</TeX>\n </div>\n <div className=\"perseus-widget-row\">\n <ColorPicker\n value={this.props.color}\n onChange={this.change(\"color\")}\n />\n </div>\n <div className=\"perseus-widget-row\">\n <DashPicker\n value={this.props.strokeDasharray}\n onChange={this.change(\"strokeDasharray\")}\n />\n &nbsp; &nbsp;\n <ArrowPicker\n value={this.props.arrows}\n onChange={this.change(\"arrows\")}\n />\n </div>\n <div className=\"perseus-widget-row\">\n <div className=\"perseus-widget-left-col\">\n Width:{\" \"}\n <NumberInput\n value={this.props.strokeWidth}\n placeholder={2}\n onChange={this.change(\"strokeWidth\")}\n />\n </div>\n </div>\n </div>\n );\n }\n}\n\nexport default LineEditor;\n","import {components, Dependencies} from \"@khanacademy/perseus\";\nimport * as React from \"react\";\n\nimport {deprecatedChangeableChange} from \"../../mixins/changeable\";\n\nimport MathquillInput from \"./mathquill-input\";\n\nimport type {ChangeableProps} from \"../../mixins/changeable\";\n\nconst {ButtonGroup, NumberInput} = components;\n\ntype Props = ChangeableProps & {\n constraint: string;\n constraintFn: string;\n constraintXMax: string;\n constraintXMin: string;\n constraintYMax: string;\n constraintYMin: string;\n snap: number;\n};\n\ntype DefaultProps = {\n constraint: Props[\"constraint\"];\n constraintFn: Props[\"constraintFn\"];\n constraintXMax: Props[\"constraintXMax\"];\n constraintXMin: Props[\"constraintXMin\"];\n constraintYMax: Props[\"constraintYMax\"];\n constraintYMin: Props[\"constraintYMin\"];\n snap: Props[\"snap\"];\n};\n\nclass ConstraintEditor extends React.Component<Props> {\n static defaultProps: DefaultProps = {\n constraint: \"none\",\n snap: 0.5,\n constraintFn: \"0\",\n constraintXMin: \"-10\",\n constraintXMax: \"10\",\n constraintYMin: \"-10\",\n constraintYMax: \"10\",\n };\n\n change: (\n propName: string,\n ) => (value?: any, callback?: () => unknown) => unknown = (\n propName: string,\n ): ((value?: any, callback?: () => unknown) => unknown) => {\n return deprecatedChangeableChange.call(this, propName);\n };\n\n render(): React.ReactNode {\n const {TeX} = Dependencies.getDependencies();\n\n return (\n <div>\n <div className=\"perseus-widget-row\">\n Constraint:{\" \"}\n <ButtonGroup\n value={this.props.constraint}\n buttons={[\n {value: \"none\", content: \"None\"},\n {value: \"snap\", content: \"Snap\"},\n {value: \"x\", content: \"x=\"},\n {value: \"y\", content: \"y=\"},\n ]}\n onChange={this.change(\"constraint\")}\n />\n </div>\n {this.props.constraint === \"snap\" && (\n <div className=\"perseus-widget-row\">\n Snap:{\" \"}\n <NumberInput\n value={this.props.snap}\n placeholder={0}\n onChange={this.change(\"snap\")}\n />\n </div>\n )}\n {this.props.constraint === \"x\" && (\n <div className=\"graph-settings\">\n <div className=\"perseus-widget-row\">\n <TeX>x=</TeX>{\" \"}\n <MathquillInput\n value={this.props.constraintFn}\n onChange={this.change(\"constraintFn\")}\n />\n </div>\n </div>\n )}\n {this.props.constraint === \"y\" && (\n <div className=\"graph-settings\">\n <div className=\"perseus-widget-row\">\n <TeX>y=</TeX>{\" \"}\n <MathquillInput\n value={this.props.constraintFn}\n onChange={this.change(\"constraintFn\")}\n />\n </div>\n </div>\n )}\n Ensure these are set so nothing can be dragged off the canvas:\n <div className=\"perseus-widget-row\">\n <div className=\"perseus-widget-row\">\n <TeX>x \\in \\Large[</TeX>{\" \"}\n <MathquillInput\n value={this.props.constraintXMin}\n onChange={this.change(\"constraintXMin\")}\n />\n <TeX>, </TeX>{\" \"}\n <MathquillInput\n value={this.props.constraintXMax}\n onChange={this.change(\"constraintXMax\")}\n />{\" \"}\n <TeX>\\Large]</TeX>\n </div>\n </div>\n <div className=\"perseus-widget-row\">\n <div className=\"perseus-widget-row\">\n <TeX>y \\in \\Large[</TeX>{\" \"}\n <MathquillInput\n value={this.props.constraintYMin}\n onChange={this.change(\"constraintYMin\")}\n />\n <TeX>, </TeX>{\" \"}\n <MathquillInput\n value={this.props.constraintYMax}\n onChange={this.change(\"constraintYMax\")}\n />{\" \"}\n <TeX>\\Large]</TeX>\n </div>\n </div>\n </div>\n );\n }\n}\n\nexport default ConstraintEditor;\n","import {components, Dependencies} from \"@khanacademy/perseus\";\nimport * as React from \"react\";\n\nimport {deprecatedChangeableChange} from \"../../mixins/changeable\";\n\nimport ConstraintEditor from \"./constraint-editor\";\nimport MathquillInput from \"./mathquill-input\";\n\nimport type {ChangeableProps, ChangeFn} from \"../../mixins/changeable\";\n\nconst {NumberInput} = components;\n\ntype Props = ChangeableProps & {\n startX: string;\n startY: string;\n endX: string;\n endY: string;\n constraint: string;\n snap: number;\n constraintFn: string;\n startSubscript: number;\n endSubscript: number;\n};\n\ntype DefaultProps = {\n startX: Props[\"startX\"];\n startY: Props[\"startY\"];\n endX: Props[\"endX\"];\n endY: Props[\"endY\"];\n constraint: Props[\"constraint\"];\n snap: Props[\"snap\"];\n constraintFn: Props[\"constraintFn\"];\n};\n\n// Editor for interactive movable line segments\nclass MovableLineEditor extends React.Component<Props> {\n static defaultProps: DefaultProps = {\n startX: \"-5\",\n startY: \"5\",\n endX: \"5\",\n endY: \"5\",\n constraint: \"none\",\n snap: 0.5,\n constraintFn: \"0\",\n // @ts-expect-error - TS2561\n constraintXMin: \"-10\",\n constraintXMax: \"10\",\n constraintYMin: \"-10\",\n constraintYMax: \"10\",\n };\n\n change: ChangeFn = (...args) => {\n return deprecatedChangeableChange.apply(this, args);\n };\n\n render(): React.ReactNode {\n const {TeX} = Dependencies.getDependencies();\n\n return (\n <div className=\"graph-settings\">\n Initial position:\n <div className=\"perseus-widget-row\">\n Start: <TeX>\\Large(</TeX>\n <MathquillInput\n value={this.props.startX}\n onChange={this.change(\"startX\")}\n />\n <TeX>,</TeX>{\" \"}\n <MathquillInput\n value={this.props.startY}\n onChange={this.change(\"startY\")}\n />\n <TeX>\\Large)</TeX>\n </div>\n <div className=\"perseus-widget-row\">\n End: <TeX>\\Large(</TeX>\n <MathquillInput\n value={this.props.endX}\n onChange={this.change(\"endX\")}\n />\n <TeX>,</TeX>{\" \"}\n <MathquillInput\n value={this.props.endY}\n onChange={this.change(\"endY\")}\n />\n <TeX>\\Large)</TeX>\n </div>\n <div className=\"perseus-widget-row\">\n Start updates <TeX>(x_n, y_n)</TeX> for <TeX>n =</TeX>\n <NumberInput\n value={this.props.startSubscript}\n placeholder={0}\n onChange={this.change(\"startSubscript\")}\n />\n </div>\n <div className=\"perseus-widget-row\">\n End updates <TeX>(x_m, y_m)</TeX> for <TeX>m =</TeX>\n <NumberInput\n value={this.props.endSubscript}\n placeholder={0}\n onChange={this.change(\"endSubscript\")}\n />\n </div>\n <div className=\"perseus-widget-row\">\n All constraints are applied to the start point.\n </div>\n <ConstraintEditor {...this.props} />\n </div>\n );\n }\n}\n\nexport default MovableLineEditor;\n","import {components, Dependencies} from \"@khanacademy/perseus\";\nimport * as React from \"react\";\n\nimport {deprecatedChangeableChange} from \"../../mixins/changeable\";\n\nimport ConstraintEditor from \"./constraint-editor\";\nimport MathquillInput from \"./mathquill-input\";\n\nimport type {ChangeableProps, ChangeFn} from \"../../mixins/changeable\";\n\nconst {NumberInput} = components;\n\ntype Props = ChangeableProps & {\n startX: string;\n startY: string;\n constraint: string;\n snap: number;\n constraintFn: string;\n varSubscript: number;\n};\n\ntype DefaultProps = {\n startX: Props[\"startX\"];\n startY: Props[\"startY\"];\n constraint: Props[\"constraint\"];\n snap: Props[\"snap\"];\n constraintFn: Props[\"constraintFn\"];\n};\n\n// Editor for interactive movable points\nclass MovablePointEditor extends React.Component<Props> {\n static defaultProps: DefaultProps = {\n startX: \"0\",\n startY: \"0\",\n constraint: \"none\",\n snap: 0.5,\n constraintFn: \"0\",\n // @ts-expect-error - TS2561\n constraintXMin: \"-10\",\n constraintXMax: \"10\",\n constraintYMin: \"-10\",\n constraintYMax: \"10\",\n };\n\n change: ChangeFn = (...args) => {\n return deprecatedChangeableChange.apply(this, args);\n };\n\n render(): React.ReactNode {\n const {TeX} = Dependencies.getDependencies();\n\n return (\n <div className=\"graph-settings\">\n <div className=\"perseus-widget-row\">\n Start: <TeX>\\Large(</TeX>\n <MathquillInput\n value={this.props.startX}\n onChange={this.change(\"startX\")}\n />\n <TeX>,</TeX>{\" \"}\n <MathquillInput\n value={this.props.startY}\n onChange={this.change(\"startY\")}\n />\n <TeX>\\Large)</TeX>\n </div>\n <div className=\"perseus-widget-row\">\n Update <TeX>(x_n, y_n)</TeX> for <TeX>n =</TeX>{\" \"}\n <NumberInput\n value={this.props.varSubscript}\n placeholder={0}\n onChange={this.change(\"varSubscript\")}\n />\n </div>\n <ConstraintEditor {...this.props} />\n </div>\n );\n }\n}\n\nexport default MovablePointEditor;\n","import {components, Dependencies, KhanColors} from \"@khanacademy/perseus\";\nimport * as React from \"react\";\n\nimport {deprecatedChangeableChange} from \"../../mixins/changeable\";\n\nimport ColorPicker from \"./color-picker\";\nimport DashPicker from \"./dash-picker\";\nimport MathquillInput from \"./mathquill-input\";\n\nimport type {ChangeableProps} from \"../../mixins/changeable\";\n\nconst {NumberInput} = components;\n\ntype Props = ChangeableProps & {\n x: string;\n y: string;\n rangeMin: string;\n rangeMax: string;\n color: string;\n strokeDasharray: string;\n strokeWidth: number;\n};\n\ntype DefaultProps = {\n x: Props[\"x\"];\n y: Props[\"y\"];\n rangeMin: Props[\"rangeMin\"];\n rangeMax: Props[\"rangeMax\"];\n color: Props[\"color\"];\n strokeDasharray: Props[\"strokeDasharray\"];\n strokeWidth: Props[\"strokeWidth\"];\n};\n\n// Editor for parametric plots\nclass ParametricEditor extends React.Component<Props> {\n static defaultProps: DefaultProps = {\n x: \"cos(t)\",\n y: \"sin(t)\",\n rangeMin: \"0\",\n rangeMax: \"2\\\\pi\",\n color: KhanColors.BLUE,\n strokeDasharray: \"\",\n strokeWidth: 2,\n };\n\n change: (arg1: any, arg2?: any, arg3?: any) => any = (...args) => {\n return deprecatedChangeableChange.apply(this, args);\n };\n\n render(): React.ReactNode {\n const {TeX} = Dependencies.getDependencies();\n\n return (\n <div className=\"graph-settings\">\n <div className=\"perseus-widget-row\">\n <TeX>X(t) =</TeX>{\" \"}\n <MathquillInput\n value={this.props.x}\n onChange={this.change(\"x\")}\n />\n </div>\n <div className=\"perseus-widget-row\">\n <TeX>Y(t) =</TeX>{\" \"}\n <MathquillInput\n value={this.props.y}\n onChange={this.change(\"y\")}\n />\n </div>\n <div className=\"perseus-widget-row\">\n Range: <TeX>\\Large(</TeX>\n <MathquillInput\n value={this.props.rangeMin}\n onChange={this.change(\"rangeMin\")}\n />\n <TeX>,</TeX>{\" \"}\n <MathquillInput\n value={this.props.rangeMax}\n onChange={this.change(\"rangeMax\")}\n />\n <TeX>\\Large)</TeX>\n </div>\n <div className=\"perseus-widget-row\">\n <ColorPicker\n value={this.props.color}\n onChange={this.change(\"color\")}\n />\n </div>\n <div className=\"perseus-widget-row\">\n <DashPicker\n value={this.props.strokeDasharray}\n onChange={this.change(\"strokeDasharray\")}\n />\n </div>\n <div className=\"perseus-widget-row\">\n <div className=\"perseus-widget-left-col\">\n Width:{\" \"}\n <NumberInput\n value={this.props.strokeWidth}\n placeholder={2}\n onChange={this.change(\"strokeWidth\")}\n />\n </div>\n </div>\n </div>\n );\n }\n}\n\nexport default ParametricEditor;\n","import {Dependencies, KhanColors} from \"@khanacademy/perseus\";\nimport * as React from \"react\";\n\nimport {deprecatedChangeableChange} from \"../../mixins/changeable\";\n\nimport ColorPicker from \"./color-picker\";\nimport MathquillInput from \"./mathquill-input\";\n\nimport type {ChangeableProps} from \"../../mixins/changeable\";\n\ntype Props = ChangeableProps & {\n coordX: string;\n coordY: string;\n color: string;\n};\n\ntype DefaultProps = {\n coordX: Props[\"coordX\"];\n coordY: Props[\"coordY\"];\n color: Props[\"color\"];\n};\n\n// Editor for non-interactive points\nclass PointEditor extends React.Component<Props> {\n static defaultProps: DefaultProps = {\n coordX: \"0\",\n coordY: \"0\",\n color: KhanColors.BLACK,\n };\n\n change: (arg1: any, arg2?: any, arg3?: any) => any = (...args) => {\n return deprecatedChangeableChange.apply(this, args);\n };\n\n render(): React.ReactNode {\n const {TeX} = Dependencies.getDependencies();\n\n return (\n <div className=\"graph-settings\">\n <div className=\"perseus-widget-row\">\n Coordinate: <TeX>\\Large(</TeX>\n <MathquillInput\n value={this.props.coordX}\n onChange={this.change(\"coordX\")}\n />\n <TeX>,</TeX>{\" \"}\n <MathquillInput\n value={this.props.coordY}\n onChange={this.change(\"coordY\")}\n />\n <TeX>\\Large)</TeX>\n </div>\n <div className=\"perseus-widget-row\">\n <ColorPicker\n value={this.props.color}\n onChange={this.change(\"color\")}\n />\n </div>\n </div>\n );\n }\n}\n\nexport default PointEditor;\n","import {Dependencies, KhanColors} from \"@khanacademy/perseus\";\nimport * as React from \"react\";\n\nimport {deprecatedChangeableChange} from \"../../mixins/changeable\";\n\nimport ColorPicker from \"./color-picker\";\nimport MathquillInput from \"./mathquill-input\";\n\nimport type {ChangeableProps} from \"../../mixins/changeable\";\n\ntype Props = ChangeableProps & {\n color: string;\n coordX: string;\n coordY: string;\n height: string;\n width: string;\n};\n\ntype DefaultProps = {\n color: Props[\"color\"];\n coordX: Props[\"coordX\"];\n coordY: Props[\"coordY\"];\n height: Props[\"height\"];\n width: Props[\"width\"];\n};\n\n// Editor for rectangles\nclass RectangleEditor extends React.Component<Props> {\n static defaultProps: DefaultProps = {\n coordX: \"-5\",\n coordY: \"5\",\n width: \"2\",\n height: \"3\",\n color: KhanColors.LIGHT_BLUE,\n };\n\n change: (arg1: any, arg2?: any, arg3?: any) => any = (...args) => {\n return deprecatedChangeableChange.apply(this, args);\n };\n\n render(): React.ReactNode {\n const {TeX} = Dependencies.getDependencies();\n\n return (\n <div className=\"graph-settings\">\n <div className=\"perseus-widget-row\">\n Bottom left: <TeX>\\Large(</TeX>\n <MathquillInput\n value={this.props.coordX}\n onChange={this.change(\"coordX\")}\n />\n <TeX>,</TeX>{\" \"}\n <MathquillInput\n value={this.props.coordY}\n onChange={this.change(\"coordY\")}\n />\n <TeX>\\Large)</TeX>\n </div>\n <div className=\"perseus-widget-row\">\n Width:{\" \"}\n <MathquillInput\n value={this.props.width}\n onChange={this.change(\"width\")}\n />\n </div>\n <div className=\"perseus-widget-row\">\n Height:{\" \"}\n <MathquillInput\n value={this.props.height}\n onChange={this.change(\"height\")}\n />\n </div>\n <div className=\"perseus-widget-row\">\n <ColorPicker\n value={this.props.color}\n lightColors={true}\n onChange={this.change(\"color\")}\n />\n </div>\n <div className=\"perseus-widget-row\">\n You want a border? Sorry, draw your own.\n </div>\n </div>\n );\n }\n}\n\nexport default RectangleEditor;\n","import {Dependencies, Util} from \"@khanacademy/perseus\";\nimport {\n interactionLogic,\n type Coords,\n type PerseusInteractionWidgetOptions,\n type MarkingsType,\n} from \"@khanacademy/perseus-core\";\nimport * as React from \"react\";\n\nimport GraphSettings from \"../../components/graph-settings\";\nimport EditorJsonify from \"../../mixins/editor-jsonify\";\n\nimport ElementContainer from \"./element-container\";\nimport FunctionEditor from \"./function-editor\";\nimport LabelEditor from \"./label-editor\";\nimport LineEditor from \"./line-editor\";\nimport MovableLineEditor from \"./movable-line-editor\";\nimport MovablePointEditor from \"./movable-point-editor\";\nimport ParametricEditor from \"./parametric-editor\";\nimport PointEditor from \"./point-editor\";\nimport RectangleEditor from \"./rectangle-editor\";\n\nconst {unescapeMathMode} = Util;\n\n// The starting options for each element type offered by the \"Add an element\"\n// dropdown. Element types with no entry here start out with no options.\nconst defaultOptionsByElementType: Record<string, Record<string, unknown>> = {\n point: PointEditor.defaultProps,\n line: LineEditor.defaultProps,\n \"movable-point\": MovablePointEditor.defaultProps,\n \"movable-line\": MovableLineEditor.defaultProps,\n function: FunctionEditor.defaultProps,\n parametric: ParametricEditor.defaultProps,\n label: LabelEditor.defaultProps,\n rectangle: RectangleEditor.defaultProps,\n};\n\ntype Graph = {\n box: ReadonlyArray<number>;\n labels: ReadonlyArray<string>;\n range: Coords;\n tickStep: [number, number];\n gridStep: [number, number];\n markings: MarkingsType;\n valid?: boolean;\n};\n\ntype Props = {\n onChange: (newProps: Record<string, unknown>) => void;\n elements: ReadonlyArray<any>;\n graph: Graph;\n};\n\ntype State = any;\n\n// JSDoc will be shown in Storybook widget editor description\n/**\n * An editor for the interaction widget that allows users to engage with interactive content.\n *\n * The interaction widget provides a dynamic graph interface with various interactive elements\n * including points, lines, movable points, movable lines, functions, parametric curves,\n * labels, and rectangles. This editor allows content creators to configure those elements\n * and their properties.\n */\nclass InteractionEditor extends React.Component<Props, State> {\n static defaultProps: PerseusInteractionWidgetOptions =\n interactionLogic.defaultWidgetOptions;\n\n state: State = {\n usedVarSubscripts: this._getAllVarSubscripts(this.props.elements),\n usedFunctionNames: this._getAllFunctionNames(this.props.elements),\n };\n\n UNSAFE_componentWillReceiveProps(nextProps: Props) {\n this.setState({\n usedVarSubscripts: this._getAllVarSubscripts(nextProps.elements),\n usedFunctionNames: this._getAllFunctionNames(nextProps.elements),\n });\n }\n\n _getAllVarSubscripts(elements: ReadonlyArray<any>): ReadonlyArray<any> {\n const movableLines = elements.filter(\n (element) => element.type === \"movable-line\",\n );\n return elements\n .filter((element) => element.type === \"movable-point\")\n .map((element) => element.options.varSubscript)\n .concat(\n movableLines.map((element) => element.options.startSubscript),\n )\n .concat(\n movableLines.map((element) => element.options.endSubscript),\n );\n }\n\n _getAllFunctionNames(elements: ReadonlyArray<any>): ReadonlyArray<string> {\n return elements\n .filter((element) => element.type === \"function\")\n .map((element) => element.options.funcName);\n }\n\n // Spread existing graph props to preserve properties not included\n // in the GraphSettings onChange payload (e.g. box, markings).\n _updateGraphProps = (newProps: Record<string, unknown>) => {\n const {step, ...rest} = newProps;\n this.props.onChange({\n graph: {\n ...this.props.graph,\n ...rest,\n tickStep: step,\n },\n });\n };\n\n _addNewElement: (arg1: React.ChangeEvent<HTMLInputElement>) => void = (\n e,\n ) => {\n const elementType = e.target.value;\n if (elementType === \"\") {\n return;\n }\n e.target.value = \"\";\n const newElement = {\n type: elementType,\n key:\n elementType +\n \"-\" +\n // eslint-disable-next-line no-restricted-properties\n ((Math.random() * 0xffffff) << 0).toString(16),\n options: {...defaultOptionsByElementType[elementType]},\n };\n\n let nextSubscript;\n if (elementType === \"movable-point\") {\n nextSubscript = Math.max(...this.state.usedVarSubscripts, -1) + 1;\n newElement.options.varSubscript = nextSubscript;\n } else if (elementType === \"movable-line\") {\n nextSubscript = Math.max(...this.state.usedVarSubscripts, -1) + 1;\n newElement.options.startSubscript = nextSubscript;\n newElement.options.endSubscript = nextSubscript + 1;\n } else if (elementType === \"function\") {\n const nextLetter = String.fromCharCode(\n Math.max(\n ...this.state.usedFunctionNames.map((c) => c.charCodeAt(0)),\n \"e\".charCodeAt(0),\n ) + 1,\n );\n newElement.options.funcName = nextLetter;\n }\n this.props.onChange({\n elements: this.props.elements.concat(newElement),\n });\n };\n\n _deleteElement: (arg1: number) => void = (index) => {\n const element = this.props.elements[index];\n this.props.onChange({\n elements: this.props.elements.filter((e) => e !== element),\n });\n };\n\n _moveElementUp: (arg1: number) => void = (index) => {\n const element = this.props.elements[index];\n const newElements = this.props.elements.filter((e) => e !== element);\n newElements.splice(index - 1, 0, element);\n this.props.onChange({elements: newElements});\n };\n\n _moveElementDown: (arg1: number) => void = (index) => {\n const element = this.props.elements[index];\n const newElements = this.props.elements.filter((e) => e !== element);\n newElements.splice(index + 1, 0, element);\n this.props.onChange({elements: newElements});\n };\n\n serialize: () => any = () => {\n return EditorJsonify.serialize.call(this);\n };\n\n render(): React.ReactNode {\n const {TeX} = Dependencies.getDependencies();\n\n return (\n <div className=\"perseus-widget-interaction-editor\">\n <ElementContainer title=\"Grid settings\">\n <GraphSettings\n editableSettings={[\"canvas\", \"graph\"]}\n box={this.props.graph.box}\n labels={this.props.graph.labels}\n range={this.props.graph.range}\n step={this.props.graph.tickStep}\n gridStep={this.props.graph.gridStep}\n markings={this.props.graph.markings}\n onChange={this._updateGraphProps}\n />\n <>\n {this.props.graph.valid !== true && (\n <div>{this.props.graph.valid}</div>\n )}\n </>\n </ElementContainer>\n {this.props.elements.map((element, n) => {\n if (element.type === \"movable-point\") {\n return (\n <ElementContainer\n title={\n <span>\n Movable point{\" \"}\n <TeX>\n {\"(x_{\" +\n element.options.varSubscript +\n \"}, y_{\" +\n element.options.varSubscript +\n \"})\"}\n </TeX>\n </span>\n }\n onUp={\n n === 0\n ? null\n : () => this._moveElementUp(n)\n }\n onDown={\n n === this.props.elements.length - 1\n ? null\n : () => this._moveElementDown(n)\n }\n onDelete={() => this._deleteElement(n)}\n key={element.key}\n >\n <MovablePointEditor\n {...element.options}\n onChange={(newProps) => {\n const elements = JSON.parse(\n JSON.stringify(this.props.elements),\n );\n Object.assign(\n elements[n].options,\n newProps,\n );\n this.props.onChange({\n elements: elements,\n });\n }}\n />\n </ElementContainer>\n );\n }\n if (element.type === \"movable-line\") {\n return (\n <ElementContainer\n title={\n <span>\n Movable line{\" \"}\n <TeX>\n {\"(x_{\" +\n element.options.startSubscript +\n \"}, y_{\" +\n element.options.startSubscript +\n \"})\"}\n </TeX>{\" \"}\n to{\" \"}\n <TeX>\n {\"(x_{\" +\n element.options.endSubscript +\n \"}, y_{\" +\n element.options.endSubscript +\n \"})\"}\n </TeX>\n </span>\n }\n onUp={\n n === 0\n ? null\n : () => this._moveElementUp(n)\n }\n onDown={\n n === this.props.elements.length - 1\n ? null\n : () => this._moveElementDown(n)\n }\n onDelete={() => this._deleteElement(n)}\n key={element.key}\n >\n <MovableLineEditor\n {...element.options}\n onChange={(newProps) => {\n const elements = JSON.parse(\n JSON.stringify(this.props.elements),\n );\n Object.assign(\n elements[n].options,\n newProps,\n );\n this.props.onChange({\n elements: elements,\n });\n }}\n />\n </ElementContainer>\n );\n }\n if (element.type === \"point\") {\n return (\n <ElementContainer\n title={\n <span>\n Point{\" \"}\n <TeX>\n {\"(\" +\n element.options.coordX +\n \", \" +\n element.options.coordY +\n \")\"}\n </TeX>\n </span>\n }\n onUp={\n n === 0\n ? null\n : () => this._moveElementUp(n)\n }\n onDown={\n n === this.props.elements.length - 1\n ? null\n : () => this._moveElementDown(n)\n }\n onDelete={() => this._deleteElement(n)}\n key={element.key}\n >\n <PointEditor\n {...element.options}\n onChange={(newProps) => {\n const elements = JSON.parse(\n JSON.stringify(this.props.elements),\n );\n Object.assign(\n elements[n].options,\n newProps,\n );\n this.props.onChange({\n elements: elements,\n });\n }}\n />\n </ElementContainer>\n );\n }\n if (element.type === \"line\") {\n return (\n <ElementContainer\n title={\n <span>\n Line{\" \"}\n <TeX>\n {\"(\" +\n element.options.startX +\n \", \" +\n element.options.startY +\n \")\"}\n </TeX>{\" \"}\n to{\" \"}\n <TeX>\n {\"(\" +\n element.options.endX +\n \", \" +\n element.options.endY +\n \")\"}\n </TeX>\n </span>\n }\n onUp={\n n === 0\n ? null\n : () => this._moveElementUp(n)\n }\n onDown={\n n === this.props.elements.length - 1\n ? null\n : () => this._moveElementDown(n)\n }\n onDelete={() => this._deleteElement(n)}\n key={element.key}\n >\n <LineEditor\n {...element.options}\n onChange={(newProps) => {\n const elements = JSON.parse(\n JSON.stringify(this.props.elements),\n );\n Object.assign(\n elements[n].options,\n newProps,\n );\n this.props.onChange({\n elements: elements,\n });\n }}\n />\n </ElementContainer>\n );\n }\n if (element.type === \"function\") {\n return (\n <ElementContainer\n title={\n <span>\n Function{\" \"}\n <TeX>\n {element.options.funcName +\n \"(x) = \" +\n element.options.value}\n </TeX>\n </span>\n }\n onUp={\n n === 0\n ? null\n : () => this._moveElementUp(n)\n }\n onDown={\n n === this.props.elements.length - 1\n ? null\n : () => this._moveElementDown(n)\n }\n onDelete={() => this._deleteElement(n)}\n key={element.key}\n >\n <FunctionEditor\n {...element.options}\n onChange={(newProps) => {\n const elements = JSON.parse(\n JSON.stringify(this.props.elements),\n );\n Object.assign(\n elements[n].options,\n newProps,\n );\n this.props.onChange({\n elements: elements,\n });\n }}\n />\n </ElementContainer>\n );\n }\n if (element.type === \"parametric\") {\n return (\n <ElementContainer\n title={<span>Parametric</span>}\n onUp={\n n === 0\n ? null\n : () => this._moveElementUp(n)\n }\n onDown={\n n === this.props.elements.length - 1\n ? null\n : () => this._moveElementDown(n)\n }\n onDelete={() => this._deleteElement(n)}\n key={element.key}\n >\n <ParametricEditor\n {...element.options}\n onChange={(newProps) => {\n const elements = JSON.parse(\n JSON.stringify(this.props.elements),\n );\n Object.assign(\n elements[n].options,\n newProps,\n );\n this.props.onChange({\n elements: elements,\n });\n }}\n />\n </ElementContainer>\n );\n }\n if (element.type === \"label\") {\n return (\n <ElementContainer\n title={\n <span>\n Label{\" \"}\n <TeX>\n {unescapeMathMode(\n element.options.label,\n )}\n </TeX>{\" \"}\n </span>\n }\n onUp={\n n === 0\n ? null\n : () => this._moveElementUp(n)\n }\n onDown={\n n === this.props.elements.length - 1\n ? null\n : () => this._moveElementDown(n)\n }\n onDelete={() => this._deleteElement(n)}\n key={element.key}\n >\n <LabelEditor\n {...element.options}\n onChange={(newProps) => {\n const elements = JSON.parse(\n JSON.stringify(this.props.elements),\n );\n Object.assign(\n elements[n].options,\n newProps,\n );\n this.props.onChange({\n elements: elements,\n });\n }}\n />\n </ElementContainer>\n );\n }\n if (element.type === \"rectangle\") {\n return (\n <ElementContainer\n title={\n <span>\n Rectangle{\" \"}\n <TeX>\n {\"(\" +\n element.options.coordX +\n \", \" +\n element.options.coordY +\n \")\"}\n </TeX>\n &nbsp;&mdash;&nbsp;\n <TeX>\n {element.options.width +\n \" \\\\times \" +\n element.options.height}\n </TeX>\n </span>\n }\n onUp={\n n === 0\n ? null\n : () => this._moveElementUp(n)\n }\n onDown={\n n === this.props.elements.length - 1\n ? null\n : () => this._moveElementDown(n)\n }\n onDelete={() => this._deleteElement(n)}\n key={element.key}\n >\n <RectangleEditor\n {...element.options}\n onChange={(newProps) => {\n const elements = JSON.parse(\n JSON.stringify(this.props.elements),\n );\n Object.assign(\n elements[n].options,\n newProps,\n );\n this.props.onChange({\n elements: elements,\n });\n }}\n />\n </ElementContainer>\n );\n }\n })}\n <div className=\"perseus-widget-interaction-editor-select-element\">\n {/* @ts-expect-error - TS2322 - Type '(arg1: ChangeEvent<HTMLInputElement>) => void' is not assignable to type 'ChangeEventHandler<HTMLSelectElement>'. */}\n <select onChange={this._addNewElement}>\n <option value=\"\">Add an element{\"\\u2026\"}</option>\n <option disabled>--</option>\n <option value=\"point\">Point</option>\n <option value=\"line\">Line segment</option>\n <option value=\"function\">Function plot</option>\n <option value=\"parametric\">Parametric plot</option>\n <option value=\"label\">Label</option>\n <option value=\"rectangle\">Rectangle</option>\n <option value=\"movable-point\">\n &#x2605; Movable point\n </option>\n <option value=\"movable-line\">\n &#x2605; Movable line segment\n </option>\n </select>\n </div>\n </div>\n );\n }\n}\n\nexport default InteractionEditor;\n","import {View} from \"@khanacademy/wonder-blocks-core\";\nimport {spacing} from \"@khanacademy/wonder-blocks-tokens\";\nimport {BodyText} from \"@khanacademy/wonder-blocks-typography\";\nimport {StyleSheet, css} from \"aphrodite\";\nimport * as React from \"react\";\n\nimport type {StyleType} from \"@khanacademy/wonder-blocks-core\";\n\n// Renders the given children in a View laid out horizontally.\nconst LabeledRow = (props: {\n id?: string;\n label: string;\n labelSide?: \"start\" | \"end\";\n labelSize?: \"small\" | \"medium\";\n style?: StyleType;\n children: React.ReactNode;\n}) => {\n const {\n children,\n label,\n labelSide = \"left\",\n labelSize = \"small\",\n style,\n } = props;\n\n return (\n <label className={css(styles.label)}>\n <View style={[styles.row, style]}>\n {labelSide === \"start\" || (\n <BodyText\n size={labelSize === \"small\" ? \"small\" : undefined}\n tag=\"span\"\n style={styles.spaceEnd}\n >\n {label}\n </BodyText>\n )}\n {children}\n {labelSide === \"end\" && (\n <BodyText\n size={labelSize === \"small\" ? \"small\" : undefined}\n tag=\"span\"\n style={styles.spaceStart}\n >\n {label}\n </BodyText>\n )}\n </View>\n </label>\n );\n};\n\nconst styles = StyleSheet.create({\n label: {\n width: \"fit-content\",\n },\n row: {\n flexDirection: \"row\",\n marginBlockStart: spacing.xSmall_8,\n alignItems: \"center\",\n width: \"fit-content\",\n },\n spaceStart: {\n marginInlineStart: spacing.xSmall_8,\n },\n spaceEnd: {\n marginInlineEnd: spacing.xSmall_8,\n },\n});\n\nexport default LabeledRow;\n","import {View} from \"@khanacademy/wonder-blocks-core\";\nimport {Checkbox} from \"@khanacademy/wonder-blocks-form\";\nimport {BodyText} from \"@khanacademy/wonder-blocks-typography\";\nimport * as React from \"react\";\nimport invariant from \"tiny-invariant\";\n\nimport InfoTip from \"../../../components/info-tip\";\nimport {TypedSingleSelect} from \"../../../components/typed-single-select\";\nimport styles from \"../interactive-graph-editor.module.css\";\nimport LabeledRow from \"../locked-figures/labeled-row\";\n\nimport type {Props as EditorProps} from \"../interactive-graph-editor\";\nimport type {\n PerseusGraphType,\n PerseusGraphTypeAngle,\n} from \"@khanacademy/perseus-core\";\n\ninterface Props {\n correct: PerseusGraphTypeAngle;\n graph: PerseusGraphType | undefined;\n onChange: (props: Partial<EditorProps>) => void;\n}\n\nexport default function AngleAnswerOptions({correct, graph, onChange}: Props) {\n return (\n <>\n <View className={styles.row}>\n <Checkbox\n label={\n <BodyText size=\"small\" tag=\"span\">\n Show angle measures\n </BodyText>\n }\n checked={\n // Don't show indeterminate checkbox state\n !!correct?.showAngles\n }\n onChange={(newValue) => {\n if (graph?.type === \"angle\") {\n invariant(\n correct.type === \"angle\",\n `Expected graph type to be angle, but got ${correct.type}`,\n );\n onChange({\n correct: {\n ...correct,\n showAngles: newValue,\n },\n graph: {\n ...graph,\n showAngles: newValue,\n },\n });\n }\n }}\n />\n <InfoTip>\n <p>Displays the interior angle measures.</p>\n </InfoTip>\n </View>\n <View className={styles.row}>\n <Checkbox\n label={\n <BodyText size=\"small\" tag=\"span\">\n Allow reflex angles\n </BodyText>\n }\n checked={\n // Don't show indeterminate checkbox state\n !!correct?.allowReflexAngles\n }\n onChange={(newValue) => {\n invariant(\n correct.type === \"angle\",\n `Expected graph type to be angle, but got ${correct.type}`,\n );\n invariant(\n graph?.type === \"angle\",\n `Expected graph type to be angle, but got ${graph?.type}`,\n );\n\n const update = {\n allowReflexAngles: newValue,\n };\n\n onChange({\n correct: {\n ...correct,\n ...update,\n },\n graph: {\n ...graph,\n ...update,\n },\n });\n }}\n />\n <InfoTip>\n <p>Allow students to be able to create reflex angles.</p>\n </InfoTip>\n </View>\n <LabeledRow label=\"Student answer must\">\n <TypedSingleSelect\n selectedValue={correct.match || \"exact\"}\n options={{\n exact: \"match exactly\",\n congruent: \"be congruent\",\n }}\n onChange={(newValue) => {\n // \"exact\" is not a real `match` value: an absent\n // (undefined) `match` means exact matching. Translate\n // the selected option to the value the scorer expects.\n const match =\n newValue === \"exact\" ? undefined : newValue;\n onChange({correct: {...correct, match}});\n }}\n className={styles.singleSelectShort}\n />\n <InfoTip>\n <p>\n Congruency requires only that the angle measures are the\n same. An exact match implies congruency, but also\n requires that the angles have the same orientation and\n that the vertices are in the same position.\n </p>\n </InfoTip>\n </LabeledRow>\n </>\n );\n}\n","export const UNLIMITED = \"unlimited\" as const;\nexport type PointValue = number | typeof UNLIMITED;\n\n// Parses a string (ostensibly from some UI element that only supports string\n// types, such as a <select />) into a numeric point count or the special sigil\n// \"unlimited\". Note that 0 is a special case, and means \"unlimited\".\nexport const parsePointCount = (points: string): PointValue => {\n const parsed = parseInt(points, 10);\n if (isNaN(parsed)) {\n return UNLIMITED;\n }\n return parsed === 0 ? UNLIMITED : parsed;\n};\n","import * as React from \"react\";\n\nimport {TypedSingleSelect} from \"../../../components/typed-single-select\";\nimport {UNLIMITED, parsePointCount} from \"../../../util/points\";\nimport styles from \"../interactive-graph-editor.module.css\";\nimport LabeledRow from \"../locked-figures/labeled-row\";\n\nimport type {Props as EditorProps} from \"../interactive-graph-editor\";\nimport type {\n PerseusGraphType,\n PerseusGraphTypePoint,\n} from \"@khanacademy/perseus-core\";\n\ninterface Props {\n correct: PerseusGraphTypePoint;\n graph: PerseusGraphType | undefined;\n onChange: (props: Partial<EditorProps>) => void;\n}\n\nconst pointsCountOptions: Record<string, string> = {\n \"1\": \"1 point\",\n \"2\": \"2 points\",\n \"3\": \"3 points\",\n \"4\": \"4 points\",\n \"5\": \"5 points\",\n \"6\": \"6 points\",\n [UNLIMITED]: \"unlimited\",\n};\n\nconst GraphPointsCountSelector = ({correct, graph, onChange}: Props) => {\n return (\n <LabeledRow label=\"Number of Points:\">\n <TypedSingleSelect\n selectedValue={`${correct.numPoints ?? 1}`}\n options={pointsCountOptions}\n onChange={(newValue) => {\n const points = parsePointCount(newValue);\n\n onChange({\n correct: {\n type: \"point\",\n numPoints: points,\n },\n graph: {\n type: \"point\",\n numPoints: points,\n },\n });\n }}\n className={styles.singleSelectShort}\n />\n </LabeledRow>\n );\n};\n\nexport default GraphPointsCountSelector;\n","import * as React from \"react\";\n\nimport {TypedSingleSelect} from \"../../../components/typed-single-select\";\nimport styles from \"../interactive-graph-editor.module.css\";\n\nimport type {PerseusGraphType} from \"@khanacademy/perseus-core\";\n\ntype GraphType = PerseusGraphType[\"type\"];\n\ninterface GraphTypeSelectorProps {\n graphType: GraphType;\n disabled?: boolean;\n onChange: (newGraphType: GraphType) => void;\n}\n\nconst GraphTypeSelector = (props: GraphTypeSelectorProps) => {\n return (\n <TypedSingleSelect<GraphType>\n selectedValue={props.graphType}\n onChange={props.onChange}\n placeholder=\"Select an answer type\"\n className={styles.singleSelectShort}\n disabled={props.disabled}\n options={{\n none: \"None\",\n \"absolute-value\": \"Absolute value function\",\n exponential: \"Exponential function\",\n linear: \"Linear function\",\n logarithm: \"Logarithmic function\",\n quadratic: \"Quadratic function\",\n sinusoid: \"Sinusoidal function\",\n tangent: \"Tangent function\",\n angle: \"Angle\",\n circle: \"Circle\",\n \"linear-system\": \"Linear system\",\n segment: \"Line segment(s)\",\n point: \"Point(s)\",\n polygon: \"Polygon\",\n ray: \"Ray\",\n vector: \"Vector\",\n }}\n />\n );\n};\n\nexport default GraphTypeSelector;\n","import {View} from \"@khanacademy/wonder-blocks-core\";\nimport {spacing, semanticColor} from \"@khanacademy/wonder-blocks-tokens\";\nimport {BodyMonospace, BodyText} from \"@khanacademy/wonder-blocks-typography\";\nimport * as React from \"react\";\n\nimport Heading from \"../../../components/heading\";\n\ntype Props = {\n id: string;\n equationString: string;\n children: React.ReactNode;\n};\nexport function InteractiveGraphCorrectAnswer(props: Props) {\n return (\n <>\n <Heading\n title=\"Correct Answer\"\n isOpen={true}\n isCollapsible={false}\n />\n <View id={props.id}>\n <View>\n <BodyText\n size=\"xsmall\"\n style={{\n paddingBlockStart: spacing.xxSmall_6,\n paddingBlockEnd: spacing.xxSmall_6,\n color: semanticColor.core.foreground.neutral.subtle,\n }}\n >\n Graph the correct answer in the graph below and ensure\n the equation or point coordinates displayed represent\n the correct answer.\n </BodyText>\n\n <BodyMonospace\n style={{\n fontSize: 12,\n backgroundColor: \"#eee\",\n paddingInline: spacing.xxSmall_6,\n borderColor: \"#ccc\",\n borderStyle: \"solid\",\n borderWidth: 1,\n }}\n >\n {props.equationString}\n </BodyMonospace>\n </View>\n {props.children}\n </View>\n </>\n );\n}\n","import {View} from \"@khanacademy/wonder-blocks-core\";\nimport {TextArea, TextField} from \"@khanacademy/wonder-blocks-form\";\nimport {sizing} from \"@khanacademy/wonder-blocks-tokens\";\nimport {BodyText} from \"@khanacademy/wonder-blocks-typography\";\nimport * as React from \"react\";\n\nimport Heading from \"../../../components/heading\";\n\nimport styles from \"./interactive-graph-description.module.css\";\n\nimport type {Props as EditorProps} from \"../interactive-graph-editor\";\n\ninterface Props {\n ariaLabelValue: string;\n ariaDescriptionValue: string;\n editingDisabled?: boolean;\n onChange: (graphProps: Partial<EditorProps>) => void;\n}\n\nexport default function InteractiveGraphDescription(props: Props) {\n const {\n ariaLabelValue,\n ariaDescriptionValue,\n editingDisabled = false,\n onChange,\n } = props;\n\n const [isOpen, setIsOpen] = React.useState(true);\n\n const uniqueId = React.useId();\n const descriptionTextAreaId = `${uniqueId}-description-textarea`;\n\n return (\n <>\n <Heading\n title=\"Description\"\n isCollapsible={true}\n isOpen={isOpen}\n onToggle={setIsOpen}\n />\n {isOpen && (\n <View className={styles.container}>\n <BodyText size=\"xsmall\" className={styles.caption}>\n Use these fields to describe the graph as a whole. These\n are used by screen readers to describe content to users\n who may be visually impaired.\n </BodyText>\n\n <BodyText size=\"xsmall\" className={styles.caption}>\n Aria description required when using locked figures.\n Locked figures aren't automatically described.\n </BodyText>\n\n <BodyText size=\"medium\" weight=\"bold\" tag=\"label\">\n Title\n <TextField\n value={ariaLabelValue}\n onChange={(newValue) =>\n onChange({\n fullGraphAriaLabel:\n // Save as undefined if the new value\n // is an empty string.\n newValue || undefined,\n })\n }\n disabled={editingDisabled}\n style={{marginBlockStart: sizing.size_040}}\n />\n </BodyText>\n <BodyText\n size=\"medium\"\n weight=\"bold\"\n tag=\"label\"\n htmlFor={descriptionTextAreaId}\n >\n Description\n </BodyText>\n <TextArea\n id={descriptionTextAreaId}\n value={ariaDescriptionValue}\n onChange={(newValue) =>\n onChange({\n fullGraphAriaDescription:\n // Save as undefined if the new value\n // is an empty string.\n newValue || undefined,\n })\n }\n disabled={editingDisabled}\n autoResize={true}\n />\n </View>\n )}\n </>\n );\n}\n","import {sizing} from \"@khanacademy/wonder-blocks-tokens\";\nimport {BodyText} from \"@khanacademy/wonder-blocks-typography\";\nimport React from \"react\";\n\nimport LabeledSwitch from \"../../../components/labeled-switch\";\n\nimport type {ShowAxisArrows} from \"@khanacademy/perseus-core\";\n\ninterface AxisArrowSwitchesProps {\n showAxisArrows: ShowAxisArrows;\n onChange: (axis: keyof ShowAxisArrows) => void;\n disabled: boolean;\n}\n\nexport default function AxisArrowSwitches(props: AxisArrowSwitchesProps) {\n const {showAxisArrows, onChange, disabled} = props;\n\n return (\n <>\n <BodyText size=\"small\">Arrows</BodyText>\n <div\n className=\"perseus-widget-row\"\n style={{\n display: \"flex\",\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: sizing.size_060,\n }}\n >\n <div className=\"perseus-widget-left-col\">\n <LabeledSwitch\n label=\"x min\"\n labelSide=\"start\"\n size=\"small\"\n checked={showAxisArrows.xMin}\n disabled={disabled}\n onChange={() => onChange(\"xMin\")}\n />\n </div>\n <div className=\"perseus-widget-right-col\">\n <LabeledSwitch\n label=\"y min\"\n labelSide=\"start\"\n size=\"small\"\n checked={showAxisArrows.yMin}\n disabled={disabled}\n onChange={() => onChange(\"yMin\")}\n />\n </div>\n </div>\n <div\n className=\"perseus-widget-row\"\n style={{\n display: \"flex\",\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: sizing.size_060,\n }}\n >\n <div className=\"perseus-widget-left-col\">\n <LabeledSwitch\n label=\"x max\"\n labelSide=\"start\"\n size=\"small\"\n checked={showAxisArrows.xMax}\n disabled={disabled}\n onChange={() => onChange(\"xMax\")}\n />\n </div>\n <div className=\"perseus-widget-right-col\">\n <LabeledSwitch\n label=\"y max\"\n labelSide=\"start\"\n size=\"small\"\n checked={showAxisArrows.yMax}\n disabled={disabled}\n onChange={() => onChange(\"yMax\")}\n />\n </div>\n </div>\n </>\n );\n}\n","import {sizing} from \"@khanacademy/wonder-blocks-tokens\";\nimport {BodyText} from \"@khanacademy/wonder-blocks-typography\";\nimport React from \"react\";\n\nimport LabeledSwitch from \"../../../components/labeled-switch\";\n\nimport type {ShowAxisTicks} from \"@khanacademy/perseus-core\";\n\ninterface AxisTickSwitchesProps {\n showAxisTicks: ShowAxisTicks;\n onChange: (axis: keyof ShowAxisTicks) => void;\n disabled: boolean;\n}\n\nexport default function AxisTickSwitches(props: AxisTickSwitchesProps) {\n const {showAxisTicks, onChange, disabled} = props;\n\n return (\n <>\n <BodyText size=\"small\">Ticks</BodyText>\n <div\n className=\"perseus-widget-row\"\n style={{\n display: \"flex\",\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: sizing.size_060,\n }}\n >\n <div className=\"perseus-widget-left-col\">\n <LabeledSwitch\n label=\"x-axis\"\n labelSide=\"start\"\n size=\"small\"\n checked={showAxisTicks.x}\n disabled={disabled}\n onChange={() => onChange(\"x\")}\n />\n </div>\n <div className=\"perseus-widget-right-col\">\n <LabeledSwitch\n label=\"y-axis\"\n labelSide=\"start\"\n size=\"small\"\n checked={showAxisTicks.y}\n disabled={disabled}\n onChange={() => onChange(\"y\")}\n />\n </div>\n </div>\n </>\n );\n}\n","/**\n * Used in the editor for the InteractiveGraph widget.\n */\nimport {components, interactiveSizes, Util} from \"@khanacademy/perseus\";\nimport Banner from \"@khanacademy/wonder-blocks-banner\";\nimport Button from \"@khanacademy/wonder-blocks-button\";\nimport {View} from \"@khanacademy/wonder-blocks-core\";\nimport {Checkbox} from \"@khanacademy/wonder-blocks-form\";\nimport * as React from \"react\";\nimport _ from \"underscore\";\n\nimport Heading from \"../../../components/heading\";\nimport InfoTip from \"../../../components/info-tip\";\nimport {deprecatedChangeableChange} from \"../../../mixins/changeable\";\nimport LabeledRow from \"../locked-figures/labeled-row\";\n\nimport AxisArrowSwitches from \"./axis-arrow-switches\";\nimport AxisTickSwitches from \"./axis-tick-switches\";\nimport styles from \"./interactive-graph-settings.module.css\";\n\nimport type {ChangeFn} from \"../../../mixins/changeable\";\nimport type {APIOptionsWithDefaults} from \"@khanacademy/perseus\";\nimport type {\n AxisLabelLocation,\n ShowAxisArrows,\n ShowAxisTicks,\n MarkingsType,\n PerseusImageBackground,\n} from \"@khanacademy/perseus-core\";\n\nconst {ButtonGroup, RangeInput} = components;\n\nconst defaultBackgroundImage = {\n url: null,\n width: 0,\n height: 0,\n} as const;\n\nfunction numSteps(range: any, step: any) {\n return Math.floor((range[1] - range[0]) / step);\n}\n\ntype Range = [min: number, max: number];\n\ninterface Props {\n /**\n * The size of the graph area in pixels.\n */\n box: [x: number, y: number];\n /**\n * The labels for the x and y axes.\n */\n labels: ReadonlyArray<string>;\n /**\n * Specifies the location of the labels on the graph. default: \"onAxis\".\n * - \"onAxis\": Labels are positioned on the axis at the right (x) and top (y) of the graph.\n * - \"alongEdge\": Labels are centered along the bottom (x) and left (y) edges of the graph.\n * The y label is rotated. Typically used when the range min is near 0 with longer labels.\n */\n labelLocation: AxisLabelLocation;\n /**\n * The range of the graph.\n */\n range: [x: Range, y: Range];\n /**\n * Whether the graph is bounded (no axis arrows) on the x and y axes.\n */\n showAxisArrows: ShowAxisArrows;\n /**\n * Whether to show tick marks and tick numbers per axis.\n */\n showAxisTicks: ShowAxisTicks;\n /**\n * How far apart the tick marks on the axes are in the x and y\n * directions.\n */\n step: [x: number, y: number];\n /**\n * How far apart the grid lines are in the x and y directions.\n */\n gridStep: [x: number, y: number];\n /**\n * How far apart the snap-to points are in the x and y directions.\n */\n snapStep: [x: number, y: number];\n /**\n * An error message to display in the graph area, or true if the\n * graph is valid.\n */\n valid: true | string;\n /**\n * The background image to display in the graph area and its properties.\n */\n backgroundImage: PerseusImageBackground;\n\n /**\n * The type of markings to display on the graph.\n * - axes: shows the axes without the gride lines\n * - graph: shows the axes and the grid lines\n * - grid: shows only the grid lines\n * - none: shows no markings\n */\n markings: MarkingsType;\n /**\n * Whether to show the protractor on the graph.\n */\n showProtractor: boolean;\n /**\n * Whether to show tooltips on the graph.\n */\n showTooltips: boolean;\n\n onChange: (arg1: Partial<Props>) => void;\n\n apiOptions: APIOptionsWithDefaults;\n}\n\ninterface State {\n isExpanded: boolean;\n labelsTextbox: ReadonlyArray<string>;\n labelLocation: AxisLabelLocation;\n gridStepTextbox: [x: number, y: number];\n snapStepTextbox: [x: number, y: number];\n stepTextbox: [x: number, y: number];\n rangeTextbox: [x: Range, y: Range];\n showAxisArrowsSwitches: ShowAxisArrows;\n showAxisTicksSwitches: ShowAxisTicks;\n backgroundImage: PerseusImageBackground;\n}\n\nclass InteractiveGraphSettings extends React.Component<Props, State> {\n _isMounted = false;\n\n bgUrlRef = React.createRef<HTMLInputElement>();\n labelXRef = React.createRef<HTMLInputElement>();\n labelYRef = React.createRef<HTMLInputElement>();\n\n static stateFromProps(props: Props) {\n return {\n labelsTextbox: props.labels,\n labelLocation: props.labelLocation,\n gridStepTextbox: props.gridStep,\n snapStepTextbox: props.snapStep,\n stepTextbox: props.step,\n rangeTextbox: props.range,\n showAxisArrowsSwitches: props.showAxisArrows,\n showAxisTicksSwitches: props.showAxisTicks,\n backgroundImage: {...props.backgroundImage},\n };\n }\n\n constructor(props: Props) {\n super(props);\n\n this.state = {\n isExpanded: true,\n ...InteractiveGraphSettings.stateFromProps(props),\n };\n }\n\n static defaultProps = {\n box: [\n interactiveSizes.defaultBoxSizeSmall,\n interactiveSizes.defaultBoxSizeSmall,\n ],\n labels: [\"$x$\", \"$y$\"],\n labelLocation: \"onAxis\",\n range: [\n [-10, 10],\n [-10, 10],\n ],\n step: [1, 1],\n gridStep: [1, 1],\n snapStep: [1, 1],\n valid: true,\n backgroundImage: defaultBackgroundImage,\n markings: \"graph\",\n showProtractor: false,\n showTooltips: false,\n showAxisArrows: {\n xMin: true,\n xMax: true,\n yMin: true,\n yMax: true,\n },\n showAxisTicks: {x: true, y: true},\n };\n\n componentDidMount() {\n // NOTE(scottgrant): This is a hack to remove the deprecated call to\n // this.isMounted() but is still considered an anti-pattern.\n this._isMounted = true;\n\n this.changeGraph = _.debounce(this.changeGraph, 300);\n }\n\n UNSAFE_componentWillReceiveProps(nextProps) {\n if (\n !_.isEqual(this.props.labels, nextProps.labels) ||\n !_.isEqual(this.props.labelLocation, nextProps.labelLocation) ||\n !_.isEqual(this.props.gridStep, nextProps.gridStep) ||\n !_.isEqual(this.props.snapStep, nextProps.snapStep) ||\n !_.isEqual(this.props.step, nextProps.step) ||\n !_.isEqual(this.props.range, nextProps.range) ||\n !_.isEqual(this.props.backgroundImage, nextProps.backgroundImage)\n ) {\n this.setState(InteractiveGraphSettings.stateFromProps(nextProps));\n }\n }\n\n componentWillUnmount() {\n this._isMounted = false;\n }\n\n change: ChangeFn = (...args) => {\n return deprecatedChangeableChange.apply(this, args);\n };\n\n changeBackgroundUrl = (e) => {\n // Only continue on blur or \"enter\"\n if (e.type === \"keypress\" && e.key !== \"Enter\") {\n return;\n }\n\n const setUrl = (url, width: number, height: number) => {\n // Shallow-copied clone\n const image = {...this.props.backgroundImage};\n image.url = url;\n image.width = width;\n image.height = height;\n this.setState(\n {\n backgroundImage: image,\n },\n this.changeGraph,\n );\n };\n\n const url = this.bgUrlRef.current?.value;\n if (url) {\n Util.getImageSize(url, (width, height) => {\n if (this._isMounted) {\n setUrl(url, width, height);\n }\n });\n } else {\n setUrl(null, 0, 0);\n }\n };\n\n renderLabelChoices = (choices) => {\n return choices.map((nameAndValue) => (\n <option key={nameAndValue[1]} value={nameAndValue[1]}>\n {nameAndValue[0]}\n </option>\n ));\n };\n\n validRange = (range) => {\n const numbers = _.every(range, function (num) {\n return _.isFinite(num);\n });\n if (!numbers) {\n return \"Range must be a valid number\";\n }\n if (range[0] >= range[1]) {\n return \"Range must have a higher number on the right\";\n }\n return true;\n };\n\n validateStepValue = (settings) => {\n const {step, range, name, minTicks, maxTicks} = settings;\n\n const nSteps = numSteps(range, step);\n if (nSteps < minTicks) {\n return (\n name +\n \" is too large, there must be at least \" +\n minTicks +\n \" ticks.\"\n );\n }\n if (nSteps > maxTicks) {\n return (\n name +\n \" is too small, there can be at most \" +\n maxTicks +\n \" ticks.\"\n );\n }\n return true;\n };\n\n validSnapStep = (step, range) => {\n return this.validateStepValue({\n step: step,\n range: range,\n name: \"Snap step\",\n minTicks: 5,\n maxTicks: 60,\n });\n };\n\n validGridStep = (step, range) => {\n return this.validateStepValue({\n step: step,\n range: range,\n name: \"Grid step\",\n minTicks: 3,\n maxTicks: 60,\n });\n };\n\n validStep = (step, range) => {\n return this.validateStepValue({\n step: step,\n range: range,\n name: \"Step\",\n minTicks: 3,\n maxTicks: 20,\n });\n };\n\n validBackgroundImageSize = (image) => {\n // Ignore empty images\n if (!image.url) {\n return true;\n }\n\n const validSize = image.width <= 450 && image.height <= 450;\n\n if (!validSize) {\n return \"Image must be smaller than 450px x 450px.\";\n }\n return true;\n };\n\n validateGraphSettings = (range, step, gridStep, snapStep, image) => {\n const self = this;\n let msg;\n const goodRange = _.every(range, function (range) {\n msg = self.validRange(range);\n return msg === true;\n });\n if (!goodRange) {\n return msg;\n }\n const goodStep = _.every(step, function (step, i) {\n msg = self.validStep(step, range[i]);\n return msg === true;\n });\n if (!goodStep) {\n return msg;\n }\n const goodGridStep = _.every(gridStep, function (gridStep, i) {\n msg = self.validGridStep(gridStep, range[i]);\n return msg === true;\n });\n if (!goodGridStep) {\n return msg;\n }\n const goodSnapStep = _.every(snapStep, function (snapStep, i) {\n msg = self.validSnapStep(snapStep, range[i]);\n return msg === true;\n });\n if (!goodSnapStep) {\n return msg;\n }\n const goodImageSize = this.validBackgroundImageSize(image);\n if (goodImageSize !== true) {\n msg = goodImageSize;\n return msg;\n }\n return true;\n };\n\n changeLabel = (i, e) => {\n const val = e.target.value;\n const labels = this.state.labelsTextbox.slice();\n labels[i] = val;\n this.setState({labelsTextbox: labels}, this.changeGraph);\n };\n\n changeRange = (i, values) => {\n const ranges = this.state.rangeTextbox.slice();\n ranges[i] = values;\n\n this.setState(\n {\n // eslint-disable-next-line no-restricted-syntax\n rangeTextbox: ranges as [[number, number], [number, number]],\n },\n this.changeGraph,\n );\n };\n\n changeShowAxisArrows = (axis: keyof ShowAxisArrows) => {\n const newShowAxisArrows = {...this.state.showAxisArrowsSwitches};\n // Toggle the value of the axis switch.\n newShowAxisArrows[axis] = !newShowAxisArrows[axis];\n\n this.setState(\n {showAxisArrowsSwitches: newShowAxisArrows},\n this.changeGraph,\n );\n };\n\n changeShowAxisTicks = (axis: keyof ShowAxisTicks) => {\n const newShowAxisTicks = {...this.state.showAxisTicksSwitches};\n newShowAxisTicks[axis] = !newShowAxisTicks[axis];\n\n this.setState(\n {showAxisTicksSwitches: newShowAxisTicks},\n this.changeGraph,\n );\n };\n\n changeStepsBasedOnRange = () => {\n const ranges = this.state.rangeTextbox.slice();\n\n const step = this.state.stepTextbox.slice();\n const gridStep = this.state.gridStepTextbox.slice();\n const snapStep = this.state.snapStepTextbox.slice();\n\n // Update values based on X range\n const scaleX = Util.scaleFromExtent(ranges[0], this.props.box[0]);\n if (this.validRange(ranges[0]) === true) {\n step[0] = Util.tickStepFromExtent(ranges[0], this.props.box[0]);\n\n const gridStepValue = Util.gridStepFromTickStep(step[0], scaleX);\n if (gridStepValue) {\n gridStep[0] = gridStepValue;\n }\n\n snapStep[0] = gridStep[0] / 2;\n }\n\n // Update values based on Y range\n const scaleY = Util.scaleFromExtent(ranges[1], this.props.box[1]);\n if (this.validRange(ranges[1]) === true) {\n step[1] = Util.tickStepFromExtent(ranges[1], this.props.box[1]);\n\n const gridStepValue = Util.gridStepFromTickStep(step[1], scaleY);\n if (gridStepValue) {\n gridStep[1] = gridStepValue;\n }\n\n snapStep[1] = gridStep[1] / 2;\n }\n\n this.setState(\n {\n // eslint-disable-next-line no-restricted-syntax\n stepTextbox: step as [number, number],\n // eslint-disable-next-line no-restricted-syntax\n gridStepTextbox: gridStep as [number, number],\n // eslint-disable-next-line no-restricted-syntax\n snapStepTextbox: snapStep as [number, number],\n // eslint-disable-next-line no-restricted-syntax\n rangeTextbox: ranges as [[number, number], [number, number]],\n },\n this.changeGraph,\n );\n };\n\n changeStep = (step) => {\n this.setState({stepTextbox: step}, this.changeGraph);\n };\n\n changeSnapStep = (snapStep) => {\n this.setState({snapStepTextbox: snapStep}, this.changeGraph);\n };\n\n changeGridStep = (gridStep) => {\n this.setState(\n {\n gridStepTextbox: gridStep,\n // eslint-disable-next-line no-restricted-syntax\n snapStepTextbox: gridStep.map(function (step) {\n return step / 2;\n }) as [number, number],\n },\n this.changeGraph,\n );\n };\n\n changeGraph = () => {\n const labels = this.state.labelsTextbox;\n const labelLocation = this.state.labelLocation;\n const range = this.state.rangeTextbox.map((range) =>\n range.map((value) => Number(value)),\n );\n const showAxisArrows = this.state.showAxisArrowsSwitches;\n const showAxisTicks = this.state.showAxisTicksSwitches;\n const step = this.state.stepTextbox.map((value) => Number(value));\n const gridStep = this.state.gridStepTextbox;\n const snapStep = this.state.snapStepTextbox;\n const image = this.state.backgroundImage;\n\n // validationResult is either:\n // true -> the settings are valid\n // a string -> the settings are invalid, and the explanation\n // is contained in the string\n const validationResult = this.validateGraphSettings(\n range,\n step,\n gridStep,\n snapStep,\n image,\n );\n\n if (validationResult === true) {\n // either true or a string\n this.change({\n valid: true,\n labels: labels,\n labelLocation: labelLocation,\n range: range,\n showAxisArrows: showAxisArrows,\n showAxisTicks: showAxisTicks,\n step: step,\n gridStep: gridStep,\n snapStep: snapStep,\n backgroundImage: image,\n });\n } else {\n this.change({\n valid: validationResult, // a string message, not false\n });\n }\n };\n\n render() {\n const editingDisabled = this.props.apiOptions?.editingDisabled ?? false;\n return (\n <>\n <Heading\n title=\"Common Graph Settings\"\n isOpen={this.state.isExpanded}\n isCollapsible={true}\n onToggle={() =>\n this.setState({isExpanded: !this.state.isExpanded})\n }\n />\n {this.state.isExpanded && (\n <View>\n <div className=\"graph-settings\">\n <div className=\"perseus-widget-row\">\n <LabeledRow label=\"Label Location\">\n <ButtonGroup\n value={this.props.labelLocation}\n buttons={[\n {\n value: \"onAxis\",\n content: \"On Axis\",\n },\n {\n value: \"alongEdge\",\n content: \"Along Graph Edge\",\n },\n ]}\n onChange={this.change(\"labelLocation\")}\n disabled={editingDisabled}\n />\n </LabeledRow>\n </div>\n\n <div className=\"perseus-widget-row\">\n <div className=\"perseus-widget-left-col\">\n <LabeledRow label=\"x Label\">\n <input\n type=\"text\"\n className=\"graph-settings-axis-label\"\n ref={this.labelXRef}\n onChange={(e) =>\n this.changeLabel(0, e)\n }\n value={\n this.state.labelsTextbox[0] ||\n \"\"\n }\n />\n </LabeledRow>\n </div>\n <div className=\"perseus-widget-right-col\">\n <LabeledRow label=\"y Label\">\n <input\n type=\"text\"\n className=\"graph-settings-axis-label\"\n ref={this.labelYRef}\n onChange={(e) =>\n this.changeLabel(1, e)\n }\n value={\n this.state.labelsTextbox[1] ||\n \"\"\n }\n />\n </LabeledRow>\n </div>\n </div>\n\n <div className=\"perseus-widget-row\">\n <div className=\"perseus-widget-left-col\">\n <LabeledRow label=\"x Range\">\n <RangeInput\n value={this.state.rangeTextbox[0]}\n onChange={(vals) =>\n this.changeRange(0, vals)\n }\n allowPiTruncation={true}\n />\n </LabeledRow>\n </div>\n <div className=\"perseus-widget-right-col\">\n <LabeledRow label=\"y Range\">\n <RangeInput\n value={this.state.rangeTextbox[1]}\n onChange={(vals) =>\n this.changeRange(1, vals)\n }\n allowPiTruncation={true}\n />\n </LabeledRow>\n </div>\n </div>\n <AxisArrowSwitches\n showAxisArrows={\n this.state.showAxisArrowsSwitches\n }\n onChange={this.changeShowAxisArrows}\n disabled={\n this.props.apiOptions?.editingDisabled ??\n false\n }\n />\n <AxisTickSwitches\n showAxisTicks={this.state.showAxisTicksSwitches}\n onChange={this.changeShowAxisTicks}\n disabled={\n this.props.apiOptions?.editingDisabled ??\n false\n }\n />\n <div className=\"perseus-widget-row\">\n <div className=\"perseus-widget-left-col\">\n <LabeledRow label=\"Tick Step\">\n <RangeInput\n value={this.state.stepTextbox}\n onChange={this.changeStep}\n allowPiTruncation={true}\n />\n </LabeledRow>\n </div>\n <div className=\"perseus-widget-right-col\">\n <LabeledRow label=\"Grid Step\">\n <RangeInput\n value={this.state.gridStepTextbox}\n onChange={this.changeGridStep}\n allowPiTruncation={true}\n />\n </LabeledRow>\n </div>\n </div>\n <div className=\"perseus-widget-row\">\n <div className=\"perseus-widget-left-col\">\n <LabeledRow label=\"Snap Step\">\n <RangeInput\n value={this.state.snapStepTextbox}\n onChange={this.changeSnapStep}\n allowPiTruncation={true}\n />\n </LabeledRow>\n </div>\n <div className=\"perseus-widget-right-col\">\n <Button\n size=\"small\"\n kind=\"tertiary\"\n onClick={() => {\n this.changeStepsBasedOnRange();\n }}\n disabled={editingDisabled}\n >\n Auto-adjust steps\n </Button>\n <InfoTip>\n <p>\n Use the \"Auto-adjust\" steps button\n to update the tick step, grid step,\n and snap step to values that are\n valid for the current range.\n </p>\n <br />\n <p>\n This is useful when the range is\n changed, and the graph errors due to\n the step sizes being too large or\n too small.\n </p>\n </InfoTip>\n </div>\n </div>\n <div className=\"perseus-widget-row\">\n <LabeledRow label=\"Markings\">\n <ButtonGroup\n value={this.props.markings}\n buttons={[\n {value: \"axes\", content: \"Axes\"},\n {value: \"graph\", content: \"Graph\"},\n {value: \"grid\", content: \"Grid\"},\n {value: \"none\", content: \"None\"},\n ]}\n onChange={this.change(\"markings\")}\n disabled={editingDisabled}\n />\n </LabeledRow>\n </div>\n <div className=\"perseus-widget-left-col\">\n <Checkbox\n label=\"Show tooltips\"\n checked={this.props.showTooltips}\n onChange={(value) => {\n this.change({showTooltips: value});\n }}\n disabled={editingDisabled}\n />\n </div>\n </div>\n\n <LabeledRow\n label=\"Background image URL\"\n style={{marginBlockStart: 0}}\n >\n <input\n type=\"text\"\n className={styles.backgroundUrlInput}\n ref={this.bgUrlRef}\n value={this.state.backgroundImage.url || \"\"}\n onChange={(e) => {\n // Shallow-copied clone\n const image = {\n ...this.props.backgroundImage,\n };\n image.url = e.target.value;\n this.setState({backgroundImage: image});\n }}\n onKeyPress={this.changeBackgroundUrl}\n onBlur={this.changeBackgroundUrl}\n />\n <InfoTip>\n <p>\n Create an image in graphie, or use the\n &quot;Add image&quot; function to create a\n background.\n </p>\n </InfoTip>\n </LabeledRow>\n\n <View className={styles.protractorSection}>\n <View className={styles.checkboxRow}>\n <Checkbox\n label=\"Show protractor\"\n checked={this.props.showProtractor}\n onChange={(value) => {\n this.change({showProtractor: value});\n }}\n disabled={editingDisabled}\n style={{marginBlockStart: 0}}\n />\n </View>\n {this.props.showProtractor && (\n <Banner\n text=\"The protractor is not accessible. Please consider an alternate approach.\"\n kind=\"warning\"\n />\n )}\n </View>\n </View>\n )}\n </>\n );\n }\n}\n\nexport default InteractiveGraphSettings;\n","import {NeutralBadge, StatusBadge} from \"@khanacademy/wonder-blocks-badge\";\nimport {View} from \"@khanacademy/wonder-blocks-core\";\nimport {Spring} from \"@khanacademy/wonder-blocks-layout\";\nimport Switch from \"@khanacademy/wonder-blocks-switch\";\nimport {font, sizing} from \"@khanacademy/wonder-blocks-tokens\";\nimport {BodyText} from \"@khanacademy/wonder-blocks-typography\";\nimport * as React from \"react\";\n\nimport Heading from \"../../../components/heading\";\nimport InfoTip from \"../../../components/info-tip\";\n\nimport styles from \"./interactive-graph-sr-tree.module.css\";\n\nimport type {StyleType} from \"@khanacademy/wonder-blocks-core\";\n\n// Passed to the Badge `styles` prop, which is typed as Wonder Blocks `StyleType`\n// (per-part: root/label) and does not accept a className.\nconst badgeSpacingStyle: StyleType = {marginInlineEnd: sizing.size_060};\n// Badges default to a bold label, but these decorative role/tag indicators\n// should read at the regular body weight (matching the old Pill look).\nconst badgeLabelStyle: StyleType = {fontWeight: font.weight.regular};\n\ninterface Attribute {\n name: string;\n value: string;\n}\n\ninterface AttributeMap {\n roleOrTag: string;\n className: string;\n attributes: Array<Attribute>;\n}\n\n// Exported for testing\nexport function getAccessibilityAttributes(graphId: string): AttributeMap[] {\n const elementArias: Array<AttributeMap> = [];\n\n // TODO(nisha): Change this to use ref after the graph has a non-string\n // ref and the InteractiveGraph component forwards refs.\n const container = document.getElementById(graphId);\n\n if (!container) {\n return elementArias;\n }\n\n // Traverse through all the children of the container and\n // collect the aria-labels and aria-descriptions.\n container.querySelectorAll(\"*\").forEach((element) => {\n // List to return with all the aria-labels and aria-descriptions.\n const elementAttributes: Array<Attribute> = [];\n\n const ariaLabel = element.getAttribute(\"aria-label\");\n const ariaDescribedby = element.getAttribute(\"aria-describedby\");\n\n if (ariaLabel) {\n // Add the aria-label to the front of the array so\n // it shows up first for this element in the tree.\n elementAttributes.unshift({\n name: \"label\",\n value: ariaLabel,\n });\n }\n if (ariaDescribedby) {\n // Aria-description is a space-separated list of ids.\n // Use the ids to get the actual description strings.\n const descriptions = ariaDescribedby.split(/ +/);\n for (const description of descriptions) {\n const descriptionString =\n document.getElementById(description)?.textContent;\n\n if (descriptionString) {\n elementAttributes.push({\n name: \"description\",\n value: descriptionString,\n });\n }\n }\n }\n\n // Only push the element to the list if it has aria-labels\n // or aria-descriptions.\n if (elementAttributes.length > 0) {\n elementArias.push({\n roleOrTag:\n element.getAttribute(\"role\") ||\n element.tagName.toLowerCase(),\n // Use the last class in the list of classes to avoid the\n // prepend classes that are not relevant, such as the\n // obscured inline styles.\n className:\n element.classList[element.classList.length - 1] || \"\",\n attributes: elementAttributes,\n });\n }\n });\n\n return elementArias;\n}\n\ninterface Props {\n elementArias: Array<AttributeMap>;\n showTags: boolean;\n}\n\nfunction SRTree(props: Props) {\n const {elementArias, showTags} = props;\n\n // Each list item of this ordered list is the role/rag of the element\n // followed by an unordered list of its aria attributes.\n return (\n <ol className={styles.treeList}>\n {elementArias.map((aria, index) => (\n <li key={index}>\n {showTags && (\n <StatusBadge\n kind=\"success\"\n label={aria.roleOrTag}\n showBorder={false}\n styles={{\n root: badgeSpacingStyle,\n label: badgeLabelStyle,\n }}\n />\n )}\n {aria.className}\n <ul className={styles.indentList}>\n {aria.attributes.map((value, index) => (\n <li key={index}>\n {value.name === \"label\" ? (\n <StatusBadge\n kind=\"info\"\n label={value.name}\n showBorder={false}\n styles={{\n root: badgeSpacingStyle,\n label: badgeLabelStyle,\n }}\n />\n ) : (\n <NeutralBadge\n label={value.name}\n showBorder={false}\n styles={{\n root: badgeSpacingStyle,\n label: badgeLabelStyle,\n }}\n />\n )}\n {value.value}\n </li>\n ))}\n </ul>\n </li>\n ))}\n </ol>\n );\n}\n\nfunction InteractiveGraphSRTree({\n // The graph whos accessibility tree we want to display.\n // This is necessary when there are multiple graphs on the editor\n // page, such as when there are also hints.\n graphId,\n correct,\n fullGraphAriaLabel,\n fullGraphAriaDescription,\n lockedFigures,\n editingDisabled = false,\n}) {\n const [isExpanded, setIsExpanded] = React.useState(true);\n const [showTags, setShowTags] = React.useState(false);\n const [elementArias, setElementArias] = React.useState<AttributeMap[]>([]);\n const switchId = React.useId();\n\n // Update the tree when the graph is updated.\n React.useEffect(() => {\n setElementArias(getAccessibilityAttributes(graphId));\n }, [\n // Update the tree when the \"correct preview\" graph is updated.\n correct,\n fullGraphAriaLabel,\n fullGraphAriaDescription,\n graphId,\n lockedFigures,\n ]);\n\n return (\n <>\n <Heading\n title=\"Screen reader tree\"\n isOpen={isExpanded}\n onToggle={setIsExpanded}\n isCollapsible={true}\n />\n {isExpanded && (\n <>\n <View className={styles.switchRow}>\n <Switch\n id={switchId}\n checked={showTags}\n onChange={setShowTags}\n disabled={editingDisabled}\n />\n <BodyText size=\"small\" tag=\"label\" htmlFor={switchId}>\n Show HTML roles/tags\n </BodyText>\n <Spring />\n <InfoTip>\n This screen reader tree shows the ARIA labels and\n descriptions for elements within the \"correct\n answer\" Interactive Graph widget displayed above.\n </InfoTip>\n </View>\n <SRTree elementArias={elementArias} showTags={showTags} />\n </>\n )}\n </>\n );\n}\n\nexport default InteractiveGraphSRTree;\n","import {View} from \"@khanacademy/wonder-blocks-core\";\nimport {Checkbox} from \"@khanacademy/wonder-blocks-form\";\nimport {BodyText} from \"@khanacademy/wonder-blocks-typography\";\nimport * as React from \"react\";\nimport invariant from \"tiny-invariant\";\n\nimport InfoTip from \"../../../components/info-tip\";\nimport {TypedSingleSelect} from \"../../../components/typed-single-select\";\nimport {parsePointCount} from \"../../../util/points\";\nimport styles from \"../interactive-graph-editor.module.css\";\nimport LabeledRow from \"../locked-figures/labeled-row\";\n\nimport type {Props as EditorProps} from \"../interactive-graph-editor\";\nimport type {\n PerseusGraphType,\n PerseusGraphTypePolygon,\n} from \"@khanacademy/perseus-core\";\n\nconst POLYGON_SIDES_OPTIONS: Record<string, string> = {\n \"3\": \"3 sides\",\n \"4\": \"4 sides\",\n \"5\": \"5 sides\",\n \"6\": \"6 sides\",\n \"7\": \"7 sides\",\n \"8\": \"8 sides\",\n \"9\": \"9 sides\",\n \"10\": \"10 sides\",\n \"11\": \"11 sides\",\n \"12\": \"12 sides\",\n unlimited: \"unlimited sides\",\n};\n\ninterface Props {\n correct: PerseusGraphTypePolygon;\n graph: PerseusGraphType | undefined;\n onChange: (props: Partial<EditorProps>) => void;\n}\n\nexport default function PolygonAnswerOptions({\n correct,\n graph,\n onChange,\n}: Props) {\n return (\n <>\n <LabeledRow label=\"Number of sides:\">\n <TypedSingleSelect\n key=\"polygon-select\"\n selectedValue={\n // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n correct?.numSides ? `${correct.numSides}` : \"3\"\n }\n options={POLYGON_SIDES_OPTIONS}\n onChange={(newValue) => {\n invariant(graph?.type === \"polygon\");\n const updates = {\n numSides: parsePointCount(newValue),\n coords: undefined,\n startCoords: undefined,\n // reset the snap for UNLIMITED, which\n // only supports \"grid\"\n // From: D6578\n snapTo: \"grid\",\n } as const;\n\n onChange({\n correct: {\n ...correct,\n ...updates,\n },\n graph: {\n ...graph,\n ...updates,\n },\n });\n }}\n className={styles.singleSelectShort}\n />\n </LabeledRow>\n <LabeledRow label=\"Snap to:\">\n <TypedSingleSelect\n selectedValue={correct.snapTo || \"grid\"}\n options={{\n grid: \"grid\",\n // \"interior angles\" and \"side measures\" only apply to\n // polygons with a fixed number of sides; hide them (via\n // a falsey label) when the side count is unlimited.\n angles:\n correct.numSides !== \"unlimited\" &&\n \"interior angles\",\n sides:\n correct.numSides !== \"unlimited\" && \"side measures\",\n }}\n onChange={(newValue) => {\n invariant(\n graph?.type === \"polygon\",\n `Expected graph type to be polygon, but got ${graph?.type}`,\n );\n\n const updates = {\n snapTo: newValue,\n coords: null,\n } as const;\n\n onChange({\n correct: {\n ...correct,\n ...updates,\n },\n graph: {\n ...graph,\n ...updates,\n },\n });\n }}\n className={styles.singleSelectShort}\n />\n <InfoTip>\n <p>\n These options affect the movement of the vertex points.\n The grid option will guide the points to the nearest\n half step along the grid.\n </p>\n <p>\n The interior angle and side measure options guide the\n points to the nearest whole angle or side measure\n respectively.\n </p>\n </InfoTip>\n </LabeledRow>\n <View className={styles.row}>\n <Checkbox\n label={\n <BodyText size=\"small\" tag=\"span\">\n Show angle measures\n </BodyText>\n }\n checked={\n // Don't show indeterminate checkbox state\n !!correct?.showAngles\n }\n onChange={() => {\n if (graph?.type === \"polygon\") {\n invariant(\n correct.type === \"polygon\",\n `Expected graph type to be polygon, but got ${correct.type}`,\n );\n onChange({\n correct: {\n ...correct,\n showAngles: !correct.showAngles,\n },\n graph: {\n ...graph,\n showAngles: !graph.showAngles,\n },\n });\n }\n }}\n />\n <InfoTip>\n <p>Displays the interior angle measures.</p>\n </InfoTip>\n </View>\n <View className={styles.row}>\n <Checkbox\n label={\n <BodyText size=\"small\" tag=\"span\">\n Show side measures\n </BodyText>\n }\n checked={\n // Don't show indeterminate checkbox state\n !!correct?.showSides\n }\n onChange={() => {\n if (\n graph?.type === \"polygon\" &&\n correct.type === \"polygon\"\n ) {\n onChange({\n correct: {\n ...correct,\n showSides: !correct.showSides,\n },\n graph: {\n ...graph,\n showSides: !graph.showSides,\n },\n });\n }\n }}\n />\n <InfoTip>\n <p>Displays the side lengths.</p>\n </InfoTip>\n </View>\n <LabeledRow label=\"Student answer must\">\n <TypedSingleSelect\n selectedValue={correct.match || \"exact\"}\n onChange={(match) => {\n onChange({correct: {...correct, match}});\n }}\n options={{\n exact: \"match exactly\",\n congruent: \"be congruent\",\n approx: \"be approximately congruent\",\n similar: \"be similar\",\n }}\n className={styles.singleSelectShort}\n />\n\n <InfoTip>\n <ul>\n <li>\n <p>\n <b>Match Exactly:</b> Match exactly in size,\n orientation, and location on the grid even if it\n is not shown in the background.\n </p>\n </li>\n <li>\n <p>\n <b>Be Congruent:</b> Be congruent in size and\n shape, but can be located anywhere on the grid.\n </p>\n </li>\n <li>\n <p>\n <b>Be Approximately Congruent:</b> Be exactly\n similar, and congruent in size and shape to\n within 0.1 units, but can be located anywhere on\n the grid.{\" \"}\n <em>\n Use this with snapping to angle measure.\n </em>\n </p>\n </li>\n <li>\n <p>\n <b>Be Similar:</b> Be similar with matching\n interior angles, and side measures that are\n matching or a multiple of the correct side\n measures. The figure can be located anywhere on\n the grid.\n </p>\n </li>\n </ul>\n </InfoTip>\n </LabeledRow>\n </>\n );\n}\n","import * as React from \"react\";\n\nimport {TypedSingleSelect} from \"../../../components/typed-single-select\";\nimport styles from \"../interactive-graph-editor.module.css\";\nimport LabeledRow from \"../locked-figures/labeled-row\";\n\nimport type {Props as EditorProps} from \"../interactive-graph-editor\";\nimport type {\n PerseusGraphType,\n PerseusGraphTypeSegment,\n} from \"@khanacademy/perseus-core\";\n\ninterface Props {\n correct: PerseusGraphTypeSegment;\n graph: PerseusGraphType | undefined;\n onChange: (props: Partial<EditorProps>) => void;\n}\n\n// Keys are the segment counts; values are the visible labels. `ValueT` is\n// `string` here — the count is parsed back to a number in `onChange` — so this\n// gains no type safety, but keeps the options model consistent with the other\n// selectors.\nconst segmentCountOptions: Record<string, string> = {\n \"1\": \"1 segment\",\n \"2\": \"2 segments\",\n \"3\": \"3 segments\",\n \"4\": \"4 segments\",\n \"5\": \"5 segments\",\n \"6\": \"6 segments\",\n};\n\nconst SegmentCountSelector = ({correct, graph, onChange}: Props) => (\n <LabeledRow label=\"Number of segments:\">\n <TypedSingleSelect\n key=\"segment-select\"\n selectedValue={`${correct.numSegments ?? 1}`}\n options={segmentCountOptions}\n onChange={(newValue) => {\n const sides = +newValue;\n\n onChange({\n correct: {\n type: \"segment\",\n numSegments: sides,\n coords: null,\n },\n graph: {\n type: \"segment\",\n numSegments: sides,\n },\n });\n }}\n className={styles.singleSelectShort}\n />\n </LabeledRow>\n);\n\nexport default SegmentCountSelector;\n","import {View} from \"@khanacademy/wonder-blocks-core\";\nimport * as React from \"react\";\n\nimport InfoTip from \"../../../components/info-tip\";\nimport LabeledSwitch from \"../../../components/labeled-switch\";\n\nimport styles from \"./show-point-labels-toggle.module.css\";\n\ninterface Props {\n showPointLabels: boolean;\n pointLabels: ReadonlyArray<string> | undefined;\n onChange: (showPointLabels: boolean) => void;\n}\n\n// Editor-level toggle for the graph's `showPointLabels` field. The toggle\n// is disabled until at least one point has a non-empty label; the InfoTip\n// explains why. When on, points with a custom label display it and\n// unlabeled points show nothing.\nexport default function ShowPointLabelsToggle({\n showPointLabels,\n pointLabels,\n onChange,\n}: Props) {\n const hasAtLeastOneLabel =\n pointLabels !== undefined && pointLabels.some((label) => label !== \"\");\n\n return (\n <View className={styles.switchRow}>\n <LabeledSwitch\n label=\"Show point labels\"\n checked={hasAtLeastOneLabel && showPointLabels}\n disabled={!hasAtLeastOneLabel}\n onChange={onChange}\n />\n <InfoTip>\n When on, each labeled movable point displays a visible label\n next to it. Add a label to at least one point below to enable\n this option; unlabeled points render without a label.\n </InfoTip>\n </View>\n );\n}\n","import * as React from \"react\";\n\nimport InfoTip from \"../../../components/info-tip\";\nimport {TypedSingleSelect} from \"../../../components/typed-single-select\";\nimport styles from \"../interactive-graph-editor.module.css\";\nimport LabeledRow from \"../locked-figures/labeled-row\";\n\nimport type {Props as EditorProps} from \"../interactive-graph-editor\";\nimport type {PerseusGraphTypeVector} from \"@khanacademy/perseus-core\";\n\ninterface Props {\n correct: PerseusGraphTypeVector;\n onChange: (props: Partial<EditorProps>) => void;\n}\n\nexport default function VectorAnswerOptions({correct, onChange}: Props) {\n return (\n <LabeledRow label=\"Student answer must\">\n <TypedSingleSelect\n selectedValue={correct.match || \"exact\"}\n onChange={(match) => {\n onChange({correct: {...correct, match}});\n }}\n options={{\n exact: \"match exactly\",\n congruent: \"be congruent\",\n }}\n className={styles.singleSelectShort}\n />\n <InfoTip>\n <p>\n Congruency requires only that the vector has the same\n direction and magnitude. An exact match implies congruency,\n but also requires that the tail and tip are in the same\n position on the grid.\n </p>\n </InfoTip>\n </LabeledRow>\n );\n}\n","/**\n * Dropdown for selecting a locked figure to add to an interactive graph.\n * Locked figures are elements (points, segmeents, etc.) that are not\n * interactive, just present in the graph's background.\n *\n * Used in the interactive graph editor's locked figures section.\n */\nimport {View} from \"@khanacademy/wonder-blocks-core\";\nimport {ActionItem, ActionMenu} from \"@khanacademy/wonder-blocks-dropdown\";\nimport * as React from \"react\";\n\nimport styles from \"./locked-figure-select.module.css\";\n\nimport type {LockedFigureType} from \"@khanacademy/perseus-core\";\n\ninterface Props {\n id: string;\n editingDisabled?: boolean;\n onChange: (value: LockedFigureType) => void;\n}\n\nconst LockedFigureSelect = (props: Props) => {\n const {id, editingDisabled, onChange} = props;\n\n const figureTypes: ReadonlyArray<LockedFigureType> = [\n \"point\",\n \"line\",\n \"vector\",\n \"ellipse\",\n \"polygon\",\n \"function\",\n \"label\",\n ];\n\n return (\n <View className={styles.container}>\n <ActionMenu\n menuText=\"Add locked figure\"\n disabled={editingDisabled}\n className={styles.addElementSelect}\n >\n {figureTypes.map((figureType) => (\n <ActionItem\n key={`${id}-${figureType}`}\n label={figureType}\n onClick={() => onChange(figureType)}\n />\n ))}\n </ActionMenu>\n </View>\n );\n};\n\nexport default LockedFigureSelect;\n","import {angles} from \"@khanacademy/kmath\";\nimport {Strut} from \"@khanacademy/wonder-blocks-layout\";\nimport {spacing} from \"@khanacademy/wonder-blocks-tokens\";\nimport {BodyText} from \"@khanacademy/wonder-blocks-typography\";\nimport {StyleSheet} from \"aphrodite\";\nimport * as React from \"react\";\n\nimport ScrolllessNumberTextField from \"./scrollless-number-text-field\";\n\nconst {convertDegreesToRadians, convertRadiansToDegrees} = angles;\n\ntype Props = {\n angle: number;\n onChange: (angle: number) => void;\n};\n\nconst AngleInput = (props: Props) => {\n const {angle, onChange} = props;\n\n function handleAngleChange(newValue: number) {\n // Update the graph.\n onChange(convertDegreesToRadians(newValue));\n }\n\n return (\n <BodyText tag=\"label\" style={styles.row}>\n angle (degrees)\n <Strut size={spacing.xxSmall_6} />\n <ScrolllessNumberTextField\n value={convertRadiansToDegrees(angle)}\n onChange={handleAngleChange}\n style={styles.textField}\n />\n <Strut size={spacing.xxSmall_6} />\n </BodyText>\n );\n};\n\nconst styles = StyleSheet.create({\n row: {\n display: \"flex\",\n flexDirection: \"row\",\n alignItems: \"center\",\n },\n textField: {\n width: spacing.xxxLarge_64,\n },\n});\n\nexport default AngleInput;\n","import {View} from \"@khanacademy/wonder-blocks-core\";\nimport {semanticColor, sizing} from \"@khanacademy/wonder-blocks-tokens\";\nimport {BodyText} from \"@khanacademy/wonder-blocks-typography\";\nimport * as React from \"react\";\n\nimport styles from \"./coordinate-pair-input.module.css\";\nimport ScrolllessNumberTextField from \"./scrollless-number-text-field\";\n\nimport type {Coord} from \"@khanacademy/perseus\";\nimport type {StyleType} from \"@khanacademy/wonder-blocks-core\";\n\ninterface Props {\n coord: [number, number];\n labels?: [string, string];\n error?: boolean;\n style?: StyleType;\n labelClassName?: string;\n disabled?: boolean;\n onChange: (newCoord: Coord) => void;\n}\n\n// Passed to ScrolllessNumberTextField's `style` prop, which is typed as Wonder\n// Blocks `StyleType` and does not accept a CSS-module className.\nconst textFieldStyle: StyleType = {width: sizing.size_640};\nconst errorFieldStyle: StyleType = {\n borderColor: semanticColor.core.border.critical.default,\n backgroundColor: semanticColor.core.background.critical.subtle,\n};\n\nconst CoordinatePairInput = (props: Props) => {\n const {\n coord,\n labels,\n error,\n style,\n labelClassName,\n disabled = false,\n onChange,\n } = props;\n\n const xLabel = labels ? labels[0] : \"x coord\";\n const yLabel = labels ? labels[1] : \"y coord\";\n\n function handleCoordChange(newValue: number, coordIndex: number) {\n // Update the props (update the graph).\n const newCoords: Coord = [...coord];\n newCoords[coordIndex] = newValue;\n onChange(newCoords);\n }\n\n return (\n <View className={styles.container} style={style}>\n <BodyText tag=\"label\" className={styles.label}>\n <span className={labelClassName}>{xLabel}</span>\n\n <ScrolllessNumberTextField\n value={coord[0]}\n disabled={disabled}\n onChange={(newValue) => handleCoordChange(newValue, 0)}\n style={[\n textFieldStyle,\n error ? errorFieldStyle : undefined,\n ]}\n />\n </BodyText>\n\n <BodyText tag=\"label\" className={styles.label}>\n <span className={labelClassName}>{yLabel}</span>\n\n <ScrolllessNumberTextField\n value={coord[1]}\n disabled={disabled}\n onChange={(newValue) => handleCoordChange(newValue, 1)}\n style={[\n textFieldStyle,\n error ? errorFieldStyle : undefined,\n ]}\n />\n </BodyText>\n </View>\n );\n};\n\nexport default CoordinatePairInput;\n","import {\n lockedFigureColors,\n type LockedFigureColor,\n} from \"@khanacademy/perseus-core\";\nimport {View} from \"@khanacademy/wonder-blocks-core\";\nimport {semanticColor, spacing} from \"@khanacademy/wonder-blocks-tokens\";\nimport {StyleSheet} from \"aphrodite\";\nimport * as React from \"react\";\n\ntype Props = {\n color: LockedFigureColor;\n filled?: boolean;\n decorative?: boolean;\n};\n\nconst ColorSwatch = (props: Props) => {\n const {color, filled = true, decorative = false} = props;\n\n return (\n <View\n aria-label={\n // Don't include an aria label for decorative circles.\n !decorative\n ? `${color}, ${filled ? \"filled\" : \"open\"}`\n : undefined\n }\n style={[\n styles.colorSwatch,\n {\n border: `4px solid ${lockedFigureColors[color]}`,\n backgroundColor: filled\n ? lockedFigureColors[color]\n : semanticColor.core.background.base.default,\n },\n ]}\n />\n );\n};\n\nconst styles = StyleSheet.create({\n colorSwatch: {\n // Add a white outline so that the color swatch is visible when\n // the dropdown option is highlighted with its blue background.\n outline: `2px solid ${semanticColor.focus.inner}`,\n borderRadius: \"50%\",\n width: spacing.large_24,\n height: spacing.large_24,\n },\n});\n\nexport default ColorSwatch;\n","import {View} from \"@khanacademy/wonder-blocks-core\";\nimport {BodyText} from \"@khanacademy/wonder-blocks-typography\";\nimport * as React from \"react\";\n\nimport {TypedSingleSelect} from \"../../../components/typed-single-select\";\n\nimport styles from \"./color-select.module.css\";\nimport ColorSwatch from \"./color-swatch\";\n\nimport type {LockedFigureColor} from \"@khanacademy/perseus-core\";\nimport type {StyleType} from \"@khanacademy/wonder-blocks-core\";\n\ninterface Props {\n selectedValue: LockedFigureColor;\n style?: StyleType;\n editingDisabled?: boolean;\n onChange: (newColor: LockedFigureColor) => void;\n}\n\nconst ColorSelect = (props: Props) => {\n const {selectedValue, style, editingDisabled = false, onChange} = props;\n\n function option(color: LockedFigureColor) {\n return {\n label: color,\n leftAccessory: <ColorSwatch color={color} decorative />,\n };\n }\n\n return (\n <View className={styles.row} style={style}>\n <BodyText tag=\"label\" className={styles.row}>\n color\n <TypedSingleSelect<LockedFigureColor>\n selectedValue={selectedValue}\n disabled={editingDisabled}\n onChange={onChange}\n options={{\n blue: option(\"blue\"),\n gold: option(\"gold\"),\n green: option(\"green\"),\n grayH: option(\"grayH\"),\n purple: option(\"purple\"),\n pink: option(\"pink\"),\n red: option(\"red\"),\n }}\n />\n </BodyText>\n </View>\n );\n};\n\nexport default ColorSelect;\n","import {\n lockedFigureColors,\n lockedFigureFillStyles,\n} from \"@khanacademy/perseus-core\";\nimport {View} from \"@khanacademy/wonder-blocks-core\";\nimport {semanticColor, spacing} from \"@khanacademy/wonder-blocks-tokens\";\nimport {StyleSheet} from \"aphrodite\";\nimport * as React from \"react\";\n\nimport type {\n LockedFigureColor,\n LockedFigureFillType,\n LockedFigureStrokeStyle,\n} from \"@khanacademy/perseus-core\";\n\ntype Props = {\n color: LockedFigureColor;\n fillStyle: LockedFigureFillType;\n strokeStyle: LockedFigureStrokeStyle;\n};\n\nconst EllipseSwatch = (props: Props) => {\n const {color, fillStyle, strokeStyle} = props;\n\n return (\n <View\n aria-label={`${color}, stroke ${strokeStyle}, fill ${fillStyle}`}\n style={[\n styles.container,\n {\n border: `4px ${strokeStyle} ${lockedFigureColors[color]}`,\n },\n ]}\n >\n <View\n style={[\n styles.innerCircle,\n {\n backgroundColor: lockedFigureColors[color],\n opacity:\n fillStyle === \"white\"\n ? 0\n : lockedFigureFillStyles[fillStyle],\n },\n ]}\n />\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n // Add a white outline so that the color swatch is visible when\n // the dropdown option is highlighted with its blue background.\n outline: `2px solid ${semanticColor.focus.inner}`,\n borderRadius: \"50%\",\n width: spacing.xLarge_32,\n height: spacing.large_24,\n backgroundColor: semanticColor.core.background.base.default,\n alignItems: \"center\",\n justifyContent: \"center\",\n },\n innerCircle: {\n width: 28,\n height: 20,\n borderRadius: \"50%\",\n },\n});\n\nexport default EllipseSwatch;\n","import {BodyText} from \"@khanacademy/wonder-blocks-typography\";\nimport * as React from \"react\";\n\nimport {TypedSingleSelect} from \"../../../components/typed-single-select\";\n\nimport styles from \"./line-stroke-select.module.css\";\n\nimport type {LockedFigureStrokeStyle} from \"@khanacademy/perseus-core\";\nimport type {StyleType} from \"@khanacademy/wonder-blocks-core\";\n\n// Stroke styles offered for boundary figures (lines, functions).\nexport const lineStrokeStyleOptions = {\n solid: \"solid\",\n dashed: \"dashed\",\n} as const;\n\n// Fillable figures (polygons, ellipses) may additionally have no stroke.\nexport const fillableStrokeStyleOptions = {\n solid: \"solid\",\n dashed: \"dashed\",\n none: \"none\",\n} as const;\n\ninterface Props<T extends LockedFigureStrokeStyle> {\n selectedValue: T;\n onChange: (newValue: T) => void;\n // The stroke styles to offer, keyed by value. Use `lineStrokeStyleOptions`\n // for boundary figures or `fillableStrokeStyleOptions` for fillable ones.\n options: Record<T, string>;\n containerStyle?: StyleType;\n editingDisabled?: boolean;\n}\n\nconst LineStrokeSelect = <T extends LockedFigureStrokeStyle>(\n props: Props<T>,\n) => {\n const {\n selectedValue,\n options,\n containerStyle,\n editingDisabled = false,\n onChange,\n } = props;\n\n return (\n <BodyText\n tag=\"label\"\n className={styles.lineStrokeSelect}\n style={containerStyle}\n >\n stroke\n <TypedSingleSelect\n selectedValue={selectedValue}\n disabled={editingDisabled}\n onChange={onChange}\n options={options}\n />\n </BodyText>\n );\n};\n\nexport default LineStrokeSelect;\n","import {BodyText} from \"@khanacademy/wonder-blocks-typography\";\nimport * as React from \"react\";\n\nimport {TypedSingleSelect} from \"../../../components/typed-single-select\";\n\nimport styles from \"./line-weight-select.module.css\";\n\nimport type {StrokeWeight} from \"@khanacademy/perseus-core\";\nimport type {StyleType} from \"@khanacademy/wonder-blocks-core\";\n\ninterface Props {\n selectedValue: StrokeWeight;\n onChange: (newValue: StrokeWeight) => void;\n containerStyle?: StyleType;\n editingDisabled?: boolean;\n}\n\nconst LineWeightSelect = (props: Props) => {\n const {\n selectedValue,\n containerStyle,\n editingDisabled = false,\n onChange,\n } = props;\n\n return (\n <BodyText\n tag=\"label\"\n className={styles.lineWeightSelect}\n style={containerStyle}\n >\n weight\n <TypedSingleSelect<StrokeWeight>\n selectedValue={selectedValue}\n disabled={editingDisabled}\n onChange={onChange}\n options={{\n thin: \"thin\",\n medium: \"medium\",\n thick: \"thick\",\n }}\n />\n </BodyText>\n );\n};\n\nexport default LineWeightSelect;\n","import Button from \"@khanacademy/wonder-blocks-button\";\nimport {View} from \"@khanacademy/wonder-blocks-core\";\nimport {TextArea} from \"@khanacademy/wonder-blocks-form\";\nimport {Spring} from \"@khanacademy/wonder-blocks-layout\";\nimport {BodyText} from \"@khanacademy/wonder-blocks-typography\";\nimport pencilCircle from \"@phosphor-icons/core/regular/pencil-circle.svg\";\nimport * as React from \"react\";\n\nimport InfoTip from \"../../../components/info-tip\";\n\nimport styles from \"./locked-figure-aria.module.css\";\n\ninterface Props {\n ariaLabel: string | undefined;\n /**\n * The async function that generates the prepopulated aria label\n * for the locked figure with math details converted to spoken words.\n */\n getPrepopulatedAriaLabel: () => Promise<string>;\n editingDisabled?: boolean;\n onChangeProps: (props: {ariaLabel?: string | undefined}) => void;\n}\n\nfunction LockedFigureAria(props: Props) {\n const {\n ariaLabel,\n getPrepopulatedAriaLabel,\n editingDisabled = false,\n onChangeProps,\n } = props;\n const id = React.useId();\n const ariaLabelId = `aria-label-${id}`;\n\n const [loading, setLoading] = React.useState(false);\n\n return (\n <View className={styles.container}>\n <View className={styles.row}>\n <BodyText tag=\"label\" htmlFor={ariaLabelId}>\n Aria label\n </BodyText>\n <Spring />\n <InfoTip>\n Aria label is used by screen readers to describe content to\n users who may be visually impaired. <br />\n <br />\n Populating this field will make it so that users can use a\n screen reader to navigate to this point and hear the\n description.\n <br />\n <br />\n If you leave this field blank, the point will be hidden from\n screen readers. Users will not be able to navigate to this\n point using a screen reader.\n </InfoTip>\n </View>\n <BodyText size=\"xsmall\" className={styles.caption}>\n The figure is hidden from screen readers if this field is left\n blank.\n </BodyText>\n <TextArea\n id={ariaLabelId}\n value={loading ? \"Loading...\" : ariaLabel ?? \"\"}\n disabled={editingDisabled}\n onChange={(newValue) => {\n onChangeProps({\n // Save as undefined if the field is empty.\n ariaLabel: newValue || undefined,\n });\n }}\n placeholder=\"Ex. Point at (x, y)\"\n rows={1}\n resizeType=\"vertical\"\n />\n\n <Button\n kind=\"tertiary\"\n startIcon={pencilCircle}\n disabled={editingDisabled}\n className={styles.button}\n onClick={() => {\n setLoading(true);\n getPrepopulatedAriaLabel().then((ariaLabel) => {\n setLoading(false);\n onChangeProps({ariaLabel});\n });\n }}\n >\n Auto-generate\n </Button>\n </View>\n );\n}\n\nexport default LockedFigureAria;\n","/**\n * The part of a locked figure settings panel that contains actions\n * for this panel and its associated locked figure, including\n * the delete button.\n */\nimport Button from \"@khanacademy/wonder-blocks-button\";\nimport {View} from \"@khanacademy/wonder-blocks-core\";\nimport IconButton from \"@khanacademy/wonder-blocks-icon-button\";\nimport {Spring} from \"@khanacademy/wonder-blocks-layout\";\nimport caretDoubleDownIcon from \"@phosphor-icons/core/bold/caret-double-down-bold.svg\";\nimport caretDoubleUpIcon from \"@phosphor-icons/core/bold/caret-double-up-bold.svg\";\nimport caretDownIcon from \"@phosphor-icons/core/bold/caret-down-bold.svg\";\nimport caretUpIcon from \"@phosphor-icons/core/bold/caret-up-bold.svg\";\nimport trashIcon from \"@phosphor-icons/core/bold/trash-bold.svg\";\nimport * as React from \"react\";\n\nimport styles from \"./locked-figure-settings-actions.module.css\";\n\nimport type {LockedFigureType} from \"@khanacademy/perseus-core\";\n\nexport type LockedFigureSettingsMovementType =\n | \"back\"\n | \"backward\"\n | \"forward\"\n | \"front\";\n\ninterface Props {\n figureType: LockedFigureType;\n editingDisabled?: boolean;\n onMove?: (movement: LockedFigureSettingsMovementType) => void;\n onRemove: () => void;\n}\n\nconst LockedFigureSettingsActions = (props: Props) => {\n const {figureType, editingDisabled = false, onMove, onRemove} = props;\n\n return (\n <View className={styles.container}>\n <Button\n startIcon={trashIcon}\n aria-label={`Delete locked ${figureType}`}\n onClick={onRemove}\n kind=\"tertiary\"\n disabled={editingDisabled}\n className={styles.deleteButton}\n >\n Delete\n </Button>\n\n {onMove && (\n <>\n <Spring />\n\n <IconButton\n icon={caretDoubleUpIcon}\n kind=\"tertiary\"\n size=\"small\"\n aria-label={`Move locked ${figureType} to the back`}\n disabled={editingDisabled}\n onClick={() => onMove(\"back\")}\n />\n <IconButton\n icon={caretUpIcon}\n kind=\"tertiary\"\n size=\"small\"\n aria-label={`Move locked ${figureType} backward`}\n disabled={editingDisabled}\n onClick={() => onMove(\"backward\")}\n />\n <IconButton\n icon={caretDownIcon}\n kind=\"tertiary\"\n size=\"small\"\n aria-label={`Move locked ${figureType} forward`}\n disabled={editingDisabled}\n onClick={() => onMove(\"forward\")}\n />\n <IconButton\n icon={caretDoubleDownIcon}\n kind=\"tertiary\"\n size=\"small\"\n aria-label={`Move locked ${figureType} to the front`}\n disabled={editingDisabled}\n onClick={() => onMove(\"front\")}\n />\n </>\n )}\n </View>\n );\n};\n\nexport default LockedFigureSettingsActions;\n","/**\n * LockedLabelSettings is a component that allows the user to edit the\n * settings of specifically a locked label on the graph within the\n * Interactive Graph widget.\n *\n * Used in the interactive graph editor's locked figures section.\n */\nimport {\n lockedFigureColors,\n type LockedLabelType,\n} from \"@khanacademy/perseus-core\";\nimport {View} from \"@khanacademy/wonder-blocks-core\";\nimport {TextField} from \"@khanacademy/wonder-blocks-form\";\nimport {sizing} from \"@khanacademy/wonder-blocks-tokens\";\nimport {BodyText} from \"@khanacademy/wonder-blocks-typography\";\nimport * as React from \"react\";\n\nimport CoordinatePairInput from \"../../../components/coordinate-pair-input\";\nimport InfoTip from \"../../../components/info-tip\";\nimport PerseusEditorAccordion from \"../../../components/perseus-editor-accordion\";\nimport {TypedSingleSelect} from \"../../../components/typed-single-select\";\n\nimport ColorSelect from \"./color-select\";\nimport LockedFigureSettingsActions from \"./locked-figure-settings-actions\";\nimport styles from \"./locked-label-settings.module.css\";\n\nimport type {LockedFigureSettingsMovementType} from \"./locked-figure-settings-actions\";\nimport type {StyleType} from \"@khanacademy/wonder-blocks-core\";\n\n// Passed to Wonder Blocks `StyleType`-only props (CoordinatePairInput,\n// ColorSelect) which don't accept a CSS-module className.\nconst spaceUnderStyle: StyleType = {marginBottom: sizing.size_080};\n\nexport type Props = LockedLabelType & {\n /**\n * Whether editing is disabled for this label's controls.\n */\n editingDisabled?: boolean;\n /**\n * Called when the props (coord, color, etc.) are updated.\n */\n onChangeProps: (newProps: Partial<LockedLabelType>) => void;\n\n // Movement props. Used for standalone label actions.\n // Not used within other locked figure settings.\n /**\n * Called when a movement button (top, up, down, bottom) is pressed.\n * This is also used to indicate that this LockedLabelSettings component\n * is for a standalone label, not part of a larger locked figure.\n */\n onMove?: (movement: LockedFigureSettingsMovementType) => void;\n /**\n * Called when the delete button is pressed.\n */\n onRemove: () => void;\n\n // Accordion props. Used for standalone labels for the expand/collapse\n // button functionality. Not used within other locked figure settings.\n /**\n * Whether this accordion is expanded.\n */\n expanded?: boolean;\n /**\n * Called when the accordion is expanded or collapsed.\n */\n onToggle?: (expanded: boolean) => void;\n\n // Container style for the accordion.\n containerStyle?: StyleType;\n};\n\nexport default function LockedLabelSettings(props: Props) {\n const {\n type,\n coord,\n color,\n size,\n text,\n expanded,\n editingDisabled = false,\n onChangeProps,\n onMove,\n onRemove,\n onToggle,\n containerStyle,\n } = props;\n\n return (\n <PerseusEditorAccordion\n expanded={expanded}\n onToggle={onToggle}\n header={\n <View\n className={`${styles.row} ${styles.accordionHeaderContainer} ${styles.header}`}\n >\n <BodyText size=\"medium\" weight=\"bold\" tag=\"span\">\n Label ({coord[0]}, {coord[1]})\n </BodyText>\n {text !== \"\" && (\n <BodyText\n size=\"medium\"\n weight=\"bold\"\n tag=\"span\"\n className={styles.accordionHeader}\n style={{\n color: lockedFigureColors[color],\n }}\n >\n {text}\n </BodyText>\n )}\n </View>\n }\n containerStyle={containerStyle}\n >\n {/* Coord settings */}\n <CoordinatePairInput\n coord={coord}\n disabled={editingDisabled}\n onChange={(newCoords) => {\n onChangeProps({coord: newCoords});\n }}\n style={spaceUnderStyle}\n />\n\n {/* Text settings */}\n <View className={styles.row}>\n <BodyText\n tag=\"label\"\n className={`${styles.row} ${styles.textLabel}`}\n >\n text\n <TextField\n value={text}\n placeholder=\"ex. $x^2$ or $\\frac{1}{2}$\"\n disabled={editingDisabled}\n onChange={(newValue) =>\n onChangeProps({\n text: newValue,\n })\n }\n />\n </BodyText>\n <InfoTip>\n Surround your text with $ for TeX.\n <br />\n Example: {`This circle has radius $\\\\frac{1}{2}$ units.`}\n <br />\n <br />\n It is important to use TeX when appropriate for\n accessibility. The above example would be read as &quot;This\n circle has radius one-half units&quot; by screen readers.\n </InfoTip>\n </View>\n\n <View className={`${styles.row} ${styles.colorRow}`}>\n <ColorSelect\n selectedValue={color}\n editingDisabled={editingDisabled}\n onChange={(newColor) => {\n onChangeProps({color: newColor});\n }}\n style={spaceUnderStyle}\n />\n\n {/* Size settings */}\n <BodyText\n tag=\"label\"\n className={`${styles.row} ${styles.sizeLabel}`}\n >\n size\n <TypedSingleSelect\n selectedValue={size}\n disabled={editingDisabled}\n onChange={(newValue) => onChangeProps({size: newValue})}\n options={{\n small: \"small\",\n medium: \"medium\",\n large: \"large\",\n }}\n />\n </BodyText>\n </View>\n\n {/* Actions */}\n <LockedFigureSettingsActions\n figureType={type}\n editingDisabled={editingDisabled}\n onMove={onMove}\n onRemove={onRemove}\n />\n </PerseusEditorAccordion>\n );\n}\n","import {SpeechRuleEngine} from \"@khanacademy/mathjax-renderer\";\nimport {mathOnlyParser} from \"@khanacademy/perseus\";\nimport {\n type LockedFigureColor,\n type LockedFigureFillType,\n type LockedFigureStrokeStyle,\n type LockedLabelType,\n type StrokeWeight,\n} from \"@khanacademy/perseus-core\";\nimport {UnreachableCaseError} from \"@khanacademy/wonder-stuff-core\";\n\nexport function generateLockedFigureAppearanceDescription(\n color: LockedFigureColor,\n strokeStyle: LockedFigureStrokeStyle = \"solid\",\n fill?: LockedFigureFillType,\n weight: StrokeWeight = \"medium\",\n) {\n const convertedColor = color === \"grayH\" ? \"gray\" : color;\n const weightString = weight === \"medium\" ? \"\" : ` ${weight}`;\n // A fill-only figure (\"none\" stroke) has no border color to name.\n const strokeDescription =\n strokeStyle === \"none\" ? \"no\" : `${strokeStyle} ${convertedColor}`;\n const baseAppearance = `. Appearance${weightString} ${strokeDescription}`;\n\n switch (fill) {\n case \"none\":\n return `${baseAppearance} border, with no fill.`;\n case \"white\":\n return `${baseAppearance} border, with a white fill.`;\n case \"solid\":\n case \"translucent\":\n return `${baseAppearance} border, with a ${fill} ${convertedColor} fill.`;\n case undefined:\n return `${baseAppearance}.`;\n default:\n throw new UnreachableCaseError(fill);\n }\n}\n\n/**\n * Given a string that may contain math within TeX represented by $...$,\n * returns the spoken math equivalent using the SpeechRuleEngine.\n * Exported for testing.\n *\n * Example: \"Circle with radius $\\frac{1}{2}$\" ==> \"Circle with radius one half\"\n */\nexport async function generateSpokenMathDetails(mathString: string) {\n const engine = await SpeechRuleEngine.setup(\"en\");\n let convertedSpeech = \"\";\n\n // All the information we need is in the first section,\n // whether it's typed as \"blockmath\" or \"paragraph\"\n const parsedContent = mathOnlyParser(mathString);\n\n // If it's a paragraph, we need to iterate through the sections\n // to look for individual math blocks.\n for (const piece of parsedContent) {\n switch (piece.type) {\n case \"math\":\n convertedSpeech += engine.texToSpeech(piece.content);\n break;\n case \"specialCharacter\":\n // We don't want the backslash from special character\n // to show up in the generated aria label.\n convertedSpeech +=\n piece.content.length > 1\n ? piece.content.slice(1)\n : piece.content;\n break;\n default:\n convertedSpeech += piece.content;\n break;\n }\n }\n\n return convertedSpeech;\n}\n\n/**\n * Take an array of LockedLabelType object and joins the text of each label\n * with a comma and space in between. The text of each label is converted to\n * spoken math using the SpeechRuleEngine.\n */\nexport async function joinLabelsAsSpokenMath(\n labels: LockedLabelType[],\n): Promise<string> {\n if (labels.length === 0) {\n return \"\";\n }\n\n const spokenLabelPromises = labels.map((label) => {\n return generateSpokenMathDetails(label.text);\n });\n\n const spokenLabels = await Promise.all(spokenLabelPromises);\n\n return ` ${spokenLabels.join(\", \")}`;\n}\n\n/**\n * Non-async mocked version of joinLabelsAsSpokenMath for tests.\n */\nexport function mockedJoinLabelsAsSpokenMathForTests(\n labels: LockedLabelType[],\n) {\n // Mock this so that each label's text says \"spoken\" before it.\n const jointMock = labels.map((input) => ` spoken ${input.text}`).join(\",\");\n return Promise.resolve(jointMock);\n}\n\nexport function mockedGenerateSpokenMathDetailsForTests(mathString: string) {\n return Promise.resolve(`spoken ${mathString}`);\n}\n","import {angles} from \"@khanacademy/kmath\";\nimport {getDefaultFigureForType} from \"@khanacademy/perseus-core\";\nimport Button from \"@khanacademy/wonder-blocks-button\";\nimport {View} from \"@khanacademy/wonder-blocks-core\";\nimport {semanticColor, sizing} from \"@khanacademy/wonder-blocks-tokens\";\nimport {BodyText} from \"@khanacademy/wonder-blocks-typography\";\nimport plusCircle from \"@phosphor-icons/core/regular/plus-circle.svg\";\nimport * as React from \"react\";\n\nimport AngleInput from \"../../../components/angle-input\";\nimport CoordinatePairInput from \"../../../components/coordinate-pair-input\";\nimport InfoTip from \"../../../components/info-tip\";\nimport PerseusEditorAccordion from \"../../../components/perseus-editor-accordion\";\nimport {TypedSingleSelect} from \"../../../components/typed-single-select\";\n\nimport ColorSelect from \"./color-select\";\nimport EllipseSwatch from \"./ellipse-swatch\";\nimport LineStrokeSelect, {\n fillableStrokeStyleOptions,\n} from \"./line-stroke-select\";\nimport LineWeightSelect from \"./line-weight-select\";\nimport styles from \"./locked-ellipse-settings.module.css\";\nimport LockedFigureAria from \"./locked-figure-aria\";\nimport LockedFigureSettingsActions from \"./locked-figure-settings-actions\";\nimport LockedLabelSettings from \"./locked-label-settings\";\nimport {\n generateLockedFigureAppearanceDescription,\n generateSpokenMathDetails,\n joinLabelsAsSpokenMath,\n} from \"./util\";\n\nimport type {LockedFigureSettingsCommonProps} from \"./locked-figure-settings\";\nimport type {\n Coord,\n LockedEllipseType,\n LockedFigureColor,\n LockedLabelType,\n LockedFigureFillType,\n} from \"@khanacademy/perseus-core\";\nimport type {StyleType} from \"@khanacademy/wonder-blocks-core\";\n\nconst {convertRadiansToDegrees} = angles;\n// Passed to CoordinatePairInput's/View's `style` and LockedLabelSettings'\n// `containerStyle`, which are typed as Wonder Blocks `StyleType` and do not\n// accept a CSS-module className.\nconst spaceUnderStyle: StyleType = {\n marginBottom: sizing.size_080,\n};\nconst labelContainerStyle: StyleType = {\n backgroundColor: semanticColor.core.background.base.default,\n};\n\nexport type Props = LockedFigureSettingsCommonProps &\n LockedEllipseType & {\n /**\n * Called when the props (coords, color, etc.) are updated.\n */\n onChangeProps: (newProps: Partial<LockedEllipseType>) => void;\n };\n\nconst LockedEllipseSettings = (props: Props) => {\n const {\n center,\n radius,\n angle,\n color,\n labels,\n ariaLabel,\n fillStyle,\n strokeStyle,\n weight,\n expanded,\n editingDisabled = false,\n onToggle,\n onChangeProps,\n onMove,\n onRemove,\n } = props;\n\n /**\n * Generate the prepopulated aria label for the ellipse,\n * with the math details converted into spoken words.\n */\n async function getPrepopulatedAriaLabel() {\n // Ensure negative values are read correctly within aria labels.\n const visiblelabel = await joinLabelsAsSpokenMath(labels);\n const spokenCenterX = await generateSpokenMathDetails(`$${center[0]}$`);\n const spokenCenterY = await generateSpokenMathDetails(`$${center[1]}$`);\n const spokenRotation = await generateSpokenMathDetails(\n `$${convertRadiansToDegrees(angle)}$`,\n );\n\n const isCircle = radius[0] === radius[1];\n let str = \"\";\n\n if (isCircle) {\n str += `Circle${visiblelabel} with radius ${radius[0]}`;\n } else {\n str += `Ellipse${visiblelabel} with x radius ${radius[0]} and y radius ${radius[1]}`;\n }\n\n str += `, centered at ${spokenCenterX} comma ${spokenCenterY}`;\n\n if (!isCircle && angle !== 0) {\n str += `, rotated by ${spokenRotation} degrees`;\n }\n\n const ellipseAppearance = generateLockedFigureAppearanceDescription(\n color,\n strokeStyle,\n fillStyle,\n weight,\n );\n str += ellipseAppearance;\n return str;\n }\n\n function handleCenterChange(newCoord: Coord) {\n const xOffset = newCoord[0] - center[0];\n const yOffset = newCoord[1] - center[1];\n\n const newProps: Partial<LockedEllipseType> = {\n center: newCoord,\n };\n\n // Update the coord by the same amount as the point for all labels\n newProps.labels = labels.map((label) => ({\n ...label,\n coord: [label.coord[0] + xOffset, label.coord[1] + yOffset],\n }));\n\n onChangeProps(newProps);\n }\n\n function handleColorChange(newValue: LockedFigureColor) {\n const newProps: Partial<LockedEllipseType> = {\n color: newValue,\n };\n\n // Update the color of the all labels to match the point\n newProps.labels = labels.map((label) => ({\n ...label,\n color: newValue,\n }));\n\n onChangeProps(newProps);\n }\n\n function handleLabelChange(\n updatedLabel: Partial<LockedLabelType>,\n labelIndex: number,\n ) {\n const updatedLabels = [...labels];\n updatedLabels[labelIndex] = {\n ...labels[labelIndex],\n ...updatedLabel,\n };\n\n onChangeProps({labels: updatedLabels});\n }\n\n function handleLabelRemove(labelIndex: number) {\n const updatedLabels = labels.filter((_, index) => index !== labelIndex);\n\n onChangeProps({labels: updatedLabels});\n }\n\n return (\n <PerseusEditorAccordion\n expanded={expanded}\n onToggle={onToggle}\n header={\n // Summary: Ellipse, center, radius, color (opacity, dashed)\n <View className={`${styles.row} ${styles.header}`}>\n <BodyText\n size=\"medium\"\n tag=\"span\"\n weight=\"bold\"\n >{`Ellipse (${center[0]}, ${center[1]}), radius ${radius[0]}, ${radius[1]}`}</BodyText>\n <EllipseSwatch\n color={props.color}\n fillStyle={fillStyle}\n strokeStyle={strokeStyle}\n />\n </View>\n }\n >\n {/* Center point */}\n <View className={styles.row}>\n <CoordinatePairInput\n coord={center}\n style={spaceUnderStyle}\n disabled={editingDisabled}\n onChange={handleCenterChange}\n />\n <View className={styles.spaceUnder}>\n <InfoTip>\n The coordinates for the center of the ellipse.\n </InfoTip>\n </View>\n </View>\n\n {/* Radius */}\n <CoordinatePairInput\n coord={radius}\n labels={[\"x radius\", \"y radius\"]}\n style={spaceUnderStyle}\n disabled={editingDisabled}\n onChange={(newCoords: Coord) =>\n onChangeProps({radius: newCoords})\n }\n />\n\n {/* Angle */}\n <AngleInput\n angle={angle}\n onChange={(newAngle: number) =>\n onChangeProps({angle: newAngle})\n }\n />\n\n <View className={`${styles.row} ${styles.colorRow}`}>\n {/* Color */}\n <ColorSelect\n selectedValue={color}\n editingDisabled={editingDisabled}\n onChange={handleColorChange}\n />\n\n {/* Fill opacity */}\n <BodyText\n tag=\"label\"\n className={`${styles.row} ${styles.truncatedWidth} ${styles.fillLabel}`}\n >\n fill\n <TypedSingleSelect<LockedFigureFillType>\n selectedValue={fillStyle}\n disabled={editingDisabled}\n onChange={(value) => onChangeProps({fillStyle: value})}\n options={{\n none: \"none\",\n white: \"white\",\n translucent: \"translucent\",\n solid: \"solid\",\n }}\n />\n </BodyText>\n </View>\n\n {/* Stroke style */}\n <LineStrokeSelect\n selectedValue={strokeStyle}\n options={fillableStrokeStyleOptions}\n editingDisabled={editingDisabled}\n onChange={(value) => onChangeProps({strokeStyle: value})}\n containerStyle={{marginBottom: sizing.size_080}}\n />\n\n {/* Weight */}\n <LineWeightSelect\n selectedValue={weight}\n editingDisabled={editingDisabled}\n onChange={(value) => onChangeProps({weight: value})}\n />\n\n {/* Aria label */}\n <View className={`${styles.horizontalRule} ${styles.sectionTop}`} />\n <LockedFigureAria\n ariaLabel={ariaLabel}\n getPrepopulatedAriaLabel={getPrepopulatedAriaLabel}\n editingDisabled={editingDisabled}\n onChangeProps={(newProps) => {\n onChangeProps(newProps);\n }}\n />\n\n {/* Visible Labels */}\n <View\n className={`${styles.horizontalRule} ${styles.dividerTight}`}\n />\n <BodyText className={styles.sectionTop}>Visible labels</BodyText>\n {labels.map((label, labelIndex) => (\n <LockedLabelSettings\n {...label}\n key={labelIndex}\n editingDisabled={editingDisabled}\n expanded={true}\n onChangeProps={(newLabel) => {\n handleLabelChange(newLabel, labelIndex);\n }}\n onRemove={() => {\n handleLabelRemove(labelIndex);\n }}\n containerStyle={labelContainerStyle}\n />\n ))}\n <Button\n kind=\"tertiary\"\n startIcon={plusCircle}\n disabled={editingDisabled}\n onClick={() => {\n const newLabel = {\n ...getDefaultFigureForType(\"label\"),\n coord: [\n center[0],\n // Additional vertical offset for each\n // label so they don't overlap.\n center[1] - labels.length,\n ],\n // Default to the same color as the ellipse\n color: color,\n } satisfies LockedLabelType;\n\n onChangeProps({\n labels: [...labels, newLabel],\n });\n }}\n className={styles.addButton}\n >\n Add visible label\n </Button>\n\n {/* Actions */}\n <LockedFigureSettingsActions\n figureType={props.type}\n editingDisabled={editingDisabled}\n onMove={onMove}\n onRemove={onRemove}\n />\n </PerseusEditorAccordion>\n );\n};\n\nexport default LockedEllipseSettings;\n","import {\n lockedFigureColors,\n type LockedFigureColor,\n} from \"@khanacademy/perseus-core\";\nimport {View} from \"@khanacademy/wonder-blocks-core\";\nimport {semanticColor, spacing} from \"@khanacademy/wonder-blocks-tokens\";\nimport {StyleSheet} from \"aphrodite\";\nimport * as React from \"react\";\n\ntype Props = {\n color: LockedFigureColor;\n lineStyle: \"solid\" | \"dashed\";\n};\n\nconst LineSwatch = (props: Props) => {\n const {color, lineStyle} = props;\n\n return (\n <View style={styles.container}>\n <View\n aria-label={`${color}, ${lineStyle}`}\n style={[\n styles.lineSwatch,\n {\n border: `5px ${lineStyle} ${lockedFigureColors[color]}`,\n },\n ]}\n />\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n backgroundColor: semanticColor.core.background.base.default,\n justifyContent: \"center\",\n padding: spacing.xSmall_8,\n borderRadius: spacing.xxxSmall_4,\n },\n lineSwatch: {\n width: 40,\n },\n});\n\nexport default LineSwatch;\n","export type ExampleCategory = \"linear\" | \"polynomial\" | \"trigonometric\";\n\nexport const examples: Record<ExampleCategory, string[]> = {\n linear: [\"x + 5\", \"1/2x - 2\"],\n polynomial: [\"1/2x^2 + 3x - 4\", \"(1/3)x^3 - 2x^2 + 3x - 4\"],\n trigonometric: [\"sin(x) * 3\", \"arctan(2x) + 4\"],\n};\n","/**\n * LockedFunctionSettings is a component that allows the user to edit the\n * settings of specifically a locked function on the graph.\n *\n * Used in the interactive graph editor's locked figures section.\n */\nimport {getDefaultFigureForType} from \"@khanacademy/perseus-core\";\nimport Button from \"@khanacademy/wonder-blocks-button\";\nimport {View} from \"@khanacademy/wonder-blocks-core\";\nimport {TextField} from \"@khanacademy/wonder-blocks-form\";\nimport IconButton from \"@khanacademy/wonder-blocks-icon-button\";\nimport {semanticColor, sizing} from \"@khanacademy/wonder-blocks-tokens\";\nimport {BodyText} from \"@khanacademy/wonder-blocks-typography\";\nimport copyIcon from \"@phosphor-icons/core/assets/regular/copy.svg\";\nimport autoPasteIcon from \"@phosphor-icons/core/assets/regular/note-pencil.svg\";\nimport plusCircle from \"@phosphor-icons/core/regular/plus-circle.svg\";\nimport * as React from \"react\";\nimport {useEffect, useId, useState} from \"react\";\n\nimport PerseusEditorAccordion from \"../../../components/perseus-editor-accordion\";\nimport {TypedSingleSelect} from \"../../../components/typed-single-select\";\n\nimport ColorSelect from \"./color-select\";\nimport LineStrokeSelect, {lineStrokeStyleOptions} from \"./line-stroke-select\";\nimport LineSwatch from \"./line-swatch\";\nimport LineWeightSelect from \"./line-weight-select\";\nimport LockedFigureAria from \"./locked-figure-aria\";\nimport LockedFigureSettingsActions from \"./locked-figure-settings-actions\";\nimport {examples} from \"./locked-function-examples\";\nimport styles from \"./locked-function-settings.module.css\";\nimport LockedLabelSettings from \"./locked-label-settings\";\nimport {\n generateLockedFigureAppearanceDescription,\n joinLabelsAsSpokenMath,\n} from \"./util\";\n\nimport type {LockedFigureSettingsCommonProps} from \"./locked-figure-settings\";\nimport type {ExampleCategory} from \"./locked-function-examples\";\nimport type {\n LockedFigureColor,\n LockedFunctionType,\n LockedLabelType,\n} from \"@khanacademy/perseus-core\";\n\nexport type Props = LockedFunctionType &\n LockedFigureSettingsCommonProps & {\n /**\n * Called when the props (points, color, etc.) are updated.\n */\n onChangeProps: (newProps: Partial<LockedFunctionType>) => void;\n };\n\nconst LockedFunctionSettings = (props: Props) => {\n const {\n color: lineColor,\n strokeStyle,\n equation,\n directionalAxis,\n domain,\n weight,\n ariaLabel,\n editingDisabled = false,\n onChangeProps,\n onMove,\n onRemove,\n } = props;\n const labels = props.labels;\n const equationPrefix = directionalAxis === \"x\" ? \"y=\" : \"x=\";\n const lineLabel = `Function (${equationPrefix}${equation})`;\n\n // Tracking the string value of domain/range constraints to handle interim state of\n // entering a negative value, as well as representing Infinity as an empty string.\n // This variable is used when specifying the values of the input fields.\n const getDomainStringValues = (domain): [string, string] => {\n return [\n Number.isFinite(domain[0]) ? domain[0].toString() : \"\",\n Number.isFinite(domain[1]) ? domain[1].toString() : \"\",\n ];\n };\n\n const [domainEntries, setDomainEntries] = useState(\n getDomainStringValues(domain),\n );\n\n const [exampleCategory, setExampleCategory] =\n useState<ExampleCategory | null>(null);\n\n useEffect(() => {\n // \"useEffect\" used to maintain parity between domain/range constraints and their string representation.\n setDomainEntries(getDomainStringValues(domain));\n }, [domain]);\n\n /**\n * Generate the prepopulated aria label for the function,\n * with the math details converted into spoken words.\n */\n async function getPrepopulatedAriaLabel() {\n const visiblelabel = await joinLabelsAsSpokenMath(labels);\n\n let str = `Function${visiblelabel} with equation ${equationPrefix}${equation}`;\n\n // Add the domain/range constraints to the aria label\n // if they are not the default values.\n if (Number.isFinite(domain[0]) || Number.isFinite(domain[1])) {\n str += `, domain from ${domain[0]} to ${domain[1]}`;\n }\n\n const functionAppearance = generateLockedFigureAppearanceDescription(\n lineColor,\n strokeStyle,\n undefined, // fillStyle is not used for functions\n weight,\n );\n str += functionAppearance;\n\n return str;\n }\n\n // Generic function for handling property changes (except for 'domain/range')\n function handlePropChange(property: string, newValue: string) {\n const updatedProps: Partial<LockedFunctionType> = {};\n updatedProps[property] = newValue;\n onChangeProps(updatedProps);\n }\n\n /*\n Reason for having a separate 'propChange' function for 'domain/range':\n Domain/Range entries are optional. Their default value is +/- Infinity.\n Since input fields that are empty evaluate to zero, there needs to be\n dedicated code to convert empty to Infinity.\n */\n function handleDomainChange(limitIndex: number, newValueString: string) {\n const newDomainEntries: [string, string] = [...domainEntries];\n newDomainEntries[limitIndex] = newValueString;\n setDomainEntries(newDomainEntries);\n const newDomain: [min: number, max: number] = [...domain];\n\n let newValue = parseFloat(newValueString);\n if (newValueString === \"\" && limitIndex === 0) {\n newValue = -Infinity;\n } else if (newValueString === \"\" && limitIndex === 1) {\n newValue = Infinity;\n }\n newDomain[limitIndex] = newValue;\n onChangeProps({domain: newDomain});\n }\n\n const exampleContent =\n exampleCategory != null\n ? examples[exampleCategory]\n : [\"Select category to see example equations\"];\n\n function handleColorChange(newValue: LockedFigureColor) {\n const newProps: Partial<LockedFunctionType> = {\n color: newValue,\n };\n\n // Update the color of all the labels to match the point\n newProps.labels = labels.map((label) => ({\n ...label,\n color: newValue,\n }));\n\n onChangeProps(newProps);\n }\n\n function handleLabelChange(\n updatedLabel: Partial<LockedLabelType>,\n labelIndex: number,\n ) {\n const updatedLabels = [...labels];\n updatedLabels[labelIndex] = {\n ...labels[labelIndex],\n ...updatedLabel,\n };\n\n onChangeProps({labels: updatedLabels});\n }\n\n function handleLabelRemove(labelIndex: number) {\n const updatedLabels = labels.filter((_, index) => index !== labelIndex);\n\n onChangeProps({labels: updatedLabels});\n }\n\n return (\n <PerseusEditorAccordion\n expanded={props.expanded}\n onToggle={props.onToggle}\n header={\n <View className={`${styles.row} ${styles.header}`}>\n <BodyText\n size=\"medium\"\n weight=\"bold\"\n tag=\"span\"\n className={styles.accordionHeader}\n >\n {lineLabel}\n </BodyText>\n <LineSwatch color={lineColor} lineStyle={strokeStyle} />\n </View>\n }\n >\n <View className={`${styles.row} ${styles.colorRow}`}>\n {/* Line color settings */}\n <ColorSelect\n selectedValue={lineColor}\n editingDisabled={editingDisabled}\n onChange={handleColorChange}\n />\n\n {/* Line style settings */}\n <LineStrokeSelect\n selectedValue={strokeStyle}\n options={lineStrokeStyleOptions}\n editingDisabled={editingDisabled}\n onChange={(newValue) => {\n handlePropChange(\"strokeStyle\", newValue);\n }}\n />\n </View>\n\n {/* Line weight settings */}\n <LineWeightSelect\n selectedValue={weight}\n editingDisabled={editingDisabled}\n onChange={(value) => onChangeProps({weight: value})}\n />\n\n <View\n className={`${styles.row} ${styles.rowSpace} ${styles.axisRow}`}\n >\n {/* Directional axis (x or y) */}\n <TypedSingleSelect\n selectedValue={directionalAxis}\n disabled={editingDisabled}\n options={{x: \"y =\", y: \"x =\"}}\n onChange={(newValue) => {\n handlePropChange(\"directionalAxis\", newValue);\n }}\n aria-label=\"equation prefix\"\n className={`${styles.dropdownLabel} ${styles.axisMenu}`}\n />\n {/* Equation entry */}\n <TextField\n type=\"text\"\n aria-label=\"equation\"\n value={equation}\n disabled={editingDisabled}\n onChange={(newValue) => {\n handlePropChange(\"equation\", newValue);\n }}\n style={{flexGrow: 1}}\n />\n </View>\n\n {/* Domain/Range restrictions */}\n <View\n className={`${styles.row} ${styles.rowSpace} ${styles.domainRow}`}\n >\n <BodyText\n tag=\"label\"\n className={`${styles.dropdownLabel} ${styles.domainMin}`}\n >\n {\"domain min\"}\n\n <TextField\n type=\"number\"\n // make room for the label\n style={{width: \"calc(100% - 88.7px)\"}}\n value={domainEntries[0]}\n disabled={editingDisabled}\n onChange={(newValue) => {\n handleDomainChange(0, newValue);\n }}\n />\n </BodyText>\n <BodyText\n tag=\"label\"\n aria-label=\"domain max\"\n className={`${styles.dropdownLabel} ${styles.domainMax}`}\n >\n {\"max\"}\n\n <TextField\n type=\"number\"\n style={{width: \"calc(100% - 36.2px)\"}}\n value={domainEntries[1]}\n disabled={editingDisabled}\n onChange={(newValue) => {\n handleDomainChange(1, newValue);\n }}\n />\n </BodyText>\n </View>\n\n {/* Examples */}\n <PerseusEditorAccordion\n header={\n <BodyText size=\"medium\" weight=\"bold\" tag=\"span\">\n Example Functions\n </BodyText>\n }\n expanded={false}\n containerStyle={{\n background: semanticColor.core.background.base.subtle,\n }}\n panelStyle={{\n alignItems: \"start\",\n paddingBottom: sizing.size_120,\n flexDirection: \"row\",\n flexWrap: \"wrap\",\n }}\n >\n <BodyText tag=\"label\" className={styles.dropdownLabel}>\n {\"Choose a category\"}\n <TypedSingleSelect<ExampleCategory>\n selectedValue={exampleCategory}\n disabled={editingDisabled}\n options={{\n linear: \"linear\",\n polynomial: \"polynomial\",\n trigonometric: \"trigonometric\",\n }}\n onChange={setExampleCategory}\n placeholder=\"examples\"\n />\n </BodyText>\n {exampleCategory != null && (\n <ul className={styles.exampleContainer}>\n {exampleContent.map((example, index) => (\n <ExampleItem\n key={index}\n category={exampleCategory}\n example={example}\n index={index}\n editingDisabled={editingDisabled}\n pasteEquationFn={handlePropChange}\n />\n ))}\n </ul>\n )}\n </PerseusEditorAccordion>\n\n {/* Aria label */}\n <View className={`${styles.horizontalRule} ${styles.sectionTop}`} />\n <LockedFigureAria\n ariaLabel={ariaLabel}\n getPrepopulatedAriaLabel={getPrepopulatedAriaLabel}\n editingDisabled={editingDisabled}\n onChangeProps={(newProps) => {\n onChangeProps(newProps);\n }}\n />\n\n {/* Visible Labels */}\n <View\n className={`${styles.horizontalRule} ${styles.dividerTight}`}\n />\n <BodyText className={styles.sectionTop}>Visible labels</BodyText>\n {labels.map((label, labelIndex) => (\n <LockedLabelSettings\n key={labelIndex}\n {...label}\n editingDisabled={editingDisabled}\n expanded={true}\n onChangeProps={(newLabel) => {\n handleLabelChange(newLabel, labelIndex);\n }}\n onRemove={() => {\n handleLabelRemove(labelIndex);\n }}\n containerStyle={{\n backgroundColor:\n semanticColor.core.background.base.default,\n }}\n />\n ))}\n <Button\n kind=\"tertiary\"\n startIcon={plusCircle}\n disabled={editingDisabled}\n onClick={() => {\n const newLabel = {\n ...getDefaultFigureForType(\"label\"),\n // Vertical offset for each label so they\n // don't overlap.\n coord: [0, -labels.length],\n // Default to the same color as the function\n color: lineColor,\n } satisfies LockedLabelType;\n\n onChangeProps({\n labels: [...labels, newLabel],\n });\n }}\n className={styles.addButton}\n >\n Add visible label\n </Button>\n\n {/* Actions */}\n <LockedFigureSettingsActions\n figureType={props.type}\n editingDisabled={editingDisabled}\n onMove={onMove}\n onRemove={onRemove}\n />\n </PerseusEditorAccordion>\n );\n};\n\ninterface ItemProps {\n category: string;\n example: string;\n index: number;\n editingDisabled?: boolean;\n pasteEquationFn: (property: string, newValue: string) => void;\n}\n\nconst ExampleItem = (props: ItemProps): React.ReactElement => {\n const {category, example, index, editingDisabled, pasteEquationFn} = props;\n const exampleId = useId();\n\n return (\n <li key={`${category}-${index}`} className={styles.exampleRow}>\n <IconButton\n icon={autoPasteIcon}\n kind=\"tertiary\"\n aria-label=\"paste example\"\n aria-describedby={exampleId}\n disabled={editingDisabled}\n onClick={() => pasteEquationFn(\"equation\", example)}\n size=\"medium\"\n className={styles.copyPasteButton}\n />\n <IconButton\n icon={copyIcon}\n kind=\"tertiary\"\n aria-label=\"copy example\"\n aria-describedby={exampleId}\n disabled={editingDisabled}\n onClick={() => navigator.clipboard.writeText(example)}\n size=\"medium\"\n className={styles.copyPasteButton}\n />\n <View\n className={`${styles.exampleContent} ${styles.exampleContentIndent}`}\n id={exampleId}\n >\n {example}\n </View>\n </li>\n );\n};\n\nexport default LockedFunctionSettings;\n","import {vec} from \"mafs\";\n\nimport type {Coord} from \"@khanacademy/perseus-core\";\n\n// TODO(LEMS-4567): this is a temporary workaround for a bug in mafs'\n// vec.midpoint() function. Remove this implementation of midpoint and use\n// vec.midpoint once we have the fix in https://github.com/stevenpetryk/mafs/pull/188.\nexport function midpoint(p1: Coord, p2: Coord): Coord {\n return vec.scale(vec.add(p1, p2), 0.5);\n}\n","/**\n * LockedPointSettings is a component that allows the user to edit the\n * settings of specifically a locked point on the graph.\n *\n * Used in the interactive graph editor's locked figures section.\n */\nimport {getDefaultFigureForType} from \"@khanacademy/perseus-core\";\nimport Button from \"@khanacademy/wonder-blocks-button\";\nimport {View} from \"@khanacademy/wonder-blocks-core\";\nimport {sizing, semanticColor} from \"@khanacademy/wonder-blocks-tokens\";\nimport {BodyText} from \"@khanacademy/wonder-blocks-typography\";\nimport plusCircle from \"@phosphor-icons/core/regular/plus-circle.svg\";\nimport * as React from \"react\";\n\nimport CoordinatePairInput from \"../../../components/coordinate-pair-input\";\nimport LabeledSwitch from \"../../../components/labeled-switch\";\nimport PerseusEditorAccordion from \"../../../components/perseus-editor-accordion\";\n\nimport ColorSelect from \"./color-select\";\nimport ColorSwatch from \"./color-swatch\";\nimport LockedFigureAria from \"./locked-figure-aria\";\nimport LockedFigureSettingsActions from \"./locked-figure-settings-actions\";\nimport LockedLabelSettings from \"./locked-label-settings\";\nimport styles from \"./locked-point-settings.module.css\";\nimport {\n generateSpokenMathDetails,\n generateLockedFigureAppearanceDescription,\n joinLabelsAsSpokenMath,\n} from \"./util\";\n\nimport type {LockedFigureSettingsMovementType} from \"./locked-figure-settings-actions\";\nimport type {LockedLabelType, LockedPointType} from \"@khanacademy/perseus-core\";\nimport type {StyleType} from \"@khanacademy/wonder-blocks-core\";\n\n// Passed to Wonder Blocks `style`/`containerStyle` props (typed as\n// `StyleType`), which do not accept a CSS-module className.\nconst spaceUnderStyle: StyleType = {\n marginBottom: sizing.size_080,\n};\n\nexport type Props = LockedPointType & {\n /**\n * Optional label for the point to display in the header summary.\n * Defaults to \"Point\".\n */\n headerLabel?: string;\n /**\n * Whether editing is disabled for this figure's controls.\n */\n editingDisabled?: boolean;\n /**\n * Whether the extra point settings are toggled open.\n */\n showPoint?: boolean;\n /**\n * Optional error message to display.\n */\n error?: string | null;\n /**\n * Called when the extra settings toggle switch is changed.\n */\n onTogglePoint?: (newValue) => void;\n /**\n * Called when the props (coords, color, etc.) are updated.\n */\n onChangeProps: (newProps: Partial<LockedPointType>) => void;\n\n // Accordion props\n /**\n * Whether this accordion is expanded.\n */\n expanded?: boolean;\n /**\n * Called when the accordion is expanded or collapsed.\n */\n onToggle?: (expanded: boolean) => void;\n\n // Movement props, used for standalone locked points\n // (not defining locked points within locked lines).\n /**\n * Called when the point is moved.\n */\n onMove?: (movement: LockedFigureSettingsMovementType) => void;\n /**\n * Called when the point is removed.\n */\n onRemove?: () => void;\n};\n\nconst LockedPointSettings = (props: Props) => {\n const {\n headerLabel,\n editingDisabled = false,\n coord,\n color: pointColor,\n filled = true,\n labels,\n ariaLabel,\n onChangeProps,\n onMove,\n onRemove,\n // defining point props\n showPoint,\n error,\n expanded,\n onTogglePoint,\n onToggle,\n } = props;\n\n const isDefiningPoint = !onMove && !onRemove;\n\n /**\n * Get a prepopulated aria label for the point, with the math\n * details converted into spoken words.\n *\n * If the point has no labels, the aria label will just be\n * \"Point at (x, y)\".\n *\n * If the point has labels, the aria label will be\n * \"Point label1, label2, label3 at (x, y)\".\n */\n async function getPrepopulatedAriaLabel() {\n const visiblelabel = await joinLabelsAsSpokenMath(labels);\n // Ensure negative values are read correctly within aria labels.\n const spokenX = await generateSpokenMathDetails(`$${coord[0]}$`);\n const spokenY = await generateSpokenMathDetails(`$${coord[1]}$`);\n\n let str = `Point${visiblelabel} at ${spokenX} comma ${spokenY}`;\n\n const pointAppearance = generateLockedFigureAppearanceDescription(\n pointColor,\n \"solid\",\n filled ? undefined : \"none\",\n );\n str += pointAppearance;\n\n return str;\n }\n\n function handleColorChange(newValue) {\n const newProps: Partial<LockedPointType> = {\n color: newValue,\n };\n\n // Update the color of the all labels to match the point\n newProps.labels = labels.map((label) => ({\n ...label,\n color: newValue,\n }));\n\n onChangeProps(newProps);\n }\n\n function handleCoordChange(newCoord) {\n const xOffset = newCoord[0] - coord[0];\n const yOffset = newCoord[1] - coord[1];\n\n const newProps: Partial<LockedPointType> = {\n coord: newCoord,\n };\n\n // Update the coord by the same amount as the point for all labels\n newProps.labels = labels.map((label) => ({\n ...label,\n coord: [label.coord[0] + xOffset, label.coord[1] + yOffset],\n }));\n\n onChangeProps(newProps);\n }\n\n function handleLabelChange(\n updatedLabel: Partial<LockedLabelType>,\n labelIndex: number,\n ) {\n const updatedLabels = [...labels];\n updatedLabels[labelIndex] = {\n ...labels[labelIndex],\n ...updatedLabel,\n };\n\n onChangeProps({labels: updatedLabels});\n }\n\n function handleLabelRemove(labelIndex: number) {\n const updatedLabels = labels.filter((_, index) => index !== labelIndex);\n\n onChangeProps({labels: updatedLabels});\n }\n\n return (\n <PerseusEditorAccordion\n expanded={expanded}\n onToggle={onToggle}\n containerStyle={\n isDefiningPoint\n ? {\n marginTop: sizing.size_080,\n marginBottom: 0,\n marginLeft: -sizing.size_040,\n marginRight: -sizing.size_040,\n backgroundColor:\n semanticColor.core.background.base.default,\n }\n : undefined\n }\n panelStyle={\n isDefiningPoint\n ? {\n // Need more space since we don't have the actions' margins.\n paddingBottom: sizing.size_060,\n }\n : undefined\n }\n header={\n // Summary: Point, coords, color (filled/open)\n <View className={styles.row}>\n <BodyText size=\"medium\" weight=\"bold\" tag=\"span\">\n {`${headerLabel || \"Point\"} (${coord[0]}, ${coord[1]})`}\n </BodyText>\n <ColorSwatch color={pointColor} filled={filled} />\n </View>\n }\n >\n <CoordinatePairInput\n coord={coord}\n style={spaceUnderStyle}\n disabled={editingDisabled}\n onChange={handleCoordChange}\n error={!!error}\n />\n\n {/* Toggle switch */}\n {onTogglePoint && (\n <LabeledSwitch\n label=\"show point on graph\"\n checked={!!showPoint}\n style={showPoint && spaceUnderStyle}\n disabled={editingDisabled}\n onChange={onTogglePoint}\n />\n )}\n\n {/* Toggleable section */}\n {(!isDefiningPoint || showPoint) && (\n <>\n <ColorSelect\n selectedValue={pointColor}\n onChange={handleColorChange}\n style={spaceUnderStyle}\n editingDisabled={editingDisabled}\n />\n <LabeledSwitch\n label=\"open point\"\n checked={!filled}\n disabled={editingDisabled}\n onChange={(newValue) => {\n onChangeProps({filled: !newValue});\n }}\n />\n </>\n )}\n\n {!isDefiningPoint && (\n <>\n <View\n className={`${styles.horizontalRule} ${styles.sectionTop}`}\n />\n\n <LockedFigureAria\n ariaLabel={ariaLabel}\n getPrepopulatedAriaLabel={getPrepopulatedAriaLabel}\n editingDisabled={editingDisabled}\n onChangeProps={(newProps) => {\n onChangeProps(newProps);\n }}\n />\n </>\n )}\n\n {/* Visible labels */}\n <View\n className={`${styles.horizontalRule} ${styles.dividerTight}`}\n />\n <BodyText className={styles.sectionTop}>Visible labels</BodyText>\n {labels.map((label, labelIndex) => (\n <LockedLabelSettings\n {...label}\n key={labelIndex}\n editingDisabled={editingDisabled}\n containerStyle={\n !isDefiningPoint && {\n backgroundColor:\n semanticColor.core.background.base.default,\n }\n }\n expanded={true}\n onChangeProps={(newLabel) => {\n handleLabelChange(newLabel, labelIndex);\n }}\n onRemove={() => {\n handleLabelRemove(labelIndex);\n }}\n />\n ))}\n <Button\n kind=\"tertiary\"\n startIcon={plusCircle}\n disabled={editingDisabled}\n onClick={() => {\n const newLabel = {\n ...getDefaultFigureForType(\"label\"),\n // Place the label at the same position\n // as the point. Add a small offset to\n // avoid crowding.\n coord: [\n coord[0] + 0.5,\n // Additional offset for each label so\n // they don't overlap.\n coord[1] - labels.length,\n ],\n // Default to the same color as the point\n color: pointColor,\n } satisfies LockedLabelType;\n\n onChangeProps({\n labels: [...labels, newLabel],\n });\n }}\n className={styles.addButton}\n >\n Add visible label\n </Button>\n\n {onRemove && (\n <LockedFigureSettingsActions\n figureType={props.type}\n editingDisabled={editingDisabled}\n onMove={onMove}\n onRemove={onRemove}\n />\n )}\n </PerseusEditorAccordion>\n );\n};\n\nexport default LockedPointSettings;\n","/**\n * LockedLineSettings is a component that allows the user to edit the\n * settings of specifically a locked line on the graph.\n *\n * Used in the interactive graph editor's locked figures section.\n */\nimport {vector as kvector} from \"@khanacademy/kmath\";\nimport {getDefaultFigureForType} from \"@khanacademy/perseus-core\";\nimport Button from \"@khanacademy/wonder-blocks-button\";\nimport {View} from \"@khanacademy/wonder-blocks-core\";\nimport {semanticColor} from \"@khanacademy/wonder-blocks-tokens\";\nimport {BodyText} from \"@khanacademy/wonder-blocks-typography\";\nimport {UnreachableCaseError} from \"@khanacademy/wonder-stuff-core\";\nimport plusCircle from \"@phosphor-icons/core/regular/plus-circle.svg\";\nimport {vec} from \"mafs\";\nimport * as React from \"react\";\n\nimport PerseusEditorAccordion from \"../../../components/perseus-editor-accordion\";\nimport {TypedSingleSelect} from \"../../../components/typed-single-select\";\nimport {midpoint} from \"../../../util/midpoint\";\n\nimport ColorSelect from \"./color-select\";\nimport LineStrokeSelect, {lineStrokeStyleOptions} from \"./line-stroke-select\";\nimport LineSwatch from \"./line-swatch\";\nimport LineWeightSelect from \"./line-weight-select\";\nimport LockedFigureAria from \"./locked-figure-aria\";\nimport LockedFigureSettingsActions from \"./locked-figure-settings-actions\";\nimport LockedLabelSettings from \"./locked-label-settings\";\nimport styles from \"./locked-line-settings.module.css\";\nimport LockedPointSettings from \"./locked-point-settings\";\nimport {\n generateLockedFigureAppearanceDescription,\n generateSpokenMathDetails,\n joinLabelsAsSpokenMath,\n} from \"./util\";\n\nimport type {LockedFigureSettingsCommonProps} from \"./locked-figure-settings\";\nimport type {Coord} from \"@khanacademy/perseus\";\nimport type {\n LockedFigure,\n LockedFigureColor,\n StrokeWeight,\n LockedLabelType,\n LockedLineType,\n LockedPointType,\n} from \"@khanacademy/perseus-core\";\nimport type {StyleType} from \"@khanacademy/wonder-blocks-core\";\n\nconst lengthZeroStr = \"The line cannot have length 0.\";\n\n// Passed to LockedLabelSettings' `containerStyle`, which is typed as a\n// Wonder Blocks `StyleType` and does not accept a CSS-module className.\nconst labelContainerStyle: StyleType = {\n backgroundColor: semanticColor.core.background.base.default,\n};\n\nexport type Props = LockedLineType &\n LockedFigureSettingsCommonProps & {\n /**\n * Called when the props (points, color, etc.) are updated.\n */\n onChangeProps: (newProps: Partial<LockedFigure>) => void;\n };\n\nconst LockedLineSettings = (props: Props) => {\n const {\n kind,\n points,\n color: lineColor,\n lineStyle = \"solid\",\n showPoint1,\n showPoint2,\n weight,\n labels,\n ariaLabel,\n editingDisabled = false,\n onChangeProps,\n onMove,\n onRemove,\n } = props;\n const [point1, point2] = points;\n\n const capitalizeKind = kind.charAt(0).toUpperCase() + kind.slice(1);\n const lineLabel = `${capitalizeKind} (${point1.coord[0]},\n ${point1.coord[1]}), (${point2.coord[0]}, ${point2.coord[1]})`;\n\n // Check if the line has length 0.\n const isInvalid = kvector.equal(point1.coord, point2.coord);\n /**\n * Generate a prepopulated aria label for the line, with the math\n * details converted into spoken words.\n */\n async function getPrepopulatedAriaLabel() {\n const visiblelabel = await joinLabelsAsSpokenMath(labels);\n const point1VisibleLabel = await joinLabelsAsSpokenMath(point1.labels);\n const point2VisibleLabel = await joinLabelsAsSpokenMath(point2.labels);\n // Ensure negative values are read correctly within aria labels.\n const spokenPoint1X = await generateSpokenMathDetails(\n `$${point1.coord[0]}$`,\n );\n const spokenPoint1Y = await generateSpokenMathDetails(\n `$${point1.coord[1]}$`,\n );\n const spokenPoint2X = await generateSpokenMathDetails(\n `$${point2.coord[0]}$`,\n );\n const spokenPoint2Y = await generateSpokenMathDetails(\n `$${point2.coord[1]}$`,\n );\n\n // \"THROUGH point1 AND point2\" for LINE.\n // \"FROM point1 THROUGH point2\" for RAY.\n // \"FROM point1 TO point2\" for SEGMENT.\n let str: string;\n switch (kind) {\n case \"line\":\n str = `${capitalizeKind}${visiblelabel} through point${point1VisibleLabel} at ${spokenPoint1X} comma ${spokenPoint1Y} and point${point2VisibleLabel} at ${spokenPoint2X} comma ${spokenPoint2Y}`;\n break;\n case \"ray\":\n str = `${capitalizeKind}${visiblelabel} from point${point1VisibleLabel} at ${spokenPoint1X} comma ${spokenPoint1Y} through point${point2VisibleLabel} at ${spokenPoint2X} comma ${spokenPoint2Y}`;\n break;\n case \"segment\":\n str = `${capitalizeKind}${visiblelabel} from point${point1VisibleLabel} at ${spokenPoint1X} comma ${spokenPoint1Y} to point${point2VisibleLabel} at ${spokenPoint2X} comma ${spokenPoint2Y}`;\n break;\n default:\n throw new UnreachableCaseError(kind, \"Unknown line kind\");\n }\n\n const lineAppearance = generateLockedFigureAppearanceDescription(\n lineColor,\n lineStyle,\n undefined, // No fill style for lines\n weight,\n );\n str += lineAppearance;\n\n return str;\n }\n\n function handleChangePoint(\n newPointProps: Partial<LockedPointType>,\n index: 0 | 1,\n ) {\n // eslint-disable-next-line no-restricted-syntax\n const newPoints = [...points] as [LockedPointType, LockedPointType];\n newPoints[index] = {\n ...points[index],\n ...newPointProps,\n };\n\n // Update labels to be centered between the two points,\n // retaining existing offset.\n const oldMidpoint = midpoint(points[0].coord, points[1].coord);\n const newMidpoint = midpoint(newPoints[0].coord, newPoints[1].coord);\n const offset: Coord = [\n newMidpoint[0] - oldMidpoint[0],\n newMidpoint[1] - oldMidpoint[1],\n ];\n const newLabels = labels.map((label, labelIndex) => ({\n ...label,\n coord: [\n label.coord[0] + offset[0],\n label.coord[1] + offset[1],\n ] satisfies Coord,\n }));\n\n onChangeProps({\n points: newPoints,\n labels: newLabels,\n });\n }\n\n function handleColorChange(newColor: LockedFigureColor) {\n const newLabels = labels.map((label) => ({\n ...label,\n color: newColor,\n }));\n\n onChangeProps({\n color: newColor,\n // Keep the line's points' colors in sync with the line color.\n points: [\n {\n ...point1,\n color: newColor,\n labels: point1.labels.map((label) => ({\n ...label,\n color: newColor,\n })),\n },\n {\n ...point2,\n color: newColor,\n labels: point2.labels.map((label) => ({\n ...label,\n color: newColor,\n })),\n },\n ],\n // Keep the line's labels' colors in sync with the line color.\n labels: newLabels,\n });\n }\n\n function handleLabelChange(\n updatedLabel: Partial<LockedLabelType>,\n labelIndex: number,\n ) {\n const updatedLabels = [...labels];\n updatedLabels[labelIndex] = {\n ...labels[labelIndex],\n ...updatedLabel,\n };\n\n onChangeProps({labels: updatedLabels});\n }\n\n function handleLabelRemove(labelIndex: number) {\n const updatedLabels = labels.filter((_, index) => index !== labelIndex);\n\n onChangeProps({labels: updatedLabels});\n }\n\n return (\n <PerseusEditorAccordion\n expanded={props.expanded}\n onToggle={props.onToggle}\n header={\n <View className={`${styles.row} ${styles.header}`}>\n <BodyText size=\"medium\" weight=\"bold\" tag=\"span\">\n {lineLabel}\n </BodyText>\n <LineSwatch color={lineColor} lineStyle={lineStyle} />\n </View>\n }\n >\n {/* Line kind settings */}\n <BodyText\n tag=\"label\"\n className={`${styles.row} ${styles.spaceUnder} ${styles.kindLabel}`}\n >\n kind\n <TypedSingleSelect\n selectedValue={kind}\n disabled={editingDisabled}\n onChange={(value) => onChangeProps({kind: value})}\n options={{line: \"line\", ray: \"ray\", segment: \"segment\"}}\n />\n </BodyText>\n\n <View\n className={`${styles.row} ${styles.spaceUnder} ${styles.colorRow}`}\n >\n {/* Line color settings */}\n <ColorSelect\n selectedValue={lineColor}\n editingDisabled={editingDisabled}\n onChange={handleColorChange}\n />\n\n {/* Line style settings */}\n <LineStrokeSelect\n selectedValue={lineStyle}\n options={lineStrokeStyleOptions}\n editingDisabled={editingDisabled}\n onChange={(value) => onChangeProps({lineStyle: value})}\n />\n </View>\n <LineWeightSelect\n selectedValue={weight}\n editingDisabled={editingDisabled}\n onChange={(value: StrokeWeight) =>\n onChangeProps({weight: value})\n }\n />\n\n {/* Points error message */}\n {isInvalid && (\n <BodyText className={styles.errorText}>\n {lengthZeroStr}\n </BodyText>\n )}\n\n {/* Defining points settings */}\n <LockedPointSettings\n headerLabel=\"Point 1\"\n expanded={true}\n showPoint={showPoint1}\n error={isInvalid ? lengthZeroStr : null}\n {...point1}\n editingDisabled={editingDisabled}\n onTogglePoint={(newValue) =>\n onChangeProps({showPoint1: newValue})\n }\n onChangeProps={(newProps) => handleChangePoint(newProps, 0)}\n />\n <LockedPointSettings\n headerLabel=\"Point 2\"\n expanded={true}\n showPoint={showPoint2}\n error={isInvalid ? lengthZeroStr : null}\n {...point2}\n editingDisabled={editingDisabled}\n onTogglePoint={(newValue) =>\n onChangeProps({showPoint2: newValue})\n }\n onChangeProps={(newProps) => handleChangePoint(newProps, 1)}\n />\n\n {/* Aria label */}\n <View className={`${styles.horizontalRule} ${styles.sectionTop}`} />\n <LockedFigureAria\n ariaLabel={ariaLabel}\n getPrepopulatedAriaLabel={getPrepopulatedAriaLabel}\n editingDisabled={editingDisabled}\n onChangeProps={(newProps) => {\n onChangeProps(newProps);\n }}\n />\n\n {/* Visible labels */}\n <View\n className={`${styles.horizontalRule} ${styles.dividerTight}`}\n />\n <BodyText className={styles.sectionTop}>Visible labels</BodyText>\n\n {labels.map((label, labelIndex) => (\n <LockedLabelSettings\n {...label}\n key={labelIndex}\n editingDisabled={editingDisabled}\n expanded={true}\n onChangeProps={(newLabel) => {\n handleLabelChange(newLabel, labelIndex);\n }}\n onRemove={() => {\n handleLabelRemove(labelIndex);\n }}\n containerStyle={labelContainerStyle}\n />\n ))}\n <Button\n kind=\"tertiary\"\n startIcon={plusCircle}\n disabled={editingDisabled}\n onClick={() => {\n // Additional vertical offset for each label so\n // they don't overlap.\n const offsetPerLabel: vec.Vector2 = [0, -1];\n const labelLocation = vec.add(\n vec.scale(offsetPerLabel, labels.length),\n midpoint(points[0].coord, points[1].coord),\n );\n\n const newLabel = {\n ...getDefaultFigureForType(\"label\"),\n coord: labelLocation,\n // Default to the same color as the line\n color: lineColor,\n } satisfies LockedLabelType;\n\n onChangeProps({\n labels: [...labels, newLabel],\n });\n }}\n className={styles.addButton}\n >\n Add visible label\n </Button>\n\n {/* Actions */}\n <LockedFigureSettingsActions\n figureType={props.type}\n editingDisabled={editingDisabled}\n onMove={onMove}\n onRemove={onRemove}\n />\n </PerseusEditorAccordion>\n );\n};\n\nexport default LockedLineSettings;\n","import {\n lockedFigureColors,\n lockedFigureFillStyles,\n} from \"@khanacademy/perseus-core\";\nimport {View} from \"@khanacademy/wonder-blocks-core\";\nimport {semanticColor, spacing} from \"@khanacademy/wonder-blocks-tokens\";\nimport {StyleSheet} from \"aphrodite\";\nimport * as React from \"react\";\n\nimport type {\n LockedFigureColor,\n LockedFigureFillType,\n LockedFigureStrokeStyle,\n} from \"@khanacademy/perseus-core\";\n\ntype Props = {\n color: LockedFigureColor;\n fillStyle: LockedFigureFillType;\n // \"none\" renders no border (a valid CSS border-style), reflecting a\n // stroke-less (fill-only) polygon.\n strokeStyle: LockedFigureStrokeStyle;\n};\n\nconst PolygonSwatch = (props: Props) => {\n const {color, fillStyle, strokeStyle} = props;\n\n return (\n <View\n aria-label={`${color}, stroke ${strokeStyle}, fill ${fillStyle}`}\n style={[\n styles.container,\n {\n border: `4px ${strokeStyle} ${lockedFigureColors[color]}`,\n },\n ]}\n >\n <View\n style={[\n styles.innerSquare,\n {\n backgroundColor: lockedFigureColors[color],\n opacity:\n fillStyle === \"white\"\n ? 0\n : lockedFigureFillStyles[fillStyle],\n },\n ]}\n />\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n // Add a white outline so that the color swatch is visible when\n // the dropdown option is highlighted with its blue background.\n outline: `2px solid ${semanticColor.focus.inner}`,\n width: spacing.large_24,\n height: spacing.large_24,\n backgroundColor: semanticColor.core.background.base.default,\n alignItems: \"center\",\n justifyContent: \"center\",\n },\n innerSquare: {\n width: 20,\n height: 20,\n },\n});\n\nexport default PolygonSwatch;\n","import {\n type Coord,\n getDefaultFigureForType,\n type LockedFigureColor,\n type LockedLabelType,\n type LockedPolygonType,\n type LockedFigureFillType,\n} from \"@khanacademy/perseus-core\";\nimport Button from \"@khanacademy/wonder-blocks-button\";\nimport {View} from \"@khanacademy/wonder-blocks-core\";\nimport {PhosphorIcon} from \"@khanacademy/wonder-blocks-icon\";\nimport IconButton from \"@khanacademy/wonder-blocks-icon-button\";\nimport {Spring} from \"@khanacademy/wonder-blocks-layout\";\nimport {semanticColor, sizing} from \"@khanacademy/wonder-blocks-tokens\";\nimport {BodyText} from \"@khanacademy/wonder-blocks-typography\";\nimport arrowFatDown from \"@phosphor-icons/core/regular/arrow-fat-down.svg\";\nimport arrowFatLeft from \"@phosphor-icons/core/regular/arrow-fat-left.svg\";\nimport arrowFatRight from \"@phosphor-icons/core/regular/arrow-fat-right.svg\";\nimport arrowFatUp from \"@phosphor-icons/core/regular/arrow-fat-up.svg\";\nimport minusCircle from \"@phosphor-icons/core/regular/minus-circle.svg\";\nimport plusCircle from \"@phosphor-icons/core/regular/plus-circle.svg\";\nimport * as React from \"react\";\n\nimport CoordinatePairInput from \"../../../components/coordinate-pair-input\";\nimport LabeledSwitch from \"../../../components/labeled-switch\";\nimport PerseusEditorAccordion from \"../../../components/perseus-editor-accordion\";\nimport {TypedSingleSelect} from \"../../../components/typed-single-select\";\n\nimport ColorSelect from \"./color-select\";\nimport LineStrokeSelect, {\n fillableStrokeStyleOptions,\n} from \"./line-stroke-select\";\nimport LineWeightSelect from \"./line-weight-select\";\nimport LockedFigureAria from \"./locked-figure-aria\";\nimport LockedFigureSettingsActions from \"./locked-figure-settings-actions\";\nimport LockedLabelSettings from \"./locked-label-settings\";\nimport styles from \"./locked-polygon-settings.module.css\";\nimport PolygonSwatch from \"./polygon-swatch\";\nimport {\n generateLockedFigureAppearanceDescription,\n generateSpokenMathDetails,\n joinLabelsAsSpokenMath,\n} from \"./util\";\n\nimport type {LockedFigureSettingsCommonProps} from \"./locked-figure-settings\";\nimport type {StyleType} from \"@khanacademy/wonder-blocks-core\";\n\n// Passed to Wonder Blocks `StyleType`-only props (PerseusEditorAccordion's\n// `containerStyle`/`panelStyle`, child `style`/`containerStyle`), which do not\n// accept a CSS-module className.\nconst spaceUnderStyle: StyleType = {marginBottom: sizing.size_080};\nconst pointAccordionContainerStyle: StyleType = {\n backgroundColor: semanticColor.core.background.base.default,\n};\nconst pointAccordionPanelStyle: StyleType = {\n alignItems: \"start\",\n};\nconst labelContainerStyle: StyleType = {\n backgroundColor: semanticColor.core.background.base.default,\n};\n\nexport type Props = LockedFigureSettingsCommonProps &\n LockedPolygonType & {\n /**\n * Called when the props (coords, color, etc.) are updated.\n */\n onChangeProps: (newProps: Partial<LockedPolygonType>) => void;\n };\n\nconst LockedPolygonSettings = (props: Props) => {\n const {\n points,\n color,\n showVertices,\n fillStyle,\n strokeStyle,\n weight,\n labels,\n ariaLabel,\n expanded,\n editingDisabled = false,\n onToggle,\n onChangeProps,\n onMove,\n onRemove,\n } = props;\n\n /**\n * Generate the prepopulated aria label for the polygon,\n * with the math details converted into spoken words.\n */\n async function getPrepopulatedAriaLabel() {\n const visiblelabel = await joinLabelsAsSpokenMath(labels);\n\n let str = `Polygon${visiblelabel} with ${points.length} sides, vertices at `;\n\n // Add the coordinates of each point to the aria label\n const pointsList = await Promise.all(\n points.map(async ([x, y]) => {\n // Ensure negative values are read correctly within aria labels.\n const spokenX = await generateSpokenMathDetails(`$${x}$`);\n const spokenY = await generateSpokenMathDetails(`$${y}$`);\n return `${spokenX} comma ${spokenY}`;\n }),\n );\n str += pointsList.join(\", \");\n\n const polygonAppearance = generateLockedFigureAppearanceDescription(\n color,\n strokeStyle,\n fillStyle,\n weight,\n );\n str += polygonAppearance;\n return str;\n }\n\n function handleColorChange(newValue: LockedFigureColor) {\n const newProps: Partial<LockedPolygonType> = {\n color: newValue,\n };\n\n // Update the color of the all labels to match the point\n newProps.labels = labels.map((label) => ({\n ...label,\n color: newValue,\n }));\n\n onChangeProps(newProps);\n }\n\n function handlePolygonMove(movement: \"up\" | \"down\" | \"left\" | \"right\") {\n switch (movement) {\n case \"up\":\n onChangeProps({\n points: points.map(([x, y]) => [x, y + 1]),\n labels: labels.map((label) => ({\n ...label,\n coord: [label.coord[0], label.coord[1] + 1],\n })),\n });\n break;\n case \"down\":\n onChangeProps({\n points: points.map(([x, y]) => [x, y - 1]),\n labels: labels.map((label) => ({\n ...label,\n coord: [label.coord[0], label.coord[1] - 1],\n })),\n });\n break;\n case \"left\":\n onChangeProps({\n points: points.map(([x, y]) => [x - 1, y]),\n labels: labels.map((label) => ({\n ...label,\n coord: [label.coord[0] - 1, label.coord[1]],\n })),\n });\n break;\n case \"right\":\n onChangeProps({\n points: points.map(([x, y]) => [x + 1, y]),\n labels: labels.map((label) => ({\n ...label,\n coord: [label.coord[0] + 1, label.coord[1]],\n })),\n });\n break;\n }\n }\n\n function handleLabelChange(\n updatedLabel: Partial<LockedLabelType>,\n labelIndex: number,\n ) {\n const updatedLabels = [...labels];\n updatedLabels[labelIndex] = {\n ...labels[labelIndex],\n ...updatedLabel,\n };\n\n onChangeProps({labels: updatedLabels});\n }\n\n function handleLabelRemove(labelIndex: number) {\n const updatedLabels = labels.filter((_, index) => index !== labelIndex);\n\n onChangeProps({labels: updatedLabels});\n }\n\n return (\n <PerseusEditorAccordion\n expanded={expanded}\n onToggle={onToggle}\n header={\n // Summary: Polygon, number of sides, style swatch\n <View className={`${styles.row} ${styles.header}`}>\n <BodyText\n size=\"medium\"\n weight=\"bold\"\n tag=\"span\"\n >{`Polygon, ${points.length} sides`}</BodyText>\n <PolygonSwatch\n color={color}\n fillStyle={fillStyle}\n strokeStyle={strokeStyle}\n />\n </View>\n }\n >\n <View className={`${styles.row} ${styles.colorRow}`}>\n {/* Color */}\n <ColorSelect\n selectedValue={color}\n editingDisabled={editingDisabled}\n onChange={handleColorChange}\n />\n\n {/* Fill opacity */}\n <BodyText\n tag=\"label\"\n className={`${styles.row} ${styles.truncatedWidth} ${styles.fillLabel}`}\n >\n fill\n <TypedSingleSelect<LockedFigureFillType>\n selectedValue={fillStyle}\n disabled={editingDisabled}\n onChange={(value) => onChangeProps({fillStyle: value})}\n options={{\n none: \"none\",\n white: \"white\",\n translucent: \"translucent\",\n solid: \"solid\",\n }}\n />\n </BodyText>\n </View>\n\n {/* Stroke style */}\n <LineStrokeSelect\n selectedValue={strokeStyle}\n options={fillableStrokeStyleOptions}\n editingDisabled={editingDisabled}\n onChange={(value) => onChangeProps({strokeStyle: value})}\n containerStyle={spaceUnderStyle}\n />\n\n {/* Weight */}\n <LineWeightSelect\n selectedValue={weight}\n editingDisabled={editingDisabled}\n onChange={(value) =>\n onChangeProps({\n weight: value,\n })\n }\n containerStyle={spaceUnderStyle}\n />\n\n {/* Show vertices switch */}\n <LabeledSwitch\n label=\"show vertices\"\n checked={showVertices}\n disabled={editingDisabled}\n onChange={(newValue: boolean) =>\n onChangeProps({showVertices: newValue})\n }\n style={spaceUnderStyle}\n />\n\n <PerseusEditorAccordion\n header={\n <BodyText size=\"medium\" weight=\"bold\" tag=\"span\">\n Points\n </BodyText>\n }\n expanded={true}\n containerStyle={pointAccordionContainerStyle}\n panelStyle={pointAccordionPanelStyle}\n >\n {points.map((point, index) => {\n const pointLabel = String.fromCharCode(65 + index);\n\n return (\n <View\n key={`locked-polygon-point-index-${index}`}\n className={`${styles.row} ${styles.spaceUnder}`}\n >\n {/* Give the points alphabet labels */}\n <BodyText\n size=\"medium\"\n weight=\"bold\"\n >{`${pointLabel}:`}</BodyText>\n <CoordinatePairInput\n coord={point}\n labels={[\"x\", \"y\"]}\n style={{marginInlineStart: sizing.size_160}}\n disabled={editingDisabled}\n onChange={(newValue: Coord) => {\n const newPoints = [...points];\n newPoints[index] = newValue;\n props.onChangeProps({points: newPoints});\n }}\n />\n {\n // Only show the minus (delete) buttons if there are\n // more than 3 points. 3 points is the minimum number\n // of points for a polygon (triangle).\n points.length > 3 && (\n <IconButton\n aria-label={`Delete polygon point ${pointLabel}`}\n icon={minusCircle}\n kind=\"tertiary\"\n actionType=\"destructive\"\n disabled={editingDisabled}\n onClick={() => {\n const newPoints = [...points];\n newPoints.splice(index, 1);\n props.onChangeProps({\n points: newPoints,\n });\n }}\n className={styles.icon}\n />\n )\n }\n </View>\n );\n })}\n <View\n className={`${styles.row} ${styles.polygonActionsContainer}`}\n >\n <Button\n kind=\"tertiary\"\n startIcon={plusCircle}\n disabled={editingDisabled}\n onClick={() => {\n props.onChangeProps({\n points: [...points, [0, 0]],\n });\n }}\n >\n Add point\n </Button>\n\n <Spring />\n\n {/* Buttons to move the entire polygon.\n\n The left/right arrows are passed as elements so they can\n set `mirrorInRtl={false}`. These point along the graph's\n x-axis, which is absolute — \"left\" means decreasing x in\n every locale — so they must not flip in RTL the way a\n \"back\" arrow would. The up/down arrows need nothing,\n since only the horizontal glyphs are mirrored. */}\n <View className={styles.movementButtonsContainer}>\n <IconButton\n aria-label=\"Move polygon up\"\n size=\"small\"\n icon={arrowFatUp}\n kind=\"tertiary\"\n disabled={editingDisabled}\n onClick={() => handlePolygonMove(\"up\")}\n />\n <View className={styles.row}>\n <IconButton\n aria-label=\"Move polygon left\"\n size=\"small\"\n icon={\n <PhosphorIcon\n icon={arrowFatLeft}\n mirrorInRtl={false}\n />\n }\n kind=\"tertiary\"\n disabled={editingDisabled}\n onClick={() => handlePolygonMove(\"left\")}\n />\n <IconButton\n aria-label=\"Move polygon down\"\n size=\"small\"\n icon={arrowFatDown}\n kind=\"tertiary\"\n disabled={editingDisabled}\n onClick={() => handlePolygonMove(\"down\")}\n />\n <IconButton\n aria-label=\"Move polygon right\"\n size=\"small\"\n icon={\n <PhosphorIcon\n icon={arrowFatRight}\n mirrorInRtl={false}\n />\n }\n kind=\"tertiary\"\n disabled={editingDisabled}\n onClick={() => handlePolygonMove(\"right\")}\n />\n </View>\n </View>\n </View>\n </PerseusEditorAccordion>\n\n {/* Aria label */}\n <View className={`${styles.horizontalRule} ${styles.sectionTop}`} />\n <LockedFigureAria\n ariaLabel={ariaLabel}\n getPrepopulatedAriaLabel={getPrepopulatedAriaLabel}\n editingDisabled={editingDisabled}\n onChangeProps={(newProps) => {\n onChangeProps(newProps);\n }}\n />\n\n {/* Visible Labels */}\n <View\n className={`${styles.horizontalRule} ${styles.dividerTight}`}\n />\n <BodyText className={styles.sectionTop}>Visible labels</BodyText>\n {labels.map((label, labelIndex) => (\n <LockedLabelSettings\n {...label}\n key={labelIndex}\n editingDisabled={editingDisabled}\n expanded={true}\n onChangeProps={(newLabel) => {\n handleLabelChange(newLabel, labelIndex);\n }}\n onRemove={() => {\n handleLabelRemove(labelIndex);\n }}\n containerStyle={labelContainerStyle}\n />\n ))}\n <Button\n kind=\"tertiary\"\n startIcon={plusCircle}\n disabled={editingDisabled}\n onClick={() => {\n const newLabel = {\n ...getDefaultFigureForType(\"label\"),\n coord: [\n points[0][0],\n // Additional vertical offset for each\n // label so they don't overlap.\n points[0][1] - labels.length,\n ],\n // Default to the same color as the ellipse\n color: color,\n } satisfies LockedLabelType;\n\n onChangeProps({\n labels: [...labels, newLabel],\n });\n }}\n className={styles.addButton}\n >\n Add visible label\n </Button>\n\n {/* Actions */}\n <LockedFigureSettingsActions\n figureType={props.type}\n editingDisabled={editingDisabled}\n onMove={onMove}\n onRemove={onRemove}\n />\n </PerseusEditorAccordion>\n );\n};\n\nexport default LockedPolygonSettings;\n","/**\n * LockedVectorSettings is a component that allows the user to edit the\n * settings of specifically a locked vector on the graph.\n *\n * Used in the interactive graph editor's locked figures section.\n */\nimport {vector as kvector} from \"@khanacademy/kmath\";\nimport {getDefaultFigureForType} from \"@khanacademy/perseus-core\";\nimport Button from \"@khanacademy/wonder-blocks-button\";\nimport {View} from \"@khanacademy/wonder-blocks-core\";\nimport {sizing, semanticColor} from \"@khanacademy/wonder-blocks-tokens\";\nimport {BodyText} from \"@khanacademy/wonder-blocks-typography\";\nimport plusCircle from \"@phosphor-icons/core/regular/plus-circle.svg\";\nimport {vec} from \"mafs\";\nimport * as React from \"react\";\n\nimport CoordinatePairInput from \"../../../components/coordinate-pair-input\";\nimport PerseusEditorAccordion from \"../../../components/perseus-editor-accordion\";\nimport {midpoint} from \"../../../util/midpoint\";\n\nimport ColorSelect from \"./color-select\";\nimport LineSwatch from \"./line-swatch\";\nimport LineWeightSelect from \"./line-weight-select\";\nimport LockedFigureAria from \"./locked-figure-aria\";\nimport LockedFigureSettingsActions from \"./locked-figure-settings-actions\";\nimport LockedLabelSettings from \"./locked-label-settings\";\nimport styles from \"./locked-vector-settings.module.css\";\nimport {\n generateLockedFigureAppearanceDescription,\n generateSpokenMathDetails,\n joinLabelsAsSpokenMath,\n} from \"./util\";\n\nimport type {LockedFigureSettingsCommonProps} from \"./locked-figure-settings\";\nimport type {\n Coord,\n LockedFigure,\n LockedFigureColor,\n LockedLabelType,\n LockedVectorType,\n StrokeWeight,\n} from \"@khanacademy/perseus-core\";\nimport type {StyleType} from \"@khanacademy/wonder-blocks-core\";\n\nconst lengthErrorMessage = \"The vector cannot have length 0.\";\n\n// Passed to PerseusEditorAccordion's `containerStyle`/`panelStyle` and\n// LockedLabelSettings' `containerStyle`, which are typed as Wonder Blocks\n// `StyleType` and do not accept a CSS-module className.\nconst coordsAccordionContainerStyle: StyleType = {\n marginTop: sizing.size_080,\n marginBottom: 0,\n marginLeft: -sizing.size_040,\n marginRight: -sizing.size_040,\n backgroundColor: semanticColor.core.background.base.default,\n};\nconst coordsAccordionPanelStyle: StyleType = {\n paddingBottom: sizing.size_160,\n};\nconst labelContainerStyle: StyleType = {\n backgroundColor: semanticColor.core.background.base.default,\n};\n\nexport type Props = LockedVectorType &\n LockedFigureSettingsCommonProps & {\n /**\n * Called when the props (points, color, etc.) are updated.\n */\n onChangeProps: (newProps: Partial<LockedFigure>) => void;\n };\n\nconst LockedVectorSettings = (props: Props) => {\n const {\n points,\n color: lineColor,\n weight,\n labels,\n ariaLabel,\n editingDisabled = false,\n onChangeProps,\n onMove,\n onRemove,\n } = props;\n const [tail, tip] = points;\n const lineLabel = `Vector (${tail[0]}, ${tail[1]}), (${tip[0]}, ${tip[1]})`;\n\n // Check if the line has length 0.\n const isInvalid = kvector.equal(tail, tip);\n\n /**\n * Generate the prepopulated aria label for the vector,\n * with the math details converted into spoken words.\n */\n async function getPrepopulatedAriaLabel() {\n const visiblelabel = await joinLabelsAsSpokenMath(labels);\n // Ensure negative values are read correctly within aria labels.\n const spokenTailX = await generateSpokenMathDetails(`$${tail[0]}$`);\n const spokenTailY = await generateSpokenMathDetails(`$${tail[1]}$`);\n const spokenTipX = await generateSpokenMathDetails(`$${tip[0]}$`);\n const spokenTipY = await generateSpokenMathDetails(`$${tip[1]}$`);\n\n let str = `Vector${visiblelabel} from ${spokenTailX} comma ${spokenTailY} to ${spokenTipX} comma ${spokenTipY}`;\n\n const vectorAppearance = generateLockedFigureAppearanceDescription(\n lineColor,\n \"solid\",\n undefined, // No fill style for vectors\n weight,\n );\n str += vectorAppearance;\n\n return str;\n }\n\n function handleChangePoint(newCoord: Coord | undefined, index: 0 | 1) {\n if (typeof newCoord !== \"undefined\") {\n const newPoints = [...points] satisfies [tail: Coord, tip: Coord];\n newPoints[index] = [...newCoord];\n\n // Update labels to match the new points\n const oldMidpoint = midpoint(tail, tip);\n const newMidpoint = midpoint(newPoints[0], newPoints[1]);\n const offset = vec.sub(newMidpoint, oldMidpoint);\n const newLabels = labels.map((label) => ({\n ...label,\n coord: vec.add(label.coord, offset),\n }));\n\n onChangeProps({\n points: newPoints,\n labels: newLabels,\n });\n }\n }\n\n function handleColorChange(newColor: LockedFigureColor) {\n const newProps: Partial<LockedVectorType> = {\n color: newColor,\n };\n\n // Update the color of the all labels to match the point\n newProps.labels = labels.map((label) => ({\n ...label,\n color: newColor,\n }));\n\n onChangeProps(newProps);\n }\n\n function handleLabelChange(\n updatedLabel: Partial<LockedLabelType>,\n labelIndex: number,\n ) {\n const updatedLabels = [...labels];\n updatedLabels[labelIndex] = {\n ...labels[labelIndex],\n ...updatedLabel,\n };\n\n onChangeProps({labels: updatedLabels});\n }\n\n function handleLabelRemove(labelIndex: number) {\n const updatedLabels = labels.filter((_, index) => index !== labelIndex);\n\n onChangeProps({labels: updatedLabels});\n }\n\n return (\n <PerseusEditorAccordion\n expanded={props.expanded}\n onToggle={props.onToggle}\n header={\n <View className={styles.row}>\n <BodyText size=\"medium\" weight=\"bold\" tag=\"span\">\n {lineLabel}\n </BodyText>\n <LineSwatch color={lineColor} lineStyle=\"solid\" />\n </View>\n }\n >\n {/* Line color settings */}\n <ColorSelect\n selectedValue={lineColor}\n editingDisabled={editingDisabled}\n onChange={handleColorChange}\n style={{marginBlockEnd: sizing.size_080}}\n />\n\n {/* Line weight settings */}\n <LineWeightSelect\n selectedValue={weight}\n editingDisabled={editingDisabled}\n onChange={(value: StrokeWeight) =>\n onChangeProps({weight: value})\n }\n />\n\n {/* Zero length error message */}\n {isInvalid && (\n <BodyText className={styles.errorText}>\n {lengthErrorMessage}\n </BodyText>\n )}\n\n {/* Coordinates */}\n <PerseusEditorAccordion\n expanded={true} // Initial state is expanded\n containerStyle={coordsAccordionContainerStyle}\n panelStyle={coordsAccordionPanelStyle}\n header={\n <View className={styles.row}>\n <BodyText\n size=\"medium\"\n weight=\"bold\"\n tag=\"span\"\n >{`Tail (${tail[0]}, ${tail[1]})`}</BodyText>\n </View>\n }\n >\n <CoordinatePairInput\n coord={tail}\n error={isInvalid}\n disabled={editingDisabled}\n onChange={(newProps) => {\n handleChangePoint(newProps, 0);\n }}\n />\n </PerseusEditorAccordion>\n\n <PerseusEditorAccordion\n expanded={true} // Initial state is expanded\n containerStyle={coordsAccordionContainerStyle}\n panelStyle={coordsAccordionPanelStyle}\n header={\n <View className={styles.row}>\n <BodyText\n size=\"medium\"\n weight=\"bold\"\n tag=\"span\"\n >{`Tip (${tip[0]}, ${tip[1]})`}</BodyText>\n </View>\n }\n >\n <CoordinatePairInput\n coord={tip}\n error={isInvalid}\n disabled={editingDisabled}\n onChange={(newProps) => {\n handleChangePoint(newProps, 1);\n }}\n />\n </PerseusEditorAccordion>\n\n {/* Aria label */}\n <View className={`${styles.horizontalRule} ${styles.sectionTop}`} />\n <LockedFigureAria\n ariaLabel={ariaLabel}\n getPrepopulatedAriaLabel={getPrepopulatedAriaLabel}\n editingDisabled={editingDisabled}\n onChangeProps={(newProps) => {\n onChangeProps(newProps);\n }}\n />\n\n {/* Visible labels */}\n <View\n className={`${styles.horizontalRule} ${styles.dividerTight}`}\n />\n <BodyText className={styles.sectionTop}>Visible labels</BodyText>\n {labels.map((label, labelIndex) => (\n <LockedLabelSettings\n {...label}\n key={labelIndex}\n editingDisabled={editingDisabled}\n expanded={true}\n onChangeProps={(newLabel) => {\n handleLabelChange(newLabel, labelIndex);\n }}\n onRemove={() => {\n handleLabelRemove(labelIndex);\n }}\n containerStyle={labelContainerStyle}\n />\n ))}\n <Button\n kind=\"tertiary\"\n startIcon={plusCircle}\n disabled={editingDisabled}\n onClick={() => {\n // Additional vertical offset for each label so\n // they don't overlap.\n const offsetPerLabel: vec.Vector2 = [0, -1];\n const labelLocation = vec.add(\n vec.scale(offsetPerLabel, labels.length),\n midpoint(tail, tip),\n );\n\n const newLabel = {\n ...getDefaultFigureForType(\"label\"),\n coord: labelLocation,\n // Default to the same color as the vector\n color: lineColor,\n } satisfies LockedLabelType;\n\n onChangeProps({\n labels: [...labels, newLabel],\n });\n }}\n className={styles.addButton}\n >\n Add visible label\n </Button>\n\n {/* Actions */}\n <LockedFigureSettingsActions\n figureType={props.type}\n editingDisabled={editingDisabled}\n onMove={onMove}\n onRemove={onRemove}\n />\n </PerseusEditorAccordion>\n );\n};\n\nexport default LockedVectorSettings;\n","/**\n * LockedFigureSettings takes in a figure and renders the\n * respective settings for that figure type.\n *\n * Used in the interactive graph editor's locked figures section.\n */\n\nimport {UnreachableCaseError} from \"@khanacademy/wonder-stuff-core\";\nimport * as React from \"react\";\n\nimport LockedEllipseSettings from \"./locked-ellipse-settings\";\nimport LockedFunctionSettings from \"./locked-function-settings\";\nimport LockedLabelSettings from \"./locked-label-settings\";\nimport LockedLineSettings from \"./locked-line-settings\";\nimport LockedPointSettings from \"./locked-point-settings\";\nimport LockedPolygonSettings from \"./locked-polygon-settings\";\nimport LockedVectorSettings from \"./locked-vector-settings\";\n\nimport type {Props as LockedEllipseProps} from \"./locked-ellipse-settings\";\nimport type {LockedFigureSettingsMovementType} from \"./locked-figure-settings-actions\";\nimport type {Props as LockedFunctionProps} from \"./locked-function-settings\";\nimport type {Props as LockedLabelProps} from \"./locked-label-settings\";\nimport type {Props as LockedLineProps} from \"./locked-line-settings\";\nimport type {Props as LockedPointProps} from \"./locked-point-settings\";\nimport type {Props as LockedPolygonProps} from \"./locked-polygon-settings\";\nimport type {Props as LockedVectorProps} from \"./locked-vector-settings\";\n\nexport interface LockedFigureSettingsCommonProps {\n /**\n * Whether editing is disabled for this figure's controls.\n */\n editingDisabled?: boolean;\n\n // Movement props\n /**\n * Called when a movement button (top, up, down, bottom) is pressed.\n */\n onMove: (movement: LockedFigureSettingsMovementType) => void;\n /**\n * Called when the delete button is pressed.\n */\n onRemove: () => void;\n\n // Accordion props\n /**\n * Whether this accordion is expanded.\n */\n expanded?: boolean;\n /**\n * Called when the accordion is expanded or collapsed.\n */\n onToggle?: (expanded: boolean) => void;\n}\n\n// Union this type with other locked figure types when they are added.\ntype Props = LockedFigureSettingsCommonProps &\n (\n | LockedPointProps\n | LockedLineProps\n | LockedEllipseProps\n | LockedVectorProps\n | LockedPolygonProps\n | LockedFunctionProps\n | LockedLabelProps\n );\n\nconst LockedFigureSettings = (props: Props) => {\n switch (props.type) {\n case \"point\":\n return <LockedPointSettings {...props} />;\n case \"line\":\n return <LockedLineSettings {...props} />;\n case \"vector\":\n return <LockedVectorSettings {...props} />;\n case \"ellipse\":\n return <LockedEllipseSettings {...props} />;\n case \"polygon\":\n return <LockedPolygonSettings {...props} />;\n case \"function\":\n return <LockedFunctionSettings {...props} />;\n case \"label\":\n return <LockedLabelSettings {...props} />;\n default:\n throw new UnreachableCaseError(props);\n }\n};\n\nexport default LockedFigureSettings;\n","/**\n * LockedFiguresSection is a section of the InteractiveGraphEditor that allows\n * the user to add and remove locked figures from the graph. It includes\n * the dropdown for adding figures as well as the settings for each figure.\n */\nimport {getDefaultFigureForType} from \"@khanacademy/perseus-core\";\nimport Button from \"@khanacademy/wonder-blocks-button\";\nimport {View} from \"@khanacademy/wonder-blocks-core\";\nimport * as React from \"react\";\nimport {useId} from \"react\";\n\nimport Heading from \"../../../components/heading\";\n\nimport LockedFigureSelect from \"./locked-figure-select\";\nimport LockedFigureSettings from \"./locked-figure-settings\";\nimport styles from \"./locked-figures-section.module.css\";\n\nimport type {LockedFigureSettingsMovementType} from \"./locked-figure-settings-actions\";\nimport type {Props as InteractiveGraphEditorProps} from \"../interactive-graph-editor\";\nimport type {APIOptionsWithDefaults} from \"@khanacademy/perseus\";\nimport type {LockedFigure, LockedFigureType} from \"@khanacademy/perseus-core\";\n\ninterface Props {\n figures?: Array<LockedFigure>;\n onChange: (props: Partial<InteractiveGraphEditorProps>) => void;\n apiOptions: APIOptionsWithDefaults;\n}\n\nconst LockedFiguresSection = (props: Props) => {\n // Keep track of all figures' accordions' expanded states for the\n // expand/collapse all button. When editing is disabled, default to\n // all open so content can still be reviewed. Otherwise, default to closed.\n const editingDisabled = props.apiOptions?.editingDisabled ?? false;\n const collapsedStateArray = Array((props.figures ?? []).length).fill(\n editingDisabled,\n );\n const [expandedStates, setExpandedStates] =\n React.useState(collapsedStateArray);\n const [isExpanded, setIsExpanded] = React.useState(true);\n\n const uniqueId = useId();\n const {figures, onChange} = props;\n\n function addLockedFigure(newFigure: LockedFigureType) {\n const lockedFigures = figures || [];\n const newProps = {\n lockedFigures: [\n ...lockedFigures,\n getDefaultFigureForType(newFigure),\n ],\n };\n onChange(newProps);\n setExpandedStates([...expandedStates, true]);\n }\n\n function moveLockedFigure(\n index: number,\n movement: LockedFigureSettingsMovementType,\n ) {\n // Don't allow moving the first figure up or the last figure down.\n if (index === 0 && (movement === \"back\" || movement === \"backward\")) {\n return;\n }\n if (\n figures &&\n index === figures.length - 1 &&\n (movement === \"front\" || movement === \"forward\")\n ) {\n return;\n }\n\n const lockedFigures = figures || [];\n const newFigures = [...lockedFigures];\n const newExpandedStates = [...expandedStates];\n\n // First, remove the figure from its current position\n // in the figures array and the expanded states array.\n const [removedFigure] = newFigures.splice(index, 1);\n newExpandedStates.splice(index, 1);\n\n // Then, add it back in the new position. Add \"true\" to the\n // expanded states array for the new position (it must already\n // be open since the button to move it is being pressed from there).\n switch (movement) {\n case \"back\":\n newFigures.unshift(removedFigure);\n newExpandedStates.unshift(true);\n break;\n case \"backward\":\n newFigures.splice(index - 1, 0, removedFigure);\n newExpandedStates.splice(index - 1, 0, true);\n break;\n case \"forward\":\n newFigures.splice(index + 1, 0, removedFigure);\n newExpandedStates.splice(index + 1, 0, true);\n break;\n case \"front\":\n newFigures.push(removedFigure);\n newExpandedStates.push(true);\n break;\n }\n onChange({lockedFigures: newFigures});\n setExpandedStates(newExpandedStates);\n }\n\n function removeLockedFigure(index: number) {\n // eslint-disable-next-line no-alert\n if (window.confirm(\"Are you sure you want to delete this figure?\")) {\n const lockedFigures = figures || [];\n onChange({\n lockedFigures: [\n ...lockedFigures.slice(0, index),\n ...lockedFigures.slice(index + 1),\n ],\n });\n\n // Update expanded states\n const newExpandedStates = [...expandedStates];\n newExpandedStates.splice(index, 1);\n setExpandedStates(newExpandedStates);\n }\n }\n\n function changeProps(\n index: number,\n // Omit the type from the figure props so it doesn't think\n // we're trying to pass in the props for the wrong type.\n figureProps: Omit<Partial<LockedFigure>, \"type\">,\n ) {\n const lockedFigures = figures || [];\n const newFigures = {\n lockedFigures: [\n ...lockedFigures.slice(0, index),\n {\n ...lockedFigures[index],\n ...figureProps,\n },\n ...lockedFigures.slice(index + 1),\n ],\n };\n onChange(newFigures);\n }\n\n function toggleExpanded(newValue: boolean) {\n setExpandedStates(Array(figures?.length).fill(newValue));\n }\n\n const allCollapsed = expandedStates.every((value) => !value);\n const buttonLabel = allCollapsed ? \"Expand all\" : \"Collapse all\";\n const showExpandButton = !!figures?.length;\n\n return (\n <>\n <Heading\n title=\"Locked Figures\"\n isOpen={isExpanded}\n onToggle={() => setIsExpanded(!isExpanded)}\n isCollapsible={true}\n />\n {isExpanded && (\n <View>\n {figures?.map((figure, index) => {\n return (\n <LockedFigureSettings\n key={`${uniqueId}-locked-${figure}-${index}`}\n expanded={expandedStates[index]}\n onToggle={(newValue) => {\n const newExpanded = [...expandedStates];\n newExpanded[index] = newValue;\n setExpandedStates(newExpanded);\n }}\n {...figure}\n editingDisabled={editingDisabled}\n onChangeProps={(newProps) =>\n changeProps(index, newProps)\n }\n onMove={(movement) =>\n moveLockedFigure(index, movement)\n }\n onRemove={() => removeLockedFigure(index)}\n />\n );\n })}\n <View className={styles.buttonContainer}>\n <LockedFigureSelect\n id={`${uniqueId}-select`}\n editingDisabled={editingDisabled}\n onChange={addLockedFigure}\n />\n {showExpandButton && (\n <Button\n kind=\"secondary\"\n disabled={editingDisabled}\n onClick={() => toggleExpanded(allCollapsed)}\n className={styles.button}\n >\n {buttonLabel}\n </Button>\n )}\n </View>\n </View>\n )}\n </>\n );\n};\n\nexport default LockedFiguresSection;\n","import {View} from \"@khanacademy/wonder-blocks-core\";\nimport {TextField} from \"@khanacademy/wonder-blocks-form\";\nimport {BodyText} from \"@khanacademy/wonder-blocks-typography\";\nimport * as React from \"react\";\n\nimport CoordinatePairInput from \"../../../components/coordinate-pair-input\";\n\nimport styles from \"./start-coords-shared.module.css\";\n\nimport type {Coord} from \"@khanacademy/perseus\";\n\ninterface CoordInputProps {\n label: string;\n coord: Coord;\n onChange: (coord: Coord) => void;\n // Custom label for each interactive point that will help with the screen reader.\n pointLabel?: string;\n onPointLabelChange?: (newLabel: string) => void;\n}\n\nconst CoordInput = (props: CoordInputProps) => {\n const {label, coord, onChange, pointLabel, onPointLabelChange} = props;\n\n if (onPointLabelChange) {\n const placeholder = label.match(/\\d+$/)?.[0] ?? label;\n\n return (\n <View className={styles.tile}>\n <BodyText weight=\"bold\" tag=\"span\">{`${label}:`}</BodyText>\n <CoordinatePairInput\n coord={coord}\n labels={[\"x\", \"y\"]}\n onChange={onChange}\n labelClassName={styles.labelPrefix}\n />\n <BodyText tag=\"label\" className={styles.labelField}>\n <span className={styles.labelPrefix}>Label</span>\n <View className={styles.pointLabelField}>\n <TextField\n aria-label={`${label} name`}\n value={pointLabel ?? \"\"}\n placeholder={placeholder}\n onChange={onPointLabelChange}\n />\n </View>\n </BodyText>\n </View>\n );\n }\n\n return (\n <View className={styles.tileRow}>\n <BodyText weight=\"bold\" tag=\"span\">{`${label}:`}</BodyText>\n <CoordinatePairInput\n coord={coord}\n labels={[\"x\", \"y\"]}\n onChange={onChange}\n />\n </View>\n );\n};\n\nexport default CoordInput;\n","import * as React from \"react\";\n\nimport CoordInput from \"./coord-input\";\n\nimport type {Coord} from \"@khanacademy/perseus\";\n\ntype AbsoluteValueCoords = [Coord, Coord];\n\ninterface StartCoordsAbsoluteValueProps {\n startCoords: AbsoluteValueCoords;\n onChange: (startCoords: AbsoluteValueCoords) => void;\n pointLabels: ReadonlyArray<string>;\n onChangePointLabels: (pointLabels: ReadonlyArray<string>) => void;\n}\n\nconst StartCoordsAbsoluteValue = (props: StartCoordsAbsoluteValueProps) => {\n const {startCoords, onChange, pointLabels, onChangePointLabels} = props;\n const [vertex, arm] = startCoords;\n const updatePointLabel = (index: number, newLabel: string) => {\n const next: [string, string] = [\n index === 0 ? newLabel : pointLabels[0] ?? \"\",\n index === 1 ? newLabel : pointLabels[1] ?? \"\",\n ];\n onChangePointLabels(next);\n };\n\n return (\n <>\n <CoordInput\n label=\"Vertex\"\n coord={vertex}\n onChange={(value) => onChange([value, arm])}\n pointLabel={pointLabels[0]}\n onPointLabelChange={(newLabel) => updatePointLabel(0, newLabel)}\n />\n <CoordInput\n label=\"Arm\"\n coord={arm}\n onChange={(value) => onChange([vertex, value])}\n pointLabel={pointLabels[1]}\n onPointLabelChange={(newLabel) => updatePointLabel(1, newLabel)}\n />\n </>\n );\n};\n\nexport default StartCoordsAbsoluteValue;\n","import {angles, vector as kvector} from \"@khanacademy/kmath\";\nimport {\n getAbsoluteValueCoords,\n getAngleCoords,\n getCircleCoords,\n getExponentialCoords,\n getLogarithmCoords,\n getLineCoords,\n getLinearSystemCoords,\n getPointCoords,\n getPolygonCoords,\n getQuadraticCoords,\n getSegmentCoords,\n getSinusoidCoords,\n getTangentCoords,\n getVectorCoords,\n} from \"@khanacademy/perseus\";\nimport {UnreachableCaseError} from \"@khanacademy/wonder-stuff-core\";\n\nimport type {StartCoords} from \"./types\";\nimport type {Range, PerseusGraphType, Coord} from \"@khanacademy/perseus-core\";\n\nconst {getClockwiseAngle} = angles;\n\nexport function getStartCoords(graph: PerseusGraphType): StartCoords {\n if (\"startCoords\" in graph) {\n return graph.startCoords;\n }\n return undefined;\n}\n\nexport function getDefaultGraphStartCoords(\n graph: PerseusGraphType,\n range: [x: Range, y: Range],\n step: [x: number, y: number],\n): StartCoords {\n switch (graph.type) {\n case \"absolute-value\":\n return getAbsoluteValueCoords(\n {...graph, startCoords: undefined},\n range,\n step,\n );\n case \"linear\":\n case \"ray\":\n return getLineCoords(\n {...graph, startCoords: undefined},\n range,\n step,\n );\n case \"vector\":\n return getVectorCoords(\n {...graph, startCoords: undefined},\n range,\n step,\n );\n case \"segment\":\n return getSegmentCoords(\n {...graph, startCoords: undefined},\n range,\n step,\n );\n case \"linear-system\":\n return getLinearSystemCoords(\n {...graph, startCoords: undefined},\n range,\n step,\n );\n case \"circle\":\n const startCoords = getCircleCoords({\n ...graph,\n startCoords: undefined,\n });\n const radius = kvector.length(\n kvector.subtract(startCoords.radiusPoint, startCoords.center),\n );\n return {center: startCoords.center, radius};\n case \"sinusoid\":\n return getSinusoidCoords(\n {...graph, startCoords: undefined},\n range,\n step,\n );\n case \"exponential\": {\n const {coords, asymptote} = getExponentialCoords(\n {...graph, startCoords: undefined},\n range,\n step,\n );\n return {coords, asymptote};\n }\n case \"tangent\":\n return getTangentCoords(\n {...graph, startCoords: undefined},\n range,\n step,\n );\n case \"quadratic\":\n return getQuadraticCoords(\n {...graph, startCoords: undefined},\n range,\n step,\n );\n case \"point\":\n return getPointCoords(\n {...graph, startCoords: undefined},\n range,\n step,\n );\n case \"polygon\":\n return getPolygonCoords(\n {...graph, startCoords: undefined},\n range,\n step,\n );\n case \"angle\":\n return getAngleCoords({\n graph: {...graph, startCoords: undefined},\n range,\n step,\n });\n case \"logarithm\": {\n const {coords, asymptote} = getLogarithmCoords(\n {...graph, startCoords: undefined},\n range,\n step,\n );\n return {coords, asymptote};\n }\n default:\n return undefined;\n }\n}\n\n// TODO(LEMS-3956): Both getSinusoidEquation and getTangentEquation have two\n// formatting quirks: (1) hardcoded \"x - \" and \") + \" produce ugly strings\n// like \"x - -0.785\" and \"+ -1.000\" when phase/offset are negative, and\n// (2) no division-by-zero guard when both points share the same x-coordinate.\n// These should be cleaned up together for consistency.\nexport const getSinusoidEquation = (startCoords: [Coord, Coord]) => {\n // Get coefficients\n // It's assumed that p1 is the root and p2 is the first peak\n const p1 = startCoords[0];\n const p2 = startCoords[1];\n\n // Resulting coefficients are canonical for this sine curve\n const amplitude = p2[1] - p1[1];\n const angularFrequency = Math.PI / (2 * (p2[0] - p1[0]));\n const phase = p1[0] * angularFrequency;\n const verticalOffset = p1[1];\n\n return (\n \"y = \" +\n amplitude.toFixed(3) +\n \"sin(\" +\n angularFrequency.toFixed(3) +\n \"x - \" +\n phase.toFixed(3) +\n \") + \" +\n verticalOffset.toFixed(3)\n );\n};\n\nexport const getTangentEquation = (startCoords: [Coord, Coord]) => {\n // Get coefficients\n // It's assumed that p1 is the inflection point and p2 is a quarter-period away\n const p1 = startCoords[0];\n const p2 = startCoords[1];\n\n // Resulting coefficients are canonical for this tangent curve\n const amplitude = p2[1] - p1[1];\n const angularFrequency = Math.PI / (4 * (p2[0] - p1[0]));\n const phase = p1[0] * angularFrequency;\n const verticalOffset = p1[1];\n\n return (\n \"y = \" +\n amplitude.toFixed(3) +\n \"tan(\" +\n angularFrequency.toFixed(3) +\n \"x - \" +\n phase.toFixed(3) +\n \") + \" +\n verticalOffset.toFixed(3)\n );\n};\n\nexport const getQuadraticEquation = (startCoords: [Coord, Coord, Coord]) => {\n const p1 = startCoords[0];\n const p2 = startCoords[1];\n const p3 = startCoords[2];\n\n const denom = (p1[0] - p2[0]) * (p1[0] - p3[0]) * (p2[0] - p3[0]);\n if (denom === 0) {\n // Many of the callers assume that the return value is always defined.\n return \"Division by zero error\";\n }\n const a =\n (p3[0] * (p2[1] - p1[1]) +\n p2[0] * (p1[1] - p3[1]) +\n p1[0] * (p3[1] - p2[1])) /\n denom;\n const b =\n (p3[0] * p3[0] * (p1[1] - p2[1]) +\n p2[0] * p2[0] * (p3[1] - p1[1]) +\n p1[0] * p1[0] * (p2[1] - p3[1])) /\n denom;\n const c =\n (p2[0] * p3[0] * (p2[0] - p3[0]) * p1[1] +\n p3[0] * p1[0] * (p3[0] - p1[0]) * p2[1] +\n p1[0] * p2[0] * (p1[0] - p2[0]) * p3[1]) /\n denom;\n\n return (\n \"y = \" + a.toFixed(3) + \"x^2 + \" + b.toFixed(3) + \"x + \" + c.toFixed(3)\n );\n};\n\nexport const getLogarithmEquation = (\n coords: [Coord, Coord],\n asymptote: number,\n) => {\n const p1 = coords[0];\n const p2 = coords[1];\n\n // Guard: same y, point on asymptote, or points on opposite sides\n if (p1[1] === p2[1]) {\n return \"undefined (points share the same y)\";\n }\n if (p1[0] === asymptote || p2[0] === asymptote) {\n return \"undefined (point on asymptote)\";\n }\n\n const ratio = (p1[0] - asymptote) / (p2[0] - asymptote);\n if (ratio <= 0) {\n return \"undefined (points on opposite sides of asymptote)\";\n }\n\n // Inverse exponential approach (mirrors getLogarithmCoefficients in kmath)\n const bExp = Math.log(ratio) / (p1[1] - p2[1]);\n const aExp = (p1[0] - asymptote) / Math.exp(bExp * p1[1]);\n\n if (!isFinite(bExp) || !isFinite(aExp) || aExp === 0 || bExp === 0) {\n return \"undefined (invalid coefficients)\";\n }\n\n const a = 1 / bExp;\n const b = 1 / aExp;\n const c = -asymptote / aExp;\n\n return (\n \"y = \" +\n a.toFixed(3) +\n \"ln(\" +\n b.toFixed(3) +\n \"x + \" +\n c.toFixed(3) +\n \")\"\n );\n};\n\nexport const getAngleEquation = (\n startCoords: [Coord, Coord, Coord],\n allowReflexAngles: boolean = false,\n) => {\n const vertex = startCoords[1];\n\n // Get the angle in degrees and round it to the nearest whole number\n const roundedAngle = getClockwiseAngle(\n startCoords,\n allowReflexAngles,\n ).toFixed(0);\n return `${roundedAngle}\\u00B0 angle at (${vertex[0]}, ${vertex[1]})`;\n};\n\nexport const shouldShowStartCoordsUI = (\n graph: PerseusGraphType,\n isStatic?: boolean,\n) => {\n // We don't show the start coords UI for static graphs, since\n // the coords shown for this are determined by the coords on the\n // \"correct\" graph. The start coords would not be used here.\n if (isStatic) {\n return false;\n }\n\n switch (graph.type) {\n case \"point\":\n return graph.numPoints !== \"unlimited\";\n case \"polygon\":\n return (\n graph.numSides !== \"unlimited\" &&\n graph.snapTo !== \"angles\" &&\n graph.snapTo !== \"sides\"\n );\n case \"none\":\n return false;\n case \"angle\":\n case \"circle\":\n case \"exponential\":\n case \"linear\":\n case \"linear-system\":\n case \"tangent\":\n case \"quadratic\":\n case \"ray\":\n case \"segment\":\n case \"sinusoid\":\n case \"absolute-value\":\n case \"logarithm\":\n case \"vector\":\n return true;\n default:\n throw new UnreachableCaseError(graph);\n }\n};\n","import {View} from \"@khanacademy/wonder-blocks-core\";\nimport {semanticColor, font, spacing} from \"@khanacademy/wonder-blocks-tokens\";\nimport {BodyMonospace, BodyText} from \"@khanacademy/wonder-blocks-typography\";\nimport {StyleSheet} from \"aphrodite\";\nimport * as React from \"react\";\n\nimport CoordInput from \"./coord-input\";\nimport {getAngleEquation} from \"./util\";\n\nimport type {Coord} from \"@khanacademy/perseus\";\n\ntype AngleCoords = [Coord, Coord, Coord];\n\ninterface StartCoordsAngleProps {\n startCoords: AngleCoords;\n allowReflexAngles?: boolean;\n onChange: (startCoords: AngleCoords) => void;\n pointLabels: ReadonlyArray<string>;\n onChangePointLabels: (pointLabels: ReadonlyArray<string>) => void;\n}\n\nconst StartCoordsAngle = (props: StartCoordsAngleProps) => {\n const {\n startCoords,\n allowReflexAngles,\n onChange,\n pointLabels,\n onChangePointLabels,\n } = props;\n const updatePointLabel = (index: number, newLabel: string) => {\n const next: [string, string, string] = [\n index === 0 ? newLabel : pointLabels[0] ?? \"\",\n index === 1 ? newLabel : pointLabels[1] ?? \"\",\n index === 2 ? newLabel : pointLabels[2] ?? \"\",\n ];\n onChangePointLabels(next);\n };\n\n return (\n <>\n {/* Current equation */}\n <View style={styles.equationSection}>\n <BodyText>Starting equation:</BodyText>\n <BodyMonospace style={styles.equationBody}>\n {getAngleEquation(startCoords, allowReflexAngles)}\n </BodyMonospace>\n </View>\n\n {/* Points UI — indexed to match `coords`:\n [0]=ending side, [1]=vertex, [2]=starting side. */}\n <CoordInput\n label=\"Point 1\"\n coord={startCoords[0]}\n onChange={(value) =>\n onChange([value, startCoords[1], startCoords[2]])\n }\n pointLabel={pointLabels[0]}\n onPointLabelChange={(newLabel) => updatePointLabel(0, newLabel)}\n />\n <CoordInput\n label=\"Vertex\"\n coord={startCoords[1]}\n onChange={(value) =>\n onChange([startCoords[0], value, startCoords[2]])\n }\n pointLabel={pointLabels[1]}\n onPointLabelChange={(newLabel) => updatePointLabel(1, newLabel)}\n />\n <CoordInput\n label=\"Point 2\"\n coord={startCoords[2]}\n onChange={(value) =>\n onChange([startCoords[0], startCoords[1], value])\n }\n pointLabel={pointLabels[2]}\n onPointLabelChange={(newLabel) => updatePointLabel(2, newLabel)}\n />\n </>\n );\n};\n\nconst styles = StyleSheet.create({\n equationSection: {\n marginBlockStart: spacing.small_12,\n },\n equationBody: {\n backgroundColor: semanticColor.core.background.neutral.subtle,\n border: `1px solid ${semanticColor.core.border.neutral.subtle}`,\n marginBlockStart: spacing.xSmall_8,\n paddingInlineStart: spacing.xSmall_8,\n paddingInlineEnd: spacing.xSmall_8,\n fontSize: font.body.size.xsmall,\n },\n});\n\nexport default StartCoordsAngle;\n","import {View} from \"@khanacademy/wonder-blocks-core\";\nimport {TextField} from \"@khanacademy/wonder-blocks-form\";\nimport {Strut} from \"@khanacademy/wonder-blocks-layout\";\nimport {semanticColor, spacing} from \"@khanacademy/wonder-blocks-tokens\";\nimport {BodyText} from \"@khanacademy/wonder-blocks-typography\";\nimport {StyleSheet} from \"aphrodite\";\nimport * as React from \"react\";\n\nimport CoordinatePairInput from \"../../../components/coordinate-pair-input\";\nimport ScrolllessNumberTextField from \"../../../components/scrollless-number-text-field\";\n\nimport type {Coord} from \"@khanacademy/perseus\";\n\ntype CircleCoords = {\n center: Coord;\n radius: number;\n};\n\ninterface StartCoordsCircleProps {\n startCoords: CircleCoords;\n onChange: (startCoords: CircleCoords) => void;\n pointLabels: ReadonlyArray<string>;\n onChangePointLabels: (pointLabels: ReadonlyArray<string>) => void;\n}\n\nconst StartCoordsCircle = (props: StartCoordsCircleProps) => {\n const {startCoords, onChange, pointLabels, onChangePointLabels} = props;\n\n function handleRadiusChange(newValue: number) {\n // Assume the user is in the middle of typing. Don't update\n // the props until they've finished typing a valid number.\n if (newValue === 0) {\n return;\n }\n\n // Update the props (update the graph).\n onChange({\n center: startCoords.center,\n radius: newValue,\n });\n }\n\n return (\n <View style={styles.tile}>\n {/* Center */}\n <View style={styles.row}>\n <BodyText size=\"medium\" weight=\"bold\" tag=\"span\">\n Center:\n </BodyText>\n <Strut size={spacing.small_12} />\n <CoordinatePairInput\n coord={startCoords.center}\n labels={[\"x\", \"y\"]}\n onChange={(coord) =>\n onChange({center: coord, radius: startCoords.radius})\n }\n />\n </View>\n <Strut size={spacing.small_12} />\n\n {/* Radius */}\n <BodyText\n size=\"medium\"\n weight=\"bold\"\n tag=\"label\"\n style={styles.row}\n >\n Radius:\n <Strut size={spacing.small_12} />\n <ScrolllessNumberTextField\n value={startCoords.radius}\n onChange={handleRadiusChange}\n style={styles.textField}\n />\n </BodyText>\n\n {/* Radius point label.\n The schema's `pointLabels?: string[]` is interpreted for\n circle as `[radiusPointLabel]`: only the radius point (a\n `MovablePoint`) is labelable. The center is a\n `MovableCircle` whose announcement describes the whole\n shape (\"Circle. The center point is at X comma Y.\") and is not\n overridden. */}\n <Strut size={spacing.small_12} />\n <BodyText size=\"medium\" weight=\"bold\" tag=\"span\" style={styles.row}>\n Radius point label:\n <Strut size={spacing.small_12} />\n <View style={styles.textField}>\n <TextField\n aria-label=\"Radius point name\"\n value={pointLabels[0] ?? \"\"}\n placeholder=\"Radius point\"\n onChange={(newLabel) => onChangePointLabels([newLabel])}\n />\n </View>\n </BodyText>\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n tile: {\n backgroundColor: semanticColor.core.background.instructive.subtle,\n marginBlockStart: spacing.xSmall_8,\n padding: spacing.small_12,\n borderRadius: spacing.xSmall_8,\n },\n row: {\n display: \"flex\",\n flexDirection: \"row\",\n alignItems: \"center\",\n },\n textField: {\n width: spacing.xxxLarge_64,\n },\n});\n\nexport default StartCoordsCircle;\n","import {View} from \"@khanacademy/wonder-blocks-core\";\nimport {BodyText} from \"@khanacademy/wonder-blocks-typography\";\nimport * as React from \"react\";\n\nimport ScrolllessNumberTextField from \"../../../components/scrollless-number-text-field\";\n\nimport styles from \"./start-coords-shared.module.css\";\n\ninterface AsymptoteInputProps {\n axis: \"x\" | \"y\";\n value: number;\n onChange: (value: number) => void;\n}\n\nconst AsymptoteInput = (props: AsymptoteInputProps) => {\n const {axis, value, onChange} = props;\n\n function handleChange(newValue: number) {\n onChange(newValue);\n }\n\n return (\n <BodyText weight=\"bold\" tag=\"label\" className={styles.tileRow}>\n {`Asymptote ${axis} =`}\n <View className={styles[\"text-field-wrapper\"]}>\n <ScrolllessNumberTextField\n value={value}\n onChange={handleChange}\n />\n </View>\n </BodyText>\n );\n};\n\nexport default AsymptoteInput;\n","import * as React from \"react\";\n\nimport AsymptoteInput from \"./asymptote-input\";\nimport CoordInput from \"./coord-input\";\n\nimport type {Coord} from \"@khanacademy/perseus\";\n\ntype ExponentialStartCoords = {\n coords: [Coord, Coord];\n asymptote: number;\n};\n\ninterface StartCoordsExponentialProps {\n startCoords: ExponentialStartCoords;\n onChange: (startCoords: ExponentialStartCoords) => void;\n pointLabels: ReadonlyArray<string>;\n onChangePointLabels: (pointLabels: ReadonlyArray<string>) => void;\n}\n\nconst StartCoordsExponential = (props: StartCoordsExponentialProps) => {\n const {startCoords, onChange, pointLabels, onChangePointLabels} = props;\n const {coords, asymptote} = startCoords;\n const updatePointLabel = (index: number, newLabel: string) => {\n const next: [string, string] = [\n index === 0 ? newLabel : pointLabels[0] ?? \"\",\n index === 1 ? newLabel : pointLabels[1] ?? \"\",\n ];\n onChangePointLabels(next);\n };\n\n return (\n <>\n <CoordInput\n label=\"Point 1\"\n coord={coords[0]}\n onChange={(value) =>\n onChange({coords: [value, coords[1]], asymptote})\n }\n pointLabel={pointLabels[0]}\n onPointLabelChange={(newLabel) => updatePointLabel(0, newLabel)}\n />\n <CoordInput\n label=\"Point 2\"\n coord={coords[1]}\n onChange={(value) =>\n onChange({coords: [coords[0], value], asymptote})\n }\n pointLabel={pointLabels[1]}\n onPointLabelChange={(newLabel) => updatePointLabel(1, newLabel)}\n />\n <AsymptoteInput\n axis=\"y\"\n value={asymptote}\n onChange={(newY) =>\n // Update the asymptote in startCoords to refresh the preview.\n onChange({coords: [coords[0], coords[1]], asymptote: newY})\n }\n />\n </>\n );\n};\n\nexport default StartCoordsExponential;\n","import * as React from \"react\";\n\nimport CoordInput from \"./coord-input\";\n\nimport type {CollinearTuple} from \"@khanacademy/perseus-core\";\n\ninterface StartCoordsLineProps {\n startCoords: CollinearTuple;\n onChange: (startCoords: CollinearTuple) => void;\n pointLabels: ReadonlyArray<string>;\n onChangePointLabels: (pointLabels: ReadonlyArray<string>) => void;\n}\n\nconst StartCoordsLine = (props: StartCoordsLineProps) => {\n const {startCoords, onChange, pointLabels, onChangePointLabels} = props;\n const updatePointLabel = (index: number, newLabel: string) => {\n const next: [string, string] = [\n index === 0 ? newLabel : pointLabels[0] ?? \"\",\n index === 1 ? newLabel : pointLabels[1] ?? \"\",\n ];\n onChangePointLabels(next);\n };\n\n return (\n <>\n <CoordInput\n label=\"Point 1\"\n coord={startCoords[0]}\n onChange={(value) => onChange([value, startCoords[1]])}\n pointLabel={pointLabels[0]}\n onPointLabelChange={(newLabel) => updatePointLabel(0, newLabel)}\n />\n <CoordInput\n label=\"Point 2\"\n coord={startCoords[1]}\n onChange={(value) => onChange([startCoords[0], value])}\n pointLabel={pointLabels[1]}\n onPointLabelChange={(newLabel) => updatePointLabel(1, newLabel)}\n />\n </>\n );\n};\n\nexport default StartCoordsLine;\n","import {View} from \"@khanacademy/wonder-blocks-core\";\nimport {BodyMonospace, BodyText} from \"@khanacademy/wonder-blocks-typography\";\nimport * as React from \"react\";\n\nimport AsymptoteInput from \"./asymptote-input\";\nimport CoordInput from \"./coord-input\";\nimport styles from \"./start-coords-shared.module.css\";\nimport {getLogarithmEquation} from \"./util\";\n\nimport type {Coord} from \"@khanacademy/perseus\";\n\ntype LogarithmStartCoords = {\n coords: [Coord, Coord];\n asymptote: number;\n};\n\ninterface StartCoordsLogarithmProps {\n startCoords: LogarithmStartCoords;\n onChange: (startCoords: LogarithmStartCoords) => void;\n pointLabels: ReadonlyArray<string>;\n onChangePointLabels: (pointLabels: ReadonlyArray<string>) => void;\n}\n\nconst StartCoordsLogarithm = (props: StartCoordsLogarithmProps) => {\n const {startCoords, onChange, pointLabels, onChangePointLabels} = props;\n const {coords, asymptote} = startCoords;\n const updatePointLabel = (index: number, newLabel: string) => {\n const next: [string, string] = [\n index === 0 ? newLabel : pointLabels[0] ?? \"\",\n index === 1 ? newLabel : pointLabels[1] ?? \"\",\n ];\n onChangePointLabels(next);\n };\n\n return (\n <>\n {/* Current equation */}\n <View className={styles.equationSection}>\n <BodyText>Starting equation:</BodyText>\n <BodyMonospace className={styles.equationBody}>\n {getLogarithmEquation(coords, asymptote)}\n </BodyMonospace>\n </View>\n\n {/* Points UI */}\n <CoordInput\n label=\"Point 1\"\n coord={coords[0]}\n onChange={(value) =>\n onChange({coords: [value, coords[1]], asymptote})\n }\n pointLabel={pointLabels[0]}\n onPointLabelChange={(newLabel) => updatePointLabel(0, newLabel)}\n />\n <CoordInput\n label=\"Point 2\"\n coord={coords[1]}\n onChange={(value) =>\n onChange({coords: [coords[0], value], asymptote})\n }\n pointLabel={pointLabels[1]}\n onPointLabelChange={(newLabel) => updatePointLabel(1, newLabel)}\n />\n <AsymptoteInput\n axis=\"x\"\n value={asymptote}\n onChange={(newX) =>\n // Update the asymptote in startCoords to refresh the preview.\n onChange({\n coords: [coords[0], coords[1]],\n asymptote: newX,\n })\n }\n />\n </>\n );\n};\n\nexport default StartCoordsLogarithm;\n","import {BodyText} from \"@khanacademy/wonder-blocks-typography\";\nimport * as React from \"react\";\n\nimport PerseusEditorAccordion from \"../../../components/perseus-editor-accordion\";\n\nimport CoordInput from \"./coord-input\";\n\nimport type {CollinearTuple} from \"@khanacademy/perseus-core\";\n\ninterface StartCoordsMultilineProps {\n type: \"linear-system\" | \"segment\";\n startCoords: CollinearTuple[];\n onChange: (startCoords: CollinearTuple[]) => void;\n pointLabels: ReadonlyArray<string>;\n onChangePointLabels: (pointLabels: ReadonlyArray<string>) => void;\n}\n\nconst StartCoordsMultiline = (props: StartCoordsMultilineProps) => {\n const {startCoords, type, onChange, pointLabels, onChangePointLabels} =\n props;\n\n const graphName = type === \"segment\" ? \"Segment\" : \"Line\";\n const updatePointLabel = (flatIndex: number, newLabel: string) => {\n const totalPoints = startCoords.length * 2;\n const next = Array.from({length: totalPoints}, (_, i) =>\n i === flatIndex ? newLabel : pointLabels[i] ?? \"\",\n );\n onChangePointLabels(next);\n };\n\n return (\n <>\n {startCoords.map((coordPair, i) => (\n <PerseusEditorAccordion\n key={`segment-${i}-start-coords`}\n header={\n <BodyText\n size=\"medium\"\n weight=\"bold\"\n tag=\"span\"\n >{`${graphName} ${i + 1}`}</BodyText>\n }\n expanded={true}\n >\n <CoordInput\n label=\"Point 1\"\n coord={coordPair[0]}\n onChange={(value) => {\n const newCoords = [...startCoords];\n newCoords[i] = [value, coordPair[1]];\n onChange(newCoords);\n }}\n pointLabel={pointLabels[i * 2]}\n onPointLabelChange={(newLabel) =>\n updatePointLabel(i * 2, newLabel)\n }\n />\n <CoordInput\n label=\"Point 2\"\n coord={coordPair[1]}\n onChange={(value) => {\n const newCoords = [...startCoords];\n newCoords[i] = [coordPair[0], value];\n onChange(newCoords);\n }}\n pointLabel={pointLabels[i * 2 + 1]}\n onPointLabelChange={(newLabel) =>\n updatePointLabel(i * 2 + 1, newLabel)\n }\n />\n </PerseusEditorAccordion>\n ))}\n </>\n );\n};\n\nexport default StartCoordsMultiline;\n","import * as React from \"react\";\n\nimport CoordInput from \"./coord-input\";\n\nimport type {Coord} from \"@khanacademy/perseus\";\n\ninterface StartCoordsPointProps {\n startCoords: Coord[];\n onChange: (startCoords: Coord[]) => void;\n pointLabels?: ReadonlyArray<string>;\n onChangePointLabels?: (pointLabels: ReadonlyArray<string>) => void;\n}\n\nconst StartCoordsPoint = (props: StartCoordsPointProps) => {\n const {startCoords, onChange, pointLabels, onChangePointLabels} = props;\n\n return (\n <>\n {startCoords.map((coord, index) => (\n <CoordInput\n key={index}\n label={`Point ${index + 1}`}\n coord={coord}\n onChange={(newCoord) => {\n const newStartCoords = [...startCoords];\n newStartCoords[index] = newCoord;\n onChange(newStartCoords);\n }}\n pointLabel={pointLabels?.[index]}\n onPointLabelChange={\n onChangePointLabels &&\n ((newLabel) => {\n const next = Array.from(\n {length: startCoords.length},\n (_, i) =>\n i === index\n ? newLabel\n : pointLabels?.[i] ?? \"\",\n );\n onChangePointLabels(next);\n })\n }\n />\n ))}\n </>\n );\n};\n\nexport default StartCoordsPoint;\n","import {View} from \"@khanacademy/wonder-blocks-core\";\nimport {semanticColor, font, spacing} from \"@khanacademy/wonder-blocks-tokens\";\nimport {BodyMonospace, BodyText} from \"@khanacademy/wonder-blocks-typography\";\nimport {StyleSheet} from \"aphrodite\";\nimport * as React from \"react\";\n\nimport CoordInput from \"./coord-input\";\nimport {getQuadraticEquation} from \"./util\";\n\nimport type {Coord} from \"@khanacademy/perseus\";\n\ninterface StartCoordsQuadraticProps {\n startCoords: [Coord, Coord, Coord];\n onChange: (startCoords: [Coord, Coord, Coord]) => void;\n pointLabels: ReadonlyArray<string>;\n onChangePointLabels: (pointLabels: ReadonlyArray<string>) => void;\n}\n\nconst StartCoordsQuadratic = (props: StartCoordsQuadraticProps) => {\n const {startCoords, onChange, pointLabels, onChangePointLabels} = props;\n const updatePointLabel = (index: number, newLabel: string) => {\n const next: [string, string, string] = [\n index === 0 ? newLabel : pointLabels[0] ?? \"\",\n index === 1 ? newLabel : pointLabels[1] ?? \"\",\n index === 2 ? newLabel : pointLabels[2] ?? \"\",\n ];\n onChangePointLabels(next);\n };\n\n return (\n <>\n {/* Current equation */}\n <View style={styles.equationSection}>\n <BodyText>Starting equation:</BodyText>\n <BodyMonospace style={styles.equationBody}>\n {getQuadraticEquation(startCoords)}\n </BodyMonospace>\n </View>\n\n {/* Points UI */}\n <CoordInput\n label=\"Point 1\"\n coord={startCoords[0]}\n onChange={(value) =>\n onChange([value, startCoords[1], startCoords[2]])\n }\n pointLabel={pointLabels[0]}\n onPointLabelChange={(newLabel) => updatePointLabel(0, newLabel)}\n />\n <CoordInput\n label=\"Point 2\"\n coord={startCoords[1]}\n onChange={(value) =>\n onChange([startCoords[0], value, startCoords[2]])\n }\n pointLabel={pointLabels[1]}\n onPointLabelChange={(newLabel) => updatePointLabel(1, newLabel)}\n />\n <CoordInput\n label=\"Point 3\"\n coord={startCoords[2]}\n onChange={(value) =>\n onChange([startCoords[0], startCoords[1], value])\n }\n pointLabel={pointLabels[2]}\n onPointLabelChange={(newLabel) => updatePointLabel(2, newLabel)}\n />\n </>\n );\n};\n\nconst styles = StyleSheet.create({\n equationSection: {\n marginBlockStart: spacing.small_12,\n },\n equationBody: {\n backgroundColor: semanticColor.core.background.neutral.subtle,\n border: `1px solid ${semanticColor.core.border.neutral.subtle}`,\n marginBlockStart: spacing.xSmall_8,\n paddingInlineStart: spacing.xSmall_8,\n paddingInlineEnd: spacing.xSmall_8,\n fontSize: font.body.size.xsmall,\n },\n});\n\nexport default StartCoordsQuadratic;\n","import {View} from \"@khanacademy/wonder-blocks-core\";\nimport {semanticColor, font, spacing} from \"@khanacademy/wonder-blocks-tokens\";\nimport {BodyMonospace, BodyText} from \"@khanacademy/wonder-blocks-typography\";\nimport {StyleSheet} from \"aphrodite\";\nimport * as React from \"react\";\n\nimport CoordInput from \"./coord-input\";\nimport {getSinusoidEquation} from \"./util\";\n\nimport type {Coord} from \"@khanacademy/perseus\";\n\ntype SinusoidCoords = [Coord, Coord];\n\ninterface StartCoordsSinusoidProps {\n startCoords: SinusoidCoords;\n onChange: (startCoords: SinusoidCoords) => void;\n pointLabels: ReadonlyArray<string>;\n onChangePointLabels: (pointLabels: ReadonlyArray<string>) => void;\n}\n\nconst StartCoordsSinusoid = (props: StartCoordsSinusoidProps) => {\n const {startCoords, onChange, pointLabels, onChangePointLabels} = props;\n const updatePointLabel = (index: number, newLabel: string) => {\n const next: [string, string] = [\n index === 0 ? newLabel : pointLabels[0] ?? \"\",\n index === 1 ? newLabel : pointLabels[1] ?? \"\",\n ];\n onChangePointLabels(next);\n };\n\n return (\n <>\n {/* Current equation */}\n <View style={styles.equationSection}>\n <BodyText>Starting equation:</BodyText>\n <BodyMonospace style={styles.equationBody}>\n {getSinusoidEquation(startCoords)}\n </BodyMonospace>\n </View>\n\n {/* Points UI */}\n <CoordInput\n label=\"Point 1\"\n coord={startCoords[0]}\n onChange={(value) => onChange([value, startCoords[1]])}\n pointLabel={pointLabels[0]}\n onPointLabelChange={(newLabel) => updatePointLabel(0, newLabel)}\n />\n <CoordInput\n label=\"Point 2\"\n coord={startCoords[1]}\n onChange={(value) => onChange([startCoords[0], value])}\n pointLabel={pointLabels[1]}\n onPointLabelChange={(newLabel) => updatePointLabel(1, newLabel)}\n />\n </>\n );\n};\n\nconst styles = StyleSheet.create({\n equationSection: {\n marginBlockStart: spacing.small_12,\n },\n equationBody: {\n backgroundColor: semanticColor.core.background.neutral.subtle,\n border: `1px solid ${semanticColor.core.border.neutral.subtle}`,\n marginBlockStart: spacing.xSmall_8,\n paddingInlineStart: spacing.xSmall_8,\n paddingInlineEnd: spacing.xSmall_8,\n fontSize: font.body.size.xsmall,\n },\n});\n\nexport default StartCoordsSinusoid;\n","import {View} from \"@khanacademy/wonder-blocks-core\";\nimport {BodyMonospace, BodyText} from \"@khanacademy/wonder-blocks-typography\";\nimport * as React from \"react\";\n\nimport CoordInput from \"./coord-input\";\nimport styles from \"./start-coords-shared.module.css\";\nimport {getTangentEquation} from \"./util\";\n\nimport type {Coord} from \"@khanacademy/perseus\";\n\ntype TangentCoords = [Coord, Coord];\n\ninterface StartCoordsTangentProps {\n startCoords: TangentCoords;\n onChange: (startCoords: TangentCoords) => void;\n pointLabels: ReadonlyArray<string>;\n onChangePointLabels: (pointLabels: ReadonlyArray<string>) => void;\n}\n\nconst StartCoordsTangent = (props: StartCoordsTangentProps) => {\n const {startCoords, onChange, pointLabels, onChangePointLabels} = props;\n const updatePointLabel = (index: number, newLabel: string) => {\n const next: [string, string] = [\n index === 0 ? newLabel : pointLabels[0] ?? \"\",\n index === 1 ? newLabel : pointLabels[1] ?? \"\",\n ];\n onChangePointLabels(next);\n };\n\n return (\n <>\n {/* Current equation */}\n <View className={styles.equationSection}>\n <BodyText>Starting equation:</BodyText>\n <BodyMonospace className={styles.equationBody}>\n {getTangentEquation(startCoords)}\n </BodyMonospace>\n </View>\n\n {/* Points UI */}\n <CoordInput\n label=\"Point 1\"\n coord={startCoords[0]}\n onChange={(value) => onChange([value, startCoords[1]])}\n pointLabel={pointLabels[0]}\n onPointLabelChange={(newLabel) => updatePointLabel(0, newLabel)}\n />\n <CoordInput\n label=\"Point 2\"\n coord={startCoords[1]}\n onChange={(value) => onChange([startCoords[0], value])}\n pointLabel={pointLabels[1]}\n onPointLabelChange={(newLabel) => updatePointLabel(1, newLabel)}\n />\n </>\n );\n};\n\nexport default StartCoordsTangent;\n","import * as React from \"react\";\n\nimport CoordInput from \"./coord-input\";\n\nimport type {CollinearTuple} from \"@khanacademy/perseus-core\";\n\ninterface StartCoordsVectorProps {\n startCoords: CollinearTuple;\n onChange: (startCoords: CollinearTuple) => void;\n}\n\nconst StartCoordsVector = (props: StartCoordsVectorProps) => {\n const {startCoords, onChange} = props;\n\n return (\n <>\n <CoordInput\n label=\"Point 1\"\n coord={startCoords[0]}\n onChange={(value) => onChange([value, startCoords[1]])}\n />\n <CoordInput\n label=\"Point 2\"\n coord={startCoords[1]}\n onChange={(value) => onChange([startCoords[0], value])}\n />\n </>\n );\n};\n\nexport default StartCoordsVector;\n","import {vector as kvector} from \"@khanacademy/kmath\";\nimport {\n getAbsoluteValueCoords,\n getAngleCoords,\n getCircleCoords,\n getLineCoords,\n getLinearSystemCoords,\n getPointCoords,\n getPolygonCoords,\n getQuadraticCoords,\n getSegmentCoords,\n getSinusoidCoords,\n getTangentCoords,\n getVectorCoords,\n} from \"@khanacademy/perseus\";\nimport Button from \"@khanacademy/wonder-blocks-button\";\nimport {View} from \"@khanacademy/wonder-blocks-core\";\nimport arrowCounterClockwise from \"@phosphor-icons/core/bold/arrow-counter-clockwise-bold.svg\";\nimport * as React from \"react\";\n\nimport Heading from \"../../../components/heading\";\n\nimport StartCoordsAbsoluteValue from \"./start-coords-absolute-value\";\nimport StartCoordsAngle from \"./start-coords-angle\";\nimport StartCoordsCircle from \"./start-coords-circle\";\nimport StartCoordsExponential from \"./start-coords-exponential\";\nimport StartCoordsLine from \"./start-coords-line\";\nimport StartCoordsLogarithm from \"./start-coords-logarithm\";\nimport StartCoordsMultiline from \"./start-coords-multiline\";\nimport StartCoordsPoint from \"./start-coords-point\";\nimport StartCoordsQuadratic from \"./start-coords-quadratic\";\nimport styles from \"./start-coords-shared.module.css\";\nimport StartCoordsSinusoid from \"./start-coords-sinusoid\";\nimport StartCoordsTangent from \"./start-coords-tangent\";\nimport StartCoordsVector from \"./start-coords-vector\";\nimport {getDefaultGraphStartCoords} from \"./util\";\n\nimport type {StartCoords} from \"./types\";\nimport type {Coord} from \"@khanacademy/perseus\";\nimport type {PerseusGraphType, Range} from \"@khanacademy/perseus-core\";\n\ninterface StartCoordsSettingsProps {\n range: [x: Range, y: Range];\n step: [x: number, y: number];\n allowReflexAngles?: boolean;\n editingDisabled?: boolean;\n onChange: (startCoords: StartCoords) => void;\n onChangePointLabels: (pointLabels: ReadonlyArray<string>) => void;\n}\n\ntype Props = PerseusGraphType & StartCoordsSettingsProps;\n\nconst StartCoordsSettingsInner = (props: Props) => {\n const {\n type,\n range,\n step,\n allowReflexAngles,\n onChange,\n onChangePointLabels,\n } = props;\n\n switch (type) {\n case \"absolute-value\":\n const absoluteValueCoords = getAbsoluteValueCoords(\n props,\n range,\n step,\n );\n return (\n <StartCoordsAbsoluteValue\n startCoords={absoluteValueCoords}\n onChange={onChange}\n pointLabels={props.pointLabels ?? []}\n onChangePointLabels={onChangePointLabels}\n />\n );\n // Graphs with startCoords of type CollinearTuple\n case \"linear\":\n case \"ray\":\n // Gets the startCoords from props if they're passed in,\n // otherwise calculates the default startCoords.\n const linearCoords = getLineCoords(props, range, step);\n return (\n <StartCoordsLine\n startCoords={linearCoords}\n onChange={onChange}\n pointLabels={props.pointLabels ?? []}\n onChangePointLabels={onChangePointLabels}\n />\n );\n // Graphs with startCoords of type CollinearTuple[]\n case \"linear-system\":\n case \"segment\":\n const multiLineCoords =\n // Gets the startCoords from props if they're passed in,\n // otherwise calculates the default startCoords.\n type === \"segment\"\n ? getSegmentCoords(props, range, step)\n : getLinearSystemCoords(props, range, step);\n return (\n <StartCoordsMultiline\n type={type}\n startCoords={multiLineCoords}\n onChange={onChange}\n pointLabels={props.pointLabels ?? []}\n onChangePointLabels={onChangePointLabels}\n />\n );\n case \"circle\":\n const circleCoords = getCircleCoords(props);\n const radius = kvector.length(\n kvector.subtract(circleCoords.radiusPoint, circleCoords.center),\n );\n return (\n <StartCoordsCircle\n startCoords={{center: circleCoords.center, radius}}\n onChange={onChange}\n pointLabels={props.pointLabels ?? []}\n onChangePointLabels={onChangePointLabels}\n />\n );\n case \"sinusoid\":\n const sinusoidCoords = getSinusoidCoords(props, range, step);\n return (\n <StartCoordsSinusoid\n startCoords={sinusoidCoords}\n onChange={onChange}\n pointLabels={props.pointLabels ?? []}\n onChangePointLabels={onChangePointLabels}\n />\n );\n case \"exponential\": {\n // startCoords is a combined {coords, asymptote} object, mirroring\n // how circle's startCoords packs {center, radius} together. This\n // lets the standard onChange → changeStartCoords path handle\n // everything with no special-casing needed.\n // eslint-disable-next-line no-restricted-syntax\n const defaultStartCoords = getDefaultGraphStartCoords(\n props,\n range,\n step,\n ) as {coords: [Coord, Coord]; asymptote: number};\n const currentStartCoords = props.startCoords ?? defaultStartCoords;\n return (\n <StartCoordsExponential\n startCoords={currentStartCoords}\n onChange={onChange}\n pointLabels={props.pointLabels ?? []}\n onChangePointLabels={onChangePointLabels}\n />\n );\n }\n case \"logarithm\": {\n // eslint-disable-next-line no-restricted-syntax\n const defaultLogarithmCoords = getDefaultGraphStartCoords(\n props,\n range,\n step,\n ) as {coords: [Coord, Coord]; asymptote: number};\n const currentLogarithmCoords =\n props.startCoords ?? defaultLogarithmCoords;\n return (\n <StartCoordsLogarithm\n startCoords={currentLogarithmCoords}\n onChange={onChange}\n pointLabels={props.pointLabels ?? []}\n onChangePointLabels={onChangePointLabels}\n />\n );\n }\n case \"vector\": {\n const vectorCoords = getVectorCoords(props, range, step);\n return (\n <StartCoordsVector\n startCoords={vectorCoords}\n onChange={onChange}\n />\n );\n }\n case \"tangent\":\n const tangentCoords = getTangentCoords(props, range, step);\n return (\n <StartCoordsTangent\n startCoords={tangentCoords}\n onChange={onChange}\n pointLabels={props.pointLabels ?? []}\n onChangePointLabels={onChangePointLabels}\n />\n );\n case \"quadratic\":\n const quadraticCoords = getQuadraticCoords(props, range, step);\n return (\n <StartCoordsQuadratic\n startCoords={quadraticCoords}\n onChange={onChange}\n pointLabels={props.pointLabels ?? []}\n onChangePointLabels={onChangePointLabels}\n />\n );\n // Graphs with startCoords of type ReadonlyArray<Coord>\n case \"point\":\n case \"polygon\":\n const pointCoords =\n type === \"point\"\n ? getPointCoords(props, range, step)\n : getPolygonCoords(props, range, step);\n return (\n <StartCoordsPoint\n startCoords={pointCoords}\n onChange={onChange}\n pointLabels={props.pointLabels}\n onChangePointLabels={onChangePointLabels}\n />\n );\n case \"angle\":\n const angleCoords = getAngleCoords({graph: props, range, step});\n return (\n <StartCoordsAngle\n startCoords={angleCoords}\n allowReflexAngles={allowReflexAngles}\n onChange={onChange}\n pointLabels={props.pointLabels ?? []}\n onChangePointLabels={onChangePointLabels}\n />\n );\n default:\n return null;\n }\n};\n\nconst StartCoordsSettings = (props: Props) => {\n const {range, step, editingDisabled, onChange} = props;\n const [isOpen, setIsOpen] = React.useState(true);\n\n return (\n <View>\n {/* Heading for the collapsible section */}\n <Heading\n isCollapsible={true}\n title=\"Start coordinates\"\n isOpen={isOpen}\n onToggle={() => setIsOpen(!isOpen)}\n />\n\n {/* Start coordinates main UI */}\n {isOpen && (\n <>\n {/* Start coordinates input */}\n <StartCoordsSettingsInner {...props} />\n\n {/* Button to reset to default */}\n <View className={styles.resetButton}>\n <Button\n startIcon={arrowCounterClockwise}\n kind=\"tertiary\"\n size=\"small\"\n disabled={editingDisabled}\n onClick={() => {\n onChange(\n getDefaultGraphStartCoords(\n props,\n range,\n step,\n ),\n );\n }}\n >\n Use default start coordinates\n </Button>\n </View>\n </>\n )}\n </View>\n );\n};\n\nexport default StartCoordsSettings;\n","import type {PerseusGraphType} from \"@khanacademy/perseus-core\";\n\nfunction toTrio(pointLabels: ReadonlyArray<string>): [string, string, string] {\n return [pointLabels[0] ?? \"\", pointLabels[1] ?? \"\", pointLabels[2] ?? \"\"];\n}\n\nfunction toPair(pointLabels: ReadonlyArray<string>): [string, string] {\n return [pointLabels[0] ?? \"\", pointLabels[1] ?? \"\"];\n}\n\nfunction toArray(pointLabels: ReadonlyArray<string>): string[] {\n return [...pointLabels];\n}\n\n// Reshapes editor input to match each graph type's `pointLabels` schema.\n// Mirrors onto `correct` only when types match (LEMS-3903 recovery: a\n// mid-edit type switch keeps the previous `correct` answer intact).\nexport function reshapePointLabelsForGraphType(\n pointLabels: ReadonlyArray<string>,\n graph: PerseusGraphType | undefined,\n correct: PerseusGraphType | undefined,\n): {graph: PerseusGraphType; correct: PerseusGraphType} | null {\n if (!graph?.type || !correct) {\n return null;\n }\n\n let nextGraph: PerseusGraphType;\n let nextCorrect: PerseusGraphType = correct;\n\n switch (graph.type) {\n case \"angle\":\n case \"quadratic\": {\n const reshaped = toTrio(pointLabels);\n nextGraph = {...graph, pointLabels: reshaped};\n if (correct.type === graph.type) {\n nextCorrect = {...correct, pointLabels: reshaped};\n }\n break;\n }\n case \"absolute-value\":\n case \"linear\":\n case \"ray\": {\n const reshaped = toPair(pointLabels);\n nextGraph = {...graph, pointLabels: reshaped};\n if (correct.type === graph.type) {\n nextCorrect = {...correct, pointLabels: reshaped};\n }\n break;\n }\n case \"circle\":\n case \"exponential\":\n case \"linear-system\":\n case \"logarithm\":\n case \"point\":\n case \"polygon\":\n case \"segment\":\n case \"sinusoid\":\n case \"tangent\": {\n const reshaped = toArray(pointLabels);\n nextGraph = {...graph, pointLabels: reshaped};\n if (correct.type === graph.type) {\n nextCorrect = {...correct, pointLabels: reshaped};\n }\n break;\n }\n case \"vector\":\n case \"none\":\n return null;\n }\n\n return {graph: nextGraph, correct: nextCorrect};\n}\n","import {vector as kvector} from \"@khanacademy/kmath\";\nimport {\n containerSizeClass,\n getInteractiveBoxFromSizeClass,\n InteractiveGraphWidget,\n interactiveSizes,\n Util,\n} from \"@khanacademy/perseus\";\nimport {\n type LockedFigure,\n type PerseusImageBackground,\n type PerseusInteractiveGraphWidgetOptions,\n type PerseusGraphType,\n type MarkingsType,\n type AxisLabelLocation,\n interactiveGraphLogic,\n type ShowAxisArrows,\n type ShowAxisTicks,\n} from \"@khanacademy/perseus-core\";\nimport {Id, View} from \"@khanacademy/wonder-blocks-core\";\nimport {UnreachableCaseError} from \"@khanacademy/wonder-stuff-core\";\nimport * as React from \"react\";\nimport invariant from \"tiny-invariant\";\nimport _ from \"underscore\";\n\nimport AngleAnswerOptions from \"./components/angle-answer-options\";\nimport GraphPointsCountSelector from \"./components/graph-points-count-selector\";\nimport GraphTypeSelector from \"./components/graph-type-selector\";\nimport {InteractiveGraphCorrectAnswer} from \"./components/interactive-graph-correct-answer\";\nimport InteractiveGraphDescription from \"./components/interactive-graph-description\";\nimport InteractiveGraphSettings from \"./components/interactive-graph-settings\";\nimport InteractiveGraphSRTree from \"./components/interactive-graph-sr-tree\";\nimport PolygonAnswerOptions from \"./components/polygon-answer-options\";\nimport SegmentCountSelector from \"./components/segment-count-selector\";\nimport ShowPointLabelsToggle from \"./components/show-point-labels-toggle\";\nimport VectorAnswerOptions from \"./components/vector-answer-options\";\nimport LabeledRow from \"./locked-figures/labeled-row\";\nimport LockedFiguresSection from \"./locked-figures/locked-figures-section\";\nimport StartCoordsSettings from \"./start-coords/start-coords-settings\";\nimport {getStartCoords, shouldShowStartCoordsUI} from \"./start-coords/util\";\nimport {reshapePointLabelsForGraphType} from \"./utils/reshape-point-labels\";\n\nimport type {APIOptionsWithDefaults} from \"@khanacademy/perseus\";\nimport type {PropsFor} from \"@khanacademy/wonder-blocks-core\";\n\nconst InteractiveGraph = InteractiveGraphWidget.widget;\n\ntype InteractiveGraphProps = PropsFor<typeof InteractiveGraph>;\n\ntype Range = [min: number, max: number];\n\nexport type Props = {\n apiOptions: APIOptionsWithDefaults;\n\n /**\n * The labels for the x and y axes.\n */\n labels: ReadonlyArray<string>;\n /**\n * Specifies the location of the labels on the graph. default: \"onAxis\".\n * - \"onAxis\": Labels are positioned on the axis at the right (x) and top (y) of the graph.\n * - \"alongEdge\": Labels are centered along the bottom (x) and left (y) edges of the graph.\n * The y label is rotated. Typically used when the range min is near 0 with longer labels.\n */\n labelLocation?: AxisLabelLocation;\n /**\n * The range of the graph in the x and y directions.\n */\n range: [x: Range, y: Range];\n /**\n * Whether the graph is bounded on the x and y axes.\n */\n showAxisArrows: ShowAxisArrows;\n /**\n * Whether to show tick marks and tick numbers per axis.\n */\n showAxisTicks: ShowAxisTicks;\n /**\n * How far apart the tick marks on the axes are in the x and y\n * directions.\n */\n step: [x: number, y: number];\n /**\n * How far apart the grid lines are in the x and y directions.\n */\n gridStep: [x: number, y: number];\n /**\n * How far apart the snap-to points are in the x and y directions.\n */\n snapStep: [x: number, y: number];\n /**\n * The size of the graph in pixels.\n */\n box: [x: number, y: number];\n\n /**\n * An error message to display in the graph area, or true if the\n * graph is valid.\n */\n valid: true | string;\n /**\n * The background image to display in the graph area and its properties.\n */\n backgroundImage: PerseusImageBackground;\n /**\n * The type of markings to display on the graph.\n * - graph: shows the axes and the grid lines\n * - grid: shows only the grid lines\n * - none: shows no markings\n */\n markings: MarkingsType;\n /**\n * Whether to show the protractor on the graph.\n */\n showProtractor: boolean;\n /**\n * Whether to show tooltips on the graph.\n * (Currently not used, but will be in the future.)\n */\n showTooltips: boolean;\n /**\n * The current correct answer for the graph. Updated by this component\n * when the graph is changed.\n *\n * Note that the \"Correct answer:\" textbox is not an interactive\n * element. Instead, it is a representation of the correct answer based\n * on the state of the interactive graph previewed at the bottom of the\n * editor page.\n */\n // TODO(LEMS-2344): make the type of `correct` more specific\n correct: PerseusGraphType;\n /**\n * The locked figures to display in the graph area.\n * Locked figures are graph elements (points, lines, line segmeents,\n * etc.) that are locked in place and not interactive.\n */\n lockedFigures?: Array<LockedFigure>;\n // Aria-label for the full graph area. Short title for the graph.\n fullGraphAriaLabel?: string;\n // Aria-description for the graph area. Longer description of the graph.\n // Note that the `aria-description` property is not supported well,\n // so this description will be hidden in a DOM element whose ID will\n // then be referenced by the graph's `aria-describedby` property.\n fullGraphAriaDescription?: string;\n\n /**\n * The graph to display in the graph area.\n */\n graph: InteractiveGraphProps[\"userInput\"];\n onChange: (props: Partial<Props>) => void;\n // Whether the graph has been set to static mode.\n // Graphs in static mode are not interactive, and their coords are\n // set to those of the \"correct\" graph in the editor.\n static?: boolean;\n /**\n * Whether this widget is graded.\n */\n graded?: boolean;\n};\n\n// JSDoc will be shown in Storybook widget editor description\n/**\n * An editor for the InteractiveGraph widget, which allows the user to\n * specify the graph's properties and the correct answer.\n *\n * Used in the exercise editor.\n */\nclass InteractiveGraphEditor extends React.Component<Props> {\n static bestPractices = {\n // TODO: replace with real best practices\n // see: https://github.com/Khan/perseus/pull/3466#discussion_r3157121327\n url: \"https://khanacademy.atlassian.net/wiki/spaces/LC/pages/3295281289/Interactive+Graph+Widget#Adding-a-new-Interactive-Graph-Widget\",\n label: \"Interactive Graph best practices\",\n };\n displayName = \"InteractiveGraphEditor\";\n className = \"perseus-widget-interactive-graph\";\n\n static defaultProps: PerseusInteractiveGraphWidgetOptions & {\n valid: true | string;\n } = {\n ...interactiveGraphLogic.defaultWidgetOptions,\n valid: true,\n lockedFigures: [],\n };\n\n changeStartCoords = (coords) => {\n if (!this.props.graph?.type) {\n return;\n }\n\n const graph = {\n ...this.props.graph,\n startCoords: coords,\n };\n this.props.onChange({graph: graph});\n };\n\n changePointLabels = (pointLabels: ReadonlyArray<string>) => {\n const next = reshapePointLabelsForGraphType(\n pointLabels,\n this.props.graph,\n this.props.correct,\n );\n if (next) {\n this.props.onChange(next);\n }\n };\n\n changeShowPointLabels = (showPointLabels: boolean) => {\n const {graph, correct} = this.props;\n if (graph === undefined || correct === undefined) {\n return;\n }\n const newGraph = withShowPointLabels(graph, showPointLabels);\n const newCorrect = withShowPointLabels(correct, showPointLabels);\n // Custom point labels are not applicable for `vector` or `none`\n // graph types — they have no movable points to label.\n if (newGraph === undefined || newCorrect === undefined) {\n return;\n }\n this.props.onChange({graph: newGraph, correct: newCorrect});\n };\n\n // serialize() is what makes copy/paste work. All the properties included\n // in the serialization json are included when, for example, a graph\n // is copied from the question editor and pasted into the hint editor\n // (double brackets in the markdown).\n serialize(): PerseusInteractiveGraphWidgetOptions {\n const json = _.pick(\n this.props,\n \"step\",\n \"backgroundImage\",\n \"markings\",\n \"labels\",\n \"labelLocation\",\n \"showProtractor\",\n \"showTooltips\",\n \"range\",\n \"showAxisArrows\",\n \"showAxisTicks\",\n \"gridStep\",\n \"snapStep\",\n \"lockedFigures\",\n \"fullGraphAriaLabel\",\n \"fullGraphAriaDescription\",\n );\n\n const graph = this.refs.graph;\n // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n if (graph) {\n // @ts-expect-error TS2339 Property 'getUserInput' does not exist on type 'ReactInstance'. Property 'getUserInput' does not exist on type 'Component<any, {}, any>'.\n // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n const correct = graph && graph.getUserInput();\n _.extend(json, {\n graph: {\n type: correct.type,\n startCoords: getStartCoords(this.props.graph),\n ...(\"pointLabels\" in this.props.graph &&\n this.props.graph.pointLabels\n ? {pointLabels: this.props.graph.pointLabels}\n : {}),\n ...(\"showPointLabels\" in this.props.graph &&\n this.props.graph.showPointLabels\n ? {\n showPointLabels: this.props.graph.showPointLabels,\n }\n : {}),\n },\n correct: correct,\n });\n\n _.each(\n [\n \"allowReflexAngles\",\n \"angleOffsetDeg\",\n \"numPoints\",\n \"numSides\",\n \"numSegments\",\n \"showAngles\",\n \"showSides\",\n \"snapTo\",\n \"snapDegrees\",\n ],\n function (key) {\n if (_.has(correct, key)) {\n // @ts-expect-error - TS2339 - Property 'graph' does not exist on type 'Pick<any, \"step\" | \"range\" | \"backgroundImage\" | \"snapStep\" | \"labels\" | \"showTooltips\" | \"markings\" | \"gridStep\" | \"showProtractor\">'.\n json.graph[key] = correct[key];\n }\n },\n );\n } else {\n // When the graph is undefined (such as when the settings are invalid).\n // Fall back to the last-known graph/correct from props.\n // This preserves the graph rendering in our preview editor and avoids\n // cascading issues as a result of undefined props being passed to\n // the interactive graph widget.\n _.extend(json, {\n graph: this.props.graph,\n correct: this.props.correct,\n });\n }\n // @ts-expect-error TS2739 Type 'Pick<Readonly<Props> & Readonly<{ children?: ReactNode; }>, \"step\" | \"gridStep\" | \"snapStep\" | \"backgroundImage\" | \"markings\" | \"labels\" | ... 5 more ... | \"range\">' is missing the following properties from type 'PerseusInteractiveGraphWidgetOptions': graph, correct\n return json;\n }\n\n // TODO(LEMS-3643): Remove `getSaveWarnings` once the frontend uses\n // the new linter rules for save warnings.\n getSaveWarnings = () => {\n const issues: Array<any | string> = [];\n\n // A locked line on the graph cannot have length 0.\n for (const figure of this.props.lockedFigures ?? []) {\n if (\n figure.type === \"line\" &&\n kvector.equal(figure.points[0].coord, figure.points[1].coord)\n ) {\n issues.push(\"The line cannot have length 0.\");\n }\n }\n\n // Do not save a unlimited polygon that is open (coords is null).\n if (\n this.props.graph?.type === \"polygon\" &&\n this.props.graph.numSides === \"unlimited\" &&\n this.props.graph.coords === null\n ) {\n issues.push(\"Polygon must be closed.\");\n }\n\n // Exponential: the start asymptote must not fall between or on the\n // curve's start points — that configuration produces an invalid\n // exponential (the coefficient formula requires all points to be\n // strictly on one side of the asymptote).\n if (\n this.props.graph?.type === \"exponential\" &&\n this.props.graph.startCoords != null\n ) {\n const {coords, asymptote} = this.props.graph.startCoords;\n const asymptoteY = asymptote;\n const minY = Math.min(coords[0][1], coords[1][1]);\n const maxY = Math.max(coords[0][1], coords[1][1]);\n if (asymptoteY >= minY && asymptoteY <= maxY) {\n issues.push(\n \"The exponential start asymptote must not fall between or on the curve's start points.\",\n );\n }\n }\n\n // Logarithm: the start asymptote must not fall between or on the\n // curve's start points — that configuration produces an invalid\n // logarithm (the coefficient formula requires all points to be\n // strictly on one side of the asymptote).\n if (\n this.props.graph?.type === \"logarithm\" &&\n this.props.graph.startCoords != null\n ) {\n const {coords, asymptote} = this.props.graph.startCoords;\n const asymptoteX = asymptote;\n const minX = Math.min(coords[0][0], coords[1][0]);\n const maxX = Math.max(coords[0][0], coords[1][0]);\n if (asymptoteX >= minX && asymptoteX <= maxX) {\n issues.push(\n \"The logarithm start asymptote must not fall between or on the curve's start points.\",\n );\n }\n }\n\n return issues;\n };\n\n render() {\n let graph;\n let equationString;\n\n const gridStep =\n // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n this.props.gridStep ||\n Util.getGridStep(\n this.props.range,\n this.props.step,\n interactiveSizes.defaultBoxSize,\n );\n const snapStep =\n // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n this.props.snapStep || Util.snapStepFromGridStep(gridStep);\n\n const sizeClass = containerSizeClass.SMALL;\n\n if (this.props.valid === true) {\n // Default `correct` to `graph` if the type is wrong. This works\n // around a bug in the AX editor.\n // See: https://khanacademy.atlassian.net/browse/LEMS-3903\n const correct =\n this.props.correct.type === this.props.graph?.type\n ? this.props.correct\n : this.props.graph;\n\n const graphProps = {\n ref: \"graph\",\n options: {\n box: this.props.box,\n range: this.props.range,\n showAxisArrows: this.props.showAxisArrows,\n showAxisTicks: this.props.showAxisTicks,\n labels: this.props.labels,\n labelLocation: this.props.labelLocation,\n step: this.props.step,\n gridStep: gridStep,\n snapStep: snapStep,\n backgroundImage: this.props.backgroundImage,\n markings: this.props.markings,\n showProtractor: this.props.showProtractor,\n showTooltips: this.props.showTooltips,\n lockedFigures: this.props.lockedFigures,\n fullGraphAriaLabel: this.props.fullGraphAriaLabel,\n fullGraphAriaDescription:\n this.props.fullGraphAriaDescription,\n },\n // Set the \"correct answer\" graph to static when editing is disabled\n static: this.props.apiOptions?.editingDisabled ?? false,\n trackInteraction: function () {},\n userInput:\n this.props.static === true &&\n correct != null &&\n \"showPointLabels\" in correct\n ? {...correct, showPointLabels: false}\n : correct,\n handleUserInput: (\n newGraph: InteractiveGraphProps[\"userInput\"],\n ) => {\n let correct = this.props.correct;\n // TODO(benchristel): can we improve the type of onChange\n // so this invariant isn't necessary?\n invariant(newGraph != null);\n // Preserve author's showPointLabels: the state echo\n // from StatefulMafsGraph would otherwise clobber it\n // with the render-time override's `false`.\n if (\n this.props.static === true &&\n newGraph != null &&\n \"showPointLabels\" in newGraph\n ) {\n newGraph = {\n ...newGraph,\n showPointLabels:\n \"showPointLabels\" in correct\n ? correct.showPointLabels\n : undefined,\n };\n }\n if (correct.type === newGraph.type) {\n correct = mergeGraphs(correct, newGraph);\n } else {\n // Clear options from previous graph\n correct = newGraph;\n }\n this.props.onChange({\n correct: correct,\n graph: this.props.graph,\n });\n },\n } as const;\n\n graph = (\n // There are a bunch of props that renderer.jsx passes to widgets via\n // getWidgetProps() and widget-container.jsx that the editors don't\n // bother passing.\n // @ts-expect-error - TS2769 - No overload matches this call.\n <InteractiveGraph\n {...graphProps}\n containerSizeClass={sizeClass}\n apiOptions={{\n ...this.props.apiOptions,\n isMobile: false,\n }}\n />\n );\n // TODO(kevinb): Update getEquationString to only accept the data it actually\n // needs to compute the equation string.\n // @ts-expect-error - TS2345 - Argument of type '{ readonly ref: \"graph\"; readonly box: any; readonly range: any; readonly labels: any; readonly step: any; readonly gridStep: any; readonly snapStep: any; readonly graph: any; readonly backgroundImage: any; ... 6 more ...; readonly onChange: (newProps: Pick<...> & ... 1 more ... & InexactPartial<...>) => void; }' is not assignable to parameter of type 'Props'.\n equationString = InteractiveGraph.getEquationString(graphProps);\n } else {\n graph = <div className=\"perseus-error\">{this.props.valid}</div>;\n }\n\n return (\n <Id>\n {(graphId) => (\n <View>\n <LabeledRow label=\"Answer type\" labelSize=\"medium\">\n <GraphTypeSelector\n disabled={\n this.props.apiOptions?.editingDisabled ??\n false\n }\n graphType={this.props.graph?.type ?? \"none\"}\n onChange={(type) => {\n this.props.onChange({\n graph: {type},\n correct: {type},\n });\n }}\n />\n </LabeledRow>\n <InteractiveGraphDescription\n ariaLabelValue={this.props.fullGraphAriaLabel ?? \"\"}\n ariaDescriptionValue={\n this.props.fullGraphAriaDescription ?? \"\"\n }\n editingDisabled={\n this.props.apiOptions?.editingDisabled ?? false\n }\n onChange={this.props.onChange}\n />\n <InteractiveGraphCorrectAnswer\n id={graphId}\n equationString={equationString}\n >\n {graph}\n </InteractiveGraphCorrectAnswer>\n\n {this.props.correct?.type === \"angle\" && (\n <AngleAnswerOptions\n correct={this.props.correct}\n graph={this.props.graph}\n onChange={this.props.onChange}\n />\n )}\n {this.props.correct?.type === \"point\" && (\n <GraphPointsCountSelector\n correct={this.props.correct}\n graph={this.props.graph}\n onChange={this.props.onChange}\n />\n )}\n {this.props.correct?.type === \"polygon\" && (\n <PolygonAnswerOptions\n correct={this.props.correct}\n graph={this.props.graph}\n onChange={this.props.onChange}\n />\n )}\n {this.props.correct?.type === \"vector\" && (\n <VectorAnswerOptions\n correct={this.props.correct}\n onChange={this.props.onChange}\n />\n )}\n {this.props.correct?.type === \"segment\" && (\n <SegmentCountSelector\n correct={this.props.correct}\n graph={this.props.graph}\n onChange={this.props.onChange}\n />\n )}\n\n {!this.props.static &&\n this.props.graph?.type &&\n this.props.graph.type !== \"vector\" &&\n this.props.graph.type !== \"none\" && (\n <ShowPointLabelsToggle\n showPointLabels={\n this.props.graph.showPointLabels ===\n true\n }\n pointLabels={this.props.graph.pointLabels}\n onChange={this.changeShowPointLabels}\n />\n )}\n\n {this.props.graph?.type &&\n shouldShowStartCoordsUI(\n this.props.graph,\n this.props.static,\n ) && (\n <StartCoordsSettings\n {...this.props.graph}\n range={this.props.range}\n step={this.props.step}\n editingDisabled={\n this.props.apiOptions\n ?.editingDisabled ?? false\n }\n onChange={this.changeStartCoords}\n onChangePointLabels={this.changePointLabels}\n />\n )}\n\n <InteractiveGraphSRTree\n graphId={graphId}\n correct={this.props.correct}\n fullGraphAriaLabel={this.props.fullGraphAriaLabel}\n fullGraphAriaDescription={\n this.props.fullGraphAriaDescription\n }\n lockedFigures={this.props.lockedFigures}\n editingDisabled={\n this.props.apiOptions?.editingDisabled ?? false\n }\n />\n <InteractiveGraphSettings\n box={getInteractiveBoxFromSizeClass(sizeClass)}\n range={this.props.range}\n showAxisArrows={this.props.showAxisArrows}\n showAxisTicks={this.props.showAxisTicks}\n labels={this.props.labels}\n labelLocation={this.props.labelLocation}\n step={this.props.step}\n gridStep={gridStep}\n snapStep={snapStep}\n valid={this.props.valid}\n backgroundImage={this.props.backgroundImage}\n markings={this.props.markings}\n showProtractor={this.props.showProtractor}\n showTooltips={this.props.showTooltips}\n onChange={this.props.onChange}\n apiOptions={this.props.apiOptions}\n />\n <LockedFiguresSection\n figures={this.props.lockedFigures}\n onChange={this.props.onChange}\n apiOptions={this.props.apiOptions}\n />\n </View>\n )}\n </Id>\n );\n }\n}\n\n// Merges two graphs that have the same `type`. Properties defined in `b`\n// overwrite properties of the same name in `a`. Throws an exception if the\n// types are different or not recognized.\nfunction mergeGraphs(\n a: PerseusGraphType,\n b: PerseusGraphType,\n): PerseusGraphType {\n if (a.type !== b.type) {\n throw new Error(\n `Cannot merge graphs with different types (${a.type} and ${b.type})`,\n );\n }\n switch (a.type) {\n case \"angle\":\n invariant(b.type === \"angle\");\n return {...a, ...b};\n case \"circle\":\n invariant(b.type === \"circle\");\n return {...a, ...b};\n case \"linear\":\n invariant(b.type === \"linear\");\n return {...a, ...b};\n case \"linear-system\":\n invariant(b.type === \"linear-system\");\n return {...a, ...b};\n case \"none\":\n invariant(b.type === \"none\");\n return {...a, ...b};\n case \"point\":\n invariant(b.type === \"point\");\n return {...a, ...b};\n case \"polygon\":\n invariant(b.type === \"polygon\");\n return {...a, ...b};\n case \"quadratic\":\n invariant(b.type === \"quadratic\");\n return {...a, ...b};\n case \"ray\":\n invariant(b.type === \"ray\");\n return {...a, ...b};\n case \"segment\":\n invariant(b.type === \"segment\");\n return {...a, ...b};\n case \"sinusoid\":\n invariant(b.type === \"sinusoid\");\n return {...a, ...b};\n case \"absolute-value\":\n invariant(b.type === \"absolute-value\");\n return {...a, ...b};\n case \"exponential\":\n invariant(b.type === \"exponential\");\n return {...a, ...b};\n case \"tangent\":\n invariant(b.type === \"tangent\");\n return {...a, ...b};\n case \"logarithm\":\n invariant(b.type === \"logarithm\");\n return {...a, ...b};\n case \"vector\":\n invariant(b.type === \"vector\");\n return {...a, ...b};\n default:\n throw new UnreachableCaseError(a);\n }\n}\n\n// Returns a copy of `graph` with `showPointLabels` set, narrowed per the\n// graph type so TypeScript can verify that every variant that supports\n// `showPointLabels` is handled. Returns `undefined` for `vector` and\n// `none`, which have no movable points to label. The exhaustive default\n// makes TypeScript fail this code if a new `PerseusGraphType` variant is\n// added — that's the point.\nfunction withShowPointLabels(\n graph: PerseusGraphType,\n showPointLabels: boolean,\n): PerseusGraphType | undefined {\n switch (graph.type) {\n case \"absolute-value\":\n case \"angle\":\n case \"circle\":\n case \"exponential\":\n case \"linear\":\n case \"linear-system\":\n case \"logarithm\":\n case \"point\":\n case \"polygon\":\n case \"quadratic\":\n case \"ray\":\n case \"segment\":\n case \"sinusoid\":\n case \"tangent\":\n return {...graph, showPointLabels};\n case \"none\":\n case \"vector\":\n return undefined;\n default:\n throw new UnreachableCaseError(graph);\n }\n}\n\nexport default InteractiveGraphEditor;\n","// TODO: use WB colors\nexport const gray68 = \"#888D93\";\nexport const gray41 = \"#626569\";\n","/* eslint-disable @khanacademy/ts-no-error-suppressions */\n/**\n * DEPRECATED: Use <TextField> from ./text-field.jsx instead.\n *\n * This component wraps an <input> in a <form> to make it easier to add an\n * `onSubmit` handler. In practice though this can complicate things because\n * each field is in it's own form which is not how forms should be structured.\n * If you need to handle `onSubmit`, please use <TextField> directly with your\n * own <form> that wraps all text fields in the form.\n **/\nimport {semanticColor} from \"@khanacademy/wonder-blocks-tokens\";\nimport {StyleSheet, css} from \"aphrodite\";\nimport * as React from \"react\";\n\nimport {gray41} from \"../styles/global-colors\";\n\nimport type {components} from \"@khanacademy/perseus\";\n\ntype Props = {\n // This id is used to tie the input field to the label that describes it.\n id?: string;\n testId?: string;\n type?: string;\n name?: string;\n readOnly?: boolean;\n value?: string | ReadonlyArray<string> | number | undefined;\n placeholder?: string;\n // https://reactjs.org/docs/uncontrolled-components.html#default-values\n defaultValue?: string | number | ReadonlyArray<string> | undefined;\n disabled?: boolean;\n autoFocus?: boolean;\n maxLength?: number;\n invalid?: \"true\" | \"false\";\n // styling\n // This prop is passed directly to <input>. This is incorrect since HTML\n // tags don't know what to do with an aphrodite which is typed as:\n // {\n // _len: number,\n // _name: string,\n // _definition: CSSProperties,\n // }\n // TODO(WB-1026): Update StyleType to reflect the aphrodite type\n // TODO(FEI-3282): Update uses of StyleType in khan/frontend to be correct\n style?: React.CSSProperties | undefined;\n className?: string;\n width?: number | string;\n grow?: boolean | number;\n shrink?: boolean | number;\n // HACK(mattmorgan) to enforce WB LabelMedium-like styles on this older\n // component.\n labelMediumInputText?: boolean;\n icon?: React.ReactElement<React.ComponentProps<typeof components.Icon>>;\n leftSideIcon?: boolean;\n backgroundColor?: string;\n focusBorderColor?: string;\n borderColor?: string;\n color?: string;\n // events\n onSubmit?: (arg1: React.ChangeEvent<HTMLInputElement>) => unknown;\n onBlur?: (arg1: React.ChangeEvent<HTMLInputElement>) => unknown;\n onFocus?: (arg1: React.ChangeEvent<HTMLInputElement>) => unknown;\n onChange?: (arg1: React.ChangeEvent<HTMLInputElement>) => unknown;\n onClick?: (arg1: React.MouseEvent<HTMLInputElement>) => unknown;\n onKeyPress?: (arg1: React.KeyboardEvent<HTMLInputElement>) => unknown;\n onKeyDown?: (arg1: React.KeyboardEvent<HTMLInputElement>) => unknown;\n // aria\n [\"aria-label\"]?: string;\n [\"aria-describedby\"]?: string | undefined;\n};\n\ntype State = {\n focused: boolean;\n};\n\ntype PropsWithForwardRef = Props & {\n forwardedRef: React.ForwardedRef<HTMLInputElement>;\n};\n\nclass FormWrappedTextField extends React.Component<PropsWithForwardRef, State> {\n state = {\n focused: false,\n };\n\n handleBlur = (e: React.ChangeEvent<HTMLInputElement>) => {\n const {onBlur} = this.props;\n onBlur?.(e);\n\n this.setState({focused: false});\n };\n\n handleFocus = (e: React.ChangeEvent<HTMLInputElement>) => {\n const {onFocus} = this.props;\n onFocus?.(e);\n\n this.setState({focused: true});\n };\n\n disableDefault = (e: Event) => {\n e.preventDefault();\n };\n\n render() {\n const {\n forwardedRef,\n width,\n grow,\n shrink,\n icon,\n backgroundColor,\n focusBorderColor,\n borderColor,\n color,\n onSubmit,\n leftSideIcon,\n id,\n testId,\n type,\n labelMediumInputText,\n ...allProps\n } = this.props;\n const {focused} = this.state;\n\n const extraStyles: React.CSSProperties = {};\n const spanStyle = [styles.input, styles.container];\n\n // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n if (width) {\n extraStyles.width = width;\n }\n\n // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n if (grow) {\n extraStyles.flexGrow = grow === true ? 1 : grow;\n }\n\n // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n if (shrink || shrink === 0) {\n extraStyles.flexShrink = shrink === true ? 0 : shrink;\n }\n\n if (backgroundColor) {\n extraStyles.backgroundColor = backgroundColor;\n } else {\n spanStyle.push(styles.defaultBackground);\n }\n\n // Add text color if specified.\n if (color) {\n extraStyles.color = color;\n }\n\n const borderColorStyle = focused\n ? focusBorderColor || semanticColor.focus.outer\n : borderColor || semanticColor.core.border.neutral.subtle;\n extraStyles.border = `1px solid ${borderColorStyle}`;\n\n const wrappedIcon = icon && (\n <span className={css(styles.icon)}>{icon}</span>\n );\n\n const inputBase = labelMediumInputText\n ? styles.labelMediumInputBase\n : styles.inputBase;\n\n return (\n <form\n className={css(...spanStyle)}\n style={extraStyles}\n // @ts-expect-error - TS2322 - Type '((arg1: ChangeEvent<HTMLInputElement>) => unknown) | ((e: Event) => void)' is not assignable to type 'FormEventHandler<HTMLFormElement> | undefined'.\n onSubmit={onSubmit || this.disableDefault}\n >\n {leftSideIcon && wrappedIcon}\n <input\n {...allProps}\n onFocus={this.handleFocus}\n onBlur={this.handleBlur}\n type={type}\n className={css(inputBase)}\n ref={forwardedRef}\n id={id}\n data-testid={testId}\n />\n {!leftSideIcon && wrappedIcon}\n </form>\n );\n }\n}\n\nconst styles = StyleSheet.create({\n inputBase: {\n background: \"inherit\",\n border: \"none\",\n\n fontFamily: \"inherit\",\n fontSize: 15,\n lineHeight: \"22px\",\n\n outline: \"none\",\n \"::placeholder\": {\n color: gray41,\n },\n width: \"100%\",\n color: \"inherit\",\n marginBlockEnd: 0,\n paddingInlineStart: 0,\n boxShadow: \"none\",\n padding: 0, // override Chrome's stylesheet\n margin: 0, // override Safari's stylesheet\n },\n // HACK(mattmorgan) to enforce WB LabelMedium-like styles on this older\n // component.\n labelMediumInputBase: {\n background: \"inherit\",\n border: \"none\",\n outline: \"none\",\n \"::placeholder\": {\n color: gray41,\n },\n width: \"100%\",\n fontWeight: \"normal\",\n fontFamily: \"Lato, san-serif\",\n fontSize: \"16px\",\n lineHeight: \"20px\",\n },\n input: {\n height: 40,\n borderRadius: 4,\n boxSizing: \"border-box\",\n paddingBlock: \"8px\",\n paddingInline: \"10px\",\n },\n container: {\n display: \"inline-flex\",\n alignItems: \"center\",\n marginBlockEnd: 0,\n },\n defaultBackground: {\n backgroundColor: semanticColor.core.background.base.default,\n },\n icon: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n },\n});\n\nexport default React.forwardRef<HTMLInputElement, Props>((props, ref) => (\n <FormWrappedTextField {...props} forwardedRef={ref} />\n));\n","/**\n * Controlled list of answer choices, handles adding and removing answers.\n */\n\nimport Clickable from \"@khanacademy/wonder-blocks-clickable\";\nimport {PhosphorIcon} from \"@khanacademy/wonder-blocks-icon\";\nimport {BodyText} from \"@khanacademy/wonder-blocks-typography\";\nimport minusCircleIcon from \"@phosphor-icons/core/regular/minus-circle.svg\";\nimport plusCircleIcon from \"@phosphor-icons/core/regular/plus-circle.svg\";\nimport * as React from \"react\";\n\nimport FormWrappedTextField from \"../../components/form-wrapped-text-field\";\n\nimport styles from \"./answer-choices.module.css\";\n\ninterface AddAnswerProps {\n // Callback to add new answer choice.\n onClick: () => void;\n editingDisabled: boolean;\n}\n\ninterface AnswerProps {\n // The answer string, can be plain text or a TeX expression.\n answer: string;\n // Callback for when an answer is changed.\n onChange: (answer: string) => void;\n // Callback to remove answer from list of choices.\n onRemove: () => void;\n editingDisabled: boolean;\n}\n\nexport interface AnswerChoicesProps {\n // The list of possible answers in a specific order.\n choices: ReadonlyArray<string>;\n // Callback for when answers change.\n onChange: (choices: ReadonlyArray<string>) => void;\n // Whether the editor is disabled. Can be set via API options\n // to make the editor read-only when needed.\n editingDisabled: boolean;\n}\n\n/**\n * A button to add a new answer.\n */\nconst AddAnswer = ({\n onClick,\n editingDisabled,\n}: AddAnswerProps): React.ReactElement => (\n <Clickable\n className={styles.addAnswer}\n disabled={editingDisabled}\n onClick={onClick}\n >\n {() => (\n <span className={styles.addAnswerContent}>\n <PhosphorIcon\n icon={plusCircleIcon}\n size=\"medium\"\n aria-hidden={true}\n />\n <BodyText tag=\"span\" size=\"medium\" weight=\"bold\">\n Add an answer choice\n </BodyText>\n </span>\n )}\n </Clickable>\n);\n\n/**\n * An answer item in the choices list.\n */\nconst Answer = ({\n answer,\n onChange,\n onRemove,\n editingDisabled,\n}: AnswerProps): React.ReactElement => (\n <li className={styles.answer}>\n <Clickable\n className={styles.removeButton}\n aria-label=\"Remove answer\"\n onClick={onRemove}\n disabled={editingDisabled}\n >\n {() => (\n <span className={styles.removeButtonContent}>\n <PhosphorIcon\n icon={minusCircleIcon}\n size=\"medium\"\n aria-hidden={true}\n />\n </span>\n )}\n </Clickable>\n\n <FormWrappedTextField\n grow={1}\n onChange={(e) => onChange(e.target.value)}\n value={answer}\n />\n </li>\n);\n\n/**\n * The list of choices, handles adding, removing and reording of answers.\n */\nconst AnswerChoices = ({\n choices,\n editingDisabled,\n onChange,\n}: AnswerChoicesProps): React.ReactElement => (\n <div>\n <BodyText weight=\"bold\" tag=\"span\">\n Answer Choices\n </BodyText>\n\n <ul className={styles.answers}>\n {choices.map((answer, index) => (\n <Answer\n answer={answer}\n key={index}\n editingDisabled={editingDisabled}\n // Update answer for choice.\n onChange={(answer) => {\n if (editingDisabled) {\n return;\n }\n onChange([\n ...choices.slice(0, index),\n answer,\n ...choices.slice(index + 1),\n ]);\n }}\n // Remove answer from choices.\n onRemove={() => {\n if (editingDisabled) {\n return;\n }\n onChange([\n ...choices.slice(0, index),\n ...choices.slice(index + 1),\n ]);\n }}\n />\n ))}\n </ul>\n\n <AddAnswer\n editingDisabled={editingDisabled}\n // Append a new empty answer to choices.\n onClick={() => {\n if (editingDisabled) {\n return;\n }\n onChange([...choices, \"\"]);\n }}\n />\n </div>\n);\n\nexport default AnswerChoices;\n","/**\n * Add hover behavior to another component.\n *\n * This component provides hover and focus status updates in a consistent way\n * across desktop and mobile.\n *\n * For advice on when to use this component instead of Button, see README.md.\n *\n * Many mobile browsers treat :hover as sticky which results in buttons looking\n * pressed even when the user has lifted their finger. This component ensures\n * that when user lifts their finger the hover state is removed.\n *\n * We also chnage how the focus state works. Browsers immediately set the\n * focus state as soon as you click on a button. This component only sets the\n * focus state when a user starts navigating between elements via keybaord.\n *\n * HoverBehavior accepts a function as 'children' which is passed state and\n * an object containing event handlers. The 'children' function should return\n * an React Element of some sort.\n *\n * Example:\n *\n * class MyButtonLikeComponent extends React.Component {\n * render(): React.Node {\n * return <HoverBehavior\n * disabled={this.props.disabled}\n * onClick={this.handleClick}\n * >\n * {({hovered}, handlers) =>\n * <RoundRect\n * textcolor='white'\n * backgroundColor={hovered ? 'red' : 'blue'}/>}\n * {...handlers}\n * >\n * {this.props.children}\n * </RoundRect>\n * }\n * </HoverBehavior>\n * }\n * }\n *\n * This follows a pattern call 'Function as Child Components':\n * https://medium.com/merrickchristensen/function-as-child-components-5f3920a9ace9#.sw0jiio8b\n */\nimport * as React from \"react\";\n\ntype Handlers = {\n onBlur: () => unknown;\n onClick: (e: React.MouseEvent) => unknown;\n onFocus: () => unknown;\n onMouseDown: () => unknown;\n onMouseEnter: () => unknown;\n onMouseLeave: () => unknown;\n onTouchStart: () => unknown;\n onTouchEnd: () => unknown;\n};\n\ntype State = {\n focused: boolean;\n hovered: boolean;\n};\n\ntype Props = {\n children?: (state: State, handlers: Handlers) => React.ReactElement;\n disabled?: boolean;\n onClick?: (e: React.MouseEvent) => unknown;\n startHovered: boolean;\n shouldUpdate: () => boolean;\n};\n\nexport default class HoverBehavior extends React.Component<Props, State> {\n // @ts-expect-error - TS2564 - Property 'focusFlag' has no initializer and is not definitely assigned in the constructor.\n focusFlag: boolean;\n // @ts-expect-error - TS2564 - Property 'waitingForClick' has no initializer and is not definitely assigned in the constructor.\n waitingForClick: boolean;\n\n static defaultProps: {\n shouldUpdate: () => boolean;\n startHovered: boolean;\n } = {\n startHovered: false,\n shouldUpdate: () => true,\n };\n\n constructor(props: Props) {\n super(props);\n\n this.state = {\n focused: false,\n hovered: props.startHovered,\n };\n }\n\n handleClick: (e: React.MouseEvent) => void = (e: React.MouseEvent) => {\n if (!this.props.disabled) {\n if (this.props.shouldUpdate()) {\n this.waitingForClick = false;\n }\n if (this.props.onClick && !this.props.disabled) {\n this.props.onClick(e);\n }\n }\n };\n\n handleMouseEnter: () => void = () => {\n if (\n !this.props.disabled &&\n this.props.shouldUpdate() &&\n !this.waitingForClick\n ) {\n this.setState({hovered: true});\n }\n };\n\n handleMouseLeave: () => void = () => {\n if (\n !this.props.disabled &&\n this.props.shouldUpdate() &&\n !this.waitingForClick\n ) {\n this.setState({hovered: false});\n }\n };\n\n handleTouchStart: () => void = () => {\n if (!this.props.disabled && this.props.shouldUpdate()) {\n this.setState({hovered: true});\n }\n };\n\n handleTouchEnd: () => void = () => {\n if (!this.props.disabled && this.props.shouldUpdate()) {\n this.setState({hovered: false});\n this.waitingForClick = true;\n }\n };\n\n handleMouseDown: () => void = () => {\n if (!this.props.disabled && this.props.shouldUpdate()) {\n this.setState({focused: false});\n this.focusFlag = true;\n }\n };\n\n handleBlur: () => void = () => {\n if (!this.props.disabled && this.props.shouldUpdate()) {\n this.setState({focused: false});\n }\n };\n\n handleFocus: () => void = () => {\n if (!this.props.disabled && this.props.shouldUpdate()) {\n if (this.focusFlag) {\n this.focusFlag = false;\n } else {\n this.setState({focused: true});\n }\n }\n };\n\n render(): React.ReactNode {\n const handlers = {\n onBlur: this.handleBlur,\n onClick: this.handleClick,\n onFocus: this.handleFocus,\n onMouseDown: this.handleMouseDown,\n onMouseEnter: this.handleMouseEnter,\n onMouseLeave: this.handleMouseLeave,\n onTouchStart: this.handleTouchStart,\n onTouchEnd: this.handleTouchEnd,\n } as const;\n\n const {children} = this.props;\n return children?.(this.state, handlers) || null;\n }\n}\n","/* eslint-disable @khanacademy/ts-no-error-suppressions */\n/**\n * Reusable checkbox component.\n **/\nimport {semanticColor} from \"@khanacademy/wonder-blocks-tokens\";\nimport {css, StyleSheet} from \"aphrodite\";\nimport * as React from \"react\";\n\nimport {gray41, gray68} from \"../styles/global-colors\";\n\nimport HoverBehavior from \"./hover-behavior\";\n\ntype CheckboxProps = {\n // Whether or not the checkbox is checked. The parent responsible for\n // responding to onChange events and updating this prop appropriately.\n checked: boolean;\n // When disable the checkbox will appear faded out and will not\n // respond to events and cannot be tabbed to.\n disabled?: boolean;\n // Appear as if disabled but allow it to respond to events and be\n // tabbed to.\n // This allows us to hook alternate responses into clicking on a\n // disabled checkbox.\n appearDisabled?: boolean;\n // Called when the value has changed.\n onChange: (event: React.ChangeEvent<HTMLInputElement>) => void;\n tabIndex?: number | string;\n style?: {\n marginTop: number;\n };\n // For e2e test\n dataTestId?: string;\n // Unique identifier for this checkbox.\n id?: string;\n};\n\nconst borderRadius = 4;\n\n// NOTE(jangmi): Checkbox may have `onChange` depends on circumstances but lack\n// of onChange causes Dev only alert so we provide the no op func as default\n// to prevent that.\nconst onChangeCheckboxNoop = (event: React.ChangeEvent<HTMLInputElement>) => {};\n\nexport default class Checkbox extends React.Component<CheckboxProps> {\n static defaultProps: {\n checked: boolean;\n onChange: (event: React.ChangeEvent<HTMLInputElement>) => void;\n } = {\n checked: false,\n onChange: onChangeCheckboxNoop,\n };\n\n render(): React.ReactNode {\n const {\n checked,\n disabled,\n appearDisabled,\n onChange,\n tabIndex,\n style,\n dataTestId,\n id,\n } = this.props;\n\n const checkedColor = gray41;\n\n return (\n <HoverBehavior>\n {({focused}, handlers) => (\n <div\n {...handlers}\n className={css(\n styles.container,\n focused && styles.focused,\n )}\n style={style}\n data-testid={dataTestId}\n data-checked={checked}\n >\n <svg\n className={css(\n styles.svg,\n (disabled || appearDisabled) && styles.disabled,\n )}\n width={sizeWithPadding}\n height={sizeWithPadding}\n /* pad the viewbox to avoid bad clipping when zooming */\n viewBox={`-${padding} -${padding}\n ${sizeWithPadding} ${sizeWithPadding}`}\n >\n <g fill=\"none\" fillRule=\"evenodd\">\n {checked && (\n <g>\n <rect\n fill={checkedColor}\n width={size}\n height={size}\n x=\"0\"\n y=\"0\"\n rx={borderRadius}\n />\n <path\n fill={\n semanticColor.core.foreground\n .knockout.default\n }\n stroke={\n semanticColor.core.foreground\n .knockout.default\n }\n d=\"M4.98 7.41a0.58.58 0 1 0-0.81.81L6.47\n 10.53c0.23.23.59.23.81\n 0l4.55-4.55a0.58.58 0 0\n 0-0.81-0.81L6.88 9.31 4.98 7.41z\"\n />\n </g>\n )}\n {!checked && (\n <rect\n fill={\n semanticColor.core.foreground\n .knockout.default\n }\n stroke={gray68}\n width={size - 2 * padding}\n height={size - 2 * padding}\n x={padding}\n y={padding}\n rx=\"4\"\n strokeWidth={borderWidth}\n />\n )}\n </g>\n </svg>\n <input\n type=\"checkbox\"\n id={id}\n checked={checked}\n className={css(\n styles.checkbox,\n disabled && styles.defaultCursor,\n )}\n disabled={disabled}\n onChange={onChange}\n // @ts-expect-error - TS2322 - Type 'string | number | undefined' is not assignable to type 'number | undefined'.\n tabIndex={tabIndex}\n />\n </div>\n )}\n </HoverBehavior>\n );\n }\n}\n\nconst size = 16;\nconst padding = 0.5;\nconst borderWidth = 1;\nconst sizeWithPadding = size + 2 * padding;\n\nconst styles = StyleSheet.create({\n container: {\n position: \"relative\",\n display: \"inline-block\",\n verticalAlign: \"middle\",\n lineHeight: 0,\n borderRadius: borderRadius,\n width: sizeWithPadding,\n height: sizeWithPadding,\n flexShrink: 0,\n },\n focused: {\n \"::before\": {\n content: '\"\"',\n position: \"absolute\",\n insetBlockStart: -2,\n insetInlineEnd: -2,\n insetBlockEnd: -2,\n insetInlineStart: -2,\n borderRadius: borderRadius + 2,\n backgroundColor: \"lightblue\",\n },\n },\n svg: {\n position: \"absolute\",\n insetInlineStart: 0,\n insetBlockStart: 0,\n },\n checkbox: {\n appearance: \"none\",\n opacity: 0,\n position: \"absolute\",\n insetBlockStart: padding,\n width: size,\n height: size,\n margin: 0,\n outline: \"none\",\n cursor: \"pointer\",\n },\n disabled: {\n opacity: 0.5,\n },\n defaultCursor: {\n cursor: \"default\",\n },\n});\n","/**\n * Controlled component to display and change widget options.\n */\n\nimport {BodyText} from \"@khanacademy/wonder-blocks-typography\";\nimport * as React from \"react\";\n\nimport Checkbox from \"../../components/checkbox\";\n\nimport styles from \"./label-image-editor.module.css\";\n\nexport type PreferredPopoverDirection =\n | \"NONE\"\n | \"UP\"\n | \"DOWN\"\n | \"LEFT\"\n | \"RIGHT\";\n\ntype Props = {\n // Whether multiple answer choices may be selected for markers.\n multipleAnswers: boolean;\n // Whether to hide answer choices from user instructions.\n hideChoicesFromInstructions: boolean;\n\n preferredPopoverDirection: PreferredPopoverDirection;\n // Callback for when widget options change.\n onChange: (options: {\n multipleAnswers?: boolean;\n hideChoicesFromInstructions?: boolean;\n preferredPopoverDirection?: PreferredPopoverDirection;\n }) => void;\n};\n\nconst Behavior = ({\n multipleAnswers,\n hideChoicesFromInstructions,\n preferredPopoverDirection,\n onChange,\n}: Props): React.ReactElement => (\n <div>\n <BodyText weight=\"bold\" tag=\"span\">\n Behavior\n </BodyText>\n\n <ul className={styles.optionsList}>\n <li className={styles.option}>\n <Checkbox\n checked={multipleAnswers}\n onChange={() =>\n onChange({multipleAnswers: !multipleAnswers})\n }\n />\n\n <span className={styles.label}>\n Allow multiple answers per marker\n </span>\n </li>\n\n <li className={styles.option}>\n <Checkbox\n checked={hideChoicesFromInstructions}\n onChange={() =>\n onChange({\n hideChoicesFromInstructions:\n !hideChoicesFromInstructions,\n })\n }\n />\n\n <span className={styles.label}>\n Do not display answer choices in instructions\n </span>\n </li>\n\n <li className={styles.option}>\n <span className={[styles.label, styles.selectLabel].join(\" \")}>\n Preferred pop-over direction\n </span>\n <select\n value={preferredPopoverDirection}\n onChange={(e) => {\n onChange({\n // eslint-disable-next-line no-restricted-syntax\n preferredPopoverDirection: e.target\n .value as PreferredPopoverDirection,\n });\n }}\n >\n <option value=\"NONE\"> No Preference </option>\n <option value=\"UP\"> Up </option>\n <option value=\"DOWN\"> Down </option>\n <option value=\"LEFT\"> Left </option>\n <option value=\"RIGHT\"> Right </option>\n </select>\n </li>\n </ul>\n </div>\n);\n\nexport default Behavior;\n","/**\n * Controlled editor image marker on the question image.\n *\n * Allows to select which label choices are the answers for each marker, using\n * the dropdown component.\n */\n\nimport Button from \"@khanacademy/wonder-blocks-button\";\nimport {Listbox, OptionItem} from \"@khanacademy/wonder-blocks-dropdown\";\nimport {TextField} from \"@khanacademy/wonder-blocks-form\";\nimport {Popover, PopoverContentCore} from \"@khanacademy/wonder-blocks-popover\";\nimport {semanticColor, sizing} from \"@khanacademy/wonder-blocks-tokens\";\nimport {StyleSheet, css} from \"aphrodite\";\nimport * as React from \"react\";\n\nimport type {PerseusLabelImageWidgetOptions} from \"@khanacademy/perseus-core\";\nimport type {PropsFor} from \"@khanacademy/wonder-blocks-core\";\n\n// Wonder Blocks Listbox's onChange allows a single value, nullish entries,\n// and an array. The type isn't exported from the package, so we need\n// to derive it here.)\ntype ListboxSelection = Parameters<\n NonNullable<PropsFor<typeof Listbox>[\"onChange\"]>\n>[0];\n\ntype MarkerProps = PerseusLabelImageWidgetOptions[\"markers\"][number] & {\n // The list of possible answer choices.\n choices: PerseusLabelImageWidgetOptions[\"choices\"];\n // Callback for when any of the marker props are changed.\n onChange: (\n marker: PerseusLabelImageWidgetOptions[\"markers\"][number],\n ) => void;\n // Callback to remove marker from the question image.\n onRemove: () => void;\n};\n\n// The imperative API that consumers drive via a ref.\nexport type MarkerHandle = {\n // Imperative way to open the dropdown externally.\n // TODO: Replace with declarative API.\n openDropdown: () => void;\n};\n\nconst Marker = React.forwardRef<MarkerHandle, MarkerProps>(function Marker(\n {answers, choices, label, onChange, onRemove, x, y},\n ref,\n) {\n const [showDropdown, setShowDropdown] = React.useState(false);\n\n React.useImperativeHandle(\n ref,\n () => ({\n openDropdown: () => setShowDropdown(true),\n }),\n [],\n );\n\n function updateAnswers(answers: string[]) {\n onChange({answers, label, x, y});\n }\n\n // Answer choices can be renamed or deleted at any time, which would leave\n // this marker pointing at a choice that no longer exists. Prune those so we\n // never serialize an answer that can't be matched.\n React.useEffect(() => {\n const filteredAnswers = answers.filter((answer) =>\n choices.includes(answer),\n );\n\n if (JSON.stringify(answers) !== JSON.stringify(filteredAnswers)) {\n updateAnswers(filteredAnswers);\n }\n });\n\n function handleToggleAnswer(selectedValues: ListboxSelection) {\n // Listbox allows for single, array, or nullish selections, but we only\n // ever use an array for the \"multiple\" type listbox here.\n const values = Array.isArray(selectedValues)\n ? selectedValues\n : [selectedValues];\n\n updateAnswers(values.filter((value) => value != null));\n }\n\n function handleLabelChange(value: string) {\n onChange({answers, label: value, x, y});\n }\n\n return (\n <Popover\n opened={showDropdown}\n onClose={() => setShowDropdown(false)}\n dismissEnabled={true}\n content={\n <PopoverContentCore style={styles.dropdownBody}>\n <div className={css(styles.labelContainer)}>\n <TextField\n placeholder=\"ARIA label (for screen readers)\"\n onChange={handleLabelChange}\n value={label}\n />\n </div>\n <hr className={css(styles.dividerHorizontal)} />\n <Listbox\n aria-label=\"Answer choices\"\n onChange={handleToggleAnswer}\n selectionType=\"multiple\"\n value={answers}\n >\n {choices.map((choice) => (\n <OptionItem\n key={choice}\n value={choice}\n label={choice}\n />\n ))}\n </Listbox>\n <hr className={css(styles.dividerHorizontal)} />\n <Button\n kind=\"tertiary\"\n actionType=\"destructive\"\n onClick={onRemove}\n >\n Delete marker\n </Button>\n </PopoverContentCore>\n }\n >\n {/*\n * Child-as-function is needed here to allow click-outside dismissal.\n *\n * If we use a plain element instead, Popover wraps the child's\n * onClick in stopPropagation, so the opening click never reaches\n * the window listener that implements click-outside dismissal.\n *\n * That listener discards the first click it sees, expecting it\n * to be the opening one, so it ends up eating the first real\n * outside click instead of closing. The function form leaves\n * our handler untouched.\n */}\n {() => (\n <button\n type=\"button\"\n aria-label={\n label\n ? `Edit marker: ${label}`\n : \"Edit unlabeled marker\"\n }\n className={css(\n styles.marker,\n answers.length > 0 && styles.markerWithAnswers,\n showDropdown && styles.markerSelected,\n )}\n onClick={() => setShowDropdown((opened) => !opened)}\n style={{\n // eslint-disable-next-line @khanacademy/wonder-blocks/require-logical-properties-for-rtl -- physical X/Y: authored LTR image coordinates; content doesn't flip with page direction, so converting to logical insets would misplace/misalign the marker in RTL\n left: `${x}%`,\n // eslint-disable-next-line @khanacademy/wonder-blocks/require-logical-properties-for-rtl -- physical X/Y: authored LTR image coordinates; content doesn't flip with page direction, so converting to logical insets would misplace/misalign the marker in RTL\n top: `${y}%`,\n }}\n />\n )}\n </Popover>\n );\n});\n\nconst styles = StyleSheet.create({\n marker: {\n position: \"absolute\",\n\n // The marker is a <button>, so reset the user agent styles that would\n // otherwise fight the dot styling below.\n appearance: \"none\",\n padding: 0,\n\n boxSizing: \"content-box\",\n\n width: sizing.size_160,\n height: sizing.size_160,\n\n // Keep the marker centered on its specified coordinate.\n transform: \"translate(-50%, -50%)\",\n\n cursor: \"pointer\",\n\n background:\n \"linear-gradient(to bottom, rgba(33, 36, 44, 0.2), rgba(33, 36, 44, 0.5))\",\n\n border: `solid 2px ${semanticColor.core.background.base.default}`,\n borderRadius: sizing.size_160,\n\n boxShadow: \"0 2px 10px 0 rgba(33, 36, 44, 0.1)\",\n },\n\n markerSelected: {\n width: sizing.size_280,\n height: sizing.size_280,\n\n border: \"none\",\n borderRadius: sizing.size_280,\n\n // Render selected marker border as inset.\n \"::before\": {\n content: \"''\",\n display: \"block\",\n\n width: sizing.size_200,\n height: sizing.size_200,\n marginInlineStart: sizing.size_020,\n\n border: `solid 2px ${semanticColor.core.background.base.default}`,\n borderRadius: sizing.size_200,\n },\n },\n\n markerWithAnswers: {\n background: semanticColor.core.background.instructive.default,\n },\n\n labelContainer: {\n padding: sizing.size_060,\n },\n\n dividerHorizontal: {\n height: 0,\n margin: 0,\n\n border: `solid ${semanticColor.core.border.neutral.default}`,\n borderWidth: \"0 0 1px\",\n\n boxShadow: \"none\",\n },\n\n dropdownBody: {\n // Reset the default padding from WB Popover.\n padding: 0,\n },\n});\n\nexport default Marker;\n","/**\n * Controlled component to display question image and create markers to\n * label image with answers from list of choices.\n */\n\nimport {Util, Dependencies} from \"@khanacademy/perseus\";\nimport {BodyText} from \"@khanacademy/wonder-blocks-typography\";\nimport {StyleSheet, css} from \"aphrodite\";\nimport * as React from \"react\";\n\nimport {gray68} from \"../../styles/global-colors\";\n\nimport Marker from \"./marker\";\n\nimport type {MarkerHandle} from \"./marker\";\nimport type {PerseusLabelImageWidgetOptions} from \"@khanacademy/perseus-core\";\n\ntype QuestionMarkersProps = {\n // The list of possible answers in a specific order.\n choices: string[];\n // The question image properties.\n imageUrl: string;\n imageWidth: number;\n imageHeight: number;\n // The list of markers placed on the question image.\n markers: PerseusLabelImageWidgetOptions[\"markers\"];\n // Callback for when any of markers change.\n onChange: (markers: PerseusLabelImageWidgetOptions[\"markers\"]) => void;\n // Whether the editor is disabled. Can be set via API options\n // to make the editor read-only when needed.\n editingDisabled: boolean;\n};\n\nclass QuestionMarkers extends React.Component<QuestionMarkersProps> {\n private _markers: Array<MarkerHandle | null | undefined> = [];\n\n openDropdownForMarkerIndices(indices: ReadonlyArray<number>) {\n // Open answer selection dropdown for each of the specified markers.\n indices.forEach((index) => {\n if (this._markers[index]) {\n this._markers[index]?.openDropdown();\n }\n });\n }\n\n handleImageDoubleClick: (e: React.MouseEvent) => void = (\n e: React.MouseEvent,\n ) => {\n e.preventDefault();\n\n // If the editor is disabled, do not allow the user to add markers.\n if (this.props.editingDisabled) {\n return;\n }\n\n // eslint-disable-next-line no-restricted-syntax\n const rect = (e.currentTarget as HTMLElement).getBoundingClientRect();\n\n // Calculate marker position on the question image as percentage offset\n // rounded to one decimal place.\n const x =\n Math.round(((e.clientX - rect.left) / rect.width) * 1000) / 10;\n const y =\n Math.round(((e.clientY - rect.top) / rect.height) * 1000) / 10;\n\n const {markers, onChange} = this.props;\n\n // Add the new marker to the end of the list.\n onChange([\n ...markers,\n {\n answers: [],\n label: \"\",\n x,\n y,\n },\n ]);\n };\n\n render(): React.ReactNode {\n const {choices, imageUrl, imageWidth, imageHeight, markers, onChange} =\n this.props;\n\n const staticUrl = Dependencies.getDependencies().staticUrl;\n\n return (\n <div>\n <BodyText weight=\"bold\" tag=\"span\">\n Markers\n </BodyText>\n\n <div className={css(styles.subtitle)}>\n {imageUrl ? (\n <span>\n Double-click on the image to add a marker.\n <br />\n <br />\n Markers are read by screen readers in the order that\n you add them here, so add in a logical order for the\n learner (e.g. sequentially, clockwise). You can test\n order by using keyboard tabbing.\n </span>\n ) : (\n \"Upload an image to place markers.\"\n )}\n </div>\n\n {imageUrl && (\n <div\n className={css(styles.markersCanvas)}\n style={{\n maxInlineSize: imageWidth,\n maxBlockSize: imageHeight,\n }}\n >\n {/* eslint-disable-next-line jsx-a11y/no-noninteractive-element-interactions -- TODO(LEMS-2871): Address a11y error */}\n <img\n alt=\"\"\n className={css(styles.image)}\n src={staticUrl(Util.getRealImageUrl(imageUrl))}\n onDoubleClick={this.handleImageDoubleClick}\n />\n\n {markers.map((marker, index) => (\n <Marker\n {...marker}\n choices={choices}\n key={`${marker.x}.${marker.y}`}\n // Update marker in the list.\n onChange={(marker) =>\n onChange([\n ...markers.slice(0, index),\n marker,\n ...markers.slice(index + 1),\n ])\n }\n // Remove marker from the list.\n onRemove={() =>\n onChange([\n ...markers.slice(0, index),\n ...markers.slice(index + 1),\n ])\n }\n ref={(node) => (this._markers[index] = node)}\n />\n ))}\n </div>\n )}\n </div>\n );\n }\n}\n\nconst styles = StyleSheet.create({\n subtitle: {\n // TODO: can we use WB typography?\n fontFamily: \"inherit\",\n fontSize: 12,\n lineHeight: \"14px\",\n\n marginBlockStart: 8,\n marginBlockEnd: 12,\n\n color: gray68,\n },\n\n markersCanvas: {\n position: \"relative\",\n\n border: \"solid 1px rgba(33, 36, 44, 0.16)\",\n },\n\n image: {\n // This makes `markersCanvas` have the same height as the image,\n // enabling to place markers precisely as they're positioned using\n // percentage offsets.\n display: \"block\",\n\n // Contain question image to the widget editor.\n maxInlineSize: \"100%\",\n },\n});\n\nexport default QuestionMarkers;\n","/**\n * Controlled component for selecting the question image, for answer labeling.\n */\n\nimport Button from \"@khanacademy/wonder-blocks-button\";\nimport {BodyText} from \"@khanacademy/wonder-blocks-typography\";\nimport * as React from \"react\";\n\nimport FormWrappedTextField from \"../../components/form-wrapped-text-field\";\n\nimport styles from \"./select-image.module.css\";\n\nexport interface SelectImageProps {\n // Callback for when image URL is changed.\n onChange: (url: string) => void;\n // The selected image URL.\n url: string;\n editingDisabled?: boolean;\n}\n\nconst SelectImage = ({\n onChange,\n url,\n editingDisabled = false,\n}: SelectImageProps): React.ReactElement => (\n <div>\n <BodyText weight=\"bold\" tag=\"span\">\n Image\n </BodyText>\n\n <div className={styles.imageRow}>\n <FormWrappedTextField\n placeholder=\"URL\"\n grow={1}\n onChange={(e) => onChange(e.target.value)}\n value={url}\n />\n\n <Button\n disabled={!url || editingDisabled}\n aria-label={\n url\n ? \"\"\n : \"Not implemented. Use the 'Add Image' button in \" +\n \"the editor to upload image, then copy the URL here.\"\n }\n onClick={() => onChange(\"\")}\n style={{minInlineSize: 90}}\n >\n {url ? \"Remove\" : \"Upload\"}\n </Button>\n </div>\n </div>\n);\n\nexport default SelectImage;\n","import {Util} from \"@khanacademy/perseus\";\nimport {labelImageLogic} from \"@khanacademy/perseus-core\";\nimport * as React from \"react\";\n\nimport FormWrappedTextField from \"../../components/form-wrapped-text-field\";\nimport EditorJsonify from \"../../mixins/editor-jsonify\";\n\nimport AnswerChoices from \"./answer-choices\";\nimport Behavior from \"./behavior\";\nimport styles from \"./label-image-editor.module.css\";\nimport QuestionMarkers from \"./question-markers\";\nimport SelectImage from \"./select-image\";\n\nimport type {PreferredPopoverDirection} from \"./behavior\";\nimport type {APIOptions} from \"@khanacademy/perseus\";\nimport type {PerseusLabelImageWidgetOptions} from \"@khanacademy/perseus-core\";\n\ninterface Props {\n apiOptions: APIOptions;\n // List of answer choices to label question image with.\n choices: string[];\n // The question image properties.\n imageAlt: string;\n imageUrl: string;\n imageWidth: number;\n imageHeight: number;\n // The list of label markers on the question image.\n markers: PerseusLabelImageWidgetOptions[\"markers\"];\n // Whether multiple answer choices may be selected for markers.\n multipleAnswers: boolean;\n // Whether to hide answer choices from user instructions.\n hideChoicesFromInstructions: boolean;\n // Callback for when a widget prop is changed.\n onChange: (options: any) => void;\n preferredPopoverDirection: PreferredPopoverDirection;\n}\n\n// JSDoc will be shown in Storybook widget editor description\n/**\n * Direct image labeling widget editor.\n *\n * Label on image widget enables creating more natural, conceptual questions\n * that involve the use of images, and enable learners to demonstrate their\n * knowledge by directly interacting with the image.\n */\nclass LabelImageEditor extends React.Component<Props> {\n private _questionMarkers: QuestionMarkers | null | undefined;\n\n static defaultProps: PerseusLabelImageWidgetOptions =\n labelImageLogic.defaultWidgetOptions;\n\n componentDidUpdate(prevProps: Props) {\n const coordsToMarkers: Record<string, any> = {};\n\n prevProps.markers.forEach(\n (marker) => (coordsToMarkers[`${marker.x}.${marker.y}`] = marker),\n );\n\n // Find the newly added marker indices.\n const newIndices = this.props.markers\n .map((marker, index) =>\n // eslint-disable-next-line no-prototype-builtins\n coordsToMarkers.hasOwnProperty(`${marker.x}.${marker.y}`)\n ? -1\n : index,\n )\n .filter((index) => index !== -1);\n\n // Automatically reveal their dropdowns as a prompt to the content\n // creator to select answers and set the ARIA label.\n // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n if (newIndices.length && this._questionMarkers) {\n this._questionMarkers.openDropdownForMarkerIndices(newIndices);\n }\n }\n\n // TODO(LEMS-3643): Remove `getSaveWarnings` once the frontend uses\n // the new linter rules for save warnings.\n getSaveWarnings: () => ReadonlyArray<any | string> = () => {\n const {choices, imageAlt, imageUrl, markers} = this.props;\n\n const warnings: Array<string> = [];\n\n if (choices.length < 2) {\n warnings.push(\"Question requires at least two answer choices\");\n }\n\n if (!imageUrl) {\n warnings.push(\"Image is not specified for question\");\n } else if (!imageAlt) {\n warnings.push(\"Question image has no alt text\");\n }\n\n // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n if (!markers.length) {\n warnings.push(\"Question has no markers, to label answers on image\");\n } else {\n let numNoAnswers = 0;\n let numNoLabels = 0;\n\n for (const marker of markers) {\n // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n if (!marker.answers.length) {\n numNoAnswers++;\n }\n\n if (!marker.label) {\n numNoLabels++;\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n if (numNoAnswers) {\n warnings.push(\n `Question has ${numNoAnswers} markers with no ` +\n \"answers selected\",\n );\n }\n\n // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n if (numNoLabels) {\n warnings.push(\n `Question has ${numNoLabels} markers with no ` +\n \"ARIA label\",\n );\n }\n }\n\n return warnings;\n };\n\n serialize(): any {\n return EditorJsonify.serialize.call(this);\n }\n\n handleImageChange: (url: string) => void = (url: string) => {\n this.props.onChange({\n imageUrl: url,\n // Initially reset image size when URL is changed so it can be later\n // measured.\n imageWidth: 0,\n imageHeight: 0,\n });\n\n if (url) {\n Util.getImageSize(url, (width, height) => {\n // Prevent unnecessary updates if values haven't changed\n // This helps prevent infinite loops\n if (\n this.props.imageUrl === url &&\n this.props.imageWidth === width &&\n this.props.imageHeight === height\n ) {\n return;\n }\n\n this.props.onChange({\n /**\n * Sending `imageUrl` up again\n * (even though we did so at the beginning of handleImageChange)\n * because we ran into a race condition (LEMS-2583) where\n * `imageUrl` was getting set to an empty string if measuring\n * happened too fast.\n */\n imageUrl: url,\n imageWidth: width,\n imageHeight: height,\n });\n });\n }\n };\n\n handleAltChange: (alt: string) => void = (alt: string) => {\n this.props.onChange({imageAlt: alt});\n };\n\n handleChoicesChange: (choices: ReadonlyArray<string>) => void = (\n choices: ReadonlyArray<string>,\n ) => {\n this.props.onChange({choices});\n };\n\n handleMarkersChange: (\n markers: PerseusLabelImageWidgetOptions[\"markers\"],\n ) => void = (markers: PerseusLabelImageWidgetOptions[\"markers\"]) => {\n this.props.onChange({markers});\n };\n\n handleBehaviorChange: (options?: any) => void = (options: any) => {\n this.props.onChange(options);\n };\n\n render(): React.ReactNode {\n const {\n choices,\n imageAlt,\n imageUrl,\n imageWidth,\n imageHeight,\n markers,\n multipleAnswers,\n hideChoicesFromInstructions,\n preferredPopoverDirection,\n } = this.props;\n\n const editingDisabled = this.props.apiOptions?.editingDisabled ?? false;\n\n const imageSelected = imageUrl && imageWidth > 0 && imageHeight > 0;\n\n return (\n <div className={styles.editor}>\n <SelectImage\n onChange={this.handleImageChange}\n url={imageUrl}\n editingDisabled={editingDisabled}\n />\n\n {/* eslint-disable-next-line @typescript-eslint/strict-boolean-expressions */}\n {imageSelected && (\n <FormWrappedTextField\n placeholder=\"Alt text (for screen readers)\"\n onChange={(e) => this.handleAltChange(e.target.value)}\n value={imageAlt}\n width=\"100%\"\n />\n )}\n\n <QuestionMarkers\n editingDisabled={editingDisabled}\n choices={choices}\n // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n imageUrl={imageSelected ? imageUrl : \"\"}\n imageWidth={imageWidth}\n imageHeight={imageHeight}\n markers={markers}\n onChange={this.handleMarkersChange}\n ref={(node) => (this._questionMarkers = node)}\n />\n\n <AnswerChoices\n choices={choices}\n editingDisabled={editingDisabled}\n onChange={this.handleChoicesChange}\n />\n\n <Behavior\n preferredPopoverDirection={preferredPopoverDirection}\n multipleAnswers={multipleAnswers}\n hideChoicesFromInstructions={hideChoicesFromInstructions}\n onChange={this.handleBehaviorChange}\n />\n </div>\n );\n }\n}\n\nexport default LabelImageEditor;\n","import {\n matcherLogic,\n type PerseusMatcherWidgetOptions,\n} from \"@khanacademy/perseus-core\";\nimport {Checkbox} from \"@khanacademy/wonder-blocks-form\";\nimport * as React from \"react\";\n\nimport InfoTip from \"../../components/info-tip\";\nimport TextListEditor from \"../../components/text-list-editor\";\n\ntype Props = PerseusMatcherWidgetOptions & {\n onChange: (\n newOptions: Partial<PerseusMatcherWidgetOptions>,\n callback?: () => void,\n ) => void;\n};\n\n// JSDoc will be shown in Storybook widget editor description\n/**\n * An editor for adding a matcher widget that allows users to match items from two different sets.\n */\nclass MatcherEditor extends React.Component<Props> {\n static defaultProps: PerseusMatcherWidgetOptions =\n matcherLogic.defaultWidgetOptions;\n\n onLabelChange = (index: number, e: React.ChangeEvent<HTMLInputElement>) => {\n const labels = [...this.props.labels];\n labels[index] = e.target.value;\n this.props.onChange({labels});\n };\n\n // TODO(LEMS-3643): Remove `getSaveWarnings` once the frontend uses\n // the new linter rules for save warnings.\n getSaveWarnings = (): string[] => {\n if (this.props.left.length !== this.props.right.length) {\n return [\n \"The two halves of the matcher have different numbers\" +\n \" of cards.\",\n ];\n }\n return [];\n };\n\n serialize = (): PerseusMatcherWidgetOptions => {\n return {\n left: this.props.left,\n right: this.props.right,\n labels: this.props.labels,\n orderMatters: this.props.orderMatters,\n padding: this.props.padding,\n };\n };\n\n render(): React.ReactNode {\n return (\n <div className=\"perseus-matcher-editor\">\n <div>\n {\" \"}\n Correct answer:{\" \"}\n <InfoTip>\n <p>\n Enter the correct answers here. The preview on the\n right will show the cards in a randomized order,\n which is how the student will see them.\n </p>\n </InfoTip>\n </div>\n <div className=\"perseus-clearfix\">\n <TextListEditor\n options={this.props.left}\n onChange={(options) => {\n this.props.onChange({left: options});\n }}\n layout=\"vertical\"\n />\n <TextListEditor\n options={this.props.right}\n onChange={(options) => {\n this.props.onChange({right: options});\n }}\n layout=\"vertical\"\n />\n </div>\n <span>\n {\" \"}\n Labels:{\" \"}\n <InfoTip>\n <p>These are entirely optional.</p>\n </InfoTip>\n </span>\n <div>\n <input\n type=\"text\"\n defaultValue={this.props.labels[0]}\n onChange={(e) => {\n this.onLabelChange(0, e);\n }}\n />\n <input\n type=\"text\"\n defaultValue={this.props.labels[1]}\n onChange={(e) => {\n this.onLabelChange(1, e);\n }}\n />\n </div>\n <div>\n <Checkbox\n label=\"Order of the matched pairs matters:\"\n checked={this.props.orderMatters}\n onChange={(value) => {\n this.props.onChange({orderMatters: value});\n }}\n />\n <InfoTip>\n <p>\n With this option enabled, only the order provided\n above will be treated as correct. This is useful\n when ordering is significant, such as in the context\n of a proof.\n </p>\n <p>\n If disabled, pairwise matching is sufficient. To\n make this clear, the left column becomes fixed in\n the provided order and only the cards in the right\n column can be moved.\n </p>\n </InfoTip>\n </div>\n <div>\n <Checkbox\n label=\"Padding:\"\n checked={this.props.padding}\n onChange={(value) => {\n this.props.onChange({padding: value});\n }}\n />\n <InfoTip>\n <p>\n Padding is good for text, but not needed for images.\n </p>\n </InfoTip>\n </div>\n </div>\n );\n }\n}\n\nexport default MatcherEditor;\n","import {components, MatrixWidget} from \"@khanacademy/perseus\";\nimport {getMatrixSize, matrixLogic} from \"@khanacademy/perseus-core\";\nimport * as React from \"react\";\nimport _ from \"underscore\";\n\nimport Editor from \"../../editor\";\nimport {deprecatedChangeableChange} from \"../../mixins/changeable\";\nimport EditorJsonify from \"../../mixins/editor-jsonify\";\n\nimport type {ChangeableProps} from \"../../mixins/changeable\";\nimport type {APIOptionsWithDefaults} from \"@khanacademy/perseus\";\nimport type {PerseusMatrixWidgetOptions} from \"@khanacademy/perseus-core\";\nimport type {PropsFor} from \"@khanacademy/wonder-blocks-core\";\n\nconst {RangeInput} = components;\nconst Matrix = MatrixWidget.widget;\n\n// Really large matrices will cause issues with question formatting, so we\n// have to cap it at some point.\nconst MAX_BOARD_SIZE = 6;\n\ninterface Props extends PerseusMatrixWidgetOptions, ChangeableProps {\n apiOptions: APIOptionsWithDefaults;\n}\n\nclass MatrixEditor extends React.Component<Props> {\n static defaultProps: PerseusMatrixWidgetOptions =\n matrixLogic.defaultWidgetOptions;\n\n change: (arg1: any, arg2?: any, arg3?: any) => any = (...args) => {\n if (this.props.apiOptions.editingDisabled) {\n return;\n }\n return deprecatedChangeableChange.apply(this, args);\n };\n\n onMatrixBoardSizeChange: (arg1: [number, number]) => void = (range) => {\n const matrixSize = getMatrixSize(this.props.answers);\n if (range[0] !== null && range[1] !== null) {\n range = [\n Math.round(Math.min(Math.max(range[0], 1), MAX_BOARD_SIZE)),\n Math.round(Math.min(Math.max(range[1], 1), MAX_BOARD_SIZE)),\n ];\n const answers = _(Math.min(range[0], matrixSize[0])).times(\n (row) => {\n return _(Math.min(range[1], matrixSize[1])).times((col) => {\n return this.props.answers[row][col];\n });\n },\n );\n this.props.onChange({\n matrixBoardSize: range,\n answers: answers,\n });\n }\n };\n\n serialize: () => any = () => {\n return EditorJsonify.serialize.call(this);\n };\n\n render(): React.ReactNode {\n const {matrixBoardSize, prefix, suffix, answers} = this.props;\n const matrixProps: Partial<PropsFor<typeof Matrix>> = {\n onBlur: () => {},\n onFocus: () => {},\n trackInteraction: () => {},\n // The widget renders learner input, which is string[][], while the\n // editor stores the correct answers as number[][]. We show the\n // answers in the preview, so they have to be stringified.\n // Empty cells come back from JSON as null (a sparse row like\n // [, , 5] serializes to [null, null, 5]), and those need to stay\n // empty rather than becoming the text \"null\".\n userInput: {\n answers: answers.map((row) =>\n row.map((cell) => (cell == null ? \"\" : String(cell))),\n ),\n },\n handleUserInput: (userInput) => {\n this.change({answers: userInput.answers});\n },\n ...this.props,\n options: {\n matrixBoardSize,\n prefix,\n suffix,\n },\n };\n\n return (\n <div className=\"perseus-matrix-editor\">\n <div className=\"perseus-widget-row\">\n {\" \"}\n Max matrix size:{\" \"}\n <RangeInput\n value={this.props.matrixBoardSize}\n onChange={this.onMatrixBoardSizeChange}\n useArrowKeys={true}\n />\n </div>\n <div className=\"perseus-widget-row\">\n {/* eslint-disable-next-line no-restricted-syntax */}\n <Matrix {...(matrixProps as PropsFor<typeof Matrix>)} />\n </div>\n <div className=\"perseus-widget-row\">\n {\" \"}\n Matrix prefix:{\" \"}\n <Editor\n ref=\"prefix\"\n apiOptions={this.props.apiOptions}\n content={this.props.prefix}\n widgetEnabled={false}\n onChange={(newProps) => {\n this.change({prefix: newProps.content});\n }}\n />\n </div>\n <div className=\"perseus-widget-row\">\n {\" \"}\n Matrix suffix:{\" \"}\n <Editor\n ref=\"suffix\"\n apiOptions={this.props.apiOptions}\n content={this.props.suffix}\n widgetEnabled={false}\n onChange={(newProps) => {\n this.change({suffix: newProps.content});\n }}\n />\n </div>\n </div>\n );\n }\n}\n\nexport default MatrixEditor;\n","/* eslint-disable @khanacademy/ts-no-error-suppressions */\nimport {components} from \"@khanacademy/perseus\";\nimport {measurerLogic} from \"@khanacademy/perseus-core\";\nimport {Checkbox} from \"@khanacademy/wonder-blocks-form\";\nimport * as React from \"react\";\nimport _ from \"underscore\";\n\nimport InfoTip from \"../../components/info-tip\";\nimport {deprecatedChangeableChange} from \"../../mixins/changeable\";\nimport EditorJsonify from \"../../mixins/editor-jsonify\";\n\nimport type {ChangeableProps} from \"../../mixins/changeable\";\nimport type {PerseusMeasurerWidgetOptions} from \"@khanacademy/perseus-core\";\n\nconst {NumberInput, RangeInput} = components;\n\nconst defaultImage = {\n url: null,\n top: 0,\n left: 0,\n} as const;\n\ninterface Props extends PerseusMeasurerWidgetOptions, ChangeableProps {}\n\nclass MeasurerEditor extends React.Component<Props> {\n static defaultProps: PerseusMeasurerWidgetOptions =\n measurerLogic.defaultWidgetOptions;\n\n className = \"perseus-widget-measurer\";\n\n change: (arg1: any, arg2: any, arg3: any) => any = (...args) => {\n return deprecatedChangeableChange.apply(this, args);\n };\n\n _changeUrl: (arg1: React.ChangeEvent<HTMLInputElement>) => void = (e) => {\n this._changeImage(\"url\", e.target.value);\n };\n\n _changeTop: (arg1: any) => void = (newTop) => {\n this._changeImage(\"top\", newTop);\n };\n\n _changeLeft: (arg1: any) => void = (newLeft) => {\n this._changeImage(\"left\", newLeft);\n };\n\n _changeImage: (arg1: string, arg2: any) => void = (subProp, newValue) => {\n const image = _.clone(this.props.image);\n image[subProp] = newValue;\n // @ts-expect-error - TS2554 - Expected 3 arguments, but got 2.\n this.change(\"image\", image);\n };\n\n renderLabelChoices: (\n arg1: ReadonlyArray<[string, string]>,\n ) => ReadonlyArray<React.ReactElement<React.ComponentProps<\"option\">>> = (\n choices,\n ) => {\n return choices.map(function (nameAndValue) {\n const [name, value] = nameAndValue;\n return (\n <option key={value} value={value}>\n {name}\n </option>\n );\n });\n };\n\n serialize: () => any = () => {\n return EditorJsonify.serialize.call(this);\n };\n\n render(): React.ReactNode {\n const image = _.extend({}, defaultImage, this.props.image);\n\n return (\n <div className=\"perseus-widget-measurer\">\n <div>Image displayed under protractor and/or ruler:</div>\n <div>\n URL:{\" \"}\n <input\n type=\"text\"\n className=\"perseus-widget-measurer-url\"\n ref=\"image-url\"\n defaultValue={image.url}\n onChange={this._changeUrl}\n />\n <InfoTip>\n <p>\n Create an image in graphie, or use the &quot;Add\n image&quot; function to create a background.\n </p>\n </InfoTip>\n </div>\n {image.url && (\n <div className=\"perseus-widget-row\">\n <label className=\"perseus-widget-left-col\">\n Pixels from top:{\" \"}\n <NumberInput\n placeholder={0}\n onChange={this._changeTop}\n value={image.top}\n useArrowKeys={true}\n />\n </label>\n <label className=\"perseus-widget-right-col\">\n Pixels from left:{\" \"}\n <NumberInput\n placeholder={0}\n onChange={this._changeLeft}\n value={image.left}\n useArrowKeys={true}\n />\n </label>\n </div>\n )}\n <div>\n Containing area [width, height]:{\" \"}\n <RangeInput\n // @ts-expect-error - TS2554 - Expected 3 arguments, but got 1.\n onChange={this.change(\"box\")}\n value={this.props.box}\n useArrowKeys={true}\n />\n </div>\n <div className=\"perseus-widget-row\">\n <div className=\"perseus-widget-left-col\">\n <Checkbox\n label=\"Show ruler\"\n checked={this.props.showRuler}\n onChange={(value) => {\n this.props.onChange({showRuler: value});\n }}\n />\n </div>\n <div className=\"perseus-widget-right-col\">\n <Checkbox\n label=\"Show protractor\"\n checked={this.props.showProtractor}\n onChange={(value) => {\n this.props.onChange({showProtractor: value});\n }}\n />\n </div>\n </div>\n {this.props.showRuler && (\n <div>\n <div>\n <label>\n {\" \"}\n Ruler label:{\" \"}\n <select\n onChange={(e) =>\n // @ts-expect-error - TS2554 - Expected 3 arguments, but got 2.\n this.change(\n \"rulerLabel\",\n e.target.value,\n )\n }\n value={this.props.rulerLabel}\n >\n <option value=\"\">None</option>\n <optgroup label=\"Metric\">\n {this.renderLabelChoices([\n [\"milimeters\", \"mm\"],\n [\"centimeters\", \"cm\"],\n [\"meters\", \"m\"],\n [\"kilometers\", \"km\"],\n ])}\n </optgroup>\n <optgroup label=\"Imperial\">\n {this.renderLabelChoices([\n [\"inches\", \"in\"],\n [\"feet\", \"ft\"],\n [\"yards\", \"yd\"],\n [\"miles\", \"mi\"],\n ])}\n </optgroup>\n </select>\n </label>\n </div>\n <div>\n <label>\n {\" \"}\n Ruler ticks:{\" \"}\n <select\n onChange={(e) =>\n // @ts-expect-error - TS2554 - Expected 3 arguments, but got 2.\n this.change(\n \"rulerTicks\",\n +e.target.value,\n )\n }\n value={this.props.rulerTicks}\n >\n {[1, 2, 4, 8, 10, 16].map(function (n) {\n return (\n <option key={n} value={n}>\n {n}\n </option>\n );\n })}\n </select>\n </label>\n </div>\n <div>\n <label>\n Ruler pixels per unit:{\" \"}\n <NumberInput\n placeholder={40}\n // @ts-expect-error - TS2554 - Expected 3 arguments, but got 1.\n onChange={this.change(\"rulerPixels\")}\n value={this.props.rulerPixels}\n useArrowKeys={true}\n />\n </label>\n </div>\n <div>\n <label>\n Ruler length in units:{\" \"}\n <NumberInput\n placeholder={10}\n // @ts-expect-error - TS2554 - Expected 3 arguments, but got 1.\n onChange={this.change(\"rulerLength\")}\n value={this.props.rulerLength}\n useArrowKeys={true}\n />\n </label>\n </div>\n </div>\n )}\n </div>\n );\n }\n}\n\nexport default MeasurerEditor;\n","/* eslint-disable @khanacademy/ts-no-error-suppressions */\nimport {number as knumber} from \"@khanacademy/kmath\";\nimport {components} from \"@khanacademy/perseus\";\nimport {\n numberLineLogic,\n type PerseusNumberLineWidgetOptions,\n} from \"@khanacademy/perseus-core\";\nimport {Checkbox} from \"@khanacademy/wonder-blocks-form\";\nimport * as React from \"react\";\nimport _ from \"underscore\";\n\nimport InfoTip from \"../../components/info-tip\";\nimport EditorJsonify from \"../../mixins/editor-jsonify\";\n\nimport type {ChangeableProps} from \"../../mixins/changeable\";\n\nconst {ButtonGroup, NumberInput, RangeInput} = components;\n\ntype Range = [number, number];\n\nconst bound = (x: number, gt: number, lt: number): number =>\n Math.min(Math.max(x, gt), lt);\n\nconst EN_DASH = \"\\u2013\";\n\ntype Props = {\n range: number[];\n\n labelRange: ReadonlyArray<number>;\n labelStyle: string;\n labelTicks: boolean;\n\n divisionRange: ReadonlyArray<number>;\n numDivisions: number;\n snapDivisions: number;\n\n tickStep: number;\n correctRel: \"lt\" | \"gt\" | \"le\" | \"ge\" | \"eq\";\n correctX: number;\n initialX: number;\n isTickCtrl?: boolean;\n\n static?: boolean;\n showTooltips: boolean;\n} & ChangeableProps;\n\n// JSDoc will be shown in Storybook widget editor description\n/**\n * An editor for adding a number line widget that allows users to mark\n * positions, intervals, and points on a number line.\n */\nclass NumberLineEditor extends React.Component<Props> {\n static defaultProps: PerseusNumberLineWidgetOptions =\n numberLineLogic.defaultWidgetOptions;\n\n onRangeChange: (arg1: Range) => void = (range) => {\n // Changing the range constrains the initial position, as well as the\n // position of the answer and labels. Atm, it just marks them as\n // invalid and prevents the number line from showing; it was annoying\n // to change it for them, because if they're typing in fractions,\n // it registers one-at-a-time and messes things up.\n this.props.onChange({range: range});\n };\n\n onLabelRangeChange: (arg1: number, arg2: number) => void = (i, num) => {\n let labelRange = this.props.labelRange.slice();\n const otherNum = labelRange[1 - i];\n\n if (num == null || otherNum == null) {\n labelRange[i] = num;\n } else {\n // If both labels have values, this updates the \"appropriate\" one.\n // It enforces that the position of the left label <= right label.\n // If left otherwise, it makes certain aspects of validation hard.\n labelRange = [Math.min(num, otherNum), Math.max(num, otherNum)];\n }\n\n this.props.onChange({labelRange: labelRange});\n };\n\n onDivisionRangeChange: (arg1: Range) => void = (divisionRange) => {\n let numDivisions = this.props.numDivisions;\n numDivisions = bound(numDivisions, divisionRange[0], divisionRange[1]);\n this.props.onChange({\n divisionRange: divisionRange,\n numDivisions: numDivisions,\n });\n };\n\n onNumChange: (\n arg1: \"correctX\" | \"initialX\" | \"snapDivisions\",\n arg2: number,\n ) => void = (key, value) => {\n const opts: Record<string, any> = {};\n opts[key] = value;\n this.props.onChange(opts);\n };\n\n onNumDivisionsChange: (arg1: number) => void = (numDivisions) => {\n const divRange = this.props.divisionRange.slice();\n\n // Don't allow a fraction for the number of divisions\n numDivisions = _.isFinite(numDivisions) ? Math.round(numDivisions) : 0;\n\n // Don't allow negative numbers for the number of divisions\n numDivisions = numDivisions < 0 ? numDivisions * -1 : numDivisions;\n\n // If the number of divisions isn't blank, update the number line\n // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n if (numDivisions) {\n // Constrain numDivisions to be within the allowed range\n numDivisions = Math.min(\n divRange[1],\n Math.max(divRange[0], numDivisions),\n );\n\n this.props.onChange({\n tickStep: null,\n divisionRange: divRange,\n numDivisions: numDivisions,\n });\n }\n };\n\n onTickStepChange: (arg1: number) => void = (tickStep) => {\n this.props.onChange({\n numDivisions: null,\n tickStep: tickStep,\n });\n };\n\n onChangeRelation: (arg1: React.ChangeEvent<HTMLInputElement>) => void = (\n e,\n ) => {\n const value = e.target.value;\n this.props.onChange({\n correctRel: value,\n isInequality: value !== \"eq\",\n });\n };\n\n onLabelStyleChange: (arg1: any) => void = (labelStyle) => {\n this.props.onChange({\n labelStyle: labelStyle,\n });\n };\n\n serialize: () => any = () => {\n return EditorJsonify.serialize.call(this);\n };\n\n render(): React.ReactNode {\n const range = this.props.range;\n const labelRange = this.props.labelRange;\n const divisionRange = this.props.divisionRange;\n\n range[0] = +range[0];\n range[1] = +range[1];\n\n const width = range[1] - range[0];\n const numDivisions = this.props.numDivisions;\n const snapDivisions = this.props.snapDivisions;\n const tickStep = this.props.tickStep;\n const isTickCtrl = this.props.isTickCtrl;\n\n let step;\n if (!isTickCtrl) {\n // this will help constrain the answer to what is reachable\n // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n step = tickStep\n ? tickStep / snapDivisions\n : width / numDivisions / snapDivisions;\n } else {\n // but if tickCtrl is on, the range of what is reachable is\n // rather large, and it becomes obnoxious to check for this\n step = null;\n }\n\n const labelStyleEditorButtons = [\n {\n value: \"decimal\",\n content: \"0.75\",\n title: \"Decimals\",\n },\n {\n value: \"improper\",\n content: \"\\u2077\\u2044\\u2084\",\n title: \"Improper fractions\",\n },\n {\n value: \"mixed\",\n content: \"1\\u00BE\",\n title: \"Mixed numbers\",\n },\n {\n value: \"non-reduced\",\n content: \"\\u2078\\u2044\\u2084\",\n title: \"Non-reduced\",\n },\n ];\n\n return (\n <div className=\"perseus-widget-number-line-editor\">\n <div className=\"perseus-widget-row\">\n Correct x{\" \"}\n <select\n value={this.props.correctRel}\n // @ts-expect-error - TS2322 - Type '(arg1: ChangeEvent<HTMLInputElement>) => void' is not assignable to type 'ChangeEventHandler<HTMLSelectElement>'.\n onChange={this.onChangeRelation}\n aria-label=\"Select relationship\"\n >\n <option value=\"eq\" aria-label=\"Equal\">\n =\n </option>\n <option value=\"lt\" aria-label=\"Less than\">\n &lt;\n </option>\n <option value=\"gt\" aria-label=\"Greater than\">\n &gt;\n </option>\n <option value=\"le\" aria-label=\"Less than or equal\">\n &le;\n </option>\n <option value=\"ge\" aria-label=\"Greater than or equal\">\n &ge;\n </option>\n </select>{\" \"}\n <NumberInput\n value={this.props.correctX}\n format={this.props.labelStyle}\n onChange={this.onNumChange.bind(this, \"correctX\")}\n checkValidity={(val) =>\n val >= range[0] &&\n val <= range[1] &&\n (!step ||\n knumber.isInteger((val - range[0]) / step))\n }\n placeholder=\"answer\"\n size=\"normal\"\n useArrowKeys={true}\n />\n <InfoTip>\n <p>\n This is the correct answer. The answer is validated\n (as right or wrong) by using only the end position\n of the point and the relation (=, &lt;, &gt;, &le;,\n &ge;).\n </p>\n </InfoTip>\n </div>\n\n <div className=\"perseus-widget-row\">\n {this.props.static ? (\n <label>\n {/* Don't display initial position input in\n static mode since it isn't used. */}\n Range:\n </label>\n ) : (\n <label>\n Position:{\" \"}\n <NumberInput\n value={this.props.initialX}\n format={this.props.labelStyle}\n onChange={this.onNumChange.bind(\n this,\n \"initialX\",\n )}\n placeholder={range[0]}\n checkValidity={(val) => {\n return val >= range[0] && val <= range[1];\n }}\n useArrowKeys={true}\n />\n {\" \\u2208 \"}\n </label>\n )}\n\n <RangeInput\n value={range}\n onChange={this.onRangeChange}\n format={this.props.labelStyle}\n useArrowKeys={true}\n />\n <InfoTip>\n <p>\n This controls the initial position of the point\n along the number line and the\n <strong>range</strong>, the position of the\n endpoints of the number line. Setting the range\n constrains the position of the answer and the\n labels.\n </p>\n <p>\n In static mode, the initial position of the point is\n determined by Correct x instead of position.\n </p>\n </InfoTip>\n </div>\n <div className=\"perseus-widget-row\">\n <div className=\"perseus-widget-left-col\">\n Labels:{\" \"}\n <NumberInput\n value={labelRange[0]}\n placeholder={range[0]}\n format={this.props.labelStyle}\n checkValidity={(val) =>\n val >= range[0] && val <= range[1]\n }\n onChange={this.onLabelRangeChange.bind(this, 0)}\n useArrowKeys={true}\n />\n <span> &amp; </span>\n <NumberInput\n value={labelRange[1]}\n placeholder={range[1]}\n format={this.props.labelStyle}\n checkValidity={(val) =>\n val >= range[0] && val <= range[1]\n }\n onChange={this.onLabelRangeChange.bind(this, 1)}\n useArrowKeys={true}\n />\n <InfoTip>\n <p>\n This controls the position of the left / right\n labels. By default, the labels are set by the\n range <br />\n <strong>Note:</strong> Ensure that the labels\n line up with the tick marks, or it may be\n confusing for users.\n </p>\n </InfoTip>\n </div>\n </div>\n <div className=\"perseus-widget-row\">\n Style:{\" \"}\n <ButtonGroup\n value={this.props.labelStyle}\n buttons={labelStyleEditorButtons}\n onChange={this.onLabelStyleChange}\n />\n <InfoTip>\n <p>\n This controls the styling of the labels for the two\n main labels as well as all the tick mark labels, if\n applicable. Your choices are decimal, improper\n fractions, mixed fractions, and non-reduced\n fractions.\n </p>\n </InfoTip>\n </div>\n <div className=\"perseus-widget-row\">\n {!this.props.static && (\n <div className=\"perseus-widget-left-col\">\n <Checkbox\n label=\"Show tick controller\"\n checked={!!this.props.isTickCtrl}\n onChange={(value) => {\n this.props.onChange({isTickCtrl: value});\n }}\n />\n </div>\n )}\n <div className=\"perseus-widget-right-col\">\n <Checkbox\n label=\"Show label ticks\"\n checked={this.props.labelTicks}\n onChange={(value) => {\n this.props.onChange({labelTicks: value});\n }}\n />\n </div>\n </div>\n\n <div className=\"perseus-widget-row\">\n {!this.props.static && (\n <Checkbox\n label=\"Show tooltips\"\n checked={this.props.showTooltips}\n onChange={(value) => {\n this.props.onChange({showTooltips: value});\n }}\n />\n )}\n </div>\n <div className=\"perseus-widget-row\">\n {isTickCtrl && (\n <span>\n <label>\n Start num divisions at{\" \"}\n <NumberInput\n // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n value={this.props.numDivisions || null}\n format=\"decimal\"\n onChange={this.onNumDivisionsChange}\n checkValidity={(val) => {\n return (\n val >= divisionRange[0] &&\n val <= divisionRange[1]\n );\n }}\n placeholder={width / this.props.tickStep}\n useArrowKeys={true}\n />\n </label>\n <InfoTip>\n <p>\n This controls the number (and position) of\n the tick marks. The number of divisions is\n constrained to\n {\" \" +\n divisionRange[0] +\n EN_DASH +\n divisionRange[1]}\n .\n <br />\n <strong>Note:</strong> The user will be able\n to specify the number of divisions in a\n number input.\n </p>\n </InfoTip>\n </span>\n )}\n {!isTickCtrl && (\n <span>\n <label>\n Num divisions:{\" \"}\n <NumberInput\n // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n value={this.props.numDivisions || null}\n format=\"decimal\"\n onChange={this.onNumDivisionsChange}\n checkValidity={(val) => {\n return (\n val >= divisionRange[0] &&\n val <= divisionRange[1]\n );\n }}\n placeholder={width / this.props.tickStep}\n useArrowKeys={true}\n />\n </label>{\" \"}\n <label>\n or tick step:{\" \"}\n <NumberInput\n // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n value={this.props.tickStep || null}\n format={this.props.labelStyle}\n onChange={this.onTickStepChange}\n checkValidity={(val) => {\n return val > 0 && val <= width;\n }}\n placeholder={\n width / this.props.numDivisions\n }\n useArrowKeys={true}\n />\n </label>\n <InfoTip>\n <p>\n This controls the number (and position) of\n the tick marks; you can either set the\n number of divisions (2 divisions would split\n the entire range in two halves), or the tick\n step (the distance between ticks) and the\n other value will be updated accordingly.{\" \"}\n <br />\n <strong>Note:</strong> There is no check to\n see if labels coordinate with the tick\n marks, which may be confusing for users if\n the blue labels and black ticks are\n off-step.\n </p>\n </InfoTip>\n </span>\n )}\n </div>\n <div className=\"perseus-widget-row\">\n <label>\n Snap increments per tick:{\" \"}\n <NumberInput\n value={snapDivisions}\n checkValidity={(val) => val > 0}\n format={this.props.labelStyle}\n onChange={this.onNumChange.bind(\n this,\n \"snapDivisions\",\n )}\n useArrowKeys={true}\n />\n </label>\n <InfoTip>\n <p>\n This determines the number of different places the\n point will snap between two adjacent tick marks.{\" \"}\n <br />\n <strong>Note:</strong>Ensure the required number of\n snap increments is provided to answer the question.\n </p>\n </InfoTip>\n </div>\n </div>\n );\n }\n}\n\nexport default NumberLineEditor;\n","import {\n mergeCards,\n ordererLogic,\n toCard,\n type PerseusOrdererWidgetOptions,\n} from \"@khanacademy/perseus-core\";\nimport * as React from \"react\";\n\nimport InfoTip from \"../../components/info-tip\";\nimport TextListEditor from \"../../components/text-list-editor\";\n\nconst NORMAL = \"normal\";\nconst AUTO = \"auto\";\nconst HORIZONTAL = \"horizontal\";\nconst VERTICAL = \"vertical\";\n\ntype Props = PerseusOrdererWidgetOptions & {\n onChange: (\n newOptions: Partial<PerseusOrdererWidgetOptions>,\n callback?: () => void,\n ) => void;\n};\n\nclass OrdererEditor extends React.Component<Props> {\n static defaultProps: PerseusOrdererWidgetOptions =\n ordererLogic.defaultWidgetOptions;\n\n onOptionsChange = (\n whichOptions: \"correctOptions\" | \"otherOptions\",\n options: string[],\n ) => {\n const changedCards = options.map(toCard);\n const correctOptions =\n whichOptions === \"correctOptions\"\n ? changedCards\n : this.props.correctOptions;\n const otherOptions =\n whichOptions === \"otherOptions\"\n ? changedCards\n : this.props.otherOptions;\n\n this.props.onChange({\n [whichOptions]: changedCards,\n options: mergeCards(correctOptions, otherOptions),\n });\n };\n\n onLayoutChange = (e: React.ChangeEvent<HTMLSelectElement>) => {\n const layout = e.target.value;\n switch (layout) {\n case HORIZONTAL:\n case VERTICAL:\n this.props.onChange({layout});\n break;\n default:\n throw new Error(`${layout} is not an available layout option`);\n }\n };\n\n onHeightChange = (e: React.ChangeEvent<HTMLSelectElement>) => {\n const height = e.target.value;\n switch (height) {\n case NORMAL:\n case AUTO:\n this.props.onChange({height});\n break;\n default:\n throw new Error(`${height} is not an available height option`);\n }\n };\n\n serialize = (): PerseusOrdererWidgetOptions => {\n return {\n options: mergeCards(\n this.props.correctOptions,\n this.props.otherOptions,\n ),\n correctOptions: this.props.correctOptions,\n otherOptions: this.props.otherOptions,\n height: this.props.height,\n layout: this.props.layout,\n };\n };\n\n render(): React.ReactNode {\n return (\n <div>\n <div>\n {\" \"}\n Correct answer:{\" \"}\n <InfoTip>\n <p>\n Place the cards in the correct order. The same card\n can be used more than once in the answer but will\n only be displayed once at the top of a stack of\n identical cards.\n </p>\n </InfoTip>\n </div>\n <TextListEditor\n options={this.props.correctOptions.map(\n (option) => option.content,\n )}\n onChange={(options) => {\n this.onOptionsChange(\"correctOptions\", options);\n }}\n layout={this.props.layout}\n />\n\n <div>\n {\" \"}\n Other cards:{\" \"}\n <InfoTip>\n <p>Create cards that are not part of the answer.</p>\n </InfoTip>\n </div>\n <TextListEditor\n options={this.props.otherOptions.map(\n (option) => option.content,\n )}\n onChange={(options) => {\n this.onOptionsChange(\"otherOptions\", options);\n }}\n layout={this.props.layout}\n />\n\n <div>\n <label>\n {\" \"}\n Layout:{\" \"}\n <select\n value={this.props.layout}\n onChange={this.onLayoutChange}\n >\n <option value={HORIZONTAL}>Horizontal</option>\n <option value={VERTICAL}>Vertical</option>\n </select>\n </label>\n <InfoTip>\n <p>\n Use the horizontal layout for short text and small\n images. The vertical layout is best for longer text\n (e.g. proofs).\n </p>\n </InfoTip>\n </div>\n <div>\n <label>\n {\" \"}\n Height:{\" \"}\n <select\n value={this.props.height}\n onChange={this.onHeightChange}\n >\n <option value={NORMAL}>Normal</option>\n <option value={AUTO}>Automatic</option>\n </select>\n </label>\n <InfoTip>\n <p>\n Use &quot;Normal&quot; for text,\n &quot;Automatic&quot; for images.\n </p>\n </InfoTip>\n </div>\n </div>\n );\n }\n}\n\nexport default OrdererEditor;\n","import {makeSafeUrl} from \"@khanacademy/perseus-core\";\nimport {\n phetSimulationLogic,\n type PerseusPhetSimulationWidgetOptions,\n} from \"@khanacademy/perseus-core\";\nimport {LabeledTextField} from \"@khanacademy/wonder-blocks-form\";\nimport {spacing} from \"@khanacademy/wonder-blocks-tokens\";\nimport * as React from \"react\";\n\ntype Props = PerseusPhetSimulationWidgetOptions & {\n onChange: (arg1: {\n url?: Props[\"url\"];\n description?: Props[\"description\"];\n }) => void;\n};\n\n// JSDoc will be shown in Storybook widget editor description\n/**\n * An editor for adding a PhET simulation widget that allows users to interact\n * with physics simulations.\n */\nclass PhetSimulationEditor extends React.Component<Props> {\n static defaultProps: PerseusPhetSimulationWidgetOptions =\n phetSimulationLogic.defaultWidgetOptions;\n\n serialize(): PerseusPhetSimulationWidgetOptions {\n return {\n url: this.props.url,\n description: this.props.description,\n };\n }\n\n // TODO(LEMS-3643): Remove `getSaveWarnings` once the frontend uses\n // the new linter rules for save warnings.\n getSaveWarnings: () => ReadonlyArray<string> = () => {\n if (\n makeSafeUrl(this.props.url, \"en\", \"https://phet.colorado.edu\") ===\n null\n ) {\n return [\"Please enter a URL from the PhET domain.\"];\n }\n return [];\n };\n\n render(): React.ReactNode {\n return (\n <div>\n <LabeledTextField\n label={\"URL\"}\n value={this.props.url}\n onChange={(url: string) => this.props.onChange({url})}\n style={{\n marginBlockEnd: spacing.large_24,\n }}\n />\n <LabeledTextField\n label={\"Description\"}\n value={this.props.description}\n onChange={(description: string) =>\n this.props.onChange({description})\n }\n />\n </div>\n );\n }\n}\n\nexport default PhetSimulationEditor;\n","import {number as knumber} from \"@khanacademy/kmath\";\nimport {components, PlotterWidget, Util} from \"@khanacademy/perseus\";\nimport {plotterLogic, plotterPlotTypes} from \"@khanacademy/perseus-core\";\nimport * as React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport _ from \"underscore\";\n\nimport BlurInput from \"../../components/blur-input\";\nimport InfoTip from \"../../components/info-tip\";\nimport TextListEditor from \"../../components/text-list-editor\";\n\nimport type {APIOptions} from \"@khanacademy/perseus\";\nimport type {PerseusPlotterWidgetOptions} from \"@khanacademy/perseus-core\";\nimport type {PropsFor} from \"@khanacademy/wonder-blocks-core\";\n\nconst {NumberInput, RangeInput} = components;\nconst Plotter = PlotterWidget.widget;\n\nconst STARTING = \"starting\";\nconst CORRECT = \"correct\";\n\nconst editingStates = [STARTING, CORRECT];\ntype EditingState = (typeof editingStates)[number];\n\n// Return a copy of array with length n, padded with given value\nfunction padArray(array: any, n, value: any) {\n const copy = _.clone(array);\n copy.length = n;\n for (let i = array.length; i < n; i++) {\n copy[i] = value;\n }\n return copy;\n}\n\nconst editorDefaults = {\n scaleY: 1,\n maxY: 10,\n snapsPerLine: 2,\n} as const;\n\ntype Props = {\n apiOptions: APIOptions;\n type: PerseusPlotterWidgetOptions[\"type\"];\n labels: Array<string>;\n categories: PerseusPlotterWidgetOptions[\"categories\"];\n scaleY: number;\n maxY: number;\n snapsPerLine: number;\n picSize: number;\n picBoxHeight: number;\n picUrl?: string | null;\n plotDimensions: ReadonlyArray<number>;\n labelInterval: number;\n starting: ReadonlyArray<number>;\n correct: ReadonlyArray<number>;\n static: boolean;\n onChange: any;\n};\n\ntype State = {\n editing: EditingState;\n pic: any;\n loadedUrl: string | null;\n minX: number | null;\n maxX: number | null;\n tickStep: number | null;\n};\n\nconst formatNumber = (num) => \"$\" + knumber.round(num, 2) + \"$\";\n\n// JSDoc will be shown in Storybook widget editor description\n/**\n * An editor for adding a plotter widget that allows users to create and customize data visualizations.\n */\nclass PlotterEditor extends React.Component<Props, State> {\n static defaultProps: PerseusPlotterWidgetOptions =\n plotterLogic.defaultWidgetOptions;\n\n state: State = {\n editing: this.props.static ? STARTING : CORRECT,\n pic: null,\n loadedUrl: null,\n minX: null,\n maxX: null,\n tickStep: null,\n };\n\n // TODO(jangmi, CP-3288): Remove usage of `UNSAFE_componentWillMount`\n UNSAFE_componentWillMount() {\n this.fetchPic(this.props.picUrl);\n }\n\n UNSAFE_componentWillReceiveProps(nextProps: any) {\n this.fetchPic(nextProps.picUrl);\n\n if (nextProps.static) {\n this.setState({\n editing: \"starting\",\n });\n }\n }\n\n fetchPic: (url: string | null | undefined) => void = (url) => {\n if (url == null) {\n // Make sure we don't display a previously-loaded picUrl if we no\n // longer have one.\n if (this.state.pic !== null) {\n this.setState({pic: null, loadedUrl: null});\n }\n return;\n }\n if (this.state.loadedUrl !== url) {\n const pic = new Image();\n pic.src = url;\n pic.onload = () => {\n this.setState({\n pic: pic,\n loadedUrl: url,\n });\n };\n }\n };\n\n handleChangeTickStep: (arg1: number) => void = (value) => {\n this.setState({\n tickStep: value,\n });\n };\n\n handleChangeRange: (arg1: [number, number]) => void = (newValue) => {\n this.setState({\n minX: newValue[0],\n maxX: newValue[1],\n });\n };\n\n changeLabelInterval: (arg1: number) => void = (value) => {\n this.props.onChange({\n labelInterval: value,\n });\n };\n\n changeType: (arg1: any) => void = (type) => {\n let categories;\n if (type === \"histogram\") {\n // Switching to histogram, add a label (0) to the left\n categories = [formatNumber(0)].concat(this.props.categories);\n this.props.onChange({type: type, categories: categories});\n } else if (this.props.type === \"histogram\") {\n // Switching from histogram, remove a label from the left\n categories = this.props.categories.slice(1);\n this.props.onChange({type: type, categories: categories});\n } else {\n this.props.onChange({type: type});\n }\n\n if (categories) {\n const node = ReactDOM.findDOMNode(this.refs.categories);\n // @ts-expect-error - TS2531 - Object is possibly 'null'. | TS2339 - Property 'value' does not exist on type 'Element | Text'.\n node.value = categories.join(\", \");\n }\n };\n\n changeLabel: (arg1: number, arg2: any) => void = (i, e) => {\n const labels = _.clone(this.props.labels);\n labels[i] = e.target.value;\n this.props.onChange({labels: labels});\n };\n\n changePicUrl: (arg1: string) => void = (value) => {\n // We don't need the labels and other data in the plotter, so just\n // extract the raw image and use that.\n const url = Util.getRealImageUrl(value);\n\n this.props.onChange({picUrl: url});\n };\n\n changeCategories: (arg1: any) => void = (categories) => {\n let n = categories.length;\n if (this.props.type === \"histogram\") {\n // Histograms with n labels/categories have n - 1 buckets\n n--;\n }\n const value = this.props.scaleY;\n\n this.props.onChange({\n categories: categories,\n correct: padArray(this.props.correct, n, value),\n starting: padArray(this.props.starting, n, value),\n });\n };\n\n changeScale: (arg1: any) => void = (e) => {\n const oldScale = this.props.scaleY;\n // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n const newScale = +e.target.value || editorDefaults.scaleY;\n\n const scale = function (value: any) {\n return (value * newScale) / oldScale;\n };\n\n const maxY = scale(this.props.maxY);\n\n this.props.onChange({\n scaleY: newScale,\n maxY: maxY,\n correct: this.props.correct.map(scale),\n starting: this.props.starting.map(scale),\n });\n\n // @ts-expect-error - TS2531 - Object is possibly 'null'. | TS2339 - Property 'value' does not exist on type 'Element | Text'.\n ReactDOM.findDOMNode(this.refs.maxY).value = maxY;\n };\n\n changeMax: (arg1: any) => void = (e) => {\n this.props.onChange({\n // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n maxY: +e.target.value || editorDefaults.maxY,\n });\n };\n\n changeSnaps: (arg1: any) => void = (e) => {\n this.props.onChange({\n // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n snapsPerLine: +e.target.value || editorDefaults.snapsPerLine,\n });\n };\n\n changeEditing: (arg1: EditingState) => void = (editing) => {\n this.setState({editing: editing});\n };\n\n setCategoriesFromScale: () => void = () => {\n const scale = this.state.tickStep || 1;\n const min = this.state.minX || 0;\n const max = this.state.maxX || 0;\n const length = Math.floor((max - min) / scale) * scale;\n\n let categories;\n if (this.props.type === \"histogram\" || this.props.type === \"dotplot\") {\n // Ranges for histogram and dotplot labels should start at zero\n categories = _.range(0, length + scale, scale);\n } else {\n categories = _.range(scale, length + scale, scale);\n }\n\n categories = categories.map((num) => num + min);\n categories = categories.map(formatNumber);\n\n this.changeCategories(categories);\n\n const node = ReactDOM.findDOMNode(this.refs.categories);\n\n // @ts-expect-error - TS2531 - Object is possibly 'null'. | TS2339 - Property 'value' does not exist on type 'Element | Text'.\n node.value = categories.join(\", \");\n };\n\n serialize: () => any = () => {\n const json = _.pick(\n this.props,\n \"correct\",\n \"starting\",\n \"type\",\n \"labels\",\n \"categories\",\n \"scaleY\",\n \"maxY\",\n \"snapsPerLine\",\n \"labelInterval\",\n );\n\n if (this.props.type === \"pic\") {\n // @ts-expect-error - TS2339 - Property 'picUrl' does not exist on type 'Pick<Readonly<any> & Readonly<{ children?: ReactNode; }>, \"type\" | \"correct\" | \"labels\" | \"categories\" | \"starting\" | \"scaleY\" | \"maxY\" | \"snapsPerLine\" | \"labelInterval\">'.\n json.picUrl = this.props.picUrl;\n }\n\n return json;\n };\n\n render(): React.ReactNode {\n const setFromScale = [\"line\", \"histogram\", \"dotplot\"].includes(\n this.props.type,\n );\n const canChangeSnaps = ![\"pic\", \"dotplot\"].includes(this.props.type);\n const plotterProps = {\n options: {\n type: this.props.type,\n labels: this.props.labels,\n categories: this.props.categories,\n scaleY: this.props.scaleY,\n maxY: this.props.maxY,\n snapsPerLine: this.props.snapsPerLine,\n picUrl: this.props.picUrl,\n picSize: this.props.picSize,\n picBoxHeight: this.props.picBoxHeight,\n plotDimensions: this.props.plotDimensions,\n labelInterval: this.props.labelInterval,\n starting: this.props[this.state.editing],\n },\n apiOptions: this.props.apiOptions,\n static: this.props.static,\n trackInteraction: () => {},\n userInput: this.props.correct,\n handleUserInput: (userInput: number[]) => {\n this.props.onChange({correct: userInput});\n },\n };\n\n return (\n <div className=\"perseus-widget-plotter-editor\">\n <div>\n Chart type:{\" \"}\n {plotterPlotTypes.map((type) => {\n return (\n <label key={type}>\n <input\n type=\"radio\"\n name=\"chart-type\"\n checked={this.props.type === type}\n onChange={_.partial(this.changeType, type)}\n />\n {type}\n </label>\n );\n }, this)}\n </div>\n <div>\n Labels:{\" \"}\n {[\"x\", \"y\"].map((axis, i) => {\n return (\n <label key={axis}>\n {axis + \":\"}\n <input\n type=\"text\"\n onChange={_.partial(this.changeLabel, i)}\n defaultValue={this.props.labels[i]}\n />\n </label>\n );\n }, this)}\n </div>\n\n {setFromScale && (\n <div className=\"set-from-scale-box\">\n <span className=\"categories-title\">\n Set Categories From Scale\n </span>\n <div>\n <label>\n Tick Step:{\" \"}\n <NumberInput\n placeholder={1}\n useArrowKeys={true}\n value={this.state.tickStep}\n onChange={this.handleChangeTickStep}\n />\n </label>\n <InfoTip>\n <p>The difference between adjacent ticks.</p>\n </InfoTip>\n </div>\n <div>\n <label>\n Range:{\" \"}\n <RangeInput\n placeholder={[0, 10]}\n useArrowKeys={true}\n value={[this.state.minX, this.state.maxX]}\n onChange={this.handleChangeRange}\n />\n </label>\n </div>\n <div>\n <button onClick={this.setCategoriesFromScale}>\n Set Categories{\" \"}\n </button>\n </div>\n </div>\n )}\n <div>\n <label>\n Label Interval:{\" \"}\n <NumberInput\n useArrowKeys={true}\n value={this.props.labelInterval}\n onChange={this.changeLabelInterval}\n />\n </label>\n <InfoTip>\n <p>\n Which ticks to display the labels for. For instance,\n setting this to &quot;4&quot; will only show every\n 4th label (plus the last one)\n </p>\n </InfoTip>\n </div>\n {this.props.type === \"pic\" && (\n <div>\n <label>\n Picture:{\" \"}\n <BlurInput\n className=\"pic-url\"\n value={this.props.picUrl ?? \"\"}\n onChange={this.changePicUrl}\n />\n <InfoTip>\n <p>\n Use the default picture of Earth, or insert\n the URL for a different picture using the\n &quot;Add image&quot; function.\n </p>\n </InfoTip>\n </label>\n {this.state.pic &&\n this.state.pic.width !== this.state.pic.height && (\n <p className=\"warning\">\n <b>Warning</b>: You are using a picture\n which is not square. This means the image\n will get distorted. You should probably crop\n it to be square.\n </p>\n )}\n </div>\n )}\n <div>\n <label>\n Categories:{\" \"}\n <TextListEditor\n ref=\"categories\"\n layout=\"horizontal\"\n options={this.props.categories}\n onChange={this.changeCategories}\n />\n </label>\n </div>\n <div>\n <label>\n Scale (y):{\" \"}\n <input\n type=\"text\"\n onChange={this.changeScale}\n defaultValue={this.props.scaleY}\n />\n </label>\n </div>\n <div>\n <label>\n Max y:{\" \"}\n <input\n type=\"text\"\n ref=\"maxY\"\n onChange={this.changeMax}\n defaultValue={this.props.maxY}\n />\n </label>\n </div>\n {canChangeSnaps && (\n <div>\n <label>\n Snaps per line:{\" \"}\n <input\n type=\"text\"\n onChange={this.changeSnaps}\n defaultValue={this.props.snapsPerLine}\n />\n </label>\n <InfoTip>\n <p>\n Creates the specified number of divisions\n between the horizontal lines. Fewer snaps\n between lines makes the graph easier for the\n student to create correctly.\n </p>\n </InfoTip>\n </div>\n )}\n <div>\n Editing values:{\" \"}\n {editingStates.map((editing) => (\n <label key={editing}>\n <input\n type=\"radio\"\n disabled={\n editing === CORRECT && this.props.static\n }\n checked={\n this.props.static\n ? editing === STARTING\n : this.state.editing === editing\n }\n onChange={(e) => this.changeEditing(editing)}\n />\n {editing}\n </label>\n ))}\n <InfoTip>\n <p>\n Use this toggle to switch between editing the\n correct answer (what the student will be graded on)\n and the starting values (what the student will see\n plotted when they start the problem). Note: These\n cannot be the same.\n </p>\n <p>\n In static mode, the starting values are rendered out\n to the displayed widget.\n </p>\n </InfoTip>\n </div>\n {/* eslint-disable-next-line no-restricted-syntax */}\n <Plotter {...(plotterProps as PropsFor<typeof Plotter>)} />\n </div>\n );\n }\n}\n\nexport default PlotterEditor;\n","import {components} from \"@khanacademy/perseus\";\nimport {pythonProgramLogic} from \"@khanacademy/perseus-core\";\nimport * as React from \"react\";\n\nimport {deprecatedChangeableChange} from \"../../mixins/changeable\";\n\nimport type {ChangeableProps} from \"../../mixins/changeable\";\nimport type {PerseusPythonProgramWidgetOptions} from \"@khanacademy/perseus-core\";\n\nconst {NumberInput, TextInput} = components;\n\ntype Props = ChangeableProps & {\n programID: string;\n height: number;\n};\n\nexport function validateOptions(\n height: Props[\"height\"],\n programID: Props[\"programID\"],\n): ReadonlyArray<string> {\n const errors: Array<string> = [];\n\n if (programID === \"\") {\n errors.push(\"The program ID is required.\");\n }\n\n if (!Number.isInteger(height) || height < 1) {\n errors.push(\"The height must be a positive integer.\");\n }\n\n return errors;\n}\n\n// JSDoc will be shown in Storybook widget editor description\n/**\n * An editor for adding a Python program widget that allows users to write, edit and execute Python code.\n */\nclass PythonProgramEditor extends React.Component<Props> {\n static defaultProps: PerseusPythonProgramWidgetOptions =\n pythonProgramLogic.defaultWidgetOptions;\n\n change: (...args: ReadonlyArray<unknown>) => any = (...args) => {\n // @ts-expect-error - TS2345 - Argument of type 'readonly unknown[]' is not assignable to parameter of type 'any[]'.\n return deprecatedChangeableChange.apply(this, args);\n };\n\n serialize(): PerseusPythonProgramWidgetOptions {\n return {\n programID: this.props.programID,\n height: this.props.height,\n };\n }\n\n // TODO(LEMS-3643): Remove `getSaveWarnings` once the frontend uses\n // the new linter rules for save warnings.\n // Remove `validateOptions` since it's already being tested\n // within the linter code.\n getSaveWarnings: () => ReadonlyArray<string> = () => {\n return validateOptions(this.props.height, this.props.programID);\n };\n\n render(): React.ReactNode {\n return (\n <div>\n <label>\n User Program ID:{\" \"}\n <TextInput\n value={this.props.programID}\n onChange={this.change(\"programID\")}\n placeholder=\"123\"\n />\n </label>\n <br />\n <label>\n Height:{\" \"}\n <NumberInput\n value={this.props.height}\n onChange={this.change(\"height\")}\n placeholder=\"400\"\n />\n </label>\n </div>\n );\n }\n}\n\nexport default PythonProgramEditor;\n","import {Util} from \"@khanacademy/perseus\";\nimport Button from \"@khanacademy/wonder-blocks-button\";\nimport {TextArea} from \"@khanacademy/wonder-blocks-form\";\nimport {LabeledField} from \"@khanacademy/wonder-blocks-labeled-field\";\nimport {semanticColor, sizing} from \"@khanacademy/wonder-blocks-tokens\";\nimport {BodyText} from \"@khanacademy/wonder-blocks-typography\";\nimport trashIcon from \"@phosphor-icons/core/bold/trash-bold.svg\";\nimport * as React from \"react\";\n\nimport ImagePreview from \"../../components/image-preview\";\n\nimport styles from \"./radio-editor.module.css\";\n\n// Flexible props to work for both the \"add image\" tile and\n// the \"edit image\" accordion cases.\ninterface RadioImageEditorProps {\n imageUrl: string;\n imageAltText: string;\n onSave: (imageUrl: string, imageAltText: string) => void;\n onDelete: () => void;\n editingDisabled?: boolean;\n}\n\nexport default function RadioImageEditor({\n imageUrl,\n imageAltText,\n onSave,\n onDelete,\n editingDisabled = false,\n}: RadioImageEditorProps): React.ReactElement {\n const uniqueId = React.useId();\n const imageUrlTextAreaId = `${uniqueId}-image-url-textarea`;\n const imageAltTextTextAreaId = `${uniqueId}-image-alt-text-textarea`;\n\n const [stateImageUrl, setStateImageUrl] = React.useState<string>(imageUrl);\n\n // Dimensions are needed to keep the preview from overflowing its\n // container.\n const [dimensions, setDimensions] = React.useState<{\n width?: number;\n height?: number;\n }>({});\n\n // Fetch the image's dimensions whenever its URL changes. Editing alt text\n // doesn't touch `imageUrl`, so typing alt text never triggers a re-fetch.\n React.useEffect(() => {\n if (!imageUrl) {\n setDimensions({});\n return;\n }\n\n // The `cancelled` flag guards against a stale async write.\n // Since content authors can edit the image URL while the image\n // dimensions are still being fetched, we need to guard against\n // saving stale dimensions.\n //\n // Example:\n //\n // 1. `imageUrl` is changed to \"A.png\". The effect runs, creates a\n // new `cancelled` flag (let's call it cancelledA = false), and\n // runs `fetchDimensions()`. That function awaits `getImageSizeModern`,\n // which loads the image over the network. This can take a while,\n // so the function suspends mid-flight with the await still pending.\n // 2. Before \"A.png\" finishes loading, `imageUrl` changes again to\n // \"B.png\" (e.g. the author edits the URL and blurs the field).\n // React first runs the previous effect's cleanup (setting\n // cancelledA = true) then runs the effect again with a brand-new\n // `cancelled` flag (cancelledB = false) and a second in-flight\n // `fetchDimensions()`.\n // 3. \"A.png\" finally loads and its `await` resolves, resuming the\n // first `fetchDimensions()`. It checks its own `cancelled`\n // (cancelledA), sees `true`, and skips `setDimensions`. Without\n // this check, it would overwrite the dimensions with the stale\n // \"A.png\" size, even though the preview now shows \"B.png\".\n let cancelled = false;\n async function fetchDimensions() {\n try {\n const size = await Util.getImageSizeModern(imageUrl);\n if (!cancelled) {\n setDimensions({width: size[0], height: size[1]});\n }\n } catch (error) {\n // If we can't get dimensions, render without them.\n if (!cancelled) {\n setDimensions({});\n }\n }\n }\n\n void fetchDimensions();\n\n // Cleanup function\n return () => {\n cancelled = true;\n };\n }, [imageUrl]);\n\n return (\n <>\n {/* Preview */}\n {imageUrl ? (\n <LabeledField\n label=\"Preview\"\n field={\n <ImagePreview\n src={imageUrl}\n alt={`Preview: ${imageAltText}`}\n width={dimensions.width}\n height={dimensions.height}\n />\n }\n // TODO(LEMS-3686): Use CSS modules after Wonder Blocks\n // styles are moved to a different layer.\n styles={{root: {marginBlockEnd: sizing.size_160}}}\n />\n ) : (\n <BodyText\n // TODO(LEMS-3686): Use CSS modules after Wonder Blocks\n // styles are moved to a different layer.\n style={{\n color: semanticColor.core.foreground.critical.default,\n marginBlockEnd: sizing.size_160,\n }}\n >\n Missing image URL\n </BodyText>\n )}\n\n {/* Image URL textarea */}\n <BodyText\n size=\"small\"\n weight=\"bold\"\n tag=\"label\"\n htmlFor={imageUrlTextAreaId}\n style={{marginBlockEnd: sizing.size_040}}\n >\n Image URL\n </BodyText>\n <TextArea\n id={imageUrlTextAreaId}\n value={stateImageUrl}\n placeholder=\"cdn.kastatic.org/...\"\n onChange={setStateImageUrl}\n onBlur={() => onSave(stateImageUrl, imageAltText)}\n style={{marginBlockEnd: sizing.size_080}}\n autoResize={true}\n disabled={editingDisabled}\n />\n\n {/* Image Alt Text textarea */}\n <BodyText\n size=\"small\"\n weight=\"bold\"\n tag=\"label\"\n htmlFor={imageAltTextTextAreaId}\n style={{marginBlockEnd: sizing.size_040}}\n >\n Image Alt Text\n </BodyText>\n <TextArea\n id={imageAltTextTextAreaId}\n value={imageAltText}\n placeholder=\"Example: Graph of a linear function...\"\n onChange={(value) => onSave(imageUrl, value)}\n autoResize={true}\n disabled={editingDisabled}\n />\n\n {/* Delete button */}\n <span className={styles.buttonRow}>\n <Button\n size=\"small\"\n kind=\"tertiary\"\n startIcon={trashIcon}\n style={{alignSelf: \"flex-start\"}}\n onClick={onDelete}\n disabled={editingDisabled}\n >\n Delete this image\n </Button>\n </span>\n </>\n );\n}\n","import {PerseusMarkdown} from \"@khanacademy/perseus\";\n\nimport type {ChoiceMovementType} from \"./radio-option-settings-actions\";\nimport type {PerseusRadioChoice} from \"@khanacademy/perseus-core\";\n\n// Minimal type for markdown AST nodes used in traverseContent callback\n// The upstream traverseContent uses `any`, so we define what we need here\ntype MarkdownNode = {\n type: string;\n target?: string;\n alt?: string;\n};\n\nexport function getMovedChoices(\n choices: PerseusRadioChoice[],\n hasNoneOfTheAbove: boolean,\n choiceIndex: number,\n movement: ChoiceMovementType,\n): PerseusRadioChoice[] {\n const newChoices = [...choices];\n const [removedChoice] = newChoices.splice(choiceIndex, 1);\n\n switch (movement) {\n case \"top\":\n // No need to move the first choice to the top since it's already there.\n if (choiceIndex === 0) {\n return choices;\n }\n\n // Move the removed choice to the beginning/top of the array.\n newChoices.unshift(removedChoice);\n break;\n case \"up\":\n // No need to move the first choice up since it's already at the top.\n if (choiceIndex === 0) {\n return choices;\n }\n\n // Move the removed choice to the position before its current index.\n newChoices.splice(choiceIndex - 1, 0, removedChoice);\n break;\n case \"down\":\n // No need to move the last choice down since it's already at the bottom.\n if (choiceIndex === choices.length - 1) {\n return choices;\n }\n\n // If the current choice is the second to last choice and the\n // last choice is \"None of the above\", we don't want to move\n // the current choice down. Keep the \"None of the above\" choice\n // as the last choice.\n if (choiceIndex === choices.length - 2 && hasNoneOfTheAbove) {\n return choices;\n }\n\n // Move the removed choice to the position after its current index.\n newChoices.splice(choiceIndex + 1, 0, removedChoice);\n break;\n case \"bottom\":\n // No need to move the last choice to the bottom since it's already there.\n if (choiceIndex === choices.length - 1) {\n return choices;\n }\n\n // If the last choice is \"None of the above\", we don't want to move\n // the current choice to the bottom. Keep the \"None of the above\"\n // choice as the last choice, and move the current choice to the\n // second to last position.\n if (hasNoneOfTheAbove) {\n const removedNoneOfTheAbove = newChoices.pop();\n newChoices.push(removedChoice);\n\n if (removedNoneOfTheAbove) {\n newChoices.push(removedNoneOfTheAbove);\n }\n } else {\n newChoices.push(removedChoice);\n }\n break;\n }\n\n return newChoices;\n}\n\n// Take the hard-to-read image markdown, and replace\n// it with an easy-to-read proxy.\n// ex. \"![abc](https://...) -> \"![Image 1]\"\nexport function setImageProxyFromMarkdownContent(\n markdownContent: string,\n): [string, {url: string; altText: string}[]] {\n const images: {url: string; altText: string}[] = [];\n\n // Parse the markdown content using perseus-markdown.\n const parsedMarkdown = PerseusMarkdown.parse(markdownContent, {});\n\n // Find all image nodes in the parsed tree.\n PerseusMarkdown.traverseContent(parsedMarkdown, (node: MarkdownNode) => {\n if (node.type === \"image\") {\n images.push({\n url: node.target || \"\",\n altText: node.alt || \"\",\n });\n }\n });\n\n // Replace images with easy-to-read proxies\n let proxiedContent = markdownContent;\n images.forEach((image, index) => {\n // Build the original markdown pattern to replace\n const originalPattern = `![${image.altText}](${image.url})`;\n const replacement = `![Image ${index + 1}]`;\n\n // Replace only the first occurrence to handle identical images correctly\n const patternIndex = proxiedContent.indexOf(originalPattern);\n if (patternIndex !== -1) {\n proxiedContent =\n proxiedContent.substring(0, patternIndex) +\n replacement +\n proxiedContent.substring(patternIndex + originalPattern.length);\n }\n });\n\n return [proxiedContent, images];\n}\n\n// Take proxied content, and replace it with how the original markdown\n// content would be saved.\n// ex. \"![Image 1]\" -> \"![URL](alt text)\"\nexport function setMarkdownContentFromImageProxy(\n proxiedContent: string,\n images: {url: string; altText: string}[],\n) {\n let markdownContent = proxiedContent;\n for (let i = 0; i < images.length; i++) {\n const image = images[i];\n markdownContent = markdownContent.replace(\n `![Image ${i + 1}]`,\n `![${image.altText}](${image.url})`,\n );\n }\n\n return markdownContent;\n}\n","import Button from \"@khanacademy/wonder-blocks-button\";\nimport {TextArea} from \"@khanacademy/wonder-blocks-form\";\nimport {semanticColor, sizing} from \"@khanacademy/wonder-blocks-tokens\";\nimport {BodyText} from \"@khanacademy/wonder-blocks-typography\";\nimport plusIcon from \"@phosphor-icons/core/bold/plus-bold.svg\";\nimport * as React from \"react\";\n\nimport PerseusEditorAccordion from \"../../components/perseus-editor-accordion\";\n\nimport RadioImageEditor from \"./radio-image-editor\";\nimport {\n setMarkdownContentFromImageProxy,\n setImageProxyFromMarkdownContent,\n} from \"./utils\";\n\ninterface Props {\n isNoneOfTheAbove: boolean;\n content: string;\n choiceIndex: number;\n onContentChange: (choiceIndex: number, content: string) => void;\n editingDisabled?: boolean;\n}\n\nexport interface RadioOptionContentAndImageEditorHandle {\n focus: () => void;\n}\n\nexport const RadioOptionContentAndImageEditor = React.forwardRef<\n RadioOptionContentAndImageEditorHandle,\n Props\n>(function RadioOptionContentAndImageEditor(props, ref) {\n const {\n content,\n choiceIndex,\n onContentChange,\n isNoneOfTheAbove,\n editingDisabled = false,\n } = props;\n const uniqueId = React.useId();\n const contentTextAreaId = `${uniqueId}-content-textarea`;\n const textAreaRef = React.useRef<HTMLTextAreaElement>(null);\n\n // Expose focus method to parent components\n React.useImperativeHandle(ref, () => ({\n focus: () => {\n textAreaRef.current?.focus();\n },\n }));\n\n // States for updating content and images\n const [proxiedContent, setProxiedContent] = React.useState<string>(\"\");\n const [images, setImages] = React.useState<\n {url: string; altText: string}[]\n >([]);\n\n // Parse the content into easy-to-read proxies plus the list of images.\n // This is cheap and synchronous; image dimensions are fetched per-image\n // inside RadioImageEditor, keyed on the URL.\n React.useEffect(() => {\n const [proxiedContent, parsedImages] = setImageProxyFromMarkdownContent(\n content ?? \"\",\n );\n setProxiedContent(proxiedContent);\n setImages(parsedImages);\n }, [content]);\n\n // Add the image markdown at the end of the content.\n const handleAddImage = (\n choiceIndex: number,\n imageUrl: string,\n imageAltText: string,\n ) => {\n const newContent = `${content}\\n![${imageAltText}](${imageUrl})`;\n onContentChange(choiceIndex, newContent);\n };\n\n const handleDeleteImage = (imageIndex: number) => {\n const substr = `![Image ${imageIndex + 1}]`;\n const newProxiedContent = proxiedContent.replace(substr, \"\");\n setProxiedContent(newProxiedContent);\n\n const newContent = setMarkdownContentFromImageProxy(\n newProxiedContent,\n images,\n );\n onContentChange(choiceIndex, newContent);\n };\n\n const handleUpdateImage = (\n imageIndex: number,\n url: string,\n altText: string,\n ) => {\n const newImages = [...images];\n newImages[imageIndex] = {url, altText};\n setImages(newImages);\n\n const newContent = setMarkdownContentFromImageProxy(\n proxiedContent,\n newImages,\n );\n\n onContentChange(choiceIndex, newContent);\n };\n\n const handleContentChange = (\n choiceIndex: number,\n newProxiedContent: string,\n ) => {\n setProxiedContent(newProxiedContent);\n\n const newContent = setMarkdownContentFromImageProxy(\n newProxiedContent,\n images,\n );\n onContentChange(choiceIndex, newContent);\n };\n\n const handlePaste = (e: React.ClipboardEvent<HTMLTextAreaElement>) => {\n const imageURL = e.clipboardData.getData(\"text\");\n if (\n imageURL.includes(\"cdn.kastatic.org\") ||\n imageURL.includes(\"graphie\")\n ) {\n e.preventDefault();\n handleAddImage(choiceIndex, imageURL, \"\");\n }\n };\n\n const handleDeleteImageConfirmation = (imageIndex: number) => {\n if (\n // eslint-disable-next-line no-alert\n window.confirm(\"Are you sure you want to delete this image?\")\n ) {\n handleDeleteImage(imageIndex);\n }\n };\n\n if (isNoneOfTheAbove) {\n return (\n <>\n <BodyText\n size=\"small\"\n weight=\"bold\"\n tag=\"label\"\n htmlFor={contentTextAreaId}\n >\n Content\n </BodyText>\n <TextArea\n id={contentTextAreaId}\n value=\"None of the above\"\n disabled={true}\n onChange={() => {}}\n autoResize={true}\n />\n </>\n );\n }\n\n return (\n <>\n {/* Content textarea */}\n <BodyText\n weight=\"bold\"\n size=\"small\"\n tag=\"label\"\n htmlFor={contentTextAreaId}\n style={{marginBlockEnd: sizing.size_040}}\n >\n Content\n </BodyText>\n <TextArea\n id={contentTextAreaId}\n ref={textAreaRef}\n value={proxiedContent}\n placeholder=\"Type a choice here...\"\n onChange={(value) => {\n handleContentChange(choiceIndex, value);\n }}\n onPaste={handlePaste}\n autoResize={true}\n disabled={editingDisabled}\n />\n\n {/* Add image button */}\n <Button\n startIcon={plusIcon}\n size=\"small\"\n kind=\"tertiary\"\n style={{alignSelf: \"flex-start\"}}\n onClick={() => {\n handleAddImage(choiceIndex, \"\", \"\");\n }}\n disabled={editingDisabled}\n >\n Add image\n </Button>\n\n {/* Image editor accordions */}\n {images?.map((image, imageIndex) => (\n <PerseusEditorAccordion\n key={`${imageIndex}-${image.url}`}\n header={`Image ${imageIndex + 1}`}\n expanded={true}\n containerStyle={{\n // White to contrast with the blue choice tile.\n backgroundColor:\n semanticColor.core.background.base.default,\n marginBlockStart: sizing.size_040,\n marginBlockEnd: sizing.size_040,\n }}\n panelStyle={{\n // Set the bottom padding to match the side padding.\n paddingBlockEnd: sizing.size_120,\n }}\n >\n <RadioImageEditor\n imageUrl={image.url}\n imageAltText={image.altText}\n onSave={(imageUrl, imageAltText) => {\n handleUpdateImage(\n imageIndex,\n imageUrl,\n imageAltText,\n );\n }}\n onDelete={() => {\n handleDeleteImageConfirmation(imageIndex);\n }}\n editingDisabled={editingDisabled}\n />\n </PerseusEditorAccordion>\n )) ?? null}\n </>\n );\n});\n","import Button from \"@khanacademy/wonder-blocks-button\";\nimport IconButton from \"@khanacademy/wonder-blocks-icon-button\";\nimport {Spring} from \"@khanacademy/wonder-blocks-layout\";\nimport caretDoubleDownIcon from \"@phosphor-icons/core/bold/caret-double-down-bold.svg\";\nimport caretDoubleUpIcon from \"@phosphor-icons/core/bold/caret-double-up-bold.svg\";\nimport caretDownIcon from \"@phosphor-icons/core/bold/caret-down-bold.svg\";\nimport caretUpIcon from \"@phosphor-icons/core/bold/caret-up-bold.svg\";\nimport trashIcon from \"@phosphor-icons/core/bold/trash-bold.svg\";\nimport * as React from \"react\";\n\nimport styles from \"./radio-editor.module.css\";\n\nexport type ChoiceMovementType = \"up\" | \"down\" | \"top\" | \"bottom\";\n\ninterface RadioOptionSettingsActionsProps {\n content: string;\n showDelete: boolean;\n showMove: boolean;\n onDelete: () => void;\n onMove: (movement: ChoiceMovementType) => void;\n editingDisabled: boolean;\n}\n\nexport function RadioOptionSettingsActions({\n content,\n showDelete,\n showMove,\n onDelete,\n onMove,\n editingDisabled,\n}: RadioOptionSettingsActionsProps) {\n return (\n <div className={styles.radioOptionActionsContainer}>\n {showDelete && (\n <Button\n size=\"small\"\n kind=\"tertiary\"\n startIcon={trashIcon}\n onClick={() => {\n if (\n // eslint-disable-next-line no-alert\n window.confirm(\n `Are you sure you want to remove this choice? \\n\\n${content}`,\n )\n ) {\n onDelete();\n }\n }}\n disabled={editingDisabled}\n >\n Remove\n </Button>\n )}\n\n {showMove && (\n <>\n <Spring />\n\n <IconButton\n icon={caretDoubleUpIcon}\n kind=\"tertiary\"\n size=\"xsmall\"\n aria-label=\"Move choice to the top\"\n onClick={() => onMove(\"top\")}\n disabled={editingDisabled}\n />\n <IconButton\n icon={caretUpIcon}\n kind=\"tertiary\"\n size=\"xsmall\"\n aria-label=\"Move choice up\"\n onClick={() => onMove(\"up\")}\n disabled={editingDisabled}\n />\n <IconButton\n icon={caretDownIcon}\n kind=\"tertiary\"\n size=\"xsmall\"\n aria-label=\"Move choice down\"\n onClick={() => onMove(\"down\")}\n disabled={editingDisabled}\n />\n <IconButton\n icon={caretDoubleDownIcon}\n kind=\"tertiary\"\n size=\"xsmall\"\n aria-label=\"Move choice to the bottom\"\n onClick={() => onMove(\"bottom\")}\n disabled={editingDisabled}\n />\n </>\n )}\n </div>\n );\n}\n","import {StatusBadge} from \"@khanacademy/wonder-blocks-badge\";\nimport {PhosphorIcon} from \"@khanacademy/wonder-blocks-icon\";\nimport {border, semanticColor, sizing} from \"@khanacademy/wonder-blocks-tokens\";\nimport checkIcon from \"@phosphor-icons/core/bold/check-bold.svg\";\nimport minusCircleIcon from \"@phosphor-icons/core/bold/minus-circle-bold.svg\";\nimport * as React from \"react\";\n\nimport type {StyleType} from \"@khanacademy/wonder-blocks-core\";\n\ninterface RadioStatusPillProps {\n index: number;\n correct?: boolean;\n multipleSelect: boolean;\n}\n\n// Passed to StatusBadge's `styles` prop.\n// Uses a fixed-width box so the A/B/C indicators\n// stay aligned; `cursor: default` since the badge is read-only.\nconst boxStyle: StyleType = {\n width: sizing.size_560,\n justifyContent: \"center\",\n boxSizing: \"border-box\",\n cursor: \"default\",\n};\nconst roundStyle: StyleType = {borderRadius: sizing.size_240};\nconst squareStyle: StyleType = {borderRadius: border.radius.radius_040};\n// Styles matching the runtime choice indicator.\nconst correctStrongStyle: StyleType = {\n backgroundColor: semanticColor.core.background.success.strong,\n borderColor: semanticColor.core.border.success.strong,\n};\nconst knockoutForegroundStyle: StyleType = {\n color: semanticColor.core.foreground.knockout.default,\n};\n\n/**\n * * A read-only status indicator showing whether a choice is correct or incorrect,\n * labeled with the choice letter (A, B, C...). Status is changed via the\n * adjacent segmented control.\n */\nexport function RadioStatusPill({\n index,\n correct,\n multipleSelect,\n}: RadioStatusPillProps) {\n return (\n <StatusBadge\n kind={correct ? \"success\" : \"critical\"}\n icon={\n <PhosphorIcon\n size=\"small\"\n icon={correct ? checkIcon : minusCircleIcon}\n />\n }\n label={String.fromCharCode(65 + index)}\n styles={{\n // Round for single select, square for multiple select.\n root: [\n boxStyle,\n multipleSelect ? squareStyle : roundStyle,\n correct && correctStrongStyle,\n ],\n label: correct && knockoutForegroundStyle,\n icon: correct && knockoutForegroundStyle,\n }}\n />\n );\n}\n","import {TextArea} from \"@khanacademy/wonder-blocks-form\";\nimport {sizing} from \"@khanacademy/wonder-blocks-tokens\";\nimport {BodyText} from \"@khanacademy/wonder-blocks-typography\";\nimport * as React from \"react\";\n\nimport {SegmentedControl} from \"../../components/segmented-control\";\n\nimport styles from \"./radio-editor.module.css\";\nimport {RadioOptionContentAndImageEditor} from \"./radio-option-content-and-image-editor\";\nimport {RadioOptionSettingsActions} from \"./radio-option-settings-actions\";\nimport {RadioStatusPill} from \"./radio-status-pill\";\n\nimport type {RadioOptionContentAndImageEditorHandle} from \"./radio-option-content-and-image-editor\";\nimport type {ChoiceMovementType} from \"./radio-option-settings-actions\";\nimport type {PerseusRadioChoice} from \"@khanacademy/perseus-core\";\n\nexport type RadioOptionSettingsHandle = {\n focus: () => void;\n};\n\ninterface RadioOptionSettingsProps {\n index: number;\n choice: PerseusRadioChoice;\n multipleSelect: boolean;\n onStatusChange: (choiceIndex: number, correct: boolean) => void;\n onContentChange: (choiceIndex: number, content: string) => void;\n onRationaleChange: (choiceIndex: number, rationale: string) => void;\n showDelete: boolean;\n showMove: boolean;\n onDelete: () => void;\n onMove: (choiceIndex: number, movement: ChoiceMovementType) => void;\n editingDisabled: boolean;\n}\n\nexport const RadioOptionSettings = React.forwardRef<\n RadioOptionSettingsHandle,\n RadioOptionSettingsProps\n>(function RadioOptionSettings(\n {\n index,\n choice,\n multipleSelect,\n onStatusChange,\n onContentChange,\n onRationaleChange,\n showDelete,\n showMove,\n onDelete,\n onMove,\n editingDisabled,\n },\n ref,\n) {\n const {content, rationale, correct, isNoneOfTheAbove} = choice;\n const uniqueId = React.useId();\n const rationaleTextAreaId = `${uniqueId}-rationale-textarea`;\n const contentEditorRef =\n React.useRef<RadioOptionContentAndImageEditorHandle>(null);\n\n // Forward focus to the content editor\n React.useImperativeHandle(ref, () => ({\n focus: () => {\n contentEditorRef.current?.focus();\n },\n }));\n\n return (\n <div className={styles.tile}>\n {/* Correct / Incorrect status selection */}\n <fieldset className=\"perseus-widget-row\">\n <div className={styles.statusRow}>\n <RadioStatusPill\n index={index}\n correct={correct}\n multipleSelect={multipleSelect}\n />\n <BodyText size=\"small\" weight=\"bold\" tag=\"span\">\n Status\n </BodyText>\n <SegmentedControl\n aria-label=\"Choice status\"\n selectedValue={correct ? \"correct\" : \"incorrect\"}\n onChange={(value) => {\n onStatusChange(index, value === \"correct\");\n }}\n options={[\n {value: \"correct\", label: \"Correct\"},\n {value: \"incorrect\", label: \"Incorrect\"},\n ]}\n disabled={editingDisabled}\n />\n </div>\n </fieldset>\n\n {/* Content and rationale text areas */}\n <RadioOptionContentAndImageEditor\n ref={contentEditorRef}\n content={content}\n choiceIndex={index}\n isNoneOfTheAbove={isNoneOfTheAbove ?? false}\n onContentChange={onContentChange}\n editingDisabled={editingDisabled}\n />\n\n <BodyText\n size=\"small\"\n weight=\"bold\"\n tag=\"label\"\n htmlFor={rationaleTextAreaId}\n style={{\n marginBlockStart: sizing.size_040,\n marginBlockEnd: sizing.size_040,\n }}\n >\n Rationale\n </BodyText>\n <TextArea\n id={rationaleTextAreaId}\n value={rationale ?? \"\"}\n placeholder={`Why is this choice ${correct ? \"correct\" : \"incorrect\"}?`}\n onChange={(value) => {\n onRationaleChange(index, value);\n }}\n autoResize={true}\n disabled={editingDisabled}\n />\n\n {/* Delete & reorder button */}\n <RadioOptionSettingsActions\n content={content}\n showDelete={showDelete}\n showMove={showMove}\n onDelete={onDelete}\n onMove={(movement) => onMove(index, movement)}\n editingDisabled={editingDisabled}\n />\n </div>\n );\n});\n","import {radioLogic, deriveNumCorrect} from \"@khanacademy/perseus-core\";\nimport Button from \"@khanacademy/wonder-blocks-button\";\nimport {sizing} from \"@khanacademy/wonder-blocks-tokens\";\nimport {BodyText} from \"@khanacademy/wonder-blocks-typography\";\nimport plusIcon from \"@phosphor-icons/core/bold/plus-bold.svg\";\nimport * as React from \"react\";\n\nimport LabeledSwitch from \"../../components/labeled-switch\";\n\nimport {RadioOptionSettings} from \"./radio-option-settings\";\nimport {getMovedChoices} from \"./utils\";\n\nimport type {RadioOptionSettingsHandle} from \"./radio-option-settings\";\nimport type {ChoiceMovementType} from \"./radio-option-settings-actions\";\nimport type {APIOptions} from \"@khanacademy/perseus\";\nimport type {\n PerseusRadioWidgetOptions,\n PerseusRadioChoice,\n} from \"@khanacademy/perseus-core\";\n\n// Exported for testing\nexport interface RadioEditorProps {\n apiOptions: APIOptions;\n countChoices: boolean;\n choices: PerseusRadioChoice[];\n randomize: boolean;\n hasNoneOfTheAbove: boolean;\n multipleSelect: boolean;\n deselectEnabled: boolean;\n\n onChange: (\n values: Partial<PerseusRadioWidgetOptions>,\n callback?: (() => void) | null,\n ) => void;\n}\n\n// JSDoc will be shown in Storybook widget editor description\n/**\n * An editor for adding a radio widget that allows users to select a single option from multiple choices.\n */\nclass RadioEditor extends React.Component<RadioEditorProps> {\n static bestPractices = {\n url: \"https://www.khanacademy.org/internal-courses/content-creation-best-practices/xe46daa512cd9c644:question-writing/xe46daa512cd9c644:multiple-choice/a/stems\",\n label: \"Multiple choice best practices\",\n };\n\n static defaultProps: PerseusRadioWidgetOptions =\n radioLogic.defaultWidgetOptions;\n\n // Store refs to each choice editor for focus management\n // Using choice.id as key ensures refs remain valid after reorder/delete\n choiceRefs: Map<string, React.RefObject<RadioOptionSettingsHandle>> =\n new Map();\n\n componentDidMount() {\n // Recalculate numCorrect when multipleSelect and countChoices are enabled\n // This ensures stale values are corrected on load\n if (this.props.multipleSelect && this.props.countChoices) {\n this.props.onChange({\n numCorrect: deriveNumCorrect(this.props.choices),\n });\n }\n\n // Check if any choices need IDs and generate them immediately\n const needsIdUpdate = this.props.choices.some(\n (choice) => !choice.id || choice.id.trim() === \"\",\n );\n\n if (needsIdUpdate) {\n const updatedChoices = this.props.choices.map((choice, index) => ({\n ...choice,\n id: this.ensureValidIds(choice.id, index),\n }));\n this.props.onChange({choices: updatedChoices});\n }\n }\n\n // Get or create a ref for a choice by its id\n getChoiceRef = (\n choiceId: string,\n ): React.RefObject<RadioOptionSettingsHandle> => {\n if (!this.choiceRefs.has(choiceId)) {\n this.choiceRefs.set(\n choiceId,\n React.createRef<RadioOptionSettingsHandle>(),\n );\n }\n return this.choiceRefs.get(choiceId)!;\n };\n\n // Called when the \"Multiple selections\" checkbox is toggled,\n // allowing the content author to specifiy multiple correct answers.\n onMultipleSelectChange: (options: {multipleSelect: boolean}) => void = (\n options,\n ) => {\n const isMultipleSelect = options.multipleSelect;\n\n // When switching to single-select mode, we want to deselect all\n // choices if more than one choice is currently selected as correct.\n let choices = this.props.choices;\n if (!isMultipleSelect) {\n const numCorrect = deriveNumCorrect(choices);\n if (numCorrect > 1) {\n choices = choices.map((choice) => {\n return {\n ...choice,\n correct: false,\n };\n });\n }\n }\n\n // Update with the recalculated numCorrect and choices\n this.props.onChange({\n multipleSelect: isMultipleSelect,\n choices,\n numCorrect: deriveNumCorrect(choices),\n });\n };\n\n // Called when the \"Specify number correct\" checkbox is toggled,\n // making it so that the title reads \"Choose [number] answers\"\n onCountChoicesChange: (options: {countChoices: boolean}) => void = (\n options,\n ) => {\n const countChoices = options.countChoices;\n this.props.onChange({\n countChoices,\n });\n };\n\n // Generate consistent choice IDs that match the parser format for existing content\n generateChoiceId = (index: number): string => {\n return `radio-choice-${index}`;\n };\n\n // Ensure all choices have valid non-empty IDs\n ensureValidIds = (choiceId: string, index: number): string => {\n if (!choiceId || choiceId.trim() === \"\") {\n return this.generateChoiceId(index);\n }\n return choiceId;\n };\n\n // Updates the `correct` values for each choice, as well as the new\n // `numCorrect` value as a result. Updates the props with the new values.\n onChange: (options: {checked: ReadonlyArray<boolean | undefined>}) => void =\n ({checked}) => {\n const choices = this.props.choices.map((choice, i) => {\n return {\n ...choice,\n correct: checked[i],\n content:\n choice.isNoneOfTheAbove && !checked[i]\n ? \"\"\n : choice.content,\n id: this.ensureValidIds(choice.id, i),\n };\n });\n\n this.props.onChange({\n choices,\n numCorrect: deriveNumCorrect(choices),\n });\n };\n\n // Called when there is a change to which choice(s) are correct to\n // calculate the new list of correct choices.\n // Calls `onChange` to update the props.\n onStatusChange: (choiceIndex: number, correct: boolean) => void = (\n choiceIndex,\n correct,\n ) => {\n // If we're checking a new answer and multiple-select is not on,\n // we should clear all choices to be unchecked. Otherwise, we should\n // copy the old checked values.\n let newCheckedList;\n\n if (correct && !this.props.multipleSelect) {\n newCheckedList = this.props.choices.map((_) => false);\n } else {\n newCheckedList = this.props.choices.map((c) => c.correct);\n }\n\n // Update these options' `correct` values.\n newCheckedList[choiceIndex] = correct;\n\n this.onChange({\n checked: newCheckedList,\n });\n };\n\n onContentChange: (choiceIndex: number, newContent: string) => void = (\n choiceIndex,\n newContent,\n ) => {\n const choices = [...this.props.choices];\n choices[choiceIndex] = {\n ...choices[choiceIndex],\n content: newContent,\n };\n this.props.onChange({choices: choices});\n };\n\n onRationaleChange: (choiceIndex: number, newRationale: string) => void = (\n choiceIndex,\n newRationale,\n ) => {\n const choices = [...this.props.choices];\n choices[choiceIndex] = {\n ...choices[choiceIndex],\n rationale: newRationale,\n };\n if (newRationale === \"\") {\n delete choices[choiceIndex].rationale;\n }\n this.props.onChange({choices: choices});\n };\n\n onDelete: (arg1: number) => void = (choiceIndex) => {\n const choices = this.props.choices.slice();\n const deleted = choices[choiceIndex];\n\n // Clean up the ref for the deleted choice\n this.choiceRefs.delete(deleted.id);\n\n choices.splice(choiceIndex, 1);\n\n this.props.onChange({\n choices,\n hasNoneOfTheAbove:\n this.props.hasNoneOfTheAbove && !deleted.isNoneOfTheAbove,\n numCorrect: deriveNumCorrect(choices),\n });\n };\n\n addChoice: (noneOfTheAbove: boolean, e: React.SyntheticEvent) => void = (\n noneOfTheAbove,\n e,\n ) => {\n e.preventDefault();\n\n const choices = this.props.choices.slice();\n const newChoice: PerseusRadioChoice = {\n isNoneOfTheAbove: noneOfTheAbove,\n content: \"\",\n id: crypto.randomUUID(),\n };\n const addIndex =\n choices.length - (this.props.hasNoneOfTheAbove ? 1 : 0);\n\n choices.splice(addIndex, 0, newChoice);\n\n this.props.onChange(\n {\n choices: choices,\n hasNoneOfTheAbove:\n noneOfTheAbove || this.props.hasNoneOfTheAbove,\n },\n () => {\n // Focus the newly added choice editor\n this.getChoiceRef(newChoice.id).current?.focus();\n },\n );\n };\n\n handleMove: (choiceIndex: number, movement: ChoiceMovementType) => void = (\n choiceIndex,\n movement,\n ) => {\n const newChoices = getMovedChoices(\n this.props.choices,\n this.props.hasNoneOfTheAbove,\n choiceIndex,\n movement,\n );\n\n this.props.onChange({choices: newChoices});\n };\n\n focus: () => boolean = () => {\n // Focus the first choice editor\n const firstChoice = this.props.choices[0];\n if (firstChoice?.id) {\n this.getChoiceRef(firstChoice.id).current?.focus();\n }\n return true;\n };\n\n // TODO(LEMS-3643): Remove `getSaveWarnings` once the frontend uses\n // the new linter rules for save warnings.\n getSaveWarnings: () => ReadonlyArray<string> = () => {\n if (!this.props.choices.some((choice) => choice.correct)) {\n return [\"No choice is marked as correct.\"];\n }\n return [];\n };\n\n serialize(): PerseusRadioWidgetOptions {\n const {\n choices,\n randomize,\n multipleSelect,\n countChoices,\n hasNoneOfTheAbove,\n deselectEnabled,\n } = this.props;\n\n return {\n choices,\n randomize,\n multipleSelect,\n countChoices,\n hasNoneOfTheAbove,\n deselectEnabled,\n numCorrect: deriveNumCorrect(choices),\n };\n }\n\n render(): React.ReactNode {\n const numCorrect = deriveNumCorrect(this.props.choices);\n const isEditingDisabled =\n this.props.apiOptions.editingDisabled ?? false;\n\n return (\n <div>\n <div className=\"perseus-widget-row\">\n <LabeledSwitch\n label=\"Randomize order\"\n checked={this.props.randomize}\n disabled={isEditingDisabled}\n onChange={(value) => {\n this.props.onChange({randomize: value});\n }}\n style={{marginBlockEnd: sizing.size_060}}\n />\n <LabeledSwitch\n label=\"Multiple selections\"\n checked={this.props.multipleSelect}\n disabled={isEditingDisabled}\n onChange={(value) => {\n this.onMultipleSelectChange({\n multipleSelect: value,\n });\n }}\n style={{marginBlockEnd: sizing.size_060}}\n />\n {this.props.multipleSelect && (\n <>\n <LabeledSwitch\n label=\"Specify number correct\"\n checked={this.props.countChoices}\n disabled={isEditingDisabled}\n onChange={(value) => {\n this.onCountChoicesChange({\n countChoices: value,\n });\n }}\n style={{marginBlockEnd: sizing.size_060}}\n />\n <BodyText size=\"xsmall\" tag=\"span\">\n Current number correct: {numCorrect}\n </BodyText>\n </>\n )}\n </div>\n\n {this.props.choices.map((choice, index) => (\n <RadioOptionSettings\n key={`choice-${choice.id}`}\n ref={this.getChoiceRef(choice.id)}\n index={index}\n choice={choice}\n multipleSelect={this.props.multipleSelect}\n onStatusChange={this.onStatusChange}\n onContentChange={this.onContentChange}\n onRationaleChange={this.onRationaleChange}\n showDelete={this.props.choices.length >= 2}\n showMove={\n this.props.choices.length > 1 &&\n !choice.isNoneOfTheAbove\n }\n onDelete={() => this.onDelete(index)}\n onMove={this.handleMove}\n editingDisabled={isEditingDisabled}\n />\n ))}\n\n <div className=\"add-choice-container\">\n <Button\n size=\"small\"\n kind=\"tertiary\"\n startIcon={plusIcon}\n onClick={this.addChoice.bind(this, false)}\n style={{marginInlineEnd: \"2.4rem\"}}\n disabled={isEditingDisabled}\n >\n Add a choice\n </Button>\n {!this.props.hasNoneOfTheAbove && (\n <Button\n size=\"small\"\n kind=\"tertiary\"\n startIcon={plusIcon}\n onClick={this.addChoice.bind(this, true)}\n disabled={isEditingDisabled}\n >\n None of the above\n </Button>\n )}\n </div>\n </div>\n );\n }\n}\n\nexport default RadioEditor;\n","import {View} from \"@khanacademy/wonder-blocks-core\";\nimport {TextField} from \"@khanacademy/wonder-blocks-form\";\nimport IconButton from \"@khanacademy/wonder-blocks-icon-button\";\nimport arrowDown from \"@phosphor-icons/core/regular/arrow-down.svg\";\nimport arrowUp from \"@phosphor-icons/core/regular/arrow-up.svg\";\nimport trash from \"@phosphor-icons/core/regular/trash.svg\";\nimport * as React from \"react\";\n\nimport styles from \"./card-editor.module.css\";\n\nimport type {StyleType} from \"@khanacademy/wonder-blocks-core\";\n\n// Passed to TextField's `style` prop, which is typed as Wonder Blocks\n// `StyleType` and does not accept a CSS-module className.\nconst cardInputStyle: StyleType = {flexGrow: 1};\n\ntype Props = {\n index: number;\n value: string;\n isFirst: boolean;\n isLast: boolean;\n onChange: (value: string) => void;\n onMoveUp: () => void;\n onMoveDown: () => void;\n onDelete: () => void;\n};\n\n/**\n * An editor for a single sorter card\n *\n * Renders as a list item, so it belongs inside the sorter editor's list of\n * cards.\n */\nfunction CardEditor({\n index,\n value,\n isFirst,\n isLast,\n onChange,\n onMoveUp,\n onMoveDown,\n onDelete,\n}: Props) {\n const cardNumber = index + 1;\n\n return (\n <View tag=\"li\" className={styles.card}>\n <TextField\n aria-label={`Card ${cardNumber}`}\n value={value}\n onChange={onChange}\n style={cardInputStyle}\n />\n <IconButton\n aria-label={`Move card ${cardNumber} up`}\n icon={arrowUp}\n kind=\"tertiary\"\n actionType=\"neutral\"\n size=\"small\"\n disabled={isFirst}\n onClick={onMoveUp}\n />\n <IconButton\n aria-label={`Move card ${cardNumber} down`}\n icon={arrowDown}\n kind=\"tertiary\"\n actionType=\"neutral\"\n size=\"small\"\n disabled={isLast}\n onClick={onMoveDown}\n />\n <IconButton\n aria-label={`Delete card ${cardNumber}`}\n icon={trash}\n kind=\"tertiary\"\n actionType=\"destructive\"\n size=\"small\"\n onClick={onDelete}\n />\n </View>\n );\n}\n\nexport default CardEditor;\n","import {\n sorterLogic,\n SORTER_MAX_HORIZONTAL_CARDS,\n SORTER_MAX_CARDS,\n type PerseusSorterWidgetOptions,\n} from \"@khanacademy/perseus-core\";\nimport Banner from \"@khanacademy/wonder-blocks-banner\";\nimport Button from \"@khanacademy/wonder-blocks-button\";\nimport {View} from \"@khanacademy/wonder-blocks-core\";\nimport {Checkbox} from \"@khanacademy/wonder-blocks-form\";\nimport {LabeledField} from \"@khanacademy/wonder-blocks-labeled-field\";\nimport plusCircle from \"@phosphor-icons/core/regular/plus-circle.svg\";\nimport * as React from \"react\";\n\nimport InfoTip from \"../../components/info-tip\";\nimport {TypedSingleSelect} from \"../../components/typed-single-select\";\n\nimport CardEditor from \"./card-editor\";\nimport styles from \"./sorter-editor.module.css\";\n\n// There's nothing to sort with fewer than two cards.\nconst minCards = 2;\n\n// Annotated because WidgetLogic types `defaultWidgetOptions` as `any`. Without\n// this, the `any` spreads: a destructured prop whose default is `any` is itself\n// `any`, which would silently untype every option below.\nconst defaultOptions: PerseusSorterWidgetOptions =\n sorterLogic.defaultWidgetOptions;\n\nconst layoutOptions = {\n horizontal: \"Horizontal\",\n vertical: \"Vertical\",\n} as const satisfies Record<PerseusSorterWidgetOptions[\"layout\"], string>;\n\ntype Props = PerseusSorterWidgetOptions & {\n onChange: (\n newOptions: Partial<PerseusSorterWidgetOptions>,\n callback?: () => void,\n ) => void;\n};\n\n/**\n * Imperative API that WidgetEditor calls\n */\ntype SorterEditorHandle = {\n serialize: () => PerseusSorterWidgetOptions;\n getSaveWarnings: () => string[];\n};\n\n// JSDoc will be shown in Storybook widget editor description\n/**\n * An editor for adding a sorter widget that allows users to arrange items in a specific order.\n */\nconst SorterEditor = React.forwardRef<SorterEditorHandle, Props>(\n function SorterEditor(\n {\n correct = defaultOptions.correct,\n layout = defaultOptions.layout,\n padding = defaultOptions.padding,\n onChange,\n },\n ref,\n ) {\n React.useImperativeHandle(\n ref,\n () => ({\n serialize: () => {\n return {correct, layout, padding};\n },\n\n // TODO(LEMS-3643): Remove `getSaveWarnings` once the frontend\n // uses the new linter rules for save warnings.\n getSaveWarnings: () => {\n const warnings: string[] = [];\n // don't allow too few cards\n if (correct.length < minCards) {\n warnings.push(\n `Sorter requires at least ${minCards} cards.`,\n );\n }\n // don't allow blanks\n if (correct.some((card) => card.trim() === \"\")) {\n warnings.push(\"Sorter cards cannot be blank.\");\n }\n return warnings;\n },\n }),\n [correct, layout, padding],\n );\n\n const onCardChange = (index: number, value: string) => {\n const newCorrect = [...correct];\n newCorrect[index] = value;\n onChange({correct: newCorrect});\n };\n\n const onAddCard = () => {\n if (correct.length >= SORTER_MAX_CARDS) {\n return;\n }\n onChange({correct: [...correct, \"\"]});\n };\n\n const onMoveCard = (index: number, offset: -1 | 1) => {\n const newCorrect = [...correct];\n const newIndex = index + offset;\n [newCorrect[index], newCorrect[newIndex]] = [\n newCorrect[newIndex],\n newCorrect[index],\n ];\n onChange({correct: newCorrect});\n };\n\n const onDeleteCard = (index: number) => {\n onChange({\n correct: correct.filter((card, i) => i !== index),\n });\n };\n\n return (\n <View className={styles.editor}>\n <View className={styles.section}>\n <div>\n Correct answer{\" \"}\n <InfoTip>\n <p>\n Enter the correct answer (in the correct order)\n here. The preview on the right will have the\n cards in a randomized order, which is how the\n student will see them.\n </p>\n <p>\n For horizontal orientation, the top input\n represents the leftmost card and the bottom\n input represents the rightmost card.\n </p>\n </InfoTip>\n </div>\n <View tag=\"ol\" className={styles.cards}>\n {correct.map((card, i) => (\n <CardEditor\n key={i}\n index={i}\n value={card}\n isFirst={i === 0}\n isLast={i === correct.length - 1}\n onChange={(value) => onCardChange(i, value)}\n onMoveUp={() => onMoveCard(i, -1)}\n onMoveDown={() => onMoveCard(i, 1)}\n onDelete={() => onDeleteCard(i)}\n />\n ))}\n </View>\n <Button\n kind=\"tertiary\"\n startIcon={plusCircle}\n className={styles.addCard}\n disabled={correct.length >= SORTER_MAX_CARDS}\n onClick={onAddCard}\n >\n Add a card\n </Button>\n </View>\n <LabeledField\n label=\"Layout\"\n field={\n <TypedSingleSelect\n options={layoutOptions}\n selectedValue={layout}\n onChange={(newLayout) =>\n onChange({layout: newLayout})\n }\n />\n }\n contextLabel={\n <InfoTip>\n <p>\n Use the horizontal layout for short text and\n small images. The vertical layout is best for\n longer text and larger images.\n </p>\n </InfoTip>\n }\n styles={{\n contextLabel: {\n marginInlineEnd: \"auto\",\n },\n }}\n />\n {layout === \"horizontal\" &&\n correct.length > SORTER_MAX_HORIZONTAL_CARDS && (\n <Banner\n kind=\"warning\"\n text={`Sorter widget with more than ${SORTER_MAX_HORIZONTAL_CARDS} options will display vertically, even if the layout is set to horizontal.`}\n />\n )}\n <div className={styles.row}>\n <Checkbox\n label=\"Padding\"\n checked={padding}\n onChange={(value) => {\n onChange({padding: value});\n }}\n />\n <InfoTip>\n <p>\n Padding is good for text, but not needed for images.\n </p>\n </InfoTip>\n </div>\n </View>\n );\n },\n);\n\nexport default Object.assign(SorterEditor, {\n // Read directly by the editor page to seed the options of a newly inserted\n // sorter.\n defaultProps: defaultOptions,\n});\n","import {components, TableWidget, Util} from \"@khanacademy/perseus\";\nimport {\n tableLogic,\n type PerseusTableWidgetOptions,\n} from \"@khanacademy/perseus-core\";\nimport PropTypes from \"prop-types\";\nimport * as React from \"react\";\nimport _ from \"underscore\";\n\nimport InfoTip from \"../../components/info-tip\";\nimport Editor from \"../../editor\";\n\nimport type {PropsFor} from \"@khanacademy/wonder-blocks-core\";\n\nconst {NumberInput} = components;\nconst Table = TableWidget.widget;\n\ntype Props = any;\n\nclass TableEditor extends React.Component<Props> {\n static propTypes = {\n rows: PropTypes.number,\n columns: PropTypes.number,\n headers: PropTypes.arrayOf(PropTypes.string),\n answers: PropTypes.arrayOf(PropTypes.arrayOf(PropTypes.string)),\n };\n\n static defaultProps: PerseusTableWidgetOptions =\n tableLogic.defaultWidgetOptions;\n\n numberOfColumns = React.createRef<components.NumberInput>();\n\n focus: () => void = () => {\n this.numberOfColumns.current?.focus();\n };\n\n onSizeInput: (arg1: number, arg2: number) => void = (\n numRawRows,\n numRawColumns,\n ) => {\n // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n let rows = +numRawRows || 0;\n // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n let columns = +numRawColumns || 0;\n rows = Math.min(Math.max(1, rows), 30);\n columns = Math.min(Math.max(1, columns), 6);\n const oldColumns = this.props.columns;\n const oldRows = this.props.rows;\n\n const answers = this.props.answers;\n // Truncate if necessary; else, append\n if (rows <= oldRows) {\n answers.length = rows;\n } else {\n _(rows - oldRows).times(function () {\n answers.push(Util.stringArrayOfSize(oldColumns));\n });\n }\n\n function fixColumnSizing(array: any) {\n // Truncate if necessary; else, append\n if (columns <= oldColumns) {\n array.length = columns;\n } else {\n _(columns - oldColumns).times(function () {\n array.push(\"\");\n });\n }\n }\n\n const headers = this.props.headers;\n fixColumnSizing(headers);\n _.each(answers, fixColumnSizing);\n\n this.props.onChange({\n rows: rows,\n columns: columns,\n answers: answers,\n headers: headers,\n });\n };\n\n serialize: () => any = () => {\n const json = _.pick(this.props, \"headers\", \"rows\", \"columns\");\n\n return _.extend({}, json, {\n answers: this.props.answers.map(_.clone),\n });\n };\n\n render(): React.ReactNode {\n const tableProps: Partial<PropsFor<typeof Table>> = {\n options: {\n headers: this.props.headers,\n rows: this.props.rows,\n columns: this.props.columns,\n answers: this.props.answers,\n },\n onChange: this.props.onChange,\n userInput: this.props.answers,\n handleUserInput: (userInput) => {\n // Disable table input changes when editing is disabled\n if (this.props.apiOptions?.editingDisabled) {\n return;\n }\n // In the editing experience,\n // user input is actually editing answers\n this.props.onChange({answers: userInput});\n },\n apiOptions: this.props.apiOptions,\n editableHeaders: true,\n onFocus: () => {},\n onBlur: () => {},\n trackInteraction: () => {},\n Editor: Editor,\n };\n\n return (\n <div>\n <div className=\"perseus-widget-row\">\n <label>\n Number of columns:{\" \"}\n <NumberInput\n ref={this.numberOfColumns}\n value={this.props.columns}\n onChange={(val) => {\n if (val) {\n this.onSizeInput(this.props.rows, val);\n }\n }}\n useArrowKeys={true}\n />\n </label>\n </div>\n <div className=\"perseus-widget-row\">\n <label>\n Number of rows:{\" \"}\n <NumberInput\n ref=\"numberOfRows\"\n value={this.props.rows}\n onChange={(val) => {\n if (val) {\n this.onSizeInput(val, this.props.columns);\n }\n }}\n useArrowKeys={true}\n />\n </label>\n </div>\n <div>\n {\" \"}\n Table of answers:{\" \"}\n <InfoTip>\n <p>\n The student has to fill out all cells in the table.\n For partially filled tables create a table using the\n template, and insert text input boxes as desired.\n </p>\n </InfoTip>\n </div>\n <div>\n {/* eslint-disable-next-line no-restricted-syntax */}\n <Table {...(tableProps as PropsFor<typeof Table>)} />\n </div>\n </div>\n );\n }\n}\n\nexport default TableEditor;\n","import {TextArea} from \"@khanacademy/wonder-blocks-form\";\nimport {LabeledField} from \"@khanacademy/wonder-blocks-labeled-field\";\nimport * as React from \"react\";\n\nimport type {VideoEditorProps} from \"./video-editor\";\n\nconst KA_VIDEO_URL = /khanacademy\\.org\\/.*\\/v\\/(.*)$/;\n\n/**\n * Turns Khan Academy URLs into the KA slugs, if possible. Any other URLs are\n * returned unchanged.\n */\nfunction getSlugFromUrl(url: string) {\n const match = KA_VIDEO_URL.exec(url);\n if (match) {\n return match[1];\n }\n return url;\n}\n\n/**\n * Specific settings for the Video widget.\n */\nexport default function VideoSettings(props: VideoEditorProps) {\n const [inputValue, setInputValue] = React.useState(props.location);\n\n function handleUrlChange(url: string) {\n props.onChange({location: getSlugFromUrl(url)});\n }\n\n return (\n <LabeledField\n label=\"KA Video Slug\"\n description=\"KA video URLs will be converted to just the slug.\"\n field={\n <TextArea\n value={inputValue}\n onChange={setInputValue}\n onBlur={(e) => handleUrlChange(e.target.value)}\n autoResize={true}\n />\n }\n />\n );\n}\n","import {\n videoLogic,\n type PerseusVideoWidgetOptions,\n} from \"@khanacademy/perseus-core\";\nimport * as React from \"react\";\n\nimport VideoSettings from \"./video-settings\";\n\nexport interface VideoEditorProps extends PerseusVideoWidgetOptions {\n onChange: (options: PerseusVideoWidgetOptions) => void;\n}\n\n/**\n * This is the main editor for this widget, to specify all the options.\n */\nclass VideoEditor extends React.Component<VideoEditorProps> {\n static defaultProps: PerseusVideoWidgetOptions =\n videoLogic.defaultWidgetOptions;\n\n serialize: () => PerseusVideoWidgetOptions = () => {\n return {\n location: this.props.location,\n };\n };\n\n render(): React.ReactNode {\n return <VideoSettings {...this.props} />;\n }\n}\n\nexport default VideoEditor;\n","import CategorizerEditor from \"./widgets/categorizer-editor\";\nimport CSProgramEditor from \"./widgets/cs-program-editor\";\nimport DefinitionEditor from \"./widgets/definition-editor\";\nimport DeprecatedStandinEditor from \"./widgets/deprecated-standin-editor\";\nimport DropdownEditor from \"./widgets/dropdown-editor\";\nimport ExplanationEditor from \"./widgets/explanation-editor\";\nimport ExpressionEditor from \"./widgets/expression-editor\";\nimport FillInTheBlankEditor from \"./widgets/fill-in-the-blank-editor\";\nimport FreeResponseEditor from \"./widgets/free-response-editor\";\nimport GradedGroupEditor from \"./widgets/graded-group-editor\";\nimport GradedGroupSetEditor from \"./widgets/graded-group-set-editor\";\nimport GrapherEditor from \"./widgets/grapher-editor\";\nimport GroupEditor from \"./widgets/group-editor\";\nimport IframeEditor from \"./widgets/iframe-editor\";\nimport ImageEditor from \"./widgets/image-editor\";\nimport InputNumberEditor from \"./widgets/input-number-editor\";\nimport InteractionEditor from \"./widgets/interaction-editor\";\nimport InteractiveGraphEditor from \"./widgets/interactive-graph-editor\";\nimport LabelImageEditor from \"./widgets/label-image-editor\";\nimport MatcherEditor from \"./widgets/matcher-editor\";\nimport MatrixEditor from \"./widgets/matrix-editor\";\nimport MeasurerEditor from \"./widgets/measurer-editor\";\nimport NumberLineEditor from \"./widgets/number-line-editor\";\nimport NumericInputEditor from \"./widgets/numeric-input-editor\";\nimport OrdererEditor from \"./widgets/orderer-editor\";\nimport PhetSimulationEditor from \"./widgets/phet-simulation-editor\";\nimport PlotterEditor from \"./widgets/plotter-editor\";\nimport PythonProgramEditor from \"./widgets/python-program-editor\";\nimport RadioEditor from \"./widgets/radio-editor\";\nimport SorterEditor from \"./widgets/sorter-editor\";\nimport TableEditor from \"./widgets/table-editor\";\nimport VideoEditor from \"./widgets/video-editor\";\n\n/**\n * Every widget editor, keyed by the type of widget it edits.\n *\n * The keys are widget types as they appear in Perseus content (eg. the\n * `interactive-graph` in the widget's `type`. `Widgets.registerEditors`\n * registers each editor under its key, and the editor page looks an editor up by\n * the type of the widget it's rendering.\n */\nexport default {\n categorizer: CategorizerEditor,\n \"cs-program\": CSProgramEditor,\n definition: DefinitionEditor,\n \"deprecated-standin\": DeprecatedStandinEditor,\n dropdown: DropdownEditor,\n explanation: ExplanationEditor,\n expression: ExpressionEditor,\n \"fill-in-the-blank\": FillInTheBlankEditor,\n \"free-response\": FreeResponseEditor,\n \"graded-group\": GradedGroupEditor,\n \"graded-group-set\": GradedGroupSetEditor,\n grapher: GrapherEditor,\n group: GroupEditor,\n iframe: IframeEditor,\n image: ImageEditor,\n \"input-number\": InputNumberEditor,\n interaction: InteractionEditor,\n \"interactive-graph\": InteractiveGraphEditor,\n \"label-image\": LabelImageEditor,\n matcher: MatcherEditor,\n matrix: MatrixEditor,\n measurer: MeasurerEditor,\n \"number-line\": NumberLineEditor,\n \"numeric-input\": NumericInputEditor,\n orderer: OrdererEditor,\n \"phet-simulation\": PhetSimulationEditor,\n plotter: PlotterEditor,\n \"python-program\": PythonProgramEditor,\n radio: RadioEditor,\n sorter: SorterEditor,\n table: TableEditor,\n video: VideoEditor,\n};\n","export {libVersion} from \"./version\";\n\nexport {default as ArticleEditor} from \"./article-editor\";\nexport {default as DeviceFramer} from \"./components/device-framer\";\nexport {default as ViewportResizer} from \"./components/viewport-resizer\";\nexport {default as ArticleDiff} from \"./diffs/article-diff\";\nexport {default as ItemDiff} from \"./diffs/item-diff\";\nexport {default as EditorPage} from \"./editor-page\";\nexport {default as Editor} from \"./editor\";\nexport {default as ContentPreview} from \"./content-preview\";\nexport {default as IssuesPanel} from \"./components/issues-panel\";\nexport type {Issue} from \"./components/issues-panel\";\n\n// Preview system hooks and utilities\nexport {usePreviewController} from \"./preview/use-preview-controller\";\nexport {usePreviewPresenter} from \"./preview/use-preview-presenter\";\nexport {A11yOverlays} from \"./preview/a11y/overlays\";\nexport {default as PreviewWithIframe} from \"./preview-with-iframe\";\nexport type {PreviewContent} from \"./preview/message-types\";\n\nimport \"./styles/perseus-editor.css\";\n\n// eslint-disable-next-line import/order\nimport {Widgets, widgets} from \"@khanacademy/perseus\";\nimport AllEditors from \"./all-editors\";\n\nWidgets.registerEditors(AllEditors);\nWidgets.registerWidgets(widgets);\n\nWidgets.replaceDeprecatedWidgets();\nWidgets.replaceDeprecatedEditors();\n\nexport {AllEditors, widgets};\n"],"names":["libName","libVersion","addLibraryVersionToPerseusDebug","require$$0","jsxRuntimeModule","require$$1","devices","PHONE","TABLET","DESKTOP","lintGutterWidth","perseusFrameBorderWidth","SCREEN_SIZES","phone","width","height","framedWidth","tablet","desktop","DeviceFramer","children","deviceType","nochrome","scale","React","useMemo","withChromeStyle","backgroundColor","color","textAlign","border","margin","zoom","_jsx","div","style","className","createA11yContextValue","overrides","setIssueHighlight","a11yScanningEnabled","setA11yScanningEnabled","highlightInstanceIds","onA11yReport","axeCoreIssues","A11yContext","createContext","IMAGE_MARKDOWN_REGEX","getFirstAvailableWidgetIndex","widgetType","widgets","widgetNames","Object","keys","i","length","includes","convertImageMarkdownToImageWidget","question","onEditorChange","content","newWidgets","matches","Array","from","matchAll","replacements","match","imageIndex","imageNode","PerseusMarkdown","parse","imageUrl","target","imageAlt","alt","imageSize","Util","getImageSizeModern","generateImageWidget","options","generateImageOptions","backgroundImage","url","push","original","replacement","newContent","replace","images","getCtaForIssueId","issueId","label","onClick","defaultItemEditorContext","ItemEditorContext","useItemEditorContext","useContext","IssueCta","issue","editingDisabled","cta","id","Button","size","styles","button","disabled","marginTop","sizing","size_080","marginBottom","PerseusEditorAccordion","animated","header","expanded","containerStyle","panelStyle","headerStyle","onToggle","props","View","AccordionSection","container","accordionHeader","accordionPanel","StyleSheet","create","semanticColor","core","background","instructive","subtle","marginBlockStart","spacing","xSmall_8","padding","small_12","paddingInlineEnd","xxLarge_48","paddingBlockStart","xxSmall_6","paddingBlockEnd","xxxSmall_4","paddingInlineStart","showMeStyle","display","alignItems","ShowMe","instanceId","showMe","setShowMe","useState","context","useEffect","handleChange","checked","_jsxs","BodyText","tag","weight","span","marginInlineEnd","Switch","onChange","aria-label","impactStringMap","high","medium","low","IssueDetails","setExpanded","toggleVisibility","accordionColor","impact","feedback","critical","warning","messageStyling","whiteSpace","foreground","default","textOverflow","maxInlineSize","overflow","description","a","href","helpUrl","rel","help","fontWeight","message","source","undefined","LabeledSwitch","labelSide","switchId","useId","labelElement","htmlFor","strut","Strut","row","_Fragment","flexDirection","ToggleableCaret","iconStyle","isExpanded","collapsed","PhosphorIcon","icon","caretRight","transition","transform","getIssueKey","IssuesPanel","issues","showPanel","setShowPanel","allIssues","hasWarnings","hasErrors","some","issuesCount","iconAlert","iconWarning","iconPass","iconColor","strong","success","impactOrder","sortedIssues","sort","b","localeCompare","gap","testId","map","enabled","JsonEditor","Component","getInitialState","currentValue","JSON","stringify","value","valid","componentDidUpdate","prevProps","_","isEqual","shouldReplaceContent","state","getCurrentValueAsJson","setState","typesafeParseOrThrow","handleKeyDown","e","key","textarea","currentTarget","cursorPos","selectionStart","v","textBefore","substring","textAfter","selectionEnd","preventDefault","processChange","nextString","json","handleBlur","parsed","parser","isSuccess","parsedFromQuotedString","TypeError","render","classes","onKeyDown","onBlur","constructor","bind","SectionControlButton","title","IconButton","marginInlineStart","DragTarget","handleDrop","stopPropagation","dragHover","onDrop","handleDragEnd","handleDragOver","handleDragLeave","handleDragEnter","shouldDragHighlight","opacity","forwardProps","assign","onDragEnd","onDragOver","onDragEnter","onDragLeave","defaultProps","InfoTipBase","Tooltip","body","placement","questionIcon","spacingLeft","medium_16","InfoTip","componentDidMount","didMount","TypedSingleSelect","placeholder","rest","SingleSelect","entries","option","OptionItem","leftAccessory","alignmentInfoMap","block","AlignmentSelect","supportedAlignments","widgetInfo","isEditingDisabled","labelId","aria-labelledby","selectedValue","alignment","inline","singleSelectShort","ul","index","li","marginBlockEnd","size_240","size_260","WidgetEditorSettings","bestPractices","supportsStaticMode","isStatic","onStaticChange","supportsGradedToggle","isGraded","onGradedChange","onAlignmentChange","hasControls","Link","size_060","_upgradeWidgetInfo","filteredWidget","excludeDenylistKeys","graded","applyDefaultsToWidget","WidgetEditor","UNSAFE_componentWillReceiveProps","nextProps","widgetIsOpen","showWidget","apiOptions","Ed","Widgets","getEditor","type","showAlignmentOptions","CoreWidgetRegistry","getSupportedAlignments","supportsUngraded","_toggleWidget","trashIcon","onRemove","static","_setStatic","_setGraded","_handleAlignmentChange","ref","widgetSpecificEditor","_handleWidgetChange","newOptions","newWidgetInfo","current","serialize","newAlignment","getSaveWarnings","issuesFunc","version","createRef","WIDGETS_BEHIND_FLAGS","WidgetSelect","shouldComponentUpdate","getPublicWidgets","flag","widgetExport","getWidgetExport","flags","orderedWidgetNames","sortBy","name","displayName","addWidgetString","select","data-testid","setPerseusClipboardData","text","dummyElement","document","createElement","setAttribute","navigator","clipboard","write","ClipboardItem","outerHTML","getPerseusClipboardData","clipboardItems","read","item","types","dummyDiv","htmlBlob","getType","innerHTML","widgetsJson","querySelector","getAttribute","plainTextBlob","widgetPlaceholder","widgetRegExp","rWidgetSplit","RegExp","shortcutRegexp","ENDS_WITH_A_PARAGRAPH","TRAILING_NEWLINES","LEADING_NEWLINES","commafyInteger","str","n","toString","makeEndWithAParagraphIfNecessary","test","exec","newlines","slice","makeStartWithAParagraphAlways","IMAGE_REGEX","allMatches","regex","result","imageUrlsFromContent","capture","Editor","getDerivedStateFromProps","textAreaValue","rememberedWidgetsForUndo","lastUserValue","_sizeImages","focus","setSelectionRange","execCommand","_pendingCursorPos","moveCursor","changed","getWidgetEditor","_handleWidgetEditorChange","_handleWidgetEditorRemove","getWidgetsReferencedIn","referencedWidgetIds","getWidgetIdsFromContent","allWidgets","referencedWidgets","widgetIds","intersection","refs","each","pieces","underlayPieces","templatesDropDown","widgetsAndTemplates","wordCountDisplay","showWordCount","numChars","characterCount","numWords","Math","floor","widgetEnabled","split","rWidgetParts","duplicate","insertTemplateString","addTemplate","additionalTemplates","widgetNodes","values","_addWidget","br","completeTextarea","underlay","handleContentChange","_handleKeyDown","onCopy","_maybeCopyWidgets","onCut","onPaste","_maybePasteWidgets","textareaWrapper","imageUploader","contentWithoutWidgets","noPrompt","trim","noWidgets","warningStyle","borderTop","warnNoPrompt","warnNoWidgets","confirm","re","imageUrls","pick","newImageUrls","filter","getImageSize","clone","dataTransfer","files","getData","origContent","chain","file","sentinel","uniqueId","reject","fileAndSentinel","tap","newValue","word","getWordBeforeCursor","string","toLowerCase","getAllWidgetTypes","matchingWidgets","_addWidgetToContent","pos","start","end","selectedText","syntax","widgetData","catch","err","Log","error","cause","textToBePasted","safeWidgetMapping","_safeWidgetNameMapping","safeWidgetData","data","safeText","completeWidget","widget","substr","widgetTypes","uniq","existingWidgets","safeWidgetNums","existingWidget","max","widgetName","join","oldContent","cursorRange","allWidgetIds","num","widgetNum","reduce","currentNum","otherId","otherType","otherNum","widgetContent","isBlock","getDefaultAlignment","prelude","postlude","newPrelude","newPostlude","widgetEditor","initializeWidgetOptionsParams","startWidgetOptions","initializeWidgetOptions","getCurrentVersion","templateType","template","PerseusError","Errors","InvalidInput","metadata","warnings","flatten","ApiOptions","defaults","SEVERITY_ERROR","SEVERITY_WARNING","SEVERITY_GUIDELINE","SEVERITY_MAP","WARNINGS","inaccessibleWidget","widgetId","genericLinterWarning","rule","severity","texError","math","errorMessage","PREVIEW_MESSAGE_SOURCE","createPreviewIframeInitMessage","contentVersion","createPreviewSetA11yScanningEnabledMessage","createPreviewHighlightIssuesMessage","instanceIds","createPreviewClearHighlightsMessage","createPreviewIframeReadyMessage","createPreviewA11yReportMessage","violations","needsReview","isIframeToParentMessage","isParentToIframeMessage","sanitizeApiOptions","onFocusChange","answerableCallback","getAnotherHint","interactionCallback","trackInteraction","baseElements","imagePlaceholder","serializableOptions","sanitizePreviewData","sanitizedApiOptions","UnreachableCaseError","usePreviewController","iframeRef","setHeight","isIframeReady","setIsIframeReady","a11yReport","setA11yReport","currentContentRef","useRef","currentA11yScanningEnabledRef","postToIframe","useCallback","contentWindow","postMessage","contentVersionRef","handleMessage","event","window","addEventListener","removeEventListener","sendData","highlightIssues","clearHighlights","PreviewWithIframe","containerHeight","seamless","iframe","data-mobile","String","isMobile","data-lint-gutter","src","chemParse","tokens","stateMachine","expectedLoc","loc","tex","texify","go","mhchemParser","input","buffer","lastInput","watchdog","output","machine","stateMachines","t","transitions","iterateTransitions","patterns","match_","pattern","task","iA","action_","o","actions","type_","concatArray","nextState","revisit","remainder","toContinue","isArray","iB","empty","else","else2","space","space$","x","x$","i$","letters","digits","m","splice","findObserveGroups","_9","operator","arrowUpDown","CMT","orbital","others","oxidation$","amount","amount2","formula$","uprightEntities","begExcl","begIncl","endIncl","endExcl","beg2Excl","beg2Incl","end2Incl","end2Excl","combine","_match","indexOf","_findObserveGroups","endChars","braces","charAt","endMatchBegin","endMatchEnd","match1","group2","matchRet","mm","p","q","d","rm","text_","insert","p1","p2","copy","ret","bond","k","kind_","ce","createTransitions","stateArray","concat","patternArray","j","r","rd","dq","D","qd","as","tmp","dType","isAfterD","c1","c2","c3","c4","hyphenFollows","sb","comma","withSpace","entityFollows","rdt","rq","rqt","color1","color2","pq","f","bd","oxidation","pu","enumber","md","mq","b5","cdot","mrm","reverse","isInner","res","cee","inputi","_go2","_goInner","buf","_getBond","c","b6","arrow","_getArrow","_getOperator","katex","__defineMacro","consumeArgs","MATHJAX_ONLY_MACROS","detectTexErrors","errors","ast","traverseContent","node","texContent","preprocessTex","renderToString","colorIsTextColor","macros","HUD","components","ArticleEditor","_updateIssues","_sections","section","linterContext","stack","sectionIssues","PerseusLinter","runLinter","linterWarning","texErrors","texIssues","_previewDataForSection","sectionIndex","editor","article","_apiOptionsForPreview","contentType","highlightLint","legacyPerseusLint","isArticle","_renderEditor","sectionImageUploadGenerator","sections","_isMobilePreview","fieldset","plusIcon","_handleAddSectionAfter","arrowCircleDownIcon","_handleMoveSectionLater","arrowCircleUpIcon","_handleMoveSectionEarlier","msg","_handleRemoveSection","_handleEditorChange","newProps","screen","previewURL","_renderAddSection","_renderLinterHUD","startIcon","kind","_renderPreviewMode","newSection","mode","NotAllowed","Dependencies","DependenciesContext","Provider","dependencies","multiLine","_handleJsonChange","parseAndMigratePerseusArticle","newJson","iconChevronRight","path","iconCircleArrowDown","iconCircleArrowUp","iconDesktop","iconMobilePhone","iconTablet","ButtonGroup","InlineIcon","ViewportResizer","phoneButtonContents","tabletButtonContents","desktopButtonContents","buttons","onViewportSizeChanged","clonePath","newPos","removeEmpty","array","escapeHTML","s","Diff","ignoreWhitespace","prototype","diff","oldString","newString","removed","added","tokenize","newLen","oldLen","maxEditLength","bestPath","oldPos","extractCommon","editLength","diagonalPath","basePath","addPath","removePath","canAdd","canRemove","pushComponent","last","equals","left","right","reWhitespace","CharDiff","WordDiff","WordWithSpaceDiff","CssDiff","LineDiff","retLines","lines","line","lastLine","JSDiff","diffChars","oldStr","newStr","diffWords","diffWordsWithSpace","diffLines","diffCss","createPatch","fileName","oldHeader","newHeader","pop","contextLines","entry","eofNL","curRange","isLast","isLastOfType","oldRangeStart","newRangeStart","oldLine","newLine","prev","apply","contextSize","min","applyPatch","uniDiff","diffstr","remEOFNL","addEOFNL","meh","unshift","oldlength","oldlines","newlength","convertChangesToXML","changes","change","convertChangesToDMP","splitDiff","diffEntries","currentLine","isNewline","newEntry","extend","statusFor","chunk","splitUpChunk","status","mapcat","lst","fn","ArrayDiff","jsdiff","elem","flattenChunks","chunks","stringArrayDiff","diffResult","flattened","before","after","SvgImage","BEFORE","AFTER","imagesInString","classFor","ifAdded","ifRemoved","ImageDiffSide","classNames","image","allowZoom","TextDiff","diffed","beforeImages","afterImages","renderedLines","contents","side","lineNum","lineClass","role","tabIndex","handleExpand","ImageWidgetDiff","beforeSrc","afterSrc","beforeAlt","afterAlt","indentationFromDepth","depth","UNCHANGED","DiffSide","showKey","propKey","CollapsedRow","self","clear","size_040","actionType","DiffEntry","propertyDeleted","propertyAdded","propertyChanged","hasChildren","leftClass","dark","rightClass","shownChildren","child","expand","CHANGED","ADDED","REMOVED","valueEntry","objectEntry","beforeKeys","isObject","afterKeys","union","performDiff","any","WidgetDiff","filterWidgetInfo","filteredWidgetInfo","RendererDiff","showSeparator","textDiff","widgetsDiff","beforeWidgets","afterWidgets","ArticleDiff","_stateFromProps","sectionCount","times","AnswerAreaDiff","ItemDiff","hintCount","hints","extras","answerArea","HintEditor","updates","showTitle","renderer","itemId","justifyContent","showMoveButtons","partial","onMove","isFirst","Checkbox","showRemoveButton","CombinedHintEditor","hint","CombinedHintsEditor","handleHintChange","handleHintRemove","handleHintMove","dir","hintElems","addHint","calculatorVariants","variant","ExtrasEditor","shouldShowCalculatorVariants","calculatorVariant","shouldShowFinancialCalculatorOptions","financialCalculatorMonthlyPayment","financialCalculatorTotalAmount","financialCalculatorTimeToPayOff","ExtraCheckbox","infoTip","newCheckedState","calculator","isFeatureOn","RadioGroup","groupName","handleVariantChange","indented","calcVariant","Choice","calculatorChoice","indent","periodicTable","periodicTableWithKey","newVariant","selected","find","getDefaultAnswerArea","checkbox","large_24","marginBlock","size_010","legacyPerseusLintEqual","every","inputsEqual","problemNum","buildContent","inputs","customKeypad","reviewMode","createPreviewContentDeriver","lastInputs","lastContent","ItemEditor","questionEditor","handleEditorChange","derivePreviewContent","handleA11yReport","extrasEditor","handleExtrasChange","hintsEditor","updateProps","report","contextType","buildDeviceApiOptions","touch","createDeviceApiOptionsDeriver","lastResult","lintRenderer","linterIssues","ruleCounts","Map","ordinal","get","set","gatherLinterIssues","hostIssues","questionIssues","hintIssues","flatMap","EditorPage","previousProps","prevState","snapshot","syncJsonStateFromProps","questionOrHintsChanged","itemEditor","previewDevice","deviceBasedApiOptions","deriveDeviceApiOptions","ClassNames","MOBILE","jsonMode","parseAndMigratePerseusItem","changeJSON","widgetsAreOpen","highlighted","toChange","ContentPreview","i18n","usePerseusI18n","gutter","StatefulKeypadContextProvider","KeypadContext","Consumer","setKeypadActive","keypadElement","setKeypadElement","UserInputManager","userInput","handleUserInput","initializeUserInput","Renderer","strings","MobileKeypad","onAnalyticsEvent","Promise","resolve","onDismiss","onElementMounted","containerType","containerName","assistanceNeededMessage","mapAxeResults","results","prefix","elementMap","forEach","isUserFixable","issuesList","convertAxeImpactToIssueImpact","getIssueMessage","nodes","element","Set","all","none","postToParent","parent","usePreviewPresenter","contentContainerRef","setContent","setContentVersion","highlightTargets","setHighlightTargets","schedule","useActionScheduler","frameElement","Error","elementMapRef","a11yScanningEnabledRef","scanPromiseRef","rescanRequestedRef","startScan","scannedVersion","axe","configure","reporter","run","include","exclude","elementRef","violationMap","incompletes","incompleteMap","incomplete","finally","scheduledScan","timeout","reportHeight","dataset","mobile","hasLintGutter","lintGutter","getOverlayRect","targetRect","containerRect","top","A11yOverlays","targets","getBoundingClientRect","position","borderRadius","textWidthCache","getTextWidth","textContent","appendChild","remove","TextListEditor","items","layout","inputRefs","delete","Boolean","focusIndex","EditorJsonify","Categorizer","CategorizerWidget","CategorizerEditor","categories","randomizeItems","categorizerProps","cat","first","call","categorizerLogic","defaultWidgetOptions","BlurInput","PairsEditor","pairs","pair","PairEditor","handlePairChange","pairIndex","pairsCopy","lastPair","newName","newVal","USAGE","_changeMultiple","component","callback","currProps","_changeSingle","propName","deprecatedChangeableChange","newPropsOrSinglePropName","propValue","toArray","arguments","Internal","DEFAULT_HEIGHT","KA_PROGRAM_URL","isolateProgramID","programUrl","CSProgramEditor","programID","programType","settings","showEditor","showButtons","_handleProgramIDChange","code","args","isDevServer","InitialRequestUrl","getDependencies","host","origin","baseUrl","fetchProgramInfo","response","fetch","ok","statusText","then","programInfo","userAuthoredContentType","TransientService","loggedMetadata","TextInput","DefinitionEditor","params","definitionLogic","togglePrompt","definition","has","DeprecatedStandinEditor","DropdownEditor","choices","visibleLabel","ariaLabel","onCorrectChange","choiceIndex","choice","correct","onContentChange","dropdownGroupName","TextField","choiceBackgroundColor","removeChoice","addChoice","blankChoice","propTypes","PropTypes","arrayOf","shape","bool","dropdownLogic","ExplanationEditor","showPrompt","hidePrompt","explanation","explanationLogic","buttonSetsList","ExpressionEditor","answerForms","buttonSets","functions","extraKeys","deriveExtraKeys","updateAnswerForm","answerFormProps","restProps","derivedExtraKeys","changeSimplify","simplify","answerForm","changeForm","form","changeConsidered","considered","changeTimes","answerOptions","ans","expressionProps","buttonsVisible","changeExpressionWidget","AnswerOption","onDelete","handleRemoveForm","onChangeSimplify","onChangeForm","onChangeConsidered","buttonSetChoices","isBasic","handleButtonSet","handleToggleDiv","Heading","paddedY","LabeledTextField","handleVisibleLabel","handleAriaLabel","functionsInternal","handleFunctions","answersSubtitle","answersGroup","answersList","newAnswer","hasCorrect","ix","expression","KAS","expr","isSimplified","newKey","crypto","randomUUID","newAnswerForm","updatedAnswerForms","changingName","buttonSetNames","keep","handleTexInsert","isTruthy","expressionLogic","findNextIn","arr","val","removeButton","deleteFocused","handleImSure","handleCancelDelete","handleDelete","deleteButton","answerOption","toggleConsidered","selectedButtonStyle","consideredButtonStyles","PerseusExpressionAnswerFormConsidered","Expression","paddedX","buttonRow","wbStyles","answerStatusWrong","answerStatusCorrect","answerStatusUngraded","wrong","ungraded","defaultOptions","fillInTheBlankLogic","FillInTheBlankEditor","forwardRef","tiles","maxUsesPerTile","randomize","useImperativeHandle","FreeResponseEditor","allowUnlimitedCharacters","characterLimit","scoringCriteria","LabeledField","field","TextArea","root","labeledInputField","handleUpdateCharacterLimit","criteriaList","renderCriteriaList","handleAddCriterion","plusCircleIcon","rWidgetRule","parseInt","isNaN","handleUpdateCriterion","criterion","newCriteria","handleDeleteCriterion","isDeletable","CriterionEditor","freeResponseLogic","criterionContainer","deleteButtonContainer","borderBlockEnd","neutral","GradedGroupEditor","handleAddHint","hintsTitle","hintEditor","handleRemoveHint","gradedGroupLogic","GradedGroupSetEditor","renderGroups","addGroup","_editors","gradedGroups","group","el","setArrayItem","newGroup","gradedGroupSetLogic","list","RangeInput","defaultBackgroundImage","numSteps","range","step","GraphSettings","stateFromProps","_isMounted","changeGraph","debounce","labels","gridStep","snapStep","componentWillUnmount","labelsTextbox","gridStepTextbox","snapStepTextbox","stepTextbox","rangeTextbox","changeRulerLabel","rulerLabel","changeRulerTicks","rulerTicks","changeBackgroundUrl","setUrl","ReactDOM","findDOMNode","renderLabelChoices","validRange","numbers","isFinite","validateStepValue","minTicks","maxTicks","nSteps","validSnapStep","validGridStep","validStep","validBackgroundImageSize","validSize","validateGraphSettings","goodRange","goodStep","goodGridStep","goodSnapStep","goodImageSize","changeLabel","changeRange","ranges","scaleFromExtent","box","tickStepFromExtent","gridStepFromTickStep","changeStep","changeSnapStep","changeGridStep","Number","validationResult","KhanMath","roundTo","TeX","editableSettings","vals","markings","showTooltips","onKeyPress","showRuler","showProtractor","optgroup","interactiveSizes","defaultBoxSizeSmall","MultiButtonGroup","Grapher","GrapherWidget","defaultPlotProps","getEquationString","typeToButton","GrapherUtil","GrapherEditor","availableTypes","graph","sizeClass","containerSizeClass","SMALL","equationString","graphProps","getInteractiveBoxFromSizeClass","allowEmpty","CoreGrapherUtil","allTypes","handleAvailableTypesChange","newAvailableTypes","invariant","newType","omit","grapherLogic","GroupEditor","groupLogic","IframeEditor","allowFullScreen","allowTopNavigation","iframeLogic","ImagePreview","wbTheme","data-wb-theme","wbFieldStyles","wbFieldStylesWithDescription","isInvalidDimension","dimension","Infinity","DarkModeToggle","onShowToggle","onSuppressToggle","showDarkMode","setShowDarkMode","URL","suppressFilter","searchParams","toggleDarkMode","toggleSuppressFilter","setDarkModeOptionInUrl","darkModeSetting","append","darkModeToggleContainer","darkModeSuppressionContainer","isGraphicalImage","pathname","DecorativeToggle","decorative","hasPopulatedFields","handleDecorativeToggle","shouldReset","caption","longDescription","decorativeToggleContainer","flexRow","ScrolllessNumberTextField","restOfProps","focused","setFocused","wipValue","setWipValue","inputRef","ignoreScroll","isFiniteNumeric","onFocus","LARGE_DIMENSION_THRESHOLD","ImageScaleInput","hasInvalidDimensions","handleScaleChange","newScale","handleScaledWidthChange","newScaledWidth","handleScaledHeightChange","newScaledHeight","handleResetToOriginalSize","naturalSize","naturalWidth","naturalHeight","hasLargeDimensions","dimensionsContainer","BodyMonospace","arrowCounterClockwise","Banner","horizontalLine","dimensionsFieldContainer","xSpan","MIN_ALT_TEXT_LENGTH","MAX_ALT_TEXT_LENGTH","altTextTooLongError","altTextTooShortError","ImageSettings","altFieldWarning","setAltFieldWarning","setWBTheme","handleAltFieldChange","handleAltFieldBlur","autoResize","altTextFieldContainer","characterCounter","insetBlockEnd","insetInlineEnd","INTERNALLY_HOSTED_DOMAINS","INTERNALLY_HOSTED_URL_RE","ImageUrlInput","urlId","urlFieldValue","setUrlFieldValue","backgroundImageError","setBackgroundImageError","onUrlChange","ImageEditor","imageLogic","isOpen","isCollapsible","Clickable","notClickable","heading","marginInline","userSelect","cursor","ToggleButton","aria-checked","segment","SegmentedControl","ToggleButtonGroup","selectedValues","wrapGroup","NumberInput","firstNumericalParse","answerFormButtons","initAnswer","strict","maxError","NumericInputEditor","answers","unsimplifiedAnswers","labelRow","em","updateAnswer","suggestedAnswerTypes","onToggleAnswerForm","format","inputSize","labelText","coefficientCheck","coefficient","instructions","generateInputAnswerEditors","answer","statusProper","toUpperCase","answerFormat","at","answerString","toNumericString","answerRangeText","answerHeading","showAnswerDetails","onToggleAnswers","inlineField","onFormatChange","forms","onEvaluationChange","onTrashAnswer","showSettings","onToggleHeading","center","showAnswers","addAnswer","answerIndex","formSelected","updateFn","toggleName","accordionName","newState","onSpace","onStatusChange","statuses","newStatus","update","lastAnswer","lastStatus","contains","pluck","formatError","fill","numericInputLogic","InputNumberEditor","ElementContainer","show","toggle","iconChevronDown","onUp","onDown","iconTrash","initiallyVisible","COLORS","KhanColors","BLACK","BLUE","GREEN","PINK","PURPLE","RED","GRAY","LIGHT_COLORS","LIGHT_BLUE","LIGHT_ORANGE","LIGHT_PINK","LIGHT_GREEN","LIGHT_PURPLE","LIGHT_RED","ColorPicker","colors","lightColors","DashPicker","MathquillInput","mathFieldWrapperRef","mathFieldInstance","locale","useMathInputI18n","createMathField","baseConfig","handlers","edit","mathField","latex","upOutOf","typedText","outerWrapper","borderStyle","borderWidth","borderColor","base","FunctionEditor","funcName","rangeMin","rangeMax","strokeDasharray","strokeWidth","LabelEditor","coordX","coordY","ArrowPicker","LineEditor","startX","startY","endX","endY","arrows","ConstraintEditor","constraint","snap","constraintFn","constraintXMin","constraintXMax","constraintYMin","constraintYMax","MovableLineEditor","startSubscript","endSubscript","MovablePointEditor","varSubscript","ParametricEditor","y","PointEditor","RectangleEditor","unescapeMathMode","defaultOptionsByElementType","point","function","parametric","rectangle","InteractionEditor","usedVarSubscripts","_getAllVarSubscripts","elements","usedFunctionNames","_getAllFunctionNames","movableLines","tickStep","_updateGraphProps","_moveElementUp","_moveElementDown","_deleteElement","_addNewElement","elementType","newElement","random","nextSubscript","nextLetter","fromCharCode","charCodeAt","newElements","interactionLogic","LabeledRow","labelSize","css","spaceEnd","spaceStart","AngleAnswerOptions","showAngles","allowReflexAngles","exact","congruent","UNLIMITED","parsePointCount","points","pointsCountOptions","GraphPointsCountSelector","numPoints","GraphTypeSelector","graphType","exponential","linear","logarithm","quadratic","sinusoid","tangent","angle","circle","polygon","ray","vector","InteractiveGraphCorrectAnswer","fontSize","paddingInline","InteractiveGraphDescription","ariaLabelValue","ariaDescriptionValue","setIsOpen","descriptionTextAreaId","fullGraphAriaLabel","fullGraphAriaDescription","AxisArrowSwitches","showAxisArrows","xMin","yMin","xMax","yMax","AxisTickSwitches","showAxisTicks","InteractiveGraphSettings","labelLocation","showAxisArrowsSwitches","showAxisTicksSwitches","labelXRef","labelYRef","allowPiTruncation","changeShowAxisArrows","changeShowAxisTicks","changeStepsBasedOnRange","backgroundUrlInput","bgUrlRef","protractorSection","checkboxRow","nameAndValue","axis","newShowAxisArrows","newShowAxisTicks","scaleX","gridStepValue","scaleY","badgeSpacingStyle","badgeLabelStyle","font","regular","getAccessibilityAttributes","graphId","elementArias","getElementById","querySelectorAll","elementAttributes","ariaDescribedby","descriptions","descriptionString","roleOrTag","tagName","classList","attributes","SRTree","showTags","ol","treeList","aria","StatusBadge","showBorder","indentList","NeutralBadge","InteractiveGraphSRTree","lockedFigures","setIsExpanded","setShowTags","setElementArias","switchRow","Spring","POLYGON_SIDES_OPTIONS","unlimited","PolygonAnswerOptions","numSides","coords","startCoords","snapTo","grid","angles","sides","showSides","approx","similar","segmentCountOptions","SegmentCountSelector","numSegments","ShowPointLabelsToggle","showPointLabels","pointLabels","hasAtLeastOneLabel","VectorAnswerOptions","LockedFigureSelect","figureTypes","ActionMenu","menuText","addElementSelect","figureType","ActionItem","convertDegreesToRadians","convertRadiansToDegrees","AngleInput","handleAngleChange","textField","xxxLarge_64","textFieldStyle","size_640","errorFieldStyle","CoordinatePairInput","coord","labelClassName","xLabel","yLabel","handleCoordChange","coordIndex","newCoords","ColorSwatch","filled","colorSwatch","lockedFigureColors","outline","inner","ColorSelect","blue","gold","green","grayH","purple","pink","red","EllipseSwatch","fillStyle","strokeStyle","innerCircle","lockedFigureFillStyles","xLarge_32","lineStrokeStyleOptions","solid","dashed","fillableStrokeStyleOptions","LineStrokeSelect","lineStrokeSelect","LineWeightSelect","lineWeightSelect","thin","thick","LockedFigureAria","getPrepopulatedAriaLabel","onChangeProps","ariaLabelId","loading","setLoading","rows","resizeType","pencilCircle","LockedFigureSettingsActions","caretDoubleUpIcon","caretUpIcon","caretDownIcon","caretDoubleDownIcon","spaceUnderStyle","LockedLabelSettings","accordionHeaderContainer","textLabel","colorRow","newColor","sizeLabel","small","large","generateLockedFigureAppearanceDescription","convertedColor","weightString","strokeDescription","baseAppearance","generateSpokenMathDetails","mathString","engine","SpeechRuleEngine","setup","convertedSpeech","parsedContent","mathOnlyParser","piece","texToSpeech","joinLabelsAsSpokenMath","spokenLabelPromises","spokenLabels","labelContainerStyle","LockedEllipseSettings","radius","visiblelabel","spokenCenterX","spokenCenterY","spokenRotation","isCircle","ellipseAppearance","handleCenterChange","newCoord","xOffset","yOffset","handleColorChange","handleLabelChange","updatedLabel","labelIndex","updatedLabels","handleLabelRemove","spaceUnder","newAngle","truncatedWidth","fillLabel","white","translucent","horizontalRule","sectionTop","dividerTight","_createElement","newLabel","plusCircle","getDefaultFigureForType","addButton","LineSwatch","lineStyle","lineSwatch","examples","polynomial","trigonometric","LockedFunctionSettings","lineColor","equation","directionalAxis","domain","equationPrefix","lineLabel","getDomainStringValues","domainEntries","setDomainEntries","exampleCategory","setExampleCategory","functionAppearance","handlePropChange","property","updatedProps","handleDomainChange","limitIndex","newValueString","newDomainEntries","newDomain","parseFloat","exampleContent","rowSpace","axisRow","dropdownLabel","axisMenu","flexGrow","domainRow","domainMin","domainMax","paddingBottom","size_120","flexWrap","exampleContainer","example","ExampleItem","category","pasteEquationFn","exampleId","exampleRow","autoPasteIcon","aria-describedby","copyPasteButton","copyIcon","writeText","exampleContentIndent","midpoint","vec","add","LockedPointSettings","headerLabel","pointColor","showPoint","onTogglePoint","isDefiningPoint","spokenX","spokenY","pointAppearance","marginLeft","marginRight","lengthZeroStr","LockedLineSettings","showPoint1","showPoint2","point1","point2","capitalizeKind","isInvalid","kvector","equal","point1VisibleLabel","point2VisibleLabel","spokenPoint1X","spokenPoint1Y","spokenPoint2X","spokenPoint2Y","lineAppearance","handleChangePoint","newPointProps","newPoints","oldMidpoint","newMidpoint","offset","newLabels","kindLabel","errorText","offsetPerLabel","PolygonSwatch","innerSquare","pointAccordionContainerStyle","pointAccordionPanelStyle","LockedPolygonSettings","showVertices","pointsList","polygonAppearance","handlePolygonMove","movement","pointLabel","size_160","minusCircle","polygonActionsContainer","movementButtonsContainer","arrowFatUp","arrowFatLeft","mirrorInRtl","arrowFatDown","arrowFatRight","lengthErrorMessage","coordsAccordionContainerStyle","coordsAccordionPanelStyle","LockedVectorSettings","tail","tip","spokenTailX","spokenTailY","spokenTipX","spokenTipY","vectorAppearance","sub","LockedFigureSettings","LockedFiguresSection","collapsedStateArray","figures","expandedStates","setExpandedStates","addLockedFigure","newFigure","moveLockedFigure","newFigures","newExpandedStates","removedFigure","removeLockedFigure","changeProps","figureProps","toggleExpanded","allCollapsed","buttonLabel","showExpandButton","figure","newExpanded","buttonContainer","CoordInput","onPointLabelChange","tile","labelPrefix","labelField","pointLabelField","tileRow","StartCoordsAbsoluteValue","onChangePointLabels","vertex","arm","updatePointLabel","next","getClockwiseAngle","getStartCoords","getDefaultGraphStartCoords","getAbsoluteValueCoords","getLineCoords","getVectorCoords","getSegmentCoords","getLinearSystemCoords","getCircleCoords","subtract","radiusPoint","getSinusoidCoords","asymptote","getExponentialCoords","getTangentCoords","getQuadraticCoords","getPointCoords","getPolygonCoords","getAngleCoords","getLogarithmCoords","getSinusoidEquation","amplitude","angularFrequency","PI","phase","verticalOffset","toFixed","getTangentEquation","getQuadraticEquation","p3","denom","getLogarithmEquation","ratio","bExp","log","aExp","exp","getAngleEquation","roundedAngle","shouldShowStartCoordsUI","StartCoordsAngle","equationSection","equationBody","xsmall","StartCoordsCircle","handleRadiusChange","AsymptoteInput","StartCoordsExponential","newY","StartCoordsLine","StartCoordsLogarithm","newX","StartCoordsMultiline","graphName","flatIndex","totalPoints","coordPair","StartCoordsPoint","newStartCoords","StartCoordsQuadratic","StartCoordsSinusoid","StartCoordsTangent","StartCoordsVector","StartCoordsSettingsInner","absoluteValueCoords","linearCoords","multiLineCoords","circleCoords","sinusoidCoords","defaultStartCoords","currentStartCoords","defaultLogarithmCoords","currentLogarithmCoords","vectorCoords","tangentCoords","quadraticCoords","pointCoords","angleCoords","StartCoordsSettings","resetButton","toTrio","toPair","reshapePointLabelsForGraphType","nextGraph","nextCorrect","reshaped","InteractiveGraph","InteractiveGraphWidget","InteractiveGraphEditor","getUserInput","getGridStep","defaultBoxSize","snapStepFromGridStep","newGraph","mergeGraphs","Id","changeShowPointLabels","changeStartCoords","changePointLabels","withShowPointLabels","newCorrect","asymptoteY","minY","maxY","asymptoteX","minX","maxX","interactiveGraphLogic","gray68","gray41","FormWrappedTextField","forwardedRef","grow","shrink","focusBorderColor","onSubmit","leftSideIcon","labelMediumInputText","allProps","extraStyles","spanStyle","flexShrink","defaultBackground","borderColorStyle","outer","wrappedIcon","inputBase","labelMediumInputBase","disableDefault","handleFocus","fontFamily","lineHeight","boxShadow","boxSizing","paddingBlock","AddAnswer","addAnswerContent","aria-hidden","Answer","removeButtonContent","minusCircleIcon","AnswerChoices","HoverBehavior","handleClick","onMouseDown","handleMouseDown","onMouseEnter","handleMouseEnter","onMouseLeave","handleMouseLeave","onTouchStart","handleTouchStart","onTouchEnd","handleTouchEnd","shouldUpdate","waitingForClick","hovered","focusFlag","startHovered","onChangeCheckboxNoop","appearDisabled","dataTestId","checkedColor","data-checked","svg","sizeWithPadding","viewBox","g","fillRule","rect","rx","knockout","stroke","defaultCursor","verticalAlign","insetBlockStart","insetInlineStart","appearance","Behavior","multipleAnswers","hideChoicesFromInstructions","preferredPopoverDirection","optionsList","selectLabel","Marker","showDropdown","setShowDropdown","openDropdown","updateAnswers","filteredAnswers","handleToggleAnswer","Popover","opened","onClose","dismissEnabled","PopoverContentCore","dropdownBody","labelContainer","hr","dividerHorizontal","Listbox","selectionType","marker","markerWithAnswers","markerSelected","size_280","size_200","size_020","QuestionMarkers","openDropdownForMarkerIndices","indices","_markers","imageWidth","imageHeight","markers","staticUrl","subtitle","markersCanvas","maxBlockSize","img","getRealImageUrl","onDoubleClick","handleImageDoubleClick","round","clientX","clientY","SelectImage","imageRow","minInlineSize","LabelImageEditor","coordsToMarkers","newIndices","hasOwnProperty","_questionMarkers","imageSelected","handleImageChange","handleAltChange","handleMarkersChange","handleChoicesChange","handleBehaviorChange","numNoAnswers","numNoLabels","labelImageLogic","MatcherEditor","defaultValue","onLabelChange","orderMatters","matcherLogic","Matrix","MatrixWidget","MAX_BOARD_SIZE","MatrixEditor","matrixBoardSize","suffix","matrixProps","cell","onMatrixBoardSizeChange","useArrowKeys","matrixSize","getMatrixSize","col","matrixLogic","defaultImage","MeasurerEditor","_changeUrl","_changeTop","_changeLeft","rulerPixels","rulerLength","_changeImage","newTop","newLeft","subProp","measurerLogic","bound","gt","lt","EN_DASH","NumberLineEditor","labelRange","divisionRange","numDivisions","snapDivisions","isTickCtrl","labelStyleEditorButtons","correctRel","onChangeRelation","correctX","labelStyle","onNumChange","checkValidity","knumber","isInteger","initialX","onRangeChange","onLabelRangeChange","onLabelStyleChange","labelTicks","onNumDivisionsChange","onTickStepChange","onDivisionRangeChange","opts","divRange","isInequality","numberLineLogic","NORMAL","AUTO","HORIZONTAL","VERTICAL","OrdererEditor","correctOptions","onOptionsChange","otherOptions","onLayoutChange","onHeightChange","whichOptions","changedCards","toCard","mergeCards","ordererLogic","PhetSimulationEditor","makeSafeUrl","phetSimulationLogic","Plotter","PlotterWidget","STARTING","CORRECT","editingStates","padArray","editorDefaults","snapsPerLine","formatNumber","PlotterEditor","UNSAFE_componentWillMount","fetchPic","picUrl","editing","setFromScale","canChangeSnaps","plotterProps","picSize","picBoxHeight","plotDimensions","labelInterval","starting","plotterPlotTypes","changeType","handleChangeTickStep","handleChangeRange","setCategoriesFromScale","changeLabelInterval","changePicUrl","pic","changeCategories","changeScale","changeMax","changeSnaps","changeEditing","loadedUrl","Image","onload","oldScale","plotterLogic","validateOptions","PythonProgramEditor","pythonProgramLogic","RadioImageEditor","imageAltText","onSave","imageUrlTextAreaId","imageAltTextTextAreaId","stateImageUrl","setStateImageUrl","dimensions","setDimensions","cancelled","fetchDimensions","alignSelf","getMovedChoices","hasNoneOfTheAbove","newChoices","removedChoice","removedNoneOfTheAbove","setImageProxyFromMarkdownContent","markdownContent","parsedMarkdown","altText","proxiedContent","originalPattern","patternIndex","setMarkdownContentFromImageProxy","RadioOptionContentAndImageEditor","isNoneOfTheAbove","contentTextAreaId","textAreaRef","setProxiedContent","setImages","parsedImages","handleAddImage","handleDeleteImage","newProxiedContent","handleUpdateImage","newImages","handlePaste","imageURL","clipboardData","handleDeleteImageConfirmation","RadioOptionSettingsActions","showDelete","showMove","radioOptionActionsContainer","boxStyle","size_560","roundStyle","squareStyle","radius_040","correctStrongStyle","knockoutForegroundStyle","RadioStatusPill","multipleSelect","checkIcon","RadioOptionSettings","onRationaleChange","rationale","rationaleTextAreaId","contentEditorRef","statusRow","RadioEditor","countChoices","numCorrect","deriveNumCorrect","needsIdUpdate","updatedChoices","ensureValidIds","deselectEnabled","onMultipleSelectChange","onCountChoicesChange","getChoiceRef","handleMove","choiceRefs","choiceId","isMultipleSelect","generateChoiceId","newCheckedList","newRationale","deleted","noneOfTheAbove","newChoice","addIndex","firstChoice","radioLogic","cardInputStyle","CardEditor","onMoveUp","onMoveDown","cardNumber","card","arrowUp","arrowDown","trash","minCards","sorterLogic","layoutOptions","horizontal","vertical","SorterEditor","onCardChange","onAddCard","SORTER_MAX_CARDS","onMoveCard","newIndex","onDeleteCard","cards","addCard","newLayout","contextLabel","SORTER_MAX_HORIZONTAL_CARDS","Table","TableWidget","TableEditor","tableProps","headers","columns","editableHeaders","numberOfColumns","onSizeInput","numRawRows","numRawColumns","oldColumns","oldRows","stringArrayOfSize","fixColumnSizing","number","tableLogic","KA_VIDEO_URL","getSlugFromUrl","VideoSettings","inputValue","setInputValue","location","handleUrlChange","VideoEditor","videoLogic","categorizer","dropdown","grapher","interaction","matcher","matrix","measurer","orderer","plotter","radio","sorter","table","video","registerEditors","AllEditors","registerWidgets","replaceDeprecatedWidgets","replaceDeprecatedEditors"],"mappings":"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","x_google_ignoreList":[1,2,3]}